trans-coord-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

trans-coord/graveyard/wwwes .symlinks Makefile ...


From: Pavel Kharitonov
Subject: trans-coord/graveyard/wwwes .symlinks Makefile ...
Date: Sat, 03 Mar 2012 06:15:20 +0000

CVSROOT:        /sources/trans-coord
Module name:    trans-coord
Changes by:     Pavel Kharitonov <ineiev>       12/03/03 06:15:14

Added files:
        graveyard/wwwes: .symlinks Makefile buscar.html cabecera.html 
                         enlaces.html estructura.html 
                         expertos-soft-articulo.html faq.html gnues.css 
                         gnues.xsl incidencias.html index.html 
                         listasdecorreo.html listasdecorreo.xhtml 
                         normas_estilo.html normas_estilo.xhtml pie.html 
                         plantilla.html plantilla.xhtml 
        graveyard/wwwes/Images: estructura.png fsfe-logo.png 
                                gnu-head.jpg gnues.png pix.png ul.png 
                                ur.png 
        graveyard/wwwes/Licencias: .patente.html.swo .symlinks bsd.html 
                                   bsd.xhtml contracarta.html 
                                   contracarta.xhtml copyleft.html 
                                   copyleft.xhtml fdles.html fdles.xhtml 
                                   gples.html gples.xhtml gplytu.html 
                                   gplytu.xhtml index.html ip.html 
                                   ip.xhtml maquet~1.pdf maquet~2.pdf 
                                   nejtak.html nejtak.xhtml pag1a.pdf 
                                   pag1b.pdf pag2a.pdf pag2b.pdf 
                                   pag3a.pdf pag3b.pdf pag4a.pdf 
                                   pag4b.pdf pagano.html pagano.xhtml 
                                   patente.html patente.xhtml 
                                   poster.html softlibr.html 
                                   solicitudes.html solicitudes.xhtml 
                                   viol.html 
        graveyard/wwwes/Licencias/dibus: billete_color.jpg linux.jpg 
                                         lupa.jpg mundo.jpg puzzle.jpg 
                                         sharesoft_color.jpg 
                                         softlibre.jpg 
        graveyard/wwwes/Opinion: index.html 
        graveyard/wwwes/Opinion/Empresa: empresa1.html index.html 
        graveyard/wwwes/Opinion/Filosofia: glib.html index.html 
        graveyard/wwwes/Opinion/Legislacion: index.html pagano.html 
        graveyard/wwwes/Opinion/Tecnologia: formprop.html index.html 
        graveyard/wwwes/Prensa: index.html 
        graveyard/wwwes/Proyectos: comenzarproyecto.html form-test.html 
                                   index.html index2.html normas.html 
                                   proyectox.html proyhuerfanos.html 
                                   solicitudes.html 
        graveyard/wwwes/Proyectos/Acm: index-en.html index.html 
        graveyard/wwwes/Proyectos/Acm/imagenes: acm.jpg 
        graveyard/wwwes/Proyectos/Gtt: acerca.html index.html 
        graveyard/wwwes/Proyectos/Gtt/en: index.html 
        graveyard/wwwes/Proyectos/Gtt/images: logo.png 
        graveyard/wwwes/Proyectos/Mecagtk: LICENCIA.txt devel.html 
                                           download.html eiffel.html 
                                           fuentes.tgz hora.c.html 
                                           hora.h.html indel.cosa 
                                           index.html main.c.html 
                                           matriz.c.html matriz.h.html 
                                           mecagtk-0.1.2.tar.gz 
                                           mecagtk.gif mecagtk.html 
                                           mecagtk1.tgz src.html.html 
        graveyard/wwwes/Proyectos/Mecagtk/OpenSource: acknow.html 
                                                      anebay.html 
                                                      appa.html 
                                                      appb.html 
                                                      authors.html 
                                                      behlendorf.gif 
                                                      bradner.gif 
                                                      brian.html 
                                                      
catalog_header_buttons.gif 
                                                      copyright.html 
                                                      hamerly2.gif 
                                                      ietf.html 
                                                      intro.html 
                                                      kirkmck.html 
                                                      larry.html 
                                                      linus.html 
                                                      mckusick.gif 
                                                      netrev.html 
                                                      opensources.s.gif 
                                                      opensrc.css 
                                                      opensrc.css.1 
                                                      oreilly.gif 
                                                      ose.01.gif 
                                                      ose.02.gif 
                                                      ose.03.gif 
                                                      ose.04.gif 
                                                      ose.05.gif 
                                                      ose.06.gif 
                                                      ose.07.gif 
                                                      ose.08.gif 
                                                      ose.09.gif 
                                                      ose.10.gif 
                                                      ose.11.gif 
                                                      ose.12.gif 
                                                      ose.14.gif 
                                                      ose.15.gif 
                                                      ose.16.gif 
                                                      ose.17.gif 
                                                      ose.18.gif 
                                                      ose.19.gif 
                                                      ose.20.gif 
                                                      ose.21.gif 
                                                      ose.22.gif 
                                                      ose.23.gif 
                                                      ose.24.gif 
                                                      ose.25.gif 
                                                      ose.26.gif 
                                                      ose.27.gif 
                                                      ose.28.gif 
                                                      ose.29.gif 
                                                      ose.30.gif 
                                                      ose.31.gif 
                                                      ose.32.gif 
                                                      ose.33.gif 
                                                      ose.34.gif 
                                                      ose.35.gif 
                                                      ose.36.gif 
                                                      ose.37.gif 
                                                      ose.38.gif 
                                                      ose.39.gif 
                                                      ose.40.gif 
                                                      ose.41.gif 
                                                      ose.42.gif 
                                                      ose.43.gif 
                                                      ose.44.gif 
                                                      ose.45.gif 
                                                      ose.46.gif 
                                                      ose.47.gif 
                                                      ose.48.gif 
                                                      ose.49.gif 
                                                      ose.50.gif 
                                                      paquin.gif 
                                                      perens.html 
                                                      perens2.gif 
                                                      raymond.gif 
                                                      raymond.html 
                                                      raymond2.html 
                                                      stallman.gif 
                                                      stallman.html 
                                                      tiemann.gif 
                                                      tiemans.html 
                                                      tim.html toc.html 
                                                      torvalds.gif 
                                                      vixie.gif 
                                                      vixie.html 
                                                      wall.gif 
                                                      young.html 
                                                      young2.gif 
        graveyard/wwwes/Proyectos/Mecagtk/doc_devel: doxygen.css 
                                                     doxygen.gif 
                                                     files.html 
                                                     globals.html 
                                                     index.html 
                                                     interfaz_c-source.html 
                                                     interfaz_c.html 
                                                     lectura_c-source.html 
                                                     lectura_c.html 
                                                     main_c-source.html 
                                                     main_c.html 
                                                     null.gif 
                                                     
retrollamadas_c-source.html 
                                                     retrollamadas_c.html 
                                                     suporte_c-source.html 
                                                     suporte_c.html 
        graveyard/wwwes/Proyectos/Mecagtk/miweb: LICENCIA.txt 
                                                 OpenSource-doc.tgz 
                                                 devel.html 
                                                 download.html 
                                                 eiffel.html fuentes.tgz 
                                                 hora.c.html hora.h.html 
                                                 index.html 
                                                 index.old.html 
                                                 main.c.html matrix 
                                                 matriz.c.html 
                                                 matriz.h.html 
                                                 mecagtk.gif 
                                                 mecagtk.html 
                                                 poweredby.png 
                                                 src.html.html 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/doc: LICENCIA.txt 
                                                     devel.html 
                                                     fuentes.tgz 
                                                     hora.c.html 
                                                     hora.h.html 
                                                     main.c.html matrix 
                                                     matriz.c.html 
                                                     matriz.h.html 
                                                     mecagtk.gif 
                                                     mecagtk.html 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/graf: captura1.jpg 
                                                      captura2.jpg 
                                                      captura3.jpg 
                                                      cool.gif 
                                                      fondotit.gif 
                                                      hechogimp.gif 
                                                      iractivo.gif 
                                                      irinactivo.gif 
                                                      irpresabj.gif 
                                                      linux-inside.xbm 
                                                      logo.gif mano.gif 
                                                      mono.gif pollo.gif 
                                                      principal.gif 
                                                      users.gif 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics: cool.gif 
                                                              fondomenu.gif 
                                                              fondotit.gif 
                                                              hechogimp.gif 
                                                              iractivo.gif 
                                                              irinactivo.gif 
                                                              irpresabj.gif 
                                                              linux-inside.xbm 
                                                              logo.gif 
                                                              pollo.gif 
                                                              principal.gif 
                                                              users.gif 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html: autor.html 
                                                      consulta.html 
                                                      cuerpo.html 
                                                      error.html 
                                                      iractivo.gif 
                                                      menu.html 
                                                      titulo.html 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/bash: bashref.html 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es: COPYING 
                                                         InicioTutorial 
                                                         index2.html 
                                                         tutorial.html 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples: 
                                                                  COPYING 
                                                                  LICENCIA.TXT 
                                                                  issue.gz 
                                                                  leeme.txt 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO: 
                                                                            
ExampleIssue.txt 
                                                                            
LEEME 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts: 
                                                                          
AA-LEEME.TXT 
                                                                          
CopiaSeguridad.tar.gz 
                                                                          
Scripts.tar.gz 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/bins: 
                                                                               
binarios.tar.gz 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/src: 
                                                                              
fuentes.tar.bz2 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files: 
                                                                     
CompilaNucleo 
                                                                     Fondo.gif 
                                                                     PSafu.txt 
                                                                     PSx.txt 
                                                                     PSxa.txt 
                                                                     PSxaf.txt 
                                                                     
Passwd.sample.txt 
                                                                     
RPMgestion.html 
                                                                     
WebLinuxZone.html 
                                                                     
aPROBLEMAS.html 
                                                                     
amos_files.gif 
                                                                     
bash_profile.sample.txt 
                                                                     bashrc 
                                                                     
bashrc.sample.txt 
                                                                     
coment.html 
                                                                     
comodines.htm 
                                                                     
conexinet.gif 
                                                                     
conexinet2.gif 
                                                                     
conexion.html 
                                                                     
contenidos.html 
                                                                     crond.gif 
                                                                     
crontab.sample.txt 
                                                                     email.gif 
                                                                     
exampleWordPerfect.kdelnk 
                                                                     
exercise.html 
                                                                     
exports.sample.txt 
                                                                     
fondo_javi.gif 
                                                                     
fstab.sample.txt 
                                                                     
fstab.sample.usersmount.txt 
                                                                     
glosary.html 
                                                                     
gracias_a.html 
                                                                     
gransistema.gif 
                                                                     
gransistema.html 
                                                                     
gransistema.txt 
                                                                     
group.sample.txt 
                                                                     host.conf 
                                                                     hosts 
                                                                     
hosts.allow 
                                                                     hosts.deny 
                                                                     inetd.conf 
                                                                     
jerarquia_sample.txt 
                                                                     
kernelYsonido.html 
                                                                     
lilo.conf.sample.txt 
                                                                     
linux1.html 
                                                                     
linux2.html 
                                                                     
linux3.html 
                                                                     
linux4.html 
                                                                     
linux5.html 
                                                                     
linux6.html 
                                                                     
linux7.html 
                                                                     
linux8.html 
                                                                     linux9.htm 
                                                                     
login_img.gif 
                                                                     logo.jpg 
                                                                     logoLT.gif 
                                                                     
ls_conYsin_alias.gif 
                                                                     
lynx-cfg.gif 
                                                                     
lynxhow1.html 
                                                                     
mc-mio-1.gif 
                                                                     
mc-mio-2.gif 
                                                                     
mkbootdisk.jpg 
                                                                     
moreinfo.html 
                                                                     msdos.sys 
                                                                     
mtab.sample.carga 
                                                                     
mtab.sample.txt 
                                                                     
muchasgracias.html 
                                                                     
network-cfg-2.gif 
                                                                     
network-cfg.gif 
                                                                     nuevo.html 
                                                                     
onlyfile.html 
                                                                     
parallel-printer.gif 
                                                                     paso1.gif 
                                                                     paso2.gif 
                                                                     paso3.gif 
                                                                     paso4.gif 
                                                                     paso5.gif 
                                                                     paso6.gif 
                                                                     printcap 
                                                                     profile 
                                                                     
quitlinux.html 
                                                                     
rawrite.gif 
                                                                     
rawrite.html 
                                                                     
rc.local.sample.txt 
                                                                     
rc.sample.txt 
                                                                     
rc.sysinit.sample.txt 
                                                                     services 
                                                                     
setuid.html 
                                                                     
sobre_tutorial.html 
                                                                     
sonido.html 
                                                                     
stutorial2.html 
                                                                     
translate.html 
                                                                     
trucos.html 
                                                                     
webdirs.html 
                                                                     
x-window.html 
                                                                     
x-window2.html 
                                                                     
xadduser.gif 
                                                                     xf86s1.gif 
                                                                     xf86s2.gif 
                                                                     xf86s3.gif 
                                                                     
zMayores65.html 
        
graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone:
 
                                                                                
             basico.htm 
                                                                                
             emuladores.gif 
                                                                                
             espionaje.htm 
                                                                                
             firewall.htm 
                                                                                
             guerra.htm 
                                                                                
             hack.htm 
                                                                                
             index.htm 
                                                                                
             infovia.htm 
                                                                                
             linux.htm 
                                                                                
             logistica.htm 
                                                                                
             medio.htm 
                                                                                
             modem.htm 
                                                                                
             pagina.htm 
                                                                                
             seguridad.htm 
                                                                                
             shell.htm 
                                                                                
             tcp_wrappers.htm 
        
graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz: 
                                                                                
       makina.sh.gz 
                                                                                
       setserial.sh.gz 
                                                                                
       usuarios.sh.gz 
        
graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt: 
                                                                                
       dosemu.txt 
                                                                                
       kde.txt 
                                                                                
       kdm.txt 
                                                                                
       lilo.txt 
                                                                                
       modem.txt 
                                                                                
       pppd-ip.txt 
                                                                                
       pppd.txt 
                                                                                
       wine.txt 
        
graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir: 
                                                                                
  Lista_xfree.html 
                                                                                
  XF86Config1.ejemplo 
                                                                                
  XF86Config2.ejemplo 
                                                                                
  XF86Config3.ejemplo 
                                                                                
  readme 
                                                                                
  relnotes 
                                                                                
  x9set.txt 
                                                                                
  xbin.txt 
                                                                                
  xcfg.txt 
                                                                                
  xdoc.txt 
                                                                                
  xf100.txt 
                                                                                
  xfcyr.txt 
                                                                                
  xfnon.txt 
                                                                                
  xfnts.txt 
                                                                                
  xfscl.txt 
                                                                                
  xfsrv.txt 
                                                                                
  xhtml.txt 
                                                                                
  xjdoc.txt 
                                                                                
  xjset.txt 
                                                                                
  xlib.txt 
                                                                                
  xlk98.txt 
                                                                                
  xlkit.txt 
                                                                                
  xman.txt 
                                                                                
  xnets.txt 
                                                                                
  xprog.txt 
                                                                                
  xprt.txt 
                                                                                
  xps.txt 
                                                                                
  xset.txt 
                                                                                
  xshlib.txt 
                                                                                
  xvfb.txt 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk: gtk_tut-1.html 
                                                          gtk_tut-10.html 
                                                          gtk_tut-11.html 
                                                          gtk_tut-12.html 
                                                          gtk_tut-13.html 
                                                          gtk_tut-14.html 
                                                          gtk_tut-15.html 
                                                          gtk_tut-16.html 
                                                          gtk_tut-17.html 
                                                          gtk_tut-18.html 
                                                          gtk_tut-19.html 
                                                          gtk_tut-2.html 
                                                          gtk_tut-20.html 
                                                          gtk_tut-21.html 
                                                          gtk_tut-22.html 
                                                          gtk_tut-23.html 
                                                          gtk_tut-24.html 
                                                          gtk_tut-25.html 
                                                          gtk_tut-26.html 
                                                          gtk_tut-27.html 
                                                          gtk_tut-28.html 
                                                          gtk_tut-29.html 
                                                          gtk_tut-3.html 
                                                          gtk_tut-30.html 
                                                          gtk_tut-31.html 
                                                          gtk_tut-4.html 
                                                          gtk_tut-5.html 
                                                          gtk_tut-6.html 
                                                          gtk_tut-7.html 
                                                          gtk_tut-8.html 
                                                          gtk_tut-9.html 
                                                          gtk_tut.html 
                                                          gtk_tut_packbox1.gif 
                                                          gtk_tut_packbox2.gif 
                                                          gtk_tut_table.gif 
        graveyard/wwwes/Proyectos/Mecagtk/miweb/soft: 
                                                      mecagtk-0.1.2.tar.gz 
                                                      mecagtk1.tgz 
        graveyard/wwwes/Proyectos/Mecagtk/soft: mecagtk-0.1.2.tar.gz 
                                                mecagtk-0.2.GTK.tar.gz 
                                                mecagtk-devel-0.2.GTK.tgz 
                                                mecagtk1.tgz 
        graveyard/wwwes/Proyectos/Nemesis: index.html nmwbie1.jpg 
                                           nmwbie2.jpg nmwbie3.jpg 
                                           nmwbie4.jpg nmwbie5.jpg 
                                           nmwbmoz1.jpg nmwbmoz2.jpg 
                                           nmwbmoz3.jpg 
        graveyard/wwwes/Proyectos/Nemesis/archives: readme.txt 
        graveyard/wwwes/Proyectos/Telejano: index.html 
        graveyard/wwwes/Proyectos/Uca: index.html 
        graveyard/wwwes/Proyectos/ediv: index.html 
        graveyard/wwwes/Traducciones: colab.html docs.html index.html 
                                      sugs.html test.html trads.html 
        graveyard/wwwes/Traducciones/Images: logotrad.jpg 
        graveyard/wwwes/Voluntarios: index.html webmasters.html 
        graveyard/wwwes/eventos: .symlinks eventos.html eventos.xhtml 
                                 index.html plantilla.html 
                                 plantilla.xhtml solicitudes.html 
                                 solicitudes.xhtml 
        graveyard/wwwes/eventos/irc: .symlinks inauguracion_log.html 
                                     index.html 
        graveyard/wwwes/lengualibre: contactar.html corpus.html 
                                     descargas.html documento_rae.html 
                                     documentos.html enlaces.html 
                                     estilos.css gnu-head_small.jpg 
                                     index.html inicio.html 
                                     legal_lengualibre.html 
                                     lengualibre_logo.jpg 
                                     lengualibre_logo_enano.jpg 
                                     licencia.fdl.es.html 
                                     manifiesto_lengualibre.html 
                                     manifiesto_lengualibre_0.3.pdf.zip 
                                     noticias.html 
        graveyard/wwwes/noticias: .symlinks 20020604.html 20020604.xhtml 
                                  20020707.html 20020707.xhtml 
                                  20020826.html 20020826.xhtml 
                                  20020828.html 20020828.xhtml 
                                  20020908.html 20020908.xhtml 
                                  20021013.html 20021013.xhtml 
                                  20030115.html 20030115.xhtml 
                                  20030215.html 20030215.xhtml 
                                  20030220.html 20030220.xhtml 
                                  20030304.html 20030304.xhtml 
                                  plantilla-noticias.html 
                                  plantilla-noticias.xhtml 
        graveyard/wwwes/proyecto: .symlinks gnu-linux-faq.html 
                                  gnu-linux-faq.xhtml 
        graveyard/wwwes/rmsmeeting2003: cartel-web.jpg index.html 
        graveyard/wwwes/software: .symlinks index.html 

Log message:
        Copied from www

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Makefile?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/buscar.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/cabecera.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/enlaces.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/estructura.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/expertos-soft-articulo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/faq.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/gnues.css?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/gnues.xsl?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/incidencias.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/listasdecorreo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/listasdecorreo.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/normas_estilo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/normas_estilo.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/pie.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/plantilla.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/plantilla.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/estructura.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/fsfe-logo.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/gnu-head.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/gnues.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/pix.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/ul.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Images/ur.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/.patente.html.swo?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/bsd.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/bsd.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/contracarta.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/contracarta.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/copyleft.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/copyleft.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/fdles.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/fdles.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/gples.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/gples.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/gplytu.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/gplytu.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/ip.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/ip.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/maquet%1261.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/maquet%1262.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/nejtak.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/nejtak.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag1a.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag1b.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag2a.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag2b.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag3a.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag3b.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag4a.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pag4b.pdf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pagano.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/pagano.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/patente.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/patente.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/poster.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/softlibr.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/solicitudes.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/solicitudes.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/viol.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/billete_color.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/linux.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/lupa.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/mundo.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/puzzle.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/sharesoft_color.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Licencias/dibus/softlibre.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Empresa/empresa1.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Empresa/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Filosofia/glib.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Filosofia/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Legislacion/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Legislacion/pagano.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Tecnologia/formprop.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Opinion/Tecnologia/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Prensa/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/comenzarproyecto.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/form-test.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/index2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/normas.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/proyectox.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/proyhuerfanos.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/solicitudes.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Acm/index-en.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Acm/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Acm/imagenes/acm.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Gtt/acerca.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Gtt/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Gtt/en/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Gtt/images/logo.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/LICENCIA.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/devel.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/download.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/eiffel.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/fuentes.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/hora.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/hora.h.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/indel.cosa?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/main.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/matriz.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/matriz.h.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/mecagtk-0.1.2.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/mecagtk.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/mecagtk.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/mecagtk1.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/src.html.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/acknow.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/anebay.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/appa.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/appb.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/authors.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/behlendorf.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/bradner.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/brian.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/catalog_header_buttons.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/copyright.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/hamerly2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ietf.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/intro.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/kirkmck.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/larry.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/linus.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/mckusick.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/netrev.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/opensources.s.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/opensrc.css?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/opensrc.css.1?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/oreilly.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.01.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.02.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.03.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.04.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.05.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.06.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.07.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.08.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.09.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.10.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.11.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.12.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.14.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.15.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.16.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.17.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.18.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.19.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.20.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.21.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.22.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.23.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.24.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.25.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.26.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.27.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.28.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.29.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.30.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.31.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.32.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.33.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.34.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.35.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.36.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.37.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.38.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.39.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.40.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.41.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.42.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.43.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.44.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.45.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.46.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.47.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.48.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.49.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/ose.50.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/paquin.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/perens.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/perens2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/raymond.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/raymond.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/raymond2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/stallman.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/stallman.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/tiemann.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/tiemans.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/tim.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/toc.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/torvalds.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/vixie.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/vixie.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/wall.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/young.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/OpenSource/young2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/doxygen.css?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/doxygen.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/files.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/globals.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/interfaz_c-source.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/interfaz_c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/lectura_c-source.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/lectura_c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/main_c-source.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/main_c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/null.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/retrollamadas_c-source.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/retrollamadas_c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/suporte_c-source.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/suporte_c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/LICENCIA.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/OpenSource-doc.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/devel.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/download.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/eiffel.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/fuentes.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/hora.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/hora.h.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/index.old.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/main.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/matrix?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/matriz.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/matriz.h.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/mecagtk.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/mecagtk.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/poweredby.png?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/src.html.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/LICENCIA.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/devel.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/fuentes.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/hora.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/hora.h.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/main.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/matrix?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/matriz.c.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/matriz.h.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/mecagtk.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/doc/mecagtk.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/captura1.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/captura2.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/captura3.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/cool.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/fondotit.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/hechogimp.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/iractivo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/irinactivo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/irpresabj.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/linux-inside.xbm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/logo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/mano.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/mono.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/pollo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/principal.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/users.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/cool.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/fondomenu.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/fondotit.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/hechogimp.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/iractivo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/irinactivo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/irpresabj.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/linux-inside.xbm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/logo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/pollo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/principal.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/graf/.xvpics/users.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/autor.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/consulta.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/cuerpo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/error.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/iractivo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/menu.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/titulo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/bash/bashref.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/COPYING?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/InicioTutorial?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/index2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/tutorial.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/COPYING?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/LICENCIA.TXT?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/issue.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/leeme.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/ExampleIssue.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/LEEME?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/AA-LEEME.TXT?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/CopiaSeguridad.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/Scripts.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/bins/binarios.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/Examples/scripts/src/fuentes.tar.bz2?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/CompilaNucleo?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/Fondo.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/PSafu.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/PSx.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/PSxa.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/PSxaf.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/Passwd.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/RPMgestion.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/WebLinuxZone.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/aPROBLEMAS.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/amos_files.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/bash_profile.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/coment.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/comodines.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/conexion.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/contenidos.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/crond.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/crontab.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/email.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/exampleWordPerfect.kdelnk?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/exercise.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/exports.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/fondo_javi.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.usersmount.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/glosary.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/gracias_a.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/group.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/host.conf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/hosts?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.allow?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.deny?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/inetd.conf?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/jerarquia_sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/kernelYsonido.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/lilo.conf.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux1.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux3.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux4.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux5.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux6.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux7.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux8.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linux9.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/login_img.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/logo.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/logoLT.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/ls_conYsin_alias.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/lynx-cfg.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/lynxhow1.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-1.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/mkbootdisk.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/moreinfo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/msdos.sys?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.carga?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/muchasgracias.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg-2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/nuevo.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/onlyfile.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/parallel-printer.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/paso1.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/paso2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/paso3.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/paso4.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/paso5.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/paso6.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/printcap?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/profile?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/quitlinux.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/rc.local.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sysinit.sample.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/services?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/setuid.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/sobre_tutorial.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/sonido.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/stutorial2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/translate.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/trucos.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/webdirs.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/xadduser.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s1.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s3.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/zMayores65.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/basico.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/emuladores.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/espionaje.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/firewall.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/guerra.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/hack.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/index.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/infovia.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/linux.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/logistica.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/medio.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/modem.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/pagina.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/seguridad.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/shell.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/tcp_wrappers.htm?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/makina.sh.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/setserial.sh.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/usuarios.sh.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/dosemu.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kde.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kdm.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/lilo.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/modem.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd-ip.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/wine.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/Lista_xfree.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config1.ejemplo?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config2.ejemplo?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config3.ejemplo?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/readme?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/relnotes?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/x9set.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xbin.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xcfg.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xdoc.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xf100.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfcyr.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnon.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnts.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfscl.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfsrv.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xhtml.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjdoc.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjset.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlib.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlk98.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlkit.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xman.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xnets.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprog.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprt.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xps.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xset.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xshlib.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xvfb.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-1.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-10.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-11.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-12.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-13.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-14.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-15.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-16.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-17.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-18.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-19.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-2.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-20.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-21.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-22.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-23.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-24.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-25.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-26.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-27.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-28.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-29.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-3.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-30.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-31.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-4.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-5.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-6.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-7.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-8.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-9.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox1.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox2.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_table.gif?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/soft/mecagtk-0.1.2.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/miweb/soft/mecagtk1.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/soft/mecagtk-0.1.2.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/soft/mecagtk-0.2.GTK.tar.gz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/soft/mecagtk-devel-0.2.GTK.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/soft/mecagtk1.tgz?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbie1.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbie2.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbie3.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbie4.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbie5.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbmoz1.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbmoz2.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/nmwbmoz3.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Nemesis/archives/readme.txt?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Telejano/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/Uca/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Proyectos/ediv/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/colab.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/docs.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/sugs.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/test.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/trads.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Traducciones/Images/logotrad.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Voluntarios/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/Voluntarios/webmasters.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/eventos.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/eventos.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/plantilla.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/plantilla.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/solicitudes.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/solicitudes.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/irc/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/irc/inauguracion_log.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/eventos/irc/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/contactar.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/corpus.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/descargas.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/documento_rae.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/documentos.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/enlaces.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/estilos.css?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/gnu-head_small.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/inicio.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/legal_lengualibre.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/lengualibre_logo.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/lengualibre_logo_enano.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/licencia.fdl.es.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/manifiesto_lengualibre.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/manifiesto_lengualibre_0.3.pdf.zip?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/lengualibre/noticias.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020604.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020604.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020707.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020707.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020826.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020826.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020828.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020828.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020908.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20020908.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20021013.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20021013.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030115.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030115.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030215.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030215.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030220.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030220.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030304.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/20030304.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/plantilla-noticias.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/noticias/plantilla-noticias.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/proyecto/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/proyecto/gnu-linux-faq.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/proyecto/gnu-linux-faq.xhtml?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/rmsmeeting2003/cartel-web.jpg?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/rmsmeeting2003/index.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/software/.symlinks?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/graveyard/wwwes/software/index.html?cvsroot=trans-coord&rev=1.1

Patches:
Index: .symlinks
===================================================================
RCS file: .symlinks
diff -N .symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ .symlinks   3 Mar 2012 06:13:57 -0000       1.1
@@ -0,0 +1,4 @@
+index.html index.xhtml
+listasdecorreo.xhtml listasdecorreo.html
+normas_estilo.xhtml normas_estilo.html
+plantilla.xhtml plantilla.html

Index: Makefile
===================================================================
RCS file: Makefile
diff -N Makefile
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Makefile    3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,43 @@
+# Authors: Loic Dachary <address@hidden> and Jaime Villate <address@hidden>
+# Modified for GNU Spain by Jose E. Marchesi <address@hidden>
+#
+
+
+
+XSLTPROC = sabcmd
+
+GNUES = http://www.es.gnu.org
+FSFFRANCE = http://france.fsfeurope.org
+FSFEUROPE = http://www.fsfeurope.org
+FSF       = http://www.fsf.org
+GNU       = http://www.gnu.org
+
+ECHO     = echo 
+SSH      = ssh
+
+XSLTOPTS = \
+       '$$fsffrance=$(FSFFRANCE)' \
+       '$$fsf=$(FSF)' \
+       '$$gnu=$(GNU)' \
+       '$$gnues=$(GNUES)'
+
+PAGES = $(shell find * -path "fr" -prune -o -regex '[^\.]*\.xhtml' -print | 
sed "s/xhtml$$/html/")
+
+
+all: $(PAGES)
+
+$(PAGES): %.html: %.xhtml gnues.xsl 
+       @$(ECHO) "Building $@ ..."; \
+       path=$< ; \
+       base=`expr $$path : '\(.*\).xhtml'` ; \
+       filebase=`basename $$base` ; \
+       dir=`dirname $$path` ; \
+       $(XSLTPROC) gnues.xsl $$path `echo $$path | sed -e 's/xhtml/html/'` 
$(XSLTOPTS) '$$filebase='$$filebase  
+
+# remove html files for which an xhtml version exists (exclude fr/)
+clean:
+       rm -f $(PAGES)
+
+sync:
+       (CVS_RSH=ssh ; cvs -z3 -q update -I "$(PAGES)" -dP)
+

Index: buscar.html
===================================================================
RCS file: buscar.html
diff -N buscar.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ buscar.html 3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Buscador
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<H2>Busca en GNU Madrid</H2>
+Palabras claves a buscar:
+<FORM METHOD=POST ACTION="/cgi-bin/websearch.pl">
+<BR>
+<INPUT TYPE=TEXT NAME="terms" SIZE=60>
+Busca por:
+<SELECT NAME="boolean"><OPTION>Cualquier palabra<OPTION>Todas las 
palabras<OPTION>Textual</SELECT>
+<br>
+Case:
+<SELECT NAME="case"><OPTION>insensitive<OPTION>sensitive</SELECT>
+Muestra:
+<br>
+<SELECT NAME="hits"><OPTION>10<OPTION>25<OPTION>50<OPTION>100</SELECT>
+<br><INPUT TYPE=SUBMIT VALUE="Busca!">
+</FORM>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+4 Mar 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: cabecera.html
===================================================================
RCS file: cabecera.html
diff -N cabecera.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ cabecera.html       3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>P&aacute;gina Principal^M - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#99
+00DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+

Index: enlaces.html
===================================================================
RCS file: enlaces.html
diff -N enlaces.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ enlaces.html        3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Enlaces a otras p&aacute;ginas - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>Enlaces a otras p&aacute;ginas interesantes</H2>
+       <a href="http://www.fsfeurope.org";>http://www.fsfeurope.org</a>
+       <br>
+       <blockquote>
+         Fundación del software libre a nivel europeo. 
+       </blockquote>
+
+       <a href="http://www.hispalinux.es";>http://www.hispalinux.es</a>
+       <br>
+       <blockquote>
+        Asociaci&oacute;n de usuarios espa&ntilde;oles de GNU/Linux.
+       </blockquote>
+
+
+       <a href="http://www.hispafuentes.com";>http://www.hispafuentes.com</a>
+       <br>
+       <blockquote>
+        HispaFuentes es una empresa espa&ntilde;ola dedicada al desarrollo y a
+        la comercializaci&oacute;n de productos y servicios del mundo Linux.
+       </blockquote>
+
+       <a href="http://www.barrapunto.com";>http://www.barrapunto.com</a>
+       <br>
+       <blockquote>
+        Noticias en castellano acerca de GNU/Linux, Software libre y entornos
+        abiertos.
+       </blockquote>
+
+       <a href="http://www.linuxpreview.org";>http://www.linuxpreview.org</a>
+       <br>
+       <blockquote>
+        Otro sitio de noticias sobre GNU/Linux, Software libre y entornos
+        abiertos en castellano.
+       </blockquote>    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+24 Ago 2000

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: estructura.html
===================================================================
RCS file: estructura.html
diff -N estructura.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ estructura.html     3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Estructura de la filial
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <IMG SRC="/Images/estructura.png"
+       ALT="[estructura de la filial] " BORDER=0
+       WIDTH="829" HEIGHT="500">
+
+       <H2>Coordinaciones</H2>
+       GNU Espa&ntilde;a est&aacute; segmentada en distintas
+       <STRONG> coordinaciones</STRONG>.
+
+       Estas coordinaciones est&aacute;n concebidas para dar unos determinados
+       servicios, relativamente independientes entre si. De hecho, la 
+       partici&oacute;n de la organizaci&oacute;n y la funcionalidad de la
+       filial en las coordinaciones ha sido hecha teniendo en cuenta los
+       siguientes factores:
+
+       <ul>
+        <li>Funcionalidad respecto al usuario.</li>
+        <li>Calidad de servicio.</li>
+        <li>Ortogonalidad (evitar la redundancia).</li>
+        <li>Coordinaci&oacute;n interna.</li>
+       </ul>
+
+       <H2>Coordinadores</H2>
+       Cada coordinaci&oacute;n est&aacute; dirigida por un 
<STRONG>coordinador</STRONG>.
+       Las tareas del coordinador de una coordinaci&oacute;n son:
+
+       <ul>
+       <li>Velar por el correcto funcionamiento de su coordinaci&oacute;n.</li>
+       <li>Decidir las actividades o contenidos de su coordinaci&oacute;n.</li>
+       <li>Mantener una comunicaci&oacute;n eficiente con el resto de las 
coordinaciones.</li>
+       <li>Gestionar el trabajo de los voluntarios de su 
coordinaci&oacute;n.</li>
+       </ul>
+
+       <H2>Voluntarios</H2>
+       El voluntario realiza alguna actividad bajo una coordinaci&oacute;n.
+
+       Por su parte, la coordinaci&oacute;n en cuesti&oacute;n debe aportar los
+       recursos y el asesoramiento necesarios para que el voluntario pueda
+       desarrollar su labor.
+
+       Por norma general, la comunicaci&oacute;n entre el voluntario y la
+       filial se realizar&aacute; con la coordinaci&oacute;n a la que
+       pertenezca, via los mecanismos que esta ofrezca para ello.    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+12 Ene 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: expertos-soft-articulo.html
===================================================================
RCS file: expertos-soft-articulo.html
diff -N expertos-soft-articulo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ expertos-soft-articulo.html 3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="en">
+  <head>
+    <title>Expertos en Software Libre</title>
+  </head>
+  <body>
+
+    <div> <!-- The header will be inserted here -->
+      <center>
+       [
+       <!-- Please keep this list alphabetical -->
+       Espa&ntilde;ol | <a 
href="article2001-08-23-01.en.html">Ingl&eacute;s</a> | <a 
href="article2001-08-23-01.fr.html">Franc&eacute;s</a> 
+       ]
+      </center>
+      <p />
+      <blockquote>
+       <center><h2>Expertos en Software Libre</h2></center>
+
+       <p> &iquest; Alguna vez te has sentido disgustado, posiblemente
+           en mas de una ocasi&oacute;n, al descubrir que un proyecto
+           llamado de <a
+           href="http://www.gnu.org/philosophy/free-sw.es.html";>Software
+            Libre</a> ha sido financiado, y no obstante no tiene nada que
+            ver con el Software Libre? Europa pronto financiar&aacute;
+           nuevos proyectos, y tu podr&iacute;as ayudar a prevenir 
+           situaciones similares, convirti&eacute;ndote en un <a
+            href="http://candidature.cordis.lu/expert-evaluators/";>Experto
+            Externo</a>. De ese modo ser&aacute; mucho mas dif&iacute;cil
+           afirmar que nada puede hacerse: se requieren tus habilidades
+           para validar proyectos candidatos a ser financiados.
+       </p>
+
+       <p> El <a href="http://www.cordis.lu/fp5/src/over.htm";>Fifth
+           Framework Programme</a> (FP5) de la comisi&oacute;n 
+           Europea <a
+           href="htp://www.cordis.lu/fp5-openings/home.html">necesita
+           expertos</a>. De todas las candidaturas que la gente propone
+           por si misma en el <a
+           href="http://candidature.cordis.lu/expert-evaluators/";>formulario
+           en l&iacute;nea</a>, solo unas pocas tienen una comprensi&oacute;n
+           real de qu&eacute; es el Software Libre, y c&oacute;mo trabaja.
+           Mientras que todos los expertos podr&aacute;n ser elegidos,
+           solo unos pocos ser&aacute;n reclamados para efectuar una
+           evaluaci&oacute;n particular. En cada caso los expertos 
+           hablar&aacute;n &uacute;nicamente en su propio nombre, nunca
+           en el de su empresa ni otra organizaci&oacute;n. Dentro de 
+           muy poco, en Octubre del 2001, unos cuantos proyectos ser&aacute;n
+           enviados para su evaluaci&oacute;n en la convenci&oacute;n <i><a
+           href="http://www.cordis.lu/fp5/src/t-2.htm";>Creating a
+           user-friendly information society</a></i>.
+       </p>
+
+       <p> &iquest; Qui&eacute;n ser&aacute; capaz, dejando aparte 
+         los aspectos t&eacute;cnicos, de discernir si un proyecto
+         llamado de <i>Software Libre</i> no es de hecho una simple
+         maniobra de m&aacute;rqueting, aprovechando el &uacute;ltimo
+         t&eacute;rmino de moda? Los candidatos para obtener los fondos
+         conocen el hecho de que la Comisi&oacute;n Europea <a
+         href="http://www.cordis.lu/ist/ka4/tesss/impl_free.htm#2001";>desea
+         promover proyectos de Software Libre</a> a causa de sus
+         cualidades intr&iacute;nsecas de libertad, independencia,
+         y capacidad de compartirse. Para estos candidatos es una
+         gran tentaci&oacute;n el clamar que disponen de los recursos
+         t&eacute;cnicos y humanos para crear y mantener un proyecto de
+         Software Libre, aunque no tengan ni la mas ligera idea de lo
+         que esto significa realmente. Si los expertos no tienen un
+         conocimiento real acerca de desarrollo de Software Libre, 
+         &iquest;como ser&aacute; capaz la Comisi&oacute;n Europea 
+         de discernir esos candidatos?
+       </p>
+
+       <p> Un ejemplo demuestra esta situaci&oacute;n. Supongamos que
+         el proyecto <a href="http://www.gnupki.org/en/index.php";>GnuPKI</a>
+         y el proyecto <a
+         href="http://www.campware.org/";>campware</a> <a
+         href="http://www.cordis.lu/ist/ka4/tesss/prog.htm";>notifican</a>
+         que son igual de buenos t&eacute;cnicamente hablando (dejando
+         aparte el hecho de que persiguen objetivos diferentes). Supongamos
+         ademas que la comisi&oacute;n tiene que elegir entre los dos, sin
+         disponer de la ayuda de ningun experto en Software Libre. 
+         Seguramente se decantarian por GNU PKI, debido a que hacen un
+         mejor trabajo de m&aacute;rqueting.
+       </p>
+
+       <p> Resulta que la gente familiar con el Software Libre 
+         encontrar&iacute;a algunas anomal&iacute;as en GnuPKI. En primer 
+         lugar, no es un paquete del 
+         <a href="http://www.gnu.org/";>Proyecto GNU</a>, a pesar de su
+         nombre. 
+         Dado que el Proyecto GNU proporcina componentes vitales a los
+         sistemas operativos libres mas utilizados (Debian, RedHat, 
+         Mandrake etc.), este error demuestra una ignorancia perturbadora.
+         El Software Libre es una cuesti&oacute;n de comunicaci&oacute;n
+         entre grupos de desarrollo heterog&eacute;neos, y este punto
+         juega en contra de GnuPKI. Adem&aacute;s, el experto en seguridad
+         de GnuPKI, el se&ntilde;or 
+         Eduard Tric, <a
+         href="http://www.google.com/search?q=%22eduard+tric%22";>nunca 
+         ha participado en desarrollo de Software Libre</a> y no est&aacute;
+         disponible ning&uacute;n paquete con el software desarrollado
+         hasta ahora. Esto muestra una falta de entendimiento del 
+         modelo de desarrollo. Si se tuvieran en cuenta estos factores en
+         la elecci&oacute;n, 
+         ser&iacute;a de esperar que las probabilidades de GnuPKI
+         fueran mucho menores  que las de campware.
+       </p>
+
+       <p>
+         Uno no puede esperar que todos los casos sean tan claros
+         como este ejemplo. La evaluaci&oacute;n de un proyecto,
+         para la Comisi&oacute;n Europea o para tu propia empresa,
+         requiere a menudo de un estudio mas profundo. Cuando
+         se trata con Software Libre es esencial evaluar cuidadosamente
+         el est&aacute;tus legal del proyecto con especial atenci&oacute;n
+         al copyright, debido a que son utilizadas varias licencias
+         y muchas compa&ntilde;ias est&aacute;n involucradas. La
+         habilidad de los candidatos para cooperar con grupos de
+         desarrollo en la red, su habilidad para establecer un
+         di&aacute;logo y una adecuada situaci&oacute;n dentro
+         de la comunidad del Software Libre es tambi&eacute;n de
+         suma importancia. Estos aspectos no son t&eacute;cnicos,
+         no tienen un equivalente en proyectos de software no libre
+         y s&oacute;lamente pueden ser evaluados por personas activamente
+         involucradas con el Software Libre.
+       </p>
+
+       <i><a href="mailto:address@hidden";>Loïc Dachary</a> <a 
href="http://www.gnu.org/people/";>miembro del proyecto GNU</a></i>
+       <p />
+      </blockquote>
+    </div> <!-- The footer will be inserted here -->
+
+    Updated:
+    <!-- timestamp start -->
+    $Date: 2012/03/03 06:13:58 $ $Author: ineiev $
+    <!-- timestamp end -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: xml ***
+End: ***
+-->

Index: faq.html
===================================================================
RCS file: faq.html
diff -N faq.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ faq.html    3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Preguntas mas frecuentes
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>Preguntas m&aacute;s frecuentes acerca de GNU Espa&ntilde;a</H2>
+       Aqu&iacute; se recogen algunas preguntas que, por experiencia, se 
plantea
+       frecuentemente la gente con respecto de la filial, su estructura,
+       sus objetivos y sus actividades.
+
+       Esta FAQ se ir&aacute; realimentando con las preguntas que vaya
+       haciendo la gente. Por tanto, <STRONG>se recomienda leer este documento
+       antes de ponerse en contacto con la filial</STRONG>. Tal vez la 
respuesta
+       a su pregunta se encuentre aqu&iacute;
+
+       <H2>La filial</H2>
+       <STRONG>&iquest;Para qu&eacute; sirve GNU Madrid 
(Espa&ntilde;a)?</STRONG>
+       <blockquote>
+       La filial, como parte de la Free Software Foundation en
+       Espa&ntilde;a, tiene como objetivos fundamentales:
+       <ul>
+       <li>Acercar las actividades, facilidades e informaci&oacute;n que
+         facilita la Free Software Foundation, de una manera clara y
+         agradable al interesado espa&ntilde;ol.</li>
+       <li>Promover entre la comunidad hispana el desarrollo y soporte
+         del Proyecto GNU, bajo todas sus variantes (GNU/Linux, GNU/Hurd).</li>
+       <li>Alentar el desarrollo de Software Libre, ofreciendo hosting y otras
+         facilidades al desarrollador hispano.</li>
+       <li>Fomentar la comprensi&oacute;n y asimilamiento de la 
filosof&iacute;a
+         y la cultura del Software Libre entre la comunidad hispana,
+         discutiendo sus t&eacute;rminos bajo nuestra perspectiva.</li>
+       </ul>
+       </blockquote>    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+3 Dic 2000

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: gnues.css
===================================================================
RCS file: gnues.css
diff -N gnues.css
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ gnues.css   3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,23 @@
+BODY           {       font-family: Helvetica, Verdana;
+                       font-size: 13px; 
+                       background: #FFFFFF; 
+                       color: #000000
+                       margin-left: 0px;
+                       margin-right: 0px;
+                       margin-top: 0px;
+                       margin-bottom: 0px;
+                       }
+
+TD.Section     { font-size: 13px; font-weight: regular; color: #000000; 
text-decoration: none }
+
+TD.TopTitle    { font-weight: bold; background: #999999 }
+TD.TopBody     { font-weight: bold; background: #99cccc }
+TD.newstext     { font-family: Helvetica, Verdana; font-size: 13px; 
background: #c0c0c0 }
+
+A              { font-family: Helvetica, Verdana; font-size: 13px; color: 
#0000FF }
+TD             { font-family: Helvetica, Verdana; font-size: 13px; color: 
#000000 }
+P              { font-family: Helvetica, Verdana; font-size: 13px; color: 
#000000 }
+DIV            { font-family: Helvetica, Verdana; font-size: 13px; color: 
#000000; }
+div.content    { margin: 1em; font-family: Helvetica, Verdana; font-size: 
13px; }
+
+

Index: gnues.xsl
===================================================================
RCS file: gnues.xsl
diff -N gnues.xsl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ gnues.xsl   3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE xsl:stylesheet [<!ENTITY nbsp "&#160;">
+                         <!ENTITY eur "&#128;">]>
+
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+
+  <xsl:output method="html"
+           encoding="ISO-8859-1"
+           doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"
+           doctype-system="http://www.w3.org/TR/REC-html40/loose.dtd";
+           indent="yes"
+           />
+
+  <xsl:param name="gnues">/</xsl:param>
+  <xsl:param name="fsffrance">http://france.fsfeurope.org</xsl:param>
+  <xsl:param name="fsfeurope">http://www.fsfeurope.org</xsl:param>
+  <xsl:param name="fsf">http://www.fsf.org</xsl:param>
+  <xsl:param name="gnu">http://www.gnu.org</xsl:param>
+  <xsl:param name="filebase">nofile.html</xsl:param>
+  <xsl:param name="path">nofile.html</xsl:param>
+  <xsl:param name="langlinks">[ English ]</xsl:param>
+
+  <xsl:template match="/">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="/html/body">
+    <body topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" 
marginheight="0" marginwidth="0">
+      <xsl:comment>
+
+       DO NOT MODIFY THIS DOCUMENT. IT WAS GENERATED BY XSLT PROCESSING
+       AND YOUR MODIFICATIONS WILL BE LOST. THE SOURCE OF THE DOCUMENT
+       IS IN THE .xhtml FILE USE make all TO REGENERATE
+
+      </xsl:comment>
+      <xsl:apply-templates select="node()"/>
+    </body>
+  </xsl:template>
+
+  <xsl:template match="/html/head">
+    <head>
+      <link rel="stylesheet" type="text/css" href="{$gnues}/gnues.css" />
+      <xsl:apply-templates select="@*|node()"/>
+    </head>
+  </xsl:template>
+
+  <xsl:template match="/address@hidden'es']/body/div">
+    <table cellspacing="0" cellpadding="1" width="100%" border="0"> 
+      <tr valign="middle"> 
+         <td class="newstext">
+<!--       &nbsp;&nbsp;
+            <a href="index.html">GNU España</a> -->
+          </td>
+          <td class="newstext" align="right">
+           <a href="http://www.fsf.org/home.es.html";>FSF</a>
+            &nbsp;&nbsp;|&nbsp;&nbsp;
+           <a href="http://www.gnu.org/home.es.html";>GNU</a>
+           &nbsp;&nbsp;|&nbsp;&nbsp;
+           <a href="http://www.fsfeurope.org/index.es.html";>FSF Europa</a>
+            &nbsp;&nbsp;|&nbsp;&nbsp;
+           <a href="http://www.ansol.org";>ANSOL</a><br/>
+
+         </td>
+       </tr>
+    </table>
+
+    <!-- Top menu line -->
+    <table width="100%" border="0" cellspacing="0" cellpadding="4">
+      <tr>
+       <td class="TopTitle">
+
+<!-- Barra Superior -->
+<!--     &nbsp;<a href="{$fsffrance}/index.fr.html">Francia</a> |
+           Alemania -->
+       </td>
+      </tr>
+    </table>
+
+    <!-- Title bar -->
+    <table width="100%" border="0" cellspacing="0" cellpadding="8">
+       <tr>
+         <td class="TopBody">
+           <a href="http://www.es.gnu.org";>
+             <img src="{$gnues}/Images/gnues.png" alt="GNUES Logo"
+    border="0" width="259" height="76" align="left"/>
+           </a>
+         </td>
+       </tr>
+    </table>
+
+    <table width="100%" border="0" cellspacing="0" cellpadding="0">
+      <tr>
+       <td width="99%" valign="top">
+        <div class="content">
+        <center>
+<!--        <xsl:value-of select="$langlinks" 
disable-output-escaping="yes"/>-->
+        </center>
+       <xsl:apply-templates select="@*|node()"/>
+       </div>
+       </td>
+       <!-- Columna de menú. Al lado derecho para que Lynx la vea mejor.  -->
+       <td>&nbsp;</td>
+       <td valign="top" class="TopBody">
+          <table summary="" width="150" border="0" cellspacing="0"
+          cellpadding="4">
+
+       <!-- Secciones -->
+            <tr><td class="TopTitle" align="center">Secciones</td></tr>
+              <tr>
+                <td class="TopBody" align="right">
+                  <a href="{$gnues}/software/index.html">Software GNU</a><br />
+                  <a href="{$gnues}/licencias/index.html">Licencias 
libres</a><br />
+                 <a 
href="{$gnues}/documentacion/index.html">Documentación</a><br />
+                 <a href="{$gnues}/eventos/index.html">Eventos</a><br />
+
+                 <a href="{$gnues}/desarrollo/index.html">Recursos para 
desarrolladores</a><br />
+                 <a href="{$gnues}/cgi-bin/gnueswiki.pl">GnuEsWiki</a><br />
+                 <a href="{$gnues}/bugzilla">GnuEsBugzilla</a><br />
+                 <a href="{$gnues}/gnuticias">GNUticias</a><br />
+                 <a href="{$gnu}/education/education.es.html">Educación</a><br 
/>
+
+                </td>
+              </tr>
+            <tr>
+         <!-- Grupos en GNU España -->
+             <td class="TopTitle" align="center">Grupos en GNUes</td>
+            </tr>
+            <tr>
+             <td class="TopBody" align="right">
+               <a href="http://hurd.es.gnu.org";>Grupo de usuarios
+              españoles de GNU/Hurd</a> <br />
+               <a href="http://bee.es.gnu.org";>Bee GNU/Hurd, la
+              distro española de GNU.</a> <br />
+             </td>
+             </tr>
+            
+
+            <tr>
+
+        <!-- El Proyecto GNU -->
+             <td class="TopTitle" align="center">El Proyecto GNU</td>
+            </tr>
+            <tr>
+             <td class="TopBody" align="right">
+               <a href="{$gnu}/gnu/thegnuproject.es.html">¿Qué es?</a> <br />
+               <a href="{$gnu}/gnu/manifesto.es.html">El Manifiesto GNU</a> 
<br />
+               <a href="{$gnues}/proyecto/paquetes.html">Paquetes Software 
GNU</a> <br />
+               <a href="{$gnues}/proyecto/gnu-linux-faq.html">GNU/Linux vs. 
Linux</a> <br />
+               <a href="{$gnues}/proyecto/personajes.html">Personajes del 
Proyecto</a> <br />
+               <a href="{$gnu}/philosophy/philosophy.es.html">Filosofía del 
Proyecto</a> <br />
+               <a href="http://savannah.gnu.org";>Savannah</a> <br />
+             </td>
+             </tr>
+
+            <tr>
+             
+        <!-- Listas y Foros -->
+             <td class="TopTitle" align="center">Listas y Foros</td>
+            </tr>
+            <tr>
+             <td class="TopBody" align="right">
+               <a href="{$gnues}/listasdecorreo.html">Listas de correo</a><br 
/>
+             </td>
+             </tr>
+
+            <tr>
+       <!-- Mas GNU en España -->
+              <td class="TopTitle" align="center">Mas GNU en España</td>
+            </tr>
+            <tr>
+              <td class="TopBody" align="right">
+               <a href="http://gugs.sindominio.net";>GUGS</a><br />
+               <a href="http://forogugs.sindominio.net";>Foro GUGS</a><br />
+               <a href="http://www.gnuino.org";>GNU en 8 pasos</a><br />
+
+            </td>
+            </tr>
+
+             <tr>
+
+        <!-- Mas Software Libre en España -->
+            <td class="TopTitle" align="center">Mas Software Libre en 
España</td>
+            </tr>
+            <tr>
+              <td class="TopBody" align="right">
+                <a href="http://alts.homelinux.net";>Alternativas Libres</a><br 
/>
+               </td>
+            </tr>
+
+            <tr>
+        <!-- Administración -->
+              <td class="TopTitle" align="center">Administración</td>
+            </tr>
+            <tr>
+              <td align="right"><br/>
+              <a href="{$gnues}/normas_estilo.html"
+                  >Guía de Estilo del web</a><br/>
+              <a href="{$gnu}/server/standards/"
+                  >Estándares GNU</a><br/>
+
+              <br/></td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+    </table>
+
+    <!-- Bottom line -->
+    <table width="100%" border="0" cellspacing="0" cellpadding="2">
+      <tr>
+       <td class="TopTitle">
+          <a href="{$filebase}.xhtml">Fuente XHTML</a>&nbsp;&nbsp;|
+          &nbsp;&nbsp;<a href="{$gnues}/gnues.xsl">Página de
+    estilo XSL</a><br/>
+       </td>
+       <td class="TopTitle" align="right">
+         &nbsp;<a href="mailto:address@hidden";
+                  >address@hidden</a>
+        </td>
+      </tr>
+      <tr>
+       <td class="newstext" align="center">
+       <font size="-2">
+         Copyright (C) 2002 GNU España<br/>
+          Se permite la copia textual y distribución de este artículo en su
+         totalidad, por cualquier medio, siempre y cuando se mantenga esta
+         nota de copyright.
+       </font>
+       </td>
+        <td class="newstext">&nbsp;</td>
+      </tr>
+    </table>
+  </xsl:template> 
+
+  <!-- Template de noticias. jemarch -->
+  <xsl:template match="noticia">
+
+<p>
+ <table border="0" cellpadding="0" cellspacing="0">
+  <tbody>
+   <tr class="TopBody" valign="top">
+    <td>
+      <img src="Images/pix.png" width="5" height="1" alt=" " />
+    </td>
+    <td class="TopBody" width="10" valign="top">
+      <img border="0" width="10" height="13" src="Images/ul.png" alt="(( " />
+    </td>
+    <td class="TopBody">
+          <xsl:variable name="milink">
+          <xsl:value-of select="@link" />
+          </xsl:variable>
+      <a href="{$milink}"><xsl:value-of select="@titulo" /></a> 
+      <b> <xsl:value-of select="@fecha" /> </b>
+    </td>
+    <td width="10" align="right" class="TopBody" valign="top">
+      <img border="0" width="10" height="13" src="Images/ur.png" alt=")) " />
+    </td>
+   </tr>
+  </tbody>
+ </table>
+
+ <table border="0" cellspacing="0" cellpadding="1" bgcolor="#736199">
+  <tbody>
+   <tr>
+    <td valign="bottom">
+     <table border="0" bgcolor="#cacaca" cellspacing="0" cellpadding="3">
+      <tbody>
+       <tr>
+        <td nowrap="1" class="newsinfo">
+          <xsl:variable name="milink">
+          <xsl:value-of select="@link" />
+          </xsl:variable>
+           <a href="{$milink}">Artículo completo</a>
+        </td>
+       </tr>
+       <tr>
+        <td class="newstext">
+          <xsl:value-of select="." />
+        </td>
+       </tr>
+      </tbody>
+     </table>
+    </td>
+   </tr>
+  </tbody>
+ </table>
+</p>
+
+
+ </xsl:template>
+    
+
+  <xsl:template match="@*|node()" priority="-1">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+</xsl:stylesheet>

Index: incidencias.html
===================================================================
RCS file: incidencias.html
diff -N incidencias.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ incidencias.html    3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Incidencias
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>Incidencias en GNU Espa&ntilde;a</H2>
+
+       <strong>30 de Enero del 2001</strong>
+       <blockquote>
+       Los servicios de red de la GNU Espa&ntilde;a ya estan completamente
+       restaurado. Disculpen las molestias que estos problemas de servicios
+
+       <strong><a href="mailto:address@hidden";>Nacho Gonz&aacute;lez</a>,
+       Administrador de red de GNU Espa&ntilde;a.
+       <blockquote>
+
+       <strong>27 de Enero del 2001</strong>
+       <blockquote>
+       Por diversos incidentes en las instalaciones del Campus Sur
+       de la UPM (donde f&iacute;sicamente residen nuestros servidores), la
+       conexi&oacute;n a nuestros servidores no es todo lo eficiente que
+       deber&iacute;a. La red que conecta el Campus Sur con el resto de
+       Internet tiene problemas, por lo que diversos servicios (como el
+       correo o el ftp) se pueden ver afectados.
+
+       Durante todo el fin de semana (y posiblemente parte del Lunes), los
+       mensajes de correo que se envien a cualquiera de las cuentas de
+       es.gnu.org pueden sufrir problemas. Esto no quiere decir que dichos
+       correos se pierdan, ya que permanecer&aacute;n en las colas de
+       correo de sus servidores hasta cinco d&iacute;s despu&eacute;s de
+       la fecha de env&iacute;o.
+
+       Confiamos en que el personal tecnico de la UPM solucione el percance
+       cuanto antes. Disculpen las molestias.
+
+       <strong><a href="mailto:address@hidden";>Nacho Gonz&aacute;lez</a>,
+       Administrador de red de GNU Espa&ntilde;a.
+       <blockquote>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+27 Ene 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: index.html
===================================================================
RCS file: index.html
diff -N index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ index.html  3 Mar 2012 06:13:58 -0000       1.1
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Página Principal</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p> Bienvenido al site web de GNU España, la filial oficial del 
+    Proyecto GNU en España. 
+</p>
+
+<p> Aquí encontrará abundante información acerca 
+    del Proyecto, como licencias, donde encontrar y descargar software
+    GNU, documentación, filosofía, noticias y comunidad.
+</p>
+
+<p> El proyecto GNU (GNU es un acronimo recursivo para "Gnu No es Unix")
+    comenzó en 1984 para desarrollar un sistema operativo tipo Unix
+    completo, con la peculiaridad de ser Software Libre.
+</p>
+<p>
+    Las variantes del sistema operativo GNU que utilizan el kernel Linux
+    son muy utilizadas. La gente a menudo se refiere erróneamente a
+    estos sistemas como "Linux", cuando es mas preciso y correcto
+    llamarlos "GNU/Linux". Hay un kernel GNU en desarrollo, denominado
+    <a href="http://www.gnu.org/software/hurd";>el Hurd</a>, que será el 
+    llamado a sustituir al kernel Linux cuando esté desarrollado.
+</p>
+
+<p> La Free Software Foundation fué creada por 
+    <a href="http://www.stallman.org";>Richard M. Stallman</a> para
+    financiar el proyecto GNU. Actualmente pone en las manos del usuario
+    de Software Libre multiples servicios para que la comunidad se
+    desarrolle y sea productiva. Y, sobre todo, <b>libre</b>.
+</p>
+
+<h2>Noticias</h2>
+
+<p />
+
+<hr />
+
+<noticia titulo="Portal 'Alternativas Libres'" fecha="5 de Septiembre de 2003" 
link="http://alts.homelinux.net";>
+Un hacker llamado Isaac ha elaborado <a href="http://alts.homelinux.net";>un 
portal</a> que permite buscar aplicaciones libres 
+utilizando como criterio de búsqueda su contrapartida privativa (o viceversa). 
Os animamos a todos a reportar aplicaciones, de modo 
+que <a href="http://alts.homelinux.net";>Alternativas Libres</a> se convierta 
en un portal útil para los que se incorporan a los sistemas libres
+por primera vez.
+</noticia>
+
+<noticia titulo="Visita de Georg F. Greve a Barcelona" fecha="27 de Mayo de 
2003" link="http://www.es.gnu.org/noticias/20030527.html";>
+Despues de la invitacion de Richard Stallman, que el instituto audiovisual de 
la universitat pompeu fabra realizó en enero, han invitado esta vez a Georg 
Greve de la FSF Europa
+</noticia>
+
+<noticia titulo="Nace GNUticias" fecha="4 de Marzo de 2003" 
link="http://www.es.gnu.org/noticias/20030304.html";>
+GNU España tiene el gusto de presentar en sociedad "GNUticias", un nuevo foro 
de noticias y discusión sobre GNU  y el Software Libre alojado en GNUes.
+</noticia>
+
+<noticia titulo="Charlas de RMS en OGG" fecha="20 de Febrero de 2003" 
link="http://www.es.gnu.org/noticias/20030220.html";>
+Despues de unos problemas tecnicos ya tenemos en el FTP de GNU España la 
charla de Richard M. Stallman del dia 19 de Enero en Madrid.
+</noticia>
+
+<noticia titulo="Problemas con la estabilidad del servidor GNUes" fecha="15 de 
Febrero de 2003" link="http://www.es.gnu.org/noticias/20030215.html";>
+Debido a cortes intermintentes de la corriente electrica, durante estas fechas 
hemos tenido caidas del servidor es.gnu.org.
+</noticia>
+
+<noticia titulo="Visita de Richard M. Stallman" fecha="15 de Enero de 2003" 
link="http://www.es.gnu.org/noticias/20030115.html";>
+Richard M. Stallman, el fundador del proyecto GNU y de la Free Software 
Foundation, visita España para realizar dos conferencias sobre Patentes y 
Software Libre los dias 19 y 20 de Enero en Madrid.
+</noticia>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha -->
+    $Date: 2012/03/03 06:13:58 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: listasdecorreo.html
===================================================================
RCS file: listasdecorreo.html
diff -N listasdecorreo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ listasdecorreo.html 3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Listas de correo</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+<center><h2>Listas de correo</h2></center>
+
+<h3>Migración a Mailman</h3>
+<p> Estamos migrando del programa de gestión de listas de correo <i>listar</i> 
+    a <i>Mailman</i>.
+</p>
+
+<p> Si administra alguna lista con Listar en es.gnu.org y desea migrar a 
+    <i>Mailman</i>, envie un mensaje al 
+    <a href="mailto: address@hidden">administrador</a>.
+</p>
+
+
+<p> <b>Puede acceder al interfaz Mailman desde este <a 
href="http://es.gnu.org/cgi-bin/mailman/listinfo";>enlace</a></b>
+</p>
+
+<H3>Listas de correo de GNU España</H3>
+<p> Para suscribirse/borrarse a/de una lista de correo de GNU España,
+    envíe un email a la dirección:
+</p>
+
+<p>
+<CENTER>
+       <STRONG>"nombre-lista"address@hidden </STRONG>
+</CENTER>
+</p>
+
+
+<p> En el subject, especificar 'subscribe' o 'unsubscribe'.
+</p>
+
+<p> Al suscribirse, recibirá un mensaje de bienvenida, acompañado de
+    algunos consejos, y en su caso, normas de utilización de la lista.
+</p>
+
+<p> Como norma general, los mensajes cuyo subject está vacio serán
+    moderados por el administrador de la lista correspondiente.
+</p>
+
+<p> También puede suscribirse utilizando el formulario de cada lista. Es
+    importante que compruebe que introduce bien su dirección de correo. 
+    Al rellenar el formulario, le llegara un mail de bienvenida de la lista 
+    de correo. Si no le ha llegado, por favor, comuníquenoslo.
+</p>
+
+<h4>Lista de correo general "gnues-list"</h4>
+
+<p> La <STRONG> lista de correo general </STRONG> es una lista pública
+    (abierta a voluntarios y cualquier persona interesada en el Software 
+    Libre). Es una lista no moderada, y de temática variada.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo general</H2>
+
+<FORM METHOD="POST" ACTION="/cgi-bin/mailman/subscribe/gnues-list">
+e-mail: <INPUT TYPE="Text" NAME="email" SIZE="30" /><br />
+Debe introducir una password por motivos de seguridad para prevenir que
+otros puedan modificar sus opiones de subscripción. Una vez al mes, se le
+enviará un mail recordatorio con su password. <br />
+passwd: <INPUT TYPE="Password" NAME="pw" SIZE="15" />
+confirmar password: <INPUT TYPE="Password" NAME="pw-conf" SIZE="15" /><br />
+Puede recibir la lista en un solo correo resumen diario: 
+<INPUT TYPE="Radio" NAME="digest" VALUE="0" CHECKED=""/> No
+<INPUT TYPE="Radio" NAME="digest" VALUE="1" /> Si<br />
+<INPUT TYPE="Submit" NAME="email-button" VALUE="Enviar" />
+<INPUT TYPE="reset" VALUE="Limpiar formulario" />
+</FORM>
+
+       <H2>Archivos GNUes-list</H2>
+
+<p>    Puede consultar los correos anteriores de la lista en la pagina
+de <a href="/pipermail/gnues-list/">archivos de mailman</a>.
+</p>
+
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+</p>
+<hr />
+<h4>Lista de correo general de anuncios "announces-list"</h4>
+<p> En esta lista, de caracter público, se publicarán todos los sucesos
+    que puedan ser de interes para la comunidad del sofware libre, por 
+    parte del Proyecto GNU.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo de anuncios</H2>
+
+<FORM METHOD="POST" ACTION="/cgi-bin/mailman/subscribe/announces-list">
+e-mail: <INPUT TYPE="Text" NAME="email" SIZE="30" /><br />
+Debe introducir una password por motivos de seguridad para prevenir que
+otros puedan modificar sus opiones de subscripción. Una vez al mes, se le
+enviará un mail recordatorio con su password. <br />
+passwd: <INPUT TYPE="Password" NAME="pw" SIZE="15" />
+confirmar password: <INPUT TYPE="Password" NAME="pw-conf" SIZE="15" /><br />
+Puede recibir la lista en un solo correo resumen diario: 
+<INPUT TYPE="Radio" NAME="digest" VALUE="0" CHECKED=""/> No
+<INPUT TYPE="Radio" NAME="digest" VALUE="1" /> Si<br />
+<INPUT TYPE="Submit" NAME="email-button" VALUE="Enviar" />
+<INPUT TYPE="reset" VALUE="Limpiar formulario" />
+</FORM>
+
+       <H2>Archivos announces-list</H2>
+
+<p>    Puede consultar los correos anteriores de la lista en la pagina
+de <a href="/pipermail/announces-list/">archivos de mailman</a>.
+</p>
+
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+</p>
+
+<hr />
+
+<h4>Lista de correo pública de traducciones "traduc-ltra"</h4>
+
+<p> En esta lista, de caracter público, se discute de las actividades
+    llevadas a cabo por la coordinación de Traducciones.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo de Traducciones</H2>
+   <FORM METHOD="GET" ACTION="/cgi-bin/FSFmailist-useradd.pl">
+   e-mail: <INPUT NAME="emilio" TYPE="TEXT" />
+   <br />
+   <INPUT name="lista" Type="hidden" value="traduc-ltra" />
+   <INPUT TYPE="submit" VALUE="Enviar" />
+   <INPUT TYPE="reset" VALUE="Limpiar formulario" />
+   </FORM>
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+</p>
+<hr />
+<h4>Lista de correo pública de proyectos software "software-lpry"</h4>
+<p> Esta lista se utiliza para organizar a los voluntarios de la
+    coordinación de proyectos sofware.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo de proyectos software</H2>
+   <FORM METHOD="GET" ACTION="/cgi-bin/FSFmailist-useradd.pl">
+   e-mail: <INPUT NAME="emilio" TYPE="TEXT" />
+   <br />
+   <INPUT name="lista" Type="hidden" value="software-lpry" />
+   <INPUT TYPE="submit" VALUE="Enviar" />
+   <INPUT TYPE="reset" VALUE="Limpiar formulario" />
+   </FORM>
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:13:59 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: listasdecorreo.xhtml
===================================================================
RCS file: listasdecorreo.xhtml
diff -N listasdecorreo.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ listasdecorreo.xhtml        3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Listas de correo</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+<center><h2>Listas de correo</h2></center>
+
+<h3>Migración a Mailman</h3>
+<p> Estamos migrando del programa de gestión de listas de correo <i>listar</i> 
+    a <i>Mailman</i>.
+</p>
+
+<p> Si administra alguna lista con Listar en es.gnu.org y desea migrar a 
+    <i>Mailman</i>, envie un mensaje al 
+    <a href="mailto: address@hidden">administrador</a>.
+</p>
+
+
+<p> <b>Puede acceder al interfaz Mailman desde este <a 
href="http://es.gnu.org/cgi-bin/mailman/listinfo";>enlace</a></b>
+</p>
+
+<H3>Listas de correo de GNU España</H3>
+<p> Para suscribirse/borrarse a/de una lista de correo de GNU España,
+    envíe un email a la dirección:
+</p>
+
+<p>
+<CENTER>
+       <STRONG>"nombre-lista"address@hidden </STRONG>
+</CENTER>
+</p>
+
+
+<p> En el subject, especificar 'subscribe' o 'unsubscribe'.
+</p>
+
+<p> Al suscribirse, recibirá un mensaje de bienvenida, acompañado de
+    algunos consejos, y en su caso, normas de utilización de la lista.
+</p>
+
+<p> Como norma general, los mensajes cuyo subject está vacio serán
+    moderados por el administrador de la lista correspondiente.
+</p>
+
+<p> También puede suscribirse utilizando el formulario de cada lista. Es
+    importante que compruebe que introduce bien su dirección de correo. 
+    Al rellenar el formulario, le llegara un mail de bienvenida de la lista 
+    de correo. Si no le ha llegado, por favor, comuníquenoslo.
+</p>
+
+<h4>Lista de correo general "gnues-list"</h4>
+
+<p> La <STRONG> lista de correo general </STRONG> es una lista pública
+    (abierta a voluntarios y cualquier persona interesada en el Software 
+    Libre). Es una lista no moderada, y de temática variada.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo general</H2>
+
+<FORM METHOD="POST" ACTION="/cgi-bin/mailman/subscribe/gnues-list">
+e-mail: <INPUT TYPE="Text" NAME="email" SIZE="30" /><br />
+Debe introducir una password por motivos de seguridad para prevenir que
+otros puedan modificar sus opiones de subscripción. Una vez al mes, se le
+enviará un mail recordatorio con su password. <br />
+passwd: <INPUT TYPE="Password" NAME="pw" SIZE="15" />
+confirmar password: <INPUT TYPE="Password" NAME="pw-conf" SIZE="15" /><br />
+Puede recibir la lista en un solo correo resumen diario: 
+<INPUT TYPE="Radio" NAME="digest" VALUE="0" CHECKED=""/> No
+<INPUT TYPE="Radio" NAME="digest" VALUE="1" /> Si<br />
+<INPUT TYPE="Submit" NAME="email-button" VALUE="Enviar" />
+<INPUT TYPE="reset" VALUE="Limpiar formulario" />
+</FORM>
+
+       <H2>Archivos GNUes-list</H2>
+
+<p>    Puede consultar los correos anteriores de la lista en la pagina
+de <a href="/pipermail/gnues-list/">archivos de mailman</a>.
+</p>
+
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+</p>
+<hr />
+<h4>Lista de correo general de anuncios "announces-list"</h4>
+<p> En esta lista, de caracter público, se publicarán todos los sucesos
+    que puedan ser de interes para la comunidad del sofware libre, por 
+    parte del Proyecto GNU.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo de anuncios</H2>
+
+<FORM METHOD="POST" ACTION="/cgi-bin/mailman/subscribe/announces-list">
+e-mail: <INPUT TYPE="Text" NAME="email" SIZE="30" /><br />
+Debe introducir una password por motivos de seguridad para prevenir que
+otros puedan modificar sus opiones de subscripción. Una vez al mes, se le
+enviará un mail recordatorio con su password. <br />
+passwd: <INPUT TYPE="Password" NAME="pw" SIZE="15" />
+confirmar password: <INPUT TYPE="Password" NAME="pw-conf" SIZE="15" /><br />
+Puede recibir la lista en un solo correo resumen diario: 
+<INPUT TYPE="Radio" NAME="digest" VALUE="0" CHECKED=""/> No
+<INPUT TYPE="Radio" NAME="digest" VALUE="1" /> Si<br />
+<INPUT TYPE="Submit" NAME="email-button" VALUE="Enviar" />
+<INPUT TYPE="reset" VALUE="Limpiar formulario" />
+</FORM>
+
+       <H2>Archivos announces-list</H2>
+
+<p>    Puede consultar los correos anteriores de la lista en la pagina
+de <a href="/pipermail/announces-list/">archivos de mailman</a>.
+</p>
+
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+</p>
+
+<hr />
+
+<h4>Lista de correo pública de traducciones "traduc-ltra"</h4>
+
+<p> En esta lista, de caracter público, se discute de las actividades
+    llevadas a cabo por la coordinación de Traducciones.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo de Traducciones</H2>
+   <FORM METHOD="GET" ACTION="/cgi-bin/FSFmailist-useradd.pl">
+   e-mail: <INPUT NAME="emilio" TYPE="TEXT" />
+   <br />
+   <INPUT name="lista" Type="hidden" value="traduc-ltra" />
+   <INPUT TYPE="submit" VALUE="Enviar" />
+   <INPUT TYPE="reset" VALUE="Limpiar formulario" />
+   </FORM>
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+</p>
+<hr />
+<h4>Lista de correo pública de proyectos software "software-lpry"</h4>
+<p> Esta lista se utiliza para organizar a los voluntarios de la
+    coordinación de proyectos sofware.
+
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+       <H2>Suscribase a la lista de correo de proyectos software</H2>
+   <FORM METHOD="GET" ACTION="/cgi-bin/FSFmailist-useradd.pl">
+   e-mail: <INPUT NAME="emilio" TYPE="TEXT" />
+   <br />
+   <INPUT name="lista" Type="hidden" value="software-lpry" />
+   <INPUT TYPE="submit" VALUE="Enviar" />
+   <INPUT TYPE="reset" VALUE="Limpiar formulario" />
+   </FORM>
+ </TD>
+</TR>
+</TABLE>
+</CENTER>
+
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:13:59 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: normas_estilo.html
===================================================================
RCS file: normas_estilo.html
diff -N normas_estilo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ normas_estilo.html  3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Normas de estilo para el site web</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<h2>Normas de estilo del web de GNU España</h2>
+
+<center>
+<b> NOTA!!!: El contenido de esta página probablemente no esté al dia,
+    debido al cambio de arquitectura del web (de html a XHTML/XSL)</b>
+</center>
+
+<p> Estas normas de estilo son fundamentales para la homogeneidad de
+    nuestra web, ya que somos muchas personas las que accedemos y
+    modificamos la informacion de las páginas.
+</p>
+
+<p> Estas normas de estilo son de obligado cumplimiento para todas las
+    páginas y directorios que se encuentren bajo el web fsf.eui.upm.es.
+</p>
+
+<h3>Información común a todas las páginas</h3>
+
+<p> Todas las páginas que esten bajo GNU España deben
+    tener las mismas cabeceras y pies. Baste como ejemplo esta
+    página. Para modificar estas cabeceras, o corregir alguna
+    información errónea en las mismas, es necesario informar a los
+    <a href="mailto:address@hidden";>webmasters</a>,
+    que propagarán el cambio por todo el web. Los pies y las
+    cabeceras incluyen los comentarios y los metas. El lenguaje para
+    editarlas será HTML-2, navegable con lynx y netscape. No se
+    podrán utilizar macros, HTML Dinamico, hojas de estilo, Flash,
+    scripts, archivos GIF's, etc.
+</p>
+
+<p> Todas las páginas tienen un comentario que marca el comienzo
+    de la información modificable ("beggining of the main content") y una
+    marca de fin de área modificable ("end of the main content").
+</p>
+
+<p> En cuanto al lenguaje utilizado en las mismas, debera ser claro,
+    conciso, sin palabras malsonantes. Al lector de las mismas es
+    imperativo tratarle con respeto. Nunca se tuteará al navegante
+    (no llamarle de "tu", "vosotros", "gente", etc). Esto será
+    fundamental para imprimirle la seriedad deseada a nuestras
+    páginas
+</p>
+
+<h3>Restricciones en el área de texto modificable</h3>
+
+<p> El área de texto modificable está maquetada con tablas. Las
+    tablas tendrán una anchura de un 80% si el contenido de dicho
+    párrafo es texto (como este). Si la finalidad del parrafo es un menu
+    (ver página principal), su anchura será de un 60%. Las
+    lineas de entrada para dicho menu no podran tener mas de 72 caracteres.
+    Los títulos de los párrafos tendrán el tipo de 
+    letra H2. Todas las tablas deben de estar centradas (con la
+    instrucción CENTER)
+</p>
+
+
+<h3>Páginas principales de las secciones y subsecciones</h3>
+
+<p> Las cabeceras son prácticamente iguales a las demas, excepto que las
+    páginas principales contienen la imagen del ñu debajo del
+    título. Es importante que el codigo sea EXACTAMENTE el mismo, ya que
+    se facilitarán las tareas de actualización de las cabeceras.
+</p>
+
+<h3>Estructura de los directorios</h3>
+
+<p> Todas las páginas que cuelguen del web de GNU España
+    deberán tener la extensión ".html". Los nombres de
+    las paginas estarán en minúsculas y en caso necesario con "_"
+    para simular espacios. No estarán permitidos más
+    caracteres que los alfanuméricos y el subrallado "_". En los
+    nombres de los directorios observamos las mismas restricciones que
+    en los nombres de ficheros, salvo que el nombre de directorio empieza
+    por mayuscula. La página principal de cada directorio se
+    llamará "index.html".
+</p>
+
+<h2>Dos caso especiales</h2>
+
+<p>  El título de la página se encuentra en la parte de
+     cabecera. El título debe reflejar clara y concisamente la
+     finalidad del contenido, para que los navegantes tengan una referencia
+     clara de la informacion
+     que se van a encontrar. Esta informacion debe ser actualizada por los
+     creadores o editores de la página y no es necesario informar
+     al grupo de webmasters para su edición o corrección.
+
+     La fecha de actualización se encuentra en el pie. Dicha fecha
+     deberá ser editada cada vez que la página cambie algo de su
+     contenido. Esta fecha debe modificarse siempre, para que los
+     navegantes noten que la página se ha actualizado.
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha -->
+    $Date: 2012/03/03 06:13:59 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: normas_estilo.xhtml
===================================================================
RCS file: normas_estilo.xhtml
diff -N normas_estilo.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ normas_estilo.xhtml 3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Normas de estilo para el site web</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<h2>Normas de estilo del web de GNU España</h2>
+
+<center>
+<b> NOTA!!!: El contenido de esta página probablemente no esté al dia,
+    debido al cambio de arquitectura del web (de html a XHTML/XSL)</b>
+</center>
+
+<p> Estas normas de estilo son fundamentales para la homogeneidad de
+    nuestra web, ya que somos muchas personas las que accedemos y
+    modificamos la informacion de las páginas.
+</p>
+
+<p> Estas normas de estilo son de obligado cumplimiento para todas las
+    páginas y directorios que se encuentren bajo el web fsf.eui.upm.es.
+</p>
+
+<h3>Información común a todas las páginas</h3>
+
+<p> Todas las páginas que esten bajo GNU España deben
+    tener las mismas cabeceras y pies. Baste como ejemplo esta
+    página. Para modificar estas cabeceras, o corregir alguna
+    información errónea en las mismas, es necesario informar a los
+    <a href="mailto:address@hidden";>webmasters</a>,
+    que propagarán el cambio por todo el web. Los pies y las
+    cabeceras incluyen los comentarios y los metas. El lenguaje para
+    editarlas será HTML-2, navegable con lynx y netscape. No se
+    podrán utilizar macros, HTML Dinamico, hojas de estilo, Flash,
+    scripts, archivos GIF's, etc.
+</p>
+
+<p> Todas las páginas tienen un comentario que marca el comienzo
+    de la información modificable ("beggining of the main content") y una
+    marca de fin de área modificable ("end of the main content").
+</p>
+
+<p> En cuanto al lenguaje utilizado en las mismas, debera ser claro,
+    conciso, sin palabras malsonantes. Al lector de las mismas es
+    imperativo tratarle con respeto. Nunca se tuteará al navegante
+    (no llamarle de "tu", "vosotros", "gente", etc). Esto será
+    fundamental para imprimirle la seriedad deseada a nuestras
+    páginas
+</p>
+
+<h3>Restricciones en el área de texto modificable</h3>
+
+<p> El área de texto modificable está maquetada con tablas. Las
+    tablas tendrán una anchura de un 80% si el contenido de dicho
+    párrafo es texto (como este). Si la finalidad del parrafo es un menu
+    (ver página principal), su anchura será de un 60%. Las
+    lineas de entrada para dicho menu no podran tener mas de 72 caracteres.
+    Los títulos de los párrafos tendrán el tipo de 
+    letra H2. Todas las tablas deben de estar centradas (con la
+    instrucción CENTER)
+</p>
+
+
+<h3>Páginas principales de las secciones y subsecciones</h3>
+
+<p> Las cabeceras son prácticamente iguales a las demas, excepto que las
+    páginas principales contienen la imagen del ñu debajo del
+    título. Es importante que el codigo sea EXACTAMENTE el mismo, ya que
+    se facilitarán las tareas de actualización de las cabeceras.
+</p>
+
+<h3>Estructura de los directorios</h3>
+
+<p> Todas las páginas que cuelguen del web de GNU España
+    deberán tener la extensión ".html". Los nombres de
+    las paginas estarán en minúsculas y en caso necesario con "_"
+    para simular espacios. No estarán permitidos más
+    caracteres que los alfanuméricos y el subrallado "_". En los
+    nombres de los directorios observamos las mismas restricciones que
+    en los nombres de ficheros, salvo que el nombre de directorio empieza
+    por mayuscula. La página principal de cada directorio se
+    llamará "index.html".
+</p>
+
+<h2>Dos caso especiales</h2>
+
+<p>  El título de la página se encuentra en la parte de
+     cabecera. El título debe reflejar clara y concisamente la
+     finalidad del contenido, para que los navegantes tengan una referencia
+     clara de la informacion
+     que se van a encontrar. Esta informacion debe ser actualizada por los
+     creadores o editores de la página y no es necesario informar
+     al grupo de webmasters para su edición o corrección.
+
+     La fecha de actualización se encuentra en el pie. Dicha fecha
+     deberá ser editada cada vez que la página cambie algo de su
+     contenido. Esta fecha debe modificarse siempre, para que los
+     navegantes noten que la página se ha actualizado.
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha -->
+    $Date: 2012/03/03 06:13:59 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: pie.html
===================================================================
RCS file: pie.html
diff -N pie.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pie.html    3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,40 @@
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+^M
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:
+28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
f
+uente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+27 Sep 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: plantilla.html
===================================================================
RCS file: plantilla.html
diff -N plantilla.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ plantilla.html      3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+       <p>Aquí va el contenido</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:13:59 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: plantilla.xhtml
===================================================================
RCS file: plantilla.xhtml
diff -N plantilla.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ plantilla.xhtml     3 Mar 2012 06:13:59 -0000       1.1
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+       <p>Aquí va el contenido</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:13:59 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Images/estructura.png
===================================================================
RCS file: Images/estructura.png
diff -N Images/estructura.png
Binary files /dev/null and /tmp/cvsXGyB1n differ

Index: Images/fsfe-logo.png
===================================================================
RCS file: Images/fsfe-logo.png
diff -N Images/fsfe-logo.png
Binary files /dev/null and /tmp/cvsPkXmTl differ

Index: Images/gnu-head.jpg
===================================================================
RCS file: Images/gnu-head.jpg
diff -N Images/gnu-head.jpg
Binary files /dev/null and /tmp/cvsHEzc6l differ

Index: Images/gnues.png
===================================================================
RCS file: Images/gnues.png
diff -N Images/gnues.png
Binary files /dev/null and /tmp/cvs8cRjTm differ

Index: Images/pix.png
===================================================================
RCS file: Images/pix.png
diff -N Images/pix.png
Binary files /dev/null and /tmp/cvsHvmmsp differ

Index: Images/ul.png
===================================================================
RCS file: Images/ul.png
diff -N Images/ul.png
Binary files /dev/null and /tmp/cvsc8UEFp differ

Index: Images/ur.png
===================================================================
RCS file: Images/ur.png
diff -N Images/ur.png
Binary files /dev/null and /tmp/cvshyMouq differ

Index: Licencias/.patente.html.swo
===================================================================
RCS file: Licencias/.patente.html.swo
diff -N Licencias/.patente.html.swo
Binary files /dev/null and /tmp/cvsoTdBno differ

Index: Licencias/.symlinks
===================================================================
RCS file: Licencias/.symlinks
diff -N Licencias/.symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/.symlinks 3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,12 @@
+bsd.xhtml bsd.html
+contracarta.xhtml contracarta.html
+copyleft.xhtml copyleft.html
+fdles.xhtml fdles.html
+gples.xhtml gples.html
+gplytu.xhtml gplytu.html
+index.html index.xhtml
+ip.xhtml ip.html
+nejtak.xhtml nejtak.html
+pagano.xhtml pagano.html
+patente.xhtml patente.html
+solicitudes.xhtml solicitudes.html

Index: Licencias/bsd.html
===================================================================
RCS file: Licencias/bsd.html
diff -N Licencias/bsd.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/bsd.html  3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+   <head>
+     <title>GNU España - Licencias libres</title>
+   </head>
+   <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+
+<CENTER><H2>Diferencias entre la licencia BSD y la GPL</H2></CENTER>
+
+<p>    Las licencias de uso de programas de ordenador le permiten, a cambio
+       de un precio, utilizar el programa en un sólo ordenador.</p>
+
+<p>   Según el artículo 99 de la ley de Propiedad Intelectual en
+       vigor en España, esta cesión de uso, salvo prueba en
+       contra, se entiende que es intransferible y no exclusiva.</p>
+
+<p>   Esto quiere decir que, aunque está autorizado a realizar una
+       copia privada del programa, no podrá distribuirla
+       públicamente y que por supuesto la empresa propietaria del
+       programa podrá ceder el uso del programa a más personas
+       además de usted.</p>
+       
+<p>   Respecto al derecho a la copia privada del programa para uso personal,
+   me gustaría añadir que los programas de ordenador estan
+       excluidos por el artículo 25.3 del derecho de
+       remuneración de copia privada. Este es un derecho de
+       explotación irrenunciable para los autores y los artistas,
+       interpretes o ejecutantes y que sólo puede ser cobrado a
+       través de entidades de gestión de derechos de
+       autor.</p>
+       
+<p>   De esta forma, por ejemplo, las tiendas de fotocopias están
+       obligadas por ley a pagar a esas entidades.</p>
+
+<p>   Otro derecho de explotación es el de comunicación
+       pública, que consiste en el acceso a la obra por una multitud
+       de personas, fuera del ámbito doméstico.</p>
+
+<p>   Por este concepto se cobra a los bares por tener una televisión.
+   Al contrario que en el derecho de remuneración por copia
+       privada, la ley no dice expresamente nada sobre la aplicación
+       del derecho de comunicación pública a los programas de
+       ordenador.</p>
+
+<p>   Sin embargo, el artículo 20.2.i) de la ley sí considera
+       comunicación pública el acceso público a las
+       bases de datos de ordenador,en cualquier forma,
+       cuando éstas incorporen o constituyan obras protegidas.</p>
+
+<p>   Conviene recordar que las bases de datos están protegidas por
+       derechos de autor aunque sean recopilaciones de datos que no tienen
+       derechos de autor por sí mismos, como las leyes o las obras de
+       autores que ya son de dominio público, como las de aquellos que
+       llevan 70 años fallecidos.</p>
+
+<p>   Interpretando ese artículo al pie de la letra, el acceso a
+       internet, que es una inmensa base de datos, formada por millones de
+       ordenadores conectados, sería comunicación
+       pública.</p>
+
+<p>   Sin embargo la ley no establece cómo ni quién deba pagar
+       a las entidades de gestión por esa comunicación
+       pública. En mi humilde opinión, los derechos de
+       explotación, ya sea el canón de copia privada o el de
+       comunicación pública, entendidos como irrenunciables o
+       inalienables, vulneran los derechos fundamentales de libre empresa y
+       de libre asociación, ya que los autores no pueden gestionar
+       esos derechos por si mismos y además sólo pueden cobrarlo
+       si se adscriben a una entidad de gestión de derechos de autor.</p>
+
+<p>   Las licencias de distribución BSD y GPL chocan contra la
+       filosofía sustentada por todo este entramado legal.</p>
+
+<p>   En primer lugar, estas licencias le permiten copiar no sólo
+       para uso personal sino también público, es decir,
+       está perfectamente autorizado para copiar el programa con
+       licencia BSD o GPL y dárselo a cuantas personas quiera o
+       instalarlo en tantos ordenadores necesite.</p>
+
+<p>   Podrá hacerlo gratuitamente o a cambio de dinero.
+   Me gustaría detenerme aquí, ya que mucha gente cree que
+       el software BSD o GPL tiene que ser gratis obligatoriamente. Se suele
+       confundir debido a que a esta filosofía se la ha llamado en
+       inglés "free software" y free significa libre y también
+       gratis. "Free" aquí no implica gratuidad sino que hace
+       referencia a las llamadas "tres libertades" que explicaré a
+       continuación.</p>
+
+<p>   Es válido vender software BSD y GPL siempre que respete esas 3
+   libertades, de esta forma se tiende a que no se cobre por el programa
+   en sí, sino por los servicios que eso implica:
+       instalación y mantenimiento fundamentalmente.</p>
+
+<blockquote>
+        La primera libertad es la de usar el programa.<br />
+    La segunda la de poder modificar el programa.<br />
+    La tercera la de distribuir el programa modificado o no.<br />
+</blockquote>
+
+<p>   La licencia GPL obliga a incluir el código fuente en su
+   distribución, siendo imposible cambiar la licencia al programa,
+       al distribuirlo
+       tal cual o modificado.</p>
+
+<p>    La licencia BSD, si bien es Software Libre y cumple las tres
+       libertades, no es copyleft como la GPL, puesto que es posible
+       cambiar la licencia.</p>
+
+<p>    El codigo fuente es el programa de ordenador
+       escrito de forma que puede ser leido y modificado por el programador.
+       Los binarios son los programas listos para funcionar en su ordenador.
+       El software propietario sólo se distribuye en binarios.</p>
+       
+<p>   La FSF califica como "copyleft" a aquellos programas que son libres,
+       se distribuyen con el código fuente, y no puede cambiarse la
+       licencia al distribuirse.</p>
+
+<p>   Dentro de las licencias de "free software" la FSF considera a la nueva
+       licencia BSD compatible con la licencia GPL.</p>
+       
+<p>   Cada vez hay mas programas que usan estas licencias, el exponente mas
+   conocido de GPL es el kernel de Linux.</p>
+
+<p> Como ejemplo de programa distribuido con licencia BSD, destacaría el
+   sistema operativo FreeBSD y el NetBSD.</p>
+
+<p>   Me gustaría hacer hincapié en las diferencias entre los
+   programas BSD, GPL y las copias ilegales y el llamado "freeware" y
+   "shareware".</p>
+       
+<p>   Hoy día, con los programas cerrados o propietarios es ilegal
+       distribuir copias sin autorización y es un delito cuando se
+       distribuyen con ánimo de lucro.</p>
+       
+<p>   Con los programas BSD, usted está autorizado a copiarlos y
+   distribuirlos libremente a cuantos quiera y lo podrá hacer por
+       dinero o regalándolos.</p>
+       
+<p>   Los programas "freeware" son aquellos que puede copiar y dar a quien
+   quiera pero en los que no tiene derecho a modificar y no incluyen las
+   fuentes.</p>
+
+<p>   Cuando además tiene que registrarse como usuario y pagar por
+       ello, entonces está ante un programa "shareware".</p>
+       
+<p>   Los seguidores de la licencia GPL suelen achacar a la licencia BSD
+   algunos puntos débiles.</p>
+
+   <blockquote>
+   <ol>
+     <li>La posibilidad de desarrollar software propietario a partir de un
+    programa BSD.</li>
+     <li>La "interminable" lista de notas de publicidad.</li>
+   </ol>
+   </blockquote>
+
+<p>   Respecto al primer "problema" muchos programadores BSD no lo ven como
+   tal y no les importa que parte de su código fuente se encuentre
+       en programas propietarios, de hecho, el protocolo TCP/IP en que se
+       basa internet fué desarrollado con esta licencia y hoy se
+       encuentra en multitúd de programas propietarios, de esta forma
+       la licencia BSD puede usarse como sistema flexible y barato para
+       alcanzar un standard. Por otro lado, teoricamente, un programa GPL
+       también podría convertirse en propietario ya que
+       según el artículo 96.4 de la ley de Propiedad Intelectual no se
+       protegen las ideas y principios en que se basa un programa de
+       ordenador.</p>
+
+<p>   Estas ideas y principios son accesibles para cualquiera con los
+   conocimientos suficientes que lea el código fuente del programa
+       GPL y a partir de ellos podría desarrollar el programa
+       propietario.</p>
+
+<p>   La segunda objeción que suele hacerse a la licencia BSD es que,
+   tradicionalmente las modificaciones al programa original venian
+   acompañadas por la nota de publicidad del autor de la
+   modificación, debido a un error en la interpretación de la
+   antigua licencia BSD.</p>
+
+<p>   Creo, que en la práctica las licencias BSD y GPL, operan como
+       una obra colectiva en el sentido de los artículos 8 y 97.2 de
+       la ley de Propiedad Intelectual.</p>
+       
+<p>   La obra colectiva es aquella que se crea por iniciativa y bajo la
+   coordinación de una persona o empresa y está constituida
+       por la reunión de múltiples contribuciones que se funden
+       en una creación única y autónoma en la que es
+       imposible atribuir a cada autor un derecho sobre la obra realizada.</p>
+
+<p>   Salvo pacto en contra, los derechos sobre la obra colectiva,
+   corresponden a la persona que la divulgue bajo su nombre.
+   Aquí los pactos para el ejercicio de este derecho
+       estarían recogidos en las cláusulas de la licencia GPL o
+       BSD.</p>
+
+<p>   Ni la BSD ni la GPL ofrecen garantías de funcionamiento para los
+   programas de ordenador, aunque no impiden que alguna empresa pueda
+   hacerlo a cambio de una prestación económica.</p>
+       
+<p>   Opino que esta clausula de la licencia no podrá ser declarada
+       nula conforme a la ley de Condiciones Generales de la
+       Contratación que modifica el artículo 10 de la ley
+       General para la Defensa de Consumidores y Usuarios.</p>
+
+<p>   La licencia BSD y la GPL tiene las características de un
+       contrato de adhesión pero teniendo en cuenta la forma de
+       desarrollarse el software que protege y los derechos que concede al
+       usuario no parece que ninguna de sus cláusulas atente contra
+       las exigencias de la buena fe, que se cause un perjuicio al consumidor
+       o un desequilibrio importante en sus derechos y obligaciones.</p>
+
+<p>   Para terminar debería considerar lo siguiente si tiene planeado
+   liberar software y no sabe qué licencia emplear.</p>
+
+<p>   <H4>GPL COMO LICENCIA DUAL.</H4></p>
+   
+<p>   Algunas entidades, generalmente universidades, suelen liberar software
+   de forma dual, gratuitamente o pagando si se va a usar con
+       ánimo de lucro.</p>
+
+<p>   Con esta opción venden el derecho a usar soft cerrado a las
+       empresas y al mismo tiempo pueden seguir desarrollandolo de forma
+       libre con otras entidades.</p>
+
+<p>   Creo que la licencia GPL no puede usarse en este caso, ya que no
+   podemos vender a otro el derecho a utilizar código GPL para
+   desarrollar soft cerrrado.</p>
+
+<p>   Dicho de otro modo, no se permite discriminar al usuario final de
+   nuestro código en función de si va a usarlo con
+       ánimo de lucro o no. La licencia GPL admite el ánimo de
+       lucro e imposibilita usar el código directamente en soft
+       cerrado.</p>
+
+<p>   Para algunas personas esto es un inconveniente, en este caso creo que
+   BSD sería su opción.</p>
+
+<p>   partir del código libre, mientras que dicho código sigue
+       libre para los demás.Por esto muchas empresas liberan su soft
+       bajo BSD, porque esto no les supone una renuncia definitiva a hacer
+       negocio con el soft cerrado.</p>
+   
+<p>   Esto nos lleva a la segunda consideración a la hora de
+       plantearse con qué licencia liberar sus programas.</p>
+   
+<p>   <H4>GPL COMO LICENCIA IRRENUNCIABLE.</H4></p>
+<p>
+   Algunos programadores creen que al liberar su código bajo GPL,
+   pueden cambiar y si todos están de acuerdo, desarrollar soft
+   cerrado a partir de ese código.</p>
+
+<p>   Creen que la licencia GPL es renunciable si todos los autores lo
+       admiten.</p>
+
+<p>   Desde mi punto de vista esto es un error.</p>
+   
+<p>   El hecho de ser los autores del código no les exime del respeto
+       a las cláusulas de la licencia GPL que ellos escogieron
+       libremente. Entre esas cláusulas destaca la que establece que
+       cualquier modificación del programa tendrá que
+       distribuirse siempre bajo GPL y no importa si eres el autor original o
+       no, si modificas tu propio código será GPL para siempre,
+       desde que prestas tu consentimiento para liberarlo con esta 
licencia.</p>
+
+<p>   Opino que el programador presta su consentimiento cuando coloca el
+   programa con el código fuente accesible al público y
+       manifiesta su voluntad inequívoca y públicamente de
+       liberarlo bajo GPL, poniendo el texto de la licencia o referencia a
+       ella junto a sus fuentes.</p>
+   
+<p>   La licencia GPL se diseñó para que el código
+       siempre fuese libre, incluso con independencia de la voluntad de sus
+       autores.</p>
+   
+<p>   Si esto te plantea un problema, creo que deberías usar BSD, de esta
+   forma podrás desarrollar soft cerrado a partir de código
+       BSD creado por ti mismo.</p>
+
+<p>   Incluso, posteriormente, podrías liberar ese soft cerrado bajo
+       BSD de nuevo.</p>
+
+<p>   Si por el contrario, no te planteas desarrollar versiones cerradas ni
+   quieres que alguien las haga, libera bajo GPL.</p>
+
+<p>   Existen otras muchas licencias, la licencia X o la MIT son muy
+   similares a la BSD.</p>
+
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:01 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/bsd.xhtml
===================================================================
RCS file: Licencias/bsd.xhtml
diff -N Licencias/bsd.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/bsd.xhtml 3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+   <head>
+     <title>GNU España - Licencias libres</title>
+   </head>
+   <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+
+<CENTER><H2>Diferencias entre la licencia BSD y la GPL</H2></CENTER>
+
+<p>    Las licencias de uso de programas de ordenador le permiten, a cambio
+       de un precio, utilizar el programa en un sólo ordenador.</p>
+
+<p>   Según el artículo 99 de la ley de Propiedad Intelectual en
+       vigor en España, esta cesión de uso, salvo prueba en
+       contra, se entiende que es intransferible y no exclusiva.</p>
+
+<p>   Esto quiere decir que, aunque está autorizado a realizar una
+       copia privada del programa, no podrá distribuirla
+       públicamente y que por supuesto la empresa propietaria del
+       programa podrá ceder el uso del programa a más personas
+       además de usted.</p>
+       
+<p>   Respecto al derecho a la copia privada del programa para uso personal,
+   me gustaría añadir que los programas de ordenador estan
+       excluidos por el artículo 25.3 del derecho de
+       remuneración de copia privada. Este es un derecho de
+       explotación irrenunciable para los autores y los artistas,
+       interpretes o ejecutantes y que sólo puede ser cobrado a
+       través de entidades de gestión de derechos de
+       autor.</p>
+       
+<p>   De esta forma, por ejemplo, las tiendas de fotocopias están
+       obligadas por ley a pagar a esas entidades.</p>
+
+<p>   Otro derecho de explotación es el de comunicación
+       pública, que consiste en el acceso a la obra por una multitud
+       de personas, fuera del ámbito doméstico.</p>
+
+<p>   Por este concepto se cobra a los bares por tener una televisión.
+   Al contrario que en el derecho de remuneración por copia
+       privada, la ley no dice expresamente nada sobre la aplicación
+       del derecho de comunicación pública a los programas de
+       ordenador.</p>
+
+<p>   Sin embargo, el artículo 20.2.i) de la ley sí considera
+       comunicación pública el acceso público a las
+       bases de datos de ordenador,en cualquier forma,
+       cuando éstas incorporen o constituyan obras protegidas.</p>
+
+<p>   Conviene recordar que las bases de datos están protegidas por
+       derechos de autor aunque sean recopilaciones de datos que no tienen
+       derechos de autor por sí mismos, como las leyes o las obras de
+       autores que ya son de dominio público, como las de aquellos que
+       llevan 70 años fallecidos.</p>
+
+<p>   Interpretando ese artículo al pie de la letra, el acceso a
+       internet, que es una inmensa base de datos, formada por millones de
+       ordenadores conectados, sería comunicación
+       pública.</p>
+
+<p>   Sin embargo la ley no establece cómo ni quién deba pagar
+       a las entidades de gestión por esa comunicación
+       pública. En mi humilde opinión, los derechos de
+       explotación, ya sea el canón de copia privada o el de
+       comunicación pública, entendidos como irrenunciables o
+       inalienables, vulneran los derechos fundamentales de libre empresa y
+       de libre asociación, ya que los autores no pueden gestionar
+       esos derechos por si mismos y además sólo pueden cobrarlo
+       si se adscriben a una entidad de gestión de derechos de autor.</p>
+
+<p>   Las licencias de distribución BSD y GPL chocan contra la
+       filosofía sustentada por todo este entramado legal.</p>
+
+<p>   En primer lugar, estas licencias le permiten copiar no sólo
+       para uso personal sino también público, es decir,
+       está perfectamente autorizado para copiar el programa con
+       licencia BSD o GPL y dárselo a cuantas personas quiera o
+       instalarlo en tantos ordenadores necesite.</p>
+
+<p>   Podrá hacerlo gratuitamente o a cambio de dinero.
+   Me gustaría detenerme aquí, ya que mucha gente cree que
+       el software BSD o GPL tiene que ser gratis obligatoriamente. Se suele
+       confundir debido a que a esta filosofía se la ha llamado en
+       inglés "free software" y free significa libre y también
+       gratis. "Free" aquí no implica gratuidad sino que hace
+       referencia a las llamadas "tres libertades" que explicaré a
+       continuación.</p>
+
+<p>   Es válido vender software BSD y GPL siempre que respete esas 3
+   libertades, de esta forma se tiende a que no se cobre por el programa
+   en sí, sino por los servicios que eso implica:
+       instalación y mantenimiento fundamentalmente.</p>
+
+<blockquote>
+        La primera libertad es la de usar el programa.<br />
+    La segunda la de poder modificar el programa.<br />
+    La tercera la de distribuir el programa modificado o no.<br />
+</blockquote>
+
+<p>   La licencia GPL obliga a incluir el código fuente en su
+   distribución, siendo imposible cambiar la licencia al programa,
+       al distribuirlo
+       tal cual o modificado.</p>
+
+<p>    La licencia BSD, si bien es Software Libre y cumple las tres
+       libertades, no es copyleft como la GPL, puesto que es posible
+       cambiar la licencia.</p>
+
+<p>    El codigo fuente es el programa de ordenador
+       escrito de forma que puede ser leido y modificado por el programador.
+       Los binarios son los programas listos para funcionar en su ordenador.
+       El software propietario sólo se distribuye en binarios.</p>
+       
+<p>   La FSF califica como "copyleft" a aquellos programas que son libres,
+       se distribuyen con el código fuente, y no puede cambiarse la
+       licencia al distribuirse.</p>
+
+<p>   Dentro de las licencias de "free software" la FSF considera a la nueva
+       licencia BSD compatible con la licencia GPL.</p>
+       
+<p>   Cada vez hay mas programas que usan estas licencias, el exponente mas
+   conocido de GPL es el kernel de Linux.</p>
+
+<p> Como ejemplo de programa distribuido con licencia BSD, destacaría el
+   sistema operativo FreeBSD y el NetBSD.</p>
+
+<p>   Me gustaría hacer hincapié en las diferencias entre los
+   programas BSD, GPL y las copias ilegales y el llamado "freeware" y
+   "shareware".</p>
+       
+<p>   Hoy día, con los programas cerrados o propietarios es ilegal
+       distribuir copias sin autorización y es un delito cuando se
+       distribuyen con ánimo de lucro.</p>
+       
+<p>   Con los programas BSD, usted está autorizado a copiarlos y
+   distribuirlos libremente a cuantos quiera y lo podrá hacer por
+       dinero o regalándolos.</p>
+       
+<p>   Los programas "freeware" son aquellos que puede copiar y dar a quien
+   quiera pero en los que no tiene derecho a modificar y no incluyen las
+   fuentes.</p>
+
+<p>   Cuando además tiene que registrarse como usuario y pagar por
+       ello, entonces está ante un programa "shareware".</p>
+       
+<p>   Los seguidores de la licencia GPL suelen achacar a la licencia BSD
+   algunos puntos débiles.</p>
+
+   <blockquote>
+   <ol>
+     <li>La posibilidad de desarrollar software propietario a partir de un
+    programa BSD.</li>
+     <li>La "interminable" lista de notas de publicidad.</li>
+   </ol>
+   </blockquote>
+
+<p>   Respecto al primer "problema" muchos programadores BSD no lo ven como
+   tal y no les importa que parte de su código fuente se encuentre
+       en programas propietarios, de hecho, el protocolo TCP/IP en que se
+       basa internet fué desarrollado con esta licencia y hoy se
+       encuentra en multitúd de programas propietarios, de esta forma
+       la licencia BSD puede usarse como sistema flexible y barato para
+       alcanzar un standard. Por otro lado, teoricamente, un programa GPL
+       también podría convertirse en propietario ya que
+       según el artículo 96.4 de la ley de Propiedad Intelectual no se
+       protegen las ideas y principios en que se basa un programa de
+       ordenador.</p>
+
+<p>   Estas ideas y principios son accesibles para cualquiera con los
+   conocimientos suficientes que lea el código fuente del programa
+       GPL y a partir de ellos podría desarrollar el programa
+       propietario.</p>
+
+<p>   La segunda objeción que suele hacerse a la licencia BSD es que,
+   tradicionalmente las modificaciones al programa original venian
+   acompañadas por la nota de publicidad del autor de la
+   modificación, debido a un error en la interpretación de la
+   antigua licencia BSD.</p>
+
+<p>   Creo, que en la práctica las licencias BSD y GPL, operan como
+       una obra colectiva en el sentido de los artículos 8 y 97.2 de
+       la ley de Propiedad Intelectual.</p>
+       
+<p>   La obra colectiva es aquella que se crea por iniciativa y bajo la
+   coordinación de una persona o empresa y está constituida
+       por la reunión de múltiples contribuciones que se funden
+       en una creación única y autónoma en la que es
+       imposible atribuir a cada autor un derecho sobre la obra realizada.</p>
+
+<p>   Salvo pacto en contra, los derechos sobre la obra colectiva,
+   corresponden a la persona que la divulgue bajo su nombre.
+   Aquí los pactos para el ejercicio de este derecho
+       estarían recogidos en las cláusulas de la licencia GPL o
+       BSD.</p>
+
+<p>   Ni la BSD ni la GPL ofrecen garantías de funcionamiento para los
+   programas de ordenador, aunque no impiden que alguna empresa pueda
+   hacerlo a cambio de una prestación económica.</p>
+       
+<p>   Opino que esta clausula de la licencia no podrá ser declarada
+       nula conforme a la ley de Condiciones Generales de la
+       Contratación que modifica el artículo 10 de la ley
+       General para la Defensa de Consumidores y Usuarios.</p>
+
+<p>   La licencia BSD y la GPL tiene las características de un
+       contrato de adhesión pero teniendo en cuenta la forma de
+       desarrollarse el software que protege y los derechos que concede al
+       usuario no parece que ninguna de sus cláusulas atente contra
+       las exigencias de la buena fe, que se cause un perjuicio al consumidor
+       o un desequilibrio importante en sus derechos y obligaciones.</p>
+
+<p>   Para terminar debería considerar lo siguiente si tiene planeado
+   liberar software y no sabe qué licencia emplear.</p>
+
+<p>   <H4>GPL COMO LICENCIA DUAL.</H4></p>
+   
+<p>   Algunas entidades, generalmente universidades, suelen liberar software
+   de forma dual, gratuitamente o pagando si se va a usar con
+       ánimo de lucro.</p>
+
+<p>   Con esta opción venden el derecho a usar soft cerrado a las
+       empresas y al mismo tiempo pueden seguir desarrollandolo de forma
+       libre con otras entidades.</p>
+
+<p>   Creo que la licencia GPL no puede usarse en este caso, ya que no
+   podemos vender a otro el derecho a utilizar código GPL para
+   desarrollar soft cerrrado.</p>
+
+<p>   Dicho de otro modo, no se permite discriminar al usuario final de
+   nuestro código en función de si va a usarlo con
+       ánimo de lucro o no. La licencia GPL admite el ánimo de
+       lucro e imposibilita usar el código directamente en soft
+       cerrado.</p>
+
+<p>   Para algunas personas esto es un inconveniente, en este caso creo que
+   BSD sería su opción.</p>
+
+<p>   partir del código libre, mientras que dicho código sigue
+       libre para los demás.Por esto muchas empresas liberan su soft
+       bajo BSD, porque esto no les supone una renuncia definitiva a hacer
+       negocio con el soft cerrado.</p>
+   
+<p>   Esto nos lleva a la segunda consideración a la hora de
+       plantearse con qué licencia liberar sus programas.</p>
+   
+<p>   <H4>GPL COMO LICENCIA IRRENUNCIABLE.</H4></p>
+<p>
+   Algunos programadores creen que al liberar su código bajo GPL,
+   pueden cambiar y si todos están de acuerdo, desarrollar soft
+   cerrado a partir de ese código.</p>
+
+<p>   Creen que la licencia GPL es renunciable si todos los autores lo
+       admiten.</p>
+
+<p>   Desde mi punto de vista esto es un error.</p>
+   
+<p>   El hecho de ser los autores del código no les exime del respeto
+       a las cláusulas de la licencia GPL que ellos escogieron
+       libremente. Entre esas cláusulas destaca la que establece que
+       cualquier modificación del programa tendrá que
+       distribuirse siempre bajo GPL y no importa si eres el autor original o
+       no, si modificas tu propio código será GPL para siempre,
+       desde que prestas tu consentimiento para liberarlo con esta 
licencia.</p>
+
+<p>   Opino que el programador presta su consentimiento cuando coloca el
+   programa con el código fuente accesible al público y
+       manifiesta su voluntad inequívoca y públicamente de
+       liberarlo bajo GPL, poniendo el texto de la licencia o referencia a
+       ella junto a sus fuentes.</p>
+   
+<p>   La licencia GPL se diseñó para que el código
+       siempre fuese libre, incluso con independencia de la voluntad de sus
+       autores.</p>
+   
+<p>   Si esto te plantea un problema, creo que deberías usar BSD, de esta
+   forma podrás desarrollar soft cerrado a partir de código
+       BSD creado por ti mismo.</p>
+
+<p>   Incluso, posteriormente, podrías liberar ese soft cerrado bajo
+       BSD de nuevo.</p>
+
+<p>   Si por el contrario, no te planteas desarrollar versiones cerradas ni
+   quieres que alguien las haga, libera bajo GPL.</p>
+
+<p>   Existen otras muchas licencias, la licencia X o la MIT son muy
+   similares a la BSD.</p>
+
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:01 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/contracarta.html
===================================================================
RCS file: Licencias/contracarta.html
diff -N Licencias/contracarta.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/contracarta.html  3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+       <CENTER><H2>Campaña de normalización voluntaria</H2></CENTER>
+</p>
+
+<p>
+       La BSA(Business Software Alliance) esta llevando a cabo una 
+       "campaña de normalización voluntaria" que consiste en
+       el envio de cartas a empresas en las que solicita información
+       mediante un formulario.
+</p>
+
+<p>
+       Si envía la información que le requieren tendrá 
+       "...la posibilidad de regularizar de forma ordenada la 
+       situación de los programas de ordenador de su empresa, evitando
+       de esta forma los riesgos de afrontar posibles demandas por
+       daños y perjuicios..."
+</p>
+
+<p>
+       <H2>¿Es delito de amenazas?</H2>
+</p>
+
+<p>
+       Esta actividad podría ser un delito, consistente en la amenaza
+       de revelar o denunciar la comisión de un delito. Esta
+       conducta esta tipificada en el artículo 171.2 y 3 del
+       Código Penal español.
+</p>
+       
+<p>
+       El problema sería demostrar que la entrega de datos a la BSA
+       es una "recompensa" a cambio de no ser denunciados por la
+       comisión del presunto delito contra la propiedad intelectual.
+</p>
+
+<p>
+       Sus datos comerciales son un activo valioso, como veremos
+       posteriormente.
+</p>
+
+<p>
+       <H2>¿Es delito de descubrimiento y revelación de secretos?</H2>
+</p>
+       
+<p>
+       Este delito se recoge en los artículos 199 a 200 y 278 a 280
+       del Código Penal.
+</p>
+       
+<p>
+       <blockquote>
+         art.200."Lo dispuesto en este capítulo (Del descubrimiento y
+         revelación de secretos) será aplicable al que
+         descubriere o cediere datos reservados de personas jurídicas,
+         sin el consentimiento de sus representantes, salvo lo dispuesto
+         en otros preceptos de este Código."
+       </blockquote>
+</p>
+<p>
+       Aquí la dificultad radica en considerar "secretos" o "datos
+       reservados" la actividad presuntamente ilegal o delictiva de la
+       empresa.
+</p>
+       
+<p>
+       <H2>Los datos de su empresa son valiosos</H2>
+</p>
+<p>
+       No esta obligado a rellenar el cuestionario de la BSA y no tiene por
+       qué facilitarles esos datos. No merecen que trabaje gratis en
+       hacerles un estudio de mercado o "Market Survey" del que no se va a
+       beneficiar, antes al contrario. Esos datos reducen considerablemente
+       los márgenes de error en la toma de decisiones de las empresas
+       adheridas a la BSA, sobre todo respecto a la apertura de mercados,
+       distribución o rentabilidad.
+</p>
+       
+<p>
+       Aunque la Ley Orgánica 15/1999 de 13 de Diciembre, de
+       Protección de Datos de Carácter Personal sólo se
+       aplica a los datos de personas físicas y no a personas
+       jurídicas o empresas, lo cierto, es que para realizar esta
+       campaña la BSA necesariamente cuenta con una base de datos
+       sobre administradores únicos y de otras personas físicas 
+       vinculadas a las empresas con el objeto de llegado el caso, "iniciar
+       las acciones legales que sean pertinentes".La BSA procesa
+       también información procedente de las denuncias
+       anónimas y de los administradores de empresas "no adheridas".
+</p>
+       
+<p>
+       Según el art.6.2 de esa ley no es necesario el consentimiento
+       para el tratamiento de esos datos personales, si figuran en fuentes
+       accesibles al público. La dificultad de oponerse al tratamiento
+       de esos datos por la BSA consiste en demostrar, que se esta vulnerando
+       alguna libertad o derecho fundamental.
+</p>
+       
+<p>
+       Aunque no pueda demostrar esto, el art.6.4, concede que
+       "podrá oponerse a su tratamiento cuando existan motivos
+       fundados y legítimos relativos a una concreta situación
+       personal".
+</p>
+       
+<p>
+       Tenga en cuenta que si se inicia un proceso penal, tiene derecho a la
+       presunción de inocencia y a no declarar contra tí
+       mismo.
+</p>
+       
+<p>
+       Conforme al art.5, si se solicitan datos personales,
+       usted tiene derecho a ser informado por el responsable del fichero, del
+       contenido del tratamiento, de la procedencia de los datos, de los
+       destinatarios de esa información, de la posibilidad de ejercitar
+       los derechos de acceso, rectificación, cancelación y
+       oposición y sobre todo la identidad y dirección del
+       responsable del tratamiento de esos datos personales. En cualquier
+       caso, tiene derecho a que la BSA le facilite esa información
+       en el cuestionario que le envien.
+</p>
+       
+<p>
+       Recuerde que el art.3.a define a los datos de carácter personal
+       como:
+       "<strong>Cualquier información concerniente a personas
+       físicas identificadas o identificables</strong>".
+</p>
+       
+<p>
+       <H2>La licencia GPL y el software libre</H2>
+</p>
+<p>
+       Los programas de ordenador suelen distribuirse con licencias
+       propietarias o cerradas.
+</p>
+       
+<p>
+       Estas licencias son intransferibles y no exclusivas, es decir, no es
+       propietario del programa, sólo tiene derecho a usarlo en un
+       ordenador o tantos como permita expresamente la licencia y no puedes
+       modificar el programa ni distribuirlo.
+</p>
+       
+<p>
+       La licencia GPL o General Public License, desarrollada por la FSF o
+       Free Software Foundation, es completamente diferente.
+</p>
+       
+<p>
+       Puede instalar y usar un programa GPL en un ordenador o en tantos
+       como le apetezca, sin limitación.
+</p>
+       
+<p>
+       También puede modificar el programa para adaptarlo a lo que 
+       quiera que haga.
+</p>
+       
+<p>
+       Además, podrá distribuir el programa GPL tal cual o
+       después de haberlo modificado.
+</p>
+       
+<p>
+       Puede hacer esto, regalando el programa o vendiendolo, su 
+       única obligación, es facilitar siempre con el programa
+       binario el código fuente, es decir, el programa de forma que
+       pueda ser leido por un programador.
+</p>
+
+<p>
+       Los programas propietarios o cerrados, solo se distribuyen en binario,
+       listos para ejecutarse en el ordenador.
+</p>
+       
+<p>
+       Un programa GPL no es "shareware" o "freeware", estos también
+       puedes conseguirlos en un cd al comprar un revista o descargarlos de
+       internet, pero no incluyen el código fuente y no tienes permiso
+       para modificarlos.
+</p>
+       
+<p>
+       Los programas GPL no tienen garantía, igual que casi todos los
+       programas propietarios, no obstante, ofrecen más derechos a sus
+       usuarios y su sistema abierto hace que los defectos sean detectados y
+       depurados a gran velocidad con la ayuda de cientos de programadores a
+       través de internet... Por otro lado, nada impide a una empresa
+       garantizar esos programas junto a otros servicios que oferte.
+</p>
+
+<p>
+       <H2>Algunos programas GPL</H2>
+</p>
+<p>
+       Los primeros programas liberados con licencia GPL fueron las
+       herramientas GNU. Hoy existen multitud de ellos, aplicaciones
+       científicas y sobre todo las relacionadas con internet, el
+       representante más conocido es el sistema operativo GNU/LINUX
+       que empieza a ser accesible a los usuarios finales gracias a gestores
+       de escritorio como GNOME o KDE y cuenta incluso con algunos paquetes
+       ofimáticos como StarOffice o SIAG.
+</p>
+       
+<p>
+       Considere la posibilidad de usar estos programas y participe
+       activamente en la expansión de esta filosofía.
+</p>
+       
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:01 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/contracarta.xhtml
===================================================================
RCS file: Licencias/contracarta.xhtml
diff -N Licencias/contracarta.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/contracarta.xhtml 3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+       <CENTER><H2>Campaña de normalización voluntaria</H2></CENTER>
+</p>
+
+<p>
+       La BSA(Business Software Alliance) esta llevando a cabo una 
+       "campaña de normalización voluntaria" que consiste en
+       el envio de cartas a empresas en las que solicita información
+       mediante un formulario.
+</p>
+
+<p>
+       Si envía la información que le requieren tendrá 
+       "...la posibilidad de regularizar de forma ordenada la 
+       situación de los programas de ordenador de su empresa, evitando
+       de esta forma los riesgos de afrontar posibles demandas por
+       daños y perjuicios..."
+</p>
+
+<p>
+       <H2>¿Es delito de amenazas?</H2>
+</p>
+
+<p>
+       Esta actividad podría ser un delito, consistente en la amenaza
+       de revelar o denunciar la comisión de un delito. Esta
+       conducta esta tipificada en el artículo 171.2 y 3 del
+       Código Penal español.
+</p>
+       
+<p>
+       El problema sería demostrar que la entrega de datos a la BSA
+       es una "recompensa" a cambio de no ser denunciados por la
+       comisión del presunto delito contra la propiedad intelectual.
+</p>
+
+<p>
+       Sus datos comerciales son un activo valioso, como veremos
+       posteriormente.
+</p>
+
+<p>
+       <H2>¿Es delito de descubrimiento y revelación de secretos?</H2>
+</p>
+       
+<p>
+       Este delito se recoge en los artículos 199 a 200 y 278 a 280
+       del Código Penal.
+</p>
+       
+<p>
+       <blockquote>
+         art.200."Lo dispuesto en este capítulo (Del descubrimiento y
+         revelación de secretos) será aplicable al que
+         descubriere o cediere datos reservados de personas jurídicas,
+         sin el consentimiento de sus representantes, salvo lo dispuesto
+         en otros preceptos de este Código."
+       </blockquote>
+</p>
+<p>
+       Aquí la dificultad radica en considerar "secretos" o "datos
+       reservados" la actividad presuntamente ilegal o delictiva de la
+       empresa.
+</p>
+       
+<p>
+       <H2>Los datos de su empresa son valiosos</H2>
+</p>
+<p>
+       No esta obligado a rellenar el cuestionario de la BSA y no tiene por
+       qué facilitarles esos datos. No merecen que trabaje gratis en
+       hacerles un estudio de mercado o "Market Survey" del que no se va a
+       beneficiar, antes al contrario. Esos datos reducen considerablemente
+       los márgenes de error en la toma de decisiones de las empresas
+       adheridas a la BSA, sobre todo respecto a la apertura de mercados,
+       distribución o rentabilidad.
+</p>
+       
+<p>
+       Aunque la Ley Orgánica 15/1999 de 13 de Diciembre, de
+       Protección de Datos de Carácter Personal sólo se
+       aplica a los datos de personas físicas y no a personas
+       jurídicas o empresas, lo cierto, es que para realizar esta
+       campaña la BSA necesariamente cuenta con una base de datos
+       sobre administradores únicos y de otras personas físicas 
+       vinculadas a las empresas con el objeto de llegado el caso, "iniciar
+       las acciones legales que sean pertinentes".La BSA procesa
+       también información procedente de las denuncias
+       anónimas y de los administradores de empresas "no adheridas".
+</p>
+       
+<p>
+       Según el art.6.2 de esa ley no es necesario el consentimiento
+       para el tratamiento de esos datos personales, si figuran en fuentes
+       accesibles al público. La dificultad de oponerse al tratamiento
+       de esos datos por la BSA consiste en demostrar, que se esta vulnerando
+       alguna libertad o derecho fundamental.
+</p>
+       
+<p>
+       Aunque no pueda demostrar esto, el art.6.4, concede que
+       "podrá oponerse a su tratamiento cuando existan motivos
+       fundados y legítimos relativos a una concreta situación
+       personal".
+</p>
+       
+<p>
+       Tenga en cuenta que si se inicia un proceso penal, tiene derecho a la
+       presunción de inocencia y a no declarar contra tí
+       mismo.
+</p>
+       
+<p>
+       Conforme al art.5, si se solicitan datos personales,
+       usted tiene derecho a ser informado por el responsable del fichero, del
+       contenido del tratamiento, de la procedencia de los datos, de los
+       destinatarios de esa información, de la posibilidad de ejercitar
+       los derechos de acceso, rectificación, cancelación y
+       oposición y sobre todo la identidad y dirección del
+       responsable del tratamiento de esos datos personales. En cualquier
+       caso, tiene derecho a que la BSA le facilite esa información
+       en el cuestionario que le envien.
+</p>
+       
+<p>
+       Recuerde que el art.3.a define a los datos de carácter personal
+       como:
+       "<strong>Cualquier información concerniente a personas
+       físicas identificadas o identificables</strong>".
+</p>
+       
+<p>
+       <H2>La licencia GPL y el software libre</H2>
+</p>
+<p>
+       Los programas de ordenador suelen distribuirse con licencias
+       propietarias o cerradas.
+</p>
+       
+<p>
+       Estas licencias son intransferibles y no exclusivas, es decir, no es
+       propietario del programa, sólo tiene derecho a usarlo en un
+       ordenador o tantos como permita expresamente la licencia y no puedes
+       modificar el programa ni distribuirlo.
+</p>
+       
+<p>
+       La licencia GPL o General Public License, desarrollada por la FSF o
+       Free Software Foundation, es completamente diferente.
+</p>
+       
+<p>
+       Puede instalar y usar un programa GPL en un ordenador o en tantos
+       como le apetezca, sin limitación.
+</p>
+       
+<p>
+       También puede modificar el programa para adaptarlo a lo que 
+       quiera que haga.
+</p>
+       
+<p>
+       Además, podrá distribuir el programa GPL tal cual o
+       después de haberlo modificado.
+</p>
+       
+<p>
+       Puede hacer esto, regalando el programa o vendiendolo, su 
+       única obligación, es facilitar siempre con el programa
+       binario el código fuente, es decir, el programa de forma que
+       pueda ser leido por un programador.
+</p>
+
+<p>
+       Los programas propietarios o cerrados, solo se distribuyen en binario,
+       listos para ejecutarse en el ordenador.
+</p>
+       
+<p>
+       Un programa GPL no es "shareware" o "freeware", estos también
+       puedes conseguirlos en un cd al comprar un revista o descargarlos de
+       internet, pero no incluyen el código fuente y no tienes permiso
+       para modificarlos.
+</p>
+       
+<p>
+       Los programas GPL no tienen garantía, igual que casi todos los
+       programas propietarios, no obstante, ofrecen más derechos a sus
+       usuarios y su sistema abierto hace que los defectos sean detectados y
+       depurados a gran velocidad con la ayuda de cientos de programadores a
+       través de internet... Por otro lado, nada impide a una empresa
+       garantizar esos programas junto a otros servicios que oferte.
+</p>
+
+<p>
+       <H2>Algunos programas GPL</H2>
+</p>
+<p>
+       Los primeros programas liberados con licencia GPL fueron las
+       herramientas GNU. Hoy existen multitud de ellos, aplicaciones
+       científicas y sobre todo las relacionadas con internet, el
+       representante más conocido es el sistema operativo GNU/LINUX
+       que empieza a ser accesible a los usuarios finales gracias a gestores
+       de escritorio como GNOME o KDE y cuenta incluso con algunos paquetes
+       ofimáticos como StarOffice o SIAG.
+</p>
+       
+<p>
+       Considere la posibilidad de usar estos programas y participe
+       activamente en la expansión de esta filosofía.
+</p>
+       
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:01 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/copyleft.html
===================================================================
RCS file: Licencias/copyleft.html
diff -N Licencias/copyleft.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/copyleft.html     3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+     <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<H2>El copyleft visto como obra colectiva</H2>
+</p>
+
+<p>
+Este breve texto tiene como objetivo explicar lo que la Ley de Propiedad 
Intelectual y la            Jurisprudencia, entiende por obra colectiva y la 
similitud entre esta y el copyleft..
+</p>
+
+<p>
+La idea del copyleft suele aceptarse como natural en ambitos cientificos donde 
el compartir conocimientos es a veces obligado para el progreso de la 
investigacion.
+</p>
+
+<p>
+El traslado de esa idea a un ambito comercial de usuarios o consumidores 
finales se fundamenta en concepciones idealistas-entender el acceso al codigo 
fuente del programa, como libertad inalienable de cualquier persona a adquirir 
y difundir conocimientos- o en fundamentos practicos-el codigo fuente te da la 
libertad para eliminar ataduras a monopolios de empresas que producen software 
cerrado o propietario.
+</p>
+
+<p>
+Es probable que esos consumidores finales no puedan ejercer esa libertad en 
tanto en cuanto no tengan los conocimientos necesarios para modificar el codigo 
fuente por si mismos, pero parece indudable que el ejercerlo gracias a terceros 
no lo menoscaba y que es dificil que se produzca una situacion de monopolio 
comparable a la que provoca el soft cerrado.
+</p>
+
+<p>
+Esa mudanza de los principios del copyleft, dicho en forma grafica, del 
laboratorio a la tienda, puede parecer revolucionaria o utopica, sin embargo, 
cada vez hay mas ejemplos que hacen esfumarse las dudas y por otro lado, la 
idea de grupos de individuos trabajando en comun y obteniendo un resultado, 
+no es algo tan disparatado como para que esta realidad no haya sido tenida en 
cuenta por el legislador.
+</p>
+
+<p>
+Esta realidad se conoce como obra colectiva en el articulo 8 de la Ley, 
respecto a la propiedad intelectual en general y por el 97.2 especificamente 
para los programas de ordenador.
+</p>
+
+<p>
+Existe jurisprudencia sobre la obra colectiva que voy a utilizar para que esto 
no resulte mas aburrido de lo necesario.
+</p>
+
+<p>
+Sentencia de 26-9-1996.Audiencia Provincial de Barcelona,Seccion 15(Civil).<br 
/>
+Talleres de Imprenta SA, editora de La Vanguardia frente a CI Laborales SL, 
editora de Setmanal d'Oportunitats Laborals.
+</p>
+
+<p>
+El semanario SOL se dedica a publicar anuncios de empleo ya publicados en 
otros medios.
+La editora de La Vanguardia les demando por considerar que eso vulneraba su 
propiedad intelectual.
+</p>
+
+<p>
+En esta sentencia se pone como ejemplo de obra colectiva al diario La 
Vanguardia ya que es una creacion unica y autonoma en la que se funden las 
aportaciones de diferentes autores sin que sea posible atribuir separadamente a 
cualquiera de estos un derecho sobre el conjunto.
+</p>
+
+<p>
+La obra colectiva es un "aliquid novum" respecto de cada contribucion que en 
ella se funden para crear una entidad,esto implica que el derecho sobre la obra 
colectiva es distinto y compatible con los derechos que cada colaborador tiene 
sobre su propia obra.Por lo mismo, el titular del todo puede defender una parte 
que sea la aportacion individual de un contribuyente singular.La concurrencia 
es compatible y no excluyente.
+</p>
+
+<p>
+Evidentemente, la obra colectiva como producto, esta integrada por todas las 
aportaciones y su titular puede defenderla sin distincion de partes. La titular 
de los derechos de propiedad intelectual de la obra colectiva es la persona que 
la edita y divulga bajo su nombre.
+</p>
+
+<p>
+Respecto al caso concreto, la Audiencia considero que los anuncios por 
palabras no tienen la originalidad suficiente como para ser protegibles por 
copyright.
+</p>
+
+<p>
+<STRONG>OBRA COLECTIVA Y OBRA EN COLABORACION</STRONG>
+Sentencia de 17-12-1998.Audiencia Provincial de Asturias,Seccion 5(Civil).<br 
/>
+Andres B.C. y Angel Luis F.V. frente a Federacion Asturiana de Comercio,Union 
de Comerciantes de Oviedo e Imprenta Narcea SL.<br />
+Andres y Angel realizaron una recopilacion y resumen de informes economicos y 
juridicos relativos al ejercicio del comercio.La Audiencia no considero que 
esto fuese una obra colectiva aunque un profesor universitario reviso en parte 
la obra final a peticion de los autores.Este trabajo fue calificado como obra 
unitaria realizada en colaboracion entre dos coautores.<br />
+Finalmente, al no ser considerada obra colectiva, no es autor el que la edita 
y divulga, por lo que era necesario pedir permiso a Andres y Angel para hacer 
una segunda impresion de la Guia de Orientacion para el Comercio.
+</p>
+
+<p>
+La diferencia entre obra colectiva y obra en colaboracion es que en esta 
ultima, no hay creacion unica y autonoma esto quiere decir que todos los 
coautores de la obra en colaboracion tienen que dar su consentimiento para la 
modificacion y distribucion de su trabajo, ya que el resultado final no es algo 
distinto de la suma de todas las partes.
+</p>
+
+<p>
+Si consideramos que un programa es algo distinto de la suma de sus partes 
entonces el copyleft es una obra colectiva en la que el coordinador atribuye a 
cada autor de una porcion, el derecho sobre la obra final si la editan o 
divulgan segun unas condiciones.
+</p>
+
+<p>
+Para los que crean que el programa no es una entidad distinta de la suma de 
las partes, entonces, el copyleft seria una obra en colaboracion en la que el 
autor de cada parte admite un derecho a modificar y divulgar a los demas 
autores, no de forma proporcional sino global sobre toda la obra.
+</p>
+
+<p>
+<STRONG> OBRA COLECTIVA Y OBRA INDIVIDUAL</STRONG>
+</p>
+
+<p>
+Sentencia de 24-7-1995.Audiencia Provincial de Valencia,(Civil).<br />
+Jose Vicente C.P. frente a la Universidad de Valencia.<br />
+Jose Vicente pide ser considerado autor del Proyecto IACU y reclama una 
compensacion.<br />
+La Audiencia considera que no estamos ante una obra en colaboracion ya que 
para eso, es necesario una perfecta identificacion entre la aportacion 
individual de cada participe.En este caso se trata de una obra colectiva porque 
hay una persona que tiene la iniciativa y coordinacion de la investigacion y 
las aportaciones se funden en una sola creacion unica y autonoma.La Audiencia 
admite que Jose Vicente participo ademas recopilando datos en la investigacion 
-trabajo de campo-para suprimir las barreras arquitectonicas para minusvalidos 
en la Universidad de Valencia pero no edito bajo su nombre la obra por lo que 
no puede ostentar sobre la misma derechos de autor.Finalmente se condeno a la 
Universidad de Valencia a pagar a Jose Vicente no una indemnizacion por 
violacion de los derechos de autor pero si una compensacion por el trabajo 
realizado.
+</p>
+
+<p>
+Esta sentencia recoge lo dicho en la Ley respecto a que para ser reconocido 
autor de la obra colectiva basta editarla y publicarla, tambien advierte 
respecto a las lagunas de la Ley en la regulacion de las obras colectivas y de 
como en caso de duda hay que tener presente los principios generales como el de 
la buena fe y de pacta sunt servanda.Es decir, que es admisible incluir 
condiciones para ser considerado autor de la obra colectiva ademas de la mera 
edicion o divulgacion; Eso es precisamente lo que hacen las licencias copyleft, 
como dije antes.
+</p>
+
+<p>
+<STRONG>PROBLEMAS QUE PUEDEN SURGIR</STRONG>
+</p>
+
+<p>
+Sentencia de 4-6-1999.Audiencia Provincial de Toledo,Seccion 1(PENAL)<br />
+N.T. y E.G. frente a Ines R.M, Isabel F.S y Francisco Javier P.C.<br />
+En esta sentencia se reconoce al Director General de Cultura de la 
Comunicacion de Castilla-La Mancha como coordinador de una obra colectiva que 
agruparia diversos trabajos sobre el Romanico en Guadalajara.
+</p>
+
+<p>
+Se encargo la preparacion de un catalago a los arquitectos N.T. y E.G 
consistente en la elaboracion y entrega de un catalogo de los 31 edificios 
romanicos de Guadalajara con sus planos y documentacion grafica.<br />
+Posteriormente el coordinador de la obra colectiva encarga a Ines R.M ,experta 
en arte Romanico y profesora titular de la Universidad Complutense de Madrid 
que redacte un texto sobre el Romanico en Guadalajara.<br />
+N.T. y E.G. no llegaron a formalizar ningun contrato de edicion con la 
Comunidad de Castilla-La Mancha debido a un fracaso en las negociaciones e 
inscribieron en el Registro de la Propiedad Intelectual de Madrid la obra 
titulada "El Romanico en Guadalajara".Posteriormente la Comunidad de 
Castilla-La Mancha inscribio en ese Registro, "La Herencia Romanica en 
Guadalajara",realizado por Isabel Maria F.S, Francisco Javier P.C e Ines 
R.M.con los planos elaborados por N.T y E.G que eran propiedad de la Comunidad 
de Castilla-La Mancha.La Audiencia Provincial no estimo que hubiese un delito 
de plagio como sostenian N.T y E.G.
+</p>
+
+<p>
+Como se lee en la propia sentencia, no es facil diferenciar, salvo casos 
evidentes, entre el plagio de una obra ajena y la utilizacion de esta como 
fuente de consulta, lo que seria admisible y licito en obras como esta.
+</p>
+
+<p>
+En el caso de los programas de ordenador seria complicado probar la existencia 
de un plagio a no ser que se hubiese producido la transcripcion literal del 
codigo fuente.
+Aparte de este comentario, he querido incluir esta sentencia como ejemplo de 
los problemas que pueden generarse en un proyecto tipo copyleft, debido a la 
falta de comunicacion entre los participantes o a la escasa informacion que 
hayan recibido los participantes al incorporarse al proyecto.
+</p>
+
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:01 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/copyleft.xhtml
===================================================================
RCS file: Licencias/copyleft.xhtml
diff -N Licencias/copyleft.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/copyleft.xhtml    3 Mar 2012 06:14:01 -0000       1.1
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+     <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<H2>El copyleft visto como obra colectiva</H2>
+</p>
+
+<p>
+Este breve texto tiene como objetivo explicar lo que la Ley de Propiedad 
Intelectual y la            Jurisprudencia, entiende por obra colectiva y la 
similitud entre esta y el copyleft..
+</p>
+
+<p>
+La idea del copyleft suele aceptarse como natural en ambitos cientificos donde 
el compartir conocimientos es a veces obligado para el progreso de la 
investigacion.
+</p>
+
+<p>
+El traslado de esa idea a un ambito comercial de usuarios o consumidores 
finales se fundamenta en concepciones idealistas-entender el acceso al codigo 
fuente del programa, como libertad inalienable de cualquier persona a adquirir 
y difundir conocimientos- o en fundamentos practicos-el codigo fuente te da la 
libertad para eliminar ataduras a monopolios de empresas que producen software 
cerrado o propietario.
+</p>
+
+<p>
+Es probable que esos consumidores finales no puedan ejercer esa libertad en 
tanto en cuanto no tengan los conocimientos necesarios para modificar el codigo 
fuente por si mismos, pero parece indudable que el ejercerlo gracias a terceros 
no lo menoscaba y que es dificil que se produzca una situacion de monopolio 
comparable a la que provoca el soft cerrado.
+</p>
+
+<p>
+Esa mudanza de los principios del copyleft, dicho en forma grafica, del 
laboratorio a la tienda, puede parecer revolucionaria o utopica, sin embargo, 
cada vez hay mas ejemplos que hacen esfumarse las dudas y por otro lado, la 
idea de grupos de individuos trabajando en comun y obteniendo un resultado, 
+no es algo tan disparatado como para que esta realidad no haya sido tenida en 
cuenta por el legislador.
+</p>
+
+<p>
+Esta realidad se conoce como obra colectiva en el articulo 8 de la Ley, 
respecto a la propiedad intelectual en general y por el 97.2 especificamente 
para los programas de ordenador.
+</p>
+
+<p>
+Existe jurisprudencia sobre la obra colectiva que voy a utilizar para que esto 
no resulte mas aburrido de lo necesario.
+</p>
+
+<p>
+Sentencia de 26-9-1996.Audiencia Provincial de Barcelona,Seccion 15(Civil).<br 
/>
+Talleres de Imprenta SA, editora de La Vanguardia frente a CI Laborales SL, 
editora de Setmanal d'Oportunitats Laborals.
+</p>
+
+<p>
+El semanario SOL se dedica a publicar anuncios de empleo ya publicados en 
otros medios.
+La editora de La Vanguardia les demando por considerar que eso vulneraba su 
propiedad intelectual.
+</p>
+
+<p>
+En esta sentencia se pone como ejemplo de obra colectiva al diario La 
Vanguardia ya que es una creacion unica y autonoma en la que se funden las 
aportaciones de diferentes autores sin que sea posible atribuir separadamente a 
cualquiera de estos un derecho sobre el conjunto.
+</p>
+
+<p>
+La obra colectiva es un "aliquid novum" respecto de cada contribucion que en 
ella se funden para crear una entidad,esto implica que el derecho sobre la obra 
colectiva es distinto y compatible con los derechos que cada colaborador tiene 
sobre su propia obra.Por lo mismo, el titular del todo puede defender una parte 
que sea la aportacion individual de un contribuyente singular.La concurrencia 
es compatible y no excluyente.
+</p>
+
+<p>
+Evidentemente, la obra colectiva como producto, esta integrada por todas las 
aportaciones y su titular puede defenderla sin distincion de partes. La titular 
de los derechos de propiedad intelectual de la obra colectiva es la persona que 
la edita y divulga bajo su nombre.
+</p>
+
+<p>
+Respecto al caso concreto, la Audiencia considero que los anuncios por 
palabras no tienen la originalidad suficiente como para ser protegibles por 
copyright.
+</p>
+
+<p>
+<STRONG>OBRA COLECTIVA Y OBRA EN COLABORACION</STRONG>
+Sentencia de 17-12-1998.Audiencia Provincial de Asturias,Seccion 5(Civil).<br 
/>
+Andres B.C. y Angel Luis F.V. frente a Federacion Asturiana de Comercio,Union 
de Comerciantes de Oviedo e Imprenta Narcea SL.<br />
+Andres y Angel realizaron una recopilacion y resumen de informes economicos y 
juridicos relativos al ejercicio del comercio.La Audiencia no considero que 
esto fuese una obra colectiva aunque un profesor universitario reviso en parte 
la obra final a peticion de los autores.Este trabajo fue calificado como obra 
unitaria realizada en colaboracion entre dos coautores.<br />
+Finalmente, al no ser considerada obra colectiva, no es autor el que la edita 
y divulga, por lo que era necesario pedir permiso a Andres y Angel para hacer 
una segunda impresion de la Guia de Orientacion para el Comercio.
+</p>
+
+<p>
+La diferencia entre obra colectiva y obra en colaboracion es que en esta 
ultima, no hay creacion unica y autonoma esto quiere decir que todos los 
coautores de la obra en colaboracion tienen que dar su consentimiento para la 
modificacion y distribucion de su trabajo, ya que el resultado final no es algo 
distinto de la suma de todas las partes.
+</p>
+
+<p>
+Si consideramos que un programa es algo distinto de la suma de sus partes 
entonces el copyleft es una obra colectiva en la que el coordinador atribuye a 
cada autor de una porcion, el derecho sobre la obra final si la editan o 
divulgan segun unas condiciones.
+</p>
+
+<p>
+Para los que crean que el programa no es una entidad distinta de la suma de 
las partes, entonces, el copyleft seria una obra en colaboracion en la que el 
autor de cada parte admite un derecho a modificar y divulgar a los demas 
autores, no de forma proporcional sino global sobre toda la obra.
+</p>
+
+<p>
+<STRONG> OBRA COLECTIVA Y OBRA INDIVIDUAL</STRONG>
+</p>
+
+<p>
+Sentencia de 24-7-1995.Audiencia Provincial de Valencia,(Civil).<br />
+Jose Vicente C.P. frente a la Universidad de Valencia.<br />
+Jose Vicente pide ser considerado autor del Proyecto IACU y reclama una 
compensacion.<br />
+La Audiencia considera que no estamos ante una obra en colaboracion ya que 
para eso, es necesario una perfecta identificacion entre la aportacion 
individual de cada participe.En este caso se trata de una obra colectiva porque 
hay una persona que tiene la iniciativa y coordinacion de la investigacion y 
las aportaciones se funden en una sola creacion unica y autonoma.La Audiencia 
admite que Jose Vicente participo ademas recopilando datos en la investigacion 
-trabajo de campo-para suprimir las barreras arquitectonicas para minusvalidos 
en la Universidad de Valencia pero no edito bajo su nombre la obra por lo que 
no puede ostentar sobre la misma derechos de autor.Finalmente se condeno a la 
Universidad de Valencia a pagar a Jose Vicente no una indemnizacion por 
violacion de los derechos de autor pero si una compensacion por el trabajo 
realizado.
+</p>
+
+<p>
+Esta sentencia recoge lo dicho en la Ley respecto a que para ser reconocido 
autor de la obra colectiva basta editarla y publicarla, tambien advierte 
respecto a las lagunas de la Ley en la regulacion de las obras colectivas y de 
como en caso de duda hay que tener presente los principios generales como el de 
la buena fe y de pacta sunt servanda.Es decir, que es admisible incluir 
condiciones para ser considerado autor de la obra colectiva ademas de la mera 
edicion o divulgacion; Eso es precisamente lo que hacen las licencias copyleft, 
como dije antes.
+</p>
+
+<p>
+<STRONG>PROBLEMAS QUE PUEDEN SURGIR</STRONG>
+</p>
+
+<p>
+Sentencia de 4-6-1999.Audiencia Provincial de Toledo,Seccion 1(PENAL)<br />
+N.T. y E.G. frente a Ines R.M, Isabel F.S y Francisco Javier P.C.<br />
+En esta sentencia se reconoce al Director General de Cultura de la 
Comunicacion de Castilla-La Mancha como coordinador de una obra colectiva que 
agruparia diversos trabajos sobre el Romanico en Guadalajara.
+</p>
+
+<p>
+Se encargo la preparacion de un catalago a los arquitectos N.T. y E.G 
consistente en la elaboracion y entrega de un catalogo de los 31 edificios 
romanicos de Guadalajara con sus planos y documentacion grafica.<br />
+Posteriormente el coordinador de la obra colectiva encarga a Ines R.M ,experta 
en arte Romanico y profesora titular de la Universidad Complutense de Madrid 
que redacte un texto sobre el Romanico en Guadalajara.<br />
+N.T. y E.G. no llegaron a formalizar ningun contrato de edicion con la 
Comunidad de Castilla-La Mancha debido a un fracaso en las negociaciones e 
inscribieron en el Registro de la Propiedad Intelectual de Madrid la obra 
titulada "El Romanico en Guadalajara".Posteriormente la Comunidad de 
Castilla-La Mancha inscribio en ese Registro, "La Herencia Romanica en 
Guadalajara",realizado por Isabel Maria F.S, Francisco Javier P.C e Ines 
R.M.con los planos elaborados por N.T y E.G que eran propiedad de la Comunidad 
de Castilla-La Mancha.La Audiencia Provincial no estimo que hubiese un delito 
de plagio como sostenian N.T y E.G.
+</p>
+
+<p>
+Como se lee en la propia sentencia, no es facil diferenciar, salvo casos 
evidentes, entre el plagio de una obra ajena y la utilizacion de esta como 
fuente de consulta, lo que seria admisible y licito en obras como esta.
+</p>
+
+<p>
+En el caso de los programas de ordenador seria complicado probar la existencia 
de un plagio a no ser que se hubiese producido la transcripcion literal del 
codigo fuente.
+Aparte de este comentario, he querido incluir esta sentencia como ejemplo de 
los problemas que pueden generarse en un proyecto tipo copyleft, debido a la 
falta de comunicacion entre los participantes o a la escasa informacion que 
hayan recibido los participantes al incorporarse al proyecto.
+</p>
+
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:01 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/fdles.html
===================================================================
RCS file: Licencias/fdles.html
diff -N Licencias/fdles.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/fdles.html        3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+     <title>GNU España - Licencias libres</title>
+  </head>
+<body>
+
+<div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<h2>Traducción a Español de la GNU Free Document License 1.1 (GFDL)</h2>
+</p>
+
+ <p>Los autores de esta traducción son:</p>
+<p>
+ <ul>
+  <li>Igor Támara
+  <a href="mailto:address@hidden";>address@hidden</a></li>
+  <li>Pablo Reyes <a href="mailto:address@hidden";>
+  address@hidden</a></li>
+ </ul>
+</p>
+
+<p>
+ Esta es una traducción no oficial de la GNU Free Document License
+ (GFDL), versión 1.1 a Español. No ha sido publicada por la
+ Free Software Foundation, y no establece legalmente los términos de
+ distribución para trabajos que usen la GFDL -- sólo el texto
+ de la versión original en Inglés de la GFDL lo hace. Sin
+ embargo, esperamos que esta traducción ayudaré a hablantes de
+ español a entender mejor la GFDL.
+</p>
+
+<p>
+ This is an unofficial translation of the GNU Free Document License (GFDL)
+ into Spanish. It was not published by the Free Software Foundation, and does
+ not legally state the distribution terms for works that uses the GFDL --only
+ the original English text of the GFDL does that. However, we hope that this
+ translation will help Spanish speakers understand the GFDL better.
+</p>
+
+<p>
+ La versión original de la GFDL esta disponible en: 
+ <a href="http://www.gnu.org/copyleft/fdl.html";>
+ http://www.gnu.org/copyleft/fdl.html</a>
+</p>
+
+<p>
+ <h2>Tabla de Contenidos</h2>
+</p>
+
+<p>
+<a name="licencia"></a>
+<strong>Licencia de Documentación Libre GNU</strong>
+</p>
+
+<p>
+Versión 1.1, Marzo de 2000
+</p>
+
+<p>
+Derechos de Autor (C) 2000 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAS
+se permite la copia y distribución de copias literales
+de este documento de licencia, pero no se permiten cambios.
+</p>
+
+<p>
+<strong>0. PREÁMBULO</strong>
+</p>
+
+<p>
+El propósito de esta licencia es permitir que un manual, libro de texto,
+u otro documento escrito sea "libre" en el sentido de libertad: asegurar a
+todo el mundo la libertad efectiva de copiarlo y redistribuirlo, con o sin
+modificaciones, de manera comercial o no. En segundo término, esta licencia
+preserva para el autor o para quien publica una manera de obtener
+reconocimiento por su trabajo, al tiempo que no se considera responsable de
+las modificaciones realizadas por terceros,
+lo cual significa que los trabajos derivados del documento deben a su
+vez ser libres en el mismo sentido. Complementa la Licencia Pública General
+GNU, que es una licencia de copyleft diseñada para el software libre.
+</p>
+
+<p>
+Hemos diseñado esta Licencia para usarla en manuales de software libre, ya
+que el software libre necesita documentación libre: Un programa libre debe
+venir con los manuales que ofrezcan la mismas libertades que da el software.
+Pero esta licencia no se limita a manuales de software; puede ser usada para
+cualquier trabajo textual, sin tener en cuenta su temática o si se publica
+como libro impreso. Recomendamos esta licencia principalmente para trabajos
+cuyo fin sea instructivo o de referencia.
+</p>
+
+<p>
+<strong>1. APLICABILIDAD Y DEFINICIONES</strong>
+</p>
+
+<p>
+Esta Licencia se aplica a cualquier manual u otro documento que contenga
+una nota del propietario de los derechos que indique que puede ser distribuido
+bajo los términos de la Licencia. El "Documento", en adelante, se refiere a
+culquiera de dichos manuales o trabajos. Cualquier miembro del público es un
+como "Usted".
+</p>
+
+<p>
+Una "Versión Modificada" del Documento significa cualquier trabajo que
+contenga el Documento o una porción del mismo, ya sea una copia literal o
+con modificaciones y/o traducciones a otro idioma.
+</p>
+
+<p>
+Una "Sección Secundaria" es un apéndice titulado o una sección preliminar
+al prólogo del Documento que tiene que ver exclusivamente con la relación de
+quien publica, o con los autores del Documento, o con el tema general del
+Documento (o asuntos relacionados) y cuyo contenido no entre directamente en
+tal tema general. (Por ejemplo, si el Documento es en parte un texto de
+matemáticas, una Sección Secundaria puede no explicar matemáticas). La
+relación puede ser un asunto de conexión histórica, o de posición egal,
+comercial, filosófica, ética o política con el tema o la materia del texto.
+</p>
+
+<p>
+Las "Secciones Invariantes" son ciertas Secciones Secundarias cuyos títulos
+son denominados como Secciones Invariantes en la nota que indica que el
+documento es liberado bajo esta licencia.
+</p>
+
+<p>
+Los "Textos de Cubierta" son ciertos pasajes cortos de texto que se listan,
+como Textos de Título o Textos al respaldo de la página de
+tí, en la nota que indica que el documento es liberado bajo esta
+Licencia.
+</p>
+
+<p>
+Una copia "Transparente" del Documento, significa una copia para lectura
+en máquina, representada en un formato cuya especificación está disponible
+al público general, cuyos contenidos pueden ser vistos y editados
+directamente con editores de texto genéricos o (para imágenes compuestas
+por pixeles) con programas genéricos de dibujo o (para dibujos) con algún
+editor gráfico ampliamente disponible, y que sea adecuado para exportar a
+formateadores de texto o para traducción automática a una variedad de
+formatos adecuados para ingresar a formateadores de texto. Una copia
+hecha en un formato de un archivo que no sea Transparente, cuyo formato
+ha sido diseñado para impedir o dificultar subsecuentes modificaciones
+posteriores por parte de los lectores no es Transparente. Una copia que no
+es "Transparente" es llamada "Opaca".
+</p>
+
+<p>
+Como ejemplos de formatos adecuados para copias Transparentes están el
+ASCII plano sin formato, formato de Texinfo, formato de LaTeX, SGML o XML
+usando un DTD disponible publicamente, y HTML simple que siga los estándares,
+diseñado para modificaciones humanas. Los formatos Opacos incluyen
+PostScript, PDF, formatos propietarios que pueden ser leídos y editados
+unicamente en procesadores de palabras propietarios, SGML o XML para los
+cuáles los DTD y/o herramientas de procesamiento no están disponibles
+generalmente, y el HTML generado por máquinas, producto de algún procesador de
+palabras solo para propósitos de salida.
+</p>
+
+<p>
+La "Pagina de Título" en un libro impreso significa, la pagina de titulo
+misma, más las páginas siguientes que sean necesaria para mantener,
+legiblemente, el material que esta Licencia requiere en la página de titulo.
+Para trabajos en formatos que no tienen página de título como tal, "Página
+de Título" significa el texto cercano a la aparición más prominente del
+título del trabajo, precediendo el comienzo del cuerpo del trabajo.
+</p>
+
+<p>
+<strong>2. COPIA LITERAL</strong>
+</p>
+
+<p>
+Puede copiar y distribuir el Documento en cualquier medio, sea en forma
+comercial o no, siempre y cuando esta Licencia, las notas de derecho de autor,
+y la nota de licencia que indica que esta Licencia se aplica al Documento se
+reproduzca en todas las copias, y que usted no adicione ninguna otra condición
+a las expuestas en en esta Licencia. Usted no puede usar medidas técnicas para
+obstruir o controlar la lectura o copia posterior de las copias que usted haga
+o distribuya. Sin embargo, usted puede aceptar compensación a cambio de las
+copias. Si distribuye un número suficientemente grande de copias también
+deberá seguir las condiciones de la sección 3.
+</p>
+
+<p>
+También puede prestar copias, bajo las mismas condiciones establecidas
+anteriormente, y puede exhibir copias publicamente.
+</p>
+
+<p>
+<strong>3. COPIADO EN CANTIDAD</strong>
+</p>
+
+<p>
+Si publica copias impresas del Documento que sobrepasen las 100, y la nota
+de Licencia del Documento exige Textos de Cubierta, debe incluir las copias
+con cubiertas que lleven en forma clara y legible, todos esos Textos de
+Cubierta: Textos de título en la portada, y Textos al respaldo de la
+página de tílo. Ambas cubiertas deben identificarlo a Usted
+clara y legiblemente como quien publica tales copias. La portada
+debe mostrar el título completo con todas las palabras igualmente prominentes
+y visibles. Además puede adicionar otro material en la cubierta. Las copias
+con cambios limitados en las cubiertas, siempre que preserven el título del
+Documento y satisfagan estas condiciones, pueden considerarse como copias
+literales.
+</p>
+
+<p>
+Si los textos requeridos para la cubierta son muy voluminosos para que
+ajusten legiblemente, debe colocar los primeros (tantos como sea razonable
+colocar) en la cubierta real y continuar el resto en páginas adyacentes.
+</p>
+
+<p>
+Si publica o distribuye copias Opacas del Documento cuya cantidad exceda
+las 100, debe incluir una copia Transparente, que pueda ser leída por una
+máquina, con cada copia Opaca o entregar en o con cada copia Opaca una
+dirección en una red de computadores accesible publicamente que contenga una
+copia completa Transparente del Documento, sin material adicional, a la cual
+el público en general de la red pueda acceder a bajar anónimamente sin
+cargo usando protocolos públicos y estandarizados. Si usted hace uso de la
+última opción, deberá tomar medidas necesarias, cuando comience la
+distribución de las copias Opacas en cantidad, para asegurar que esta copia
+Transparente permanecerá accesible en el sitio por lo menos un año después
+de su última distribución de copias Opacas (directamente o a través de sus
+agentes o distribuidores) de esa edición al público.
+</p>
+
+<p>
+Se solicita, aunque no es requisito, que contacte a los autores del
+Documento antes de redistribuir cualquier gran número de copias, para
+darle la oportunidad de que le provean una versión actualizada del
+Documento.
+</p>
+
+<p>
+<strong>4. MODIFICACIONES</strong>
+</p>
+
+<p>
+Puede copiar y distribuir una Versión Modificada del Documento bajo las
+condiciones de las seccions 2 y 3 anteriores, siempre que usted libere la
+Versión Modificada bajo esta misma Licencia, con la Versión Modificada
+haciendo el rol del Documento, por lo tanto licenciando la distribución y
+modificación de la Versión Modificada a quienquiera posea una copia de
+esta. Además, debe hacer lo siguiente en la Versión Modificada:
+</p>
+
+<p>
+<ul>
+ <li><strong>A.</strong> Usar en la Página de Título (y en las cubiertas,
+ si hay alguna) un título distinto al del Documento, y de versiones
+ anteriores (que deberían, si hay alguna, estar listados en la sección de
+ Historia del Documento). Puede usar el mismo título de versiones
+ anteriores al original siempre y cuando quien publicó originalmente
+ otorge permiso.</li>
+<li><strong>B.</strong> Listar en la Página de Título, como autores, una o más
+ personas o entidades responsables por la autoría o las modificaciones en
+ la Versión Modificada, junto con por lo menos cinco de los autores
+ principales del Documento (Todos sus autores principales, si hay menos de
+ cinco).</li>
+<li><strong>C.</strong> Incluir en la Página de Título el nombre de quién
+ publica la Versión Modificada, como quien publica.</li>
+<li><strong>D.</strong> Preservar todas las notas de derechos de autor del
+ Documento.</li>
+<li><strong>E.</strong> Adicionar una nota de derecho de autor apropiada a
+ sus modificaciones, adyacente a las otras notas de derecho de autor.</li>
+<li><strong>F.</strong> Incluir, immediatamente después de la nota de
+ derecho de autor, una nota de licencia dando el permiso público para usar
+ la Versión Modificada bajo los términos de esta Licencia, de la forma
+ mostrada en el anexo al final de este documento.</li>
+<li><strong>G.</strong> Preservar en esa nota de licencia el listado
+ completo de Secciones Invariantes y de los Textos de Cubiertas que
+ sean requeridos como se especifique en la nota de Licencia del
+ Documento</li>
+<li><strong>H.</strong> Incluir una copia sin modificación de esta
+ Licencia.</li>
+<li><strong>I.</strong> Preservar la sección llamada "Historia", y su
+ título, y adicionar a esta una sección estableciendo al menos el título,
+ el año,los nuevos autores, y quién publique la Versión Modificada como reza
+ en la Página de Título. Si no hay una sección titulada "Historia" en el
+ Documento, crear una estableciendo el título, el año, los autores y quieng
+ publicó el Documento como reza en la Página de Título, añadiendo además
+ una sección describiendo la Versión Modificada como se estableció en la
+ oración anterior.</li>
+<li><strong>J.</strong> Preservar la localización en red, si hay , dada en
+ la Documentación para acceso público a una copia Transparente del
+ Documento, tanto como las otras direcciones de red dadas en el Documento
+ para versiones anteriores en las cuáles estuviese basado. Estas pueden
+ ubicarse en la sección "Historia". Se puede omitir la ubicación en red
+ para un trabajo que sea publicado por lo menos cuatro años antes que el
+ Documento mismo, o si quien publica originalmente la versión da permiso
+ explícitamente.</li>
+<li><strong>K.</strong> En cualquier sección titulada "Agradecimientos" o
+ "Dedicatorias", preservar el título de la sección, y preservar en la
+ sección toda la sustancia y el tono de los agradeimientos y/o dedicatorias
+ de cada contribuyente que estén incluídas.</li>
+<li><strong>L.</strong> Preservar todas las Secciones Invariantes del
+ Documento, sin alterar su texto ni sus títulos. Números de sección o el
+ equivalente no son considerados parte de los títulos de la sección.</li>
+<li><strong>M.</strong> Borrar cualquier sección titulada "Aprobaciones".
+ Tales secciones no pueden estar incluidas en las Versiones
+ Modificadas.</li>
+<li><strong>N.</strong> No retitular ninguna sección existente como
+ "Aprobaciones" o conflictuar con el título de alguna Sección
+ Invariante.</li>
+</ul>
+</p>
+
+<p>
+Si la Versión Modificada incluye secciones o apendices nuevos o
+preliminares al prólogo que califiquen como Secciones Secundarias y contienen
+material no copiado del Documento, puede opcionalmente designar algunas o
+todas esas secciones como invariantes. Para hacerlo, adicione sus títulos a
+la lista de Secciones Invariantes en la nota de licencia de la Versión
+Modificada. Tales títulos deben ser distintos de cualquier otro título de
+sección.
+</p>
+
+<p>
+Puede adicionar una sección titulada "Aprobaciones", siempre que contenga
+unicamente aprobaciones de su Versión Modificada por varias fuentes--por
+ejemplo, observaciones de peritos o que el texto ha sido aprobado por una
+organización como la definición oficial de un estándar.
+</p>
+
+<p>
+Puede adicionar un pasaje de hasta cinco palabras como un Texto de Portada,
+y un pasaje de hasta 25 palabras al respaldo de la página de
+título al final de la lista de Textos de Cubierta en la Versión
+Modificada. Solamente un pasaje de Texto de Portada y uno al respaldo de la
+página de título puede ser adicionado por (o a manera de
+arreglos hechos por) una entidad. Si el Documento ya incluye un texto de
+cubierta para la misma portada o al respaldo de la portada, previamente
+adicionado por usted o por arreglo hecho por la misma entidad, a nombre de
+la cual usted está actuando, usted no puede adicionar otro; pero puede
+reemplazar el anterior, con permiso explícito de quien publicó previamente
+y agregó el texto anterior
+</p>
+
+<p>
+El(los) autor(es) y quien(es) publica(n) el Documento no dan con esta
+Licencia permiso para usar sus nombres para publicidad o para asegurar o
+implicar aprobación de cualquier Versión Modificada.
+</p>
+
+<p>
+ <strong>5. COMBINANDO DOCUMENTOS</strong>
+</p>
+
+<p>
+Puede combinar el Documento con otros documentos liberados bajo esta
+Licencia, bajo los términos definidos en la sección 4 anterior para versiones
+modificadas, siempre que incluya en la combinación todas las Secciones
+Invariantes de todos los documentos originales, sin modificar, y listadas
+todas como Secciones Invariantes del trabajo combinado en su nota de
+licencia.
+</p>
+
+<p>
+El trabajo combinado necesita contener solamente una copia de esta
+Licencia, y múltiples Seccions Invariantes idénticas pueden ser reemplazadas
+por una sola copia. Si hay múltiples Secciones Invariantes con el mismo
+nombre pero con contenidos diferentes, haga el título de cada una de estas
+secciones único adicionándole al final del mismo, entre paréntesis, el
+nombre del autor o de quien publicó originalmente esa sección, si es
+conocido, o si no, un número único. Haga el mismo ajuste a los títulos de
+sección en la lista de Secciones Invariantes en la nota de licencia del
+trabajo combinado.
+</p>
+
+<p>
+En la combinación, debe combinar cualquier sección titulada "Historia" de
+los varios documentos originales, formando una sección titulada "Historia"; de
+la misma forma combine cualquier seción titulada "Agradecimientos", y
+cualquier sección titulada "Dedicatorias". Debe borrar todas las secciones
+tituladas "Aprobaciones."
+</p>
+
+<p>
+ <strong>6. COLECCIONES DE DOCUMENTOS</strong>
+</p>
+
+<p>
+Puede hacer una colección consistente del Documento y otros documentos
+liberados bajo esta Licencia, y reemplazar las copias individuales de esta
+Licencia en los varios documentos con una sola copia que esté incluida en la
+colección, siempre que siga las reglas de esta Licencia para cada copia
+literal de cada uno de los documentos en cualquiera de los demás aspectos.
+</p>
+
+<p>
+Puede extraer un solo documento de una de tales colecciones, y distribuirlo
+individualmente bajo esta Licencia, siempre que inserte una copia de esta
+Licencia en el documento extraido, y siga esta Licencia en todos los otros
+aspectos concernientes a la copia literal de tal documento.
+</p>
+
+<p>
+ <strong>7. AGREGACIÓN CON TRABAJOS INDEPENDENTES</strong>
+</p>
+
+<p>
+Una recopilación del Documento o de sus derivados con otros documentos o
+trabajos separados o independientes, en cualquier tipo de distribución o medio
+de almacenamiento, no como un todo, cuenta como una Versión Modificada del
+Documento, siempre que no se aleguen derechos de autor por la recopilación.
+Tal recopilación es llamada un "agregado", y esta
+Licencia no aplica a los otros trabajos auto-contenidos así recopilados con
+el Documento, o a cuenta de haber sido recopilados, si no son
+ellos mismos trabajos derivados del Documento.
+</p>
+
+<p>
+Si el requerimiento de la sección 3 sobre el Texto de Cubierta es aplicable a
+estas copias del Documento, entonces si el Documento es menor que un cuarto
+del agregado entero, los Textos de Cubierta del Documento pueden ser
+colocados en cubiertas que enmarquen solamente el Documento entre el agregado.
+De otra forma deben aparecer en cubiertas enmarcando todo el
+agregado.
+</p>
+
+<p>
+ <strong>8. TRADUCCIÓN</strong>
+</p>
+
+<p>
+La Traducción es considerada como una clase de modificación, Así que puede
+distribuir traducciones del Documento bajo los términos de la sección 4.
+Reemplazar las Secciones Invariantes con traducciones requiere permiso
+especial de los dueños de derecho de autor, pero usted puede incluir
+traducciones de algunas o todas las Secciones Invariantes adicionalmente a
+las versiones originales de tales Secciones Invariantes. Puede incluir una
+traducción de esta Licencia siempre que incluya también la versión en
+Inglés de esta Licencia. En caso de un desacuerdo entre la traducción y la
+versión original en Inglés de esta Licencia, la versión original en Inglés
+prevalecerá.
+</p>
+
+<p>
+ <strong>9. TERMINACIÓN</strong>
+</p>
+
+<p>
+No se puede copiar, modificar, sublicenciar, o distribuir el Documento
+excepto por lo permitido expresamente bajo esta Licencia. Cualquier otro
+intento de copia, modificación, sublicenciamiento o distribución del Documento
+es nulo, y serán automáticamente terminados sus derechos bajo esa licencia.
+Sin embargo, los terceros que hayan recibido copias, o derechos, de su
+parte bajo esta Licencia no tendrán por terminadas sus licencias siempre que
+tales personas o entidades se encuentren en total conformidad con la licencia
+original.
+</p>
+
+<p>
+ <strong>10.REVISIONES FUTURAS DE ESTA LICENCIA</strong>
+</p>
+
+<p>
+La Free Software Foundation puede publicar versiones nuevas y revisadas de
+la Licencia de Documentación Libre GNU de tiempo en tiempo. Tales nuevas
+versiones serán similares en espíritu a la presente versión, pero pueden
+diferir en detalles para solucionar nuevos problemas o intereses. Vea
+http://www.gnu.org/copyleft/.
+</p>
+
+<p>
+Cada versión de la Licencia tiene un número de versión que la distingue. Si
+el Documento especifica que se aplica una versión numerada en particular de
+esta licencia o "cualquier versión posterior", usted tiene la opción
+de seguir los términos y condiciones de la versión especificada o cualquiera
+posterior que haya sido publicada (no como un borrador) por la Free Software
+Foundation. Si el Documento no especifica un número de versión de esta
+Licencia, puede escoger cualquier versión que haya sido publicada(no como un
+borrador) por la Free Software Foundation.
+</p>
+
+<p>
+<a name="uso"></a>
+<h2>Cómo usar esta Licencia para sus documentos</h2>
+</p>
+
+<p>
+Para usar esta licencia en un documento que usted haya escrito, incluya una
+copia de la Licencia en el documento y ponga el siguiente derecho de autor y
+nota de licencia justo después de la página de título:
+</p>
+
+
+<p>
+<blockquote>
+  Derecho de Autor (c) AÑO SU NOMBRE.<br />
+  Se otorga permiso para copiar, distribuir y/o modificar este documento
+  bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.1
+  o cualquier otra versión posterior publicada por la Free Software
+  Foundation; con las Secciones Invariantes siendo LISTE SUS TÍTULOS, con
+  los Textos de Portada siendo LISTELO, y con los Textos al respaldo de la
+  página de título siendo LISTELOS. Una copia de la licencia
+  es incluida en la sección titulada "Licencia de Documentación Libre GNU".
+</blockquote>
+</p>
+
+<p>
+Si no tiene Secciones Invariantes, escriba "Sin Secciones Invariantes" en
+vez de decir cuáles son invariantes. Si no tiene Texto de Portada,
+escriba "Sin Texto de Portada" en vez de "con los Textos de Portada siendo
+LISTELO"; e igualmente para los Textos al respaldo de la página de
+título.
+</p>
+
+<p>
+Si su documento contiene ejemplos de código de programa no triviales,
+recomendamos liberar estos ejemplos en paralelo bajo su elección de licencia
+de software libre, tal como la Licencia Pública General GNU 
+(<strong>GNU General Public License</strong>), para permitir su uso en
+software libre.
+</p>
+
+<p>
+<a name="Derechos"></a>
+1. N. del T. <i>copyleft</i> es un nuevo término acuñado por GNU. Nace de un
+juego de palabras en Inglés, en vez de "copyright" usan "copyleft", indicando
+que no se restringe la copia, sino por el contrario se permite mientras que
+el derecho a seguir copiando no se restrinja.
+<a href="http://www.gnu.org/copyleft/copyleft.es.html";>
+http://www.gn\u.org/copyleft/copyleft.es.html</a>
+</p>
+
+<p>
+<a name="Licensee"></a>
+2. N. del T. <i>licenciatario</i>: A quien se le otorga la licencia.
+</p>
+
+<p>
+<TABLE WIDTH="80%">
+<TR>
+<TD>
+
+ Traducción:<br />
+ Igor Támara P. <a href="mailto:address@hidden";>address@hidden</a><br />
+ Pablo Reyes <a href="mailto:address@hidden";>address@hidden
+ </a>
+
+ Revisión 1 (25.May.2000): Vladimir Támara Patiño 
+ <a href="mailto:address@hidden";>address@hidden</a>
+
+ </TD>
+</TR>
+</TABLE>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/fdles.xhtml
===================================================================
RCS file: Licencias/fdles.xhtml
diff -N Licencias/fdles.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/fdles.xhtml       3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+     <title>GNU España - Licencias libres</title>
+  </head>
+<body>
+
+<div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<h2>Traducción a Español de la GNU Free Document License 1.1 (GFDL)</h2>
+</p>
+
+ <p>Los autores de esta traducción son:</p>
+<p>
+ <ul>
+  <li>Igor Támara
+  <a href="mailto:address@hidden";>address@hidden</a></li>
+  <li>Pablo Reyes <a href="mailto:address@hidden";>
+  address@hidden</a></li>
+ </ul>
+</p>
+
+<p>
+ Esta es una traducción no oficial de la GNU Free Document License
+ (GFDL), versión 1.1 a Español. No ha sido publicada por la
+ Free Software Foundation, y no establece legalmente los términos de
+ distribución para trabajos que usen la GFDL -- sólo el texto
+ de la versión original en Inglés de la GFDL lo hace. Sin
+ embargo, esperamos que esta traducción ayudaré a hablantes de
+ español a entender mejor la GFDL.
+</p>
+
+<p>
+ This is an unofficial translation of the GNU Free Document License (GFDL)
+ into Spanish. It was not published by the Free Software Foundation, and does
+ not legally state the distribution terms for works that uses the GFDL --only
+ the original English text of the GFDL does that. However, we hope that this
+ translation will help Spanish speakers understand the GFDL better.
+</p>
+
+<p>
+ La versión original de la GFDL esta disponible en: 
+ <a href="http://www.gnu.org/copyleft/fdl.html";>
+ http://www.gnu.org/copyleft/fdl.html</a>
+</p>
+
+<p>
+ <h2>Tabla de Contenidos</h2>
+</p>
+
+<p>
+<a name="licencia"></a>
+<strong>Licencia de Documentación Libre GNU</strong>
+</p>
+
+<p>
+Versión 1.1, Marzo de 2000
+</p>
+
+<p>
+Derechos de Autor (C) 2000 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAS
+se permite la copia y distribución de copias literales
+de este documento de licencia, pero no se permiten cambios.
+</p>
+
+<p>
+<strong>0. PREÁMBULO</strong>
+</p>
+
+<p>
+El propósito de esta licencia es permitir que un manual, libro de texto,
+u otro documento escrito sea "libre" en el sentido de libertad: asegurar a
+todo el mundo la libertad efectiva de copiarlo y redistribuirlo, con o sin
+modificaciones, de manera comercial o no. En segundo término, esta licencia
+preserva para el autor o para quien publica una manera de obtener
+reconocimiento por su trabajo, al tiempo que no se considera responsable de
+las modificaciones realizadas por terceros,
+lo cual significa que los trabajos derivados del documento deben a su
+vez ser libres en el mismo sentido. Complementa la Licencia Pública General
+GNU, que es una licencia de copyleft diseñada para el software libre.
+</p>
+
+<p>
+Hemos diseñado esta Licencia para usarla en manuales de software libre, ya
+que el software libre necesita documentación libre: Un programa libre debe
+venir con los manuales que ofrezcan la mismas libertades que da el software.
+Pero esta licencia no se limita a manuales de software; puede ser usada para
+cualquier trabajo textual, sin tener en cuenta su temática o si se publica
+como libro impreso. Recomendamos esta licencia principalmente para trabajos
+cuyo fin sea instructivo o de referencia.
+</p>
+
+<p>
+<strong>1. APLICABILIDAD Y DEFINICIONES</strong>
+</p>
+
+<p>
+Esta Licencia se aplica a cualquier manual u otro documento que contenga
+una nota del propietario de los derechos que indique que puede ser distribuido
+bajo los términos de la Licencia. El "Documento", en adelante, se refiere a
+culquiera de dichos manuales o trabajos. Cualquier miembro del público es un
+como "Usted".
+</p>
+
+<p>
+Una "Versión Modificada" del Documento significa cualquier trabajo que
+contenga el Documento o una porción del mismo, ya sea una copia literal o
+con modificaciones y/o traducciones a otro idioma.
+</p>
+
+<p>
+Una "Sección Secundaria" es un apéndice titulado o una sección preliminar
+al prólogo del Documento que tiene que ver exclusivamente con la relación de
+quien publica, o con los autores del Documento, o con el tema general del
+Documento (o asuntos relacionados) y cuyo contenido no entre directamente en
+tal tema general. (Por ejemplo, si el Documento es en parte un texto de
+matemáticas, una Sección Secundaria puede no explicar matemáticas). La
+relación puede ser un asunto de conexión histórica, o de posición egal,
+comercial, filosófica, ética o política con el tema o la materia del texto.
+</p>
+
+<p>
+Las "Secciones Invariantes" son ciertas Secciones Secundarias cuyos títulos
+son denominados como Secciones Invariantes en la nota que indica que el
+documento es liberado bajo esta licencia.
+</p>
+
+<p>
+Los "Textos de Cubierta" son ciertos pasajes cortos de texto que se listan,
+como Textos de Título o Textos al respaldo de la página de
+tí, en la nota que indica que el documento es liberado bajo esta
+Licencia.
+</p>
+
+<p>
+Una copia "Transparente" del Documento, significa una copia para lectura
+en máquina, representada en un formato cuya especificación está disponible
+al público general, cuyos contenidos pueden ser vistos y editados
+directamente con editores de texto genéricos o (para imágenes compuestas
+por pixeles) con programas genéricos de dibujo o (para dibujos) con algún
+editor gráfico ampliamente disponible, y que sea adecuado para exportar a
+formateadores de texto o para traducción automática a una variedad de
+formatos adecuados para ingresar a formateadores de texto. Una copia
+hecha en un formato de un archivo que no sea Transparente, cuyo formato
+ha sido diseñado para impedir o dificultar subsecuentes modificaciones
+posteriores por parte de los lectores no es Transparente. Una copia que no
+es "Transparente" es llamada "Opaca".
+</p>
+
+<p>
+Como ejemplos de formatos adecuados para copias Transparentes están el
+ASCII plano sin formato, formato de Texinfo, formato de LaTeX, SGML o XML
+usando un DTD disponible publicamente, y HTML simple que siga los estándares,
+diseñado para modificaciones humanas. Los formatos Opacos incluyen
+PostScript, PDF, formatos propietarios que pueden ser leídos y editados
+unicamente en procesadores de palabras propietarios, SGML o XML para los
+cuáles los DTD y/o herramientas de procesamiento no están disponibles
+generalmente, y el HTML generado por máquinas, producto de algún procesador de
+palabras solo para propósitos de salida.
+</p>
+
+<p>
+La "Pagina de Título" en un libro impreso significa, la pagina de titulo
+misma, más las páginas siguientes que sean necesaria para mantener,
+legiblemente, el material que esta Licencia requiere en la página de titulo.
+Para trabajos en formatos que no tienen página de título como tal, "Página
+de Título" significa el texto cercano a la aparición más prominente del
+título del trabajo, precediendo el comienzo del cuerpo del trabajo.
+</p>
+
+<p>
+<strong>2. COPIA LITERAL</strong>
+</p>
+
+<p>
+Puede copiar y distribuir el Documento en cualquier medio, sea en forma
+comercial o no, siempre y cuando esta Licencia, las notas de derecho de autor,
+y la nota de licencia que indica que esta Licencia se aplica al Documento se
+reproduzca en todas las copias, y que usted no adicione ninguna otra condición
+a las expuestas en en esta Licencia. Usted no puede usar medidas técnicas para
+obstruir o controlar la lectura o copia posterior de las copias que usted haga
+o distribuya. Sin embargo, usted puede aceptar compensación a cambio de las
+copias. Si distribuye un número suficientemente grande de copias también
+deberá seguir las condiciones de la sección 3.
+</p>
+
+<p>
+También puede prestar copias, bajo las mismas condiciones establecidas
+anteriormente, y puede exhibir copias publicamente.
+</p>
+
+<p>
+<strong>3. COPIADO EN CANTIDAD</strong>
+</p>
+
+<p>
+Si publica copias impresas del Documento que sobrepasen las 100, y la nota
+de Licencia del Documento exige Textos de Cubierta, debe incluir las copias
+con cubiertas que lleven en forma clara y legible, todos esos Textos de
+Cubierta: Textos de título en la portada, y Textos al respaldo de la
+página de tílo. Ambas cubiertas deben identificarlo a Usted
+clara y legiblemente como quien publica tales copias. La portada
+debe mostrar el título completo con todas las palabras igualmente prominentes
+y visibles. Además puede adicionar otro material en la cubierta. Las copias
+con cambios limitados en las cubiertas, siempre que preserven el título del
+Documento y satisfagan estas condiciones, pueden considerarse como copias
+literales.
+</p>
+
+<p>
+Si los textos requeridos para la cubierta son muy voluminosos para que
+ajusten legiblemente, debe colocar los primeros (tantos como sea razonable
+colocar) en la cubierta real y continuar el resto en páginas adyacentes.
+</p>
+
+<p>
+Si publica o distribuye copias Opacas del Documento cuya cantidad exceda
+las 100, debe incluir una copia Transparente, que pueda ser leída por una
+máquina, con cada copia Opaca o entregar en o con cada copia Opaca una
+dirección en una red de computadores accesible publicamente que contenga una
+copia completa Transparente del Documento, sin material adicional, a la cual
+el público en general de la red pueda acceder a bajar anónimamente sin
+cargo usando protocolos públicos y estandarizados. Si usted hace uso de la
+última opción, deberá tomar medidas necesarias, cuando comience la
+distribución de las copias Opacas en cantidad, para asegurar que esta copia
+Transparente permanecerá accesible en el sitio por lo menos un año después
+de su última distribución de copias Opacas (directamente o a través de sus
+agentes o distribuidores) de esa edición al público.
+</p>
+
+<p>
+Se solicita, aunque no es requisito, que contacte a los autores del
+Documento antes de redistribuir cualquier gran número de copias, para
+darle la oportunidad de que le provean una versión actualizada del
+Documento.
+</p>
+
+<p>
+<strong>4. MODIFICACIONES</strong>
+</p>
+
+<p>
+Puede copiar y distribuir una Versión Modificada del Documento bajo las
+condiciones de las seccions 2 y 3 anteriores, siempre que usted libere la
+Versión Modificada bajo esta misma Licencia, con la Versión Modificada
+haciendo el rol del Documento, por lo tanto licenciando la distribución y
+modificación de la Versión Modificada a quienquiera posea una copia de
+esta. Además, debe hacer lo siguiente en la Versión Modificada:
+</p>
+
+<p>
+<ul>
+ <li><strong>A.</strong> Usar en la Página de Título (y en las cubiertas,
+ si hay alguna) un título distinto al del Documento, y de versiones
+ anteriores (que deberían, si hay alguna, estar listados en la sección de
+ Historia del Documento). Puede usar el mismo título de versiones
+ anteriores al original siempre y cuando quien publicó originalmente
+ otorge permiso.</li>
+<li><strong>B.</strong> Listar en la Página de Título, como autores, una o más
+ personas o entidades responsables por la autoría o las modificaciones en
+ la Versión Modificada, junto con por lo menos cinco de los autores
+ principales del Documento (Todos sus autores principales, si hay menos de
+ cinco).</li>
+<li><strong>C.</strong> Incluir en la Página de Título el nombre de quién
+ publica la Versión Modificada, como quien publica.</li>
+<li><strong>D.</strong> Preservar todas las notas de derechos de autor del
+ Documento.</li>
+<li><strong>E.</strong> Adicionar una nota de derecho de autor apropiada a
+ sus modificaciones, adyacente a las otras notas de derecho de autor.</li>
+<li><strong>F.</strong> Incluir, immediatamente después de la nota de
+ derecho de autor, una nota de licencia dando el permiso público para usar
+ la Versión Modificada bajo los términos de esta Licencia, de la forma
+ mostrada en el anexo al final de este documento.</li>
+<li><strong>G.</strong> Preservar en esa nota de licencia el listado
+ completo de Secciones Invariantes y de los Textos de Cubiertas que
+ sean requeridos como se especifique en la nota de Licencia del
+ Documento</li>
+<li><strong>H.</strong> Incluir una copia sin modificación de esta
+ Licencia.</li>
+<li><strong>I.</strong> Preservar la sección llamada "Historia", y su
+ título, y adicionar a esta una sección estableciendo al menos el título,
+ el año,los nuevos autores, y quién publique la Versión Modificada como reza
+ en la Página de Título. Si no hay una sección titulada "Historia" en el
+ Documento, crear una estableciendo el título, el año, los autores y quieng
+ publicó el Documento como reza en la Página de Título, añadiendo además
+ una sección describiendo la Versión Modificada como se estableció en la
+ oración anterior.</li>
+<li><strong>J.</strong> Preservar la localización en red, si hay , dada en
+ la Documentación para acceso público a una copia Transparente del
+ Documento, tanto como las otras direcciones de red dadas en el Documento
+ para versiones anteriores en las cuáles estuviese basado. Estas pueden
+ ubicarse en la sección "Historia". Se puede omitir la ubicación en red
+ para un trabajo que sea publicado por lo menos cuatro años antes que el
+ Documento mismo, o si quien publica originalmente la versión da permiso
+ explícitamente.</li>
+<li><strong>K.</strong> En cualquier sección titulada "Agradecimientos" o
+ "Dedicatorias", preservar el título de la sección, y preservar en la
+ sección toda la sustancia y el tono de los agradeimientos y/o dedicatorias
+ de cada contribuyente que estén incluídas.</li>
+<li><strong>L.</strong> Preservar todas las Secciones Invariantes del
+ Documento, sin alterar su texto ni sus títulos. Números de sección o el
+ equivalente no son considerados parte de los títulos de la sección.</li>
+<li><strong>M.</strong> Borrar cualquier sección titulada "Aprobaciones".
+ Tales secciones no pueden estar incluidas en las Versiones
+ Modificadas.</li>
+<li><strong>N.</strong> No retitular ninguna sección existente como
+ "Aprobaciones" o conflictuar con el título de alguna Sección
+ Invariante.</li>
+</ul>
+</p>
+
+<p>
+Si la Versión Modificada incluye secciones o apendices nuevos o
+preliminares al prólogo que califiquen como Secciones Secundarias y contienen
+material no copiado del Documento, puede opcionalmente designar algunas o
+todas esas secciones como invariantes. Para hacerlo, adicione sus títulos a
+la lista de Secciones Invariantes en la nota de licencia de la Versión
+Modificada. Tales títulos deben ser distintos de cualquier otro título de
+sección.
+</p>
+
+<p>
+Puede adicionar una sección titulada "Aprobaciones", siempre que contenga
+unicamente aprobaciones de su Versión Modificada por varias fuentes--por
+ejemplo, observaciones de peritos o que el texto ha sido aprobado por una
+organización como la definición oficial de un estándar.
+</p>
+
+<p>
+Puede adicionar un pasaje de hasta cinco palabras como un Texto de Portada,
+y un pasaje de hasta 25 palabras al respaldo de la página de
+título al final de la lista de Textos de Cubierta en la Versión
+Modificada. Solamente un pasaje de Texto de Portada y uno al respaldo de la
+página de título puede ser adicionado por (o a manera de
+arreglos hechos por) una entidad. Si el Documento ya incluye un texto de
+cubierta para la misma portada o al respaldo de la portada, previamente
+adicionado por usted o por arreglo hecho por la misma entidad, a nombre de
+la cual usted está actuando, usted no puede adicionar otro; pero puede
+reemplazar el anterior, con permiso explícito de quien publicó previamente
+y agregó el texto anterior
+</p>
+
+<p>
+El(los) autor(es) y quien(es) publica(n) el Documento no dan con esta
+Licencia permiso para usar sus nombres para publicidad o para asegurar o
+implicar aprobación de cualquier Versión Modificada.
+</p>
+
+<p>
+ <strong>5. COMBINANDO DOCUMENTOS</strong>
+</p>
+
+<p>
+Puede combinar el Documento con otros documentos liberados bajo esta
+Licencia, bajo los términos definidos en la sección 4 anterior para versiones
+modificadas, siempre que incluya en la combinación todas las Secciones
+Invariantes de todos los documentos originales, sin modificar, y listadas
+todas como Secciones Invariantes del trabajo combinado en su nota de
+licencia.
+</p>
+
+<p>
+El trabajo combinado necesita contener solamente una copia de esta
+Licencia, y múltiples Seccions Invariantes idénticas pueden ser reemplazadas
+por una sola copia. Si hay múltiples Secciones Invariantes con el mismo
+nombre pero con contenidos diferentes, haga el título de cada una de estas
+secciones único adicionándole al final del mismo, entre paréntesis, el
+nombre del autor o de quien publicó originalmente esa sección, si es
+conocido, o si no, un número único. Haga el mismo ajuste a los títulos de
+sección en la lista de Secciones Invariantes en la nota de licencia del
+trabajo combinado.
+</p>
+
+<p>
+En la combinación, debe combinar cualquier sección titulada "Historia" de
+los varios documentos originales, formando una sección titulada "Historia"; de
+la misma forma combine cualquier seción titulada "Agradecimientos", y
+cualquier sección titulada "Dedicatorias". Debe borrar todas las secciones
+tituladas "Aprobaciones."
+</p>
+
+<p>
+ <strong>6. COLECCIONES DE DOCUMENTOS</strong>
+</p>
+
+<p>
+Puede hacer una colección consistente del Documento y otros documentos
+liberados bajo esta Licencia, y reemplazar las copias individuales de esta
+Licencia en los varios documentos con una sola copia que esté incluida en la
+colección, siempre que siga las reglas de esta Licencia para cada copia
+literal de cada uno de los documentos en cualquiera de los demás aspectos.
+</p>
+
+<p>
+Puede extraer un solo documento de una de tales colecciones, y distribuirlo
+individualmente bajo esta Licencia, siempre que inserte una copia de esta
+Licencia en el documento extraido, y siga esta Licencia en todos los otros
+aspectos concernientes a la copia literal de tal documento.
+</p>
+
+<p>
+ <strong>7. AGREGACIÓN CON TRABAJOS INDEPENDENTES</strong>
+</p>
+
+<p>
+Una recopilación del Documento o de sus derivados con otros documentos o
+trabajos separados o independientes, en cualquier tipo de distribución o medio
+de almacenamiento, no como un todo, cuenta como una Versión Modificada del
+Documento, siempre que no se aleguen derechos de autor por la recopilación.
+Tal recopilación es llamada un "agregado", y esta
+Licencia no aplica a los otros trabajos auto-contenidos así recopilados con
+el Documento, o a cuenta de haber sido recopilados, si no son
+ellos mismos trabajos derivados del Documento.
+</p>
+
+<p>
+Si el requerimiento de la sección 3 sobre el Texto de Cubierta es aplicable a
+estas copias del Documento, entonces si el Documento es menor que un cuarto
+del agregado entero, los Textos de Cubierta del Documento pueden ser
+colocados en cubiertas que enmarquen solamente el Documento entre el agregado.
+De otra forma deben aparecer en cubiertas enmarcando todo el
+agregado.
+</p>
+
+<p>
+ <strong>8. TRADUCCIÓN</strong>
+</p>
+
+<p>
+La Traducción es considerada como una clase de modificación, Así que puede
+distribuir traducciones del Documento bajo los términos de la sección 4.
+Reemplazar las Secciones Invariantes con traducciones requiere permiso
+especial de los dueños de derecho de autor, pero usted puede incluir
+traducciones de algunas o todas las Secciones Invariantes adicionalmente a
+las versiones originales de tales Secciones Invariantes. Puede incluir una
+traducción de esta Licencia siempre que incluya también la versión en
+Inglés de esta Licencia. En caso de un desacuerdo entre la traducción y la
+versión original en Inglés de esta Licencia, la versión original en Inglés
+prevalecerá.
+</p>
+
+<p>
+ <strong>9. TERMINACIÓN</strong>
+</p>
+
+<p>
+No se puede copiar, modificar, sublicenciar, o distribuir el Documento
+excepto por lo permitido expresamente bajo esta Licencia. Cualquier otro
+intento de copia, modificación, sublicenciamiento o distribución del Documento
+es nulo, y serán automáticamente terminados sus derechos bajo esa licencia.
+Sin embargo, los terceros que hayan recibido copias, o derechos, de su
+parte bajo esta Licencia no tendrán por terminadas sus licencias siempre que
+tales personas o entidades se encuentren en total conformidad con la licencia
+original.
+</p>
+
+<p>
+ <strong>10.REVISIONES FUTURAS DE ESTA LICENCIA</strong>
+</p>
+
+<p>
+La Free Software Foundation puede publicar versiones nuevas y revisadas de
+la Licencia de Documentación Libre GNU de tiempo en tiempo. Tales nuevas
+versiones serán similares en espíritu a la presente versión, pero pueden
+diferir en detalles para solucionar nuevos problemas o intereses. Vea
+http://www.gnu.org/copyleft/.
+</p>
+
+<p>
+Cada versión de la Licencia tiene un número de versión que la distingue. Si
+el Documento especifica que se aplica una versión numerada en particular de
+esta licencia o "cualquier versión posterior", usted tiene la opción
+de seguir los términos y condiciones de la versión especificada o cualquiera
+posterior que haya sido publicada (no como un borrador) por la Free Software
+Foundation. Si el Documento no especifica un número de versión de esta
+Licencia, puede escoger cualquier versión que haya sido publicada(no como un
+borrador) por la Free Software Foundation.
+</p>
+
+<p>
+<a name="uso"></a>
+<h2>Cómo usar esta Licencia para sus documentos</h2>
+</p>
+
+<p>
+Para usar esta licencia en un documento que usted haya escrito, incluya una
+copia de la Licencia en el documento y ponga el siguiente derecho de autor y
+nota de licencia justo después de la página de título:
+</p>
+
+
+<p>
+<blockquote>
+  Derecho de Autor (c) AÑO SU NOMBRE.<br />
+  Se otorga permiso para copiar, distribuir y/o modificar este documento
+  bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.1
+  o cualquier otra versión posterior publicada por la Free Software
+  Foundation; con las Secciones Invariantes siendo LISTE SUS TÍTULOS, con
+  los Textos de Portada siendo LISTELO, y con los Textos al respaldo de la
+  página de título siendo LISTELOS. Una copia de la licencia
+  es incluida en la sección titulada "Licencia de Documentación Libre GNU".
+</blockquote>
+</p>
+
+<p>
+Si no tiene Secciones Invariantes, escriba "Sin Secciones Invariantes" en
+vez de decir cuáles son invariantes. Si no tiene Texto de Portada,
+escriba "Sin Texto de Portada" en vez de "con los Textos de Portada siendo
+LISTELO"; e igualmente para los Textos al respaldo de la página de
+título.
+</p>
+
+<p>
+Si su documento contiene ejemplos de código de programa no triviales,
+recomendamos liberar estos ejemplos en paralelo bajo su elección de licencia
+de software libre, tal como la Licencia Pública General GNU 
+(<strong>GNU General Public License</strong>), para permitir su uso en
+software libre.
+</p>
+
+<p>
+<a name="Derechos"></a>
+1. N. del T. <i>copyleft</i> es un nuevo término acuñado por GNU. Nace de un
+juego de palabras en Inglés, en vez de "copyright" usan "copyleft", indicando
+que no se restringe la copia, sino por el contrario se permite mientras que
+el derecho a seguir copiando no se restrinja.
+<a href="http://www.gnu.org/copyleft/copyleft.es.html";>
+http://www.gn\u.org/copyleft/copyleft.es.html</a>
+</p>
+
+<p>
+<a name="Licensee"></a>
+2. N. del T. <i>licenciatario</i>: A quien se le otorga la licencia.
+</p>
+
+<p>
+<TABLE WIDTH="80%">
+<TR>
+<TD>
+
+ Traducción:<br />
+ Igor Támara P. <a href="mailto:address@hidden";>address@hidden</a><br />
+ Pablo Reyes <a href="mailto:address@hidden";>address@hidden
+ </a>
+
+ Revisión 1 (25.May.2000): Vladimir Támara Patiño 
+ <a href="mailto:address@hidden";>address@hidden</a>
+
+ </TD>
+</TR>
+</TABLE>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/gples.html
===================================================================
RCS file: Licencias/gples.html
diff -N Licencias/gples.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/gples.html        3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,582 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+  <p>
+  <H2>Licencia Pública GNU</H2>
+  </p>
+  <p>
+  Esta es la conocida GNU Public License (GPL), versión 2 (de junio
+  de 1.991), que cubre la mayor parte del software de la Free Software
+  Foundation, y muchos más programas.
+  </p>
+
+  <p>
+  Los autores de esta traducción son:
+  <ul>
+   <li><a href="mailto:address@hidden";>Jesús González Barahona</a></li>
+   <li><a href="mailto:address@hidden";>Pedro de las Heras Quirós</a></li>
+  </ul>
+  </p>
+
+ <p>
+ <H2>NOTA IMPORTANTE:</H2>
+ </p>
+ <p>
+ Esta es una traducción no oficial al español de la GNU General Public
+ License. No ha sido publicada por la Free Software Foundation, y no
+ establece legalmente las condiciones de distribución para el software
+ que usa la GNU GPL. Estas condiciones se establecen solamente por
+ el texto original, en inglés, de la GNU GPL. Sin embargo, esperamos
+ que esta traducción ayude a los hispanohablantes a entender mejor la
+ GNU GPL.
+ </p>
+
+ <p>
+ <H2>IMPORTANT NOTICE:</H2>
+ </p>
+ <p>
+ This is an unofficial translation of the GNU General Public License
+ into Spanish. It was not published by the Free Software
+ Foundation, and does not legally state the distribution terms for
+ software that uses the GNU GPL--only the original English text of
+ the GNU GPL does that. However, we hope that this translation will
+ help Spanish speakers understand the GNU GPL better.
+ </p>
+
+ <p>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.<br />
+ 675 Mass Ave, Cambridge, MA 02139, EEUU<br />
+ Se permite la copia y distribución de copias literales de este
+ documento, pero no se permite su modificación.
+ </p>
+
+<p>
+<H2>Preámbulo</H2>
+</p>
+<p>
+Las licencias que cubren la mayor parte del software están
+diseñadas para quitarle a usted la libertad de compartirlo y
+modificarlo. Por el contrario, la Licencia Pública General de GNU
+pretende garantizarle la libertad de compartir y modificar software libre,
+para asegurar que el software es libre para todos sus usuarios. Esta
+Licencia Pública General se aplica a la mayor parte del software del
+la Free Software Foundation y a cualquier otro programa si sus autores se
+comprometen a utilizarla. (Existe otro software de la Free Software
+Foundation que está cubierto por la Licencia Pública General
+de GNU para Bibliotecas). Si quiere, también puede aplicarla a sus
+propios programas.
+</p>
+
+<p>
+Cuando hablamos de software libre, estamos refiriéndonos a libertad,
+no a precio. Nuestras Licencias Públicas Generales están
+diseñadas para asegurarnos de que tenga la libertad de distribuir
+copias de software libre (y cobrar por ese servicio si quiere), de que
+reciba el código fuente o que pueda conseguirlo si lo quiere, de
+que pueda modificar el software o usar fragmentos de él en nuevos
+programas libres, y de que sepa que puede hacer todas estas cosas.
+</p>
+
+<p>
+Para proteger sus derechos necesitamos algunas restricciones que prohiban
+a cualquiera negarle a usted estos derechos o pedirle que renuncie a ellos.
+Estas restricciones se traducen en ciertas obligaciones que le afectan
+si distribuye copias del software, o si lo modifica.
+</p>
+
+<p>
+Por ejemplo, si distribuye copias de uno de estos programas, sea
+gratuitamente, o a cambio de una contraprestación, debe dar a los
+receptores todos los derechos que tiene. Debe asegurarse de que ellos
+también reciben, o pueden conseguir, el código fuente. Y debe
+mostrarles estas condiciones de forma que conozcan sus derechos.
+</p>
+
+<p>
+Protegemos sus derechos con la combinación de dos medidas:
+</p>
+
+<p>
+<Ol>
+  <li>Ponemos el software bajo copyright</li>
+  <li>le ofrecemos esta licencia, que le da permiso legal para copiar,
+    distribuir y/o modificar el software.</li>
+</Ol>
+</p>
+
+<p>
+También, para la protección de cada autor y la nuestra propia,
+queremos asegurarnos de que todo el mundo comprende que no se proporciona
+ninguna garantía para este software libre. Si el software se modifica
+por cualquiera y éste a su vez lo distribuye, queremos que sus
+receptores sepan que lo que tienen no es el original, de forma que cualquier
+problema introducido por otros no afecte a la reputación de los
+autores originales.
+</p>
+
+<p>
+Por último, cualquier programa libre está constantemente
+amenazado por patentes sobre el software. Queremos evitar el peligro de
+que los redistribuidores de un programa libre obtengan patentes por su
+cuenta, convirtiendo de facto el programa en propietario. Para evitar esto,
+hemos dejado claro que cualquier patente debe ser pedida para el uso libre
+de cualquiera, o no ser pedida.
+</p>
+
+<p>
+Los términos exactos y las condiciones para la copia,
+distribución y modificación se exponen a continuación.
+</p>
+
+<p>
+<H1>Términos y condiciones para la copia, distribución y
+modificación</H1>
+</p>
+
+<ol>
+ <p>
+ <li>Esta Licencia se aplica a cualquier programa u otro tipo de trabajo
+ que contenga una nota colocada por el tenedor del copyright
+ diciendo que puede ser distribuido bajo los términos de esta Licencia
+ Pública General. En adelante, &laquo;Programa&raquo; se
+ referirá a cualquier programa o trabajo que cumpla esa
+ condición y &laquo;trabajo basado en el Programa&raquo; se
+ referirá bien al Programa o a cualquier trabajo derivado de
+ él según la ley de copyright. Esto es, un trabajo que
+ contenga el programa o una proción de él, bien en forma
+ literal o con modificaciones y/o traducido en otro lenguaje. Por lo tanto,
+ la traducción está incluida sin limitaciones en el
+ término &laquo;modificación&raquo;. Cada concesionario
+ (licenciatario) será denominado &laquo;usted&raquo;.</li>
+ </p>
+
+ <p>
+ Cualquier otra actividad que no sea la copia, distribución o
+ modificación no está cubierta por esta Licencia, está
+ fuera de su ámbito. El acto de ejecutar el Programa no está
+ restringido, y los resultados del Programa están cubiertos
+ únicamente si sus contenidos constituyen un trabajo basado en el
+ Programa, independientemente de haberlo producido mediante la
+ ejecución del programa. El que esto se cumpla, depende de lo que
+ haga el programa.
+ </p>
+
+ <p>
+ <li>Usted puede copiar y distribuir copias literales del código
+ fuente del Programa, según lo has recibido, en cualquier medio,
+ supuesto que de forma adecuada y bien visible publique en cada copia un
+ anuncio de copyright adecuado y un repudio de garantía, mantenga
+ intactos todos los anuncios que se refieran a esta Licencia y a la ausencia
+ de garantía, y proporcione a cualquier otro receptor del programa
+ una copia de esta Licencia junto con el Programa.</li>
+ </p>
+ 
+ <p>
+ Puede cobrar un precio por el acto físico de transferir una copia,
+ y puede, según su libre albedrío, ofrecer garantía
+ a cambio de unos honorarios.
+ </p>
+ 
+ <p>
+ <li>Puede modificar su copia o copias del Programa o de cualquier
+ porción de él, formando de esta manera un trabajo basado en
+ el Programa, y copiar y distribuir esa modificación o trabajo bajo
+ los términos del apartado 1, antedicho, supuesto que además
+ cumpla las siguientes condiciones:</li>
+ </p>
+</ol>
+
+ <p>
+ <OL>
+  <li>Debe hacer que los ficheros modificados lleven anuncios prominentes
+    indicando que los ha cambiado y la fecha de cualquier cambio.</li>
+  <li>Debe hacer que cualquier trabajo que distribuya o publique y que en
+    todo o en parte contenga o sea derivado del Programa o de cualquier
+        parte de él sea licenciada como un todo, sin carga alguna, a
+        todas las terceras partes y bajo los términos de esta Licencia.</li>
+  <li>Si el programa modificado lee normalmente órdenes
+    interactivamente cuando es ejecutado, debe hacer que, cuando
+        comience su ejecución para ese uso interactivo de la forma
+        más habitual, muestre o escriba un mensaje que incluya un
+        anuncio de copyright y un anuncio de que no se ofrece ninguna
+        garantía (o por el contrario que sí se ofrece
+        garantía) y que los usuarios pueden redistribuir el programa
+        bajo estas condiciones, e indicando al usuario cómo ver una
+        copia de esta licencia. (Excepción: si el propio programa es
+        interactivo pero normalmente no muestra ese anuncio, no se requiere
+        que su trabajo basado en el Programa muestre ningún anuncio).</li>
+ </OL>
+ </p>
+ 
+ <p>
+ Estos requisitos se aplican al trabajo modificado como un todo. Si partes
+ identificables de ese trabajo no son derivadas del Programa, y pueden,
+ razonablemente, ser consideradas trabajos independientes y separados por
+ ellos mismos, entonces esta Licencia y sus términos no se aplican
+ a esas partes cuando sean distribuidas como trabajos separados. Pero cuando
+ distribuya esas mismas secciones como partes de un todo que es un trabajo
+ basado en el Programa, la distribución del todo debe ser según
+ los términos de esta licencia, cuyos permisos para otros
+ licenciatarios se extienden al todo completo, y por lo tanto a todas y cada
+ una de sus partes, con independencia de quién la escribió.
+ </p>
+
+ <p>
+ Por lo tanto, no es la intención de este apartado reclamar derechos
+ o desafiar sus derechos sobre trabajos escritos totalmente por usted mismo.
+ El intento es ejercer el derecho a controlar la distribución de
+ trabajos derivados o colectivos basados en el Programa.
+ </p>
+
+ <p>
+ Además, el simple hecho de reunir un trabajo no basado en el
+ Programa con el Programa (o con un trabajo basado en el Programa) en un
+ volumen de almacenamiento o en un medio de distribución no hace
+ que dicho trabajo entre dentro del ámbito cubierto por esta Licencia.
+ </p>
+ 
+ 
+ <p>
+ <li>Puede copiar y distribuir el Programa (o un trabajo basado en él,
+ según se especifica en el apartado 2, como código objeto
+ o en formato ejecutable según los términos de los apartados
+ 1 y 2, supuesto que además cumpla una de las siguientes condiciones:</li>
+ </p>
+ 
+ <p>
+ <OL>
+  <li>Acompañarlo con el código fuente completo
+    correspondiente, en formato electrónico, que debe ser
+        distribuido según se especifica en los apartados 1 y 2 de esta
+        Licencia en un medio habitualmente utilizado para el intercambio de
+        programas, o</li>
+        
+  <li>Acompañarlo con una oferta por escrito, válida durante
+    al menos tres años, de proporcionar a cualquier tercera parte
+        una copia completa en formato electrónico del código
+        fuente correspondiente, a un coste no mayor que el de realizar
+        físicamente la distribución del fuente, que será
+        distribuido bajo las condiciones descritas en los apartados 1 y 2
+        anteriores, en un medio habitualmente utilizado para el intercambio
+        de programas, o</li>
+  <li>Acompañarlo con la información que recibiste ofreciendo
+    distribuir el código fuente correspondiente. (Esta opción
+    se permite sólo para distribución no comercial y
+        sólo si usted recibió el programa como código
+        objeto o en formato ejecutable con tal oferta, de acuerdo con el
+        apartado b anterior).</li>
+ </OL>
+ </p>
+ 
+ <p>
+ Por código fuente de un trabajo se entiende la forma preferida del
+ trabajo cuando se le hacen modificaciones. Para un trabajo ejecutable,
+ se entiende por código fuente completo todo el código fuente
+ para todos los módulos que contiene, más cualquier fichero
+ asociado de definición de interfaces, más los guiones
+ utilizados para controlar la compilación e instalación del
+ ejecutable.
+ </p>
+ 
+ <p>
+ Como excepción especial el código fuente distribuido no
+ necesita incluir nada que sea distribuido normalmente (bien como fuente,
+ bien en forma binaria) con los componentes principales (compilador, kernel
+ y similares) del sistema operativo en el cual funciona el ejecutable, a no
+ ser que el propio componente acompañe al ejecutable.
+ </p>
+ 
+ <p>
+ Si la distribución del ejecutable o del código objeto
+ se hace mediante la oferta acceso para copiarlo de un cierto lugar, entonces
+ se considera la oferta de acceso para copiar el código fuente del
+ mismo lugar como distribución del código fuente, incluso
+ aunque terceras partes no estén forzadas a copiar el fuente junto
+ con el código objeto.
+ </p>
+ 
+ <p>
+ No puede copiar, modificar, sublicenciar o distribuir el Programa excepto
+ como prevé expresamente esta Licencia. Cualquier intento de copiar,
+ modificar sublicenciar o distribuir el Programa de otra forma es
+ inválida, y hará que cesen automáticamente los derechos
+ que te proporciona esta Licencia. En cualquier caso, las partes que hayan
+ recibido copias o derechos de usted bajo esta Licencia no cesarán en
+ sus derechos mientras esas partes continúen cumpliéndola.
+ </p>
+ 
+ <p>
+ <li>No está obligado a aceptar esta licencia, ya que no la ha firmado.
+ Sin embargo, no hay hada más que le proporcione permiso para modificar
+ o distribuir el Programa o sus trabajos derivados. Estas acciones
+ están prohibidas por la ley si no acepta esta Licencia. Por lo
+ tanto, si modifica o distribuye el Programa (o cualquier trabajo basado en
+ el Programa), está indicando que acepta esta Licencia para poder
+ hacerlo, y todos sus términos y condiciones para copiar, distribuir
+ o modificar el Programa o trabajos basados en él.</li>
+ </p>
+
+<OL>
+ <p>
+ <li>Cada vez que redistribuya el Programa (o cualquier trabajo basado en
+ el Programa), el receptor recibe automáticamente una licencia del
+ licenciatario original para copiar, distribuir o modificar el Programa,
+ de forma sujeta a estos términos y condiciones. No puede imponer
+ al receptor ninguna restricción más sobre el ejercicio de
+ los derechos aquí garantizados. No es usted responsable de hacer
+ cumplir esta licencia por terceras partes.</li>
+ </p>
+
+ <p>
+ <li>Si como consecuencia de una resolución judicial o de una
+ alegación de infracción de patente o por cualquier otra
+ razón (no limitada a asuntos relacionados con patentes) se le
+ imponen condiciones (ya sea por mandato judicial, por acuerdo o por
+ cualquier otra causa) que contradigan las condiciones de esta Licencia,
+ ello no le exime de cumplir las condiciones de esta Licencia. Si no puede
+ realizar distribuciones de forma que se satisfagan simultáneamente
+ sus obligaciones bajo esta licencia y cualquier otra obligación
+ pertinente entonces, como consecuencia, no puede distribuir el Programa de
+ ninguna forma. Por ejemplo, si una patente no permite la
+ redistribución libre de derechos de autor del Programa por parte de
+ todos aquellos que reciban copias directa o indirectamente a través
+ de usted, entonces la única forma en que podría satisfacer
+ tanto esa condición como esta Licencia sería evitar
+ completamente la distribución del Programa.</li>
+ </p>
+
+ <p>
+ Si cualquier porción de este apartado se considera inválida
+ o imposible de cumplir bajo cualquier circunstancia particular ha de
+ cumplirse el resto y la sección por entero ha de cumplirse en
+ cualquier otra circunstancia.
+ </p>
+ 
+ <p>
+ No es el propósito de este apartado inducirle a infringir ninguna
+ reivindicación de patente ni de ningún otro derecho deç
+ propiedad o impugnar la validez de ninguna de dichas reivindicaciones. Este
+ apartado tiene el único propósito de proteger la integridad
+ del sistema de distribución de software libre, que se realiza
+ mediante prácticas de licencia pública. Mucha gente ha hecho
+ contribuciones generosas a la gran variedad de software distribuido mediante
+ ese sistema con la confianza de que el sistema se aplicará
+ consistentemente. Será el autor/donante quien decida si quiere
+ distribuir software mediante cualquier otro sistema y una licencia no puede
+ imponer esa elección.
+ </p>
+
+ <p>
+ Este apartado pretende dejar completamente claro lo que se cree que
+ es una consecuencia del resto de esta Licencia.
+ </p>
+ 
+ <p>
+ <li>Si la distribución y/o uso de el Programa está restringida
+ en ciertos países, bien por patentes o por interfaces bajo copyright,
+ el tenedor del copyright que coloca este Programa bajo esta Licencia puede
+ añadir una limitación explícita de distribución
+ geográfica excluyendo esos países, de forma que la
+ distribución se permita sólo en o entre los países no
+ excluidos de esta manera. En ese caso, esta Licencia incorporará la
+ limitación como si estuviese escrita en el cuerpo de esta Licencia.</li>
+ </p>
+ 
+ <p>
+ <li>La Free Software Foundation puede publicar versiones revisadas y/o nuevas
+ de la Licencia Pública General de tiempo en tiempo. Dichas nuevas
+ versiones serán similares en espíritu a la presente
+ versión, pero pueden ser diferentes en detalles para considerar
+ nuevos problemas o situaciones.</li>
+ </p>
+ 
+ <p>
+ Cada versión recibe un número de versión que la
+ distingue de otras. Si el Programa especifica un número de
+ versión de esta Licencia que se refiere a ella y a &laquo;cualquier
+ versión posterior&raquo;, tienes la opción de seguir los
+ términos y condiciones, bien de esa versión, bien de
+ cualquier versión posterior publicada por la Free Software
+ Foundation. Si el Programa no especifica un número de versión
+ de esta Licencia, puedes escoger cualquier versión publicada por la
+ Free Software Foundation.
+ </p>
+
+ <p>
+ <li>Si quiere incorporar partes del Programa en otros programas libres cuyas
+ condiciones de distribución son diferentes, escribe al autor para
+ pedirle permiso. Si el software tiene copyright de la Free Software
+ Foundation, escribe a la Free Software Foundation: algunas veces hacemos
+ excepciones en estos casos. Nuestra decisión estará guiada
+ por el doble objetivo de de preservar la libertad de todos los derivados de
+ nuestro software libre y promover el que se comparta y reutilice el software
+ en general.</li>
+ </p>
+</OL>
+
+<p>
+<H2>AUSENCIA DE GARANTÍA</H2>
+</p>
+<OL START="12">
+ <p>
+ <li>Como el programa se licencia libre de cargas, no se ofrece ninguna
+ garantía sobre el programa, en todas la extensión
+ permitida por la legislación aplicable. Excepto cuando se indique
+ de otra forma por escrito, los tenedores del copyright y/u otras partes
+ proporcionan el programa &laquo;tal cual&raquo;, sin garantía de
+ ninguna clase, bien expresa o implícita, con inclusión, pero
+ sin limitación a las garantías mercantiles implícitas
+ o a la conveniencia para un propósito particular. Cualquier riesgo
+ referente a la calidad y prestaciones del programa es asumido por usted.
+ Si se probase que el Programa es defectuoso, asume el coste de cualquier
+ servicio, reparación o corrección.</li>
+ </p>
+
+ <p>
+ <li>En ningún caso, salvo que lo requiera la legislaciónç
+ aplicable o haya sido acordado por escrito, ningún tenedor del
+ copyright ni ninguna otra parte que modifique y/o redistribuya el Programa
+ según se permite en esta Licencia será responsable ante usted
+ por daños, incluyendo cualquier daño general, especial,
+ incidental o resultante producido por el uso o la imposibilidad de uso del
+ Programa (con inclusión, pero sin limitación a la
+ pérdida de datos o a la generación incorrecta de datos o a
+ pérdidas sufridas por usted o por terceras partes o a un fallo del
+ Programa al funcionar en combinación con cualquier otro programa),
+ incluso si dicho tenedor u otra parte ha sido advertido de la posibilidad
+ de dichos daños.</li>
+ </p>
+</OL>
+
+<p>
+FIN DE TÉRMINOS Y CONDICIONES
+</p>
+
+<p>
+<h1>Apéndice: Cómo aplicar estos términos a sus nuevos
+programas.</h1>
+</p>
+<p>
+para el público en general, la mejor forma de conseguirlo es
+convirtiéndolo en software libre que cualquiera pueda redistribuir y
+cambiar bajo estos términos.
+</p>
+
+<p>
+Para hacerlo, añada los siguientes anuncios al programa. Lo más
+seguro es añadirlos al principio de cada fichero fuente para transmitir
+lo más efectivamente posible la ausencia de garantía.
+Además cada fichero debería tener al menos la línea de
+&laquo;copyright&raquo; y un indicador a dónde puede encontrarse el
+anuncio completo.
+</p>
+
+<p>
+&lt;una línea para indicar el nombre
+del programa y una rápida idea de qué hace.>
+</p>
+
+<p>
+Copyright (C) 19aa &lt;nombre del autor<br />
+Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo
+los términos de la Licencia Pública General de GNU según
+es publicada por la Free Software Foundation, bien de la versión 2 de
+dicha Licencia o bien (según su elección) de cualquier
+versión posterior.
+</p>
+
+<p>
+Este programa se distribuye con la esperanza de que sea útil,
+pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL
+implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO
+PARTICULAR. Véase la Licencia Pública General de GNU para
+más detalles.
+</p>
+
+<p>
+Debería haber recibido una copia de la Licencia Pública
+General junto con este programa. Si no ha sido así, escriba a la
+Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
+</p>
+
+<p>
+Añada también información sobre cómo contactar
+con usted mediante correo electrónico y postal.
+</p>
+
+<p>
+Si el programa es interactivo, haga que muestre un pequeño anuncio
+como el siguiente, cuando comienza a funcionar en modo interactivo:
+</p>
+
+<p>
+Gnomovision versión 69, Copyright (C) 19aa nombre del autor
+</p>
+
+<p>
+Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para
+más detalles escriba &laquo;show w&raquo;.
+</p>
+
+<p>
+Los comandos hipotéticos &laquo;show w&raquo; y &laquo;show c&raquo;
+deberían mostrar las partes adecuadas de la Licencia Pública
+General. Por supuesto, los comandos que use pueden llamarse de cualquier
+otra manera. Podrían incluso ser pulsaciones del ratón o
+elementos de un menú (lo que sea apropiado para su programa).
+</p>
+
+<p>
+También deberías conseguir que su empleador (si trabaja
+como programador) o tu Universidad (si es el caso) firme un &laquo;renuncia
+de copyright&raquo; para el programa, si es necesario. A continuación
+se ofrece un ejemplo, altere los nombres según sea conveniente:
+</p>
+
+<p>
+<blockquote>
+ Yoyodyne, Inc. mediante este documento renuncia a cualquier interés
+ de derechos de copyright con respecto al programa Gnomovision (que hace
+ pasadas a compiladores) escrito por Pepe Programador.<br />
+
+ &lt;firma de Pepito Grillo>, 20 de diciembre de 1996<br />
+
+ Pepito Grillo, Presidente de Asuntillos Varios.<br />
+</blockquote>
+</p>
+
+<p>
+Esta Licencia Pública General no permite que incluya sus programas en
+programas propietarios. Si su programa es una biblioteca de subrutinas, puede
+considerar más útil el permitir el enlazado de aplicaciones
+propietarias con la biblioteca. Si este es el caso, use la Licencia
+Pública General de GNU para Bibliotecas en lugar de esta Licencia.
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/gples.xhtml
===================================================================
RCS file: Licencias/gples.xhtml
diff -N Licencias/gples.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/gples.xhtml       3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,582 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+  <p>
+  <H2>Licencia Pública GNU</H2>
+  </p>
+  <p>
+  Esta es la conocida GNU Public License (GPL), versión 2 (de junio
+  de 1.991), que cubre la mayor parte del software de la Free Software
+  Foundation, y muchos más programas.
+  </p>
+
+  <p>
+  Los autores de esta traducción son:
+  <ul>
+   <li><a href="mailto:address@hidden";>Jesús González Barahona</a></li>
+   <li><a href="mailto:address@hidden";>Pedro de las Heras Quirós</a></li>
+  </ul>
+  </p>
+
+ <p>
+ <H2>NOTA IMPORTANTE:</H2>
+ </p>
+ <p>
+ Esta es una traducción no oficial al español de la GNU General Public
+ License. No ha sido publicada por la Free Software Foundation, y no
+ establece legalmente las condiciones de distribución para el software
+ que usa la GNU GPL. Estas condiciones se establecen solamente por
+ el texto original, en inglés, de la GNU GPL. Sin embargo, esperamos
+ que esta traducción ayude a los hispanohablantes a entender mejor la
+ GNU GPL.
+ </p>
+
+ <p>
+ <H2>IMPORTANT NOTICE:</H2>
+ </p>
+ <p>
+ This is an unofficial translation of the GNU General Public License
+ into Spanish. It was not published by the Free Software
+ Foundation, and does not legally state the distribution terms for
+ software that uses the GNU GPL--only the original English text of
+ the GNU GPL does that. However, we hope that this translation will
+ help Spanish speakers understand the GNU GPL better.
+ </p>
+
+ <p>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.<br />
+ 675 Mass Ave, Cambridge, MA 02139, EEUU<br />
+ Se permite la copia y distribución de copias literales de este
+ documento, pero no se permite su modificación.
+ </p>
+
+<p>
+<H2>Preámbulo</H2>
+</p>
+<p>
+Las licencias que cubren la mayor parte del software están
+diseñadas para quitarle a usted la libertad de compartirlo y
+modificarlo. Por el contrario, la Licencia Pública General de GNU
+pretende garantizarle la libertad de compartir y modificar software libre,
+para asegurar que el software es libre para todos sus usuarios. Esta
+Licencia Pública General se aplica a la mayor parte del software del
+la Free Software Foundation y a cualquier otro programa si sus autores se
+comprometen a utilizarla. (Existe otro software de la Free Software
+Foundation que está cubierto por la Licencia Pública General
+de GNU para Bibliotecas). Si quiere, también puede aplicarla a sus
+propios programas.
+</p>
+
+<p>
+Cuando hablamos de software libre, estamos refiriéndonos a libertad,
+no a precio. Nuestras Licencias Públicas Generales están
+diseñadas para asegurarnos de que tenga la libertad de distribuir
+copias de software libre (y cobrar por ese servicio si quiere), de que
+reciba el código fuente o que pueda conseguirlo si lo quiere, de
+que pueda modificar el software o usar fragmentos de él en nuevos
+programas libres, y de que sepa que puede hacer todas estas cosas.
+</p>
+
+<p>
+Para proteger sus derechos necesitamos algunas restricciones que prohiban
+a cualquiera negarle a usted estos derechos o pedirle que renuncie a ellos.
+Estas restricciones se traducen en ciertas obligaciones que le afectan
+si distribuye copias del software, o si lo modifica.
+</p>
+
+<p>
+Por ejemplo, si distribuye copias de uno de estos programas, sea
+gratuitamente, o a cambio de una contraprestación, debe dar a los
+receptores todos los derechos que tiene. Debe asegurarse de que ellos
+también reciben, o pueden conseguir, el código fuente. Y debe
+mostrarles estas condiciones de forma que conozcan sus derechos.
+</p>
+
+<p>
+Protegemos sus derechos con la combinación de dos medidas:
+</p>
+
+<p>
+<Ol>
+  <li>Ponemos el software bajo copyright</li>
+  <li>le ofrecemos esta licencia, que le da permiso legal para copiar,
+    distribuir y/o modificar el software.</li>
+</Ol>
+</p>
+
+<p>
+También, para la protección de cada autor y la nuestra propia,
+queremos asegurarnos de que todo el mundo comprende que no se proporciona
+ninguna garantía para este software libre. Si el software se modifica
+por cualquiera y éste a su vez lo distribuye, queremos que sus
+receptores sepan que lo que tienen no es el original, de forma que cualquier
+problema introducido por otros no afecte a la reputación de los
+autores originales.
+</p>
+
+<p>
+Por último, cualquier programa libre está constantemente
+amenazado por patentes sobre el software. Queremos evitar el peligro de
+que los redistribuidores de un programa libre obtengan patentes por su
+cuenta, convirtiendo de facto el programa en propietario. Para evitar esto,
+hemos dejado claro que cualquier patente debe ser pedida para el uso libre
+de cualquiera, o no ser pedida.
+</p>
+
+<p>
+Los términos exactos y las condiciones para la copia,
+distribución y modificación se exponen a continuación.
+</p>
+
+<p>
+<H1>Términos y condiciones para la copia, distribución y
+modificación</H1>
+</p>
+
+<ol>
+ <p>
+ <li>Esta Licencia se aplica a cualquier programa u otro tipo de trabajo
+ que contenga una nota colocada por el tenedor del copyright
+ diciendo que puede ser distribuido bajo los términos de esta Licencia
+ Pública General. En adelante, &laquo;Programa&raquo; se
+ referirá a cualquier programa o trabajo que cumpla esa
+ condición y &laquo;trabajo basado en el Programa&raquo; se
+ referirá bien al Programa o a cualquier trabajo derivado de
+ él según la ley de copyright. Esto es, un trabajo que
+ contenga el programa o una proción de él, bien en forma
+ literal o con modificaciones y/o traducido en otro lenguaje. Por lo tanto,
+ la traducción está incluida sin limitaciones en el
+ término &laquo;modificación&raquo;. Cada concesionario
+ (licenciatario) será denominado &laquo;usted&raquo;.</li>
+ </p>
+
+ <p>
+ Cualquier otra actividad que no sea la copia, distribución o
+ modificación no está cubierta por esta Licencia, está
+ fuera de su ámbito. El acto de ejecutar el Programa no está
+ restringido, y los resultados del Programa están cubiertos
+ únicamente si sus contenidos constituyen un trabajo basado en el
+ Programa, independientemente de haberlo producido mediante la
+ ejecución del programa. El que esto se cumpla, depende de lo que
+ haga el programa.
+ </p>
+
+ <p>
+ <li>Usted puede copiar y distribuir copias literales del código
+ fuente del Programa, según lo has recibido, en cualquier medio,
+ supuesto que de forma adecuada y bien visible publique en cada copia un
+ anuncio de copyright adecuado y un repudio de garantía, mantenga
+ intactos todos los anuncios que se refieran a esta Licencia y a la ausencia
+ de garantía, y proporcione a cualquier otro receptor del programa
+ una copia de esta Licencia junto con el Programa.</li>
+ </p>
+ 
+ <p>
+ Puede cobrar un precio por el acto físico de transferir una copia,
+ y puede, según su libre albedrío, ofrecer garantía
+ a cambio de unos honorarios.
+ </p>
+ 
+ <p>
+ <li>Puede modificar su copia o copias del Programa o de cualquier
+ porción de él, formando de esta manera un trabajo basado en
+ el Programa, y copiar y distribuir esa modificación o trabajo bajo
+ los términos del apartado 1, antedicho, supuesto que además
+ cumpla las siguientes condiciones:</li>
+ </p>
+</ol>
+
+ <p>
+ <OL>
+  <li>Debe hacer que los ficheros modificados lleven anuncios prominentes
+    indicando que los ha cambiado y la fecha de cualquier cambio.</li>
+  <li>Debe hacer que cualquier trabajo que distribuya o publique y que en
+    todo o en parte contenga o sea derivado del Programa o de cualquier
+        parte de él sea licenciada como un todo, sin carga alguna, a
+        todas las terceras partes y bajo los términos de esta Licencia.</li>
+  <li>Si el programa modificado lee normalmente órdenes
+    interactivamente cuando es ejecutado, debe hacer que, cuando
+        comience su ejecución para ese uso interactivo de la forma
+        más habitual, muestre o escriba un mensaje que incluya un
+        anuncio de copyright y un anuncio de que no se ofrece ninguna
+        garantía (o por el contrario que sí se ofrece
+        garantía) y que los usuarios pueden redistribuir el programa
+        bajo estas condiciones, e indicando al usuario cómo ver una
+        copia de esta licencia. (Excepción: si el propio programa es
+        interactivo pero normalmente no muestra ese anuncio, no se requiere
+        que su trabajo basado en el Programa muestre ningún anuncio).</li>
+ </OL>
+ </p>
+ 
+ <p>
+ Estos requisitos se aplican al trabajo modificado como un todo. Si partes
+ identificables de ese trabajo no son derivadas del Programa, y pueden,
+ razonablemente, ser consideradas trabajos independientes y separados por
+ ellos mismos, entonces esta Licencia y sus términos no se aplican
+ a esas partes cuando sean distribuidas como trabajos separados. Pero cuando
+ distribuya esas mismas secciones como partes de un todo que es un trabajo
+ basado en el Programa, la distribución del todo debe ser según
+ los términos de esta licencia, cuyos permisos para otros
+ licenciatarios se extienden al todo completo, y por lo tanto a todas y cada
+ una de sus partes, con independencia de quién la escribió.
+ </p>
+
+ <p>
+ Por lo tanto, no es la intención de este apartado reclamar derechos
+ o desafiar sus derechos sobre trabajos escritos totalmente por usted mismo.
+ El intento es ejercer el derecho a controlar la distribución de
+ trabajos derivados o colectivos basados en el Programa.
+ </p>
+
+ <p>
+ Además, el simple hecho de reunir un trabajo no basado en el
+ Programa con el Programa (o con un trabajo basado en el Programa) en un
+ volumen de almacenamiento o en un medio de distribución no hace
+ que dicho trabajo entre dentro del ámbito cubierto por esta Licencia.
+ </p>
+ 
+ 
+ <p>
+ <li>Puede copiar y distribuir el Programa (o un trabajo basado en él,
+ según se especifica en el apartado 2, como código objeto
+ o en formato ejecutable según los términos de los apartados
+ 1 y 2, supuesto que además cumpla una de las siguientes condiciones:</li>
+ </p>
+ 
+ <p>
+ <OL>
+  <li>Acompañarlo con el código fuente completo
+    correspondiente, en formato electrónico, que debe ser
+        distribuido según se especifica en los apartados 1 y 2 de esta
+        Licencia en un medio habitualmente utilizado para el intercambio de
+        programas, o</li>
+        
+  <li>Acompañarlo con una oferta por escrito, válida durante
+    al menos tres años, de proporcionar a cualquier tercera parte
+        una copia completa en formato electrónico del código
+        fuente correspondiente, a un coste no mayor que el de realizar
+        físicamente la distribución del fuente, que será
+        distribuido bajo las condiciones descritas en los apartados 1 y 2
+        anteriores, en un medio habitualmente utilizado para el intercambio
+        de programas, o</li>
+  <li>Acompañarlo con la información que recibiste ofreciendo
+    distribuir el código fuente correspondiente. (Esta opción
+    se permite sólo para distribución no comercial y
+        sólo si usted recibió el programa como código
+        objeto o en formato ejecutable con tal oferta, de acuerdo con el
+        apartado b anterior).</li>
+ </OL>
+ </p>
+ 
+ <p>
+ Por código fuente de un trabajo se entiende la forma preferida del
+ trabajo cuando se le hacen modificaciones. Para un trabajo ejecutable,
+ se entiende por código fuente completo todo el código fuente
+ para todos los módulos que contiene, más cualquier fichero
+ asociado de definición de interfaces, más los guiones
+ utilizados para controlar la compilación e instalación del
+ ejecutable.
+ </p>
+ 
+ <p>
+ Como excepción especial el código fuente distribuido no
+ necesita incluir nada que sea distribuido normalmente (bien como fuente,
+ bien en forma binaria) con los componentes principales (compilador, kernel
+ y similares) del sistema operativo en el cual funciona el ejecutable, a no
+ ser que el propio componente acompañe al ejecutable.
+ </p>
+ 
+ <p>
+ Si la distribución del ejecutable o del código objeto
+ se hace mediante la oferta acceso para copiarlo de un cierto lugar, entonces
+ se considera la oferta de acceso para copiar el código fuente del
+ mismo lugar como distribución del código fuente, incluso
+ aunque terceras partes no estén forzadas a copiar el fuente junto
+ con el código objeto.
+ </p>
+ 
+ <p>
+ No puede copiar, modificar, sublicenciar o distribuir el Programa excepto
+ como prevé expresamente esta Licencia. Cualquier intento de copiar,
+ modificar sublicenciar o distribuir el Programa de otra forma es
+ inválida, y hará que cesen automáticamente los derechos
+ que te proporciona esta Licencia. En cualquier caso, las partes que hayan
+ recibido copias o derechos de usted bajo esta Licencia no cesarán en
+ sus derechos mientras esas partes continúen cumpliéndola.
+ </p>
+ 
+ <p>
+ <li>No está obligado a aceptar esta licencia, ya que no la ha firmado.
+ Sin embargo, no hay hada más que le proporcione permiso para modificar
+ o distribuir el Programa o sus trabajos derivados. Estas acciones
+ están prohibidas por la ley si no acepta esta Licencia. Por lo
+ tanto, si modifica o distribuye el Programa (o cualquier trabajo basado en
+ el Programa), está indicando que acepta esta Licencia para poder
+ hacerlo, y todos sus términos y condiciones para copiar, distribuir
+ o modificar el Programa o trabajos basados en él.</li>
+ </p>
+
+<OL>
+ <p>
+ <li>Cada vez que redistribuya el Programa (o cualquier trabajo basado en
+ el Programa), el receptor recibe automáticamente una licencia del
+ licenciatario original para copiar, distribuir o modificar el Programa,
+ de forma sujeta a estos términos y condiciones. No puede imponer
+ al receptor ninguna restricción más sobre el ejercicio de
+ los derechos aquí garantizados. No es usted responsable de hacer
+ cumplir esta licencia por terceras partes.</li>
+ </p>
+
+ <p>
+ <li>Si como consecuencia de una resolución judicial o de una
+ alegación de infracción de patente o por cualquier otra
+ razón (no limitada a asuntos relacionados con patentes) se le
+ imponen condiciones (ya sea por mandato judicial, por acuerdo o por
+ cualquier otra causa) que contradigan las condiciones de esta Licencia,
+ ello no le exime de cumplir las condiciones de esta Licencia. Si no puede
+ realizar distribuciones de forma que se satisfagan simultáneamente
+ sus obligaciones bajo esta licencia y cualquier otra obligación
+ pertinente entonces, como consecuencia, no puede distribuir el Programa de
+ ninguna forma. Por ejemplo, si una patente no permite la
+ redistribución libre de derechos de autor del Programa por parte de
+ todos aquellos que reciban copias directa o indirectamente a través
+ de usted, entonces la única forma en que podría satisfacer
+ tanto esa condición como esta Licencia sería evitar
+ completamente la distribución del Programa.</li>
+ </p>
+
+ <p>
+ Si cualquier porción de este apartado se considera inválida
+ o imposible de cumplir bajo cualquier circunstancia particular ha de
+ cumplirse el resto y la sección por entero ha de cumplirse en
+ cualquier otra circunstancia.
+ </p>
+ 
+ <p>
+ No es el propósito de este apartado inducirle a infringir ninguna
+ reivindicación de patente ni de ningún otro derecho deç
+ propiedad o impugnar la validez de ninguna de dichas reivindicaciones. Este
+ apartado tiene el único propósito de proteger la integridad
+ del sistema de distribución de software libre, que se realiza
+ mediante prácticas de licencia pública. Mucha gente ha hecho
+ contribuciones generosas a la gran variedad de software distribuido mediante
+ ese sistema con la confianza de que el sistema se aplicará
+ consistentemente. Será el autor/donante quien decida si quiere
+ distribuir software mediante cualquier otro sistema y una licencia no puede
+ imponer esa elección.
+ </p>
+
+ <p>
+ Este apartado pretende dejar completamente claro lo que se cree que
+ es una consecuencia del resto de esta Licencia.
+ </p>
+ 
+ <p>
+ <li>Si la distribución y/o uso de el Programa está restringida
+ en ciertos países, bien por patentes o por interfaces bajo copyright,
+ el tenedor del copyright que coloca este Programa bajo esta Licencia puede
+ añadir una limitación explícita de distribución
+ geográfica excluyendo esos países, de forma que la
+ distribución se permita sólo en o entre los países no
+ excluidos de esta manera. En ese caso, esta Licencia incorporará la
+ limitación como si estuviese escrita en el cuerpo de esta Licencia.</li>
+ </p>
+ 
+ <p>
+ <li>La Free Software Foundation puede publicar versiones revisadas y/o nuevas
+ de la Licencia Pública General de tiempo en tiempo. Dichas nuevas
+ versiones serán similares en espíritu a la presente
+ versión, pero pueden ser diferentes en detalles para considerar
+ nuevos problemas o situaciones.</li>
+ </p>
+ 
+ <p>
+ Cada versión recibe un número de versión que la
+ distingue de otras. Si el Programa especifica un número de
+ versión de esta Licencia que se refiere a ella y a &laquo;cualquier
+ versión posterior&raquo;, tienes la opción de seguir los
+ términos y condiciones, bien de esa versión, bien de
+ cualquier versión posterior publicada por la Free Software
+ Foundation. Si el Programa no especifica un número de versión
+ de esta Licencia, puedes escoger cualquier versión publicada por la
+ Free Software Foundation.
+ </p>
+
+ <p>
+ <li>Si quiere incorporar partes del Programa en otros programas libres cuyas
+ condiciones de distribución son diferentes, escribe al autor para
+ pedirle permiso. Si el software tiene copyright de la Free Software
+ Foundation, escribe a la Free Software Foundation: algunas veces hacemos
+ excepciones en estos casos. Nuestra decisión estará guiada
+ por el doble objetivo de de preservar la libertad de todos los derivados de
+ nuestro software libre y promover el que se comparta y reutilice el software
+ en general.</li>
+ </p>
+</OL>
+
+<p>
+<H2>AUSENCIA DE GARANTÍA</H2>
+</p>
+<OL START="12">
+ <p>
+ <li>Como el programa se licencia libre de cargas, no se ofrece ninguna
+ garantía sobre el programa, en todas la extensión
+ permitida por la legislación aplicable. Excepto cuando se indique
+ de otra forma por escrito, los tenedores del copyright y/u otras partes
+ proporcionan el programa &laquo;tal cual&raquo;, sin garantía de
+ ninguna clase, bien expresa o implícita, con inclusión, pero
+ sin limitación a las garantías mercantiles implícitas
+ o a la conveniencia para un propósito particular. Cualquier riesgo
+ referente a la calidad y prestaciones del programa es asumido por usted.
+ Si se probase que el Programa es defectuoso, asume el coste de cualquier
+ servicio, reparación o corrección.</li>
+ </p>
+
+ <p>
+ <li>En ningún caso, salvo que lo requiera la legislaciónç
+ aplicable o haya sido acordado por escrito, ningún tenedor del
+ copyright ni ninguna otra parte que modifique y/o redistribuya el Programa
+ según se permite en esta Licencia será responsable ante usted
+ por daños, incluyendo cualquier daño general, especial,
+ incidental o resultante producido por el uso o la imposibilidad de uso del
+ Programa (con inclusión, pero sin limitación a la
+ pérdida de datos o a la generación incorrecta de datos o a
+ pérdidas sufridas por usted o por terceras partes o a un fallo del
+ Programa al funcionar en combinación con cualquier otro programa),
+ incluso si dicho tenedor u otra parte ha sido advertido de la posibilidad
+ de dichos daños.</li>
+ </p>
+</OL>
+
+<p>
+FIN DE TÉRMINOS Y CONDICIONES
+</p>
+
+<p>
+<h1>Apéndice: Cómo aplicar estos términos a sus nuevos
+programas.</h1>
+</p>
+<p>
+para el público en general, la mejor forma de conseguirlo es
+convirtiéndolo en software libre que cualquiera pueda redistribuir y
+cambiar bajo estos términos.
+</p>
+
+<p>
+Para hacerlo, añada los siguientes anuncios al programa. Lo más
+seguro es añadirlos al principio de cada fichero fuente para transmitir
+lo más efectivamente posible la ausencia de garantía.
+Además cada fichero debería tener al menos la línea de
+&laquo;copyright&raquo; y un indicador a dónde puede encontrarse el
+anuncio completo.
+</p>
+
+<p>
+&lt;una línea para indicar el nombre
+del programa y una rápida idea de qué hace.>
+</p>
+
+<p>
+Copyright (C) 19aa &lt;nombre del autor<br />
+Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo
+los términos de la Licencia Pública General de GNU según
+es publicada por la Free Software Foundation, bien de la versión 2 de
+dicha Licencia o bien (según su elección) de cualquier
+versión posterior.
+</p>
+
+<p>
+Este programa se distribuye con la esperanza de que sea útil,
+pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL
+implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO
+PARTICULAR. Véase la Licencia Pública General de GNU para
+más detalles.
+</p>
+
+<p>
+Debería haber recibido una copia de la Licencia Pública
+General junto con este programa. Si no ha sido así, escriba a la
+Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
+</p>
+
+<p>
+Añada también información sobre cómo contactar
+con usted mediante correo electrónico y postal.
+</p>
+
+<p>
+Si el programa es interactivo, haga que muestre un pequeño anuncio
+como el siguiente, cuando comienza a funcionar en modo interactivo:
+</p>
+
+<p>
+Gnomovision versión 69, Copyright (C) 19aa nombre del autor
+</p>
+
+<p>
+Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para
+más detalles escriba &laquo;show w&raquo;.
+</p>
+
+<p>
+Los comandos hipotéticos &laquo;show w&raquo; y &laquo;show c&raquo;
+deberían mostrar las partes adecuadas de la Licencia Pública
+General. Por supuesto, los comandos que use pueden llamarse de cualquier
+otra manera. Podrían incluso ser pulsaciones del ratón o
+elementos de un menú (lo que sea apropiado para su programa).
+</p>
+
+<p>
+También deberías conseguir que su empleador (si trabaja
+como programador) o tu Universidad (si es el caso) firme un &laquo;renuncia
+de copyright&raquo; para el programa, si es necesario. A continuación
+se ofrece un ejemplo, altere los nombres según sea conveniente:
+</p>
+
+<p>
+<blockquote>
+ Yoyodyne, Inc. mediante este documento renuncia a cualquier interés
+ de derechos de copyright con respecto al programa Gnomovision (que hace
+ pasadas a compiladores) escrito por Pepe Programador.<br />
+
+ &lt;firma de Pepito Grillo>, 20 de diciembre de 1996<br />
+
+ Pepito Grillo, Presidente de Asuntillos Varios.<br />
+</blockquote>
+</p>
+
+<p>
+Esta Licencia Pública General no permite que incluya sus programas en
+programas propietarios. Si su programa es una biblioteca de subrutinas, puede
+considerar más útil el permitir el enlazado de aplicaciones
+propietarias con la biblioteca. Si este es el caso, use la Licencia
+Pública General de GNU para Bibliotecas en lugar de esta Licencia.
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/gplytu.html
===================================================================
RCS file: Licencias/gplytu.html
diff -N Licencias/gplytu.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/gplytu.html       3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+       <p>
+       <H2>La licencia GPL y TÚ</H2>
+       </p>
+       
+       <p>
+       <h3>Hazlo tú mismo</h3>
+       </p>
+       <p>
+       Si escribes un programa y quieres que sea GPL, sólo tienes que 
+       añadir una nota al comienzo del archivo principal que contenga 
+       el código fuente del programa.
+       </p>
+
+       <p>
+       Pon en la nota el nombre del programa y una breve descripción
+       año y tu nombre.<br />
+       Incluye una cláusula de exclusión de garantía y haz    referencia a la 
GPL con su número de versión como licencia    de distribución, indicando cómo 
conseguir una copia de la     licencia original completa y como contactar con 
la FSF y contigo.
+       </p>
+
+       <p>
+       EJEMPLO:
+       </p>
+
+       <p>
+       Realiza un estudio de viabilidad de una empresa en funcion de su
+       balance.
+       Este programa se distribuye segun la licencia GPL v.2 o posteriores y 
no    tiene garantias de ningun tipo.
+       Puede obtener una copia de la licencia GPL o ponerse en contacto con la 
    Free Software Foundation
+       en <a href="http://www.gnu.org";>http://www.gnu.org</a>
+       </p>
+
+       <p>
+       Si el programa consta además de varios archivos secundarios, 
+       nombre del archivo principal.
+       </p>
+
+       <p>
+       EJEMPLO:
+       </p>
+
+       <p>
+       El archivo principal es viablin.c
+       </p>
+
+       <p>
+       Los programas interactivos, mostrarán al usuario, el nombre del 
+       darán opción a mostrar los detalles y condiciones de la 
+       licencia GPL si se pulsa con el ratón.
+       </p>
+       
+
+       <p>
+       <H3>El programa y su documentación</H3>
+       </p>
+       <p>
+       Según la Ley de Propiedad Intelectual vigente en España,
+       la expresión programas de ordenador comprenderá también
+       su documentación preparatoria.La documentación técnica
+       y los manuales de uso de un programa gozarán de la misma protección
+       que los programas de ordenador.
+       </p>
+
+       <p>
+       Existe para la documentación una licencia llamada GFDL, que si bien es
+       incompatible con la GPL esta diseñada específicamente para 
+       textos en vez de para programas.
+       </p>
+
+       <p>
+       EJEMPLO:
+       </p>
+
+       <p>
+       Se permite la distribucion por cualquier medio
+       de acuerdo con la licencia GPL v.2 o posteriores.
+       Puede obtener una copia de la licencia GPL o ponerse en contacto con 
+       la Free Software Foundation en 
+       <a href="http://www.gnu.org";>http://www.gnu.org/</a>
+       </p>
+       
+       <p>
+       <H3>La GPL en España</H3>
+       </p>
+       <p>
+       La licencia GPL es un contrato atípico de adhesión por el
+       que se transfieren los derechos de propiedad intelectual.
+       El autor presta su consentimiento en este contrato desde que libera su 
+       trabajo con licencia GPL y lo pone a disposición del público.
+       La otra parte se obliga a cumplir las condiciones de la GPL desde que 
+        distribuye el programa, modificado o no.
+       </p>
+
+       <p>
+       La figura legal más próxima en España, sería la llamada obra
+       colectiva regulada en los artículos 8 y 97 de la Ley de Propiedad 
Intelectual
+       vigente.
+       </p>
+
+       <p>
+       La Free Software Foundation no se obliga jurídicamente 
+       por traducciones de la licencia GPL, aunque les concede un valor 
informativo.
+       </p>
+       
+       <p>
+       <H3>El Trabajador asalariado y la GPL</H3>
+       </p>
+       <p>
+       Salvo pacto en contrario, el programa creado por un trabajador en el 
+       ejercicio de las funciones que le han sido confiadas o siguiendo las 
+       instrucciones del empresario es propiedad en exclusiva de ese 
empresario.
+       </p>
+
+       <p>
+       Cuando estes en esa situación y utilices código fuente 
+       de programas GPL deberás informar que no puedes transferir la 
+       propiedad en exclusiva del programa final, puesto que éste será 
+       también GPL y por lo tanto de libre distribución junto al código 
+       fuente.
+       </p>
+
+       <p>
+       Recuerda que conforme al artículo 45 de la Ley de Propiedad 
Intelectual, 
+       toda cesión deberá formalizarse por escrito.
+       </p>
+
+       <p>
+       Puedes firmar un contrato para entregar un trabajo que consista en una 
+       traducción u otra modificación de un programa GPL a una 
+       persona y en una fecha concreta, pero esa persona no será 
+       propietaria en exclusiva de tu trabajo.
+       </p>
+
+       <p>
+   En la Unión Europea se permite la llamada ingeniería 
+       inversa pero no puedes obtener el codigo fuente del programa cerrado 
+       o propietario por medios delictivos.
+       </p>
+
+       <p>
+       Siendo un usuario legítimo, puedes reproducir el código de    un 
programa para conseguir la interoperabilidad de dicho programa con 
+       uno independiente de tu creación, siempre que el autor del 
+       programa no te mande esa información y no utilices ese 
+       código para "el desarrollo, producción o comercializa
+       ción de un programa sustancialmente similar en su 
+       expresión, o para cualquier otro acto que infrinja los derechos 
+       de autor".
+       </p>
+
+       <p>
+       Es posible que no reproduzcas el código de dicho programa sino
+       que escribas un programa similar con tu propio código fuente, 
+       esto es perfectamente legal, puesto que el derecho de autor o copyright 
    del software, no protege "las ideas y principios en los que se basan      
los programas de ordenador incluidos los que sirven de fundamento a 
+       sus interfaces".Esto quiere decir, que puedes escribir programas GPL 
+       a partir de programas no GPL, para eso debes implementar esas ideas
+       escribiendo el código fuente tú mismo, sin reproducir el 
+       propietario.
+       </p>
+       
+       <p>
+       <H3>La GPL en la empresa</H3>
+       </p>
+       <p>
+       Si pagas el impuesto de sociedades, seguramente te interese deducir 
+       de la base imponible las cantidades que destines al mecenazgo y otros 
+       gastos en actividades de interés general, de esta forma, puedes 
+       elegir un proyecto GPL que te interese o comenzar uno y financiarlo 
+       con un dinero que de otro modo iría a parar a Hacienda.
+       </p>
+
+       <p>
+       Te beneficiarás además al poder usar el programa GPL 
+       resultante, con su código fuente accesible, lo que asegura su 
+       adaptación y mejora continua por y para todos.
+       </p>
+
+       <p>
+       Por último y no menos importante, mediante el mecenazgo, puedes 
+       mejorar la imagen de tu empresa ante los consumidores, gracias al 
+       apoyo de software GPL de amplia y rápida 
+       distribución.
+       </p>
+
+       <p>
+       El mecenazgo es conocido como convenio de colaboración y consiste    en 
la difusión de la participación de la empresa en la 
+       actividad de interés general que promueva un tercero.Lamentablemente la 
ley prohibe a la empresa 
+       comprometerse a entregar porcentajes de participacion en ventas o 
beneficios.
+       Pueden establecerse como contraprestación, cantidades económicas 
+       ciertas, prestaciones de servicios o bienes materiales como equipos 
informáticos.
+       La ley dificulta y limita la cantidad que puedes deducirte
+       como empresa si donas bienes materiales.Desde el punto de vista 
empresarial es más 
+       rentable donar dinero y luego vender el bien de segunda mano que donar 
ese mismo bien 
+       directamente.
+       </p>
+
+       <p>
+       El patrocinio es un contrato publicitario que puede tener el 
+       mismo fin que el mecenazgo, pero a efectos prácticos es menos indicado, 
+       ya que se grava con I.V.A y para la entidad destinataria supone un 
beneficio que no siempre es fácil de
+       demostrar que coincide con el objeto social.
+       </p>
+
+       <p>
+       Para que la empresa tenga derecho a deducción la entidad destinataria 
+       tiene que ser una asociación declarada de utilidad pública o una 
+       fundación.Esto se aplica también a las Universidades Públicas 
+       y sus Colegios Mayores,a los organismos públicos de investigación 
+       e incluso a las Corporaciones locales.
+       </p>
+
+       <p>
+       Puedes deducir el donativo completo como partida deducible al 
determinar 
+       la base imponible del impuesto de sociedades.No puedes deducir mas del 
5%
+       de la base imponible o del 0,5% del volumen de ventas.El límite 
+       de deducción por mecenazgo es compatible con el aplicable a otros
+       gastos en actividades de interés general.
+       </p>
+
+       <p>
+       La ley permite que las empresas puedan deducir los gastos que ocasione
+       el desarrollo de una actividad de interés general que hayan realizado
+       por sí mismas, sin que intervengan las entidades mencionadas 
+       previamente.El límite es también el 0,5% del volumen de ventas o el 
+       5% de la base imponible.
+       </p>
+
+       <p>
+Las cooperativas, estan obligadas por ley a dotar con el beneficio neto 
algunos fondos como el de educación y promoción cuya función es la educación y 
formación y que podría ser una interesante fuente de recursos para financiar 
proyectos GPL ya sean programas o manuales.
+       </p>
+
+       <p>
+Las personas que tengan que pagar IRPF también pueden deducir los donativos 
que destinen a las fundaciones y asociaciones sin ánimo de lucro que esten 
declaradas de utilidad pública.Puedes deducir en la cuota del IRPF hasta el 20% 
del valor de los bienes o las cantidades donadas.
+       </p>
+
+       <p>
+Esta pendiente de aprobación la Ley de presupuestos en la que estos
+porcentajes aumentan hasta el 25% en caso del IRPF y al 15% para el IS 
+para las donaciones a fundaciones dedicadas a la investigación.
+       </p>
+
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/gplytu.xhtml
===================================================================
RCS file: Licencias/gplytu.xhtml
diff -N Licencias/gplytu.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/gplytu.xhtml      3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+     <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+       <p>
+       <H2>La licencia GPL y TÚ</H2>
+       </p>
+       
+       <p>
+       <h3>Hazlo tú mismo</h3>
+       </p>
+       <p>
+       Si escribes un programa y quieres que sea GPL, sólo tienes que 
+       añadir una nota al comienzo del archivo principal que contenga 
+       el código fuente del programa.
+       </p>
+
+       <p>
+       Pon en la nota el nombre del programa y una breve descripción
+       año y tu nombre.<br />
+       Incluye una cláusula de exclusión de garantía y haz    referencia a la 
GPL con su número de versión como licencia    de distribución, indicando cómo 
conseguir una copia de la     licencia original completa y como contactar con 
la FSF y contigo.
+       </p>
+
+       <p>
+       EJEMPLO:
+       </p>
+
+       <p>
+       Realiza un estudio de viabilidad de una empresa en funcion de su
+       balance.
+       Este programa se distribuye segun la licencia GPL v.2 o posteriores y 
no    tiene garantias de ningun tipo.
+       Puede obtener una copia de la licencia GPL o ponerse en contacto con la 
    Free Software Foundation
+       en <a href="http://www.gnu.org";>http://www.gnu.org</a>
+       </p>
+
+       <p>
+       Si el programa consta además de varios archivos secundarios, 
+       nombre del archivo principal.
+       </p>
+
+       <p>
+       EJEMPLO:
+       </p>
+
+       <p>
+       El archivo principal es viablin.c
+       </p>
+
+       <p>
+       Los programas interactivos, mostrarán al usuario, el nombre del 
+       darán opción a mostrar los detalles y condiciones de la 
+       licencia GPL si se pulsa con el ratón.
+       </p>
+       
+
+       <p>
+       <H3>El programa y su documentación</H3>
+       </p>
+       <p>
+       Según la Ley de Propiedad Intelectual vigente en España,
+       la expresión programas de ordenador comprenderá también
+       su documentación preparatoria.La documentación técnica
+       y los manuales de uso de un programa gozarán de la misma protección
+       que los programas de ordenador.
+       </p>
+
+       <p>
+       Existe para la documentación una licencia llamada GFDL, que si bien es
+       incompatible con la GPL esta diseñada específicamente para 
+       textos en vez de para programas.
+       </p>
+
+       <p>
+       EJEMPLO:
+       </p>
+
+       <p>
+       Se permite la distribucion por cualquier medio
+       de acuerdo con la licencia GPL v.2 o posteriores.
+       Puede obtener una copia de la licencia GPL o ponerse en contacto con 
+       la Free Software Foundation en 
+       <a href="http://www.gnu.org";>http://www.gnu.org/</a>
+       </p>
+       
+       <p>
+       <H3>La GPL en España</H3>
+       </p>
+       <p>
+       La licencia GPL es un contrato atípico de adhesión por el
+       que se transfieren los derechos de propiedad intelectual.
+       El autor presta su consentimiento en este contrato desde que libera su 
+       trabajo con licencia GPL y lo pone a disposición del público.
+       La otra parte se obliga a cumplir las condiciones de la GPL desde que 
+        distribuye el programa, modificado o no.
+       </p>
+
+       <p>
+       La figura legal más próxima en España, sería la llamada obra
+       colectiva regulada en los artículos 8 y 97 de la Ley de Propiedad 
Intelectual
+       vigente.
+       </p>
+
+       <p>
+       La Free Software Foundation no se obliga jurídicamente 
+       por traducciones de la licencia GPL, aunque les concede un valor 
informativo.
+       </p>
+       
+       <p>
+       <H3>El Trabajador asalariado y la GPL</H3>
+       </p>
+       <p>
+       Salvo pacto en contrario, el programa creado por un trabajador en el 
+       ejercicio de las funciones que le han sido confiadas o siguiendo las 
+       instrucciones del empresario es propiedad en exclusiva de ese 
empresario.
+       </p>
+
+       <p>
+       Cuando estes en esa situación y utilices código fuente 
+       de programas GPL deberás informar que no puedes transferir la 
+       propiedad en exclusiva del programa final, puesto que éste será 
+       también GPL y por lo tanto de libre distribución junto al código 
+       fuente.
+       </p>
+
+       <p>
+       Recuerda que conforme al artículo 45 de la Ley de Propiedad 
Intelectual, 
+       toda cesión deberá formalizarse por escrito.
+       </p>
+
+       <p>
+       Puedes firmar un contrato para entregar un trabajo que consista en una 
+       traducción u otra modificación de un programa GPL a una 
+       persona y en una fecha concreta, pero esa persona no será 
+       propietaria en exclusiva de tu trabajo.
+       </p>
+
+       <p>
+   En la Unión Europea se permite la llamada ingeniería 
+       inversa pero no puedes obtener el codigo fuente del programa cerrado 
+       o propietario por medios delictivos.
+       </p>
+
+       <p>
+       Siendo un usuario legítimo, puedes reproducir el código de    un 
programa para conseguir la interoperabilidad de dicho programa con 
+       uno independiente de tu creación, siempre que el autor del 
+       programa no te mande esa información y no utilices ese 
+       código para "el desarrollo, producción o comercializa
+       ción de un programa sustancialmente similar en su 
+       expresión, o para cualquier otro acto que infrinja los derechos 
+       de autor".
+       </p>
+
+       <p>
+       Es posible que no reproduzcas el código de dicho programa sino
+       que escribas un programa similar con tu propio código fuente, 
+       esto es perfectamente legal, puesto que el derecho de autor o copyright 
    del software, no protege "las ideas y principios en los que se basan      
los programas de ordenador incluidos los que sirven de fundamento a 
+       sus interfaces".Esto quiere decir, que puedes escribir programas GPL 
+       a partir de programas no GPL, para eso debes implementar esas ideas
+       escribiendo el código fuente tú mismo, sin reproducir el 
+       propietario.
+       </p>
+       
+       <p>
+       <H3>La GPL en la empresa</H3>
+       </p>
+       <p>
+       Si pagas el impuesto de sociedades, seguramente te interese deducir 
+       de la base imponible las cantidades que destines al mecenazgo y otros 
+       gastos en actividades de interés general, de esta forma, puedes 
+       elegir un proyecto GPL que te interese o comenzar uno y financiarlo 
+       con un dinero que de otro modo iría a parar a Hacienda.
+       </p>
+
+       <p>
+       Te beneficiarás además al poder usar el programa GPL 
+       resultante, con su código fuente accesible, lo que asegura su 
+       adaptación y mejora continua por y para todos.
+       </p>
+
+       <p>
+       Por último y no menos importante, mediante el mecenazgo, puedes 
+       mejorar la imagen de tu empresa ante los consumidores, gracias al 
+       apoyo de software GPL de amplia y rápida 
+       distribución.
+       </p>
+
+       <p>
+       El mecenazgo es conocido como convenio de colaboración y consiste    en 
la difusión de la participación de la empresa en la 
+       actividad de interés general que promueva un tercero.Lamentablemente la 
ley prohibe a la empresa 
+       comprometerse a entregar porcentajes de participacion en ventas o 
beneficios.
+       Pueden establecerse como contraprestación, cantidades económicas 
+       ciertas, prestaciones de servicios o bienes materiales como equipos 
informáticos.
+       La ley dificulta y limita la cantidad que puedes deducirte
+       como empresa si donas bienes materiales.Desde el punto de vista 
empresarial es más 
+       rentable donar dinero y luego vender el bien de segunda mano que donar 
ese mismo bien 
+       directamente.
+       </p>
+
+       <p>
+       El patrocinio es un contrato publicitario que puede tener el 
+       mismo fin que el mecenazgo, pero a efectos prácticos es menos indicado, 
+       ya que se grava con I.V.A y para la entidad destinataria supone un 
beneficio que no siempre es fácil de
+       demostrar que coincide con el objeto social.
+       </p>
+
+       <p>
+       Para que la empresa tenga derecho a deducción la entidad destinataria 
+       tiene que ser una asociación declarada de utilidad pública o una 
+       fundación.Esto se aplica también a las Universidades Públicas 
+       y sus Colegios Mayores,a los organismos públicos de investigación 
+       e incluso a las Corporaciones locales.
+       </p>
+
+       <p>
+       Puedes deducir el donativo completo como partida deducible al 
determinar 
+       la base imponible del impuesto de sociedades.No puedes deducir mas del 
5%
+       de la base imponible o del 0,5% del volumen de ventas.El límite 
+       de deducción por mecenazgo es compatible con el aplicable a otros
+       gastos en actividades de interés general.
+       </p>
+
+       <p>
+       La ley permite que las empresas puedan deducir los gastos que ocasione
+       el desarrollo de una actividad de interés general que hayan realizado
+       por sí mismas, sin que intervengan las entidades mencionadas 
+       previamente.El límite es también el 0,5% del volumen de ventas o el 
+       5% de la base imponible.
+       </p>
+
+       <p>
+Las cooperativas, estan obligadas por ley a dotar con el beneficio neto 
algunos fondos como el de educación y promoción cuya función es la educación y 
formación y que podría ser una interesante fuente de recursos para financiar 
proyectos GPL ya sean programas o manuales.
+       </p>
+
+       <p>
+Las personas que tengan que pagar IRPF también pueden deducir los donativos 
que destinen a las fundaciones y asociaciones sin ánimo de lucro que esten 
declaradas de utilidad pública.Puedes deducir en la cuota del IRPF hasta el 20% 
del valor de los bienes o las cantidades donadas.
+       </p>
+
+       <p>
+Esta pendiente de aprobación la Ley de presupuestos en la que estos
+porcentajes aumentan hasta el 25% en caso del IRPF y al 15% para el IS 
+para las donaciones a fundaciones dedicadas a la investigación.
+       </p>
+
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/index.html
===================================================================
RCS file: Licencias/index.html
diff -N Licencias/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/index.html        3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<center><h2>Licencias libres</h2></center>
+
+<ul>
+<li><a href="#queesgpl">¿Qué es la licencia GPL?</a></li>
+<li><a href="#textos">Otros textos para leer</a></li>
+<li><a href="/Licencias/solicitudes.html">Consultenos</a></li>
+<li><a href="/Licencias/gples.html">Licencia GPL</a></li>
+<li><a href="/Licencias/fdles.html">Licencia GFDL</a></li>
+</ul>
+
+<hr />
+
+<a name="queesgpl"><h3>¿Qué es la licencia GPL?</h3></a>
+
+<p> Los programas de ordenador suelen distribuirse con licencias
+    propietarias o cerradas.
+</p>
+
+<p> Estas licencias son intransferibles y no exclusivas, es decir, no eres
+    propietario del programa, sólo tienes derecho a usarlo en un ordenador
+    o tantos como permita expresamente la licencia y no puedes modificar
+    el programa ni distribuirlo.
+</p>
+
+<p> La licencia GPL o <STRONG>General Public License</STRONG>, 
+    desarrollada por la FSF o <STRONG>Free Software Foundation</STRONG>, 
+    es completamente diferente. Puedes instalar y usar un programa GPL en 
+    un ordenador o en tantos como te apetezca, sin limitación.
+    También puedes modificar el programa para adaptarlo a lo que tu
+    quieras que haga. Además, podrás distribuir el programa GPL tal cual o 
+    después de haberlo modificado.
+</p>
+
+<p> Puedes hacer esto, regalando el programa o vendiéndolo, tu 
+    única obligación, es facilitar siempre con el programa binario el 
+    código fuente, es decir, el programa de forma que pueda ser leido 
+    por un programador.
+</p>
+
+<p> Los programas propietarios o cerrados, solo se distribuyen en binario,
+    listos para ejecutarse en el ordenador.
+</p>
+
+<p> <STRONG>Un programa GPL es libre, es decir, no es "shareware" o 
+    "freeware"</STRONG>,  éstos también puedes
+ conseguirlos en un cd-rom al comprar un revista o descargarlos de
+ internet, pero no incluyen el código fuente y no tienes permiso para
+ modificarlos, es decir, no son libres.
+</p>
+
+<p> <STRONG>Los programas distribuidos con licencia GPL tampoco son
+ piratas</STRONG>, utiliza otra licencia para atacar barcos.
+</p>
+
+<p> Los programas GPL no tienen garantía, igual que casi todos los
+    programas propietarios, no obstante, ofrecen más derechos a sus
+    usuarios y su sistema abierto hace que los defectos sean detectados y
+    depurados a gran velocidad con la ayuda de cientos de programadores a
+    través de internet. Por otro lado, nada impide a una empresa
+    garantizar el Software Libre junto a otros servicios que oferte.
+</p>
+
+<hr />
+
+<a name="textos"><h3>Otros textos para leer</h3></a>
+
+<ul>
+<li>
+       <A href="/Licencias/bsd.html">
+       Diferencias entre GPL y BSD</A><br />
+       <p>
+        Un texto acerca de las diferencias entre la licencia GPL y la BSD.
+        </p>
+</li>
+       
+<li>   
+       <a href="/Licencias/contracarta.html">
+        Cartas de la Business Software Alliance.</a><br />
+       <p>
+       Algunos consejos sobre cómo actuar si recibes una carta de 
+       la B.S.A. 
+       </p>
+</li>
+<li>   
+       <a href="/Licencias/gplytu.html">
+       Cómo aplicar la licencia GPL a tus propios programas.</a><br />
+       <p>
+       Ejemplo de lo sencillo que puede ser crear un programa GPL con 
+       algunos consejos prácticos.
+       </p>
+</li>
+<li>
+       <a href="/Licencias/patente.html"> 
+       Contra las patentes de Software</a><br />
+       <p>
+       Los planes de la European Patent Office y las excepciones a la 
patentabilidad.
+       </p>
+</li>
+<li>   
+       <a href="/Licencias/nejtak.html">
+       ¿Patentes de software? ¡No gracias!</a><br />
+       <p>
+       Más argumentos en contra de las patentes de software.
+       </p>
+</li>
+<li>
+       <a href="/Licencias/softlibr.html">
+       La obra colectiva</a><br />
+       <p>
+       El "software libre" en comparación con la obra colectiva
+       </p>
+</li>
+<li>
+       <a href="/Licencias/pagano.html">
+       ¿Paga y calla?</a><br />
+       <p>
+       Iniciativas para compensar a los artistas por el uso de internet
+       via aumento de precios de los ordenadores y otros periféricos.
+       </p>
+</li>
+<li>    
+       <a href="/Licencias/poster.html">
+       Poster de GNU España</a><br />
+       <p>
+       Una licencia del Windows 2000 en la que se subrayan las 
+       características del soft cerrado con anotaciones al margen para 
+       diferenciarla del soft libre.
+       Hay dos versiones con ilustraciones de dos dibujantes distintos para 
+       que imprimais la que más os guste.
+       </p>
+</li>
+<li>
+       <a href="/Licencias/viol.html">
+       Violación de la licencia GPL</a><br />
+       <p>
+       Qué puede hacer en caso de que se haya producido una 
+       violación de la licencia GPL.
+       </p>
+</li>
+<li>
+       <a href="/Licencias/ip.html">
+       La licencia del programa IP Filter</a><br />
+       <p>
+       ¿Ha dejado IP Filter de ser libre? ¿Lo fue alguna vez?.
+       </p>
+</li>
+</ul>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/ip.html
===================================================================
RCS file: Licencias/ip.html
diff -N Licencias/ip.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/ip.html   3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<H2>LA LICENCIA DE IP FILTER</H2> 
+</p>
+
+<p>
+La increible historia de la licencia del programa IP Filter, o de cómo el soft 
libre deja de serlo, aunque en realidad  nunca lo fuese.
+</p>
+
+<p>
+"IP Filter" es el nombre de un programa escrito por Darren Reed para hacer 
firewalls,NAT, filtrado de paquetes y otros servicios. La licencia original 
decía:
+</p>
+
+<p>
+"Copyright &#169; 1993-2000 by Darren Reed.
+Redistribution and use in source and binary forms are permitted provided this 
notice is preserved and due credit is given to the original author and the 
contributors."</p>
+
+<p>
+Posteriormente se añadió:<br />
+"This program is distributed in the hope that it will be useful, but without 
any warranty;without even the implied warranty of merchantability or fitness 
for a particular purpose.<br />
+I hate legaleese, don't you?"
+</p>
+
+<p>
+El último añadido, que ha provocado la polémica dice:<br />
+"Yes, this means that derivative or modified works are not permited without 
the author's prior consent."
+</p>
+
+<p>
+Este último párrafo, pretende ser una definición de lo que Darren entiende por 
"due credit is given to author".El problema es que el debido crédito o 
reconocimiento, consiste en la aceptación de la autoría. Tanto el derecho a ser 
reconocido autor de la obra como la exigencia del respeto a la integridad de la 
obra o su modificación, son derechos morales del autor, que son complementarios 
de los derechos de explotación , como son el derecho a la reproducción y a la 
distribución, entre otros.
+</p>
+
+<p>
+Pero el hecho de que ambos sean derechos morales, no implica que se ejerciten 
a la vez, o en un mismo acto necesariamente, es decir, el reconocimiento de la 
autoría de un programa y el poder modificarla o no, son derechos morales 
independientes. La forma más obvia de reconocer la autoría de una obra consiste 
en mantener la nota de derechos de autor original y añadirle la nuestra a la 
obra modificada. La última cláusula añadida por Darren, cambia totalmente la 
naturaleza y los fines de su licencia original, ya que, a partir de ahora, no 
será suficiente incluir la nota de Darren en los trabajos derivados , en 
necesario contar con su permiso para hacer esas obras derivadas. Aquí se 
plantearían varios interrogantes:
+</p>
+
+<p>
+<ol>
+  <li>¿Si ha habido una modificación de la licencia (interpretación que Darren 
parece negar) el código fuente anterior a esa modificación se gobernaría por la 
licencia original?</li>
+  <li>¿Tiene Darren derecho a modificar la licencia por sí mismo o aunque sea 
el autor esta tan obligado por ella como el resto de los usuarios o 
desarrolladores?</li>
+</ol>
+</p>
+
+<p>
+Contestar a estas preguntas va más allá del propósito de este artículo.
+</p>
+
+<p>
+Lo que sí me gustaría explicar es que este cambio en la licencia, no ha hecho 
que el IP Filter haya dejado de ser soft libre porque en realidad nunca fue 
soft libre. La licencia original de IP Filter, no permitía hacer 
modificaciones, de hecho, no hacía ninguna mención a esos cambios en el código, 
es ahora cuando Darren explica cómo deben hacerse esas modificaciones. A tenor 
de la interpretación de la licencia que hace Darren en su añadido, esas 
modificaciones de IP Filter, deben contar con su permiso previo, incluso aunque 
no piense distribuir el programa derivado que resulte. Esto hace que IP Filter 
tenga una licencia, que en contra de la opinión mayoritaria no tiene nada que 
ver con la licencia BSD, ni con la de Apache, más bien con la del sitema 
operativo Plan 9.
+</p>
+
+<p>
+Me da la impresión de que Darren quería una licencia para IP Filter parecida a 
la del lenguaje Java, anque un poco más libre, dando las fuentes sin previo 
acuerdo, pero  haciendo necesario un permiso  antes de distribuir la 
modificación. Aunque usted odie los legalismos, como afirma Darren, debe 
meditar un poco antes de liberar un programa o participar en un proyecto de 
soft.
+</p>
+
+<p>
+No se deje guiar por lo que supuestamente es soft libre.
+</p>
+
+<p>
+Muchas personas interpretan lo que es "open source" a su manera, y es posible 
que en el futuro,a pesar de los esfuerzos de la Free Software Foundation, 
ocurra lo mismo con "free software".Puede incluso que oiga hablar de conceptos 
nuevos "shared source"o incluso "codigo abierto" sin que nadie sepa muy bien lo 
que significan.
+</p>
+
+<p>
+Por todo lo anterior y para evitarle futuros disgustos, le aconsejo que lea 
cada licencia, caso por caso, y pregunte al autor y sus desarrolladores si 
tiene dudas sobre alguna cláusula concreta. Hágase las siguientes preguntas:
+</p>
+
+<p>
+<ol>
+  <li>¿Le dan las fuentes del programa?</li>
+  <li>¿Puede modificar esas fuentes?</li>
+  <li>¿Puede distribuir lo que modifique?</li>
+  <li>¿Puede vender esas modificaciones al precio que quiera?</li>
+  <li>¿Debe añadir las fuentes, obligatoriamente, al distribuir?</li>
+</ol>
+</p>
+
+<p>
+-OJO-Algunas licencias permiten modificar, pero le obligan a entregar las 
fuentes aunque no piense distribuir lo modificado. Según la FSF si la respuesta 
a las cuatro primeras es afirmativa el programa es soft libre, si además la 
quinta es también positiva, entonces, será libre y con "copyleft".
+</p>
+
+<p>
+<CENTER> 
+<STRONG>Pablo -dewaz- Usano 
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER> 
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/ip.xhtml
===================================================================
RCS file: Licencias/ip.xhtml
diff -N Licencias/ip.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/ip.xhtml  3 Mar 2012 06:14:02 -0000       1.1
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<H2>LA LICENCIA DE IP FILTER</H2> 
+</p>
+
+<p>
+La increible historia de la licencia del programa IP Filter, o de cómo el soft 
libre deja de serlo, aunque en realidad  nunca lo fuese.
+</p>
+
+<p>
+"IP Filter" es el nombre de un programa escrito por Darren Reed para hacer 
firewalls,NAT, filtrado de paquetes y otros servicios. La licencia original 
decía:
+</p>
+
+<p>
+"Copyright &#169; 1993-2000 by Darren Reed.
+Redistribution and use in source and binary forms are permitted provided this 
notice is preserved and due credit is given to the original author and the 
contributors."</p>
+
+<p>
+Posteriormente se añadió:<br />
+"This program is distributed in the hope that it will be useful, but without 
any warranty;without even the implied warranty of merchantability or fitness 
for a particular purpose.<br />
+I hate legaleese, don't you?"
+</p>
+
+<p>
+El último añadido, que ha provocado la polémica dice:<br />
+"Yes, this means that derivative or modified works are not permited without 
the author's prior consent."
+</p>
+
+<p>
+Este último párrafo, pretende ser una definición de lo que Darren entiende por 
"due credit is given to author".El problema es que el debido crédito o 
reconocimiento, consiste en la aceptación de la autoría. Tanto el derecho a ser 
reconocido autor de la obra como la exigencia del respeto a la integridad de la 
obra o su modificación, son derechos morales del autor, que son complementarios 
de los derechos de explotación , como son el derecho a la reproducción y a la 
distribución, entre otros.
+</p>
+
+<p>
+Pero el hecho de que ambos sean derechos morales, no implica que se ejerciten 
a la vez, o en un mismo acto necesariamente, es decir, el reconocimiento de la 
autoría de un programa y el poder modificarla o no, son derechos morales 
independientes. La forma más obvia de reconocer la autoría de una obra consiste 
en mantener la nota de derechos de autor original y añadirle la nuestra a la 
obra modificada. La última cláusula añadida por Darren, cambia totalmente la 
naturaleza y los fines de su licencia original, ya que, a partir de ahora, no 
será suficiente incluir la nota de Darren en los trabajos derivados , en 
necesario contar con su permiso para hacer esas obras derivadas. Aquí se 
plantearían varios interrogantes:
+</p>
+
+<p>
+<ol>
+  <li>¿Si ha habido una modificación de la licencia (interpretación que Darren 
parece negar) el código fuente anterior a esa modificación se gobernaría por la 
licencia original?</li>
+  <li>¿Tiene Darren derecho a modificar la licencia por sí mismo o aunque sea 
el autor esta tan obligado por ella como el resto de los usuarios o 
desarrolladores?</li>
+</ol>
+</p>
+
+<p>
+Contestar a estas preguntas va más allá del propósito de este artículo.
+</p>
+
+<p>
+Lo que sí me gustaría explicar es que este cambio en la licencia, no ha hecho 
que el IP Filter haya dejado de ser soft libre porque en realidad nunca fue 
soft libre. La licencia original de IP Filter, no permitía hacer 
modificaciones, de hecho, no hacía ninguna mención a esos cambios en el código, 
es ahora cuando Darren explica cómo deben hacerse esas modificaciones. A tenor 
de la interpretación de la licencia que hace Darren en su añadido, esas 
modificaciones de IP Filter, deben contar con su permiso previo, incluso aunque 
no piense distribuir el programa derivado que resulte. Esto hace que IP Filter 
tenga una licencia, que en contra de la opinión mayoritaria no tiene nada que 
ver con la licencia BSD, ni con la de Apache, más bien con la del sitema 
operativo Plan 9.
+</p>
+
+<p>
+Me da la impresión de que Darren quería una licencia para IP Filter parecida a 
la del lenguaje Java, anque un poco más libre, dando las fuentes sin previo 
acuerdo, pero  haciendo necesario un permiso  antes de distribuir la 
modificación. Aunque usted odie los legalismos, como afirma Darren, debe 
meditar un poco antes de liberar un programa o participar en un proyecto de 
soft.
+</p>
+
+<p>
+No se deje guiar por lo que supuestamente es soft libre.
+</p>
+
+<p>
+Muchas personas interpretan lo que es "open source" a su manera, y es posible 
que en el futuro,a pesar de los esfuerzos de la Free Software Foundation, 
ocurra lo mismo con "free software".Puede incluso que oiga hablar de conceptos 
nuevos "shared source"o incluso "codigo abierto" sin que nadie sepa muy bien lo 
que significan.
+</p>
+
+<p>
+Por todo lo anterior y para evitarle futuros disgustos, le aconsejo que lea 
cada licencia, caso por caso, y pregunte al autor y sus desarrolladores si 
tiene dudas sobre alguna cláusula concreta. Hágase las siguientes preguntas:
+</p>
+
+<p>
+<ol>
+  <li>¿Le dan las fuentes del programa?</li>
+  <li>¿Puede modificar esas fuentes?</li>
+  <li>¿Puede distribuir lo que modifique?</li>
+  <li>¿Puede vender esas modificaciones al precio que quiera?</li>
+  <li>¿Debe añadir las fuentes, obligatoriamente, al distribuir?</li>
+</ol>
+</p>
+
+<p>
+-OJO-Algunas licencias permiten modificar, pero le obligan a entregar las 
fuentes aunque no piense distribuir lo modificado. Según la FSF si la respuesta 
a las cuatro primeras es afirmativa el programa es soft libre, si además la 
quinta es también positiva, entonces, será libre y con "copyleft".
+</p>
+
+<p>
+<CENTER> 
+<STRONG>Pablo -dewaz- Usano 
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER> 
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:02 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/maquet~1.pdf
===================================================================
RCS file: Licencias/maquet~1.pdf
diff -N Licencias/maquet~1.pdf
Binary files /dev/null and /tmp/cvsjI3v3o differ

Index: Licencias/maquet~2.pdf
===================================================================
RCS file: Licencias/maquet~2.pdf
diff -N Licencias/maquet~2.pdf
Binary files /dev/null and /tmp/cvs3KnxOn differ

Index: Licencias/nejtak.html
===================================================================
RCS file: Licencias/nejtak.html
diff -N Licencias/nejtak.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/nejtak.html       3 Mar 2012 06:14:03 -0000       1.1
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<strong>SSLUG en Dinamarca ha usado este artículo para publicarlo en
+ el periódico danés "Information"(1/IX/2000) y en el
+ finés "Hufvudstadsbladet"(15/IX/2000)</strong>
+</p>
+
+<p>
+ "Si la tecnología hubiese sido propietaria no hubiese despegado
+ jamás. La decisión de hacer la web un sistema abierto fue
+ necesaria para que llegase a ser universal."
+</p>
+ 
+<p>
+ Uno de los factores detrás del desarrollo de la web fue el acceso a 
+ navegadores y servidores libres.Si los usuarios de las ideas de Tim
+ Berners-Lee hubiesen tenido que pagar todas las licencias, la web no
+ hubiese existido hoy. "No puedes pretender que algo sea para todos y al
+ mismo tiempo querer controlarlo".
+</p>
+ 
+<p>
+ Una patente le hubiera hecho rico-pero el mundo entero hubiera sido
+ más pobre-excepto en pleitos.
+</p>
+ 
+ 
+<p>
+ Una patente crea un monopolio en el uso de una invención controlada
+ por el inventor.
+</p>
+ 
+<p>
+ Una patente de software crea un monopolio en el uso de software de una idea
+ en particular o un método evitando la explotación comercial
+ de la idea o método por otros, sin importar si es un método
+ técnico complicado o sólo una simple idea.
+</p>
+ 
+<p>
+ Por ejemplo, el uso patentado de una ilustración de un carrito de
+ compras para mostrar al cliente que bienes ha seleccionado cuando compra en
+ internet.
+</p>
+ 
+<p>
+ Obtener una patente de software es muy común en USA, pero bastante
+ extraño en Europa.Esto parece estar cambiando. En Junio de este
+ año la European Patent Office sugirió la inclusión de
+ las patentes de software en una modificación a la Convención
+ europea de patentes, convención suscrita por Dinamarca y otros 18 
+ paises europeos.
+</p>
+ 
+<p>
+ El propósito de una patente de software(y de las patentes en
+ general) es incitar la innovación tecnológica.
+</p>
+ 
+<p>
+ Las patentes protegen a las compañias de que se imiten sus ideas, de
+ este modo, son un gran incentivo para invertir en investigación y
+ desarrollo.
+</p>
+ 
+<p>
+ La duración de una patente se limita a 20 años,
+ después de ese tiempo, la patente es pública, de esta forma,
+ en interés de la sociedad, cualquiera puede explotarla comercialmente
+ o mejorar la innovación tecnológica.
+</p>
+
+<p>
+ 20 años es un largo tiempo en la escala de los programas de
+ ordenador, se suele considerar que un año equivale a un mes de
+ "tiempo internet".
+</p>
+ 
+<p>
+ Nosotros argumentamos que las patentes, de hecho, no incitan la
+ innovación.
+</p>
+
+<p>
+ En Dinamarca y en el resto de Europa, los programas de ordenador se han
+ protegido mediante derecho de autor en vez de patentes.
+</p>
+ 
+<p>
+ El software estaba excluido de la ley de patentes.
+</p>
+ 
+<p>
+ El propietario de los derechos de un programa puede prohibir que se copie,
+ justo como el autor de una obra literaria puede prohibir que otros copien
+ su trabajo.
+</p>
+ 
+<p>
+ El propietario de una patente de sofware tendrá un derecho más 
+ extenso para prohibir a otros escribir programas que usen el método
+ o la idea patentada.
+</p>
+ 
+<p>
+ Aunque los programas de ordenador no son productos artísticos, los
+ derechos de autor tienen sentido ya que los programas se componen de texto.
+ El código fuente de un programa es un texto que contiene
+ instrucciones para el ordenador.
+</p>
+ 
+<p>
+ código fuente para llamar la atención sobre la propiedad de
+ ese código, que puede ser de una persona, organización o
+ compañia.
+</p>
+ 
+<p>
+ La nueva propuesta de la European Patent Office eliminaría la
+ excepción de los programas y allanaría el camino para las
+ patentes software en Europa.
+</p>
+
+<p>
+ Si esta modificación es adoptada por la Conferencia Gubernamental
+ 2000 de la EPO en Noviembre en Munich, la protección por derecho de
+ autor será substituida por la protección más extensa
+ de la patente.
+</p>
+ 
+<p>
+ La patente "one-click" de Amazon es un ejemplo de patente software en USA.
+ Esta patente no esta basada en una innovación
+ tecnológica.
+</p>
+ 
+<p>
+ La libreria de internet, Amazon, ha obtenido una patente del sistema
+ "one-click" para pedir un libro en internet.En Octubre de 1999, Amazon,
+ inició una demanda contra su mayor competidor, Barnes&amp;Noble, por
+ violación de su patente y un tribunal de Seattle dictó a
+ favor de Amazon en las medidas provisionales.
+</p>
+ 
+<p>
+ Barnes&amp;Noble fueron obligados a cambiar su sistema de compra online 
haciendo
+ más difícil a sus consumidores pedir libros.Barnes&amp;Noble no 
+ copiaron los programas de Amazon, ni su código fuente, ellos
+ habían creado su propio programa.
+</p>
+ 
+<p>
+ La Técnica "one-click" de Amazon es sin embargo, una prueba
+ completamente evidente del uso de una tecnología basada en las
+ llamadas "cookies"(galletitas) que eran conocidas y ampliamente usadas en
+ 1997 cuando Amazon solicitó su patente.
+</p>
+ 
+<p>
+ Brevemente, una "cookie" es un trozo de información extra que es
+ enviado con cada petición entre el navegador(cliente) y el servidor
+ (la libreria). En este caso la "cookie" es usada por Amazon para
+ identificar al cliente. En vez de tener que pedir al cliente que diga los
+ mismos datos una y otra vez con cada petición. La información,
+ "cookie".
+</p>
+ 
+<p>
+ Si una idea patentada es evidente en sí misma-tal y como es la
+ patente de Amazon-no es el resultado de un prolongado proyecto de
+ investigación y desarrollo, que haya sometido a la
+ compañía a un significativo riesgo financiero ni esta en el
+ interés social proteger tal idea con una patente.
+</p>
+ 
+<p>
+ Patentar ideas conocidas es completamente irracional-constituye un robo a
+ los creador(es) original(es).No obstante, la falta de novedad
+ invalidaría cualquier intento de patentabilidad y ninguna patente
+ debería ser expedida antes de que la Oficina de Patentes pudiese
+ comprobar la novedad y la actividad inventiva. La patente Amazon constituye
+ un delito de robo a la sociedad como un todo porque los inventores de la
+ tecnología web básica que esta en el corazón de la
+ técnica "one-click" de Amazon los habian puesto a disposición
+ de cualquiera sin cargo alguno.
+</p>
+ 
+<p>
+ Este argumento habla del sistema de patentes en USA y no de la idea de las
+ patentes software en general.La ley de patentes requiere que las
+ invenciones sean originales y no evidentes-en la práctica las
+ autoridades USA competentes en patentes no exigen este requisito. En parte
+ quizás porque con más de 20.000 patentes sólo en 1999,
+ las autoridades americanas competentes no tienen la capacidad para examinar
+ cada petición críticamente. Dada la extrema rapidez del
+ desarrollo tecnológico en el campo de la IT (Tecnología de la
+ Información) parece muy dudoso que la European Patent Office sea
+ capaz de hacerlo mejor que su compañera en USA. Sin mencionar que,
+ sea o no posible establecer un sistema más criítico en Europa,
+ uno debe temer que las consecuencias de la armonización con USA
+ serán que la jungla de patentes software triviales inunde
+ Europa.
+</p>
+ 
+<p>
+ Algunas veces la facilidad con que una patente software puede ser obtenida
+ en USA es defendida con el argumento de que una patente puede ser recurrida
+ y subsecuentemente revisada. En Dinamarca es posible que una patente se
+ re-evalue por el organismo competente por unas pocas coronas
+ patente no es original.
+</p>
+
+<p>
+ Sin embargo, en nuestra opinión no es aceptable tener un sistema
+ legal donde las empresas o las personas tengan que demandar para rechazar
+ un patente concedida incorrectamente.
+</p>
+ 
+<p>
+ Siempre hay un segundo que es puesto en desventaja por una patente, incluso
+ si la innovación es real.Si el propietario de la patente recibe una 
+ contraprestación por licenciar la idea patentada, hay una
+ compañia que esta pagando el correspondiente gasto.
+</p>
+ 
+<p>
+ Aún más, las patentes actúan contra las empresas de
+ software pequeñas y recientes porque no tienen una cartera de
+ patentes como la de las grandes y establecidas compañias de
+ software. Como resultado no pueden jugar a las "patentes mutuamente
+ disuasorias" como las grandes.Brevemente,"si nosotros no podemos usar tus
+ patentes, tu no vas a usar las nuestras". Por esto las patentes de software
+ tendrán la tendencia de proteger a las compañias establecidas
+ de tener que competir con las nuevas en igualdad de condiciones -de este
+ modo se limitará la competencia y se mantendrán a las empresas
+ con nuevas ideas fuera del mercado.Este sistema podría favorecer
+ a la idea menos avanzada.
+</p>
+ 
+<p>
+ El propietario de una patente podría evitar que la competencia
+ usase su idea en cualquier caso, lo que debilitaría el proceso de
+ innovación en el sentido de que la tecnología no se
+ aplicaría.Lo que es particularmente importante en el campo de la
+ tecnología de redes donde la distribución de un método
+ es una condición previa para su realización.
+</p>
+ 
+<p>
+ Tim Berners-Lee que inventó la World Wide Web, el interface
+ gráfico mediante "clicks" del Internet como lo conocemos, fue
+ preguntado si lamentaba o no, no haberse beneficiado económicamente
+ con la web.Su respuesta fue:
+</p>
+
+<p>
+ <blockquote>
+  "Si la tecnología hubiese sido propietaria no hubiese despegado
+  jamás. La decisión de hacer la web un sistema abierto fue
+  necesaria para que llegase ser universal".
+ </blockquote>
+</p>
+ 
+<p>
+ Uno de los factores detrás del desarrollo de la web fue el acceso a
+ navegadores y servidores libres. Si los usuarios de las ideas de Berners-Lee 
+ hubiesen tenido que pagar, la web no hubiese existido hoy.Tanto más 
+ para las patentes de innovaciones posteriores.
+</p>
+ 
+<p>
+ Sin la web, ni Amazon ni otros hubiesen tenido base para sus negocios. La
+ liberación de las patentes después de un periodo de 20
+ años de protección no constituye un beneficio para la
+ sociedad.En el campo de la IT una tecnología de 20 años es
+ normalmente obsoleta.Incluso un período de 2 a 3 años es un
+ largo tiempo cuando se trata de innovación y el tiempo que lleva 
+ desarrollar una imitación constituye una especie de protección  para las 
empresas innovadores. El capital intelectual en la forma de 
+ conocimiento tecnológico y comercial es un parámetro central 
+ de competencia en la economía actual.
+</p>
+ 
+<p>
+ Una compañia sin el necesario capital intelectual para desarrollar
+ ideas de última tecnología, es por definición una
+ segundona en el mercado.
+</p>
+ 
+<p>
+ El copyright fuerza a que los imitadores lancen su propia versión 
+ del programa -proceso que puede consumir mucho tiempo.
+</p>
+ 
+<p>
+ Tenga en cuenta que la protección normal de los secretos en los
+ negocios y que las reglas del espionaje industrial también se
+ aplican en el campo del IT.
+</p>
+ 
+<p>
+ Las patentes software tienen el potencial de llegar a ser un gran problema 
+ para los desarrolladores y usuarios del "Open Source"-por ejemplo el sistema 
+ operativo Linux del que nuestra asociación, SSLUG, es un grupo de
+ usuarios.
+</p>
+ 
+<p>
+ Linux y otros programas "Open Source" pueden ser libremente copiados y
+ distribuidos. Cualquiera es libre de hacer cambios en el código 
+ fuente siempre que esos cambios esten disponibles al público con las
+ mismas condiciones, si deciden redistribuirlo.
+</p>
+ 
+<p>
+ El sistema operativo Linux fue creado principalmente por personas trabajando
+ gratis en su tiempo libre.El nombre Linux es copyright de Linus Torvalds,
+ pero cada programador mantiene el copyright de su(s) contribucion(es) al
+ código fuente de Linux.Esto se conoce como modelo de desarrollo de
+ Linux.
+</p>
+ 
+<p>
+ Los desarrolladores de "Open Sorce" no tienen en realidad ninguna forma de
+ asegurarse de que los programas no violan una patente. Consecuentemente
+ nadie que use el programa comercialmente sería requerido a pagar al
+ propietario de la patente. Puesto que los programas "Open Source" a menudo
+ también son gratis, no hay ingresos para cubrir el canon de la
+ patente. Ni tampoco hay dinero para financiar una demanda de
+ reivindicación de la propiedad de una patente.
+</p>
+ 
+<p>
+ Hoy el "Open Source" es una de las fuentes más abundantes de
+ innovación en la IT y hay varias historias de exito para probarlo.
+ Por ejemplo el servidor web "Open Source", Apache, esta ahora funcionando
+</p>
+ 
+<p>
+ Es crucial para SSLUG y la web, que los paises europeos se abstengan de 
+ introducir/legalizar las patentes de software.
+ 
+ de un dia para otro.
+</p>
+ 
+<p>
+ Los programas de ordenador deben continuar como excepción en la ley
+ europea de patentes. Los paises europeos deben empeñarse en que USA
+ y Japón sigan la actitud actual europea sobre las patentes. Incluso,
+ la tendencia actual de solicitar patentes a pesar de la excepción de
+ los programas de ordenador en la legislación europea debería
+ terminarse por los gobiernos europeos en la Conferencia 2000 de la EPO el
+ próximo Noviembre en Munich.
+</p>
+ 
+<p>
+ Esforzarse en mantener la excepción de la patentabilidad del software 
+ permitirá a las compañías y a los consumidores escoger 
+ el mejor y más barato programa para su trabajo-incluyendo el elegir
+ "Open Source" de forma gratuita.
+</p>
+ 
+<p>
+ La única consecuencia cierta de seguir los pasos de USA parece ser
+ aumentar el coste del sistema de patentes: solicitudes, pleitos y
+ más recursos económicos públicos para los organismos
+ competentes en las patentes...
+</p>
+ 
+<p>
+ Incluso los pleitos que uno ha visto en USA son posiblemente pequeñas
+ escaramuzas ya que los propietarios de las patentes no han tratado de hacer 
+ efectivos sus derechos sobre ellas.
+</p>
+ 
+<p>
+ Los propietarios de esas miles de patentes americanas estan manteniendo 
+ una especie de amenaza mutua que podría convertirse en un Armageddon
+ de pleitos locos,costosos y paralizantes.Dinamarca y el resto de Europa no
+ necesita correr los mismos graves riesgos que USA por permitir las patentes
+ de software.
+</p>
+
+<p>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+<p>
+  Este artículo fue escrito por
+  SSLUG una asociación sueco/danesa con 5800 miembros trabajando por
+  el desarrollo del software libre y del "Open Source".
+</p>
+  
+<p>
+  Traducción al español por
+  <a href="mailto:address@hidden";>Dewaz</a>.
+</p>
+  
+<p>
+  En el texto original se menciona "Open Source" en lugar de "Free Software"
+  o Software Libre.
+</p>
+  
+<p>
+  La explicación se basa en que en inglés se usa una misma 
+  palabra para designar a gratis(free) y a libre(free), para evitar este
+  error muchos usan como palabra sinónima "Open 
+  Source".
+</p>
+  
+<p>
+  Esto puede crear ciertos errores mayores que los que se pretenden evitar,
+  el "Open Source" se basa en licencias como la GPL, BSD y otras como la QT 
+  Public License y la Artistic License.
+</p>
+  
+<p>
+  Por otro lado, el "Free Software" engloba a la GPL,GFDL y LGPL
+  que, según la Free Software Foundation, son compatibles con la
+  nueva BSD aunque son incompatibles con otras licencias aceptadas como
+  "Open Source" como la QT license o la Artistic License.
+</p>
+  </TD>
+</TR>
+</TABLE>
+</p>
+ 
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:03 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/nejtak.xhtml
===================================================================
RCS file: Licencias/nejtak.xhtml
diff -N Licencias/nejtak.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/nejtak.xhtml      3 Mar 2012 06:14:03 -0000       1.1
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p>
+<strong>SSLUG en Dinamarca ha usado este artículo para publicarlo en
+ el periódico danés "Information"(1/IX/2000) y en el
+ finés "Hufvudstadsbladet"(15/IX/2000)</strong>
+</p>
+
+<p>
+ "Si la tecnología hubiese sido propietaria no hubiese despegado
+ jamás. La decisión de hacer la web un sistema abierto fue
+ necesaria para que llegase a ser universal."
+</p>
+ 
+<p>
+ Uno de los factores detrás del desarrollo de la web fue el acceso a 
+ navegadores y servidores libres.Si los usuarios de las ideas de Tim
+ Berners-Lee hubiesen tenido que pagar todas las licencias, la web no
+ hubiese existido hoy. "No puedes pretender que algo sea para todos y al
+ mismo tiempo querer controlarlo".
+</p>
+ 
+<p>
+ Una patente le hubiera hecho rico-pero el mundo entero hubiera sido
+ más pobre-excepto en pleitos.
+</p>
+ 
+ 
+<p>
+ Una patente crea un monopolio en el uso de una invención controlada
+ por el inventor.
+</p>
+ 
+<p>
+ Una patente de software crea un monopolio en el uso de software de una idea
+ en particular o un método evitando la explotación comercial
+ de la idea o método por otros, sin importar si es un método
+ técnico complicado o sólo una simple idea.
+</p>
+ 
+<p>
+ Por ejemplo, el uso patentado de una ilustración de un carrito de
+ compras para mostrar al cliente que bienes ha seleccionado cuando compra en
+ internet.
+</p>
+ 
+<p>
+ Obtener una patente de software es muy común en USA, pero bastante
+ extraño en Europa.Esto parece estar cambiando. En Junio de este
+ año la European Patent Office sugirió la inclusión de
+ las patentes de software en una modificación a la Convención
+ europea de patentes, convención suscrita por Dinamarca y otros 18 
+ paises europeos.
+</p>
+ 
+<p>
+ El propósito de una patente de software(y de las patentes en
+ general) es incitar la innovación tecnológica.
+</p>
+ 
+<p>
+ Las patentes protegen a las compañias de que se imiten sus ideas, de
+ este modo, son un gran incentivo para invertir en investigación y
+ desarrollo.
+</p>
+ 
+<p>
+ La duración de una patente se limita a 20 años,
+ después de ese tiempo, la patente es pública, de esta forma,
+ en interés de la sociedad, cualquiera puede explotarla comercialmente
+ o mejorar la innovación tecnológica.
+</p>
+
+<p>
+ 20 años es un largo tiempo en la escala de los programas de
+ ordenador, se suele considerar que un año equivale a un mes de
+ "tiempo internet".
+</p>
+ 
+<p>
+ Nosotros argumentamos que las patentes, de hecho, no incitan la
+ innovación.
+</p>
+
+<p>
+ En Dinamarca y en el resto de Europa, los programas de ordenador se han
+ protegido mediante derecho de autor en vez de patentes.
+</p>
+ 
+<p>
+ El software estaba excluido de la ley de patentes.
+</p>
+ 
+<p>
+ El propietario de los derechos de un programa puede prohibir que se copie,
+ justo como el autor de una obra literaria puede prohibir que otros copien
+ su trabajo.
+</p>
+ 
+<p>
+ El propietario de una patente de sofware tendrá un derecho más 
+ extenso para prohibir a otros escribir programas que usen el método
+ o la idea patentada.
+</p>
+ 
+<p>
+ Aunque los programas de ordenador no son productos artísticos, los
+ derechos de autor tienen sentido ya que los programas se componen de texto.
+ El código fuente de un programa es un texto que contiene
+ instrucciones para el ordenador.
+</p>
+ 
+<p>
+ código fuente para llamar la atención sobre la propiedad de
+ ese código, que puede ser de una persona, organización o
+ compañia.
+</p>
+ 
+<p>
+ La nueva propuesta de la European Patent Office eliminaría la
+ excepción de los programas y allanaría el camino para las
+ patentes software en Europa.
+</p>
+
+<p>
+ Si esta modificación es adoptada por la Conferencia Gubernamental
+ 2000 de la EPO en Noviembre en Munich, la protección por derecho de
+ autor será substituida por la protección más extensa
+ de la patente.
+</p>
+ 
+<p>
+ La patente "one-click" de Amazon es un ejemplo de patente software en USA.
+ Esta patente no esta basada en una innovación
+ tecnológica.
+</p>
+ 
+<p>
+ La libreria de internet, Amazon, ha obtenido una patente del sistema
+ "one-click" para pedir un libro en internet.En Octubre de 1999, Amazon,
+ inició una demanda contra su mayor competidor, Barnes&amp;Noble, por
+ violación de su patente y un tribunal de Seattle dictó a
+ favor de Amazon en las medidas provisionales.
+</p>
+ 
+<p>
+ Barnes&amp;Noble fueron obligados a cambiar su sistema de compra online 
haciendo
+ más difícil a sus consumidores pedir libros.Barnes&amp;Noble no 
+ copiaron los programas de Amazon, ni su código fuente, ellos
+ habían creado su propio programa.
+</p>
+ 
+<p>
+ La Técnica "one-click" de Amazon es sin embargo, una prueba
+ completamente evidente del uso de una tecnología basada en las
+ llamadas "cookies"(galletitas) que eran conocidas y ampliamente usadas en
+ 1997 cuando Amazon solicitó su patente.
+</p>
+ 
+<p>
+ Brevemente, una "cookie" es un trozo de información extra que es
+ enviado con cada petición entre el navegador(cliente) y el servidor
+ (la libreria). En este caso la "cookie" es usada por Amazon para
+ identificar al cliente. En vez de tener que pedir al cliente que diga los
+ mismos datos una y otra vez con cada petición. La información,
+ "cookie".
+</p>
+ 
+<p>
+ Si una idea patentada es evidente en sí misma-tal y como es la
+ patente de Amazon-no es el resultado de un prolongado proyecto de
+ investigación y desarrollo, que haya sometido a la
+ compañía a un significativo riesgo financiero ni esta en el
+ interés social proteger tal idea con una patente.
+</p>
+ 
+<p>
+ Patentar ideas conocidas es completamente irracional-constituye un robo a
+ los creador(es) original(es).No obstante, la falta de novedad
+ invalidaría cualquier intento de patentabilidad y ninguna patente
+ debería ser expedida antes de que la Oficina de Patentes pudiese
+ comprobar la novedad y la actividad inventiva. La patente Amazon constituye
+ un delito de robo a la sociedad como un todo porque los inventores de la
+ tecnología web básica que esta en el corazón de la
+ técnica "one-click" de Amazon los habian puesto a disposición
+ de cualquiera sin cargo alguno.
+</p>
+ 
+<p>
+ Este argumento habla del sistema de patentes en USA y no de la idea de las
+ patentes software en general.La ley de patentes requiere que las
+ invenciones sean originales y no evidentes-en la práctica las
+ autoridades USA competentes en patentes no exigen este requisito. En parte
+ quizás porque con más de 20.000 patentes sólo en 1999,
+ las autoridades americanas competentes no tienen la capacidad para examinar
+ cada petición críticamente. Dada la extrema rapidez del
+ desarrollo tecnológico en el campo de la IT (Tecnología de la
+ Información) parece muy dudoso que la European Patent Office sea
+ capaz de hacerlo mejor que su compañera en USA. Sin mencionar que,
+ sea o no posible establecer un sistema más criítico en Europa,
+ uno debe temer que las consecuencias de la armonización con USA
+ serán que la jungla de patentes software triviales inunde
+ Europa.
+</p>
+ 
+<p>
+ Algunas veces la facilidad con que una patente software puede ser obtenida
+ en USA es defendida con el argumento de que una patente puede ser recurrida
+ y subsecuentemente revisada. En Dinamarca es posible que una patente se
+ re-evalue por el organismo competente por unas pocas coronas
+ patente no es original.
+</p>
+
+<p>
+ Sin embargo, en nuestra opinión no es aceptable tener un sistema
+ legal donde las empresas o las personas tengan que demandar para rechazar
+ un patente concedida incorrectamente.
+</p>
+ 
+<p>
+ Siempre hay un segundo que es puesto en desventaja por una patente, incluso
+ si la innovación es real.Si el propietario de la patente recibe una 
+ contraprestación por licenciar la idea patentada, hay una
+ compañia que esta pagando el correspondiente gasto.
+</p>
+ 
+<p>
+ Aún más, las patentes actúan contra las empresas de
+ software pequeñas y recientes porque no tienen una cartera de
+ patentes como la de las grandes y establecidas compañias de
+ software. Como resultado no pueden jugar a las "patentes mutuamente
+ disuasorias" como las grandes.Brevemente,"si nosotros no podemos usar tus
+ patentes, tu no vas a usar las nuestras". Por esto las patentes de software
+ tendrán la tendencia de proteger a las compañias establecidas
+ de tener que competir con las nuevas en igualdad de condiciones -de este
+ modo se limitará la competencia y se mantendrán a las empresas
+ con nuevas ideas fuera del mercado.Este sistema podría favorecer
+ a la idea menos avanzada.
+</p>
+ 
+<p>
+ El propietario de una patente podría evitar que la competencia
+ usase su idea en cualquier caso, lo que debilitaría el proceso de
+ innovación en el sentido de que la tecnología no se
+ aplicaría.Lo que es particularmente importante en el campo de la
+ tecnología de redes donde la distribución de un método
+ es una condición previa para su realización.
+</p>
+ 
+<p>
+ Tim Berners-Lee que inventó la World Wide Web, el interface
+ gráfico mediante "clicks" del Internet como lo conocemos, fue
+ preguntado si lamentaba o no, no haberse beneficiado económicamente
+ con la web.Su respuesta fue:
+</p>
+
+<p>
+ <blockquote>
+  "Si la tecnología hubiese sido propietaria no hubiese despegado
+  jamás. La decisión de hacer la web un sistema abierto fue
+  necesaria para que llegase ser universal".
+ </blockquote>
+</p>
+ 
+<p>
+ Uno de los factores detrás del desarrollo de la web fue el acceso a
+ navegadores y servidores libres. Si los usuarios de las ideas de Berners-Lee 
+ hubiesen tenido que pagar, la web no hubiese existido hoy.Tanto más 
+ para las patentes de innovaciones posteriores.
+</p>
+ 
+<p>
+ Sin la web, ni Amazon ni otros hubiesen tenido base para sus negocios. La
+ liberación de las patentes después de un periodo de 20
+ años de protección no constituye un beneficio para la
+ sociedad.En el campo de la IT una tecnología de 20 años es
+ normalmente obsoleta.Incluso un período de 2 a 3 años es un
+ largo tiempo cuando se trata de innovación y el tiempo que lleva 
+ desarrollar una imitación constituye una especie de protección  para las 
empresas innovadores. El capital intelectual en la forma de 
+ conocimiento tecnológico y comercial es un parámetro central 
+ de competencia en la economía actual.
+</p>
+ 
+<p>
+ Una compañia sin el necesario capital intelectual para desarrollar
+ ideas de última tecnología, es por definición una
+ segundona en el mercado.
+</p>
+ 
+<p>
+ El copyright fuerza a que los imitadores lancen su propia versión 
+ del programa -proceso que puede consumir mucho tiempo.
+</p>
+ 
+<p>
+ Tenga en cuenta que la protección normal de los secretos en los
+ negocios y que las reglas del espionaje industrial también se
+ aplican en el campo del IT.
+</p>
+ 
+<p>
+ Las patentes software tienen el potencial de llegar a ser un gran problema 
+ para los desarrolladores y usuarios del "Open Source"-por ejemplo el sistema 
+ operativo Linux del que nuestra asociación, SSLUG, es un grupo de
+ usuarios.
+</p>
+ 
+<p>
+ Linux y otros programas "Open Source" pueden ser libremente copiados y
+ distribuidos. Cualquiera es libre de hacer cambios en el código 
+ fuente siempre que esos cambios esten disponibles al público con las
+ mismas condiciones, si deciden redistribuirlo.
+</p>
+ 
+<p>
+ El sistema operativo Linux fue creado principalmente por personas trabajando
+ gratis en su tiempo libre.El nombre Linux es copyright de Linus Torvalds,
+ pero cada programador mantiene el copyright de su(s) contribucion(es) al
+ código fuente de Linux.Esto se conoce como modelo de desarrollo de
+ Linux.
+</p>
+ 
+<p>
+ Los desarrolladores de "Open Sorce" no tienen en realidad ninguna forma de
+ asegurarse de que los programas no violan una patente. Consecuentemente
+ nadie que use el programa comercialmente sería requerido a pagar al
+ propietario de la patente. Puesto que los programas "Open Source" a menudo
+ también son gratis, no hay ingresos para cubrir el canon de la
+ patente. Ni tampoco hay dinero para financiar una demanda de
+ reivindicación de la propiedad de una patente.
+</p>
+ 
+<p>
+ Hoy el "Open Source" es una de las fuentes más abundantes de
+ innovación en la IT y hay varias historias de exito para probarlo.
+ Por ejemplo el servidor web "Open Source", Apache, esta ahora funcionando
+</p>
+ 
+<p>
+ Es crucial para SSLUG y la web, que los paises europeos se abstengan de 
+ introducir/legalizar las patentes de software.
+ 
+ de un dia para otro.
+</p>
+ 
+<p>
+ Los programas de ordenador deben continuar como excepción en la ley
+ europea de patentes. Los paises europeos deben empeñarse en que USA
+ y Japón sigan la actitud actual europea sobre las patentes. Incluso,
+ la tendencia actual de solicitar patentes a pesar de la excepción de
+ los programas de ordenador en la legislación europea debería
+ terminarse por los gobiernos europeos en la Conferencia 2000 de la EPO el
+ próximo Noviembre en Munich.
+</p>
+ 
+<p>
+ Esforzarse en mantener la excepción de la patentabilidad del software 
+ permitirá a las compañías y a los consumidores escoger 
+ el mejor y más barato programa para su trabajo-incluyendo el elegir
+ "Open Source" de forma gratuita.
+</p>
+ 
+<p>
+ La única consecuencia cierta de seguir los pasos de USA parece ser
+ aumentar el coste del sistema de patentes: solicitudes, pleitos y
+ más recursos económicos públicos para los organismos
+ competentes en las patentes...
+</p>
+ 
+<p>
+ Incluso los pleitos que uno ha visto en USA son posiblemente pequeñas
+ escaramuzas ya que los propietarios de las patentes no han tratado de hacer 
+ efectivos sus derechos sobre ellas.
+</p>
+ 
+<p>
+ Los propietarios de esas miles de patentes americanas estan manteniendo 
+ una especie de amenaza mutua que podría convertirse en un Armageddon
+ de pleitos locos,costosos y paralizantes.Dinamarca y el resto de Europa no
+ necesita correr los mismos graves riesgos que USA por permitir las patentes
+ de software.
+</p>
+
+<p>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+<p>
+  Este artículo fue escrito por
+  SSLUG una asociación sueco/danesa con 5800 miembros trabajando por
+  el desarrollo del software libre y del "Open Source".
+</p>
+  
+<p>
+  Traducción al español por
+  <a href="mailto:address@hidden";>Dewaz</a>.
+</p>
+  
+<p>
+  En el texto original se menciona "Open Source" en lugar de "Free Software"
+  o Software Libre.
+</p>
+  
+<p>
+  La explicación se basa en que en inglés se usa una misma 
+  palabra para designar a gratis(free) y a libre(free), para evitar este
+  error muchos usan como palabra sinónima "Open 
+  Source".
+</p>
+  
+<p>
+  Esto puede crear ciertos errores mayores que los que se pretenden evitar,
+  el "Open Source" se basa en licencias como la GPL, BSD y otras como la QT 
+  Public License y la Artistic License.
+</p>
+  
+<p>
+  Por otro lado, el "Free Software" engloba a la GPL,GFDL y LGPL
+  que, según la Free Software Foundation, son compatibles con la
+  nueva BSD aunque son incompatibles con otras licencias aceptadas como
+  "Open Source" como la QT license o la Artistic License.
+</p>
+  </TD>
+</TR>
+</TABLE>
+</p>
+ 
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:03 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/pag1a.pdf
===================================================================
RCS file: Licencias/pag1a.pdf
diff -N Licencias/pag1a.pdf
Binary files /dev/null and /tmp/cvsMILulq differ

Index: Licencias/pag1b.pdf
===================================================================
RCS file: Licencias/pag1b.pdf
diff -N Licencias/pag1b.pdf
Binary files /dev/null and /tmp/cvswE6udt differ

Index: Licencias/pag2a.pdf
===================================================================
RCS file: Licencias/pag2a.pdf
diff -N Licencias/pag2a.pdf
Binary files /dev/null and /tmp/cvsdkirNt differ

Index: Licencias/pag2b.pdf
===================================================================
RCS file: Licencias/pag2b.pdf
diff -N Licencias/pag2b.pdf
Binary files /dev/null and /tmp/cvsV6IGzs differ

Index: Licencias/pag3a.pdf
===================================================================
RCS file: Licencias/pag3a.pdf
diff -N Licencias/pag3a.pdf
Binary files /dev/null and /tmp/cvsORprLv differ

Index: Licencias/pag3b.pdf
===================================================================
RCS file: Licencias/pag3b.pdf
diff -N Licencias/pag3b.pdf
Binary files /dev/null and /tmp/cvswBdcjw differ

Index: Licencias/pag4a.pdf
===================================================================
RCS file: Licencias/pag4a.pdf
diff -N Licencias/pag4a.pdf
Binary files /dev/null and /tmp/cvsIN6ivu differ

Index: Licencias/pag4b.pdf
===================================================================
RCS file: Licencias/pag4b.pdf
diff -N Licencias/pag4b.pdf
Binary files /dev/null and /tmp/cvsNucAcv differ

Index: Licencias/pagano.html
===================================================================
RCS file: Licencias/pagano.html
diff -N Licencias/pagano.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/pagano.html       3 Mar 2012 06:14:04 -0000       1.1
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+     <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+<p>
+<h1>¿Paga y calla?</h1>
+</p>
+<p>
+Algunos gobiernos europeos estan planteando la posibilidad de obligar a los 
consumidores, a pagar una cantidad de dinero extra cuando compren ordena dores 
y sus periféricos, para compensar a los artistas, por la pérdida económica que, 
según ellos les provoca internet. Cuanto más ignorantes vivamos, más 
posibilidades tendrán ciertos grupos de presión de vulnerar los intereses 
mayoritarios, en el momento de elaboración o interpretación de las leyes que 
nos gobiernan.
+</p>
+<p>
+Se llama propiedad intelectual al conjunto de derechos que tiene el autor 
sobre la obra que ha creado.Es curioso, pero en la Ley de Propiedad 
Intelectual, en adelante LPI, no aparece por ningún lado la palabra 
"copyright", aunque, este es el nombre por el que generalmente se suele 
denominar a los derechos de autor. La propiedad intelectual puede consistir en 
una canción, fotografías, videos, esculturas, obras de pintura, libros, comics, 
obras dramáticas, proyectos, planos, diseños y programas de ordenador. Entre 
los derechos que conforman la propiedad intelectual, esta el derecho moral del 
autor sobre su obra, gracias al cual puede exigir que se reconozca su condición 
de autor, decidir sobre la forma de divulgación de su obra o que no se 
modifique en perjuicio de sus intereses o menoscabando su reputación.
+</p>
+<p>
+También tiene derechos de explotación como el de reproducción, distribución y 
comunicación pública, finalmente esta el derecho a la remuneración por copia 
privada. El derecho a reproducir una obra te da permiso para fijarla en 
cualquier medio que permita su comunicación posterior.Para poder poner al 
alcance del público  la obra y las copias obtenidas, necesitas tener ademas el 
derecho de distribución. La comunicación pública consiste en poner a 
disposición de la gente la obra, pero sin repartirle copias de la obra a cada 
persona, este derecho se ejercita en un ámbito que no es el doméstico o 
personal, sería el caso de una película que ves en un cine o en un bar,el video 
del autobus, un concierto en directo o la  puesta en escena de una obra de 
teatro.
+</p>
+<p>
+Este derecho también hay que pagarlo, porque según la ley, es distinto del 
derecho de distribución.
+</p>
+<p>
+Cuando la reproducción de la obra se realiza únicamente para un uso privado, 
según la Ley de Propiedad Intelectual, nace un derecho para compensar el dinero 
que el autor deja de percibir por dicha reproducción, a ese derecho se le llama 
"remuneración por copia privada" y por ese motivo los fabricantes o 
importadores de aparatos para reproducir libros, música o videos tiene que 
pagar un porcentaje, igual que cualquier persona al pagar una fotocopia o 
comprar una cinta de video virgen tiene que abonar tambien un porcentaje 
determinado que va a parar a las entidades de gestión. Afortunadamente, la 
compra de papel en blanco no tiene que pagar ningun recargo por estos 
conceptos, de momento. Según el artículo 90.7 de la LPI, en las obras 
audiovisuales, el derecho de comunicación pública deberá pagarse a través de 
las entidades de gestión de derechos de autor.Este derecho existe, aunque tu 
hayas tenido acceso público a la obra pagando una entrada o gratis, lo que 
importa para que exista ese derecho, es que hayas visto la obra en un lugar 
público.
+</p>
+<p>
+El artículo 25 de la LPI, establece que el derecho de remuneración por copia 
privada, tambien sea irrenunciable para los autores y los artistas, interpretes 
o ejecutantes y sólo puedan cobrarlo a través de una entidad de gestión de los 
derechos de autor. Esto quiere decir, que si creas una obra, no podras negociar 
la cantidad a recibir a cambio de la comunicación pública o la copia privada y 
que desde luego no vas a poder cobrarlo por ti mismo, es obligatorio que te 
afilies a una entidad de gestión de derechos de autor.
+</p>
+<p>
+Los programas de ordenador son propiedad intelectual de su autor o, salvo que 
se pacte otra cosa, de la empresa que ha empleado a ese autor para hacer el 
programa. Generalmente esa empresa luego, no vende el programa a sus clientes 
sino que lo alquila pero de forma no exclusiva, es decir, puede alquilar el 
programa a muchas personas que a su vez, sólo lo podrán usarlo en un ordenador. 
La protección que la propiedad intelectual concede a los programas es también 
especial puesto que, el código fuente no se hace público, sólo se distribuyen 
los binarios. De esta forma, el programa tal y como lo escribe y lo puede leer 
un ser humano puede permanecer secreto y sólo se entrega el programa para ser 
ejecutado en el ordenador.
+</p>
+<p>
+Un programa de ordenador, según la LPI, es una secuencia de instrucciones o 
indicaciones destinadas a ser utilizadas, directa o indirectamente, en un 
sistema informático para realizar una función o una tarea o para obtener un 
resultado determinado, cualquiera que fuere su forma de expresión y fijación.
+</p>
+<p>
+Los ordenadores hoy, no son solo terminales Unix en modo texto, para la amplia 
mayoría son pantallas de iconos llenas de colores y sonido, video-juegos y 
últimamente, acceso a internet con sus paginas web llenas de más dibujos, 
fotos, sonido, video e incluso imágenes virtuales en tres dimensiones. En pocas 
palabras, el tramiento de las imágenes y el sonido por medios 
informáticos-multimedia ha conseguido que la barrera que en los 80 separaba la 
industria de los  ordenadores y programas, de la industria de las discográficas 
o los estudios de Hollywood haya casi desaparecido hoy al principio del siglo 
XXI. La unión entre AOL y Time-Warner, como una fusión entre colosos iguales, 
es el mejor ejemplo de esto. La oferta conjunta de películas,canales de 
informacioón e internet por un mismo suministrador a través de la misma 
infraestructura tecnológica, refuerza en mi opinión esta teoría.
+</p>
+<p>
+El artículo 100.2 considera que la realización de una copia de seguridad por 
la persona que tiene derecho a usar el programa no puede impedirse por contrato 
en cuanto resulte necesaria para dicha utilización.Sin embargo, el derecho a la 
remuneración por copia privada que antes vimos, esta excluido por el artículo 
25.3 cuando se trate de programas de ordenador.
+</p>
+<p>
+Es decir, puedes hacer copias de los programas como copia de seguridad y para 
uso personal y esto no genera el derecho de remuneración por copia privada. El 
problema surge si empezamos a considerar a los programas de ordenador como 
obras audiovisuales, por ejemplo los video-juegos. Si entendemos los 
video-juegos como obras audiovisuales , no sólo se pagaría por poder venderlos 
o alquilarlos-derecho de distribución-también habría que pagar a una entidad de 
gestión de derechos de autor por jugar en público con ellos-derecho de 
comunicación pública. Al mismo tiempo habría que pagar una compensación al 
comprar los CD y DVD, ya que las obras audiovisuales sí perciben remuneración 
por copia privada.
+</p>
+<p>
+Para complicarlo aun más, en los CD y DVD, no sólo se pueden copiar programas 
sino también fotos, canciones y videos en formato digital que sí generan 
remuneración por copia privada.Como el ordenador puede servir para hacer esas 
reproducciones, las entidades de gestión quieren que alguien les pague una 
compensación, exactamente como ocurre con los aparatos para grabar sonido o las 
máquinas de fotocopia. Pero el ordenador sirve para muchas cosas más, aparte de 
para grabar fotos o música en  su disco duro.En cualquier caso, las obras 
almacenadas en ese dispositivo pueden ser originales del dueño del ordenador y 
entonces, simplemente haría copias de su propia obra y sería más absurda aun, 
la remuneración por copia privada. Recuerda que el derecho de copia privada 
existe incluso cuando jamás pienses dar esa copia a nadie, no tiene que ver con 
la distribución no autorizada con o sin ánimo de lucro.
+</p>
+<p>
+El propietario de un bar, como vimos, tiene que pagar a una entidad de gestión 
de derechos de autor por el hecho de tener una tele en su local, esto es el 
canon de comunicación pública.
+</p>
+<p>
+Hay mucho dinero en juego si finalmente, las entidades de gestión, consiguen 
de alguna forma, aplicar el concepto de comunicación pública a internet.Si se 
considera internet como una obra audiovisual -ya que puedes ver video o 
escuchar música a través de internet-podrán, por ejemplo, empezar a cobrar a 
los ciber-cafes el canon de comunicación pública, ya que entonces la gente 
tiene acceso a la obra intectual en público, quizás decidan que son los 
Proveedores de internet -ISP-quienes tienen que pagar, o los dos. Para que no 
quede nadie sin pagar, también estan considerando la posibilidad de cobrar ese 
canon cuando accedas desde tu casa, entonces no estas en un lugar público, pero 
pretenden que el artículo 20.2.i de la LPI sea aplicable a internet.
+</p>
+<p>
+Ese artículo entiende por comunicación pública, el acceso público a bases de 
datos de ordenador en,cualquier forma, cuando estas incorporen o constituyan 
obras protegidas. Como internet es una enorme base de datos y esta compuesta 
por millones de fotos, documentos, videos, música,animaciones,dibujos...y todo 
eso es propiedad intelectual protegible por ser la creación original de alguna 
persona, entonces al poder leer o escuchar esas obras por medios telemáticos 
sería comunicación pública, sin importar desde donde accedas a esa propiedad 
intelectual. Si las entidades de gestión consiguen que este criterio se 
imponga, habrá un derecho de comunicación pública al acceder a internet, 
incluso desde tu casa y alguien tendrá que pagarlo.
+</p>
+<p>
+En España algunas empresas puntocom pretenden hacer la competencia a las 
discográficas tradicionales, comerciando con los derechos intelectuales de 
músicos y vendiendo las canciones en formato comprimido a través de internet, 
la gran mayoría de ellas, pagan el canon de comunicación pública mediante 
acuerdos con alguna entidad de gestión.Esto no ha hecho mas que comenzar y 
antes o despues, esas entidades exigirán el pago de TODAS las obras 
intelectuales, no sólo la música. Como consumidores podemos intentar pararlo, 
adquiriendo la música directamente a través de la página personal del músico y 
no de una sumisa puntocom. Internet no es sólo comunicación, como lo fue la 
imprenta o el telegrafo, la velocidad de esa comunicación y la interacción 
individual que ofrece es lo realmente revolucionario. Cuando la gente pone en 
internet, fotos de sus vacaciones, la descripción de algún experimento sobre 
química, un poema, un chiste o un cuentecillo, no esta pensando en la 
remuneración de la copia privada o la comunicación pública.Mucho menos en 
afiliarse, de forma obligatoria, a una entidad de gestión para poder cobrar 
esos derechos.
+</p>
+<p>
+En mi opinión, al considerar los derechos de remuneración de copia privada o 
el de comunicación pública como irrenunciables e inalienables, se estan 
vulnerando derechos constitucionales como el derecho a la libertad de emprensa 
y a la libre asociación, sin causa justificada ya que el autor no puede 
negociar por sí mismo y sólo puede cobrar si se afilia a una entidad de 
gestión. En la práctica, eso significa que se le concede un derecho para 
inmediatamente expropiarselo, en favor de una entidad de gestión, que le 
compensará sólo si es afiliado.
+En todo caso, al afectar a derechos fundamentales,según el artículo 81 de la 
Constitución, se podría entender que debe ser regulado por ley orgánica y no en 
una ley ordinaria como la LPI.Esto implicaría la necesidad de mayoría absoluta 
en el Congreso para regular estos derechos.
+</p>
+<p>
+Mientras tanto, Alemania es el único pais de la Unión Europea, que ha 
introducido los recargos al comprar ordenadores desde principios de año, dado 
su peso en la Unión Europea no es descartable que para evitar una distorsión en 
el mercado interior de la Unión, presionen con su particular razonamiento, 
hasta conseguir una armonización en toda Europa mediante una Directiva sobre la 
materia, de esta forma todos los Estados que componen la Unión Europea tendrían 
que incorporar en sus legislaciones nacionales las medidas impuestas en esa 
Directiva. En Francia, la Ministra de Cultura, Catherine Tasca, para justificar 
la medida, declaró en en una entrevista a Le Figaro:" Parece que el nacimiento 
de las nuevas tecnologías ha perjudicado las ganancias de los artistas...no hay 
modelo de negocio para la cultura a menos que los artistas sean pagados.Sin 
ellos no hay ni música ni imagenes de video." Esta mentalidad es incomprensible 
y bastante decepcionante cuando procede de Gobiernos que dicen apoyar el 
sistema operativo GNU/LINUX y los programas  libres.
+</p>
+<p>
+Al contrario que los programas que mencione antes y que son cerrados o 
propietarios porque no se distribuyen con el código fuente,el software libre 
tiene como característica diferenciadora el distribuirse sin ocultar esas 
fuentes y concederte además tres libertades:
+</p>
+<p><ul>
+  <li>Libertad para usar el programa:No hay una licencia que te limite la 
instalación a un número determinado de ordenadores, puedes usarlo en tantos 
ordenadores como quieras.</li>
+  <li>Libertad para modificarlo:Con el código fuente no sólo puedes ver que 
hace el programa o como funciona, también puedes escribir cambios o escribir 
algo nuevo para añadirselo y que el programa haga lo que quieras.</li>
+  <li>Libertad para distribuirlo, modificado o no, con o sin ánimo de lucro. 
Las copias que hagas puedes venderlas o puedes cobrar por instalarlo o hacerlo 
gratis si lo decides. No es como los programas "shareware", en los que pagas 
después de un período de prueba, el programa libre no tiene por qué ser gratis, 
además incluye el codigo fuente que te permite leer el programa.Tampoco es 
exactamente como los programas "freeware" que son de libre distribución y 
gratis, pero no te dan las fuentes, por eso no son free software.</li>
+</ul>
+</p>
+<p>
+La licencia BSD es un ejemplo de licencia libre o "free software", ya que 
cumple las tres premisas anteriores, pero al contrario que la licencia GPL no 
te obliga a incluir las fuentes del programa, como condición a cumplir para 
poder distribuir el programa. El "Open Source" es un grupo que incide en las 
ventajas prácticas del free soft y admite varias licencias como la GPL o la 
BSD, pero también otras como la "Artistic License". Adoptaron el nombre "Open 
Source"porque en inglés "free software" puede significar software libre y 
software gratis y aunque el software libre puede ser vendido, pensaron que era 
un nombre inconveniente y desafortunado para utilizarlo en el mundo de las 
empresas.
+</p>
+<p>
+La Free Software Foundation, prefiere usar "free software" o software libre en 
vez de "Open Source" y se concentra en los aspectos idealistas del copyleft con 
independencia del resultado. Esta fundación, creada por Richard Stallman, 
considera que la BSD es software libre y compatible con la GPL aunque no sea 
"copyleft", sin embargo, otras licencias que se engloban como "Open Source", 
como la licencia "artistic license" no es compatible con la GPL, por este 
motivo no es buena idea utilizar "Open Source" como sinónimo de "Free Software".
+</p>
+<p>
+El objetivo de la Free Software Foundation era el desarrollo de un entorno de 
programación cuyas herramientas fuesen libres, esta es la razón por la que 
habla de GNU/LINUX para referirse a este sistema operativo compuesto por el 
núcleo del sistema LINUX, liberado con la licencia GPL y las herramientas GNU. 
GNU es una broma que significa GNU No es Unix, también es el nombre inglés de 
un antílope africano,en español, ñú, que es la mascota de la Free Software 
Foundation. El software libre, es un ejemplo de la importancia de compartir el 
conocimiento como medio para poder desarrollar más conocimiento.
+
+Se puede decir que el software libre creó los programas que hacen funcionar 
internet y a la vez, internet permitió a miles de personas comunicarse por todo 
el planeta y crear maás programas libres. Esta filosofía no puede obviarse o 
negarse por los gobiernos europeos, al tomar decisiones que nos afectan, antes 
al contrario, no deberían aprisionar, con una errónea aplicación de las leyes 
vigentes, el espíritu de cooperación que se establece en internet y que ha 
hecho posible que sea lo que es hoy. El modelo hace tambalear el sistema 
tradicional de producir y consumir bienes inmateriales como son los programas 
de ordenador y otras obras objeto de propiedad intelectual, como la música y la 
literatura. Internet, entendido como suma de ordenador y comunicación, implica 
el tratamiento  digital de las obras intelectuales,facilitando su reproducción 
más la comunicación que hace que los costes de distribución hayan casi 
desaparecido, porque no es necesario el transporte físico en el que la obra 
intelectual estaba fijada sino que esa obra se envia de un ordenador a otro, 
pudiendo ser esa comunicación interactiva.
+</p>
+<p>
+Cualquier autor puede escribir un libro o poner una galería virtual con sus 
fotos y conseguir que sea accesible para cualquier persona con ordenador y 
conexión a internet, este situado en su ciudad o en las antípodas, incluso 
podrá conocer directamente y en un tiempo record cual es la opinión que merece 
su obra via correo electrónico o hablar sobre su creación en un canal de IRC.
+</p>
+<p>
+A pesar de todo esto, como vimos, hay quien piensa que en internet puede 
dirigirnos inevitablemente al colapso de la producción de imágenes o video al 
no ser recompensados los artistas. Vivimos una epoca interesante en la que 
asistimos a una guerra a muerte entre intereses contrapuestos y formas de 
concebir la vida bastante diferentes, al final o bien las antiguas leyes que 
nos gobiernan comienzan a regir tambien el mundo de internet, trastocando sus 
objetivos y funcionamiento iniciales o bien este mundo de internet se expande y 
liquida la mentalidad y las formas que actualmente soportamos, dando lugar a 
nuevas leyes e interpretaciones.
+</p>
+<p>
+No nos confundamos, internet es una enorme fuente de riqueza económica , de lo 
que se discute ahora es sobre las reglas del viejo juego de como se crea la 
riqueza y quien se la lleva.No es razonable que un sólo jugador imponga sus 
reglas al resto de jugadores y al público, sobre todo cuando, aunque el 
sostenga lo contrario, no es imprescindible.El viejo sistema de retribución ya 
no es la única forma posible de crear obras intelectuales, ni siquiera bajo el 
argumento de que algunas obras tienen más "calidad" que otras.
+</p>
+<p>
+Se puede hacer video digital y muy pronto habra cines donde no necesiten 
rollos de película sino que podrán recibir la obra "on-line", lo que no hay que 
hacer es encarecer el acceso a esas tecnologías, subiendo los precios de los 
ordenadores o los soportes físicos donde las obras se fijan.Cuanto más baratos 
sean los medios más posibilidades tendrán las personas, incluso en paises no 
desarrollados, de poder crear esas obras intelectuales y de hacerlas accesibles 
para el resto de los habitantes del planeta. Hay algo que no podemos obviar y 
es que al haberse casi eliminado los costes de reproducción, la propiedad 
intelectual es más inmaterial que nunca, esto significa que podemos acceder a 
esa obra sin rivalizar con nadie, no es como un bolígrafo que sólo puede ser 
usado por una sóla persona cada vez.
+</p>
+<p>
+También hay que tener en cuenta que, al contrario que ese bolígrafo la 
propiedad intelectual no se consume, es más, aumenta de valor cuanta más gente 
puede disfrutar de ella.
+</p>
+<p>
+No confundas valor y precio, es un gran error en el mundo del software libre y 
en cualquier otro.
+</p>
+<p>
+Un programa de ordenador que simule el comportamiento de una población de 
Leptinotarsa Decemlineata y su metabolismo, escrito por un científico 
australiano y puesto en internet, puede servir para mucha gente que vive en 
Argentina o en Sudáfrica, podrán leerlo y con su experiencia enriqueceran el 
valor del programa, el coste de aportación para ellos es mínimo en comparación 
con la posibilidad de disfrutar de esa obra intelectual completa de forma 
libre, a medida que pase el tiempo el programa aumentará en contenido, 
precisión y calidad.
+</p>
+<p>
+Ese programa será extremadamente valioso para la industria de la patata que 
será finalmente quien más se beneficie económicamente de ese estudio, 
ahorrandose millones al poder conocer mejor las condiciones que disparan el 
número de esos escarabajos que se alimentan de patatas.
+</p>
+<p>
+Pero los beneficios de ese trabajo no se pueden cuantificar tan fácilmente, 
por eso la información libre tiene un valor incalculable.Entra dentro de lo 
posible que ese programa implemente un algoritmo que acelere las 
investigaciones de un grupo científico en Inglaterra que acabe teniendo una 
aplicación industrial completamente diferente.
+</p>
+<p>
+Los sistemas de compensaciones y canones descritos en la Ley de Propiedad 
Intelectual no ofrecen un sistema ni válido ni asumible para compensar el 
esfuerzo de los autores en internet, pero hay que tener en cuenta que eso no 
tiene por que frenar la creación y que el coste de esa creación, siempre 
difícil de medir, puede ser infinitamente menor mediante la cooperación que con 
el sistema en el que pretenden aprisionarnos, por otro lado la compensación por 
esa labor puede ser obtenida por otros medios al margen de la venta de los 
derechos de la obra intelectual en sí misma y de forma mucho mayor y eficaz que 
la que puedan hacer las entidades de gestión de derechos de autor.
+</p>
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+<p>
+Este artículo ha sido publicado por la revista @rroba ,correspondiente a Marzo 
del 2001
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:04 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/pagano.xhtml
===================================================================
RCS file: Licencias/pagano.xhtml
diff -N Licencias/pagano.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/pagano.xhtml      3 Mar 2012 06:14:04 -0000       1.1
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+     <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+<p>
+<h1>¿Paga y calla?</h1>
+</p>
+<p>
+Algunos gobiernos europeos estan planteando la posibilidad de obligar a los 
consumidores, a pagar una cantidad de dinero extra cuando compren ordena dores 
y sus periféricos, para compensar a los artistas, por la pérdida económica que, 
según ellos les provoca internet. Cuanto más ignorantes vivamos, más 
posibilidades tendrán ciertos grupos de presión de vulnerar los intereses 
mayoritarios, en el momento de elaboración o interpretación de las leyes que 
nos gobiernan.
+</p>
+<p>
+Se llama propiedad intelectual al conjunto de derechos que tiene el autor 
sobre la obra que ha creado.Es curioso, pero en la Ley de Propiedad 
Intelectual, en adelante LPI, no aparece por ningún lado la palabra 
"copyright", aunque, este es el nombre por el que generalmente se suele 
denominar a los derechos de autor. La propiedad intelectual puede consistir en 
una canción, fotografías, videos, esculturas, obras de pintura, libros, comics, 
obras dramáticas, proyectos, planos, diseños y programas de ordenador. Entre 
los derechos que conforman la propiedad intelectual, esta el derecho moral del 
autor sobre su obra, gracias al cual puede exigir que se reconozca su condición 
de autor, decidir sobre la forma de divulgación de su obra o que no se 
modifique en perjuicio de sus intereses o menoscabando su reputación.
+</p>
+<p>
+También tiene derechos de explotación como el de reproducción, distribución y 
comunicación pública, finalmente esta el derecho a la remuneración por copia 
privada. El derecho a reproducir una obra te da permiso para fijarla en 
cualquier medio que permita su comunicación posterior.Para poder poner al 
alcance del público  la obra y las copias obtenidas, necesitas tener ademas el 
derecho de distribución. La comunicación pública consiste en poner a 
disposición de la gente la obra, pero sin repartirle copias de la obra a cada 
persona, este derecho se ejercita en un ámbito que no es el doméstico o 
personal, sería el caso de una película que ves en un cine o en un bar,el video 
del autobus, un concierto en directo o la  puesta en escena de una obra de 
teatro.
+</p>
+<p>
+Este derecho también hay que pagarlo, porque según la ley, es distinto del 
derecho de distribución.
+</p>
+<p>
+Cuando la reproducción de la obra se realiza únicamente para un uso privado, 
según la Ley de Propiedad Intelectual, nace un derecho para compensar el dinero 
que el autor deja de percibir por dicha reproducción, a ese derecho se le llama 
"remuneración por copia privada" y por ese motivo los fabricantes o 
importadores de aparatos para reproducir libros, música o videos tiene que 
pagar un porcentaje, igual que cualquier persona al pagar una fotocopia o 
comprar una cinta de video virgen tiene que abonar tambien un porcentaje 
determinado que va a parar a las entidades de gestión. Afortunadamente, la 
compra de papel en blanco no tiene que pagar ningun recargo por estos 
conceptos, de momento. Según el artículo 90.7 de la LPI, en las obras 
audiovisuales, el derecho de comunicación pública deberá pagarse a través de 
las entidades de gestión de derechos de autor.Este derecho existe, aunque tu 
hayas tenido acceso público a la obra pagando una entrada o gratis, lo que 
importa para que exista ese derecho, es que hayas visto la obra en un lugar 
público.
+</p>
+<p>
+El artículo 25 de la LPI, establece que el derecho de remuneración por copia 
privada, tambien sea irrenunciable para los autores y los artistas, interpretes 
o ejecutantes y sólo puedan cobrarlo a través de una entidad de gestión de los 
derechos de autor. Esto quiere decir, que si creas una obra, no podras negociar 
la cantidad a recibir a cambio de la comunicación pública o la copia privada y 
que desde luego no vas a poder cobrarlo por ti mismo, es obligatorio que te 
afilies a una entidad de gestión de derechos de autor.
+</p>
+<p>
+Los programas de ordenador son propiedad intelectual de su autor o, salvo que 
se pacte otra cosa, de la empresa que ha empleado a ese autor para hacer el 
programa. Generalmente esa empresa luego, no vende el programa a sus clientes 
sino que lo alquila pero de forma no exclusiva, es decir, puede alquilar el 
programa a muchas personas que a su vez, sólo lo podrán usarlo en un ordenador. 
La protección que la propiedad intelectual concede a los programas es también 
especial puesto que, el código fuente no se hace público, sólo se distribuyen 
los binarios. De esta forma, el programa tal y como lo escribe y lo puede leer 
un ser humano puede permanecer secreto y sólo se entrega el programa para ser 
ejecutado en el ordenador.
+</p>
+<p>
+Un programa de ordenador, según la LPI, es una secuencia de instrucciones o 
indicaciones destinadas a ser utilizadas, directa o indirectamente, en un 
sistema informático para realizar una función o una tarea o para obtener un 
resultado determinado, cualquiera que fuere su forma de expresión y fijación.
+</p>
+<p>
+Los ordenadores hoy, no son solo terminales UNIX en modo texto, para la amplia 
mayoría son pantallas de iconos llenas de colores y sonido, video-juegos y 
últimamente, acceso a internet con sus paginas web llenas de más dibujos, 
fotos, sonido, video e incluso imágenes virtuales en tres dimensiones. En pocas 
palabras, el tramiento de las imágenes y el sonido por medios 
informáticos-multimedia ha conseguido que la barrera que en los 80 separaba la 
industria de los  ordenadores y programas, de la industria de las discográficas 
o los estudios de Hollywood haya casi desaparecido hoy al principio del siglo 
XXI. La unión entre AOL y Time-Warner, como una fusión entre colosos iguales, 
es el mejor ejemplo de esto. La oferta conjunta de películas,canales de 
informacioón e internet por un mismo suministrador a través de la misma 
infraestructura tecnológica, refuerza en mi opinión esta teoría.
+</p>
+<p>
+El artículo 100.2 considera que la realización de una copia de seguridad por 
la persona que tiene derecho a usar el programa no puede impedirse por contrato 
en cuanto resulte necesaria para dicha utilización.Sin embargo, el derecho a la 
remuneración por copia privada que antes vimos, esta excluido por el artículo 
25.3 cuando se trate de programas de ordenador.
+</p>
+<p>
+Es decir, puedes hacer copias de los programas como copia de seguridad y para 
uso personal y esto no genera el derecho de remuneración por copia privada. El 
problema surge si empezamos a considerar a los programas de ordenador como 
obras audiovisuales, por ejemplo los video-juegos. Si entendemos los 
video-juegos como obras audiovisuales , no sólo se pagaría por poder venderlos 
o alquilarlos-derecho de distribución-también habría que pagar a una entidad de 
gestión de derechos de autor por jugar en público con ellos-derecho de 
comunicación pública. Al mismo tiempo habría que pagar una compensación al 
comprar los CD y DVD, ya que las obras audiovisuales sí perciben remuneración 
por copia privada.
+</p>
+<p>
+Para complicarlo aun más, en los CD y DVD, no sólo se pueden copiar programas 
sino también fotos, canciones y videos en formato digital que sí generan 
remuneración por copia privada.Como el ordenador puede servir para hacer esas 
reproducciones, las entidades de gestión quieren que alguien les pague una 
compensación, exactamente como ocurre con los aparatos para grabar sonido o las 
máquinas de fotocopia. Pero el ordenador sirve para muchas cosas más, aparte de 
para grabar fotos o música en  su disco duro.En cualquier caso, las obras 
almacenadas en ese dispositivo pueden ser originales del dueño del ordenador y 
entonces, simplemente haría copias de su propia obra y sería más absurda aun, 
la remuneración por copia privada. Recuerda que el derecho de copia privada 
existe incluso cuando jamás pienses dar esa copia a nadie, no tiene que ver con 
la distribución no autorizada con o sin ánimo de lucro.
+</p>
+<p>
+El propietario de un bar, como vimos, tiene que pagar a una entidad de gestión 
de derechos de autor por el hecho de tener una tele en su local, esto es el 
canon de comunicación pública.
+</p>
+<p>
+Hay mucho dinero en juego si finalmente, las entidades de gestión, consiguen 
de alguna forma, aplicar el concepto de comunicación pública a internet.Si se 
considera internet como una obra audiovisual -ya que puedes ver video o 
escuchar música a través de internet-podrán, por ejemplo, empezar a cobrar a 
los ciber-cafes el canon de comunicación pública, ya que entonces la gente 
tiene acceso a la obra intectual en público, quizás decidan que son los 
Proveedores de internet -ISP-quienes tienen que pagar, o los dos. Para que no 
quede nadie sin pagar, también estan considerando la posibilidad de cobrar ese 
canon cuando accedas desde tu casa, entonces no estas en un lugar público, pero 
pretenden que el artículo 20.2.i de la LPI sea aplicable a internet.
+</p>
+<p>
+Ese artículo entiende por comunicación pública, el acceso público a bases de 
datos de ordenador en,cualquier forma, cuando estas incorporen o constituyan 
obras protegidas. Como internet es una enorme base de datos y esta compuesta 
por millones de fotos, documentos, videos, música,animaciones,dibujos...y todo 
eso es propiedad intelectual protegible por ser la creación original de alguna 
persona, entonces al poder leer o escuchar esas obras por medios telemáticos 
sería comunicación pública, sin importar desde donde accedas a esa propiedad 
intelectual. Si las entidades de gestión consiguen que este criterio se 
imponga, habrá un derecho de comunicación pública al acceder a internet, 
incluso desde tu casa y alguien tendrá que pagarlo.
+</p>
+<p>
+En España algunas empresas puntocom pretenden hacer la competencia a las 
discográficas tradicionales, comerciando con los derechos intelectuales de 
músicos y vendiendo las canciones en formato comprimido a través de internet, 
la gran mayoría de ellas, pagan el canon de comunicación pública mediante 
acuerdos con alguna entidad de gestión.Esto no ha hecho mas que comenzar y 
antes o despues, esas entidades exigirán el pago de TODAS las obras 
intelectuales, no sólo la música. Como consumidores podemos intentar pararlo, 
adquiriendo la música directamente a través de la página personal del músico y 
no de una sumisa puntocom. Internet no es sólo comunicación, como lo fue la 
imprenta o el telegrafo, la velocidad de esa comunicación y la interacción 
individual que ofrece es lo realmente revolucionario. Cuando la gente pone en 
internet, fotos de sus vacaciones, la descripción de algún experimento sobre 
química, un poema, un chiste o un cuentecillo, no esta pensando en la 
remuneración de la copia privada o la comunicación pública.Mucho menos en 
afiliarse, de forma obligatoria, a una entidad de gestión para poder cobrar 
esos derechos.
+</p>
+<p>
+En mi opinión, al considerar los derechos de remuneración de copia privada o 
el de comunicación pública como irrenunciables e inalienables, se estan 
vulnerando derechos constitucionales como el derecho a la libertad de emprensa 
y a la libre asociación, sin causa justificada ya que el autor no puede 
negociar por sí mismo y sólo puede cobrar si se afilia a una entidad de 
gestión. En la práctica, eso significa que se le concede un derecho para 
inmediatamente expropiarselo, en favor de una entidad de gestión, que le 
compensará sólo si es afiliado.
+En todo caso, al afectar a derechos fundamentales,según el artículo 81 de la 
Constitución, se podría entender que debe ser regulado por ley orgánica y no en 
una ley ordinaria como la LPI.Esto implicaría la necesidad de mayoría absoluta 
en el Congreso para regular estos derechos.
+</p>
+<p>
+Mientras tanto, Alemania es el único pais de la Unión Europea, que ha 
introducido los recargos al comprar ordenadores desde principios de año, dado 
su peso en la Unión Europea no es descartable que para evitar una distorsión en 
el mercado interior de la Unión, presionen con su particular razonamiento, 
hasta conseguir una armonización en toda Europa mediante una Directiva sobre la 
materia, de esta forma todos los Estados que componen la Unión Europea tendrían 
que incorporar en sus legislaciones nacionales las medidas impuestas en esa 
Directiva. En Francia, la Ministra de Cultura, Catherine Tasca, para justificar 
la medida, declaró en en una entrevista a Le Figaro:" Parece que el nacimiento 
de las nuevas tecnologías ha perjudicado las ganancias de los artistas...no hay 
modelo de negocio para la cultura a menos que los artistas sean pagados.Sin 
ellos no hay ni música ni imagenes de video." Esta mentalidad es incomprensible 
y bastante decepcionante cuando procede de Gobiernos que dicen apoyar el 
sistema operativo GNU/LINUX y los programas  libres.
+</p>
+<p>
+Al contrario que los programas que mencione antes y que son cerrados o 
propietarios porque no se distribuyen con el código fuente,el software libre 
tiene como característica diferenciadora el distribuirse sin ocultar esas 
fuentes y concederte además tres libertades:
+</p>
+<p><ul>
+  <li>Libertad para usar el programa:No hay una licencia que te limite la 
instalación a un número determinado de ordenadores, puedes usarlo en tantos 
ordenadores como quieras.</li>
+  <li>Libertad para modificarlo:Con el código fuente no sólo puedes ver que 
hace el programa o como funciona, también puedes escribir cambios o escribir 
algo nuevo para añadirselo y que el programa haga lo que quieras.</li>
+  <li>Libertad para distribuirlo, modificado o no, con o sin ánimo de lucro. 
Las copias que hagas puedes venderlas o puedes cobrar por instalarlo o hacerlo 
gratis si lo decides. No es como los programas "shareware", en los que pagas 
después de un período de prueba, el programa libre no tiene por qué ser gratis, 
además incluye el codigo fuente que te permite leer el programa.Tampoco es 
exactamente como los programas "freeware" que son de libre distribución y 
gratis, pero no te dan las fuentes, por eso no son free software.</li>
+</ul>
+</p>
+<p>
+La licencia BSD es un ejemplo de licencia libre o "free software", ya que 
cumple las tres premisas anteriores, pero al contrario que la licencia GPL no 
te obliga a incluir las fuentes del programa, como condición a cumplir para 
poder distribuir el programa. El "Open Source" es un grupo que incide en las 
ventajas prácticas del free soft y admite varias licencias como la GPL o la 
BSD, pero también otras como la "Artistic License". Adoptaron el nombre "Open 
Source"porque en inglés "free software" puede significar software libre y 
software gratis y aunque el software libre puede ser vendido, pensaron que era 
un nombre inconveniente y desafortunado para utilizarlo en el mundo de las 
empresas.
+</p>
+<p>
+La Free Software Foundation, prefiere usar "free software" o software libre en 
vez de "Open Source" y se concentra en los aspectos idealistas del copyleft con 
independencia del resultado. Esta fundación, creada por Richard Stallman, 
considera que la BSD es software libre y compatible con la GPL aunque no sea 
"copyleft", sin embargo, otras licencias que se engloban como "Open Source", 
como la licencia "artistic license" no es compatible con la GPL, por este 
motivo no es buena idea utilizar "Open Source" como sinónimo de "Free Software".
+</p>
+<p>
+El objetivo de la Free Software Foundation era el desarrollo de un entorno de 
programación cuyas herramientas fuesen libres, esta es la razón por la que 
habla de GNU/LINUX para referirse a este sistema operativo compuesto por el 
núcleo del sistema LINUX, liberado con la licencia GPL y las herramientas GNU. 
GNU es una broma que significa GNU No es UNIX, también es el nombre inglés de 
un antílope africano,en español, ñú, que es la mascota de la Free Software 
Foundation. El software libre, es un ejemplo de la importancia de compartir el 
conocimiento como medio para poder desarrollar más conocimiento.
+
+Se puede decir que el software libre creó los programas que hacen funcionar 
internet y a la vez, internet permitió a miles de personas comunicarse por todo 
el planeta y crear maás programas libres. Esta filosofía no puede obviarse o 
negarse por los gobiernos europeos, al tomar decisiones que nos afectan, antes 
al contrario, no deberían aprisionar, con una errónea aplicación de las leyes 
vigentes, el espíritu de cooperación que se establece en internet y que ha 
hecho posible que sea lo que es hoy. El modelo hace tambalear el sistema 
tradicional de producir y consumir bienes inmateriales como son los programas 
de ordenador y otras obras objeto de propiedad intelectual, como la música y la 
literatura. Internet, entendido como suma de ordenador y comunicación, implica 
el tratamiento  digital de las obras intelectuales,facilitando su reproducción 
más la comunicación que hace que los costes de distribución hayan casi 
desaparecido, porque no es necesario el transporte físico en el que la obra 
intelectual estaba fijada sino que esa obra se envia de un ordenador a otro, 
pudiendo ser esa comunicación interactiva.
+</p>
+<p>
+Cualquier autor puede escribir un libro o poner una galería virtual con sus 
fotos y conseguir que sea accesible para cualquier persona con ordenador y 
conexión a internet, este situado en su ciudad o en las antípodas, incluso 
podrá conocer directamente y en un tiempo record cual es la opinión que merece 
su obra via correo electrónico o hablar sobre su creación en un canal de IRC.
+</p>
+<p>
+A pesar de todo esto, como vimos, hay quien piensa que en internet puede 
dirigirnos inevitablemente al colapso de la producción de imágenes o video al 
no ser recompensados los artistas. Vivimos una epoca interesante en la que 
asistimos a una guerra a muerte entre intereses contrapuestos y formas de 
concebir la vida bastante diferentes, al final o bien las antiguas leyes que 
nos gobiernan comienzan a regir tambien el mundo de internet, trastocando sus 
objetivos y funcionamiento iniciales o bien este mundo de internet se expande y 
liquida la mentalidad y las formas que actualmente soportamos, dando lugar a 
nuevas leyes e interpretaciones.
+</p>
+<p>
+No nos confundamos, internet es una enorme fuente de riqueza económica , de lo 
que se discute ahora es sobre las reglas del viejo juego de como se crea la 
riqueza y quien se la lleva.No es razonable que un sólo jugador imponga sus 
reglas al resto de jugadores y al público, sobre todo cuando, aunque el 
sostenga lo contrario, no es imprescindible.El viejo sistema de retribución ya 
no es la única forma posible de crear obras intelectuales, ni siquiera bajo el 
argumento de que algunas obras tienen más "calidad" que otras.
+</p>
+<p>
+Se puede hacer video digital y muy pronto habra cines donde no necesiten 
rollos de película sino que podrán recibir la obra "on-line", lo que no hay que 
hacer es encarecer el acceso a esas tecnologías, subiendo los precios de los 
ordenadores o los soportes físicos donde las obras se fijan.Cuanto más baratos 
sean los medios más posibilidades tendrán las personas, incluso en paises no 
desarrollados, de poder crear esas obras intelectuales y de hacerlas accesibles 
para el resto de los habitantes del planeta. Hay algo que no podemos obviar y 
es que al haberse casi eliminado los costes de reproducción, la propiedad 
intelectual es más inmaterial que nunca, esto significa que podemos acceder a 
esa obra sin rivalizar con nadie, no es como un bolígrafo que sólo puede ser 
usado por una sóla persona cada vez.
+</p>
+<p>
+También hay que tener en cuenta que, al contrario que ese bolígrafo la 
propiedad intelectual no se consume, es más, aumenta de valor cuanta más gente 
puede disfrutar de ella.
+</p>
+<p>
+No confundas valor y precio, es un gran error en el mundo del software libre y 
en cualquier otro.
+</p>
+<p>
+Un programa de ordenador que simule el comportamiento de una población de 
Leptinotarsa Decemlineata y su metabolismo, escrito por un científico 
australiano y puesto en internet, puede servir para mucha gente que vive en 
Argentina o en Sudáfrica, podrán leerlo y con su experiencia enriqueceran el 
valor del programa, el coste de aportación para ellos es mínimo en comparación 
con la posibilidad de disfrutar de esa obra intelectual completa de forma 
libre, a medida que pase el tiempo el programa aumentará en contenido, 
precisión y calidad.
+</p>
+<p>
+Ese programa será extremadamente valioso para la industria de la patata que 
será finalmente quien más se beneficie económicamente de ese estudio, 
ahorrandose millones al poder conocer mejor las condiciones que disparan el 
número de esos escarabajos que se alimentan de patatas.
+</p>
+<p>
+Pero los beneficios de ese trabajo no se pueden cuantificar tan fácilmente, 
por eso la información libre tiene un valor incalculable.Entra dentro de lo 
posible que ese programa implemente un algoritmo que acelere las 
investigaciones de un grupo científico en Inglaterra que acabe teniendo una 
aplicación industrial completamente diferente.
+</p>
+<p>
+Los sistemas de compensaciones y canones descritos en la Ley de Propiedad 
Intelectual no ofrecen un sistema ni válido ni asumible para compensar el 
esfuerzo de los autores en internet, pero hay que tener en cuenta que eso no 
tiene por que frenar la creación y que el coste de esa creación, siempre 
difícil de medir, puede ser infinitamente menor mediante la cooperación que con 
el sistema en el que pretenden aprisionarnos, por otro lado la compensación por 
esa labor puede ser obtenida por otros medios al margen de la venta de los 
derechos de la obra intelectual en sí misma y de forma mucho mayor y eficaz que 
la que puedan hacer las entidades de gestión de derechos de autor.
+</p>
+<p>
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+</CENTER>
+</p>
+<p>
+Este artículo ha sido publicado por la revista @rroba ,correspondiente a Marzo 
del 2001
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:04 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/patente.html
===================================================================
RCS file: Licencias/patente.html
diff -N Licencias/patente.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/patente.html      3 Mar 2012 06:14:04 -0000       1.1
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+<p>
+<h1>Contra las patentes de software</h1>
+</p>
+<p>
+ Hoy dia, los programas de ordenador son considerados propiedad intelectual
+ no propiedad industrial y son regulados en la Ley de Propiedad intelectual
+ y no en la de Patentes.
+</p>
+<p>
+ La Ley vigente en España, define al programa de ordenador como:
+</p>
+<p>
+ <blockquote>
+   "Toda secuencia de instrucciones o indicaciones destinadas a ser
+   utilizadas directa o indirectamente, en un sistema informático
+   para realizar una función o tarea o para obtener un resultado
+   determinado, cualquiera que sea su forma de expresión o
+   fijación."
+ </blockquote>
+</p>
+<p>
+ El texto refundido de la Ley de Propiedad Intelectual de Abril de 1996 en el
+ artículo 96.3 indica:
+</p>
+<p>
+ <blockquote>
+   "Cuando los programas de ordenador formen parte de una patente o modelo 
+   de utilidad, gozaran, sin perjuicio de lo dispuesto en la presente ley,
+   de la protección que pudiera corresponderles por
+   aplicación del régimen jurídico de la propiedad
+   industrial."
+ </blockquote>
+</p>
+<p>
+ Sin embargo, la Ley de Patentes de Marzo de 1986, en el artículo 4,
+ establece como excepciones a la patentabilidad, entre otras:
+</p>
+<p>
+ <ul>
+  <li>Los descubrimientos, las teorías científicas y los
+  métodos matemáticos.</li>
+  <li>Los planes, reglas y métodos para el ejercicio de actividades
+  económico-comerciales, así como los programas de
+  ordenadores.</li>
+  <li>Las formas de presentar informaciones.</li>
+ </ul>
+</p>
+<p>
+ Tampoco se consideran invenciones susceptibles de aplicación
+ industrial, los métodos de tratamiento quirúrgico o
+ terapeutico del cuerpo humano o animal, ni los métodos de
+ diagnóstico aplicados a estos.
+</p>
+<p> 
+ La Conferencia por el cambio en el Convenio de Munich que se
+ celebrará del 20 al 29 de Noviembre del 2000 puede significar un
+ cambio histórico.
+</p>
+<p> 
+ La European Patent Office(EPO) intenta que todas esas excepciones sean 
+ patentables para que al menos, después de una negociación,
+ se admita la patentabilidad del software.
+</p>
+<p> 
+ Es cuanto menos curioso, que entre sus principales argumentos, la EPO haya
+ propagado que la excepción de la patentabilidad del software ha
+ quedado obsoleta y que hay que hacer cambios legales para refrendar en
+ derecho, lo que ella ya lleva haciendo de hecho.
+</p>
+<p> 
+ En mi humilde opinión, no hay que aceptar este tipo de imposiciones
+ de un órgano que a duras penas puede soportar su carga de trabajo
+ actual y que no quiere otra cosa que aumentar sus competencias y su
+ presupuesto económico aun a costa de extender su burocracia,
+ encenagar la innovación científica e impedir un mercado
+ competitivo con una inflación controlada.
+</p>
+<p> 
+ Porque, no le quepa duda, las consecuencias de considerar los programas de
+ ordenador como patentes, no tendrá efectos neutrales, antes al
+ contrario.
+</p>
+<p> 
+ Para darnos cuenta de esto,basta echar una mirada rápida a las
+ diferencias de concepto y de protección entre derechos industriales
+ e intelectuales.
+</p>
+<p> 
+ El derecho de autor dura hasta 70 años después de la muerte
+ del creador, las patentes 20 años, ambos plazos son exagerados
+ teniendo en cuenta el ritmo productivo de esta industria que hace que los
+ programas queden obsoletos al poco tiempo.
+</p>
+<p> 
+ El derecho de autor no necesita de inscripción para existir, la
+ propiedad industrial sí, la inscripción es constitutiva del
+ derecho, y el primero que lo haga será a todos los efectos el
+ propietario.
+</p>
+<p> 
+ Esta diferencia conlleva una consecuencia económica, en tasas, a las
+ que no son ajenos los interes de la EPO.
+</p>
+<p> 
+ En cualquier caso, tampoco el Registro de la Propiedad Intelectual me
+ parece óptimo para el caso de programas de ordenador distribuidos con  la 
licencia GPL(General Public License) que promueve la FSF(Free Software
+ Foundation), ya que el código cambia constantemente a través
+ de internet y es obligatoria la publicación del código fuente
+ del programa, de forma que una persona capacitada para ello, pueda leerlo,
+ modificarlo y distribuirlo bajo condición de no restringir ese 
+ derecho a terceros.En el Registro las fuentes no son públicas para la
+ gente; esta pensado para el soft cerrado.
+</p>
+<p> 
+ En el derecho de autor se exige una originalidad mínima, en la
+ patente es necesaria la novedad y la actividad inventiva.
+</p>
+<p> 
+ Se entiende por nuevo lo que no era accesible al público y es relativo
+ respecto al estado de la técnica.
+</p>
+<p> 
+ En cuanto a la necesidad de actividad inventiva la ley la define como
+ "aquella que no resulta del estado de la técnica de una manera
+ evidente para un experto en la materia."
+</p>
+<p> 
+ Espero que sea capaz de comprender las absurdas dificultades que esto
+ conllevaría si lo tratamos de aplicar a los programas de
+ ordenador.
+</p>
+<p> 
+ La invención debe ser descrita tan clara y completamente que un
+ experto en la materia pueda ejecutarla, se debe definir el objeto de la
+ patente y un resumen de la propia invención.
+</p>
+<p> 
+ Me parece difícil que con este sistema nuestros tribunales no se
+ saturen aún más con titulares de posibles patentes que
+ reivindiquen sus derechos frente a otros.
+</p>
+<p> 
+ Las empresas con más recursos serán las que puedan soportar
+ pleitos más largos. Que nadie se extrañe luego de la 
+ consolidación de monopolios con una cuota del 98% de su mercado
+ específico y los posteriores abusos desde esa posición de
+ domínio.
+</p>
+<p> 
+ En la actualidad, no implica explotación ni vulnera el derecho de
+ exclusiva de la patente cuando se utiliza por terceros no autorizados con
+ fines de experimentación o de usos domésticos.
+</p>
+<p> 
+ En el caso de los programas de ordenador, esto no supone una ventaja y
+ además introducirá una gran inseguridad jurídica 
+ respecto a la propiedad del derecho de explotación de la nueva 
+ patente.
+</p>
+<p> 
+ La Ley de Propiedad Intelectual, al tratar los programas de ordenador,
+ permite para el usuario legítimo y con excesivas excepciones, "la
+ reproducción del código y la traducción" cuando sea
+ indispensable para la interoperabilidad de un programa creado de forma
+ independiente con otros programas.
+</p>
+<p> 
+ La Directiva Europea 91/250/CEE del Consejo de 14 de Mayo de 1991, de forma
+ más generosa, admite lo que se ha llamado "reversal engineering"
+ (ingenieria inversa).
+</p>
+<p> 
+ En cualquier caso, se podía argumentar que la Ley de Propiedad
+ Intelectual establece que "no estarán protegidos mediante los
+ derechos de autor con arreglo a la presente ley, las ideas y principios en
+ los que se basan cualquiera de los elementos de un programa de ordenador,
+ incluidos los que sirven de fundamento a sus interfaces", sin embargo, si 
+ estas ideas y principios, a partir de ahora son patentables ¿Cómo 
+ se diferenciará el objeto de la patente de algoritmo o un enunciado 
+ matemático, si es que no autorizan la patente de estos últimos 
+ también?, ¿Qué programa de ordenador se podrá 
+ distribuir comercialmente sin verse sometido a la posible acción
+ de reivindicación por parte de una multinacional?
+</p>
+<p>
+ Internet supone el acceso de una gran cantidad de individuos a una ingente
+ cantidad de informacón, esto hace que se pueda dudar de la vigencia
+ de conceptos como novedad o actividad inventiva en la patente.
+ Los costes de acceso a la información y su procesamiento
+ han caido vertiginosamente, sin parangón, desde la
+ imprenta o el telégrafo.
+</p>
+<p> 
+ No debemos implantar monopolios sobre las ideas ni patentar
+ software.
+</p>
+<p> 
+ Europa necesita, como detallaba el Libro Verde a la innovación de
+ 1995, más inversión en investigación y mayor movilidad
+ de estudiantes e investigadores que propicien el intercambio de ideas no un
+ entorno jurídico complejo y gravoso para todos.
+</p>
+<p> 
+ Lamentablemente, hay algo más contagioso que la falta de sentido
+ común y es la codicia, juntas son casi imbatibles, esperemos que de
+ momento no consigan sus propósitos.
+</p>
+<p>
+ Si cree que las patentes de software pueden ser peligrosas, encontrará útil 
<a href="http://petition.eurolinux.org";>esta direccion</a> donde hay más 
información y podrá enviar su opinión al Parlamento Europeo.
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:04 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/patente.xhtml
===================================================================
RCS file: Licencias/patente.xhtml
diff -N Licencias/patente.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/patente.xhtml     3 Mar 2012 06:14:04 -0000       1.1
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+<p>
+<h1>Contra las patentes de software</h1>
+</p>
+<p>
+ Hoy dia, los programas de ordenador son considerados propiedad intelectual
+ no propiedad industrial y son regulados en la Ley de Propiedad intelectual
+ y no en la de Patentes.
+</p>
+<p>
+ La Ley vigente en España, define al programa de ordenador como:
+</p>
+<p>
+ <blockquote>
+   "Toda secuencia de instrucciones o indicaciones destinadas a ser
+   utilizadas directa o indirectamente, en un sistema informático
+   para realizar una función o tarea o para obtener un resultado
+   determinado, cualquiera que sea su forma de expresión o
+   fijación."
+ </blockquote>
+</p>
+<p>
+ El texto refundido de la Ley de Propiedad Intelectual de Abril de 1996 en el
+ artículo 96.3 indica:
+</p>
+<p>
+ <blockquote>
+   "Cuando los programas de ordenador formen parte de una patente o modelo 
+   de utilidad, gozaran, sin perjuicio de lo dispuesto en la presente ley,
+   de la protección que pudiera corresponderles por
+   aplicación del régimen jurídico de la propiedad
+   industrial."
+ </blockquote>
+</p>
+<p>
+ Sin embargo, la Ley de Patentes de Marzo de 1986, en el artículo 4,
+ establece como excepciones a la patentabilidad, entre otras:
+</p>
+<p>
+ <ul>
+  <li>Los descubrimientos, las teorías científicas y los
+  métodos matemáticos.</li>
+  <li>Los planes, reglas y métodos para el ejercicio de actividades
+  económico-comerciales, así como los programas de
+  ordenadores.</li>
+  <li>Las formas de presentar informaciones.</li>
+ </ul>
+</p>
+<p>
+ Tampoco se consideran invenciones susceptibles de aplicación
+ industrial, los métodos de tratamiento quirúrgico o
+ terapeutico del cuerpo humano o animal, ni los métodos de
+ diagnóstico aplicados a estos.
+</p>
+<p> 
+ La Conferencia por el cambio en el Convenio de Munich que se
+ celebrará del 20 al 29 de Noviembre del 2000 puede significar un
+ cambio histórico.
+</p>
+<p> 
+ La European Patent Office(EPO) intenta que todas esas excepciones sean 
+ patentables para que al menos, después de una negociación,
+ se admita la patentabilidad del software.
+</p>
+<p> 
+ Es cuanto menos curioso, que entre sus principales argumentos, la EPO haya
+ propagado que la excepción de la patentabilidad del software ha
+ quedado obsoleta y que hay que hacer cambios legales para refrendar en
+ derecho, lo que ella ya lleva haciendo de hecho.
+</p>
+<p> 
+ En mi humilde opinión, no hay que aceptar este tipo de imposiciones
+ de un órgano que a duras penas puede soportar su carga de trabajo
+ actual y que no quiere otra cosa que aumentar sus competencias y su
+ presupuesto económico aun a costa de extender su burocracia,
+ encenagar la innovación científica e impedir un mercado
+ competitivo con una inflación controlada.
+</p>
+<p> 
+ Porque, no le quepa duda, las consecuencias de considerar los programas de
+ ordenador como patentes, no tendrá efectos neutrales, antes al
+ contrario.
+</p>
+<p> 
+ Para darnos cuenta de esto,basta echar una mirada rápida a las
+ diferencias de concepto y de protección entre derechos industriales
+ e intelectuales.
+</p>
+<p> 
+ El derecho de autor dura hasta 70 años después de la muerte
+ del creador, las patentes 20 años, ambos plazos son exagerados
+ teniendo en cuenta el ritmo productivo de esta industria que hace que los
+ programas queden obsoletos al poco tiempo.
+</p>
+<p> 
+ El derecho de autor no necesita de inscripción para existir, la
+ propiedad industrial sí, la inscripción es constitutiva del
+ derecho, y el primero que lo haga será a todos los efectos el
+ propietario.
+</p>
+<p> 
+ Esta diferencia conlleva una consecuencia económica, en tasas, a las
+ que no son ajenos los interes de la EPO.
+</p>
+<p> 
+ En cualquier caso, tampoco el Registro de la Propiedad Intelectual me
+ parece óptimo para el caso de programas de ordenador distribuidos con  la 
licencia GPL(General Public License) que promueve la FSF(Free Software
+ Foundation), ya que el código cambia constantemente a través
+ de internet y es obligatoria la publicación del código fuente
+ del programa, de forma que una persona capacitada para ello, pueda leerlo,
+ modificarlo y distribuirlo bajo condición de no restringir ese 
+ derecho a terceros.En el Registro las fuentes no son públicas para la
+ gente; esta pensado para el soft cerrado.
+</p>
+<p> 
+ En el derecho de autor se exige una originalidad mínima, en la
+ patente es necesaria la novedad y la actividad inventiva.
+</p>
+<p> 
+ Se entiende por nuevo lo que no era accesible al público y es relativo
+ respecto al estado de la técnica.
+</p>
+<p> 
+ En cuanto a la necesidad de actividad inventiva la ley la define como
+ "aquella que no resulta del estado de la técnica de una manera
+ evidente para un experto en la materia."
+</p>
+<p> 
+ Espero que sea capaz de comprender las absurdas dificultades que esto
+ conllevaría si lo tratamos de aplicar a los programas de
+ ordenador.
+</p>
+<p> 
+ La invención debe ser descrita tan clara y completamente que un
+ experto en la materia pueda ejecutarla, se debe definir el objeto de la
+ patente y un resumen de la propia invención.
+</p>
+<p> 
+ Me parece difícil que con este sistema nuestros tribunales no se
+ saturen aún más con titulares de posibles patentes que
+ reivindiquen sus derechos frente a otros.
+</p>
+<p> 
+ Las empresas con más recursos serán las que puedan soportar
+ pleitos más largos. Que nadie se extrañe luego de la 
+ consolidación de monopolios con una cuota del 98% de su mercado
+ específico y los posteriores abusos desde esa posición de
+ domínio.
+</p>
+<p> 
+ En la actualidad, no implica explotación ni vulnera el derecho de
+ exclusiva de la patente cuando se utiliza por terceros no autorizados con
+ fines de experimentación o de usos domésticos.
+</p>
+<p> 
+ En el caso de los programas de ordenador, esto no supone una ventaja y
+ además introducirá una gran inseguridad jurídica 
+ respecto a la propiedad del derecho de explotación de la nueva 
+ patente.
+</p>
+<p> 
+ La Ley de Propiedad Intelectual, al tratar los programas de ordenador,
+ permite para el usuario legítimo y con excesivas excepciones, "la
+ reproducción del código y la traducción" cuando sea
+ indispensable para la interoperabilidad de un programa creado de forma
+ independiente con otros programas.
+</p>
+<p> 
+ La Directiva Europea 91/250/CEE del Consejo de 14 de Mayo de 1991, de forma
+ más generosa, admite lo que se ha llamado "reversal engineering"
+ (ingenieria inversa).
+</p>
+<p> 
+ En cualquier caso, se podía argumentar que la Ley de Propiedad
+ Intelectual establece que "no estarán protegidos mediante los
+ derechos de autor con arreglo a la presente ley, las ideas y principios en
+ los que se basan cualquiera de los elementos de un programa de ordenador,
+ incluidos los que sirven de fundamento a sus interfaces", sin embargo, si 
+ estas ideas y principios, a partir de ahora son patentables ¿Cómo 
+ se diferenciará el objeto de la patente de algoritmo o un enunciado 
+ matemático, si es que no autorizan la patente de estos últimos 
+ también?, ¿Qué programa de ordenador se podrá 
+ distribuir comercialmente sin verse sometido a la posible acción
+ de reivindicación por parte de una multinacional?
+</p>
+<p>
+ Internet supone el acceso de una gran cantidad de individuos a una ingente
+ cantidad de informacón, esto hace que se pueda dudar de la vigencia
+ de conceptos como novedad o actividad inventiva en la patente.
+ Los costes de acceso a la información y su procesamiento
+ han caido vertiginosamente, sin parangón, desde la
+ imprenta o el telégrafo.
+</p>
+<p> 
+ No debemos implantar monopolios sobre las ideas ni patentar
+ software.
+</p>
+<p> 
+ Europa necesita, como detallaba el Libro Verde a la innovación de
+ 1995, más inversión en investigación y mayor movilidad
+ de estudiantes e investigadores que propicien el intercambio de ideas no un
+ entorno jurídico complejo y gravoso para todos.
+</p>
+<p> 
+ Lamentablemente, hay algo más contagioso que la falta de sentido
+ común y es la codicia, juntas son casi imbatibles, esperemos que de
+ momento no consigan sus propósitos.
+</p>
+<p>
+ Si cree que las patentes de software pueden ser peligrosas, encontrará útil 
<a href="http://petition.eurolinux.org";>esta direccion</a> donde hay más 
información y podrá enviar su opinión al Parlamento Europeo.
+</p>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:04 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/poster.html
===================================================================
RCS file: Licencias/poster.html
diff -N Licencias/poster.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/poster.html       3 Mar 2012 06:14:04 -0000       1.1
@@ -0,0 +1,31 @@
+<html>
+<body>
+<h1>Poster sobre software libre</h1><br>
+Tomando como ejemplo un caso típico de soft propietario, se
+subrayan aquellos parrafos que constituyen sus 
+características esenciales, al margen, 
+en color verde la diferencia con el soft libre.<br>
+Además tiene ilustraciones de ñues,diablillos y pinguinos ;^)<br>
+Podeis imprimirlo en 4 hojas dina4, en la impresora de color de casa:<br>
+<h2>Versión Laura Grisolía.</h2><br>
+<a href="/Licencias/pag1a.pdf">pagina 1</a><br>
+<a href="/Licencias/pag2a.pdf">pagina 2</a><br>
+<a href="/Licencias/pag3a.pdf">pagina 3</a><br>
+<a href="/Licencias/pag4a.pdf">pagina 4</a><br>
+Aquí en una sóla página para imprimirlo en dina3 o dina2:<br>
+<a href="/Licencias/maquet~1.pdf">cartel</a><br>
+
+
+<h2>Versión Grupo Ajenjo y Cigarro.</h2><br>
+<a href="/Licencias/pag1b.pdf">pagina 1</a><br>
+<a href="/Licencias/pag2b.pdf">pagina 2</a><br>
+<a href="/Licencias/pag3b.pdf">pagina 3</a><br>
+<a href="/Licencias/pag4b.pdf">pagina 4</a><p>
+Fichero listo para imprimir en dina3 o dina2:<br>
+<a href="/Licencias/maquet~2.pdf">cartel</a><p>
+
+</body>
+</html>
+
+
+

Index: Licencias/softlibr.html
===================================================================
RCS file: Licencias/softlibr.html
diff -N Licencias/softlibr.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/softlibr.html     3 Mar 2012 06:14:05 -0000       1.1
@@ -0,0 +1,249 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>El Software Libre visto como obra colectiva - Coordinación de Licencias 
- GNU España</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Españ, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU España</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un ñU] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[ <A HREF="/Licencias">Licencias</A> | <A HREF="/Licencias/gples.html">GPL</A> 
| <A HREF="/Licencias/fdles.html">GFDL</A> | <A 
HREF="/Licencias/solicitudes.html">Consulte</A> ]
+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>El "software libre" visto como obra colectiva</H2><p>
+Este breve texto tiene como objetivo explicar lo que la Ley de Propiedad 
+Intelectual y la Jurisprudencia, entiende por obra colectiva y la similitud 
+entre esta y el software libre.<br>
+La idea del software libre suele aceptarse como natural en ámbitos 
+científicos donde el compartir conocimientos es a veces obligado para 
+el progreso de la investigación.<br>
+El traslado de esa idea a un ámbito comercial de usuarios o consumidores 
+finales se fundamenta en concepciones idealistas -entender el acceso al 
+código fuente del programa, como libertad inalienable de cualquier 
+persona a adquirir y difundir conocimientos- o en fundamentos practicos -el 
+código fuente te da la libertad para eliminar ataduras a monopolios de 
+empresas que producen software cerrado o propietario.<br>
+Es probable que esos consumidores finales no puedan ejercer esa libertad en 
+tanto en cuanto no tengan los conocimientos necesarios para modificar el 
+código fuente por sí mismos, pero parece indudable que el 
+ejercerlo gracias a terceros no lo menoscaba y que es difícil que se 
+produzca una situación de monopolio comparable a la que provoca el 
+soft cerrado.<br>
+Esa mudanza de los principios del soft libre, dicho en forma gráfica, 
+del laboratorio a la tienda, puede parecer revolucionaria o utópica, 
+sin embargo, cada vez hay mas ejemplos que hacen esfumarse las dudas y por 
+otro lado, la idea de grupos de individuos trabajando en común y 
+obteniendo un resultado, no es algo tan disparatado como para que esta 
+realidad no haya sido tenida en cuenta por el legislador.<br>
+Esta realidad se conoce como obra colectiva en el artículo 8 de la Ley, 
+respecto a la propiedad intelectual en general y por el 97.2 específicamente 
+para los programas de ordenador.<br>
+Existe jurisprudencia sobre la obra colectiva que voy a utilizar para que 
+esto no resulte más aburrido de lo necesario.<p>
+
+Sentencia de 26-9-1996.<br>
+Audiencia Provincial de Barcelona,Sección 15(Civil).<br>
+Talleres de Imprenta SA, editora de La Vanguardia frente a CI Laborales SL, 
+editora de Setmanal d'Oportunitats Laborals.<br>
+El semanario SOL se dedica a publicar anuncios de empleo ya publicados en 
+otros medios.<br>
+La editora de La Vanguardia les demandó por considerar que eso 
+vulneraba su propiedad intelectual.<br>
+En esta sentencia se pone como ejemplo de obra colectiva al diario La 
+Vanguardia ya que es una creación única y autónoma en 
+la que se funden las aportaciones de diferentes autores sin que sea posible 
+atribuir separadamente a cualquiera de estos un derecho sobre el conjunto.<br>
+La obra colectiva es un "aliquid novum" respecto de cada contribución 
+que en ella se funden para crear una entidad,esto implica que el derecho 
+sobre la obra colectiva es distinto y compatible con los derechos que cada 
+colaborador tiene sobre su propia obra.Por lo mismo, el titular del todo 
+puede defender una parte que sea la aportación individual de un 
+contribuyente singular.La concurrencia es compatible y no excluyente.<br>
+Evidentemente, la obra colectiva como producto, esta integrada por todas las 
+aportaciones y su titular puede defenderla sin distinción de partes. 
+La titular de los derechos de propiedad intelectual de la obra colectiva es la 
+persona que la edita y divulga bajo su nombre.<br>
+Respecto al caso concreto, la Audiencia consideró que los anuncios por 
+palabras no tienen la originalidad suficiente como para ser protegibles por 
+copyright.<p>
+<STRONG>OBRA COLECTIVA Y OBRA EN COLABORACIÓN</STRONG><p>
+Sentencia de 17-12-1998.<br>
+Audiencia Provincial de Asturias,Sección 5(Civil).<br>
+Andres B.C. y Angel Luis F.V. frente a Federación Asturiana de 
+Comercio,Unión de Comerciantes de Oviedo e Imprenta Narcea SL.<br>
+Andrés y Angel realizaron una recopilación y resumen de 
+informes económicos y jurídicos relativos al ejercicio del 
+comercio.La Audiencia no consideró que esto fuese una obra colectiva 
+aunque un profesor universitario reviso en parte la obra final a petición 
+de los autores.<br>
+Este trabajo fue calificado como obra unitaria realizada en colaboración 
+entre dos coautores.<br>
+Finalmente, al no ser considerada obra colectiva, no es autor el que la edita 
+y divulga, por lo que era necesario pedir permiso a Andrés y Angel para 
+hacer una segunda impresión de la Guia de Orientación para el 
+Comercio.<br>
+La diferencia entre obra colectiva y obra en colaboración es que en 
+esta última, no hay creación única y autónoma 
+esto quiere decir que todos los coautores de la obra en colaboración 
+tienen que dar su consentimiento para la modificación y distribución 
+de su trabajo, ya que el resultado final no es algo distinto de la suma de 
+todas las partes.<br>
+Si consideramos que un programa es algo distinto de la suma de sus partes 
+entonces el software libre es una obra colectiva en la que el coordinador 
+atribuye a cada autor de una porción, el derecho sobre la obra final 
+si la editan o divulgan segun unas condiciones.<br>
+Para los que crean que el programa no es una entidad distinta de la suma de 
+las partes, entonces, el soft libre sería una obra en colaboración 
+en la que el autor de cada parte admite un derecho a modificar y divulgar a 
+los demás autores, no de forma proporcional sino global sobre toda la 
+obra.<p>
+<STRONG> OBRA COLECTIVA Y OBRA INDIVIDUAL</STRONG><p>
+Sentencia de 24-7-1995.<br>
+Audiencia Provincial de Valencia,(Civil).<br>
+Jose Vicente C.P. frente a la Universidad de Valencia.<br>
+Jose Vicente pide ser considerado autor del Proyecto IACU y reclama una 
+compensación.<br>
+La Audiencia considera que no estamos ante una obra en colaboración 
+ya que para eso, es necesario una perfecta identificación entre la 
+aportación individual de cada participe.En este caso se trata de una 
+obra colectiva porque hay una persona que tiene la iniciativa y coordinación 
+de la investigación y las aportaciones se funden en una sola creación 
+única y autónoma.<br>
+La Audiencia admite que Jose Vicente participó además 
+recopilando datos en la investigación -trabajo de campo- para suprimir 
+las barreras arquitectónicas para minusvalidos en la Universidad de 
+Valencia pero no editó bajo su nombre la obra por lo que no puede 
+ostentar sobre la misma derechos de autor.<br>
+Finalmente se condenó a la Universidad de Valencia a pagar a Jose 
+Vicente no una indemnización por violación de los derechos de 
+autor pero sí una compensación por el trabajo realizado.<br>
+Esta sentencia recoge lo dicho en la Ley respecto a que para ser reconocido 
+autor de la obra colectiva basta editarla y publicarla, tambien advierte 
+respecto a las lagunas de la Ley en la regulación de las obras 
+colectivas y de como en caso de duda hay que tener presente los principios 
+generales como el de la buena fe y de "pacta sunt servanda".Es decir, que es 
+admisible incluir condiciones para ser considerado autor de la obra colectiva 
ademas de la mera 
+edición o divulgación; Eso es precisamente lo que hacen las 
+licencias de programas libres, como dije antes.<p>
+<STRONG>PROBLEMAS QUE PUEDEN SURGIR</STRONG><p>
+Sentencia de 4-6-1999.<br>
+Audiencia Provincial de Toledo,Sección 1(PENAL)<br>
+N.T. y E.G. frente a Inés R.M, Isabel F.S y Francisco Javier P.C.<br>
+En esta sentencia se reconoce al Director General de Cultura de la 
+Comunicación de Castilla-La Mancha como coordinador de una obra 
+colectiva que agruparía diversos trabajos sobre el Románico en 
+Guadalajara.<br>
+Se encargó la preparación de un catalago a los arquitectos N.T. 
+y E.G consistente en la elaboración y entrega de un catálogo 
+de los 31 edificios románicos de Guadalajara con sus planos y 
+documentación gráfica.<br>
+Posteriormente el coordinador de la obra colectiva encarga a Inés R.M, 
+experta en arte Románico y profesora titular de la Universidad 
+Complutense de Madrid que redacte un texto sobre el Románico en 
+Guadalajara.<br>
+N.T. y E.G. no llegaron a formalizar ningun contrato de edición con la 
+Comunidad de Castilla-La Mancha debido a un fracaso en las negociaciones e 
+inscribieron en el Registro de la Propiedad Intelectual de Madrid la obra 
+titulada "El Románico en Guadalajara".Posteriormente la Comunidad de 
+Castilla-La Mancha inscribió en ese Registro, "La Herencia 
+Románica en Guadalajara",realizado por Isabel María F.S, 
+Francisco Javier P.C e Inés R.M.con los planos elaborados por N.T y 
+E.G que eran propiedad de la Comunidad de Castilla-La Mancha.La Audiencia 
+Provincial no estimó que hubiese un delito de plagio como sostenían 
+N.T y E.G.<br>
+Como se lee en la propia sentencia, no es fácil diferenciar, salvo 
+casos evidentes, entre el plagio de una obra ajena y la utilización 
+de esta como fuente de consulta, lo que sería admisible y lícito 
+en obras como esta.<br>
+En el caso de los programas de ordenador sería complicado probar la 
+existencia de un plagio a no ser que se hubiese producido la transcripción 
+literal del código fuente.<br>
+Aparte de este comentario, he querido incluir esta sentencia como ejemplo de 
+los problemas que pueden generarse en un proyecto tipo libre, debido a la 
+falta de comunicación entre los participantes o a la escasa información 
+que hayan recibido los participantes al incorporarse al proyecto.<br>
+
+<CENTER>
+<STRONG>Pablo -dewaz- Usano
+<br>&nbsp;<a href="mailto:address@hidden";>address@hidden</a></STRONG><br>&nbsp;
+</CENTER>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[ <A HREF="/Licencias">Licencias</A> | <A HREF="/Licencias/gples.html">GPL</A> 
| <A HREF="/Licencias/fdles.html">GFDL</A> | <A 
HREF="/Licencias/solicitudes.html">Consulte</A> ]
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (España)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+Última actualización:
+<!-- hhmts start-->
+21 Enero 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Licencias/solicitudes.html
===================================================================
RCS file: Licencias/solicitudes.html
diff -N Licencias/solicitudes.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/solicitudes.html  3 Mar 2012 06:14:05 -0000       1.1
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+                             
+    <div> <!-- El encabezado entrará aquí -->
+                                 
+<!-- Comienzo del contenido de la página -->
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>¿Desea usted consultar?</H2>
+    <FORM method="post" action="/cgi-bin/formmailes.cgi">
+    <input type="hidden" name="recipient" value="address@hidden" />
+    <input type="hidden" name="redirect" value="/Licencias/index.html" />
+    Nombre: <INPUT NAME="Nombre" TYPE="TEXT" />
+    Nick: <INPUT NAME="Nick" TYPE="TEXT" />
+   <br />
+    e-mail: <INPUT NAME="email" TYPE="TEXT" value="-Obligatorio-" />
+    Sin e-mail no podremos responder sus dudas.<br />
+
+   Consultas, sugerencias y voluntariado para la Coordinación
+       de Licencias<br />
+   <TEXTAREA NAME="TEXTO" COLS="60" ROWS="10">
+   </TEXTAREA>
+   <INPUT TYPE="submit" VALUE="Enviar" />
+   <INPUT TYPE="reset" VALUE="Limpiar formulario" />
+   </FORM>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:05 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/solicitudes.xhtml
===================================================================
RCS file: Licencias/solicitudes.xhtml
diff -N Licencias/solicitudes.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/solicitudes.xhtml 3 Mar 2012 06:14:05 -0000       1.1
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Licencias libres</title>
+  </head>
+  <body>
+                             
+    <div> <!-- El encabezado entrará aquí -->
+                                 
+<!-- Comienzo del contenido de la página -->
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>¿Desea usted consultar?</H2>
+    <FORM method="post" action="/cgi-bin/formmailes.cgi">
+    <input type="hidden" name="recipient" value="address@hidden" />
+    <input type="hidden" name="redirect" value="/Licencias/index.html" />
+    Nombre: <INPUT NAME="Nombre" TYPE="TEXT" />
+    Nick: <INPUT NAME="Nick" TYPE="TEXT" />
+   <br />
+    e-mail: <INPUT NAME="email" TYPE="TEXT" value="-Obligatorio-" />
+    Sin e-mail no podremos responder sus dudas.<br />
+
+   Consultas, sugerencias y voluntariado para la Coordinación
+       de Licencias<br />
+   <TEXTAREA NAME="TEXTO" COLS="60" ROWS="10">
+   </TEXTAREA>
+   <INPUT TYPE="submit" VALUE="Enviar" />
+   <INPUT TYPE="reset" VALUE="Limpiar formulario" />
+   </FORM>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:14:05 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: Licencias/viol.html
===================================================================
RCS file: Licencias/viol.html
diff -N Licencias/viol.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Licencias/viol.html 3 Mar 2012 06:14:05 -0000       1.1
@@ -0,0 +1,361 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">

+<HTML>

+<HEAD>

+<TITLE>Violación de la licencia GPL- Coordinación de Licencias - GNU 
España</TITLE>

+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Españ, filial, GNU, FSF,

+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,

+Sistemas Operativos, Kernel, HURD">

+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema

+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras

+tengan la libertadde compartir y mejorar el software que usen.">

+<LINK REV="made" HREF="mailto:address@hidden";>

+</HEAD>

+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">

+

+<CENTER><H1>GNU España</H1></CENTER>

+

+<CENTER>

+<IMG SRC="/Images/gnu-head.jpg"

+   ALT="[imagen de la cabeza de un ñU] " BORDER=0

+   WIDTH="129" HEIGHT="122">

+

+[

+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->

+  <A HREF="/">Principal</a>

+| <A HREF="http://www.gnu.org";>FSF/GNU</A>

+| <A HREF="/Proyectos">Proyectos Sofware</A>

+| <A HREF="/Eventos">Eventos</A>

+| <A HREF="/Traducciones">Traducciones</A>

+| <A HREF="/Licencias">Licencias</A>

+| <A HREF="/buscar.html">Buscar</A>

+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->

+]

+<HR>

+

+[
 <A HREF="/Licencias">Licencias</A>
 | <A HREF="/Licencias/gples.html">GPL</A>
 | <A HREF="/Licencias/fdles.html">GFDL</A>
 | <A HREF="/Licencias/solicitudes.html">Consulte</A>
 ]


+

+</CENTER>

+

+<!-- Keep the tables short and be sure that they degrade properly -->

+<!-- when using text-only browsers! -->

+

+<!-- ************************************************************ -->

+<!-- begining of the main content -->

+

+<P>

+<CENTER>

+<TABLE WIDTH="80%">

+  <TR>

+    <TD>

+       <H2>VIOLACIÓN DE LA LICENCIA GPL</H2>
+Conforme el uso de la licencia GPL en particular y del software libre en 
general va extendiendose, las 
+posibilidades de transgresión de su espíritu y funcionamiento aumentan.Para 
evitarlo y procurar que el incremento de la base de desarrolladores y usuarios 
no perjudique la filosofía inicial,conviene redoblar el esfuerzo en explicar 
las ideas de generosidad y libertad que empujan el software libre y qué hacer 
en caso de que consideremos que se ha producido una violación de la licencia 
GPL.
+<p>
+Hubo un tiempo en que el software se distribuía sin esconder el código fuente, 
al ser el código fuente público y entregarse con los binarios, las personas no 
sólo podían usar el programa, también podían comprender como funcionaba y si lo 
consideraban conveniente, tenían la libertad de modificarlo y enviarlo a 
cualquier otra persona que estuviese interesada.En aquella epoca no estaba 
prohibido hacer copias de los programas para darselos a quien te diera la gana 
y evidentemente, se podían instalar en cuantos ordenadores hubiese disponibles, 
si esto era necesario.
+
+Toda esa libertad se evaporó cuando el software empezó a comercializarse 
basandose en el secreto y en el recorte de los derechos, que antes disfrutaban 
los usuarios. 
+
+El software se consideró como los libros o las fotografías y se "protegió" 
bajo el paraguas de las reglas del copyright.Esa "protección", en realidad no 
fue tal y además fue extremadamente perjudicial para los usuarios.La industria 
del software, nacida al amparo de esta interpretación, fue creando reglas para 
reforzar su posición frente al resto de sectores económicos y sociales.
+
+Últimamente, muchas empresas que comercializan soft, van más allá y proponen 
que los programas de ordenador se regulen mediante patentes, esto hundiría más 
nuestra libertad y además haría que las licencias de software se encareciesen. 
+
+En realidad, el software nunca fue regulado como un derecho de autor normal, 
ya que se le concedieron 
+algunas características especiales, teniendo en cuenta la naturaleza de los 
programas de ordenador y el propósito que la industria del software ambicionaba 
conseguir.
+
+Cuando adquiere un programa de ordenador normal, este suele licenciarse, de 
forma que no compra el 
+programa en sí o la propiedad del programa, sólo puede usarlo y además no 
puede instalarlo en otros ordenadores de su propiedad, mucho menos venderlo o 
regalarlo a un amigo.
+
+Para intentar restablecer la situación anterior y aquella mentalidad inicial, 
opuesta a las restricciones, Richard Stallman creó, a mediados de los 80, la 
Free Software Foundation o Fundación del Software libre.El propósito era dar 
cobertura legal al proyecto GNU, creando programas  que concediesen al usuario 
los siguientes derechos:
+-derecho a usar el programa.
+-derecho a modificar el programa.
+-derecho a distribuir el programa, tal cual o modificado, con o sin ánimo de 
lucro.
+El software que garantizase estas libertades, sería llamado "free software" o 
software libre.
+La licencia GPL es una licencia de software libre, con una característica que 
la hace diferente de otras licencias libres: El  "copyleft".
+Copyleft es un juego de palabras; si el copyright era el derecho de copia 
,copyleft es lo contrario del 
+derecho de copia.
+Con el copyleft, un programa siempre será soft libre ya que pone como 
condición que el distribuidor del soft, ponga a disposición del consumidor las 
fuentes y nunca pueda restringir este derecho a terceros.
+De no ser así, se podría crear soft cerrado o propietario a partir del 
software libre, esto puede ocurrir con algunas licencias libres, como la BSD, 
pero no con la licencia GPL.Con las otras licencias libres que no son GPL, los 
desarrolladores, podrán continuar con su código libre, pero no es seguro que se 
beneficien del acceso al código, que otros han transformado en propietario.
+<h4>MEDIDAS DE LA FREE SOFTWARE FOUNDATION</h4>
+La Free Software Foundation tiene una serie de recomendaciones que debe 
aplicar cuando crea que esta 
+ante un programa basado en código GPL, que sin embargo, incumple alguna 
condición de esta 
+licencia.
+Debe preguntarse sobre estos detalles:
+-&#191;Contiene el software distribuido una copia de la licencia GPL?
+-&#191;Declara que el programa esta cubierto por la licencia GPL?
+-&#191;Dice algo que conduzca a error, quizá dando la impresión de que algo 
esta cubierto por la 
+licencia GPL cuando no es cierto?
+-&#191;Esta el código fuente includo en la distribución?
+-&#191;Hay una oferta por escrito para el código fuente incluida en la 
distribución  o sólo los 
+binarios?
+-&#191;Esta disponible el código fuente completo o esta diseñado para unirlo 
en otros módulos no 
+libres?
+Una vez que parece existir una violación real,lo siguiente que debe hacer es 
anotar esta información:
+-El nombre preciso del producto.
+-El nombre de la persona u organización que lo distribuye.
+-Correos electrónicos o postales o teléfonos para contactar con el 
distribuidor.
+-El nombre exacto del paquete o programa.
+-Cómo ha sido vulnerada la licencia GPL:
+a)&#191;El propietario de los derechos de autor ha incluido una nota de 
copyright?
+b)&#191;Esta el código fuente?
+c)&#191;Se ofrece el código fuente sólo a través de un website o FTP para que 
lo descargues?
+d)&#191;Hay una copia de la licencia incluida en la distribución?
+e)&#191;Esta el código fuente disponible, pero no todo?Si es así, &#191;Qué 
partes faltan?
+Cuantos más detalles incluya, más fácil será para el propietario de los 
derechos del programa, hacer un 
+seguimiento del asunto.
+Una vez que tenga todos los detalles envíelos al propietario de los derechos 
de autor, es el que esta 
+legalmente autorizado para hacer que la licencia se respete.
+Si el propietario de los derechos de autor es la Free Software Foundation 
puede enviar (en ingles) la 
+denuncia a: license-violation&#64;gnu.org.
+Tambien puede dirigir sus dudas(en ingles) sobre la FSF o GNU a: 
gnu&#64;gnu.org .
+Como dice la  FSF en USA, es el propietario del copyright el que debe hacer 
respetar el cumplimiento de 
+la licencia GPL.Algo similar ocurre en España, donde el artículo 133 y 
siguientes de la Ley de Propiedad 
+Intelectual concede al titular del copyright, el derecho a instar el cese de 
la actividad ilícita del infractor, 
+exigir la indemnización de los daños materiales y morales y la puesta en 
marcha de las medidas 
+cautelares urgentes, con el fin de proteger sus derechos de forma inmediata.No 
obstante, conviene 
+reconocer, las diferencias que existen entre la licencia GPL y una licencia 
normal de distribución de 
+programas de ordenador,sobre todo a la hora de elaborar el software de  forma 
cooperativa, entre un 
+número abierto de programadores, en cómo se presta el consentimiento para 
obligarse por la licencia 
+GPL  o como se ceden los derechos de autor sobre los programas.Todo esto hace 
que la forma en 
+que se permita la defensa, frente a  una vulneración de la licencia GPL, tenga 
que ser lo más flexible 
+posible, atendiendo al bien jurídico protegido, que en el caso de la GPL, es 
algo más que los derechos 
+patrimoniales o morales de un programador, ya que incluye también derechos más 
amplios, como el  
+derecho de acceso a la información por parte de un colectivo de consumidores, 
como son los usuarios de 
+los programas libres.
+Además hay otro elemento a considerar y es el concepto previo de propiedad del 
programa libre.
+En el software cerrado esta propiedad recae en el programador o en la empresa 
que le contrata para 
+desarrollar el programa, luego, como vimos, el propietario generalmente sólo 
cede el derecho a usar el 
+programa.El software libre parte de presupuestos distintos, el usuario final 
puede convertirse en 
+fabricante del producto. Los derechos de copyright sobre esta realidad 
inmaterial se desdibujan y pueden 
+ser ejercidos por cualquier consumidor del producto, siempre que no restrinja 
estos derechos a terceros.
+Se trata de un proceso creativo tan abierto, que no tiene sentido hablar de 
propietario de derechos de 
+autor, con el mismo significado que el atribuido al software cerrado o 
propietario.
+Por último, hay que recordar que la  Ley de Enjuiciamiento Civil vigente en 
España, concede 
+legitimación para ser parte en un proceso, a personas jurídicas y entidades 
con el fin de defender intereses 
+sociales de diversa amplitud y por otro lado, aunque sea persona física, las 
sentencias judiciales no 
+siempre se limitan a las personas que son parte en un proceso, así que, si un 
tercero se halla en una 
+posición jurídica que pueda sufrir los efectos de una sentencia dictada entre 
otros, hay que concederle 
+alguna oportunidad de influir en el juicio, en el sentido que vaya a tener esa 
sentencia. 
+Algunas situaciones de conflicto de la licencia GPL merecen cierto 
detenimiento.
+<h4>DISTRIBUCIÓN </h4>
+El hecho de modificar o distribuir un programa GPL es un acto clave ya que de 
acuerdo con la clausula 5 
+de la licencia es cuando manifiesta su voluntad de aceptarla.
+Hay que distribuir junto al programa ejecutable, el código fuente, también se 
puede optar por hacer una 
+oferta de envio del código fuente a precio de coste.Puede distribuir el 
ejecutable a través de internet y 
+utilizar ese mismo sistema para el código fuente.Existe otra posibilidad de 
hacerlo, cuando se trata de una 
+distribución no comercial, y es incluir con el ejecutable la información y la 
oferta del anterior 
+distribuidor.Sin embargo no suele ser la forma de distribución del programa 
sino el concepto de 
+distribución mismo lo que puede generar más conflictos.Como dice la propia 
licencia GPL , cualquier 
+actividad que no sea la copia, distribución o la modificación del programa, 
estan fuera del ámbito de 
+aplicación de la licencia.
+El hecho de ejecutar el programa o el resultado que esto produzca, sólo se 
sujeta a la licencia si se 
+produce un trabajo basado en el programa.
+Imaginemos una empresa que utiliza un programa GPL y lo modifica.Según la 
licencia no es al usarlo 
+sino al modificarlo y distribuirlo cuando aceptamos la GPL.Muchas empresas 
consideran beneficioso 
+utilizar programas con fuentes públicas por diversos motivos, entre ellos el 
económico, pero también 
+debido a la posibilidad de poder adaptar el programa a sus necesidades, al 
incluirse el código fuente.El 
+conflicto surge cuando, posteriormente, esas empresas consideran que el soft 
desarrollado por ellos, 
+constituye una ventaja competitiva, si es guardado en secreto y no lo 
devuelven a la Comunidad.Pueden 
+hacer esto simplemente usando el programa y siempre que no distribuyan dicho  
programa derivado.Pero 
+&#191;Que ocurre cuando el objeto de esos programas, es ser usados por medios 
telemáticos, por  
+clientes de esa empresa?&#191;Tendrían derecho esos consumidores, a obtener el 
código fuente y saber 
+cómo funciona lo que estan usando?
+Pensemos en un cliente de IRC o en programas que no estan en nuestro 
ordenador, sino en el de la 
+compañia que hemos contratado.Sería muy beneficioso para nuestra intimidad y 
seguridad, si  conocemos 
+el código fuente de esos programas que interactuan con los nuestros.Pero, 
&#191;Tenemos derecho a 
+exigir tal cosa?
+Hay varias formas de enfocar este asunto, una sería tratar de deducir una 
definición de distribución en la 
+GPL o bien buscando esa definición en la Ley de Propiedad 
Intelectual(LPI).Ninguna de las dos 
+soluciones es sencilla y el resultado es muy refutable.
+En el primer caso, podemos suponer que el resultado de ejecutar ese programa 
GPL en un servidor, 
+produce un resultado  que es soft derivado de ese programa y que nos envian a 
nuestro ordenador, 
+estamos ante distribución de un programa GPL, pero entonces, &#191;Deberían 
enviarnos el código 
+fuente del programa derivado o el del programa original que lo produjo?
+En el segundo caso, tratamos de aplicar la LPI y su concepto de 
distribución.El artículo 19 considera 
+distribución "la puesta a disposición del público del original o copias de la 
obra mediante su venta, 
+alquiler, prestamo o de cualquier otra forma".La diferencia entre el alquiler 
y el prestamo está, en que en 
+el primer caso, hay un beneficio económico o comercial, directo o indirecto y 
en el segundo no lo hay.No existe 
+ese beneficio si sólo se cobra por los gastos de funcionamiento.El alquiler y 
el prestamo no se consideran 
+distribución  si se hace con "fines de exposicición o de comunicación 
pública".Lamentablemente la 
+busqueda del concepto de distribución en el artículo 20 sobre  "comunicación 
pública" nos lleva, en mi 
+opinión, otra vez a la casilla de salida: "Se entenderá por comunicación 
pública todo acto por el cual una 
+pluralidad de personas pueda tener acceso a la obra sin previa distribución de 
ejemplares a cada una de 
+ellas".Lo único que podemos hacer, es tratar de explicar que el programa GPL 
es puesto a nuestra 
+disposición por via telemática, para que lo ejecutemos  de cualquier otra 
forma que no sea ni alquiler ni 
+préstamo, y que por lo tanto, al ser esto distribución, tenemos derecho a las 
fuentes. 
+<h4>PLAGIO </h4>
+La LPI en el articulo 96 establece que el programa de ordenador será protegido 
únicamente si fuese 
+original, en el sentido de ser una creación intelectual propia de su autor.
+Lo que no protege la LPI, son las ideas o principios en los que se basan 
cualquiera de los elementos de un 
+programa de ordenador, incluidos los que sirven de fundamento a sus interfaces.
+Esto supone que se podría leer el código fuente de un programa GPL y tratar de 
crear un programa 
+propietario que recogiese sus ideas, siempre y cuando, no se incluya ninguna 
porción del código fuente 
+del programa GPL.El trasvase de ideas también se produce en sentido 
contrario.Lo ideal sería, aprovechar 
+las facilidades que ofrece la licencia GPL, y no empezar desde cero a 
programar, si no es absolutamente 
+necesario.
+<h4>LINKADO</h4>
+La licencia GPL permite la modificación del programa con la condición de que 
el resultado se rija por la 
+misma licencia.Sin embargo, considera que no se aplica, cuando haya secciones 
identificables que no son 
+derivadas del programa original GPL, siempre que se consideren obras 
independientes y separadas por sí 
+mismas y se distribuyan como obras separadas.Si distribuye esas secciones como 
una parte de un 
+conjunto que es una obra GPL, entonces la distribución del conjunto se 
considerará bajo la licencia GPL.
+La licencia GPL trata de diferenciar, los programas que se escriben 
completamente por una persona, de 
+los que se escriben basandose en el trabajo de otros o por varios autores.
+Distribuir juntos un programa GPL, con un programa propietario, que no esta 
basado en soft GPL, no 
+obliga al programa propietario a ser GPL.
+<h4>SHARED SOURCE</h4>
+Existen algunos conceptos parecidos al soft libre pero que no son exactamente 
iguales y por lo tanto, le pueden inducir a error.Esta confusión trabaja en 
contra de la expansión del software libre y 
+puede provocar erróneas interpretaciones de la licencia GPL.
+Se llama "Freeware" a los programas que permiten la copia y distribución, sin 
exigirle ningún pago,
+cuando es necesario registrarse y pagar, tras un periodo de prueba, se llama 
"shareware".La diferencia 
+con el "free software" o soft libre, es que ninguno de los anteriores, le 
proporciona el codigo fuente y no 
+esta permitida la modificación del programa.Los programas GPL pueden 
adquirirse previo pago o 
+gratis.
+El pasado 3 de Mayo, Craig Mundie pronunció una conferencia en la New York 
University Stern 
+School of Business, en la que hizo un esbozo de lo que la empresa Microsoft 
califica como "shared 
+source".
+Craig Mundie, que es Senior Vice President  de Microsoft , hizo una critica al 
modelo económico de las 
+empresas .com  que dan gratis o a un precio muy bajo el soft que producen, lo 
que en su opinión, anula el 
+modelo de investigación y desarrollo, basado en los derechos de autor y 
explica el estallido de la burbuja 
+de internet.
+Me gustaría decir en primer lugar, que es falso identificar soft libre con 
ausencia de derechos de autor, 
+como ya he explicado.En segundo lugar, el soft libre no tiene por qué ser 
gratis y el hecho de que el soft 
+propietario sea gratuito no le convierte en libre.Microsoft regaló el 
navegador "Explorer" siguiendo el 
+modelo de regalos que ahora critica, estos regalos tienen por objeto ampliar 
la base de usuarios y no 
+explica por si mismo, la crisis de las empresas .com.En tercer lugar, muchas 
empresas que producen soft 
+propietario y que no lo regalan precisamente, también han sido afectadas por 
disminuciones en ventas y 
+beneficios con lo que, parece absurdo relacionar soft libre con modelo 
económico insostenible, es más, 
+posiblemente esas empresas .com jamás hubiesen podido empezar siquiera a 
competir en ningún mercado, 
+de no ser por el software libre,de hecho, no hubiese sido posible la 
popularidad de  internet si no se 
+hubiese partido  de software libre y toda la filosofia de trabajo que este 
implica.
+Ante el cambio de mentalidad que supone internet, frente al viejo modelo de 
software propietario, 
+Microsoft plantea el ".NET" y el "shared source".
+Para Craig Mundie, .NET es un conjunto de servicios Web que no se centran en 
los aparatos sino en el 
+usuario.El shared source supone, según el, un equilibrio que permite compartir 
código con los clientes y 
+socios y al mismo tiempo mantener los derechos de autor, que sostienen el  
saludable  negocio del 
+software. Afirma que es necesaria  una gran Comunidad de desarrolladores, 
teniendo en cuenta que la 
+estrategia .NET no es posible con el apoyo de una sóla compañia o grupo de 
compañias.
+Esto parece, en mi opinión, el último intento para mantener artificialmente 
alto, el precio de un producto , 
+el software, cuando gracias a las telecomunicaciones, es cada dia, más fácil 
de producir y consumir.
+Craig explica que el shared source no es "open source".Esta palabra es 
preferida por las empresas para 
+designar al soft libre, aunque poco a poco, este término va perdiendo 
significado, o si lo prefiere, tiene 
+tantos significados como empresas lo utilizan.
+Los principales defectos que Craig atribuye al soft libre son los riesgos de 
seguridad y los problemas de 
+compatibilidad.Aquí hay una contradicción con las ventajas del soft libre que 
el propio Craig indica: 
+Rápido fomento de una Comunidad, aumento de la retro-alimentación y  rápida 
eliminación de errores en 
+el código.
+En cualquier caso, los programas de Microsoft y el soft propietario en 
general, tampoco se libran de 
+problemas de seguridad y de compatibilidad.
+Si la solución para los problemas de compatibilidad es el monopolio de una 
empresa o de un cartel, como 
+se suele decir, es peor el remedio que la enfermedad.
+El soft libre acaba con los monopolios de empresa y en cuanto al "monopolio" 
que un programa libre 
+pueda ejercer en el mercado, este es menos perjudicial, ya que, con el 
programa libre es más probable que 
+el éxito este basado en la eficacia del soft antes que en otras 
consideraciones.
+Finalmente Craig señala que la licencia GPL pone en riesgo la vitalidad de la 
industria del software y que 
+el modelo de los 60 y 70, de vender el soft junto al hardware u otros 
servicios, no puede construir un 
+mercado de masas.
+Evidentemente, si mañana el Gobierno, prohibiese respirar aire libremente y 
fuese necesario comprar 
+bombonas de aire, como las que usan los submarinistas, se crearía un mercado 
de masas  y surgiría una 
+potente industria de fabricantes de estos depósitos, que se embolsarían 
grandes beneficios 
+económicos.
+El propósito de la licencia GPL no fue crear un mercado de masas o un modelo 
económico rentable sino 
+recuperar la libertad perdida. 
+La pregunta no es si la GPL destruye la industria del software o si 
imposibilita los beneficios que 
+sostienen el I+D,la pregunta es si podemos crear una alternativa a la 
industria del software y si son 
+necesarios esos beneficios para pagar el I+D y en caso de que así sea, como 
conseguirlos usando la 
+licencia GPL.
+<h4>MODELO DE NEGOCIO</h4>
+Es importante analizar el modelo de negocio del soft libre, porque la busqueda 
de beneficios, puede 
+presionar a las empresas a violar la licencia GPL o cuando menos, ir dando la 
espalda progresivamente a 
+la Comunidad.
+Muchos paquetes de software, han sido creados simplemente por el placer de 
crearlos, por experimentar, 
+por hacer prácticas de programación, por necesidad o incluso por 
aburrimiento.Ninguna de estas razones 
+supone un interés económico directo, aunque el resultado haya sido a veces, de 
mayor calidad que el soft 
+propietario, que contaba con un gran apoyo financiero.
+No es necesario dinero para crear soft libre, pero todos somos capaces de 
imaginar las ventajas de contar 
+con remuneración o con cierta estructura, a la hora de acometer un proyecto de 
soft libre.
+Una empresa tiene unos costes informáticos como  licencias de programas, que 
tiene que sostener , ese 
+coste podría ser menor con el soft libre.Esto no quiere decir que el coste sea 
trasladable, porque puede 
+decidir adquirir el soft libre de forma totalmente gratuita y dejar que otros 
asuman el coste económico de 
+producirlo.Una vez adquirido, sera necesario cierto asesoramiento, 
instalación, adaptación y 
+mantenimiento, puede decidir pagar por ese servicio a una empresa externa o 
intentar satisfacer alguna de 
+esas necesidades recurriendo a la Comunidad, mediante la lectura de 
manuales,FAQ o acudiendo al IRC.
+Suponiendo que esto último sea posible, lo que no podrá eludir es el pago a un 
profesional que mantenga 
+la infraestructura dia a dia o que al menos sea capaz de manejar el soft libre 
por sí mismo.Incluso en el 
+caso de que ese profesional desarrolle soft libre para cumplir mas eficázmente 
su trabajo, es bastante 
+probable que o bien la empresa se niegue a distribuirlo o bien intente hacerlo 
propietario.El hecho de que 
+el desarrollo no le haya supuesto un coste adicional, no implica que desdeñe 
la posibilidad de maximizar 
+esa inversión y obtener un beneficio no planeado inicialmente. 
+La solución sería procurar que fuesen entidades públicas o sin ánimo de lucro, 
como fundaciones o 
+universidades, las que mayoritariamente creasen el soft libre.El problema es 
que esto no rebate el 
+argumento que utilizaría la industria del soft propietario, en el sentido de 
que  el soft libre, se crearía 
+gracias a los impuestos y donaciones de las empresas y que entonces el coste, 
sólo habría sido trasladado 
+de los consumidores de soft propietario a todos los ciudadanos en general.La 
industria del soft propietario 
+diría que el soft libre no supone un beneficio económico, mirado en su 
conjunto y que su financiación es 
+injusta.No hay una solución sencilla, pero parece lógico, que sería más 
beneficioso para todos que las 
+entidades públicas, destinasen el dinero que gastan en licencias propietarias, 
en desarrollo de soft libre, 
+esto de paso, haría que el soft propietario no fuese el standard de facto y no 
nos obligarian a todos, a tener 
+que usar programas propietarios.Parece más justo que el dinero público 
produzca soft libre, que podemos usar todos sin restriccion, que no soft 
propietario.
+Si el gasto público en investigación  se realizase con soft libre y se crease 
a la vez mas soft libre, los 
+beneficios de la industria del software se trasladarían, en forma de ahorro, 
al resto de las empresas y a los 
+ciudadanos en general.No sería, un modelo de eficacia económica, si 
sustituimos el papel 
+de la industria del software, por la intervención directa  del Estado, 
financiandola mediante impuestos 
+sobre el ahorro producido, a particulares y empresas, al abaratarse 
drásticamente el software.
+No hay que inventar la rueda, se trata de potenciar las herramientas que ya 
existen, como los fondos de 
+educación de las cooperativas, el sistema de proyectos de fin de carrera de 
las universidades, las prácticas 
+en empresas y las becas en general, orientandolas a la producción de soft 
libre.
+Es de suma importancia, aumentar las desgravaciones que las empresas hacen por 
gastos en 
+I+D o en actividades de interes general o mecenazgo, siempre que el objeto sea 
 desarrollar software 
+libre.
+Aún entonces, la industria del software, trataría de convencernos, de que 
éstas medidas significarían una 
+menor recaudación del Estado, lo que sería perjudicial para todos los 
ciudadanos.
+En mi humilde opinión, habríamos recuperado una enorme parcela de poder y 
puesto en libre circulación 
+el Conocimiento, lo que en todas las epocas históricas, siempre  ha supuesto 
mejoras sustanciales en las 
+condiciones materiales y de todo tipo.<p>
+
+<CENTER>


+<STRONG>Pablo -dewaz- Usano


+&nbsp;<a href="mailto:address@hidden";>address@hidden</a></STRONG>&nbsp;


+</CENTER>
+    </TD>

+  </TR>

+</TABLE>

+</CENTER>

+

+<!-- finish of the main content -->

+<!-- ************************************************************ -->

+

+<HR>

+

+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>

+

+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>

+

+<HR>

+[
 <A HREF="/Licencias">Licencias</A>
 | <A HREF="/Licencias/gples.html">GPL</A>
 | <A HREF="/Licencias/fdles.html">GFDL</A>
 | <A HREF="/Licencias/solicitudes.html">Consulte</A>
 ]


+

+[

+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->

+  <A HREF="/">Principal</a>

+| <A HREF="http://www.gnu.org";>FSF/GNU</A>

+| <A HREF="/Proyectos">Proyectos Sofware</A>

+| <A HREF="/Eventos">Eventos</A>

+| <A HREF="/Traducciones">Traducciones</A>

+| <A HREF="/Licencias">Licencias</A>

+| <A HREF="/buscar.html">Buscar</A>

+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->

+]

+<HR>

+

+<P>

+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (España)

+<P>

+La copia y distribucion de este articulo en su totalidad o parcialmente

+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.

+<P>

+Última actualización:

+<!-- hhmts start-->

+27 Mayo 2001

+<!-- hhmts end -->

+<HR>

+</BODY>

+</HTML>


Index: Licencias/dibus/billete_color.jpg
===================================================================
RCS file: Licencias/dibus/billete_color.jpg
diff -N Licencias/dibus/billete_color.jpg
Binary files /dev/null and /tmp/cvsEXIR8z differ

Index: Licencias/dibus/linux.jpg
===================================================================
RCS file: Licencias/dibus/linux.jpg
diff -N Licencias/dibus/linux.jpg
Binary files /dev/null and /tmp/cvsQCWj4C differ

Index: Licencias/dibus/lupa.jpg
===================================================================
RCS file: Licencias/dibus/lupa.jpg
diff -N Licencias/dibus/lupa.jpg
Binary files /dev/null and /tmp/cvsDZb6GD differ

Index: Licencias/dibus/mundo.jpg
===================================================================
RCS file: Licencias/dibus/mundo.jpg
diff -N Licencias/dibus/mundo.jpg
Binary files /dev/null and /tmp/cvscZh7OD differ

Index: Licencias/dibus/puzzle.jpg
===================================================================
RCS file: Licencias/dibus/puzzle.jpg
diff -N Licencias/dibus/puzzle.jpg
Binary files /dev/null and /tmp/cvs3o2n5B differ

Index: Licencias/dibus/sharesoft_color.jpg
===================================================================
RCS file: Licencias/dibus/sharesoft_color.jpg
diff -N Licencias/dibus/sharesoft_color.jpg
Binary files /dev/null and /tmp/cvsRLWOpF differ

Index: Licencias/dibus/softlibre.jpg
===================================================================
RCS file: Licencias/dibus/softlibre.jpg
diff -N Licencias/dibus/softlibre.jpg
Binary files /dev/null and /tmp/cvsYBBO6F differ

Index: Opinion/index.html
===================================================================
RCS file: Opinion/index.html
diff -N Opinion/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/index.html  3 Mar 2012 06:14:06 -0000       1.1
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Art&iacute;culos de opini&oacute;n - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<h1><b>Art&iacute;culos de opini&oacute;n</b></h1>
+<br>&nbsp;<br>
+Bienvenido a la secci&oacute;n de art&iacute;culos de opini&oacute;n sobre
+software libre de la GNU en Espa&ntilde;a. En estas p&aacute;ginas 
encontrar&aacute;
+textos relacionados tanto con el free software como con su relaci&oacute;n con
+las empresas, el mercado, la tecnolog&iacute;a, los programadores, los
+usuarios... Todo desde el punto de vista de la libertad del software y las
+ventajas que aportan tanto a los desarrolladores como a los usuarios.
+<br>&nbsp;<br>
+Si quiere mostrar sus textos aqu&iacute;, envielos a
+<a href="mailto:address@hidden";>address@hidden</a>. B&aacute;sicamente
+deben tratar sobre software libre, y no ser espec&iacute;ficamente
+t&eacute;cnicos (esta es una secci&oacute;n de opini&oacute;n, no una FAQ de
+GNU/Linux). Pueden tratar todo tipo de temas: filosof&iacute;a, mercado,
+empresa, relaci&oacute;n con los usuarios, formatos libres, libertad de los
+usuarios de inform&aacute;tica e Internet, etc... ¡Esperamos sus
+art&iacute;culos!
+<br>&nbsp;<br>
+Art&iacute;culos actuales publicados:
+<br>&nbsp;<br>
+<ul>
+ <li>Filosof&iacute;a:
+     <a href="/Opinion/Filosofia/glib.html">La generaci&oacute;n de la
+         libertad en el software libre</a>.
+ <li>Empresa:
+     <a href="/Opinion/Empresa/empresa1.html">El software libre y las
+     empresas (1)</a>.
+ <li>Tecnolog&iacute;a:
+     <a href="/Opinion/Tecnologia/formprop.html">Los formatos
+         propietarios y la UNED.</a>
+ <li>Legislaci&oacute;n:
+</ul>
+<br>&nbsp;<br>
+Art&iacute;culos, opiniones, cr&iacute;ticas...: <a 
href="mailto:address@hidden";>address@hidden</a>
+<br>&nbsp;<br>
+Las opiniones vertidas en estos articulos son opiniones personales. GNU
+Espa&ntilde;a no se hace responsable de los contenidos de los articulos. No
+se aceptar&aacute;n articulos que no tengan nombre y correo
+electronico (o cualquier otro medio de contacto) del autor.
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Empresa/empresa1.html
===================================================================
RCS file: Opinion/Empresa/empresa1.html
diff -N Opinion/Empresa/empresa1.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Empresa/empresa1.html       3 Mar 2012 06:14:06 -0000       1.1
@@ -0,0 +1,207 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>El software libre y las empresas - Empresas - Art&iacute;culos de 
opini&oacute;n - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<H2>El software libre y las empresas</h2>
+<br>&nbsp;<br>
+Con este art&iacute;culo comienzo una serie sobre la relaci&oacute;n del 
Software Libre y
+las empresas. En este art&iacute;culo y en el siguiente, trataremos el tema 
desde el
+punto de vista de la empresa como usuario de software libre, y despu&eacute;s 
lo
+veremos como productor de software libre. Ante todo, vaya por delante que en
+estos art&iacute;culos hablar&eacute; del Software Libre desde el punto de 
vista del
+Copyleft, es decir, del software que se encuentra bajo la licencia GPL, que
+hoy por hoy es la &uacute;nica realmente Copyleft en el amplio abanico de 
licencias
+denominadas "Free Software".
+<br>&nbsp;<br>
+En el mundo en que vivimos, la inform&aacute;tica se ha convertido en 
herramienta
+fundamental para el correcto funcionamiento de cualquier empresad moderna.
+El software, en tanto en cuanto es el elemento que le permite a un usuario
+sacar partido de una m&aacute;quina, es una pieza clave, y la correcta 
elecci&oacute;n del
+mismo es casi uno de los elementos m&aacute;s importantes a la hora de equipar
+inform&aacute;ticamente una empresa. Ahora bien, normalmente las empresas se 
ven
+subyugadas por el concepto rentabilidad/oportunidad, y ante ese hecho,
+deben optar por un software que sea utilizado por una amplia base de usuarios,
+que al fin y al cabo en parte ser&aacute;n empleados suyos. He aqu&iacute; el 
hecho más
+importante por el cual una empresa elige software propietario en vez de libre.
+Pero ahora distingamos entre los distintos conceptos.
+<br>&nbsp;<br>
+<h2>Software propietario:</h2>
+El software propietario es un producto cerrado, que se nos vende tal cual, y
+que no podemos abrir ni modificar sin permiso de la empresa que lo ha
+realizado. Pero es m&aacute;s, y he aqu&iacute; la cualidad más 
&eacute;ticamente escandalosa del
+software propietario: no podemos copiarlo libremente. No podemos siquiera
+sacar copias del producto para nuestra propia seguridad, con lo que si la
+copia licenciada que tenemos se estropea o se pierde, estamos obligados a
+comprar otra sin remisi&oacute;n. Esto nos conduce a la siguiente conclusión:
+<br>&nbsp;<br>
+<H2>No compramos software, nos lo alquilan</H2>
+¿Que significa esto? Pues simple y llanamente que las licencias cerradas son
+simplemente contratos de alquiler. Si miramos cualquier licencia propietaria
+que podamos encontrar (La de Windows es un buen ejemplo), veremos una serie
+de puntos que van en contra de todo pensamiento comercial b&aacute;sico:
+<br>&nbsp;<br>
+<ol>
+<li>El software no es nuestro: se nos indica claramente que el software es
+propiedad de la empresa (productora), y que incluso es posible que nos
+revoquen la licencia.</li>
+<br>&nbsp;<br>
+ <li>Al ser un producto alquilado, no podemos hacer modifiaciones sobre 
&eacute;l
+(aunque esto no es una consecuencia directa del alquiler propiamente dicho).
+Tampoco podemos realizar ingenier&iacute;a inversa (en realidad, en 
Espa&ntilde;a y otros
+paises si se puede, ya que las licencias suelen estar realizadas para los USA
+y se suelen entregar sin cambios a otros paises), lo que implica que no
+podemos coger un binario y convertirlo a fuente a partir de el.</li>
+<br>&nbsp;<br>
+ <li>Y como en todo alquiler, no podemos ni realquilarlo o revenderlo (la
+comunmente llamada pirater&iacute;a de software), pero tampoco distribuirlo en
+nuestros c&iacute;rculos ni a otras personas, a&uacute;n sin que medie lucro 
alguno.</li>
+<br>&nbsp;<br>
+ <li>Estos son, digamos, los puntos m&aacute;s importantes que indican la 
falta de
+libertad a la hora de adquirir un software. Cuando vamos a la tienda, no
+estamos comprando software, sino que nos lo alquilan, con lo que podemos
+concluir a grandes rasgos que, b&aacute;sicamente, nos están enga&ntilde;ando. 
Esto
+habitualmente se suele comparar con un coche que se nos entrega con el capo 
+cerrado. Solamente t&eacute;cnicos de la concesionaria o del fabricante pueden
+abrirlo, y siempre que queramos hacer cambios, ha de hacerlos la misma
+empresa, y con sus piezas, eso tampoco podemos elegirlo... El software
+propietario limita y encarece nuestro software y nuestra libertad a la hora
+de usarlo y hacer con ello lo que creamos oportuno.</li>
+</ol>
+<br>&nbsp;<br>
+<H2>El Software Libre</H2>
+En el extremo opuesto nos encontramos al Software Libre, qu&eacute; es una 
forma de
+devolver al software y a sus creadores y usuarios la libertad que
+inherentemente tienen. Esto entronca, a mi entender, de alguna forma con la
+denominada "Libertad de informaci&oacute;n", entendida como que todo aquello 
que
+tienen alguna relevancia debe ser conocida por todos, y compartida sin 
l&iacute;mite
+alguno tanto de dinero como de otro tipo (ideolog&iacute;a, raza, sexo, uso, 
etc...).
+B&aacute;sicamente el software libre contiene en si cuatro principios que le 
dan
+sustancia y consistencia:
+<br>&nbsp;<br>
+<ol>
+<li>Libertad de uso: somos libres de usar o no usar, y de usar como queramos
+el software...</li>
+<br>&nbsp;<br>
+<li>Libertad de modificaci&oacute;n: tenemos acceso total al código fuente (las
+ordenes de texto que luego se compilan en los archivos ejecutables), y podemos
+modificarlo, a&ntilde;adir o borrar cosas libremente sin tener que dar cuentas 
a
+nadie por ello.</li>
+<br>&nbsp;<br>
+<li>Libertad de distribuci&oacute;n: podemos copiar indefinidamente ese 
software, a&uacute;n
+sin pedir permiso al autor original, y distribuirlo de forma gratuita o
+cobrando, tanto el original como las modificaciones, sin l&iacute;mite 
alguno.</li>
+<br>&nbsp;<br>
+<li>Restricci&oacute;n de software libre: es el punto m&aacute;s importante de 
los cuatro
+y es lo que le da la verdadera libertad al software. Tambien es denominado
+"Copyleft" (luego veremos que es). Significa que obligatoriamente, nadie
+podr&aacute; incorporar software libre dentro de un binario cerrado 
perteneciente a
+un software propietario. Esto implica que todo software que incorpore
+software libre ha de ser, por definici&oacute;n, libre.</li>
+</ol>
+<br>&nbsp;<br>
+¿Que es el Copyleft? Se trata con mucho del elemento m&aacute;s importante de 
los
+cuatro, y es sin duda lo que le ha dado aut&eacute;ntica dimensi&oacute;n al 
software libre.
+El copyleft es lo que le asegura a un programador que su software no va a ser
+"mal utilizado" por un desarrollador de software propietario, 
incorpor&aacute;ndolo
+sin m&aacute;s a un proyecto de software cerrado, rompi&eacute;ndose 
as&iacute; la libertad del
+software, con todo lo que ello implica (se rompen tambien las libertades del
+usuario y el programador). Tanto la l&oacute;gica como la &eacute;tica del 
software libre
+implican que si un software nace libre, debe seguir siendo libre siempre.
+Luego su inclusi&oacute;n en un software propietario rompe con todas las reglas
+establecidas por el desarrollador. Esto tendr&aacute; especial relevancia en 
la parte
+que dedicaremos a la relaci&oacute;n del software libre y la empresa 
desarrolladora
+de software.
+<br>&nbsp;<br>
+En el pr&aacute;ximo art&iacute;culo se discutirá como afecta el software 
propietario a la
+empresa y como beneficiarse del uso de software libre.
+<br>&nbsp;<br>
+Marcos Legido Hern&aacute;ndez<br>
+<a href="mailto:address@hidden";>address@hidden</a>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Empresa/index.html
===================================================================
RCS file: Opinion/Empresa/index.html
diff -N Opinion/Empresa/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Empresa/index.html  3 Mar 2012 06:14:06 -0000       1.1
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Empresas - Art&iacute;culos de opini&oacute;n - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<h1><b>Art&iacute;culos de empresas</b></h1>
+<br>&nbsp;<br>
+<ul>
+ <li>Empresa:
+     <a href="/Opinion/Empresa/empresa1.html">El software libre y las
+     empresas (1)</a>.
+</ul>
+<br>&nbsp;<br>
+Art&iacute;culos, opiniones, cr&iacute;ticas...: <a 
href="mailto:address@hidden";>address@hidden</a>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Filosofia/glib.html
===================================================================
RCS file: Opinion/Filosofia/glib.html
diff -N Opinion/Filosofia/glib.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Filosofia/glib.html 3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,388 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>La generaci&oacute;n de la Libertad en el Software Libre - 
Filosof&iacute;a - Art&iacute;culos de opini&oacute;n
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<H2>La generaci&oacute;n de la Libertad en el Software Libre</H2>
+
+<strong>I. EL DESARROLLADOR</strong>
+
+        La diferencia entre el
+movimiento del Opensource y el Software Libre radica en que el primero 
+no cumple con todos los requisitos de libertad que requiere su clasificacion 
+como perteneciente al segundo.
+
+Es decir, no cumple con todas las libertades necesarias para ser clasificado
+como Software Libre. Esto no parece importar a los seguidores del Opensource.
+Para ellos las libertades que garantiza el Opensource, aunque menores, 
+son suficientes. Esto es un hecho conocido y comunmente aceptado. De hecho,
+se da la propiedad antisimetrica:
+<center>
+
+ Software Libre ES Opensource
+ 
+ pero...
+
+ Opensource NO ES Software Libre
+</center>
+
+Esto se debe a que la OSI (Open Source International) cataloga como 
+Opensource al software licenciado por diversas licencias, algunas 
+muy distintas de las otras, como GPL, LGPL, BSD, Artistica, MIT, etc.
+La caracteristica comun de estas licencias es que el software sobre
+el que se aplican suele ir acompa&ntilde;ado de sus fuentes. 
+
+Como es natural, cada uno de los movimientos tiene a sus seguidores, 
+y tambien a sus detractores. 
+
+        La libertad que tanto se nombra en este contexto es facilmente 
+reconocible, tanto por el desarrollador como por el usuario de Software Libre.
+El desarrollador dispone de mas recursos a la hora de efectual su labor 
+(desarrollar) y el usuario cuenta con la complicidad y la buena fe del 
+desarrollador a la hora de lidiar con el software que utiliza. Esto tambien 
+da al usuario ciertas garantias adicionales, como la certeza de que si el 
+desarrollador decide abandonar el mantenimiento del software (para 
+dedicarse a otras cosas, por ejemplo) nada podra impedir que otro 
+desarrollador ocupe el papel del anterior. Asi, el soporte hacia el usuario 
+se perpetua, en la medida de lo posible. Ademas, el usuario cuenta para ello 
+con la labor de organizaciones como la Free Software Foundation, que 
+buscara de inmediato gente interesada en mantener ese software, en
+caso de vacancia. 
+
+Otra garantia que aporta el Software Libre es que, en virtud de su licencia, 
+el usuario puede estar seguro de que ninguna entidad, como una empresa, 
+con animo de lucro pueda tomar el control sobre ese software, y cobrar por 
+su intalacion o copia (es decir, no vender el software sino licencias sobre 
+su uso; de alguna manera, alquilarlo). Por lo visto, pues, el efecto de esa 
+libertad que garantiza el Software Libre es muy conocido, util y por 
+tanto apreciado por los componentes de nuestra comunidad. 
+
+        Ahora partamos de esos efectos e intentemos llegar a otra 
+faceta del Software Libre: de que manera se genera esta libertad. Examinemos
+con cuidado cada una de las libertades que parece aportar el Software Libre, 
+y busquemos una causa para las mismas. De esta manera, tal vez consigamos 
+comprender y apreciar mejor esa libertad. Puede que la conclusion a la que 
+lleguemos no sea tan evidente como parece. Resulta razonable enumerar estas 
+libertades bajo dos puntos de vista: las del desarrollador de Software Libre, 
+y las del usuario del mismo.
+
+        El desarrollador, bajo sus numerosos tipos de encarnacion 
+(programador, ingeniero, beta tester, etc) parece el beneficiario natural 
+de la concepcion del Software Libre. El desarrollador
+
+<center>
+                <strong>Posee la libertad de desarrollar</strong>
+</center>
+
+    Esto puede sorprender. Ya que se puede pensar que esta libertad
+es comun a cualquier desarrollador, sea o no de software libre. Sin embargo,
+si pensamos con cuidado en algunas situaciones comunes en el software 
+propietario, este derecho puede verse seriamente comprometido:
+
+<blockquote>
+       * El desarrollador puede estar trabajando en un software para su 
+        empresa, y desear a&ntilde;adir cierta capacidad al mismo (por 
ejemplo, 
+        sobre un software de videoconferencia, incluir soporte para las 
+        webcams marca Nisu, sus preferidas).
+        
+        Sin embargo, el jefe de proyecto considera que ese soporte no es 
+        adecuado por la razon que sea (tal vez la marca Nisu no esta muy 
+        difundida, o existen ciertas rencillas empresariales que hacen 
+        incluir a Nisu como marca soportada una mala decision politica, 
+        o sencillamente porque no le da la gana) y prohibe al desarrollador 
+        incluirlo en el software.
+
+        NOTA: El software propietario no suele pertenecer a la persona que 
+           lo desarrolla. Por lo tanto los derechos del desarrollador 
+               sobre el mismo no son muchos.
+
+       * El desarrollador est&aacute; dise&ntilde;ando un programa de 
visualizaci&oacute;n de 
+        fractales de Mandelbrot. Al estar orientado a fines comerciales, 
+        el visor funciona sobre un entorno propietario. Por tanto, el 
+        desarrollador necesita una librer&iacute;a gr&aacute;fica que funcione 
sobre ese 
+        entorno, para poder presentar los fractales visualizados de una 
+        manera sencilla. 
+
+        Pero la libreria de sus sue&ntilde;os, pese a ser completa y tener muy 
+        buenas referencias sobre ella, es propietaria, y para su 
inclusi&oacute;n 
+        en un software de fines comerciales, tremendamente cara. Como el 
+        desarrollador est&aacute; terminando de pagar el piso, y este 
a&ntilde;o no le 
+        han dado la paga extra de navidad, no dispone de las 800.000 pesetas
+        necesarias para pagar la licencia profesional de la libreria, 
+        apenado pospone el proyecto para tiempos mejores. 
+
+        NOTA: Desarrollar software comercial suele requerir de una 
inversi&oacute;n
+           monetaria inicial considerable. No todo el mundo dispone 
+               de ella. 
+
+   * El desarrollador est&aacute; harto de que el programa Nisu se cuelgue 
cada 
+        vez que de manera accidental pulsa cuatro teclas al mismo tiempo. 
+        Tras muchos cuelgues y muchas maldiciones, decide comunicar a la 
+        empresa Nisu Corp., que comercializa Nisu, su descubrimiento del bug
+        para que lo arreglen en una nueva versi&oacute;n. A la semana recibe 
+        respuesta de Nisu Corp., que le comunica muy correctamente que se 
+        ha tomado nota del error, y en el siguiente release de Nisu ir&aacute; 
+        incluido un parche que lo evite. 
+
+        Desgraciadamente, los nervios del desarrollador no pueden esperar un
+        a&ntilde;o a que salga Nisu version 4, asi que comunica a Nisu Corp. 
que 
+        est&aacute; dispuesto a parchear &eacute;l mismo el software, pero que 
+        naturalmente requiere de las fuentes del programa. El siguiente 
+        email de Nisu Corp., aunque igual de correcto, es mas decepcionante:
+        Sinti&eacute;ndolo mucho, no es posible distribuir las fuentes de la
+        empresa a particulares, puesto que est&aacute; licenciado bajo Nisu 
License
+        y dicha licencia, que es la que soporta el contrato con el usuario,
+        no da lugar a acciones semejantes... blablabla. El desarrollador 
+        entonces decide cambiar de Nisu a otro programa que solo pita cuando
+        pulsa cuatro teclas a la vez. El nuevo programa no se cuelga, pero 
+        la licencia de uso le cuesta el doble que la del otro. Mala suerte, 
+        y se acab&oacute; el asunto. 
+
+        NOTA: En el mundo del software comercial, la comunicaci&oacute;n entre 
+           desarrolladores de distintas empresas o &aacute;mbitos no se 
+               caracteriza precisamente por fluida y eficiente. 
+</blockquote>
+
+   Como hemos visto, y contra nuestra intuici&oacute;n inicial, el 
desarrollador
+de software propietario no siempre ostenta el derecho a desarrollar. 
+La mayor&iacute;a de las veces se debe a que el software que desarrolla no 
+es suyo, y aun cuando s&iacute; lo es se pueden presentar problemas de otras 
+&iacute;ndoles, como financieros, políticos o de comunicaci&oacute;n. 
+
+       Sin embargo, el desarrollador de Software Libre s&iacute; posee esta 
libertad
+o derecho. Analicemos qu&eacute; es lo que genera esta libertad de 
+desarrollar, bas&aacute;ndonos en la resoluci&oacute;n de estos tres tipos de 
+obst&aacute;culos: financieros, pol&iacute;ticos y de comunicaci&oacute;n:
+<blockquote>
+
+       - El desarrollador de Software Libre no suele sufrir el tipo de 
+        problemas finacieros como el mencionado en los ejemplos anteriores. 
+
+        Si est&aacute; desarrollando Software Libre, y no tratarse de software 
+        comercial, el desarrollador no tiene por que "preveer" ning&uacute;n 
tipo 
+        de restricci&oacute;n futura sobre la venta de licencias sobre el 
*uso* 
+        de su software, puesto que no se va a dar. Por lo tanto, puede 
+        utilizar recursos libres como librer&iacute;as gr&aacute;ficas, o 
compiladores, 
+        que al ser tambi&eacute;n Software Libre no suponen un gasto monetario 
+        inmediato, que luego tal vez se ver&iacute;a obligado a amortizar 
+        vendiendo licencias de uso, al estilo propietario. 
+
+        Por tanto, parece que podemos afirmar que uno de los factores que 
+        generan la
+        libertad del desarrollador es que *puede utilizar o 
+        incorporar a su desarrollo otro software, que, al ser tambi&eacute;n 
libre,
+        no implica ning&uacute;n gasto monetario inicial*. Este factor posee 
un 
+        caracter recursivo curioso e interesante. 
+
+       - El desarrollador de Software Libre tampoco est&aacute; sujeto a 
+        restricciones de &iacute;ndole político.
+
+        Evidentemente, el desarrollar Software Libre implica el otorgar a 
+        otros desarrolladores los mismos derechos sobre el software 
+        desarrollado que el autor. Esto, de manera natural e insoslayable, 
+        elimina que cualquier restricci&oacute;n de tipo pol&iacute;tico, como 
rivalidad 
+        comercial o de mercado, afecte al software. Aun cuando el 
+        desarrollador trabaje en una empresa, y elabore el software bajo 
+        la misma (pagado por ella, quiero decir), el status de Software 
+        Libre del producto impide a la empresa "prohibir" o restringir que 
+        el 
+        desarrollador haga extensiones al software. Evidentemente, la 
+        empresa puede decidir no pagar al desarrollador ese trabajo, o no 
+        incluir las extensiones en su distribuci&oacute;n del software, pero 
eso 
+        son circunstancias aparte: el desarrollador *posee la libertad* 
+        de extender su propio software. Alguien podria pensar que la empresa
+        puede tomar la decision de despedir al desarrollador, y por ende
+    influir sobre el mismo para que no haga la extension. Esto es
+        cierto. Sin embargo, piensese que tambien podrian darse otros casos
+    que dificulten al desarrollador trabajar, como quedarse manco, 
+        no tener tiempo, o apuntarle con una pistola en la cabeza para 
+        que no lo haga. Entendamos que estos factores no restringen de 
+        manera *absoluta* el desarrollo. Si realmente se quiere desarrollar, 
+        puede hacerse, aun a costa de los posibles sacrificios que causen
+        estos factores externos. 
+
+        En este punto, parece evidente que otro factor que genera la 
+        libertad del desarrollador a desarrollar es que *no se le pueden 
+        poner restricciones absolutas que le impidan trabajar sobre su 
+        propio desarrollo (o el de otros) como le plazca. Esto radica en la
+        libertad que posee el propio software, no el desarrollador* 
+
+       - Los problemas de comunicaci&oacute;n propios del software propietario 
no
+        son sufridos por el desarrollador de Software Libre. 
+
+        Ciertamente, la licencia GPL impone al software sobre el que se
+        aplica una apertura absoluta, dando por hecho que su distribucion
+        puede y debe hacerse incluyendo el codigo fuente (o al menos que
+        este est&eacute; disponible). 
+
+        Esto pulveriza todos los problemas de comunicacion *criticos* que
+        afectan a los desarrolladores de software comercial. Dado que 
+        los intereses monetarios suelen ser ajenos a la estructura del
+        Software Libre, no hay ninguna necesidad de ocultar a otros 
+        desarrolladores aspectos del software como algoritmica, estructura
+        de datos, formatos utilizados, calidad de las fuentes, etc. Por
+        tanto, los desarrolladores de Software Libre no tienen reparos en
+        que otro desarrollador examine e incluso critique sus fuentes. 
+
+        Asimismo, al no haber rivalidades de tipo empresariales o 
+        politicos, el desarrollador no suele tener reparos en colaborar
+        con otros en un proyecto, publicandolo y distribuyendolo juntos,
+        compartiendo la autoria. 
+
+        Por tanto, podemos concluir que un factor importante que impide
+        que se vea vulnerado el derecho a desarrollar es *el caracter
+        abierto del software, que lo hace desde la aplicacion de la
+        licencia completamente transparente al resto de la comunidad
+        de desarrolladores*
+</blockquote>
+
+Bueno, pues hemos encontrado varios factores que de alguna manera generan
+la libertad del desarrollador:
+
+<blockquote>
+ * El desarrollador puede utilizar o incorporar a su desarrollo otro
+  software, que, al ser tambi&eacute;n libre, no implica ningun gasto 
+  monetario inicial.
+
+ * Al desarrollador no se le pueden poner restricciones absolutas que
+  le impidan trabajar sobre su propio software (o el de otros) como
+  le plazca.
+
+ * El caracter abierto del Software Libre, que hace su desarrollo, 
+  evolucion y estructura transparente al resto de la comunidad de
+  desarrolladores. 
+</blockquote>
+
+Vemos que la constante en estos factores es el propio software. En el 
+primer caso, la libreria grafica libre. En el segundo, la invulnabilidad
+del Software Libre frente a coarciones comerciales o por parte del mismo
+autor. En el tercero, el caracter abierto del Software Libre.
+
+Si analizaramos otras libertades que posee el desarrollador de Software 
+Libre, en contraposicion al de software propietario, comprobariamos
+que la constante se repite (haz la prueba, imagina situaciones). 
+
+Al fin, pues, podemos concluir:
+<blockquote>
+
+  *La libertad del desarrollador de Software Libre es generada
+  por el propio Software Libre (incluido el que desarrolla)*
+</blockquote>
+
+En proximas entregas analizaremos que es lo que genera la libertad del
+usuario, por una parte, y del mismo Software Libre, por la otra. Puedo
+adelantar las conclusiones futuras: 
+<blockquote>
+
+        - La libertad del usuario es generada por la aplicacion por 
+         parte del desarrollador de su propia libertad.
+
+        - La libertad del Software Libre es generada por el usuario
+         (es decir, por su *uso*).
+</blockquote>
+
+Veremos el camino a estas conclusiones, y discutiremos la estructura 
+circular que resulta:
+
+<pre>
+Sw. Libre ---------------------> Desarrollador
+ <                 /
+  \               /
+   \             /
+    \           /
+     \         /
+      \       /
+       \ Usuario <
+</pre>
+
+<center>
+Jose E. Marchesi<br>
address@hidden
+</center>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Filosofia/index.html
===================================================================
RCS file: Opinion/Filosofia/index.html
diff -N Opinion/Filosofia/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Filosofia/index.html        3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Filosofia - Art&iacute;culos de opini&oacute;n - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<h1><b>Articulos de filosofia</b></h1>
+<br>&nbsp;<br>
+<ul>
+ <li>Filosof&iacute;a:
+     <a href="/Opinion/Filosofia/glib.html">La generaci&oacute;n de la
+         libertad en el software libre</a>.
+</ul>
+<br>&nbsp;<br>
+Art&iacute;culos, opiniones, cr&iacute;ticas...: <a 
href="mailto:address@hidden";>address@hidden</a>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Legislacion/index.html
===================================================================
RCS file: Opinion/Legislacion/index.html
diff -N Opinion/Legislacion/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Legislacion/index.html      3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Legislaci&oacute;n - Art&iacute;culos de opini&oacute;n - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<h1><b>Art&iacute;culos de opini&oacute;n</b></h1>
+<br>&nbsp;<br>
+<ul>
+ <li>Legislaci&oacute;n:
+</ul>
+<br>&nbsp;<br>
+Art&iacute;culos, opiniones, cr&iacute;ticas...: <a 
href="mailto:address@hidden";>address@hidden</a>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Legislacion/pagano.html
===================================================================
RCS file: Opinion/Legislacion/pagano.html
diff -N Opinion/Legislacion/pagano.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Legislacion/pagano.html     3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,350 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Diferencias entre la licencia GPL y la BSD - Legislaci&oacute;n - 
Art&iacute;culos de opinión
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+
+Algunos gobiernos europeos estan planteando la posibilidad de obligar a los 
+consumidores, a pagar una cantidad de dinero extra cuando compren ordena
+dores y sus perif&eacute;ricos, para compensar a los artistas, por la 
p&eacute;rdida 
+econ&oacute;mica que, seg&uacute;n ellos les provoca internet.<br>
+Cuanto m&aacute;s ignorantes vivamos, m&aacute;s posibilidades tendr&aacute;n 
ciertos grupos de 
+presi&oacute;n de vulnerar los intereses mayoritarios, en el momento de 
elaboraci&oacute;n 
+o interpretaci&oacute;n de las leyes que nos gobiernan.
+
+Se llama propiedad intelectual al conjunto de derechos que tiene el autor 
sobre 
+la obra que ha creado.Es curioso, pero en la Ley de Propiedad Intelectual, en 
+adelante LPI, no aparece por ning&uacute;n lado la palabra "copyright", 
aunque, este es 
+el nombre por el que generalmente se suele denominar a los derechos de 
autor.<br>
+La propiedad intelectual puede consistir en una canci&oacute;n, 
fotograf&iacute;as, videos,
+esculturas, obras de pintura, libros, comics, obras dram&aacute;ticas, 
proyectos, planos, dise&ntilde;os 
+y programas de ordenador.<br>
+Entre los derechos que conforman la propiedad intelectual, esta el derecho 
moral 
+del autor sobre su obra, gracias al cual puede exigir que se reconozca su 
condici&oacute;n 
+de autor, decidir sobre la forma de divulgaci&oacute;n de su obra o que no se 
modifique 
+en perjuicio de sus intereses o menoscabando su reputaci&oacute;n.<br>
+Tambi&eacute;n tiene derechos de explotaci&oacute;n como el de 
reproducci&oacute;n, distribuci&oacute;n y comunicaci&oacute;n p&uacute;blica, 
finalmente esta el derecho a la remuneraci&oacute;n por copia privada.<br>
+El derecho a reproducir una obra te da permiso para fijarla en cualquier medio
+que permita su comunicaci&oacute;n posterior.Para poder poner al alcance del 
p&uacute;blico 
+la obra y las copias obtenidas, necesitas tener ademas el derecho de distribu 
ci&oacute;n.<br>
+La comunicaci&oacute;n p&uacute;blica consiste en poner a disposici&oacute;n 
de la gente la obra, 
+pero sin repartirle copias de la obra a cada persona, este derecho se ejercita 
en
+un &aacute;mbito que no es el dom&eacute;stico o personal, ser&iacute;a el 
caso de una pel&iacute;cula que ves en un cine o en un bar,el video del 
autobus, un concierto en directo o la 
+puesta en escena de una obra de teatro. <br>
+Este derecho tambi&eacute;n hay que pagarlo, porque seg&uacute;n la ley, es 
distinto del dere
+cho de distribuci&oacute;n.<br>
+Cuando la reproducci&oacute;n de la obra se realiza &uacute;nicamente para un 
uso privado,
+seg&uacute;n la Ley de Propiedad Intelectual, nace un derecho para compensar 
el dine
+ro que el autor deja de percibir por dicha reproducci&oacute;n, a ese derecho 
se le lla
+ma "remuneraci&oacute;n por copia privada" y por ese motivo los fabricantes o 
importa
+dores de aparatos para reproducir libros, m&uacute;sica o videos tiene que 
pagar un por
+centaje, igual que cualquier persona al pagar una fotocopia o comprar una 
cinta 
+de video virgen tiene que abonar tambien un porcentaje determinado que va a 
+parar a las entidades de gesti&oacute;n.<br>
+Afortunadamente, la compra de papel en blanco no tiene que pagar ningun 
recargo 
+por estos conceptos, de momento.<br>
+Seg&uacute;n el art&iacute;culo 90.7 de la LPI, en las obras audiovisuales, el 
derecho de comu
+nicaci&oacute;n p&uacute;blica deber&aacute; pagarse a trav&eacute;s de las 
entidades de gesti&oacute;n de derechos de autor.Este derecho existe, aunque tu 
hayas tenido acceso 
+p&uacute;blico a la obra pagando una entrada o gratis, lo que importa para que 
exista ese derecho, es que hayas visto la obra en un lugar p&uacute;blico.<br>
+El art&iacute;culo 25 de la LPI, establece que el derecho de 
remuneraci&oacute;n por copia pri
+vada, tambien sea irrenunciable para los autores y los artistas, interpretes o 
ejecutantes y s&oacute;lo puedan cobrarlo a trav&eacute;s de una entidad de 
gesti&oacute;n de los derechos de autor.<br>
+Esto quiere decir, que si creas una obra, no podras negociar la cantidad a 
recibir a cambio de la comunicaci&oacute;n p&uacute;blica o la copia privada y 
que desde luego no vas a poder cobrarlo 
+por ti mismo, es obligatorio que te afilies a una entidad de gesti&oacute;n de 
derechos de autor.
+
+Los programas de ordenador son propiedad intelectual de su autor o, salvo que 
se pacte 
+otra cosa, de la empresa que ha empleado a ese autor para hacer el 
programa.<br>
+Generalmente esa empresa luego, no vende el programa a sus clientes sino que 
lo alquila 
+pero de forma no exclusiva, es decir, puede alquilar el programa a muchas 
personas que 
+a su vez, s&oacute;lo lo podr&aacute;n usarlo en un ordenador.<br>
+La protecci&oacute;n que la propiedad intelectual concede a los programas es 
tambi&eacute;n especial 
+puesto que, el c&oacute;digo fuente no se hace p&uacute;blico, s&oacute;lo se 
distribuyen los binarios.<br>
+De esta forma, el programa tal y como lo escribe y lo puede leer un ser humano 
puede 
+permanecer secreto y s&oacute;lo se entrega el programa para ser ejecutado en 
el ordenador.<br>
+Un programa de ordenador, seg&uacute;n la LPI, es una secuencia de 
instrucciones o 
+indicaciones destinadas a ser utilizadas, directa o indirectamente, en un 
sistema 
+inform&aacute;tico para realizar una funci&oacute;n o una tarea o para obtener 
un resultado 
+determinado, cualquiera que fuere su forma de expresi&oacute;n y 
fijaci&oacute;n.<br>
+Los ordenadores hoy, no son solo terminales Unix en modo texto, para la amplia 
+mayor&iacute;a son pantallas de iconos llenas de colores y sonido, 
video-juegos y 
+&uacute;ltimamente, acceso a internet con sus paginas web llenas de m&aacute;s 
dibujos, 
+fotos, sonido, video e incluso im&aacute;genes virtuales en tres 
dimensiones.<br>
+En pocas palabras, el tramiento de las im&aacute;genes y el sonido por medios 
inform&aacute;ticos-
+multimedia-ha conseguido que la barrera que en los 80 separaba la industria de 
los 
+ordenadores y programas, de la industria de las discogr&aacute;ficas o los 
estudios de 
+Hollywood haya casi desaparecido hoy al principio del siglo XXI.<br>
+La uni&oacute;n entre AOL y Time-Warner, como una fusi&oacute;n entre colosos 
iguales, 
+es el mejor ejemplo de esto.<br>
+La oferta conjunta de pel&iacute;culas,canales de informacio&oacute;n e 
internet por un mismo 
+suministrador a trav&eacute;s de la misma infraestructura tecnol&oacute;gica, 
refuerza en mi opini&oacute;n esta teor&iacute;a.<br>
+El art&iacute;culo 100.2 considera que la realizaci&oacute;n de una copia de 
seguridad por la persona 
+que tiene derecho a usar el programa no puede impedirse por contrato en cuanto 
resulte 
+necesaria para dicha utilizaci&oacute;n.Sin embargo, el derecho a la 
remuneraci&oacute;n por copia 
+privada que antes vimos, esta excluido por el art&iacute;culo 25.3 cuando se 
trate de programas 
+de ordenador.<br>
+Es decir, puedes hacer copias de los programas como copia de seguridad y para 
uso 
+personal y esto no genera el derecho de remuneraci&oacute;n por copia 
privada.<br>
+El problema surge si empezamos a considerar a los programas de ordenador como 
obras 
+audiovisuales, por ejemplo los video-juegos.<br>
+Si entendemos los video-juegos como obras audiovisuales , no s&oacute;lo se 
pagar&iacute;a 
+por poder venderlos o alquilarlos-derecho de 
distribuci&oacute;n-tambi&eacute;n habr&iacute;a 
+que pagar a una entidad de gesti&oacute;n de derechos de autor por jugar en 
p&uacute;blico con ellos-derecho de comunicaci&oacute;n p&uacute;blica.<br>
+Al mismo tiempo habr&iacute;a que pagar una compensaci&oacute;n al comprar los 
CD y DVD, ya que 
+las obras audiovisuales s&iacute; perciben remuneraci&oacute;n por copia 
privada.<br>
+Para complicarlo aun m&aacute;s, en los CD y DVD, no s&oacute;lo se pueden 
copiar programas sino 
+tambi&eacute;n fotos, canciones y videos en formato digital que s&iacute; 
generan remuneraci&oacute;n por copia privada.Como el ordenador puede servir 
para hacer esas reproducciones, las entidades de gesti&oacute;n quieren que 
alguien les pague una compensaci&oacute;n, exactamente 
+como ocurre con los aparatos para grabar sonido o las m&aacute;quinas de 
fotocopia. <br>
+Pero el ordenador sirve para muchas cosas m&aacute;s, aparte de para grabar 
fotos o m&uacute;sica en 
+su disco duro.En cualquier caso, las obras almacenadas en ese dispositivo 
pueden ser 
+originales del due&ntilde;o del ordenador y entonces, simplemente har&iacute;a 
copias de su propia 
+obra y ser&iacute;a m&aacute;s absurda aun, la remuneraci&oacute;n por copia 
privada.<br>
+Recuerda que el derecho de copia privada existe incluso cuando jam&aacute;s 
pienses dar esa 
+copia a nadie, no tiene que ver con la distribuci&oacute;n no autorizada con o 
sin &aacute;nimo de 
+lucro.<br>
+El propietario de un bar, como vimos, tiene que pagar a una entidad de 
gesti&oacute;n de 
+derechos de autor por el hecho de tener una tele en su local, esto es el canon 
de 
+comunicaci&oacute;n p&uacute;blica.<br>
+Hay mucho dinero en juego si finalmente, las entidades de gesti&oacute;n, 
consiguen de alguna 
+forma, aplicar el concepto de comunicaci&oacute;n p&uacute;blica a 
internet.<br>
+Si se considera internet como una obra audiovisual -ya que puedes ver video o 
escuchar 
+m&uacute;sica a trav&eacute;s de internet-podr&aacute;n , por ejemplo,empezar 
a cobrar a los ciber-cafes el canon de comunicaci&oacute;n p&uacute;blica, ya 
que entonces la gente tiene acceso a la obra intectual en p&uacute;blico, 
quiz&aacute;s decidan que son los Proveedores de internet -ISP-quienes tienen 
que pagar, o los dos.<br>
+Para que no quede nadie sin pagar, tambi&eacute;n estan considerando la 
posibilidad de cobrar 
+ese canon cuando accedas desde tu casa, entonces no estas en un lugar 
p&uacute;blico, pero 
+pretenden que el art&iacute;culo 20.2.i de la LPI sea aplicable a internet.<br>
+Ese art&iacute;culo entiende por comunicaci&oacute;n p&uacute;blica, el acceso 
p&uacute;blico a bases de datos de ordenador por medio de 
telecomunicaci&oacute;n, cuando estas incorporen o constituyan obras 
protegidas.<br>
+Como internet es una enorme base de datos y esta compuesta por millones de 
fotos, 
+documentos, videos, m&uacute;sica,animaciones,dibujos...y todo eso es 
propiedad intelectual 
+protegible por ser la creaci&oacute;n original de alguna persona, entonces al 
poder leer o 
+escuchar esas obras por medios telem&aacute;ticos ser&iacute;a 
comunicaci&oacute;n p&uacute;blica, sin importar desde donde accedas a esa 
propiedad intelectual.<br>
+Si las entidades de gesti&oacute;n consiguen que este criterio se imponga, 
habr&aacute; un derecho de 
+comunicaci&oacute;n p&uacute;blica al acceder a internet, incluso desde tu 
casa y alguien tendr&aacute; que pagarlo.<br>
+En Espa&ntilde;a algunas empresas puntocom pretenden hacer la competencia a 
las discogr&aacute;ficas 
+tradicionales, comerciando con los derechos intelectuales de m&uacute;sicos y 
vendiendo las canciones 
+en formato comprimido a trav&eacute;s de internet, la gran mayor&iacute;a de 
ellas, pagan el canon de comunicaci&oacute;n p&uacute;blica mediante acuerdos 
con alguna entidad de gesti&oacute;n.Esto no ha hecho mas que comenzar y antes 
o despues, esas entidades exigir&aacute;n el pago de TODAS las obras 
intelectuales, no s&oacute;lo la m&uacute;sica.
+Como consumidores podemos intentar pararlo, adquiriendo la m&uacute;sica 
directamente a trav&eacute;s de la p&aacute;gina personal del m&uacute;sico y 
no de una sumisa puntocom.<br>
+Internet no es s&oacute;lo comunicaci&oacute;n, como lo fue la imprenta o el 
telegrafo, la velocidad de 
+esa comunicaci&oacute;n y la interacci&oacute;n individual que ofrece es lo 
realmente revolucionario.
+Cuando la gente pone en internet, fotos de sus vacaciones, la 
descripci&oacute;n de alg&uacute;n 
+experimento sobre qu&iacute;mica, un poema, un chiste o un cuentecillo, no 
esta pensando en la 
+remuneraci&oacute;n de la copia privada o la comunicaci&oacute;n 
p&uacute;blica.Mucho menos en afiliarse, de forma obligatoria, a una entidad de 
gesti&oacute;n para poder cobrar esos derechos.<br>
+En mi opini&oacute;n, al considerar los derechos de remuneraci&oacute;n de 
copia privada o el de 
+comunicaci&oacute;n p&uacute;blica como irrenunciables e inalienables, se 
estan vulnerando derechos 
+constitucionales como el derecho a la libertad de emprensa y a la libre 
asociaci&oacute;n, sin 
+causa justificada ya que el autor no puede negociar por s&iacute; mismo y 
s&oacute;lo puede cobrar si 
+se afilia a una entidad de gesti&oacute;n.<br>
+En la pr&aacute;ctica, eso significa que se le concede un derecho para 
inmediatamente expropiarselo, 
+en favor de una entidad de gesti&oacute;n, que le compensar&aacute; 
s&oacute;lo si es afiliado.<br>
+En todo caso, al afectar a derechos fundamentales,seg&uacute;n el 
art&iacute;culo 81 de la 
+Constituci&oacute;n, se podr&iacute;a entender que debe ser regulado por ley 
org&aacute;nica y no en una ley ordinaria como la LPI.Esto implicar&iacute;a la 
necesidad de mayor&iacute;a absoluta en el Congreso para regular estos derechos.
+
+Mientras tanto, Alemania es el &uacute;nico pais de la Uni&oacute;n Europea, 
que ha introducido los 
+recargos al comprar ordenadores desde principios de a&ntilde;o, dado su peso 
en la Uni&oacute;n 
+Europea no es descartable que para evitar una distorsi&oacute;n en el mercado 
interior de la 
+Uni&oacute;n, presionen con su particular razonamiento, hasta conseguir una 
armonizaci&oacute;n en 
+toda Europa mediante una Directiva sobre la materia, de esta forma todos los 
Estados 
+que componen la Uni&oacute;n Europea tendr&iacute;an que incorporar en sus 
legislaciones nacionales 
+las medidas impuestas en esa Directiva.<br>
+En Francia, la Ministra de Cultura, Catherine Tasca, para justificar la 
medida, declar&oacute; en 
+en una entrevista a Le Figaro:" Parece que el nacimiento de las nuevas 
tecnolog&iacute;as ha 
+perjudicado las ganancias de los artistas...no hay modelo de negocio para la 
cultura a 
+menos que los artistas sean pagados.Sin ellos no hay ni m&uacute;sica ni 
imagenes de video."
+Esta mentalidad es incomprensible y bastante decepcionante cuando procede de 
+Gobiernos que dicen apoyar el sistema operativo GNU/LINUX y los programas 
+libres.
+
+Al contrario que los programas que mencione antes y que son cerrados o 
propietarios 
+porque no se distribuyen con el c&oacute;digo fuente,el software libre tiene 
como 
+caracter&iacute;stica diferenciadora el distribuirse sin ocultar esas fuentes 
y concederte a
+dem&aacute;s tres libertades:<br>
+-Libertad para usar el programa:No hay una licencia que te limite la 
instalaci&oacute;n a un 
+n&uacute;mero determinado de ordenadores, puedes usarlo en tantos ordenadores 
como quieras.<br>
+-Libertad para modificarlo:Con el c&oacute;digo fuente no s&oacute;lo puedes 
ver que hace el 
+programa o como funciona, tambi&eacute;n puedes escribir cambios o escribir 
algo nuevo para 
+a&ntilde;adirselo y que el programa haga lo que quieras.<br>
+-Libertad para distribuirlo, modificado o no, con o sin &aacute;nimo de 
lucro:Las copias que 
+hagas puedes venderlas o puedes cobrar por instalarlo o hacerlo gratis si lo 
decides.<br>
+No es como los programas "shareware", en los que pagas despu&eacute;s de un 
per&iacute;odo de prueba, el programa libre no tiene por qu&eacute; ser gratis, 
adem&aacute;s incluye el codigo fuente que te permite leer el programa.Tampoco 
es exactamente como los programas "freeware" que son de libre 
distribuci&oacute;n y gratis, pero no te dan las fuentes, por eso no son free 
software.<br>
+La licencia BSD es un ejemplo de licencia libre o "free software", ya que 
cumple las tres premisas 
+anteriores, pero al contrario que la licencia GPL no te obliga a incluir las 
fuentes del 
+programa, como condici&oacute;n a cumplir para poder distribuir el 
programa.<br>
+El "Open Source" es un grupo que incide en las ventajas pr&aacute;cticas del 
free soft y admite 
+varias licencias como la GPL o la BSD, pero tambi&eacute;n otras como la 
"Artistic License".<br>
+Adoptaron el nombre "Open Source"porque en ingl&eacute;s "free software" puede 
significar software libre y software gratis y aunque el software libre puede 
ser vendido, pensaron que era un 
+nombre inconveniente y desafortunado para utilizarlo en el mundo de las 
empresas.<br>
+La Free Software Foundation, prefiere usar "free software" o software libre en 
vez de 
+"Open Source" y se concentra en los aspectos idealistas del copyleft con 
independencia 
+del resultado.<br>
+Esta fundaci&oacute;n, creada por Richard Stallman, considera que la BSD es 
software libre y 
+compatible con la GPL aunque no sea "copyleft", sin embargo, otras licencias 
que 
+se engloban como "Open Source", como la licencia "artistic license" no es 
compatible 
+con la GPL, por este motivo no es buena idea utilizar "Open Source" como 
sin&oacute;nimo de 
+"Free Software".<br>
+El objetivo de la Free Software Foundation era el desarrollo de un entorno de 
+programaci&oacute;n cuyas herramientas fuesen libres, esta es la raz&oacute;n 
por la que habla de 
+GNU/LINUX para referirse a este sistema operativo compuesto por el 
n&uacute;cleo del sistema 
+LINUX, liberado con la licencia GPL y las herramientas GNU.<br>
+GNU es una broma que significa GNU No es Unix, tambi&eacute;n es el nombre 
ingl&eacute;s de un 
+ant&iacute;lope africano,en espa&ntilde;ol, &Ntilde;&uacute;, que es la 
mascota de la Free Software Foundation.
+El software libre, es un ejemplo de la importancia de compartir el 
conocimiento como 
+medio para poder desarrollar m&aacute;s conocimiento.<br>&nbsp;
+<br>
+Se puede decir que el software libre cre&oacute; los programas que hacen 
funcionar internet y a la 
+vez, internet permiti&oacute; a miles de personas comunicarse por todo el 
planeta y crear ma&aacute;s 
+programas libres.<br>
+Esta filosof&iacute;a no puede obviarse o negarse por los gobiernos europeos, 
al tomar 
+decisiones que nos afectan, antes al contrario, no deber&iacute;an aprisionar, 
con una err&oacute;nea 
+aplicaci&oacute;n de las leyes vigentes, el esp&iacute;ritu de 
cooperaci&oacute;n que se establece en internet y que ha hecho posible que sea 
lo que es hoy.<br>
+El modelo hace tambalear el sistema tradicional de producir y consumir bienes 
+inmateriales como son los programas de ordenador y otras obras objeto de 
propiedad 
+intelectual, como la m&uacute;sica y la literatura.<br>
+Internet, entendido como suma de ordenador y comunicaci&oacute;n, implica el 
tratamiento 
+digital de las obras intelectuales,facilitando su reproducci&oacute;n 
m&aacute;s la comunicaci&oacute;n que hace que los costes de 
distribuci&oacute;n hayan casi desaparecido, porque no es necesario el 
transporte f&iacute;sico en el que la obra intelectual estaba fijada sino que 
esa obra se envia de un ordenador a otro, pudiendo ser esa comunicaci&oacute;n 
interactiva.<br>
+Cualquier autor puede escribir un libro o poner una galer&iacute;a virtual con 
sus fotos y 
+conseguir que sea accesible para cualquier persona con ordenador y 
conexi&oacute;n a internet, 
+este situado en su ciudad o en las ant&iacute;podas, incluso podr&aacute; 
conocer directamente y en un 
+tiempo record cual es la opini&oacute;n que merece su obra via correo 
electr&oacte;nico o hablar 
+sobre su creaci&oacute;n en un canal de IRC.<br>
+A pesar de todo esto, como vimos, hay quien piensa que en internet puede 
dirigirnos 
+inevitablemente al colapso de la producci&oacute;n de im&aacute;genes o video 
al no ser 
+recompensados los artistas.<br>
+Vivimos una epoca interesante en la que asistimos a una guerra a muerte entre 
intereses 
+contrapuestos y formas de concebir la vida bastante diferentes, al final o 
bien las antiguas 
+leyes que nos gobiernan comienzan a regir tambien el mundo de internet, 
trastocando sus 
+objetivos y funcionamiento iniciales o bien este mundo de internet se expande 
y liquida la 
+mentalidad y las formas que actualmente soportamos, dando lugar a nuevas leyes 
e 
+interpretaciones.<br>
+No nos confundamos, internet es una enorme fuente de riqueza econ&oacute;mica 
, de lo que se 
+discute ahora es sobre las reglas del viejo juego de como se crea la riqueza y 
quien se la 
+lleva.No es razonable que un s&oacute;lo jugador imponga sus reglas al resto 
de jugadores y al 
+p&uacute;blico, sobre todo cuando, aunque el sostenga lo contrario, no es 
imprescindible.<br>
+El viejo sistema de retribuci&oacute;n ya no es la &uacute;nica forma posible 
de crear obras 
+intelectuales, ni siquiera bajo el argumento de que algunas obras tienen 
m&aacute;s "calidad" que 
+otras.<br>
+Se puede hacer video digital y muy pronto habra cines donde no necesiten 
rollos de 
+pel&iacute;cula sino que podr&aacute;n recibir la obra "on-line", lo que no 
hay que hacer es 
+encarecer el acceso a esas tecnolog&iacute;as, subiendo los precios de los 
ordenadores o los soportes f&iacute;sicos donde las obras se fijan.<br>
+Cuanto m&aacute;s baratos sean los medios m&aacute;s posibilidades 
tendr&aacute;n las personas, incluso en paises no desarrollados, de poder crear 
esas obras intelectuales y de hacerlas accesibles 
+para el resto de los habitantes del planeta.<br>
+Hay algo que no podemos obviar y es que al haberse casi eliminado los costes 
de 
+reproducci&oacute;n, la propiedad intelectual es m&aacute;s inmaterial que 
nunca, esto significa que 
+podemos acceder a esa obra sin rivalizar con nadie, no es como un 
bol&iacute;grafo que s&oacute;lo 
+puede ser usado por una s&oacute;la persona cada vez.<br>
+Tambi&eacute;n hay que tener en cuenta que, al contrario que ese 
bol&iacute;grafo la propiedad 
+intelectual no se consume, es m&aacute;s, aumenta de valor cuanta m&aacute;s 
gente puede disfrutar de 
+ella.<br>
+No confundas valor y precio, es un gran error en el mundo del software libre y 
en cualquier 
+otro.<br>
+Un programa de ordenador que simule el comportamiento de una poblaci&oacute;n 
de 
+Leptinotarsa Decemlineata y su metabolismo, escrito por un cient&iacute;fico 
australiano y 
+puesto en internet, puede servir para mucha gente que vive en Argentina o en 
Sud&aacute;frica,
+podr&aacute;n leerlo y con su experiencia enriqueceran el valor del programa, 
el coste de 
+aportaci&oacute;n para ellos es m&iacute;nimo en comparaci&oacute;n con la 
posibilidad de disfrutar de esa obra intelectual completa de forma libre, a 
medida que pase el tiempo el programa 
+aumentar&aacute; en contenido, precisi&oacute;n y calidad.<br>
+Ese programa ser&aacute; extremadamente valioso para la industria de la patata 
que ser&aacute; 
+finalmente quien m&aacute;s se beneficie econ&oacute;micamente de ese estudio, 
ahorrandose millones 
+al poder conocer mejor las condiciones que disparan el n&uacute;mero de esos 
escarabajos que 
+se alimentan de patatas.<br>
+Pero los beneficios de ese trabajo no se pueden cuantificar tan 
f&aacute;cilmente, por eso la 
+informaci&oacute;n libre tiene un valor incalculable.<br>
+Entra dentro de lo posible que ese programa implemente un algoritmo que 
acelere las 
+investigaciones de un grupo cient&iacute;fico en Inglaterra que acabe teniendo 
una aplicaci&oacute;n 
+industrial completamente diferente.<br>
+Los sistemas de compensaciones y canones descritos en la Ley de Propiedad 
Intelectual 
+no ofrecen un sistema ni v&aacute;lido ni asumible para compensar el esfuerzo 
de los autores en 
+internet, pero hay que tener en cuenta que eso no tiene por que frenar la 
creaci&oacute;n y que 
+el coste de esa creaci&oacute;n, siempre dif&iacute;cil de medir, puede ser 
infinitamente menor mediante la cooperaci&oacute;n que con el sistema en el que 
pretenden aprisionarnos, por otro lado la 
+compensaci&oacute;n por esa labor puede ser obtenida por otros medios al 
margen de la venta 
+de los derechos de la obra intelectual en s&iacute misma y de forma mucho 
mayor y eficaz que 
+la que puedan hacer las entidades de gesti&oacute;n de derechos de autor.
+
+<CENTER>

+<STRONG>Pablo -dewaz- Usano

+<br>&nbsp;<a href="mailto:address@hidden";>address@hidden</a></STRONG>
+<br>&nbsp;Fuente: <a 
href="/Licencias/pagano.html">http://www.es.gnu.org/Licencias/pagano.html</a>
+</CENTER>

+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+26 Enero 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Tecnologia/formprop.html
===================================================================
RCS file: Opinion/Tecnologia/formprop.html
diff -N Opinion/Tecnologia/formprop.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Tecnologia/formprop.html    3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Los formatos propietarios y la UNED - Tecnologia - Art&iacute;culos de 
opini&oacute;n
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+ <H1>Los formatos propietarios y la UNED</H1>
+  En el n&uacute;mero del <A HREF="http://www.uned.es/bici";>BICI</A>
+  (Bolet&iacute;n Interno de Coordinaci&oacute;n Informativa, de la <A
+  HREF="http://www.uned.es";>UNED</A>) del <A
+  
HREF="http://www.uned.es/bici/Curso2000-2001/001009/sumario.html";>09/10/2000</A>,
+  se puede <A
+  lo siguiente</A>, relativo a una Junta de Gobierno convocada para el
+  27/10/2000: <I>"Si tiene alg&uacute;n punto que desee incluir,
+  deber&aacute; enviarlo antes del </I>[d&iacute;a, hora, direcci&oacute;n
+  de correo electr&oacute;nico]<I>, siguiendo los siguientes criterios: La
+  recepci&oacute;n de documentaci&oacute;n deber&aacute; ser en <B>WORD
+  97</B>, con las siguientes caracter&iacute;sticas: </I>[directrices
+  sobre el tipo de letra a utilizar, tama&ntilde;o de esta y
+  m&aacute;rgenes]<I>"</I>.
+
+  Este documento trata por ello de protestar y tratar de convencer, con el
+  arte de la palabra, el porqu&eacute; de la incoveniencia de usar los
+  formatos propietarios; los cuales pertenecen a una casa comercial y, por
+  tanto, est&aacute;n sujetos a intereses puramente econ&oacute;micos,
+  nada que ver con el propio inter&eacute;s de una universidad como la
+  UNED. Estos argumentos son tanto filos&oacute;ficos como
+  pr&aacute;cticos de por qu&eacute; no deben de utilizarse dichos
+  formatos, en este caso centrados en la directiva comentada
+  anteriormente.
+
+  Sobre dicho formato en concreto (Microsoft Word), se pueden hacer las
+  siguientes afirmaciones; que indican que no es, o al menos no
+  deber&iacute;a ser, apto para este tipo de casos (&iquest;quiz&aacute;
+  deber&iacute;a decir para ning&uacute;n caso?). Veamos:
+
+  <UL>
+       <LI><B>Pr&aacute;cticas monopol&iacute;sticas de Microsoft</B>
+
+   Por si no hab&iacute;a quedado ya claro y le quedaban dudas a alguien,
+       los tribunales estadounidenses han condenado a Microsoft por
+       pr&aacute;cticas de este tipo. Obligar a la gente a usar determinado
+       tipo de formato, contribuyendo con eso al monopolio, es de por
+       s&iacute; reprochable, y lo es a&uacute;n m&aacute;s si se promueve
+       desde instituciones p&uacute;blicas.
+
+   &iquest;C&oacute;mo puedo decir que se promueve? &iquest;No
+   estar&eacute; exagerando? Pues bien, para empezar escribir en este
+   formato no es posible sin tener el programa de dicha empresa, con lo
+   cual ya en un principio estamos contribuyendo al monopolio, y a los
+   bolsillos de sus address@hidden En segundo lugar, utilizar ese formato
+   significa tener que actualizar el programa en cada nueva
+   versi&oacute;n que salga, puesto que los formatos de distintas
+   versiones son incompatibles. Esto es: m&aacute;s copias vendidas,
+   enfado de address@hidden address@hidden, regocijo de address@hidden 
address@hidden de Microsoft al
+   seguir engordando sus cuentas y subir sus acciones de bolsa.
+
+   <LI><B>Comodidad para address@hidden address@hidden ... y sus derechos</B>
+
+   Este formato no es multiplataforma. Un documento de Word escrito en PC
+   da problemas para leerlo en un Mac, incluso con la misma
+   versi&oacute;n de ese formato; y ya he comentado en el anterior punto
+   la incompatibilidad entre versiones. En otras plataformas de hardware
+   ni hablar, por supuesto; y lo mismo para la gente que usa otros
+   sistemas operativos: GNU/Linux, BSD y otros de la familia Unix;
+   familias OS/2 y Macintosh ... &iquest;acaso no es esta una forma de
+   discriminaci&oacute;n?
+
+   Adem&aacute;s el programa necesario para generar este tipo de
+   documentos, Microsoft Word, es un programa que requiere unos enormes
+   (desproporcionados tambi&eacute;n servir&iacute;a) recursos de memoria
+   y de ciclos de la CPU, se est&aacute; pues condenando a address@hidden 
address@hidden a
+   desperdiciar su tiempo mirando a la pantalla mientras se espera a que
+   se cargue el programa, o mientras se interpreta el fichero, se salva
+   el documento, etc. Con computadores "antiguos" como los de hace unos 4
+   o 5 a&ntilde;os se convierte en todo un reto intentar usar el
+   programa.
+
+   <LI><B>Cuesti&oacute;n de seguridad</B>
+
+   La mayor&iacute;a de los virus actuales son virus de tipo macro, que
+   afectan y se difunden exclusivamente por medio de los documentos de
+   Microsoft Office (Word, Excel, etc). Estos virus se pueden transmitir
+   de forma voluntaria, o lo que es m&aacute;s grave, involuntaria; sin
+   conocimiento (ni por supuesto intenci&oacute;n) de la persona emisora,
+   ni la receptora incluso en algunos casos.
+
+   Por tanto, se est&aacute; introduciendo un factor de riesgo muy
+   importante que puede comprometer la seguridad de la
+   instituci&oacute;n. El uso de antivirus (otro gasto a&ntilde;adido) no
+   es demasiado eficaz en estos casos, como se ha demostrado muchas
+   veces. Es por ello un tanto irresponsable usar este formato, aunque
+   s&oacute;lo sea por cuestiones de seguridad.
+
+   Y adem&aacute;s al forzar a la persona que desea escribir ese
+   documento a utilizar este formato, se est&aacute; tambi&eacute;n
+   comprometiendo la seguridad del sistema que use para generarlo o
+   leerlo; que puede ser el de su casa, amistades, empresa, otra
+   instituci&oacute;n p&uacute;blica, etc.
+
+   <LI><B>Conveniencia del formato en si</B>
+
+   El formato Word no aporta nada nuevo. Existen formatos no
+   propietarios, y que adem&aacute;s son estables en el tiempo, que nos
+   ofrecen la misma funcionalidad, y est&aacute;n más extendidos: RTF (Rich 
Text
+   Format), PDF (Portable Document Format), PostScript, DVI (DeVice
+   Independent), HTML (HyperText Markup Language) ... Este &uacute;ltimo
+   especialmente por sus caracter&iacute;sticas de independencia de una
+   plataforma hardware, software o aplicaci&oacute;n espec&iacute;fica
+   para leerlo y escribirlo ha permitido que Internet sea hoy tal y como
+   la concebimos, sin &eacute;l la situaci&oacute;n actual ser&iacute;a
+   imposible.
+
+   Para este caso particular podr&iacute;amos decir, por las
+   caracter&iacute;sticas exigidas en la presentaci&oacute;n del
+   documento, que lo que se pretende es poder imprimir directamente el
+   documento que llegue para poder distribuirlo entre las personas
+   asistentes al acto. En este caso ser&iacute;a mucho m&aacute;s
+   pr&aacute;ctico alguno de los anteriormente citados, como el PDF,
+   PostScript o DVI.
+  </UL>
+
+ Por si esto fuera poco, queda la objeci&oacute;n m&aacute;s importante, y
+ la que es aplicable no s&oacute;lo al formato Word sin&oacute; a todos los
+ formatos propietarios: <B>atentado contra la libertad</B>. Esto tiene
+ relaci&oacute;n tambi&eacute;n con varias de las cosas dichas
+ anteriormente.
+
+ La persona que tiene necesidad o simplemente le apetece escribir
+ alg&uacute;n documento tiene el derecho de usar un formato no propietario,
+ pues lo contrario implica tener que ceder ante determinadas condiciones
+ impuestas por la empresa o particular que posea ese formato. Esto implica
+ en este caso que tiene que comprar y usar una determinada
+ aplicaci&oacute;n, en determidas plataformas hardware y software (en este
+ caso adem&aacute;s "se da la casualidad" de que la plataforma de software
+ es de la misma empresa).
+
+ Algo que en este caso es especialmente reprochable es que a la UNED se le
+ supone un car&aacute;cter p&uacute;blico. Pero el uso de formatos que
+ impidan que cualquier persona pueda acceder a la convocatoria que se cita
+ en el bolet&iacute;n, hace que se pueda dudar de dicho
+ car&aacute;rcter. Nadie est&aacute; diciendo que la UNED tenga un contrato
+ con Microsoft para poder lucrarse de forma delictiva, pero s&iacute; que
+ debe tener mucho m&aacute;s cuidados todos estos detalles, debido a la
+ especial forma de comunicaci&oacute;n entre sus &oacute;rganos: ser esta a
+ distancia, como su propio nombre indica.
+
+ Por ello reclamo para este caso y para otros que se puedan dar en la UNED
+ que se permita el uso de formatos no propietarios, puesto que
+ adem&aacute;s de respetar la libertad de las personas tienen una serie de
+ ventajas pr&aacute;cticas adicionales, del tipo de las que se le pueden
+ achacar al formato propietario Microsoft Word.
+
+ Recomiendo la lectura del interesant&iacute;simo art&iacute;culo <I>Trampa
+ en el ciberespacio</I> de Roberto Di Cosmo [<A
+ HREF="http://www.dmi.ens.fr/~dicosmo";>http://www.dmi.ens.fr/~dicosmo</A>],
+ que se puede encontrar en las siguientes direcciones: <A
+ 
HREF="http://www.mmedium.com/dossiers/piege";>http://www.mmedium.com/dossiers/piege</A>
+ (original, en franc&eacute;s), <A
+ 
HREF="http://www.sindominio.net/info/castilla/trampas.html";>http://www.sindominio.net/info/castilla/trampas.html</A>
+ (castellano). Trata sobre el monopolio de Microsoft y otras empresas, las
+ consecuencias que ya se est&aacute;n viviendo y las que pueden venir en un
+ futuro (con ejemplos en muchos &aacute;mbitos) ... y alternativas, por
+ supuesto.
+
+ Tambi&eacute;n me he basado en gran parte en el peque&ntilde;o pero
+ explicativo art&iacute;culo, <I>Por qu&eacute; no usar el formato Word
+ (.doc)</I>, que se puede encontrar en <A
+ 
HREF="http://sindominio.net/ayuda/word.shtml";>http://sindominio.net/ayuda/word.shtml</A>.
+
+ <H3>Agradecimientos</H3>
+ Agradecimiento especial a Marcos Serrano, compa&ntilde;ero de <A
+ HREF="sindominio.net/aluned">ALUNED</A>, por ayuda importante en la
+ redacci&oacute;n y revisi&oacute;n de este art&iacute;culo. Gracias Marcos
+ ;)
+
+ Quiero agradecer tambi&eacute;n a otra gente de <A
+ HREF="sindominio.net/aluned">ALUNED</A>, del proyecto <A
+ HREF="http://sindominio.net";>SinDominio</A> y a alguna otra gente
+ an&oacute;nima su ayuda, voluntaria o involuntaria, en la redacci&oacute;n
+ y/o revisi&oacute;n de este art&iacute;culo (address@hidden sabeis
+ qui&eacute;nes sois ;).
+
+ <HR>
+
+ Copyright &copy; 2000 Manuel A. Fern&aacute;ndez Montecelo, <A
+ HREF="mailto:address@hidden";>&lt;<EM>address@hidden</EM>&gt;</A>,
+ [<A
+ HREF="http://sindominio.net/~manuel";>http://sindominio.net/~manuel</A>]
+
+ Se permite (&iexcl;y animo a ello!) copiar y distribuir este
+ art&iacute;culo libremente por cualquier medio, siempre que se conserve
+ intacto, inclu&iacute;do este aviso de copyright. Las modificaciones
+ (traducciones es una variante de la modificaci&oacute;n) en todo caso
+ requieren permiso del autor.
+
+ El art&iacute;culo original acab&eacute; de escribirlo el 1/11/2000, la
+ versi&oacute;n original la puedes encontrar seguramente en <A
+ 
HREF="http://sindominio.net/~manuel/art/form_propietarios-UNED.html";>http://sindominio.net/~manuel/art/form_propietarios-UNED.html</A>,
+ si es que no he cambiado la localizaci&oacute;n de mi web o la estructura
+ de directorios ;)
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Opinion">Proyectos Software</A>
 | <A HREF="/Opinion/Empresa">Empresa</A>
 | <A HREF="/Opinion/Filosofia">Filosof&iacute;a</A>
 | <A HREF="/Opinion/Tecnologia">Tecnolog&iacute;a</A>
 | <A HREF="/Opinion/Legislacion">Legislaci&oacute;n</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Opinion/Tecnologia/index.html
===================================================================
RCS file: Opinion/Tecnologia/index.html
diff -N Opinion/Tecnologia/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Opinion/Tecnologia/index.html       3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,93 @@
+<HEAD>
+<TITLE>Art&iacute;culos de opini&oacute;n - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords"
+CONTENT="FSF/GNU Madrid,filial, GNU, FSF, Free Software Foundation, Linux, 
Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description"
+CONTENT="Desde 1983, desarroyando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertadde compartir 
y mejorar
+       el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+
+<CENTER><H1>GNU Madrid (Espa&ntilde;a)</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+ ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+ WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+<A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+<TR>
+ <TD>
+<h1><b>Art&iacute;culos de tecnolog&iacute;a</b></h1>
+<br>&nbsp;<br>
+<p>
+<ul>
+ <li>Tecnolog&iacute;a:
+     <a href="/Opinion/Tecnologia/formprop.html">Los formatos
+         propietarios y la UNED.</a>
+</ul>
+<br>&nbsp;<br>
+ </TD>
+<TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+<A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+30 Ene 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Prensa/index.html
===================================================================
RCS file: Prensa/index.html
diff -N Prensa/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Prensa/index.html   3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,385 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Notas de Prensa - P&aacute;gina Principal
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>Notas de Prensa de GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<H2>Grupos de traducci&oacute;n al castellano unificados en GNU 
Espa&ntilde;a</H2>
+<p>
+Se han unificado los dos grupos de traducci&oacute;n al castellano que hasta
+ahora exist&iacute;an en el Proyecto.
+<p>
+En GNU hasta ahora exist&iacute;an dos grupos de traducci&oacute;n al 
castellano: el
+de GNU Espa&ntilde;a, y el de traducci&oacute;n de webs al castellano. 
Despu&eacute;s de
+algunas conversaciones con el responsable de &eacute;ste &uacute;ltimo, hemos
+decidido unir ambos grupos en GNU Espa&ntilde;a, como el "grupo de 
traducci&oacute;n
+al castellano del Proyecto GNU". 
+<p>
+Con esta uni&oacute;n, el grupo de traducci&oacute;n pasar&aacute; a ser uno 
de los mas
+grandes de los del Proyecto: 95 voluntarios (53 de nuestro grupo, y 42
+del grupo de traducci&oacute;n de webs).
+<p>
+Creemos que la uni&oacute;n es tremendamente positiva para el Proyecto, y que
+potenciar&aacute; la realizaci&oacute;n de mas traducciones, disminuyendo al 
cero el
+riesgo de solapamiento.
+
+
+<H2>Replica al articulo de Javier Santo Orcero "La reestructuraci&oacute;n de
+la FSF", publicado en la revista Mundo Linux en el n&uacute;mero de Septiembre 
del 2001.</h2>
+<br>&nbsp;<br>
+Por Jose E. Marchesi <address@hidden>, Coordinador de GNU Espa&ntilde;a.
+<br>&nbsp;<br>
+Art&iacute;culo publicado en la revista Mundo Linux en el n&uacute;mero de 
Octubre del 2001.
+<hr>
+Bien, Sr. Orcero, su art&iacute;culo no tiene desperdicio.
+<br>
+Usted se refiere a un supuesto "<i>culto religioso</i>" como el punto 
d&eacute;bil
+de la FSF. No discuto su erudici&oacute;n en cuanto a materia religiosa,
+pero ciertamente no logro establecer ning&uacute;n punto en com&uacute;n entre
+la FSF, el proyecto GNU y cultos religiosos. 
+<br>&nbsp;<br>
+Si se refiere con tanto tremendismo a la autoridad moral que 
+tiene la FSF en los &aacute;mbitos relacionados con el software libre, 
+ciertamente esta autoridad existe. Pero hay que tener presente que se 
+trata de eso, una autoridad moral, y por tanto todo el mundo tiene 
+el derecho de adoptarla o no. Jam&aacute;s se me ocurrir&aacute; forzarle a 
adoptar
+nuestras ideas, Sr. Orcero, pero puede estar seguro de que si no lo
+hace las defendere frente a usted y frente a cualquier otro. Esa es
+la actitud de la FSF y el proyecto GNU con respecto a nuestra idea
+de software libre: le invitamos a compartirla y a trabajar con
+nosotros, y si usted opta por no hacerlo (esta en su derecho)
+evidentemente no espere que le demos la raz&oacute;n con una sonrisa.
+<br>&nbsp;<br>
+Un culto religioso, Sr. Orcero, se basa en dogmas y deja la raz&oacute;n al
+margen. La revoluci&oacute;n del software libre de la FSF, en contraste, ha 
+demostrado ser totalmente racional y pr&aacute;ctica. Comparar ambas cosas
+es caer en el sinsentido m&aacute;s absoluto, a&uacute;n con el deje de ironia
+que percibo en su art&iacute;culo. 
+<br>&nbsp;<br>
+Tal vez se haya preguntado por que la FSF disfruta de esta autoridad 
+moral de la que hablamos. Ciertamente, la FSF comenz&oacute; la 
revoluci&oacute;n
+del software libre, formalizando el mismo concepto. M&aacute;s adelante, 
+hizo pr&aacute;ctica la idea mediante las licencias libres, y las puso a
+disposici&oacute;n de los programadores/desarrolladores como un "<i>bien
+publico</i>". No satisfecha con ello, se dedico a obtener fondos para
+asi dotar de recursos al Proyecto GNU, que tambi&eacute;n es un "<i>bien 
+publico</i>". Actualmente, sigue dando soporte al proyecto, y gracias
+a ello se pueden mantener m&aacute;s de 1000 paquetes software que van desde
+la bash hasta el compilador gcc. Estas son las razones por las que 
+la FSF tiene esa autoridad moral, y desde luego son una buena 
+prueba de que la FSF se merece toda la confianza que se le pueda
+dar.
+<br>&nbsp;<br>
+En cuanto a la parte del articulo de OsOpinion, donde se atribuye una
+falta de perspectiva t&eacute;cnica a la FSF, y se la criminaliza por eso, 
+pone de manifiesto una gran confusi&oacute;n por parte del autor del
+art&iacute;culo, que usted parece compartir: el software libre no es
+la FSF. La FSF ha puesto su definici&oacute;n de software libre, y las
+licencias que la hacen pr&aacute;ctica, a disposici&oacute;n de quien quiera 
+utilizarlos. Evidentemente, son recursos que la FSF utiliza en
+su propio proyecto software: el Proyecto GNU, pero eso no implica
+que las directivas que rigen en el proyecto GNU deban aplicarse
+tambi&eacute;n en otros proyectos que desarrollen software
+libre. Sencillamente, la FSF no tiene ninguna autoridad t&eacute;cnica
+en otros proyectos que no sea el proyecto GNU. En cuanto a la
+posible influencia sobre otros proyectos, es siempre adoptada, 
+nunca impuesta (no puede serlo, dese cuenta). Si el proyecto GNU 
+decide pujar por una tecnolog&iacute;a X, y darle soporte y recursos 
(inform&aacute;ticos
+y humanos), usted no tiene por que hacer lo mismo,y mucho menos 
+criminalizarnos por ello. A&uacute;n as&iacute;, el decir que la FSF adolece 
de 
+falta de perspectiva t&eacute;cnica me parece un poco arriesgado. Pese a 
+que nos podemos equivocar en nuestras decisiones (que duda cabe) no 
+hay duda de que hasta ahora esa perspectiva ha demostrado ser
+suficiente. Vaya a www.gnu.org/software y mire.
+<br>&nbsp;<br>
+En cuanto a su alusi&oacute;n a Passport, el proyecto GNU y FreeDevelopers
+ya han tomado cartas en el asunto. Como he dicho antes, podemos
+equivocarnos, pero hemos reaccionado, Sr. Orcero. El Proyecto GNU,
+al menos, no parece necesitar ning&uacute;n tipo de reestructuraci&oacute;n 
para reaccionar. Que otros tomen ejemplo.
+<br>&nbsp;<br>
+Respecto a sus comentarios respecto a la broma de RMS y la credulidad
+de los componentes de la FSF y el proyecto GNU, s&oacute;lo espero que
+tenga presente que est&aacute; insultando la inteligencia de cientos de
+personas que hacen posible que usted disponga de un sistema,
+Sr. Orcero. ¿C&oacute;mo cree que el proyecto GNU y la FSF han llegado
+a d&oacute;nde est&aacute;n? ¿Gracias a la broma de San IGNUcius? Es usted un 
+ingenuo o un demagogo. Tanto la FSF como el proyecto GNU est&aacute;n 
+compuestos de gente, y muy compentente, que ni es ingenua ni fan&aacute;tica,
+y que toma decisiones. 
+<br>
+Adem&aacute;s la mayor&iacute;a son voluntarios, de esos de los que usted 
parece 
+querer erigirse como protector. Sepa que en el proyecto GNU todos 
+los voluntarios (ya mantengamos un paquete, coordinemos un proyecto, 
+escribamos documentaci&oacute;n, administremos una m&aacute;quina,  o 
realicemos 
+traducciones) tomamos nuestras decisiones, que luego se ponderan en 
+el resto del proyecto, como supongo pasar&aacute; en otras comunidades.
+<br>&nbsp;<br>
+Enterese, Sr. Orcero, en el proyecto GNU y la FSF no somos "<i>fieles
+seguidores</i>" de nadie, sino que seguimos nuestras ideas y las
+ponemos en pr&aacute;ctica. RMS es el presidente de la FSF, y tiene su
+importancia y es respetado. Pero somos muy conscientes (especialmente
+el mismo) de que el proyecto est&aacute; compuesto de mucha gente, y que
+es el trabajo de los voluntarios el que hay que facilitar y coordinar.
+<br>&nbsp;<br>
+En un pequenio aparte, Sr. Orcero, ese p&aacute;rrafo acerca del Ajatolah y 
+el Papa... realmente casi no puedo creer leer una falacia tan colosal,
+y una demagogia tan infinita, &uacute;nicamente para hacer ret&oacute;rica. 
Seamos
+serios, por favor.
+<br>&nbsp;<br>
+Me resulta curioso observar como atribuye de manera tan gratuita
+acciones y decisiones del proyecto GNU a RMS, como "<i>guerras
+personales</i>". Curioso y totalmente desafortunado, como le expongo:
+decisiones como adoptar GNOME y no KDE como escritorio oficial
+(es decir, como paquete software oficial GNU) son decisiones
+que ha tomado el proyecto GNU, no RMS. 
+<br>
+¿Qui&eacute;n es usted para afirmar que en GNU somos tan irresponsables como 
+para tomar una decisi&oacute;n tan importante en base al capricho de una
+persona, aunque sea RMS?
+<br>
+Todo lo contrario: nos basamos en criterios de libertad, oportunidad
+y calidad. Cuando las QT no eran libres, fallaba terminantemente el
+criterio de la libertad, y ahora que son libres y este criterio est&aacute;
+claro, hay que ponderar el de la oportunidad (asignar mantenedores y
+recursos a una pieza software como KDE es costoso, y queda por ver
+si vale la pena hacerlo con dos escritorios) y la calidad (en el
+que ciertamente KDE est&aacute; ganando puntos). ¿Se sorprender&iacute;a si le 
+dijeran que dentro de GNU hay una facci&oacute;n que aboga por que se incluya
+KDE como software oficial GNU? Pues la hay. Pero eso a usted no le
+importa, claro, en su fijaci&oacute;n de que San IGNUcius lo controla todo.
+<br>&nbsp;<br>
+Veo que la licencia BSD antigua fue otra "<i>guerra personal</i>" de RMS,
+seg&uacute;n usted. Vaya disparate. La licencia BSD antigua (la utilizada por
+BSD hasta 1999) era una licencia libre (y totalmente v&aacute;lida) pero
+ten&iacute;a un peque&ntilde;o problema, m&aacute;s pr&aacute;ctico que 
te&oacute;rico: la clausula de
+advertencia, que dec&iacute;a que cualquier advertencia mencionando el
+software deb&iacute;a incluir una frase particular:
+<blockquote>
+  <i><b>This product includes software developed by the University of
+  California, Berkeley and its contributors.</b></i>
+</blockquote>
+El problema estribaba en que muchos desarrolladores no copiaban la
+clausula de advertencia al pie de la letra, y cambiaban "<i>University
+of California</i>" por sus propias instituciones. Como resultado, 
+habia un mont&oacute;n de licencias diferentes, con frases diferentes. Esto
+de por si no era malo, pero si juntabas muchos programas BSD en 
+una distribuci&oacute;n (como un S.O.) habr&iacute;a que poner todas las frases
+en sendas advertencias. Esto era absurdo. 
+<br>&nbsp;<br>
+Pero tiene usted raz&oacute;n, sin duda: con su "<i>guerra personal</i>", RMS
+fastidio a la comunidad "<i>atacando</i>" sin piedad esas formas de
+advertencias, privando a los autores de distribuciones del placer
+de recopilar y mantener actualizada la inmensa lista de advertencias.
+Sin contar con que los "<i>fieles seguidores</i>" de la Universidad de
+California, en su fanatismo a San IGNUcius, eliminaron la clausula
+en 1999 a instancias de RMS. Si le leyera la gente de Berkeley,
+Sr. Orcero ...
+<br>&nbsp;<br>
+Parece que le encanta el tema '<i>Lucid Emacs/X Emacs</i>'. Pero como con el
+resto de sus ejemplos de "<i>guerras personales</i>" de RMS, yerra el tiro.
+A mediados de 1992 exist&iacute;an al menos tres versiones de Emacs
+diferentes (debido a que la FSF se demor&oacute; en sacar la version 19, y 
+otra gente implement&oacute; las mejoras previstas por su cuenta):
+GNU Emacs de la FSF, Lucid Emacs de Lucid Inc., y Epoch. Como es
+comun en GNU, GNU Emacs dispon&iacute;a de un grupo de desarrolladores y
+un mantenedor principal (que no era RMS, dicho sea de paso). RMS
+pertenec&iacute;a al grupo de desarrollo desde el principio, como es 
+natural tratandose de Emacs. En esa epoca, se lleg&oacute; a plantear
+el integrar las tres versiones para conformar lo que ser&iacute;a 
+Emacs 19. Curiosamente, los que mas impedimentos pusieron para
+ello no fueron RMS y la gente de GNU, sino Lucid. Se presentaron dos 
+tipos de problemas: administrativos y t&eacute;cnicos. 
+<br>&nbsp;<br>
+El problema t&eacute;cnico consist&iacute;a en que los desarrolladores de Lucid
+Emacs (Zawinski y la gente de Lucid) hab&iacute;an continuado el desarrollo
+de nuevas caracter&iacute;sticas sin contar con el grupo de desarrollo de
+GNU Emacs, y reimplementaron funciones que ya estaban hechas en
+GNU Emacs. El resultado fue que resultaba t&eacute;cnicamente complicado
+juntar las dos versiones. Al grupo de desarrolladores de GNU Emacs
+(incluido RMS) le gustaba muchas de las nuevas caracter&iacute;sticas
+presentes solo en Lucid Emacs, y por tanto RMS propuso a la gente
+de Lucid montar un plan para reescribir esas partes de modo que 
+se pudieran integrar en GNU Emacs. En definitiva, lo que planteaba
+era la integraci&oacute;n del c&oacute;digo de Lucid Emacs en GNU Emacs. La
+gente de Lucid se nego en redondo, argumentando que ser&iacute;a mejor
+hacerlo al reves: adaptar GNU Emacs a Lucid Emacs. Por tanto, no
+fue RMS quien se neg&oacute; a aceptar el trabajo de los chicos de Lucid, 
+sino que fueron ellos quien se negaron a adaptarlos a GNU Emacs.
+<br>&nbsp;<br>
+El problema administrativo consist&iacute;a en lo siguiente: la FSF aconseja
+que se le transfiera el copyright del software que mantiene el
+Proyecto GNU, pese a que no es obligatorio. Esto no implica en modo 
+alguno perder ning&uacute;n derecho, sino todo lo contrario: al ser software 
+GPL, la &uacute;nica prerrogativa que tiene el titular del copyright frente a 
otros
+desarrolladores se traduce en que es el &uacute;nico que puede tomar
+acciones legales en caso de la violacion de la licencia de su
+software. Si el copyright del software lo ostenta la FSF, entonces
+puede poner sus recursos para la defensa de dichas violaciones. En
+el caso de proyectos grandes (como el gcc y Emacs) se intenta que
+todas las piezas pertenecientes al mismo tengan el mismo titular
+de copyright (la FSF o quien sea), de modo que sea m&aacute;s robusto 
legalmente
+(se evita asi tener que contactar con todos los titulares y el
+papeleo de autorizaciones y dem&aacute;s consecuente). En el caso concreto de 
+GNU Emacs, resulta que sus fuentes ya ten&iacute;an el copyright a nombre
+de la FSF, y por tanto, siguiendo el criterio anterior, la FSF
+pidio a los desarrolladores de Lucid que transfirieran el titular
+del copyright de sus fuentes a la misma FSF. Usted seguramente 
interpretar&iacute;a
+esta peticion como algo diab&oacute;lico que obedec&iacute;a alg&uacute;n plan 
oculto por
+parte de la FSF, pero  creame, se trataba de que el software fuera
+m&aacute;s robusto legalmente. De nuevo, la gente de Lucid rechazo esta 
+medida, y la integraci&oacute;n de los Emacs no se llevo a cabo, con
+resultados de sobra conocidos. 
+<br>&nbsp;<br>
+¿Estas razones eran suficientes para no hacer la integraci&oacute;n? Para el
+grupo de desarrollo de GNU Emacs, s&iacute;. Y eso hay que respetarlo, 
a&uacute;n
+en la posibilidad de que se equivocaran. De nuevo es un error por su
+parte, Sr. Orcero,  atribuir a RMS todo el des/merito de una decisi&oacute;n 
+que tomo el grupo de desarrollo en su conjunto.
+<br>&nbsp;<br>
+Como ve, la historia no es tan desgarradora como usted quiere dar
+a entender. Me resulta graciosa la posici&oacute;n en la que usted deja
+al Sr. Zawinski : el pobre programador desde&ntilde;ado que lo deja todo
+para abrir una tasca en nosedonde. Sepa que el Sr. Zawinski
+lo dej&oacute; todo para comprarse el DNA Lounge, uno de los pubs/discotecas
+m&aacute;s famosos de San Franciso, d&oacute;nde sin duda ganar&aacute; 
m&aacute;s de diez
+veces lo que cualquier ingeniero o programador competente. 
+<br>&nbsp;<br>
+Su apreciaci&oacute;n sobre la reacci&oacute;n f&iacute;sica de RMS a la 
pregunta de si KDE y 
+QT bajo GPL es software libre deja de manifiesto una paranoia 
+que habia visto pocas veces antes. Sencillamente, no le creo. No
+creo que RMS pueda enfadarse, o le pueda molestar, que cualquier
+software sea libre. Esto obviamente es una cuesti&oacute;n de opiniones,
+y aqui le expreso la m&iacute;a (creo que conozco a RMS lo suficiente como
+para no equivocarme).
+<br>&nbsp;<br>
+Observo que le molesta especialmente que RMS exprese expl&iacute;citamente
+su apoyo a cierto software y su rechazo a otro. De hecho, har&iacute;a bien
+en replantearse "<i>si todos los proyectos bajo licencia GPL son
+iguales</i>". Pues ciertamente, no son iguales bajo el punto de vista 
+del proyecto GNU: unos son m&aacute;s rapidos y otros m&aacute;s lentos, unos 
m&aacute;s
+bonitos y otros m&aacute;s feos. Y RMS tiene autoridad t&eacute;cnica en el 
proyecto GNU
+como cualquier otro voluntario. Recuerde los tres criterios,
+Sr. Orcero, y ver&aacute; que el de la libertad no es el &uacute;nico (si bien 
es
+el m&aacute;s importante). Si ha quedado claro que esas decisiones las toma
+el proyecto GNU, y no RMS, diganos ahora que no tenemos derecho a
+elegir el software que mantenemos. Si yo escribo el Marchesi's C
+Compiler, es muy poco probable que sustituya al gcc, por m&aacute;s copyleft 
+y GPL que sea. Pero no se preocupe, puede estar seguro de que si el
+'mcc' llega a superar a 'gcc' en factores como tiempos de traducci&oacute;n y 
+optimizaci&oacute;n de codigo, no se nos caer&aacute;n los anillos y lo haremos
+paquete oficial. Mientras tanto, la recomendaci&oacute;n que me har&iacute;an 
desde 
+GNU es trabajar con ellos en el desarrollo de 'gcc', y de ese modo concentrar 
+esfuerzos. ¿No le parece razonable? ¿Tal vez le parecer&iacute;a otra 
"<i>guerra
+personal</i>" de RMS? Estoy seguro.
+<br>&nbsp;<br>
+S&iacute;, Sr. Orcero, ya sabemos que "<i>mucha gente desarrolla software libre
+para divertirse, en su tiempo libre</i>". Deber&iacute;a saber que el proyecto
+GNU est&aacute; integrado de gente como esa, aunque le cueste creerlo. 
Respecto a
+eso, pues, no tiene nada que ense&ntilde;arnos.
+<br>&nbsp;<br>
+En cuanto a la necesidad que usted proclama padece la FSF de
+reformarse, para "<i>poder hacer frente a los nuevos retos contra el
+software libre</i>", sepa que es muy probable que la FSF y el Proyecto
+GNU est&eacute;n en una posici&oacute;n inmejorable para percibir cuales son
+esos nuevos retos, y cual es la mejor manera de acometerlos.
+Lleva haciendo frente a retos muy diversos durante 17 a&ntilde;os con
+bastante &eacute;xito.
+<br>&nbsp;<br>
+En definitiva, Sr. Orcero, me reafirmo en mi opini&oacute;n inicial de que
+su art&iacute;culo no tiene desperdicio: usted llama idiotas a los
+cientos de voluntarios del proyecto GNU, llama idiota a la gente 
+simpatizante del software libre y el proyecto (esa que llena las 
+conferencias de RMS) y poco le falta para llamar idiota a medio
+mundo. S&oacute;lo me queda hacerle una recomendaci&oacute;n: ¿Qui&eacute;re 
cambiar la FSF 
+y el Proyecto GNU? Pues ingrese como voluntario y ayudenos a mejorarlo
+desde dentro (es nuestra tarea de todos los d&iacute;as). De ese modo, tal
+vez cambie su perspectiva acerca de la FSF y el Proyecto, y deje de ver 
+a San IGNUcius por todas partes, acept&aacute;ndolo como la simple broma
+que es.
+
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+28 Agosto 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/comenzarproyecto.html
===================================================================
RCS file: Proyectos/comenzarproyecto.html
diff -N Proyectos/comenzarproyecto.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/comenzarproyecto.html     3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Como comenzar un proyecto en GNU Espa&ntilde;a - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Como comienzo un proyecto en GNU Espa&ntilde;a?</H2>
+<br>&nbsp;<br>
+       <P>Para comenzar a utilizar los servicios que la GNU Espa&ntilde;a
+       en un proyecto, es necesario que conozcamos algunos detalles del
+       desarrollo, de la finalidad del proyecto, del estado....</p>
+<br>&nbsp;<br>
+       <p>Estos son los pasos a seguir para comenzar un proyecto 
+       software en la maquina <STRONG>es.gnu.org</STRONG>:</p>
+<br>&nbsp;<br>
+       <ol>
+       <li> Lea atentamente el documento
+          <a href="/Proyectos/normasproyectos.html">Normas de Proyectos</a>,
+          especialmente el apartado <STRONG>&iquest;Que es software GNU?
+          </STRONG>.</li>
+       <li> Envie a <a href="mailto:address@hidden";>address@hidden</a> o
+          rellena el <a href="/Proyectos/proyectox.html">formulario</a> para
+          infromarnos de algunos detalles del proyecto. La presentaci&oacute;n
+          deber&aacute; incluir al menos los siguientes apartados:<br>
+          <br>
+<br>&nbsp;<br>
+          <ul>
+          <li> Un peque&ntilde;o resumen (de unas cuantas lineas)
+            acerca de la funcionalidad de tu proyecto. Ejemplo:<br>
+                <br>
+                <STRONG>
+                el Proyecto X consiste en el desarrollo de un sistema
+        modular de programas cliente,<br> que se comuniquen entre
+                si por un sistema de mensajes y buzones, que funcione
+                en<br> sistemas GNU/Linux.
+                </STRONG></li>
+      <li> Indicar en que lenguaje o lenguajes en los que planea
+        implementar el proyecto, asi como las librerias o paquetes
+        necesarios para el desarrollo y el funcionamiento del mismo.
+            Ejemplo:<br>
+                <br>
+                <STRONG>
+                El Proyecto X sera implementado en INTERCAL, y en el caso
+                de a&ntilde;adir extensibilidad,<br> el lenguaje para 
+                implementar las extensiones sera GUILE. Este paquete necesita
+            la libreria ncurses, el paquete ssh >= 1.3.1.
+                </STRONG></li>
+          <li> Caracter del proyecto respecto a colaboradores.
+             . Ejemplo:
+             <br><br>
+                 <STRONG>
+                 El Proyecto X sera de caracter abierto en cuanto a 
+                 colaboradores.<br>Necesitare mucha ayuda, tanto para
+                 documentacion como para dise&ntilde;o e 
implementaci&oacute;n.<br>
+                 </STRONG></li>
+          <li> Estimaci&oacute;n de los recursos maquina que se 
+             necesitar&aacute;n para el proyecto. Ejemplo:<br><br>
+                 <STRONG>
+                 Para realizar el proyecto X, voy a necesitar como minimo
+                 cuenta para el responsable,<br> ftp, cvs y acceso web a los
+             recursos para mis colaboradores<br>
+         Ademas, varias listas
+                 de correo (como proyectoX-bugs, proyectoX-help, etc).
+                 </STRONG></li>
+      <li> Datos de contacto del responsable de proyecto y los colaboradores
+         que esten registrados, asi como las necesidades de cada uno
+         en las maquinas de la filial. Ejemplo:<br><br>
+         <STRONG>
+             Responsable de proyecto: Jose Juan Luis Manuel de todos los 
santos<br>
+         e-mail: address@hidden<br>
+         Necesita cuenta en las m&aacute;quinas de la GNU Espa&ntilde;a<br>
+         <br>
+         Colaborador: Pepe Luis de la Cruz de los Vientos<br>
+         e-mail: address@hidden<br>
+         Necesita cuenta de correo en es.gnu.org
+         </strong></li>
+<br>&nbsp;<br>
+          </ul><br><br>
+        <li> Esperar a recibir m&aacute;s instrucciones. 
+       </ol>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+1 Jul 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/form-test.html
===================================================================
RCS file: Proyectos/form-test.html
diff -N Proyectos/form-test.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/form-test.html    3 Mar 2012 06:14:07 -0000       1.1
@@ -0,0 +1,17 @@
+<html>
+<head>
+<title>prueba de formmail</title>
+</head>
+
+<body>
+Escribir una direccion de correo y el texto que se quiere enviar:
+
+<p>
+<form action="/cgi-bin/formmailes.cgi" method=post>
+<input type=hidden name=email value="address@hidden">
+Direccion de envio: <input type=text name=recipient><br>
+Texto a enviar: <input type=text name=texto><br>
+<input type=submit value="    Enviar    ">
+</form>
+</body>
+</html>

Index: Proyectos/index.html
===================================================================
RCS file: Proyectos/index.html
diff -N Proyectos/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/index.html        3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>P&aacute;gina Principal - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Qu&eacute; es la Coordinaci&oacute;n de Proyectos
+       Software?</H2>
+<br>&nbsp;<br> En la coordinaci&oacute;n de proyectos software nos
+       dedicamos a dar soporte a los desarrolladores de sofware de
+       habla hispana para que puedan dar a conocer sus proyectos GPL
+       y GNU en nuestra plataforma.  Asignamos a cada proyecto una
+       cuenta en nuestras m&aacute;quinas, una direcci&oacute;n web
+       para establecer la p&aacute;gina de su proyecto y acceso a
+       bases de datos, repositorios cvs, ftp anonimo, etc. Con estas
+       ayudas pretendemos que no se pierdan los desarrollos de habla
+       hispana.  ya que a partir de ahora cuentan con una plataforma
+       para coordinar a sus posibles voluntarios y darse a conocer en
+       el mundo del software libre.<br>&nbsp;
+       <br>
+       
+       Si quiere colaborar en esta coordinaci&oacute;n, trabajar con
+       nosotros desarrollando alg&uacute;n proyecto de los que
+       tengamos abiertos o proponernos un proyecto nuevo, puede
+       rellenar el siguiente
+       <a href"/Proyectos/solicitudes.html">formulario</a> y alguien
+       de la coordinaci&oacute;n de proyectos software se
+       pondr&aacute; en contacto con usted tan pronto como le sea
+       posible.<br>&nbsp;
+       <br>
+<hr>
+       <div align=center><a
+   href="/Proyectos/comenzarproyecto.html"><H2><u>&iquest;Como
+   comienzo un proyecto en GNU Espa&ntilde;a?</u></H2></a></div>
+<hr>
+       <H2>Proyectos software en es.gnu.org</H2>
+<br>&nbsp;<br> Estos son los proyectos que se est&aacute;n
+   desarrollando en GNU Espa&ntilde;a.  Visite las p&aacute;ginas de
+   los mismos, eche un vistazo, baje los programas y si encuentra
+   alguno que le guste, ofrezca su colaboraci&oacute;n al responsable
+   del proyecto.<br>
+       <br>
+       <ul>
+       <li> <a href="/Proyectos/Acm/index.html">ACM</a> El simulador
+       de combate a&eacute;reo bajo GNU/Linux. Es multijugador y
+       funciona en X Window. <br>
+       <br>
+
+       <li> <a href="/Proyectos/Gtt/index.html">GTT</a> (T)rust (T)o
+       (T)rust protocol. Cliente y servidor que implementan un
+       protocolo cuya funcionalidad b&aacute;sica es la de compartir
+       cierta informaci&aacute;n entre grupos de usuarios en
+       m&aacute;quinas que usan IP din&aacute;micas (internet). En
+       estado inicial de desarrollo.<br>
+       <br>
+
+       <li> <a href="/Proyectos/Mecagtk/index.html">MecaGTK</a>
+       Programa en GTK que sirve de apoyo para aprender
+       mecanograf&iacute;a.<br>
+       <br>
+
+       <li> <a href="/Proyectos/Nemesis/index.html">Nemesis</a>
+       Conjunto de aplicaciones en red para Windows (se busca apoyo
+       para portabilidad).<br>
+       <br>
+
+        <li> <a href="/Proyectos/Telejano/index.html">Telejano</a>
+        Motor 3D tipo Quake para desarrollo de videojuegos libres en
+        Windows.
+       </ul>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+1 Jul 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/index2.html
===================================================================
RCS file: Proyectos/index2.html
diff -N Proyectos/index2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/index2.html       3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,74 @@
+<!--#include file="/cabecera.html" -->
+
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Qu&eacute; es la Coordinaci&oacute;n de Proyectos 
Software?</H2>
+<br>&nbsp;<br>
+       En la coordinaci&oacute;n de proyectos software nos dedicamos a dar
+       soporte a los desarrolladores de sofware de habla hispana para que
+       puedan dar a conocer sus proyectos GPL y GNU en nuestra plataforma.
+       Asignamos a cada proyecto una cuenta en nuestras m&aacute;quinas, una
+       direcci&oacute;n web para establecer la p&aacute;gina de su proyecto y
+       acceso a bases de datos, repositorios cvs, ftp anonimo, etc. Con estas
+       ayudas pretendemos que no se pierdan los desarrollos de habla hispana.
+       ya que a partir de ahora cuentan con una plataforma para coordinar a
+       sus posibles voluntarios y darse a conocer en el mundo del software
+       libre.<br>&nbsp;
+       <br>
+       
+       Si quiere colaborar en esta coordinaci&oacute;n, trabajar con nosotros
+       desarrollando alg&uacute;n proyecto de los que tengamos abiertos o
+       proponernos un proyecto nuevo, puede rellenar el siguiente
+       <a href"/Proyectos/solicitudes.html">formulario</a> y alguien de la
+       coordinaci&oacute;n de proyectos software se pondr&aacute; en
+       contacto con usted tan pronto como le sea posible.<br>&nbsp;
+       <br>
+<br>&nbsp;<br>
+       <a href="/Proyectos/comenzarproyecto.html"><H2>&iquest;Como comienzo
+   un proyecto en GNU Espa&ntilde;a?</H2></a>
+<br>&nbsp;<br>
+       <H2>Proyectos software en es.gnu.org</H2>
+<br>&nbsp;<br>
+   Estos son los proyectos que se estan desarrollando en GNU Espa&ntilde;a. 
+       Visite las paginas de los mismos, eche un vistazo, baje los programas
+       y si encuentra alguno que le guste, ofrezca su colaboraci&oacute;n al
+       responsable del proyecto.<br>
+       <br>
+<br>&nbsp;<br>
+       <ul>
+       <li> <a href="/Proyectos/Acm">ACM</a> El simulador de combate 
a&eacute;reo bajo 
+       GNU/Linux. Es multijugador y funciona en X Window. <br>
+       <br>
+<br>&nbsp;<br>
+       <li> <a href="/Proyectos/Gtt">GTT</a> (T)rust (T)o 
+       (T)rust protocol. Cliente y servidor que implementan un protocolo 
+       cuya funcionalidad basica es la de compartir cierta informacion entre
+       grupos de usuarios en maquinas que usan IP dinamicas (internet). En 
+       estado inicial de desarrollo.<br>
+       <br>
+<br>&nbsp;<br>
+       <li> <a href="/Proyectos/Mecagtk">MecaGTKT</a> Programa
+       en GTK que sirve de apoyo para aprender mecanograf&iacute;a.<br>
+       <br>
+<br>&nbsp;<br>
+       
+       </ul>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+<!--#include file="/pie.html" -->

Index: Proyectos/normas.html
===================================================================
RCS file: Proyectos/normas.html
diff -N Proyectos/normas.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/normas.html       3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,237 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Normas para el desarrollo de proyectos software - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>Normas de desarrollo de Proyectos Software en GNU
+       Espa&ntilde;a</H2> La Coordinaci&oacute;n de Proyectos
+       Software fomenta y facilita el desarrollo de Software Libre,
+       ofreciendo servicios t&iacute;picos de hosting, como cuentas
+       shell, espacio ftp an&oacute;nimo, repositorio CVS, etc. Sin
+       embargo, es preciso fijar unas normas de utilizaci&oacute;n de
+       dichos recursos, para conseguir una utilizaci&oacute;n
+       eficiente de nuestras m&aacute;quinas.<br>&nbsp;
+       <br>
+
+       El desarrollo que se lleve a cabo en las maquinas de la filial
+       tiene, por obligaci&oacute;n ineludible, que acogerse a alguna
+       de las licencias que la Free Software Foundation considera
+       "Licencias Libres".  Si tiene dudas acerca del grado de
+       libertad de su licencia, por favor, consulte a nuestro <a
+       href="/Licencias">Coordinador de Licencias</a>
+       <br>
+
+       <p><STRONG>&iquest;Qu&eacute; es software GNU?</STRONG><br>&nbsp;
+       <br>
+
+       El denominar a un programa software GNU significa que sus
+       desarrolladores y el proyecto GNU est&aacute;n de acuerdo en
+       que "Este programa es parte del proyecto GNU, desarrollado
+       bajo el auspicio de GNU", y especificarlo en el
+       programa.<br>&nbsp;
+       <br>
+
+       Esto significa que los desarrolladores est&aacute;n de acuerdo
+       en prestar atenci&oacute;n para que el programa trabaje bien
+       con el resto del sistema GNU, y como contrapartida el proyecto
+       GNU exigir&aacute; a otros responsables de software GNU poner
+       atenci&oacute;n en que sus programas trabajen bien con el
+       programa en cuesti&oacute;n.<br>&nbsp;
+       <br>
+
+       El significado de "trabajar bien con el resto del sistema"
+       depende realmente de lo que el programa haga, pero hay unos
+       pocos principios generales. Ciertas partes de los
+       est&aacute;ndares de codificaci&oacute;n de GNU afectan
+       directamente a la consistencia del sistema entero. Esto
+       incluye los est&aacute;ndares de configuraci&oacute;n y
+       compilaci&oacute;n del programa, y los est&aacute;ndares de
+       opciones en l&iacute;nea de comandos. Es importante que todos
+       los programas GNU sigan estos est&aacute;ndares, siempre que
+       sea posible.<br>&nbsp;
+       <br>
+
+       Otro importante estandar GNU es que los programas GNU deben
+       incluir su documentaci&oacute;n en formato Texinfo. Este es el
+       estandar GNU para la documentaci&oacute;n, y puede ser
+       traducido autom&aacute;ticamente a otros formatos.<br>&nbsp;
+       <br>
+
+       Si un programa GNU quiere ser extensible, debe utilizar
+       <A HREF="http://www.gnu.org/software/guile/guile.html";> GUILE </A> como
+       el lenguaje de programaci&oacute;n para efectuar las extensiones.
+       Si el programa no utiliza GUILE actualmente, deber&iacute;a existir
+       por lo menos una firme voluntad de que lo soporte en el futuro.
+       <br>&nbsp;
+       <br>
+
+       Un programa GNU no debe recomendar la utilizaci&oacute;n de
+       ning&uacute;n programa no-libre, y tampoco a ninguna
+       documentaci&oacute;n de software no libre. La necesidad de
+       documentaci&oacute;n libre distribuida con el software libre
+       es una postura seria del proyecto GNU. Para reforzar esta
+       postura, no debemos contradecirnos al recomendar la
+       utilizaci&oacute;n de documentaci&oacute;n no libre.<br>&nbsp;
+       <br>
+
+       Ocasionalmente se presentan cuestiones de terminolog&iacute;a,
+       que son importantes para el avance del proyecto GNU como un
+       todo. Por lo tanto, requerimos a los responsables de programas
+       GNU el seguir ciertos convenios de terminolog&iacute;a. Por
+       ejemplo, los ficheros de documentaci&oacute;n y los
+       comentarios en el programa deben referirse a sistemas GNU
+       basados en Linux o sistemas GNU/Linux, en lugar de referirse
+       al sistema entero como "Linux", y se debe utilizar el
+       t&eacute;rmino "Software Libre" en lugar de "Open
+       Source". <br>&nbsp;
+       <br>
+
+       El que un programa sea software GNU no requiere necesariamente
+       el transferir su copyright a la FSF. Esta es otra
+       cuesti&oacute;n. Si el responsable del software transfiere el
+       copyright a la FSF, entonces la FSF procurar&aacute; que se
+       aplique la licencia GPL si alguien viola sus
+       t&eacute;rminos. Si el responsable mantiene el copyright,
+       entonces la responsabilidad de que se cumplan los
+       t&eacute;rminos de la licencia ser&aacute; responsabilidad
+       suya.
+
+       <p>Las normas sobre desarrollo de software seg&uacute;n los
+       est&aacute;ndares GNU se encuentran en <a
+       href="http://www.gnu.org/prep/standards_toc.html";>GNU Coding
+       Standards</a> (en ingl&eacute;s).
+
+       <p><STRONG>Responsable de Proyecto</STRONG><br>&nbsp;
+       <br>
+
+       Cada proyecto deber&aacute; tener un responsable, quien
+       habitualmente ser&aacute; el que registre el proyecto
+       inicialmente. Este responsable ser&aacute; el encargado de
+       comunicarse con la Coordinaci&oacute;n de Proyectos
+       Software.<br>&nbsp;
+       <br>
+
+       Adem&aacute;s, deber&aacute; responsabilizarse de la correcta
+       utilizaci&oacute;n del sistema por parte de sus
+       colaboradores.<br>&nbsp;
+
+       <p><STRONG>Colaboradores de un proyecto</STRONG><br>&nbsp;
+       <br>
+
+       Un responsable de proyecto puede tener colaboradores, los
+       cuales pueden acceder a los recursos del proyecto que el
+       responsable ponga a su disposici&oacute;n, siempre v&iacute;a
+       web.<br>&nbsp;
+
+       <p><STRONG>Cuentas en la m&aacute;quina
+       es.gnu.org</STRONG><br>&nbsp;
+       <br>
+
+       Se abrir&aacute; una cuenta en nuestra m&aacute;quina por cada
+       proyecto en marcha. La utilizaci&oacute;n de la cuenta
+       deber&aacute; restringirse al responsable del proyecto, via
+       telnet o ssh.<br>&nbsp;
+       <br>
+
+       El responsable del proyecto tendr&aacute; a su
+       disposici&oacute;n una serie de recursos, tales como espacio
+       ftp an&oacute;nimo, repositorio CVS, listas de correo, base de
+       datos postgreSQL y herramientas de gesti&oacute;n de
+       proyectos.<br>&nbsp;
+       <br>
+
+       Adem&aacute;s se le proporcionar&aacute; diferentes
+       "templates" web de acceso a dichos recursos (por ejemplo, una
+       p&aacute;gina de recuperaci&oacute;n de material del CVS). El
+       responsable del proyecto ser&aacute; el &uacute;ltimo
+       responsable de la cuenta que se le abra en la filial, por lo
+       que deber&aacute; preocuparse de no publicar su password de
+       acceso a los recursos, ni transferir su cuenta a colaboradores
+       que no sean de su completa confianza.<br>&nbsp;
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+1 Jul 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/proyectox.html
===================================================================
RCS file: Proyectos/proyectox.html
diff -N Proyectos/proyectox.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/proyectox.html    3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyecto X - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Qu&iacute;ere colaborar?</H2>
+   <FORM METHOD=GET ACTION="/cgi-bin/FSFPronewproyect.pl">
+    Nombre: <INPUT NAME="Nombre" TYPE="TEXT"><br>
+    Nick: <INPUT NAME="Nick" TYPE="TEXT">
+        e-mail: <INPUT NAME="emilio" TYPE="TEXT" value="-Obligatorio-">
+<br>&nbsp;<br>
+       Resumen del proyecto<br>
+   <TEXTAREA NAME="Resumen" COLS=60 ROWS=10>
+       el Proyecto X consiste en el desarrollo de un sistema modular de 
programas cliente, que se comuniquen entre si por un sistema de mensajes y 
buzones, que funcione en sistemas GNU/Linux...
+   </TEXTAREA>
+<br>&nbsp;<br>
+       Requisitos de programaci&oacute;n del proyecto<br>
+   <TEXTAREA NAME="Programacion" COLS=60 ROWS=10>
+       El Proyecto X sera implementado en INTERCAL, y en el caso de 
a&ntilde;adir extensibilidad, el lenguaje para implementar las extensiones 
ser&aacute; GUILE. Este paquete necesita la libreria ncurses, el paquete ssh >= 
1.3.1...
+   </TEXTAREA>
+<br>&nbsp;<br>
+       Estimaci&oacute;n del caracter de colaboradores del proyecto<br>
+   <TEXTAREA NAME="Colaboradores" COLS=60 ROWS=10>
+       El Proyecto X sera de caracter abierto en cuanto a colaboradores.
+       Necesitare mucha ayuda, tanto para documentacion como para 
dise&ntilde;o e implementaci&oacute;n pero no ser&aacute; necesaria ayuda con 
el "hard code", pues soy un gran programador.
+   </TEXTAREA>
+<br>&nbsp;<br>
+       Estimaci&oacute;n de los recurrso de m&aacute;quina que necesita el
+       proyecto<br>
+   <TEXTAREA NAME="Recursos" COLS=60 ROWS=10>
+       Para realizar el proyecto X, voy a necesitar como minimo cuenta para el 
responsable, ftp, cvs y acceso web a los recursos para mis colaboradores.
+       Ademas, varias listas de correo (como proyectoX-bugs, proyectoX-help, 
etc). 
+   </TEXTAREA>
+<br>&nbsp;<br>
+       Contacto del responsable y colaboradores, asi como los recursos que
+       necesitar&aacute;n de la filial.<br>
+   <TEXTAREA NAME="Contacto" COLS=60 ROWS=10>
+Responsable de proyecto: Jose Juan Luis Manuel de todos los santos
+e-mail: address@hidden
+Necesita cuenta en las m&aacute;quinas de la GNU Espa&ntilde;a
+Colaborador: Pepe Luis de la Cruz de los Viento
+e-mail: address@hidden
+Necesita cuenta de correo en es.gnu.org
+   </TEXTAREA>
+<br>&nbsp;<br>
+   <INPUT TYPE="submit" VALUE="Enviar">
+   <INPUT TYPE="reset" VALUE="Limpiar formulario">
+   </FORM>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+9 Jul 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/proyhuerfanos.html
===================================================================
RCS file: Proyectos/proyhuerfanos.html
diff -N Proyectos/proyhuerfanos.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/proyhuerfanos.html        3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyectos Huerfanos  - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+  <H2>Proyectos sofware huerfanos</H2>
+  
+  Estos son algunos de los proyectos software abiertos que son susceptibles
+  de desarrollarse en la m&aacute;quina <STRONG>es.gnu.org</STRONG>.
+  <br>&nbsp;
+  <br>
+  Para mas informaci&oacute;n acerca del hosting ofrecido, lea las
+  <a href="/Proyectos/normas.html">normas de desarrollo de proyectos</a>,
+  y vea <a href="/Proyectos/comenzarproyecto.html">como comenzar un 
proyecto</a>
+  bajo la Coordinacion de Proyectos Software ofreciendo su adopci&oacute;n
+  del proyecto. Recibir&aacute; informaci&oacute;n detallada de los
+  servicios de hosting que ofrecemos, as&iacute; como instrucciones para
+  iniciarlo en <strong>es.gnu.org</strong><br>&nbsp
+  <br>
+  <ul>
+   <li>Proyecto de mantenimiento de <a 
href="http://www.gnu.org/software/goose/goose.html";>Goose</A>, una
+       librer&iacute;a C++ que proporciona funciones para tareas de
+       estad&iacute;stica computacional. Entre sus objetivos est&aacute;
+       portar toda la funcionalidad de la biblioteca a Guile.<br></li>
+       <br>
+       <li>Si es un buen programador de C y le interesan los n&uacute;cleos
+       de sistemas operativos, puede contribuir en el desarrollo de <a 
href="http://www.gnu.org/software/hurd";>GNU HURD</a>,
+       el kernel del sistema GNU.<br></li>
+       <br>
+       <li>Si le gusta Scheme, puede colaborar en el desarrollo de <a 
href="http://www.gnu.org/software/guile";>Guile</a>,
+       el lenguaje de extensibilidad del proyecto GNU. Tambi&eacute;n 
ser&iacute;a
+       deseable implementar lenguajes variados en Scheme, de manera que 
+       guile pueda hacer uso de ellos.<br></li>
+       <br>
+       <li>Ser&iacute;a muy &uacute;til disponer de un paquete de
+       conversi&oacute;n de programas escritos con MS Access a Scheme,
+       utilizando una base de datos libre, y la librer&iacute;a GTK.<br></li>
+       <br>
+       <li>Puede crear un proyecto de emulaci&oacute;n de Windows NT sobre
+       sistemas GNU, aunque ser&iacute;a deseable colaborar en alguno ya en
+       desarrollo, como <a href="http://www.willows.com";>Willows 
Twin</A>.<br></li>
+       <br>
+<br>&nbsp;<br>
+       <li>Puede desarrollar clones de programas de otros sistemas como
+       MS Windows, que se ejecuten en el sistema GNU.</li>
+  </ul>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+1 Jul 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/solicitudes.html
===================================================================
RCS file: Proyectos/solicitudes.html
diff -N Proyectos/solicitudes.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/solicitudes.html  3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Solicitud de voluntarios - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Qu&iacute;ere colaborar?</H2>
+    <form method=post action="/cgi-bin/formmailes.cgi">
+    <input type=hidden name=recipient value="address@hidden">
+    <input type=hidden name=redirect value="/Proyectos/index.html">
+<br>&nbsp;<br>
+    Nombre: <INPUT NAME="Nombre" TYPE="TEXT">
+<br>&nbsp;<br>
+    Nick: <INPUT NAME="Nick" TYPE="TEXT">
+   <br>
+   e-mail: <INPUT NAME="email" TYPE="TEXT">
+   <br>
+<br>&nbsp;<br>
+   <br>
+   Comentarios, sugerencias y voluntariado para la Coordinaci&oacute;n
+       de Proyectos Software<br>
+   <TEXTAREA NAME="TEXTO" COLS=60 ROWS=10>
+   </TEXTAREA>
+   <br>
+<br>&nbsp;<br>
+   <INPUT TYPE="submit" VALUE="Enviar">
+   <INPUT TYPE="reset" VALUE="Limpiar formulario">
+   </FORM>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/solicitudes.html">Colabore</A>
 | <A HREF="/Proyectos/normas.html">Normas de Proyectos</A>
 | <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+1 Jul 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Acm/index-en.html
===================================================================
RCS file: Proyectos/Acm/index-en.html
diff -N Proyectos/Acm/index-en.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Acm/index-en.html 3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>ACM, Multiaerial Combat Simulator - Coordinaci&oacute;n de Proyectos
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Acm">Acm</A>
 | <A HREF="/Proyectos/Acm/index-en.html">Acm (Ingles)</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<BR>
+       <H2>What is ACM?</H2>
+
+       ACM is an aerial combat simulator that works under GNU/Linux.
+
+       The most notable characteristics are:
+
+       <ol>
+       <li> It works under the X Window system.
+       <li> It allows multiplayer.
+       <li> It is extensible (aircrafts and sceneries).
+       <li> F16 and MIG by default.
+       <li> Two weapons type: missil and stream cannon.
+       <li> Reload of weapons and fuel in airport.
+       </ol>
+
+       <H2>How I obtain a copy of ACM?</H2>
+
+       You can download the latest version sources from the <STRONG>
+       /proyectos/acm/stable</STRONG> directory from the <a 
href="ftp://es.gnu.org";>ftp space</a>.
+
+       Also you can access to the <a 
href="http://es.gnu.org/cgi-bin/acm-cvsweb.pl";>cvs repository</a>, to follow 
the develop.
+
+       If you are a Debian user, you can download the .deb package from the
+       <a href="http://www.debian.org";>Debian official site</a>.
+
+       <H2>Mailing lists.</H2>
+       There is several mailing lists related to ACM. To subscribe to 
+       some list, you must send a message to 
<STRONG>"list-name"address@hidden</STRONG>, with the subject 
<STRONG>subscribe</STRONG>:
+
+       <CENTER>
+       Bugs reporting list: <STRONG>address@hidden</STRONG>
+       
+       Help list: <STRONG>address@hidden</STRONG>
+       
+       </CENTER>
+       
+
+       If you have any question or other think you can <a href="mailto: 
address@hidden">send me</a> a message.
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Acm">Acm</A>
 | <A HREF="/Proyectos/Acm/index-en.html">Acm (Ingles)</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+9 Dic 2000

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Acm/index.html
===================================================================
RCS file: Proyectos/Acm/index.html
diff -N Proyectos/Acm/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Acm/index.html    3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>ACM, Multiaerial Combat Simulator
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Acm">Acm</A>
 | <A HREF="/Proyectos/Acm/index-en.html">Acm (Ingles)</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Que es ACM?</H2>
+
+       <i>ACM</i> es un simulador de aviones de combate que funciona bajo 
+       GNU/Linux.
+
+       Sus caracteristicas mas notables son:
+
+       <ol>
+       <li> Funciona bajo X.
+       <li> Es multijugador.
+       <li> Extensible en cuanto a aviones y escenarios.
+       <li> F16 y MIG por defecto.
+       <li> Dos tipos de armamentos: misiles y ametralladora.
+       <li> Recarga de armamento y combustible en aeropuertos.
+       </ol>
+
+
+       <H2>&iquest;Como obtengo una copia de ACM?</H2>
+       Puedes bajarte las fuentes de la ultima version estable de ACM
+       del directorio <STRONG>/proyectos/acm/stable</STRONG> del <a 
href="ftp://es.gnu.org";>espacio ftp</a>.
+
+       Ademas puedes acceder al <a 
href="http://es.gnu.org/cgi-bin/acm-cvsweb.pl";>repositorio cvs</a>, para seguir 
el desarrollo.
+
+       En el caso de que utilices Debian, puedes descargar el paquete .deb 
+       de la <a href="http://www.debian.org";>pagina oficial de Debian</a>.
+
+       <H2>Listas de correo</H2>
+       Estan disponibles varias listas de correo relativas a ACM. Para 
+       suscribirte a cualquiera de ellas, manda un mensaje a 
+       <STRONG>"nombre-lista"address@hidden</STRONG>, con 
+       subject <STRONG>subscribe</STRONG>:
+
+       <CENTER>
+       Lista de reportes de bugs: <STRONG>address@hidden</STRONG>
+       
+       Lista de ayuda: <STRONG>address@hidden</STRONG>
+       
+       </CENTER>
+       
+
+       Para cualquier cosa relacionada con ACM, puedes <a href="mailto: 
+       address@hidden">mandarme</a> un mensaje.
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Acm">Acm</A>
 | <A HREF="/Proyectos/Acm/index-en.html">Acm (Ingles)</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+9 Dic 2000

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Acm/imagenes/acm.jpg
===================================================================
RCS file: Proyectos/Acm/imagenes/acm.jpg
diff -N Proyectos/Acm/imagenes/acm.jpg
Binary files /dev/null and /tmp/cvshZ4WBP differ

Index: Proyectos/Gtt/acerca.html
===================================================================
RCS file: Proyectos/Gtt/acerca.html
diff -N Proyectos/Gtt/acerca.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Gtt/acerca.html   3 Mar 2012 06:14:08 -0000       1.1
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>The GNU Trus to Trus project - Coordinaci&oacute;n de Proyectos - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, GTT, Trus, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Gtt">GTT</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<table width=80%>
+<tr>
+<td>
+ <center>
+ <img align=center src=images/logo.png>
+ </center>
+</td>
+</tr>
+<tr>
+<td>
+ <center>
+ [Spanish | <a href=en/index.html>English</a>]
+ </center>
+</td>
+</tr>
+</Table>
+<br>&nbsp;<br>
+<h2>¿Qu&eacute; es?</h2>
+Cuando te conectas a Internet a traves de alg&uacute;n ISP, normalmente este
+te proporciona una direcci&oacute;n IP din&aacute;mica, an&oacute;nima, sin 
que tu maquina tenga dominio, sin modo de que otra persona sepa si estamos 
on-line.
+Gtt soluciona esto proporcinando informaci&oacute;n sobre si estamos on-line o 
no y proporcionando un nombre a nuestra maquina para el conjunto de maquinas 
que formen nuestro grupo.  <br>
+<br>
+Respecto al nombre, bueno, "trus" es parte del argot de las personas que 
arrancamos el proyecto y equivale a decir colega o compa&ntilde;ero.
+<h2>¿Pero... eso no es igual que ICQ o AIM?</h2>
+No. Es cierto que hay actualmente servicios como el proporcionado por AOL, con 
su AIM, o el de ICQ, pero Gtt pretende algo diferente.
+
+Consideramos que dichas soluciones estan orientadas a maquinas "tontas"
+tratando de implementar muchos servicios en un mismo cliente, estado,
+mensageria, transferencia de ficheros, foros de chat, etc. Eso esta muy
+bien si te conectas a Internet desde una maquina que implemente poco mas
+que el soporte para navegar, pero si usas un sistema de tipo Unix como 
+GNU/Linux, quiza desees explotar todas sus posibilidades para solventar 
+esto: finger, clientes/servidores de ftp, acceso remoto al display de
+un serviodor X,... sin limitarte a las funcionalidades ofertadas
+por el cliente concreto.
+
+Otra cuesti&oacute;n es que evitamos depender de compa&ntilde;ias que otorgan 
+estos servicios, ya que si bien existen versiones libres de los clientes,
+la parte del servidor corre a cuenta de la corporaci&oacute;n y es software
+propietario.
+
+<h2>Ejemplo de su funcionalidad</h2>
+       Un usuario asigna a su maquina el nombre "skynet.gtt" ,
+       y usuario correspondiente a su grupo "hal9000.gtt".
+
+       Cuando los usuarios se conectan a Internet a trav&eacute;s de su
+       ISP este les otorga las direcciones IP din&aacute;micas:
+       193.140.113.40 y 193.140.120.68 respectivamente.
+       
+       Usan el cliente para conocer a trav&eacute;s del servidor Gtt en 
+       una maquina que si tiene una IP fija y generalmente nombre,
+       para conocer la IP dinamica de la otra persona.
+       
+       En cada una de las maquinas quedara localmente asociadas
+       las direcciones.
+       
+       <pre>
+193.140.113.40  a skynet.gtt
+192.130.120.68  a hal9000.gtt
+       </pre>
+       De este modo cuando el usuario de skynet.gtt, ejecuta
+       el comando:
+       
+       <pre>
+$ finger @hal9000.gtt 
+       </pre>
+       Obtiene respuesta como si de un dominio real se tratara,
+       a pesar de que no es as&iacute;.
+
+       <pre>
+[hal9000.gtt]
+Login     Name         Tty      Idle  Login Time   Office
+jorge     Jorgito Vk  *tty2     5:38  Dec 17 13:20
+jorge     Jorgito Vk  *tty3     5:28  Dec 17 13:24
+jorge     Jorgito Vk   ttyp0    1:14  Dec 17 13:23 (:0.0)
+jorge     Jorgito Vk   ttyp1    1:07  Dec 17 13:23 (:0.0)
+jorge     Jorgito Vk   ttyp2          Dec 17 18:26 (:0.0)
+root      root        *tty1     5:30  Dec 17 13:19
+       </pre>
+       Por tanto, por que no simplemente usar <i>talk address@hidden</i> si 
queremos
+       conversar o <i>ftp hal9000.gtt</i> para intercambiar ficheros.
+       
+       Cuando terminemos nuestra conexi&oacute;n a Internet esta 
asociaci&oacute;n se
+       pierde y estamos como al comienzo.
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Gtt">GTT</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+25 Dic 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Gtt/index.html
===================================================================
RCS file: Proyectos/Gtt/index.html
diff -N Proyectos/Gtt/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Gtt/index.html    3 Mar 2012 06:14:09 -0000       1.1
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>The GNU Trus to Trus project - Coordinaci&oacute;n de Proyectos - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, GTT, Trus, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Gtt">GTT</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<table width=80%>
+<tr>
+<td>
+ <center>
+ <img align=center src=images/logo.png>
+ </center>
+</td>
+</tr>
+<tr>
+<td>
+ <center>
+ [Spanish | <a href=en/index.html>English</a>]
+ </center>
+</td>
+</tr>
+</Table>
+<br>&nbsp;<br>
+<h2>¿Qu&eacute; es?</h2>
+Cuando te conectas a Internet a traves de alg&uacute;n ISP, normalmente este
+te proporciona una direcci&oacute;n IP din&aacute;mica, an&oacute;nima, sin 
que tu maquina tenga dominio, sin modo de que otra persona sepa si estamos 
on-line.
+Gtt soluciona esto proporcinando informaci&oacute;n sobre si estamos on-line o 
no y proporcionando un nombre a nuestra maquina para el conjunto de maquinas 
que formen nuestro grupo.  <br>
+<br>
+[<a href=acerca.html>leer m&aacute;s...</a>]
+
+<h2>Novedades - &Uacute;ltimos cambios</h2>
+<b>[Fri May  4 21:16:43 GMT 2001] </b>
+Estreno del repositorio con la primera versi&oacute;n de las fuentes de GTT.
+Todabia no es funcional y se correponde basicamente con la parte servidor
+pero se agracer&aacute;n comentarios y bug-reports ;)<br>
+<br>
+La &uacute;ltima version la podreis obtener siempre del repositorio,
+y el tarball perteneciente al <a 
href=snapshots/gtt-last-snapshot.tgz>&uacute;ltimo snapshot</a> aqu&iacute;.
+
+<h2>Informaci&oacute;n del Proyecto</h2>
+Sobre esta p&aacute;gina y las tareas de coordinaci&oacute;n puedes contactar 
con
+el <a href="mailto:address@hidden";>mantenedor</a>.
+<br>&nbsp;<br>
+ Actualmente este proyecto se encuentra en estado de
+ desarrollo pero ya esta disponible
+  el &uacute;ltimo snapshot a trav&eacute;s de <a 
href=http://es.gnu.org/cgi-bin/gtt-cvsweb.pl>CVS del Proyecto GTT</a>.
+<br>&nbsp;<br>
+ Al cargo del desarrollo actualmente:
+ <p>
+<ul>
+[ <b>cliente</b> ] Andres Curto Maldonado <a 
href="mailto:address@hidden";>address@hidden</a><br>
+[ <b>server</b> ] Jorge M&aacute;rtinez Garc&iacute;a <a 
href="mailto:address@hidden";>address@hidden </a>
+</ul>
+El proytecto es de caracter abierto y se pretende poder coordinar el mayor
+n&uacute;mero de colaboraciones posibles.
+<br>&nbsp;<br>
+<h2>Listas de correo</h2>
+Estan disponibles varias listas de correo relativas al proyecto. 
+Para suscribirte a cualquiera de ellas, manda un correo a
+<i><b>"nombre-lista"address@hidden</i></b>, 
+con <i>subject <b>subscribe</b></i> :
+<ul>
+<li>Lista de ayuda: <a href="mailto:address@hidden";>address@hidden</a>
+<li>Lista de bugs: <a href="mailto:address@hidden";>address@hidden</a>
+</ul>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Gtt">GTT</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+25 Dic 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Gtt/en/index.html
===================================================================
RCS file: Proyectos/Gtt/en/index.html
diff -N Proyectos/Gtt/en/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Gtt/en/index.html 3 Mar 2012 06:14:09 -0000       1.1
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>The GNU Trus to Trus project - Coordinaci&oacute;n de proyectos - GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Gtt">GTT</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+<table width=80%>
+<tr>
+<td>
+ <center>
+ <img align=center src=../images/logo.png>
+ </center>
+</td>
+</tr>
+<tr>
+<td>
+ <center>
+ [<a href=../index.html>Spanish</a> | English]
+ </center>
+</td>
+</tr>
+</table>
+<br>&nbsp;<br>
+<h2>What is it?</h2>
+<br>&nbsp;<br>
+When you go online on the Internet, your ISP gives you a dynamic IP address, 
whitout a domain or chance for anybody to know whether you are online or not. 
Gtt solves this problem storing and sharing information about our machine 
status (online/offline) and its name (or I should say the name you wanted for 
it).
+<br>&nbsp;<br>
+Regarding the project name, well, "trus" is a word that means folk
+or buddy, for the people who began this (pure slang), and sounds much
+like "trust to trust". Kind of double-meaning-stuff.
+<br>&nbsp;<br>
+<h2>But... isn't this the same as ICQ or AIM?</h2>
+No. It's true that there are services as AIM, provided by AOL, or ICQ, but 
Gtt's scope is a little bit different.
+<br>&nbsp;<br>
+We think those solutions are focused to dumb machines, trying to implement 
many services in the same client: status, messaging, file transfer, chat, etc. 
This is a good approach if you use a machine that almost only let you surf the 
web, 
+but if you are using a Unix type system, let's say GNU/Linux, with no other
+restrictions, perhaps you want to exploit all its possibilities and network 
services: finger, ftp clients/servers, remote access to a X display server, and 
so on. You will be limited no more by your software client and his features.
+<br>&nbsp;<br>
+Another reason to start this project is trying not to depend on the companies 
that are currently providing this kind of services. We know that there are free 
clients available, but what about the server side? That is propietary software.
+<br>&nbsp;<br>
+<h2>Functionality example</h2>
+       An user assigns his machine the name "skynet.gtt", another one uses 
"hal9000.gtt".
+       
+       When the users go online through their ISP, they get dymanic IP 
addresses, let's say: 193.140.113.40 and 193.140.120.68 respectively.
+<br>&nbsp;<br>
+       Each user uses the gtt client to get the info about his list of fellow 
gtt users, 
+and also submit his own info, dynamic IP and so on. This have to be 
+done using a gtt server which is running in a machine with static IP address.
+       
+       Now both machines had a local assign from dynamic IP to name gave by 
the users.
+<br>&nbsp;<br>
+       <pre>
+193.140.113.40 to skynet.gtt
+192.130.120.68 to hal9000.gtt
+       </pre>
+<br>&nbsp;<br>
+       So, when skynet.gtt's user executes the command:
+       
+       <pre>
+$ finger @hal9000.gtt 
+       </pre>
+<br>&nbsp;<br>
+       He gets the results <i>directly </i>from hal9000.gtt, as if he were 
dealing with a computer in a real domain.
+<br>&nbsp;<br>
+       <pre>
+[hal9000.gtt]
+Login   Name     Tty   Idle Login Time  Office
+jorge   Jorgito Vk *tty2   5:38 Dec 17 13:20
+jorge   Jorgito Vk *tty3   5:28 Dec 17 13:24
+jorge   Jorgito Vk  ttyp0  1:14 Dec 17 13:23 (:0.0)
+jorge   Jorgito Vk  ttyp1  1:07 Dec 17 13:23 (:0.0)
+jorge   Jorgito Vk  ttyp2     Dec 17 18:26 (:0.0)
+root   root    *tty1   5:30 Dec 17 13:19
+       </pre>
+       So, why not simply use <i>talk address@hidden</i> if we want to chat or 
<i>ftp hal9000.gtt</i> to transfer files, etc...
+       
+       When we go offline, the association between dynamic IP and computer 
name is lost and we are at the beggining again.
+<br>&nbsp;<br>
+<h2>About the Project</h2>
+If you want to know something more about this page and coordination tasks, 
+or want to join the developers, please email the <a 
href="mailto:address@hidden";>mantainer</a>.
+<br>&nbsp;<br>
+ Right now, this project is in early stage of development and there is not any 
available version yet.
+<br>&nbsp;<br>
+ Currently, the developers are:
+<br>&nbsp;<br>
+<ul>
+<li>Andres Curto Maldonado <a href="mailto:@es.gnu.org";>address@hidden</a>
+<li>Jorge M&aacute;rtinez Garc&iacute;a <a 
href="mailto:address@hidden";>address@hidden </a>
+</ul>
+<p>
+<br>&nbsp;<br>
+<h2>Mail lists</h2>
+There are two general mail lists. If you want to subscribe any of them (or 
both), send an email
+to <b><i>"list-name"address@hidden</i></b>, with the <i>subject 
<b>subscribe</b></i> :
+<br>&nbsp;<br>
+<ul>
+<li>Help list: <a href="mailto:address@hidden";>address@hidden</a>
+<li>Bugs list: <a href="mailto:address@hidden";>address@hidden</a>
+</ul>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Gtt">GTT</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+25 Dic 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Gtt/images/logo.png
===================================================================
RCS file: Proyectos/Gtt/images/logo.png
diff -N Proyectos/Gtt/images/logo.png
Binary files /dev/null and /tmp/cvsanBmwR differ

Index: Proyectos/Mecagtk/LICENCIA.txt
===================================================================
RCS file: Proyectos/Mecagtk/LICENCIA.txt
diff -N Proyectos/Mecagtk/LICENCIA.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/LICENCIA.txt      3 Mar 2012 06:14:09 -0000       1.1
@@ -0,0 +1,383 @@
+
+   #[1]Free Software Foundation [2]Proyecto GNU [3]LuCAS: biblioteca de
+   GNU/Linux en español
+   
+Licencia Pública GNU
+
+   Esta es la conocida GNU Public License (GPL), versión 2 (de junio de
+   1.991), que cubre la mayor parte del software de la Free Software
+   Foundation, y muchos más programas. La traducción al español ha sido
+   revisada por Richard Stallman, pero no tiene ningún valor legal, ni ha
+   sido comprobada de acuerdo a la legislación de ningún país en
+   particular.
+   
+   Los autores de esta traducción son:
+     * Jesús González Barahona
+     * Pedro de las Heras Quirós
+       
+   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+   
+   675 Mass Ave, Cambridge, MA 02139, EEUU
+   
+   Se permite la copia y distribución de copias literales de este
+   documento, pero no se permite su modificación.
+   
+Preámbulo
+
+   Las licencias que cubren la mayor parte del software están diseñadas
+   para quitarle a usted la libertad de compartirlo y modificarlo. Por el
+   contrario, la Licencia Pública General de GNU pretende garantizarle la
+   libertad de compartir y modificar software libre, para asegurar que el
+   software es libre para todos sus usuarios. Esta Licencia Pública
+   General se aplica a la mayor parte del software del la Free Software
+   Foundation y a cualquier otro programa si sus autores se comprometen a
+   utilizarla. (Existe otro software de la Free Software Foundation que
+   está cubierto por la Licencia Pública General de GNU para
+   Bibliotecas). Si quiere, también puede aplicarla a sus propios
+   programas.
+   
+   Cuando hablamos de software libre, estamos refiriéndonos a libertad,
+   no a precio. Nuestras Licencias Públicas Generales están diseñadas
+   para asegurarnos de que tenga la libertad de distribuir copias de
+   software libre (y cobrar por ese servicio si quiere), de que reciba el
+   código fuente o que pueda conseguirlo si lo quiere, de que pueda
+   modificar el software o usar fragmentos de él en nuevos programas
+   libres, y de que sepa que puede hacer todas estas cosas.
+   
+   Para proteger sus derechos necesitamos algunas restricciones que
+   prohiban a cualquiera negarle a usted estos derechos o pedirle que
+   renuncie a ellos. Estas restricciones se traducen en ciertas
+   obligaciones que le afectan si distribuye copias del software, o si lo
+   modifica.
+   
+   Por ejemplo, si distribuye copias de uno de estos programas, sea
+   gratuitamente, o a cambio de una contraprestación, debe dar a los
+   receptores todos los derechos que tiene. Debe asegurarse de que ellos
+   también reciben, o pueden conseguir, el código fuente. Y debe
+   mostrarles estas condiciones de forma que conozcan sus derechos.
+   
+   Protegemos sus derechos con la combinación de dos medidas:
+    1. Ponemos el software bajo copyright y
+    2. le ofrecemos esta licencia, que le da permiso legal para copiar,
+       distribuir y/o modificar el software.
+       
+   También, para la protección de cada autor y la nuestra propia,
+   queremos asegurarnos de que todo el mundo comprende que no se
+   proporciona ninguna garantía para este software libre. Si el software
+   se modifica por cualquiera y éste a su vez lo distribuye, queremos que
+   sus receptores sepan que lo que tienen no es el original, de forma que
+   cualquier problema introducido por otros no afecte a la reputación de
+   los autores originales.
+   
+   Por último, cualquier programa libre está constantemente amenazado por
+   patentes sobre el software. Queremos evitar el peligro de que los
+   redistribuidores de un programa libre obtengan patentes por su cuenta,
+   convirtiendo de facto el programa en propietario. Para evitar esto,
+   hemos dejado claro que cualquier patente debe ser pedida para el uso
+   libre de cualquiera, o no ser pedida.
+   
+   Los términos exactos y las condiciones para la copia, distribución y
+   modificación se exponen a continuación.
+   
+Términos y condiciones para la copia, distribución y modificación
+
+    1. Esta Licencia se aplica a cualquier programa u otro tipo de
+       trabajo que contenga una nota colocada por el tenedor del
+       copyright diciendo que puede ser distribuido bajo los términos de
+       esta Licencia Pública General. En adelante, «Programa» se referirá
+       a cualquier programa o trabajo que cumpla esa condición y «trabajo
+       basado en el Programa» se referirá bien al Programa o a cualquier
+       trabajo derivado de él según la ley de copyright. Esto es, un
+       trabajo que contenga el programa o una proción de él, bien en
+       forma literal o con modificaciones y/o traducido en otro lenguaje.
+       Por lo tanto, la traducción está incluida sin limitaciones en el
+       término «modificación». Cada concesionario (licenciatario) será
+       denominado «usted».
+       Cualquier otra actividad que no sea la copia, distribución o
+       modificación no está cubierta por esta Licencia, está fuera de su
+       ámbito. El acto de ejecutar el Programa no está restringido, y los
+       resultados del Programa están cubiertos únicamente si sus
+       contenidos constituyen un trabajo basado en el Programa,
+       independientemente de haberlo producido mediante la ejecución del
+       programa. El que esto se cumpla, depende de lo que haga el
+       programa.
+    2. Usted puede copiar y distribuir copias literales del código fuente
+       del Programa, según lo has recibido, en cualquier medio, supuesto
+       que de forma adecuada y bien visible publique en cada copia un
+       anuncio de copyright adecuado y un repudio de garantía, mantenga
+       intactos todos los anuncios que se refieran a esta Licencia y a la
+       ausencia de garantía, y proporcione a cualquier otro receptor del
+       programa una copia de esta Licencia junto con el Programa.
+       Puede cobrar un precio por el acto físico de transferir una copia,
+       y puede, según su libre albedrío, ofrecer garantía a cambio de
+       unos honorarios.
+    3. Puede modificar su copia o copias del Programa o de cualquier
+       porción de él, formando de esta manera un trabajo basado en el
+       Programa, y copiar y distribuir esa modificación o trabajo bajo
+       los términos del apartado 1, antedicho, supuesto que además cumpla
+       las siguientes condiciones:
+         a. Debe hacer que los ficheros modificados lleven anuncios
+            prominentes indicando que los ha cambiado y la fecha de
+            cualquier cambio.
+         b. Debe hacer que cualquier trabajo que distribuya o publique y
+            que en todo o en parte contenga o sea derivado del Programa o
+            de cualquier parte de él sea licenciada como un todo, sin
+            carga alguna, a todas las terceras partes y bajo los términos
+            de esta Licencia.
+         c. Si el programa modificado lee normalmente órdenes
+            interactivamente cuando es ejecutado, debe hacer que, cuando
+            comience su ejecución para ese uso interactivo de la forma
+            más habitual, muestre o escriba un mensaje que incluya un
+            anuncio de copyright y un anuncio de que no se ofrece ninguna
+            garantía (o por el contrario que sí se ofrece garantía) y que
+            los usuarios pueden redistribuir el programa bajo estas
+            condiciones, e indicando al usuario cómo ver una copia de
+            esta licencia. (Excepción: si el propio programa es
+            interactivo pero normalmente no muestra ese anuncio, no se
+            requiere que su trabajo basado en el Programa muestre ningún
+            anuncio).
+       Estos requisitos se aplican al trabajo modificado como un todo. Si
+       partes identificables de ese trabajo no son derivadas del
+       Programa, y pueden, razonablemente, ser consideradas trabajos
+       independientes y separados por ellos mismos, entonces esta
+       Licencia y sus términos no se aplican a esas partes cuando sean
+       distribuidas como trabajos separados. Pero cuando distribuya esas
+       mismas secciones como partes de un todo que es un trabajo basado
+       en el Programa, la distribución del todo debe ser según los
+       términos de esta licencia, cuyos permisos para otros
+       licenciatarios se extienden al todo completo, y por lo tanto a
+       todas y cada una de sus partes, con independencia de quién la
+       escribió.
+       Por lo tanto, no es la intención de este apartado reclamar
+       derechos o desafiar sus derechos sobre trabajos escritos
+       totalmente por usted mismo. El intento es ejercer el derecho a
+       controlar la distribución de trabajos derivados o colectivos
+       basados en el Programa.
+       Además, el simple hecho de reunir un trabajo no basado en el
+       Programa con el Programa (o con un trabajo basado en el Programa)
+       en un volumen de almacenamiento o en un medio de distribución no
+       hace que dicho trabajo entre dentro del ámbito cubierto por esta
+       Licencia.
+    4. Puede copiar y distribuir el Programa (o un trabajo basado en él,
+       según se especifica en el apartado 2, como código objeto o en
+       formato ejecutable según los términos de los apartados 1 y 2,
+       supuesto que además cumpla una de las siguientes condiciones:
+         a. Acompañarlo con el código fuente completo correspondiente, en
+            formato electrónico, que debe ser distribuido según se
+            especifica en los apartados 1 y 2 de esta Licencia en un
+            medio habitualmente utilizado para el intercambio de
+            programas, o
+         b. Acompañarlo con una oferta por escrito, válida durante al
+            menos tres años, de proporcionar a cualquier tercera parte
+            una copia completa en formato electrónico del código fuente
+            correspondiente, a un coste no mayor que el de realizar
+            físicamente la distribución del fuente, que será distribuido
+            bajo las condiciones descritas en los apartados 1 y 2
+            anteriores, en un medio habitualmente utilizado para el
+            intercambio de programas, o
+         c. Acompañarlo con la información que recibiste ofreciendo
+            distribuir el código fuente correspondiente. (Esta opción se
+            permite sólo para distribución no comercial y sólo si usted
+            recibió el programa como código objeto o en formato
+            ejecutable con tal oferta, de acuerdo con el apartado b
+            anterior).
+       Por código fuente de un trabajo se entiende la forma preferida del
+       trabajo cuando se le hacen modificaciones. Para un trabajo
+       ejecutable, se entiende por código fuente completo todo el código
+       fuente para todos los módulos que contiene, más cualquier fichero
+       asociado de definición de interfaces, más los guiones utilizados
+       para controlar la compilación e instalación del ejecutable. Como
+       excepción especial el código fuente distribuido no necesita
+       incluir nada que sea distribuido normalmente (bien como fuente,
+       bien en forma binaria) con los componentes principales
+       (compilador, kernel y similares) del sistema operativo en el cual
+       funciona el ejecutable, a no ser que el propio componente acompañe
+       al ejecutable.
+       Si la distribución del ejecutable o del código objeto se hace
+       mediante la oferta acceso para copiarlo de un cierto lugar,
+       entonces se considera la oferta de acceso para copiar el código
+       fuente del mismo lugar como distribución del código fuente,
+       incluso aunque terceras partes no estén forzadas a copiar el
+       fuente junto con el código objeto.
+    5. No puede copiar, modificar, sublicenciar o distribuir el Programa
+       excepto como prevé expresamente esta Licencia. Cualquier intento
+       de copiar, modificar sublicenciar o distribuir el Programa de otra
+       forma es inválida, y hará que cesen automáticamente los derechos
+       que te proporciona esta Licencia. En cualquier caso, las partes
+       que hayan recibido copias o derechos de usted bajo esta Licencia
+       no cesarán en sus derechos mientras esas partes continúen
+       cumpliéndola.
+    6. No está obligado a aceptar esta licencia, ya que no la ha firmado.
+       Sin embargo, no hay hada más que le proporcione permiso para
+       modificar o distribuir el Programa o sus trabajos derivados. Estas
+       acciones están prohibidas por la ley si no acepta esta Licencia.
+       Por lo tanto, si modifica o distribuye el Programa (o cualquier
+       trabajo basado en el Programa), está indicando que acepta esta
+       Licencia para poder hacerlo, y todos sus términos y condiciones
+       para copiar, distribuir o modificar el Programa o trabajos basados
+       en él.
+    7. Cada vez que redistribuya el Programa (o cualquier trabajo basado
+       en el Programa), el receptor recibe automáticamente una licencia
+       del licenciatario original para copiar, distribuir o modificar el
+       Programa, de forma sujeta a estos términos y condiciones. No puede
+       imponer al receptor ninguna restricción más sobre el ejercicio de
+       los derechos aquí garantizados. No es usted responsable de hacer
+       cumplir esta licencia por terceras partes.
+    8. Si como consecuencia de una resolución judicial o de una alegación
+       de infracción de patente o por cualquier otra razón (no limitada a
+       asuntos relacionados con patentes) se le imponen condiciones (ya
+       sea por mandato judicial, por acuerdo o por cualquier otra causa)
+       que contradigan las condiciones de esta Licencia, ello no le exime
+       de cumplir las condiciones de esta Licencia. Si no puede realizar
+       distribuciones de forma que se satisfagan simultáneamente sus
+       obligaciones bajo esta licencia y cualquier otra obligación
+       pertinente entonces, como consecuencia, no puede distribuir el
+       Programa de ninguna forma. Por ejemplo, si una patente no permite
+       la redistribución libre de derechos de autor del Programa por
+       parte de todos aquellos que reciban copias directa o
+       indirectamente a través de usted, entonces la única forma en que
+       podría satisfacer tanto esa condición como esta Licencia sería
+       evitar completamente la distribución del Programa.
+       Si cualquier porción de este apartado se considera inválida o
+       imposible de cumplir bajo cualquier circunstancia particular ha de
+       cumplirse el resto y la sección por entero ha de cumplirse en
+       cualquier otra circunstancia.
+       No es el propósito de este apartado inducirle a infringir ninguna
+       reivindicación de patente ni de ningún otro derecho de propiedad o
+       impugnar la validez de ninguna de dichas reivindicaciones. Este
+       apartado tiene el único propósito de proteger la integridad del
+       sistema de distribución de software libre, que se realiza mediante
+       prácticas de licencia pública. Mucha gente ha hecho contribuciones
+       generosas a la gran variedad de software distribuido mediante ese
+       sistema con la confianza de que el sistema se aplicará
+       consistentemente. Será el autor/donante quien decida si quiere
+       distribuir software mediante cualquier otro sistema y una licencia
+       no puede imponer esa elección.
+       Este apartado pretende dejar completamente claro lo que se cree
+       que es una consecuencia del resto de esta Licencia.
+    9. Si la distribución y/o uso de el Programa está restringida en
+       ciertos países, bien por patentes o por interfaces bajo copyright,
+       el tenedor del copyright que coloca este Programa bajo esta
+       Licencia puede añadir una limitación explícita de distribución
+       geográfica excluyendo esos países, de forma que la distribución se
+       permita sólo en o entre los países no excluidos de esta manera. En
+       ese caso, esta Licencia incorporará la limitación como si
+       estuviese escrita en el cuerpo de esta Licencia.
+   10. La Free Software Foundation puede publicar versiones revisadas y/o
+       nuevas de la Licencia Pública General de tiempo en tiempo. Dichas
+       nuevas versiones serán similares en espíritu a la presente
+       versión, pero pueden ser diferentes en detalles para considerar
+       nuevos problemas o situaciones.
+       Cada versión recibe un número de versión que la distingue de
+       otras. Si el Programa especifica un número de versión de esta
+       Licencia que se refiere a ella y a «cualquier versión posterior»,
+       tienes la opción de seguir los términos y condiciones, bien de esa
+       versión, bien de cualquier versión posterior publicada por la Free
+       Software Foundation. Si el Programa no especifica un número de
+       versión de esta Licencia, puedes escoger cualquier versión
+       publicada por la Free Software Foundation.
+   11. Si quiere incorporar partes del Programa en otros programas libres
+       cuyas condiciones de distribución son diferentes, escribe al autor
+       para pedirle permiso. Si el software tiene copyright de la Free
+       Software Foundation, escribe a la Free Software Foundation:
+       algunas veces hacemos excepciones en estos casos. Nuestra decisión
+       estará guiada por el doble objetivo de de preservar la libertad de
+       todos los derivados de nuestro software libre y promover el que se
+       comparta y reutilice el software en general.
+       
+AUSENCIA DE GARANTÍA
+
+   12. Como el programa se licencia libre de cargas, no se ofrece ninguna
+       garantía sobre el programa, en todas la extensión permitida por la
+       legislación aplicable. Excepto cuando se indique de otra forma por
+       escrito, los tenedores del copyright y/u otras partes proporcionan
+       el programa «tal cual», sin garantía de ninguna clase, bien
+       expresa o implícita, con inclusión, pero sin limitación a las
+       garantías mercantiles implícitas o a la conveniencia para un
+       propósito particular. Cualquier riesgo referente a la calidad y
+       prestaciones del programa es asumido por usted. Si se probase que
+       el Programa es defectuoso, asume el coste de cualquier servicio,
+       reparación o corrección.
+   13. En ningún caso, salvo que lo requiera la legislación aplicable o
+       haya sido acordado por escrito, ningún tenedor del copyright ni
+       ninguna otra parte que modifique y/o redistribuya el Programa
+       según se permite en esta Licencia será responsable ante usted por
+       daños, incluyendo cualquier daño general, especial, incidental o
+       resultante producido por el uso o la imposibilidad de uso del
+       Programa (con inclusión, pero sin limitación a la pérdida de datos
+       o a la generación incorrecta de datos o a pérdidas sufridas por
+       usted o por terceras partes o a un fallo del Programa al funcionar
+       en combinación con cualquier otro programa), incluso si dicho
+       tenedor u otra parte ha sido advertido de la posibilidad de dichos
+       daños.
+       
+   FIN DE TÉRMINOS Y CONDICIONES
+   
+Apéndice: Cómo aplicar estos términos a sus nuevos programas.
+
+   Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso
+   posible para el público en general, la mejor forma de conseguirlo es
+   convirtiéndolo en software libre que cualquiera pueda redistribuir y
+   cambiar bajo estos términos.
+   
+   Para hacerlo, añada los siguientes anuncios al programa. Lo más seguro
+   es añadirlos al principio de cada fichero fuente para transmitir lo
+   más efectivamente posible la ausencia de garantía. Además cada fichero
+   debería tener al menos la línea de «copyright» y un indicador a dónde
+   puede encontrarse el anuncio completo.
+   <una línea para indicar el nombre del programa y una rápida idea de
+   qué hace.>
+   
+   Copyright (C) 19aa <nombre del autor>
+   
+   Este programa es software libre. Puede redistribuirlo y/o modificarlo
+   bajo los términos de la Licencia Pública General de GNU según es
+   publicada por la Free Software Foundation, bien de la versión 2 de
+   dicha Licencia o bien (según su elección) de cualquier versión
+   posterior.
+   
+   Este programa se distribuye con la esperanza de que sea útil, pero SIN
+   NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin
+   garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la
+   Licencia Pública General de GNU para más detalles.
+   
+   Debería haber recibido una copia de la Licencia Pública General junto
+   con este programa. Si no ha sido así, escriba a la Free Software
+   Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
+   Añada también información sobre cómo contactar con usted mediante
+   correo electrónico y postal.
+   
+   Si el programa es interactivo, haga que muestre un pequeño anuncio
+   como el siguiente, cuando comienza a funcionar en modo interactivo:
+   Gnomovision versión 69, Copyright (C) 19aa nombre del autor
+   
+   Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para más
+   detalles escriba «show w».
+   Los comandos hipotéticos «show w» y «show c» deberían mostrar las
+   partes adecuadas de la Licencia Pública General. Por supuesto, los
+   comandos que use pueden llamarse de cualquier otra manera. Podrían
+   incluso ser pulsaciones del ratón o elementos de un menú (lo que sea
+   apropiado para su programa).
+   
+   También deberías conseguir que su empleador (si trabaja como
+   programador) o tu Universidad (si es el caso) firme un «renuncia de
+   copyright» para el programa, si es necesario. A continuación se ofrece
+   un ejemplo, altere los nombres según sea conveniente:
+   Yoyodyne, Inc. mediante este documento renuncia a cualquier interés de
+       derechos de copyright con respecto al programa Gnomovision (que
+       hace pasadas a compiladores) escrito por Pepe Programador.
+       <firma de Pepito Grillo>, 20 de diciembre de 1996
+       Pepito Grillo, Presidente de Asuntillos Varios.
+       
+   Esta Licencia Pública General no permite que incluya sus programas en
+   programas propietarios. Si su programa es una biblioteca de
+   subrutinas, puede considerar más útil el permitir el enlazado de
+   aplicaciones propietarias con la biblioteca. Si este es el caso, use
+   la Licencia Pública General de GNU para Bibliotecas en lugar de esta
+   Licencia.
+
+References
+
+   1. http://www.fsf.org/
+   2. http://www.gnu.org/
+   3. http://lucas.hispalinux.es/

Index: Proyectos/Mecagtk/devel.html
===================================================================
RCS file: Proyectos/Mecagtk/devel.html
diff -N Proyectos/Mecagtk/devel.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/devel.html        3 Mar 2012 06:14:09 -0000       1.1
@@ -0,0 +1,90 @@
+<html>
+<body bgcolor=#ffffff>
+<center><font color=#ff0000>Esta página está caducada.<br> En breve se 
propondrán nuevas directivas de acuerdo<br> al sistema de desarrollo del 
software de la FSF</font></center>
+<h2> Herramientas de utilización recomendadas </h2>
+A la hora de colaborar en el desarrollo de <b>MecaGTK</b> se recomienda el uso 
de las siguientes herramientas:
+( El uso de estas herramientas es recomendable no obligatorio ):
+<ul>
+<li> Compilador C GNU. Preferiblemente 2.9 o mayor. <p>
+También se pueden utilizar los siguientes: egcs, djgpp y  cygwin.
+<li> Librerías GTK versiones 1.2 y posteriores. Si utilizáis LiNUX, tendréis 
que tener instalado
+el paquete <i>gtk+-devel</i>
+
+<li> Librerías Gnome versiones 1.2.4 y posteriores. El paquete correspondiente 
en linux será <i>gnome-libs-devel</i>.
+</ul>
+La lista anterior se corresponde a los requisitos mínimos para poder compilar 
el código
+fuente tras su modificación.<p>
+Para un trabajo medianamente coordinado es recomendable utilizar los 
siguientes programas:
+<ul>
+<li><font color=blue> Sistema operativo LiNUX.</font> <b>NO</b> importa la 
versión que tengáis. Lo importante son las
+versiones de los programas arriba citados. 
+<li><font color=blue> CVS (Control Version System):</font> Bueno, al parecer 
los chicos de GNU recomiendan VCS en vez de RCS. Es m&aacute;s l&oacute;gico el 
empleo de CVS para proyectos de desarrollo de equipos grandes sobre una 
m&aacute;quina remota. Cuando esta p&aacute;gina se ponga en <a 
href="http://www.es.gnu.org";>www.es.gnu.org</a> pondr&eacute; un enlace a la 
documentaci&oacute;n y a los ejemplos necesarios.<br>
+En resumen, pod&eacute;is olvidaros del RCS.
+<li><font color=blue> RCS (Revision Control System):</font> Es un programa con 
el que podremos ir almacenando de forma
+
+ordenada ls sucesivas modificaciones que realicemos sobre el código fuente. Se 
prefiere a CVS por su 
+simplicidad y rapidez de aprendizaje (sólo requiere de dos comandos 
principales).
+<li><font color=blue>VIM como editor predeterminado</font>. A los que no lo 
manejáis os preguntaréis que por qué se 
+escoge un editor tan <i>complejo</i>.... Los que lo utilizáis habituelmente, 
ya conocéis las múltiples respuestas.
+En caso de no gustaros VIM podéis escojer entre joe, kwrite y emacs.
+<li><font color=blue>diff:</font> Para generar parches sobre el código fuente. 
Utilizadlo sólo aquellos que sepáis manejarlo correctamente.
+Se recomienda no realizarlo hasta el estadode desarrollo 0.1.2 dado que el 
código fuente cambiará radicalmente al pasar de 0.1.0 a 0.1.2.
+
+</ul>
+<h2>¿Cómo entregar modificaciones del programa? </h2>
+Los programas entregados deben de constar de dos archivos (esto será 
<b>imperativo</b> a partir de la versión 0.1.2):
+<ul>
+<li> Archivo de prototipos <i> *.h </i>
+<li> Archivo de código <i> *.c </i>
+</ul>
+Los progamas entregados deben de tener el siguiente encabezamiento:
+<pre>
+  /*
+   *
+   *  AUTOR: nombre del autor/autores
+   *  VERSIÓN: versión sobre la que se está trabajando (NO para la que se está 
trabajando)
+   *
+   *  DESCRIPCIÓN: Breve descripción
+   *
+   */
+</pre>
+He aquí un ejemplo de un pequeño proyecto en C  tomado de los apuntes de la 
asignatura <i>Estructura de Datos</i> de 1997:
+<ul>
+<li><a href="matriz.h.html">matriz.h</a>
+<li><a href="matriz.c.html">matriz.c</a>
+<li><a href="hora.h.html">hora.h</a>
+<li><a href="hora.c.html">hora.c</a>
+<li><a href="main.c.html">main.c</a>
+<li>Fichero comprimido con el código fuente: <a 
href="fuentes.tgz">fuentes.tgz</a>
+</ul>
+No será necesario que incluyáis un fichero <i>Makefile</i>. De eso me 
encargaré yo mismo, dado que espero que me lleguen varios archivos 
<i>*.h</i>... (La esperanza nunca se pierde... Mirad si no a la actual 
presidenta del senado :))
+<h2>¿Dónde necesito ayuda URGENTE?</h2>
+Me interesa mucho internacionalizar el programa. Para ello necesito que 
alguien me ayude con la herramienta <i>gettext</i> de la que prácticamente 
desconozco todo.
+Mejoras posteriores como soporte de diferentes tipos de teclado quedan 
relegadas a una posible versión 2.0.1, así que por favor no insistáis mucho en 
esta mejora.
+<h2> Sobre la documentación </h2>
+A partir de la versión 0.1.2 la documentación se realizará en <b>SGML</b>. Yo 
mismo seré el encargado de traducirla a este formato, así que sugiero que la 
entreguéis o bien en formato
+ASCII, LaTeX o HTML.
+<h2>Sobre los derechos de autor</h2>
+Este programa seguirá los términos de la licencia <a 
href="LICENCIA.txt">GNU</a>. El copyright <b>pertenecerá a todos aquellos que 
colaboren en el desarrollo del programa</b> teniendo estos el derecho 
inalienable
+ de que su nombre aparezca en los créditos explícitamente, indicando en que 
parte han colaborado. Si por algún motivo vuestro nombre no aparece y
+habéis colaborado, acédmelo saber <b>urgentemente</b>. Seguramente un error de 
este tipo se debe 
+a mi provervial <i>existencialismus chaoticus</i>. Vayan mis disculpas 
públicas por delante...<p>
+Todos aquellos que colaboren en este programa someten el código fuente de sus
+ módulos a la licencia <b>GNU</b> arriba descrita. 
+La no aceptación de este término excluirá sus
+módulos de las versiones oficiales del programa perteneciendo la propiedad 
intelectual de
+dischos módulos a su autor original y distribuyéndose éstos bajo los términos 
de
+licencia que éste considere adecuados.
+<p>
+Los bienes indirectos generados por la distribución de las versiones estables 
(invitaciones
+a cerveza, retribuciones personales por haber cambiado la vida a alguna 
secretaria,regalo de mascotas, fama,...) serán repartidos equitativamente entre 
los propietarios
+del copyrigth arriba descritos. Lo mismo <b> no </b> es aplicable a las 
críticas, problemas
+legales con terceras distribuciones, malos rollos de todo calibre, etc... De 
los cuales
+se responsabiliza exclusivamente el coordinador (un servidor) del proyecto.
+<hr>
+<address>
+Luis U.Rodríguez Paniagua<br>
+<a href="mailto:address@hidden";>address@hidden</a><br>
+Valladolid, 20/FEB/01
+</body>
+</html>

Index: Proyectos/Mecagtk/download.html
===================================================================
RCS file: Proyectos/Mecagtk/download.html
diff -N Proyectos/Mecagtk/download.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/download.html     3 Mar 2012 06:14:09 -0000       1.1
@@ -0,0 +1,21 @@
+<html>
+<body>
+<center><h1>Programas de libre distribución</h1></center>
+<hr>
+<h2>Presentación</h2>
+Todos estos programas, menos en los que se indique lo contrario, son propiedad 
intelectual de Luis U. Rodríguez Paniagua y se distribuyen bajo los términos de 
la licencia pública GNU.<br>
+Para mayor información sobre los términos de esta licencia, léanse los 
archivos LIENCIA.txt que se adjuntan con las fuentes de cada programa.<br>
+Este software en su mayor parte está aún en fase BETA. Cualquier sugerencia 
para su mejora o cualquier crítica constructiva será bienvenida.<br>
+<h2>Software disponible:</h2>
+<ul>
+<li> <h3>MecaGTK versión BETA 0.1:</h3> Es una herramienta para el aprendizaje 
de mecanografía desarrollado en GTK utilizando la herramienta GLADE. <a 
href="soft/mecagtk1.tgz">DOWNLOAD</a>
+<br><b>Nota de última hora:</b> Es necesario tener instalado GNOME. 8-(. ¡El 
primer bug ya ha sido detectado!
+<li> <h3>Práctica de la asignatura Programación III:</h3> Una calculadora 
sencilla desarrollada en SmallEiffel utilizando la librería EGTK. Por razones 
docentes no estará disponible hasta Agosto de 2001.
+</ul>
+<hr>
+<address>
+Luis U. Rodríguez Paniagua
+<a href="mailto:address@hidden";>address@hidden</a>
+</address>
+</body>
+</html>

Index: Proyectos/Mecagtk/eiffel.html
===================================================================
RCS file: Proyectos/Mecagtk/eiffel.html
diff -N Proyectos/Mecagtk/eiffel.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/eiffel.html       3 Mar 2012 06:14:09 -0000       1.1
@@ -0,0 +1,27 @@
+<html>
+<body bgcolor=#003366 text=#ffffff link=#ffffcc vlink=#ffff66> 
+<center><h1> Bienvenido al rincón de Eiffel</h1></center>
+Aquí podrás bajar código fuente para SmallEiffel. Por ahora está disponible la 
práctica I de la asignatura PIII.<p>
+A partir del 14/FEB/2001 estará disponible la versión BETA de mecaGTK 
desarrollada en SmallEiffel.
+<ul>
+<li><a href="down/prac1_P3.tgz"> Calculadora </a> Es una sencilla calculadora 
de sobremesa programada en SmallEiffel y con librerías GTK
+<li> MecaGTK Es un entorno de aprendizaje de mecanografía desarrollado en 
SmallEiffel y GTK.
+<li><b> María</b>, en esta página tienes un montón de entornos de desarrollo 
para LiNUX (referencia atu carta de 15/FEB/01): <a 
href="http://linuxberg.ua.pt/x11html/dev_env.html";>achúchame</a>
+</ul>
+<hr>
+<h2>Condiciones de distribución:</h2>
+Esta página no pertenece aún al sistema NEMESyS. Lo enlazaré cuando termine la 
convocatoria extraordinaria de PIII por razones obvias.
+<ul>
+<li> Calculadora: NO TIENE PERMISOS DE DISTRIBUCIÓN HASTA AGOSTO DE 2001. A 
partir de entonces se distribuirá bajo licencia GNU.
+<li> MecaGTK: Se distribuye bajo licencia GNU.
+</ul>
+Para más información sobre los términos de la licencia GNU, consultar la 
página de OpenSource en <a href="http://www.geocities.com/luisubaldo";> NEMESyS 
</a>.
+</body>
+<hr>
+<address>
+Luis U. Rodríguez Paniagua<br>
+<a 
href="http://www.geocities.com/luisubaldo";>www.geocities.com/luisubaldo</a><br>
+<a href="mailto:address@hidden";>address@hidden</a>
+</html>
+
+

Index: Proyectos/Mecagtk/fuentes.tgz
===================================================================
RCS file: Proyectos/Mecagtk/fuentes.tgz
diff -N Proyectos/Mecagtk/fuentes.tgz
Binary files /dev/null and /tmp/cvsxVHvfR differ

Index: Proyectos/Mecagtk/hora.c.html
===================================================================
RCS file: Proyectos/Mecagtk/hora.c.html
diff -N Proyectos/Mecagtk/hora.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/hora.c.html       3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,38 @@
+<HTML>
+<HEAD>
+<TITLE>hora.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo hora.c. Implementa el TAD 
hora</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;stdio.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;assert.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;hora.h&quot;</FONT>
+
+<B><FONT color=#288a51>void</FONT></B> HoraInicializa(Hora *pH, <B><FONT 
color=#288a51>int</FONT></B> hh, <B><FONT color=#288a51>int</FONT></B> mm, 
<B><FONT color=#288a51>int</FONT></B> ss)
+{
+    assert ( pH != <FONT color=#ff00ff>NULL</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= hh &amp;&amp; hh &lt; <FONT 
color=#ff00ff>24</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= mm &amp;&amp; mm &lt; <FONT 
color=#ff00ff>60</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= ss &amp;&amp; ss &lt; <FONT 
color=#ff00ff>60</FONT> );
+    pH-&gt;hh = hh;
+    pH-&gt;mm = mm;
+    pH-&gt;ss = ss;
+}
+
+<B><FONT color=#288a51>char</FONT></B> *HoraACadena( Hora *pH)
+{
+    <B><FONT color=#288a51>static</FONT></B> <B><FONT 
color=#288a51>char</FONT></B> buffer[<FONT color=#ff00ff>9</FONT>];
+    sprintf(buffer,<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%02d</FONT><FONT color=#ff00ff>:</FONT><FONT 
color=#6959cf>%02d</FONT><FONT color=#ff00ff>:</FONT><FONT 
color=#6959cf>%02d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,pH-&gt;hh,pH-&gt;mm,pH-&gt;ss);
+    <B><FONT color=#a62828>return</FONT></B> buffer;
+}
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/hora.h.html
===================================================================
RCS file: Proyectos/Mecagtk/hora.h.html
diff -N Proyectos/Mecagtk/hora.h.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/hora.h.html       3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,31 @@
+<HTML>
+<HEAD>
+<TITLE>hora.h.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo de prototipos para el fichero 
hora.c</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#ifndef _HORA_H_</FONT>
+<FONT color=#a620f7>#define _HORA_H_</FONT>
+
+<B><FONT color=#288a51>typedef</FONT></B> <B><FONT 
color=#288a51>struct</FONT></B> {
+    <B><FONT color=#288a51>int</FONT></B> hh;
+    <B><FONT color=#288a51>int</FONT></B> mm;
+    <B><FONT color=#288a51>int</FONT></B> ss;
+}Hora;
+
+<B><FONT color=#288a51>void</FONT></B> HoraInicializa( Hora *pH, <B><FONT 
color=#288a51>int</FONT></B> hh, <B><FONT color=#288a51>int</FONT></B> mm, 
<B><FONT color=#288a51>int</FONT></B> ss);
+<B><FONT color=#288a51>char</FONT></B> *HoraACadena( Hora *pH);
+
+<FONT color=#a620f7>#endif</FONT>
+
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/indel.cosa
===================================================================
RCS file: Proyectos/Mecagtk/indel.cosa
diff -N Proyectos/Mecagtk/indel.cosa
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/indel.cosa        3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyecto MecaGTK - Coordinaci&oacute;n de Proyectos - FSF/GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo UNIX, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>FSF/GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Mecagtk">MecaGTK</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="800">
+  <TR>
+    <TD>
+<table width=800>
+<td width=400 align=left><img align=left src="mecagtk.gif"></td>
+<td><h1>P&aacute;gina principal de MecaGTK - Estado de desarrollo: <font 
color=red> BETA</font><br>Zona para BETA-Testers<br>Estado actual de la 
distribuci&oacute;n</h1></td>
+</center>
+<center>
+<tr>
+</tr>
+</table>
+</center>
+<center>
+<tr>
+<td width=200 valign=top>Revisiones:</td>
+<td width=600 valign=top>
+<ul>
+<li><font color=red>19/FEB/01</font> Revisi&oacute;n 0.1.0 <a 
href="soft/mecagtk1.tgz">mecagtk-0.1.tgz</a> Edición BETA-Tester.
+<li><font color=red>01/MAR/01</font> (<font color=red>*</font>)Revisi&oacute;n 
0.1.2<a href="soft/mecagtk-0.1.2.tar.gz"> mecagtk-0.1.2.tar.gz.</a> Nuevo 
dise&ntilde;o. Mayor claridad en el diseño, programación y documentación.<p>
+Estado de programaci&oacute;n a d&iacute;a 22/FEB/01: Se ha traducido parte 
del programa al ingl&eacute;s (pero mi inglés no es muy bueno); se ha 
estructurado y documentado el código. Se ha a&ntilde;adidido el soporte de 
may&uacute;sculas y vocales acentuadas.<br>
+<b>NOTA:</b> Finalmente las lecciones se cargar&aacute;n como archivos 
separados y se incluir&aacute; un editor de lecciones. (Cortes&iacute;a de los 
sesos de PeReX.)
+<li><font color=red>??/???/??</font> Revisi&oacute;n 0.1.4 <tt>.o0 Marzo 2001 
</tt>
+<li><font color=red>??/???/??</font> Revisi&oacute;n 0.1.6 <tt>.o0 Segunda 
quincena Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisi&oacute;n 0.1.8 <tt>.o0 Abril 2001 
</tt>
+<li><font color=red>??/???/??</font> Revisi&oacute;n 1.0.0 <tt>.o0 Versión 
estable definitiva. Antes del 30 de Abril 2001</tt>
+</ul>
+(<font color=red>*</font>) Versi&oacute;n actual en desarrollo.
+</td>
+</tr>
+<tr>
+<td valign=top> Bit&aacute;cora de errores (BUGS)</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> Problemas 
al inicializar la ventana de lecci&oacute;n.
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> No se 
consigue cerrar el di&aacute;logo de ayuda al
+pulsar el bot&oacute;n TERMINAR. El botón CANCELAR s&iacute; funciona 
correctamente.
+</ul>
+</td>
+</tr>
+<br>&nbsp;<br>
+<tr>
+<td valign=top> Bit&aacute;cora de sugerencias</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green>DRS</font> Motor de 
lecciones aut&oacute;nomo. 
+Las lecciones deber&aacute;n ser ficheros de texto ASCII comunes de forma que 
cualquier fichero
+puede ser susceptible de convertirse en lecci&oacute;n.<p>
+<b>Nota:</b> esto implicar&iacute;a tambi&eacute;n modificar el modelo de 
correcci&oacute;n. INTERESANTE. 
+¿Un puntero que vaya recorriendo caracteres? ¿Una entrada en el men&uacute; 
para cargar archivos?
+<br>
+<u>PROS:</u> Flexible, gran modularidad, obliga a diferenciar a&uacute;n 
m&aacute;s las partes del programa.<br>
+<u>CONTRAS:</u> El tama&ntilde;o de la ventana de la lecci&oacute;n es 
limitado. No nos interesa un lector
+de textos, sino un TUTORIAL de mecanografia. Las lecciones deben cumplir 
ciertos
+requisitos de altura y anchura del texto.
+<br>SE ESTUDIAR&Aacute;<p>
+<li> <font color=red>23/FEB/01</font><font color=green> DRS</font> ¿Vas a 
poner un editor de lecciones? Ser&iacute;a buena idea.<p>
+Camarada PeReX; el editor ya es una realidad. A&uacute;n no es operativo, pero 
forma parte ya de las opciones del men&uacute;. <br>
+Gracias por la sugerencia :^)<p>
+<p>
+<p>
+</ul>
+</td>
+</tr>     
+<br>&nbsp;<br>
+<tr>
+<td valign=top> Directorio de BETA-Testers</td>
+<td valign=top>
+<ul>
+<li><font color=green>MAC</font> <a href="mailto:/dev/null";>Álvarez Cea, 
Manuel A.</a>
+<li><font color=green>LRP</font> <a 
href="mailto:address@hidden";>Rodr&iacute;guez Paniagua, Luis U.</a>
+<li><font color=green>DRS</font> <a 
href="mailto:address@hidden";>Rodr&iacute;guez S&aacute;nchez, David</a>
+</ul>
+</td>
+</tr>
+<br>&nbsp;<br>
+</table>
+<p><br>
+<tr>
+</tr>
+</table>  
+<tr valign=top>
+<td width=400>
+<b> NOTA 1:</b>
+En esta zona se pondr&aacute;n avisos de inter&eacute;s para todos los 
involucrados
+en el desarrollo de este proyecto. Para las citas, flames, etc... utilizad
+vuestro correo electr&oacute;nico. Gracias.
+</td>
+<td width=400>
+<b> NOTA 2:</b>
+Algunos consejos relativos a la forma de colaborar con este proyecto: <a 
href="devel.html">NORMALIZACIÓN</a>
+</td>
+</tr>
+<tr>
+<td width=400>
+<b>NOTA 3:</b>
+Como supongo que mantener esta p&aacute;gina en duero consume recursos de la 
máquina necesarios para el resto de los compa&ntilde;eros, estoy pensando en 
colgar esta WEB de otro lugar. Actualmente una versi&oacute;n antigua reside en 
<a href="http://www.geocities.com/luisubaldo";> 
www.geocities.com/luisubaldo</a>, pero no estoy muy satisfecho. ¿Alguna 
sugerencia?
+</td>
+<td width=400>
+<b>NOTA 4:</b>
+Buenas noticias. Este proyecto ha sido auspiciado por la FSF/GNU Espa&ntilde;a 
y en
+breve (15 d&iacute;as a partir de hoy 1 de Marzo de 2001) todo el proyecto 
cambiar&aacute; de sitio. Se comunicar&aacute; la p&aacute;gina en breve. Nota 
golosa: <b>los colaboradores tambi&eacute;n podr&aacute;n disponer de cuenta en 
el ordenador en el que se instalar&aacute; el proyecto.</b>
+</td>
+</tr>
+<tr>
+<td width=400>
+<b>NOTA 5:</b>
+Hoy es un d&iacute;a hist&oacute;rico: <b>01/MAR/01</b>. Hoy se colg&oacute; 
esta p&aacute;gina en http://www.es.gnu.org/Proyectos/mekgtk.<br>
+Por cierto: felicitaciones a los chicos de GNU por haber cambiado el nombre 
del proyecto de MecaGTK a MekaGTK y mi nombre Luis Ubaldo a Luis Baldo. En 
honor a vosotros que tanto me hab&eacute;is ayudado <b>QUEDA OFICIALMENTE 
CAMBIADO EL NOMBRE DEL PROYECTO A MEkAGTK</B>(De d&oacute;nde vendr&aacute; 
tanto esp&iacute;ritu anarcosindicalista.... ;^)).<br>
+Respecto a mi nombre, eso es ya m&aacute;s dif&iacute;cil: Mi madre me 
matar&iacute;a.
+</td>
+<td width=400>
+<b>NOTA 6:</b> ¿Quer&eacute;is saber m&aacute;s cosas sobre la 
filosof&iacute;a de la distribuci&oacute;n libre de software:<a 
href="OpenSource/toc.html"> Pues haced click aqu&iacute;</a>
+</td>
+</tr>
+</table>
+<br>&nbsp;<br>
+</center>
+<hr width=800 > 
+<address>
+<center>
+Luis U.Rodr&iacute;guez Paniagua<br><a 
href="mailto:address@hidden";>address@hidden<a>
+</center>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Proyectos">Proyectos Software</A>
 | <A HREF="/Proyectos/Mecagtk">MecaGTK</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+6 Mar 2001
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/index.html
===================================================================
RCS file: Proyectos/Mecagtk/index.html
diff -N Proyectos/Mecagtk/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/index.html        3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyecto MekaGTK. P&aacute;gina principal. GNU Espa&ntilde;a</TITLE>
+
+<META HTTP-EQUIV="Keywords"
+ CONTENT="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+ Software libre, Sistemas Operativos, Kernel, HURD">
+ <META HTTP-EQUIV="Description"
+CONTENT="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+ con el que los usuarios de computadoras tengan la libertad de compartir y 
mejorar
+ el software que usen.">
+ <LINK REV="made" HREF="mailto:address@hidden";>
+ </HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+      WIDTH="129" HEIGHT="122"><BR>
+
+      [
+      <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+        <A HREF="/">Principal</A>
+       | <A HREF="http://www.gnu.org";>FSF/GNU</A>
+       | <A HREF="/Proyectos">Proyectos Sofware</A>
+       | <A HREF="/Eventos">Eventos</A>
+       | <A HREF="/Traducciones">Traducciones</A>
+       | <A HREF="/Licencias">Licencias</A>
+       <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+       ]
+       <HR>
+
+</CENTER>
+
+<CENTER><H1>GNU Madrid (Espa&ntilde;a)</H1></CENTER>
+<p>
+<br>
+<center>
+<table  width=800>
+<td width=20% align=left><img align=left src="mecagtk.gif"></td>
+<td><h1>Página principal de MecaGTK - Estado de desarrollo: <font color=red> 
BETA</font><br>Zona para BETA-Testers<br>Estado actual de la 
distribución</h1></td>
+</center>
+</table><br>
+Última actualización de esta página: 13/MAR/01
+<tr>
+<center>
+<h2>
+<font color=red>Disponible la <a 
href="doc_devel/index.html">Documentaci&oacute;n para desarrolladores</a></h2>
+</font></center>
+<h1>Historial de desarrollo</h1><p>
+<h2>Revisiones:</h2>
+<ul>
+<li><font color=red>19/FEB/01</font> Revisión 0.1.0 <a 
href="soft/mecagtk1.tgz">mecagtk-0.1.tgz</a> Edición BETA-Tester.
+<li><font color=red>01/MAR/01</font> (<font color=red>*</font>)Revisión 
0.1.2<a href="soft/mecagtk-0.1.2.tar.gz"> mecagtk-0.1.2.tar.gz.</a> Nuevo 
diseño. Mayor claridad en el diseño, programación y documentación.<p>
+Estado de programación a día 22/FEB/01: Se ha traducido parte del programa al 
inglés (pero mi inglés no es muy bueno); se ha estructurado y documentado el 
código. Se ha añadidido el soporte de mayúsculas y vocales acentuadas.<br>
+<b>NOTA:</b> Finalmente las lecciones se cargar&aacute;n como archivos 
separados y se incluir&aacute; un editor de lecciones. (Cortes&iacute;a de los 
sesos de PeReX.)
+<li><font color=red>13/MAR/01</font> Revisión 0.1.2-GTK <tt><a 
href="soft/mecagtk-0.2.GTK.tar.gz">mecagtk-0.2.GTK.tar.gz</a>Se ha abandonado 
el soporte de GNOME para hacer más portable el código a otras plataformas. 
Pocas cosas más diferencian a esta versión de la anterior. </tt>
+<li><font color=red>13/MAR/01</font> Revisión 0.1.2-GTK <tt>Versión para 
desarrolladores (contiene el fichero mecagtk.glade).<a 
href="soft/mecagtk-devel-0.2.GTK.tgz">mecagtk-devel-0.2.GTK.tgz</a> </tt>
+<li><font color=red>??/???/??</font> Revisión 1.0.0 <tt>.o0 Versión estable 
definitiva. Antes del 30 de Abril 2001</tt>
+</ul>
+(<font color=red>*</font>) Versión actual en desarrollo.
+<h2> Bitácora de errores (BUGS)</h2>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> Problemas 
al inicializar la ventana de lección.
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> No se 
consigue cerrar el diálogo de ayuda al
+pulsar el botón TERMINAR. El botón CANCELAR sí funciona correctamente.
+</ul>
+<h2> Bitácora de sugerencias</h2>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green>DRS</font> Motor de 
lecciones autónomo. 
+Las lecciones deberán ser ficheros de texto ASCII comunes de forma que 
cualquier fichero
+puede ser susceptible de convertirse en lección.<p>
+<b>Nota:</b> esto implicaría también modificar el modelo de corrección. 
INTERESANTE. 
+¿Un puntero que vaya recorriendo caracteres? ¿Una entrada en el menú para 
cargar archivos?
+<br>
+<u>PROS:</u> Flexible, gran modularidad, obliga a diferenciar aún más las 
partes del programa.<br>
+<u>CONTRAS:</u> El tamaño de la ventana de la lección es limitado. No nos 
interesa un lector
+de textos, sino un TUTORIAL de mecanografia. Las lecciones deben cumplir 
ciertos
+requisitos de altura y anchura del texto.
+<br>SE ESTUDIAR&Aacute;<p>
+<li> <font color=red>23/FEB/01</font><font color=green> DRS</font> ¿Vas a 
poner un editor de lecciones? Ser&iacute;a buena idea.<p>
+Camarada PeReX; el editor ya es una realidad. A&uacute;n no es operativo, pero 
forma parte ya de las opciones del men&uacute;. <br>
+Gracias por la sugerencia :^)<p>
+<li> <font color=red>08/MAR/01</font><font color=green> MLX</font>Mmmm... 
Interesante... ¿Cuanto tienes hecho? ¿Muestra alguna
+incompatibilidad con Windows? Personalmente abogo por el uso de GTK+
+para la portabilidad de aplicaciones entre sistemas...
+<p>.... y tanto abog&oacute; que por ahora es el &uacute;nico candidato a 
realizar los ports ;^)
+<p>
+<li><font color=red>10/MAR/01</font><font color=green> MLX</font> ...Bueno, me 
descargué las fuentes, pero al intentar compilarlo, me dijo que no podía 
encontrar gnomeConf.sh... Eso implica que está específicamente hecho para 
Gnome, lo cual invalida Windows.... Voy a estudiar hasta qué punto depende de 
Gnome y si se puede evitar esa dependencia, aunque eso durará tieempo....
+<p>
+¿Qué somos, hombres o ratones? Tienes toda la razón. Y la última distribución 
(13/MAR/01) ya está liberada de la carga de Gnome. Y compilable en es.gnu.org. 
¡¡¡ Y en un solo fin de semana !!!! (Con dos c....). 
+<p>
+<p>
+</ul>
+<h2>Directorio de BETA-Testers</h2>
+<ul>
+<li><font color=green>MAC</font> <a href="mailto:/dev/null";>Álvarez Cea, 
Manuel A.</a>
+<li><font color=green>MLX</font> <a href="mailto:address@hidden";>Legido 
XXXXXX, Marcos</a>
+<li><font color=green>LRP</font> <a href="mailto:address@hidden";>Rodríguez 
Paniagua, Luis U.</a>
+<li><font color=green>DRS</font> <a href="mailto:address@hidden";>Rodríguez 
Sánchez, David</a>
+</ul>
+<h2> Agradecimiendos </h2>
+<ul>
+<li>
+A la GNU Espa&ntilde;a, sin cuya colaboraci&oacute;n este proyecto 
morir&iacute;a en Agosto de este a&ntilde;o.
+<li> A los BETA-testers, sin cuya ayuda al calor de una sopa de Manchuria 
(ellos me entienden) la ambici&oacute;n de este programa ser&iacute;a 
rid&iacute;cula
+<li> A Marcos Legido (a.k.a. lain) por su inter&eacute;s e intercambio de 
opiniones
+<li> Y finalmente, aunque no menos importante, a Nacho por su inagotable 
paciencia para con vuestro seguro servidor Luis.
+</ul>
+<h2> Tabl&oacute;n de Anuncios</h2>
+<b> NOTA 1:</b>
+En esta zona se pondrán avisos de interés para todos los involucrados
+en el desarrollo de este proyecto. Para las citas, flames, etc... utilizad
+ vuestro correo electrónico. Gracias.
+<br><b> NOTA 2:</b>
+Algunos consejos relativos a la forma de colaborar con este proyecto: <a 
href="devel.html">NORMALIZACIÓN</a>
+<br><b> NOTA 3:</b>
+Para conocer m&aacute;s cosas sobre la filosof&iacute;a FSF/GNU, tal vez 
resulte interesante la lectura del siguiente libro: <a 
href="OpenSource/toc.html">Open Sources: Voices from the Open Source</a>
+
+<center><hr width=800 ></center>  
+<address>
+<center>
+Luis U.Rodríguez Paniagua<br><a 
href="mailto:address@hidden";>address@hidden/</a>
+</center>
+<hr>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km -7 
Cp: 28031 Madrid (Espa&ntilde;a)
+<p>
+La copia y distribucion de este articulo en su totalidad o parcialmente esta 
permitido en cualquier medio, manteniendo la autoria de la fuente.
+<p>
+<hr>
+</body>
+</html>

Index: Proyectos/Mecagtk/main.c.html
===================================================================
RCS file: Proyectos/Mecagtk/main.c.html
diff -N Proyectos/Mecagtk/main.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/main.c.html       3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,84 @@
+<HTML>
+<HEAD>
+<TITLE>main.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN:  Fichero principal</FONT>
+<FONT color=#0000ff>   *  Compilación:</FONT>
+<FONT color=#0000ff>   *                    gcc -c hora.c -I.</FONT>
+<FONT color=#0000ff>   *                    gcc -c matriz.c -I.</FONT>
+<FONT color=#0000ff>   *                    gcc -o tadmatrix main.c hora.o 
matriz.o -I.</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;stdio.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;matriz.h&quot;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;hora.h&quot;</FONT>
+
+main()
+{
+    Matriz A,B;
+    <B><FONT color=#288a51>int</FONT></B> m,n,i,j;
+    <B><FONT color=#288a51>float</FONT></B> x;
+    Hora h;
+    
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Obtener la dimensión de 
la matriz */</FONT>
+    printf(<FONT color=#ff00ff>&quot;Altura  :&quot;</FONT>);
+    scanf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>%d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,&amp;m);
+    printf(<FONT color=#ff00ff>&quot;Anchura :&quot;</FONT>);
+    scanf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>%d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,&amp;n);
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Creamos una matriz de 
floats */</FONT>
+    MatrizCrea(&amp;A, m, n, <B><FONT color=#a62828>sizeof</FONT></B>(<B><FONT 
color=#288a51>float</FONT></B>));
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Creamos una matriz de 
horas */</FONT>
+    MatrizCrea(&amp;B, m, n, <B><FONT color=#a62828>sizeof</FONT></B>(h));
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Inicializamos las 
Matrices */</FONT>
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                x=(i+j+<FONT color=#ff00ff>2.0</FONT>)/(n+m);
+                MatrizCambia(&amp;A,i,j,&amp;x);
+                HoraInicializa(&amp;h,<FONT color=#ff00ff>1</FONT>,i,j);
+                MatrizCambia(&amp;B,i,j,&amp;h);
+            }
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Recorremos la matriz de 
floats */</FONT>
+    printf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>\n</FONT><FONT 
color=#ff00ff>Matriz de FLOATS ((i+j+2.0)/(alt+anch)):</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>); 
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+    {
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                MatrizObten(&amp;A,i,j,&amp;x);
+                printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%f</FONT><FONT color=#ff00ff> &quot;</FONT>,x);
+            }      
+        printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>);
+    }
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Recorremos la matriz de 
Hora */</FONT>
+     printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>Matriz de Horas:</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>); 
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+    {
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                MatrizObten(&amp;B,i,j,&amp;h);
+                printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%s</FONT><FONT color=#ff00ff> &quot;</FONT>,HoraACadena(&amp;h));
+            }
+        printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>);
+    }         
+
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Limpieza */</FONT>
+    MatrizDestruye(&amp;A);
+    MatrizDestruye(&amp;B);
+}
+
+    
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/matriz.c.html
===================================================================
RCS file: Proyectos/Mecagtk/matriz.c.html
diff -N Proyectos/Mecagtk/matriz.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/matriz.c.html     3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,62 @@
+<HTML>
+<HEAD>
+<TITLE>matriz.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo fuente matriz.c. Implementa un 
TAD matriz</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>        
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;stdlib.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> calloc, free....*/</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;string.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> memcpy */</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;assert.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> aserciones */</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;matriz.h&quot;</FONT>
+
+<FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff> * Macro para obtener una posición. El puntero se 
convierte a (char *) porque</FONT>
+<FONT color=#0000ff> * algunos compiladores no permiten sumar a punteros void. 
La posición que </FONT>
+<FONT color=#0000ff> * ocupa un elemento será su fila más su columna. Esto hay 
que multiplicarlo por </FONT>
+<FONT color=#0000ff> * el tamaño de cada elemento.</FONT>
+<FONT color=#0000ff> *</FONT>
+<FONT color=#0000ff> */</FONT>
+<FONT color=#a620f7>#define POS( pM, i, j)((</FONT><B><FONT 
color=#288a51>char</FONT></B><FONT color=#a620f7> *) pM-&gt;elementos + 
pM-&gt;tamagno * (i * pM-&gt;n +j))</FONT>
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCrea( Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> m, <B><FONT color=#288a51>int</FONT></B> n, 
<B><FONT color=#288a51>int</FONT></B> tamagno)
+{
+    assert (m&gt;<FONT color=#ff00ff>0</FONT>);
+    assert (n&gt;<FONT color=#ff00ff>0</FONT>);
+    assert (tamagno&gt;<FONT color=#ff00ff>0</FONT>);
+    pM-&gt;m = m;
+    pM-&gt;n = n;
+    pM-&gt;tamagno = tamagno;
+    pM-&gt;elementos = calloc ( m*n, tamagno);
+    assert (pM-&gt;elementos != <FONT color=#ff00ff>NULL</FONT>);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizDestruye(Matriz *pM)
+{
+    assert ( pM-&gt;elementos != <FONT color=#ff00ff>NULL</FONT> );
+    free (pM-&gt;elementos);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizObten(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento)
+{
+    assert(i &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; i &lt; pM-&gt;m);
+    assert(j &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; j &lt; pM-&gt;n);
+    memcpy(elemento, POS(pM, i, j), pM-&gt;tamagno);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCambia(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento)
+{
+   assert(i &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; i &lt; pM-&gt;m);
+   assert(j &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; j &lt; pM-&gt;n);
+   memcpy(POS(pM, i, j),elemento, pM-&gt;tamagno);
+}                     
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/matriz.h.html
===================================================================
RCS file: Proyectos/Mecagtk/matriz.h.html
diff -N Proyectos/Mecagtk/matriz.h.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/matriz.h.html     3 Mar 2012 06:14:10 -0000       1.1
@@ -0,0 +1,35 @@
+<HTML>
+<HEAD>
+<TITLE>matriz.h.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0 </FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo de prototipos para el fichero 
matriz.c</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>
+
+<FONT color=#a620f7>#ifndef _MATRIZ_H_</FONT>
+<FONT color=#a620f7>#define _MATRIZ_H_</FONT>
+
+<B><FONT color=#288a51>typedef</FONT></B> <B><FONT 
color=#288a51>struct</FONT></B> {
+    <B><FONT color=#288a51>int</FONT></B> m,n;
+    <B><FONT color=#288a51>size_t</FONT></B> tamagno;
+    <B><FONT color=#288a51>void</FONT></B> *elementos;
+} Matriz;
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCrea(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> m, <B><FONT color=#288a51>int</FONT></B> n, 
<B><FONT color=#288a51>int</FONT></B> tamagno);
+<B><FONT color=#288a51>void</FONT></B> MatrizDestruye(Matriz *pM);
+<B><FONT color=#288a51>void</FONT></B> MatrizObten(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento);
+<B><FONT color=#288a51>void</FONT></B> MatrizCambia(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento);
+
+<FONT color=#a620f7>#endif</FONT> _MATRIZ_H_
+<FONT color=#0000ff>/*</FONT><FONT color=#0000ff>-EOF-*/</FONT>
+
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/mecagtk-0.1.2.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/mecagtk-0.1.2.tar.gz
diff -N Proyectos/Mecagtk/mecagtk-0.1.2.tar.gz
Binary files /dev/null and /tmp/cvsio9LoV differ

Index: Proyectos/Mecagtk/mecagtk.gif
===================================================================
RCS file: Proyectos/Mecagtk/mecagtk.gif
diff -N Proyectos/Mecagtk/mecagtk.gif
Binary files /dev/null and /tmp/cvs609oVV differ

Index: Proyectos/Mecagtk/mecagtk.html
===================================================================
RCS file: Proyectos/Mecagtk/mecagtk.html
diff -N Proyectos/Mecagtk/mecagtk.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/mecagtk.html      3 Mar 2012 06:14:11 -0000       1.1
@@ -0,0 +1,125 @@
+<html>
+<body bgcolor=#ffffff>
+<p>
+<br>
+<center>
+<table  width=800>
+<td width=20% align=left><img align=left src="mecagtk.gif"></td>
+<td><h1>Página principal de MecaGTK - Estado de desarrollo: <font color=red> 
BETA</font><br>Zona para BETA-Testers<br>Estado actual de la 
distribución</h1></td>
+</center>
+<center>
+</table><br>
+Última actualización de esta página: 01/MAR/01
+<hr width=800 >
+<table width=800 bgcolor=#666666 text=#ffffff>
+<tr>
+<td><font color=#ffffff>  <b>Historial de desarrollo</b></font></td>
+</tr>
+</table>
+</center>
+<center>
+<table width=800 bgcolor=#cccccc text=#ffffff>
+<tr>
+<td  width=20% valign=top>Revisiones:</td>
+<td  width=80% valign=top>
+<ul>
+<li><font color=red>19/FEB/01</font> Revisión 0.1.0 <a 
href="soft/mecagtk1.tgz">mecagtk-0.1.tgz</a> Edición BETA-Tester.
+<li><font color=red>01/MAR/01</font> (<font color=red>*</font>)Revisión 
0.1.2<a href="soft/mecagtk-0.1.2.tar.gz"> mecagtk-0.1.2.tar.gz.</a> Nuevo 
diseño. Mayor claridad en el diseño, programación y documentación.<p>
+Estado de programación a día 22/FEB/01: Se ha traducido parte del programa al 
inglés (pero mi inglés no es muy bueno); se ha estructurado y documentado el 
código. Se ha añadidido el soporte de mayúsculas y vocales acentuadas.<br>
+<b>NOTA:</b> Finalmente las lecciones se cargar&aacute;n como archivos 
separados y se incluir&aacute; un editor de lecciones. (Cortes&iacute;a de los 
sesos de PeReX.)
+<li><font color=red>??/???/??</font> Revisión 0.1.4 <tt>.o0 Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 0.1.6 <tt>.o0 Segunda quincena 
Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 0.1.8 <tt>.o0 Abril 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 1.0.0 <tt>.o0 Versión estable 
definitiva. Antes del 30 de Abril 2001</tt>
+</ul>
+(<font color=red>*</font>) Versión actual en desarrollo.
+</td>
+</tr>
+<tr>
+<td valign=top> Bitácorra de errores (BUGS)</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> Problemas 
al inicializar la ventana de lección.
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> No se 
consigue cerrar el diálogo de ayuda al
+pulsar el botón TERMINAR. El botón CANCELAR sí funciona correctamente.
+</ul>
+</td>
+</tr>
+
+<tr>
+<td valign=top> Bitácorra de sugerencias</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green>DRS</font> Motor de 
lecciones autónomo. 
+Las lecciones deberán ser ficheros de texto ASCII comunes de forma que 
cualquier fichero
+puede ser susceptible de convertirse en lección.<p>
+<b>Nota:</b> esto implicaría también modificar el modelo de corrección. 
INTERESANTE. 
+¿Un puntero que vaya recorriendo caracteres? ¿Una entrada en el menú para 
cargar archivos?
+<br>
+<u>PROS:</u> Flexible, gran modularidad, obliga a diferenciar aún más las 
partes del programa.<br>
+<u>CONTRAS:</u> El tamaño de la ventana de la lección es limitado. No nos 
interesa un lector
+de textos, sino un TUTORIAL de mecanografia. Las lecciones deben cumplir 
ciertos
+requisitos de altura y anchura del texto.
+<br>SE ESTUDIAR&Aacute;<p>
+<li> <font color=red>23/FEB/01</font><font color=green> DRS</font> ¿Vas a 
poner un editor de lecciones? Ser&iacute;a buena idea.<p>
+Camarada PeReX; el editor ya es una realidad. A&uacute;n no es operativo, pero 
forma parte ya de las opciones del men&uacute;. <br>
+Gracias por la sugerencia :^)<p>
+<p>
+<p>
+</ul>
+</td>
+</tr>         
+
+<tr>
+<td valign=top> Directorio de BETA-Testers</td>
+<td valign=top>
+<ul>
+<li><font color=green>MAC</font> <a href="mailto:/dev/null";>Álvarez Cea, 
Manuel A.</a>
+<li><font color=green>LRP</font> <a href="mailto:address@hidden";>Rodríguez 
Paniagua, Luis U.</a>
+<li><font color=green>DRS</font> <a href="mailto:address@hidden";>Rodríguez 
Sánchez, David</a>
+</ul>
+</td>
+</tr>
+
+</table>
+<p><br>
+<table width=800 bgcolor=#666666 text=#ffffff>
+<tr>
+<td><font color=#ffffff> <b>Tablón de Anuncios</b></font></td>
+</tr>
+</table>   
+<table width=800 bgcolor=yellow text=#ffffff>   
+<tr valign=top>
+<td width=400>
+<b> NOTA 1:</b>
+En esta zona se pondrán avisos de interés para todos los involucrados
+en el desarrollo de este proyecto. Para las citas, flames, etc... utilizad
+ vuestro correo electrónico. Gracias.
+</td>
+<td width=400>
+<b> NOTA 2:</b>
+Algunos consejos relativos a la forma de colaborar con este proyecto: <a 
href="devel.html">NORMALIZACIÓN</a>
+</td>
+</tr>
+<tr>
+<td width=400>
+<b>NOTA 3:</b>
+Como supongo que mantener esta página en duero consume recursos de la máquina 
necesarios para el resto de los compañeros, estoy pensando en colgar esta WEB 
de otro lugar. Actualmente una versión antigua reside en <a 
href="http://www.geocities.com/luisubaldo";> www.geocities.com/luisubaldo</a>, 
pero no estoy muy satisfecho. ¿Alguna sugerencia?
+</td>
+<td width=400>
+<b>NOTA 4:</b>
+Buenas noticias. Este proyecto ha sido auspiciado por la FSF/GNU España y en
+breve (15 d&iacute;as a partir de hoy 1 de Marzo de 2001) todo el proyecto 
cambiar&aacute; de sitio. Se comunicar&aacute; la p&aacute;gina en breve. Nota 
golosa: <b>los colaboradores tambi&eacute;n podr&aacute;n disponer de cuenta en 
el ordenador en el que se instalar&aacute; el proyecto.</b>
+</td>
+</tr>
+
+</table>
+
+</center>
+<hr width=800 >  
+<address>
+<center>
+Luis U.Rodríguez Paniagua<br><a href="mailto:address@hidden";>address@hidden<a>
+</center>
+</body>
+</html>

Index: Proyectos/Mecagtk/mecagtk1.tgz
===================================================================
RCS file: Proyectos/Mecagtk/mecagtk1.tgz
diff -N Proyectos/Mecagtk/mecagtk1.tgz
Binary files /dev/null and /tmp/cvs9jT69Y differ

Index: Proyectos/Mecagtk/src.html.html
===================================================================
RCS file: Proyectos/Mecagtk/src.html.html
diff -N Proyectos/Mecagtk/src.html.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/src.html.html     3 Mar 2012 06:14:12 -0000       1.1
@@ -0,0 +1,28 @@
+<HTML>
+<HEAD>
+<TITLE>src.html.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>HTML</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>HEAD</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>META</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>NAME</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;GENERATOR&quot;</FONT><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>CONTENT</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;Adobe PageMill 2.0 
Win&quot;</FONT><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>TITLE</FONT></B><FONT 
color=#008a8e>&gt;</FONT><B><FONT color=#ff00ff>Página NEMESyS</FONT></B><FONT 
color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>TITLE</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>HEAD</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAMESET</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>ROWS</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;39,90%&quot;</FONT><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAME</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>SRC</FONT></B><FONT 
color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;html/titulo.html&quot;</FONT><FONT color=#008a8e> 
</FONT><B><FONT color=#288a51>NAME</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;titulo&quot;</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>FRAMEBORDER</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>MARGINWIDTH</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>SCROLLING</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>NO</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>NORESIZE</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAMESET</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>COLS</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;25%,70%&quot;</FONT><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAME</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>SRC</FONT></B><FONT 
color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;html/menu.html&quot;</FONT><FONT color=#008a8e> 
</FONT><B><FONT color=#288a51>NAME</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;menu&quot;</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>FRAMEBORDER</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>MARGINWIDTH</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAME</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>SRC</FONT></B><FONT 
color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;html/cuerpo.html&quot;</FONT><FONT color=#008a8e> 
</FONT><B><FONT color=#288a51>NAME</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;cuerpo&quot;</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>FRAMEBORDER</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>MARGINWIDTH</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> &gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT 
color=#a62828>FRAMESET</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>NOFRAMES</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>BODY</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+Viewing this page requires a browser capable of displaying frames.
+<FONT color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>BODY</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT 
color=#a62828>NOFRAMES</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT 
color=#a62828>FRAMESET</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>HTML</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+    
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/OpenSource/acknow.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/acknow.html
diff -N Proyectos/Mecagtk/OpenSource/acknow.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/acknow.html    3 Mar 2012 06:14:12 -0000       
1.1
@@ -0,0 +1,113 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Monograph">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution
+" align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Acknowledgments </TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Acknowledgments</H1>
+<P class="body">
+No book like this happens without the help and counsel of a number of people, 
so I thank my Mom, Dad, Trish, Denise, Neil, and Mickey. I'd also like to thank 
the folks at the Coffeenet, who have been there for me. And of course my thanks 
to the contributors who have wasted valuable coding time to work on this book; 
I appreciate it! </P>
+<P class="body">
+To the people at VA Research Linux Systems, I couldn't have hoped for a better 
collection of smart, dedicated people; thanks for putting up with me during the 
writing of this book.</P>
+<P class="body">
+This book would not have happened without the continual support and dedication 
of Mark Stone. He is the true hero behind this book's creation. He has said 
that &quot;A book could be written about how this book was written,&quot; which 
I'm sure he means in the nicest way possible. I'm sure one day he will look 
back and laugh at this time-- right, Mark? Mark?</P>
+<P class="body">
+In the initial brainstorming period for the book, a number of people 
contributed ideas and support that eventually led to Open Sources. These people 
include Paul Crowley, Paul Russell, Corey Saltiel, Edward Avis, Jeff Licquia, 
Jeff Knox, Becky Wood, and the guy whose site (<a 
href="http://slashdot.org";>http://slashdot.org</a>) acted as the catalyst, Rob 
Malda. Thanks to all; I hope this book is everything you had wished it to be.  
</P>
+<P class="body">
+Finally, I could not have completed this work without the morale of Christine 
Hillmer, who selflessly unpacked our apartment while I toiled away at my 
keyboard. You are all that I ever could have wished for and I am reminded each 
day how lucky I am. </P>
+<P class="body"><i>--Chris DiBona</i></p>
+<P class="body">
+I'd like to thank the following people for the many ways that they have 
supported me: Joe McGuckin, Peter Hendrickson, Jo Schuster, Ruth Ockman, 
Allison Huynh, and Nina Woodard. I'd also like to thank my favorite hackers: 
David S. Miller and H. Peter Anvin.</P>
+<P class="body"><i>--Sam Ockman</i></p>
+<P class="body">
+I'd like to thank Sam and Chris for bringing this crazy idea to me in the 
first place. I'm sure they had no idea what they were getting into, but I'm 
equally sure it has been worth it. I'd also like to thank each of the 
contributors; each is a creative spirit with more ideas than time to execute 
them, but each understood the importance of this project and the need to make 
time for it. </P>
+<P class="body">
+For every book there are people behind the scenes who work their magic to make 
the book a success. On this book especially, some of these quiet heroes deserve 
acknowledgment: Troy Mott, Katie Gardner, Tara McGoldrick, Jane Ellin, Robert 
Romano, Rhon Porter, Nancy Wolfe Kotary, Sheryl Avruch, Mike Sierra, and Edie 
Freeman. Of course I'd also like to thank my friends and family who have 
supported me through yet another of Dad's crazy book projects. Finally, my 
thanks to the good people at Lytton Coffee Roasting Company, my &quot;office 
away from home.&quot;</P>
+<P class="body"><i>--Mark Stone</i>
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="intro.html"><i><b>Introduction ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/anebay.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/anebay.html
diff -N Proyectos/Mecagtk/OpenSource/anebay.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/anebay.html    3 Mar 2012 06:14:12 -0000       
1.1
@@ -0,0 +1,162 @@
+<HTML><HEAD><meta http-equiv="Expires" content="Wed, 12 May 1999, 20:45:22 
GMT"><TITLE>eBay item 103366451 (Ends 05/19/99, 13:40:17 PDT) - EBay, the 
largest Auction site (w/ Prime Rib)</TITLE></HEAD><body bgcolor=#FFFFFF>
+<table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td 
width="120"><a href="http://www.ebay.com";><img 
src="http://pics.ebay.com/aw/pics/logo_lower_tb.gif"; width="96" hspace="0" 
vspace="0" height="42" alt="eBay logo" border="0"></a></td><td><strong><font 
size="3"><a href="http://www.ebay.com";>Home</a>&nbsp; <a 
href="http://listings.ebay.com/aw/listings/list";>Listings</a>&nbsp; <a 
href="http://pages.ebay.com/aw/ps.html";>Buyers</a>&nbsp; <a 
href="http://pages.ebay.com/aw/seller-services.html";>Sellers</a>&nbsp; <a 
href="http://pages.ebay.com/aw/search.html";>Search</a>&nbsp; <a 
href="http://pages.ebay.com/aw/help/help-start.html";>Help</a>&nbsp; <a 
href="http://pages.ebay.com/aw/newschat.html";>News/Chat</a>&nbsp; <a 
href="http://pages.ebay.com/aw/sitemap.html";>Site 
Map</a></font></strong></td></tr></table>
+<table width="100%">
+        <tr>
+                <td width="120"></td>
+                <td width="480" ALIGN="LEFT"><font size="-1">Shop eBay while 
you're sleeping! <A 
HREF="http://cgi6.ebay.com/aw-cgi/eBayISAPI.dll?PersonalShopperViewSearches";>Personal
 Shopper</A> searches eBay for you!</font></td>
+        </tr>
+        <tr>
+                <td width="120">&nbsp;</td>
+                <td><font size="-1">Save time! Try the <FONT 
COLOR="#EE0000">newest, fun way</FONT> to shop -- the <A 
HREF="http://pages.ebay.com/aw/gallery.html";>Gallery</A>.</font></td>
+        </tr>
+</table>
+<center><table border=1 cellspacing=0 width="100%" bgcolor="#99CCCC">
+<tr>
+<td align=center width="100%"><font size=4 color="#000000"><b>EBay, the 
largest Auction site (w/ Prime Rib)</b></font></td>
+</tr>
+<tr>
+<td align=center width="100%"><font size=3 color="#000000"><b>Item 
#103366451</b></font></td>
+</tr>
+</table></center>
+<center><table border=0 cellspacing=0 width="100%">
+<tr>
+<td align=center width="100%"><font size=2 color="#000000"><a 
href="http://listings.ebay.com/aw/listings/list/category1506/index.html";>Computers:Software:Utilities:Auction
 Utilities</a></font></td></tr>
+</table></center>
+<img src="http://pics.ebay.com/aw/pics/dot_clear.gif"; width="1" vspace="2" 
border="0"><center><table border=0 cellpadding=0 cellspacing=0 width="100%">
+<tr>
+<td width="13%" rowspan="17" valign="top" align="left"><a href="#DESC"><img 
src="http://pics.ebay.com/aw/pics/descriptionicon2arrow.gif"; width="60" 
height="51" vspace="12" alt="Show description" border="0"></a><br><a 
href="#BID"><img src="http://pics.ebay.com/aw/pics/bidicon2arrow.gif"; 
width="60" height="60" vspace="12" alt="Bid!" border="0"></a><br></td>
+<td width="13%"><font size=2>Starts at</font></td>
+<td width="31%"><b>$2.00</b></td>
+<td width="1%"></td>
+<td width="10%"><font size=2>First bid</font></td>
+<td width="45%"><b>$2.00</b></td>
+</tr>
+<tr>
+<td width="13%"><font size=2>Quantity</font></td>
+<td width="31%"><b>1</b></td>
+<td width="1%"></td>
+<td width="10%"><font size=2># of bids</font></td>
+<td width="45%"><b>0</b><font size=2> <a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ViewBids&item=103366451";>(bid 
history)</a> <a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?GetBidderEmails&item=103366451&pagetype=254";>(with
 emails)</a></font></td></tr>
+<tr>
+<td width="13%"><font size=2>Time left</font></td>
+<td width="31%"><b>6 days, 23 hours +</b></td>
+<td width="1%"></td>
+<td width="10%"><font size=2>Location</font></td>
+<td width="45%"><b>Silicon Valley, Ca</b></td>
+</tr>
+<tr>
+<td width="13%"><font size="2">Started</font></td>
+<td width="31%"><font size="2">05/12/99, 13:40:17 PDT</font></td>
+<td width="1%"></td>
+<td width="10%" colspan="2"><font size=2><a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ShowEmailAuctionToFriend&item=103366451";><IMG
 border=0 alt="envelope" height=9 width=13 
src="http://pics.ebay.com/aw/pics/envelope.gif";></a>&nbsp;<a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ShowEmailAuctionToFriend&item=103366451";>(mail
 this auction to a friend)</a></font></td>
+</tr>
+<tr><td width="13%"><font size=2>Ends</font></td>
+<td width="31%"><font size=2>05/19/99, 13:40:17 PDT</font></td>
+<td width="1%"></td>
+<td width="10%" colspan="2"><font size=2><a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ViewGiftAlert&item=103366451";><img
 border = 0 height=14 width=16 alt="[Gift Alert]" 
src="http://pics.ebay.com/aw/pics/gift-icon.gif";></a>&nbsp;<a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ViewGiftAlert&item=103366451";>(request
 a gift alert)</a></font></td>
+</tr>
+<tr><td width="13%"></td><td width="31%"></td><td width="1%"></td><td 
width="10%"><img src="http://pics.ebay.com/aw/pics/dot_clear.gif"; width="1" 
vspace="4" border="0"></td><td width="45%"></td></tr><tr>
+<td width="13%"><font size=2>Seller</font></td>
+<td width="31%" colspan=4><b><a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ReturnUserEmail&requested=cdibona";>cdibona</a></b>
 <A 
HREF="http://cgi2.ebay.com/aw-cgi/eBayISAPI.dll?ViewFeedback&userid=cdibona";>(14)</A>
 <A HREF="http://pages.ebay.com/aw/star-chart.html";><IMG align="absmiddle" 
border=0 alt="star" height=23 width=23 
src="http://pics.ebay.com/aw/pics/star-1.gif";></A> <A 
HREF="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?GetUserEmail&userid=cdibona";><IMG
 border=0 alt="mask" height=15 width=21 
src="http://pics.ebay.com/aw/pics/mask.gif";></A></td>
+</tr>
+<tr><td width="13%"></td>
+<td width="31%" colspan=4><font size=2><a 
href="http://cgi2.ebay.com/aw-cgi/eBayISAPI.dll?ViewFeedback&userid=cdibona";>(view
 comments in seller's Feedback Profile)</a>&nbsp; <a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ViewListedItems&userid=cdibona";>(view&nbsp;seller's&nbsp;other&nbsp;auctions)</a>&nbsp;
 <a 
href="http://cgi3.ebay.com/aw-cgi/eBayISAPI.dll?ReturnUserEmail&requested=cdibona";>(ask&nbsp;seller&nbsp;a&nbsp;question)</a></font></td>
+</tr>
+<tr><td width="13%"></td><td width="31%"></td><td width="1%"></td><td 
width="10%"><img src="http://pics.ebay.com/aw/pics/dot_clear.gif"; width="1" 
vspace="4" border="0"></td><td width="45%"></td></tr><tr>
+<td width="13%" valign="top"><font size=2>High bid</font></td>
+<td width="31%" valign="top" colspan=4>--</td></tr>
+<tr><td width="13%"></td><td width="31%"></td><td width="1%"></td><td 
width="10%"><img src="http://pics.ebay.com/aw/pics/dot_clear.gif"; width="1" 
vspace="4" border="0"></td><td width="45%"></td></tr><tr><td width="13%" 
valign="top"><font size=2>Payment</font></td><td width="31%" valign="top" 
colspan=4><font size="2"> Other,  See item description for payment methods 
accepted</font></td></tr><tr><td width="13%" valign="top"><font 
size="2">Shipping</font></td><td width="31%" valign="top" colspan=4><font 
size="2">Seller ships internationally, See item description for shipping 
charges</font></tr><tr><td width="13%"></td><td width="31%"></td><td 
width="1%"></td><td width="10%"><img 
src="http://pics.ebay.com/aw/pics/dot_clear.gif"; width="1" vspace="4" 
border="0"></td><td width="45%"></td></tr><tr>
+<td width="13%"><font size=2>Update item </font></td>
+<td width="31%" colspan=4><font size=2><b>Seller: </b> If this item has 
received no bids, you may <a 
href="http://cgi5.ebay.com/aw-cgi/eBayISAPI.dll?UserItemVerification&item=103366451";>revise</a>
 it.</font></td>
+</tr>
+</table></center><br><table border="0" cellpadding="8" cellspacing="0" 
width="100%"><tr><td>Seller assumes all responsibility for listing this item. 
You should contact the seller to resolve any questions before bidding. Currency 
is U.S. dollars (US$) unless otherwise noted.</td>
+</tr>
+</table>
+<center><table border=1 cellspacing=0 width="100%" bgcolor="#99CCCC">
+<tr>
+<td align=center width="100%"><font size=4 color="#000000"><b><a 
name="DESC">Description</a></b></font></td>
+</tr>
+</table></center>
+
+<blockquote>
+I'm pleased to announce that I am selling off my rights to the billion+ worth 
auction site, Ebay, which can be found at <A 
HREF="http://www.ebay.com";>www.ebay.com</A> to the highest bidder. This site is 
the beloved home of a number of very interesting auctions and people. But wait, 
there's more! The purchaser of this Site will also get a yummy prime rib (w/ 
horseradish sauce) and a feather. I'll ship this to anywhere, but I have to say 
that it is in a pretty good place right now, and I'd rather not move it (it is 
a dandy place to place magazines in my bathroom). I have also attached a toilet 
roller to the side of the server, but you are of course welcome to remove this. 
NOTE: Price for the ebay site must be paid in nickels and nickels only, no 
"lessor" currency, and I expect the winning bidder to deliver to me within one 
week a squirl, two donuts (chocolate creme), a ricky nelson album, three palm 
pilots and a napkin with the likeness of Jesus on it. So act now and get in 
early on the internet auction revolution! Only 2 available for sale!
+</blockquote>
+</blockquote></blockquote></center></center></strong></pre></em></font></dl></ul></li></h1></h2></h3></h4></h5></h6>
+<hr><img src="http://www.dibona.com/~chris/ebay.gif";><p><a 
name=BID><center><table border=1 cellspacing=0 width="100%" bgcolor="#99CCCC">
+<tr>
+<td align=center width="100%"><font size=5 
color="#000000"><b>Bidding</b></font></td>
+</tr>
+</table></center></a>
+<p align=center><font size=4>
+EBay, the largest Auction site (w/ Prime Rib)</font><font size=3> (Item 
#103366451)</font></p>
+<center><table border=0 cellpadding=0 cellspacing=0 width="35%">
+<tr>
+<td width="50%"><font size=2>Starts at</font></td>
+<td width="50%" align=right><font size=4>$2.00</font></td>
+</tr>
+<tr>
+<td width="50%"><font size=2>Bid increment</font></td>
+<td width="50%" align=right><font size=4>$0.25</font></td>
+</tr>
+<tr>
+<td width="50%"><font size=2><b>Minimum bid</b></font></td>
+<td width="50%" align=right><font size=4><b>$2.00</font></b></td>
+</tr>
+</table></center><br>
+<font size="3"><b>Registration required.</b> eBay requires registration in 
order to bid. Find out how to <a 
href="http://pages.ebay.com/aw/register-by-country.html";>become a registered 
user</a>. It's fast and it's <b>free</b>!</font>
+
+<form method=post action="http://cgi.ebay.com/aw-cgi/eBayISAPI.dll";><INPUT 
TYPE=HIDDEN NAME="MfcISAPICommand" VALUE="MakeBid">
+<input type=hidden name=item value=103366451>
+
+<table border="1" cellspacing="0" width="540" cellpadding="4">
+<tr>
+<td width="40" bgcolor="#99CCCC"><font size="4" 
color="#000000">&nbsp;</font></td><td width="500"><table border="0" 
width="100%" cellspacing="0"><tr><td><a 
href="http://pages.ebay.com/aw/userid.html";><strong>User ID</strong></a> or 
E-mail address</td><td><strong>Password</strong> (<a 
href="http://pages.ebay.com/aw/reqpass.html";>forgotten</a> 
it?)</td></tr><tr><td><input type="text" name="userid" size="32" 
maxlength="64"></td><td><input type="password" name="pass" size="24" 
maxlength="64"></td></tr>
+</table>
+</td>
+</tr>
+<tr>
+<td width="40" valign="top" bgcolor="#99CCCC">&nbsp;</td><td 
width="500"><input type="text" name="maxbid" size="12" maxlength="12"><font 
size="2"><i> Current minimum bid is 
2.00</i></font>&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="review 
bid"><br><font size="3">Your <strong>maximum 
</strong><strong>bid</strong>.</font><br><br><font size="2">Please type only 
numerals and the decimal point (if required). Do <b>not</b> include currency 
symbols such as a dollar sign ('$')or commas (',').<br>
+<b><font size="3">Binding contract.</font></b><br>
+<font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Placing a bid is a binding 
contract in
+many states. Do not bid unless you intend to buy this item at the amount of 
your bid.<p>
+</font>
+
+<b><font size=3>Proxy bidding for all bids</font></b><br>
+<font size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Please bid the <strong>maximum 
amount</strong> you are willing to pay
+for this item. Your maximum amount will be kept <b>secret;</b> eBay will bid 
on your behalf as necessary by increasing your bid by the current bid increment 
up until your maximum is reached. This saves you the
+trouble of having to keep track of the auction as it
+proceeds and prevents you from being outbid at the last minute unless your 
spending limit is exceeded. (See an <a 
href="http://pages.ebay.com/aw/proxy-bidding.html";>example of proxy 
bidding</a>). Also, in case of a tie for high bidder,
+<b>earlier</b> bids take precedence. And, keep in
+mind that you cannot reduce your maximum bid at a later
+date. Unless otherwise noted, bids are in U.S. dollars.
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If you have bid on this item before, note 
that your new bid must be greater than your previous bid.</font> 
+</td></tr></table></form><br><HR>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="600">
+       <TR>
+               <TD WIDTH="120" VALIGN="TOP"><A HREF="http://www.ebay.com";><img 
src="http://pics.ebay.com/aw/pics/logo_lower_tb.gif"; WIDTH="96" HSPACE="0" 
VSPACE="0" HEIGHT="42" alt="eBay logo" BORDER="0"></A></TD>
+               <TD><STRONG><FONT SIZE="3"><A 
HREF="http://www.ebay.com";>Home</A>&nbsp; 
+                       <A 
HREF="http://listings.ebay.com/aw/listings/list";>Listings</A>&nbsp; 
+                       <A 
HREF="http://pages.ebay.com/aw/ps.html";>Buyers</A>&nbsp; 
+                       <A 
HREF="http://pages.ebay.com/aw/seller-services.html";>Sellers</A>&nbsp; 
+                       <A 
HREF="http://pages.ebay.com/aw/search.html";>Search</A>&nbsp; 
+                       <A 
HREF="http://pages.ebay.com/aw/contact.html";>Help</A>&nbsp; 
+                       <A 
HREF="http://pages.ebay.com/aw/newschat.html";>News/Chat</A>&nbsp; 
+                       <A HREF="http://pages.ebay.com/aw/sitemap.html";>Site 
Map</A></FONT></STRONG>
+               </TD>
+       </TR>
+       <TR>
+               <TD COLSPAN="2">
+                       <FONT SIZE="2">Thank you for using eBay!</FONT>
+                       <BR>
+                       <DIV ALIGN="CENTER"><FONT SIZE="2"><A 
HREF="http://www.ebay.com/aboutebay98/index.html";>About 
eBay</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A 
HREF="http://pages.ebay.com/aw/safeharbor-index.html";>SafeHarbor</A></FONT></DIV>
+                       <BR>
+                       <ADDRESS><FONT SIZE="2">
+                       Copyright &copy; 1995-1999 eBay Inc. All Rights 
Reserved.
+                       </FONT></ADDRESS>
+                       <FONT SIZE="2">All trademarks and brands are the 
property of their respective owners.
+                       <BR>Use of this web site constitutes acceptance of the 
eBay <a href="http://pages.ebay.com/aw/user-agreement.html";>User Agreement</A> 
and <A HREF="http://pages.ebay.com/aw/privacy-policy.html";>Privacy 
Policy</A>.</FONT><BR>
+                       <!--auctions, auction, computer, bid, bidding, sale, 
books, coins, stamps, trading cards, memorabilia, sporting goods, music, dolls, 
comics, antiques, jewelry -->
+               </TD>
+       </TR>
+</TABLE>
+</body></html>
\ No newline at end of file

Index: Proyectos/Mecagtk/OpenSource/appa.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/appa.html
diff -N Proyectos/Mecagtk/OpenSource/appa.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/appa.html      3 Mar 2012 06:14:12 -0000       
1.1
@@ -0,0 +1,1851 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Monograph">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+<aREA Shape="Rect" coords = "407,17,512,32"  href="/search.html">
+<aREA Shape="Rect" coords = "431,3,512,18"  href="/catalog/prdindex.html">
+</MAP>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Appendix A</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Appendix A</H1>
+<H2 CLASS="ChapterSubtitle" align="right">The Tanenbaum-Torvalds Debate</H2>
+<P CLASS="BodyStart">
+What follows in this appendix are what are known in the community as the 
Tanenbaum/Linus &quot;Linux is obsolete&quot; debates. Andrew Tanenbaum is a 
well-respected researcher who has made a very good living thinking about 
operating systems and OS design. In early 1992, noticing the way that the Linux 
discussion had taken over the discussion in comp.os.minix, he decided it was 
time to comment on Linux. </P>
+<P CLASS="Body">
+Although Andrew Tanenbaum has been derided for his heavy hand and 
misjudgements of the Linux kernel, such a reaction to Tanenbaum is unfair. When 
Linus himself heard that we were including this, he wanted to make sure that 
the world understood that he holds no animus towards Tanenbaum and in fact 
would not have sanctioned its inclusion if we had not been able to convince him 
that it would show the way the world was thinking about OS design at the 
time.</P>
+<P CLASS="Body">
+We felt the inclusion of this appendix would give a good perspective on how 
things were when Linus was under pressure because he abandoned the idea of 
microkernels in academia. The first third of Linus' essay discusses this 
further. </P>
+<P CLASS="Body">
+Electronic copies of this debate are available on the Web and are easily found 
through any search service. It's fun to read this and note who joined into the 
discussion; you see user-hacker Ken Thompson (one of the founders of Unix) and 
David Miller (who is a major Linux kernel hacker now), as well as many others. 
</P>
+<P CLASS="Body">
+To put this discussion into perspective, when it occurred in 1992, the 386 was 
the dominating chip and the 486 had not come out on the market. Microsoft was 
still a small company selling DOS and Word for DOS. Lotus 123 ruled the 
spreadsheet space and WordPerfect the word processing market. DBASE was the 
dominant database vendor and many companies that are household names 
today--Netscape, Yahoo, Excite--simply did not exist. </P>
+<hr>
+<pre><code class="code">
+From: address@hidden (Andy Tanenbaum)
+Newsgroups: comp.os.minix
+Subject: LINUX is obsolete
+Date: 29 Jan 92 12:12:50 GMT
+&nbsp;
+I was in the U.S. for a couple of weeks, so I haven't commented much on
+LINUX (not that I would have said much had I been around), but for what 
+it is worth, I have a couple of comments now.
+&nbsp;
+As most of you know, for me MINIX is a hobby, something that I do in the
+evening when I get bored writing books and there are no major wars,
+revolutions, or senate hearings being televised live on CNN. My real
+job is a professor and researcher in the area of operating systems.
+&nbsp;
+As a result of my occupation, I think I know a bit about where operating
+are going in the next decade or so. Two aspects stand out:
+&nbsp;
+1. MICROKERNEL VS MONOLITHIC SYSTEM
+   Most older operating systems are monolithic, that is, the whole operating
+   system is a single a.out file that runs in 'kernel mode.'  This binary
+   contains the process management, memory management, file system and the
+   rest. Examples of such systems are Unix, MS-DOS, VMS, MVS, OS/360, 
+   MULTICS, and many more.
+&nbsp;
+   The alternative is a microkernel-based system, in which most of the OS
+   runs as separate processes, mostly outside the kernel.  They communicate
+   by message passing.  The kernel's job is to handle the message passing,
+   interrupt handling, low-level process management, and possibly the I/O.
+   Examples of this design are the RC4000, Amoeba, Chorus, Mach, and the
+   not-yet-released Windows/NT.
+&nbsp;
+   While I could go into a long story here about the relative merits of the
+   two designs, suffice it to say that among the people who actually design
+   operating systems, the debate is essentially over.  Microkernels have won.
+   The only real argument for monolithic systems was performance, and there
+   is now enough evidence showing that microkernel systems can be just as
+   fast as monolithic systems (e.g., Rick Rashid has published papers comparing
+   Mach 3.0 to monolithic systems) that it is now all over but the shoutin'.
+&nbsp;
+   MINIX is a microkernel-based system.  The file system and memory management
+   are separate processes, running outside the kernel.  The I/O drivers are
+   also separate processes (in the kernel, but only because the brain-dead
+   nature of the Intel CPUs makes that difficult to do otherwise).  LINUX is
+   a monolithic style system.  This is a giant step back into the 1970s.
+   That is like taking an existing, working C program and rewriting it in
+   BASIC.  To me, writing a monolithic system in 1991 is a truly poor idea.
+&nbsp;
+2. PORTABILITY
+   Once upon a time there was the 4004 CPU.  When it grew up it became an
+   8008.  Then it underwent plastic surgery and became the 8080.  It begat
+   the 8086, which begat the 8088, which begat the 80286, which begat the
+   80386, which begat the 80486, and so on unto the N-th generation.  In
+   the meantime, RISC chips happened, and some of them are running at over
+   100 MIPS.  Speeds of 200 MIPS and more are likely in the coming years.
+   These things are not going to suddenly vanish.  What is going to happen
+   is that they will gradually take over from the 80x86 line.  They will
+   run old MS-DOS programs by interpreting the 80386 in software.  (I even
+   wrote my own IBM PC simulator in C, which you can get by FTP from
+   ftp.cs.vu.nl =  192.31.231.42 in dir minix/simulator.)  I think it is a
+   gross error to design an OS for any specific architecture, since that is
+   not going to be around all that long.
+&nbsp;
+   MINIX was designed to be reasonably portable, and has been ported from the
+   Intel line to the 680x0 (Atari, Amiga, Macintosh), SPARC, and NS32016.
+   LINUX is tied fairly closely to the 80x86.  Not the way to go.
+&nbsp;
+Don't get me wrong, I am not unhappy with LINUX.  It will get all the people
+who want to turn MINIX in BSD Unix off my back.  But in all honesty, I would
+suggest that people who want a **MODERN** &quot;free&quot; OS look around for 
a 
+microkernel-based, portable OS, like maybe GNU or something like that.
+&nbsp;
+Andy Tanenbaum (address@hidden)
+&nbsp;
+P.S. Just as a random aside, Amoeba has a Unix emulator (running in user
+space), but it is far from complete.  If there are any people who would
+like to work on that, please let me know.  To run Amoeba you need a few 386s,
+one of which needs 16M, and all of which need the WD Ethernet card.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Linus Benedict Torvalds)
+Subject: Re: LINUX is obsolete
+Date: 29 Jan 92 23:14:26 GMT
+Organization: University of Helsinki
+&nbsp;
+Well, with a subject like this, I'm afraid I'll have to reply. 
+Apologies to minix-users who have heard enough about linux anyway.  I'd
+like to be able to just &quot;ignore the bait&quot;, but ...  Time for some
+serious flamefesting!
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;
+&gt;I was in the U.S. for a couple of weeks, so I haven't commented much on
+&gt;LINUX (not that I would have said much had I been around), but for what 
+&gt;it is worth, I have a couple of comments now.
+&gt;
+&gt;As most of you know, for me MINIX is a hobby, something that I do in the
+&gt;evening when I get bored writing books and there are no major wars,
+&gt;revolutions, or senate hearings being televised live on CNN.  My real
+&gt;job is a professor and researcher in the area of operating systems.
+&nbsp;
+You use this as an excuse for the limitations of minix? Sorry, but you
+loose: I've got more excuses than you have, and linux still beats the
+pants of minix in almost all areas.  Not to mention the fact that most
+of the good code for PC minix seems to have been written by Bruce Evans. 
+&nbsp;
+Re 1: you doing minix as a hobby - look at who makes money off minix,
+and who gives linux out for free.  Then talk about hobbies.  Make minix
+freely available, and one of my biggest gripes with it will disappear. 
+Linux has very much been a hobby (but a serious one: the best type) for
+me: I get no money for it, and it's not even part of any of my studies
+in the university.  I've done it all on my own time, and on my own
+machine. 
+&nbsp;
+Re 2: your job is being a professor and researcher: That's one hell of a
+good excuse for some of the brain-damages of minix. I can only hope (and
+assume) that Amoeba doesn't suck like minix does.
+&nbsp;
+&gt;1. MICROKERNEL VS MONOLITHIC SYSTEM
+&nbsp;
+True, linux is monolithic, and I agree that microkernels are nicer. With
+a less argumentative subject, I'd probably have agreed with most of what
+you said. From a theoretical (and aesthetical) standpoint linux looses.
+If the GNU kernel had been ready last spring, I'd not have bothered to
+even start my project: the fact is that it wasn't and still isn't. Linux
+wins heavily on points of being available now.
+&nbsp;
+&gt;   MINIX is a microkernel-based system. [deleted, but not so that you
+&gt; miss the point ]  LINUX is a monolithic style system.
+&nbsp;
+If this was the only criterion for the &quot;goodness&quot; of a kernel, you'd 
be
+right.  What you don't mention is that minix doesn't do the micro-kernel
+thing very well, and has problems with real multitasking (in the
+kernel).  If I had made an OS that had problems with a multithreading
+filesystem, I wouldn't be so fast to condemn others: in fact, I'd do my
+damndest to make others forget about the fiasco.
+&nbsp;
+[ yes, I know there are multithreading hacks for minix, but they are
+hacks, and bruce evans tells me there are lots of race conditions ]
+&nbsp;
+&gt;2. PORTABILITY
+&nbsp;
+&quot;Portability is for people who cannot write new programs&quot;
+             -me, right now (with tongue in cheek)
+&nbsp;
+The fact is that linux is more portable than minix.  What? I hear you
+say.  It's true - but not in the sense that ast means: I made linux as
+conformant to standards as I knew how (without having any POSIX standard
+in front of me).  Porting things to linux is generally /much/ easier
+than porting them to minix.
+&nbsp;
+I agree that portability is a good thing: but only where it actually has
+some meaning.  There is no idea in trying to make an operating system
+overly portable: adhering to a portable API is good enough.  The very
+/idea/ of an operating system is to use the hardware features, and hide
+them behind a layer of high-level calls.  That is exactly what linux
+does: it just uses a bigger subset of the 386 features than other
+kernels seem to do.  Of course this makes the kernel proper unportable,
+but it also makes for a /much/ simpler design.  An acceptable trade-off,
+and one that made linux possible in the first place.
+&nbsp;
+I also agree that linux takes the non-portability to an extreme: I got
+my 386 last January, and linux was partly a project to teach me about
+it.  Many things should have been done more portably if it would have
+been a real project.  I'm not making overly many excuses about it
+though: it was a design decision, and last april when I started the
+thing, I didn't think anybody would actually want to use it.  I'm happy
+to report I was wrong, and as my source is freely available, anybody is
+free to try to port it, even though it won't be easy. 
+&nbsp;
+          Linus
+&nbsp;
+PS. I apologise for sometimes sounding too harsh: minix is nice enough
+if you have nothing else. Amoeba might be nice if you have 5-10 spare
+386's lying around, but I certainly don't. I don't usually get into
+flames, but I'm touchy when it comes to linux :)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Andy Tanenbaum)
+Subject: Re: LINUX is obsolete
+Date: 30 Jan 92 13:44:34 GMT
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden
+FI (Linus Benedict Torvalds) writes:
+&gt;You use this [being a professor] as an excuse for the limitations of 
minix? 
+The limitations of MINIX relate at least partly to my being a professor:
+An explicit design goal was to make it run on cheap hardware so students
+could afford it.  In particular, for years it ran on a regular 4.77 MHZ PC
+with no hard disk.  You could do everything here including modify and recompile
+the system.  Just for the record, as of about 1 year ago, there were two
+versions, one for the PC (360K diskettes) and one for the 286/386 (1.2M).
+The PC version was outselling the 286/386 version by 2 to 1.  I don't have
+figures, but my guess is that the fraction of the 60 million existing PCs that
+are 386/486 machines as opposed to 8088/286/680x0 etc is small.  Among students
+it is even smaller. Making software free, but only for folks with enough money
+to buy first class hardware is an interesting concept.
+Of course 5 years from now that will be different, but 5 years from now 
+everyone will be running free GNU on their 200 MIPS, 64M SPARCstation-5.
+&nbsp;
+&gt;Re 2: your job is being a professor and researcher: That's one hell of a
+&gt;good excuse for some of the brain-damages of minix. I can only hope (and
+&gt;assume) that Amoeba doesn't suck like minix does.
+Amoeba was not designed to run on an 8088 with no hard disk.
+&nbsp;
+&gt;If this was the only criterion for the &quot;goodness&quot; of a kernel, 
you'd be
+&gt;right.  What you don't mention is that minix doesn't do the micro-kernel
+&gt;thing very well, and has problems with real multitasking (in the
+&gt;kernel).  If I had made an OS that had problems with a multithreading
+&gt;filesystem, I wouldn't be so fast to condemn others: in fact, I'd do my
+&gt;damndest to make others forget about the fiasco.
+A multithreaded file system is only a performance hack.  When there is only
+one job active, the normal case on a small PC, it buys you nothing and adds
+complexity to the code.  On machines fast enough to support multiple users,
+you probably have enough buffer cache to insure a hit cache hit rate, in
+which case multithreading also buys you nothing.  It is only a win when there
+are multiple processes actually doing real disk I/O.  Whether it is worth
+making the system more complicated for this case is at least debatable.
+&nbsp;
+I still maintain the point that designing a monolithic kernel in 1991 is
+a fundamental error.  Be thankful you are not my student.  You would not
+get a high grade for such a design :-)
+&nbsp;
+&gt;The fact is that linux is more portable than minix.  What? I hear you
+&gt;say.  It's true - but not in the sense that ast means: I made linux as
+&gt;conformant to standards as I knew how (without having any POSIX standard
+&gt;in front of me).  Porting things to linux is generally /much/ easier
+&gt;than porting them to minix.
+MINIX was designed before POSIX, and is now being (slowly) POSIXized as 
+everyone who follows this newsgroup knows.  Everyone agrees that user-level 
+standards are a good idea.  As an aside, I congratulate you for being able 
+to write a POSIX-conformant system without having the POSIX standard in front 
+of you. I find it difficult enough after studying the standard at great length.
+&nbsp;
+My point is that writing a new operating system that is closely tied to any
+particular piece of hardware, especially a weird one like the Intel line,
+is basically wrong.  An OS itself should be easily portable to new hardware
+platforms.  When OS/360 was written in assembler for the IBM 360
+25 years ago, they probably could be excused.  When MS-DOS was written
+specifically for the 8088 ten years ago, this was less than brilliant, as
+IBM and Microsoft now only too painfully realize. Writing a new OS only for the
+386 in 1991 gets you your second 'F' for this term.  But if you do real well
+on the final exam, you can still pass the course.
+&nbsp;
+Prof. Andrew S. Tanenbaum (address@hidden)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (David Feustel)
+Subject: Re: LINUX is obsolete
+Date: 30 Jan 92 18:57:28 GMT
+Organization: DAFCO - An OS/2 Oasis
+&nbsp;
address@hidden (Andy Tanenbaum) writes:
+&nbsp;
+&gt;I still maintain the point that designing a monolithic kernel in 1991 is
+&gt;a fundamental error.  Be thankful you are not my student.  You would not
+&gt;get a high grade for such a design :-)
+&nbsp;
+That's ok. Einstein got lousy grades in math and physics.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (-Pete French.)
+Subject: Re: LINUX is obsolete
+Date: 31 Jan 92 09:49:37 GMT
+Organization: Electronics Department, University of York, UK
+&nbsp;
+in article &lt;address@hidden&gt;, address@hidden 
+(David Megginson) says:
+&gt; 
+&gt; In article &lt;address@hidden&gt; address@hidden 
+(David &gt; Feustel) writes:
+&gt;&gt;
+&gt;&gt;That's ok. Einstein got lousy grades in math and physics.
+&gt; 
+&gt; And Dan Quayle got low grades in political science. I think that there
+&gt; are more Dan Quayles than Einsteins out there... ;-)
+&nbsp;
+What a horrible thought !
+&nbsp;
+But on the points about microkernel v monolithic, isnt this partly an
+artifact of the language being used ? MINIX may well be designed as a
+microkernel system, but in the end you still end up with a large
+monolithic chunk of binary data that gets loaded in as &quot;the OS&quot;. 
Isnt it
+written as separate programs simply because C does not support the idea
+of multiple processes within a single piece of monolithic code. Is there
+any real difference between a microkernel written as several pieces of C
+and a monolithic kernel written in something like OCCAM ? I would have
+thought that in this case the monolithic design would be a better one
+than the micorkernel style since with the advantage of inbuilt
+language concurrency the kernel could be made even more modular than the
+MINIX one is.
+&nbsp;
+Anyone for MINOX :-)
+&nbsp;
+-bat.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Ken Thompson)
+Subject: Re: LINUX is obsolete
+Date: 3 Feb 92 23:07:54 GMT
+Organization: Georgia Institute of Technology
+&nbsp;
+viewpoint may be largely unrelated to its usefulness. Many if not
+most of the software we use is probably obsolete according to the 
+latest design criteria. Most users could probably care less if the
+internals of the operating system they use is obsolete. They are
+rightly more interested in its performance and capabilities at the
+user level.
+&nbsp;
+I would generally agree that microkernels are probably the wave of
+the future. However, it is in my opinion easier to implement a
+monolithic kernel. It is also easier for it to turn into a mess in
+a hurry as it is modified.
+&nbsp;
+                    Regards,
+                        Ken 
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Kevin Brown)
+Subject: Re: LINUX is obsolete
+Date: 4 Feb 92 08:08:42 GMT
+Organization: University of Houston
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Ken Thompson) writes:
+&gt;viewpoint may be largely unrelated to its usefulness. Many if not
+&gt;most of the software we use is probably obsolete according to the 
+&gt;latest design criteria. Most users could probably care less if the
+&gt;internals of the operating system they use is obsolete. They are
+&gt;rightly more interested in its performance and capabilities at the
+&gt;user level.
+&gt;
+&gt;I would generally agree that microkernels are probably the wave of
+&gt;the future. However, it is in my opinion easier to implement a
+&gt;monolithic kernel. It is also easier for it to turn into a mess in
+&gt;a hurry as it is modified.
+&nbsp;
+How difficult is it to structure the source tree of a monolithic kernel
+such that most modifications don't have a large negative impact on the
+source?  What sorts of pitfalls do you run into in this sort of endeavor,
+and what suggestions do you have for dealing with them?
+&nbsp;
+I guess what I'm asking is: how difficult is it to organize the source
+such that most changes to the kernel remain localized in scope, even
+though the kernel itself is monolithic?
+&nbsp;
+I figure you've got years of experience with monolithic kernels :-),
+so I'd think you'd have the best shot at answering questions like
+these.
+&nbsp;
+                    Kevin Brown
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Randy Burns)
+Subject: Re: LINUX is obsolete
+Date: 30 Jan 92 20:33:07 GMT
+Organization: Sun Microsystems, Mt. View, Ca.
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;In article &lt;address@hidden&gt; address@hidden
+&gt;FI (Linus Benedict Torvalds) writes:
+&nbsp;
+&gt;Of course 5 years from now that will be different, but 5 years from now 
+&gt;everyone will be running free GNU on their 200 MIPS, 64M SPARCstation-5.
+Well, I for one would _love_ to see this happen.
+&nbsp;
+&gt;&gt;The fact is that linux is more portable than minix.  What? I hear you
+&gt;&gt;say.  It's true - but not in the sense that ast means: I made linux as
+&gt;&gt;conformant to standards as I knew how (without having any POSIX 
standard
+&gt;&gt;in front of me).  Porting things to linux is generally /much/ easier
+&gt;&gt;than porting them to minix.
+.........
+&gt;My point is that writing a new operating system that is closely tied to any
+&gt;particular piece of hardware, especially a weird one like the Intel line,
+&gt;is basically wrong. 
+First off, the parts of Linux tuned most finely to the 80x86 are the Kernel
+and the devices. My own sense is that even if Linux is simply a stopgap
+measure to let us all run GNU software, it is still worthwhile to have a
+a finely tuned kernel for the most numerous architecture presently in 
+existance.
+&nbsp;
+&gt; An OS itself should be easily portable to new hardware
+&gt;platforms. 
+Well, the only part of Linux that isn't portable is the kernel and drivers.
+Compare to the compilers, utilities, windowing system etc. this is really
+a small part of the effort. Since Linux has a large degree of call
+compatibility with portable OS's I wouldn't complain. I'm personally 
+very grateful to have an OS that makes it more likely that some of us will 
+be able to take advantage of the software that has come out of Berkeley,
+FSF, CMU etc. It may well be that in 2-3 years when ultra cheap BSD
+variants and Hurd proliferate, that Linux will be obsolete. Still, right
+now Linux greatly reduces the cost of using tools like gcc, bison, bash
+which are useful in the development of  such an OS.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Linus Benedict Torvalds)
+Subject: Re: LINUX is obsolete
+Date: 31 Jan 92 10:33:23 GMT
+Organization: University of Helsinki
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;The limitations of MINIX relate at least partly to my being a professor:
+&gt;An explicit design goal was to make it run on cheap hardware so students
+&gt;could afford it.
+&nbsp;
+All right: a real technical point, and one that made some of my comments
+inexcusable.  But at the same time you shoot yourself in the foot a bit:
+now you admit that some of the errors of minix were that it was too
+portable: including machines that weren't really designed to run unix. 
+That assumption lead to the fact that minix now cannot easily be
+extended to have things like paging, even for machines that would
+support it.  Yes, minix is portable, but you can rewrite that as
+&quot;doesn't use any features&quot;, and still be right.
+&nbsp;
+&gt;A multithreaded file system is only a performance hack.
+&nbsp;
+Not true.  It's a performance hack /on a microkernel/, but it's an
+automatic feature when you write a monolithic kernel - one area where
+microkernels don't work too well (as I pointed out in my personal mail
+to ast).  When writing a unix the &quot;obsolete&quot; way, you automatically 
get
+a multithreaded kernel: every process does it's own job, and you don't
+have to make ugly things like message queues to make it work
+efficiently. 
+&nbsp;
+Besides, there are people who would consider &quot;only a performance 
hack&quot;
+vital: unless you have a cray-3, I'd guess everybody gets tired of
+waiting on the computer all the time. I know I did with minix (and yes,
+I do with linux too, but it's /much/ better).
+&nbsp;
+&gt;I still maintain the point that designing a monolithic kernel in 1991 is
+&gt;a fundamental error.  Be thankful you are not my student.  You would not
+&gt;get a high grade for such a design :-)
+&nbsp;
+Well, I probably won't get too good grades even without you: I had an
+argument (completely unrelated - not even pertaining to OS's) with the
+person here at the university that teaches OS design.  I wonder when
+I'll learn :)
+&nbsp;
+&gt;My point is that writing a new operating system that is closely tied to any
+&gt;particular piece of hardware, especially a weird one like the Intel line,
+&gt;is basically wrong.
+&nbsp;
+But /my/ point is that the operating system /isn't/ tied to any
+processor line: Unix runs on most real processors in existence.  Yes,
+the /implementation/ is hardware-specific, but there's a HUGE
+difference.  You mention OS/360 and MS-DOG as examples of bad designs
+as they were hardware-dependent, and I agree.  But there's a big
+difference between these and linux: linux API is portable (not due to my
+clever design, but due to the fact that I decided to go for a fairly-
+well-thought-out and tested OS: unix.)
+&nbsp;
+If you write programs for linux today, you shouldn't have too many
+surprises when you just recompile them for Hurd in the 21st century.  As
+has been noted (not only by me), the linux kernel is a miniscule part of
+a complete system: Full sources for linux currently runs to about 200kB
+compressed - full sources to a somewhat complete developement system is
+at least 10MB compressed (and easily much, much more). And all of that
+source is portable, except for this tiny kernel that you can (provably:
+I did it) re-write totally from scratch in less than a year without
+having /any/ prior knowledge.
+&nbsp;
+In fact the /whole/ linux kernel is much smaller than the 386-dependent
+things in mach: i386.tar.Z for the current version of mach is well over
+800kB compressed (823391 bytes according to nic.funet.fi).  Admittedly,
+mach is &quot;somewhat&quot; bigger and has more features, but that should 
still
+tell you something. 
+&nbsp;
+          Linus
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Michael L. Kaufman)
+Subject: Re: LINUX is obsolete
+Date: 3 Feb 92 22:27:48 GMT
+Organization: EECS Department, Northwestern University
+&nbsp;
+I tried to send these two posts from work, but I think they got eaten. If you
+have seen them already, sorry.
+&nbsp;
+-------------------------------------------------------------------------------
+&nbsp;
+Andy Tanenbaum writes an interesting article (also interesting was finding out
+that he actually reads this group) but I think he is missing an important 
+point.
+&nbsp;
+He Wrote:
+&gt;As most of you know, for me MINIX is a hobby, ...
+&nbsp;
+Which is also probably true of most, if not all, of the people who are involved
+in Linux. We are not developing a system to take over the OS market, we are
+just having a good time.
+&nbsp;
+&gt;   What is going to happen
+&gt;   is that they will gradually take over from the 80x86 line.  They will
+&gt;   run old MS-DOS programs by interpreting the 80386 in software.
+&nbsp;
+Well when this happens, if I still want to play with Linux, I can just run it
+on my 386 simulator.
+&nbsp;
+&gt;   MINIX was designed to be reasonably portable, and has been ported from 
the
+&gt;   Intel line to the 680x0 (Atari, Amiga, Macintosh), SPARC, and NS32016.
+&gt;   LINUX is tied fairly closely to the 80x86.  Not the way to go.
+&nbsp;
+That's fine for the people who have those machines, but it wasn't a free 
+lunch. That portibility was gained at the cost of some performance and some 
+features on the 386. Before you decide that LINUX is not the way to go, you
+should think about what it is going to be used for.  I am going to use it for
+running memory and computation intensive graphics programs on my 486. For me,
+speed and memory were more important then future state-of-the-artness and
+portability.
+&nbsp;
+&gt;But in all honesty, I would
+&gt;suggest that people who want a **MODERN** &quot;free&quot; OS look around 
for a 
+&gt;microkernel-based, portable OS, like maybe GNU or something like that.
+&nbsp;
+I don't know of any free microkernel-based, portable OSes. GNU is still
+vaporware, and likely to remain that way for the forseeable future. Do 
+you actually have one to recomend, or are you just toying with me? ;-)
+&nbsp;
+------------------------------------------------------------------------------
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;My point is that writing a new operating system that is closely tied to any
+&gt;particular piece of hardware, especially a weird one like the Intel line,
+&gt;is basically wrong.  An OS itself should be easily portable to new hardware
+&gt;platforms.
+&nbsp;
+I think I see where I disagree with you now. You are looking at OS design
+as an end in itself. Minix is good because it is portable/Micro-Kernal/etc.
+Linux is not good because it is monolithic/tightly tied to Intel/etc. That
+is not a strange attitude for someone in the acedemic world, but it is not
+something you should expect to be universally shared. Linux is not being 
written
+as a teaching tool, or as an abstract exercise. It is being written to allow
+people to run GNU-type software _today_. The fact that it may not be in use
+in five years is less important then the fact that today (well, by April
+probably) I can run all sorts of software on it that I want to run. You keep
+saying that Minix is better, but if it will not run the software that I want
+to run, it really isn't that good (for me) at all.
+&nbsp;
+&gt;                     When OS/360 was written in assembler for the IBM 360
+&gt;25 years ago, they probably could be excused.  When MS-DOS was written
+&gt;specifically for the 8088 ten years ago, this was less than brilliant, as
+&gt;IBM and Microsoft now only too painfully realize.
+&nbsp;
+Same point. MSoft did not come out with Dos to &quot;explore the frontiers of 
os
+research&quot;. They did it to make a buck. And considering the fact that 
MS-DOS
+probably still outsells everyone else put together, I don't think that you 
+say that they have failed _in their goals_. Not that MS-Dos is the best OS
+in terms of anything else, only that it has served their needs. 
+&nbsp;
+Michael
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Julien Maisonneuve)
+Subject: Re: LINUX is obsolete
+Date: 3 Feb 92 17:10:14 GMT
+&nbsp;
+I would like to second Kevin brown in most of his remarks.
+I'll add a few user points :
+- When ast states that FS multithreading is useless, it reminds me of the many
+times I tried to let a job run in the background (like when reading an archive 
on
+a floppy), it is just unusable, the &amp; shell operator could even have been 
left
+out.
+- Most interesting utilities are not even compilable under Minix because of the
+ATK compiler's incredible limits. Those were hardly understandable on a basic 
PC,
+but become absurd on a 386. Every stupid DOS compiler has a large model (more
+expensive, OK). I hate the 13 bit compress !
+- The lack of Virtual Memory support prevents people studying this area to
+experiment, and prevents users to use large programs. The strange design of the
+MM also makes it hard to modify.
+&nbsp;
+The problem is that even doing exploratory work under minix is painful.
+If you want to get any work done (or even fun), even DOS is becoming a better
+alternative (with things like DJ GPP).
+In its basic form, it is really no more than OS course example, a good
+toy, but a toy. Obtaining and applying patches is a pain, and precludes further
+upgrades.
+&nbsp;
+Too bad when not so much is missing to make it really good.
+Thanks for the work andy, but Linux didn't deserve your answer.
+For the common people, it does many things better than Minix.
+&nbsp;
+                         Julien Maisonneuve.
+&nbsp;
+This is not a flame, just my experience.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Richard Tobin)
+Subject: Re: LINUX is obsolete
+Date: 4 Feb 92 14:46:49 GMT
+Reply-To: address@hidden (Richard Tobin)
+Organization: AIAI, University of Edinburgh, Scotland
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;A multithreaded file system is only a performance hack.  When there is only
+&gt;one job active, the normal case on a small PC, it buys you nothing 
+&nbsp;
+I find the single-threaded file system a serious pain when using
+Minix.  I often want to do something else while reading files from the
+(excruciatingly slow) floppy disk.  I rather like to play rogue while
+waiting for large C or Lisp compilations.  I look to look at files in
+one editor buffer while compiling in another.
+&nbsp;
+(The problem would be somewhat less if the file system stuck to
+serving files and didn't interact with terminal i/o.)
+&nbsp;
+Of course, in basic Minix with no virtual consoles and no chance of
+running emacs, this isn't much of a problem.  But to most people
+that's a failure, not an advantage.  It just isn't the case that on
+single-user machines there's no use for more than one active process;
+the idea only has any plausibility because so many people are used to
+poor machines with poor operating systems.
+&nbsp;
+As to portability, Minix only wins because of its limited ambitions.
+If you wanted a full-featured Unix with paging, job-control, a window
+system and so on, would it be quicker to start from basic Minix and
+add the features, or to start from Linux and fix the 386-specific
+bits?  I don't think it's fair to criticise Linux when its aims are so
+different from Minix's.  If you want a system for pedagogical use,
+Minix is the answer.  But if what you want is an environment as much
+like (say) a Sun as possible on your home computer, it has some
+deficiencies.
+&nbsp;
+-- Richard
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Andy Tanenbaum)
+Subject: Re: LINUX is obsolete
+Date: 5 Feb 92 14:48:48 GMT
+Organization: Fac. Wiskunde &amp; Informatica, Vrije Universiteit, Amsterdam
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Richard Tobin) writes:
+&gt;If you wanted a full-featured Unix with paging, job-control, a window
+&gt;system and so on, would it be quicker to start from basic Minix and
+&gt;add the features, or to start from Linux and fix the 386-specific
+&gt;bits?  
+&nbsp;
+Another option that seems to be totally forgotten here is buy Unix or a
+clone.  If you just want to USE the system, instead of hacking on its
+internals, you don't need source code.  Coherent is only $99, and there
+are various true Unix systems with more features for more money.  For the
+true hacker, not having source code is fatal, but for people who just
+want a Unix system, there are many alternatives (albeit not free).
+&nbsp;
+Andy Tanenbaum (address@hidden)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Tony Travis)
+Subject: Re: LINUX is obsolete
+Date: 6 Feb 92 02:17:13 GMT
+Organization: Department of Computing, Imperial College, University of London, 
UK.
+&nbsp;
address@hidden (Andy Tanenbaum) writes:
+&gt; Another option that seems to be totally forgotten here is buy Unix or a
+&gt; clone.  If you just want to USE the system, instead of hacking on its
+&gt; internals, you don't need source code.  Coherent is only $99, and there
+&gt; are various true Unix systems with more features for more money.  For the
+&gt; true hacker, not having source code is fatal, but for people who just
+&gt; want a Unix system, there are many alternatives (albeit not free).
+&nbsp;
+Andy, I have followed the development of Minix since the first messages
+were posted to this group and I am now running 1.5.10 with Bruce
+Evans's patches for the 386.
+&nbsp;
+I 'just' want a Unix on my PC and I am not interested in hacking on its
+internals, but I *do* want the source code!
+&nbsp;
+An important principle underlying the success and popularity of Unix is
+the philosophy of building on the work of others.
+&nbsp;
+This philosophy relies upon the availability of the source code in
+order that it can be examined, modified and re-used in new software.
+&nbsp;
+Many years ago, I was in the happy position of being an AT&amp;T Seventh
+Edition Unix source licencee but, even then, I saw your decision to
+make the source of Minix available as liberation from the shackles of
+AT&amp;T copyright!!
+&nbsp;
+I think you may sometimes forget that your 'hobby' has had a profound
+effect on the availability of 'personal' Unix (ie. affordable Unix) and
+that the 8086 PC I ran Minix 1.2 on actually cost me considerably more
+than my present 386/SX clone.
+&nbsp;
+Clearly, Minix _cannot_ be all things to all men, but I see the
+progress to 386 versions in much the same way that I see 68000 or other
+linear address space architectures: it is a good thing for people like
+me who use Minix and feel constrained by the segmented architecture of
+the PC version for applications.
+&nbsp;
+NOTHING you can say would convince me that I should use Coherent ...
+&nbsp;
+     Tony
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Richard Tobin)
+Subject: Re: LINUX is obsolete
+Date: 7 Feb 92 14:58:22 GMT
+Organization: AIAI, University of Edinburgh, Scotland
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;If you just want to USE the system, instead of hacking on its
+&gt;internals, you don't need source code.
+&nbsp;
+Unfortunately hacking on the internals is just what many of us want
+the system for...  You'll be rid of most of us when BSD-detox or GNU
+comes out, which should happen in the next few months (yeah, right).
+&nbsp;
+-- Richard
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Louie)
+Subject: Re: LINUX is obsolete
+Date: 30 Jan 92 02:55:22 GMT
+Organization: University of British Columbia, Vancouver, B.C., Canada
+&nbsp;
+In &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&nbsp;
+&gt;But in all honesty, I would
+&gt;suggest that people who want a **MODERN** &quot;free&quot; OS look around 
for a 
+&gt;microkernel-based, portable OS, like maybe GNU or something like that.
+&nbsp;
+There are really no other alternatives other than Linux for people like
+me who want a &quot;free&quot; OS.  Considering that the majority of people who
+would use a &quot;free&quot; OS use the 386, portability is really not all that
+big of a concern.  If I had a Sparc I would use Solaris.  
+&nbsp;
+As it stands, I installed Linux with gcc, emacs 18.57, kermit and all of the 
+GNU utilities without any trouble at all.  No need to apply patches. I
+just followed the installation instructions.  I can't get an OS like
+this *anywhere* for the price to do my Computer Science homework. And
+it seems like network support and then X-Windows will be ported to Linux
+well before Minix.  This is something that would be really useful. In my
+opinion, portability of standard Unix software is important also.
+&nbsp;
+I know that the design using a monolithic system is not as good as the
+microkernel.  But for the short term future (And I know I won't/can't
+be uprading from my 386), Linux suits me perfectly.
+&nbsp;
+Philip Wu
address@hidden
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Douglas Graham)
+Subject: Re: LINUX is obsolete
+Date: 1 Feb 92 00:26:30 GMT
+Organization: Bell-Northern Research, Ottawa, Canada
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&nbsp;
+&gt;   While I could go into a long story here about the relative merits of the
+&gt;   two designs, suffice it to say that among the people who actually design
+&gt;   operating systems, the debate is essentially over.  Microkernels have 
won.
+&nbsp;
+Can you recommend any (unbiased) literature that points out the strengths
+and weaknesses of the two approaches?  I'm sure that there is something
+to be said for the microkernel approach, but I wonder how closely
+Minix resembles the other systems that use it.  Sure, Minix uses lots
+of tasks and messages, but there must be more to a microkernel architecture
+than that.  I suspect that the Minix code is not split optimally into tasks.
+&nbsp;
+&gt;   The only real argument for monolithic systems was performance, and there
+&gt;   is now enough evidence showing that microkernel systems can be just as
+&gt;   fast as monolithic systems (e.g., Rick Rashid has published papers 
comparing
+&gt;   Mach 3.0 to monolithic systems) that it is now all over but the 
shoutin`.
+&nbsp;
+My main complaint with Minix is not it's performance.  It is that adding
+features is a royal pain -- something that I presume a microkernel
+architecure is supposed to alleviate.
+&nbsp;
+&gt;   MINIX is a microkernel-based system.
+&nbsp;
+Is there a consensus on this?
+&nbsp;
+&gt;   LINUX is
+&gt;   a monolithic style system.  This is a giant step back into the 1970s.
+&gt;   That is like taking an existing, working C program and rewriting it in
+&gt;   BASIC.  To me, writing a monolithic system in 1991 is a truly poor idea.
+&nbsp;
+This is a fine assertion, but I've yet to see any rationale for it.
+Linux is only about 12000 lines of code I think.  I don't see how
+splitting that into tasks and blasting messages around would improve it.
+&nbsp;
+&gt;Don't get me wrong, I am not unhappy with LINUX.  It will get all the 
people
+&gt;who want to turn MINIX in BSD Unix off my back.  But in all honesty, I 
would
+&gt;suggest that people who want a **MODERN** &quot;free&quot; OS look around 
for a 
+&gt;microkernel-based, portable OS, like maybe GNU or something like that.
+&nbsp;
+Well, there are no other choices that I'm aware of at the moment.  But
+when GNU OS comes out, I'll very likely jump ship again.  I sense that
+you *are* somewhat unhappy about Linux (and that surprises me somewhat).
+I would guess that the reason so many people embraced it, is because it
+offers more features.  Your approach to people requesting features in
+Minix, has generally been to tell them that they didn't really want that
+feature anyway.  I submit that the exodus in the direction of Linux
+proves you wrong.
+&nbsp;
+Disclaimer:  I had nothing to do with Linux development.  I just find
+             it an easier system to understand than Minix.
+--
+Doug Graham         address@hidden         My opinions are my own.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Charles Hedrick)
+Subject: Re: LINUX is obsolete
+Date: 1 Feb 92 00:27:04 GMT
+Organization: Rutgers Univ., New Brunswick, N.J.
+&nbsp;
+The history of software shows that availability wins out over
+technical quality every time.  That's Linux' major advantage.  It's a
+small 386-based system that's fairly compatible with generic Unix, and
+is freely available.  I dropped out of the Minix community a couple of
+years ago when it became clear that (1) Minix was not going to take
+advantage of anything beyond the 8086 anytime in the near future, and
+(2) the licensing -- while amazingly friendly -- still made it hard
+for people who were interested in producing a 386 version.  Several
+people apparently did nice work for the 386.  But all they could
+distribute were diffs.  This made bringing up a 386 system a job that
+isn't practical for a new user, and in fact I wasn't sure I wanted to
+do it.  
+&nbsp;
+I apologize if things have changed in the last couple of years.  If
+it's now possible to get a 386 version in a form that's ready to run,
+the community has developed a way to share Minix source, and bringing
+up normal Unix programs has become easier in the interim, then I'm
+willing to reconsider Minix.  I do like its design.
+&nbsp;
+It's possible that Linux will be overtaken by Gnu or a free BSD.
+However, if the Gnu OS follows the example of all other Gnu software,
+it will require a system with 128MB of memory and a 1GB disk to use.
+There will still be room for a small system.  My ideal OS would be 4.4
+BSD.  But 4.4's release date has a history of extreme slippage.  With
+most of their staff moving to BSDI, it's hard to believe that this
+situation is going to be improved.  For my own personal use, the BSDI
+system will probably be great.  But even their very attractive pricing
+is likely to be too much for most of our students, and even though
+users can get source from them, the fact that some of it is
+proprietary will again mean that you can't just put altered code out
+for public FTP.  At any rate, Linux exists, and the rest of these
+alternatives are vapor.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Theodore Y. Ts'o)
+Subject: Re: LINUX is obsolete
+Date: 31 Jan 92 21:40:23 GMT
+Organization: Massachusetts Institute of Technology
+In-Reply-To: address@hidden's message of 29 Jan 92 12: 12:50 GMT
+&nbsp;
+&gt;From: address@hidden (Andy Tanenbaum)
+&nbsp;
+&gt;ftp.cs.vu.nl =  192.31.231.42 in dir minix/simulator.)  I think it is a
+&gt;gross error to design an OS for any specific architecture, since that is
+&gt;not going to be around all that long.
+&nbsp;
+It's not your fault for believing that Linux is tied to the 80386
+architecture, since many Linux supporters (including Linus himself) have
+made the this statement.  However, the amount of 80386-specific code is
+probably not much more than what is in a Minix implementation, and there
+is certainly a lot less 80386 specific code in Linux than here is
+Vax-specific code in BSD 4.3.
+&nbsp;
+Granted, the port to other architectures hasn't been done yet.  But if I
+were going to bring up a Unix-like system on a new architecture, I'd
+probably start with Linux rather than Minix, simply because I want to
+have some control over what I can do with the resulting system when I'm
+done with it.  Yes, I'd have to rewrite large portions of the VM and
+device driver layers --- but I'd have to do that with any other OS.
+Maybe it would be a little bit harder than it would to port Minix to the
+new architecture; but this would probably be only true for the first
+architecture that we ported Linux to.
+&nbsp;
+&gt;While I could go into a long story here about the relative merits of the
+&gt;two designs, suffice it to say that among the people who actually design
+&gt;operating systems, the debate is essentially over.  Microkernels have won.
+&gt;The only real argument for monolithic systems was performance, and there
+&gt;is now enough evidence showing that microkernel systems can be just as
+&gt;fast as monolithic systems (e.g., Rick Rashid has published papers 
comparing
+&gt;Mach 3.0 to monolithic systems) that it is now all over but the shoutin'.
+&nbsp;
+This is not necessarily the case; I think you're painting a much more
+black and white view of the universe than necessarily exists.  I refer
+you to such papers as Brent Welsh's (address@hidden) &quot;The
+Filsystem Belongs in the Kernel&quot; paper, where in he argues that the
+filesystem is a mature enough abstraction that it should live in the
+kernel, not outside of it as it would in a strict microkernel design.
+&nbsp;
+There also several people who have been concerned about the speed of
+OSF/1 Mach when compared with monolithic systems; in particular, the
+nubmer of context switches required to handle network traffic, and
+networked filesystems in particular.
+&nbsp;
+I am aware of the benefits of a micro kernel approach.  However, the
+fact remains that Linux is here, and GNU isn't --- and people have been
+working on Hurd for a lot longer than Linus has been working on Linux.
+Minix doesn't count because it's not free.  :-)  
+&nbsp;
+I suspect that the balance of micro kernels versus monolithic kernels
+depend on what you're doing.  If you're interested in doing research, it
+is obviously much easier to rip out and replace modules in a micro
+kernel, and since only researchers write papers about operating systems,
+ipso facto micro kernels must be the right approach.  However, I do know
+a lot of people who are not researchers, but who are rather practical
+kernel programmers, who have a lot of concerns over the cost of copying
+and the cost of context switches which are incurred in a micro kernel.
+&nbsp;
+By the way, I don't buy your arguments that you don't need a
+multi-threaded filesystem on a single user system.  Once you bring up a
+windowing system, and have a compile going in one window, a news reader
+in another window, and UUCP/C News going in the background, you want
+good filesystem performance, even on a single-user system.  Maybe to a
+theorist it's an unnecessary optimization and a (to use your words)
+&quot;performance hack&quot;, but I'm interested in a Real operating system ---
+not a research toy.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Theodore Ts'o                           bloom-beacon!mit-athena!tytso
+308 High St., Medford, MA 02155          address@hidden
+   Everybody's playing the game, but nobody's rules are the same!
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden
+Subject: Re: LINUX is obsolete
+Date: 31 Jan 92 13:21:44 GMT
+Organization: a blip of entropy
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;
+&gt;   MINIX was designed to be reasonably portable, and has been ported from 
the
+&gt;   Intel line to the 680x0 (Atari, Amiga, Macintosh), SPARC, and NS32016.
+&gt;   LINUX is tied fairly closely to the 80x86.  Not the way to go.
+&nbsp;
+If you looked at the source instead of believing the author, you'd realise
+this is not true!
+&nbsp;
+He's replaced 'fubyte' by a routine which explicitly uses a segment register
+- but that could be easily changed. Similarly, apart from a couple of places
+which assume the '386 MMU, a couple of macros to hide the exact page sizes
+etc would make porting trivial. Using '386 TSS's makes the code simpler,
+but the VAX and WE32000 have similar structures.
+&nbsp;
+As he's already admitted, a bit of planning would have the the system
+neater, but merely putting '386 assembler around isn't a crime!
+&nbsp;
+And with all due respect:
+  - the Book didn't make an issue of portability (apart from a few
+    &quot;#ifdef M8088&quot;s)
+  - by the time it was released, Minix had come to depend on several
+    8086 &quot;features&quot; that caused uproar from the 68000 users.
+&nbsp;
+&gt;Andy Tanenbaum (address@hidden)
+&nbsp;
+joe.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Lawrence C. Foard)
+Subject: Re: LINUX is obsolete
+Date: 5 Feb 92 14:56:30 GMT
+Organization: Worcester Polytechnic Institute
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;Don`t get me wrong, I am not unhappy with LINUX.  It will get all the 
people
+&gt;who want to turn MINIX in BSD Unix off my back.  But in all honesty, I 
would
+&gt;suggest that people who want a **MODERN** &quot;free&quot; OS look around 
for a 
+&gt;microkernel-based, portable OS, like maybe GNU or something like that.
+&nbsp;
+I believe you have some valid points, although I am not sure that a
+microkernel is necessarily better. It might make more sense to allow some
+combination of the two. As part of the IPC code I'm writting for Linux I am
+going to include code that will allow device drivers and file systems to run
+as user processes. These will be significantly slower though, and I believe it
+would be a mistake to move everything outside the kernel (TCP/IP will be
+internal).
+&nbsp;
+Actually my main problem with OS theorists is that they have never tested
+there ideas! None of these ideas (with a partial exception for MACH) has ever
+seen the light of day. 32 bit home computers have been available for almost a
+decade and Linus was the first person to ever write a working OS for them
+that can be used without paying AT&amp;T $100,000. A piece of software in hand 
is
+worth ten pieces of vaporware, OS theorists are quick to jump all over an OS
+but they are unwilling to ever provide an alternative. 
+&nbsp;
+The general consensus that Micro kernels is the way to go means nothing when
+a real application has never even run on one.
+&nbsp;
+The release of Linux is allowing me to try some ideas I've been wanting to
+experment with for years, but I have never had the opportunity to work with
+source code for a functioning OS. 
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Andy Tanenbaum)
+Subject: Re: LINUX is obsolete
+Date: 5 Feb 92 23:33:23 GMT
+Organization: Fac. Wiskunde &amp; Informatica, Vrije Universiteit, Amsterdam
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Lawrence 
+C. Foard) writes:
+&gt;Actually my main problem with OS theorists is that they have never tested
+&gt;there ideas! 
+I'm mortally insulted.  I AM NOT A THEORIST.  Ask anybody who was at our
+department meeting yesterday (in joke).
+&nbsp;
+Actually, these ideas have been very well tested in practice.  OSF is betting
+its whole business on a microkernel (Mach 3.0).  USL is betting its business
+on another one (Chorus).  Both of these run lots of software, and both have
+been extensively compared to monolithic systems.  Amoeba has been fully
+implemented and tested for a number of applications.  QNX is a microkernel
+based system, and someone just told me the installed base is 200,000 systems.
+Microkernels are not a pipe dream.  They represent proven technology.
+&nbsp;
+The Mach guys wrote a paper called &quot;Unix as an application program.&quot;
+It was by Golub et al., in the Summer 1990 USENIX conference.  The Chorus
+people also have a technical report on microkernel performance, and I 
+coauthored another paper on the subject, which I mentioned yesterday
+(Dec. 1991 Computing Systems).  Check them out.
+&nbsp;
+Andy Tanenbaum (address@hidden)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (peter da silva)
+Subject: Re: LINUX is obsolete
+Organization: Xenix Support, FICC
+Date: Thu, 6 Feb 1992 16:02:47 GMT
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt; QNX is a microkernel
+&gt; based system, and someone just told me the installed base is 200,000 
systems.
+&nbsp;
+Oh yes, while I'm on the subject... there are over 3 million Amigas out there,
+which means that there are more of them than any Unix vendor has shipped, and
+probably more than all Unix systems combined.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (peter da silva)
+Subject: Re: LINUX is obsolete
+Organization: Xenix Support, FICC
+Date: Thu, 6 Feb 1992 16:00:22 GMT
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Lawrence 
+C. Foard) writes:
+&gt; Actually my main problem with OS theorists is that they have never tested
+&gt; there ideas!
+&nbsp;
+I beg to differ... there are many microkernel operating systems out there
+for everything from an 8088 (QNX) up to large research systems.
+&nbsp;
+&gt; None of these ideas (with a partial exception for MACH) has ever
+&gt; seen the light of day. 32 bit home computers have been available for 
almost a
+&gt; decade and Linus was the first person to ever write a working OS for them
+&gt; that can be used without paying AT&amp;T $100,000.
+&nbsp;
+I must have been imagining AmigaOS, then. I've been using a figment of my
+imagination for the past 6 years.
+&nbsp;
+AmigaOS is a microkernel message-passing design, with better response time
+and performance than any other readily available PC operating system: including
+MINIX, OS/2, Windows, MacOS, Linux, Unix, and *certainly* MS-DOS.
+&nbsp;
+The microkernel design has proven invaluable. Things like new file systems
+that are normally available only from the vendor are hobbyist products on
+the Amiga. Device drivers are simply shared libraries and tasks with specific
+entry points and message ports. So are file systems, the window system, and
+so on. It's a WONDERFUL design, and validates everything that people have
+been saying about microkernels. Yes, it takes more work to get them off the
+ground than a coroutine based macrokernel like Unix, but the versatility
+pays you back many times over.
+&nbsp;
+I really wish Andy would do a new MINIX based on what has been learned since
+the first release. The factoring of responsibilities in MINIX is fairly poor,
+but the basic concept is good.
+&nbsp;
+&gt; The general consensus that Micro kernels is the way to go means nothing 
when
+&gt; a real application has never even run on one.
+&nbsp;
+I'm dreaming again. I sure throught Deluxe Paint, Sculpt 3d, Photon Paint,
+Manx C, Manx SDB, Perfect Sound, Videoscape 3d, and the other programs I
+bought for my Amiga were &quot;real&quot;. I'll have to send the damn things 
back now,
+I guess.
+&nbsp;
+The availability of Linux is great. I'm delighted it exists. I'm sure that
+the macrokernel design is one reason it has been implemented so fast, and this
+is a valid reason to use macrokernels. BUT... this doesn't mean that
+microkernels are inherently slow, or simply research toys.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Dave Smythe)
+Subject: Re: LINUX is obsolete
+Date: 10 Feb 92 07:08:22 GMT
+Organization: Netcom - Online Communication Services  (408 241-9760 guest)
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Lawrence 
+C. Foard) writes:
+&gt;Actually my main problem with OS theorists is that they have never tested
+&gt;there ideas! None of these ideas (with a partial exception for MACH) has 
ever
+&gt;seen the light of day.
+&nbsp;
+David Cheriton (Prof. at Stanford, and author of the V system) said something
+similar to this in a class in distributed systems.  Paraphrased:
+&nbsp;
+  &quot;There are two kinds of researchers: those that have implemented
+   something and those that have not.  The latter will tell you that
+   there are 142 ways of doing things and that there isn't consensus
+   on which is best.  The former will simply tell you that 141 of 
+   them don't work.&quot;
+&nbsp;
+He really rips on the OSI-philes as well, for a similar reason.  The Internet
+protocols are adapted only after having been in use for a period of time,
+preventing things from getting standardized that will never be implementable
+in a reasonable fashion.  OSI adherents, on the other hand, seem intent on
+standardizing everything possible, including &quot;escapes&quot; from the 
standard,
+before a reasonable reference implementation exists.  Consequently, you see
+obsolete ideas immortalized, such as sub-byte-level data field packing,
+which makes good performance difficult when your computer is drinking from
+a 10+ Gbs fire-hose :-).
+&nbsp;
+Just my $.02
+&nbsp;
+D
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Linus Benedict Torvalds)
+Subject: Apologies (was Re: LINUX is obsolete)
+Date: 30 Jan 92 15:38:16 GMT
+Organization: University of Helsinki
+&nbsp;
+In article &lt;address@hidden&gt; I wrote:
+&gt;Well, with a subject like this, I'm afraid I'll have to reply.
+&nbsp;
+And reply I did, with complete abandon, and no thought for good taste
+and netiquette.  Apologies to ast, and thanks to John Nall for a friendy
+&quot;that's not how it's done&quot;-letter.  I over-reacted, and am now 
composing
+a (much less acerbic) personal letter to ast.  Hope nobody was turned
+away from linux due to it being (a) possibly obsolete (I still think
+that's not the case, although some of the criticisms are valid) and (b)
+written by a hothead :-)
+&nbsp;
+          Linus &quot;my first, and hopefully last flamefest&quot; Torvalds
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Peter MacDonald)
+Subject: re: Linux is obsolete
+Date: 1 Feb 92 02:10:06 GMT
+Organization: University of Victoria, Victoria, BC, CANADA
+&nbsp;
+Since I think I posted one of the earliest messages in all this discussion
+of Minix vs Linux, I feel compelled to comment on my reasons for 
+switching from Minix to Linux.  In order of importance they are:
+&nbsp;
+  1) Linux is free
+  2) Linux is evolving at a satisfactory clip (because new features
+     are accepted into the distribution by Linus).
+&nbsp;
+The first requires some explanation, because if I have already purchased
+Minix, what posssible concern could price have for me?  Simple.
+If the OS is free, many more people will use/support/enhance it.
+This is also the same reasoning I used when I bought my 386 instead
+of a sparc (which I could have got for just 30% more).  Since 
+PCs are cheap and generally available, more people will buy/use
+them and thus good, cheap/free software will be abundant. 
+&nbsp;
+The second should be pretty obvious to anyone who has been using Minix
+for for any period of time.  AST generally does not accept enhancements
+to Minix.  This is not meant as a challenge, but merely a statement of
+fact.  AST has good and legitimate reasons for this, and I do not dispute
+them.  But Minix has some limitations which I just could no longer
+live with, and due to this policy, the prospect of seeing them resolved
+in reasonable time was unsatisfactory.  These limitations include:
+&nbsp;
+   no 386 support
+   no virtual consoles
+   no soft links
+   no select call
+   no ptys
+   no demand paging/swapping/shared-text/shared-libs... (efficient mm)
+   chmem (inflexible mm)
+   no X-Windows (advocated for the same reasons as Linux and the 386).
+   no TCP/IP
+   no GNU/SysV integration (portability)
+   
+Some of these could be fixed by patches (and if you have done this
+yourself, I don't have to tell you how satisfactory that is), but at 
+least the last 5 items were/are beyond any reasonable expectation.
+&nbsp;
+Finally, my comment (crack?) about Minix's segmented kernel, or
+micro-kernel architecture was more an expression of my frustration/
+bewilderment at attempting to use the Minix PTY patches as a guide
+of how to do it under Linux.  That particular instance was one where
+message passing greatly complicated the implementation of a feature.
+&nbsp;
+I do have an opinion about Monlithic vs Message Passing, but won't 
+express it now, and did not mean to expresss it then.  My goals are
+totally short term (maximum functionality in the minimum amount of 
+time/cost/hassle), and so my views on this are irrelevant, and should
+not be misconstrued.  If you are non-plussed by the lack of the above
+features, then you should consider Minix, as long as you don't mind 
+paying of course :)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Olaf Schlueter)
+Subject: Re: Linux is obsolete
+Date: 7 Feb 92 11:41:44 GMT
+Organization: Toppoint Mailbox e.V.
+&nbsp;
+Just a few comments to the discussion of Linux vs Minix, which evolved
+partly to a discussion of monolithic vs micro-kernel.
+&nbsp;
+I think there will be no aggreement between the two parties advocating
+either concept, if they forget, that Linux and Minix have been designed
+for different applications.  If you want a cheap, powerful and
+enhancable Unix system running on a single machine, with the possibility
+to adapt standard Unix software without pain, then Linux is for you.  If
+you are interested in modern operating system concepts, and want to
+learn how a microkernel based system works, then Minix is the better
+choice. 
+&nbsp;
+It is not an argument against microkernel system, that for the time
+being monolithic implemenations of Unix on PCs have a better
+performance.  This means only, that Unix is maybe better implemented as
+a monolithic OS, at least as long as it runs on a single machine.  From
+the users point of view, the internal design of the OS doesn't matter at
+all.  Until it comes to networks.  On the monolithic approach, a file
+server will become a user process based on some hardware facility like
+ethernet.  Programs which want to use this facility will have to use
+special libraries which offer the calls for communication with this
+server.  In a microkernel system it is possible to incorporate the
+server into the OS without the need for new &quot;system&quot; calls.  From the
+users point of view this has the advantage, that nothing changes, he
+just gets better performance (in terms of more disk space for example). 
+From the implementors point of view, the microkernel system is faster
+adaptable to changes in hardware design. 
+&nbsp;
+It has been critized, that AST rejects any improvements to Minix.  As he
+is interested in the educational value of Minix, I understand his
+argument, that he wants to keep the code simple, and don't want to
+overload it with features.  As an educational tool, Minix is written as
+a microkernel system, although it is running on hardware platforms, who
+will probably better perform with a monolithic OS.  But the area of
+network applications is growing and modern OS like Amoeba or Plan 9
+cannot be written as monolithic systems.  So Minix has been written with
+the intention to give students a practical example of a microkernel OS,
+to let them play with tasks and messages.  It was not the idea to give a
+lot of people a cheap, powerful OS for a tenth of the price of SYSV or
+BSD implementations. 
+&nbsp;
+Resumee: Linux is not better than Minix, or the other way round. They
+are different for good reasons.
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (David Megginson)
+Subject: Mach/Minix/Linux/Gnu etc.
+Date: 1 Feb 92 17:11:03 GMT
+Organization: University of Toronto - EPAS
+&nbsp;
+Well, this has been a fun discussion. I am absolutely convinced by
+Prof. Tanenbaum that a micro-kernel _is_ the way to go, but the more
+I look at the Minix source, the less I believe that it is a
+micro-kernel.  I would probably not bother porting Linux to the
+M68000, but I want more services than Minix can offer.
+&nbsp;
+What about a micro-kernel which is message/syscall compatible with
+MACH? It doesn't actually have to do everything that MACH does, like
+virtual memory paging -- it just has to _look_ like MACH from the
+outside, to fool programs like the future Gnu Unix-emulator, BSD, etc.
+This would extend the useful lives of our M68000- or 80286-based
+machines for a little longer. In the meantime, I will probably stay
+with Minix for my ST rather than switching back to MiNT -- after all,
+Minix at least looks like Unix, while MiNT looks like TOS trying to
+look like Unix (it has to, to be TOS compatible).
+&nbsp;
+David
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (peter da silva)
+Newsgroups: comp.os.minix
+Subject: What good does this war do? (Re: LINUX is obsolete)
+Date: 3 Feb 92 16:37:24 GMT
+Organization: Xenix Support, FICC
+&nbsp;
+Will you quit flaming each other?
+&nbsp;
+I mean, linux is designed to provide a reasonably high performance environment
+on a hardware platform crippled by years of backwards-compatible kludges. Minix
+is designed as a teaching tool. Neither is that good at doing the other's job,
+and why should they? The fact that Minix runs out of steam quickly (and it
+does) isn't a problem in its chosen mileau. It's sure better than the TOY
+operating system. The fact that Linux isn't transportable beyond the 386/AT
+platform isn't a problem when there are millions of them out there (and quite
+cheap: you can get a 386/SX for well under $1000).
+&nbsp;
+A monolithic kernel is easy enough to build that it's worth doing it if it gets
+a system out the door early. Think of it as a performance hack for programmer
+time. The API is portable. You can replace the kernel with a microkernel
+design (and MINIX isn't the be-all and end-all of microkernel designs either:
+even for low end PCs... look at AmigaOS) without disturbing the applications.
+That's the whole point of a portable API in the first place.
+&nbsp;
+Microkernels are definitely a better design for many tasks. I takes more
+work to make them efficient, so a simpler design that doesn't take advantage
+of the microkernel in any real way is worth doing for pedagogical reasons.
+Think of it as a performance hack for student time. The design is still good
+and when you can get an API to the microkernel interface you can get VERY
+impressive performance (thousands of context switches per second on an 8
+MHz 68000).
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Andy Tanenbaum)
+Subject: Unhappy campers
+Date: 3 Feb 92 22:46:40 GMT
+Organization: Fac. Wiskunde &amp; Informatica, Vrije Universiteit, Amsterdam
+&nbsp;
+I've been getting a bit of mail lately from unhappy campers.  (Actually 10 
+messages from the 43,000 readers may seem like a lot, but it is not really.)
+There seem to be three sticking points:
+&nbsp;
+   1. Monolithic kernels are just as good as microkernels
+   2. Portability isn't so important
+   3. Software ought to be free
+&nbsp;
+If people want to have a serious discussion of microkernels vs. monolithic
+kernels, fine.  We can do that in comp.os.research.  But please don't sound off
+if you have no idea of what you are talking about.  I have helped design
+and implement 3 operating systems, one monolithic and two micro, and have 
+studied many others in detail.  Many of the arguments offered are nonstarters
+(e.g., microkernels are no good because you can't do paging in user space--
+except that Mach DOES do paging in user space).  
+&nbsp;
+If you don't know much about microkernels vs. monolithic kernels, there is
+some useful information in a paper I coauthored with Fred Douglis, Frans
+Kaashoek and John Ousterhout in the Dec. 1991 issue of COMPUTING SYSTEMS, the 
+USENIX journal).  If you don't have that journal, you can FTP the paper from 
+ftp.cs.vu.nl (192.31.231.42) in directory amoeba/papers as comp_sys.tex.Z 
+(compressed TeX source) or comp_sys.ps.Z (compressed PostScript). The paper
+gives actual performance measurements and supports Rick Rashid's conclusion 
that 
+microkernel based systems are just as efficient as monolithic kernels.
+&nbsp;
+As to portability, there is hardly any serious discussion possible any more.
+Unix has been ported to everything from PCs to Crays.  Writing a portable
+OS is not much harder than a nonportable one, and all systems should be
+written with portability in mind these days.  Surely Linus' OS professor
+pointed this out.  Making OS code portable is not something I invented in 1987.
+&nbsp;
+While most people can talk rationally about kernel design and portability,
+the issue of free-ness is 100% emotional.  You wouldn't believe how much
+[expletive deleted] I have gotten lately about MINIX not being free.  MINIX
+costs $169, but the license allows making two backup copies, so the effective 
+price can be under $60.  Furthermore, professors may make UNLIMITED copies 
+for their students. Coherent is $99. FSF charges &gt;$100 for the tape its 
&quot;free&quot; 
+software comes on if you don't have Internet access, and I have never heard 
+anyone complain.  4.4 BSD is $800.  I don't really believe money is the issue.
+Besides, probably most of the people reading this group already have it.
+&nbsp;
+A point which I don't think everyone appreciates is that making something
+available by FTP is not necessarily the way to provide the widest distribution.
+The Internet is still a highly elite group.  Most computer users are NOT on it.
+It is my understanding from PH that the country where MINIX is most widely used
+is Germany, not the U.S., mostly because one of the (commercial) German 
+computer magazines has been actively pushing it.  MINIX is also widely  used in
+Eastern Europe, Japan, Israel, South America, etc.  Most of these people would
+never have gotten it if there hadn't been a company selling it.
+&nbsp;
+Getting back to what &quot;free&quot; means, what about free source code?  
Coherent
+is binary only, but MINIX has source code, just as LINUX does.  You can change
+it any way you want, and post the changes here.  People have been doing that 
+for 5 years without problems. I have been giving free updates for years, too. 
+&nbsp;
+I think the real issue is something else. I've been repeatedly offered virtual
+memory, paging, symbolic links, window systems, and all manner of features. I 
+have usually declined because I am still trying to keep the system simple 
+enough for students to understand.  You can put all this stuff in your version,
+but I won't put it in mine. I think it is this point which irks the people who
+say &quot;MINIX is not free,&quot; not the $60.
+&nbsp;
+An interesting question is whether Linus is willing to let LINUX become 
&quot;free&quot;
+of his control.  May people modify it (ruin it?) and sell it?  Remember the
+hundreds of messages with subject &quot;Re: Your software sold for money&quot; 
when it 
+was discovered the MINIX Centre in England was selling diskettes with news 
+postings, more or less at cost?
+&nbsp;
+Suppose Fred van Kempen returns from the dead and wants to take over, creating
+Fred's LINUX and Linus' LINUX, both useful but different. Is that ok?  The 
+test comes when a sizable group of people want to evolve LINUX in a way Linus 
+does not want.  Until that actually happens the point is moot, however.
+&nbsp;
+If you like Linus' philosophy rather than mine, by all means, follow him, but 
+please don't claim that you're doing this because LINUX is &quot;free.&quot;  
Just
+say that you want a system with lots of bells and whistles.  Fine. Your choice.
+I have no argument with that.  Just tell the truth.
+&nbsp;
+As an aside, for those folks who don't read news headers, Linus is in Finland
+and I am in The Netherlands.  Are we reaching a situation where another
+critical industry, free software, that had been totally dominated by the U.S.
+is being taken over by the foreign competition?  Will we soon see
+President Bush coming to Europe with Richard Stallman and Rick Rashid
+in tow, demanding that Europe import more American free software?
+&nbsp;
+Andy Tanenbaum (address@hidden)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Andy Tanenbaum)
+Subject: Re: Unhappy campers
+Date: 5 Feb 92 23:23:26 GMT
+Organization: Fac. Wiskunde &amp; Informatica, Vrije Universiteit, Amsterdam
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Fred Fish) writes:
+&gt;If PH was not granted a monopoly on distribution, it would have been 
possible
+&gt;for all of the interested minix hackers to organize and set up a group that
+&gt;was dedicated to producing enhanced-minix.  This aim of this group could 
have
+&gt;been to produce a single, supported version of minix with all of the 
commonly
+&gt;requested enhancements.  This would have allowed minix to evolve in much 
the
+&gt;same way that gcc has evolved over the last few years.  
+This IS possible.  If a group of people wants to do this, that is fine.
+I think co-ordinating 1000 prima donnas living all over the world will be
+as easy as herding cats, but there is no legal problem.  When a new release
+is ready, just make a diff listing against 1.5 and post it or make it FTPable.
+While this will require some work on the part of the users to install it,
+it isn't that much work.  Besides, I have shell scripts to make the diffs
+and install them.  This is what Fred van Kempen was doing.  What he did wrong
+was insist on the right to publish the new version, rather than diffs against
+the PH baseline.  That cuts PH out of the loop, which, not surprisingly, they
+weren't wild about.    If people still want to do this, go ahead.  
+&nbsp;
+Of course, I am not necessarily going to put any of these changes in my 
version,
+so there is some work keeping the official and enhanced ones in sync, but I
+am willing to co-operate to minimize work.  I did this for a long time with
+Bruce Evans and Frans Meulenbroeks.
+&nbsp;
+If Linus wants to keep control of the official version, and a group of eager
+beavers want to go off in a different direction, the same problem arises.
+I don't think the copyright issue is really the problem.  The problem is
+co-ordinating things.  Projects like GNU, MINIX, or LINUX  only hold together
+if one person is in charge.   During the 1970s, when structured programming
+was introduced, Harlan Mills pointed out that the programming team should
+be organized like a surgical team--one surgeon and his or her assistants,
+not like a hog butchering team--give everybody an axe and let them chop away.
+&nbsp;
+Anyone who says you can have a lot of widely dispersed people hack away on
+a complicated piece of code and avoid total anarchy has never managed a
+software project.  
+&nbsp;
+&gt;Where is the sizeable group of people that want to evolve gcc in a way that
+&gt;rms/FSF does not approve of?
+A compiler is not something people have much emotional attachment to.  If
+the language to be compiled is a given (e.g., an ANSI standard), there isn't
+much room for people to invent new features.  An operating system has unlimited
+opportunity for people to implement their own favorite features. 
+&nbsp;
+Andy Tanenbaum (address@hidden)
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Linus Benedict Torvalds)
+Subject: Re: Unhappy campers
+Date: 6 Feb 92 10:33:31 GMT
+Organization: University of Helsinki
+&nbsp;
+In article &lt;address@hidden&gt; address@hidden (Andy Tanenbaum) writes:
+&gt;
+&gt;If Linus wants to keep control of the official version, and a group of 
eager
+&gt;beavers want to go off in a different direction, the same problem arises.
+&nbsp;
+This is the second time I've seen this &quot;accusation&quot; from ast, who 
feels
+pretty good about commenting on a kernel he probably haven't even seen.
+Or at least he hasn't asked me, or even read alt.os.linux about this.
+Just so that nobody takes his guess for the full thruth, here's my
+standing on &quot;keeping control&quot;, in 2 words (three?):
+&nbsp;
+I won't.
+&nbsp;
+The only control I've effectively been keeping on linux is that I know
+it better than anybody else, and I've made my changes available to
+ftp-sites etc.  Those have become effectively official releases, and I
+don't expect this to change for some time: not because I feel I have
+some moral right to it, but because I haven't heard too many complaints,
+and it will be a couple of months before I expect to find people who
+have the same &quot;feel&quot; for what happens in the kernel.  (Well, maybe
+people are getting there: tytso certainly made some heavy changes even
+to 0.10, and others have hacked it as well)
+&nbsp;
+In fact I have sent out feelers about some &quot;linux-kernel&quot; mailing 
list
+which would make the decisions about releases, as I expect I cannot
+fully support all the features that will /have/ to be added: SCSI etc,
+that I don't have the hardware for.  The response has been non-existant:
+people don't seem to be that eager to change yet.  (well, one person
+felt I should ask around for donations so that I could support it - and
+if anybody has interesting hardware lying around, I'd be happy to accept
+it :)
+&nbsp;
+The only thing the copyright forbids (and I feel this is eminently
+reasonable) is that other people start making money off it, and don't
+make source available etc...  This may not be a question of logic, but
+I'd feel very bad if someone could just sell my work for money, when I
+made it available expressly so that people could play around with a
+personal project.  I think most people see my point. 
+&nbsp;
+That aside, if Fred van Kempen wanted to make a super-linux, he's quite
+wellcome.  He won't be able to make much money on it (distribution fee
+only), and I don't think it's that good an idea to split linux up, but I
+wouldn't want to stop him even if the copyright let me. 
+&nbsp;
+&gt;I don't think the copyright issue is really the problem.  The problem is
+&gt;co-ordinating things.  Projects like GNU, MINIX, or LINUX  only hold 
together
+&gt;if one person is in charge.
+&nbsp;
+Yes, coordination is a big problem, and I don't think linux will move
+away from me as &quot;head surgeon&quot; for some time, partly because most 
people
+understand about these problems.  But copyright /is/ an issue: if people
+feel I do a bad job, they can do it themselves.  Likewise with gcc.  The
+minix copyright, however, means that if someone feels he could make a
+better minix, he either has to make patches (which aren't that great
+whatever you say about them) or start off from scratch (and be attacked
+because you have other ideals). 
+&nbsp;
+Patches aren't much fun to distribute: I haven't made cdiffs for a
+single version of linux yet (I expect this to change: soon the patches
+will be so much smaller than the kernel that making both patches and a
+complete version available is a good idea - note that I'd still make the
+whole version available too). Patches upon patches are simply
+impractical, especially for people that may do changes themselves.
+&nbsp;
+&gt;&gt;Where is the sizeable group of people that want to evolve gcc in a way 
that
+&gt;&gt;rms/FSF does not approve of?
+&gt;A compiler is not something people have much emotional attachment to.  If
+&gt;the language to be compiled is a given (e.g., an ANSI standard), there 
isn't
+&gt;much room for people to invent new features.  An operating system has 
unlimited
+&gt;opportunity for people to implement their own favorite features. 
+&nbsp;
+Well, there's GNU emacs... Don't tell us people haven't got emotional
+attachment to editors :)
+&nbsp;
+          Linus
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (David Miller)
+Subject: Linux is Obsolete and follow up postings
+Date: 3 Feb 92 01:03:46 GMT
+Organization: AppliedComputerGroup
+&nbsp;
+As an observer interested in operating system design, I couldn't resist this
+thread.  Please realize that I am not really experienced with minux
+or linux: I have been into unix for many years.  First, a few observations:
+&nbsp;
+Minix was written to be an educational tool for ASTs' classes, not a commercial
+operating system. It was never a design parameter to have it run freely
+available source code for unix systems.  I think it was also a statement of
+how operating systems should be designed, with a micro kernel and seperate 
+processes covering as much of the required functionality as possible.
+&nbsp;
+Linux was written mostly as a learning exercise on Linus part - how to 
+program the 386 family.  Designing the ultimate operating system was not
+an objective.  Providing a usable, free platform that would run all sorts
+of widely available free software was a consideration, and one that appears
+to have been well met.
+&nbsp;
+Criticism from anyone that either of these systems isn't what *they* would
+like it to be is misplaced. After all, anybody that has a computer that will
+run either system is free to do what Linus and Andrew did: write your own!
+&nbsp;
+I, for one, applaud Linus for his considerable effort in developing Linux
+and his decision to make it free to everybody.  I applaud AST for his 
+effort to make minix affordable - I have real trouble relating to complaints
+that minix isn't free.  If you can afford the time to explore minix, and a
+basic computer system, $150 is not much more - and you do get a book to go
+with it.
+&nbsp;
+Next, a few questions for the professor:
+&nbsp;
+Is minix supposed to be a &quot;real operating system&quot; or an educational 
tool ?
+As an educational tool it is an excellent work.  As a real operating system
+it presents some terribly rough edges (why no malloc() ?, just for  starters)
+My feeling from reading The Book and listening to postings here is that you
+wanted a tool to teach your classes, and a lot of others wanted to play with
+an affordable operating system.  These others have been trying to bolt on 
+enough features to make it a &quot;real operating system&quot;, with less than 
+outstanding success.
+&nbsp;
+Why split fundemental os functions, such as memory management, into user
+processes?  As all good *nix gurus know, the means to success is to
+divide and conquer, with the goal being to *simplify* the problem into
+managable, well defined components.  If splitting basic parts of the
+operating system into user space processes complicates the function by
+introducing additional mechanisms (message passing, complicated signals),
+have we met the objective of simplifying the design and implementation?
+&nbsp;
+I agree that *nix has suffered a bad case of feature-itis - especially
+sysVr4.  Perhaps the features that people want for either functionality
+or compatibility could be offered by run-time loadable modules/libraries
+that offer these features.  The micro-kernel would still be a base-level
+resource manager that also routes function requests to the appropriate
+module/library. The modules could be threads or user processes. (I think
+- os hackers please correct me :-) )
+&nbsp;
+Just my $.04 worth - please feel free to post or email responses.
+I have no formal progressive training in computer science, so I am really 
+asking these questions in ignorance.  I suspect a lot of others on the
+net have similar questions in their own minds, but I've been wrong before.
+&nbsp;
+-- David
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Michael Haardt)
+Subject: 1.6.17 summary and why I think AST is right.
+Date: 6 Feb 92 20:07:25 GMT
+Reply-To: address@hidden (Michael Haardt)
+Organization: Gandalf - a 386-20 machine
+&nbsp;
+I will first give a summary of what you can expect from MINIX in *near*
+future, and then explain why I think AST is right.
+&nbsp;
+Some time ago, I asked for details about the next MINIX release (1.6.17).
+I got some response, but only from people running 1.6.16.  The following
+informations are not official and may be wrong, but they are all I know
+at the moment.  Correct me if something is wrong:
+&nbsp;
+-  The 1.6.17 patches will be relative to 1.5 as shipped by PH.
+&nbsp;
+-  The header files are clean.
+&nbsp;
+-  The two types of filesystems can be used together.
+&nbsp;
+-  The signal handling is rewritten for POSIX.  The old bug is removed.
+&nbsp;
+-  The ANSI compiler (available from Transmediar, I guess) comes with
+   compiler binaries and new libraries.
+&nbsp;
+-  There don't seem to be support for the Amoeba network protocol.
+&nbsp;
+-  times(2) returns a correct value.  termios(2) is implemented, but it's
+   more a hack.  I don't know if &quot;implemented&quot; means in the kernel, 
or the
+   current emulation.
+&nbsp;
+-  There is no documentation about the new filesystem.  There is a new fsck
+   and a new mkfs, don't know about de.
+&nbsp;
+-  With the ANSI compiler, there is better floating point support.
+&nbsp;
+-  The scheduler is improved, but not as good as written by Kai-Uwe Bloem.
+&nbsp;
+I asked these things to get facts for the decision if I should upgrade to
+MINIX 1.6.17 or to Linux after the examens are over.  Well, the decision
+is made: I will upgrade to Linux at the end of the month and remove MINIX
+from my winchester, when Linux runs all the software I need and which currently
+runs under MINIX 1.5 with heavy patches.  I guess this may take up to two
+months.  These are the main reasons for my decision:
+&nbsp;
+-  There is no &quot;current&quot; MINIX release, which can be used as basis 
for
+   patches and nobody knows, when 1.6.17 will appear.
+&nbsp;
+-  The library contains several bugs and from what I have heard, there is
+   no work done at them.  There will not be a new compiler, and the 16 bit
+   users still have to use buggy ACK.
+&nbsp;
+-  1.6.17 should offer more POSIX, but a complete termios is still missing.
+&nbsp;
+-  I doubt that there is still much development for 16 bit users.
+&nbsp;
+I think I will stop maintaining the MINIX software list in a few months.
+Anyone out there, who would like to continue it?  Until Linux runs
+*perfect* on my machine, each update of Origami will still run on 16-bit
+MINIX.  I will announce when the last of these versions appears.
+&nbsp;
+In my opinion, AST is right in his decision about MINIX.  I read the flame
+war and can't resist to say that I like MINIX the way it is, now where
+there is Linux.  MINIX has some advantages:
+&nbsp;
+-  You can start playing with it without a winchester, you can even
+   compile programs.  I did this a few years ago.
+&nbsp;
+-  It is so small, you don't need to know much to get a small system which
+   runs ok.
+&nbsp;
+-  There is the book.  Ok, only for version 1.3, but most of it is still valid.
+&nbsp;
+-  MINIX is an example of a non-monolithic kernel.  Call it a microkernel
+   or a hack to overcome braindamaged hardware: It demonstrates a concept,
+   with its pros and cons -- a documented concept.
+&nbsp;
+In my eyes, it is a nice system for first steps in Unix and systems
+programming.  I learned most of what I know about Unix with MINIX, in
+all areas, from programming in C under Unix to system administration
+(and security holes:)  MINIX grew with me: 1.5.xx upgrades, virtual
+consoles, mail &amp; news, text processing, crosscompiling etc.  Now it is
+too small for me.  I don't need a teaching system anymore, I would like
+to get a more complicated and featureful Unix, and there is one: Linux.
+&nbsp;
+Back in the old days, v7 was state of the art.  There was MINIX which
+offered most of it.  In one or two years, POSIX is what you are used to
+see.  Hopefully, there will be MINIX, offering most of it, with a new
+book, for people who want to run a small system to play and experiment with.
+&nbsp;
+Stop flaming, MINIX and Linux are two different systems with different
+purposes.  One is a teaching tool (and a good one I think), the other is
+real Unix for real hackers.
+&nbsp;
+Michael
+</code></pre>
+<hr>
+<pre><code class="code">
+From: address@hidden (Niels Skov Olsen)
+Subject: Re: 1.6.17 summary and why I think AST is right.
+Date: 10 Feb 92 17:33:39 GMT
+Organization: Department of Computer Science, U of Copenhagen
+&nbsp;
address@hidden (Michael Haardt) writes:
+&nbsp;
+&gt;Stop flaming, MINIX and Linux are two different systems with different
+&gt;purposes.  One is a teaching tool (and a good one I think), the other is
+&gt;real Unix for real hackers.
+&nbsp;
+Hear, hear! And now Linux articles in alt.os.linux (or comp.os.misc 
+if your site don't receive alt.*) and Minix articles here.
+&nbsp;
+eoff (end of flame fest :-)
+&nbsp;
+Niels
+</code></pre>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="appb.html"><i><b>Appendix B ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/appb.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/appb.html
diff -N Proyectos/Mecagtk/OpenSource/appb.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/appb.html      3 Mar 2012 06:14:12 -0000       
1.1
@@ -0,0 +1,303 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Monograph">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Appendix B</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Appendix B</H1>
+<H2 CLASS="ChapterSubtitle" align="right">The Open Source Definition, Version 
1.0</H2>
+<P CLASS="BodyStart">
+Open source doesn't just mean access to the source code. The distribution 
terms of an open-source program must comply with the following criteria:</P>
+<OL>
+<LI CLASS="ListNumberStart">
+       Free Redistribution</LI>
+<P CLASS="ListNumber-">
+The license may not restrict any party from selling or giving away the 
software as a component of an aggregate software distribution containing 
programs from several different sources. The license may not require a royalty 
or other fee for such sale. </P>
+<LI CLASS="ListNumber">
+       Source Code</LI>
+<P CLASS="ListNumber-">
+The program must include source code, and must allow distribution in source 
code as well as compiled form. Where some form of a product is not distributed 
with source code, there must be a well-publicized means of downloading the 
source code, without charge, via the Internet. The source code must be the 
preferred form in which a programmer would modify the program. Deliberately 
obfuscated source code is not allowed. Intermediate forms such as the output of 
a preprocessor or translator are not allowed. </P>
+<LI CLASS="ListNumber">
+       Derived Works</LI>
+<P CLASS="ListNumber-">
+The license must allow modifications and derived works, and must allow them to 
be distributed under the same terms as the license of the original software. 
(rationale)</P>
+<LI CLASS="ListNumber">
+       Integrity of the Author's Source Code</LI>
+<P CLASS="ListNumber-">
+The license may restrict source code from being distributed in modified form 
only if the license allows the distribution of &quot;patch files&quot; with the 
source code for the purpose of modifying the program at build time. The license 
must explicitly permit distribution of software built from modified source 
code. The license may require derived works to carry a different name or 
version number from the original software. (rationale)</P>
+<LI CLASS="ListNumber">
+       No Discrimination Against Persons or Groups</LI>
+<P CLASS="ListNumber-">
+The license must not discriminate against any person or group of persons. 
(rationale)</P>
+<LI CLASS="ListNumber">
+       No Discrimination Against Fields of Endeavor</LI>
+<P CLASS="ListNumber-">
+The license must not restrict anyone from making use of the program in a 
specific field of endeavor. For example, it may not restrict the program from 
being used in a business, or from being used for genetic research. 
(rationale)</P>
+<LI CLASS="ListNumber">
+       Distribution of License</LI>
+<P CLASS="ListNumber-">
+The rights attached to the program must apply to all to whom the program is 
redistributed without the need for execution of an additional license by those 
parties. (rationale)</P>
+<LI CLASS="ListNumber">
+       License Must Not Be Specific to a Product</LI>
+<P CLASS="ListNumber-">
+The rights attached to the program must not depend on the program's being part 
of a particular software distribution. If the program is extracted from that 
distribution and used or distributed within the terms of the program's license, 
all parties to whom the program is redistributed should have the same rights as 
those that are granted in conjunction with the original software distribution. 
(rationale)</P>
+<LI CLASS="ListNumber">
+       License Must Not Contaminate Other Software</LI>
+<P CLASS="ListNumber-">
+The license must not place restrictions on other software that is distributed 
along with the licensed software. For example, the license must not insist that 
all other programs distributed on the same medium must be open-source software. 
(rationale)</P>
+<LI CLASS="ListNumber">
+       Example Licenses</LI>
+<P CLASS="ListNumber-">
+The GNU GPL, BSD, X Consortium, and Artistic licenses are examples of licenses 
that we consider conformant to the Open Source Definition. So is the MPL.</P>
+<P CLASS="ListNumber-">
+Bruce Perens wrote the first draft of this document as &quot;The Debian Free 
Software Guidelines,&quot; and refined it using the comments of the Debian 
developers in a month-long email conference in June, 1997. He removed the 
Debian-specific references from the document to create the &quot;Open Source 
Definition.&quot;</P>
+</OL>
+<H2 CLASS="HeadA">
+GNU General Public License</H2>
+<H3 CLASS="HeadB">
+Table of Contents</H3>
+<BLOCKQUOTE CLASS="ListSimple">
+* GNU GENERAL PUBLIC LICENSE</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
++Preamble</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
++TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
++ How to Apply These Terms to Your New Programs</BLOCKQUOTE>
+<H3 CLASS="HeadB">
+GNU GENERAL PUBLIC LICENSE</H3>
+<BLOCKQUOTE CLASS="ListSimple">
+Version 2, June 1991</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St--Fifth 
Floor, Boston, MA 02110-1301, USA</BLOCKQUOTE>
+<P CLASS="Body">
+Everyone is permitted to copy and distribute verbatim copies of this license 
document, but changing it is not allowed.</P>
+<H4 CLASS="HeadC">
+Preamble</H4>
+<P CLASS="Body">
+The licenses for most software are designed to take away your freedom to share 
and change it. By contrast, the GNU General Public License is intended to 
guarantee your freedom to share and change free software--to make sure the 
software is free for all its users. This General Public License applies to most 
of the Free Software Foundation's software and to any other program whose 
authors commit to using it. (Some other Free Software Foundation software is 
covered by the GNU Library General Public License instead.) You can apply it to 
your programs, too.</P>
+<P CLASS="Body">
+When we speak of free software, we are referring to freedom, not price. Our 
General Public Licenses are designed to make sure that you have the freedom to 
distribute copies of free software (and charge for this service if you wish), 
that you receive source code or can get it if you want it, that you can change 
the software or use pieces of it in new free programs; and that you know you 
can do these things.</P>
+<P CLASS="Body">
+To protect your rights, we need to make restrictions that forbid anyone to 
deny you these rights or to ask you to surrender the rights. These restrictions 
translate to certain responsibilities for you if you distribute copies of the 
software, or if you modify it.</P>
+<P CLASS="Body">
+For example, if you distribute copies of such a program, whether gratis or for 
a fee, you must give the recipients all the rights that you have. You must make 
sure that they, too, receive or can get the source code. And you must show them 
these terms so they know their rights.</P>
+<P CLASS="Body">
+We protect your rights with two steps: (1) copyright the software, and (2) 
offer you this license which gives you legal permission to copy, distribute 
and/or modify the software.</P>
+<P CLASS="Body">
+Also, for each author's protection and ours, we want to make certain that 
everyone understands that there is no warranty for this free software. If the 
software is modified by someone else and passed on, we want its recipients to 
know that what they have is not the original, so that any problems introduced 
by others will not reflect on the original authors' reputations.</P>
+<P CLASS="Body">
+Finally, any free program is threatened constantly by software patents. We 
wish to avoid the danger that redistributors of a free program will 
individually obtain patent licenses, in effect making the program proprietary. 
To prevent this, we have made it clear that any patent must be licensed for 
everyone's free use or not licensed at all.</P>
+<P CLASS="Body">
+The precise terms and conditions for copying, distribution and modification 
follow.</P>
+<H4 CLASS="HeadC">
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</H4>
+<OL>
+<LI CLASS="ListNumberStart">
+       This License applies to any program or other work which contains a 
notice placed by the copyright holder saying it may be distributed under the 
terms of this General Public License. The &quot;Program&quot;, below, refers to 
any such program or work, and a &quot;work based on the Program&quot; means 
either the Program or any derivative work under copyright law: that is to say, 
a work containing the Program or a portion of it, either verbatim or with 
modifications and/or translated into another language. (Hereinafter, 
translation is included without limitation in the term 
&quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</LI>
+<P CLASS="ListNumber-">
+Activities other than copying, distribution and modification are not covered 
by this License; they are outside its scope. The act of running the Program is 
not restricted, and the output from the Program is covered only if its contents 
constitute a work based on the Program (independent of having been made by 
running the Program). Whether that is true depends on what the Program does.</P>
+<LI CLASS="ListNumber">
+       You may copy and distribute verbatim copies of the Program's source 
code as you receive it, in any medium, provided that you conspicuously and 
appropriately publish on each copy an appropriate copyright notice and 
disclaimer of warranty; keep intact all the notices that refer to this License 
and to the absence of any warranty; and give any other recipients of the 
Program a copy of this License along with the Program.</LI>
+<P CLASS="ListNumber-">
+You may charge a fee for the physical act of transferring a copy, and you may 
at your option offer warranty protection in exchange for a fee.</P>
+<LI CLASS="ListNumber">
+       You may modify your copy or copies of the Program or any portion of it, 
thus forming a work based on the Program, and copy and distribute such 
modifications or work under the terms of Section 1 above, provided that you 
also meet all of these conditions:</LI>
+<OL>
+<LI class="FM-ListNumberStart">                You must cause the modified 
files to carry prominent notices stating that you changed the files and the 
date of any change.</LI>
+<LI CLASS="FM-ListNumber">
+               You must cause any work that you distribute or publish, that in 
whole or in part contains or is derived from the Program or any part thereof, 
to be licensed as a whole at no charge to all third parties under the terms of 
this License.</LI>
+<LI CLASS="FM-ListNumber">
+               If the modified program normally reads commands interactively 
when run, you must cause it, when started running for such interactive use in 
the most ordinary way, to print or display an announcement including an 
appropriate copyright notice and a notice that there is no warranty (or else, 
saying that you provide a warranty) and that users may redistribute the program 
under these conditions, and telling the user how to view a copy of this 
License. (Exception: if the Program itself is interactive but does not normally 
print such an announcement, your work based on the Program is not required to 
print an announcement.) These requirements apply to the modified work as a 
whole. If identifiable sections of that work are not derived from the Program, 
and can be reasonably considered independent and separate works in themselves, 
then this License, and its terms, do not apply to those sections when you 
distribute them as separate works. But when you distribute the same sections as 
part of a whole which is a work based on the Program, the distribution of the 
whole must be on the terms of this License, whose permissions for other 
licensees extend to the entire whole, and thus to each and every part 
regardless of who wrote it.</LI>
+</OL>
+<P CLASS="ListNumber-">
+Thus, it is not the intent of this section to claim rights or contest your 
rights to work written entirely by you; rather, the intent is to exercise the 
right to control the distribution of derivative or collective works based on 
the Program.</P>
+<P CLASS="ListNumber-">
+In addition, mere aggregation of another work not based on the Program with 
the Program (or with a work based on the Program) on a volume of a storage or 
distribution medium does not bring the other work under the scope of this 
License.</P>
+<LI CLASS="ListNumber">
+       You may copy and distribute the Program (or a work based on it, under 
Section 2) in object code or executable form under the terms of Sections 1 and 
2 above provided that you also do one of the following:</LI>
+</LI>
+<OL>
+<LI class="FM-ListNumberStart">                Accompany it with the complete 
corresponding machine-readable source code, which must be distributed under the 
terms of Sections 1 and 2 above on a medium customarily used for software 
interchange; or,</LI>
+<LI CLASS="FM-ListNumber">
+               Accompany it with a written offer, valid for at least three 
years, to give any third party, for a charge no more than your cost of 
physically performing source distribution, a complete machine-readable copy of 
the corresponding source code, to be distributed under the terms of Sections 1 
and 2 above on a medium customarily used for software interchange; or,</LI>
+<LI CLASS="FM-ListNumber">
+               Accompany it with the information you received as to the offer 
to distribute corresponding source code. (This alternative is allowed only for 
noncommercial distribution and only if you received the program in object code 
or executable form with such an offer, in accord with Subsection b above.) The 
source code for a work means the preferred form of the work for making 
modifications to it. For an executable work, complete source code means all the 
source code for all modules it contains, plus any associated interface 
definition files, plus the scripts used to control compilation and installation 
of the executable. However, as a special exception, the source code distributed 
need not include anything that is normally distributed (in either source or 
binary form) with the major components (compiler, kernel, and so on) of the 
operating system on which the executable runs, unless that component itself 
accompanies the executable.</LI>
+</ol>
+<P CLASS="ListNumber-">
+If distribution of executable or object code is made by offering access to 
copy from a designated place, then offering equivalent access to copy the 
source code from the same place counts as distribution of the source code, even 
though third parties are not compelled to copy the source along with the object 
code.</P>
+<LI CLASS="ListNumber">
+       You may not copy, modify, sublicense, or distribute the Program except 
as expressly provided under this License. Any attempt otherwise to copy, 
modify, sublicense or distribute the Program is void, and will automatically 
terminate your rights under this License. However, parties who have received 
copies, or rights, from you under this License will not have their licenses 
terminated so long as such parties remain in full compliance.</LI>
+<LI CLASS="ListNumber">
+       You are not required to accept this License, since you have not signed 
it. However, nothing else grants you permission to modify or distribute the 
Program or its derivative works. These actions are prohibited by law if you do 
not accept this License. Therefore, by modifying or distributing the Program 
(or any work based on the Program), you indicate your acceptance of this 
License to do so, and all its terms and conditions for copying, distributing or 
modifying the Program or works based on it.</LI>
+<LI CLASS="ListNumber">
+       Each time you redistribute the Program (or any work based on the 
Program), the recipient automatically receives a license from the original 
licensor to copy, distribute or modify the Program subject to these terms and 
conditions. You may not impose any further restrictions on the recipients' 
exercise of the rights granted herein. You are not responsible for enforcing 
compliance by third parties to this License.</LI>
+<LI CLASS="ListNumber">
+       If, as a consequence of a court judgment or allegation of patent 
infringement or for any other reason (not limited to patent issues), conditions 
are imposed on you (whether by court order, agreement or otherwise) that 
contradict the conditions of this License, they do not excuse you from the 
conditions of this License. If you cannot distribute so as to satisfy 
simultaneously your obligations under this License and any other pertinent 
obligations, then as a consequence you may not distribute the Program at all. 
For example, if a patent license would not permit royalty-free redistribution 
of the Program by all those who receive copies directly or indirectly through 
you, then the only way you could satisfy both it and this License would be to 
refrain entirely from distribution of the Program.</LI>
+<P CLASS="ListNumber-">
+If any portion of this section is held invalid or unenforceable under any 
particular circumstance, the balance of the section is intended to apply and 
the section as a whole is intended to apply in other circumstances.</P>
+<P CLASS="ListNumber-">
+It is not the purpose of this section to induce you to infringe any patents or 
other property right claims or to contest validity of any such claims; this 
section has the sole purpose of protecting the integrity of the free software 
distribution system, which is implemented by public license practices. Many 
people have made generous contributions to the wide range of software 
distributed through that system in reliance on consistent application of that 
system; it is up to the author/donor to decide if he or she is willing to 
distribute software through any other system and a licensee cannot impose that 
choice.</P>
+<P CLASS="ListNumber-">
+This section is intended to make thoroughly clear what is believed to be a 
consequence of the rest of this License.</P>
+<LI CLASS="ListNumber">
+       If the distribution and/or use of the Program is restricted in certain 
countries either by patents or by copyrighted interfaces, the original 
copyright holder who places the Program under this License may add an explicit 
geographical distribution limitation excluding those countries, so that 
distribution is permitted only in or among countries not thus excluded. In such 
case, this License incorporates the limitation as if written in the body of 
this License.</LI>
+<LI CLASS="ListNumber">
+       The Free Software Foundation may publish revised and/or new versions of 
the General Public License from time to time. Such new versions will be similar 
in spirit to the present version, but may differ in detail to address new 
problems or concerns.</LI>
+<P CLASS="ListNumber-">
+Each version is given a distinguishing version number. If the Program 
specifies a version number of this License which applies to it and &quot;any 
later version&quot;, you have the option of following the terms and conditions 
either of that version or of any later version published by the Free Software 
Foundation. If the Program does not specify a version number of this License, 
you may choose any version ever published by the Free Software Foundation.</P>
+<LI CLASS="ListNumber">
+       If you wish to incorporate parts of the Program into other free 
programs whose distribution conditions are different, write to the author to 
ask for permission. For software which is copyrighted by the Free Software 
Foundation, write to the Free Software Foundation; we sometimes make exceptions 
for this. Our decision will be guided by the two goals of preserving the free 
status of all derivatives of our free software and of promoting the sharing and 
reuse of software generally.</LI>
+<P CLASS="ListNumber-">
+NO WARRANTY</P>
+<LI CLASS="ListNumber">
+       BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE 
THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR 
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 
QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE 
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR 
CORRECTION.</LI>
+<LI CLASS="ListNumber">
+       IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT 
OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS 
OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN 
IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
DAMAGES.</LI>
+<P CLASS="ListNumber-">
+END OF TERMS AND CONDITIONS</P>
+</LI>
+<H4 CLASS="HeadC">
+How to Apply These Terms to Your New Programs</H4>
+<P CLASS="Body">
+If you develop a new program, and you want it to be of the greatest possible 
use to the public, the best way to achieve this is to make it free software 
which everyone can redistribute and change under these terms.</P>
+<P CLASS="Body">
+To do so, attach the following notices to the program. It is safest to attach 
them to the start of each source file to most effectively convey the exclusion 
of warranty; and each file should have at least the &quot;copyright&quot; line 
and a pointer to where the full notice is found.</P>
+<P CLASS="Body">
+One line to give the program's name and an idea of what it does. Copyright (C) 
19yy name of author</P>
+<P CLASS="Body">
+This program is free software; you can redistribute it and/or modify it under 
the terms of the GNU General Public License as published by the Free Software 
Foundation; either version 2 of the License, or (at your option) any later 
version.</P>
+<P CLASS="Body">
+This program is distributed in the hope that it will be useful, but WITHOUT 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
details.</P>
+<P CLASS="Body">
+You should have received a copy of the GNU General Public License along with 
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin 
St--Fifth Floor, Boston, MA 02110-1301, USA.</P>
+<P CLASS="Body">
+Also add information on how to contact you by electronic and paper mail.</P>
+<P CLASS="Body">
+If the program is interactive, make it output a short notice like this when it 
starts in an interactive mode:</P>
+<P CLASS="Body">
+Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes 
with ABSOLUTELY NO WARRANTY; for details type &quot;show w&quot;. This is free 
software, and you are welcome to redistribute it under certain conditions; type 
&quot;show c&quot; for details.</P>
+<P CLASS="Body">
+The hypothetical commands &quot;show w&quot; and &quot;show c&quot; should 
show the appropriate parts of the General Public License. Of course, the 
commands you use may be called something other than &quot;show w&quot; and 
&quot;show c&quot;; they could even be mouse-clicks or menu items--whatever 
suits your program.</P>
+<P CLASS="Body">
+You should also get your employer (if you work as a programmer) or your 
school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if 
necessary. Here is a sample; alter the names:</P>
+<P CLASS="Body">
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program 
`Gnomovision' (which makes passes at compilers) written by James Hacker.</P>
+<P CLASS="Body">
+Signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice</P>
+<P CLASS="Body">
+This General Public License does not permit incorporating your program into 
proprietary programs. If your program is a subroutine library, you may consider 
it more useful to permit linking proprietary applications with the library. If 
this is what you want to do, use the GNU Library General Public License instead 
of this License. </P>
+<P CLASS="Body">
+FSF &amp; GNU inquiries &amp; questions to <EM 
CLASS="Emphasis">address@hidden</EM>. Other ways to contact the FSF.</P>
+<P CLASS="Body">
+Comments on these web pages to <EM CLASS="Emphasis">address@hidden</EM>, send 
other questions to address@hidden</P>
+<P CLASS="Body">
+Copyright notice above. Free Software Foundation, Inc., 51 Franklin St--Fifth 
Floor, Boston, MA 02110, USA</P>
+<P CLASS="Body">
+Updated: 16 Feb 1998 tower </P>
+<P CLASS="Body">
+&nbsp;</P>
+<P CLASS="Body">
+With the Linux kernel, Linus Torvalds includes the following preamble to the 
GPL:</P>
+<P CLASS="Body">
+NOTE! This copyright does *not* cover user programs that use kernel services 
by normal system calls--this is merely considered normal use of the kernel, and 
does *not* fall under the heading of &quot;derived work.&quot; Also note that 
the GPL below is copyrighted by the Free Software Foundation, but the instance 
of code that it refers to (the Linux kernel) is copyrighted by me and others 
who actually wrote it.</P>
+<BLOCKQUOTE CLASS="ListSimple">
+Linus Torvalds </BLOCKQUOTE>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="authors.html"><i><b>Contributors ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>
+
+
+
+
+
+
+
+
+
+

Index: Proyectos/Mecagtk/OpenSource/authors.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/authors.html
diff -N Proyectos/Mecagtk/OpenSource/authors.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/authors.html   3 Mar 2012 06:14:12 -0000       
1.1
@@ -0,0 +1,285 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Monograph">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Contributors</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Contributors</H1>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="behlendorf.gif" ALIGN="LEFT">
+Brian Behlendorf</BIG>
+ is not the normal person's idea of a hacker. He is a co-founder and a core 
member of the Apache Group. Apache is the open-source web server that runs a 
53% of the web servers on the publicly accessible Internet. This means that 
this free program enjoys greater market share than offerings from Microsoft, 
Netscape, and all other vendors combined. </P>
+<P CLASS="Body">
+Brian has worked on Apache for four years, helping to guide the growth of the 
project along with other members of the Apache team. What began as an 
interesting experiment is now a finely crafted, full-featured web server.</P>
+<P CLASS="Body">He is not alone in this book in his dedication to music, but 
he is probably the only one who has organized raves or DJ'd for parties. His 
web site, <A HREF="http://hypereal.org";>http://hypereal.org</A>, is a marvelous 
music, rave, and club resource site. He likes to read, lately reading outside 
of the computing field and enjoying the Capra's <EM CLASS="Emphasis">Tao of 
Physics</EM> and Chomsky's <EM CLASS="Emphasis">Secrets, Lies and 
Democracy</EM>. </P>
+<P CLASS="Body">
+In late 1998, IBM announced support for Apache on its high-end AS/400 line, a 
true watershed event for the Apache Project. Brian commented on IBM's move by 
saying he was &quot;Happy that I wasn't the only one who thought there might be 
a business case for this. Not just fun to work on, but a model for business. 
People are coming around do see that Open Source is in fact a better way to do 
things on the computer, that it is healthy and can be profitable.&quot;</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="bradner.gif" ALIGN="LEFT">
+Scott Bradner</BIG>
+ has been involved in the design, operation, and use of data networks at 
Harvard University since the early days of the ARPAnet. He was involved in the 
design of the Harvard High-Speed Data Network (HSDN), the Longwood Medical Area 
network (LMAnet), and NEARNET. He was founding chair of the technical 
committees of LMAnet, NEARNET, and CoREN.</P>
+<P CLASS="Body">
+Scott is the codirector of the Transport Area in the IETF, a member of the 
IESG, and an elected trustee of the Internet Society where he serves as the 
Vice President for Standards. He was also codirector of the IETF IP next 
generation effort and is coeditor of <EM CLASS="Emphasis">IPng: Internet 
Protocol Next Generation</EM> from Addison-Wesley.</P>
+<P CLASS="Body">
+Scott is a senior technical consultant at the Harvard Office of the Provost, 
where he provides technical advice and guidance on issues relating to the 
Harvard data networks and new technologies. He also manages the Harvard Network 
Device Test Lab, is a frequent speaker at technical conferences, a weekly 
columnist for <EM CLASS="Emphasis">Network World</EM>, an instructor for 
Interop, and does a bit of independent consulting on the side.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="hamerly2.gif" ALIGN="LEFT">
+Jim Hamerly</BIG>
+ is a Vice President in the Client Products Division of Netscape 
Communications Corporation. In June of 1997 Netscape acquired DigitalStyle 
Corporation, where Jim was a co-founder, president, and CEO.</P>
+<P CLASS="Body">
+Prior to founding DigitalStyle, he was Vice President, Engineering, of Pages 
Software, Inc. where he managed the development of Pages, a desktop publishing 
tool, and WebPages, the first WYSIWYG web authoring tool.</P>
+<P CLASS="Body">
+Jim spent 15 years with Xerox in various R&amp;D and product development 
activities, most recently as Deputy Chief Engineer of XSoft, a software 
division of Xerox Corporation, where he was responsible for four software 
product lines.</P>
+<P CLASS="Body">
+Jim holds B.S., M.S., and Ph.D. degrees in Electrical Engineering and Computer 
Science from MIT, UC Berkeley, and Carnegie Mellon University.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="mckusick.gif" ALIGN="LEFT">
+Kirk McKusick</BIG>
+ writes books and articles, consults, and teaches classes on Unix- and 
BSD-related subjects. While at the University of California at Berkeley, he 
implemented the 4.2BSD fast file system, and was the Research Computer 
Scientist at the Berkeley Computer Systems Research Group (CSRG) overseeing the 
development and release of 4.3BSD and 4.4BSD. His particular areas of interest 
are the virtual-memory system and the filesystem. One day, he hopes to see them 
merged seamlessly. He earned his undergraduate degree in Electrical Engineering 
from Cornell University, and did his graduate work at the University of 
California at Berkeley, where he received Masters degrees in Computer Science 
and Business Administration, and a doctoral degree in Computer Science. He is a 
past president of the Usenix Association, and is a member of ACM and IEEE.</P>
+<P CLASS="Body">
+In his spare time, he enjoys swimming, scuba diving, and wine collecting. The 
wine is stored in a specially constructed wine cellar (accessible from the Web 
at <A 
HREF="http://www.mckusick.com/&#126;mckusick/index.html";>http://www.mckusick.com/&#126;mckusick/index.html</A>)
 in the basement of the house that he shares with Eric Allman, his domestic 
partner of 19-and-some-odd years.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="oreilly.gif" ALIGN="LEFT">
+Tim O'Reilly </BIG>
+is the founder and CEO of O'Reilly &amp; Associates, Inc., the publisher whose 
books are considered the definitive works on Open Source technologies such as 
Perl, Linux, Apache, and the Internet infrastructure. Tim convened the first 
&quot;Open Source Summit&quot; to bring together the leaders of major Open 
Source communities, and has been active in promoting the Open Source movement 
through writing, speaking, and conferences. He is also a trustee of the 
Internet Society.</P>
+<p class="body">&nbsp;</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="paquin.gif" ALIGN="LEFT">
+Tom Paquin</BIG>
+ first joined IBM Research to work on a project involving parallel processors, 
but ended up doing a bitmapped graphics accelerator (AMD 29116-based) for the 
then-new PC. After tinkering on X6 and X9 at MIT and Brown University, he was 
part of the effort to ship the first-ever commercial X11 with Carnegie Mellon 
University.</P>
+<P CLASS="Body">
+Tom joined Silicon Graphics, Inc. (SGI) in May 1989, where he had the unlucky 
task of integrating the GL and X. He joined Jim Clark and Marc Andreesson at 
Netscape in April 1994. He was the very first engineering manager, guiding his 
team through the 1.0 and 2.0 releases of Mozilla. Now a Netscape fellow, he 
works on mozilla.org as the manager, problem arbitrator, and mysterious 
political leader.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="perens2.gif" ALIGN="LEFT">
+Bruce Perens</BIG>
+ has been a long-time advocate for Linux and open-source software. Until 1997 
Bruce headed the Debian Project, an all- volunteer effort to create a 
distribution of Linux based entirely on open-source software. </P>
+<P CLASS="Body">
+While working on the Debian Project, Bruce helped craft the Debian Social 
Contract, a statement of conditions under which software could be considered 
sufficiently freely licensed to be included in the Debian distribution. The 
Debian Social Contract is a direct ancestor of today's Open Source 
Definition.</P>
+<P CLASS="Body">
+After stepping down from the stewardship of Debian, Bruce continued his 
efforts at Open Source evangelism by creating and leading Software in the 
Public Interest, and by creating, with Eric Raymond, the Open Source 
Initiative.</P>
+<P CLASS="Body">
+When not actively evangelizing Open Source software, Bruce works at Pixar 
Animation Studios.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="raymond.gif" ALIGN="LEFT">
+Eric Steven Raymond</BIG>
+ is a long-time hacker who has been observing and taking part in the Internet 
and hacker culture with wonder and fascination since the ARPAnet days in the 
late 1970s. He had lived on three continents and forgotten two languages before 
he turned fourteen, and he likes to think that this fostered his 
anthropological way of viewing the world. </P>
+<P CLASS="Body">
+He studied mathematics and philosophy before being seduced by computers, and 
has also enjoyed some success as a musician (playing flute on two albums). 
Several of his open-source projects are carried by all major Linux 
distributions. The best known of these is probably fetchmail, but he also 
contributed extensively to GNU Emacs and ncurses and is currently the termcap 
maintainer, one of those truly thankless jobs that is important to do well. 
Eric also holds a black belt in Tae Kwon Do and shoots pistols for relaxation. 
His favorite gun is the classic 1911-pattern .45 semiautomatic. </P>
+<P CLASS="Body">
+Among his writing credits, he has written/compiled <EM CLASS="Emphasis">The 
New Hackers Dictionary</EM> and co-authored the O'Reilly book <EM 
CLASS="Emphasis">Learning GNU Emacs</EM>. In 1997, he posted an essay on the 
Web titled &quot;The Cathedral and the Bazaar,&quot; which is considered a key 
catalyst in leading Netscape to open the source code up for their browser. </P>
+<P CLASS="Body">
+Since then Eric has been deftly surfing the Open Source software wave. 
Recently, he broke the story on a series of internal Microsoft memos regarding 
Linux and the threat Microsoft perceives in open-source software. These 
so-called Halloween Documents (dubbed so because of their date of initial 
discovery, October 31st) were both a source of humor and the first confirmed 
reaction that the large software conglomerate has shown to the Open Source 
phenomenon.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<IMG SRC="stallman.gif" ALIGN="LEFT">
+Every person in this in book one way or another owes a debt to <BIG 
CLASS="AuthorName">
+Richard Stallman (RMS)</BIG>
+. 15 years ago, he started the GNU project, to protect and foster the 
development of free software. A stated goal of the project was to develop an 
entire operating system and complete sets of utilities under a free and open 
license so that no one would ever have to pay for software again. </P>
+<P CLASS="Body">
+In 1991, Stallman received the prestigious Grace Hopper Award from the 
Association for Computing Machinery for his development of the Emacs editor. In 
1990 he was awarded a MacArthur Foundation fellowship. He was awarded an 
honorary doctorate from the Royal Institute of Technology in Sweden in 1996. In 
1998 he shared with Linux Torvalds the Electronic Frontier Foundation's Pioneer 
award.</P>
+<P CLASS="Body">
+He is now more widely known for his evangelism of free software than the code 
he helped create. </P>
+<P CLASS="Body">
+Like anyone utterly devoted to a cause, Stallman has stirred controversy in 
the community he is a part of. His insistence that the term &quot;Open Source 
software&quot; is specifically designed to quash the freedom-related aspects of 
free software is only one of the many stances that he has taken of late that 
has caused some to label him an extremist. He takes it all in stride, as anyone 
can testify who as seen him don the garb of his alter ego, Saint GNUtias of the 
Church of Emacs.</P>
+<P CLASS="Body">
+Many have said, &quot;If Richard did not exist, it would have been necessary 
to invent him.&quot; This praise is an honest acknowledgment of the fact that 
the Open Source movement could not have happened without the Free Software 
movement that Richard popularizes and evangelizes even today.</P>
+<P CLASS="Body">
+In addition to his political stance, Richard is known for a number of software 
projects. The two most prominent projects are the GNU C compiler (GCC) and the 
Emacs editor. GCC is by far the most ported, most popular compiler in the 
world. But far and wide, RMS is known for the Emacs editor. Calling Emacs 
editor an editor is like calling the Earth a nice hunk of dirt. Emacs is an 
editor, a web browser, a news reader, a mail reader, a personal information 
manager, a typesetting program, a programming editor, a hex editor, a word 
processor, and a number of video games. Many programmers use a kitchen sink as 
an icon for their copy of Emacs. There are many programmers who enter Emacs and 
don't leave to do anything else on the computer. Emacs, you'll find, isn't just 
a program, but a religion, and RMS is its saint.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="tiemann.gif" ALIGN="LEFT">
+Michael Tiemann</BIG>
+ is a founder of Cygnus Solutions. Michael began making contributions to the 
software development community through his work on the GNU C compiler (which he 
ported to the SPARC and several other RISC architectures), the GNU C++ compiler 
(which he authored), and the GDB debugger (which he enhanced to support the C++ 
programming language and ported to run on the SPARC). Unable to convince any 
existing companies to offer commercial support for this new &quot;Open 
Source&quot; software, he co-founded Cygnus Solutions in 1989. Today, Michael 
is a frequent speaker and panelist on open-source software and open-source 
business models, and he continues to look for technical and business solutions 
that will make the next ten years as exciting and rewarding as the last ten 
years. </P>
+<P CLASS="Body">
+Michael earned a B.S. degree in CSE in 1986 from the Moore School of 
Engineering, University of Pennsylvania. From 1986 to 1988, he worked at MCC in 
Austin Texas. In 1988, he entered the Stanford Graduate School (EE) and became 
a candidate for a Ph.D. in the spring of 1989. Michael withdrew from the Ph.D. 
program in the fall of 1989 to start Cygnus.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<IMG SRC="torvalds.gif" ALIGN="LEFT">
+Who is <BIG CLASS="AuthorName">
+Linus Torvalds</BIG>
+?</P>
+<P CLASS="Body">
+He created Linux, of course. This is like saying &quot;Engelbart invented the 
mouse.&quot; I'm sure the long-term implications of the following email:</P>
+<CODE CLASS="Code">
+From: address@hidden (Linus Benedict Torvalds)     </CODE>
+<CODE CLASS="Code">
+Newsgroups: comp.os.minix     </CODE>
+<CODE CLASS="Code">
+Subject: Gcc-1.40 and a posix-question     </CODE>
+<CODE CLASS="Code">
+Message-ID: &lt;address@hidden&gt;     </CODE>
+<CODE CLASS="Code">
+Date: 3 Jul 91 10:00:50 GMT</CODE>
+<CODE CLASS="Code">
+    Hello netlanders,</CODE>
+<CODE CLASS="Code">
+    Due to a project I'm working on (in minix), I'm interested in the posix    
 standard definition. Could somebody please point me to a (preferably)     
machine-readable format of the latest posix rules? Ftp-sites would be 
nice.</CODE>
+<P CLASS="Body">
+Never occurred to him. </P>
+<P CLASS="Body">
+Linus could not have foreseen that his project would go from being a small 
hobby to a major OS with from 7 million to 10 million adherents and a major 
competitor to the enterprise aspirations of the world's largest software 
company.</P>
+<P CLASS="Body">
+Since the mass adoption of Linux and its wildfire growth through the 
Internet--26% of the Internet's servers run Linux (the closest competitor is 
Microsoft with 23%)--Linus Torvalds' life has changed. He has moved from his 
native Finland to Silicon Valley, where he works for Transmeta Corporation. 
About his work at Transmeta, he will say only that it does not involve Linux, 
and that it is &quot;very cool.&quot;</P>
+<P CLASS="Body">
+He has had two children and one patent (Memory Controller for a Microprocessor 
for Detecting a Failure of Speculation on the Physical Nature of a Component 
being Addressed), and has been a guest at the most prestigious event in 
Finland, the President's Independence Day Ball. </P>
+<P CLASS="Body">
+His personality won't let him take credit for something as his own when in 
fact it is not, and Linus is quick to point out that without the help of 
others, Linux would not be what it is today. Talented programmers like David 
Miller, Alan Cox, and others have all had instrumental roles in the success of 
Linux. Without their help and the help of countless others, the Linux OS would 
not have vaulted to the lofty heights it now occupies. </P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="vixie.gif" ALIGN="LEFT">
+Paul Vixie</BIG>
+ is the head of Vixie Enterprises. He is also the President and Founder of the 
Internet Software Consortium, the home of bind, inn, and the dhcp server. Paul 
is the head architect of bind, which is the most popular implementation of DNS. 
Inn is the Internet news server package, and dhcp allows dynamic configuration 
of networking information.</P>
+<P CLASS="Body">
+He is the author of Vixie cron, which is the default cron daemon for Linux, 
and much of the rest of the world. This means he is probably responsible for 
the strange noises your computer makes at 1 a.m. every night.</P>
+<P CLASS="Body">
+Paul is the author of the book <EM CLASS="Emphasis">Sendmail: Theory and 
Practice.</EM> Paul's company also manages a network for the Commercial 
Internet Exchange, and leads the fight against spam with MAPS, the Mail Abuse 
Protection System, which is made up of a real-time blackhole list (where 
spammers have their email jettisoned into the almighty bit bucket), and a 
transport security initiative.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="wall.gif" ALIGN="LEFT">
+Larry Wall</BIG>
+ has authored some of the most popular open-source programs available for 
Unix, including the rn news reader, the ubiquitous patch program, and the Perl 
programming language. He's also known for metaconfig, a program that writes 
Configure scripts, and for the warp space-war game, the first version of which 
was written in BASIC/PLUS at Seattle Pacific University. By training Larry is 
actually a linguist, having wandered about both U.C. Berkeley and UCLA as a 
grad student. (Oddly enough, while at Berkeley, he had nothing to do with the 
Unix development going on there.)</P>
+<P CLASS="Body">
+Larry has been a programmer at JPL. He has also spent time at Unisys, playing 
with everything from discrete event simulators to software development 
methodologies. It was there, while trying to glue together a bicoastal 
configuration management system over a 1200-baud encrypted link using a hacked 
over version of Netnews, that Perl was born.</P>
+<P CLASS="Body">
+Presently Larry's services are retained by O'Reilly, where he consults on 
matters relating to Perl.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+<IMG SRC="young2.gif" ALIGN="LEFT">
+Bob Young</BIG>
+ has always been a something of an enigma and a legend in the Open Source 
community. He's a businessman, not a hacker, and has long been talked about in 
Linux circles as the mythical adult who kept those North Carolina kids at Red 
Hat in line.</P>
+<P CLASS="Body">
+Bob spent the first twenty years of his professional life in the computer 
leasing business, heading up two different firms before getting into the Linux 
world. He was the original publisher of <EM CLASS="Emphasis">Linux Journal</EM> 
before Phil Hughes and SSC took it over. Bob joined Red Hat with the promise 
that the then-members, led by Marc Ewing, wouldn't have to worry about managing 
the money side of the company. He applied the rules of branding more commonly 
associated with the Gap or Harley-Davidson to the world of free software, which 
is exactly what was needed for a company that packaged what is essentially a 
commodity: Open Source software.</P>
+<P CLASS="Body">
+Red Hat was originally going to build OEM Linux versions that they would 
supply to commercial OS companies, rather than directly marketing or retailing 
its own products. Only after these commercial partners failed to get their 
products to market on time did Red Hat retail its own distribution, so that the 
employees of Red Hat (so the story goes) would be assured enough money to 
eat.</P>
+<P CLASS="Body">
+Red Hat recently received funding from the venture capital world, and from 
Netscape and Intel. There's a nice irony to this confirmation of Red Hat's 
success, since it was never supposed to have its own retail products. </P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+Chris DiBona</BIG>
+ has been using Linux since early 1995. He is very active in the Linux 
community. He volunteers as the Linux International webmaster and is also the 
Linux International grant development fund coordinator. He is proud to work as 
the Director of Linux Marketing for VA Research Linux systems (<A 
HREF="http://www.varesearch.com";>http://www.varesearch.com</A>) and is the Vice 
President of the Silicon Valley Linux Users Group (the world's largest at <A 
HREF="http://www.svlug.org";>http://www.svlug.org</A>). </P>
+<P CLASS="Body">
+In addition to his Linux activities, his writings and book reviews have been 
featured in <EM CLASS="Emphasis">The Vienna Times</EM>, <EM 
CLASS="Emphasis">Linux Journal</EM>, <EM CLASS="Emphasis">Tech Week</EM>, <EM 
CLASS="Emphasis">Boot Magazine</EM> (now <EM CLASS="Emphasis">Maximum PC</EM>), 
and a number of online publications. Additionally, he was the editor for two 
years of the <EM CLASS="Emphasis">Terrorist Profile Weekly</EM>, a geopolitcal 
weekly with a subscriber base numbered at 20,000.</P>
+<P CLASS="Body">
+His personal web site can be found at <A 
HREF="http://www.dibona.com";>http://www.dibona.com</A> and he can be reached 
via email at <EM CLASS="Emphasis">address@hidden</EM>.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+Sam Ockman</BIG>
+ is the President of Penguin Computing, a company specializing in custom-built 
Linux systems. He's the chairman of LINC, the International Linux Conference 
and Exposition, which has merged with LinuxWorld. Sam is an expert on Linux 
system installation and configuration, and on Perl, which he has taught at the 
University of California, Berkeley Extension School. He also coordinates 
speakers for the Silicon Valley and Bay Area Linux User Groups. Sam has edited 
books on Unix and Perl, and writes a monthly column on Linux. He graduated from 
Stanford with degrees in Computer Systems Engineering and Political Science. 
Sam is very proud that while at Stanford he won the Ram's Head Dorthea Award 
for Best Actor in a Drama.</P>
+<P CLASS="FM-AuthorStart">
+<hr>
+<BIG CLASS="AuthorName">
+Mark Stone</BIG>
+ has been using Linux as his mainstay operating system since the 1.0.8 version 
of the kernel. He wrote his first large-scale program in the late 70s: an Algol 
compiler for the PDP-1170. These day he prefers scripting to compiling; his 
favorite language is Tcl.</P>
+<P CLASS="Body">
+Currently Mark is the Open Source editor for O'Reilly. Prior to joining the 
world of publishing he was a professor of philosophy, and holds a Ph.D. from 
the University of Rochester. During his tenure in academia, he studied chaos 
theory and philosophy of science. So in many ways, his work hasn't changed all 
that much.</P>
+<P CLASS="Body">
+&nbsp;</P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="copyright.html"><i><b>Copyright ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/behlendorf.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/behlendorf.gif
diff -N Proyectos/Mecagtk/OpenSource/behlendorf.gif
Binary files /dev/null and /tmp/cvscdLKG0 differ

Index: Proyectos/Mecagtk/OpenSource/bradner.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/bradner.gif
diff -N Proyectos/Mecagtk/OpenSource/bradner.gif
Binary files /dev/null and /tmp/cvsP7uON3 differ

Index: Proyectos/Mecagtk/OpenSource/brian.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/brian.html
diff -N Proyectos/Mecagtk/OpenSource/brian.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/brian.html     3 Mar 2012 06:14:12 -0000       
1.1
@@ -0,0 +1,427 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Brian Behlendorf">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Open Source as a Business Strategy</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Open Source as a Business Strategy</H1>
+<H4 CLASS="ChapterAuthor" align="right">Brian Behlendorf</H4>
+<P CLASS="Body">
+Over 1997 and 1998, open-source software such as Linux, FreeBSD, Apache, and 
Perl started to attract widespread attention from a new audience: engineering 
managers, executives, industry analysts, and investors. </P>
+<P CLASS="Body">
+Most of the developers of such software welcomed this attention: not only does 
it boost the pride of developers, it also allows them to justify their efforts 
(now increasingly related to their salaried positions) to upper management and 
their peers. </P>
+<P CLASS="Body">
+But this new audience has hard questions: </P>
+<UL>
+<LI CLASS="ListBullet">
+Is this really a new way of building software? </LI>
+<LI CLASS="ListBullet">
+Are each of the successes in open-source software a fluke of circumstance, or 
is there a repeatable methodology to all this? </LI>
+<LI CLASS="ListBullet">
+Why on earth would I allocate scarce financial resources to a project where my 
competitor would get to use the same code, for free? </LI>
+<LI CLASS="ListBullet">
+How reliant is this whole development model upon the hobbyist hacker or 
computer science student who just happens to put the right bits together to 
make something work well? </LI>
+<LI CLASS="ListBullet">
+Does this threaten or obsolesce my company's current methods for building 
software and doing business? </LI>
+</UL>
+<P CLASS="Body">
+I suggest that the open-source model is indeed a reliable model for conducting 
software development for commercial purposes. I will attempt to lay out the 
preconditions for such a project, what types of projects make sense to pursue 
in this model, and the steps a company should go through to launch such a 
project. This essay is intended for companies who either release, sell, and 
support software commercially, or for technology companies that use a given 
piece of software as a core component to their business processes. </P>
+<H2 CLASS="HeadA">
+It's All About Platforms </H2>
+<P CLASS="Body">
+While I'm indeed a big fan of the open-source approach to software 
development, there are definitely situations where an open-source approach 
would not benefit the parties involved. There are strong tradeoffs to this 
model, and returns are never guaranteed. A proper analysis requires asking 
yourself what your goals as a company are in the long term, as well as what 
your competitive advantages are today. </P>
+<P CLASS="Body">
+Let's start first with a discussion about Application Programming Interfaces 
(APIs), platforms, and standards. For the purposes of this essay, I'll wrap 
APIs (such as the Apache server API for building custom modules), on-the-wire 
protocols like HTTP, and operating system conventions (such as the way Linux 
organizes system files, or NT servers are administered) into the generic term 
&quot;platform.&quot;</P>
+<P CLASS="Body">
+Win32, the collection of routines and facilities provided and defined by 
Microsoft for all Windows 95 and NT application developers, is a platform. If 
you intend to write an application for people to use on Windows, you must use 
this API. If you intend, as IBM once did with OS/2, to write an operating 
system which can run programs intended for MSWindows, you must implement the 
Win32 API in its entirety, as that's what Windows applications expect to be 
able to use. </P>
+<P CLASS="Body">
+Likewise, the Common Gateway Interface, or &quot;CGI,&quot; is a platform. The 
CGI specification allows web server developers to write scripts and programs 
that run behind a web server. CGI is a much much simpler platform than Win32, 
and of course does much less, but its existence was important to the web server 
market because it allowed application developers to write portable code, 
programs that would run behind any web server. Besides a few orders of 
magnitude in complexity, a key difference between CGI and Win32 was that no one 
really owned the CGI specification; it was simply something the major web 
servers implemented so that they could run each others' CGI scripts. Only after 
several years of use was it deemed worthwhile to define the CGI specification 
as an informational Request for Comments (RFCs) at the Internet Engineering 
Task Force (IETF). </P>
+<P CLASS="Body">
+A platform is what essentially defines a piece of software, any software, be 
it a web browser like Netscape, or be it Apache. Platforms enable people to 
build or use one piece of software on top of another, and are thus essential 
not just for the Internet space, where common platforms like HTTP and TCP/IP 
are what really facilitated the Internet's explosive growth, but are becoming 
more and more essential to consider within a computer environment, both in a 
server context and in an end-user client context. </P>
+<P CLASS="Body">
+In the Apache project, we were fortunate in that early on we developed an 
internal API to allow us to distinguish between the core server functionality 
(that of handling the TCP connections, child process management, and basic HTTP 
request handling) and almost all other higher-level functionality like logging, 
a module for CGI, server-side includes, security configuration, etc. Having a 
really powerful API has also allowed us to hand off other big pieces of 
functionality, such as mod_perl (an Apache module that bundles a Perl 
interpreter into Apache) and mod_jserv (which implements the Java Servlet API), 
to separate groups of committed developers. This freed the core development 
group from having to worry about building a &quot;monster&quot; to support 
these large efforts in addition to maintaining and improving the core of the 
server. </P>
+<P CLASS="Body">
+There are businesses built upon the model of owning software platforms. Such a 
business can charge for all use of this platform, whether on a standard 
software installation basis, or a pay-per-use basis, or perhaps some other 
model. Sometimes platforms are enforced by copyright; other times platforms are 
obfuscated by the lack of a written description for public consumption; other 
times they are evolved so quickly, sometimes other than for technical reasons, 
that others who attempt to provide such a platform fail to keep up and are 
perceived by the market as &quot;behind&quot; technologically speaking, even 
though it's not a matter of programming. </P>
+<P CLASS="Body">
+Such a business model, while potentially beneficial in the short term for the 
company who owns such a platform, works against the interests of every other 
company in the industry, and against the overall rate of technological 
evolution. Competitors might have better technology, better services, or lower 
costs, but are unable to use those benefits because they don't have access to 
the platform. On the flip side, customers can become reliant upon a platform 
and, when prices rise, be forced to decide between paying a little more in the 
short run to stick with the platform, or spending a large quantity of money to 
change to a different platform, which may save them money in the long run. </P>
+<P CLASS="Body">
+Computers and automation have become so ingrained and essential to day-to-day 
business that a sensible business should not rely on a single vendor to provide 
essential services. Having a choice of service means not just having the 
freedom to choose; a choice must also be affordable. The switching cost is an 
important aspect to this freedom to choose. Switching costs can be minimized if 
switching software does not necessitate switching platforms. Thus it is always 
in a customers' interests to demand that the software they deploy be based on 
non-proprietary platforms. </P>
+<P CLASS="Body">
+This is difficult to visualize for many people because classic economics, the 
supply and demand curves we were all taught in high school, are based on the 
notion that products for sale have a relatively scalable cost--that to sell ten 
times as much product, the cost of raw goods to a vendor typically rises 
somewhere on the order of ten times as well. No one could have foreseen the 
dramatic economy of scale that software exhibits, the almost complete lack of 
any direct correlation between the amount of effort it takes to produce a 
software product and the number of people who can thus purchase and use it. </P>
+<P CLASS="Body">
+A reference body of open-source software that implements a wire protocol or 
API is more important to the long-term health of that platform than even two or 
three independent non-open-source implementations. Why is this? Because a 
commercial implementation can always be bought by a competitor, removing it 
from the market as an alternative, and thus destroying the notion that the 
standard was independent. It can also serve as an academic frame of reference 
for comparing implementations and behaviors. </P>
+<P CLASS="Body">
+There are organizations like the IETF and the W3C who do a more-or-less 
excellent job of providing a forum for multiparty standards development. They 
are, overall, effective in producing high-quality architectures for the way 
things should work over the Internet. However, the long-term success of a given 
standard, and the widespread use of such a standard, are outside of their 
jurisdiction. They have no power to force member organizations to create 
software that implements the protocols they define faithfully. Sometimes, the 
only recourse is a body of work that shows why a specific implementation is 
correct. </P>
+<P CLASS="Body">
+For example, in December of 1996, AOL made a slight change to their custom 
HTTP proxy servers their customers use to access web sites. This 
&quot;upgrade&quot; had a cute little political twist to it: when AOL users 
accessed a web site using the Apache 1.2 server, at that time only a few months 
old and implementing the new HTTP/1.1 specification, they were welcomed with 
this rather informative message: </P>
+<BLOCKQUOTE CLASS="Quote">
+ UNSUPPORTED WEB VERSION </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="Quote">
+The Web address you requested is not available in a version supported by AOL. 
This is an issue with the Web site, and not with AOL. The owner of this site is 
using an unsupported HTTP language. If you receive this message frequently, you 
may want to set your web graphics preferences to COMPRESSED at Keyword: 
PREFERENCES </BLOCKQUOTE>
+<P CLASS="Body">
+Alarmed at this &quot;upgrade,&quot; Apache core developers circled the wagons 
and analyzed the situation. A query to AOL's technical team came back with the 
following explanation: </P>
+<BLOCKQUOTE CLASS="Quote">
+New HTTP/1.1 web servers are starting to generate HTTP/1.1 responses to 
HTTP/1.0 requests when they should be generating only HTTP/1.0 responses. We 
wanted to stem the tide of those faults proliferating and becoming a de facto 
standard by blocking them now. Hopefully the authors of those web servers will 
change their software to only generate HTTP/1.1 responses when an HTTP/1.1 
request is submitted. </BLOCKQUOTE>
+<P CLASS="Body">
+Unfortunately AOL engineers were under the mistaken assumption that HTTP/1.1 
responses were not backward-compatible with HTTP/1.0 clients or proxies. They 
are; HTTP was designed to be backward-compatible within minor-number revisions. 
But the specification for HTTP/1.1 is so complex that a less than thorough 
reading may lead one to have concluded this was not the case, especially with 
the HTTP/1.1 document that existed at the end of 1996. </P>
+<P CLASS="Body">
+So we Apache developers had a choice--we could back down and give HTTP/1.0 
responses to HTTP/1.0 requests, or we could follow the specification. Roy 
Fielding, the &quot;HTTP cop&quot; in the group, was able to clearly show us 
how the software's behavior at the time was correct and beneficial; there would 
be cases where HTTP/1.0 clients may wish to upgrade to an HTTP/1.1 conversation 
upon discovering that a server supported 1.1. It was also important to tell 
proxy servers that even if the first request they proxied to an origin server 
they saw was 1.0, the origin server could also support 1.1. </P>
+<P CLASS="Body">
+It was decided that we'd stick to our guns and ask AOL to fix their software. 
We suspected that the HTTP/1.1 response was actually causing a problem with 
their software that was due more to sloppy programming practices on their part 
than to bad protocol design. We had the science behind our decision. What 
mattered most was that Apache was at that point on 40% of the web servers on 
the Net, and Apache 1.2 was on a very healthy portion of those, so they had to 
decide whether it was easier to fix their programming mistakes or to tell their 
users that some 20% or more of the web sites on the Internet were inaccessible 
through their proxies. On December 26th, we published a web page detailing the 
dispute, and publicized its existence not just to our own user base, but to 
several major news outlets as well, such as C|Net and <CITE 
CLASS="Citation">Wired</CITE>, to justify our actions. </P>
+<P CLASS="Body">
+AOL decided to fix their software. Around the same time, we announced the 
availability of a &quot;patch&quot; for sites that wanted to work around the 
AOL problem until it was rectified, a patch that degraded responses to HTTP/1.0 
for AOL. We were resolute that this was to remain an &quot;unofficial&quot; 
patch, with no support, and that it would not be made a default setting in the 
official distribution. </P>
+<P CLASS="Body">
+There have been several other instances where vendors of other HTTP products 
(including both Netscape and Microsoft) had interoperability issues with 
Apache; in many of those cases, there was a choice the vendor had to make 
between expending the effort to fix their bug, or writing off any sites which 
would become inoperable because of it. In many cases a vendor would implement 
the protocol improperly but consistently on their clients and servers. The 
result was an implementation that worked fine for them, but imperfectly at best 
with either a client or server from another vendor. This is much more subtle 
than even the AOL situation, as the bug may not be apparent or even significant 
to the majority of people using this software--and thus the long-term 
ramifications of such a bug (or additional bugs compounding the problem) may 
not be seen until it's too late. </P>
+<P CLASS="Body">
+Were there not an open-source and widely used reference web server like 
Apache, it's entirely conceivable that these subtle incompatibilities could 
have grown and built upon each other, covered up by mutual blame or Jedi mind 
tricks (&quot;We can't repeat that in the lab. . . .&quot;), where the response 
to &quot;I'm having problem when I connect vendor X browser to vendor Y 
server&quot; is, &quot;Well, use vendor Y client and it'll be all better.&quot; 
At the end of this process we would have ended up with two (or more) World Wide 
Webs--one that was built on vendor X web servers, the other on vendor Y 
servers, and each would only work with their respective vendors' clients. There 
is ample historic precedence for this type of anti-standard activity, a policy 
(&quot;locking in&quot;) which is encoded as a basic business practice of many 
software companies. </P>
+<P CLASS="Body">
+Of course this would have been a disaster for everyone else out there--the 
content providers, service providers, software developers, and everyone who 
needed to use HTTP to communicate would have had to maintain two separate 
servers for their offerings. While there may have been technical customer 
pressure to &quot;get along together,&quot; the contrary marketing pressure to 
&quot;innovate, differentiate, lead the industry, define the platform&quot; 
would have kept either party from attempting to commodify their protocols. </P>
+<P CLASS="Body">
+We did, in fact, see such a disaster with client-side JavaScript. There was 
such a big difference in behavior between different browsers, even within 
different beta versions of the same browser, that developers had to create code 
that would detect different revisions and give different behavior--something 
that added significantly more development time to interactive pages using 
JavaScript. It wasn't until the W3C stepped in and laid the groundwork for a 
Document Object Model (DOM) that we actually saw a serious attempt at creating 
a multiparty standard around JavaScript. </P>
+<P CLASS="Body">
+There are natural forces in today's business world that drive for deviation 
when a specification is implemented by closed software. Even an accidental 
misreading of a common specification can cause a deviation if not corrected 
quickly. </P>
+<P CLASS="Body">
+Thus, I argue that building your services or products on top of a 
standards-based platform is good for the stability of your business processes. 
The success of the Internet has not only shown how common platforms help 
facilitate communication, it has also forced companies to think more about how 
to create value in what gets communicated, rather than trying to take value out 
of the network itself. </P>
+<H2 CLASS="HeadA">
+ Analyzing Your Goals for an Open-Source Project </H2>
+<P CLASS="Body">
+What you need to ask yourself, as a company, is to what degree your products 
implement a new platform, and to what extent is it in your business interests 
to maintain ownership of that platform. How much of your overall product and 
service set, and thus how much of your revenue, is above that platform, or 
below it? This is probably something you can even apply numbers to. </P>
+<P CLASS="Body">
+Let's say you're a database company. You sell a database that runs on multiple 
OSes; you separately sell packages for graphical administration, rapid 
development tools, a library of common stored procedures people can use, etc. 
You sell support on a yearly basis. Upgrades require a new purchase. You also 
offer classes. And finally, you've got a growing but healthy consulting group 
who implement your database for customers. </P>
+<P CLASS="Body">
+Let's say your revenue balance looks something like this: </P>
+<UL>
+<LI CLASS="ListBullet">
+40%--Sales of the database software </LI>
+<LI CLASS="ListBullet">
+15%--Support </LI>
+<LI CLASS="ListBullet">
+10%--Consulting work </LI>
+<LI CLASS="ListBullet">
+10%--Rapid development tools </LI>
+<LI CLASS="ListBullet">
+10%--Graphical administration tools</LI>
+<LI CLASS="ListBullet">
+10%--Library of stored procedures/applications on top of this DB </LI>
+<LI CLASS="ListBullet">
+5%--Manuals/classes </LI>
+</UL>
+<P CLASS="Body">
+At first glance, the suggestion that you give away your database software for 
free would be ludicrous. That's 40% of your revenue gone. If you're lucky as a 
company you're profitable, and if you're even luckier you've got maybe a 20% 
profit margin. 40% wipes that out completely. </P>
+<P CLASS="Body">
+This of course assumes nothing else changes in the equation. But the chances 
are, if you pull this off right, things will change. Databases are the type of 
application that companies don't just pull off the shelf at CompUSA, throw the 
CD into their machine, and then forget about. All of the other categories of 
revenue are still valid and necessary no matter how much was charged for the 
OS. In fact, there is now more freedom to charge more for these other services 
than before, when the cost of the software ate up the bulk of what a customer 
typically paid for when they bought database software. </P>
+<P CLASS="Body">
+So very superficially speaking, if the free or low-cost nature of the database 
were to cause it to be used on twice as many systems, and users were as equally 
motivated as before to purchase consulting and support and development tools 
and libraries and such from your company, you'd see a 20% gain in the overall 
amount of revenue. What's more likely is that three to four times as many new 
users are introduced to your software, and while the take-up rate of your other 
services is lower (either because people are happy just using the free version, 
or you have competitors now offering these services for your product), so long 
as that take-up rate doesn't go too low, you've probably increased overall 
revenue into the company. </P>
+<P CLASS="Body">
+Furthermore, depending on the license applied, you may see lower costs 
involved in development of your software. You're likely to see bugs fixed by 
motivated customers, for example. You're also likely to see new innovations in 
your software by customers who contribute their code to the project because 
they want to see it maintained as a standard part of the overall distribution. 
So overall, your development costs could go down. </P>
+<P CLASS="Body">
+It's also likely that, given a product/services mix like the above example, 
releasing this product for free does little to help your competitors compete 
against you in your other revenue spaces. There are probably already 
consultants who do integration work with your tools; already independent 
authors of books; already libraries of code you've encouraged other companies 
to build. The availability of source code will marginally help competitors be 
able to provide support for your code, but as the original developers, you'll 
have a cache to your brand that the others will have to compete against. </P>
+<P CLASS="Body">
+Not all is wine and roses, of course. There are costs involved in this process 
that are going to be difficult to tie to revenue directly. For example, the 
cost of infrastructure to support such an endeavor, while not significant, can 
consume systems administration and support staff. There's also the cost of 
having developers communicating with others outside the company, and the extra 
overhead of developing the code in a public way. There may be significant cost 
involved in preparing the source code for public inspection. And after all this 
work, there may simply not be the &quot;market need&quot; for your product as 
freeware. I'll address all these points in the rest of this essay. </P>
+<H2 CLASS="HeadA">
+Evaluating the Market Need for Your Project</H2>
+<P CLASS="Body">
+It may be very tempting for a company to look to Open Source as a way to save 
a particular project, to gain notoriety, or to simply have a good story to end 
a product category. These are not good reasons to launch an open-source 
project. If a company is serious about pursuing this model, it needs to do its 
research in determining exactly what the product needs to be for an open-source 
strategy to be successful. </P>
+<P CLASS="Body">
+The first step is to conduct a competitive analysis of the space, both for the 
commercial competitors and the freeware competitors, no matter how small. Be 
very careful to determine exactly what your product offers by componentizing 
your offering into separable &quot;chunks&quot; that could be potentially 
bundled or sold or open-sourced separately. Similarly, don't exclude 
combinations of freeware and commercialware that offer the same functionality. 
</P>
+<P CLASS="Body">
+Let's continue with the database vendor example above. Let's say there are 
actually three components to the vendor's database product: a core SQL server, 
a backup/transaction logging manager, and a developer library. Such a vendor 
should not only compare their product's offering to the big guys like Oracle 
and Sybase, not only to the smaller but growing commercial competitors like 
Solid and Velocis, but also to the free databases like MySQL and Postgres. Such 
an analysis may conclude that the company's core SQL server provides only a 
little more functionality than MySQL, and in an area that was never considered 
a competitive advantage but merely a necessary feature to keep up with the 
other DB vendors. The backup/transaction logging manager has no freeware 
competition, and the developer library is surpassed by the Perl DBI utilities 
but has little Java or C competition. </P>
+<P CLASS="Body">
+This company could then consider the following strategies: </P>
+<OL>
+<LI CLASS="ListNumberStart">
+Replace the core SQL server with MySQL, and then package up the core SQL 
server functionality and backup/transaction logging manager, and sell Java/C 
libraries while providing and supporting the free Perl library. This would ride 
upon the momentum generated by the MySQL package, and the incredible library of 
add-on code and plug-in modules out there for it; it would also allow you to 
keep private any pieces of code you may believe have patents or patent-able 
code, or code you simply think is cool enough that it's a competitive 
advantage. Market yourself as a company that can scale MySQL up to larger 
deployments. </LI>
+<LI CLASS="ListNumber">
+Contribute the &quot;extra core SQL server functionality&quot; to MySQL, then 
design the backup/transaction logger to be sold as a separate product that 
works with a wider variety of databases, with a clear preference for MySQL. 
This has smaller revenue potential, but allows you as a company to be more 
focused and potentially reach a broader base of customers. Such a product may 
be easier to support as well. </LI>
+<LI CLASS="ListNumber">
+Go in the other direction: stick with a commercial product strategy for the 
core SQL server and libraries, but open-source the backup/transaction logger as 
a general utility for a wide array of databases. This would cut down on your 
development costs for this component, and be a marketing lead generator for 
your commercial database. It would also remove a competitive advantage some of 
your commercial competitors would have over open source, even though it would 
also remove some of yours too. </LI>
+</OL>
+<P CLASS="Body">
+All of these are valid approaches to take. Another approach: </P>
+<OL>
+<LI CLASS="ListNumber">
+Open-source the entire core server as its own product, separate from MySQL or 
Postgres or any of the other existing packages, and provide commercial support 
for it. Sell as standard non-open-source the backup/logging tool, but 
open-source the development libraries to encourage new users. Such a strategy 
carries more risk, as a popular package like MySQL or Postgres tends to have 
been around for quite some time, and there's inherently much developer aversion 
to swapping out a database if their current one is working fine. To do this, 
you'd have to prove <EM CLASS="Emphasis">significant</EM> benefit over what 
people are currently using. Either it has to be dramatically faster, more 
flexible, easier to administer or program with, or contain sufficiently new 
features that users are motivated to try it out. You also have to spend much 
more time soliciting interest in the project, and you probably will have to 
find a way to pull developers away from competing products. </LI>
+</OL>
+<P CLASS="Body">
+I wouldn't advocate the fourth approach in this exact circumstance, as MySQL 
actually has a very healthy head start here, lots and lots of add-on programs, 
and a rather large existing user base. </P>
+<P CLASS="Body">
+However, from time to time an open source project loses momentum, either 
because the core development team is not actively doing development, or the 
software runs into core architectural challenges that keep it from meeting new 
demands, or the environment that created this demand simply dries up or changes 
focus. When that happens, and it becomes clear people are looking for 
alternatives, there is the possibility of introducing a replacement that will 
attract attention, even if it does not immediately present a significant 
advance over the status quo. </P>
+<P CLASS="Body">
+Analyzing demand is essential. In fact, it's demand that usually creates new 
open-source projects. Apache started with a group of webmasters sharing patches 
to the NCSA web server, deciding that swapping patches like so many baseball 
cards was inefficient and error-prone, and electing to do a separate 
distribution of the NCSA server with their patches built in. None of the 
principals involved in the early days got involved because they wanted to sell 
a commercial server with Apache as its base, though that's certainly a valid 
reason for being involved. </P>
+<P CLASS="Body">
+So an analysis of the market demand for a particular open-source project also 
involves joining relevant mailing lists and discussion forums, cruising 
discussion archives, and interviewing your customers and their peers; only then 
can you realistically determine if there are people out there willing to help 
make the project bear fruit. </P>
+<P CLASS="Body">
+Going back to Apache's early days: those of us who were sharing patches around 
were also sending them back to NCSA, hoping they'd be incorporated, or at the 
very least acknowledged, so that we could be somewhat assured that we could 
upgrade easily when the next release came out. NCSA had been hit when the 
previous server programmers had been snatched away by Netscape, and the flood 
of email was too much for the remaining developers. So building our own server 
was more an act of self-preservation than an attempt to build the next great 
web server. It's important to start out with limited goals that can be 
accomplished quite easily, and not have to rely upon your project dominating a 
market before you realize benefits from the approach. </P>
+<H2 CLASS="HeadA">
+Open Source's Position in the Spectrum of Software</H2>
+<P CLASS="Body">
+To determine which parts of your product line or components of a given product 
to open-source, it may be helpful to conduct a simple exercise. First, draw a 
line representing a spectrum. On the left hand side, put 
&quot;Infrastructural,&quot; representing software that implements frameworks 
and platforms, all the way down to TCP/IP and the kernel and even hardware. On 
the right hand side, put &quot;End-user applications,&quot; representing the 
tools and applications that the average, non-technical user will use. Along 
this line, place dots representing, in relative terms, where you think each of 
the components of your product offering lie. From the above example, the GUI 
front-ends and administrative tools lie on the far right-hand side, while code 
that manages backups is off to the far left. Development libraries are somewhat 
to the right of center, while the core SQL facilities are somewhat to the left. 
Then, you may want to throw in your competitors' products as well, also 
separating them out by component, and if you're really creative, using a 
different color pen to distinguish the free offerings from the commercial 
offerings. What you are likely to find is that the free offerings tend to clump 
towards the left-hand side, and the commercial offerings towards the right. </P>
+<P CLASS="Body">
+Open-source software has tended to be slanted towards the 
infrastructural/back-end side of the software spectrum represented here. There 
are several reasons for this: </P>
+<UL>
+<LI CLASS="ListBullet">
+End-user applications are hard to write, not only because a programmer has to 
deal with a graphical, windowed environment which is constantly changing, 
nonstandard, and buggy simply because of its complexity, but also because most 
programmers are not good graphical interface designers, with notable 
exceptions. </LI>
+<LI CLASS="ListBullet">
+Culturally, open-source software has been conducted in the networking code and 
operating system space for years. </LI>
+<LI CLASS="ListBullet">
+Open-source tends to thrive where incremental change is rewarded, and 
historically that has meant back-end systems more than front-ends. </LI>
+<LI CLASS="ListBullet">
+Much open-source software was written by engineers to solve a task they had to 
do while developing commercial software or services; so the primary audience 
was, early on, other engineers. </LI>
+</UL>
+<P CLASS="Body">
+This is why we see solid open-source offerings in the operating system and 
network services space, but very few offerings in the desktop application 
space. </P>
+<P CLASS="Body">
+There are certainly counterexamples to this. A great example is the GIMP, or 
GNU Image Manipulation Program, an X11 program comparable in feature set to 
Adobe Photoshop. Yet in some ways, this product is also an 
&quot;infrastructure&quot; tool, a platform, since it owes its success to its 
wonderful plug-in architecture, and the dozens and dozens of plug-ins that have 
been developed that allow it to import and export many different file formats 
and which implement hundreds of filter effects. </P>
+<P CLASS="Body">
+Look again at the spectrum you've drawn out. At some point, you can look at 
your offering in the context of these competitors, and draw a vertical line. 
This line denotes the separation between what you open-source and what you may 
choose to keep proprietary. That line itself represents your true platform, 
your interface between the public code you're trying to establish as a standard 
on the left, and your private code you want to drive demand for on the right. 
</P>
+<H2 CLASS="HeadA">
+Nature Abhors a Vacuum</H2>
+<P CLASS="Body">
+Any commercial-software gaps in an otherwise open-source infrastructural 
framework are a strong motivating force for redevelopment in the public space. 
Like some force of nature, when a commercial wall exists between two strong 
pieces of open-source software, there's pressure to bridge that gap with a 
public solution. This is because every gap can be crossed given enough 
resources, and if that gap is small enough for your company to cross with your 
own development team, it's likely to be small enough for a set of motivated 
developers to also cross. </P>
+<P CLASS="Body">
+Let's return to the database example: say you decide to open-source your core 
SQL server (or your advanced code on top of MySQL), but decide to make money by 
building a commercial, non-source-available driver for plugging that database 
into a web server to create dynamic content. You decide the database will be a 
loss leader for this product, and therefore you'll charge far higher than 
normal margins on this component. </P>
+<P CLASS="Body">
+Since hooking up databases to web servers is a very common and desirable 
thing, developers will either have to go through you, or find another way to 
access the database from the web site. Each developer will be motivated by the 
idea of saving the money they'd otherwise have to pay you. If enough developers 
pool their resources to make it worth their while, or a single talented 
individual simply can't pay for the plug-in but still wants to use that 
database, it's possible you could wake up one morning to find an open-source 
competitor to your commercial offering, completely eliminating the advantage of 
having the only solution for that task. </P>
+<P CLASS="Body">
+This is a piece of a larger picture: relying upon proprietary source code in 
strategic places as your way of making money has become a risky business 
venture. If you can make money by supporting the web server + plug-in + 
database combination, or by providing an interface to managing that system as a 
whole, you can protect yourself against these types of surprises. </P>
+<P CLASS="Body">
+Not all commercial software has this vulnerability--it is specifically a 
characteristic of commercial software that tries to slot itself into a niche 
directly between two well-established open-source offerings. Putting your 
commercial offering as an addition to the current set of open-source offerings 
is a more solid strategy. </P>
+<H2 CLASS="HeadA">
+Donate, or Go It Alone? </H2>
+<P CLASS="Body">
+Open-source software exists in many of the standard software categories, 
particularly those focused on the server side. Obviously we have operating 
systems; web servers; mail (SMTP, POP, IMAP), news (NNTP), and DNS servers; 
programming languages (the &quot;glue&quot; for dynamic content on the Web); 
databases; networking code of all kinds. On the desktop you have text editors 
like Emacs, Nedit, and Jove; windowing systems like Gnome and KDE; web browsers 
like Mozilla; and screen savers, calculators, checkbook programs, PIMs, mail 
clients, image tools--the list goes on. While not every category has 
category-killers like Apache or Bind, there are probably very few commercial 
niches that don't have at least the beginnings of a decent open source 
alternative available. This is much less true for the Win32 platform than for 
the Unix or Mac platforms, primarily because the open-source culture has not 
adopted the Win32 platform as &quot;open&quot; enough to really build upon. </P>
+<P CLASS="Body">
+There is a compelling argument for taking advantage of whatever momentum an 
existing open-source package has in a category that overlaps with your 
potential offering, by contributing your additional code or enhancements to the 
existing project and then aiming for a return in the form of higher-quality 
code overall, marketing lead generation, or common platform establishment. In 
evaluating whether this is an acceptable strategy, one needs to look at 
licensing terms: </P>
+<UL>
+<LI CLASS="ListBullet">
+Are the terms on the existing package copacetic to your long-term goals? </LI>
+<LI CLASS="ListBullet">
+Can you legally contribute your code under that license? </LI>
+<LI CLASS="ListBullet">
+Does it incent future developers sufficiently? If not, would the developers be 
willing to accommodate you by changing the license? </LI>
+<LI CLASS="ListBullet">
+Are your contributions general enough that they would be of value to the 
developers and users of the existing project? If all they do is implement an 
API to your proprietary code, they probably won't be accepted. </LI>
+<LI CLASS="ListBullet">
+If your contributions are hefty, can you have &quot;peer&quot; status with the 
other developers, so that you can directly apply bug fixes and enhancements you 
make later? </LI>
+<LI CLASS="ListBullet">
+Are the other developers people you can actually work with? </LI>
+<LI CLASS="ListBullet">
+Are your developers people who can work with others in a collaborative 
setting? </LI>
+</UL>
+<P CLASS="Body">
+Satisfying developers is probably the biggest challenge to the open-source 
development model, one which no amount of technology or even money can really 
address. Each developer has to feel like they are making a positive 
contribution to the project, that their concerns are being addressed, their 
comments on architecture and design questions acknowledged and respected, and 
their code efforts rewarded with integration into the distribution or a really 
good reason why not. </P>
+<P CLASS="Body">
+People mistakenly say &quot;open-source software works because the whole 
Internet becomes your R&amp;D and QA departments!&quot; In fact, the amount of 
talented programmer effort available for a given set of tasks is usually 
limited. Thus, it is usually to everyone's interests if parallel development 
efforts are not undertaken simply because of semantic disputes between 
developers. On the other hand, evolution works best when alternatives compete 
for resources, so it's not a bad thing to have two competing solutions in the 
same niche if there's enough talent pool for critical mass--some real 
innovation may be tried in one that wasn't considered in the other. </P>
+<P CLASS="Body">
+There is strong evidence for competition as a healthy trait in the SMTP server 
space. For a long time, Eric Allman's &quot;Sendmail&quot; program was the 
standard SMTP daemon every OS shipped with. There were other open-source 
competitors that came up, like Smail or Zmailer, but the first to really crack 
the usage base was Dan Bernstein's Qmail package. When Qmail came on the scene, 
Sendmail was 20 years old, and had started to show its age; it was also not 
designed for the Internet of the late 90s, where buffer overflows and denial of 
service attacks are as common as rainfall in Seattle. Qmail was a radical break 
in many ways--program design, administration, even in its definition of what 
good &quot;network behavior&quot; for an SMTP server is. It was an evolution 
that would have been exceedingly unlikely to have been made within Allman's 
Sendmail package. Not because Allman and his team weren't good programmers or 
because there weren't motivated third-party contributors; it's just that 
sometimes a radical departure is needed to really try something new and see if 
it works. For similar reasons, IBM funded the development of Weiste Venema's 
&quot;SecureMailer&quot; SMTP daemon, which as of this writing also appears to 
be likely to become rather popular. The SMTP daemon space is well-defined 
enough and important enough that it can support multiple open-source projects; 
time will tell which will survive. </P>
+<H2 CLASS="HeadA">
+Bootstrapping </H2>
+<P CLASS="Body">
+Essential to the health of an open-source project is that the project have 
sufficient momentum to be able to evolve and respond to new challenges. Nothing 
is static in the software world, and each major component requires maintenance 
and new enhancements continually. One of the big selling points of this model 
is that it cuts down on the amount of development any single party must do, so 
for that theory to become fact, you need other active developers. </P>
+<P CLASS="Body">
+In the process of determining demand for your project, you probably ran into a 
set of other companies and individuals with enough interest here to form a core 
set of developers. Once you've decided on a strategy, shop it to this core set 
even more heavily; perhaps start a simple discussion mailing list for this 
purpose, with nothing set in stone. Chances are this group will have some 
significant ideas for how to make this a successful project, and list their own 
set of resources they could apply to make it happen. </P>
+<P CLASS="Body">
+For the simplest of projects, a commitment from this group that they'll give 
your product a try and if they're happy stay on the development mailing list is 
probably enough. However, for something more significant, you should try and 
size up just how big the total resource base is. </P>
+<P CLASS="Body">
+Here is what I would consider a minimum resource set for a project of moderate 
complexity, say a project to build a common shopping cart plug-in for a web 
server, or a new type of network daemon implementing a simple protocol. In the 
process I'll describe the various roles needed and the types of skills 
necessary to fill them. </P>
+<UL>
+<LI CLASS="ListBullet">
+<EM CLASS="Emphasis">Role 1: Infrastructure support</EM>: Someone to set up 
and maintain the mailing list aliases, the web server, the CVS (Concurrent 
Versioning System) code server, the bug database, etc. </LI>
+</UL>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Startup</EM>: 100 hours </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Maintenance</EM>: 20 hrs/week. </BLOCKQUOTE>
+<UL>
+<LI CLASS="ListBullet">
+<EM CLASS="Emphasis">Role 2: Code &quot;captain&quot;</EM>: Someone who 
watches all commits and has overall responsibility for the quality of the 
implemented code. Integrates patches contributed by third parties, fixing any 
bugs or incompatibilities in these contributions. This is outside of whatever 
new development work they are also responsible for. </LI>
+</UL>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Startup</EM>: 40-200 hours (depends on how long it takes 
to clean up the code for public consumption!) </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Maintenance</EM>: 20 hrs/week </BLOCKQUOTE>
+<UL>
+<LI CLASS="ListBullet">
+<EM CLASS="Emphasis">Role 3: Bug database maintenance</EM>: While this is not 
free &quot;support,&quot; it is important that the public have an organized way 
of communicating bug reports and issues to the server developers. In a free 
setting, the developers are of course not even obliged to answer all mail they 
get, but they should make reasonable efforts to respond to valid issues. The 
bug database maintainer would be the first line of support, someone who goes 
through the submissions on a regular basis and weeds out the simple questions, 
tosses the clueless ones, and forwards the real issues on to the developers. 
</LI>
+</UL>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Startup</EM>: just enough to learn their way around the 
code </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Maintenance</EM>: 10-15 hrs/week </BLOCKQUOTE>
+<UL>
+<LI CLASS="ListBullet">
+<EM CLASS="Emphasis">Role 4: Documentation/web site content maintenance</EM>: 
This position is often left unattended in open-source projects and left to the 
engineers or to people who really want to contribute but aren't star 
programmers; all too often it's simply left undone. So long as we're going 
about this process deliberately, locating dedicated resources to make sure that 
non-technical people can understand and appreciate the tools they are deploying 
is essential to widespread usage. It helps cut down on having to answer bug 
reports which are really just misunderstandings, and it also helps encourage 
new people to learn their way around the code and become future contributors. A 
document that describes at a high level the internal architecture of the 
software is essential; documentation that explains major procedures or classes 
within the code is almost as important. </LI>
+</UL>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Startup</EM>: 60 hours (presuming little code has been 
documented) </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Maintenance</EM>: 10 hrs/week </BLOCKQUOTE>
+<UL>
+<LI CLASS="ListBullet">
+Role 5: Cheerleader/zealot/evangelist/strategist: Someone who can work to 
build momentum for the project by finding other developers, push specific 
potential customers to give it a try, find other companies who could be 
candidates for adopting this new platform, etc. Not quite a marketer or 
salesperson, as they need to stay close to the technology; but the ability to 
clearly see the role of the project in a larger perspective is essential. </LI>
+</UL>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Startup</EM>: enough to learn the project </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+<EM CLASS="Emphasis">Maintenance</EM>: 20 hrs/week</BLOCKQUOTE>
+<P CLASS="Body">
+So here we have five roles representing almost three full-time people. In 
reality, some of these roles get handled by groups of people sharing 
responsibility, and some projects can survive with the average core participant 
spending less than 5 hrs/week after the first set of release humps are passed. 
But for the early days of the project it is essential that developers have the 
time and focus they would if the project were a regular development effort at 
the company. </P>
+<P CLASS="Body">
+These five roles also do not cover any resources that could be put towards new 
development; this is purely maintenance. In the end, if you can not find enough 
resources from peers and partners to cover these bases <EM 
CLASS="Emphasis">and</EM> enough extra developers to do some basic new 
development (until new recruits are attracted), you may want to reconsider 
open-sourcing your project. </P>
+<H2 CLASS="HeadA">
+What License to Use? </H2>
+<P CLASS="Body">
+Determining which license to use for your project can be a fairly complex 
task; it's the kind of task you probably don't enjoy but your legal team will. 
There are other papers and web sites that cover copyright issues in finer 
detail; I'll provide an overview, though, of what I see as the business 
considerations of each style of license. </P>
+<H3 CLASS="HeadB">
+The BSD-Style Copyright </H3>
+<P CLASS="Body">
+This is the copyright used by Apache and by the BSD-based operating systems 
projects (FreeBSD, OpenBSD, NetBSD), and by and large it can be summed up as, 
&quot;Here's this code, do what you like with it, we don't care, just give us 
credit if you try and sell it.&quot; Usually that credit is demanded in 
different forms--on advertising, or in a README file, or in the printed 
documentation, etc. It has been brought up that such a copyright may be 
inscalable--that is, if someone ever released a bundle of software that 
included 40 different open-source modules, all BSD-based, one might argue that 
there'd be 40 different copyright notices that would be necessary to display. 
In practice this has not been a problem, and in fact it's been seen as a 
positive force in spreading awareness of the use of open-source software. </P>
+<P CLASS="Body">
+From a business perspective, this is the best type of license for jumping into 
an existing project, as there are no worries about licenses or restrictions on 
future use or redistribution. You can mix and match this software with your own 
proprietary code, and only release what you feel might help the project and 
thus help you in return. This is one reason why we chose it for the Apache 
group--unlike many free software projects, Apache was started largely by 
commercial webmasters in search of a better web server for their own commercial 
needs. While probably none of the original team had a goal of creating a 
commercial server on top of Apache, none of us knew what our futures would 
hold, and felt that limiting our options at the beginning wasn't very smart. 
</P>
+<P CLASS="Body">
+This type of license is ideal for promoting the use of a reference body of 
code that implements a protocol or common service. This is another reason why 
we chose it for the Apache group--many of us wanted to see HTTP survive and 
become a true multiparty standard, and would not have minded in the slightest 
if Microsoft or Netscape chose to incorporate our HTTP engine or any other 
component of our code into their products, if it helped further the goal of 
keeping HTTP common. </P>
+<P CLASS="Body">
+This degree of openness has risks. No incentive is built into the license to 
encourage companies to contribute their code enhancements back to the project. 
There have certainly been cases in Apache's history where companies have 
developed technology around it that we would have like to have seen offered 
back to the project. But had we had a license which mandated that code 
enhancements be made available back to the project, such enhancements would 
perhaps never have been made in the first place. </P>
+<P CLASS="Body">
+All this means that, strategically speaking, the project needs to maintain 
sufficient momentum, and that participants realize greater value by 
contributing their code to the project, even code that would have had value if 
kept proprietary. This is a tricky ratio to maintain, particularly if one 
company decides to dramatically increase the amount of coding they do on a 
derivative project; and begins to doubt the potential return in proportion to 
their contribution to the project, e.g., &quot;We're doing all this work, more 
than anyone else combined, why should we share it?&quot; The author has no 
magic bullet for that scenario, other than to say that such a company probably 
has not figured out the best way to inspire contributions from third parties to 
help meet their engineering goals most efficiently. </P>
+<H3 CLASS="HeadB">
+The Mozilla Public License</H3>
+<P CLASS="Body">
+The Mozilla Public License (MPL) was developed by the Netscape Mozilla team 
for use on their project. It was the first new license in several years when it 
was released, and really addressed some key issues not addressed by the BSD or 
GNU licenses. It is adjacent to the BSD-style license in the spectrum of 
open-source software licenses. It has two key differences: </P>
+<P CLASS="Body">
+It mandates that changes to the &quot;distribution&quot; also be released 
under the same copyright as the MPL, which thus makes it available back to the 
project. The &quot;distribution&quot; is defined as the files as distributed in 
the source code. This is important, because it allows a company to add an 
interface to a proprietary library of code without mandating that the other 
library of code also be made MPL--only the interface. Thus, this software can 
more or less be combined into a commercial software environment. </P>
+<P CLASS="Body">
+It has several provisions protecting both the project as a whole and its 
developers against patent issues in contributed code. It mandates that the 
company or individual contributing code back to the project release any and all 
claims to patent rights that may be exposed by the code. </P>
+<P CLASS="Body">
+This second provision is really important; it also, at the time of this 
writing, contains a big flaw. </P>
+<P CLASS="Body">
+Taking care of the patent issue is a Very Good Thing. There is always the risk 
that a company could innocently offer code to a project, and then once that 
code has been implemented thoroughly, try and demand some sort of patent fee 
for its use. Such a business strategy would be laughably bad PR and very ugly, 
but unfortunately not all companies see this yet. So, this second provision 
prevents the case of anyone surreptitiously providing code they know is 
patented and liable to cause headaches for everyone down the road. </P>
+<P CLASS="Body">
+Of course it doesn't block the possibility that someone <EM 
CLASS="Emphasis">else</EM> owns a patent that would apply; there is no legal 
instrument that does provide that type of protection. I would actually advocate 
that this is an appropriate service for the U.S. Patent and Trade Office to 
perform; they seem to have the authority to declare certain ideas or algorithms 
as property someone owns, so shouldn't they also be required to do the opposite 
and certify my submitted code as patent-free, granting me some protection from 
patent lawsuits? </P>
+<P CLASS="Body">
+As I said earlier, though, there is a flaw in the current MPL, as of December 
1998. In essence, Section 2.2 mandates (through its definition of 
&quot;Contributor Version&quot;) that the contributor waive patent claims on 
<EM CLASS="Emphasis">any</EM> part of Mozilla, not just on the code they 
contribute. Maybe that doesn't seem like a bug. It would be nice to get the 
whole package waived by a number of large companies. </P>
+<P CLASS="Body">
+Unfortunately, a certain large company with one of the world's largest patent 
portfolios has a rather specific, large issue with this quirk. Not because they 
intend to go after Mozilla some day and demand royalties--that would be 
foolhardy. They are concerned because there are parts of Mozilla that implement 
processes they have patents on and receive rather large numbers of dollars for 
every year--and were they to waive patent claims over the Mozilla code, those 
companies who pay them dollars for those patents could simply take the code 
from Mozilla that implements those same patents and shove them into their own 
products, removing the need to license the patent from said large company. Were 
Section 2.2 to simply refer to the contributed patches rather than the whole 
browser when it comes to waiving patents, this would not be a problem. </P>
+<P CLASS="Body">
+Aside from this quirk, the MPL is a remarkably solid license. Mandating back 
the changes to the &quot;core&quot; means that essential bug fixes and 
portability enhancements will flow back to the project, while value-added 
features can still be developed by commercial entities. It is perhaps the best 
license to use to develop an end-user application, where patents are more 
likely to be an issue, and the drive to branch the project may be greater. In 
contrast, the BSD license is perhaps more ideal for projects intended to be 
&quot;invisible&quot; or essentially library functions, like an operating 
system or a web server. </P>
+<H3 CLASS="HeadB">
+The GNU Public License </H3>
+<P CLASS="Body">
+While not obviously a business-friendly license, there are certain aspects of 
the GNU license which are attractive, believe it or not, for commercial 
purposes. </P>
+<P CLASS="Body">
+Fundamentally, the GPL mandates that enhancements, derivatives, and even code 
that incorporates GPL'd code are also themselves released as source code under 
the GPL. This &quot;viral&quot; behavior has been trumpeted widely by 
open-source advocates as a way to ensure that code that begins free remains 
free--that there is no chance of a commercial interest forking their own 
development version from the available code and committing resources that are 
not made public. In the eyes of those who put a GPL on their software, they 
would much rather have no contribution than have a contribution they couldn't 
use as freely as the original. There is an academic appeal to this, of course, 
and there are advocates who claim that Linux would have never gotten as large 
as it has unless it was GPL'd, as the lure of forking for commercial purposes 
would have been too great, keeping the critical mass of unified development 
effort from being reached. </P>
+<P CLASS="Body">
+So at first glance, it may appear that the GPL would not have a happy 
co-existence with a commercial intent related to open-source software. The 
traditional models of making money through software value-add are not really 
possible here. However, the GPL could be an extraordinarily effective means to 
establish a platform that discourages competitive platforms from being created, 
and which protects your claim to fame as the &quot;premier&quot; provider of 
products and services that sit upon this platform. </P>
+<P CLASS="Body">
+An example of this is Cygnus and GCC. Cygnus makes a very healthy chunk of 
change every year by porting GCC to various different types of hardware, and 
maintaining those ports. The vast majority of that work, in compliance with the 
GPL, gets contributed to the GCC distribution, and made available for free. 
Cygnus charges for the effort involved in the port and maintenance, not for the 
code itself. Cygnus's history and leadership in this space make it the 
reference company to approach for this type of service. </P>
+<P CLASS="Body">
+If a competitor were to start up and compete against Cygnus, it too would be 
forced to redistribute their changes under the GPL. This means that there is no 
chance for a competitor to find a commercial technical niche on top of the GCC 
framework that could be exploited, without giving Cygnus the same opportunity 
to also take advantage of that technology. Cygnus has created a situation where 
competitors can't compete on technology differentiation, unless a competitor 
were to spend a very large amount of time and money and use a platform other 
than GCC altogether. </P>
+<P CLASS="Body">
+Another way in which the GPL could be used for business purposes is as a 
technology &quot;sentinel,&quot; with a non-GPL'd version of the same code 
available for a price. For example, you may have a great program for encrypting 
TCP/IP connections over the Internet. You don't care if people use it 
non-commercially, or even commercially--your interest is in getting the people 
who want to embed it in a product or redistribute it for profit to pay you for 
the right to do that. If you put a GPL license on the code, this second group 
of users can't do what they want, without making their entire product GPL as 
well, something many of them may be unwilling to do. However, if you maintain a 
separate branch of your project, one which is <EM CLASS="Emphasis">not</EM> 
under the GPL, you can commercially license the separate branch of code any way 
you like. You have to be very careful, though, to make sure that any code 
volunteered to you by third parties is explicitly available for this non-free 
branch; you ensure this by either declaring that only you (or people employed 
by you) will write code for this project, or that (in addition) you'll get 
explicit clearance from each contributor to take whatever they contribute into 
a non-free version. </P>
+<P CLASS="Body">
+There are companies for whom this is a viable business model--an example is 
Transvirtual in Berkeley, who are applying this model to a commercial 
lightweight Java virtual machine and class library project. Some may claim that 
the number of contributors who would be turned off by such a model would be 
high, and that the GPL and non-GPL versions may branch; I would claim that if 
you treat your contributors right, perhaps even offer them money or other 
compensation for their contributions (it is, after all, helping your commercial 
bottom line), this model could work. </P>
+<P CLASS="Body">
+The open-source license space is sure to evolve over the next few years as 
people discover what does and does not work. The simple fact is that you are 
free to invent a new license that exactly describes where on the spectrum 
(represented by BSD on the right and GPL on the left) you wish to place it. 
Just remember, the more freedoms you grant those who use and extend your code, 
the more incented they will be to contribute. </P>
+<H2 CLASS="HeadA">
+Tools for Launching Open Source Projects </H2>
+<P CLASS="Body">
+We have a nice set of available, well-maintained tools used in the Apache 
Project for allowing our distributed development process to work. </P>
+<P CLASS="Body">
+Most important among these is CVS, or Concurrent Versioning System. It is a 
collection of programs that implement a shared code repository, maintaining a 
database of changes with names and dates attached to each change. It is 
extremely effective for being able to allow multiple people to simultaneously 
be the &quot;authors&quot; of a program without stepping over each others' 
toes. It also helps in the debugging process, as it is possible to roll back 
changes one by one to find out exactly where a certain bug may have been 
introduced. There are clients for every major platform, and it works just fine 
over dial-up lines or across long-distance connections. It can also be secured 
by tunneling it over an encrypted connection using SSH. </P>
+<P CLASS="Body">
+The Apache project uses CVS not just for maintaining the actual software, but 
also for maintaining our &quot;STATUS&quot; file, in which we place all major 
outstanding issues, with comments, opinions, and even votes attached to each 
issue. We also use it to register votes for decisions we make as a group, 
maintain our web site documents with it, manage development documents, etc. In 
short it is the asset and knowledge management software for the project. Its 
simplicity may seem like a drawback--most software in this space is expensive 
and full-featured--but in reality simplicity is a very strong virtue of CVS. 
Every component of CVS is free--the server and the clients. </P>
+<P CLASS="Body">
+Another essential element to an open-source project is a solid set of 
discussion forums for developers and for users. The software to use here is 
largely inconsequential--we use Majordomo, but ezmlm or Smartlist or any of the 
others would probably be fine. The important thing is to give each development 
effort their own list, so that developers can self-select their interests and 
reasonably keep up with development. It's also smart to create a separate list 
for each project to which the CVS server emails changes that get made to the 
CVS repository, to allow for a type of passive peer review of changes. Such a 
model is actually very effective in maintaining code standards and discovering 
bugs. It may also make sense to have different lists for users and developers, 
and perhaps even distinguish between <EM CLASS="Emphasis">all</EM> developers 
and <EM CLASS="Emphasis">core</EM> developers if your project is large enough. 
Finally, it is important to have archives of the lists publicly available so 
that new users can search to see if a particular issue has been brought up in 
the past, or how something was addressed in the past. </P>
+<P CLASS="Body">
+Bug and issue tracking is also essential to a well-run project. On the Apache 
Project we use a GNU tool called GNATS, which has served us very well through 
3,000+ bug reports. You want to find a tool that allows multiple people to 
answer bug reports, allows people to specialize on bugs in one particular 
component of the project, and allows people to read bug reports by email and 
reply to them by email rather than exclusively by a web form. The overriding 
goal for the bug database is that it should be as easy and automated as 
possible both for developers to answer bugs (because this is really a chore to 
most developers), and to search to see if a particular bug has already been 
reported. In essence, your bug database will become your repository for 
anecdotal knowledge about the project and its capabilities. Why is a particular 
behavior a feature and not a bug? Is anyone addressing a known problem? These 
are the types of questions a good bug database should seek to answer. </P>
+<P CLASS="Body">
+The open-source approach is <EM CLASS="Emphasis">not</EM> a magic bullet for 
every type of software development project. Not only do the conditions have to 
be right for conducting such a project, but there is a tremendous amount of 
real work that has to go into launching a successful project that has a life of 
its own. In many ways you, as the advocate for a new project, have to act a 
little like Dr. Frankenstein, mixing chemicals here, applying voltage there, to 
bring your monster to life. Good luck. </P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="perens.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/catalog_header_buttons.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/catalog_header_buttons.gif
diff -N Proyectos/Mecagtk/OpenSource/catalog_header_buttons.gif
Binary files /dev/null and /tmp/cvsFgB5A4 differ

Index: Proyectos/Mecagtk/OpenSource/copyright.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/copyright.html
diff -N Proyectos/Mecagtk/OpenSource/copyright.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/copyright.html 3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,131 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Monograph">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Copyright</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<h1 align="right">Copyright</h1>
+<P CLASS="Body">
+&quot;Free Software&quot; is Copyright &#169; 1998 Richard M. Stallman</P>
+<P CLASS="Body">
+Verbatim copying and duplication is permitted in any medium provided this 
notice is preserved.</P>
+<P CLASS="Body">
+&quot;A Brief History of Hackerdom&quot; and &quot;Revenge of the 
Hackers&quot; are Copyright &#169; 1998 Eric S. Raymond. </P>
+<P CLASS="Body">
+These essays is free; you can redistribute them and/or modify them under the 
terms of the GNU General Public License as published by the Free Software 
Foundation; either version 2 of the License, or (at your option) any later 
version.</P>
+<P CLASS="Body">
+These essays are distributed in the hope that they will be useful, but WITHOUT 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
details.</P>
+<P CLASS="Body">
+See Appendix B for a copy of the GNU General Public License, or write to the 
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  
02110-1301, USA.</P>
+<BLOCKQUOTE CLASS="ListSimple">
+Eric Raymond</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
address@hidden</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+6 Karen Drive</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+Malvern, PA 19355</BLOCKQUOTE>
+<P CLASS="Body">
+&quot;Open Source Software&quot; is free; you can redistribute it and/or 
modify it under the terms of the GNU General Public License as published by the 
Free Software Foundation; either version 2 of the License, or (at your option) 
any later version.</P>
+<P CLASS="Body">
+This essay is distributed in the hope that it will be useful, but WITHOUT ANY 
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. See the GNU General Public License for more details.</P>
+<P CLASS="Body">
+See Appendix B for a copy of the GNU General Public License, or write to the 
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  
02110-1301, USA.</P>
+<BLOCKQUOTE CLASS="ListSimple">
+Bruce Perens</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+<B CLASS="URL">
address@hidden</B></BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+c/o Pixar Animation Studios</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+1001 West Cutting #200</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="ListSimple">
+Richmond, CA 94804</BLOCKQUOTE>
+<P CLASS="Body">
+&quot;Freeing the Source&quot; is copyright &#169; 1998 Netscape 
Communications Corporation. It is printed here with permission from Netscape 
Communications Corporation.</P>
+<P CLASS="Body">
+&quot;Giving It Away&quot; is copyright &#169; 1999 O'Reilly &amp; Associates. 
All rights reserved to O'Reilly &amp; Associates and Red Hat Software.</P>
+<P CLASS="Body">
+All other material is copyright &#169; 1999 O'Reilly &amp; Associates. All 
rights reserved.</P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/hamerly2.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/hamerly2.gif
diff -N Proyectos/Mecagtk/OpenSource/hamerly2.gif
Binary files /dev/null and /tmp/cvsxTYz62 differ

Index: Proyectos/Mecagtk/OpenSource/ietf.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ietf.html
diff -N Proyectos/Mecagtk/OpenSource/ietf.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/ietf.html      3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,168 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Scott Bradner">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>The Internet Engineering Task Force</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">The Internet Engineering Task Force</H1>
+<H4 CLASS="ChapterAuthor" align="right">Scott Bradner</H4>
+<P CLASS="Body">
+For something that does not exist, the Internet Engineering Task Force (IETF) 
has had quite an impact. Apart from TCP/IP itself, all of the basic technology 
of the Internet was developed or has been refined in the IETF. IETF working 
groups created the routing, management, and transport standards without which 
the Internet would not exist. IETF working groups have defined the security 
standards that will help secure the Internet, the quality of service standards 
that will make the Internet a more predictable environment, and the standard 
for the next generation of the Internet protocol itself.</P>
+<P CLASS="Body">
+These standards have been phenomenally successful. The Internet is growing 
faster than any single technology in history, far faster than the railroad, 
electric light, telephone, or television, and it is only getting started. All 
of this has been accomplished with voluntary standards. No government requires 
the use of IETF standards. Competing standards, some mandated by governments 
around the world, have come and gone and the IETF standards flourish. But not 
all IETF standards succeed. It is only the standards that meet specific 
real-world requirements and do well that become true standards in fact as well 
as in name.</P>
+<P CLASS="Body">
+The IETF and its standards have succeeded for the same sorts of reasons that 
the Open Source community is taking off. IETF standards are developed in an 
open, all-inclusive process in which any interested individual can participate. 
All IETF documents are freely available over the Internet and can be reproduced 
at will. In fact the IETF's open document process is a case study in the 
potential of the Open Source movement.</P>
+<P CLASS="Body">
+This essay will give a short history of the IETF, a review of the IETF 
organization and processes and, at the end, some additional thoughts on the 
importance of open standards, open documents, and Open Source. </P>
+<H2 CLASS="HeadA">
+The History of the IETF</H2>
+<P CLASS="Body">
+The IETF started in January of 1986 as a quarterly meeting of U.S. government 
funded researchers. Representatives from non-government vendors were invited, 
starting with the fourth IETF meeting in October of that year. Since that time 
all IETF meetings are open to anyone who would like to attend. The initial 
meetings were very small, with less than 35 people in attendance at each of the 
first five meetings and with the peak attendance in the first 13 meetings only 
120 attendees, at the 12th meeting in January of 1989. The IETF has grown quite 
a bit since then, with more than 500 attendees at the 23rd meeting in March 
1992, more than 750 attendees at the 29th meeting in March 1994, more than 
1,000 attendees at the 31st meeting in December 1994, and almost 2,000 
attendees at the 37th meeting in December 1996. The rate of growth in 
attendance has slowed to the point that there were 2,100 attendees at the 43rd 
meeting in December 1998. Along the way, in 1991, the IETF reduced the number 
of meetings from four to three per year.</P>
+<P CLASS="Body">
+The IETF makes use of a small Secretariat, currently operating out of Reston, 
VA, and an RFC Editor, currently operated by the University of Southern 
California's Information Sciences Institute.</P>
+<P CLASS="Body">
+The IETF itself has never been incorporated as a legal entity. It has merely 
been an activity without legal substance. Up until the end of 1997, the IETF's 
expenses were covered by a combination of U.S. government grants and meeting 
fees. Since the beginning of 1998 the expenses have been covered by meeting 
fees and the Internet Society.</P>
+<P CLASS="Body">
+The Internet Society was formed in 1992, partially to provide a legal umbrella 
over the IETF standards process and to provide some funding for IETF-related 
activities. The Internet Society, an international membership-based non-profit 
organization, also evangelizes for the Internet in parts of the world that the 
Internet has not yet reached. At this time the IETF can be best described as a 
standards development function operating under the auspices of the Internet 
Society.</P>
+<P CLASS="Body">
+The concept of working groups was introduced at the 5th IETF meeting in 
February 1987 and there are now over 110 working groups operating within the 
IETF. </P>
+<H2 CLASS="HeadA">
+IETF Structure and Features</H2>
+<P CLASS="Body">
+The IETF can be described as a membership organization without a defined 
membership. There are no specific criteria for membership other than to note 
that people and not organizations or companies are members of the IETF. Any 
individual who participates in an IETF mailing list or attends an IETF meeting 
can be said to be an IETF member. </P>
+<P CLASS="Body">
+At this writing there are 115 officially chartered working groups in the IETF. 
These working groups are organized into eight areas: Applications, General, 
Internet, Operations and Management, Routing, Security, Transport, and User 
Services. Each of the areas is managed by one or two volunteer Area Directors. 
The Area Directors sitting as a group, along with the chair of the IETF, form 
the Internet Engineering Steering Group (IESG). The IESG is the standards 
approval board for the IETF. In addition there is a 12-member Internet 
Architecture Board (IAB), which provides advice to the IESG on working group 
formation and the architectural implications of IETF working group efforts.</P>
+<P CLASS="Body">
+The members of the IAB and the Area Directors are selected for their two year 
terms by a nominations committee randomly selected each year from among 
volunteers who have attended at least two out of the previous three IETF 
meetings. </P>
+<H2 CLASS="HeadA">
+IETF Working Groups</H2>
+<P CLASS="Body">
+One of the principal differences between the IETF and many other standards 
organizations is that the IETF is very much a bottom-up organization. It is 
quite rare for the IESG or the IAB to create a working group on their own to 
work on some problem that is felt to be an important one. Almost all working 
groups are formed when a small group of interested individuals get together on 
their own and then propose a working group to an Area Director. This does mean 
that the IETF cannot create task plans for future work, but at the same time it 
helps ensure that there is enough enthusiasm and expertise to make the working 
group a success.</P>
+<P CLASS="Body">
+The Area Director works with the people proposing the working group to develop 
a charter. Working group charters are used to list the specific deliverables of 
the working group, any liaison activities that might be needed with other 
groups, and, often most important, the limits on what the working group will 
explore. The proposed charter is then circulated to the IESG and IAB mailing 
lists for their comments. If significant issues do not arise within a week the 
charter is posted to the public IETF list and to a list of liaisons from other 
standards organizations to see if there is work going on in other forums which 
the IETF should be aware of. After another week for any additional comments, 
the IESG can then approve the charter and thereby create the working group. </P>
+<H2 CLASS="HeadA">
+IETF Documents</H2>
+<P CLASS="Body">
+All IETF documents are public documents freely available over the Internet. 
The IETF does get a limited copyright from the authors when the documents are 
published to ensure the document remains freely available (the author can not 
decide to withdraw the document at some future time), republishable in its 
entirety by anyone, and, for most documents, that the IETF can make derivative 
works within the IETF standards process. The author retains all other 
rights.</P>
+<P CLASS="Body">
+The basic publication series for the IETF is the RFC series. RFC once stood 
for &quot;Request for Comments,&quot; but since documents published as RFCs 
have generally gone through an extensive review process before publication, RFC 
is now best understood to mean &quot;RFC.&quot; RFCs fall into two basic 
categories: standards track and non-standards track. Standards track RFCs can 
have Proposed Standard, Draft Standard, or Internet Standard status. 
Non-standards track RFCs can be classified as Informational, Experimental, or 
Historic.</P>
+<P CLASS="Body">
+In addition to RFCs, the IETF makes use of Internet-Drafts. These are 
temporary documents whose purpose is close to the original &quot;request for 
comment&quot; concept of RFCs and which are automatically removed after six 
months. Internet-Drafts are not to be cited or otherwise referenced other than 
as works in progress. </P>
+<H2 CLASS="HeadA">
+The IETF Process</H2>
+<P CLASS="Body">
+The IETF motto is &quot;rough consensus and running code.&quot; Working group 
unanimity is not required for a proposal to be adopted, but a proposal that 
cannot demonstrate that most of the working group members think that it is the 
right thing to do will not be approved. There is no fixed percentage support 
that a proposal must achieve, but most proposals that have more than 90% 
support can be approved and those with less than 80% can often be rejected. 
IETF working groups do not actually vote, but can resort to a show of hands to 
see if the consensus is clear.</P>
+<P CLASS="Body">
+Non standards track documents can originate in IETF working group activity or 
from individuals who would like to make their thoughts or technical proposals 
available to the Internet community. Almost all proposals for RFC publication 
are reviewed by the IESG, after which the IESG will provide advice to the RFC 
Editor on the advisability of publishing the document. The RFC Editor then 
decides whether to publish the document and, if the IESG offers one, weather to 
include a note from the IESG in the document. IESG notes in this case are used 
to indicate discomfort with the proposal if the IESG feels that some sort of 
warning label would be helpful.</P>
+<P CLASS="Body">
+In the normal case of a standards track document an IETF working group will 
produce an Internet-Draft to be published as the RFC. The final step in the 
working group evaluation of the proposal is a &quot;last call,&quot; normally 
two weeks long, where the working group chair asks the working group mailing 
list if there are any outstanding issues with the proposal. If the result of 
the working group last call indicates that the consensus of the group is that 
the proposal should be accepted, the proposal is then forwarded to the IESG for 
their evaluation. The first step in the IESG evaluation is an IETF-wide last 
call sent to the main IETF announcement mailing list. This is so that people 
who have not been following the working group work can comment on the proposal. 
The normal IETF last call is two weeks for proposals that come from IETF 
working groups and four weeks for proposals not originating from IETF working 
groups. </P>
+<P CLASS="Body">
+The IESG uses the results of the IETF last-call as input to its deliberations 
about the proposal. The IESG can approve the document and request its 
publication, or it can send the proposal back to the author(s) for revision 
based on the IESG's evaluation of the proposal. This same process is used for 
each stage of the standards track.</P>
+<P CLASS="Body">
+Proposals normally enter the standards track as Proposed Standards, but 
occasionally if there is uncertainty about the technology or if additional 
testing is felt to be useful a document is initially published as an 
Experimental RFC. Proposed Standards are meant to be good ideas with no known 
technical flaws. After a minimum of six months as a Proposed Standard, a 
proposal can be considered for Draft Standard status. Draft Standards must have 
demonstrated that the documentation is clear and that any intellectual property 
rights issues with the proposal are understood and resolvable. This is done by 
requiring that there be at least two genetically independent, interoperable 
implementations of the proposal with separate exercises of licensing procedures 
if there are any. Note that it also requires that all of the separate features 
of the protocol be multiply-implemented. Any feature not meeting these 
requirements must be removed before the proposal can advance. Thus IETF 
standards can get simpler as they progress. This is the &quot;running 
code&quot; part of the IETF motto.</P>
+<P CLASS="Body">
+The final step in the IETF standards process is Internet Standard. After being 
at Draft Standard status for at least four months and demonstrating significant 
marketplace success, a proposal can be considered for Internet Standard 
status.</P>
+<P CLASS="Body">
+Two major differences stand out if one compares the IETF standards track with 
the process in other standards organizations. First, the final result of most 
standards bodies is approximately equivalent to the IETF Proposed Standard 
status. A good idea but with no requirement for actual running code. The second 
is that rough consensus instead of unanimity can produce proposals with fewer 
features added to quiet a noisy individual.</P>
+<P CLASS="Body">
+In brief, the IETF operates in a bottom-up task creation mode and believes in 
&quot;fly before you buy.&quot;</P>
+<H2 CLASS="HeadA">
+Open Standards, Open Documents,<BR>
+and Open Source</H2>
+<P CLASS="Body">
+It is quite clear that one of the major reasons that the IETF standards have 
been as successful as they have been is the IETF's open documentation and 
standards development policies. The IETF is one of the very few major standards 
organizations that make all of their documents openly available, as well as all 
of its mailing lists and meetings. In many of the traditional standards 
organizations, and even in some of the newer Internet-related groups, access to 
documents and meetings is restricted to members or only available by paying a 
fee. Sometimes this is because the organizations raise some of the funds to 
support themselves through the sale of their standards. In other cases it is 
because the organization has fee-based memberships, and one of the reasons for 
becoming a member is to be able participate in the standards development 
process and to get access to the standards as they are being developed. </P>
+<P CLASS="Body">
+Restricting participation in the standards development process often results 
in standards that do not do as good a job of meeting the needs of the user or 
vendor communities as they might or are more complex than the operator 
community can reasonably support. Restricting access to work-in-progress 
documents makes it harder for implementors to understand what the genesis and 
rational is for specific features in the standard, and this can lead to flawed 
implementations. Restricting access to the final standards inhibits the ability 
for students or developers from small startups to understand, and thus make use 
of, the standards.</P>
+<P CLASS="Body">
+The IETF supported the concept of open sources long before the Open Source 
movement was formed. Up until recently, it was the normal case that 
&quot;reference implementations&quot; of IETF technologies were done as part of 
the multiple implementations requirement for advancement on the standards 
track. This has never been a formal part of the IETF process, but it was 
generally a very useful by-product. Unfortunately this has slowed down somewhat 
in this age of more complex standards and higher economic implications for 
standards. The practice has never stopped, but it would be very good if the 
Open Source movement were to reinvigorate this unofficial part of the IETF 
standards process.</P>
+<P CLASS="Body">
+It may not be immediately apparent, but the availability of open standards 
processes and documentation is vital to the Open Source movement. Without a 
clear agreement on what is being worked on, normally articulated in standards 
documents, it is quite easy for distributed development projects, such as the 
Open Sources movement, to become fragmented and to flounder. There is an 
intrinsic partnership between open standards processes, open documentation, and 
open sources. This partnership produced the Internet and will produce 
additional wonders in the future.</P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="stallman.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/intro.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/intro.html
diff -N Proyectos/Mecagtk/OpenSource/intro.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/intro.html     3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,314 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Chris DiBona, Sam Ockman, and Mark Stone">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Introduction</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Introduction</H1>
+<H4 CLASS="ChapterAuthor" align="right">Chris DiBona, Sam Ockman, and Mark 
Stone</H4>
+<H2 CLASS="HeadA">
+Prologue</H2>
+<P CLASS="Body">
+Linux creator Linus Torvalds reports that the name &quot;Linus&quot; was 
chosen for him because of his parents' admiration for Nobel laureate Linus 
Pauling. Pauling was the rarest of men: a scientist who won the Nobel Prize not 
once, but twice. We find a cautionary tale for the Open Source community in the 
story of Pauling's foundational work that made possible the discovery of the 
structure of DNA. </P>
+<P CLASS="Body">
+The actual discovery was made Francis Crick and James Watson, and is famously 
chronicled in Watson's book <i>The Double Helix</i>. Watson's book is a 
remarkably frank account of the way science is actually done. He recounts not 
just the brilliance and insight, but the politics, the competition, and the 
luck. The quest for the secret of DNA became a fierce competition between, 
among others, Watson and Crick's lab in Cambridge, and Pauling's lab at Cal 
Tech. </P>
+<P CLASS="Body">
+Watson describes with obvious unease the way in which Pauling came to know 
that Watson and Crick had solved the mystery, and created a model of DNA's 
helical structure. The story here centers on Max Delbruk, a mutual friend who 
traveled between Cambridge and Cal Tech. While sympathetic to Watson and 
Crick's desire to keep the discovery secret until all results could be 
confirmed, Delbruk's allegiance ultimately was to science itself. In this 
passage, Watson describes how he learned that Pauling had heard the news: </P>
+<blockquote class="quote">
+Linus Pauling first heard about the double helix from Max Delbruk. At the 
bottom of the letter that broke the news of the complementary chains, I had 
asked that he not tell Linus. I was still slightly afraid something would go 
wrong and did not want Pauling to think about hydrogen-bonded base pairs until 
we had a few more days to digest our position. My request, however, was 
ignored. Delbruk wanted to tell everyone in his lab and knew that within hours 
the gossip would travel from his lab in biology to their friends working under 
Linus. Also, Pauling made him promise to let him know the minute he heard from 
me. Then there was the even more important consideration that Delbruk hated any 
form of secrecy in scientific matters and did not want to keep Pauling in 
suspense any longer. </blockquote>
+<P CLASS="Body">
+Clearly the need for secrecy made Watson uncomfortable. One of the poignant 
themes that runs throughout the book is Watson's acknowledgment that 
competition kept parties from disclosing all they knew, and that the progress 
of science may have been delayed, if ever so slightly, by that secrecy. </P>
+<P CLASS="Body">
+Science, after all, is ultimately an Open Source enterprise. The scientific 
method rests on a process of discovery, and a process of justification. For 
scientific results to be justified, they must be replicable. Replication is not 
possible unless the source is shared: the hypothesis, the test conditions, and 
the results. The process of discovery can follow many paths, and at times 
scientific discoveries do occur in isolation. But ultimately the process of 
discovery must be served by sharing information: enabling other scientists to 
go forward where one cannot; pollinating the ideas of others so that something 
new may grow that otherwise would not have been born.</P>
+<H2 CLASS="HeadA">
+What Is Free Software and How Does It Relate to Open Source?</H2>
+<P CLASS="Body">
+In 1984, Richard Stallman, a researcher at the MIT AI Lab, started the GNU 
project. The GNU project's goal was, simply put, to make it so that no one 
would ever have to pay for software. Stallman launched the GNU project because 
essentially he feels that the knowledge that constitutes a running 
program--what the computer industry calls the source code--should be free. If 
it were not, Stallman reasons, a very few, very powerful people would dominate 
computing.</P>
+<P CLASS="Body">
+Where proprietary commercial software vendors saw an industry guarding trade 
secrets that must be tightly protected, Stallman saw scientific knowledge that 
must be shared and distributed. The basic tenet of the GNU project and the Free 
Software Foundation (the umbrella organization for the GNU project) is that 
source code is fundamental to the furthering of computer science and freely 
available source code is truly necessary for innovation to continue.</P>
+<P CLASS="Body">
+Stallman worried how the world would react to free software. Scientific 
knowledge is often in the public domain; it is one function of academic 
publishing to put it there. With software, however, it was clear that just 
letting the source code go into the public domain would tempt businesses to 
co-opt the code for their own profitability. Stallman's answer to this threat 
was the GNU General Public License, known as the GPL (see Appendix B). </P>
+<P CLASS="Body">
+The GPL basically says that you may copy and distribute the software licensed 
under the GPL at will, provided you do not inhibit others from doing the same, 
either by charging them for the software itself or by restricting them through 
further licensing. The GPL also requires works derived from work licensed under 
the GPL to be licensed under the GPL as well.</P>
+<P CLASS="Body">
+When Stallman and others in this book talk about free software, they are 
really talking about free speech. English handles the distinction here poorly, 
but it is the distinction between <EM CLASS="Emphasis">gratis</EM> and <EM 
CLASS="Emphasis">liberty</EM>, as in &quot;Free as in speech, not as in 
beer.&quot; This radical message (the freedom part, not the beer part) led many 
software companies to reject free software outright. After all, they are in the 
business of making money, not adding to our body of knowledge. For Stallman, 
this rift between the computer industry and computer science was acceptable, 
maybe even desirable.</P>
+<H2 CLASS="HeadA">
+What Is Open Source Software?</H2>
+<P CLASS="Body">
+In the spring of 1997, a group of leaders in the free software community 
assembled in California. This group included Eric Raymond, Tim O'Reilly, and VA 
Research president Larry Augustin, among others. Their concern was to find a 
way to promote the ideas surrounding free software to people who had formerly 
shunned the concept. They were concerned that the Free Software Foundation's 
anti-business message was keeping the world at large from really appreciating 
the power of free software.</P>
+<P CLASS="Body">
+At Eric Raymond's insistence, the group agreed that what they lacked in large 
part was a marketing campaign, a campaign devised to win mind share, and not 
just market share. Out of this discussion came a new term to describe the 
software they were promoting: Open Source. A series of guidelines were crafted 
to describe software that qualified as Open Source. </P>
+<P CLASS="Body">
+Bruce Perens had laid much of the groundwork for the Open Source Definition. 
One of the GNU project's state goals was to create a freely available operating 
system that could serve as the platform for running GNU software. In a classic 
case of software bootstrapping, Linux had become that platform, and Linux had 
been created with the help of GNU tools. Perens had headed the Debian project, 
which managed a distribution of Linux that included within the distribution 
only software that adhered to the spirit of GNU. Perens had laid this out 
explicitly in a document called the &quot;Debian Social Contract.&quot; The 
Open Source definition is a direct descendant of the &quot;Debian Social 
Contract,&quot; and thus Open Source is very much in the spirit of GNU.</P>
+<P CLASS="Body">
+The Open Source Definition allows greater liberties with licensing than the 
GPL does. In particular, the Open Source Definition allows greater promiscuity 
when mixing proprietary and open-source software.</P>
+<P CLASS="Body">
+Consequently, an Open Source license could conceivably allow the use and 
redistribution of open-source software without compensation or even credit. As 
an example you can take great swaths of the Netscape browser source code and 
distribute it with another, possibly proprietary, program without even 
notifying Netscape. Why would Netscape wish this? For a number of reasons, but 
the most compelling is that it gets greater market share for their client code, 
which works very well with their commercial offerings. In this way, giving away 
source code is a very good way to build a platform. This is also one of the 
reasons why the people at Netscape did not use the GPL.</P>
+<P CLASS="Body">
+This is not a small issue in the community. Late in 1998, there was an 
important dispute that threatened to fracture the Linux community. This 
fracture was caused by the advent of two software systems, GNOME and KDE, each 
of which aims to build an object-oriented desktop interface. On the one hand, 
KDE utilized Troll Technology's Qt library, a piece of code that was 
proprietary, but quite stable and mature. On the other hand, the GNOME people 
decided to use the GTK+ library, which was a completely free library, though 
not as mature as Qt.</P>
+<P CLASS="Body">
+In the past, Troll Technology would have had to choose between using the GPL 
and maintaining their proprietary stance. The rift between GNOME and KDE would 
have continued. With the advent of Open Source, however, Troll was able to 
change their license to one that met the Open Source definition, while still 
giving Troll the control over the technology they wanted. The rift between two 
important parts of the Linux community appears to be closing.</P>
+<H2 CLASS="HeadA">
+The Dark Side of the Force</H2>
+<P CLASS="Body">
+Though he may not have realized it at the time, Watson stood at the threshold 
of a new era in biological science. At the time of the discovery of the double 
helix, science in biology and chemistry was essentially a craft, a practical 
art. It was practiced by a few men working in small groups, primarily under the 
auspices of academic research. The seeds of change had already been planted, 
however. With the advent of several medical breakthroughs, notably the polio 
vaccine and the discovery of penicillin, biological science was about to become 
an industry. </P>
+<P CLASS="Body">
+Today organic chemistry, molecular biology, and basic medical research are not 
practiced as a craft by a small body of practitioners, but pursued as an 
industry. While research continues in academia, the vast majority of 
researchers, and the vast majority of research dollars, belong to the 
pharmaceutical industry. This alliance between science and industry is an 
uneasy one at best. While pharmaceutical companies can fund research at a level 
undreamed of in academic institutions, they also fund research with a vested 
interest. Consider: would a pharmaceutical company rather put major funding 
into research for a cure for an illness that is therapy-based or 
medication-based? </P>
+<P CLASS="Body">
+Computer science, too, must exist in an uneasy alliance with industry. Once 
new ideas came primarily from academic computer scientists; now the computer 
industry drives innovation forward. While the rank and file of Open Source 
programmers are still the many computer science undergrads and graduate 
students around the world, more and more Open Source programmers are working in 
industry rather than academic settings.</P>
+<P CLASS="Body">
+Industry has produced some marvelous innovations: Ethernet, the mouse, and the 
Graphical User Interface (GUI) all came out of Xerox PARC. But there is an 
ominous side to the computer industry as well. No one outside of Redmond really 
thinks that it is a good idea for Microsoft to dictate, to the extent they do, 
what a computer desktop should look like or have on it.</P>
+<P CLASS="Body">
+Industry can have a negative impact on innovation. The Graphical Image 
Manipulation Program (GIMP) languished incomplete for a year at beta release 
0.9. Its creators, two students at Berkeley, had left school to take jobs in 
industry, and left their innovation behind.</P>
+<H2 CLASS="HeadA">
+Use the Source, Luke</H2>
+<P CLASS="Body">
+Open Source was not an idea decreed from the top. The Open Source movement is 
a genuine grass roots revolution. While evangelists like Eric Raymond and Bruce 
Perens have had great success changing the language around free software, that 
change would have been impossible if the conditions were not right. We have 
reached the stage where an entire generation of students who learned computer 
science under the influence of GNU is now at work in industry, and have quietly 
been bringing free software in through the back doors of industry for years. 
They do so not from altruistic motives, but rather to bring better code to 
their work.</P>
+<P CLASS="Body">
+The revolutionaries are in place. They are the network engineers, system 
administrators, and programmers who have thrived on open-source software 
throughout their education, and want to use open-source software to thrive 
professionally as well. Free software has become a vital part of many 
companies, often unwittingly, but in some cases quite deliberately. Open Source 
has come of age: there is such a thing as an Open Source business model.</P>
+<P CLASS="Body">
+Bob Young's company, Red Hat Software, Inc., thrives on giving away its core 
product: Red Hat Linux. One good way to deliver free software is to package it 
as a full-featured distribution with a nice manual. Young is primarily selling 
convenience, as most do not want to have to bother with downloading all the 
pieces that make up a full-featured Linux system. </P>
+<P CLASS="Body">
+But he is not the only one doing this. So why does Red Hat dominate the U.S. 
market? Why does SuSE Linux dominate Europe? Open-source software is a 
commodity market. In any commodity market, customers value a brand they can 
trust. Red Hat's strength comes from brand management: consistent marketing and 
community outreach that makes the community recommend them when their friends 
ask them which distribution to use. The same is true for SuSE, and the two 
companies own their respective markets mostly because they were first to take 
brand management seriously.</P>
+<P CLASS="Body">
+Supporting the community is essential. Red Hat, SuSE, and other companies in 
the Linux space understand that to just make money off of Linux without giving 
anything back would cause two problems. First, people would consider such a 
company a freeloader and would recommend a competitor instead. Second, a 
company must be able to differentiate itself from competitors. Companies like 
CheapBytes and Linux Central merely provide low-cost distribution, selling CDs 
for as little as a dollar. For Red Hat to be perceived as offering greater 
value than these budget distributors, Red Hat must give something back. In a 
wonderful irony of the Open Source model, Red Hat can afford to charge $49.95 
for their distribution only because they support the development of new code 
and return that code to the community at large as Open Source.</P>
+<P CLASS="Body">
+This kind of brand management is new to Open Source, but an old-fashioned 
model of simply providing good service has been a part of the Open Source 
business model for a long time. Michael Tiemann helped found Cygnus on the idea 
that though the world's best compiler, GCC, was freely available, companies 
would still be willing to pay for support of and enhancements to that compiler. 
Co-founder John Gilmore's description of Cygnus is apt: &quot;Making free 
software affordable.&quot;</P>
+<P CLASS="Body">
+In fact this model of giving away the product and selling the support is 
proliferating rapidly in the Open Source world now. VA Research has been making 
and supporting high-quality Linux systems since late 1993. Penguin Computing 
offers similar products and services. LinuxCare does full, soup-to-nuts support 
for Linux in all of its flavors. Sendmail creator Eric Allmen has now created 
Sendmail Inc. to provide service and enhancements for the mail server software 
that holds about 80% of the market share. Sendmail is an interesting case 
because they have a two-tiered approach to the market. It has the proprietary 
Sendmail Pro, and the Free Software Sendmail, which is one year behind Sendmail 
Pro's development cycle.</P>
+<P CLASS="Body">
+Along those same lines, Paul Vixie, the president of Vixie Enterprises and a 
contributor to this book, enjoys a practical monopoly through his program BIND. 
This unassuming program is used every time you send an email or go to a web 
site or download a file via ftp. BIND is the program that handles the 
conversion of addresses like &quot;www.dibona.com&quot; to their actual IP 
address (in this case, 209.81.8.245). Vixie enjoys a thriving consultancy 
derived from his program's ubiquity.</P>
+<H2 CLASS="HeadA">
+Innovation Through the Scientific Method</H2>
+<P CLASS="Body">
+The most fascinating development in the Open Source movement today is not the 
success of companies like Red Hat or Sendmail Inc. What's intriguing is to see 
major corporations within the computer industry, companies like IBM and Oracle, 
turn their attention to Open Source as a business opportunity. What are they 
looking for in Open Source?</P>
+<P CLASS="Body">
+Innovation.</P>
+<P CLASS="Body">
+Science is ultimately an Open Source enterprise. The scientific method rests 
on a process of discovery, and a process of justification. For scientific 
results to be justified, they must be replicable. Replication is not possible 
unless the source is shared: the hypothesis, the test conditions, and the 
results. The process of discovery can follow many paths, and at times 
scientific discoveries do occur in isolation. But ultimately the process of 
discovery must be served by sharing information: enabling other scientists to 
go forward where one cannot; pollinating the ideas of others so that something 
new may grow that otherwise would not have been born. </P>
+<P CLASS="Body">
+Where scientists talk of replication, Open Source programmers talk of 
debugging. Where scientists talk of discovering, Open Source programmers talk 
of creating. Ultimately, the Open Source movement is an extension of the 
scientific method, because at the heart of the computer industry lies computer 
science. Consider the words of Grace Hopper, inventor of the compiler, who 
said, in the early 60s: </P>
+<blockquote class="quote">
+To me programming is more than an important practical art. It is also a 
gigantic undertaking in the foundations of knowledge. </blockquote>
+<P CLASS="Body">
+Computer science, though, differs fundamentally from all other sciences. 
Computer science has only one means of enabling peers to replicate results: 
share the source code. To demonstrate the validity of a program to someone, you 
must provide them with the means to compile and run the program. </P>
+<P CLASS="Body">
+Replication makes scientific results robust. One scientist cannot expect to 
account for all possible test conditions, nor necessarily have the test 
environment to fully test every aspect of a hypothesis. By sharing hypotheses 
and results with a community of peers, the scientist enables many eyes to see 
what one pair of eyes might miss. In the Open Source development model, this 
same principle is expressed as &quot;Given enough eyes, all bugs are 
shallow.&quot; By sharing source code, Open Source developers make software 
more robust. Programs get used and tested in a wider variety of contexts than 
one programmer could generate, and bugs get uncovered that otherwise would not 
be found. Because source code is provided, bugs can often be removed, not just 
discovered, by someone who otherwise would be outside the development process. 
</P>
+<P CLASS="Body">
+The open sharing of scientific results facilitates discovery. The scientific 
method minimizes duplication of effort because peers will know when they are 
working on similar projects. Progress does not stop simply because one 
scientists stops working on a project. If the results are worthy, other 
scientists will follow up. Similarly, in the Open Source development model, 
sharing source code facilitates creativity. Programmers working on 
complimentary projects can each leverage the results of the other, or combine 
resources into a single project. One project may spark the inspiration for 
another project that would not have been conceived without it. And worthy 
projects need not be orphaned when a programmer moves on. With the source code 
available, others can step in and take over the direction of a project. The 
GIMP sat idle for a year, but ultimately development did continue, and today 
the GIMP is pointed to with pride when Open Source developers consider what 
they can do in an area that is new territory for them: end-user 
applications.</P>
+<P CLASS="Body">
+Fortune 500 companies want to leverage off of this powerful model for 
innovation. IBM will happily charge a tidy sum to set up and administer the 
integration of Apache into MIS departments. This is a net win for IBM; they can 
install an exceptionally stable platform, which reduces the cost of supporting 
the platform, and really deliver service that can truly help their customers 
out. Just as important, IBM engineers share in the cross-pollination of ideas 
with other independent developers in the Apache Team.</P>
+<P CLASS="Body">
+This is precisely the reasoning behind Netscape's decision to make its browser 
Open Source. Part of the goal was to stabilize or increase market share. But 
more importantly, Netscape looked to the community of independent developers to 
drive innovation and help them build a superior product.</P>
+<P CLASS="Body">
+IBM was quick to see that tightly integrating software technologies like 
Apache into server platforms like the AS400 and the RS6000 line can only help 
in winning contracts and selling more IBM hardware. IBM is taking this to the 
next step and is porting their popular DB2 database to the Linux operating 
system. While many took this as being a response to Oracle releasing its Oracle 
8 line on Linux, IBM has taken its role in the community seriously and has 
dedicated resources to the open software cause. By porting Apache to the AS400 
platform, IBM has taken its most popular mainframe and legitimized the open 
technologies in ways only IBM can do. </P>
+<P CLASS="Body">
+It will be interesting to see what will happen in the competitive bids that 
companies like Coleman (of Thermo-electron), SAIC, BDM, and IBM make to the 
federal government and to industry. Consider the software cost of installing 
1,000 seats with NT or Solaris and compare them with installing 1,000 seats 
with Linux. When you can drop your bid price by over a quarter of a million 
dollars, you can compete more effectively for these sorts of bids. Companies 
like CSC, who have a reputation of commonly forgoing a percent or two of profit 
margin to get more contracts, are probably just trying to figure out how to 
leverage technologies like Linux. </P>
+<P CLASS="Body">
+While companies like IBM, Oracle, and Netscape have begun to integrate their 
business model with Open Source, many traditional software companies continue 
to focus on purely proprietary solutions. They do so at their peril. </P>
+<P CLASS="Body">
+In the web server space, Microsoft's complete denial of the Open Source 
phenomenon is almost amusing. The Apache web server has, at the time of 
writing, more than 50% of the web serving market according the Netcraft survey 
(<B CLASS="URL">
+http://www.netcraft.com/survey</B>). When you look at advertisements for 
Microsoft's Internet Information Server (IIS) you see them tout that they own 
over half the market in web serving--over half the commercial server market, 
that is. When compared against competitors like Netscape and Lotus, they have a 
substantial edge in the market share, but that &quot;edge&quot; looks puny in 
the overall server market where Microsoft's 20% is dwarfed by Apache's 53%.</P>
+<P CLASS="Body">
+The irony deepens, however. The fact is that 29% of the Web now runs on 
Linux-based servers, according the surveys conducted by the QUESO and WTF. 
QUESO is a tool that can determine the operating system a machine is running by 
sending TCP/IP packets to it and analyzing how the server responds to them. 
When run in conjunction with the likes of the Netcraft query engine, which 
analyzes the identification tags that the server responds with, it can produce 
a telling picture of the Web by OS and server type. </P>
+<P CLASS="Body">
+In fact, proprietary software vendors have already suffered a number of quiet 
casualties. Linux and Free BSD have really eliminated opportunities to 
successfully sell a proprietary Unix on PC hardware. One such company, 
Coherent, has already foundered. The Santa Cruz Operation (SCO) has gone from a 
leading Unix vendor to an afterthought in the span of a couple of years. SCO, 
the company, will probably find a way to survive, but will its flagship 
product, SCO Unix, be another casualty of Open Source? </P>
+<P CLASS="Body">
+Sun Microsystems has in many ways provided support for open-source development 
over the years, whether through donations of hardware and resources to help 
with the SPARC port of Linux, or through supporting development of John 
Ousterhout's Tcl scripting language. It's ironic, then, that the company that 
grew out of the joyous free software roots at Berkeley that Kirk McKusick 
describes so often struggles to grasp the significance of the Open Source 
phenomenon.</P>
+<P CLASS="Body">
+Let's take a moment to do some comparison and contrast with SCO and Sun.</P>
+<P CLASS="Body">
+Sun makes the majority of their money from supporting and servicing their OS 
and hardware. Sun's product line goes from a desktop workstation that is 
competitively priced with a PC to large enterprise class server-clusters that 
compete in the mainframe space. Their profits in the hardware realm do not come 
from their low-end Ultra series so much as they do from the service, sales, and 
support of their highly specialized and customized E and A series servers. It's 
estimated that Sun enjoys fully 50% of their profits from support, training, 
and consulting services. </P>
+<P CLASS="Body">
+SCO, on the other hand, makes money by selling the SCO Unix operating system, 
programs like compilers and servers, and training and education on the use of 
the SCO products. So while SCO has a nicely put together organization, it is in 
danger the same way that a farm with one crop can be vulnerable to a single 
blight destroying a harvest. </P>
+<P CLASS="Body">
+Sun sees the development of Linux as perhaps more concern for the lower end of 
their product offering. Sun's strategy is to make sure that Linux can run on 
the Sun hardware so people can choose to run Linux on Sun hardware. This is 
interesting because Sun can then continue to offer hardware support for their 
machines. In the future, we would not be surprised to see Sun offer software 
support for Linux on their lower-end machines. </P>
+<P CLASS="Body">
+In many ways, this is a short step for Sun. In fact, if you were to call a Sun 
administrator right now and ask him or her what's the first thing they do when 
they receive a new Sun box, they will tell you &quot;Download the GNU tools and 
compilers and install my favorite shells.&quot; Sun will perhaps finally get 
this message from their customer base and just do this for people as an 
outreach measure. However, Sun will operate at a disadvantage until they see 
the service their customer base can provide for them: innovation through 
cross-pollination of ideas based on source code release.</P>
+<P CLASS="Body">
+SCO, on the other hand, has a less flexible model. SCO's pricing model sells 
the OS first, with additional costs for tools that the Linux user takes for 
granted, such as compilers and text processing languages. This model simply 
can't be sustained in the face of competition from a robust free OS. Unlike 
Sun, which has added value in its broad hardware line, SCO has no hardware to 
tie profits to. Their OS is essentially all they have, and in SCO's case, 
that's not good enough. What will SCO do?</P>
+<P CLASS="Body">
+Their response so far has not been enlightened. In the beginning of 1998, SCO 
sent out a letter to its vast mailing list of users slamming open Unixes like 
Linux and FreeBSD as unstable and unprofessional while offering a reduced price 
on the SCO base OS. They were widely scorned for this move and had to do some 
serious backpedaling. The letter insulted a number of people by blatantly lying 
about the credentials of Linux. SCO didn't give their customers credit for 
being smart enough to see through the FUD. SCO eventually published a 
retraction on their web site. </P>
+<P CLASS="Body">
+In late 1998, SCO sent out a press release talking about how SCO Unix now has 
a Linux compatibility layer, so that your favorite Linux programs can be run 
under SCO Unix. The response was underwhelming. Why spend money on an OS just 
to make it compatible with a competitive free offering? </P>
+<P CLASS="Body">
+SCO is in a unique position to benefit from the Open Source movement. SCO has 
some very valuable intellectual property that they can leverage into a real 
position of power in the Open Source future. They must, however, make a leap of 
faith. Instead of seeing Open Source as a threat that would erode SCO's 
intellectual property, they need to see Open Source as an opportunity to bring 
innovation to that intellectual property.</P>
+<P CLASS="Body">
+Of course the maneuverings of a company like SCO or even Sun with respect to 
Open Source pale compared to the actions of Microsoft. So far Microsoft remains 
locked in its proprietary model, and seems determined to see that model through 
at least the release of Windows 2000.</P>
+<P CLASS="Body">
+Our guess is that Windows 2000 will ship in the latter part of 2000 or early 
2001 to great fanfare. This will be the great merging event of NT and 98 after 
all. Somewhere around this event, or six months before, there will be an 
announcement for a new Microsoft Windows operating system. Microsoft has always 
coveted the &quot;Lucrative Enterprise Market,&quot; a place where the machines 
serve a company's lifeblood of data. So far, however, there's no evidence that 
Microsoft can deliver a Windows NT system or Windows 2000 system with the 
greater stability this market requires. So this new system will be decreed as 
the coming solution.</P>
+<P CLASS="Body">
+Let's call the product that represents this phantom change &quot;Windows 
Enterprise&quot; or WEnt. Microsoft will look at NT and say, essentially, how 
can we make it more reliable and stable? OS theory, as Linus Torvalds points 
out in his essay, really hasn't changed much in the last 20 years, and so 
Microsoft engineering will essentially come back and say that a nice, 
tightly-written kernel without any pollution in the executive level of 
execution is the best way to accomplish reliability and speed. Thus to fix the 
major errors of the Windows NT kernels, namely the inclusion of ill tested or 
ill-chosen third party drivers and making the GUI part of the kernel, Microsoft 
will have to either write a monster slow emulation layer, or just break a ton 
of old applications. Microsoft is certainly capable of pursuing either course. 
But open-source programs may well have reached the maturity where corporations 
who are buying software will ask themselves if they trust Microsoft to give 
them what is already available under the guise of Linux, namely a stable 
kernel. </P>
+<P CLASS="Body">
+The answer will of course show itself with time. No one really knows if 
Microsoft can actually write solid stable software at this level. The 
&quot;Halloween Documents&quot; that Eric Raymond refers to suggest that even 
within Microsoft there are serious doubts. </P>
+<H2 CLASS="HeadA">
+Perils to Open Source</H2>
+<P CLASS="Body">
+Most software ventures, like most scientific enterprises, fail. As Bob Young 
points out, making successful open-source software is not so very different 
from making successful proprietary software. In both cases real success is 
rare, and the best innovators are those who learn from mistakes.</P>
+<P CLASS="Body">
+The rampant creativity that leads to innovation in both science and software 
comes at a cost. Maintaining control of an active Open Source project can be 
difficult. This fear of losing control prevents some individuals and many 
companies from active participation. Specifically, one concern when embarking 
or joining an open-source software project is that a large competitor or group 
of people will come in and create what is called a fork in the code base. Much 
like a fork in the road, a code base can at times diverge into two separate, 
incompatible, roads and never the twain shall meet. This is not an idle 
problem; look, for instance, at the multiple forks that the BSD-based operating 
systems have taken, leading to NetBSD, OpenBSD, FreeBSD, and many others. What 
is to keep this from happening to Linux? </P>
+<P CLASS="Body">
+One thing that keeps this happening is the open methods used in the 
development of the Linux kernel. Linus Torvalds, Alan Cox, and the rest run a 
tight ship and are the central authority for adding and accessing the kernel. 
The Linux kernel project has been called a benign dictatorship, with Linus as 
its dictator, and so far this model has produced a nicely written tight kernel 
without too much extraneous cruft in it. </P>
+<P CLASS="Body">
+What's ironic is that while Linux has experienced little actual forking, there 
exist large patches that convert the Linux kernel into a hard real-time kernel, 
suitable for tight critical device control, and additionally there exist 
versions of Linux that can run under dramatically weird architectures. These 
patches could be considered forks, as they are based on a set kernel and grow 
from there out, but because they occupy special niche application areas for 
Linux, they do not have a fracturing effect on the Linux community as a 
whole.</P>
+<P CLASS="Body">
+Think, by way of analogy, of a scientific theory applied on special cases. 
Most of the world gets along just fine using Newton's laws of motion for 
mechanical calculations. Only under special circumstances of large masses or 
high velocities must we make recourse to Einstein's theory of relativity. 
Einstein's theory could grow and extend without undermining the application of 
the older Newtonian theoretical base.</P>
+<P CLASS="Body">
+But competing software ventures often conflict just as competing scientific 
theories often conflict. Look at the history of Lucid. Lucid was a company 
formed to exploit and develop a streamlined version of the popular programmer's 
editor Emacs and sell it to the development community as a replacement for the 
original Emacs, written by Richard Stallman. Lucid's alternative was called 
Lucid Emacs and then Xemacs. When the Lucid team went to pitch the Xemacs 
solution to various companies, they found that they could not draw enough of a 
distinction in the results produced by Xemacs versus Emacs. Combined with the 
lackluster state of the computer market at the time, Lucid was short-lived. </P>
+<P CLASS="Body">
+Interestingly, Lucid did GPL its Xemacs code before it went out of business. 
Even this failed enterprise is a testament to the longevity of open-source 
software. As long as people find a use for the software, they will maintain it 
to work with new systems and architectures. Even now, Xemacs enjoys terrific 
popularity, and you can spark an interesting debate among Emacs hackers by 
asking them which Emacs they prefer. Xemacs, with very few people working on 
the program, is still a vital advancing product, changing, keeping up, and 
adapting to the new times and architectures.</P>
+<H2 CLASS="HeadA">
+Motivating the Open Source Hacker</H2>
+<P CLASS="Body">
+The Lucid experience shows that programmers often have loyalty to a project 
that goes beyond direct compensation for working on the project. Why do people 
write free software? Why do they give away freely what they could charge 
hundreds of dollars an hour for? What do they get out of it?</P>
+<P CLASS="Body">
+The motivation is not just altruism. The contributors here may not be loaded 
down with Microsoft stock options, but each has achieved a reputation that 
should assure him opportunities that pay the rent and feeds the kids. From the 
outside this can seem like a paradox; you can't eat free software after all. 
The answer lies, in part, in thinking beyond conventional notions of work and 
compensation. We are witnessing a new economic model take shape, not just a new 
culture.</P>
+<P CLASS="Body">
+Eric Raymond has become a kind of self-appointed participant anthropologist to 
the Open Source community, and in his writings he touches on the reasons why 
the people develop software only to give it away. </P>
+<P CLASS="Body">
+Keep in mind that these people have been, for the most part, coding for years, 
and don't see programming itself as burdensome, or as work. A very complex 
project like Apache or the Linux kernel brings the satisfaction of the ultimate 
in intellectual exercise. Much like the rush a runner feels while running a 
race, a true programmer will feel this same rush after writing a perfect 
routine or tight piece of code. It is difficult to describe the joy felt after 
completing or debugging a hideously tricky piece of recursive code that has 
been a source of trouble for days. </P>
+<P CLASS="Body">
+The point is that many programmers code because it is what they love to do, 
and in fact it is how they define their intellect. Without coding, a programmer 
feels less of a person, much like an athlete deprived of an opportunity to 
compete. Discipline can be a problem with programmers as much as with athletes; 
many programmers really don't enjoy maintaining a piece of code after having 
mastered it.</P>
+<P CLASS="Body">
+Still, other programmers don't take this &quot;macho&quot; view of their 
craft, and take a more scholarly view. Many programmers consider themselves, 
rightly, to be scientists. Scientists aren't supposed to hoard profits from 
their inventions, they are supposed to publish and share their inventions for 
all to benefit from. A scientist isn't supposed to let profits come at the 
expense of the pursuit of knowledge. </P>
+<P CLASS="Body">
+What all these introspections on programming have in common is an emphasis on 
reputation. Programming is a gift culture: the value of a programmer's work can 
only come from sharing it with others. That value is enhanced when the work is 
more widely shared, and that value is enhanced when the work is more completely 
shared by showing the source, not just the results from a pre-compiled 
binary.</P>
+<P CLASS="Body">
+Programming is also about empowerment, what Eric Raymond calls 
&quot;scratching an itch.&quot; Most Open Source projects began with 
frustration: looking for a tool to do a job and finding none, or finding one 
that was broken or poorly maintained. Eric Raymond began fetchmail this way; 
Larry Wall began Perl this way; Linus Torvalds began Linux this way. 
Empowerment, in many ways, is the most important concept underlying Stallman's 
motivation for starting the GNU project.</P>
+<H2 CLASS="HeadA">
+The Venture and Investment Future of Linux</H2>
+<P CLASS="Body">
+A hacker's motivations may be intellectual, but the result need not be a 
lifestyle of sacrifice. More and more, enterprises and individual Open Source 
programmers are coming together in a new spirit of pragmatism and 
opportunity.</P>
+<P CLASS="Body">
+In Silicon Valley, where we work and live, there is a history of investment 
and venture capital that powers the economy of the region. It can be traced 
back to the years when the transistor was first being exploited for commercial 
gain and the microprocessor became a force in the industry, replacing 
cumbersome logic boards with thousands of chips and individual transistors on 
them. </P>
+<P CLASS="Body">
+At any given time there is a hot technology that venture capital concentrates 
on. While they don't ignore other companies and opportunities, they realize 
that to achieve their benchmarks of economic performance, they don't just need 
successful companies, they need hot companies that can do an Initial Public 
Offering (IPO) within three years of investment or be sold for hundreds of 
millions to companies like Oracle or Cisco.</P>
+<P CLASS="Body">
+In 1998, the great wave of the Internet is ebbing; the rash of Internet IPOs 
that began with Netscape's spectacular debut has begun to decline. In a fitting 
act of symbolism, America Online's purchase of Netscape really does signal the 
end of an era. Internet stocks are now looked at more closely by the investment 
community, and generally Internet companies are held to the same standards as 
other companies: they must have some plausible expectation of profitability 
ahead. </P>
+<P CLASS="Body">
+So where will venture go? Our guess is that Linux and open-source software 
related companies are and will be the hot investment through the end of the 
millennium. With any luck, you will see a great rash of Linux and Open Source 
IPOs starting with Red Hat software in late 1999. The money out there to be 
invested is nothing less than staggering, and companies like Scriptics, 
Sendmail, and Vix.com are well poised to take advantage of the favorable market 
conditions and build their dream companies. </P>
+<P CLASS="Body">
+The question really is not whether venture capital funding will flow to Open 
Source, but why the flow has only begun to trickle in that direction. Keep in 
mind, free software is not new; Richard Stallman started the FSF in 1984 and 
was building on a tradition dating back long before that. Why did it take so 
long to catch on? </P>
+<P CLASS="Body">
+Taking a look at the computing landscape, you've got a situation where a very 
large company with very deep pockets controls the lion's share of the 
commercial market. In Silicon Valley, hopeful applications vendors looking for 
backing from the angel and venture capital community learn very quickly that if 
they position themselves against Microsoft, they will not get funded. Every 
startup either has to play Microsoft's game or not play at all.</P>
+<P CLASS="Body">
+This creatively oppressive environment is clearly where the original impetus 
for the rise of free software began to take root. Any programmer who has had to 
deal with creating programs for Microsoft's Windows operating systems will tell 
you that it is a daunting collection of cumbersome interfaces designed to serve 
the goal of making the program completely dependent on Microsoft libraries. The 
number of interfaces presented to the programmer from Microsoft serve the 
purpose of making any Windows native program very difficult to port to other 
operating systems. </P>
+<P CLASS="Body">
+The biggest arena that Microsoft has yet to dominate--the Internet--has no 
such restriction. As Scott Bradner describes, the Internet is built on a 
powerful collection of open standards maintained on the merit of individual 
participation, not the power of a corporate wallet. The Internet is, in many 
ways, the original Open Source venture. Keeping the Internet firmly based on 
open standards made it possible for a wide and diverse range of programmers to 
work on developing Internet applications. The Internet's spectacular growth is 
a testament to the power of this open standards model.</P>
+<P CLASS="Body">
+The structures inherent in the Internet's success are present in the Open 
Source movement as well. Linux distributors like Red Hat and SuSE compete, yes, 
but they compete based on open standards and shared code. Both use Red Hat 
Package Manager (RPM) as their package management tool, for example, rather 
than trying to lock developers in to individual package management systems. 
Debian uses a different package management tool, but because both Debian's and 
Red Hat's tools are open-source programs, compatibility between the two has 
been achieved.</P>
+<P CLASS="Body">
+So the infrastructure that made Internet technologies a tempting arena for 
venture capitalists is present in Open Source, and should make Open Source 
technologies equally tempting.</P>
+<P CLASS="Body">
+More importantly, though, the Internet has created a new infrastructure off of 
which Open Source can leverage. We are moving from the era of software 
enterprises to the era of infoware enterprises that Tim O'Reilly describes. To 
make this move, the barriers to entry and the costs of distribution had to be 
lowered dramatically. The Internet has lowered the bar.</P>
+<H2 CLASS="HeadA">
+Science and the New Renaissance</H2>
+<P CLASS="Body">
+The Open Source development model of today has its roots in the academic 
computer science of a decade or more ago. What makes Open Source dramatically 
more successful today, however, is the rapid dissemination of information made 
possible by the Internet. When Watson and Crick discovered the double helix, 
they could reasonably expect the information to travel from Cambridge to Cal 
Tech in a matter of days, or weeks at most. Today the transmission of such 
information is effectively instantaneous. Open Source has been born into a 
digital renaissance made possible by the Internet, just as modern science was 
made possible during the Renaissance by the invention of the printing press. 
</P>
+<P CLASS="Body">
+The Middle Ages lacked an affordable information infrastructure. Written works 
had to be copied by hand at great expense, and hence the information had to 
have an immediate value attached to it. Trade records, banking transactions, 
diplomatic correspondence; this information was concise enough and carried 
enough immediate value to be transmitted. The speculative writings of 
alchemists, priests, and philosophers--the men who would later be called 
scientists--took a much lower priority, and hence the information was 
disseminated much more slowly. The printing press changed all this by 
dramatically lowering the barriers to entry in the information infrastructure. 
Scholars who had previously worked in isolation could, for the first time, 
establish a sense of community with other scholars all over Europe. But this 
exercise in community building required an absolute commitment to the open 
sharing of information. </P>
+<P CLASS="Body">
+What was born out of this community was the notion of academic freedom, and 
ultimately the process we now call the Scientific Method. None of this would 
have been possible without the need to form community, and the open sharing of 
information has, for centuries, been the cement that has held the scientific 
community together. </P>
+<P CLASS="Body">
+Imagine for a moment if Newton had withheld his laws of motion, and instead 
gone into business as a defense contractor to artillerists following the 30 
Years War. &quot;No, I won't tell you how I know about parabolic trajectories, 
but I'll calibrate your guns for a fee.&quot; The very idea, of course, sounds 
absurd. Not only did science not evolve this way, but it could not have evolved 
this way. If that had been the mindset of those scientifically inclined, their 
very secrecy would have kept science from developing and evolving at all. </P>
+<P CLASS="Body">
+The Internet is the printing press of the digital age. Once again, the 
barriers to entry for the information infrastructure have been dramatically 
lowered. No longer does source code need to be distributed on paper tape as 
with the original version of Unix, or floppy disks, as in the early days of 
DOS, or even on CD-ROM. Any ftp or web server can now serve as a distribution 
point that is cheap and effectively instantaneous. </P>
+<P CLASS="Body">
+While this renaissance holds great promise, we must not forget the centuries 
old scientific heritage on which the Open Source development model is based. 
Computer science and the computer industry do exist in an uneasy alliance 
today. There is pressure from industry giants like Microsoft to keep new 
developments proprietary for the sake of short-term financial gain. But as more 
and more of the development work in computer science has its origins in 
industry rather than academia, industry must take care to nourish computer 
science through the open sharing of ideas--namely, the Open Source development 
model. The computer industry must do this not out of any altruistic motives to 
serve a greater cause, but for the most basic pragmatic reasons: enlightened 
self-interest. </P>
+<P CLASS="Body">
+First of all, it would be shortsighted of those in the computer industry to 
believe that monetary reward is the primary concern of Open Source's best 
programmers. To involve these people in industry, their priorities must be 
respected. These people are involved in a reputation game, and history has 
shown that scientific success outlives financial success. We remember a few of 
the great industrialists of the last hundred years: Carnegie, Rockefeller. We 
remember a great many more of the scientists and inventors from the last 
hundred years: Einstein, Edison . . . Pauling. When the history of this time is 
written a hundred years from now, people will perhaps remember the name of Bill 
Gates, but few other computer industrialists. They are much more likely to 
remember names like Richard Stallman and Linus Torvalds. </P>
+<P CLASS="Body">
+Second, and more important, industry needs the innovation science can provide. 
Open Source can develop and debug new software with the speed and creativity of 
science. The computer industry needs the next generation of ideas that will 
come from Open Source development. </P>
+<P CLASS="Body">
+Consider the example of Linux once again. Linux is a project that was 
conceived some five years after Microsoft began development of Windows NT. 
Microsoft has spent tens of thousands of man-hours and millions of dollars on 
the development of Windows NT. Yet today Linux is considered a competitive 
alternative to NT as a PC-based server system, an alternative that major 
middleware and backend software is being ported to by Oracle, IBM, and other 
major providers of enterprise software. The Open Source development model has 
produced a piece of software that would otherwise require the might and 
resources of someone like Microsoft to create. </P>
+<P CLASS="Body">
+To sustain the digital renaissance we need Open Source development. Open 
Source development drives progress not just in computer science, but in the 
computer industry as well.</P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="raymond.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/kirkmck.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/kirkmck.html
diff -N Proyectos/Mecagtk/OpenSource/kirkmck.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/kirkmck.html   3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,272 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Marshall Kirk McKusick">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Twenty Years of Berkeley Unix</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Twenty Years of Berkeley Unix</H1>
+<H2 CLASS="ChapterSubtitle" align="right">From AT&amp;T-Owned to Freely 
Redistributable </H2>
+<H4 CLASS="ChapterAuthor" align="right">Marshall Kirk McKusick</H4>
+<H2 CLASS="HeadA">
+Early History </H2>
+<P CLASS="Body">
+Ken Thompson and Dennis Ritchie presented the first Unix paper at the 
Symposium on Operating Systems Principles at Purdue University in November 
1973. Professor Bob Fabry, of the University of California at Berkeley, was in 
attendance and immediately became interested in obtaining a copy of the system 
to experiment with at Berkeley. </P>
+<P CLASS="Body">
+At the time, Berkeley had only large mainframe computer systems doing batch 
processing, so the first order of business was to get a PDP-11/45 suitable for 
running with the then-current Version 4 of Unix. The Computer Science 
Department at Berkeley, together with the Mathematics Department and the 
Statistics Department, were able to jointly purchase a PDP-11/45. In January 
1974, a Version 4 tape was delivered and Unix was installed by graduate student 
Keith Standiford. </P>
+<P CLASS="Body">
+Although Ken Thompson at Purdue was not involved in the installation at 
Berkeley as he had been for most systems up to that time, his expertise was 
soon needed to determine the cause of several strange system crashes. Because 
Berkeley had only a 300-baud acoustic-coupled modem without auto answer 
capability, Thompson would call Standiford in the machine room and have him 
insert the phone into the modem; in this way Thompson was able to remotely 
debug crash dumps from New Jersey. </P>
+<P CLASS="Body">
+Many of the crashes were caused by the disk controller's inability to reliably 
do overlapped seeks, contrary to the documentation. Berkeley's 11/45 was among 
the first systems that Thompson had encountered that had two disks on the same 
controller! Thompson's remote debugging was the first example of the 
cooperation that sprang up between Berkeley and Bell Labs. The willingness of 
the researchers at the Labs to share their work with Berkeley was instrumental 
in the rapid improvement of the software available at Berkeley. </P>
+<P CLASS="Body">
+Though Unix was soon reliably up and running, the coalition of Computer 
Science, Mathematics, and Statistics began to run into problems; Math and 
Statistics wanted to run DEC's RSTS system. After much debate, a compromise was 
reached in which each department would get an eight-hour shift; Unix would run 
for eight hours followed by sixteen hours of RSTS. To promote fairness, the 
time slices were rotated each day. Thus, Unix ran 8 a.m. to 4 p.m. one day, 4 
p.m. to midnight the next day, and midnight to 8 a.m. the third day. Despite 
the bizarre schedule, students taking the Operating Systems course preferred to 
do their projects on Unix rather than on the batch machine. </P>
+<P CLASS="Body">
+Professors Eugene Wong and Michael Stonebraker were both stymied by the 
confinements of the batch environment, so their INGRES database project was 
among the first groups to move from the batch machines to the interactive 
environment provided by Unix. They quickly found the shortage of machine time 
and the odd hours on the 11/45 intolerable, so in the spring of 1974, they 
purchased an 11/40 running the newly available Version 5. With their first 
distribution of INGRES in the fall of 1974, the INGRES project became the first 
group in the Computer Science department to distribute their software. Several 
hundred INGRES tapes were shipped over the next six years, helping to establish 
Berkeley's reputation for designing and building real systems. </P>
+<P CLASS="Body">
+Even with the departure of the INGRES project from the 11/45, there was still 
insufficient time available for the remaining students. To alleviate the 
shortage, Professors Michael Stonebraker and Bob Fabry set out in June 1974, to 
get two instructional 11/45's for the Computer Science department's own use. 
Early in 1975, the money was obtained. At nearly the same time, DEC announced 
the 11/70, a machine that appeared to be much superior to the 11/45. Money for 
the two 11/45s was pooled to buy a single 11/70 that arrived in the fall of 
1975. Coincident with the arrival of the 11/70, Ken Thompson decided to take a 
one-year sabbatical as a visiting professor at the University of California at 
Berkeley, his alma mater. Thompson, together with Jeff Schriebman and Bob 
Kridle, brought up the latest Unix, Version 6, on the newly installed 11/70. 
</P>
+<P CLASS="Body">
+Also arriving in the fall of 1975 were two unnoticed graduate students, Bill 
Joy and Chuck Haley; they both took an immediate interest in the new system. 
Initially they began working on a Pascal system that Thompson had hacked 
together while hanging around the 11/70 machine room. They expanded and 
improved the Pascal interpreter to the point that it became the programming 
system of choice for students because of its excellent error recovery scheme 
and fast compile and execute time. </P>
+<P CLASS="Body">
+With the replacement of Model 33 teletypes by ADM-3 screen terminals, Joy and 
Haley began to feel stymied by the constraints of the <EM 
CLASS="Emphasis">ed</EM> editor. Working from an editor named <EM 
CLASS="Emphasis">em</EM> that they had obtained from Professor George Coulouris 
at Queen Mary's College in London, they worked to produce the line-at-a-time 
editor <EM CLASS="Emphasis">ex</EM>. </P>
+<P CLASS="Body">
+With Ken Thompson's departure at the end of the summer of 1976, Joy and Haley 
begin to take an interest in exploring the internals of the Unix kernel. Under 
Schriebman's watchful eye, they first installed the fixes and improvements 
provided on the &quot;fifty changes&quot; tape from Bell Labs. Having learned 
to maneuver through the source code, they suggested several small enhancements 
to streamline certain kernel bottlenecks. </P>
+<H2 CLASS="HeadA">
+Early Distributions </H2>
+<P CLASS="Body">
+Meanwhile, interest in the error recovery work in the Pascal compiler brought 
in requests for copies of the system. Early in 1977, Joy put together the 
&quot;Berkeley Software Distribution.&quot; This first distribution included 
the Pascal system, and, in an obscure subdirectory of the Pascal source, the 
editor <EM CLASS="Emphasis">ex</EM>. Over the next year, Joy, acting in the 
capacity of distribution secretary, sent out about thirty free copies of the 
system. </P>
+<P CLASS="Body">
+With the arrival of some ADM-3a terminals offering screen-addressable cursors, 
Joy was finally able to write <EM CLASS="Emphasis">vi</EM>, bringing 
screen-based editing to Berkeley. He soon found himself in a quandary. As is 
frequently the case in universities strapped for money, old equipment is never 
replaced all at once. Rather than support code for optimizing the updating of 
several different terminals, he decided to consolidate the screen management by 
using a small interpreter to redraw the screen. This interpreter was driven by 
a description of the terminal characteristics, an effort that eventually became 
<EM CLASS="Emphasis">termcap</EM>. </P>
+<P CLASS="Body">
+By mid-1978, the software distribution clearly needed to be updated. The 
Pascal system had been made markedly more robust through feedback from its 
expanding user community, and had been split into two passes so that it could 
be run on PDP-11/34s. The result of the update was the &quot;Second Berkeley 
Software Distribution,&quot; a name that was quickly shortened to 2BSD. Along 
with the enhanced Pascal system, <EM CLASS="Emphasis">vi</EM> and <EM 
CLASS="Emphasis">termcap</EM> for several terminals was included. Once again 
Bill Joy single-handedly put together distributions, answered the phone, and 
incorporated user feedback into the system. Over the next year nearly 
seventy-five tapes were shipped. Though Joy moved on to other projects the 
following year, the 2BSD distribution continued to expand. The final version of 
this distribution, 2.11BSD, is a complete system used on hundreds of PDP-11's 
still running in various corners of the world. </P>
+<H2 CLASS="HeadA">
+VAX Unix </H2>
+<P CLASS="Body">
+Early in 1978, Professor Richard Fateman began looking for a machine with a 
larger address space on which he could continue his work on Macsyma (originally 
started on a PDP-10). The newly announced VAX-11/780 fulfilled the requirements 
and was available within budget. Fateman and thirteen other faculty members put 
together an NSF proposal that they combined with some departmental funds to 
purchase a VAX. </P>
+<P CLASS="Body">
+Initially the VAX ran DEC's operating system VMS, but the department had 
gotten used to the Unix environment and wanted to continue using it. So, 
shortly after the arrival of the VAX, Fateman obtained a copy of the 32/V port 
of Unix to the VAX by John Reiser and Tom London of Bell Labs. </P>
+<P CLASS="Body">
+Although 32/V provided a Version 7 Unix environment on the VAX, it did not 
take advantage of the virtual memory capability of the VAX hardware. Like its 
predecessors on the PDP-11, it was entirely a swap-based system. For the 
Macsyma group at Berkeley, the lack of virtual memory meant that the process 
address space was limited by the size of the physical memory, initially 1 
megabyte on the new VAX. </P>
+<P CLASS="Body">
+To alleviate this problem, Fateman approached Professor Domenico Ferrari, a 
member of the systems faculty at Berkeley, to investigate the possibility of 
having his group write a virtual memory system for Unix. Ozalp Babaoglu, one of 
Ferrari's students, set about to find some way of implementing a working set 
paging system on the VAX; his task was complicated because the VAX lacked 
reference bits. </P>
+<P CLASS="Body">
+As Babaoglu neared the completion of his first cut at an implementation, he 
approached Bill Joy for some help in understanding the intricacies of the Unix 
kernel. Intrigued by Babaoglu's approach, Joy joined in helping to integrate 
the code into 32/V and then with the ensuing debugging. </P>
+<P CLASS="Body">
+Unfortunately, Berkeley had only a single VAX for both system development and 
general production use. Thus, for several weeks over the Christmas break, the 
tolerant user community alternately found themselves logging into 32/V and 
&quot;Virtual VAX/Unix.&quot; Often their work on the latter system would come 
to an abrupt halt, followed several minutes later by a 32/V login prompt. By 
January, 1979, most of the bugs had been worked out, and 32/V had been 
relegated to history. </P>
+<P CLASS="Body">
+Joy saw that the 32-bit VAX would soon make the 16-bit PDP-11 obsolete, and 
began to port the 2BSD software to the VAX. While Peter Kessler and I ported 
the Pascal system, Joy ported the editors <EM CLASS="Emphasis">ex</EM> and <EM 
CLASS="Emphasis">vi</EM>, the C shell, and the myriad other smaller programs 
from the 2BSD distribution. By the end of 1979, a complete distribution had 
been put together. This distribution included the virtual memory kernel, the 
standard 32/V utilities, and the additions from 2BSD. In December, 1979, Joy 
shipped the first of nearly a hundred copies of 3BSD, the first VAX 
distribution from Berkeley. </P>
+<P CLASS="Body">
+The final release from Bell Laboratories was 32/V; thereafter all Unix 
releases from AT&amp;T, initially System III and later System V, were managed 
by a different group that emphasized stable commercial releases. With the 
commercialization of Unix, the researchers at Bell Laboratories were no longer 
able to act as a clearing-house for the ongoing Unix research. As the research 
community continued to modify the Unix system, it found that it needed an 
organization that could produce research releases. Because of its early 
involvement in Unix and its history of releasing Unix-based tools, Berkeley 
quickly stepped into the role previously provided by the Labs. </P>
+<H2 CLASS="HeadA">
+DARPA Support</H2>
+<P CLASS="Body">
+Meanwhile, in the offices of the planners for the Defense Advanced Research 
Projects Agency (DARPA), discussions were being held that would have a major 
influence on the work at Berkeley. One of DARPA's early successes had been to 
set up a nationwide computer network to link together all their major research 
centers. At that time, they were finding that many of the computers at these 
centers were reaching the end of their useful lifetime and had to be replaced. 
The heaviest cost of replacement was the porting of the research software to 
the new machines. In addition, many sites were unable to share their software 
because of the diversity of hardware and operating systems. </P>
+<P CLASS="Body">
+Choosing a single hardware vendor was impractical because of the widely 
varying computing needs of the research groups and the undesirability of 
depending on a single manufacturer. Thus, the planners at DARPA decided that 
the best solution was to unify at the operating systems level. After much 
discussion, Unix was chosen as a standard because of its proven portability. 
</P>
+<P CLASS="Body">
+In the fall of 1979, Bob Fabry responded to DARPA's interest in moving towards 
Unix by writing a proposal suggesting that Berkeley develop an enhanced version 
of 3BSD for the use of the DARPA community. Fabry took a copy of his proposal 
to a meeting of DARPA image processing and VLSI contractors, plus 
representatives from Bolt, Beranek, and Newman, the developers of the ARPAnet. 
There was some reservation whether Berkeley could produce a working system; 
however, the release of 3BSD in December 1979 assuaged most of the doubts. </P>
+<P CLASS="Body">
+With the increasingly good reputation of the 3BSD release to validate his 
claims, Bob Fabry was able to get an 18-month contract with DARPA beginning in 
April 1980. This contract was to add features needed by the DARPA contractors. 
Under the auspices of this contract, Bob Fabry sets up an organization which 
was christened the Computer Systems Research Group, or CSRG for short. He 
immediately hired Laura Tong to handle the project administration. Fabry turned 
his attention to finding a project leader to manage the software development. 
Fabry assumed that since Joy had just passed his Ph.D. qualifying examination, 
he would rather concentrate on completing his degree than take the software 
development position. But Joy had other plans. One night in early March he 
phoned Fabry at home to express interest in taking charge of the further 
development of Unix. Though surprised by the offer, Fabry took little time to 
agree. </P>
+<P CLASS="Body">
+The project started promptly. Tong set up a distribution system that could 
handle a higher volume of orders than Joy's previous distributions. Fabry 
managed to coordinate with Bob Guffy at AT&amp;T and lawyers at the University 
of California to formally release Unix under terms agreeable to all. Joy 
incorporated Jim Kulp's job control, and added auto reboot, a 1K block file 
system, and support for the latest VAX machine, the VAX-11/750. By October 
1980, a polished distribution that also included the Pascal compiler, the Franz 
Lisp system, and an enhanced mail handling system was released as 4BSD. During 
its nine-month lifetime, nearly 150 copies were shipped. The license 
arrangement was on a per-institution basis rather than a per machine basis; 
thus the distribution ran on about 500 machines. </P>
+<P CLASS="Body">
+With the increasingly wide distribution and visibility of Berkeley Unix, 
several critics began to emerge. David Kashtan at Stanford Research Institute 
wrote a paper describing the results of benchmarks he had run on both VMS and 
Berkeley Unix. These benchmarks showed severe performance problems with the 
Unix system for the VAX. Setting his future plans aside for several months, Joy 
systematically began tuning up the kernel. Within weeks he had a rebuttal paper 
written showing that Kashtan's benchmarks could be made to run as well on Unix 
as they could on VMS. </P>
+<P CLASS="Body">
+Rather than continue shipping 4BSD, the tuned-up system, with the addition of 
Robert Elz's auto configuration code, was released as 4.1BSD in June, 1981. 
Over its two- year lifetime about 400 distributions were shipped. The original 
intent had been to call it the 5BSD release; however, there were objections 
from AT&amp;T that there would be customer confusion between their commercial 
Unix release, System V, and a Berkeley release named 5BSD. So, to resolve the 
issue, Berkeley agreed to change the naming scheme for future releases to stay 
at 4BSD and just increment the minor number.</P>
+<H2 CLASS="HeadA">
+4.2BSD</H2>
+<P CLASS="Body">
+With the release of 4.1BSD, much of the furor over performance died down. 
DARPA was sufficiently satisfied with the results of the first contract that a 
new two-year contract was granted to Berkeley with funding almost five times 
that of the original. Half of the money went to the Unix project, the rest to 
other researchers in the Computer Science department. The contract called for 
major work to be done on the system so the DARPA research community could 
better do their work. </P>
+<P CLASS="Body">
+Based on the needs of the DARPA community, goals were set and work begun to 
define the modifications to the system. In particular, the new system was 
expected to include a faster file system that would raise throughput to the 
speed of available disk technology, support processes with multi-gigabyte 
address space requirements, provide flexible interprocess communication 
facilities that allow researchers to do work in distributed systems, and would 
integrate networking support so that machines running the new system could 
easily participate in the ARPAnet. </P>
+<P CLASS="Body">
+To assist in defining the new system, Duane Adams, Berkeley's contract monitor 
at DARPA, formed a group known as the &quot;steering committee&quot; to help 
guide the design work and ensure that the research community's needs were 
addressed. This committee met twice a year between April 1981 and June 1983. It 
included Bob Fabry, Bill Joy, and Sam Leffler of the University of California 
at Berkeley; Alan Nemeth and Rob Gurwitz of Bolt, Beranek, and Newman; Dennis 
Ritchie of Bell Laboratories; Keith Lantz of Stanford University; Rick Rashid 
of Carnegie-Mellon University; Bert Halstead of the Massachusetts Institute of 
Technology; Dan Lynch of The Information Sciences Institute; Duane Adams and 
Bob Baker of DARPA; and Jerry Popek of the University of California at Los 
Angeles. Beginning in 1984, these meetings were supplanted by workshops that 
were expanded to include many more people. </P>
+<P CLASS="Body">
+An initial document proposing facilities to be included in the new system was 
circulated to the steering committee and other people outside Berkeley in July, 
1981, sparking many lengthy debates. In the summer of 1981, I became involved 
with the CSRG and took on the implementation of the new file system. During the 
summer, Joy concentrated on implementing a prototype version of the 
interprocess communication facilities. In the fall of 1981, Sam Leffler joined 
the CSRG as a full-time staff member to work with Bill Joy. </P>
+<P CLASS="Body">
+When Rob Gurwitz released an early implementation of the TCP/IP protocols to 
Berkeley, Joy integrated it into the system and tuned its performance. During 
this work, it became clear to Joy and Leffler that the new system would need to 
provide support for more than just the DARPA standard network protocols. Thus, 
they redesigned the internal structuring of the software, refining the 
interfaces so that multiple network protocols could be used simultaneously. </P>
+<P CLASS="Body">
+With the internal restructuring completed and the TCP/IP protocols integrated 
with the prototype IPC facilities, several simple applications were created to 
provide local users access to remote resources. These programs, <CODE 
CLASS="Literal">rcp</CODE>, <CODE CLASS="Literal">rsh</CODE>, <CODE 
CLASS="Literal">rlogin</CODE>, and <CODE CLASS="Literal">rwho</CODE> were 
intended to be temporary tools that would eventually be replaced by more 
reasonable facilities (hence the use of the distinguishing &quot;r&quot;<B 
CLASS="EmphasisBold">
+ </B>prefix). This system, called 4.1a, was first distributed in April 1982 
for local use; it was never intended that it would have wide circulation, 
though bootleg copies of the system proliferated as sites grew impatient 
waiting for the 4.2 release. </P>
+<P CLASS="Body">
+The 4.1a system was obsolete long before it was complete. However, feedback 
from its users provided valuable information that was used to create a revised 
proposal for the new system called the &quot;4.2BSD System Manual.&quot; This 
document was circulated in February 1982 and contained a concise description of 
the proposed user interfaces to the system facilities that were to be 
implemented in 4.2BSD. </P>
+<P CLASS="Body">
+Concurrent with the 4.1a development, I completed the implementation of the 
new file system, and by June 1982, had fully integrated it into the 4.1a 
kernel. The resulting system was called 4.1b and ran on only a few select 
development machines at Berkeley. Joy felt that with significant impending 
changes to the system, it was best to avoid even a local distribution, 
particularly since it required every machine's file systems to be dumped and 
restored to convert from 4.1a to 4.1b. Once the file system proved to be 
stable, Leffler proceeded to add the new file system related system calls, 
while Joy worked on revising the interprocess communication facilities. </P>
+<P CLASS="Body">
+In the late spring of 1982, Joy announced he was joining Sun Microsystems. 
Over the summer, he split his time between Sun and Berkeley, spending most of 
his time polishing his revisions to the interprocess communication facilities 
and reorganizing the Unix kernel sources to isolate machine dependencies. With 
Joy's departure, Leffler took over responsibility for completing the project. 
Certain deadlines had already been established and the release had been 
promised to the DARPA community for the spring of 1983. Given the time 
constraints, the work remaining to complete the release was evaluated and 
priorities were set. In particular, the virtual memory enhancements and the 
most sophisticated parts of the interprocess communication design were 
relegated to low priority (and later shelved completely). Also, with the 
implementation more than a year old and the Unix community's expectations 
heightened, it was decided an intermediate release should be put together to 
hold people until the final system could be completed. This system, called 
4.1c, was distributed in April 1983; many vendors used this release to prepare 
for ports of 4.2 to their hardware. Pauline Schwartz was hired to take over the 
distribution duties starting with the 4.1c release. </P>
+<P CLASS="Body">
+In June 1983, Bob Fabry turned over administrative control of the CSRG to 
Professors Domenico Ferrari and Susan Graham to begin a sabbatical free from 
the frantic pace of the previous four years. Leffler continued the completion 
of the system, implementing the new signal facilities, adding to the networking 
support, redoing the standalone I/O system to simplify the installation 
process, integrating the disc quota facilities from Robert Elz, updating all 
the documentation, and tracking the bugs from the 4.1c release. In August 1983, 
the system was released as 4.2BSD. </P>
+<P CLASS="Body">
+When Leffler left Berkeley for Lucasfilm following the completion of 4.2, he 
was replaced by Mike Karels. Karels' previous experience with the 2.9BSD PDP-11 
software distribution provided an ideal background for his new job. After 
completing my Ph.D. in December 1984, I joined Mike Karels full-time at the 
CSRG. </P>
+<P CLASS="Body">
+The popularity of 4.2BSD was impressive; within eighteen months more than 
1,000 site licenses had been issued. Thus, more copies of 4.2BSD had been 
shipped than of all the previous Berkeley software distributions combined. Most 
of the Unix vendors shipped a 4.2BSD system rather than the commercial System V 
from AT&amp;T. The reason was that System V had neither networking nor the 
Berkley Fast filesystem. The BSD release of Unix only held its dominant 
commercial position for a few years before returning to its roots. As 
networking and other 4.2BSD improvements were integrated into the system V 
release, the vendors usually switched back to it. However, later BSD 
developments continued to be incorporated into System V.</P>
+<H2 CLASS="HeadA">
+4.3BSD</H2>
+<P CLASS="Body">
+As with the 4.1BSD release, criticism was quick in coming. Most of the 
complaints were that the system ran too slowly. The problem, not surprisingly, 
was that the new facilities had not been tuned and that many of the kernel data 
structures were not well-suited to their new uses. Karels' and my first year on 
the project was spent tuning and polishing the system. </P>
+<P CLASS="Body">
+After two years of work spent tuning the system and refining the networking 
code, we made an announcement at the June 1985 Usenix conference that we 
anticipated releasing 4.3BSD later that summer. However, our release plans were 
brought to an abrupt halt by the folks at BBN. They correctly pointed out that 
we had never updated 4.2BSD with the final version of their networking code. 
Rather, we were still using the much-hacked initial prototype that they had 
given us many years earlier. They complained to DARPA that Berkeley was to 
implement the interface while BBN was supposed to implement the protocol, so 
Berkeley should replace the TCP/IP code in 4.3BSD with the BBN implementation. 
</P>
+<P CLASS="Body">
+Mike Karels got the BBN code and did an evaluation of the work that had been 
done since the prototype that was handed off to Berkeley. He decided that the 
best plan was to incorporate the good ideas from the BBN code into the Berkeley 
code base, but not to replace the Berkeley code base. The reason to retain the 
Berkeley code base was that it had gotten considerable testing and improvements 
from the widespread distribution in 4.2BSD. However, as a compromise, he 
offered to include both implementations on the 4.3BSD distribution and let 
users select which one to use in their kernel. </P>
+<P CLASS="Body">
+After reviewing Mike Karels' decision, DARPA decided that releasing two code 
bases would lead to unnecessary interoperability problems, and that just one 
implementation should be released. To decide which code base to use, they gave 
both to Mike Muuse of the Ballistics Research Laboratory, who was viewed by 
both Berkeley and BBN as an independent third party. After a month of 
evaluation, the report came back that the Berkeley code was more efficient but 
that the BBN code handled congestion better. The tie breaker was that the 
Berkeley code flawlessly ran all the tests while the BBN code panicked under 
some stress conditions. The final decision by DARPA was that 4.3BSD would stick 
with the Berkeley code base. </P>
+<P CLASS="Body">
+The polished 4.3BSD system was finally released in June 1986. As expected, it 
quelled many of the performance complaints, much as the 4.1BSD release quelled 
many of the complaints about 4BSD. Although most of the vendors had started the 
switch back to System V, large parts of 4.3BSD were carried over into their 
systems, particularly the networking subsystem. </P>
+<P CLASS="Body">
+In October 1986, Keith Bostic joined the CSRG. One condition of his employment 
was that he be allowed to finish up a project that he had been working on at 
his previous job, which was to port 4.3BSD to the PDP-11. While both Karels and 
I believed that it would be impossible to get a system that compiled to 250 
Kbytes on the VAX to fit in the 64-Kbyte address space of the PDP-11, we agreed 
that Bostic could finish up his attempts to do so. Much to our amazement, the 
port was done successfully, using an intricate set of overlays and auxiliary 
processor states found on the PDP-11. The result was the 2.11BSD release, done 
by Casey Leedom and Bostic, which is still in use on some of the last remaining 
PDP-11's still in production in 1998. </P>
+<P CLASS="Body">
+Meanwhile, it was becoming increasingly obvious that the VAX architecture was 
reaching the end of its life and that it was time to begin considering other 
machines for running BSD. A promising new architecture of the time was made by 
Computer Consoles, Incorporated, and was called the Power 6/32. Unfortunately, 
the architecture died when the company decided to change its strategic 
direction. However, they did provide the CSRG with several machines that 
enabled us to finish the work, started by Bill Joy, of splitting the BSD kernel 
into machine-dependent and machine-independent parts. The result of this work 
was released as 4.3BSD-Tahoe in June 1988. The name Tahoe came from the 
development name used by Computer Consoles, Incorporated, for the machine that 
they eventually released as the Power 6/32. Although the useful lifetime of the 
Power 6/32 machine support was short, the work done to split the kernel into 
machine-independent and machine-dependent parts proved to be extremely valuable 
as BSD was ported to numerous other architectures. </P>
+<H2 CLASS="HeadA">
+Networking, Release 1</H2>
+<P CLASS="Body">
+Up through the release of 4.3BSD-Tahoe, all recipients of BSD had to first get 
an AT&amp;T source license. That was because the BSD systems were never 
released by Berkeley in a binary-only format; the distributions always 
contained the complete source to every part of the system. The history of the 
Unix system and the BSD system in particular had shown the power of making the 
source available to the users. Instead of passively using the system, they 
actively worked to fix bugs, improve performance and functionality, and even 
add completely new features. </P>
+<P CLASS="Body">
+With the increasing cost of the AT&amp;T source licenses, vendors that wanted 
to build standalone TCP/IP-based networking products for the PC market using 
the BSD code found the per-binary costs prohibitive. So, they requested that 
Berkeley break out the networking code and utilities and provide them under 
licensing terms that did not require an AT&amp;T source license. The TCP/IP 
networking code clearly did not exist in 32/V and thus had been developed 
entirely by Berkeley and its contributors. The BSD originated networking code 
and supporting utilities were released in June 1989 as Networking Release 1, 
the first freely-redistributable code from Berkeley. </P>
+<P CLASS="Body">
+The licensing terms were liberal. A licensee could release the code modified 
or unmodified in source or binary form with no accounting or royalties to 
Berkeley. The only requirements were that the copyright notices in the source 
file be left intact and that products that incorporated the code indicate in 
their documentation that the product contained code from the University of 
California and its contributors. Although Berkeley charged a $1,000 fee to get 
a tape, anyone was free to get a copy from anyone who already had received it. 
Indeed, several large sites put it up for anonymous ftp shortly after it was 
released. Given that it was so easily available, the CSRG was pleased that 
several hundred organizations purchased copies, since their fees helped fund 
further development. </P>
+<H2 CLASS="HeadA">
+4.3BSD-Reno</H2>
+<P CLASS="Body">
+Meanwhile, development continued on the base system. The virtual memory system 
whose interface was first described in the 4.2BSD architecture document finally 
came to fruition. As was often the case with the CSRG, we always tried to find 
existing code to integrate rather than write something from scratch. So, rather 
than design a new virtual memory system, we looked around for existing 
alternatives. Our first choice was the virtual memory system that appeared in 
Sun Microsystem's SunOS. Although there was some discussion about Sun 
contributing the code to Berkeley, nothing came of those talks. So we went with 
our second choice, which was to incorporate the virtual memory system from the 
MACH operating system done at Carnegie-Mellon University. Mike Hibler at the 
University of Utah merged the core technology from MACH with the user interface 
described by the 4.2BSD architecture manual (which was also the interface used 
by SunOS).</P>
+<P CLASS="Body">
+The other major addition to the system at the time was a Sun-compatible 
version of the Network Filesystem (NFS). Again the CSRG was able to avoid 
writing the actual NFS code, instead getting an implementation done by Rick 
Macklem at the University of Geulph in Canada. </P>
+<P CLASS="Body">
+Although we did not yet have the complete feature set of 4.4BSD ready to ship, 
the CSRG decided to do an interim release to get additional feedback and 
experiences on the two major new additions to the system. This licensed interim 
release was called 4.3BSD-Reno and occurred in early 1990. The release was 
named after a big gambling city in Nevada as an oblique reminder to its 
recipients that running the interim release was a bit of a gamble. </P>
+<H2 CLASS="HeadA">
+Networking, Release 2</H2>
+<P CLASS="Body">
+During one of our weekly group meetings at the CSRG, Keith Bostic brought up 
the subject of the popularity of the freely-redistributable networking release 
and inquired about the possibility of doing an expanded release that included 
more of the BSD code. Mike Karels and I pointed out to Bostic that releasing 
large parts of the system was a huge task, but we agreed that if he could sort 
out how to deal with reimplementing the hundreds of utilities and the massive C 
library then we would tackle the kernel. Privately, Karels and I felt that 
would be the end of the discussion. </P>
+<P CLASS="Body">
+Undeterred, Bostic pioneered the technique of doing a mass net-based 
development effort. He solicited folks to rewrite the Unix utilities from 
scratch based solely on their published descriptions. Their only compensation 
would be to have their name listed among the Berkeley contributors next to the 
name of the utility that they rewrote. The contributions started slowly and 
were mostly for the trivial utilities. But as the list of completed utilities 
grew and Bostic continued to hold forth for contributions at public events such 
as Usenix, the rate of contributions continued to grow. Soon the list crossed 
one hundred utilities and within 18 months nearly all the important utilities 
and libraries had been rewritten. </P>
+<P CLASS="Body">
+Proudly, Bostic marched into Mike Karels' and my office, list in hand, wanting 
to know how we were doing on the kernel. Resigned to our task, Karels, Bostic, 
and I spent the next several months going over the entire distribution, file by 
file, removing code that had originated in the 32/V release. When the dust 
settled, we discovered that there were only six remaining kernel files that 
were still contaminated and which could not be trivially rewritten. While we 
considered rewriting those six files so that we could release a complete 
system, we decided instead to release just what we had. We did, however, seek 
permission for our expanded release from folks higher up in the University 
administration. After much internal debate and verification of our method for 
determining proprietary code, we were given the go-ahead to do the release. </P>
+<P CLASS="Body">
+Our initial thought was to come up with a whole new name for our second 
freely-redistributable release. However, we viewed getting a whole new license 
written and approved by the University lawyers as an unnecessary waste of 
resources and time delay. So, we decided to call the new release Networking 
Release 2 since we could just do a revision of the approved Networking Release 
1 license agreement. Thus, our second greatly expanded freely-redistributable 
release began shipping in June 1991. The redistribution terms and cost were the 
same as the terms and cost of the first networking release. As before, several 
hundred individuals and organizations paid the $1,000 fee to get the 
distribution from Berkeley. </P>
+<P CLASS="Body">
+Closing the gap from the Networking Release 2 distribution to a fully 
functioning system did not take long. Within six months of the release, Bill 
Jolitz had written replacements for the six missing files. He promptly released 
a fully compiled and bootable system for the 386-based PC architecture which he 
called 386/BSD. Jolitz's 386/BSD distribution was done almost entirely on the 
Net. He simply put it up for anonymous FTP and let anyone who wanted it 
download it for free. Within weeks he had a huge following. </P>
+<P CLASS="Body">
+Unfortunately, the demands of keeping a full-time job meant that Jolitz could 
not devote the time needed to keep up with the flood of incoming bug fixes and 
enhancements to 386/BSD. So, within a few months of the release of 386/BSD, a 
group of avid 386/BSD users formed the NetBSD group to pool their collective 
resources to help maintain and later enhance the system. Their releases became 
known as the NetBSD distribution. The NetBSD group chose to emphasize the 
support of as many platforms as possible and continued the research style 
development done by the CSRG. Until 1998, their distribution was done solely 
over the Net; no distribution media was available. Their group continues to 
target primarily the hardcore technical users. More information about the 
NetBSD project can be found at <EM CLASS="Emphasis">http://www.netbsd.org.</EM> 
</P>
+<P CLASS="Body">
+The FreeBSD group was formed a few months after the NetBSD group with a 
charter to support just the PC architecture and to go after a larger and less 
technically advanced group of users, much as Linux had done. They built 
elaborate installation scripts and began shipping their system on a low cost 
CD-ROM. The combination of ease of installation and heavy promotion on the Net 
and at major trade shows such as Comdex led to a fast, large growth curve. 
Certainly FreeBSD currently has the largest installed base of all the Release 
2-derived systems. </P>
+<P CLASS="Body">
+FreeBSD has also ridden the wave of Linux popularity by adding a Linux 
emulation mode that allows Linux binaries to run on the FreeBSD platform. This 
feature allows FreeBSD users to use the ever-growing set of applications 
available for Linux while getting the robustness, reliability, and performance 
of the FreeBSD system. The group recently opened a FreeBSD Mall (<EM 
CLASS="Emphasis">http://www.freebsdmall.com</EM>), which brings together many 
parts of the FreeBSD community, including consulting services, derived 
products, books, and a newsletter. </P>
+<P CLASS="Body">
+In the mid-1990s, OpenBSD spun off from the NetBSD group. Their technical 
focus was aimed at improving the security of the system. Their marketing focus 
was to make the system easier to use and more widely available. Thus, they 
began producing and selling CD-ROMs with many of the ease-of-installation ideas 
from the FreeBSD distribution. More information about the OpenBSD project can 
be found at <EM CLASS="Emphasis">http://www.openbsd.org. </EM></P>
+<H2 CLASS="HeadA">
+The Lawsuit </H2>
+<P CLASS="Body">
+In addition to the groups organized to freely redistribute systems built 
around the Networking Release 2 tape, a company, Berkeley Software Design, 
Incorporated (BSDI), was formed to develop and distribute a commercially 
supported version of the code. (More information about BSDI can be found at <EM 
CLASS="Emphasis">http://www.bsdi.com</EM>.) Like the other groups, they started 
by adding the six missing files that Bill Jolitz had written for his 386/BSD 
release. BSDI began selling their system including both source and binaries in 
January 1992 for $995. They began running advertisements touting their 99% 
discount over the price charged for System V source plus binary systems. 
Interested readers were told to call 1-800-ITS-Unix. </P>
+<P CLASS="Body">
+Shortly after BSDI began their sales campaign, they received a letter from 
Unix System Laboratories (USL) (a mostly-owned subsidiary of AT&amp;T spun off 
to develop and sell Unix). The letter demanded that they stop promoting their 
product as Unix and in particular that they stop using the deceptive phone 
number. Although the phone number was promptly dropped and the advertisements 
changed to explain that the product was not Unix, USL was still unhappy and 
filed suit to enjoin BSDI from selling their product. The suit alleged that the 
BSDI product contained proprietary USL code and trade secrets. USL sought to 
get an injunction to halt BSDI's sales until the lawsuit was resolved, claiming 
that they would suffer irreparable harm from the loss of their trade secrets if 
the BSDI distributions continued. </P>
+<P CLASS="Body">
+At the preliminary hearing for the injunction, BSDI contended that they were 
simply using the sources being freely distributed by the University of 
California plus six additional files. They were willing to discuss the content 
of any of the six added files, but did not believe that they should be held 
responsible for the files being distributed by the University of California. 
The judge agreed with BSDI's argument and told USL that they would have to 
restate their complaint based solely on the six files or he would dismiss it. 
Recognizing that they would have a hard time making a case from just the six 
files, USL decided to refile the suit against both BSDI and the University of 
California. As before, USL requested an injunction on the shipping of 
Networking Release 2 from the University and on the BSDI products. </P>
+<P CLASS="Body">
+With the impending injunction hearing just a few short weeks away, preparation 
began in earnest. All the members of the CSRG were deposed as were nearly 
everyone employed at BSDI. Briefs, counter-briefs, and counter-counter-briefs 
flew back and forth between the lawyers. Keith Bostic and I personally had to 
write several hundred pages of material that found its way into various briefs. 
</P>
+<P CLASS="Body">
+In December 1992, Dickinson R. Debevoise, a United States District Judge in 
New Jersey, heard the arguments for the injunction. Although judges usually 
rule on injunction requests immediately, he decided to take it under 
advisement. On a Friday about six weeks later, he issued a forty-page opinion 
in which he denied the injunction and threw out all but two of the complaints. 
The remaining two complaints were narrowed to recent copyrights and the 
possibility of the loss of trade secrets. He also suggested that the matter 
should be heard in a state court system before being heard in the federal court 
system. </P>
+<P CLASS="Body">
+The University of California took the hint and rushed into California state 
court the following Monday morning with a counter-suit against USL. By filing 
first in California, the University had established the locale of any further 
state court action. Constitutional law requires all state filing to be done in 
a single state to prevent a litigant with deep pockets from bleeding an 
opponent dry by filing fifty cases against them in every state. The result was 
that if USL wanted to take any action against the University in state courts, 
they would be forced to do so in California rather than in their home state of 
New Jersey. </P>
+<P CLASS="Body">
+The University's suit claimed that USL had failed in their obligation to 
provide due credit to the University for the use of BSD code in System V as 
required by the license that they had signed with the University. If the claim 
were found to be valid, the University asked that USL be forced to reprint all 
their documentation with the appropriate due credit added, to notify all their 
licensees of their oversight, and to run full-page advertisements in major 
publications such as <EM CLASS="Emphasis">The Wall Street Journal</EM> and <EM 
CLASS="Emphasis">Fortune</EM> magazine notifying the business world of their 
inadvertent oversight. </P>
+<P CLASS="Body">
+Soon after the filing in state court, USL was bought from AT&amp;T by Novell. 
The CEO of Novell, Ray Noorda, stated publicly that he would rather compete in 
the marketplace than in court. By the summer of 1993, settlement talks had 
started. Unfortunately, the two sides had dug in so deep that the talks proceed 
slowly. With some further prodding by Ray Noorda on the USL side, many of the 
sticking points were removed and a settlement was finally reached in January 
1994. The result was that three files were removed from the 18,000 that made up 
Networking Release 2, and a number of minor changes were made to other files. 
In addition, the University agreed to add USL copyrights to about 70 files, 
although those files continued to be freely redistributed. </P>
+<H2 CLASS="HeadA">
+4.4BSD</H2>
+<P CLASS="Body">
+The newly blessed release was called 4.4BSD-Lite and was released in June 1994 
under terms identical to those used for the Networking releases. Specifically, 
the terms allow free redistribution in source and binary form subject only to 
the constraint that the University copyrights remain intact and that the 
University receive credit when others use the code. Simultaneously, the 
complete system was released as 4.4BSD-Encumbered, which still required 
recipients to have a USL source license. </P>
+<P CLASS="Body">
+The lawsuit settlement also stipulated that USL would not sue any organization 
using 4.4BSD-Lite as the base for their system. So, all the BSD groups that 
were doing releases at that time, BSDI, NetBSD, and FreeBSD, had to restart 
their code base with the 4.4BSD-Lite sources into which they then merged their 
enhancements and improvements. While this reintegration caused a short-term 
delay in the development of the various BSD systems, it was a blessing in 
disguise since it forced all the divergent groups to resynchronize with the 
three years of development that had occurred at the CSRG since the release of 
Networking Release 2. </P>
+<H2 CLASS="HeadA">
+4.4BSD-Lite, Release 2</H2>
+<P CLASS="Body">
+The money received from the 4.4BSD-Encumbered and 4.4BSD-Lite releases was 
used to fund a part-time effort to integrate bug fixes and enhancements. These 
changes continued for two years until the rate of bug reports and feature 
enhancements had died down to a trickle. The final set of changes was released 
as 4.4BSD-Lite, Release 2 in June 1995. Most of these changes eventually made 
it into the other systems source bases. </P>
+<P CLASS="Body">
+Following the release of 4.4BSD-Lite Release 2, the CSRG was disbanded. After 
nearly twenty years of piloting the BSD ship, we felt that it was time to let 
others with fresh ideas and boundless enthusiasm take over. While it might seem 
best to have a single centralized authority overseeing the system development, 
the idea of having several groups with different charters ensures that many 
different approaches will be tried. Because the system is released in source 
form, the best ideas can easily be picked up by other groups. If one group 
becomes particularly effective, they may eventually become the dominant system. 
</P>
+<P CLASS="Body">
+Today, the open source software movement is gaining increased attention and 
respect. Although the Linux system is perhaps the most well-known, about half 
of the utilities that it comes packaged with are drawn from the BSD 
distribution. The Linux distributions are also heavily dependent on the 
complier, debuggers, and other development tools written by the Free Software 
Foundation. Collectively, the CSRG, the Free Software Foundation, and the Linux 
kernel developers have created the platform from which the Open Source software 
movement has been launched. I am proud to have had the opportunity to help 
pioneer the Open Source software movement. I look forward to the day when it 
becomes the preferred way to develop and buy software for users and companies 
everywhere. </P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="ietf.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/larry.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/larry.html
diff -N Proyectos/Mecagtk/OpenSource/larry.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/larry.html     3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,501 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Larry Wall">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Diligence, Patience, and Humility</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Diligence, Patience, and Humility</H1>
+<H4 CLASS="ChapterAuthor" align="right">Larry Wall</H4>
+<P CLASS="BodyStart">
+We have a fondness for sayings in the Perl community. One of them is 
&quot;There's more than one way to do it.&quot; This is true in Perl. It's also 
true of Perl. And it's true of the Open Source community, as the essays in this 
volume illustrate. I won't tell you everything about how Open Source works; 
that would be like trying to explain why English works. But I can say something 
about the state of Perl, and where it's going.</P>
+<P CLASS="Body">
+Here's another saying: Three great virtues of programming are laziness, 
impatience, and hubris. Great Perl programmers embrace those virtues. So do 
Open Source developers. But here I'm going to talk about some other virtues: 
diligence, patience, and humility. If you think these sound like the opposite, 
you're right. If you think a single community can't embrace opposing values, 
then you should spend more time with Perl. After all, there's more than one way 
to do it.</P>
+<P CLASS="Body">
+Written languages probably began with impatience. Or laziness. Without written 
language, you had to meet another person face to face to communicate with them, 
or you had to persuade another person to convey your message for you. And there 
was no way to know what had previously been said except to remember it. But 
written language gave people symbols, symbols that could stand for things--if 
the community could agree on what the symbols stood for. So language requires 
consensus. It's something a group can agree on. It is, in short, a symbol that 
ties a community together. Most symbols work that way.</P>
+<P CLASS="Body">
+So let's look at some symbols:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.01.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Study it carefully. It's called a circle. It's a very nice circle, as circles 
go. Very pretty. Very symmetrical. Very simple.</P>
+<P CLASS="Body">
+Now if you're a reductionist, you'll say it's only a circle, and nothing more. 
Well, actually, if you're really a reductionist, you'll say it's a just bunch 
of photons, but we won't go there, because it wouldn't shed any light on the 
subject.</P>
+<P CLASS="Body">
+If you're not a reductionist, then the circle you see here does not exist in 
isolation. It exists in relationship to many other things, and in fact takes 
its meaning from them. In order to understand this simple circle, you have to 
understand its context, which means you have to understand something about 
reality.</P>
+<P CLASS="Body">
+So here's a picture of reality:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.02.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+As we all know, reality is a mess.</P>
+<P CLASS="Body">
+This is a picture of many things. It's a picture of air molecules bouncing 
around. It's a picture of the economy. It's a picture of all the relationships 
of the people in this room. It's a picture of what the typical human language 
looks like. It's a picture of your company's information systems. It's a 
picture of the World Wide Web. It's a picture of chaos, and of complexity.</P>
+<P CLASS="Body">
+It's certainly a picture of how Perl is organized, since Perl is modeled on 
human languages. And the reason human languages are complex is because they 
have to deal with reality.</P>
+<P CLASS="Body">
+We all have to deal with reality one way or another. So we simplify. Often we 
oversimplify.</P>
+<P CLASS="Body">
+Our ancestors oversimplified. They fooled themselves into thinking that God 
only created circles and spheres. They thought God would always prefer 
simplicity over complexity. When they discovered that reality was more 
complicated than they thought, they just swept the complexity under a carpet of 
epicycles. That is, they created unnecessary complexity. This is an important 
point. The universe is complex, but it's usefully complex.</P>
+<P CLASS="Body">
+Evidence abounds that people continue to oversimplify today. Some people 
prefer to oversimplify their cosmology. Others prefer to oversimplify their 
theology. Many computer language designers oversimplify their languages, and 
end up sweeping the universe's complexity under the carpet of the 
programmer.</P>
+<P CLASS="Body">
+It's a natural human trait to look for patterns in the noise, but when we look 
for those patterns, sometimes we see patterns that aren't really there. But 
that doesn't mean there aren't real patterns. If we can find a magic wand to 
suppress the noise, then the signal pops right out. Abracadabra . . . Here is 
the shape of the big bang, and of stars, and of soap bubbles:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.03.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Here is the shape of dimensionality, of salt crystals, and the spaces between 
tree trunks:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.04.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Here is the shape of an anthill, or a Christmas tree. Or the shape of a 
trinity:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.05.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+And, of course, once you know the patterns are there, you can pick out the 
simple figures without the extra chromatic help:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.06.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Our brains are built to do that.</P>
+<P CLASS="Body">
+Now, you may be wondering what all this has to do with Perl. The fact is, your 
brain is built to do Perl programming. You have a deep desire to turn the 
complex into the simple, and Perl is just another tool to help you do 
that--just as I am using English right now to try to simplify reality. I can 
use English for that because English is a mess.</P>
+<P CLASS="Body">
+This is important, and a little hard to understand. English is useful because 
it's a mess. Since English is a mess, it maps well onto the problem space, 
which is also a mess, which we call reality. Similarly, Perl was designed to be 
a mess (though in the nicest of possible ways).</P>
+<P CLASS="Body">
+This is counterintuitive, so let me explain. If you've been educated as any 
kind of an engineer, it has been pounded into your skull that great engineering 
is simple engineering. We are taught to admire suspension bridges more than 
railroad trestles. We are taught to value simplicity and beauty. That's nice. I 
like circles too.</P>
+<P CLASS="Body">
+However, complexity is not always the enemy. What's important is not 
simplicity or complexity, but how you bridge the two.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.07.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+You need a certain amount of complexity to do any particular job. A Saturn V 
rocket is said to have had seven million parts, all of which had to work. But 
that's not entirely true. Many of those parts were redundant. But that 
redundancy was absolutely necessary to achieve the goal of putting someone on 
the moon in 1969. So if some of those rocket parts had the job of being 
redundant, then each of those parts still had to do their part. So to speak. 
They also serve who only stand and wait.</P>
+<P CLASS="Body">
+We betray ourselves when we say &quot;That's redundant,&quot; meaning 
&quot;That's useless.&quot; Redundancy is not always &quot;redundant,&quot; 
whether you're talking about rockets or human languages or computer languages. 
In short, simplicity is often the enemy of success.</P>
+<P CLASS="Body">
+Suppose I want to take over the world. Simplicity says I should just take over 
the world by myself. But the reality of the situation is that I need your help 
to take over the world, and you're all very complex. I actually consider that a 
feature. Your relationships are even more complex. I usually think of those as 
features. But sometimes they're bugs. We can debug relationships, but it's 
always good policy to consider the people themselves to be features. People get 
annoyed when you try to debug them.</P>
+<P CLASS="Body">
+We mentioned that some complexity is useless, and some is useful. Here's 
another example of useful complexity:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.08.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Now, most of you sitting here are probably prejudiced in favor of western 
writing systems, and so you think an ideographic writing system is needlessly 
complex. You may even be thinking that this picture is as complicated as the 
previous one. But again, it's a kind of engineering tradeoff. In this case, the 
Chinese have traded learnability for portability. Does that sound familiar?</P>
+<P CLASS="Body">
+Chinese is not, in fact, a single language. It's about five major languages, 
any of which are mutually unintelligible. And yet, you can write Chinese in one 
language and read it in another. That's what I call a portable language. By 
choosing a higher level of abstraction, the Chinese writing system optimizes 
for communication rather than for simplicity. There are a billion people in 
China who can't all talk to each other, but at least they can pass notes to 
each other.</P>
+<P CLASS="Body">
+Computers also like to pass notes to each other. Only we call it 
networking.</P>
+<P CLASS="Body">
+A lot of my thinking this year has been influenced by working with Unicode and 
with XML. Ten years ago, Perl was good at text processing. It's even better at 
it now, for the old definition of text. But the definition of &quot;text&quot; 
has been changing out from under Perl over those ten years.</P>
+<P CLASS="Body">
+You can blame it all on the Internet.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.09.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+It seems that when you click buttons on your browser, it makes computers want 
to pass notes to each other. And they want to pass these notes over cultural 
boundaries. Just as you want to understand what pops up on your screen, your 
computer wants to understand what it's about to pop up on your screen, because, 
believe it or not, the computer would actually like to do it right. Computers 
may be stupid, but they're always obedient. Well, almost always.</P>
+<P CLASS="Body">
+That's where Unicode and XML come in. Unicode is just a set of universal 
ideographs so that the world's computers can pass notes around to each other, 
and have some chance of doing the right thing with them. Some of the ideographs 
in Unicode happen to match up with various national character sets such as 
ASCII, but nobody in the world will ever learn all of those languages. Nobody 
is expecting you to learn all those languages. That's not the point.</P>
+<P CLASS="Body">
+Here's the point. Last month I was working on my church's web page. Our church 
has just started a Chinese congregation, so it now has two names, one of which 
can be represented in ASCII, and one of which cannot. Here's what the page 
looks like:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.10.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+If your browser is fairly recent, and if you have a Unicode font loaded, then 
this is what you see. There's something important I want you to notice here.</P>
+<P CLASS="Body">
+If I'd done this a year ago, this block of Chinese characters would probably 
have been a GIF image. But there's a problem with images. You can't cut and 
paste characters from a GIF image. I've tried it often enough to know, and I'm 
sure you have too. If I'd done this a year ago, I'd also have had to add 
another layer of complexity to the page. I'd need something like a CGI script 
to detect whether the browser supports Unicode, because if it doesn't, these 
characters splatter garbage all over the page. Garbage is usually construed as 
useless complexity.</P>
+<P CLASS="Body">
+Anyway, back to simplicity:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.11.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+We use circles to represent many things. Our circle of friends. A hug, when 
written on the back of an envelope. The circle of a wedding ring, which stands 
for unending love.</P>
+<P CLASS="Body">
+Proceeding from the sublime to the ridiculous, we also have the round file, 
which is a kind of hell for dead paperwork.</P>
+<P CLASS="Body">
+Spheres of light. Black holes. Or at least their event horizons.</P>
+<P CLASS="Body">
+One ring to rule them all, and in the darkness bind them.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.12.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Crystal balls. Pearls.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.14.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Onions. Pearl onions.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.14.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Circles figure heavily in our symbology. And in particular, by adding various 
appurtenances to circles, we sometimes represent some rather complicated 
notions with simple symbols. These symbols are the bridges between simplicity 
and complexity.</P>
+<P CLASS="Body">
+Here's a real Zen diagram:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.15.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Well, actually, it's not. In fact, the yinyang comes from the Tao, or Dao if 
you can't pronounce an unaspirated &quot;t&quot;. The Tao is an ancient 
oriental philosophy, and predates Zen by more than a millennium.</P>
+<P CLASS="Body">
+Anyway, back to yins and yangs.</P>
+<P CLASS="Body">
+The yinyang represents a dualistic philosophy, much like The Force in <EM 
CLASS="Emphasis">Star Wars</EM>. You know, how is The Force like duct tape? 
Answer: it has a light side, a dark side, and it holds the universe together. 
I'm not a dualist myself, because I believe the light is stronger than the 
darkness. Nevertheless, the concept of balanced forces is useful at times, 
especially to engineers. When an engineer wants to balance forces, and wants 
them to stay balanced, he reaches for the duct tape.</P>
+<P CLASS="Body">
+When I made this yinyang, I wondered whether I was doing it right. It'd be a 
shame to get it backwards, or sideways, or something.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.16.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Well, you know, sometimes that sort of thing matters. It matters a lot to 
organic chemists, who call it chirality--if you take a molecule of spearmint 
flavor and flip it left for right, you end up with a molecule of caraway 
flavor. Yuck. I used to think I hated rye bread, till I discovered it was the 
caraway seeds they put in that I didn't like.</P>
+<P CLASS="Body">
+Now, which of those flavors you prefer is just a matter of taste, but doctors 
and organic chemists will tell you that there are times when chirality is a 
matter of life and death. Or of deformed limbs, in the case of Thalidomide. It 
was the &quot;wrong&quot; kind of Thalidomide that actually caused the 
problems. Dyslexics will tell you that chirality matters a lot in visual 
symbols. This talk is brought to you by the letters &quot;b&quot; and 
&quot;d&quot;. And &quot;p&quot; and &quot;q&quot;. And the number 6. Not to 
mention the number 9. You can see a 6 and a 9 in the yinyang, in this 
orientation.</P>
+<P CLASS="Body">
+In short, I wondered whether the yinyang is like a swastika, where which way 
you make it determines who gets mad at you.</P>
+<P CLASS="Body">
+So I did some research, on the Web, of course. The fact is, the Web is the 
perfect example of TMTOWTDI--there's more than one way to do it. In this case, 
there's every way to do it. You can find the yinyang in every possible 
orientation. I still don't know whether any of them is more right than the 
others.</P>
+<P CLASS="Body">
+A TYEDYE WORLD is some folks on the Web who sell tie-dyed tee shirts. I guess 
they'd be Tao-dyed in this case. They think it looks like this:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.17.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+I suppose if you want it the other way you just put the shirt on inside-out. 
Putting it on upside-down is going to get you stared at.</P>
+<P CLASS="Body">
+The folks at the Unicode consortium think it looks like this. I don't know if 
they're right, but if they're not, it doesn't matter. They published it this 
way, and now it's right by definition.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.18.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Of course, my dictionary has it upside from that:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.19.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Well, back to Unicode. Unicode is full of circles. Many national scripts 
within Unicode make use of the circle, and in most of those, it represents the 
digit 0. Here is Unicode number 3007 (hex). It's the ideographic symbol for 
0:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.20.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Surprise, surprise. It looks like our 0. Chalk one up for cultural 
imperialism. In English, of course, we tend to squish our 0 sideways to 
distinguish it from the letter O.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.21.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+In Bengali, they squish it the other way, but for similar reasons:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.22.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+I find it interesting that the world has so many different representations for 
nothing. One could make endless jokes on it: Much ado about nothing, or Nothing 
can stop an idea whose time has come. Here's something related to nothing:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.23.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+This is the universal &quot;prohibited&quot; symbol. In Unicode, it's 
classified as a combining character.</P>
+<P CLASS="Body">
+Of course, in Perl culture, almost nothing is prohibited. My feeling is that 
the rest of the world already has plenty of perfectly good prohibitions, so why 
invent more? That applies not just to programming, but also to interpersonal 
relationships, by the way. I have upon more than one occasion been requested to 
eject someone from the Perl community, generally for being offensive in some 
fashion or other. So far I have consistently refused. I believe this is the 
right policy. At least, it's worked so far, on a practical level. Either the 
offensive person has left eventually of their own accord, or they've settled 
down and learned to deal with others more constructively. It's odd. People 
understand instinctively that the best way for computer programs to communicate 
with each other is for each of the them to be strict in what they emit, and 
liberal in what they accept. The odd thing is that people themselves are not 
willing to be strict in how they speak and liberal in how they listen. You'd 
think that would also be obvious. Instead, we're taught to express 
ourselves.</P>
+<P CLASS="Body">
+On the other hand, we try to encourage certain virtues in the Perl community. 
As the apostle Paul points out, nobody makes laws against love, joy, peace, 
patience, kindness, goodness, gentleness, meekness, or self-control. So rather 
than concentrating on forbidding evil, let's concentrate on promoting good. 
Here's the Unicode for that:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.24.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Of course, if you're a flower child, you might prefer this one:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.25.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Some of the positive Unicodes aren't so obvious.</P>
+<P CLASS="Body">
+Here's the symbol for a bilabial click, one of the symbols in the 
International Phonetic Alphabet. You may not know it, but many of you make this 
noise regularly. If you want to try doing one, here's how. You just kind of put 
your lips together, then make an affricated sort of noise with ingressive mouth 
air.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.26.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Of course, in English we write that with an X, to go with those O's on the 
back of the envelope. But you're witnessing the passing of an era. What with 
email taking over, sending hugs and kisses on the backs of envelopes is 
becoming a lost art. It just doesn't have quite the same effect as a header 
line in email. <EM CLASS="ComputerOutput">Content-type: 
text/hugs&amp;kisses</EM>.</P>
+<P CLASS="Body">
+You know, it's also rather difficult to perfume an email message. 
Content-type: text/scented. The mind boggles.</P>
+<P CLASS="Body">
+Here are more simple circles that represent complicated things. Here's the 
symbol for earth:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.27.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Here's the symbol for Mars:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.28.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+And here's the symbol for Venus:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.29.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Now, I used to work at Jet Propulsion Laboratory, and I helped just a little 
to discover that Mars and Venus are pretty complicated. But as if things 
weren't complicated enough, the ancients complicated things further by 
overloading those symbols to represent male and female. Men are from Mars, 
women are from Venus, we are told, but that is not a new idea.</P>
+<P CLASS="Body">
+Here's some more history.</P>
+<P CLASS="Body">
+If you cut an onion, it looks like this. If we take this to be a picture of 
the world of Perl, then I must be that little bit of onion inside. </P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.30.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Around me are some of the early adopters of Perl, who are now revered as 
heroes of the revolution. As more people have joined the movement, new layers 
have been added. You can also picture this as an atom, with layers of electron 
shells. Of course, no atom we know of has quite that many electron shells. So 
stick with the onion. </P>
+<P CLASS="Body">
+Now the thing about the onion is that it teaches me something about my own 
importance, or lack thereof. Namely, that while I may have started all this, 
I'm still a little bit of the onion. Most of the mass is in the outer layers. 
(That's why I like to see grassroots movements like the Perl Mongers springing 
up.) But here I sit in the middle. I get a bit of honor for my historical 
significance, but in actual fact, most people see the outside of the onion, not 
the inside. Unless they make onion rings. But even then, the bigger rings have 
more to them than the smaller rings. Let that be a lesson to those of you who 
wish to be &quot;inner ringers.&quot; That's not where the real power is. Not 
in this movement, anyway. I've tried to model the Perl movement on another 
movement I'm a member of, and the founder of that movement said, &quot;He who 
wishes to be greatest among you must become the servant of all.&quot; Of his 
twelve inner ringers, one betrayed him, and ten of the other eleven went on to 
suffer a martyr's death. Not that I'm asking any of my friends to throw 
themselves to the lions just yet.</P>
+<P CLASS="Body">
+But back to growth patterns. Natural pearls grow in layers too, around a grain 
of sand that irritates the oyster in question, which forms layers of pretty 
stuff. This could be the cross-section of a pearl. People cut up onions 
frequently, but they almost never cut up pearls. So it's even truer of pearls 
than of onions. The outer layer is the most important. It's what people see. Or 
if the pearl is still growing, it's the layer that will support the layer after 
it. I realize that that classifies me as a mere irritant. I am content to be so 
classified.</P>
+<P CLASS="Body">
+Other things grow over time too. Perhaps if we change the picture to a set of 
tree rings, it'll be clearer:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.31.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+If you're familiar with a bit of physics, you know that a pipe is almost as 
strong as a solid bar of the same diameter, because most of the force is 
transmitted in the outer layers. The fact is, the center of the tree can rot, 
but the tree remains perfectly healthy. In a similar fashion, most of the 
health of Perl culture is in what is happening in the periphery, not in the 
center. People are saving themselves billions of dollars every year by 
programming in Perl, but most of those savings are happening out in the 
trenches. Even closer into the center, a lot more work is going into hooking 
Perl up to other things than into changing Perl itself. And I think this is as 
it should be. Core Perl is stabilizing somewhat. Even with core changes such as 
multithreading and Unicode support, we pretend that we're adding extension 
modules, because that's cleaner, and people don't have to invoke the new 
functionality if they don't want to.</P>
+<P CLASS="Body">
+All this stuff about growth rings is fine for talking about the past, but what 
about the future? I don't have a crystal ball. I do own two pairs of 
binoculars. Here's the typical symbol for that:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.32.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+This is, of course, the usual cinematic device for indicating that someone is 
looking through binoculars. I don't know offhand what I should put for the 
field of view here, so let's see what's at the other end of the binoculars:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.33.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Of course, this can also be a picture of two tidally locked bodies rotating 
around each other:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.34.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Each of these planets is raising tides on the other one. People usually 
understand why there is a tidal bulge on the side facing the other planet. What 
they don't understand so easily is why there's a bulge on the other side of the 
planet. But it makes sense when you consider that the other planet is not only 
pulling the near bulge away from the center of the planet, but it's also 
pulling the center of the planet away from the far bulge.</P>
+<P CLASS="Body">
+This is a really good picture of the relationship of the free software 
community with the commercial software community. We might even label some of 
the extremes. Let's just make up some names. We could call the left extreme, 
um, &quot;Richard.&quot; And we could call the right extreme something like, 
oh, &quot;Bill.&quot;</P>
+<P CLASS="Body">
+The middle bulges are a little harder to name, but just for today we can call 
this one on the middle left &quot;Larry,&quot; and that one on the middle right 
&quot;Tim.&quot;</P>
+<P CLASS="Body">
+This is, of course, another oversimplification, because various people and 
organizations aren't at a single spot in the diagram, but tend to rattle 
around. Some people manage to oscillate back and forth from one bulge to the 
other. One moment they're in favor of more cooperation between the freeware and 
commercial communities, and the next moment they're vilifying anything 
commercial. At least our hypothetical Richard and Bill are consistent.</P>
+<P CLASS="Body">
+But the action is in the middle.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.35.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+That's where everybody's been looking, to see what's going to happen. In fact, 
this is really last year's picture. This year it looks more like this:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.36.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Robert L. Forward has written a book, actually a series of books, about a 
place called Rocheworld. It's named after a fellow named Roche, surprise, 
surprise. He's the fellow who defined Roche's limit, which predicted that 
planets would break up if they got too close to each other. It turns out he 
oversimplified because his math wasn't powerful enough. If you allow your 
planets to deform into shapes like these, you can get them very much closer 
together, and keep them stable. Mind you, the net gravitational pull on these 
points is very low, but it's enough to keep the planets together.</P>
+<P CLASS="Body">
+In similar fashion, the freeware and commercial communities are much closer 
together this year than many people thought possible by the old calculations. 
In Rocheworld, the planets did not touch, but they shared atmospheres. If we 
fuzz things out a little with the magic of xpaint, then we kind of get the 
picture:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.37.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+You see how you can fly from one planet to the other, but not walk. It's 
reminiscent of quantum mechanical tunneling, where you can't get from here to 
there but you do it anyway with a flying leap.</P>
+<P CLASS="Body">
+What we have flowing between the freeware and commercial communities is a lot 
of ideas. Together, these two inner lobes define what we're now calling the 
Open Source movement. What we have here is something brand new: former enemies 
agreeing on a common good that transcends any particular business model. And 
that common good is better software sooner. Here's what made it all possible. 
People realized the power of a simple idea. We don't need software patents or 
trade secrets. All we need another simple circle:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.38.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+A circle with a &quot;c&quot; in it. Open Source lives or dies on copyright 
law. Our fond hope is that it lives. Please, let's all do our part to keep it 
that way. If you have a chance to plug copyrights over patents, please do so. I 
know many of you are already plugging copyrights over trade secrets. Let's also 
uphold copyright law by respecting the wishes of copyright holders, whether or 
not they are spelled out to the satisfaction of everyone's lawyer. The 
&quot;c&quot; in the circle should stand for civility.</P>
+<P CLASS="Body">
+When we think of civility, we think of cities, and of doing things fair and 
square. So here's the requisite square:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.39.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+And indeed, cities are built on squares, and rectangles. We call them blocks. 
And if the city planners leave the buildings off of a block, we call it a 
square. Even if it isn't square. Go figure.</P>
+<P CLASS="Body">
+Sometimes the buildings themselves are square:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.40.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+But often they're not. Similarly, if you look through the Unicode book, there 
are not nearly so many squares as there are circles. I think there's a 
fundamental underlying reason for that. When we build buildings, and when we 
write characters, we install them into a rectilinear framework. In terms of 
writing, we write left-to-right, or right-to-left, or top-to-bottom. The 
abstract cells into which we install the characters or buildings are squarish. 
But both buildings and characters tend to disappear visually if they follow the 
same lines as the overall text. So most characters tend to contain lines at odd 
angles, just as many modern skyscrapers are designed to avoid looking like 
boxes. Nobody really likes the skyscrapers of the 1960s, because they're too 
boxy. People like things to be visually distinct from their surroundings.</P>
+<P CLASS="Body">
+That is also why the various classes of operators and variables in Perl are 
visually distinct from each other. It's just sound human engineering, as far as 
I'm concerned. I don't like the fact that all the operators look the same in 
Lisp. I don't like the fact that most the street signs look alike in Europe. 
And I applaud the decision of Germany to make their stop signs look different 
from all the other signs. Of course, it's also helpful to us ignorant Americans 
that they made them look like American stop signs. Chalk up another one for 
cultural imperialism.</P>
+<P CLASS="Body">
+However, in repentance for American cultural imperialism, let me point out 
another advantage of the ideographic system of writing. Because ideographs are 
written into square cells, they can just as easily be written horizontally as 
vertically. Or vice versa. Our variable-width characters do not have that nice 
property. Especially in a font like Helvetica, where you have trouble telling 
i's and l's apart even when they're next to each other. Put one above the other 
and it'd just look like a dotted line. Chalk one up for the Chinese, the 
Japanese, and the Koreans.</P>
+<P CLASS="Body">
+To wrap up, I'd like to talk about triangles. Here's a sample:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.41.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+Triangles are related to circles in the same way that arrowheads are related 
to targets. Here's a target:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.42.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+I know I got this one right. I looked it up on the Web. More importantly, I 
stopped as soon as I found the first one.</P>
+<P CLASS="Body">
+Actually, this is the Unicode character named &quot;bulls-eye.&quot;</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.43.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+I'm not quite sure what it's supposed to mean. But that's never stopped me 
before. I'll make it mean something.</P>
+<P CLASS="Body">
+I've shot a lot of arrows in this essay, and I don't know whether I've hit any 
bulls-eyes yet. We put triangles on the front of arrows because they're sharp. 
Triangles are associated with pain, especially if you step on one. The angles 
of the triangle tend to suggest the hard work of climbing a mountain:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.44.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+On the other hand, looks can be deceiving. A triangle also represents a flat 
road stretching to the horizon:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.45.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+It's all a matter of perspective. You can choose your view by choosing where 
to stand. I can't predict whether Perl's road ahead will be bumpy or smooth, 
but I can predict that the more perspectives we can see things from, the easier 
it will be to choose the perspectives we like. And this is, after all, the job 
of a language designer, to survey the problem from many perspectives, to be 
just a little bit omniscient, so that other people can benefit. I do a little 
triangulation, and I map the territory. That's my job. If my map gets you where 
you're going, I'm happy.</P>
+<P CLASS="Body">
+If you take a section out of the Perl onion, it looks kind of like a triangle. 
Put in on its side and you have a growth chart for Perl over the last ten 
years:</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.46.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+All fine and dandy. This chart is notional, of course. I have no way of 
measuring Perl's actual growth. But obviously it is still growing. We're doing 
a lot of things right, and by and large we should keep doing just what we're 
doing.</P>
+<P CLASS="Body">
+Now suppose we shrink this triangle and extend the chart to show the whole 
lifetime of Perl. We really don't know how long it might last.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.47.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+It's hard to say what will make the difference here. But I have to tell you 
that I don't evaluate the success of Perl in terms of how many people like me. 
When I integrate these curves, I count the number of people I've helped get 
their job done.</P>
+<P CLASS="Body">
+I can tell you that I think the difference between curve 1 and curve 2 might 
depend on adding in all the potential Windows users, and all the problems they 
need to solve. Which are many. It's no accident that we've just put out a Win32 
Perl Resource Kit.</P>
+<P CLASS="Body">
+And I can tell you that the difference between curve 2 and curve 3 may depend 
on adding in all the international users that could benefit from Perl. It's no 
accident that the latest development version of Perl lets you name your 
variables with any characters that are considered to be alphanumeric in 
Unicode. That includes ideographs. There are a billion people in China. And I 
want them to be able to pass notes to each other written in Perl. I want them 
to be able to write poetry in Perl.</P>
+<P CLASS="Body">
+That is my vision of the future. My chosen perspective.</P>
+<P CLASS="Body">
+I began by talking about the virtues of a programmer: laziness, impatience, 
and hubris.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.48.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+These are virtues of passion. They are also virtues of an individual. They are 
not, however, virtues of community. The virtues of community sound like their 
opposites: diligence, patience, and humility.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.49.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<P CLASS="Body">
+They're not really opposites, because you can do them all at the same time. 
It's another matter of perspective. These are the virtues that have brought us 
this far. These are the virtues that will carry our community into the future, 
if we do not abandon them.</P>
+<P CLASS="Body">
+Basically, we just have to stay the course. Friedrich Nietzsche called it a 
&quot;long obedience in the same direction,&quot; which is a good snappy 
slogan. But I like the full quote too:</P>
+<BLOCKQUOTE CLASS="Quote">
+The essential thing &quot;in heaven and earth&quot; is . . . that there should 
be long obedience in the same direction; there thereby results, and has always 
resulted in the long run, something which has made life worth 
living.</BLOCKQUOTE>
+<P CLASS="Body">
+And now we've come full circle, back to the circle. Here is the front door of 
Bilbo Baggins' house. There's a road that goes from that door, and Bilbo wrote 
a poem about it.</P>
+<P CLASS="FigureHolder">
+<IMG SRC="ose.50.gif" ALIGN="BASELINE">
+&nbsp;</P>
+<BLOCKQUOTE CLASS="Quote">
+The Road goes ever on and on,<BR>
+Down from the door where it began.<BR>
+Now far ahead the Road has gone,<BR>
+And I must follow, if I can,<BR>
+Pursuing it with eager feet,<BR>
+Until it joins some larger way<BR>
+Where many paths and errands meet.<BR>
+And whither then? I cannot say. </BLOCKQUOTE>
+<p class="body">
+<EM CLASS="EpigraphAuthor">J.R.R. Tolkien,</EM> <EM CLASS="Emphasis">The 
Hobbit</EM></P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="brian.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/linus.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/linus.html
diff -N Proyectos/Mecagtk/OpenSource/linus.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/linus.html     3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,248 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Linus Torvalds">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>The Linux Edge</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">The Linux Edge</H1>
+<H4 CLASS="ChapterAuthor" align="right">Linus Torvalds</H4>
+<P CLASS="Body">
+Linux today has millions of users, thousands of developers, and a growing 
market. It is used in embedded systems; it is used to control robotic devices; 
it has flown on the space shuttle. I'd like to say that I knew this would 
happen, that it's all part of the plan for world domination. But honestly this 
has all taken me a bit by surprise. I was much more aware of the transition 
from one Linux user to one hundred Linux users than the transition from one 
hundred to one million users. </P>
+<P CLASS="Body">
+Linux has succeeded not because the original goal was to make it widely 
portable and widely available, but because it was based on good design 
principles and a good development model. This strong foundation made 
portability and availability easier to achieve.</P>
+<P CLASS="Body">
+Contrast Linux for a moment with ventures that have had strong commercial 
backing, like Java or Windows NT. The excitement about Java has convinced many 
people that &quot;write once, run anywhere&quot; is a worthy goal. We're moving 
into a time when a wider and wider range of hardware is being used for 
computing, so indeed this is an important value. Sun didn't invent the idea of 
&quot;write once, run anywhere,&quot; however. Portability has long been a holy 
grail of the computer industry. Microsoft, for example, originally hoped that 
Windows NT would be a portable operating system, one that could run on Intel 
machines, but also on RISC machines common in the workstation environment. 
Linux never had such an ambitious original goal. It's ironic, then, that Linux 
has become such a successful medium for cross-platform code.</P>
+<P CLASS="Body">
+Originally Linux was targeted at only one architecture: the Intel 386. Today 
Linux runs on everything from PalmPilots to Alpha workstations; it is the most 
widely ported operating system available for PCs. If you write a program to run 
on Linux, then, for a wide range of machines, that program can be &quot;write 
once, run anywhere.&quot; It's interesting to look at the decisions that went 
into the design of Linux, and how the Linux development effort evolved, to see 
how Linux managed to become something that was not at all part of the original 
vision.</P>
+<H2 CLASS="HeadA">
+Amiga and the Motorola Port</H2>
+<P CLASS="Body">
+Linux is a Unix-like operating system, but not a version of Unix. This gives 
Linux a different heritage than, for example, Free BSD. What I mean is this: 
the creators of Free BSD started with the source code to Berkeley Unix, and 
their kernel is directly descended from that source code. So Free BSD is a 
version of Unix; it's in the Unix family tree. Linux, on the other hand, aims 
to provide an interface that is compatible with Unix, but the kernel was 
written from scratch, without reference to Unix source code. So Linux itself is 
not a port of Unix. It's a new operating system. </P>
+<P CLASS="Body">
+Porting this new operating systems to other platforms was really not on my 
mind at the beginning. At first I just wanted something that would run on my 
386.</P>
+<P CLASS="Body">
+A serious effort to make the Linux kernel code portable began with the effort 
to port Linux to DEC's Alpha machine. The Alpha port was not the first port, 
however. </P>
+<P CLASS="Body">
+The first port came from a team who ported the Linux kernel to the Motorola 
68K series, which was the chip in the early Sun, Apple, and Amiga computers. 
The programmers behind the Motorola port really wanted to do something 
low-level and in Europe you had a number of people who were in the Amiga 
community who were especially disenchanted with the idea of using DOS or 
Windows. </P>
+<P CLASS="Body">
+While the Amiga people did get a system running on the 68K, I don't really 
think of this as a successful port of Linux. They took the same kind of 
approach I had taken when writing Linux in the first place: writing code from 
scratch targeted to support a certain kind of interface. So that first 68K port 
could be considered a Linux-like operating system, and a fork off the original 
codebase.</P>
+<P CLASS="Body">
+In one sense this first 68K Linux was not helpful in creating a portable 
Linux, but in another sense it was. When I started thinking about the Alpha 
port I had to think about the 68K experience. If we took the same approach with 
Alpha, then I would have three different code bases to support in order to 
maintain Linux. Even if this had been feasible in terms of coding, it wasn't 
feasible in terms of management. I couldn't manage the development of Linux if 
it meant keeping track of an entirely new code base every time someone wanted 
Linux on a new architecture. Instead, I wanted to do a system where I have an 
Alpha specific tree, a 68K specific tree, and an x86 specific tree, but all in 
a common code base. </P>
+<P CLASS="Body">
+So the kernel underwent a major rewrite at this time. But that rewrite was 
motivated by how to work with a growing community of developers.</P>
+<H2 CLASS="HeadA">
+Microkernels</H2>
+<P CLASS="Body">
+When I began to write the Linux kernel, there was an accepted school of 
thought about how to write a portable system. The conventional wisdom was that 
you had to use a microkernel-style architecture. </P>
+<P CLASS="Body">
+With a monolithic kernel such as the Linux kernel, memory is divided into user 
space and kernel space. Kernel space is where the actual kernel code is loaded, 
and where memory is allocated for kernel-level operations. Kernel operations 
include scheduling, process management, signaling, device I/O, paging, and 
swapping: the core operations that other programs rely on to be taken care of. 
Because the kernel code includes low-level interaction with the hardware, 
monolithic kernels appear to be specific to a particular architecture.</P>
+<P CLASS="Body">
+A microkernel performs a much smaller set of operations, and in more limited 
form: interprocess communication, limited process management and scheduling, 
and some low-level I/O. Microkernels appear to be less hardware-specific 
because many of the system specifics are pushed into user space. A microkernel 
architecture is basically a way of abstracting the details of process control, 
memory allocation, and resource allocation so that a port to another chipset 
would require minimal changes.</P>
+<P CLASS="Body">
+So at the time I started work on Linux in 1991, people assumed portability 
would come from a microkernel approach. You see, this was sort of the research 
darling at the time for computer scientists. However, I am a pragmatic person, 
and at the time I felt that microkernels (a) were experimental, (b) were 
obviously more complex than monolithic Kernels, and (c) executed notably slower 
than monolithic kernels. Speed matters a lot in a real-world operating system, 
and so a lot of the research dollars at the time were spent on examining 
optimization for microkernels to make it so they could run as fast as a normal 
kernel. The funny thing is if you actually read those papers, you find that, 
while the researchers were applying their optimizational tricks on a 
microkernel, in fact those same tricks could just as easily be applied to 
traditional kernels to accelerate their execution. </P>
+<P CLASS="Body">
+In fact, this made me think that the microkernel approach was essentially a 
dishonest approach aimed at receiving more dollars for research. I don't 
necessarily think these researchers were knowingly dishonest. Perhaps they were 
simply stupid. Or deluded. I mean this in a very real sense. The dishonesty 
comes from the intense pressure in the research community at that time to 
pursue the microkernel topic. In a computer science research lab, you were 
studying microkernels or you weren't studying kernels at all. So everyone was 
pressured into this dishonesty, even the people designing Windows NT. While the 
NT team knew the final result wouldn't approach a microkernel, they knew they 
had to pay lip service to the idea.</P>
+<P CLASS="Body">
+Fortunately I never felt much pressure to pursue microkernels. The University 
of Helsinki had been doing operating system research from the late 60s on, and 
people there didn't see the operating system kernel as much of a research topic 
anymore. In a way they were right: the basics of operating systems, and by 
extension the Linux kernel, were well understood by the early 70s; anything 
after that has been to some degree an exercise in self-gratification.</P>
+<P CLASS="Body">
+If you want code to be portable, you shouldn't necessarily create an 
abstraction layer to achieve portability. Instead you should just program 
intelligently. Essentially, trying to make microkernels portable is a waste of 
time. It's like building an exceptionally fast car and putting square tires on 
it. The idea of abstracting away the one thing that must be blindingly 
fast--the kernel--is inherently counter-productive.</P>
+<P CLASS="Body">
+Of course there's a bit more to microkernel research than that. But a big part 
of the problem is a difference in goals. The aim of much of the microkernel 
research was to design for a theoretical ideal, to come up with a design that 
would be as portable as possible across any conceivable architecture. With 
Linux I didn't have to aim for such a lofty goal. I was interested in 
portability between real world systems, not theoretical systems.</P>
+<H2 CLASS="HeadA">
+From Alpha to Portability</H2>
+<P CLASS="Body">
+The Alpha port started in 1993, and took about a year to complete. The port 
wasn't entirely done after a year, but the basics were there. While this first 
port was difficult, it established some design principles that Linux has 
followed since, and that have made other ports easier.</P>
+<P CLASS="Body">
+The Linux kernel isn't written to be portable to any architecture. I decided 
that if a target architecture is fundamentally sane enough, and follows some 
basic rules then Linux would fundamentally support that kind of model. For 
example, memory management can be very different from one machine to another. I 
read up on the 68K, the Sparc, the Alpha, and the PowerPC memory management 
documents, and found that while there are differences in the details, there was 
a lot in common in the use of paging, caching, and so on. The Linux kernel 
memory management could be written to a common denominator among these 
architectures, and then it would not be so hard to modify the memory management 
code for the details of a specific architecture.</P>
+<P CLASS="Body">
+A few assumptions simplify the porting problem a lot. For example, if you say 
that a CPU must have paging, then it must by extension have some kind of 
translation lookup buffer (TLB), which tells the CPU how to map the virtual 
memory for use by the CPU. Of course, what form the TLB takes you aren't sure. 
But really, the only thing you need to know is how to fill it and how to flush 
it when you decide it has to go away. So in this sane architecture you know you 
need to have a few machine-specific parts in the kernel, but most of the code 
is based on the general mechanisms by which something like the TLB works.</P>
+<P CLASS="Body">
+Another rule of thumb that I follow is that it is always better to use a 
compile time constant rather than using a variable, and often by following this 
rule, the compiler will do a lot better job at code optimization. This is 
obviously wise, because you can set up your code so as to be flexibly defined, 
but easily optimized. </P>
+<P CLASS="Body">
+What's interesting about this approach--the approach of trying to define a 
sane common architecture--is that by doing this you can present a better 
architecture to the OS than is really available on the actual hardware 
platform. This sounds counter-intuitive, but it's important. The 
generalizations you're looking for when surveying systems are frequently the 
same as the optimizations you'd like to make to improve the kernel's 
performance. </P>
+<P CLASS="Body">
+You see, when you do a large enough survey of things like page table 
implementation and you make a decision based on your observations--say, that 
the page tree should be only three deep--you find later that you could only 
have done it that way if you were truly interested in having high performance. 
In other words, if you had not been thinking about portability as a design 
goal, but had just been thinking about optimization of the kernel on a 
particular architecture, you would frequently reach the same conclusion--say, 
that the optimal depth for the kernel to represent the page tree is three 
deep.</P>
+<P CLASS="Body">
+This isn't just luck. Often when an architecture deviates from a sane general 
design in some of its details that's because it's a bad design. So the same 
principles that make you write around the design specifics to achieve 
portability also make you write around the bad design features and stick to a 
more optimized general design. Basically I have tried to reach middle ground by 
mixing the best of theory into the realistic facts of life on today's computer 
architectures.</P>
+<H2 CLASS="HeadA">
+Kernel Space and User Space</H2>
+<P CLASS="Body">
+With a monolithic kernel such as the Linux kernel, it's important to be very 
cautious about allowing new code and new features into the kernel. These 
decisions can affect a number of things later on in the development cycle 
beyond the core kernel work.</P>
+<P CLASS="Body">
+The first very basic rule is to avoid interfaces. If someone wants to add 
something that involves a new system interface you need to be exceptionally 
careful. Once you give an interface to users they will start coding to it and 
once somebody starts coding to it you are stuck with it. Do you want to support 
the exact same interface for the rest of your system's life? </P>
+<P CLASS="Body">
+Other code is not so problematic. If it doesn't have an interface, say a disk 
driver, there isn't much to think about; you can just add a new disk driver 
with little risk. If Linux didn't have that driver before, adding it doesn't 
hurt anyone already using Linux, and opens Linux to some new users.</P>
+<P CLASS="Body">
+When it comes to other things, you have to balance. Is this a good 
implementation? Is this really adding a feature that is good? Sometimes even 
when the feature is good, it turns out that either the interface is bad or the 
implementation of that feature kind of implies that you can never do something 
else, now or in the future. </P>
+<P CLASS="Body">
+For example--though this is sort of an interface issue--suppose somebody has 
some stupid implementation of a filesystem where names can be no longer than 14 
characters. The thing you really want to avoid having these limitations in an 
interface that is set in stone. Otherwise when you look to extend the 
filesystem, you are screwed because you have to find a way to fit within this 
lesser interface that was locked in before. Worse than that, every program that 
requests a filename may only have space in a variable for, say, 13 characters, 
so if you were to pass them a longer filename it would crash them.</P>
+<P CLASS="Body">
+Right now the only vendor that does such a stupid thing is Microsoft. 
Essentially, in order to read DOS/Windows files you have this ridiculous 
interface where all files had eleven characters, eight plus three. With NT, 
which allowed long filenames, they had to add a complete set of new routines to 
do the same things the other routines did, except that this set can also handle 
larger filenames. So this is an example of a bad interface polluting future 
works. </P>
+<P CLASS="Body">
+Another example of this happened in the Plan 9 operating system. They had this 
really cool system call to do a better process fork--a simple way for a program 
to split itself into two and continue processing along both forks. This new 
fork, which Plan 9 called R-Fork (and SGI later called S-Proc) essentially 
creates two separate process spaces that share an address space. This is 
helpful for threading especially. </P>
+<P CLASS="Body">
+Linux does this too with its clone system call, but it was implemented 
properly. However, with the SGI and Plan9 routines they decided that programs 
with two branches can share the same address space but use separate stacks. 
Normally when you use the same address in both threads, you get the same memory 
location. But you have a stack segment that is specific, so if you use a 
stack-based memory address you actually get two different memory locations that 
can share a stack pointer without overriding the other stack.</P>
+<P CLASS="Body">
+While this is a clever feat, the downside is that the overhead in maintaining 
the stacks makes this in practice really stupid to do. They found out too late 
that the performance went to hell. Since they had programs which used the 
interface they could not fix it. Instead they had to introduce an additional 
properly-written interface so that they could do what was wise with the stack 
space.</P>
+<P CLASS="Body">
+While a proprietary vendor can sometimes try to push the design flaw onto the 
architecture, in the case of Linux we do not have the latitude to do this.</P>
+<P CLASS="Body">
+This is another case where managing the development of Linux and making design 
decisions about Linux dictate the same approach. From a practical point of 
view, I couldn't manage lots of developers contributing interfaces to the 
kernel. I would not have been able to keep control over the kernel. But from a 
design point of view this is also the right thing to do: keep the kernel 
relatively small, and keep the number of interfaces and other constraints on 
future development to a minimum.</P>
+<P CLASS="Body">
+Of course Linux is not completely clean in this respect. Linux has inherited a 
number of terrible interfaces from previous implementations of Unix. So in some 
cases I would have been happier if I did not have to maintain the same 
interface as Unix. But Linux is about as clean as a system can be without 
starting completely from scratch. And if you want the benefit of being able to 
run Unix applications, then you get some of the Unix baggage as a consequence. 
Being able to run those applications has been vital to Linux's popularity, so 
the tradeoff is worth it.</P>
+<H2 CLASS="HeadA">
+GCC</H2>
+<P CLASS="Body">
+Unix itself is a great success story in terms of portability. The Unix kernel, 
like many kernels, counts on the existence of C to give it the majority of the 
portability it needs. Likewise for Linux. For Unix the wide availability of C 
compilers on many architectures made it possible to port Unix to those 
architectures. </P>
+<P CLASS="Body">
+So Unix underscores how important compilers are. The importance of compilers 
was one reason I chose to license Linux under the GNU Public License (GPL). The 
GPL was the license for the GCC compiler. I think that all the other projects 
from the GNU group are for Linux insignificant in comparison. GCC is the only 
one that I really care about. A number of them I hate with a passion; the Emacs 
editor is horrible, for example. While Linux is larger than Emacs, at least 
Linux has the excuse that it needs to be. </P>
+<P CLASS="Body">
+But basically compilers are really a fundamental need. </P>
+<P CLASS="Body">
+Now that the Linux kernel follows a generally portable design, at least for 
reasonably sane architectures, portability should be possible as long as a 
reasonably good compiler is available. For the upcoming chips I don't worry 
much about architectural portability when it comes to the kernel anymore; I 
worry about the compilers. Intel's 64-bit chip, the Merced, is an obvious 
example, because Merced is very different for a compiler. </P>
+<P CLASS="Body">
+So the portability of Linux is very much tied to the fact that GCC is ported 
to major chip architectures.</P>
+<H2 CLASS="HeadA">
+Kernel Modules</H2>
+<P CLASS="Body">
+With the Linux kernel it became clear very quickly that we want to have a 
system which is as modular as possible. The open-source development model 
really requires this, because otherwise you can't easily have people working in 
parallel. It's too painful when you have people working on the same part of the 
kernel and they clash.</P>
+<P CLASS="Body">
+Without modularity I would have to check every file that changed, which would 
be a lot, to make sure nothing was changed that would effect anything else. 
With modularity, when someone sends me patches to do a new filesystem and I 
don't necessarily trust the patches <EM CLASS="ForeignPhrase">per se</EM>, I 
can still trust the fact that if nobody's using this filesystem, it's not going 
to impact anything else.</P>
+<P CLASS="Body">
+For example, Hans Reiser is working on a new filesystem, and he just got it 
working. I don't think it's worth trying to get into the 2.2 kernel at this 
point. But because of the modularity of the kernel I could if I really wanted 
to, and it wouldn't be too difficult. The key is to keep people from stepping 
on each other's toes. </P>
+<P CLASS="Body">
+With the 2.0 kernel Linux really grew up a lot. This was the point that we 
added loadable kernel modules. This obviously improved modularity by making an 
explicit structure for writing modules. Programmers could work on different 
modules without risk of interference. I could keep control over what was 
written into the kernel proper. So once again managing people and managing code 
led to the same design decision. To keep the number of people working on Linux 
coordinated, we needed something like kernel modules. But from a design point 
of view, it was also the right thing to do.</P>
+<P CLASS="Body">
+The other part of modularity is less obvious, and more problematic. This is 
the run-time loading part, which everyone agrees is a good thing, but leads to 
new problems. The first problem is technical, but technical problems are 
(almost) always the easiest to solve. The more important problem is the 
non-technical issues. For example, at which point is a module a derived work of 
Linux, and therefore under the GPL?</P>
+<P CLASS="Body">
+When the first module interface was done, there were people that had written 
drivers for SCO, and they weren't willing to release the source, as required by 
the GPL, but they were willing to recompile to provide binaries for Linux. At 
that point, for moral reasons, I decided I couldn't apply the GPL in this kind 
of situation. </P>
+<P CLASS="Body">
+The GPL requires that works &quot;derived from&quot; a work licensed under the 
GPL also be licensed under the GPL. Unfortunately what counts as a derived work 
can be a bit vague. As soon as you try to draw the line at derived works, the 
problem immediately becomes one of where do you draw the line?</P>
+<P CLASS="Body">
+We ended up deciding (or maybe I ended up decreeing) that system calls would 
not be considered to be linking against the kernel. That is, any program 
running on top of Linux would not be considered covered by the GPL. This 
decision was made very early on and I even added a special read-me file (see 
Appendix B) to make sure everyone knew about it. Because of this commercial 
vendors can write programs for Linux without having to worry about the GPL.</P>
+<P CLASS="Body">
+The result for module makers was that you could write a proprietary module if 
you only used the normal interface for loading. This is still a gray area of 
the kernel though. These gray areas leave holes for people to take advantage of 
things, perhaps, and it's partly because the GPL really isn't clear about 
things like module interface. If anyone were to abuse the guidelines by using 
the exported symbols in such a way that they are doing it just to circumvent 
the GPL, then I feel there would be a case for suing that person. But I don't 
think anyone wants to misuse the kernel; those who have shown commercial 
interest in the kernel have done so because they are interested in the benefits 
of the development model. </P>
+<P CLASS="Body">
+The power of Linux is as much about the community of cooperation behind it as 
the code itself. If Linux were hijacked--if someone attempted to make and 
distribute a proprietary version--the appeal of Linux, which is essentially the 
open-source development model, would be lost for that proprietary version.</P>
+<H2 CLASS="HeadA">
+Portability Today</H2>
+<P CLASS="Body">
+Linux today has achieved many of the design goals that people originally 
assumed only a microkernel architecture could achieve. </P>
+<P CLASS="Body">
+By constructing a general kernel model drawn from elements common across 
typical architecture, the Linux kernel gets many of the portability benefits 
that otherwise require an abstraction layer, without paying the performance 
penalty paid by microkernels.</P>
+<P CLASS="Body">
+By allowing for kernel modules, hardware-specific code can often be confined 
to a module, keeping the core kernel highly portable. Device drivers are a good 
example of effective use of kernel modules to keep hardware specifics in the 
modules. This is a good middle ground between putting all the hardware 
specifics in the core kernel, which makes for a fast but unportable kernel, and 
putting all the hardware specifics in user space, which results in a system 
that is either slow, unstable, or both.</P>
+<P CLASS="Body">
+But Linux's approach to portability has been good for the development 
community surrounding Linux as well. The decisions that motivate portability 
also enable a large group to work simultaneously on parts of Linux without the 
kernel getting beyond my control. The architecture generalizations on which 
Linux is based give me a frame of reference to check kernel changes against, 
and provide enough abstraction that I don't have to keep completely separate 
forks of the code for separate architectures. So even though a large number of 
people work on Linux, the core kernel remains something I can keep track of. 
And the kernel modules provide an obvious way for programmers to work 
independently on parts of the system that really should be independent. </P>
+<H2 CLASS="HeadA">
+The Future of Linux</H2>
+<P CLASS="Body">
+I'm sure we made the right decision with Linux to do as little as possible in 
the kernel space. At this point the honest truth is I don't envision major 
updates to the kernel. A successful software project should mature at some 
point, and then the pace of changes slows down. There aren't a lot of major new 
innovations in store for the kernel. It's more a question of supporting a wider 
range of systems than anything else: taking advantage of Linux's portability to 
bring it to new systems.</P>
+<P CLASS="Body">
+There will be new interfaces, but I think those will come partly from 
supporting the wider range of systems. For example, when you start doing 
clustering, suddenly you want to tell the scheduler to schedule certain groups 
of processes as gang scheduling and things like that. But at the same time, I 
don't want everybody just focusing on clustering and super-computing, because a 
lot of the future may be with laptops, or cards that you plug in wherever you 
go, or something similar, so I'd like Linux to go in that direction too. </P>
+<P CLASS="Body">
+And then there are the embedded systems were there is no user interface at 
all, really. You only access the system to upgrade the kernel perhaps, but 
otherwise they just sit there. So that's another direction for Linux. I don't 
think Java or Inferno (Lucent's embedded operating system) are going to succeed 
for embedded devices. They have missed the significance of Moore's Law. At 
first it sounds good to design an optimized system specific for a particular 
embedded device, but by the time you have a workable design, Moore's Law will 
have brought the price of more powerful hardware within range, undermining the 
value of designing for a specific device. Everything is getting so cheap that 
you might as well have the same system on your desktop as in your embedded 
device. It will make everyone's life easier.</P>
+<P CLASS="Body">
+Symmetric Multi-Processing (SMP) is one area that will be developed. The 2.2 
Linux kernel will handle four processors pretty well, and we'll develop it up 
to eight or sixteen processors. The support for more than four processors is 
already there, but not really. If you have more than four processors now, it's 
like throwing money at a dead horse. So that will certainly be improved.</P>
+<P CLASS="Body">
+But, if people want sixty-four processors they'll have to use a special 
version of the kernel, because to put that support in the regular kernel would 
cause performance decreases for the normal users.</P>
+<P CLASS="Body">
+Some particular application areas will continue to drive kernel development. 
Web serving has always been an interesting problem, because it's the one real 
application that is really kernel-intensive. In a way, web serving has been 
dangerous for me, because I get so much feedback from the community using Linux 
as a web-serving platform that I could easily end up optimizing only for web 
serving. I have to keep in mind that web serving is an important application 
but not everything.</P>
+<P CLASS="Body">
+Of course Linux isn't being used to its full potential even by today's web 
servers. Apache itself doesn't do the right thing with threads, for example. 
</P>
+<P CLASS="Body">
+This kind of optimization has been slowed down by the limits in network 
bandwidth. At present, you saturate ten-megabit networks so easily that there's 
no reason to optimize more. The only way to not saturate ten-megabit networks 
is to have lots and lots of heavy duty CGIs. But that's not what the kernel can 
help with. What the kernel could potentially do is directly answer requests for 
static pages, and pass the more complicate requests to Apache. Once faster 
networking is more commonplace, this will be more intriguing. But right now we 
don't have the critical mass of hardware to test and develop it. </P>
+<P CLASS="Body">
+The lesson from all these possible future directions is that I want Linux to 
be on the cutting edge, and even a bit past the edge, because what's past the 
edge today is what's on your desktop tomorrow. </P>
+<P CLASS="Body">
+But the most exciting developments for Linux will happen in user space, not 
kernel space. The changes in the kernel will seem small compared to what's 
happening further out in the system. From this perspective, where the Linux 
kernel will be isn't as interesting a question as what features will be in Red 
Hat 17.5 or where Wine (the Windows emulator) is going to be in a few years.</P>
+<P CLASS="Body">
+In fifteen years, I expect somebody else to come along and say, hey, I can do 
everything that Linux can do but I can be lean and mean about it because my 
system won't have twenty years of baggage holding it back. They'll say Linux 
was designed for the 386 and the new CPUs are doing the really interesting 
things differently. Let's drop this old Linux stuff. This is essentially what I 
did when creating Linux. And in the future, they'll be able to look at our 
code, and use our interfaces, and provide binary compatibility, and if all that 
happens I'll be happy. </P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="young.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/mckusick.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/mckusick.gif
diff -N Proyectos/Mecagtk/OpenSource/mckusick.gif
Binary files /dev/null and /tmp/cvsBLJRP8 differ

Index: Proyectos/Mecagtk/OpenSource/netrev.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/netrev.html
diff -N Proyectos/Mecagtk/OpenSource/netrev.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/netrev.html    3 Mar 2012 06:14:13 -0000       
1.1
@@ -0,0 +1,209 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Jim Hamerly, Tom Paquin, Susan Walton">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Freeing the Source</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Freeing the Source</H1>
+<H1 CLASS="ChapterSubtitle" align="right">The Story of Mozilla </H1>
+<H4 align="right">Jim Hamerly and Tom Paquin with Susan Walton</H4>
+<P CLASS="Body">
+On January 23, 1998, Netscape made two announcements. The first, as reported 
by C|Net: &quot;In an unprecedented move, Netscape Communications will give 
away its Navigator browser, confirming rumors over the last several 
weeks.&quot; </P>
+<P CLASS="Body">
+The second: &quot;It also will give away the source code for the next 
generation of its Communicator suite.&quot; </P>
+<P CLASS="Body">
+The decision to give away the browser came as no surprise, but the release of 
the source code stunned the industry. It hit the pages of newspapers around the 
world, and even the Open Source community was surprised at the move. Never 
before had a major software company opened up its proprietary code. What was 
Netscape up to now? </P>
+<P CLASS="Body">
+We had decided to change the playing field, and not for the first time. Always 
known for thinking outside the box, this time Netscape was taking the 
commitment to building a better Internet to a new level. When Netscape 
initiated unrestricted distribution of early versions of its browser over the 
Internet in 1994, people said &quot;That's crazy!&quot; When Netscape said 
&quot;Free Source Code&quot; they said the same thing. </P>
+<P CLASS="Body">
+The discussion period leading up to the Open Source announcement moved like a 
runaway train. After months of deliberation about whether or not to release the 
binary for free, critical mass was reached in the decision to free the source 
in an unbelievable twenty-four hours.</P>
+<P CLASS="Body">
+As fast and surprising as the announcement seemed to both insiders and 
outsiders, it reflected several converging tracks of thought. Netscape 
executives were discussing a whitepaper by Frank Hecker that expressed a view 
coming to the forefront. In it he advocated that Netscape free its source. 
Frank had done his homework, citing Eric Raymond's paper, &quot;The Cathedral 
and the Bazaar,&quot; and talking to people in departments throughout the 
organization--from engineering to marketing to management. In a twenty-page 
opus that was widely circulated, he pled the case that was gaining momentum:</P>
+<blockquote class="quote">
+When Netscape first made Navigator available for unrestricted download over 
the Internet, many saw this as flying in the face of conventional wisdom for 
the commercial software business, and questioned how we could possibly make 
money &quot;giving our software away.&quot; Now of course this strategy is seen 
in retrospect as a successful innovation that was a key factor in Netscape's 
rapid growth, and rare is the software company today that does not emulate our 
strategy in one way or another. Among other things, this provokes the following 
question: What if we were to repeat this scenario, only this time with source 
code?</blockquote>
+<P CLASS="Body">
+In the engineering pit there was a similar view. Many Netscape employees had 
experience working with Open Source. And since Communicator's code was so 
tightly integrated with Java and HTML, most recognized an emerging truth: It 
wasn't such a huge jump to make. The nature of Java invites a more open view of 
source distribution. Because it is cross-platform and can be compiled down to 
class files that are machine-independent executables, each binary is like a 
virtual machine. One effect of this is that programmers can decompile the 
executable and turn it back into source code. And the browser &quot;view 
source&quot; command made HTML a common vernacular. Rather than trying to block 
this, many believed Netscape should facilitate it, encourage it, and if 
possible, benefit from it.</P>
+<P CLASS="Body">
+The various grassroots schools of thoughts merged with unexpected suddenness. 
In meetings, reaction to the suggestion went from stunned shock to nods in 
minutes. Most of the discussions passed quickly from &quot;should we?&quot; to 
&quot;when?&quot; Most of the key people believed that we had to move fast, set 
a firm date, and make it happen. In January, Netscape made a promise to the 
Net: Communicator source will be released in the first calendar quarter of 
1998. Netscape took this promise with deadly seriousness, and Project Source 
331 came into being. This was the name for Netscape's all-out effort to have 
the source code out by March 31, 1998. </P>
+<P CLASS="Body">
+Then the reality set in. </P>
+<H2 CLASS="HeadA">
+Making It Happen</H2>
+<P CLASS="Body">
+The body of Communicator source code at Netscape was called 
&quot;Mozilla.&quot; Mozilla was a term initially created by Jamie Zawinsky and 
company during the development of Navigator. The team was working at a 
similarly frantic pace to create a beast vastly more powerful than Mosaic, and 
the word became the official code name for Navigator. Later the big green 
dinosaur became an inside joke, then a company mascot, and finally a public 
symbol. Now the name came into use as the generic term referring to the 
open-source web browsers derived from the source code of Netscape Navigator. 
The move was on to &quot;Free the Lizard.&quot; </P>
+<P CLASS="Body">
+There was an amazing amount to be done to make the code ready for prime time. 
As issues surfaced, they separated themselves into categories and were claimed. 
The next three months were devoted to resolving issues at the fanatical pace 
that Netscapers knew well. </P>
+<P CLASS="Body">
+One of the largest issues was the disposition of the third-party modules 
included in the browser. Communicator contained over seventy-five third-party 
modules in its source, and all of the code owners needed to be approached. 
Teams of engineers and evangelists were organized to visit and sell each 
company on the concept of joining Netscape on the road to Open Source. All of 
them had heard Netscape's Open Source announcement, and now each company had a 
choice to make: their code could be removed or replaced, shipped as binary 
(kept in its compiled state), or shipped as source code along with 
Communicator. To complicate matters, many of the third-party contracts were 
unique and ran for different lengths of time. No one scenario would be 
appropriate as a solution for all situations.</P>
+<P CLASS="Body">
+Making the deadline for Project Source 331 was considered essential. And that 
required tough choices. This was surely the case when it came to the 
participation of the third-party developers. The rule was either you're in by 
February 24<sup>th</sup>, or your element will have to be scrubbed from the 
source. Those kinds of deadlines are not hard to set early on, but they became 
brutal when we hit the wall. When the time came, some code had to be removed. 
</P>
+<P CLASS="Body">
+Java was a proprietary language, so it had to be removed. Three engineers were 
assigned to perform a &quot;Java-ectomy.&quot; The browser had to build, 
compile, and run--without Java. Since the overall code was so tightly 
integrated with Java, this was no small feat. The goal was to have the source 
code ready by March 15<sup>th</sup> so that the final two weeks could be 
devoted to testing. Engineers had to disentangle all Java code from the browser 
in an inconceivably short time.</P>
+<P CLASS="Body">
+Cleansing the code was a huge project. Early on, many felt it just couldn't be 
done in time for the deadline. But as steam gathered at meetings, strategies 
formed. The wheels began to turn. The Product Team dropped their entire 
workload (most were developing the next generation of the browser) and everyone 
got down to the business of surgery. Not only did the inclusion (or excision) 
of each third-party participant have to be resolved, all comments had to be 
edited from the code. Responsibility for each module was assigned to a team and 
they went in to scrub. </P>
+<P CLASS="Body">
+One of the great innovations that happened early on was the decision to use 
the Intranet bug-reporting system as a task manager. &quot;Bugsplat&quot; was 
the name for Scopus, a bug-reporting program fronted with an HTML interface. It 
was ideal as a workflow management system. New jobs were reported to the system 
as they came up, input in a simple HTML form. Just as with a bug that has been 
reported to the system, priorities were set, relevant participants were 
determined, and mailing lists grew up around each task. When the task (or bug) 
was resolved, all of the mailing lists and prioritization collapsed and 
disappeared from view. Engineers were able to track the progress of their 
modules and watch the project unfold by logging on to the Intranet.</P>
+<P CLASS="Body">
+The removal of the cryptographic modules was another tremendous task for the 
engineering team. Not only did the government insist that all cryptographic 
support had to be removed, but every hook that called it had to be redacted. 
One team's sole job was to keep in constant contact with the NSA and manage 
compliance issues.</P>
+<H2 CLASS="HeadA">
+Creating the License</H2>
+<P CLASS="Body">
+Parallel to the Great Code Cleanup was the license effort. The first step was 
to resolve the big question: Would any of the existing licenses work with the 
open code? No one wanted to have to draft new licenses, but everyone realized 
it might be necessary to accommodate all of the third-party code and to make 
the project work on a corporate level. No existing proprietary software had 
ever been released under a free source license. </P>
+<P CLASS="Body">
+A group of Open Source community leaders, including Linus Torvalds, Eric 
Raymond, and Tim O'Reilly, were invited to visit the Mountain View campus. They 
spoke with audiences of executives, attorneys, and programmers about what they 
were in for, and met with small groups to talk about some of the issues they 
were likely to face. They spent a great deal of time with the Netscape legal 
team discussing the existing licenses--both their strengths and the problems 
they created. These advisors also acted as a sounding board for ideas.</P>
+<P CLASS="Body">
+One team dove into researching existing licensing agreements with the advice 
and guidance of the Netscape legal team, trying to determine whether one of 
them would work for Mozilla. Beginning with the GNU General Public License, the 
GNU Library General Public License (LGPL), and the BSD license, we took long 
looks to outline exactly what problems they solved and created. Unlike the code 
to which these agreements had been applied in the past, Netscape's existing 
code base presented unique circumstances. One of the thorniest issues was the 
private licensing agreements that governed many of the third-party components 
used in the code. The license needed to create an environment where these and 
other new commercial developers could contribute their code to Mozilla while 
protecting their business interests.</P>
+<P CLASS="Body">
+The more permissive BSD license, which only requires that the copyright holder 
be referenced in unlimited changes to code, was deemed insufficient for Mozilla 
development. It would leave developers open to the risk that modifications to 
their work would not be returned to them or to the rest of the community. This 
point alone was a big issue, since it was crucial to the long-term viability of 
open source development efforts. </P>
+<P CLASS="Body">
+On the other hand, the requirements of the GPL made it undesirable in this 
project. The GPL is &quot;viral&quot;; when applied to an original piece of 
code, any other code with which the original is compiled must also be covered 
under the GPL. This aspect made it untenable for commercial software 
developers. For instance, the GPL would require that third-party components 
compiled into branded versions of Communicator also be released under the GPL, 
something outside of Netscape's reach, as Netscape does not control these third 
parties. And Netscape itself uses a portion of the Communicator code in its 
other products (such as servers). Since Netscape has no immediate plans to 
release that source code, the GPL viral effect on these products would present 
the same problem for Netscape as for other companies. The more open and less 
restrictive LGPL, a modification of the GPL, came closest to meeting Netscape's 
needs for use with commercial development, but it still contained too many of 
the same commercial pitfalls as the GPL.</P>
+<P CLASS="Body">
+After a frenzied month of research, discussion, meetings with experts and 
advocates from the free software community, and amidst public speculation, the 
team decided that a new license had to be crafted for this unique situation. 
The Netscape Public License (NPL) broke new ground in attempting to strike a 
compromise between promoting free source development by commercial enterprises 
and protecting free source developers. The process of fashioning a 
next-generation Open Source license took over a month.</P>
+<P CLASS="Body">
+In another extraordinary move, when the first draft of the Netscape Public 
License (NPL) was complete it was beta-tested publicly. On March 5, a draft was 
posted in a new newsgroup called netscape.public.mozilla.license, and a request 
was made for public comment. It was met with cheers and jeers. One section of 
the license acted as a lightening rod, catching most of the flames: the portion 
of the NPL that granted Netscape special rights to use code covered by the NPL 
in other Netscape products without those products falling under the NPL. It 
also allowed Netscape to issue revised versions of the NPL, and most 
controversially, to re-license code covered by the NPL to third parties under 
terms different from the NPL. Some of the people providing feedback went so far 
as to suggest that this fact alone would make the NPL unacceptable to the Open 
Source development community. </P>
+<P CLASS="Body">
+On March 11<sup>th</sup>, a status report appeared on 
netscape.public.mozilla.license from jwz (Jamie Zawinsky). It read, in part:</P>
+<blockquote class="quote">
+First of all, THANK YOU for the incredible amount of cogent feedback you've 
been giving! It has been incredibly helpful, and rest assured, the opinions 
expressed here are being taken very seriously.</blockquote>
+<blockquote class="quote">
+Next week, you can expect to see a dramatically reworked section 5. I probably 
shouldn't comment on it too much (wouldn't want to set expectations 
incorrectly) but the message that most of you hate it as it stands now has been 
received loud and clear.</blockquote>
+<P CLASS="Body">
+On March 21<sup>st</sup>, the revision was posted. This was unprecedented. The 
reaction was incredulous: &quot;I told them it was awful and they listened! I 
can't believe it!&quot; People realized that this was a true open-source 
project, in spite of its unlikely birthplace. The discussions going on in the 
newsgroups were helping to guide the process, rather than providing commentary 
on its results. The continuing discussions took on a new tone and spirits were 
high.</P>
+<P CLASS="Body">
+The community criticism of the beta of the NPL had sent the license team back 
to the drawing board. They sought a solution that would allow Netscape to 
balance the goals of engaging free source developers while continuing to meet 
business objectives. The result was the release of a second license to work 
with the NPL, the Mozilla Public License (MozPL). The two licenses are 
identical, except that the NPL includes amendments granting Netscape additional 
rights.</P>
+<P CLASS="Body">
+All of the code initially issued on March 31, 1998 was released under the NPL, 
and all modifications to that code must be released under the NPL. New code 
developed can be released under the MozPL or any other compatible license. 
Changes to files contained in the source code are considered modifications and 
are covered by the NPL. And to resolve much of the concern expressed on the 
Net: new files that do not contain any of the original code or subsequent 
modified code are not considered modifications and are not covered by the NPL. 
This resulting code can be covered by any compatible license. The GPL is not 
compatible with the Netscape Public License or the Mozilla Public License. The 
GPL is by design incompatible with all other licenses, since it prohibits the 
addition of any restrictions or further permissions to its boundaries. All code 
developed to work with GPL software must in turn be covered by the GPL. Another 
minor point is that the GPL insists that when you distribute code covered under 
its terms, it must be complete and entire. The NPL does not have this 
condition.</P>
+<P CLASS="Body">
+The discussions on the newsgroups had brought an important issue into sharp 
relief: developers needed Netscape to allow a distinction between bug fixes and 
new code. Clearly, it's one thing to say, &quot;I'm making a bug fix, a small 
modification to your program,&quot; and quite another to realize &quot;I'm 
adding a new feature to your program.&quot; They provoke different feelings. 
Most people feel all right about giving away a bug fix, and the value of making 
a contribution is its own reward. But new code is a different story. A 
developer who has done a lot of new work doesn't want to see somebody else use 
it to make money for themselves. </P>
+<P CLASS="Body">
+The NPL and the MozPL were designed to encourage open development on the 
Mozilla code base, but from the beginning there was also another goal in mind. 
Netscape was willing to be the first large corporation to open up its 
proprietary source, because it wanted to foster wider corporate interest in 
development in open source environments. Creating an atmosphere that made it 
possible for large, profit-making organizations to adopt this model and 
participate in the movement was paramount. The legal infrastructure in most 
Open Source licensing is a big hurdle to corporate cooperation. With Mozilla, 
the license was a project unto itself. </P>
+<P CLASS="Body">
+By giving away the source code for future versions, we hoped to engage the 
entire Net community in creating new innovation in the browser market. The idea 
that there would be talented programmers worldwide hacking on our code, 
infusing the browser with their creative energy, motivated everyone to keep 
going even when the going got tough.</P>
+<H2 CLASS="HeadA">
+Mozilla.org</H2>
+<P CLASS="Body">
+People who had been involved in open-source projects before realized that the 
code had to have a place to live. The night after Netscape announced that it 
would free the source, Jamie registered a new domain name with Internic and 
drew up a chart on how distributed development projects work. Mozilla.org was 
born.</P>
+<P CLASS="Body">
+There's a pattern that all successful open-source projects follow, not 
necessarily by design. There tends to be one person or group that does 
coordination. People work on whatever aspect of the code they care about, 
scratching their own itches. At the end of the day, they have something that 
works a little better for them. But what happens a month later when a new 
version of the software comes out? Their fix is gone, and they're back to 
square one--or worse, because the software may have changed. </P>
+<P CLASS="Body">
+The result is that developers want to get their patch included in the main 
distribution. And if there's just a pile of source code floating around and a 
bunch of people working on it, eventually someone will stand up and say, 
&quot;I might as well collect a bunch of patches and do a release.&quot; When 
the next person comes along wondering how to get his patch into the next 
release, he'll say, &quot;I don't know who else to give my patch to, so I'll 
give it to that guy. He seems to be doing a good job of it.&quot; And as time 
goes by, that person becomes the maintainer. </P>
+<P CLASS="Body">
+For this open-source project, the horse was put in front of the cart. 
Mozilla.org was conceived and designed to fill the role of maintainer from the 
outset. Since the role would be filled one way or another, we decided to create 
the infrastructure to become the clearinghouse.</P>
+<P CLASS="Body">
+In the next months, mozilla.org began to set up an organization, getting 
funding and machines, posting mailing lists, and developing the underpinnings 
necessary to make it work. The mission was simply to get the organization off 
the ground and functioning. It was crucial that there be a central depot in 
operation as soon as the source code was released. And if we weren't prepared, 
in six months time, we'd be watching someone else do it. Netscape is not known 
for sitting around and watching the other guy. </P>
+<P CLASS="Body">
+Giving away the source code meant Netscape was collaborating with the Net. And 
there was a crucial concept that had to be accepted: the Netscape Client 
Product Development Group and mozilla.org were not the same organization. 
Mozilla.org's goal is to act as the coordinator for all of the people worldwide 
working on the software. Product Development's purpose is to ship 
products--Netscape products based on the Mozilla code. Since both groups are 
working on the same product, interests can overlap. But the group behind 
mozilla.org knew that it would be disastrous for the Net to look at the 
organization and say, &quot;These people only have Netscape's interests in mind 
and they're only about shipping Netscape products.&quot; This would mean that 
mozilla.org had failed in its goal to be a good maintainer. The separation had 
to be real and the Net had to know it. </P>
+<H2 CLASS="HeadA">
+Behind the Curtain</H2>
+<P CLASS="Body">
+What happens when a developer makes a change and pipes up, &quot;Hey, 
mozilla.org, please take this code?&quot; One of mozilla.org's most important 
roles is to draw lines as to what code is accepted and what is not. We must 
factor in a number of issues. First and foremost is merit. Is it good? Second, 
is it under a license that is compatible with NPL? We decided not to accept 
contributions that were not under a license compatible with NPL. Otherwise 
there would have to be separate directories, Chinese walls, and lots and lots 
of legalese for everyone involved. The potential for error goes into the 
stratosphere.</P>
+<P CLASS="Body">
+Since Mozilla is a highly modular code base, each major module, such as the 
Image Library or the XML Parser, have a designated &quot;owner.&quot; That 
person knows the code best and is the arbiter of what should go in to that 
module and what shouldn't. </P>
+<P CLASS="Body">
+Many module owners are Netscape engineers, but some are coming on board from 
the Net-at-large. When a module owner makes changes (for example, adding an API 
to the Image Library) the modifications are sent to mozilla.org for inclusion 
in distributions. If differences arise between a contributor and the module 
owner, mozilla.org performs as the arbitrator, making the final call--always 
aware that if it stops playing fair, it will be ignored and someone else will 
usurp the duties.</P>
+<P CLASS="Body">
+Mozilla.org had to contend with the fact that there would be both internal 
Netscape developers and people on the Net working on their code. The methods 
used to work on code internally had to accommodate the Web and be accessible on 
all platforms, in all time zones. This was done with &quot;tree control&quot; 
performed by the tools Bonsai and Tinderbox. </P>
+<P CLASS="Body">
+&quot;Bonsai&quot; is a tool that lets you perform queries on the contents of 
an archive. Like the front desk of a library, you can &quot;check in&quot; code 
you've worked on, or see what &quot;checkins&quot; have been made by others. In 
the background, it constantly runs the code, checking the code tree. If the 
tree breaks, it sends up a red flag, stopping further checkins until the 
problem can be identified. Logs can be pulled and problems traced to a 
particular time period. Previously used by Netscape developers in-house, it was 
erected on mozilla.org for use by developers around the world and could be used 
directly through the browser on any platform. </P>
+<P CLASS="Body">
+If you get more than ten developers together without tools, there is going to 
be an explosion. That's the theory behind &quot;Tinderbox,&quot; a program that 
keeps this potentially explosive situation under control. Tinderbox is a 
detective tool. It allows you to see what is happening in the source tree. It 
shows who checked in what (by asking Bonsai), what platforms have built 
successfully, what platforms are broken, exactly how they are broken, and the 
state of the files that made up the build so you can track down who may have 
done the damage.</P>
+<H2 CLASS="HeadA">
+April Fool's Day, 1998</H2>
+<P CLASS="Body">
+It was a week and a half before the end of March 1998, and the deadline was 
closing in fast. There was a general sense that there needed to be a party to 
celebrate the code release, but nothing had been done about it. In keeping with 
the rest of this project, the bash would become a groundbreaking event that 
invited the public into Netscape's world, shields down.</P>
+<P CLASS="Body">
+In a meeting Jamie laid out his plan to rent out a nightclub in San Francisco, 
invite the world, and broadcast it over the Net. &quot;You mean invite 
non-employees to the party? But we've never done that before!&quot; In 
character with the rest of the project, after a pause the reaction was . . . 
&quot;Why not?&quot; </P>
+<P CLASS="Body">
+The party will not soon be forgotten. Jamie rented out one of the biggest 
nightclubs in San Francisco, The Sound Factory, on the night of April 1st. DJs 
(including Apache founder Brian Behlendorf) gave away thousands of mozilla.org 
T-shirts, software, and items from NetObjects, Macromedia, Digital, Be, Wired, 
and unAmerican Activities. </P>
+<P CLASS="Body">
+When the doors opened for the &quot;Mozilla Dot Party&quot; at eight, there 
was already a line. An hour and a half later, the place was filled to its 
fire-code maximum of two thousand, and the line wrapped around the block. 
People were being waved in twenty at a time as others departed, and by the end 
of the night, over 3,500 had passed through the doors, including free software 
gurus like Brewster Kahle (founder of WAIS) and Eric Raymond. Hundreds more 
synched their watches and toasted Mozilla around the world. The virtual 
partygoers included a group of over a hundred at The Waag castle in Amsterdam, 
The Netherlands, and various individual groups in Norway, Montreal, Canada, 
Pennsylvania, North Carolina, Wisconsin, Colorado, and Alabama.</P>
+<P CLASS="Body">
+Inside, three projection screens scrolled the code at roughly sixty lines per 
second. (At that rate, the party would have had to linger more than seven hours 
to see the full million and a half lines of Mozilla code.) During the second of 
two sets played by the Kofy Brown Band (featuring a Netscape engineer), Eric 
Raymond, who had flown in from Philadelphia for the party, jumped on stage and 
surprised everyone with a flute solo. Toward the end of the night, a dozen CDs 
of the Mozilla Source Code, Signature Edition (CDs signed and numbered the 
night before by the Netscape Build Team and members of mozilla.org) were thrown 
to a lucky few in the crowd. The lizard was free!</P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="raymond2.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/opensources.s.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/opensources.s.gif
diff -N Proyectos/Mecagtk/OpenSource/opensources.s.gif
Binary files /dev/null and /tmp/cvsjTG8g7 differ

Index: Proyectos/Mecagtk/OpenSource/opensrc.css
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/opensrc.css
diff -N Proyectos/Mecagtk/OpenSource/opensrc.css
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/opensrc.css    3 Mar 2012 06:14:14 -0000       
1.1
@@ -0,0 +1,2594 @@
+A.link {
+       color: blue;
+       text-decoration: underline;
+}
+A.visited {
+       color: purple;
+       text-decoration: underline;
+}
+A.active {
+       color: red;
+       text-decoration: underline;
+}
+P.FM-ChapterTitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 24.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-HeadA {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 16.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.FM-ListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-ListBullet- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.FM-ListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 10.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-ListNumber- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 10.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.FM-ListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 10.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.FM-ListVariable {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+DT.FM-ListVariableTerm {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+DT.FM-ListVariableTermRunin {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Body {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.BodyKeep {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.BodyStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.Bulleted {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.CellBody {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.CellBodySub {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 12.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.CellCode {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: -10.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+P.CellHeading {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.CellSubheading {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H4.ChapterAuthor {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: 8.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 144.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterAuthorLeft {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: 8.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterAuthorTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 11.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+Chap-Cont.ChapterContents {
+       display: block;
+       text-align: left;
+       text-indent: -9.000000pt;
+       margin-top: 1.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 9.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H1.ChapterLabel {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 3.000229pt;
+       margin-left: 0.000000pt;
+       font-size: 6.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H1.ChapterLabelLeft {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 3.000229pt;
+       margin-left: 0.000000pt;
+       font-size: 6.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H2.ChapterSubtitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 18.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H2.ChapterSubtitleLeft {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 18.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterSubtitleTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 9.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+SampTitle.ChapterTitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 24.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+SampTitle.ChapterTitleLeft {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 24.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterTitleLOF {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ChapterTitleLOP {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ChapterTitleTab {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ChapterTitleTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 9.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+CODE.Code {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+CODE.CodeEmphasis {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.500000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+P.CodeStart {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Courier";
+}
+P.Comment {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #0000ff;
+       text-decoration: underline ;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.DialogAnswer {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.DialogQuestion {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+EM.Epigraph {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: small-caps Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+EM.Epigraph- {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: small-caps Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+EM.EpigraphAuthor {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 5.000000pt;
+       margin-bottom: 10.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+CITE.EpigraphCitation {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 11.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 162.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.EquationHolder {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ExLabel.ExampleLabel {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ExampleLabelLOP {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ExTitle.ExampleTitle {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ExampleTitle- {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ExampleTitleLOP {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureHolder {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 12.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #ff0000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+FigLabel.FigureLabel {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureLabelLOF {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+FigTitle.FigureTitle {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureTitle- {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureTitleLOF {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Footnote {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.GroupTitlesIX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 16.000000pt;
+       font-weight: Bold;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H2.HeadA {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 16.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.HeadATOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H3.HeadB {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 9.000000pt;
+       margin-bottom: 5.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.HeadBTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H4.HeadC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.HeadCTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.HeadD {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H1.Heading1, H2.Heading1, H3.Heading1, H4.Heading1, H5.Heading1, H6.Heading1 {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 14.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 14.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+H1.Heading2, H2.Heading2, H3.Heading2, H4.Heading2, H5.Heading2, H6.Heading2 {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+H1.HeadingRunIn, H2.HeadingRunIn, H3.HeadingRunIn, H4.HeadingRunIn, 
H5.HeadingRunIn, H6.HeadingRunIn {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.IgnoreCharsIX {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.Indented {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.IndexIX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.IndexLOM {
+       display: block;
+       text-align: left;
+       text-indent: -144.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 144.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Palatino";
+}
+P.Level1IX {
+       display: block;
+       text-align: left;
+       text-indent: -36.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Level1IX- {
+       display: block;
+       text-align: left;
+       text-indent: -36.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Level2IX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Level3IX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.ListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ListBullet- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.ListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ListNumber- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ListNumber-Emphasis {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+
+LI.ListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+BLOCKQUOTE.ListSimple {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.ListVariable {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.ListVariable- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DT.ListVariableTerm {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.ListVariableTermRunin {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Note {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: -48.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Note- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: -48.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Note-Code {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+P.Note-ListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Note-ListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Note-ListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.NoteTip {
+       display: block;
+       text-align: justify;
+       text-indent: -54.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: -48.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #ff0000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.NoteWarning {
+       display: block;
+       text-align: justify;
+       text-indent: -54.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: -48.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #ff0000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Numbered {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+LI.Numbered1 {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+BLOCKQUOTE.Quote {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 5.000000pt;
+       margin-bottom: 5.000000pt;
+       margin-right: 18.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 9.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.RefName {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 11.000000pt;
+       margin-bottom: 1.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 11.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefNameTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefPurpose {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 10.000000pt;
+       margin-bottom: 1.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefSectA {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefSectB {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefSynopsis {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SectionBody {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 13.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SectionContents {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 28.799988pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SectionLabel {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 96.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SectionTitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 144.000000pt;
+       font-size: 30.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SectionTitleTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SeparatorsIX {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Sidebar- {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarAuthor {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarBody {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarCode {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+LI.SidebarFootnote {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarFootnote- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarListBullet- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarListNumber- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarTitle {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 14.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SortOrderIX {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableFootnote {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableHolder {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: -10.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+TabLabel.TableLabel {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableLabelLOT {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+TabTitle.TableTitle {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+B.TableTitle- {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableTitleLOT {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H1.Title, H2.Title, H3.Title, H4.Title, H5.Title, H6.Title {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 24.000000pt;
+       margin-bottom: 12.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 18.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.FM-BleedingTab {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 11.000000pt;
+       font-weight: Bold;
+       font-style: Oblique;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Helvetica";
+}
+P.FM-BleedingTabHolder {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: -10.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FM-BleedingTabSpacer {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ContStart.FM-ChapterContentsStart {
+       display: block;
+       text-align: left;
+       text-indent: -9.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 1.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 9.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FM-DRAFT {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 180.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Helvetica";
+}
+P.FM-Footer {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: small-caps Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-Header {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: small-caps Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-NoteHead {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 5.000000pt;
+       margin-bottom: 5.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ACRONYM.Acronym {
+       vertical-align: sub;
+}
+EM.ChapterTitle {
+       font-style: Italic;
+}
+CITE.Citation {
+       font-style: Italic;
+}
+KBD.Command {
+       font-weight: Light;
+       font-style: Italic;
+       font-family: "Garamond";
+}
+EM.Email {
+       font-style: Italic;
+}
+EM.EmailAddress {
+       font-style: Italic;
+}
+EM.EmailSite {
+       font-style: Italic;
+}
+EM.Emphasis {
+       font-weight: medium;
+       font-style: Italic;
+       font-family: "Berkeley";
+}
+B.EmphasisBold {
+       font-weight: Bold;
+       font-style: Regular;
+       font-family: "Berkeley";
+}
+I.EmphasisBoldItalic {
+       font-weight: Bold;
+       font-style: Italic;
+       font-family: "Berkeley";
+}
+EM.EmphasisRoman {
+       font-style: Regular;
+}
+EM.EquationVariables {
+       font-style: Italic;
+}
+EM.Filename {
+       font-style: Italic;
+}
+EM.FirstTerm {
+       font-style: Italic;
+}
+EM.ForeignPhrase {
+       font-style: Italic;
+}
+EM.Function {
+       font-weight: medium;
+       font-style: Italic;
+}
+KBD.KeyCode {
+       font-weight: medium;
+       font-style: Regular;
+       text-decoration: none;
+       font-family: "ConstantWillison";
+}
+KBD.KeySymbol {
+       font-weight: medium;
+       font-family: "Garamond";
+}
+EM.LineAnnotation {
+       font-weight: Light;
+       font-style: Italic;
+       font-family: "Garamond";
+}
+EM.LineEmphasis {
+       font-weight: Bold;
+       font-style: Regular;
+       font-family: "ConstantWillison";
+}
+CODE.Literal {
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       font-family: "ConstantWillison";
+}
+EM.Option {
+       font-style: Italic;
+}
+I.Replaceable {
+       font-weight: medium;
+       font-style: Oblique;
+       text-decoration: none;
+       font-family: "ConstantWillison";
+}
+EM.SiteName {
+       font-weight: medium;
+       font-style: Italic;
+}
+EM.Subscript {
+       vertical-align: sub;
+}
+EM.Superscript {
+       vertical-align: super;
+}
+EM.Symbol {
+       font-family: "Symbol";
+}
+B.URL {
+       font-weight: medium;
+       font-style: Italic;
+}
+KBD.UserInput {
+       font-weight: Bold;
+       font-style: Regular;
+       font-family: "ConstantWillison";
+}
+CODE.UserInputVariable {
+       font-weight: Bold;
+       font-style: Oblique;
+       font-family: "ConstantWillison";
+}
+EM.FM-Comment {
+       text-decoration: underline ;
+}
+EM.FM-Dial {
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+EM.FM-Ding {
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ZapfDingbats";
+}
+EM.FM-Ding2 {
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ZapfDingbats";
+}
+EM.FM-List {
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+EM.FM-List9 {
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+PLAIN-TEXT.FM-MenuDelim {
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ZapfDingbats";
+}
+EM.FM-Note {
+       font-weight: medium;
+       font-style: Italic;
+       font-family: "Garamond";
+}
+EM.FM-SmallHidden {
+       font-size: 2.000000pt;
+       color: #ffffff;
+}
+EM.FM-Symbol {
+       font-family: "Symbol";
+}
+EM.FM-Times {
+       font-weight: medium;
+       font-style: Regular;
+       font-family: "Times";
+}
+EM.FM-XrefGray {
+       color: #7f7f7f;
+}

Index: Proyectos/Mecagtk/OpenSource/opensrc.css.1
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/opensrc.css.1
diff -N Proyectos/Mecagtk/OpenSource/opensrc.css.1
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/opensrc.css.1  3 Mar 2012 06:14:14 -0000       
1.1
@@ -0,0 +1,2594 @@
+A.link {
+       color: blue;
+       text-decoration: underline;
+}
+A.visited {
+       color: purple;
+       text-decoration: underline;
+}
+A.active {
+       color: red;
+       text-decoration: underline;
+}
+P.FM-ChapterTitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 24.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-HeadA {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 16.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.FM-ListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-ListBullet- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.FM-ListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 10.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-ListNumber- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 10.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.FM-ListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 10.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.FM-ListVariable {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+DT.FM-ListVariableTerm {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+DT.FM-ListVariableTermRunin {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Body {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.BodyKeep {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.BodyStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.Bulleted {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.CellBody {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.CellBodySub {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 12.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.CellCode {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: -10.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+P.CellHeading {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.CellSubheading {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H4.ChapterAuthor {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: 8.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 144.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterAuthorLeft {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: 8.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterAuthorTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 11.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+Chap-Cont.ChapterContents {
+       display: block;
+       text-align: left;
+       text-indent: -9.000000pt;
+       margin-top: 1.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 9.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H1.ChapterLabel {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 3.000229pt;
+       margin-left: 0.000000pt;
+       font-size: 6.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H1.ChapterLabelLeft {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 3.000229pt;
+       margin-left: 0.000000pt;
+       font-size: 6.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H2.ChapterSubtitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 18.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H2.ChapterSubtitleLeft {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 18.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterSubtitleTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 9.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+SampTitle.ChapterTitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 24.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+SampTitle.ChapterTitleLeft {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 24.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ChapterTitleLOF {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ChapterTitleLOP {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ChapterTitleTab {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ChapterTitleTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 9.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+CODE.Code {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+CODE.CodeEmphasis {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.500000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+P.CodeStart {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Courier";
+}
+P.Comment {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #0000ff;
+       text-decoration: underline ;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.DialogAnswer {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.DialogQuestion {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+EM.Epigraph {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: small-caps Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+EM.Epigraph- {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: small-caps Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+EM.EpigraphAuthor {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 5.000000pt;
+       margin-bottom: 10.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+CITE.EpigraphCitation {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 11.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 162.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.EquationHolder {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ExLabel.ExampleLabel {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ExampleLabelLOP {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ExTitle.ExampleTitle {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ExampleTitle- {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.ExampleTitleLOP {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureHolder {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 12.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #ff0000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+FigLabel.FigureLabel {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureLabelLOF {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+FigTitle.FigureTitle {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureTitle- {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FigureTitleLOF {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Footnote {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.GroupTitlesIX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 16.000000pt;
+       font-weight: Bold;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H2.HeadA {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 16.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.HeadATOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H3.HeadB {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 9.000000pt;
+       margin-bottom: 5.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.HeadBTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H4.HeadC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.HeadCTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.HeadD {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+H1.Heading1, H2.Heading1, H3.Heading1, H4.Heading1, H5.Heading1, H6.Heading1 {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 14.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 14.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+H1.Heading2, H2.Heading2, H3.Heading2, H4.Heading2, H5.Heading2, H6.Heading2 {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+H1.HeadingRunIn, H2.HeadingRunIn, H3.HeadingRunIn, H4.HeadingRunIn, 
H5.HeadingRunIn, H6.HeadingRunIn {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.IgnoreCharsIX {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.Indented {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.IndexIX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.IndexLOM {
+       display: block;
+       text-align: left;
+       text-indent: -144.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 144.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Palatino";
+}
+P.Level1IX {
+       display: block;
+       text-align: left;
+       text-indent: -36.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Level1IX- {
+       display: block;
+       text-align: left;
+       text-indent: -36.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Level2IX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Level3IX {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.ListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ListBullet- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+LI.ListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ListNumber- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.ListNumber-Emphasis {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+
+LI.ListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+BLOCKQUOTE.ListSimple {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.ListVariable {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.ListVariable- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DT.ListVariableTerm {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.500000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+DD.ListVariableTermRunin {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Note {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: -48.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Note- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: -48.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.Note-Code {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+P.Note-ListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Note-ListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Note-ListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 72.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.NoteTip {
+       display: block;
+       text-align: justify;
+       text-indent: -54.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: -48.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #ff0000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.NoteWarning {
+       display: block;
+       text-align: justify;
+       text-indent: -54.000000pt;
+       margin-top: 8.000000pt;
+       margin-bottom: -48.000000pt;
+       margin-right: 36.000000pt;
+       margin-left: 54.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #ff0000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Numbered {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+LI.Numbered1 {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+BLOCKQUOTE.Quote {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 5.000000pt;
+       margin-bottom: 5.000000pt;
+       margin-right: 18.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 9.500000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.RefName {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 11.000000pt;
+       margin-bottom: 1.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 11.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefNameTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefPurpose {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 10.000000pt;
+       margin-bottom: 1.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefSectA {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 12.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefSectB {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.RefSynopsis {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SectionBody {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 13.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SectionContents {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 28.799988pt;
+       margin-left: 36.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SectionLabel {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 96.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SectionTitle {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 144.000000pt;
+       font-size: 30.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SectionTitleTOC {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 2.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 13.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SeparatorsIX {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.Sidebar- {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarAuthor {
+       display: block;
+       text-align: right;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarBody {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarCode {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ConstantWillison";
+}
+LI.SidebarFootnote {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarFootnote- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 3.000000pt;
+       margin-bottom: 3.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarListBullet {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarListBullet- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarListNumber {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarListNumber- {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+LI.SidebarListNumberStart {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 4.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 18.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SidebarTitle {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 4.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 14.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.SortOrderIX {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableFootnote {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 8.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableHolder {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: -10.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+TabLabel.TableLabel {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableLabelLOT {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+TabTitle.TableTitle {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+B.TableTitle- {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 12.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.TableTitleLOT {
+       display: block;
+       text-align: left;
+       text-indent: 0.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+H1.Title, H2.Title, H3.Title, H4.Title, H5.Title, H6.Title {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 24.000000pt;
+       margin-bottom: 12.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 18.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Times";
+}
+P.FM-BleedingTab {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 11.000000pt;
+       font-weight: Bold;
+       font-style: Oblique;
+       color: #ffffff;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Helvetica";
+}
+P.FM-BleedingTabHolder {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: -10.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FM-BleedingTabSpacer {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 6.000000pt;
+       margin-bottom: 6.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ContStart.FM-ChapterContentsStart {
+       display: block;
+       text-align: left;
+       text-indent: -9.000000pt;
+       margin-top: 2.000000pt;
+       margin-bottom: 1.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 9.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+P.FM-DRAFT {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 180.000000pt;
+       font-weight: Bold;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Helvetica";
+}
+P.FM-Footer {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: small-caps Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-Header {
+       display: block;
+       text-align: justify;
+       text-indent: 0.000000pt;
+       margin-top: 0.000000pt;
+       margin-bottom: 0.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: small-caps Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Berkeley";
+}
+P.FM-NoteHead {
+       display: block;
+       text-align: center;
+       text-indent: 0.000000pt;
+       margin-top: 5.000000pt;
+       margin-bottom: 5.000000pt;
+       margin-right: 0.000000pt;
+       margin-left: 0.000000pt;
+       font-size: 10.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+ACRONYM.Acronym {
+       vertical-align: sub;
+}
+EM.ChapterTitle {
+       font-style: Italic;
+}
+CITE.Citation {
+       font-style: Italic;
+}
+KBD.Command {
+       font-weight: Light;
+       font-style: Italic;
+       font-family: "Garamond";
+}
+EM.Email {
+       font-style: Italic;
+}
+EM.EmailAddress {
+       font-style: Italic;
+}
+EM.EmailSite {
+       font-style: Italic;
+}
+EM.Emphasis {
+       font-weight: medium;
+       font-style: Italic;
+       font-family: "Berkeley";
+}
+B.EmphasisBold {
+       font-weight: Bold;
+       font-style: Regular;
+       font-family: "Berkeley";
+}
+I.EmphasisBoldItalic {
+       font-weight: Bold;
+       font-style: Italic;
+       font-family: "Berkeley";
+}
+EM.EmphasisRoman {
+       font-style: Regular;
+}
+EM.EquationVariables {
+       font-style: Italic;
+}
+EM.Filename {
+       font-style: Italic;
+}
+EM.FirstTerm {
+       font-style: Italic;
+}
+EM.ForeignPhrase {
+       font-style: Italic;
+}
+EM.Function {
+       font-weight: medium;
+       font-style: Italic;
+}
+KBD.KeyCode {
+       font-weight: medium;
+       font-style: Regular;
+       text-decoration: none;
+       font-family: "ConstantWillison";
+}
+KBD.KeySymbol {
+       font-weight: medium;
+       font-family: "Garamond";
+}
+EM.LineAnnotation {
+       font-weight: Light;
+       font-style: Italic;
+       font-family: "Garamond";
+}
+EM.LineEmphasis {
+       font-weight: Bold;
+       font-style: Regular;
+       font-family: "ConstantWillison";
+}
+CODE.Literal {
+       font-size: 9.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       font-family: "ConstantWillison";
+}
+EM.Option {
+       font-style: Italic;
+}
+I.Replaceable {
+       font-weight: medium;
+       font-style: Oblique;
+       text-decoration: none;
+       font-family: "ConstantWillison";
+}
+EM.SiteName {
+       font-weight: medium;
+       font-style: Italic;
+}
+EM.Subscript {
+       vertical-align: sub;
+}
+EM.Superscript {
+       vertical-align: super;
+}
+EM.Symbol {
+       font-family: "Symbol";
+}
+B.URL {
+       font-weight: medium;
+       font-style: Italic;
+}
+KBD.UserInput {
+       font-weight: Bold;
+       font-style: Regular;
+       font-family: "ConstantWillison";
+}
+CODE.UserInputVariable {
+       font-weight: Bold;
+       font-style: Oblique;
+       font-family: "ConstantWillison";
+}
+EM.FM-Comment {
+       text-decoration: underline ;
+}
+EM.FM-Dial {
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Italic;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+EM.FM-Ding {
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ZapfDingbats";
+}
+EM.FM-Ding2 {
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ZapfDingbats";
+}
+EM.FM-List {
+       font-size: 10.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+EM.FM-List9 {
+       font-size: 9.000000pt;
+       font-weight: Light;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "Garamond";
+}
+PLAIN-TEXT.FM-MenuDelim {
+       font-size: 8.000000pt;
+       font-weight: medium;
+       font-style: Regular;
+       color: #000000;
+       text-decoration: none;
+       vertical-align: baseline;
+       text-transform: none;
+       font-family: "ZapfDingbats";
+}
+EM.FM-Note {
+       font-weight: medium;
+       font-style: Italic;
+       font-family: "Garamond";
+}
+EM.FM-SmallHidden {
+       font-size: 2.000000pt;
+       color: #ffffff;
+}
+EM.FM-Symbol {
+       font-family: "Symbol";
+}
+EM.FM-Times {
+       font-weight: medium;
+       font-style: Regular;
+       font-family: "Times";
+}
+EM.FM-XrefGray {
+       color: #7f7f7f;
+}

Index: Proyectos/Mecagtk/OpenSource/oreilly.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/oreilly.gif
diff -N Proyectos/Mecagtk/OpenSource/oreilly.gif
Binary files /dev/null and /tmp/cvsQ7nPO9 differ

Index: Proyectos/Mecagtk/OpenSource/ose.01.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.01.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.01.gif
Binary files /dev/null and /tmp/cvssmYYsa differ

Index: Proyectos/Mecagtk/OpenSource/ose.02.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.02.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.02.gif
Binary files /dev/null and /tmp/cvsmppKAa differ

Index: Proyectos/Mecagtk/OpenSource/ose.03.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.03.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.03.gif
Binary files /dev/null and /tmp/cvssbhPFd differ

Index: Proyectos/Mecagtk/OpenSource/ose.04.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.04.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.04.gif
Binary files /dev/null and /tmp/cvsuvw7le differ

Index: Proyectos/Mecagtk/OpenSource/ose.05.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.05.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.05.gif
Binary files /dev/null and /tmp/cvs8aGy9b differ

Index: Proyectos/Mecagtk/OpenSource/ose.06.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.06.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.06.gif
Binary files /dev/null and /tmp/cvs9xesRc differ

Index: Proyectos/Mecagtk/OpenSource/ose.07.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.07.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.07.gif
Binary files /dev/null and /tmp/cvsrSQbTf differ

Index: Proyectos/Mecagtk/OpenSource/ose.08.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.08.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.08.gif
Binary files /dev/null and /tmp/cvsilGA0f differ

Index: Proyectos/Mecagtk/OpenSource/ose.09.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.09.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.09.gif
Binary files /dev/null and /tmp/cvswjSeHg differ

Index: Proyectos/Mecagtk/OpenSource/ose.10.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.10.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.10.gif
Binary files /dev/null and /tmp/cvsgOL33e differ

Index: Proyectos/Mecagtk/OpenSource/ose.11.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.11.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.11.gif
Binary files /dev/null and /tmp/cvsVli09e differ

Index: Proyectos/Mecagtk/OpenSource/ose.12.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.12.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.12.gif
Binary files /dev/null and /tmp/cvsCq6Ybi differ

Index: Proyectos/Mecagtk/OpenSource/ose.14.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.14.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.14.gif
Binary files /dev/null and /tmp/cvsqzO6Ti differ

Index: Proyectos/Mecagtk/OpenSource/ose.15.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.15.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.15.gif
Binary files /dev/null and /tmp/cvs1Eb41i differ

Index: Proyectos/Mecagtk/OpenSource/ose.16.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.16.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.16.gif
Binary files /dev/null and /tmp/cvsL3Pcoh differ

Index: Proyectos/Mecagtk/OpenSource/ose.17.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.17.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.17.gif
Binary files /dev/null and /tmp/cvsE5E65h differ

Index: Proyectos/Mecagtk/OpenSource/ose.18.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.18.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.18.gif
Binary files /dev/null and /tmp/cvsoUBpwk differ

Index: Proyectos/Mecagtk/OpenSource/ose.19.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.19.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.19.gif
Binary files /dev/null and /tmp/cvsqUfBcl differ

Index: Proyectos/Mecagtk/OpenSource/ose.20.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.20.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.20.gif
Binary files /dev/null and /tmp/cvsK39Fzj differ

Index: Proyectos/Mecagtk/OpenSource/ose.21.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.21.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.21.gif
Binary files /dev/null and /tmp/cvsLIfZGj differ

Index: Proyectos/Mecagtk/OpenSource/ose.22.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.22.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.22.gif
Binary files /dev/null and /tmp/cvs0qASpk differ

Index: Proyectos/Mecagtk/OpenSource/ose.23.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.23.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.23.gif
Binary files /dev/null and /tmp/cvsW5Nyqn differ

Index: Proyectos/Mecagtk/OpenSource/ose.24.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.24.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.24.gif
Binary files /dev/null and /tmp/cvsVTpizn differ

Index: Proyectos/Mecagtk/OpenSource/ose.25.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.25.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.25.gif
Binary files /dev/null and /tmp/cvsTkKzVl differ

Index: Proyectos/Mecagtk/OpenSource/ose.26.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.26.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.26.gif
Binary files /dev/null and /tmp/cvsF2AwCm differ

Index: Proyectos/Mecagtk/OpenSource/ose.27.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.27.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.27.gif
Binary files /dev/null and /tmp/cvsC7eiKm differ

Index: Proyectos/Mecagtk/OpenSource/ose.28.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.28.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.28.gif
Binary files /dev/null and /tmp/cvssNFqLp differ

Index: Proyectos/Mecagtk/OpenSource/ose.29.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.29.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.29.gif
Binary files /dev/null and /tmp/cvsfl4Ntq differ

Index: Proyectos/Mecagtk/OpenSource/ose.30.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.30.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.30.gif
Binary files /dev/null and /tmp/cvsbKJugo differ

Index: Proyectos/Mecagtk/OpenSource/ose.31.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.31.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.31.gif
Binary files /dev/null and /tmp/cvsYKWgXo differ

Index: Proyectos/Mecagtk/OpenSource/ose.32.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.32.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.32.gif
Binary files /dev/null and /tmp/cvs3ANu0r differ

Index: Proyectos/Mecagtk/OpenSource/ose.33.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.33.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.33.gif
Binary files /dev/null and /tmp/cvswocE8r differ

Index: Proyectos/Mecagtk/OpenSource/ose.34.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.34.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.34.gif
Binary files /dev/null and /tmp/cvs4nXUQs differ

Index: Proyectos/Mecagtk/OpenSource/ose.35.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.35.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.35.gif
Binary files /dev/null and /tmp/cvstZrOcr differ

Index: Proyectos/Mecagtk/OpenSource/ose.36.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.36.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.36.gif
Binary files /dev/null and /tmp/cvs1suukr differ

Index: Proyectos/Mecagtk/OpenSource/ose.37.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.37.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.37.gif
Binary files /dev/null and /tmp/cvspIEYnu differ

Index: Proyectos/Mecagtk/OpenSource/ose.38.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.38.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.38.gif
Binary files /dev/null and /tmp/cvsH54Fuu differ

Index: Proyectos/Mecagtk/OpenSource/ose.39.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.39.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.39.gif
Binary files /dev/null and /tmp/cvs6kN8av differ

Index: Proyectos/Mecagtk/OpenSource/ose.40.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.40.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.40.gif
Binary files /dev/null and /tmp/cvs3jyPyt differ

Index: Proyectos/Mecagtk/OpenSource/ose.41.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.41.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.41.gif
Binary files /dev/null and /tmp/cvslWrREt differ

Index: Proyectos/Mecagtk/OpenSource/ose.42.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.42.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.42.gif
Binary files /dev/null and /tmp/cvsTFZYGw differ

Index: Proyectos/Mecagtk/OpenSource/ose.43.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.43.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.43.gif
Binary files /dev/null and /tmp/cvs7J16px differ

Index: Proyectos/Mecagtk/OpenSource/ose.44.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.44.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.44.gif
Binary files /dev/null and /tmp/cvserDFxx differ

Index: Proyectos/Mecagtk/OpenSource/ose.45.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.45.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.45.gif
Binary files /dev/null and /tmp/cvsbE40Sv differ

Index: Proyectos/Mecagtk/OpenSource/ose.46.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.46.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.46.gif
Binary files /dev/null and /tmp/cvsd9CNAw differ

Index: Proyectos/Mecagtk/OpenSource/ose.47.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.47.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.47.gif
Binary files /dev/null and /tmp/cvsAyUJ4y differ

Index: Proyectos/Mecagtk/OpenSource/ose.48.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.48.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.48.gif
Binary files /dev/null and /tmp/cvsTdyBMz differ

Index: Proyectos/Mecagtk/OpenSource/ose.49.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.49.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.49.gif
Binary files /dev/null and /tmp/cvsRIbO0q differ

Index: Proyectos/Mecagtk/OpenSource/ose.50.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/ose.50.gif
diff -N Proyectos/Mecagtk/OpenSource/ose.50.gif
Binary files /dev/null and /tmp/cvszFt78q differ

Index: Proyectos/Mecagtk/OpenSource/paquin.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/paquin.gif
diff -N Proyectos/Mecagtk/OpenSource/paquin.gif
Binary files /dev/null and /tmp/cvsFVB1Pr differ

Index: Proyectos/Mecagtk/OpenSource/perens.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/perens.html
diff -N Proyectos/Mecagtk/OpenSource/perens.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/perens.html    3 Mar 2012 06:14:19 -0000       
1.1
@@ -0,0 +1,503 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Bruce Perens">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>The Open Source Definition</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">The Open Source Definition</H1>
+<H4 CLASS="ChapterAuthor" align="right">Bruce Perens</H4>
+<P CLASS="Body">
+The typical computer user owns lots of software that he bought years ago and 
no longer uses today. He may have upgraded his computer or changed brands, and 
then the program wouldn't work any longer. The software might have become 
obsolete. The program may simply not do what he needs. He may have bought two 
or more computers, and doesn't want to pay for a second copy of the software. 
Whatever the reason, the software that he paid for years ago isn't up to the 
task today. Does that really need to happen? </P>
+<P CLASS="Body">
+What if you had the right to get a free upgrade whenever your software needed 
it? What if, when you switched from a Mac to a PC, you could switch software 
versions for free? What if, when the software doesn't work or isn't powerful 
enough, you can have it improved or even fix it yourself? What if the software 
was still maintained even if the company that produced it went out of business? 
What if you could use your software on your office workstation, and your home 
desktop computer, and your portable laptop, instead of just one computer? You'd 
probably still be using the software you paid for years ago. These are some of 
the rights that <EM CLASS="technical-italic">Open Source</EM> gives you. </P>
+<P CLASS="Body">
+The <EM CLASS="technical-italic">Open Source Definition</EM> is a bill of 
rights for the computer user. It defines certain rights that a software license 
must grant you to be certified as <EM CLASS="technical-italic">Open 
Source</EM>. Those who don't make their programs Open Source are finding it 
difficult to compete with those who do, as users gain a new appreciation of 
rights they always should have had. Programs like the <EM 
CLASS="technical-italic">Linux</EM> operating system and Netscape's web browser 
have become extremely popular, displacing other software that has more 
restrictive licenses. Companies that use open-source software have the 
advantage of its very rapid development, often by several collaborating 
companies, and much of it contributed by individuals who simply need an 
improvement to serve their own needs. </P>
+<P CLASS="Body">
+The volunteers who made products like Linux possible are only there, and the 
companies are only able to cooperate, because of the rights that come with Open 
Source. The average computer programmer would feel stupid if he put lots of 
work into a program, only to have the owner of the program sell his improvement 
without giving anything back. Those same programmers feel comfortable 
contributing to Open Source because they are assured of these rights:</P>
+<UL>
+<LI CLASS="ListBullet">
+The right to make copies of the program, and distribute those copies.</LI>
+<LI CLASS="ListBullet">
+The right to have access to the software's source code, a necessary 
preliminary before you can change it.</LI>
+<LI CLASS="ListBullet">
+The right to make improvements to the program.</LI>
+</UL>
+<P CLASS="Body">
+These rights are important to the software contributor because they keep all 
contributors at the same level relative to each other. Everyone who wants to is 
allowed to sell an Open Source program, so prices will be low and development 
to reach new markets will be rapid. Anyone who invests the time to build 
knowledge in an Open Source program can support it, and this provides users 
with the option of providing their own support, or the economy of a number of 
competing support providers. Any programmer can tailor an Open Source program 
to specific markets in order to reach new customers. People who do these things 
aren't compelled to pay royalties or license fees. </P>
+<P CLASS="Body">
+The reason for the success of this somewhat communist-sounding strategy, while 
the failure of communism itself is visible around the world, is that the 
economics of information are fundamentally different from those of other 
products. There is very little cost associated with copying a piece of 
information like a computer program. The electricity involved costs less than a 
penny, and the use of the equipment not much more. In comparison, you can't 
copy a loaf of bread without a pound of flour. </P>
+<H2 CLASS="HeadA">
+History</H2>
+<P CLASS="Body">
+The concept of <EM CLASS="technical-italic">free software</EM> is an old one. 
When computers first reached universities, they were research tools. Software 
was freely passed around, and programmers were paid for the act of programming, 
not for the programs themselves. Only later on, when computers reached the 
business world, did programmers begin to support themselves by restricting the 
rights to their software and charging fees for each copy. <EM 
CLASS="technical-italic">Free Software</EM> as a <EM 
CLASS="Emphasis">politica</EM>l idea has been popularized by Richard Stallman 
since 1984, when he formed the <EM CLASS="technical-italic">Free Software 
</EM>Foundation and its GNU Project. Stallman's premise is that people should 
have more freedom, and should appreciate their freedom. He designed a set of 
rights that he felt all users should have, and codified them in the<EM 
CLASS="technical-italic"> GNU General Public License </EM>or GPL. Stallman 
punningly christened his license the <EM CLASS="technical-italic">copyleft</EM> 
because it leaves the right to copy in place. Stallman himself developed 
seminal works of free software such as the <EM CLASS="technical-italic">GNU C 
Compiler</EM>, and GNU Emacs, an editor so alluring to some that it is spoken 
of as it were a religion. His work inspired many others to contribute free 
software under the GPL. Although it is not promoted with the same libertarian 
fervor, the Open Source Definition includes many of Stallman's ideas, and can 
be considered a derivative of his work. </P>
+<P CLASS="Body">
+<EM CLASS="technical-italic">The Open Source Definition</EM> started life as a 
policy document of the <EM CLASS="technical-italic">Debian GNU/Linux 
Distribution</EM>. Debian, an early Linux system and one still popular today, 
was built entirely of free software. However, since there were other licenses 
than the copyleft that purported to be free, Debian had some problem defining 
what was free, and they had never made their free software policy clear to the 
rest of the world. I was the leader of the Debian project, at that time, and I 
addressed these problems by proposing a <EM CLASS="technical-italic">Debian 
Social Contrac</EM>t and the <EM CLASS="technical-italic">Debian Free Software 
Guidelines</EM> in July 1997. Many Debian developers had criticisms and 
improvements that I incorporated into the documents. The Social Contract 
documented Debian's intent to compose their system entirely of free software, 
and the <EM CLASS="technical-italic">Free Software Guidelines</EM> made it 
possible to classify software into free and non-free easily, by comparing the 
software license to the guidelines. </P>
+<P CLASS="Body">
+Debian's guidelines were lauded in the free software community, especially 
among Linux developers, who were working their own free software revolution at 
the time in developing the first practical free operating system. When Netscape 
decided to make their web browser free software, they contacted Eric Raymond. 
Raymond is the Margaret Meade of free software: he has written several 
anthropological articles explaining the free software phenomenon and the 
culture that has grown around it, works that are the first of their kind and 
have shown a spotlight on this formerly little-known phenomenon. Netscape 
management was impressed with Raymond's essay &quot;The Cathedral and the 
Bazaar,&quot; a chronicle of a successful free software development using 
unpaid volunteer contributors, and asked him to consult, under a non-disclosure 
agreement, while they developed a license for their free software. Raymond 
insisted that Netscape's license comply with Debian's guidelines for it to be 
taken seriously as free software. </P>
+<P CLASS="Body">
+Raymond and I had met occasionally at the <EM 
CLASS="technical-italic">Hacker's Conference</EM>, an invitation-only gathering 
of creative and unconventional programmers. We had corresponded on various 
subjects via email. He contacted me in February of 1997 with the idea for <EM 
CLASS="technical-italic">Open Source</EM>. Raymond was concerned that 
conservative business people were put off by Stallman's freedom pitch, which 
was, in contrast, very popular among the more liberal programmers. He felt this 
was stifling the development of Linux in the business world while it flourished 
in research. He met with business people in the fledgling Linux industry, and 
together they conceived of a program to market the free software concept to 
people who wore ties. Larry Augustin of VA Research and Sam Ockman (who later 
left VA to form Penguin Computing) were involved, as well as others who aren't 
known to me. </P>
+<P CLASS="Body">
+Some months before <EM CLASS="technical-italic">Open Source</EM>, I had 
conceived of the idea of <EM CLASS="technical-italic">Open Hardware</EM>, a 
similar concept but for hardware devices and their interfaces rather than 
software programs. <EM CLASS="technical-italic">Open Hardware</EM> has not been 
as successful as <EM CLASS="technical-italic">Open Source</EM> to date, but it 
is still operating and you can find information on it at <B CLASS="URL">
+http://www.openhardware.org/</B><EM CLASS="technical-italic">.</EM> </P>
+<P CLASS="Body">
+Raymond felt that the Debian Free Software Guidelines were the right document 
to define Open Source, but that they needed a more general name and the removal 
of Debian-specific references. I edited the Guidelines to form the Open Source 
Definition. I had formed a corporation for Debian called Software in the Public 
Interest, and I offered to register a trademark for Open Source so that we 
could couple its use to the definition. Raymond agreed, and I registered a 
certification mark, a special form of trademark meant to be applied to other 
people's products, on the term. About a month after I registered the mark, it 
became clear that Software in the Public Interest might not be the best home of 
the Open Source mark, and I transferred ownership of the mark to Raymond. 
Raymond and I have since formed the Open Source Initiative, an organization 
exclusively for managing the Open Source campaign and its certification mark. 
At this writing, the Open Source Initiative is governed by a six-person board 
chosen from well-known free software contributors, and seeks to expand its 
board to about ten people. </P>
+<P CLASS="Body">
+At the time of its conception there was much criticism for the <EM 
CLASS="technical-italic">Open Source </EM>campaign, even among the <EM 
CLASS="technical-italic">Linux </EM>contingent who had already bought-in to the 
free software concept. Many pointed to the existing use of the term &quot;<EM 
CLASS="technical-italic">Open Source&quot;</EM> in the political intelligence 
industry. Others felt the term &quot;<EM 
CLASS="technical-italic">Open&quot;</EM> was already overused. Many simply 
preferred the established name <EM CLASS="technical-italic">Free Software</EM>. 
I contended that the overuse of &quot;<EM 
CLASS="technical-italic">Open&quot;</EM> could never be as bad as the dual 
meaning of &quot;Free&quot; in the English language--either <EM 
CLASS="Emphasis">liberty </EM>or <EM CLASS="Emphasis">price</EM>, with price 
being the most oft-used meaning in the commercial world of computers and 
software. Richard Stallman later took exception to the campaign's lack of an 
emphasis on freedom, and the fact that as <EM CLASS="technical-italic">Open 
Source</EM> became more popular, his role in the genesis of free software, and 
that of his <EM CLASS="technical-italic">Free Software Foundation,</EM> were 
being ignored--he complained of being &quot;written out of history.&quot; This 
situation was made worse by a tendency for people in the industry to compare 
Raymond and Stallman as if they were proponents of competing philosophies 
rather than people who were using different methods to market the same concept. 
I probably exacerbated the situation by pitting Stallman and Raymond against 
each other in debates at <EM CLASS="technical-italic">Linux Expo</EM> and <EM 
CLASS="technical-italic">Open Source Expo.</EM> It became so popular to 
type-cast the two as adversaries that an email debate, never intended for 
publication, appeared the online journal <EM CLASS="Emphasis">Salon</EM>. At 
that point, I asked Raymond to tone down a dialogue that it had never been his 
intent to enter. </P>
+<P CLASS="Body">
+When the Open Source Definition was written, there were already a large number 
of products that fit the definition. The problem was with programs that did not 
meet the definition, yet were seductive to users. </P>
+<H2 CLASS="HeadA">
+KDE, <EM CLASS="technical-italic">Qt</EM>, and Troll Tech</H2>
+<P CLASS="Body">
+The case of KDE, <EM CLASS="technical-italic">Qt</EM>, and Troll Tech is 
relevant to this essay because the KDE group and Troll Tech tried to place a 
<EM CLASS="Emphasis">non-Open-Source</EM> product in the infrastructure of 
Linux, and met with unexpected resistance. Public outcry and the threat of a 
fully open-source replacement for their product eventually convinced Troll to 
switch to a fully Open Source license. It's an interesting example of the 
community's enthusiastic acceptance of the Open Source Definition that Troll 
Tech <EM CLASS="Emphasis">had</EM> to make its license comply, if their product 
was to succeed. </P>
+<P CLASS="Body">
+KDE was the first attempt at a free graphical desktop for Linux. The KDE 
applications were themselves under the GPL, but they depended on a proprietary 
graphical library called <EM CLASS="technical-italic">Qt</EM>, from <EM 
CLASS="technical-italic">Troll Tech</EM>. <EM 
CLASS="technical-italic">Qt's</EM> license terms prohibited modification or use 
with any display software other than the senescent X Window System. Other use 
required a $1,500 developer's license. <EM CLASS="technical-italic">Troll 
Tech</EM> provided versions of <EM CLASS="technical-italic">Qt </EM>for 
Microsoft Windows and the Macintosh, and this was its main revenue source. The 
pseudo-free license for X systems was meant to leverage the contributions of 
Linux developers into demos, examples, and accessories for their pricey Windows 
and Mac products.</P>
+<P CLASS="Body">
+Although the problems with the <EM CLASS="technical-italic">Qt</EM> license 
were clear, the prospect of a graphical desktop for Linux was so attractive 
that many users were willing to overlook its non-Open-Source nature. Open 
Source proponents found KDE objectionable because they perceived that the KDE 
developers were trying to blur the definition of what free software was to 
include partially-free items like <EM CLASS="technical-italic">Qt</EM>. The KDE 
developers contended that their programs were Open Source, even though there 
were no runnable versions of the programs that did not require a 
non-Open-Source library. I, and others, asserted that KDE applications were 
only Open Source fragments of non-Open-Source programs, and that an Open Source 
version of <EM CLASS="technical-italic">Qt</EM> would be necessary before KDE 
could be referred to as Open Source. </P>
+<P CLASS="Body">
+The KDE developers attempted to partially address the problem of <EM 
CLASS="technical-italic">Qt's</EM> license by negotiating a KDE Free Qt 
Foundation agreement with Troll Tech, in which Troll and KDE would jointly 
control releases of the free version of <EM CLASS="technical-italic">Qt</EM>, 
and Troll Tech would release <EM CLASS="technical-italic">Qt</EM> under an 
Open-Source-complaint license if the company was ever purchased or went out of 
business. </P>
+<P CLASS="Body">
+Another group initiated the <EM CLASS="technical-italic">GNOME</EM> project, a 
fully Open Source competitor of KDE that aimed to provide more features and 
sophistication, and a separate group initiated a Harmony project to produce a 
fully Open Source clone of <EM CLASS="technical-italic">Qt</EM> that would 
support KDE. As GNOME was being demonstrated to accolades and Harmony was about 
to become useful, Troll Tech realized <EM CLASS="technical-italic">Qt</EM> 
would not be successful in the Linux market without a change in license. Troll 
Tech released a fully Open Source license for <EM 
CLASS="technical-italic">Qt</EM>, defusing the conflict and removing the 
motivation for the Harmony project. The GNOME project continues, and now aims 
to best KDE in terms of functionality and sophistication rather than in terms 
of its license. </P>
+<P CLASS="Body">
+Before they released their new Open Source license, Troll Tech provided me 
with a copy for auditing, with the request that it be kept confidential until 
they could announce it. In my enthusiasm to make peace with the KDE group and 
in an embarrassing feat of self-deception, I pre-announced their license eight 
hours early on a KDE mailing list. That email was almost immediately picked up 
by <CITE CLASS="Citation">Slashdot</CITE><EM CLASS="Emphasis"> </EM>and other 
online news magazines, to my chagrin. </P>
+<P CLASS="Body">
+Troll Tech's new license is notable in that it takes advantage of a loophole 
in the Open Source Definition that allows patch files to be treated differently 
from other software. I would like to address this loophole in a future revision 
of the Open Source Definition, but the new text should not place <EM 
CLASS="technical-italic">Qt</EM> outside of Open Source. </P>
+<P CLASS="Body">
+At this writing, proponents of Open Source are increasing exponentially. The 
recent Open Source contributions of IBM and Ericsson have been in the 
headlines. Two Linux distributions, <EM CLASS="technical-italic">Yggdrasil</EM> 
and <EM CLASS="technical-italic">Debian</EM>, are distributing complete Linux 
system distributions, including many applications, that are entirely Open 
Source, and several others, including <EM CLASS="technical-italic">Red 
Hat,</EM> are very close. With the completion of the <EM 
CLASS="technical-italic">GNOME</EM> system, an Open Source GUI desktop OS 
capable of competing with <EM CLASS="technical-italic">Microsoft NT</EM> will 
have been realized. </P>
+<H2 CLASS="HeadA">
+Analysis of the Open Source Definition</H2>
+<P CLASS="Body">
+In this section, I'll present the entire text of the Open Source Definition, 
with commentary (in italic). You can find the canonical version of the Open 
Source Definition at <B CLASS="URL">
+http://www.opensource.org/osd.html</B>. </P>
+<P CLASS="Body">
+Pedants have pointed out minor ambiguities in the Open Source Definition. I've 
held off revising it as it's little more than a year old and I'd like people to 
consider it <EM CLASS="Emphasis">stable</EM>. The future will bring slight 
language changes, but only the most minor of changes in the <EM 
CLASS="Emphasis">intent</EM> of the document. </P>
+<H3 CLASS="HeadB">
+The Open Source Definition (Version 1.0)</H3>
+<P CLASS="Body">
+Open source doesn't just mean access to the source code. The distribution 
terms of an open-source program must comply with the following criteria: </P>
+<P CLASS="BodyEmphasis"><em>
+Note that the Open Source Definition is not itself a software license. It is a 
specification of what is permissible in a software license for that software to 
be referred to as Open Source. The Open Source Definition was not intended to 
be a legal document. The inclusion of the Open Source Definition in software 
licenses, such as a proposed license of the Linux Documentation Project, has 
tempted me to write a more rigorous version that would be appropriate for that 
use. </em></P>
+<P CLASS="BodyEmphasis"><em>
+To be Open Source, all of the terms below must be applied together, and in all 
cases. For example, they must be applied to derived versions of a program as 
well as the original program. It's not sufficient to apply some and not others, 
and it's not sufficient for the terms to only apply some of the time. After 
working through some particularly naive interpretations of the Open Source 
Definition, I feel tempted to add: this means you! </em></P>
+<OL>
+<LI CLASS="ListNumberStart">
+Free Redistribution </LI>
+<P CLASS="ListNumber-">
+The license may not restrict any party from selling or giving away the 
software as a component of an aggregate software distribution containing 
programs from several different sources. The license may not require a royalty 
or other fee for such sale. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+This means that you can make any number of copies of the software, and sell or 
give them away, and you don't have to pay anyone for that privilege. </em></P>
+<P CLASS="ListNumber-Emphasis"><em>
+The &quot;aggregate software distribution containing programs from several 
different sources&quot; was intended to fit a loophole in the Artistic License, 
a rather sloppy license in my opinion, originally designed for Perl. Today, 
almost all programs that use the Artistic License are also available under the 
GPL. That provision is thus no longer necessary, and may be removed from a 
future version of the Open Source Definition. </em></P>
+<LI CLASS="ListNumber">
+Source Code </LI>
+<P CLASS="ListNumber-">
+The program must include source code, and must allow distribution in source 
code as well as compiled form. Where some form of a product is not distributed 
with source code, there must be a well-publicized means of downloading the 
source code, without charge, via the Internet. The source code must be the 
preferred form in which a programmer would modify the program. Deliberately 
obfuscated source code is not allowed. Intermediate forms such as the output of 
a preprocessor or translator are not allowed. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+Source code is a necessary preliminary for the repair or modification of a 
program. The intent here is for source code to be distributed with the initial 
work, and all derived works. </em></P>
+<LI CLASS="ListNumber">
+Derived Works </LI>
+<P CLASS="ListNumber-">
+The license must allow modifications and derived works, and must allow them to 
be distributed under the same terms as the license of the original software. 
</P>
+<P CLASS="ListNumber-Emphasis"><em>
+Software has little use if you can't maintain it ( fix bugs, port to new 
systems, make improvements), and modification is necessary for maintenance. The 
intent here is for modification of any sort to be allowed. It must be allowed 
for a modified work to be distributed under the same license terms as the 
original work. However, it is not required that any producer of a derived work 
must use the same license terms, only that the option to do so be open to them. 
Various licenses speak differently on this subject--the BSD license allows you 
to take modifications private, while the GPL does not. </em></P>
+<P CLASS="ListNumber-Emphasis"><em>
+A concern among some software authors is that this provision could allow 
unscrupulous people to modify their software in ways that would embarrass the 
original author. They fear someone deliberately making the software perform 
incorrectly in a way that would make it look as if the author was a poor 
programmer. Others are concerned that software could be modified for criminal 
use, by the addition of Trojan horse functions or locally-banned technologies 
such as cryptography. All of these actions, however, are covered by criminal 
law. A common misunderstanding about software licenses is that they must 
specify everything, including things like &quot;don't use this software to 
commit a crime.&quot; However, no license has any valid existence outside of 
the body of civil and criminal law. Considering a license as something apart 
from the body of applicable law is as silly as considering an English-language 
document as being apart from the dictionary, in which case none of the words 
would have any defined meaning. </em></P>
+<LI CLASS="ListNumber">
+Integrity of the Author's Source Code </LI>
+<P CLASS="ListNumber-">
+The license may restrict source code from being distributed in modified form 
only if the license allows the distribution of &quot;patch files&quot; with the 
source code for the purpose of modifying the program at build time. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+Some authors were afraid that others would distribute source code with 
modifications that would be perceived as the work of the original author, and 
would reflect poorly on that author. This gives them a way to enforce a 
separation between modifications and their own work without prohibiting 
modifications. Some consider it un-aesthetic that modifications might have to 
be distributed in a separate &quot;patch&quot; file from the source code, even 
though Linux distributions like Debian and Red Hat use this procedure for all 
of the modifications they make to the programs they distribute. There are 
programs that automatically merge patches into the main source, and one can 
have these programs run automatically when extracting a source package. Thus, 
this provision should cause little or no hardship. </em></P>
+<P CLASS="ListNumber-Emphasis"><em>
+Note also that this provision says that in the case of patch files, the 
modification takes place at build-time. This loophole is employed in the Qt 
Public License to mandate a different, though less restrictive, license for the 
patch files, in contradiction of Section 3 of the Open Source Definition. There 
is a proposal to clean up this loophole in the definition while keeping Qt 
within Open Source. </em></P>
+<P CLASS="ListNumber-">
+The license must explicitly permit distribution of software built from 
modified source code. The license may require derived works to carry a 
different name or version number from the original software. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+This means that Netscape, for example, can insist that only they can name a 
version of the program Netscape Navigator(tm) while all free versions of the 
program must be called Mozilla or something else. </em></P>
+<LI CLASS="ListNumber">
+No Discrimination Against Persons or Groups </LI>
+<P CLASS="ListNumber-">
+The license must not discriminate against any person or group of persons. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+A license provided by the Regents of the University of California, Berkeley, 
prohibited an electronic design program from being used by the police of South 
Africa. While this was a laudable sentiment in the time of apartheid, it makes 
little sense today. Some people are still stuck with software that they 
acquired under that license, and their derived versions must carry the same 
restriction. Open Source licenses may not contain such provisions, no matter 
how laudable their intent. </em></P>
+<LI CLASS="ListNumber">
+No Discrimination Against Fields of Endeavor </LI>
+<P CLASS="ListNumber-">
+The license must not restrict anyone from making use of the program in a 
specific field of endeavor. For example, it may not restrict the program from 
being used in a business, or from being used for genetic research. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+Your software must be equally usable in an abortion clinic, or by an 
anti-abortion organization. These political arguments belong on the floor of 
Congress, not in software licenses. Some people find this lack of 
discrimination extremely offensive! </em></P>
+<LI CLASS="ListNumber">
+Distribution of License </LI>
+<P CLASS="ListNumber-">
+The rights attached to the program must apply to all to whom the program is 
redistributed without the need for execution of an additional license by those 
parties. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+The license must be automatic, no signature required. Unfortunately, there has 
not been a good court test in the U.S. of the power of a no-signature-required 
license when it is passed from a second party to a third. However, this 
argument considers the license in the body of contract law, while some argue 
that it should be considered as copyright law, where there is more precedent 
for no-signature licenses. A good court test will no doubt happen in the next 
few years, given the popularity of this sort of license and the booming nature 
of Open Source. </em></P>
+<LI CLASS="ListNumber">
+License Must Not Be Specific to a Product </LI>
+<P CLASS="ListNumber-">
+The rights attached to the program must not depend on the program's being part 
of a particular software distribution. If the program is extracted from that 
distribution and used or distributed within the terms of the program's license, 
all parties to whom the program is redistributed should have the same rights as 
those that are granted in conjunction with the original software distribution. 
</P>
+<P CLASS="ListNumber-Emphasis"><em>
+This means you can't restrict a product that is identified as Open Source to 
be free only if you use it with a particular brand of Linux distribution, etc. 
It must remain free if you separate it from the software distribution it came 
with. </em></P>
+<LI CLASS="ListNumber">
+License Must Not Contaminate Other Software </LI>
+<P CLASS="ListNumber-">
+The license must not place restrictions on other software that is distributed 
along with the licensed software. For example, the license must not insist that 
all other programs distributed on the same medium must be open-source software. 
</P>
+<P CLASS="ListNumber-Emphasis"><em>
+A version of GhostScript (a PostScript-rendering program) requires that the 
media on which it is distributed contain only free software programs. This 
isn't permissible for Open Source licenses. Fortunately, the GhostScript author 
distributes another (somewhat older) version of the program with a true Open 
Source license. </em></P>
+<P CLASS="ListNumber-Emphasis"><em>
+Note that there is a difference between <EM 
CLASS="EmphasisRoman">derivation</EM> and <B CLASS="EmphasisBold">
+aggregation</B>. Derivation is when a program actually incorporates part of 
another program into itself. Aggregation is when you include two programs on 
the same CD-ROM. This section of the Open Source Definition is concerned with 
aggregation<B CLASS="EmphasisBold">
+, not</B> derivation. Section 4 is concerned with derivation. </em></P>
+<LI CLASS="ListNumber">
+Example Licenses </LI>
+<P CLASS="ListNumber-">
+The GNU GPL, BSD, X Consortium, and Artistic licenses are examples of licenses 
that we consider conformant to the Open Source Definition. So is the MPL. </P>
+<P CLASS="ListNumber-Emphasis"><em>
+This would get us in trouble if any of these licenses are ever changed to be 
non-Open-Source--we'd have to issue a revision of the Open Source Definition 
immediately. It really belongs in explanatory text, not in the Open Source 
Definition itself. </em></P>
+</OL>
+<H2 CLASS="HeadA">
+Analysis of Licenses and Their Open Source Compliance</H2>
+<P CLASS="Body">
+To understand the Open Source Definition, we need to look at some common 
licensing practices as they relate to Open Source.</P>
+<H3 CLASS="HeadB">
+Public Domain</H3>
+<P CLASS="Body">
+A common misconception is that much free software is <EM 
CLASS="Emphasis">public-domain</EM>. This happens simply because the idea of 
free software or Open Source is confusing to many people, and they mistakenly 
describe these programs as public-domain because that's the closest concept 
that they understand. The programs, however, are clearly copyrighted and 
covered by a license, just a license that gives people more rights than they 
are used to. </P>
+<P CLASS="Body">
+A public-domain program is one upon which the author has deliberately 
surrendered his copyright rights. It can't really be said to come with a 
license; it's your personal property to use as you see fit. Because you can 
treat it as your personal property, you can do what you want with a 
public-domain program. You can even re-license a public-domain program, 
removing that version from the public domain, or you can remove the author's 
name and treat it as your own work. </P>
+<P CLASS="Body">
+If you are doing a lot of work on a public-domain program, consider applying 
your own copyright to the program and re-licensing it. For example, if you 
don't want a third party to make their own modifications that they then keep 
private, apply the GPL or a similar license to your version of the program. The 
version that you started with will still be in the public domain, but your 
version will be under a license that others must heed if they use it or derive 
from it. </P>
+<P CLASS="Body">
+You can easily take a public-domain program private, by declaring a copyright 
and applying your own license to it or simply declaring &quot;All Rights 
Reserved.&quot; </P>
+<H3 CLASS="HeadB">
+Free Software Licenses in General</H3>
+<P CLASS="Body">
+If you have a free software collection like a <EM CLASS="Emphasis">Linux 
</EM>disk, you may believe the programs on that disk are your property. That's 
not entirely true. Copyrighted programs are the property of the copyright 
holder, even when they have an Open Source license like the GPL. The program's 
license grants you some rights, and you have other rights under the definition 
of <EM CLASS="Emphasis">fair use</EM> in copyright law. </P>
+<P CLASS="Body">
+It's important to note that an author does not have to issue a program with 
just one license. You can GPL a program, and also sell a version of the same 
program with a commercial, non-Open-Source license. This exact strategy is used 
by many people who want to make a program Open Source and still make some money 
from it. Those who do not want an Open Source license may pay for the 
privilege, providing a revenue stream for the author. </P>
+<P CLASS="Body">
+All of the licenses we will examine have a common feature: they each disclaim 
all warranties. The intent is to protect the software owner from any liability 
connected with the program. Since the program is often being given away at no 
cost, this is a reasonable requirement--the author doesn't have a sufficient 
revenue stream from the program to fund liability insurance and legal fees. </P>
+<P CLASS="Body">
+If free-software authors lose the right to disclaim all warranties and find 
themselves getting sued over the performance of the programs that they've 
written, they'll stop contributing free software to the world. It's to our 
advantage as users to help the author protect this right. </P>
+<H3 CLASS="HeadB">
+The GNU General Public License</H3>
+<P CLASS="Body">
+Please see Appendix B for the full text of the GPL. The GPL is a political 
manifesto as well as a software license, and much of its text is concerned with 
explaining the rationale behind the license. This political dialogue has put 
some people off, and thus provided some of the reason that people have written 
other free software licenses. However, the GPL was assembled with the 
assistance of law professors, and is much better written than most of its ilk. 
I'd strongly urge that you use the GPL, or its library variant the LGPL, if you 
can. If you choose another license, or write your own, be sure about your 
reasons. People who write their own licenses should consider that this is not a 
step to be taken lightly. The unexpected complications of an ill-considered 
license can create a decades-long burden for software users. </P>
+<P CLASS="Body">
+The text of the GPL is not itself under the GPL. Its license is simple: <EM 
CLASS="Emphasis">Everyone is permitted to copy and distribute verbatim copies 
of this license document, but changing it is not allowed</EM>. An important 
point here is that the text of the licenses of Open Source software are 
generally <EM CLASS="Emphasis">not</EM> themselves Open Source. Obviously, a 
license would offer no protection if anyone could change it. </P>
+<P CLASS="Body">
+The provisions of the GPL satisfy the Open Source Definition. The GPL does not 
require any of the provisions permitted by paragraph 4 of the Open Source 
Definition, <EM CLASS="Emphasis">Integrity of the Author's Source Code</EM>. 
</P>
+<P CLASS="Body">
+The GPL does not allow you to <EM CLASS="Emphasis">take modifications 
private</EM>. Your modifications must be distributed under the GPL. Thus, the 
author of a GPL-ed program is likely to receive improvements from others, 
including commercial companies who modify his software for their own purposes. 
</P>
+<P CLASS="Body">
+The GPL doesn't allow the incorporation of a GPL-ed program into a proprietary 
program. The GPL's definition of a proprietary program is any program with a 
license that doesn't give you as many rights as the GPL. </P>
+<P CLASS="Body">
+There are a few loopholes in the GPL that allow it to be used in programs that 
are not entirely Open Source. Software libraries that are normally distributed 
with the compiler or operating system you are using may be linked with GPL-ed 
software; the result is a partially-free program. The copyright holder 
(generally the author of the program) is the person who places the GPL on the 
program and has the right to violate his own license. This was used by the KDE 
authors to distribute their programs with <EM CLASS="technical-italic">Qt</EM> 
before Troll Tech placed an Open Source license on <EM 
CLASS="Emphasis">Q</EM><EM CLASS="technical-italic">t</EM>. However, this right 
does not extend to any third parties who redistribute the program--they must 
follow all of the terms of the license, even the ones that the copyright holder 
violates, and thus it's problematical to redistribute a GPL-ed program 
containing <EM CLASS="Emphasis">Q</EM><EM CLASS="technical-italic">t</EM>. The 
KDE developers appear to be addressing this problem by applying the LGPL, 
rather than the GPL, to their software. </P>
+<P CLASS="Body">
+The political rhetoric in the GPL puts some people off. Some of them have 
chosen a less appropriate license for their software simply because they eschew 
Richard Stallman's ideas and don't want to see them repeated in their own 
software packages. </P>
+<H3 CLASS="HeadB">
+The GNU Library General Public License</H3>
+<P CLASS="Body">
+The LGPL is a derivative of the GPL that was designed for software libraries. 
Unlike the GPL, a LGPL-ed program can be incorporated into a proprietary 
program. The C-language library provided with Linux systems is an example of 
LGPL-ed software--it can be used to build proprietary programs, otherwise Linux 
would only be useful for free software authors. </P>
+<P CLASS="Body">
+An instance of an LGPL-ed program can be converted into a GPL-ed one at any 
time. Once that happens, you can't convert that instance, or anything derived 
from it, back into an LGPL-ed program. </P>
+<P CLASS="Body">
+The rest of the provisions of the LGPL are similar to those in the GPL--in 
fact, it includes the GPL by reference. </P>
+<H3 CLASS="HeadB">
+The X, BSD, and Apache Licenses</H3>
+<P CLASS="Body">
+The X license and its relatives the BSD and Apache licenses are very different 
from the GPL and LGPL. These licenses let you do nearly anything with the 
software licensed under them. This is because the software that the X and BSD 
licenses originally covered was funded by monetary grants of the U.S. 
Government. Since the U.S. citizens had already paid for the software with 
their taxes, they were granted permission to make use of that software as they 
pleased. </P>
+<P CLASS="Body">
+The most important permission, and one missing from the GPL, is that you can 
take X-licensed modifications private. In other words, you can get the source 
code for a X-licensed program, modify it, and then sell binary versions of the 
program without distributing the source code of your modifications, and without 
applying the X license to those modifications. This is still Open Source, 
however, as the Open Source Definition does not require that modifications 
always carry the original license. </P>
+<P CLASS="Body">
+Many other developers have adopted the X license and its variants, including 
the <EM CLASS="technical-italic">BSD (Berkeley System Distribution)</EM> and 
the <EM CLASS="technical-italic">Apache</EM> web server project. An annoying 
feature of the BSD license is a provision that requires you to mention 
(generally in a footnote) that the software was developed at the University of 
California any time you mention a feature of a BSD-licensed program in 
advertising. Keeping track of which software is BSD-licensed in something huge 
like a Linux distribution, and then remembering to mention the University 
whenever any of those programs are mentioned in advertising, is somewhat of a 
headache for business people. At this writing, the <EM 
CLASS="technical-italic">Debian GNU/Linux</EM> distribution contains over 2,500 
software packages, and if even a fraction of them were BSD-licensed, 
advertising for a Linux system like Debian might contain many pages of 
footnotes! However, the <EM CLASS="technical-italic">X Consortium</EM> license 
does not have that advertising provision. If you are considering using a 
BSD-style license, use the X license instead. </P>
+<H3 CLASS="HeadB">
+The Artistic License</H3>
+<P CLASS="Body">
+Although this license was originally developed for Perl, it's since been used 
for other software. It is, in my opinion, a sloppily-worded license, in that it 
makes requirements and then gives you loopholes that make it easy to bypass the 
requirements. Perhaps that's why almost all Artistic-license software is now 
dual-licensed, offering the choice of the Artistic License or the GPL. </P>
+<P CLASS="Body">
+Section 5 of the Artistic License prohibits sale of the software, yet allows 
an aggregate software distribution of more than one program to be sold. So, if 
you bundle an Artistic-licensed program with a five-line <EM 
CLASS="technical-italic">hello-world.c</EM>, you can sell the bundle. This 
feature of the Artistic License was the sole cause of the &quot;aggregate&quot; 
loophole in paragraph 1 of the Open Source Definition. As use of the Artistic 
License wanes, we are considering removing the loophole. That would make the 
<EM CLASS="technical-italic">Artistic</EM> a non-Open-Source license. This 
isn't a step we would take lightly, and there will probably be more than a year 
of consideration and debate before it happens. </P>
+<P CLASS="Body">
+The Artistic License requires you to make modifications free, but then gives 
you a loophole (in Section 7) that allows you to take modifications private or 
even place parts of the Artistic-licensed program in the public domain! </P>
+<H3 CLASS="HeadB">
+The Netscape Public License and the Mozilla Public License</H3>
+<P CLASS="Body">
+NPL was developed by Netscape when they made their product <EM 
CLASS="technical-italic">Netscape Navigator </EM>Open Source. Actually, the 
Open-Source version is called <EM CLASS="technical-italic">Mozilla</EM>; 
Netscape reserves the trademark <EM CLASS="technical-italic">Navigato</EM>r for 
their own product. Eric Raymond and I acted as unpaid consultants during the 
development of this license. I tried, unsuccessfully, to persuade Netscape to 
use the GPL, and when they declined, I helped them compose a license that would 
comply with the Open Source Definition. </P>
+<P CLASS="Body">
+An important feature of the NPL is that it contains special privileges that 
apply to Netscape and nobody else. It gives Netscape the privilege of 
re-licensing modifications that you've made to their software. They can take 
those modifications private, improve them, and refuse to give you the result. 
This provision was necessary because when Netscape decided to go Open Source, 
it had contracts with other companies that committed it to provide <EM 
CLASS="technical-italic">Navigator</EM> to them under a non-Open-Source 
license. </P>
+<P CLASS="Body">
+Netscape created the <EM CLASS="technical-italic">MPL,</EM> or <EM 
CLASS="technical-italic">Mozilla</EM> Public License, to address this concern. 
The MPL is much like the NPL, but does not contain the clause that allows 
Netscape to re-license your modifications. </P>
+<P CLASS="Body">
+The NPL and MPL allow you to take modifications private. </P>
+<P CLASS="Body">
+Many companies have adopted a variation of the MPL for their own programs. 
This is unfortunate, because the NPL was designed for the specific business 
situation that Netscape was in at the time it was written, and is not 
necessarily appropriate for others to use. It should remain the license of 
Netscape and Mozilla, and others should use the GPL or the or X licenses. </P>
+<H2 CLASS="HeadA">
+Choosing a License</H2>
+<P CLASS="Body">
+<EM CLASS="Emphasis">Do not</EM> write a new license if it is possible to use 
one of the ones listed here. The propagation of many different and incompatible 
licenses works to the detriment of Open Source software because fragments of 
one program cannot be used in another program with an incompatible license. </P>
+<P CLASS="Body">
+Steer clear of the Artistic License unless you are willing to study it 
carefully and edit out its loopholes. Then, make a few decisions: </P>
+<OL>
+<LI CLASS="ListNumberStart">
+Do you want people to be able to <EM CLASS="Emphasis">take modifications 
private</EM> or not? If you want to get the source code for modifications back 
from the people who make them, apply a license that mandates this. The GPL and 
LGPL would be good choices. If you don't mind people taking modifications 
private, use the X or Apache license. </LI>
+<LI CLASS="ListNumber">
+Do you want to allow someone to merge your program with their own proprietary 
software? If so, use the LGPL, which explicitly allows this without allowing 
people to make modifications to your own code private, or use the X or Apache 
licenses, which do allow modifications to be kept private. </LI>
+<LI CLASS="ListNumber">
+Do you want some people to be able to buy commercial-licensed versions of your 
program that are not Open Source? If so, dual-license your software. I 
recommend the GPL as the Open Source license; you can find a commercial license 
appropriate for you to use in books like <EM CLASS="Emphasis">Copyright Your 
Software</EM> from Nolo Press. </LI>
+<LI CLASS="ListNumber">
+Do you want <EM CLASS="Emphasis">everyone</EM> who uses your program to pay 
for the privilege? If so, perhaps Open Source isn't for you. If you're 
satisfied with having only some people pay you, you can work that and keep your 
program Open Source. Most of the Open Source authors consider their programs to 
be contributions to the public good, and don't care if they are paid at 
all.</LI>
+</OL>
+<P CLASS="Body">
+The table below gives a comparison of licensing practices: </P>
+<TABLE border="1">
+<TR>
+<TH ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellHeading">
+License</P>
+</TH>
+<TH ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellHeading">
+Can be mixed with non-free software</P>
+</TH>
+<TH ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellHeading">
+Modifications can be taken private and not returned to you</P>
+</TH>
+<TH ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellHeading">
+Can be<BR>
+re-licensed by anyone</P>
+</TH>
+<TH ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellHeading">
+Contains special privileges for the original copyright holder over your 
modifications</P>
+</TH>
+</TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+GPL</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+</TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+LGPL</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+</TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+BSD</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+</TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+NPL</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+</TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+MPL</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+</TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+Public Domain</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<p align="center"><b>X</b></p>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1">
+<P CLASS="CellBody">
+&nbsp;</P>
+</TD>
+</TR>
+</TABLE>
+<H2 CLASS="HeadA">
+The Future</H2>
+<P CLASS="Body">
+As this essay went to press, IBM joined the Open Source world, and the venture 
capital community is discovering Open Source. Intel and Netscape have invested 
in Red Hat, a Linux distributor. VA Research, an integrator of Linux server and 
workstation hardware, has announced an outside investor. <EM 
CLASS="technical-italic">Sendmai</EM>l Inc., created to commercialize the 
ubiquitous Sendmail e mail delivery program, has announced six million dollars 
in funding. IBM's <EM CLASS="technical-italic">Postfix</EM> secure mailer has 
an Open Source license, and another IBM product, the <EM 
CLASS="technical-italic">Jikes</EM> Java compiler, has a license that, at this 
writing, tries but doesn't quite meet the intent of the Open Source Definition. 
IBM appears to be willing to modify the Jikes license to be fully Open Source, 
and is collecting comments from the community as I write this. </P>
+<P CLASS="Body">
+Two internal Microsoft memos, referred to as the <EM 
CLASS="technical-italic">Halloween Documents</EM>, were leaked to the online 
public. These memos clearly document that Microsoft is threatened by Open 
Source and Linux, and that MS will launch an offensive against them to protect 
its markets. Obviously, we are in for some interesting times. I think we'll see 
Microsoft use two main strategies: <EM CLASS="Emphasis">copyrighted 
interfaces</EM> and <EM CLASS="Emphasis">patents</EM>. Microsoft will extend 
networking protocols, including Microsoft-specific features in them that will 
not be made available to free software. They, and other companies, will 
aggressively research new directions in computer science and will patent 
whatever they can before we can first use those techniques in free software, 
and then they'll lock us out with patent royalty fees. I've written an essay 
for the webzine <EM CLASS="Emphasis">Linux World</EM> on how to fight Open 
Source's enemies on the patent front. </P>
+<P CLASS="Body">
+The good news is that Microsoft is scared! In the second <EM 
CLASS="technical-italic">Halloween </EM>document, a Microsoft staffer writes 
about the exhilarating feeling that he could easily change part of the Linux 
system to do exactly what he wanted, and that it was so much easier to do this 
on Linux than it was for a Microsoft employee to change NT! </P>
+<P CLASS="Body">
+Efforts to hurt us from inside are the most dangerous. I think we'll also see 
more attempts to dilute the definition of Open Source to include partially-free 
products, as we saw with the <EM CLASS="technical-italic">Qt</EM> library in 
KDE before Troll Tech saw the light and released an Open Source license. 
Microsoft and others could hurt us by releasing a lot of software that's just 
free enough to attract users without having the full freedoms of Open Source. 
It's conceivable that they could kill off development of some categories of 
Open Source software by releasing a &quot;good enough,&quot; 
&quot;almost-free-enough&quot; solution. However, the strong reaction against 
the KDE project before the <EM CLASS="technical-italic">Qt</EM> library went 
fully Open Source bodes poorly for similar efforts by MS and its ilk. </P>
+<P CLASS="Body">
+We've escaped Trojan horses so far. Suppose that someone who doesn't like us 
contributes software that contains Trojan horse, a hidden way to defeat the 
security of a Linux system. Suppose, then, that this person waits for the 
Trojan-horse software to be widely distributed, and then publicizes its 
vulnerability to security exploits. The public will then have seen that our 
Open Source system may leave us more vulnerable to this sort of exploit than 
the closed system of Microsoft, and this may reduce the public's trust in Open 
Source software. We can argue that Microsoft has its share of security bugs 
even if they don't allow outsiders to insert them, and that the disclosed 
source-code model of Open Source makes these bugs easier to find. Any bug like 
this that comes up on Linux will be fixed the day after it's announced, while a 
similar bug in Windows might go undetected or unrepaired for years. But we 
still need to beef up our defense against Trojan horses. Having good 
identification of the people who submit software and modifications is our best 
defense, as it allows us to use criminal law against the perpetrators of Trojan 
horses. While I was manager of the Debian GNU/Linux distribution, we instituted 
a system for all of our software maintainers to be reliably identified, and for 
them to participate in a public-key cryptography network that would allow us to 
verify whom our software came from. This sort of system has to be expanded to 
include all Open Source developers. </P>
+<P CLASS="Body">
+We have tremendous improvements to make before Linux is ready for the average 
person to use. The graphical user interface is an obvious deficit, and the KDE 
and GNOME projects are addressing this. System administration is the next 
frontier: while <EM CLASS="Emphasis">linuxconf </EM>partially addresses this 
issue, if falls far short of being a comprehensive system-administration tool 
for the naive user. If Caldera's COAS system is successful, it could become the 
basis of a full solution to the system administration problem. However, Caldera 
has had trouble keeping sufficient resources allocated to COAS to finish its 
development, and other participants have dropped off the bandwagon due to the 
lack of progress. </P>
+<P CLASS="Body">
+The plethora of Linux distributions appear to be going through a shake-out, 
with Red Hat<EM CLASS="Emphasis"> </EM>as the perceived winner and Caldera 
coming in second. Red Hat has shown a solid commitment to the concept of Open 
Source so far, but a new president and rumors of an Initial Public Offering 
(IPO) could mean a weakening of this commitment, especially if competitors like 
Caldera, who are not nearly as concerned about Open Source, make inroads into 
Red Hat's markets. If the commitment of commercial Linux distributions to Open 
Source became a problem, that would probably spawn an effort to replace them 
with pure Open Source efforts similar to <EM CLASS="technical-italic">Debian 
GNU/Linux</EM>, but ones more directed to the commercial market than Debian has 
been. </P>
+<P CLASS="Body">
+Despite these challenges, I predict that Open Source <EM 
CLASS="Emphasis">will</EM> win. Linux has become the testbed of computer 
science students, and they will carry those systems with them into the 
workplace as they graduate. Research laboratories have adopted the Open Source 
model because the sharing of information is essential to the scientific method, 
and Open Source allows software to be shared easily. Businesses are adopting 
the Open Source model because it allows groups of companies to collaborate in 
solving a problem without the threat of an anti-trust lawsuit, and because of 
the leverage they gain when the computer-programming public contributes free 
improvements to their software. Some large corporations have adopted Open 
Source as a strategy to combat Microsoft and to assure that another Microsoft 
does not come to dominate the computer industry. But the most reliable 
indication of the future of Open Source is its past: in just a few years, we 
have gone from nothing to a robust body of software that solves many different 
problems and is reaching the million-user count. There's no reason for us to 
slow down now. </P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="tim.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/perens2.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/perens2.gif
diff -N Proyectos/Mecagtk/OpenSource/perens2.gif
Binary files /dev/null and /tmp/cvsLoBKJq differ

Index: Proyectos/Mecagtk/OpenSource/raymond.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/raymond.gif
diff -N Proyectos/Mecagtk/OpenSource/raymond.gif
Binary files /dev/null and /tmp/cvsUFbodt differ

Index: Proyectos/Mecagtk/OpenSource/raymond.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/raymond.html
diff -N Proyectos/Mecagtk/OpenSource/raymond.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/raymond.html   3 Mar 2012 06:14:20 -0000       
1.1
@@ -0,0 +1,253 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Eric S. Raymond">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>A Brief History of Hackerdom</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 CLASS="ChapterTitle" align="right">A Brief History of Hackerdom</H1>
+<H4 CLASS="ChapterAuthor" align="right">Eric S. Raymond</H4>
+<H3 CLASS="HeadA">Prologue: The Real Programmers</H3>
+<P CLASS="Body">
+In the beginning, there were Real Programmers. </P>
+<P CLASS="Body">
+That's not what they called themselves. They didn't call themselves 
&quot;hackers,&quot; either, or anything in particular; the sobriquet 
&quot;Real Programmer&quot; wasn't coined until after 1980. But from 1945 
onward, the technology of computing attracted many of the world's brightest and 
most creative minds. From Eckert and Mauchly's ENIAC onward there was a more or 
less continuous and self-conscious technical culture of enthusiast programmers, 
people who built and played with software for fun. </P>
+<P CLASS="Body">
+The Real Programmers typically came out of engineering or physics backgrounds. 
They wore white socks and polyester shirts and ties and thick glasses and coded 
in machine language and assembler and FORTRAN and half a dozen ancient 
languages now forgotten. These were the hacker culture's precursors, the 
largely unsung protagonists of its prehistory. </P>
+<P CLASS="Body">
+From the end of World War II to the early 1970s, in the great days of batch 
computing and the &quot;big iron&quot; mainframes, the Real Programmers were 
the dominant technical culture in computing. A few pieces of revered hacker 
folklore date from this era, including the well-known story of Mel (included in 
the Jargon File), various lists of Murphy's Laws, and the mock-German 
&quot;Blinkenlights&quot; poster that still graces many computer rooms. </P>
+<P CLASS="Body">
+Some people who grew up in the &quot;Real Programmer&quot;' culture remained 
active into the 1990s. Seymour Cray, designer of the Cray line of 
supercomputers, is said to have once toggled an entire operating system of his 
own design into a computer of his own design. In octal. Without an error. And 
it worked. Real Programmer macho supremo. </P>
+<P CLASS="Body">
+On a lighter note, Stan Kelly-Bootle, author of <EM CLASS="Emphasis">The 
Devil's DP Dictionary</EM> (McGraw-Hill, 1981) and folklorist extraordinaire, 
programmed on the Manchester Mark I, the first fully-operational stored-program 
digital computer, in 1948. Nowadays he writes technical humor columns for 
computing magazines which often take the form of a vigorous and knowing 
dialogue with today's hacker culture. </P>
+<P CLASS="Body">
+Others, such as David E. Lundstrom, have written anecdotal histories of those 
early years (<EM CLASS="Emphasis">A Few Good Men From UNIVAC</EM>, 1987). </P>
+<P CLASS="Body">
+What did the &quot;Real Programmer&quot; culture in was the rise of 
interactive computing, the universities, and the networks. These gave birth to 
a continuous engineering tradition that, eventually, would evolve into today's 
open-source hacker culture.</P>
+<H3 CLASS="HeadA">The Early Hackers</H3>
+<P CLASS="Body">
+The beginnings of the hacker culture as we know it today can be conveniently 
dated to 1961, the year MIT acquired the first PDP-1. The Signals and Power 
committee of MIT's Tech Model Railroad Club adopted the machine as their 
favorite tech-toy and invented programming tools, slang, and an entire 
surrounding culture that is still recognizably with us today. These early years 
have been examined in the first part of Steven Levy's book <EM 
CLASS="Emphasis">Hackers</EM> (Anchor/Doubleday, 1984).</P>
+<P CLASS="Body">
+MIT's computer culture seems to have been the first to adopt the term 
&quot;hacker.&quot; The TMRC's hackers became the nucleus of MIT's Artificial 
Intelligence Laboratory, the world's leading center of AI research into the 
early 1980s. And their influence was spread far wider after 1969, the first 
year of the ARPAnet. </P>
+<P CLASS="Body">
+The ARPAnet was the first transcontinental, high-speed computer network. It 
was built by the Defense Department as an experiment in digital communications, 
but grew to link together hundreds of universities and defense contractors and 
research laboratories. It enabled researchers everywhere to exchange 
information with unprecedented speed and flexibility, giving a huge boost to 
collaborative work and tremendously increasing both the pace and intensity of 
technological advance. </P>
+<P CLASS="Body">
+But the ARPAnet did something else as well. Its electronic highways brought 
together hackers all over the U.S. in a critical mass; instead of remaining in 
isolated small groups each developing their own ephemeral local cultures, they 
discovered (or re-invented) themselves as a networked tribe. </P>
+<P CLASS="Body">
+The first intentional artifacts of hackerdom--the first slang lists, the first 
satires, the first self-conscious discussions of the hacker ethic--all 
propagated on the ARPAnet in its early years. (The first version of the Jargon 
File, as a major example, dated from 1973.) Hackerdom grew up at the 
universities connected to the Net, especially (though not exclusively) in their 
computer science departments. </P>
+<P CLASS="Body">
+Culturally, MIT's AI Lab was first among equals from the late 1960s. But 
Stanford University's Artificial Intelligence Laboratory (SAIL) and (later) 
Carnegie-Mellon University (CMU) became nearly as important. All were thriving 
centers of computer science and AI research. All attracted bright people who 
contributed great things to hackerdom, on both the technical and folkloric 
levels. </P>
+<P CLASS="Body">
+To understand what came later, though, we need to take another look at the 
computers themselves, because the Lab's rise and its eventual fall were both 
driven by waves of change in computing technology. </P>
+<P CLASS="Body">
+Since the days of the PDP-1, hackerdom's fortunes had been woven together with 
Digital Equipment Corporation's PDP series of minicomputers. DEC pioneered 
commercial interactive computing and time-sharing operating systems. Because 
their machines were flexible, powerful, and relatively cheap for the era, lots 
of universities bought them. </P>
+<P CLASS="Body">
+Cheap time sharing was the medium the hacker culture grew in, and for most of 
its lifespan the ARPAnet was primarily a network of DEC machines. The most 
important of these was the PDP-10, first released in 1967. The 10 remained 
hackerdom's favorite machine for almost fifteen years; TOPS-10 (DEC's operating 
system for the machine) and MACRO-10 (its assembler) are still remembered with 
nostalgic fondness in a great deal of slang and folklore. </P>
+<P CLASS="Body">
+MIT, though it used the same PDP-10's as everyone else, took a slightly 
different path; they rejected DEC's software for the PDP-10 entirely and built 
their own operating system, the fabled ITS. </P>
+<P CLASS="Body">
+ITS stood for &quot;Incompatible Timesharing System,&quot; which gives one a 
pretty good fix on their attitude. They wanted it their way. Fortunately for 
all, MIT's people had the intelligence to match their arrogance. ITS, quirky 
and eccentric and occasionally buggy though it always was, hosted a brilliant 
series of technical innovations and still arguably holds the record for 
time-sharing system in longest continuous use. </P>
+<P CLASS="Body">
+ITS itself was written in assembler, but many ITS projects were written in the 
AI language LISP. LISP was far more powerful and flexible than any other 
language of its day; in fact, it is still a better design than most languages 
of today, twenty-five years later. LISP freed ITS's hackers to think in unusual 
and creative ways. It was a major factor in their successes, and remains one of 
hackerdom's favorite languages. </P>
+<P CLASS="Body">
+Many of the ITS culture's technical creations are still alive today; the Emacs 
program editor is perhaps the best-known. And much of ITS's folklore is still 
&quot;live&quot; to hackers, as one can see in the Jargon File.<A 
HREF="#footnote-1" CLASS="footnote">[1]</A>
+</P>
+<P CLASS="Body">
+SAIL and CMU weren't asleep, either. Many of the cadre of hackers that grew up 
around SAIL's PDP-10 later became key figures in the development of the 
personal computer and today's window/icon/mouse software interfaces. And 
hackers at CMU were doing the work that would lead to the first practical 
large-scale applications of expert systems and industrial robotics. </P>
+<P CLASS="Body">
+Another important node of the culture was Xerox PARC, the famed Palo Alto 
Research Center. For more than a decade, from the early 1970s into the 
mid-1980s, PARC yielded an astonishing volume of groundbreaking hardware and 
software innovations. The modern mice, windows, and icons style of software 
interface was invented there. So was the laser printer, and the local-area 
network; and PARC's series of D machines anticipated the powerful personal 
computers of the 1980s by a decade. Sadly, these prophets were without honor in 
their own company; so much so that it became a standard joke to describe PARC 
as a place characterized by developing brilliant ideas for everyone else. Their 
influence on hackerdom was pervasive. </P>
+<P CLASS="Body">
+The ARPAnet and the PDP-10 cultures grew in strength and variety throughout 
the 1970s. The facilities for electronic mailing lists that had been used to 
foster cooperation among continent-wide special-interest groups were 
increasingly also used for more social and recreational purposes. DARPA 
deliberately turned a blind eye to all the technically &quot;unauthorized&quot; 
activity; it understood that the extra overhead was a small price to pay for 
attracting an entire generation of bright young people into the computing 
field. </P>
+<P CLASS="Body">
+Perhaps the best-known of the &quot;social&quot; ARPAnet mailing lists was the 
SF-LOVERS list for science-fiction fans; it is still very much alive today, in 
fact, on the larger &quot;Internet&quot; that ARPAnet evolved into. But there 
were many others, pioneering a style of communication that would later be 
commercialized by for-profit time-sharing services like CompuServe, GEnie, and 
Prodigy. </P>
+<H3 CLASS="HeadA">The Rise of Unix</H3>
+<P CLASS="Body">
+Meanwhile, however, off in the wilds of New Jersey, something else had been 
going on since 1969 that would eventually overshadow the PDP-10 tradition. The 
year of ARPAnet's birth was also the year that a Bell Labs hacker named Ken 
Thompson invented Unix. </P>
+<P CLASS="Body">
+Thompson had been involved with the development work on a time-sharing OS 
called Multics, which shared common ancestry with ITS. Multics was a test-bed 
for some important ideas about how the complexity of an operating system could 
be hidden inside it, invisible to the user and even to most programmers. The 
idea was to make using Multics from the outside (and programming for it!) much 
simpler, so that more real work could get done. </P>
+<P CLASS="Body">
+Bell Labs pulled out of the project when Multics displayed signs of bloating 
into an unusable white elephant (the system was later marketed commercially by 
Honeywell but never became a success). Ken Thompson missed the Multics 
environment, and began to play at implementing a mixture of its ideas and some 
of his own on a scavenged DEC PDP-7. </P>
+<P CLASS="Body">
+Another hacker named Dennis Ritchie invented a new language called 
&quot;C&quot; for use under Thompson's embryonic Unix. Like Unix, C was 
designed to be pleasant, unconstraining, and flexible. Interest in these tools 
spread at Bell Labs, and they got a boost in 1971 when Thompson and Ritchie won 
a bid to produce what we'd now call an office-automation system for internal 
use there. But Thompson and Ritchie had their eye on a bigger prize. </P>
+<P CLASS="Body">
+Traditionally, operating systems had been written in tight assembler to 
extract the absolute highest efficiency possible out of their host machines. 
Thompson and Ritchie were among the first to realize that hardware and compiler 
technology had become good enough that an entire operating system could be 
written in C, and by 1974 the whole environment had been successfully ported to 
several machines of different types. </P>
+<P CLASS="Body">
+This had never been done before, and the implications were enormous. If Unix 
could present the same face, the same capabilities, on machines of many 
different types, it could serve as a common software environment for all of 
them. No longer would users have to pay for complete new designs of software 
every time a machine went obsolete. Hackers could carry around software 
toolkits between different machines, rather than having to re-invent the 
equivalents of fire and the wheel every time. </P>
+<P CLASS="Body">
+Besides portability, Unix and C had some other important strengths. Both were 
constructed from a &quot;Keep It Simple, Stupid&quot; philosophy. A programmer 
could easily hold the entire logical structure of C in his head (unlike most 
other languages before or since) rather than needing to refer constantly to 
manuals; and Unix was structured as a flexible toolkit of simple programs 
designed to combine with each other in useful ways. </P>
+<P CLASS="Body">
+The combination proved to be adaptable to a very wide range of computing 
tasks, including many completely unanticipated by the designers. It spread very 
rapidly within AT&amp;T, in spite of the lack of any formal support program for 
it. By 1980, it had spread to a large number of university and research 
computing sites, and thousands of hackers considered it home. </P>
+<P CLASS="Body">
+The workhorse machines of the early Unix culture were the PDP-11 and its 
descendant, the VAX. But because of Unix's portability, it ran essentially 
unaltered on a wider range of machines than one could find on the entire 
ARPAnet. And nobody used assembler; C programs were readily portable among all 
these machines. </P>
+<P CLASS="Body">
+Unix even had its own networking, of sorts--Unix-to-Unix Copy Protocol (UUCP): 
low-speed and unreliable, but cheap. Any two Unix machines could exchange 
point-to-point electronic mail over ordinary phone lines; this capability was 
built into the system, not an optional extra. Unix sites began to form a 
network nation of their own, and a hacker culture to go with it. In 1980, the 
first Usenet board that would quickly grow bigger than ARPAnet. </P>
+<P CLASS="Body">
+A few Unix sites were on the ARPAnet themselves. The PDP-10 and Unix cultures 
began to meet and mingle at the edges, but they didn't mix very well at first. 
The PDP-10 hackers tended to consider the Unix crowd a bunch of upstarts, using 
tools that looked ridiculously primitive when set against the baroque, lovely 
complexities of LISP and ITS. &quot;Stone knives and bearskins!&quot; they 
muttered. </P>
+<P CLASS="Body">
+And there was yet a third current flowing. The first personal computer had 
been marketed in 1975. Apple was founded in 1977, and advances came with almost 
unbelievable rapidity in the years that followed. The potential of 
microcomputers was clear, and attracted yet another generation of bright young 
hackers. Their language was BASIC, so primitive that PDP-10 partisans and Unix 
aficionados both considered it beneath contempt. </P>
+<H3 CLASS="HeadA">The End of Elder Days</H3>
+<P CLASS="Body">
+So matters stood in 1980: three cultures, overlapping at the edges but 
organized around very different technologies. The ARPAnet/PDP-10 culture, 
wedded to LISP and MACRO and TOPS-10 and ITS. The Unix and C crowd with their 
PDP-11s and VAXen and pokey telephone connections. And an anarchic horde of 
early microcomputer enthusiasts bent on taking computer power to the people. 
</P>
+<P CLASS="Body">
+Among these, the ITS culture could still claim pride of place. But storm 
clouds were gathering over the Lab. The PDP-10 technology ITS depended on was 
aging, and the Lab itself was split into factions by the first attempts to 
commercialize AI technology. Some of the Lab's (and SAIL's and CMU's) best were 
lured away to high-paying jobs at startup companies. </P>
+<P CLASS="Body">
+The death blow came in 1983, when DEC cancelled its follow-on to the PDP-10 in 
order to concentrate on the PDP-11 and VAX lines. ITS no longer had a future. 
Because it wasn't portable, it was more effort than anyone could afford to move 
ITS to new hardware. The Berkeley variant of Unix running on a VAX became the 
hacking system par excellence, and anyone with an eye on the future could see 
that microcomputers were growing in power so rapidly that they were likely to 
sweep all before them. </P>
+<P CLASS="Body">
+It was around this time that Levy wrote <EM CLASS="Emphasis">Hackers</EM>. One 
of his prime informants was Richard M. Stallman (inventor of Emacs), a leading 
figure at the Lab and its most fanatical holdout against the commercialization 
of Lab technology. </P>
+<P CLASS="Body">
+Stallman (who is usually known by his initials and login name, RMS) went on to 
form the Free Software Foundation and dedicate himself to producing 
high-quality free software. Levy eulogized him as &quot;the last true 
hacker,&quot; a description that happily proved incorrect. </P>
+<P CLASS="Body">
+Stallman's grandest scheme neatly epitomized the transition hackerdom 
underwent in the early 80s--in 1982 he began the construction of an entire 
clone of Unix, written in C and available for free. Thus, the spirit and 
tradition of ITS was preserved as an important part of the newer, Unix- and 
VAX-centered hacker culture. </P>
+<P CLASS="Body">
+It was also around this time that microchip and local-area network technology 
began to have a serious impact on hackerdom. Ethernet and the Motorola 68000 
microchip made a potentially potent combination, and several different startups 
had been formed to build the first generation of what we now call workstations. 
</P>
+<P CLASS="Body">
+In 1982, a group of Unix hackers from Berkeley founded Sun Microsystems on the 
belief that Unix running on relatively inexpensive 68000-based hardware would 
prove a winning combination for a wide variety of applications. They were 
right, and their vision set the pattern for an entire industry. While still 
priced out of reach of most individuals, workstations were cheap for 
corporations and universities; networks of them (one to a user) rapidly 
replaced the older VAXes and other timesharing systems. </P>
+<H3 CLASS="HeadA">The Proprietary Unix Era</H3>
+<P CLASS="Body">
+By 1984, when AT&amp;T divested and Unix became a commercial product for the 
first time, the most important fault line in hackerdom was between a relatively 
cohesive &quot;network nation&quot; centered around the Internet and Usenet 
(and mostly using minicomputer- or workstation-class machines running Unix), 
and a vast disconnected hinterland of microcomputer enthusiasts. </P>
+<P CLASS="Body">
+The workstation-class machines built by Sun and others opened up new worlds 
for hackers. They were built to do high-performance graphics and pass around 
shared data over a network. During the 1980s, hackerdom was preoccupied by the 
software and tool-building challenges of getting the most use out of these 
features. Berkeley Unix developed built-in support for the ARPAnet protocols, 
which offered a solution to the networking problem and encouraged further 
growth of the Internet. </P>
+<P CLASS="Body">
+There were several attempts to tame workstation graphics. The one that 
prevailed was the X Window System. A critical factor in its success was that 
the X developers were willing to give the sources away for free in accordance 
with the hacker ethic, and were able to distribute them over the Internet. X's 
victory over proprietary graphics systems (including one offered by Sun itself) 
was an important harbinger of changes which, a few years later, would 
profoundly affect Unix itself. </P>
+<P CLASS="Body">
+There was a bit of factional spleen still vented occasionally in the ITS/Unix 
rivalry (mostly from the ex-ITSers' side). But the last ITS machine shut down 
for good in 1990; the zealots no longer had a place to stand and mostly 
assimilated to the Unix culture with various degrees of grumbling. </P>
+<P CLASS="Body">
+Within networked hackerdom itself, the big rivalry of the 1980s was between 
fans of Berkeley Unix and the AT&amp;T versions. Occasionally you can still 
find copies of a poster from that period, showing a cartoony X-wing fighter out 
of the <EM CLASS="Emphasis">Star Wars</EM> movies streaking away from an 
exploding Death Star patterned on the AT&amp;T logo. Berkeley hackers liked to 
see themselves as rebels against soulless corporate empires. AT&amp;T Unix 
never caught up with BSD/Sun in the marketplace, but it won the standards wars. 
By 1990, AT&amp;T and BSD versions were becoming harder to tell apart, having 
adopted many of each others' innovations. </P>
+<P CLASS="Body">
+As the 1990s opened, the workstation technology of the previous decade was 
beginning to look distinctly threatened by newer, low-cost and high-performance 
personal computers based on the Intel 386 chip and its descendants. For the 
first time, individual hackers could afford to have home machines comparable in 
power and storage capacity to the minicomputers of ten years earlier--Unix 
engines capable of supporting a full development environment and talking to the 
Internet. </P>
+<P CLASS="Body">
+The MS-DOS world remained blissfully ignorant of all this. Though those early 
microcomputer enthusiasts quickly expanded to a population of DOS and Mac 
hackers orders of magnitude greater than that of the &quot;network nation&quot; 
culture, they never become a self-aware culture themselves. The pace of change 
was so fast that fifty different technical cultures grew and died as rapidly as 
mayflies, never achieving quite the stability necessary to develop a common 
tradition of jargon, folklore, and mythic history. The absence of a really 
pervasive network comparable to UUCP or the Internet prevented them from 
becoming a network nation themselves. Widespread access to commercial online 
services like CompuServe and Genie was beginning to take hold, but the fact 
that non-Unix operating systems don't come bundled with development tools meant 
that very little source was passed over them. Thus, no tradition of 
collaborative hacking developed. </P>
+<P CLASS="Body">
+The mainstream of hackerdom, (dis)organized around the Internet and by now 
largely identified with the Unix technical culture, didn't care about the 
commercial services. They wanted better tools and more Internet, and cheap 
32-bit PCs promised to put both in everyone's reach. </P>
+<P CLASS="Body">
+But where was the software? Commercial Unixes remained expensive, in the 
multiple-kilobuck range. In the early 1990s, several companies made a go at 
selling AT&amp;T or BSD Unix ports for PC-class machines. Success was elusive, 
prices didn't come down much, and (worst of all) you didn't get modifiable and 
redistributable sources with your operating system. The traditional 
software-business model wasn't giving hackers what they wanted. </P>
+<P CLASS="Body">
+Neither was the Free Software Foundation. The development of HURD, RMS's 
long-promised free Unix kernel for hackers, got stalled for years and failed to 
produce anything like a usable kernel until 1996 (though by 1990 FSF supplied 
almost all the other difficult parts of a Unix-like operating system). </P>
+<P CLASS="Body">
+Worse, by the early 1990s it was becoming clear that ten years of effort to 
commercialize proprietary Unix was ending in failure. Unix's promise of 
cross-platform portability got lost in bickering among half a dozen proprietary 
Unix versions. The proprietary-Unix players proved so ponderous, so blind, and 
so inept at marketing that Microsoft was able to grab away a large part of 
their market with the shockingly inferior technology of its Windows OS. </P>
+<P CLASS="Body">
+In early 1993, a hostile observer might have had grounds for thinking that the 
Unix story was almost played out, and with it the fortunes of the hacker tribe. 
And there was no shortage of hostile observers in the computer trade press, 
many of whom had been ritually predicting the imminent death of Unix at 
six-month intervals ever since the late 1970s. </P>
+<P CLASS="Body">
+In those days it was conventional wisdom that the era of individual 
techno-heroism was over, that the software industry and the nascent Internet 
would increasingly be dominated by colossi like Microsoft. The first generation 
of Unix hackers seemed to be getting old and tired (Berkeley's Computer Science 
Research group ran out of steam and lost its funding in 1994). It was a 
depressing time. </P>
+<P CLASS="Body">
+Fortunately, there had been things going on out of sight of the trade press, 
and out of sight even of most hackers, that would produce startlingly positive 
developments in later 1993 and 1994. Eventually, these would take the culture 
in a whole new direction and to undreamed-of successes.</P>
+<H3 CLASS="HeadA">The Early Free Unixes</H3>
+<P CLASS="Body">
+Into the gap left by the HURD's failure had stepped a Helsinki University 
student named Linus Torvalds. In 1991 he began developing a free Unix kernel 
for 386 machines using the Free Software Foundation's toolkit. His initial, 
rapid success attracted many Internet hackers to help him develop Linux, a 
full-featured Unix with entirely free and redistributable sources. </P>
+<P CLASS="Body">
+Linux was not without competitors. In 1991, contemporaneously with Linus 
Torvalds's early experiments, William and Lynne Jolitz were experimentally 
porting the BSD Unix sources to the 386. Most observers comparing BSD 
technology with Linus's crude early efforts expected that BSD ports would 
become the most important free Unixes on the PC. </P>
+<P CLASS="Body">
+The most important feature of Linux, however, was not technical but 
sociological. Until the Linux development, everyone believed that any software 
as complex as an operating system had to be developed in a carefully 
coordinated way by a relatively small, tightly-knit group of people. This model 
was and still is typical of both commercial software and the great freeware 
cathedrals built by the Free Software Foundation in the 1980s; also of the 
freeBSD/netBSD/OpenBSD projects that spun off from the Jolitzes' original 
386BSD port. </P>
+<P CLASS="Body">
+Linux evolved in a completely different way. From nearly the beginning, it was 
rather casually hacked on by huge numbers of volunteers coordinating only 
through the Internet. Quality was maintained not by rigid standards or 
autocracy but by the naively simple strategy of releasing every week and 
getting feedback from hundreds of users within days, creating a sort of rapid 
Darwinian selection on the mutations introduced by developers. To the amazement 
of almost everyone, this worked quite well. </P>
+<P CLASS="Body">
+By late 1993, Linux could compete on stability and reliability with many 
commercial Unixes, and hosted vastly more software. It was even beginning to 
attract ports of commercial applications software. One indirect effect of this 
development was to kill off most of the smaller commercial Unix 
vendors--without developers and hackers to sell to, they folded. One of the few 
survivors, BSDI (Berkeley Systems Design, Incorporated), flourished by offering 
full sources with its BSD-based Unix and cultivating close ties with the hacker 
community. </P>
+<P CLASS="Body">
+These developments were not much remarked on at the time even within the 
hacker culture, and not at all outside it. The hacker culture, defying repeated 
predictions of its demise, was just beginning to remake the commercial-software 
world in its own image. It would be five more years, however, before this trend 
became obvious. </P>
+<H3 CLASS="HeadA">The Great Web Explosion</H3>
+<P CLASS="Body">
+The early growth of Linux synergized with another phenomenon: the public 
discovery of the Internet. The early 1990s also saw the beginnings of a 
flourishing Internet-provider industry, selling connectivity to the public for 
a few dollars a month. Following the invention of the World Wide Web, the 
Internet's already-rapid growth accelerated to a breakneck pace. </P>
+<P CLASS="Body">
+By 1994, the year Berkeley's Unix development group formally shut down, 
several different free Unix versions (Linux and the descendants of 386BSD) 
served as the major focal points of hacking activity. Linux was being 
distributed commercially on CD-ROM and selling like hotcakes. By the end of 
1995, major computer companies were beginning to take out glossy advertisements 
celebrating the Internet-friendliness of their software and hardware! </P>
+<P CLASS="Body">
+In the late 1990s the central activities of hackerdom became Linux development 
and the mainstreaming of the Internet. The World Wide Web has at last made the 
Internet into a mass medium, and many of the hackers of the 1980s and early 
1990s launched Internet Service Providers selling or giving access to the 
masses. </P>
+<P CLASS="Body">
+The mainstreaming of the Internet has even brought the hacker culture the 
beginnings of mainstream respectability and political clout. In 1994 and 1995, 
hacker activism scuppered the Clipper proposal, which would have put strong 
encryption under government control. In 1996 hackers mobilized a broad 
coalition to defeat the misnamed &quot;Communications Decency Act&quot; (CDA) 
and prevent censorship of the Internet. </P>
+<P CLASS="Body">
+With the CDA victory, we pass out of history into current events. We also pass 
into a period in which your historian became an actor rather than just an 
observer. This narrative will continue in &quot;The Revenge of the 
Hackers.&quot;</P>
+<blockquote class="quote">
+<A NAME="pgfId=215"></A>
+All governments are more or less combinations against the people . . . and as 
rulers have no more virtue than the ruled. . . the power of government can only 
be kept within its constituted bounds by the display of a power equal to 
itself, the collected sentiment of the people.
+<p align="right">
+<CITE CLASS="Citation">--Benjamin Franklin Bache, in a Philadelphia Aurora 
editorial, 1794</CITE></p></blockquote>
+<HR>
+<P CLASS="Footnote"><A NAME="footnote-1"></A>
+1. <a href="http://www.tuxedo.org";>http://www.tuxedo.org</a></P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="kirkmck.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/raymond2.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/raymond2.html
diff -N Proyectos/Mecagtk/OpenSource/raymond2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/raymond2.html  3 Mar 2012 06:14:20 -0000       
1.1
@@ -0,0 +1,339 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Eric S. Raymond">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources
+: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>The Revenge of the Hackers</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">The Revenge of the Hackers</H1>
+<H4 CLASS="ChapterAuthor" align="right">Eric S. Raymond</H4>
+<P CLASS="Body">
+I wrote the first version of &quot;A Brief History of Hackerdom&quot; in 1996 
as a web resource. I had been fascinated by hacker culture <EM 
CLASS="Emphasis">as</EM> a culture for many years, since long before I edited 
the first edition of <EM CLASS="Emphasis">The New Hacker's Dictionary</EM> in 
1990. By late 1993, many people (including myself) had come to think of me as 
the hacker culture's tribal historian and resident ethnographer. I was 
comfortable in that role. </P>
+<P CLASS="Body">
+At that time, I hadn't the faintest idea that my amateur anthropologizing 
could itself become a significant catalyst for change. I think nobody was more 
surprised than I when that happened. But the consequences of that surprise are 
still reverberating through the hacker culture and the technology and business 
worlds today. </P>
+<P CLASS="Body">
+In this essay, I'll recapitulate from my personal point of view the events 
that immediately led up to the January 1998 &quot;shot heard `round the 
world&quot; of the open-source revolution. I'll reflect on the remarkable 
distance we've come since. Then I will tentatively offer some projections into 
the future. </P>
+<H2 CLASS="HeadA">
+Beyond Brooks's Law </H2>
+<P CLASS="Body">
+My first encounter with Linux came in late 1993, via the pioneering Yggdrasil 
CD-ROM distribution. By that time, I had already been involved in the hacker 
culture for fifteen years. My earliest experiences had been with the primitive 
ARPAnet of the late 1970s; I was even briefly a tourist on the ITS machines. I 
had already been writing free software and posting it to Usenet before the Free 
Software Foundation was launched in 1984, and was one of the FSF's first 
contributors. I had just published the second edition of <EM 
CLASS="Emphasis">The New Hacker's Dictionary</EM>. I thought I understood the 
hacker culture--and its limitations--pretty well. </P>
+<P CLASS="Body">
+Encountering Linux was a shock. Even though I had been active in the hacker 
culture for many years, I still carried in my head the unexamined assumption 
that hacker amateurs, gifted though they might be, could not possibly muster 
the resources or skill necessary to produce a usable multitasking operating 
system. The HURD developers, after all, had been evidently failing at this for 
a decade. </P>
+<P CLASS="Body">
+But where they had failed, Linus Torvalds and his community had succeeded. And 
they did not merely fulfill the minimum requirements of stability and 
functioning Unix interfaces. No. They blew right past that criterion with 
exuberance and flair, providing hundreds of megabytes of programs, documents, 
and other resources. Full suites of Internet tools, desktop-publishing 
software, graphics support, editors, games--you name it. </P>
+<P CLASS="Body">
+Seeing this feast of wonderful code spread in front of me as a working system 
was a much more powerful experience than merely knowing, intellectually, that 
all the bits were probably out there. It was as though for years I'd been 
sorting through piles of disconnected car parts--only to be suddenly confronted 
with those same parts assembled into a gleaming red Ferrari, door open, keys 
swinging from the lock, and engine gently purring with a promise of power. . . 
. </P>
+<P CLASS="Body">
+The hacker tradition I had been observing for two decades seemed suddenly 
alive in a vibrant new way. In a sense, I had already been made part of this 
community, for several of my personal free-software projects had been added to 
the mix. But I wanted to get in deeper, because every delight I saw also 
deepened my puzzlement. It was too good! </P>
+<P CLASS="Body">
+The lore of software engineering is dominated by Brooks's Law, which predicts 
that as your <EM CLASS="Emphasis">N</EM> number of programmers rises, work 
performed scales as <EM CLASS="Emphasis">N</EM> but complexity and 
vulnerability to bugs rises as <EM CLASS="Emphasis">N</EM>-squared. <EM 
CLASS="Emphasis">N</EM>-squared is the number of communications paths (and 
potential code interfaces) between developers' code bases. </P>
+<P CLASS="Body">
+Brooks's Law predicts that a project with thousands of contributors ought to 
be a flaky, unstable mess. Somehow the Linux community had beaten the <EM 
CLASS="Emphasis">N</EM>-squared effect and produced an OS of astonishingly high 
quality. I was determined to understand how they did it. </P>
+<P CLASS="Body">
+It took me three years of participation and close observation to develop a 
theory, and another year to test it experimentally. And then I sat down and 
wrote &quot;The Cathedral and the Bazaar&quot; (CatB)<A HREF="#footnote-1" 
CLASS="footnote">[1]</A> to explain what I had seen. </P>
+<H2 CLASS="HeadA">
+Memes and Mythmaking</H2>
+<P CLASS="Body">
+What I saw around me was a community which had evolved the most effective 
software-development method ever <EM CLASS="Emphasis">and didn't know it</EM>! 
That is, an effective practice had evolved as a set of customs, transmitted by 
imitation and example, without the theory or language to explain why the 
practice worked. </P>
+<P CLASS="Body">
+In retrospect, lacking that theory and that language hampered us in two ways. 
First, we couldn't think systematically about how to improve our own methods. 
Second, we couldn't explain or sell the method to anyone else. </P>
+<P CLASS="Body">
+At the time, I was only thinking about the first effect. My only intention in 
writing the paper was to give the hacker culture an appropriate language to use 
internally, to explain itself to itself. So I wrote down what I had seen, 
framed as a narrative and with appropriately vivid metaphors to describe the 
logic that could be deduced behind the customs. </P>
+<P CLASS="Body">
+There was no really fundamental discovery in CatB. I did not invent any of the 
methods it describes. What is novel in that paper is not the facts but those 
metaphors and the narrative--a simple, powerful story that encouraged the 
reader to see the facts in a new way. I was attempting a bit of memetic 
engineering on the hacker culture's generative myths. </P>
+<P CLASS="Body">
+I first gave the full paper at Linux Kongress, in May 1997 in Bavaria. The 
fact that it was received with rapt attention and thunderous applause by an 
audience in which there were very few native speakers of English seemed to 
confirm that I was onto something. But, as it turned out, the sheer chance that 
I was seated next to Tim O'Reilly at the Thursday night banquet set in motion a 
more important train of consequences. </P>
+<P CLASS="Body">
+As a long-time admirer of O'Reilly's institutional style, I had been looking 
forward to meeting Tim for some years. We had a wide-ranging conversation (much 
of it exploring our common interest in classic science fiction) which led to an 
invitation for me to give CatB at Tim's Perl Conference later in the year. </P>
+<P CLASS="Body">
+Once again, the paper was well-received--with cheers and a standing ovation, 
in fact. I knew from my email that since Bavaria, word about CatB had spread 
over the Internet like a fire in dry grass. Many in the audience had already 
read it, and my speech was less a revelation of novelty for them than an 
opportunity to celebrate the new language and the consciousness that went with 
it. That standing ovation was not so much for my work as for the hacker culture 
itself--and rightly so. </P>
+<P CLASS="Body">
+Though I didn't know it, my experiment in memetic engineering was about to 
light a bigger fire. Some of the people for whom my speech was genuinely novel 
were from Netscape Communications, Inc. And Netscape was in trouble. </P>
+<P CLASS="Body">
+Netscape, a pioneering Internet-technology company and Wall Street highflier, 
had been targeted for destruction by Microsoft. Microsoft rightly feared that 
the open Web standards embodied by Netscape's browser might lead to an erosion 
of the Redmond giant's lucrative monopoly on the PC desktop. All the weight of 
Microsoft's billions, and shady tactics that would later trigger an antitrust 
lawsuit, were deployed to crush the Netscape browser. </P>
+<P CLASS="Body">
+For Netscape, the issue was less browser-related income (never more than a 
small fraction of their revenues) than maintaining a safe space for their much 
more valuable server business. If Microsoft's Internet Explorer achieved market 
dominance, Microsoft would be able to bend the Web's protocols away from open 
standards and into proprietary channels that only <EM 
CLASS="Emphasis">Microsoft's </EM>servers would be able to service. </P>
+<P CLASS="Body">
+Within Netscape there was intense debate about how to counter the threat. One 
of the options proposed early on was to throw the Netscape browser source 
open--but it was a hard case to argue without strong reasons to believe that 
doing so would prevent Internet Explorer dominance. </P>
+<P CLASS="Body">
+I didn't know it at the time, but CatB became a major factor in making that 
case. Through the winter of 1997, as I was working on the material for my next 
paper, the stage was being set for Netscape to break the rules of the 
commercial game and offer my tribe an unprecedented opportunity. </P>
+<H2 CLASS="HeadA">
+The Road to Mountain View </H2>
+<P CLASS="Body">
+On January 22nd, 1998, Netscape announced that it would release the sources of 
the Netscape client line to the Internet. Shortly after the news reached me the 
following day, I learned that CEO Jim Barksdale described my work to 
national-media reporters as &quot;fundamental inspiration&quot; for the 
decision. </P>
+<P CLASS="Body">
+This was the event that commentators in the computer trade press would later 
call &quot;the shot heard `round the world&quot;--and Barksdale had cast me as 
its Thomas Paine, whether I wanted the role or not. For the first time in the 
history of the hacker culture, a Fortune 500 darling of Wall Street had bet its 
future on the belief that <EM CLASS="Emphasis">our way was right</EM>. And, 
more specifically, that <EM CLASS="Emphasis">my analysis</EM> of &quot;our 
way&quot; was right. </P>
+<P CLASS="Body">
+This is a pretty sobering kind of shock to deal with. I had not been very 
surprised when CatB altered the hacker culture's image of itself; that was the 
result I had been trying for, after all. But I was astonished (to say the 
least) by the news of its success on the outside. So I did some very hard 
thinking in the first few hours after word reached me. About the state of Linux 
and the hacker community. About Netscape. And about whether I, personally, had 
what it would take to make the next step. </P>
+<P CLASS="Body">
+It was not difficult to conclude that helping Netscape's gamble succeed had 
just become a very high priority for the hacker culture, and thus for me 
personally. If Netscape's gamble failed, we hackers would probably find all the 
opprobrium of that failure piled on our heads. We'd be discredited for another 
decade. And that would be just too much to take. </P>
+<P CLASS="Body">
+By this time I had been in the hacker culture, living through its various 
phases, for twenty years. Twenty years of repeatedly watching brilliant ideas, 
promising starts, and superior technologies crushed by slick marketing. Twenty 
years of watching hackers dream and sweat and build, too often only to watch 
the likes of the bad old IBM or the bad new Microsoft walk away with the 
real-world prizes. Twenty years of living in a ghetto--a fairly comfortable 
ghetto full of interesting friends, but still one walled in by a vast and 
intangible barrier of prejudice inscribed &quot;ONLY FLAKES LIVE HERE.&quot; 
</P>
+<P CLASS="Body">
+The Netscape announcement cracked that barrier, if only for a moment; the 
business world had been jolted out of its complacency about what 
&quot;hackers&quot; are capable of. But lazy mental habits have huge inertia. 
If Netscape failed, or perhaps even if they succeeded, the experiment might 
come to be seen as a unique one-off not worth trying to repeat. And then we'd 
be back in the same ghetto, walls higher than before. </P>
+<P CLASS="Body">
+To prevent that, we needed Netscape to succeed. So I considered what I had 
learned about bazaar-mode development, and called up Netscape, and offered to 
help with developing their license and in working out the details of the 
strategy. In early February I flew to Mountain View at their request for seven 
hours of meetings with various groups at Netscape HQ, and helped them develop 
the outline of what would become the Mozilla Public License and the Mozilla 
organization. </P>
+<P CLASS="Body">
+While there, I met with several key people in the Silicon Valley and national 
Linux community (this part of the history is told in more detail on the Open 
Source web site's history page<A HREF="#footnote-2" CLASS="footnote">[2]</A>). 
While helping Netscape was clearly a short-term priority, everybody I spoke 
with had already understood the need for some longer-term strategy to follow up 
on the Netscape release. It was time to develop one. </P>
+<H2 CLASS="HeadA">
+The Origins of &quot;Open Source&quot; </H2>
+<P CLASS="Body">
+It was easy to see the outlines of the strategy. We needed to take the 
pragmatic arguments I had pioneered in CatB, develop them further, and push 
them hard, in public. Because Netscape itself had an interest in convincing 
investors that its strategy was not crazy, we could count on them to help the 
promotion. We also recruited Tim O'Reilly (and through him, O'Reilly &amp; 
Associates) very early on. </P>
+<P CLASS="Body">
+The real conceptual breakthrough, though, was admitting to ourselves that what 
we needed to mount was in effect a <EM CLASS="Emphasis">marketing 
campaign--</EM>and that it would require marketing techniques (spin, 
image-building, and re-branding) to make it work. </P>
+<P CLASS="Body">
+Hence the term &quot;open source,&quot; which the first participants in what 
would later become the Open Source campaign (and, eventually, the Open Source 
Initiative organization) invented at a meeting held in Mountain View in the 
offices of VA Research on February 3. </P>
+<P CLASS="Body">
+It seemed clear to us in retrospect that the term &quot;free software&quot; 
had done our movement tremendous damage over the years. Part of this stemmed 
from the well-known &quot;free-speech/free-beer&quot; ambiguity. Most of it 
came from something worse--the strong association of the term &quot;free 
software&quot; with hostility to intellectual property rights, communism, and 
other ideas hardly likely to endear themselves to an MIS manager. </P>
+<P CLASS="Body">
+It was, and still is, beside the point to argue that the Free Software 
Foundation is not hostile to all intellectual property and that its position is 
not exactly communistic. We knew that. What we realized, under the pressure of 
the Netscape release, was that FSF's actual position didn't matter. Only the 
fact that its evangelism had backfired (associating &quot;free software&quot; 
with these negative stereotypes in the minds of the trade press and the 
corporate world) actually mattered. </P>
+<P CLASS="Body">
+Our success after Netscape would depend on replacing the negative FSF 
stereotypes with<EM CLASS="Emphasis"> positive</EM> stereotypes of our 
own--pragmatic tales, sweet to managers' and investors' ears, of higher 
reliability and lower cost and better features. </P>
+<P CLASS="Body">
+In conventional marketing terms, our job was to re-brand the product, and 
build its reputation into one the corporate world would hasten to buy. </P>
+<P CLASS="Body">
+Linus Torvalds endorsed the idea the day after that first meeting. We began 
acting on it within a few days after. Bruce Perens had the opensource.org 
domain registered and the first version of the Open Source web site<A 
HREF="#footnote-3" CLASS="footnote">[3]</A> up within a week. He also suggested 
that the Debian Free Software Guidelines become the &quot;Open Source 
Definition,&quot;<A HREF="#footnote-4" CLASS="footnote">[4]</A> and began the 
process of registering &quot;Open Source&quot; as a certification mark so that 
we could legally require people to use &quot;Open Source&quot; for products 
conforming to the OSD. </P>
+<P CLASS="Body">
+Even the particular tactics needed to push the strategy seemed pretty clear to 
me even at this early stage (and were explicitly discussed at the initial 
meeting). Key themes: </P>
+<DL>
+<DT CLASS="ListVariableTerm">
+       Forget bottom-up; work on top-down </DT>
+<DD CLASS="ListVariable">
+One of the things that seemed clearest was that the historical Unix strategy 
of bottom-up evangelism (relying on engineers to persuade their bosses by 
rational argument) had been a failure. This was naive and easily trumped by 
Microsoft. Further, the Netscape breakthrough didn't happen that way. It 
happened because a strategic decision-maker (Jim Barksdale) got the clue and 
then imposed that vision on the people below him. </DD>
+<DD CLASS="ListVariable-">
+The conclusion was inescapable. Instead of working bottom-up, we should be 
evangelizing top-down--making a direct effort to capture the CEO/CTO/CIO types. 
</DD>
+<DT CLASS="ListVariableTerm">
+       Linux is our best demonstration case </DT>
+<DD CLASS="ListVariable">
+Promoting Linux must be our main thrust. Yes, there are other things going on 
in the open-source world, and the campaign will bow respectfully in their 
direction--but Linux started with the best name recognition, the broadest 
software base, and the largest developer community. If Linux can't consolidate 
the breakthrough, nothing else will, pragmatically speaking, have a prayer. 
</DD>
+<DT CLASS="ListVariableTerm">
+       Capture the Fortune 500</DT>
+<DD CLASS="ListVariable">
+There are other market segments that spend more dollars (small-business and 
home-office being the most obvious examples) but those markets are diffuse and 
hard to address. The Fortune 500 doesn't merely <EM CLASS="Emphasis">have</EM> 
lots of money, it concentrates lots of money where it's relatively easy to get 
at. Therefore, the software industry largely does what the Fortune 500 business 
market tells it to do. And therefore, it is primarily the Fortune 500 we need 
to convince. </DD>
+<DT CLASS="ListVariableTerm">
+       Co-opt the prestige media that serve the Fortune 500 </DT>
+<DD CLASS="ListVariable">
+The choice to target the Fortune 500 implies that we need to capture the media 
that shape the climate of opinion among top-level decision-makers and 
investors: very specifically, the <EM CLASS="Emphasis">New York Times</EM>, the 
<EM CLASS="Emphasis">Wall Street Journal</EM>, the <EM 
CLASS="Emphasis">Economist</EM>, <EM CLASS="Emphasis">Forbes</EM>, and <EM 
CLASS="Emphasis">Barron's Magazine</EM>. </DD>
+<DD CLASS="ListVariable-">
+On this view, co-opting the technical trade press is necessary but not 
sufficient; it's important essentially as a pre-condition for storming Wall 
Street itself through the elite mainstream media. </DD>
+<DT CLASS="ListVariableTerm">
+       Educate hackers in guerilla marketing tactics </DT>
+<DD CLASS="ListVariable">
+It was also clear that educating the hacker community itself would be just as 
important as mainstream outreach. It would be insufficient to have one or a 
handful of ambassadors speaking effective language if, at the grassroots level, 
most hackers were making arguments that didn't work. </DD>
+<DT CLASS="ListVariableTerm">
+       Use the Open Source certification mark to keep things pure </DT>
+<DD CLASS="ListVariable">
+One of the threats we faced was the possibility that the term &quot;open 
source&quot; would be &quot;embraced and extended&quot; by Microsoft or other 
large vendors, corrupting it and losing our message. It is for this reason that 
Bruce Perens and I decided early on to register the term as a certification 
mark and tie it to the Open Source Definition (a copy of the Debian Free 
Software Guidelines). This would allow us to scare off potential abusers with 
the threat of legal action. </DD>
+</DL>
+<H2 CLASS="HeadA">
+The Accidental Revolutionary</H2>
+<P CLASS="Body">
+Planning this kind of strategy was relatively easy. The hard part (for me, 
anyway) was accepting what my own role had to be. </P>
+<P CLASS="Body">
+One thing I understood from the beginning is that the press almost completely 
tunes out abstractions. They won't write about ideas without larger-than-life 
personalities fronting them. Everything has to be story, drama, conflict, sound 
bites. Otherwise most reporters will simply go to sleep--and if they don't, 
their editors will. </P>
+<P CLASS="Body">
+Accordingly, I knew somebody with very particular characteristics would be 
needed to front the community's response to the Netscape opportunity. We needed 
a firebrand, a spin doctor, a propagandist, an ambassador, an 
evangelist--somebody who could dance and sing and shout from the housetops and 
seduce reporters and huggermug with CEOs and bang the media machine until its 
contrary gears ground out the message: <EM CLASS="Emphasis">The revolution is 
here!</EM> </P>
+<P CLASS="Body">
+Unlike most hackers, I have the brain chemistry of an extrovert and had 
already had extensive experience at dealing with the press. Looking around me, 
I couldn't see anyone better qualified to play evangelist. But I didn't want 
the job, because I knew it would cost me my life for many months, maybe for 
years. My privacy would be destroyed. I'd probably end up caricatured as a geek 
by the mainstream press and (worse) despised as a sell-out or glory-hog by a 
significant fraction of my own tribe. Worse than all the other bad consequences 
put together, I probably wouldn't have time to hack any more! </P>
+<P CLASS="Body">
+I had to ask myself: are you fed up enough with watching your tribe lose to do 
<EM CLASS="Emphasis">whatever it takes to win</EM>? I decided the answer was 
yes--and having so decided, threw myself into the dirty but necessary job of 
becoming a public figure and media personality. </P>
+<P CLASS="Body">
+I'd learned some basic media chops while editing <EM CLASS="Emphasis">The New 
Hacker's Dictionary</EM>. This time I took it much more seriously and developed 
an entire theory of media manipulation which I then proceeded to apply. This is 
not the place to describe the theory in detail, but it centers around the use 
of what I call &quot;attractive dissonance'' to fan an itchy curiosity about 
the evangelist, and then exploiting that itch for all it's worth in promoting 
the ideas. </P>
+<P CLASS="Body">
+The combination of the &quot;open source&quot; label and deliberate promotion 
of myself as an evangelist turned out to have both the good and bad 
consequences that I expected. The ten months after the Netscape announcement 
featured a steady exponential increase in media coverage of Linux and the 
open-source world in general. Throughout this period, approximately a third of 
these articles quoted me directly; most of the other two-thirds used me as a 
background source. At the same time, a vociferous minority of hackers declared 
me an evil egotist. I managed to preserve a sense of humor about both outcomes 
(though occasionally with some difficulty). </P>
+<P CLASS="Body">
+My plan from the beginning was that, eventually, I would hand off the 
evangelist role to some successor, either an individual or organization. There 
would come a time when charisma became less effective than broad-based 
institutional respectability (and, from my own point of view, the sooner the 
better!). At the time of this writing I am attempting to transfer my personal 
connections and carefully built-up reputation with the press to the Open Source 
Initiative, an incorporated nonprofit formed specifically to manage the Open 
Source trademark. I am currently the president of this organization, but hope 
and expect not to remain so indefinitely. </P>
+<H2 CLASS="HeadA">
+Phases of the Campaign </H2>
+<P CLASS="Body">
+The open-source campaign began with the Mountain View meeting, and rapidly 
collected an informal network of allies over the Internet (including key people 
at Netscape and O'Reilly &amp; Associates). Where I write &quot;we&quot; below 
I'm referring to that network. </P>
+<P CLASS="Body">
+From February 3 to around the time of the actual Netscape release on March 31, 
our primary concern was convincing the hacker community &quot;open source&quot; 
label and the arguments that went with it represented our best shot at 
persuading the mainstream. As it turned out, the change was rather easier than 
we expected. We discovered a lot of pent-up demand for a message less 
doctrinaire than the Free Software Foundation's. </P>
+<P CLASS="Body">
+When the twenty-odd community leaders at the Free Software Summit on March 7 
voted to adopt the term &quot;open source,&quot; they formally ratified a trend 
that was already clear at the grass roots among developers. By six weeks after 
the Mountain View meeting, a healthy majority of the community was speaking our 
language. </P>
+<P CLASS="Body">
+In April after the Summit and the actual Netscape release, our main concern 
shifted to recruiting as many open-source early adopters as possible. The goal 
was to make Netscape's move look less singular--and to buy us insurance in case 
Netscape executed poorly and failed its goals. </P>
+<P CLASS="Body">
+This was the most worrying time. On the surface, everything seemed to be 
coming up roses; Linux was moving technically from strength to strength, the 
wider open-source phenomenon was enjoying a spectacular explosion in trade 
press coverage, and we were even beginning to get positive coverage in the 
mainstream press. Nevertheless, I was uneasily aware that our success was still 
fragile. After an initial flurry of contributions, community participation in 
Mozilla was badly slowed down by its requirement of Motif. None of the big 
independent software vendors had yet committed to Linux ports. Netscape was 
still looking lonely, and its browser still losing market share to Internet 
Explorer. Any serious reverse could lead to a nasty backlash in the press and 
public opinion. </P>
+<P CLASS="Body">
+Our first serious post-Netscape breakthrough came on May 7 when Corel Computer 
announced its Linux-based Netwinder network computer. But that wasn't enough in 
itself; to sustain the momentum, we needed commitments not from hungry 
second-stringers but from industry leaders. Thus, it was the mid-July 
announcements by Oracle and Informix that really closed out this vulnerable 
phase. </P>
+<P CLASS="Body">
+The database outfits joined the Linux party three months earlier than I 
expected, but none too soon. We had been wondering how long the positive buzz 
could last without major Independent Software Vendor (ISV) support and feeling 
increasingly nervous about where we'd actually find that. After Oracle and 
Informix announced Linux ports other ISVs began announcing Linux support almost 
as a matter of routine, and even a failure of Mozilla became survivable. </P>
+<P CLASS="Body">
+Mid-July through the beginning of November was a consolidation phase. It was 
during this time that we started to see fairly steady coverage from the elite 
media I had originally targeted, led off by articles in <EM 
CLASS="Emphasis">The Economist</EM> and a cover story in <EM 
CLASS="Emphasis">Forbes</EM>. Various hardware and software vendors sent out 
feelers to the open-source community and began to work out strategies for 
getting an advantage from the new model. And internally, the biggest 
closed-source vendor of them all was beginning to get seriously worried. </P>
+<P CLASS="Body">
+Just <EM CLASS="Emphasis">how</EM> worried became apparent when the 
now-infamous &quot;Halloween Documents&quot;<EM CLASS="Emphasis"><A 
HREF="#footnote-5" CLASS="footnote">[5]</A></EM> leaked out of Microsoft. </P>
+<P CLASS="Body">
+The Halloween Documents were dynamite. They were a ringing testimonial to the 
strengths of open-source development from the company with the most to lose 
from Linux's success. And they confirmed a lot of peoples' darkest suspicions 
about the tactics Microsoft would consider in order to stop it. </P>
+<P CLASS="Body">
+The Halloween Documents attracted massive press coverage in the first few 
weeks of November. They created a new surge of interest in the open-source 
phenomenon, serendipitously confirming all the points we had been making for 
months. And they led directly to a request for me to conference with a select 
group of Merrill Lynch's major investors on the state of the software industry 
and the prospects for open source. </P>
+<P CLASS="Body">
+Wall Street, finally, came to us. </P>
+<H2 CLASS="HeadA">
+The Facts on the Ground </H2>
+<P CLASS="Body">
+While the Open Source campaign's &quot;air war&quot; in the media was going 
on, key technical and market facts on the ground were also changing. I'll 
review some of them briefly here because they combine interestingly with the 
trends in press and public perception. </P>
+<P CLASS="Body">
+In the ten months following the Netscape release, Linux rapidly continued to 
grow more capable. The development of solid SMP support and the effective 
completion of the 64-bit cleanup laid important groundwork for the future. </P>
+<P CLASS="Body">
+The roomful of Linux boxes used to render scenes for <CITE 
CLASS="Citation">Titanic</CITE> threw a healthy scare into builders of 
expensive graphics engines. Then the Beowulf supercomputer-on-the-cheap project 
showed that Linux's Chinese-army sociology could be successfully applied even 
to bleeding-edge scientific computing. </P>
+<P CLASS="Body">
+Nothing dramatic happened to vault Linux's open-source competitors into the 
limelight. And proprietary Unixes continued to lose market share; in fact, by 
mid-year only NT and Linux were actually gaining market share in the Fortune 
500, and by late fall Linux was gaining faster. </P>
+<P CLASS="Body">
+Apache continued to increase its lead in the web server market. In November, 
Netscape's browser reversed its market-share slide and began to make gains 
against Internet Explorer. </P>
+<H2 CLASS="HeadA">
+Into the Future </H2>
+<P CLASS="Body">
+I have rehearsed recent history here only partly to get it into the record. 
More importantly, it sets a background against which we can understand 
near-term trends and project some things about the future (I write in 
mid-December of 1998). </P>
+<P CLASS="Body">
+First, safe predictions for the next year: </P>
+<UL>
+<LI CLASS="ListBullet">
+       The open-source developer population will continue to explode, a growth 
fueled by ever-cheaper PC hardware and Internet connections. </LI>
+<LI CLASS="ListBullet">
+       Linux will continue to lead the way, the relative size of its developer 
community overpowering the higher average skill of the open-source BSD people 
and the tiny HURD crew. </LI>
+<LI CLASS="ListBullet">
+       ISV commitments to support the Linux platform will increase 
dramatically; the database-vendor commitments were a turning point. Corel's 
commitment to ship their entire office suite on Linux points the way.</LI>
+<LI CLASS="ListBullet">
+       The Open Source campaign will continue to build on its victories and 
successfully raise awareness at the CEO/CTO/CIO and investor level. MIS 
directors will feel increasing pressure to go with open-source products not 
from below but from <EM CLASS="Emphasis">above</EM>. </LI>
+<LI CLASS="ListBullet">
+       Stealth deployments of Samba-over-Linux will replace increasing numbers 
of NT machines even at shops that have all-Microsoft policies. </LI>
+<LI CLASS="ListBullet">
+       The market share of proprietary Unixes will continue to gradually 
erode. At least one of the weaker competitors (likely DG-UX or HP-UX) will 
actually fold. But by the time it happens, analysts will attribute it to 
Linux's gains rather than Microsoft's. </LI>
+<LI CLASS="ListBullet">
+       Microsoft will not have an enterprise-ready operating system, because 
Windows 2000 will not ship in a usable form. (At 60 million lines of code and 
still bloating, its development is out of control.) </LI>
+</UL>
+<P CLASS="Body">
+Extrapolating these trends certainly suggests some slightly riskier 
predictions for the medium term (eighteen to thirty-two months out):</P>
+<UL>
+<LI CLASS="ListBullet">
+       Support operations for commercial customers of open-source operating 
systems will become big business, both feeding off of and fueling the boom in 
business use. </LI>
+<LI CLASS="ListBullet">
+       Open-source operating systems (with Linux leading the way) will capture 
the ISP and business data-center markets. NT will be unable to resist this 
change effectively; the combination of low cost, open sources, and 24/7 
reliability will prove irresistible. </LI>
+<LI CLASS="ListBullet">
+       The proprietary-Unix sector will almost completely collapse. Solaris 
looks like a safe bet to survive on high-end Sun hardware, but most other 
players' proprietary will quickly become legacy systems.</LI>
+<LI CLASS="ListBullet">
+       Windows 2000 will be either canceled or dead on arrival. Either way it 
will turn into a horrendous train wreck, the worst strategic disaster in 
Microsoft's history. However, this will barely affect their hold on the desktop 
market within the next two years. </LI>
+</UL>
+<P CLASS="Body">
+At first glance, these trends look like a recipe for leaving Linux as the last 
one standing. But life is not that simple (and Microsoft derives such immense 
amounts of money and market clout from the desktop market that it can't safely 
be counted out even after the Windows 2000 train wreck). </P>
+<P CLASS="Body">
+So at two years out the crystal ball gets a bit cloudy. Which of several 
futures we get depends on questions like: Will the Department of Justice break 
up Microsoft? Might BeOS or OS/2 or Mac OS/X or some other niche closed-source 
OS, or some completely new design, find a way to go open and compete 
effectively with Linux's 30-year-old base design? Will Y2K-related problems 
have thrown the world economy into a deep enough depression to throw off 
everybody's timetables? </P>
+<P CLASS="Body">
+These are all fairly imponderable. But there is one such question that is 
worth pondering: Will the Linux community actually deliver a good 
end-user-friendly GUI interface for the whole system? </P>
+<P CLASS="Body">
+I think the most likely scenario for two years out has Linux in effective 
control of servers, data centers, ISPs, and the Internet, while Microsoft 
maintains its grip on the desktop. Where things go from there depend on whether 
GNOME, KDE, or some other Linux-based GUI (and the applications built or 
rebuilt to use it) ever get good enough to challenge Microsoft on its home 
ground. </P>
+<P CLASS="Body">
+If this were primarily a technical problem, the outcome would hardly be in 
doubt. But it isn't; it's a problem in ergonomic design and interface 
psychology, and hackers have historically been poor at it. That is, while 
hackers can be very good at designing interfaces for other hackers, they tend 
to be poor at modeling the thought processes of the other 95% of the population 
well enough to write interfaces that J. Random End-User and his Aunt Tillie 
will pay to buy. </P>
+<P CLASS="Body">
+Applications were this year's problem; it's now clear we'll swing enough ISVs 
to get the ones we don't write ourselves. I believe the problem for the next 
two years is whether we can grow enough to meet (and <EM 
CLASS="Emphasis">exceed</EM>!) the interface-design quality standard set by the 
Macintosh, combining that with the virtues of the traditional Unix way. </P>
+<P CLASS="Body">
+We half-joke about &quot;world domination,&quot; but the only way we will get 
there is by <EM CLASS="Emphasis">serving</EM> the world. That means J. Random 
End-User and his Aunt Tillie; and <EM CLASS="Emphasis">that </EM>means learning 
how to think about what we do in a fundamentally new way, and ruthlessly 
reducing the user-visible complexity of the default environment to an absolute 
minimum. </P>
+<P CLASS="Body">
+Computers are tools for human beings. Ultimately, therefore, the challenges of 
designing hardware and software must come back to designing for human 
beings--<EM CLASS="Emphasis">all </EM>human beings. </P>
+<P CLASS="Body">
+This path will be long, and it won't be easy. But we owe it to ourselves and 
each other to do it right. May the Open Source be with you! </P>
+<HR>
+<P CLASS="Footnote"><A NAME="footnote-1"></A>
+1.
+<A 
HREF="http://www.tuxedo.org/&#126;esr/writings/cathedral-bazaar";>http://www.tuxedo.org/&#126;esr/writings/cathedral-bazaar</A></P>
+<P CLASS="Footnote"><A NAME="footnote-2"></A>
+2.
+<A 
HREF="http://www.opensource.org/history.html";>http://www.opensource.org/history.html</A></P>
+<P CLASS="Footnote"><A NAME="footnote-3"></A>
+3.
+<A HREF="http://www.opensource.edu/";>http://www.opensource.edu/</A></P>
+<P CLASS="Footnote"><A NAME="footnote-4"></A>
+4.
+<A 
HREF="http://www.opensource.org/osd.html";>http://www.opensource.org/osd.html</A></P>
+<P CLASS="Footnote"><A NAME="footnote-5"></A>
+5.
+<A 
HREF="http://www.opensource.org/halloween.html";>http://www.opensource.org/halloween.html</A></P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="appa.html"><i><b>Appendix A ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/stallman.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/stallman.gif
diff -N Proyectos/Mecagtk/OpenSource/stallman.gif
Binary files /dev/null and /tmp/cvs8z0gOs differ

Index: Proyectos/Mecagtk/OpenSource/stallman.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/stallman.html
diff -N Proyectos/Mecagtk/OpenSource/stallman.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/stallman.html  3 Mar 2012 06:14:20 -0000       
1.1
@@ -0,0 +1,435 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Richard Stallman">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources
+: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>The GNU Operating System and the Free Software Movement</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">The GNU Operating System and the Free 
Software Movement</H1>
+<H4 CLASS="ChapterAuthor" align="right">Richard Stallman</H4>
+<H2 CLASS="HeadA">
+The First Software-Sharing Community</H2>
+<P CLASS="Body">
+When I started working at the MIT Artificial Intelligence Lab in 1971, I 
became part of a software-sharing community that had existed for many years. 
Sharing of software was not limited to our particular community; it is as old 
as computers, just as sharing of recipes is as old as cooking. But we did it 
more than most. </P>
+<P CLASS="Body">
+The AI Lab used a time-sharing operating system called ITS (the Incompatible 
Timesharing System) that the Lab's staff hackers<A HREF="#footnote-1" 
CLASS="footnote">[1]</A> had designed and written in assembler language for the 
Digital PDP-10, one of the large computers of the era. As a member of this 
community, an AI Lab staff system hacker, my job was to improve this system. 
</P>
+<P CLASS="Body">
+We did not call our software &quot;free software,&quot; because that term did 
not yet exist, but that is what it was. Whenever people from another university 
or a company wanted to port and use a program, we gladly let them. If you saw 
someone using an unfamiliar and interesting program, you could always ask to 
see the source code, so that you could read it, change it, or cannibalize parts 
of it to make a new program. </P>
+<H2 CLASS="HeadA">
+The Collapse of the Community </H2>
+<P CLASS="Body">
+The situation changed drastically in the early 1980s when Digital discontinued 
the PDP-10 series. Its architecture, elegant and powerful in the 60s, could not 
extend naturally to the larger address spaces that were becoming feasible in 
the 80s. This meant that nearly all of the programs composing ITS were 
obsolete. </P>
+<P CLASS="Body">
+The AI Lab hacker community had already collapsed, not long before. In 1981, 
the spin-off company Symbolics had hired away nearly all of the hackers from 
the AI Lab, and the depopulated community was unable to maintain itself. (The 
book <CITE CLASS="Citation">Hackers</CITE>, by Steve Levy, describes these 
events, and gives a clear picture of this community in its prime.) When the AI 
Lab bought a new PDP-10 in 1982, its administrators decided to use Digital's 
non-free timesharing system instead of ITS. </P>
+<P CLASS="Body">
+The modern computers of the era, such as the VAX or the 68020, had their own 
operating systems, but none of them were free software: you had to sign a 
nondisclosure agreement even to get an executable copy. </P>
+<P CLASS="Body">
+This meant that the first step in using a computer was to promise not to help 
your neighbor. A cooperating community was forbidden. The rule made by the 
owners of proprietary software was, &quot;If you share with your neighbor, you 
are a pirate. If you want any changes, beg us to make them.&quot; </P>
+<P CLASS="Body">
+The idea that the proprietary software social system--the system that says you 
are not allowed to share or change software--is antisocial, that it is 
unethical, that it is simply wrong, may come as a surprise to some readers. But 
what else could we say about a system based on dividing the public and keeping 
users helpless? Readers who find the idea surprising may have taken the 
proprietary social system as given, or judged it on the terms suggested by 
proprietary software businesses. Software publishers have worked long and hard 
to convince people that there is only one way to look at the issue. </P>
+<P CLASS="Body">
+When software publishers talk about &quot;enforcing&quot; their 
&quot;rights&quot; or &quot;stopping piracy,&quot; what they actually <EM 
CLASS="Emphasis">say</EM> is secondary. The real message of these statements is 
in the unstated assumptions they take for granted; the public is supposed to 
accept them uncritically. So let's examine them. </P>
+<P CLASS="Body">
+One assumption is that software companies have an unquestionable natural right 
to own software and thus have power over all its users. (If this were a natural 
right, then no matter how much harm it does to the public, we could not 
object.) Interestingly, the U.S. Constitution and legal tradition reject this 
view; copyright is not a natural right, but an artificial government-imposed 
monopoly that limits the users' natural right to copy. </P>
+<P CLASS="Body">
+Another unstated assumption is that the only important thing about software is 
what jobs it allows you to do--that we computer users should not care what kind 
of society we are allowed to have. </P>
+<P CLASS="Body">
+A third assumption is that we would have no usable software (or would never 
have a program to do this or that particular job) if we did not offer a company 
power over the users of the program. This assumption may have seemed plausible, 
before the free software movement demonstrated that we can make plenty of 
useful software without putting chains on it. </P>
+<P CLASS="Body">
+If we decline to accept these assumptions, and judge these issues based on 
ordinary common-sense morality while placing the users first, we arrive at very 
different conclusions. Computer users should be free to modify programs to fit 
their needs, and free to share software, because helping other people is the 
basis of society. </P>
+<P CLASS="Body">
+There is no room here for an extensive statement of the reasoning behind this 
conclusion, so I refer you to the web page, <A 
HREF="http://www.gnu.org/philosophy/why-free.html";>http://www.gnu.org/philosophy/why-free.html</A>.
 </P>
+<H2 CLASS="HeadA">
+A Stark Moral Choice </H2>
+<P CLASS="Body">
+With my community gone, not continuing as before was impossible. Instead, I 
faced a moral choice. </P>
+<P CLASS="Body">
+The easy choice was to join the proprietary software world, signing 
nondisclosure agreements and promising not to help my fellow hacker. Most 
likely I would also be developing software that was released under 
nondisclosure agreements, thus adding to the pressure on other people to betray 
their fellows too. </P>
+<P CLASS="Body">
+I could have made money this way, and perhaps amused myself writing code. But 
I knew that at the end of my career, I would look back on years of building 
walls to divide people, and feel I had spent my life making the world a worse 
place. </P>
+<P CLASS="Body">
+I had already experienced being on the receiving end of a nondisclosure 
agreement, when someone refused to give me and the MIT AI Lab the source code 
for the control program for our printer. (The lack of certain features in this 
program made use of the printer extremely frustrating.) So I could not tell 
myself that nondisclosure agreements were innocent. I was very angry when he 
refused to share with us; I could not turn around and do the same thing to 
everyone else. </P>
+<P CLASS="Body">
+Another choice, straightforward but unpleasant, was to leave the computer 
field. That way my skills would not be misused, but they would still be wasted. 
I would not be culpable for dividing and restricting computer users, but it 
would happen nonetheless. </P>
+<P CLASS="Body">
+So I looked for a way that a programmer could do something for the good. I 
asked myself, was there a program or programs that I could write, so as to make 
a community possible once again? </P>
+<P CLASS="Body">
+The answer was clear: what was needed first was an operating system. That is 
the crucial software for starting to use a computer. With an operating system, 
you can do many things; without one, you cannot run the computer at all. With a 
free operating system, we could again have a community of cooperating 
hackers--and invite anyone to join. And anyone would be able to use a computer 
without starting out by conspiring to deprive his or her friends. </P>
+<P CLASS="Body">
+As an operating system developer, I had the right skills for this job. So even 
though I could not take success for granted, I realized that I was elected to 
do the job. I chose to make the system compatible with Unix so that it would be 
portable, and so that Unix users could easily switch to it. The name GNU was 
chosen following a hacker tradition, as a recursive acronym for &quot;GNU's Not 
Unix.&quot; </P>
+<P CLASS="Body">
+An operating system does not mean just a kernel, barely enough to run other 
programs. In the 1970s, every operating system worthy of the name included 
command processors, assemblers, compilers, interpreters, debuggers, text 
editors, mailers, and much more. ITS had them, Multics had them, VMS had them, 
and Unix had them. The GNU operating system would include them too. Later I 
heard these words, attributed to Hillel:<A HREF="#footnote-2" 
CLASS="footnote">[2]</A> </P>
+<BLOCKQUOTE CLASS="Quote">
+If I am not for myself, who will be for me?</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="Quote">
+If I am only for myself, what am I?</BLOCKQUOTE>
+<BLOCKQUOTE CLASS="Quote">
+If not now, when? </BLOCKQUOTE>
+<P CLASS="Body">
+The decision to start the GNU project was based on the same spirit. </P>
+<H2 CLASS="HeadA">
+Free as in Freedom </H2>
+<P CLASS="Body">
+The term &quot;free software&quot; is sometimes misunderstood--it has nothing 
to do with price. It is about freedom. Here, therefore, is the definition of 
free software. A program is free software, for you, a particular user, if: </P>
+<UL>
+<LI CLASS="ListBullet">
+       You have the freedom to run the program, for any purpose. </LI>
+<LI CLASS="ListBullet">
+       You have the freedom to modify the program to suit your needs. (To make 
this freedom effective in practice, you must have access to the source code, 
since making changes in a program without having the source code is exceedingly 
difficult.) </LI>
+<LI CLASS="ListBullet">
+       You have the freedom to redistribute copies, either gratis or for a 
fee. </LI>
+<LI CLASS="ListBullet">
+       You have the freedom to distribute modified versions of the program, so 
that the community can benefit from your improvements. </LI>
+</UL>
+<P CLASS="Body">
+Since &quot;free&quot; refers to freedom, not to price, there is no 
contradiction between selling copies and free software. In fact, the freedom to 
sell copies is crucial: collections of free software sold on CD-ROMs are 
important for the community, and selling them is an important way to raise 
funds for free software development. Therefore, a program that people are not 
free to include on these collections is not free software. </P>
+<P CLASS="Body">
+Because of the ambiguity of &quot;free,&quot; people have long looked for 
alternatives, but no one has found a suitable alternative. The English language 
has more words and nuances than any other, but it lacks a simple, unambiguous 
word that means &quot;free,&quot; as in freedom--&quot;unfettered&quot; being 
the word that comes closest in meaning. Such alternatives as 
&quot;liberated,&quot; &quot;freedom,&quot; and &quot;open&quot; have either 
the wrong meaning or some other disadvantage. </P>
+<H2 CLASS="HeadA">
+GNU Software and the GNU System</H2>
+<P CLASS="Body">
+Developing a whole system is a very large project. To bring it into reach, I 
decided to adapt and use existing pieces of free software wherever that was 
possible. For example, I decided at the very beginning to use TeX as the 
principal text formatter; a few years later, I decided to use the X Window 
System rather than writing another window system for GNU. </P>
+<P CLASS="Body">
+Because of this decision, the GNU system is not the same as the collection of 
all GNU software. The GNU system includes programs that are not GNU software, 
programs that were developed by other people and projects for their own 
purposes, but which we can use because they are free software. </P>
+<H2 CLASS="HeadA">
+Commencing the Project </H2>
+<P CLASS="Body">
+In January 1984 I quit my job at MIT and began writing GNU software. Leaving 
MIT was necessary so that MIT would not be able to interfere with distributing 
GNU as free software. If I had remained on the staff, MIT could have claimed to 
own the work, and could have imposed their own distribution terms, or even 
turned the work into a proprietary software package. I had no intention of 
doing a large amount of work only to see it become useless for its intended 
purpose: creating a new software-sharing community. </P>
+<P CLASS="Body">
+However, Professor Winston, then the head of the MIT AI Lab, kindly invited me 
to keep using the Lab's facilities. </P>
+<H2 CLASS="HeadA">
+The First Steps </H2>
+<P CLASS="Body">
+Shortly before beginning the GNU project, I heard about the Free University 
Compiler Kit, also known as VUCK. (The Dutch word for &quot;free&quot; is 
written with a V.) This was a compiler designed to handle multiple languages, 
including C and Pascal, and to support multiple target machines. I wrote to its 
author asking if GNU could use it. </P>
+<P CLASS="Body">
+He responded derisively, stating that the university was free but the compiler 
was not. I therefore decided that my first program for the GNU project would be 
a multi-language, multi-platform compiler. </P>
+<P CLASS="Body">
+Hoping to avoid the need to write the whole compiler myself, I obtained the 
source code for the Pastel compiler, which was a multi-platform compiler 
developed at Lawrence Livermore Lab. It supported, and was written in, an 
extended version of Pascal, designed to be a system-programming language. I 
added a C frontend, and began porting it to the Motorola 68000 computer. But I 
had to give that up when I discovered that the compiler needed many megabytes 
of stack space, and the available 68000 Unix system would only allow 64K. </P>
+<P CLASS="Body">
+I then determined that the Pastel compiler was designed to parse the entire 
input file into a syntax tree, convert the whole syntax tree into a chain of 
&quot;instructions,&quot; and then generate the whole output file, without ever 
freeing any storage. At this point, I concluded I would have to write a new 
compiler from scratch. That new compiler is now known as GCC; none of the 
Pastel compiler is used in it, but I managed to adapt and use the C frontend 
that I had written. But that was some years later; first, I worked on GNU 
Emacs. </P>
+<H2 CLASS="HeadA">
+GNU Emacs </H2>
+<P CLASS="Body">
+I began work on GNU Emacs in September 1984, and in early 1985 it was 
beginning to be usable. This enabled me to begin using Unix systems to do 
editing; having no interest in learning to use <CITE CLASS="Citation">vi</CITE> 
or <CITE CLASS="Citation">ed</CITE>, I had done my editing on other kinds of 
machines until then. </P>
+<P CLASS="Body">
+At this point, people began wanting to use GNU Emacs, which raised the 
question of how to distribute it. Of course, I put it on the anonymous ftp 
server on the MIT computer that I used. (This computer, prep.ai.mit.edu, thus 
became the principal GNU ftp distribution site; when it was decommissioned a 
few years later, we transferred the name to our new ftp server.) But at that 
time, many of the interested people were not on the Internet and could not get 
a copy by ftp. So the question was, what would I say to them? </P>
+<P CLASS="Body">
+I could have said, &quot;Find a friend who is on the Net and who will make a 
copy for you.&quot; Or I could have done what I did with the original PDP-10 
Emacs: tell them, &quot;Mail me a tape and a SASE, and I will mail it back with 
Emacs on it.&quot; But I had no job, and I was looking for ways to make money 
from free software. So I announced that I would mail a tape to whoever wanted 
one, for a fee of $150. In this way, I started a free software distribution 
business, the precursor of the companies that today distribute entire 
Linux-based GNU systems. </P>
+<H2 CLASS="HeadA">
+Is a Program Free for Every User? </H2>
+<P CLASS="Body">
+If a program is free software when it leaves the hands of its author, this 
does not necessarily mean it will be free software for everyone who has a copy 
of it. For example, public domain software (software that is not copyrighted) 
is free software; but anyone can make a proprietary modified version of it. 
Likewise, many free programs are copyrighted but distributed under simple 
permissive licenses that allow proprietary modified versions. </P>
+<P CLASS="Body">
+The paradigmatic example of this problem is the X Window System. Developed at 
MIT, and released as free software with a permissive license, it was soon 
adopted by various computer companies. They added X to their proprietary Unix 
systems, in binary form only, and covered by the same nondisclosure agreement. 
These copies of X were no more free software than Unix was. </P>
+<P CLASS="Body">
+The developers of the X Window System did not consider this a problem--they 
expected and intended this to happen. Their goal was not freedom, just 
&quot;success,&quot; defined as &quot;having many users.&quot; They did not 
care whether these users had freedom, only that they should be numerous. </P>
+<P CLASS="Body">
+This lead to a paradoxical situation where two different ways of counting the 
amount of freedom gave different answers to the question, &quot;Is this program 
free?&quot; If you judged based on the freedom provided by the distribution 
terms of the MIT release, you would say that X was free software. But if you 
measured the freedom of the average user of X, you would have to say it was 
proprietary software. Most X users were running the proprietary versions that 
came with Unix systems, not the free version. </P>
+<H2 CLASS="HeadA">
+Copyleft and the GNU GPL </H2>
+<P CLASS="Body">
+The goal of GNU was to give users freedom, not just to be popular. So we 
needed to use distribution terms that would prevent GNU software from being 
turned into proprietary software. The method we use is called 
&quot;copyleft.&quot;<A HREF="#footnote-3" CLASS="footnote">[3]</A> </P>
+<P CLASS="Body">
+Copyleft uses copyright law, but flips it over to serve the opposite of its 
usual purpose: instead of a means of privatizing software, it becomes a means 
of keeping software free. </P>
+<P CLASS="Body">
+The central idea of copyleft is that we give everyone permission to run the 
program, copy the program, modify the program, and distribute modified 
versions--but not permission to add restrictions of their own. Thus, the 
crucial freedoms that define &quot;free software&quot; are guaranteed to 
everyone who has a copy; they become inalienable rights. </P>
+<P CLASS="Body">
+For an effective copyleft, modified versions must also be free. This ensures 
that work based on ours becomes available to our community if it is published. 
When programmers who have jobs as programmers volunteer to improve GNU 
software, it is copyleft that prevents their employers from saying, &quot;You 
can't share those changes, because we are going to use them to make our 
proprietary version of the program.&quot; </P>
+<P CLASS="Body">
+The requirement that changes must be free is essential if we want to ensure 
freedom for every user of the program. The companies that privatized the X 
Window System usually made some changes to port it to their systems and 
hardware. These changes were small compared with the great extent of X, but 
they were not trivial. If making changes was an excuse to deny the users 
freedom, it would be easy for anyone to take advantage of the excuse. </P>
+<P CLASS="Body">
+A related issue concerns combining a free program with non-free code. Such a 
combination would inevitably be non-free; whichever freedoms are lacking for 
the non-free part would be lacking for the whole as well. To permit such 
combinations would open a hole big enough to sink a ship. Therefore, a crucial 
requirement for copyleft is to plug this hole: anything added to or combined 
with a copylefted program must be such that the larger combined version is also 
free and copylefted. </P>
+<P CLASS="Body">
+The specific implementation of copyleft that we use for most GNU software is 
the GNU General Public License, or GNU GPL for short. We have other kinds of 
copyleft that are used in specific circumstances. GNU manuals are copylefted 
also, but use a much simpler kind of copyleft, because the complexity of the 
GNU GPL is not necessary for manuals. </P>
+<H2 CLASS="HeadA">
+The Free Software Foundation </H2>
+<P CLASS="Body">
+As interest in using Emacs was growing, other people became involved in the 
GNU project, and we decided that it was time to seek funding once again. So in 
1985 we created the Free Software Foundation, a tax-exempt charity for free 
software development. The FSF also took over the Emacs tape distribution 
business; later it extended this by adding other free software (both GNU and 
non-GNU) to the tape, and by selling free manuals as well. </P>
+<P CLASS="Body">
+The FSF accepts donations, but most of its income has always come from 
sales--of copies of free software, and of other related services. Today it 
sells CD-ROMs of source code, CD-ROMs with binaries, nicely printed manuals 
(all with freedom to redistribute and modify), and Deluxe Distributions (where 
we build the whole collection of software for your choice of platform). </P>
+<P CLASS="Body">
+Free Software Foundation employees have written and maintained a number of GNU 
software packages. Two notable ones are the C library and the shell. The GNU C 
library is what every program running on a GNU/Linux system uses to communicate 
with Linux. It was developed by a member of the Free Software Foundation staff, 
Roland McGrath. The shell used on most GNU/Linux systems is BASH, the Bourne 
Again Shell,<A HREF="#footnote-4" CLASS="footnote">[4]</A> which was developed 
by FSF employee Brian Fox. </P>
+<P CLASS="Body">
+We funded development of these programs because the GNU project was not just 
about tools or a development environment. Our goal was a complete operating 
system, and these programs were needed for that goal. </P>
+<H2 CLASS="HeadA">
+Free Software Support </H2>
+<P CLASS="Body">
+The free software philosophy rejects a specific widespread business practice, 
but it is not against business. When businesses respect the users' freedom, we 
wish them success. </P>
+<P CLASS="Body">
+Selling copies of Emacs demonstrates one kind of free software business. When 
the FSF took over that business, I needed another way to make a living. I found 
it in selling services relating to the free software I had developed. This 
included teaching, for subjects such as how to program GNU Emacs and how to 
customize GCC, and software development, mostly porting GCC to new platforms. 
</P>
+<P CLASS="Body">
+Today each of these kinds of free software business is practiced by a number 
of corporations. Some distribute free software collections on CD-ROM; others 
sell support at levels ranging from answering user questions to fixing bugs to 
adding major new features. We are even beginning to see free software companies 
based on launching new free software products. </P>
+<P CLASS="Body">
+Watch out, though--a number of companies that associate themselves with the 
term &quot;Open Source&quot; actually base their business on non-free software 
that works with free software. These are not free software companies, they are 
proprietary software companies whose products tempt users away from freedom. 
They call these &quot;value added,&quot; which reflects the values they would 
like us to adopt: convenience above freedom. If we value freedom more, we 
should call them &quot;freedom subtracted&quot; products. </P>
+<H2 CLASS="HeadA">
+Technical Goals </H2>
+<P CLASS="Body">
+The principal goal of GNU was to be free software. Even if GNU had no 
technical advantage over Unix, it would have a social advantage, allowing users 
to cooperate, and an ethical advantage, respecting the user's freedom. </P>
+<P CLASS="Body">
+But it was natural to apply the known standards of good practice to the 
work--for example, dynamically allocating data structures to avoid arbitrary 
fixed size limits, and handling all the possible 8-bit codes wherever that made 
sense. </P>
+<P CLASS="Body">
+In addition, we rejected the Unix focus on small memory size, by deciding not 
to support 16-bit machines (it was clear that 32-bit machines would be the norm 
by the time the GNU system was finished), and to make no effort to reduce 
memory usage unless it exceeded a megabyte. In programs for which handling very 
large files was not crucial, we encouraged programmers to read an entire input 
file into core, then scan its contents without having to worry about I/O. </P>
+<P CLASS="Body">
+These decisions enabled many GNU programs to surpass their Unix counterparts 
in reliability and speed. </P>
+<H2 CLASS="HeadA">
+Donated Computers </H2>
+<P CLASS="Body">
+As the GNU project's reputation grew, people began offering to donate machines 
running Unix to the project. These were very useful, because the easiest way to 
develop components of GNU was to do it on a Unix system, and replace the 
components of that system one by one. But they raised an ethical issue: whether 
it was right for us to have a copy of Unix at all. </P>
+<P CLASS="Body">
+Unix was (and is) proprietary software, and the GNU project's philosophy said 
that we should not use proprietary software. But, applying the same reasoning 
that leads to the conclusion that violence in self-defense is justified, I 
concluded that it was legitimate to use a proprietary package when that was 
crucial for developing free replacement that would help others stop using the 
proprietary package. </P>
+<P CLASS="Body">
+But, even if this was a justifiable evil, it was still an evil. Today we no 
longer have any copies of Unix, because we have replaced them with free 
operating systems. If we could not replace a machine's operating system with a 
free one, we replaced the machine instead. </P>
+<H2 CLASS="HeadA">
+The GNU Task List </H2>
+<P CLASS="Body">
+As the GNU project proceeded, and increasing numbers of system components were 
found or developed, eventually it became useful to make a list of the remaining 
gaps. We used it to recruit developers to write the missing pieces. This list 
became known as the GNU task list. In addition to missing Unix components, we 
listed various other useful software and documentation projects that, we 
thought, a truly complete system ought to have. </P>
+<P CLASS="Body">
+Today, hardly any Unix components are left in the GNU task list--those jobs 
have been done, aside from a few inessential ones. But the list is full of 
projects that some might call &quot;applications.&quot; Any program that 
appeals to more than a narrow class of users would be a useful thing to add to 
an operating system. </P>
+<P CLASS="Body">
+Even games are included in the task list--and have been since the beginning. 
Unix included games, so naturally GNU should too. But compatibility was not an 
issue for games, so we did not follow the list of games that Unix had. Instead, 
we listed a spectrum of different kinds of games that users might like. </P>
+<H2 CLASS="HeadA">
+The GNU Library GPL </H2>
+<P CLASS="Body">
+The GNU C library uses a special kind of copyleft called the GNU Library 
General Public License (LPGL), which gives permission to link proprietary 
software with the library. Why make this exception? </P>
+<P CLASS="Body">
+It is not a matter of principle; there is no principle that says proprietary 
software products are entitled to include our code. (Why contribute to a 
project predicated on refusing to share with us?) Using the LGPL for the C 
library, or for any library, is a matter of strategy. </P>
+<P CLASS="Body">
+The C library does a generic job; every proprietary system or compiler comes 
with a C library. Therefore, to make our C library available only to free 
software would not have given free software any advantage--it would only have 
discouraged use of our library. </P>
+<P CLASS="Body">
+One system is an exception to this: on the GNU system (and this includes 
GNU/Linux), the GNU C library is the only C library. So the distribution terms 
of the GNU C library determine whether it is possible to compile a proprietary 
program for the GNU system. There is no ethical reason to allow proprietary 
applications on the GNU system, but strategically it seems that disallowing 
them would do more to discourage use of the GNU system than to encourage 
development of free applications. </P>
+<P CLASS="Body">
+That is why using the Library GPL is a good strategy for the C library. For 
other libraries, the strategic decision needs to be considered on a 
case-by-case basis. When a library does a special job that can help write 
certain kinds of programs, then releasing it under the GPL, limiting it to free 
programs only, is a way of helping other free software developers, giving them 
an advantage against proprietary software. </P>
+<P CLASS="Body">
+Consider GNU Readline, a library that was developed to provide command-line 
editing for BASH. Readline is released under the ordinary GNU GPL, not the 
Library GPL. This probably does reduce the amount Readline is used, but that is 
no loss for us. Meanwhile, at least one useful application has been made free 
software specifically so it could use Readline, and that is a real gain for the 
community. </P>
+<P CLASS="Body">
+Proprietary software developers have the advantages money provides; free 
software developers need to make advantages for each other. I hope some day we 
will have a large collection of GPL-covered libraries that have no parallel 
available to proprietary software, providing useful modules to serve as 
building blocks in new free software, and adding up to a major advantage for 
further free software development. </P>
+<H2 CLASS="HeadA">
+Scratching an Itch? </H2>
+<P CLASS="Body">
+Eric Raymond says that &quot;Every good work of software starts by scratching 
a developer's personal itch.&quot; Maybe that happens sometimes, but many 
essential pieces of GNU software were developed in order to have a complete 
free operating system. They come from a vision and a plan, not from impulse. 
</P>
+<P CLASS="Body">
+For example, we developed the GNU C library because a Unix-like system needs a 
C library, the Bourne-Again Shell (BASH) because a Unix-like system needs a 
shell, and the GNU <EM CLASS="Emphasis">tar</EM> because a Unix-like system 
needs a <EM CLASS="Emphasis">tar</EM> program. The same is true for my 
programs, the GNU C compiler, GNU Emacs, GDB, and GNU Make.</P>
+<P CLASS="Body">
+Some GNU programs were developed to cope with specific threats to our freedom. 
Thus, we developed <EM CLASS="Emphasis">gzip</EM> to replace the Compress 
program, which had been lost to the community because of the LZW patents. We 
found people to develop LessTif, and more recently started GNOME and Harmony, 
to address the problems caused by certain proprietary libraries (see below). We 
are developing the GNU Privacy Guard to replace popular non-free encryption 
software, because users should not have to choose between privacy and 
freedom.</P>
+<P CLASS="Body">
+Of course, the people writing these programs became interested in the work, 
and many features were added to them by various people for the sake of their 
own needs or interests. But that is not why the programs exist. </P>
+<H2 CLASS="HeadA">
+Unexpected Developments </H2>
+<P CLASS="Body">
+At the beginning of the GNU project, I imagined that we would develop the 
whole GNU system, then release it as a whole. That is not how it happened. </P>
+<P CLASS="Body">
+Since each component of the GNU system was implemented on a Unix system, each 
component could run on Unix systems, long before a complete GNU system existed. 
Some of these programs became popular, and users began extending them and 
porting them--to the various incompatible versions of Unix, and sometimes to 
other systems as well. </P>
+<P CLASS="Body">
+The process made these programs much more powerful, and attracted both funds 
and contributors to the GNU project. But it probably also delayed completion of 
a minimal working system by several years, as GNU developers' time was put into 
maintaining these ports and adding features to the existing components, rather 
than moving on to write one missing component after another. </P>
+<H2 CLASS="HeadA">
+The GNU HURD </H2>
+<P CLASS="Body">
+By 1990, the GNU system was almost complete; the only major missing component 
was the kernel. We had decided to implement our kernel as a collection of 
server processes running on top of Mach. Mach is a microkernel developed at 
Carnegie Mellon University and then at the University of Utah; the GNU HURD is 
a collection of servers (or &quot;herd of gnus&quot;) that run on top of Mach, 
and do the various jobs of the Unix kernel. The start of development was 
delayed as we waited for Mach to be released as free software, as had been 
promised. </P>
+<P CLASS="Body">
+One reason for choosing this design was to avoid what seemed to be the hardest 
part of the job: debugging a kernel program without a source-level debugger to 
do it with. This part of the job had been done already, in Mach, and we 
expected to debug the HURD servers as user programs, with the GNU debugger 
(GDB). But it took a long time to make that possible, and the multi-threaded 
servers that send messages to each other have turned out to be very hard to 
debug. Making the HURD work solidly has stretched on for many years. </P>
+<H2 CLASS="HeadA">
+Alix </H2>
+<P CLASS="Body">
+The GNU kernel was not originally supposed to be called the HURD. Its original 
name was Alix--named after the woman who was my sweetheart at the time. She, a 
Unix system administrator, had pointed out how her name would fit a common 
naming pattern for Unix system versions; as a joke, she told her friends, 
&quot;Someone should name a kernel after me.&quot; I said nothing, but decided 
to surprise her with a kernel named Alix. </P>
+<P CLASS="Body">
+It did not stay that way. Michael Bushnell (now Thomas), the main developer of 
the kernel, preferred the name HURD, and redefined Alix to refer to a certain 
part of the kernel--the part that would trap system calls and handle them by 
sending messages to HURD servers. </P>
+<P CLASS="Body">
+Ultimately, Alix and I broke up, and she changed her name; independently, the 
HURD design was changed so that the C library would send messages directly to 
servers, and this made the Alix component disappear from the design. </P>
+<P CLASS="Body">
+But before these things happened, a friend of hers came across the name Alix 
in the HURD source code, and mentioned the name to her. So the name did its 
job. </P>
+<H2 CLASS="HeadA">
+Linux and GNU/Linux </H2>
+<P CLASS="Body">
+The GNU HURD is not ready for production use. Fortunately, another kernel is 
available. In 1991, Linus Torvalds developed a Unix-compatible kernel and 
called it Linux. Around 1992, combining Linux with the not-quite-complete GNU 
system resulted in a complete free operating system. (Combining them was a 
substantial job in itself, of course.) It is due to Linux that we can actually 
run a version of the GNU system today. </P>
+<P CLASS="Body">
+We call this system version GNU/Linux, to express its composition as a 
combination of the GNU system with Linux as the kernel. </P>
+<H2 CLASS="HeadA">
+Challenges in Our Future </H2>
+<P CLASS="Body">
+We have proved our ability to develop a broad spectrum of free software. This 
does not mean we are invincible and unstoppable. Several challenges make the 
future of free software uncertain; meeting them will require steadfast effort 
and endurance, sometimes lasting for years. It will require the kind of 
determination that people display when they value their freedom and will not 
let anyone take it away. </P>
+<P CLASS="Body">
+The following four sections discuss these challenges. </P>
+<H3 CLASS="HeadB">
+Secret Hardware </H3>
+<P CLASS="Body">
+Hardware manufactures increasingly tend to keep hardware specifications 
secret. This makes it difficult to write free drivers so that Linux and XFree86 
can support new hardware. We have complete free systems today, but we will not 
have them tomorrow if we cannot support tomorrow's computers. </P>
+<P CLASS="Body">
+There are two ways to cope with this problem. Programmers can do reverse 
engineering to figure out how to support the hardware. The rest of us can 
choose the hardware that is supported by free software; as our numbers 
increase, secrecy of specifications will become a self-defeating policy. </P>
+<P CLASS="Body">
+Reverse engineering is a big job; will we have programmers with sufficient 
determination to undertake it? Yes--if we have built up a strong feeling that 
free software is a matter of principle, and non-free drivers are intolerable. 
And will large numbers of us spend extra money, or even a little extra time, so 
we can use free drivers? Yes, if the determination to have freedom is 
widespread. </P>
+<H3 CLASS="HeadB">
+Non-Free Libraries </H3>
+<P CLASS="Body">
+A non-free library that runs on free operating systems acts as a trap for free 
software developers. The library's attractive features are the bait; if you use 
the library, you fall into the trap, because your program cannot usefully be 
part of a free operating system. (Strictly speaking, we could include your 
program, but it won't *run* with the library missing.) Even worse, if a program 
that uses the proprietary library becomes popular, it can lure other 
unsuspecting programmers into the trap. </P>
+<P CLASS="Body">
+The first instance of this problem was the Motif toolkit, back in the 80s. 
Although there were as yet no free operating systems, it was clear what problem 
Motif would cause for them later on. The GNU Project responded in two ways: by 
asking individual free software projects to support the free X toolkit widgets 
as well as Motif, and by asking for someone to write a free replacement for 
Motif. The job took many years; LessTif, developed by the Hungry Programmers, 
became powerful enough to support most Motif applications only in 1997. </P>
+<P CLASS="Body">
+Around the same time, another non-free GUI toolkit library began to gain in 
popularity. This was Qt, from Troll Technologies. Ultimately Qt was used in a 
substantial collection of free software, the desktop KDE. </P>
+<P CLASS="Body">
+Free GNU/Linux systems were unable to use KDE, because we could not use the 
library. However, some commercial distributors of GNU/Linux systems who were 
not strict about sticking with free software added KDE to their 
systems--producing a system with more capabilities, but less freedom. The KDE 
group was actively encouraging more programmers to use Qt, and millions of new 
&quot;Linux users&quot; had never been exposed to the idea that there was a 
problem in this. The situation appeared grim. </P>
+<P CLASS="Body">
+The free software community responded to the problem in two ways: GNOME and 
Harmony. </P>
+<P CLASS="Body">
+GNOME, the GNU Network Object Model Environment, is GNU's desktop project. 
Started in 1997 by Miguel de Icaza, and developed with the support of Red Hat 
Software, GNOME set out to provide similar desktop facilities, but using free 
software exclusively. It has technical advantages as well, such as supporting a 
variety of languages, not just C++. But its main purpose was freedom: not to 
require the use of any non-free software. </P>
+<P CLASS="Body">
+Harmony is a compatible replacement library, designed to make it possible to 
run KDE software without using Qt. </P>
+<P CLASS="Body">
+In November 1998, the developers of Qt announced a change of license which, 
when carried out, should make Qt free software. There is no way to be sure, but 
I think that this was partly due to the community's firm response to the 
problem that Qt posed when it was non-free. (The new license is inconvenient 
and inequitable, so it remains desirable to avoid using Qt.) </P>
+<P CLASS="Body">
+How will we respond to the next tempting non-free library? Will the whole 
community understand the need to stay out of the trap? Or will many of us give 
up freedom for convenience, and produce a major problem? Our future depends on 
our philosophy. </P>
+<H3 CLASS="HeadB">
+Software Patents </H3>
+<P CLASS="Body">
+The worst threat we face comes from software patents, which can put algorithms 
and features off-limits to free software for up to twenty years. The LZW 
compression algorithm patents were applied for in 1983, and we still cannot 
release free software to produce proper compressed GIFs. In 1998, a free 
program to produce MP3 compressed audio was removed from distribution under 
threat of a patent suit. </P>
+<P CLASS="Body">
+There are ways to cope with patents: we can search for evidence that a patent 
is invalid, and we can look for alternative ways to do a job. But each of these 
methods works only sometimes; when both fail, a patent may force all free 
software to lack some feature that users want. What will we do what this 
happens? </P>
+<P CLASS="Body">
+Those of us who value free software for freedom's sake will stay with free 
software anyway. We will manage to get work done without the patented features. 
But those who value free software because they expect it to be technically 
superior are likely to call it a failure when a patent holds it back. Thus, 
while it is useful to talk about the practical effectiveness of the 
&quot;cathedral&quot; model of development, and the reliability and power of 
some free software, we must not stop there. We must talk about freedom and 
principle. </P>
+<H3 CLASS="HeadB">
+Free Documentation </H3>
+<P CLASS="Body">
+The biggest deficiency in our free operating systems is not in the 
software--it is the lack of good free manuals that we can include in our 
systems. Documentation is an essential part of any software package; when an 
important free software package does not come with a good free manual, that is 
a major gap. We have many such gaps today. </P>
+<P CLASS="Body">
+Free documentation, like free software, is a matter of freedom, not price. The 
criterion for a free manual is pretty much the same as for free software: it is 
a matter of giving all users certain freedoms. Redistribution (including 
commercial sale) must be permitted, online and on paper, so that the manual can 
accompany every copy of the program. </P>
+<P CLASS="Body">
+Permission for modification is crucial too. As a general rule, I don't believe 
that it is essential for people to have permission to modify all sorts of 
articles and books. For example, I don't think you or I are obliged to give 
permission to modify articles like this one, which describe our actions and our 
views. </P>
+<P CLASS="Body">
+But there is a particular reason why the freedom to modify is crucial for 
documentation for free software. When people exercise their right to modify the 
software, and add or change its features, if they are conscientious they will 
change the manual too--so they can provide accurate and usable documentation 
with the modified program. A manual which does not allow programmers to be 
conscientious and finish the job does not fill our community's needs. </P>
+<P CLASS="Body">
+Some kinds of limits on how modifications are done pose no problem. For 
example, requirements to preserve the original author's copyright notice, the 
distribution terms, or the list of authors, are OK. It is also no problem to 
require modified versions to include notice that they were modified, even to 
have entire sections that may not be deleted or changed, as long as these 
sections deal with non-technical topics. These kinds of restrictions are not a 
problem because they don't stop the conscientious programmer from adapting the 
manual to fit the modified program. In other words, they don't block the free 
software community from making full use of the manual. </P>
+<P CLASS="Body">
+However, it must be possible to modify all the <EM 
CLASS="Emphasis">technical</EM> content of the manual, and then distribute the 
result in all the usual media, through all the usual channels; otherwise, the 
restrictions do obstruct the community, the manual is not free, and we need 
another manual. </P>
+<P CLASS="Body">
+Will free software developers have the awareness and determination to produce 
a full spectrum of free manuals? Once again, our future depends on philosophy. 
</P>
+<H3 CLASS="HeadB">
+We Must Talk About Freedom </H3>
+<P CLASS="Body">
+Estimates today are that there are ten million users of GNU/Linux systems such 
as Debian GNU/Linux and Red Hat Linux. Free software has developed such 
practical advantages that users are flocking to it for purely practical 
reasons. </P>
+<P CLASS="Body">
+The good consequences of this are evident: more interest in developing free 
software, more customers for free software businesses, and more ability to 
encourage companies to develop commercial free software instead of proprietary 
software products. </P>
+<P CLASS="Body">
+But interest in the software is growing faster than awareness of the 
philosophy it is based on, and this leads to trouble. Our ability to meet the 
challenges and threats described above depends on the will to stand firm for 
freedom. To make sure our community has this will, we need to spread the idea 
to the new users as they come into the community. </P>
+<P CLASS="Body">
+But we are failing to do so: the efforts to attract new users into our 
community are far outstripping the efforts to teach them the civics of our 
community. We need to do both, and we need to keep the two efforts in balance. 
</P>
+<H2 CLASS="HeadA">
+&quot;Open Source&quot; </H2>
+<P CLASS="Body">
+Teaching new users about freedom became more difficult in 1998, when a part of 
the community decided to stop using the term &quot;free software&quot; and say 
&quot;open-source software&quot; instead. </P>
+<P CLASS="Body">
+Some who favored this term aimed to avoid the confusion of &quot;free&quot; 
with &quot;gratis&quot;--a valid goal. Others, however, aimed to set aside the 
spirit of principle that had motivated the free software movement and the GNU 
project, and to appeal instead to executives and business users, many of whom 
hold an ideology that places profit above freedom, above community, above 
principle. Thus, the rhetoric of &quot;Open Source&quot; focuses on the 
potential to make high quality, powerful software, but shuns the ideas of 
freedom, community, and principle. </P>
+<P CLASS="Body">
+The &quot;Linux&quot; magazines are a clear example of this--they are filled 
with advertisements for proprietary software that works with GNU/Linux. When 
the next Motif or Qt appears, will these magazines warn programmers to stay 
away from it, or will they run ads for it? </P>
+<P CLASS="Body">
+The support of business can contribute to the community in many ways; all else 
being equal, it is useful. But winning their support by speaking even less 
about freedom and principle can be disastrous; it makes the previous imbalance 
between outreach and civics education even worse. </P>
+<P CLASS="Body">
+&quot;Free software&quot; and &quot;Open Source&quot; describe the same 
category of software, more or less, but say different things about the 
software, and about values. The GNU Project continues to use the term 
&quot;free software,&quot; to express the idea that freedom, not just 
technology, is important. </P>
+<H2 CLASS="HeadA">
+Try! </H2>
+<P CLASS="Body">
+Yoda's philosophy (There is no &quot;try&quot;) sounds neat, but it doesn't 
work for me. I have done most of my work while anxious about whether I could do 
the job, and unsure that it would be enough to achieve the goal if I did. But I 
tried anyway, because there was no one but me between the enemy and my city. 
Surprising myself, I have sometimes succeeded. </P>
+<P CLASS="Body">
+Sometimes I failed; some of my cities have fallen. Then I found another 
threatened city, and got ready for another battle. Over time, I've learned to 
look for threats and put myself between them and my city, calling on other 
hackers to come and join me. </P>
+<P CLASS="Body">
+Nowadays, I'm often not the only one. It is a relief and a joy when I see a 
regiment of hackers digging in to hold the line, and I realize this city may 
survive--for now. But the dangers are greater each year, and now Microsoft has 
explicitly targeted our community. We can't take the future of freedom for 
granted. Don't take it for granted! If you want to keep your freedom, you must 
be prepared to defend it. </P>
+<HR>
+<P CLASS="Footnote"><A NAME="footnote-1"></A>
+1.
+The use of &quot;hacker&quot; to mean &quot;security breaker&quot; is a 
confusion on the part of the mass media. We hackers refuse to recognize that 
meaning, and continue using the word to mean, &quot;Someone who loves to 
program and enjoys being clever about it.&quot; </P>
+<P CLASS="Footnote"><A NAME="footnote-2"></A>
+2.
+As an atheist, I don't follow any religious leaders, but I sometimes find I 
admire something one of them has said.</P>
+<P CLASS="Footnote"><A NAME="footnote-3"></A>
+3.
+In 1984 or 1985, Don Hopkins (a very imaginative fellow) mailed me a letter. 
On the envelope he had written several amusing sayings, including this one: 
&quot;Copyleft--all rights reversed.&quot; I used the word &quot;copyleft&quot; 
to name the distribution concept I was developing at the time. </P>
+<P CLASS="Footnote"><A NAME="footnote-4"></A>
+4.
+ &quot;Bourne Again Shell&quot; is a joke on the name &quot;Bourne 
Shell,&quot; which was the usual shell on Unix. </P>
+
+</font>
+<br>
+<br>
+<font size="3">
+<P align=right>
+<a href="tiemans.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/tiemann.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/tiemann.gif
diff -N Proyectos/Mecagtk/OpenSource/tiemann.gif
Binary files /dev/null and /tmp/cvsjIWvTv differ

Index: Proyectos/Mecagtk/OpenSource/tiemans.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/tiemans.html
diff -N Proyectos/Mecagtk/OpenSource/tiemans.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/tiemans.html   3 Mar 2012 06:14:20 -0000       
1.1
@@ -0,0 +1,895 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Michael Tiemann">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Future of Cygnus Solutions </TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Future of Cygnus Solutions </H1>
+<H2 CLASS="ChapterSubtitle" align="right">An Entrepreneur's Account</H2>
+<H4 CLASS="ChapterAuthor" align="right">Michael Tiemann</H4>
+<P CLASS="Body">
+Founded in 1989, Cygnus Solutions was the first, and according to a survey by 
<CITE CLASS="Citation">Forbes</CITE> magazine in August 1998, is by far the 
largest Open Source business today. Cygnus has established its primary product, 
the GNUPro Developers Kit, as both the leading compiler product and the leading 
debugger product in the embedded software tools market. Cygnus customers 
include the world's top microprocessor companies as well as leading 
consumer-electronics, Internet, telecommunications, office automation, 
networking, aerospace, and automotive companies. With headquarters in 
Sunnyvale, CA, and offices in Atlanta (GA), Boston (MA), Cambridge (UK), Tokyo 
(JP), Toronto (CN), and remote employees working from various locations ranging 
from Australia to Oregon, Cygnus is the largest privately held company in the 
embedded software industry, larger than two publicly-held companies and about 
to overtake the third largest. With a CAGR greater than 65% since 1992, Cygnus 
has been on the <CITE CLASS="Citation">San Jose Business Journal</CITE>'s Top 
100 Fastest Growing Private Companies three years in a row, and now ranks on 
the Software 500 list (based on revenue of all software businesses in the 
world). </P>
+<P CLASS="Body">
+In this essay, I will describe the Open Source model that provided the 
blueprint for our success, and how we are revising and enhancing it for our 
future endeavors. </P>
+<P CLASS="Body">
+It wasn't until November 13th, 1989 that we finally received the letter from 
the California Department of Corporations informing us that our application had 
been approved, and that we could deposit our $6,000 startup capital and begin 
transacting business as &quot;Cygnus Support.&quot; That day was the 
culmination of a vision that began more than two years earlier, and the 
beginning of a journey which continues today, almost 10 years later. </P>
+<P CLASS="Body">
+The vision began innocently enough. My dad once told me, &quot;If you're going 
to read a book, make sure you read it cover to cover.&quot; Like most fatherly 
advice, I applied it only when it suited me, and in 1987, when I had become 
bored with my job and interested in GNU software, I decided to read Richard 
Stallman's self-published book <CITE CLASS="Citation">GNU Emacs Manual</CITE> 
cover to cover. (This book was self-published because at that time, no 
self-respecting publisher would print a book that encouraged people to freely 
make legal copies of the text. In fact today, it's still a difficult concept 
for some publishers to grasp.) </P>
+<P CLASS="Body">
+Emacs is a fascinating program. More than a text editor, it has been 
customized to let you read and respond to email, read and post to newsgroups, 
start a shell, run compilations and debug the resulting programs, and it even 
gives you interactive access to the LISP interpreter that drives it. Creative 
users (or similarly bored hackers) have extended emacs with whimsical features, 
such as &quot;doctor&quot; mode (a Rogerian psychoanalytic program inspired by 
John McCarthy's ELIZA program), &quot;dissociated-press,&quot; which scrambles 
text in a way that makes for difficult and sometimes hilarious reading, and 
even a program that will animate the solution of the Towers of Hanoi on a text 
screen. It was this depth and richness that drove me to want to learn more, to 
read the <CITE CLASS="Citation">GNU Emacs Manual</CITE> and the GNU Emacs 
source code. </P>
+<P CLASS="Body">
+The last chapter of the book, &quot;The GNU Manifesto,&quot; was a personal 
answer from the author to the overarching question that nagged throughout my 
entire reading: why is such a cool program available as freely redistributable 
software (a.k.a. Open Source)? Stallman answers in the general question: </P>
+<BLOCKQUOTE CLASS="Quote">
+Why I Must Write GNU </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="Quote">
+I consider that the golden rule requires that if I like a program I must share 
it with other people who like it. Software sellers want to divide the users and 
conquer them, make each user agree not to share with others. I refuse to break 
solidarity with other users in this way. </BLOCKQUOTE>
+<P CLASS="Body">
+There is much more to Stallman's manifesto--too much to quote here. (A 
reference is <A 
HREF="http://www.fsf.org/gnu/manifesto.html";>http://www.fsf.org/gnu/manifesto.html</A>.)
 Suffice it to say that on the surface, it read like a socialist polemic, but I 
saw something different. I saw a business plan in disguise. The basic idea was 
simple: Open Source would unify the efforts of programmers around the world, 
and companies that provided commercial services (customizations, enhancements, 
bug fixes, support) based on that software could capitalize on the economies of 
scale and broad appeal of this new kind of software. </P>
+<P CLASS="Body">
+Emacs was not the only mind-blowing program to come from the Free Software 
Foundation. There was the GNU Debugger (GDB), which Stallman had to write 
because the debuggers from Digital Equipment Corporation (now part of Compaq) 
and Sun Microsystems were simply not up to the task of debugging something as 
complex as Emacs. Not only could it handle big tasks, but it handled them 
elegantly, with commands and extensions that were geared towards programmers. 
And because GDB was open-source software, programmers began adding more 
extensions that made GDB even more powerful. This was a kind of scalability 
that did not exist in proprietary software. </P>
+<P CLASS="Body">
+The real bombshell came in June of 1987, when Stallman released the GNU C 
Compiler (GCC) Version 1.0. I downloaded it immediately, and I used all the 
tricks I'd read about in the Emacs and GDB manuals to quickly learn its 110,000 
lines of code. Stallman's compiler supported two platforms in its first 
release: the venerable VAX and the new Sun3 workstation. It handily generated 
better code on these platforms than the respective vendors' compilers could 
muster. In two weeks, I had ported GCC to a new microprocessor (the 32032 from 
National Semiconductor), and the resulting port was 20% faster than the 
proprietary compiler supplied by National. With another two weeks of hacking, I 
had raised the delta to 40%. (It was often said that the reason the National 
chip faded from existence was because it was supposed to be a 1 MIPS chip, to 
compete with Motorola's 68020, but when it was released, it only clocked .75 
MIPS on application benchmarks. Note that 140% * 0.75 MIPS =  1.05 MIPS. How 
much did poor compiler technology cost National?) Compilers, Debuggers, and 
Editors are the Big 3 tools that programmers use on a day-to-day basis. GCC, 
GDB, and Emacs were so profoundly better than the proprietary alternatives, I 
could not help but think about how much money (not to mention economic benefit) 
there would be in replacing proprietary technology with technology that was not 
only better, but also getting better faster. </P>
+<P CLASS="Body">
+Again, a quote from the GNU Manifesto: </P>
+<BLOCKQUOTE CLASS="Quote">
+There is nothing wrong with wanting pay for work, or seeking to maximize one's 
income, as long as one does not use means that are destructive. But the means 
customary in the field of software today are based on destruction. </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="Quote">
+Extracting money from users of a program by restricting their use of it is 
destructive because the restrictions reduce the amount and the ways that the 
program can be used. This reduces the amount of wealth that humanity derives 
from the program. When there is a deliberate choice to restrict, the harmful 
consequences are deliberate destruction. </BLOCKQUOTE>
+<BLOCKQUOTE CLASS="Quote">
+The reason a good citizen does not use such destructive means to become 
wealthier is that, if everyone did so, we would all become poorer from the 
mutual destructiveness. </BLOCKQUOTE>
+<P CLASS="Body">
+Heavy stuff, but the GNU Manifesto is ultimately a rational document. It 
dissects the nature of software, the nature of programming, the great tradition 
of academic learning, and concludes that regardless of the monetary 
consequences, there are ethical and moral imperatives to freely share 
information that was freely shared with you. I reached a different conclusion, 
one which Stallman and I have often argued, which was that the freedom to use, 
distribute, and modify software will prevail against any model that attempts to 
limit that freedom. It will prevail not for ethical reasons, but for 
competitive, market-driven reasons. </P>
+<P CLASS="Body">
+At first I tried to make my argument the way that Stallman made his: on the 
merits. I would explain how freedom to share would lead to greater innovation 
at lower cost, greater economies of scale through more open standards, etc., 
and people would universally respond &quot;It's a great idea, but it will never 
work, because nobody is going to pay money for free software.&quot; After two 
years of polishing my rhetoric, refining my arguments, and delivering my 
messages to people who paid for me to fly all over the world, I never got 
farther than &quot;It's a great idea, but . . .,&quot; when I had my second 
insight: if everybody thinks it's a great idea, it probably is, and if nobody 
thinks it will work, I'll have no competition! </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+-F = -ma<br>
+<EM CLASS="EpigraphAuthor">Isaac Newton</EM>
+</p>
+</blockquote>
+<P CLASS="Body">
+You'll never see a physics textbook introduce Newton's law in this way, but 
mathematically speaking, it is just as valid as &quot;F = ma&quot;. The point 
of this observation is that if you are careful about what assumptions you turn 
upside down, you can maintain the validity of your equations, though your 
result may look surprising. I believed that the model of providing commercial 
support for open-source software was something that looked impossible because 
people were so excited about the minus signs that they forgot to count and 
cancel them. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+An invasion of armies can be resisted, but not an idea whose time has come.<br>
+<EM CLASS="EpigraphAuthor">Victor Hugo </EM></P>
+</blockquote>
+<P CLASS="Body">
+There was one final (and deeply hypothetical) question I had to answer before 
I was ready to drop out of the Ph.D. program at Stanford and start a company. 
Suppose that instead of being nearly broke, I had enough money to buy out any 
proprietary technology for the purposes of creating a business around that 
technology. I thought about Sun's technology. I thought about Digital's 
technology. I thought about other technology that I knew about. How long did I 
think I could make that business successful before somebody else who built 
their business around GNU would wipe me out? Would I even be able to recover my 
initial investment? When I realized how unattractive the position to compete 
with open-source software was, I knew it was an idea whose time had come. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+The difference between theory and practice tends to be very small in theory, 
but in practice it is very large indeed. <br>
+<EM CLASS="EpigraphAuthor">Anonymous </EM></P>
+</blockquote>
+<P CLASS="Body">
+In this section, I will detail the theory behind the Open Source business 
model, and ways in which we attempted to make this theory practical. </P>
+<P CLASS="Body">
+We begin with a few famous observations: </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+Free markets are self-organizing, permitting the most efficient use of 
resources for the greatest creation of value.<br>
+<EM CLASS="EpigraphAuthor">Adam Smith </EM><EM CLASS="Epigraph">Information, 
no matter how expensive to create, can be replicated<BR>
+</blockquote>
+and shared at little or no cost.</EM><EM CLASS="EpigraphAuthor">Thomas 
Jefferson </EM></P>
+<P CLASS="Body">
+The concept of free market economics is so vast that I often like to joke that 
each year when it comes time to award the Nobel prize in economics, it goes to 
the economist who most eloquently paraphrases Adam Smith. But behind that joke 
lies a kernel of truth: there is untapped and unlimited economic potential 
waiting to be harnessed by using a more true free market system for software. 
</P>
+<P CLASS="Body">
+In the days of Adam Smith, free market economics went as far as one could 
travel or trade in person, but larger trades, especially trades between 
nations, were heavily controlled. When a sufficient number of business people 
became disenchanted with the prevailing royalty-based system, they revolted and 
created a new government that was designed to take less interest in their 
affairs than almost any government that had come before it. Indeed, it was 
freedom that provided the underlying architecture and vision of the 
Constitution of the American government, and freedom again that seems to be at 
the root of every important cause or action in today's global economic and 
political arena. What makes freedom so compelling? And what has made freedom so 
responsible for economic prosperity? We will address these questions shortly. 
</P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+The more you understand what is wrong with a figure,<BR>
+the more valuable that figure becomes.<br>
+<EM CLASS="EpigraphAuthor">Lord Kelvin </EM></P>
+</blockquote>
+<P CLASS="Body">
+Clearly, when it came to tools for programmers in 1989, proprietary software 
was in a dismal state. First, the tools were primitive in the features they 
offered. Second, the features, when available, often had built-in limitations 
that tended to break when projects started to get complicated. Third, support 
from proprietary vendors was terrible; unless you were in the process of buying 
lots of hardware or renewing a large software site license, and could use the 
power of the purse to your advantage, you were out of luck when you ran into 
one of these built-in limitations. And finally, every vendor implemented their 
own proprietary extensions, so that when you did use the meager features of one 
platform, you became, imperceptibly at first, then more obviously later, 
inextricably tied to that platform. All in all, it was quite clear that 
whatever the merits of free market economics, they were not at work in the 
software marketplace. The extent to which the proprietary software model was a 
broken model made the study of that model extremely valuable indeed. </P>
+<P CLASS="Body">
+Today, as then, free market economics lives within the walls of proprietary 
software companies (where competing engineers and product groups vie for 
funding and favor). Outside their proprietary walls, the use and distribution 
of that software is heavily controlled by license agreements, patents, and 
trade secrets. One can only wonder what power, what efficiency is lost by 
practicing freedom at the micro level, and not at the macro level. By starting 
a company prepared to support users at the level of source code, we were going 
to find out. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+>Invention is 1% inspiration and 99% perspiration.<br>
+<EM CLASS="EpigraphAuthor">Thomas Edison </EM></P>
+</blockquote>
+<P CLASS="Body">
+The simplistic view of a software company is that once you've created some 
software that people want to buy, the act of printing copies of that software 
and distributing it is not unlike printing money: the cost of goods is 
negligible, and the margin nearly perfect. I believe that one reason software 
reached such a poor state of affairs in the 1980s was that people focused on 
perfecting the abstract model of printing money, without concern for what 
happened once people actually started using the currency. The concept of 
software support was seen as a degenerate by-product of some flaw in the 
software product process, and that by minimizing software support investment, 
one could maximize profits. </P>
+<P CLASS="Body">
+This not only frustrated users, but it was bad for the software as well. 
Features that were easy to implement were often dismissed as 
&quot;non-strategic.&quot; Without access to source code, features that 
customers would otherwise be able to implement themselves remained points of 
speculation and contention. And ultimately vendors (and their marketing 
departments), not customers, defined the arena of competition with a myriad of 
useless but easy-to-express features. Free market economics had been turned 
upside down. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+>Nobody has a monopoly on the truth.<br>
+<EM CLASS="EpigraphAuthor">Anonymous </EM><EM CLASS="Epigraph-">Common Law is 
legal code that is free to all people equally.</EM><EM 
CLASS="EpigraphAuthor">Michael Tiemann </EM></P>
+</blockquote>
+<P CLASS="Body">
+It is all very well and good to have wonderful theories about how to make the 
world a better place. It is another thing entirely to get those theories funded 
to the point that they are self-sustaining. Although service-based companies 
were rare in the world of software products, there were many cases to study in 
other areas. </P>
+<P CLASS="Body">
+Consider the practice of law in America (or Great Britain). Common law is 
freely available to all who wish to use it. One need not license a decision 
such as <CITE CLASS="Citation">Roe v. Wade</CITE> in order to use it for 
arguments. Indeed, the decisions, once made, and at whatever cost, are free to 
all. Yet for all this freedom, lawyers are among the most expensive 
professionals to be found. How can a practice of law, which has no primary 
proprietary code, command such value? </P>
+<P CLASS="Body">
+It is not just the act of prosecuting law that people value so highly. It is 
also the cumulative value of that prosecution. If you hire a good lawyer, and 
in the course of the prosecution, a decision is made in your favor, that 
precedent becomes a new part of the law. Justice is not blind; it is full of 
history. </P>
+<P CLASS="Body">
+This is somewhat analogous to the concept of creating and maintaining 
standards with open-source software. It is very expensive to create a standard 
and get it right. But it is far more expensive to work without standards or to 
try to maintain a standard if the standard is bogus. There is great value in 
having good people working on software whose precedents will set the standards 
of tomorrow. We believed at the beginning that people would understand this 
value proposition, and would value the opportunity to pay us to create 
high-quality, open-source programs that would become the <EM 
CLASS="ForeignPhrase">de facto</EM> standard of the software world. </P>
+<H2 CLASS="HeadA">
+Cygnus in the Early Years </H2>
+<P CLASS="Body">
+Having mapped out the theory, it was time to put the theory into practice. 
Creating a service-based business is easy enough, if you know anything about 
business. Unfortunately, between the three founders of Cygnus, not one had any 
experience in running a business. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+Always make new mistakes.<br>
+<EM CLASS="EpigraphAuthor">Esther Dyson </EM></P>
+</blockquote>
+<P CLASS="Body">
+We used books from the Nolo Press to incorporate our business, establish our 
by-laws, and complete various other formalities. For every penny we saved in 
the first year, we paid out dollars by the thousands later on down the road. 
(It's not clear that we could have done any better hiring professional advice 
since the first such advice we received cost us hundreds per hour, and still 
cost us tens of thousands later to fix. For the most part, that still says more 
about our inability at the time to properly judge the scope of legal/corporate 
problems and to request the proper advice than it does about the particular 
incompetence of the many lawyers we tried talking to.) </P>
+<P CLASS="Body">
+Having created a completely new business model, we also created our own 
concepts of finance, accounting, marketing, sales, customer information, and 
support. Each of these creations served us adequately in the first year of 
business, where everything was chaotic, and everybody was focused on doing 
whatever job was necessary to get the business off the ground, but each needed 
to be completely retooled as the business grew. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+Cygnus--We Make Free Software Affordable<br>
+<EM CLASS="EpigraphAuthor">John Gilmore </EM></P>
+</blockquote>
+<P CLASS="Body">
+To combat the chaos, we worked hard to make the basic business premise as 
simple as possible: we were going to provide proven technical support for 
proven technical software, and we were going to use economies of scale to make 
it profitable. In our estimation, we were going to provide two to four times 
the quality of support and development capabilities that in-house people could 
deliver, and we were going to provide these services for a half to a quarter of 
the cost. We downplayed all the other stuff about open-source software because 
it was far too nebulous to sell. We just focused on giving people better tools 
for less money, and contract by contract, we learned how to do that. </P>
+<P CLASS="Body">
+We wrote our first contract in February of 1990, and by the end of April, we 
had already written over $150,000 worth of contracts. In May, we sent letters 
to 50 prospects we had identified as possibly interested in our support, and in 
June, to another 100. Suddenly, the business was real. By the end of the first 
year, we had written $725,000 worth of support and development contracts, and 
everywhere we looked, there was more opportunity. </P>
+<P CLASS="Body">
+For all this success, we were brewing some serious problems. If we were 
selling our services for half to a quarter what an internal resource would 
cost, then were writing contracts that would cost in total between $1.5M to $3M 
to deliver, yet we only had five people in the whole company: one sales person, 
one part-time graduate student, and three founders doing everything from 
Ethernet wiring to letterhead proofing. How big would the business have to be 
before economies of scale really kicked in? At its current rate of growth, how 
many more all-nighters would we have to pull to get to that point? Nobody knew, 
because we didn't have any financial or operational models. </P>
+<H2 CLASS="HeadA">
+GNUPro </H2>
+<P CLASS="Body">
+We decided that we needed to achieve economies of scale before burnout became 
a real problem. And, thinking like engineers, we decided that the fastest way 
to achieve these economies of scale was to ruthlessly focus on the smallest set 
of open-source technology that we could reasonably sell as a useful solution. 
The smaller the focus, we reasoned, the easier it would be to achieve some 
concept of scale. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+First, establish a firm base.<br>
+<EM CLASS="EpigraphAuthor">Sun Tzu </EM></P>
+</blockquote>
+<P CLASS="Body">
+Throwing away plans to support shell tools, file utilities, source code 
control software, and even plans to write a free kernel for the Intel 386, we 
settled on selling the GNU compiler and debugger as a shrink-wrapped product. 
There were a dozen or so companies that sold third-party 32-bit compilers, and 
there were another dozen internal compiler groups at companies like Sun, HP, 
IBM, etc. Adding up the numbers, we felt that if we could take over the 32-bit 
compiler market, we'd be big enough to do all the other cool things we had 
envisioned from the outset (a full-on Open Source play, analogous to the EDS 
outsourcing model for IBM systems). </P>
+<P CLASS="Body">
+The GNU compiler already supported dozens of host environments and over a 
dozen target architectures (I had written six of the ports myself ), making it 
one of the most widely ported compilers of its time. The GNU debugger ran on 
about five native platforms, and several people had adapted it to support 
embedded systems as well. We naively assumed that making a shrink-wrapped 
product was a mere matter of collecting bits onto a single distribution, 
writing a README, adding an install script, getting some product collateral, 
testing it, and shipping it. The reality was far more challenging. </P>
+<P CLASS="Body">
+First, GCC was in the process of transitioning from Version 1.42 to Version 
2.0. While GCC Version 1 was good enough to beat most compilers on CISC 
machines like the m68k and the VAX, lots of new optimizations were needed to 
make it competitive on RISC platforms. When I did the first GCC port to the 
SPARC in 1988, GCC was 20% <EM CLASS="Emphasis">slower</EM> than Sun's 
compiler. I wrote an instruction scheduler in 1989 that narrowed the gap to 
10%, and I worked on a branch scheduler that same year that, with the 
instruction scheduler, got GCC to within 5% of Sun's compiler. With the world 
transitioning from CISC to RISC, we went from having hands-down the best 
compiler in almost every regard to a more complex set of tradeoffs the customer 
would have to evaluate. It was no longer a simple, straightforward sell. </P>
+<P CLASS="Body">
+Second, GNU C++ was falling behind. I wrote GNU C++ in the fall of 1987, 
making it the first native-code C++ compiler in the world. C++ was a much more 
complex language than C, and it was still evolving when we started Cygnus. In 
1990, several new, even more complex features became &quot;standard,&quot; and 
with all the distractions of Cygnus, I had no time to keep GNU C++ current. </P>
+<P CLASS="Body">
+Third, GDB was all over the map. While GCC and G++ had remained reasonably 
coherent, with regular releases being made from a central location, GDB 
suffered fragmentation. Open-source opponents will argue that a benefit of 
proprietary software is that there's only one &quot;true&quot; version, whereas 
open-source software can fragment into a million out-of-sync releases, not one 
of them a legitimate &quot;standard.&quot; Because there was no strong 
maintainer of GDB, it fragmented, with hundreds of people around the world 
making their own versions to meet their own needs. </P>
+<P CLASS="Body">
+Fourth, we did not in fact have a complete toolchain: we had an assembler, 
linker, and other binary utilities (a.k.a. binutils) that worked on some, but 
not most, of the platforms supported by GCC and GDB. By the time you took the 
platforms that GCC supported, intersected that with GDB's supported platforms, 
intersected with GAS, GLD, and so forth, there were exactly zero platforms that 
worked from a common source base. </P>
+<P CLASS="Body">
+Fifth, we had no C library, which was not a problem for native platforms like 
the Sun or HP, but a Big Deal for embedded systems developers who needed its 
functionality for their standalone applications. </P>
+<P CLASS="Body">
+Sixth, while our competitors had nothing that could match our just-in-time 
engineering feats, each of them had already-complete products that they sold 
very effectively in their respective niches. By building and selling a 
shrink-wrapped product, we were changing our attack plan from an elaborate 
flanking maneuver to a frontal assault against companies that had 10 to 100 
times our revenues. </P>
+<P CLASS="Body">
+And finally, there was the matter of our own confidence. The nice thing about 
being the integrators of many quickly evolving tools is that the need for your 
services is so obvious. Skeptics challenged the very notion of a shrink-wrapped 
Open Source product by claiming that as soon as we produced anything of passing 
quality, there would be no need for our support business, and we'd be out of 
business in six months. It was a challenge to our business I would hear for the 
next four years. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+The world is full of insurmountable opportunities. <br>
+<EM CLASS="EpigraphAuthor">Yogi Berra </EM></P>
+</blockquote>
+<P CLASS="Body">
+There was nothing to do but to go for it, and with an initial estimate of 6 
months to do the work, we all agreed to &quot;double up&quot; and make it 
happen. I was tasked with growing the top line by day, and helping complete the 
work for GCC 2.0 and G++ by night. David Henkel-Wallace (a.k.a. Gumby), the 
second Cygnus founder, took on the so-called binutils and the library in 
addition to his duties as CFO and Director of Support. And John Gilmore, the 
third Cygnus founder, took on GDB. We hired some new people to help us (1) put 
the whole works into CVS (an open-source source code control system), (2) write 
configuration and installation scripts that could handle the hundreds of 
possible platforms our shrink-wrapped product might work on, (3) automate our 
testing procedures, and (4) help us with the heavy lifting on the new 
development contracts that we were closing at an accelerating rate. </P>
+<P CLASS="Body">
+Six months later, the job had inexplicably grown, and some people had grown 
bored with our strict (some would say restrictive) product focus. While the GNU 
product was the bulk of our sales and engineering efforts, we sold contracts 
for other technology, such as Kerberos (network security software), Emacs, and 
even our bug tracking and test framework software (which was still under 
development at that time). </P>
+<P CLASS="Body">
+John had sent a message to the Net saying essentially &quot;I'm going to be 
the new GDB maintainer. If you want the features you've implemented in GDB to 
be maintained in the next version, send me your complete GDB sources and I'll 
figure out how to integrate them.&quot; In six weeks, he collected 137 versions 
of GDB (mostly hacks to Version 3.5), all of which had one or more features 
that needed to be integrated. John began designing the architecture for GDB 4.0 
to support all of these features. Who was I to argue that it couldn't be done? 
</P>
+<P CLASS="Body">
+Gumby had decided that all the binary file utilities should use a common 
library that described all known object file and debugging formats. The reason 
behind this decision was clear when one looked at the functionality of the 
various tools that sit behind the compiler: </P>
+<TABLE border="1">
+<TR>
+<TH>
+<p class="cellbody">
+Tool</P>
+</TH>
+<TH>
+<p class="cellbody">
+Reads</P>
+</TH>
+<TH>
+<p class="cellbody">
+Writes</P>
+</TH>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Compiler</P>
+</TD>
+<TD>
+<p class="cellbody">
+ASCII</P>
+</TD>
+<TD>
+<p class="cellbody">
+ASCII</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Assembler</P>
+</TD>
+<TD>
+<p class="cellbody">
+ASCII</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Archiver</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Linker</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Size</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Strip</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Binary </P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Nm</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Debugger</P>
+</TD>
+<TD>
+<p class="cellbody">
+Binary</P>
+</TD>
+<TD>
+<p class="cellbody">
+none</P>
+</TD>
+</TR>
+</TABLE>
+<P CLASS="Body">
+Each tool had its own implementation for reading and/or writing binary file 
formats, and each of these implementations had varying levels of support for 
each binary format: a.out, b.out, coff, ecoff, xcoff, elf, ieee695, and others. 
Moreover, when each tool was configured it supported only a single kind of 
binary file format. A fix to the m68k-a.out assembler might also need to be 
made in all the other a.out-specific tools, or it might need to propagate as a 
object file-independent change. Depending on how a utility was written, it 
might be an a.out-specific change for one tool, and a generic change for 
another! </P>
+<P CLASS="Body">
+By building a single library that supported all functionality from a single 
source base, it would be possible to achieve economies of scale sooner because 
everything could be factored and maintained in a consistent fashion. Besides, 
it would be neat to demonstrate the ability to link a.out object code to a coff 
library and generate an ieee695 executable! Gumby began designing the library 
and discussing the design with Stallman. Stallman said that the job was too 
difficult--it would require a complete rewrite of all the tools, and it would 
be too difficult to maintain. Gumby told him it wasn't such a &quot;Big F*cking 
Deal&quot; and hence named this new creation the BFD library. (We explained to 
our customers that BFD stood for the binary file descriptor library.) </P>
+<P CLASS="Body">
+But while John and Gumby hacked, I still had to sell contracts to keep cash 
coming in. Every quarter I would have new top-line goals that required more 
resources to fulfill more contracts, and all the best engineers were tied up on 
this release into which I had no visibility. Tensions rose between sales and 
engineering while the Open Source model seemed be working in reverse: the more 
development we did on GNU software, the less we got back from the Net, until we 
were doing over 50% of all GNU toolchain development. </P>
+<P CLASS="Body">
+Neither was this a temporary state of affairs. It would take a year and a half 
(!) before the first &quot;Progressive Release&quot; was finally completed. On 
that momentous day, I was assured that for the first time, a complete C and C++ 
development toolkit could be built from a single source base, and that we could 
support two platforms: the Sun3 and the Sun4. I was dumbfounded. I had written 
6 GCC ports, 3 GDB ports, and a native-code C++ compiler and debugger in less 
time than it took a team of hackers to get two toolchains to work from a single 
source base!? </P>
+<P CLASS="Body">
+There were two mitigating facts: (1) the tools worked better than they ever 
worked before, with many new and useful features, and (2) because of all the 
infrastructure work we'd put into the job (not just rewriting the tools, but 
implementing a configuration script and an automated testing framework), we 
could expect to support many more host/target combinations in the future, 
including a virtually unlimited range of embedded system platforms. </P>
+<P CLASS="Body">
+We put this framework to the test, and it passed with flying colors: </P>
+<TABLE border="1">
+<TR>
+<TH>
+<p class="cellbody">
+Date</P>
+</TH>
+<TH>
+<p class="cellbody">
+Release Name</P>
+</TH>
+<TH>
+<p class="cellbody">
+Native</P>
+</TH>
+<TH>
+<p class="cellbody">
+Embedded</P>
+</TH>
+<TH>
+<p class="cellbody">
+Total Platforms</P>
+</TH>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Mar 1992</P>
+</TD>
+<TD>
+<p class="cellbody">
+p1</P>
+</TD>
+<TD>
+<p class="cellbody">
+2</P>
+</TD>
+<TD>
+<p class="cellbody">
+0</P>
+</TD>
+<TD>
+<p class="cellbody">
+2</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+June1992</P>
+</TD>
+<TD>
+<p class="cellbody">
+p2</P>
+</TD>
+<TD>
+<p class="cellbody">
+5</P>
+</TD>
+<TD>
+<p class="cellbody">
+0</P>
+</TD>
+<TD>
+<p class="cellbody">
+5</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Sep 1992</P>
+</TD>
+<TD>
+<p class="cellbody">
+p3 </P>
+</TD>
+<TD>
+<p class="cellbody">
+5</P>
+</TD>
+<TD>
+<p class="cellbody">
+10</P>
+</TD>
+<TD>
+<p class="cellbody">
+15</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Dec 1992</P>
+</TD>
+<TD>
+<p class="cellbody">
+p4</P>
+</TD>
+<TD>
+<p class="cellbody">
+5</P>
+</TD>
+<TD>
+<p class="cellbody">
+20</P>
+</TD>
+<TD>
+<p class="cellbody">
+25</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Mar 1993</P>
+</TD>
+<TD>
+<p class="cellbody">
+q1</P>
+</TD>
+<TD>
+<p class="cellbody">
+5</P>
+</TD>
+<TD>
+<p class="cellbody">
+30</P>
+</TD>
+<TD>
+<p class="cellbody">
+35</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Jun 1993</P>
+</TD>
+<TD>
+<p class="cellbody">
+q2</P>
+</TD>
+<TD>
+<p class="cellbody">
+5</P>
+</TD>
+<TD>
+<p class="cellbody">
+45</P>
+</TD>
+<TD>
+<p class="cellbody">
+50</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Sep 1993</P>
+</TD>
+<TD>
+<p class="cellbody">
+q3</P>
+</TD>
+<TD>
+<p class="cellbody">
+7</P>
+</TD>
+<TD>
+<p class="cellbody">
+53</P>
+</TD>
+<TD>
+<p class="cellbody">
+60</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Dec 1993</P>
+</TD>
+<TD>
+<p class="cellbody">
+q4</P>
+</TD>
+<TD>
+<p class="cellbody">
+8</P>
+</TD>
+<TD>
+<p class="cellbody">
+67</P>
+</TD>
+<TD>
+<p class="cellbody">
+75</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Mar 1994</P>
+</TD>
+<TD>
+<p class="cellbody">
+r1</P>
+</TD>
+<TD>
+<p class="cellbody">
+10</P>
+</TD>
+<TD>
+<p class="cellbody">
+75</P>
+</TD>
+<TD>
+<p class="cellbody">
+85</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Jun 1994</P>
+</TD>
+<TD>
+<p class="cellbody">
+r2</P>
+</TD>
+<TD>
+<p class="cellbody">
+10</P>
+</TD>
+<TD>
+<p class="cellbody">
+80</P>
+</TD>
+<TD>
+<p class="cellbody">
+90</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Sep 1994</P>
+</TD>
+<TD>
+<p class="cellbody">
+r3</P>
+</TD>
+<TD>
+<p class="cellbody">
+10</P>
+</TD>
+<TD>
+<p class="cellbody">
+85</P>
+</TD>
+<TD>
+<p class="cellbody">
+95</P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+Dec1004</P>
+</TD>
+<TD>
+<p class="cellbody">
+r4</P>
+</TD>
+<TD>
+<p class="cellbody">
+10</P>
+</TD>
+<TD>
+<p class="cellbody">
+90</P>
+</TD>
+<TD>
+<p class="cellbody">
+100</P>
+</TD>
+</TR>
+</TABLE>
+<P CLASS="Body">
+While the engineers were doing great things to create the GNUPro product, our 
sales team was working out how to sell it. In 1991, we hired a young business 
student, recently laid off from Applied Materials, who wanted to learn how to 
sell software. Though her native language was not English, she picked things up 
very quickly. By no means a hacker (though she spent some weekends at Cygnus 
teaching herself to program in C), she nevertheless became a really strong 
advocate of the Open Source approach. After six months of very successful 
selling, she invited me to see her make a customer presentation. I was floored. 
I had always sold Open Source the way a hacker would sell it: focusing mainly 
on the technical merits. She explained the intrinsic complexity of the job we 
were doing and the business value of the software we delivered, and this helped 
us finally explain to customers why they should buy from us instead of trying 
to do the work with their own people. I was selling the fact that our engineers 
were somehow better than theirs (not a message most managers want to hear), 
whereas she could explain how their engineers would benefit from having us do 
the baseline porting, support, and maintenance work. In the end, the mix of our 
technical prowess and business benefits led to equally powerful sales 
accomplishments: </P>
+<TABLE border="1">
+<TR>
+<TH>
+<p class="cellbody">
+Bookings ($K)</P>
+</TH>
+<TH>
+<p class="cellbody">
+Profitability (%)</P>
+</TH>
+<TH>
+<p class="cellbody">
+Cumulative CAGR </P>
+</TH>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+1990: 725</P>
+</TD>
+<TD>
+<p class="cellbody">
+epsilon</P>
+</TD>
+<TD>
+<p class="cellbody">
+N/A </P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+1991: 1500</P>
+</TD>
+<TD>
+<p class="cellbody">
+1</P>
+</TD>
+<TD>
+<p class="cellbody">
+106% </P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+1992: 2800</P>
+</TD>
+<TD>
+<p class="cellbody">
+2</P>
+</TD>
+<TD>
+<p class="cellbody">
+96% </P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+1993: 4800</P>
+</TD>
+<TD>
+<p class="cellbody">
+3</P>
+</TD>
+<TD>
+<p class="cellbody">
+87% </P>
+</TD>
+</TR>
+<TR>
+<TD>
+<p class="cellbody">
+1994: 5700</P>
+</TD>
+<TD>
+<p class="cellbody">
+4</P>
+</TD>
+<TD>
+<p class="cellbody">
+67% </P>
+</TD>
+</TR>
+</TABLE>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+Watson! Come here! <br>
+<EM CLASS="EpigraphAuthor">Alexander Graham Bell </EM></P>
+</blockquote>
+<P CLASS="Body">
+Out of this effort has come significant new technologies that have been 
returned to the Net and become standards in their own right: GNU configure (a 
generic configuration script that can configure software based on three 
independent variables: a build platform, a host platform, and a target 
platform), autoconf (a higher-level script for creating configure scripts), 
automake (a makefile generator for autoconf-driven environments), DejaGNU (a 
regression testing framework), GNATS (a problem report management system), and 
others. </P>
+<P CLASS="Body">
+Today, the GNUPro toolkit supports over 175 host/target combinations, a number 
that is now limited by the actual diversity of the market, not a limitation in 
our release or configuration technology. </P>
+<P CLASS="Body">
+In fact, GNUPro has become so dominant that several of our competitors have 
announced their intention to sell commercial support for GNU software to 
compete with us! Fortunately, the Open Source model comes to the rescue again. 
Unless and until a competitor can match the 100+ engineers we have on staff 
today, most of whom are primary authors or maintainers of the software we 
support, they cannot displace us from our position as the &quot;true GNU&quot; 
source (we supply over 80% of all changes made to GCC, GDB, and related 
utilities). The best they can hope to do is add incremental features that their 
customers might pay them to add. But because the software is Open Source, 
whatever value they add comes back to Cygnus as open-source software, for us to 
integrate if it's good, or ignore if it's not. Unlike proprietary software in 
which competitors fight in a two-sided win/lose contest, with Open Source it's 
more like fighting on a Moebius strip, and everything flows to the side of the 
primary maintainer. So, while our competitors may get some tactical advantage 
in the &quot;me-too&quot; GNU space, Cygnus benefits in the long run. Founded 
in 1989, our first-mover advantage is ten years ahead of the competition. </P>
+<H2 CLASS="HeadA">
+Challenges </H2>
+<P CLASS="Body">
+As can be seen from the chart above, while our growth rate remained 
impressive, it slowed as we grew. While we tried to sell the merits and value 
of Open Source software, skeptics and potential customers challenged our model 
with respect to: </P>
+<DL>
+<DT CLASS="ListVariableTerm">
+Sanity</DT>
+<DD CLASS="ListVariable">
+Why would a customer pay for a competitor's advantage? </DD>
+<DT CLASS="ListVariableTerm">
+Scalability</DT>
+<DD CLASS="ListVariable">
+How can a service-based business scale? </DD>
+<DT CLASS="ListVariableTerm">
+Sustainability</DT>
+<DD CLASS="ListVariable">
+Will Cygnus be around when customers need it? </DD>
+<DT CLASS="ListVariableTerm">
+Profitability</DT>
+<DD CLASS="ListVariable">
+How can open-source software be profitable? </DD>
+<DT CLASS="ListVariableTerm">
+Manageability</DT>
+<DD CLASS="ListVariable">
+How can open-source software be managed to deliver quality consistently? </DD>
+<DT CLASS="ListVariableTerm">
+Investibility</DT>
+<DD CLASS="ListVariable">
+How can a company with no software IP ever attract investors? </DD>
+</DL>
+<P CLASS="Body">
+Can you imagine trying to sell a $10,000 support contract to a manager of five 
embedded systems programmers, and getting hung up on whether or not Cygnus can 
go public based on its business model? For all that Open Source was a great way 
to open doors into the best and most innovative software development groups, it 
proved to be a major roadblock when selling to the mainstream market. We were 
about to learn first-hand what Geoffrey Moore meant in his book <CITE 
CLASS="Citation">Crossing the Chasm</CITE>. </P>
+<P CLASS="Body">
+This challenge became absolutely clear when I visited a group of developers 
who were building wireless communications systems at a Fortune 100 company. As 
part of their quality process, they not only evaluated their own quality, but 
the quality of their vendors according to a number of metrics. Of all the 
different vendors with whom they did business, most ranked &quot;Very Good to 
Excellent&quot; in most or all of the metrics. Their supplier of embedded 
tools, however, placed dead last with &quot;Poor or Unacceptable&quot; in all 
categories for each of the three years this quality monitoring process had been 
in place. Yet they would not buy our tools because despite our testimonials 
(from their customers, no less!), superior technical features, and lower price, 
management did not want to go with an unknown solution. I left wondering why 
they even bothered to collect data if they'd never use it to act, but that was 
the wrong question. I should have instead realized that this was typical 
mainstream behavior, and that the way to fix the problem was not to fault the 
customer, but to improve our marketing and messaging. </P>
+<P CLASS="Body">
+Our problems were not solely external, however. Many customers did not believe 
that we could hire enough people to scale our support business much beyond 
whatever we told them was our current state. They were both quite wrong and 
quite right. When it came to hiring engineers, they were quite wrong. Cygnus 
was founded by engineers, and our culture, Open Source business model, and the 
opportunity to join the preeminent Open Source engineering team in the world 
has always made Cygnus attractive to the developers we've wanted to hire. 
Turnover, compared to the national average (and especially compared to the 
average in Silicon Valley) is something like a quarter to a tenth what other 
companies experience. </P>
+<P CLASS="Body">
+But when it came to hiring managers, it was another story altogether. Sharing 
many of the same concerns and prejudices that our mainstream customers 
expressed, most managers we contacted had no interest in working for Cygnus. 
Those that did were not attracted to it. Those who were attracted to it were 
often attracted to it for the wrong reasons. By the time we had two managers in 
our engineering department, we had over 50 engineers. Communication, process, 
management controls, and employee satisfaction all declined as managers 
struggled, often unsuccessfully, to come to grips with what it meant to be and 
manage an Open Source company. </P>
+<P CLASS="Body">
+Ironically enough, we also disqualified managers who could not accept creating 
a closed-source component to our business. Open Source was a business strategy, 
not a philosophy, and we did not want to hire managers who were not flexible 
enough to manage either open or closed source products to meet overall company 
objectives. </P>
+<P CLASS="Body">
+We have come to accept the fact that you cannot expect to hire managers who 
understand all the implications of open-source software right away. You have to 
expect them to make mistakes (which means you have to budget for the costs of 
those mistakes), and they have to be able to learn from those mistakes. Most 
managers who bring experience with them try to change things to fit that 
experience--a recipe for failure at Cygnus. It was very hard to find managers 
who could both manage from, and quickly learn from, experience. And we needed 
them by the dozens. </P>
+<P CLASS="Body">
+The Open Source model, for all its challenges, proved to be remarkably 
resilient. Though we did occasionally lose customers through poorly set 
expectations or poor execution, our annual renewal rate has remained roughly 
90% by dollar value since 1993, and the number one reason we lose customers is 
&quot;retirement&quot;: the conclusion of the customer's project. Two factors 
helped us survive where other companies would have failed: (1) every person, 
regardless of title or seniority, recognized the importance of meeting customer 
commitments (nobody was &quot;above&quot; doing customer support), and (2) when 
all else failed, the customer was empowered to help themselves (because all 
customers had source code). Thus, despite amazing amounts of turmoil inside 
Cygnus in those days, very few customers were ever left holding the bag because 
the software failed to deliver, a stunning contrast to stories we heard about 
our proprietary competition as well as people who used unsupported open-source 
software. </P>
+<H2 CLASS="HeadA">
+Getting Funded Beyond Open Source--eCos </H2>
+<P CLASS="Body">
+The reality of the embedded systems world is that there are a relatively small 
number of companies that make the silicon and there are a relatively small 
number of Outside Equipment Manufacturers (OEMs) who buy the majority of the 
silicon for use in their embedded systems products. The rest of the market 
consists of a large number of small-volume players who build interesting stuff, 
but they do not drive the volumes necessary to mandate new chip designs or 
software solutions. </P>
+<P CLASS="Body">
+Between the semiconductor vendors and the OEMs there are hundreds of little 
software companies, all of whom are selling their wares. For example, there are 
over 120 commercially supported Real Time Operating Systems (RTOSes) in the 
market today. Not one of these RTOSes has more than a 6% market share, 
according to IDC. It's like the Unix world ten years ago, only twenty times 
more fragmented! This fragmentation leads to all the classic degenerative cases 
of free market economics: redundancy, incompatibility, price gouging, etc. What 
the semiconductor vendors and the OEMs wanted were standards that would 
accelerate TTM (time to money), and the commercial RTOS vendors were either 
taking too much time, costing too much money, or both. </P>
+<P CLASS="Body">
+In the embedded systems market we were the rising star: we were growing twice 
as fast as the leader in our market, and we were keeping our top four 
competitors to single-digit growth. Yet we were not treated like, nor did we 
act like, true market leaders. In 1995, after many conversations with our key 
customers about what did and did not work in their embedded systems world, we 
began to understand that our GNUPro compilers and debuggers could only go so 
far in addressing their problems. What customers needed was a silicon 
abstraction layer--a layer of software that sat underneath the standard C 
library or a real-time POSIX API. There was a new opportunity to expand our 
product offering in a non-trivial way. </P>
+<P CLASS="Body">
+We sharpened our pencils and took note of the obvious: 120+ commercial RTOSes 
and 1000+ in-house RTOSes meant that at the technical level nobody had yet 
built a sufficiently configurable RTOS to achieve &quot;one size fits 
all,&quot; and from a business perspective we noted that run-time royalties 
were killing margins, so the RTOS had to be royalty-free. In other words, to 
consolidate the market around our solution, we needed to create a completely 
new, world-class technology, and we needed to give it away. Management kicked 
the idea around for a year before finally acting on it. </P>
+<P CLASS="Body">
+Once we did decide to go forward with this strategy, our management team 
continued to wrestle with the question &quot;How is it going to make 
money?&quot; Even as we continued to consolidate the market around GNUPro, it 
was not obvious to the team how we could repeat that model for an embedded 
operating system. </P>
+<P CLASS="Body">
+We did the smart thing that any business does when faced with a completely 
inconsistent problem: we made assumptions. Assuming we would figure out how to 
make money, we asked ourselves what were the <EM 
CLASS="EquationVariables">N</EM> other things we needed to do in order to solve 
our customers' problems and become #1 in the market? (1) We needed to develop 
this whizzy new configuration technology, (2) we needed to build the rest of 
the system so that people would have something to configure, and (3) we needed 
to do all of this before the market opportunity evaporated. Software 
development costs money, and product-oriented software development on a 
timetable costs lots of money. </P>
+<P CLASS="Body">
+When we started Cygnus, we had all assumed that the VCs would never understand 
what we did, and if they did, it would not be until five or more years down the 
road, when there was nothing useful they could do for us. Happily, we were 
wrong on both counts. </P>
+<P CLASS="Body">
+Our first outside board member, Philippe Courtot, wasted no time in 
introducing me to leading VCs in early 1992. I was very open with each of them 
about our model, technology, and goals for the future, and I was equally open 
about the fact that we had designed Cygnus to be self-funding and hence did not 
need their money. Indeed, the fact that we could increase profitability a 
percentage point per year while growing the company at 80% per year was a 
pretty good indication (as far as I was concerned) that we were maturing the 
business nicely. Roger McNamee, a leading software industry analyst for the VC 
community, said it best when he said &quot;I am both amazed and surprised by 
your business model. I am amazed at how well it is working, but the more I 
think about it, the more surprised I am that I didn't think of it first!&quot; 
</P>
+<P CLASS="Body">
+While it was gratifying to think that we had aced the problem and didn't need 
outside funding, the reality was that by 1996, we had created so much 
opportunity beyond our self-funding GNUPro business that we needed a new plan 
and new partners. </P>
+<P CLASS="Body">
+We found two investors, Greylock Management and August Capital, who understood 
what we did and how we did it, understood what we could do with the right 
guidance and discipline, and had access to enough capital to execute our plan. 
They invested $6.25M, the largest private placement for a software company in 
the first half of 1997, and the execution began in earnest. </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+I do not like them, Sam-I-am. I do not like green eggs and ham.<br>
+<EM CLASS="EpigraphAuthor">Dr. Seuss </EM></P>
+</blockquote>
+<P CLASS="Body">
+While the technical team ramped up, the business people continued to thrash on 
how the money was going to work, because at first we did not see the connection 
between the architecture of eCos and the business model we could use to 
commercialize it. On the technical front, we knew that the configurability of 
the system was key to delivering a &quot;one size fits all&quot; architecture. 
On the business front, we knew that a &quot;one size fits all&quot; was key to 
creating a unifying and beneficial standard for embedded systems development. 
But we still could not figure out who was going to pay for this benefit. The 
two sides worked on their problem independently for a year and a half. R&amp;D 
costs mounted. Unable to reconcile the Open Source paradox, many managers 
didn't make it. </P>
+<P CLASS="Body">
+When the technical people were finally able to demonstrate what they first 
envisioned, it became clear to the business people what we were actually 
creating: the world's first Open Source architecture. To me, it was as exciting 
as the first time I looked at GCC. </P>
+<P CLASS="Body">
+Open Source is all well and good for the hacker, and the way that Open Source 
can create standards is great for the end user, but there's a gap between what 
hackers can do with open-source software and what regular users can do. We 
wanted eCos to be a product that could be embraced by the mainstream embedded 
developer, not just the hacker community. Our idea was to empower users with 
high-level tools that could configure, customize, and perform basic validation 
of eCos in an automated fashion, replacing the manual steps that in-house RTOS 
developers perform today. By making the high-level tools control eCos at the 
source-code level, and by architecting the source code so that it could be 
managed via these tools, we made it possible for end users to work virtually at 
the source-code level, without ever needing to read or write a line of C or C++ 
code. The proof of our success is that eCos can be scaled from 700 bytes (bare 
minimum silicon abstraction layer) to over 50 Kbytes (full-featured RTOS with 
Internet stack and filesystem)! </P>
+<P CLASS="Body">
+Once we realized that Open Source was not just a feature, but the technical 
enabler of eCos, and once we proved to ourselves that with this feature, we had 
a 10x performance advantage over our competition (10x space savings over 
object-level configurability and 10x-100x programmer efficiency over 
source-available, but not source-architected RTOSes), we packaged solutions to 
<EM CLASS="Emphasis">deliver</EM> that performance advantage to the market, and 
the preliminary response from the market has been extremely positive. </P>
+<P CLASS="Body">
+When one considers the past impossibilities of our GNU-based business, one can 
only imagine the possibilities that eCos will create for Cygnus Solutions and 
the world. </P>
+<H2 CLASS="HeadA">
+Reflections and Vision of the Future </H2>
+<P CLASS="Body">
+Open-source software taps the intrinsic efficiency of the technical free 
market, but it does so in an organic and unpredictable way. Open Source 
businesses take on the role of Adam Smith's &quot;invisible hand,&quot; guiding 
it to both help the overall market <EM CLASS="Emphasis">and</EM> to achieve 
their own microeconomic goals. The most successful Open Source businesses will 
be the ones who can successfully guide technologies that engender the greatest 
cooperation from the Net community and solve the greatest technical and 
business challenges of the user community. </P>
+<P CLASS="Body">
+Created from open-source software, the Internet has been a fantastic enabler 
for the development of new open-source software. As people continue to connect 
on the Internet and through Open Source, we will witness changes in the 
development and use of software in much the same way that the Renaissance 
changed how we developed and used academic knowledge. With the freedoms 
provided by open-source software, I expect nothing less! </P>
+<blockquote class="quote">
+<P ALIGN="CENTER">
+He set his mind to work on unknown arts,<BR>
+thereby changing the laws of nature.<br>
+<EM CLASS="EpigraphAuthor">James Joyce</EM></P>
+</blockquote>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="vixie.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/tim.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/tim.html
diff -N Proyectos/Mecagtk/OpenSource/tim.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/tim.html       3 Mar 2012 06:14:20 -0000       
1.1
@@ -0,0 +1,149 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Tim O'Reilly">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Hardware, Software, and Infoware</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Hardware, Software, and Infoware</H1>
+<H4 CLASS="ChapterAuthor" align="right">Tim O'Reilly</H4>
+<P CLASS="Body">I was talking with some friends recently, friends who don't 
own a computer. They were thinking of getting one so they could use Amazon.com 
to buy books and CDs. Not to use &quot;the Internet,&quot; not to use &quot;the 
Web,&quot; but to use Amazon.com.</P>
+<P CLASS="Body">Now, that's the classic definition of a &quot;killer 
application&quot;: one that makes someone go out and buy a computer. </P>
+<P CLASS="Body">What's interesting is that the killer application is no longer 
a desktop productivity application or even a back-office enterprise software 
system, but an individual web site. And once you start thinking of web sites as 
applications, you soon come to realize that they represent an entirely new 
breed, something you might call an &quot;information application,&quot; or 
perhaps even &quot;infoware.&quot; </P>
+<P CLASS="Body">Information applications are used to computerize tasks that 
just couldn't be handled in the old computing model. A few years ago, if you 
wanted to search a database of a million books, you talked to a librarian, who 
knew the arcane search syntax of the available computerized search tools and 
might be able to find what you wanted. If you wanted to buy a book, you went to 
a bookstore, and looked through its relatively small selection. Now, tens of 
thousands of people with no specialized training find and buy books online from 
that million-record database every day. </P>
+<P CLASS="Body">The secret is that computers have come one step closer to the 
way that people communicate with each other. Web-based applications use plain 
English to build their interface--words and pictures, not specialized little 
controls that acquire meaning only as you learn the software. </P>
+<P CLASS="Body">Traditional software embeds small amounts of information in a 
lot of software; infoware embeds small amounts of software in a lot of 
information. The &quot;actions&quot; in an infoware product are generally 
fairly simple: make a choice, buy or sell, enter a small amount of data, and 
get back a customized result. </P>
+<P CLASS="Body">These actions are often accomplished by scripts attached to a 
hypertext link using an interface specification called CGI (the Common Gateway 
Interface). CGI defines a way for a web server to call any external program and 
return the output of that program as a web page. CGI programs may simply be 
small scripts that perform a simple calculation, or they may connect to a 
full-fledged back-end database server. But even when there's a heavy-duty 
software engine behind a site, the user interface itself is not composed of 
traditional software. The interface consists of web pages (which may well have 
been created by a writer, editor, or designer rather than by a programmer). </P>
+<P CLASS="Body">Information interfaces are typically dynamic. For example, 
Amazon.com's presentation of books is driven by sales rankings that are updated 
every hour. Customers can add comments and ratings on the fly, which then 
become a key part of the information-rich decision-support interface for 
purchasers. A site designed to help someone buy or sell stocks online needs to 
not only present updated share prices, but also the latest relevant news 
stories, insider trading information, analyst recommendations, and perhaps even 
user discussion groups. The information interface thus typically consists of a 
rich mix of hand-crafted documents, program-generated data, and links to 
specialized application servers (such as email, chat, or conferencing). </P>
+<P CLASS="Body">Information interfaces are not as efficient for tasks that you 
do over and over as pure software interfaces, but they are far better for tasks 
you do only rarely, or differently each time. In particular, they are good for 
interfaces in which you make choices based on information presented to you. 
Whether you're buying a book or CD at Amazon.com, or a stock at E*Trade, the 
actual purchase is a fairly trivial part of the interaction. It's the quality 
of the information provided to help you make a decision that forms the heart of 
the application you interact with.</P>
+<P CLASS="Body">The way the Web is transforming the whole computing paradigm 
was never clearer to me than back in 1994, before Microsoft had gotten the Web 
religion, and I shared the stage (via satellite) with Microsoft VP Craig Mundie 
at an NTT event in Japan. Mundie was demonstrating the planned interface for 
Microsoft's &quot;Tiger&quot; server, which was supposed to enable video on 
demand. The interface emulated Windows, with cascading menus responding to a 
kind of virtual remote control channel clicker. </P>
+<P CLASS="Body">It was pretty obvious to those of us who were involved in the 
Web that the right interface for video on demand, when and if it comes, will be 
a Web-like information interface. It's ironic that even then, Microsoft had the 
perfect interface for video-on-demand: its own CD-ROM-based movie encyclopedia, 
Cinemania. What better way to choose what movie to watch than to search by 
category, read a few reviews, watch a few film clips, and then, homework done, 
click on a hypertext link to start the movie? Cinemania has it all but the last 
step. It's not until hypertext-based information products are connected to 
network servers that their real power becomes apparent. Suddenly, information 
is not an end in itself, but an interface that allows a user to control an 
application space far too complex for a traditional software application. 
(Amazon.com clearly knows this: their purchase of the Internet Movie Database, 
a collection of user reviews and other information about movies, will put them 
in pole position not only for selling videotapes online, but as a future 
gateway for video-on-demand services.)</P>
+<P CLASS="Body">Information interfaces are particularly appropriate for 
decision-support applications, but they also make sense for one-time tasks. In 
a sense, the use of &quot;wizards&quot; for software installation is an example 
of the same trend. </P>
+<P CLASS="Body">There are also information applications that use a simpler, 
more software-like interface for user interaction, but provide dynamic 
information output. My favorite example is something that would have been 
virtually unthinkable as an application only a few years ago: getting maps and 
directions. A mapping site like <A HREF="maps.yahoo.com">
+maps.yahoo.com</A> lets you type in two addresses, and get back a map and a 
set of directions showing how to get to one from the other.</P>
+<P CLASS="Body">So what does all this have to do with Open Source software?</P>
+<P CLASS="Body">There's an obvious answer: most of the technologies that make 
the Web possible are Open Source.</P>
+<P CLASS="Body">The Internet itself--features like the TCP/IP network protocol 
and key infrastructure elements such as the Domain Name System (DNS) were 
developed through the open-source process. It's easy to argue that the 
open-source BIND (Berkeley Internet Name Daemon) program that runs the DNS is 
the single most mission-critical Internet application. Even though most web 
browsing is done with proprietary products (Netscape's Navigator and 
Microsoft's Internet Explorer), both are outgrowths of Tim Berners-Lee's 
original open-source web implementation and open protocol specification. 
According to the automated Netcraft web server survey (<A 
HREF="http;//www.netcraft.co.uk/survey">
+http;//www.netcraft.co.uk/survey</A>), more than 50% of all visible web sites 
are served by the open-source Apache web server. The majority of web-based 
dynamic content is generated by open-source scripting languages such as Perl, 
Python, and Tcl.</P>
+<P CLASS="Body">But this obvious answer is only part of the story. After all, 
why is it the Web and not some proprietary technology that is the basis for the 
networked information applications of the future?</P>
+<P CLASS="Body">Microsoft actually was ahead of the curve in realizing the 
power of online multimedia. In 1994, when the Web started to take off, 
Microsoft's CD-ROM products like Encarta, their online encyclopedia, and 
Cinemania, their online movie reference, were ahead of the Web in providing 
online hyperlinked documents with rich multimedia capabilities. Microsoft even 
realized that it was important to provide information resources via online 
networks.</P>
+<P CLASS="Body">There was only one problem with Microsoft's vision of the 
Microsoft Network: barriers to entry were high. Publishers were expected to use 
proprietary Microsoft tools, to apply and be approved by Microsoft, and to pay 
to play. By contrast, anyone could start a web site. The software you needed 
was free. The specifications for creating documents and dynamic content were 
simple, open, and clearly documented.</P>
+<P CLASS="Body">Perhaps even more important, both the technology and the 
Internet ethic made it legitimate to copy features from other people's web 
sites. The HTML (HyperText Markup Language) pages that were used to implement 
various features on a web site could be easily saved and imitated. Even the CGI 
scripts used to create dynamic content were available for copying. Although 
traditional computer languages like C run faster, Perl became the dominant 
language for CGI because it was more accessible. While Perl is powerful enough 
to write major applications, it is possible for amateurs to write small scripts 
to accomplish specialized tasks. Even more important, because Perl is not a 
compiled language, the scripts that are used on web pages can be viewed, 
copied, and modified by users. In addition, archives of useful Perl scripts 
were set up and freely shared among web developers. The easy cloning of web 
sites built with the HTML+CGI+Perl combination meant that for the first time, 
powerful applications could be created by non-programmers.</P>
+<P CLASS="Body">In this regard, it's interesting to point out that the 
software industry's first attempts to improve on the web interface for active 
content--technologies like browser-side Java applets and Microsoft ActiveX 
controls--failed because they were aimed at professional programmers and could 
not easily be copied and implemented by the amateurs who were building the Web. 
Vendors viewed the Web in software terms, and didn't understand that the Web 
was changing not only what applications were being built but what tools their 
builders needed.</P>
+<P CLASS="Body">Industry analysts have been predicting for years that Perl and 
CGI will be eclipsed by newer software technologies. But even now, when major 
web sites employ large staffs of professional programmers, and newer 
technologies like Microsoft's Active Server Pages (ASP) and Sun's Java servlets 
are supplanting CGI for performance reasons, Perl continues to grow in 
popularity. Perl and other open-source scripting languages such as Python and 
Tcl remain central to web sites large and small because infoware applications 
are fundamentally different than software applications and require different 
tools.</P>
+<P CLASS="Body">If you look at a large web site like Yahoo!, you'll see that 
behind the scenes, an army of administrators and programmers are continually 
rebuilding the product. Dynamic content isn't just automatically generated, it 
is also often hand-tailored, typically using an array of quick and dirty 
scripting tools. </P>
+<P CLASS="Body">&quot;We don't create content at Yahoo! We aggregate it,&quot; 
says Jeffrey Friedl, author of the book<EM CLASS="Emphasis"> Mastering Regular 
Expressions</EM> and a full-time Perl programmer at Yahoo. &quot;We have feeds 
from thousands of sources, each with its own format. We do massive amounts of 
`feed processing' to clean this stuff up or to find out where to put it on 
Yahoo!.&quot; For example, to link appropriate news stories to tickers at <A 
HREF="quotes.yahoo.com">
+quotes.yahoo.com</A>, Friedl needed to write a &quot;name recognition&quot; 
program able to search for more than 15,000 company names. Perl's ability to 
analyze free-form text with powerful regular expressions was what made that 
possible. </P>
+<P CLASS="Body">Perl is also a central component in the system administration 
infrastructure used to keep the site live and current. Vast numbers of Perl 
scripts are continually crawling the Yahoo! servers and their links to external 
sites, and paging the staff whenever a URL doesn't return the expected result. 
The best-known of these crawlers is referred to as &quot;the Grim Reaper.&quot; 
If an automated connection to a URL fails more than the specified number of 
times, the page is removed from the Yahoo! directory. </P>
+<P CLASS="Body">Amazon.com is also a heavy user of Perl. The Amazon.com 
authoring environment demonstrates Perl's power to tie together disparate 
computing tools; it's a &quot;glue language&quot; par excellence. A user 
creates a new document with a form that calls up a Perl program, which 
generates a partially-completed SGML document, then launches either Microsoft 
Word or GNU Emacs (at the user's choice), but also integrates CVS (Concurrent 
Versioning System) and Amazon.com's homegrown SGML tools. The Amazon.com SGML 
classes are used to render different sections of the web site--for example, 
HTML with or without graphics--from the same source base. A Perl-based parser 
renders the SGML into HTML for approval before the author commits the changes. 
</P>
+<P CLASS="Body">Perl has been called &quot;the duct tape of the 
Internet,&quot; and like duct tape, it is used in all kinds of unexpected ways. 
Like a movie set held together with duct tape, a web site is often put up and 
torn down in a day, and needs lightweight tools and quick but effective 
solutions.</P>
+<P CLASS="Body">Microsoft's failed attempt to turn infoware back into software 
with ActiveX is rooted in the way paradigms typically shift in the computer 
industry. As a particular market segment matures, the existing players have an 
enormous vested interest in things continuing the way they are. This makes it 
difficult for them to embrace anything really new, and allows--almost 
requires--that new players (&quot;the barbarians,&quot; to use Philippe Kahn's 
phrase) come in to create the new markets.</P>
+<P CLASS="Body">Microsoft's ascendancy over IBM as the ruling power of the 
computer industry is a classic example of how this happened the last time 
around. IBM gave away the market to Microsoft because it didn't see that the 
shift of power was not only from the glass house to the desktop, but also from 
proprietary to commodity hardware and from hardware to software. </P>
+<P CLASS="Body">In the same way, despite its attempts to get into various 
information businesses, Microsoft still doesn't realize--perhaps can't realize 
and still be Microsoft--that software, as Microsoft has known it, is no longer 
the central driver of value creation in the computer business.</P>
+<P CLASS="Body">In the days of IBM's dominance, hardware was king, and the 
barriers to entry into the computer business were high. Most software was 
created by the hardware vendors, or by software vendors who were satellite to 
them. </P>
+<P CLASS="Body">The availability of the PC as a commodity platform (as well as 
the development of open systems platforms such as Unix) changed the rules in a 
fundamental way. Suddenly, the barriers to entry were low, and entrepreneurs 
such as Mitch Kapor of Lotus and Bill Gates took off. </P>
+<P CLASS="Body">If you look at the early history of the Web, you see a similar 
pattern. Microsoft's monopoly on desktop software had made the barriers to 
entry in the software business punishingly high. What's more, software 
applications had become increasingly complex, with Microsoft putting up 
deliberate barriers to entry against competitors. It was no longer possible for 
a single programmer in a garage (or a garret) to make an impact.</P>
+<P CLASS="Body">This is perhaps the most important point to make about 
open-source software: it lowers the barriers to entry into the software market. 
You can try a new product for free--and even more than that, you can build your 
own custom version of it, also for free. Source code is available for massive 
independent peer review. If someone doesn't like a feature, they can add to it, 
subtract from it, or reimplement it. If they give their fix back to the 
community, it can be adopted widely very quickly. </P>
+<P CLASS="Body">What's more, because developers (at least initially) aren't 
trying to compete on the business end, but instead focus simply on solving real 
problems, there is room for experimentation in a less punishing environment. As 
has often been said, open-source software &quot;lets you scratch your own 
itch.&quot; Because of the distributed development paradigm, with new features 
being added by users, open-source programs &quot;evolve&quot; as much as they 
are designed. </P>
+<P CLASS="Body">Indeed, the evolutionary forces of the market are freer to 
operate as nature &quot;intended&quot; when unencumbered by marketing barriers 
or bundling deals, the equivalent of prosthetic devices that help the 
less-than-fit survive.</P>
+<P CLASS="ListBullet-"><EM CLASS="Emphasis">Evolution breeds not a single 
winner, but diversity.</EM></P>
+<P CLASS="Body">It is precisely the idiosyncratic nature of many of the 
open-source programs that is their greatest strength. Again, it's instructive 
to look at the reasons for Perl's success. </P>
+<P CLASS="Body">Larry Wall originally created Perl to automate some repetitive 
system administration tasks he was faced with. After releasing the software to 
the Net, he found more and more applications, and the language grew, often in 
unexpected directions. </P>
+<P CLASS="Body">Perl has been described as a &quot;kitchen sink language&quot; 
because its features seem chaotic to the designers of more 
&quot;orthogonal&quot; computer languages. But chaos can often reveal rich 
structure. Chaos may also be required to model what is inherently complex. 
Human languages are complex because they model reality. As Wall says in his 
essay in this volume, &quot;English is useful because it's a mess. Since 
English is a mess, it maps well onto the problem space, which is also a mess. . 
. . Similarly, Perl was designed to be a mess (though in the nicest of possible 
ways).&quot;</P>
+<P CLASS="Body">The Open Source development paradigm is an incredibly 
efficient way of getting developers to work on features that matter. New 
software is developed in a tight feedback loop with customer demand, without 
distortions caused by marketing clout or top-down purchasing decisions. 
Bottom-up software development is ideal for solving bottom-up problems. </P>
+<P CLASS="Body">Using the open-source software at the heart of the Web, and 
its simpler development paradigm, entrepreneurs like Jerry Yang and David Filo 
were able to do just that. It's no accident that Yahoo!, the world's largest 
and most successful web site, is built around freely available open-source 
software: the FreeBSD operating system, Apache, and Perl. </P>
+<P CLASS="Body">Just as it was last time around, the key to the next stage of 
the computer industry is in fact the commoditization of the previous stage. As 
Bob Young of Red Hat, the leading Linux distributor, has noted, his goal is not 
to dethrone Microsoft at the top of the operating systems heap, but rather, to 
shrink the dollar value of the operating systems market.</P>
+<P CLASS="Body">The point is that open-source software doesn't need to beat 
Microsoft at its own game. Instead it is changing the nature of the game. </P>
+<P CLASS="Body">To be sure, for all their astronomical market capitalization, 
information-application providers such as Amazon.com and Yahoo! are still tiny 
compared to Microsoft. But the writing on the wall is clear. The edges of 
human-computer interaction, the opportunities for computerizing tasks that 
haven't been computerized before, are in infoware, not in software.</P>
+<P CLASS="Body">As the new &quot;killer applications&quot; emerge, the role of 
software will increasingly be as an enabler for infoware. There are enormous 
commercial opportunities to provide web servers, database backends and 
application servers, and network programming languages like Java, as long as 
these products fit themselves into the new model rather than trying to supplant 
it. Note that in the shift from a hardware-centric to a software-centric 
computer industry, hardware didn't go away. IBM still flourishes as a company 
(though most of its peers have down-sized or capsized). But other hardware 
players emerged who were suited to the new rules: Dell, Compaq, and especially 
Intel.</P>
+<P CLASS="Body">Intel realized that the real opportunity for them was not in 
winning the computer systems wars, but in being an arms supplier to the 
combatants. </P>
+<P CLASS="Body">The real challenge for open-source software is not whether it 
will replace Microsoft in dominating the desktop, but rather whether it can 
craft a business model that will help it to become the &quot;Intel Inside&quot; 
of the next generation of computer applications. </P>
+<P CLASS="Body">Otherwise, the Open Source pioneers will be shouldered aside 
just as Digital Research was in the PC operating system business by someone who 
understands precisely where the current opportunity lies. </P>
+<P CLASS="Body">But however that turns out, open-source software has already 
created a fork in the road. Just as the early microcomputer pioneers (in both 
hardware and software) set the stage for today's industry, open-source software 
has set the stage for the drama that is just now unfolding, and that will lead 
to a radical reshaping of the computer industry landscape over the next five to 
ten years. </P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="netrev.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/toc.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/toc.html
diff -N Proyectos/Mecagtk/OpenSource/toc.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/toc.html       3 Mar 2012 06:14:20 -0000       
1.1
@@ -0,0 +1,129 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source 
+Revolution">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Monograph">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution
+" align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources
+: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<body bgcolor="white">
+<h1 align="right"><i>Table of Contents</i></h1>
+<p class="body"><A HREF="acknow.html"><B>Acknowledgments</B></A>
+<p class="body"><A HREF="intro.html"><B>Introduction</B></A>
+<br><i>Chris DiBona, Sam Ockman, and Mark Stone</i>
+<p class="body"><A HREF="raymond.html"><B>A Brief History of Hackerdom</B></A>
+<br><i>Eric S. Raymond</i>
+<p class="body"><A HREF="kirkmck.html"><B>Twenty Years of Berkeley Unix: From 
AT&amp;T-Owned to Freely Redistributable</B></A>
+<br><i>Marshall Kirk McKusick</i>
+<p class="body"><A HREF="ietf.html"><B>The Internet Engineering Task 
Force</B></A>
+<br><i>Scott Bradner</i>
+<p class="body"><A HREF="stallman.html"><B>The GNU Operating System and the 
Free Software Movement</B></A>
+<br><i>Richard Stallman</i>
+<p class="body"><A HREF="tiemans.html"><B>Future of Cygnus Solutions: An 
Entrepreneur's Account</B></A>
+<br><i>Michael Tiemann</i>
+<p class="body"><A HREF="vixie.html"><B>Software Engineering</B></A>
+<br><i>Paul Vixie</i>
+<p class="body"><A HREF="linus.html"><B>The Linux Edge</B></A>
+<br><i>Linus Torvalds</i>
+<p class="body"><A HREF="young.html"><B>Giving It Away: How Red Hat Software 
Stumbled Across a New Economic Model and Helped Improve an Industry</B></A>
+<br><i>Robert Young</i>
+<p class="body"><A HREF="larry.html"><B>Diligence, Patience, and 
Humility</B></A>
+<br><i>Larry Wall</i>
+<p class="body"><A HREF="brian.html"><B>Open Source as a Business 
Strategy</B></A>
+<br><i>Brian Behlendorf</i>
+<p class="body"><A HREF="perens.html"><B>The Open Source Definition</B></A>
+<br><i>Bruce Perens</i>
+<p class="body"><A HREF="tim.html"><B>Hardware, Software, and Infoware</B></A>
+<br><i>Tim O'Reilly</i>
+<p class="body"><A HREF="netrev.html"><B>Freeing the Source: The Story of 
Mozilla</B></A>
+<br><i>Jim Hamerly and Tom Paquin with Susan Walton</i>
+<p class="body"><A HREF="raymond2.html"><B>The Revenge of the Hackers</B></A>
+<br><i>Eric S. Raymond</i>
+<p class="body"><A HREF="appa.html"><B>Appendix A: The Tanenbaum-Torvalds 
Debate</B></A>
+<p class="body"><A HREF="appb.html"><B>Appendix B: The Open Source Definition, 
Version 1.0</B></A>
+<p class="body"><A HREF="authors.html"><B>Contributors</B></A>
+<p class="body"><A HREF="copyright.html"><B>Copyright</B></A>
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="acknow.html"><i><b>Acknowledgments ---></b></i></a>
+</font></P>
+
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/torvalds.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/torvalds.gif
diff -N Proyectos/Mecagtk/OpenSource/torvalds.gif
Binary files /dev/null and /tmp/cvsOvrtwy differ

Index: Proyectos/Mecagtk/OpenSource/vixie.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/vixie.gif
diff -N Proyectos/Mecagtk/OpenSource/vixie.gif
Binary files /dev/null and /tmp/cvsMkA1az differ

Index: Proyectos/Mecagtk/OpenSource/vixie.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/vixie.html
diff -N Proyectos/Mecagtk/OpenSource/vixie.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/vixie.html     3 Mar 2012 06:14:21 -0000       
1.1
@@ -0,0 +1,249 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Paul Vixie">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Software Engineering</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Software Engineering</H1>
+<H4 CLASS="ChapterAuthor" align="right">Paul Vixie</H4>
+<P CLASS="BodyStart">Software engineering is a wider field than &quot;writing 
programs.&quot; Yet, in many Open Source projects, programs are simply written 
and given away. It's clear from historical examples that software need not be 
engineered in order to be widely used and enjoyed. In this essay we'll look at 
some general elements of software engineering, then at the Open Source 
community's usual equivalents to these elements, and then finally at the 
implications of the differences between the two approaches.</P>
+<H2 CLASS="HeadA">
+The Software Engineering Process</H2>
+<P CLASS="Body">The elements of a software engineering process are generally 
enumerated as:</P>
+<UL>
+<LI CLASS="ListBullet">
+Marketing Requirements</LI>
+<LI CLASS="ListBullet">
+System-Level Design</LI>
+<LI CLASS="ListBullet">
+Detailed Design</LI>
+<LI CLASS="ListBullet">
+Implementation</LI>
+<LI CLASS="ListBullet">
+Integration</LI>
+<LI CLASS="ListBullet">
+Field Testing</LI>
+<LI CLASS="ListBullet">
+Support</LI>
+</UL>
+<P CLASS="Body">No element of this process ought to commence before the 
earlier ones are substantially complete, and whenever a change is made to some 
element, all dependent elements ought to be reviewed or redone in light of that 
change. It's possible that a given module will be both specified and 
implemented before its dependent modules are fully specified--this is called 
<EM CLASS="Emphasis">advanced development or research</EM>.</P>
+<P CLASS="Body">It is absolutely essential that every element of the software 
engineering process include several kinds of <EM CLASS="Emphasis">review:</EM> 
peer review, mentor/management review, and cross-disciplinary review.</P>
+<P CLASS="Body">Software engineering elements (whether documents or source 
code) must have version numbers and auditable histories. &quot;Checking 
in&quot; a change to an element should require some form of review, and the 
depth of the review should correspond directly to the scope of the change.</P>
+<H3 CLASS="HeadB">
+Marketing Requirements</H3>
+<P CLASS="Body">The first step of a software engineering process is to create 
a document which describes the target customers and their reason for needing 
this product, and then goes on to list the features of the product which 
address these customer needs. The Marketing Requirements Document (MRD) is the 
battleground where the answer to the question &quot;What should we build, and 
who will use it?&quot; is decided.</P>
+<P CLASS="Body">In many failed projects, the MRD was handed down like an 
inscribed stone tablet from marketing to engineering, who would then gripe 
endlessly about the laws of physics and about how they couldn't actually build 
that product since they had no ready supply of Kryptonite or whatever. The MRD 
is a joint effort, with engineering not only reviewing but also writing a lot 
of the text.</P>
+<H3 CLASS="HeadB">
+System-Level Design</H3>
+<P CLASS="Body">This is a high-level description of the product, in terms of 
&quot;modules&quot; (or sometimes &quot;programs&quot;) and of the interaction 
between these modules. The goals of this document are first, to gain more 
confidence that the product could work and could be built, and second, to form 
a basis for estimating the total amount of work it will take to build it.</P>
+<P CLASS="Body">The system-level design document should also outline the 
system-level testing plan, in terms of customer needs and whether they would be 
met by the system design being proposed.</P>
+<H3 CLASS="HeadB">
+Detailed Design</H3>
+<P CLASS="Body">The detailed design is where every module called out in the 
system-level design document is described in detail. The interface (command 
line formats, calling API, externally visible data structures) of each module 
has to be completely determined at this point, as well as dependencies between 
modules. Two things that will evolve out of the detailed design is a PERT or 
GANT chart showing what work has to be done and in what order, and more 
accurate estimates of the time it will take to complete each module.</P>
+<P CLASS="Body">Every module needs a <EM CLASS="Emphasis">unit test plan</EM>, 
which tells the implementor what test cases or what kind of test cases they 
need to generate in their unit testing in order to verify functionality. Note 
that there are additional, nonfunctional unit tests which will be discussed 
later.</P>
+<H3 CLASS="HeadB">
+Implementation</H3>
+<P CLASS="Body">Every module described in the detailed design document has to 
be <EM CLASS="Emphasis">implemented</EM>. This includes the small act of <EM 
CLASS="Emphasis">coding or programming </EM>that is the heart and soul of the 
software engineering process. It's unfortunate that this small act is sometimes 
the only part of software engineering that is taught (or learned), since it is 
also the only part of software engineering which can be effectively 
self-taught.</P>
+<P CLASS="Body">A module can be considered implemented when it has been 
created, tested, and successfully used by some other module (or by the 
system-level testing process). Creating a module is the old edit-compile-repeat 
cycle. Module testing includes the unit level functional and regression tests 
called out by the detailed design, and also performance/stress testing, and 
code coverage analysis.</P>
+<H3 CLASS="HeadB">
+Integration</H3>
+<P CLASS="Body">When all modules are nominally complete, system-level 
integration can be done. This is where all of the modules move into a single 
source pool and are compiled and linked and packaged as a system. Integration 
can be done incrementally, in parallel with the implementation of the various 
modules, but it cannot authoritatively approach &quot;doneness&quot; until all 
modules are substantially complete.</P>
+<P CLASS="Body">Integration includes the development of a system-level test. 
If the built package has to be able to install itself (which could mean just 
unpacking a tarball or copying files from a CD-ROM) then there should be an 
automated way of doing this, either on dedicated crash and burn systems or in 
containerized/simulated environments. </P>
+<P CLASS="Body">Sometimes, in the middleware arena, the package is just a 
built source pool, in which case no installation tools will exist and system 
testing will be done on the as-built pool.</P>
+<P CLASS="Body">Once the system has been installed (if it is installable), the 
automated system-level testing process should be able to invoke every public 
command and call every public entry point, with every possible reasonable 
combination of arguments. If the system is capable of creating some kind of 
database, then the automated system-level testing should create one and then 
use external (separately written) tools to verify the database's integrity. 
It's possible that the unit tests will serve some of these needs, and all unit 
tests should be run in sequence during the integration, build, and packaging 
process.</P>
+<H3 CLASS="HeadB">
+Field Testing</H3>
+<P CLASS="Body">Field testing usually begins internally. That means employees 
of the organization that produced the software package will run it on their own 
computers. This should ultimately include all &quot;production level&quot; 
systems--desktops, laptops, and servers. The statement you want to be able to 
make at the time you ask customers to run a new software system (or a new 
version of an existing software system) is &quot;we run it ourselves.&quot; The 
software developers should be available for direct technical support during 
internal field testing.</P>
+<P CLASS="Body">Ultimately it will be necessary to run the software 
externally, meaning on customers' (or prospective customers') computers. It's 
best to pick &quot;friendly&quot; customers for this exercise since it's likely 
that they will find a lot of defects--even some trivial and obvious 
ones--simply because their usage patterns and habits are likely to be different 
from those of your internal users. The software developers should be close to 
the front of the escalation path during external field testing.</P>
+<P CLASS="Body">Defects encountered during field testing need to be triaged by 
senior developers and technical marketers, to determine which ones can be fixed 
in the documentation, which ones need to be fixed before the current version is 
released, and which ones can be fixed in the next release (or never).</P>
+<H3 CLASS="HeadB">
+Support</H3>
+<P CLASS="Body">Software defects encountered either during field testing or 
after the software has been distributed should be recorded in a tracking 
system. These defects should ultimately be assigned to a software engineer who 
will propose a change to either the definition and documentation of the system, 
or the definition of a module, or to the implementation of a module. These 
changes should include additions to the unit and/or system-level tests, in the 
form of a regression test to show the defect and therefore show that it has 
been fixed (and to keep it from recurring later).</P>
+<P CLASS="Body">Just as the MRD was a joint venture between engineering and 
marketing, so it is that support is a joint venture between engineering and 
customer service. The battlegrounds in this venture are the bug list, the 
categorization of particular bugs, the maximum number of critical defects in a 
shippable software release, and so on.</P>
+<H2 CLASS="HeadA">
+Testing Details</H2>
+<H3 CLASS="HeadB">
+Code Coverage Analysis</H3>
+<P CLASS="Body">Code coverage testing begins with the instrumentation of the 
program code, sometimes by a preprocessor, sometimes by an object code 
modifier, sometimes using a special mode of the compiler or linker, to keep 
track of all possible code paths in a block of source code and to record, 
during its execution, which ones were taken.</P>
+<P CLASS="Body">Consider the following somewhat typical C snippet:</P>
+<pre>
+<CODE CLASS="Code">
+1.   if (read(s, buf, sizeof buf) == -1)
+2.   error++;
+3.   else
+4.   error = 0;
+</CODE>
+</pre>
+<P CLASS="Body">If the error variable has not been initialized, then the code 
is buggy, and if line 2 is ever executed then the results of the rest of the 
program will be undefined. The likelihood of an error in read (and a return 
value of -1 from it) occurring during normal testing is somewhat low. The way 
to avoid costly support events from this kind of bug is to make sure that your 
unit tests exercise every possible code path and that the results are correct 
in every case.</P>
+<P CLASS="Body">But wait, it gets better. Code paths are combinatorial. In our 
example above, the error variable may have been initialized earlier--let's say 
by a similar code snippet whose predicate (&quot;system call failure&quot;) was 
false (meaning no error occurred). The following example, which is patently bad 
code that would not pass any kind of code review anyway, shows how easy it is 
for simple things to become complicated:</P>
+<pre>
+<CODE CLASS="Code">
+1.   if (connect(s, &amp;sa, &amp;sa_len) == -1)
+2.   error++;
+3.   else
+4.   error = 0;
+5.   if (read(s, buf, sizeof buf) == -1)
+6.   error++;
+7.   else
+8.   error = 0;
+</CODE>
+</pre>
+<P CLASS="Body">There are now four code paths to test:</P>
+<OL>
+<LI CLASS="ListNumberStart">
+                               lines 1-2-5-6.</LI>
+<LI CLASS="ListNumber">
+                               lines 1-2-5-8.</LI>
+<LI CLASS="ListNumber">
+                               lines 1-4-5-6.</LI>
+<LI CLASS="ListNumber">
+                               lines 1-4-5-8.</LI>
+</OL>
+<P CLASS="Body">It's usually impossible to test every possible code 
path--there can be hundreds of paths through even a small function of a few 
dozen lines. And on the other hand, merely ensuring that your unit tests are 
capable (on successive runs, perhaps) of exercising every line of code is not 
sufficient. This kind of coverage analysis is not in the tool bag of every 
software engineer in the field--and that's why QA is its own specialty.</P>
+<H3 CLASS="HeadB">
+Regression Tests</H3>
+<P CLASS="Body">Fixing a bug is just not enough. &quot;Obvious by 
inspection&quot; is often a cop-out used to cover the more insidious 
&quot;writing the smoking gun test would be difficult.&quot; OK, so there are 
many bugs which <EM CLASS="Emphasis">are </EM>obvious by inspection, like 
division by the constant zero. But to figure out what to fix, one must look at 
the surrounding code to find out what the author (who was hopefully somebody 
else) intended. This kind of analysis should be documented as part of the fix, 
or as part of the comments in the source code, or both.</P>
+<P CLASS="Body">In the more common case, the bug isn't obvious by inspection 
and the fix will be in a different part of the source code than the place where 
the program dumped core or otherwise behaved badly. In these cases, a new test 
should be written which exercises the bad code path (or the bad program state 
or whatever) and then the fix should be tested against this new unit test. 
After review and check-in, the new unit test should <EM 
CLASS="Emphasis">also</EM> be checked in, so that if the same bug is 
reintroduced later as a side effect of some other change, QA will have some 
hope of catching it before the customers do.</P>
+<H2 CLASS="HeadA">
+Open Source Software Engineering</H2>
+<P CLASS="Body">An Open Source project can include every single one of the 
above elements, and to be fair, some have. The commercial versions of BSD, 
BIND, and Sendmail are all examples of the standard software engineering 
process--but they didn't start out that way. A full-blown software engineering 
process is very resource-hungry, and instantiating one usually requires 
investment, which usually requires some kind of revenue plan.</P>
+<P CLASS="Body">The far more common case of an open-source project is one 
where the people involved are having fun and want their work to be as widely 
used as possible so they give it away without fee and sometimes without 
restrictions on redistribution. These folks might not have access to so-called 
&quot;commercial grade&quot; software tools (like code coverage analyzers, 
bounds-checking interpreters, and memory integrity verifiers). And the primary 
things they seem to find fun are coding, packaging, and evangelizing--not QA, 
not MRDs, and usually not hard and fast ship dates.</P>
+<P CLASS="Body">Let's revisit each of the elements of the software engineering 
process and see what typically takes its place in an unfunded Open Source 
project--a labor of love. </P>
+<H3 CLASS="HeadB">
+Marketing Requirements</H3>
+<P CLASS="Body">Open Source folks tend to build the tools they need or wish 
they had. Sometimes this happens in conjunction with one's day job, and often 
it's someone whose primary job is something like system administration rather 
than software engineering. If, after several iterations, a software system 
reaches critical mass and takes on a life of its own, it will be distributed 
via Internet tarballs and other users will start to either ask for features or 
just sit down and implement them and send them in.</P>
+<P CLASS="Body">The battleground for an open-source MRD is usually a mailing 
list or newsgroup, with the users and developers bantering back and forth 
directly. Consensus is whatever the developers remember or agree with. Failure 
to consense often enough results in &quot;code splits,&quot; where other 
developers start releasing their own versions. The MRD equivalent for Open 
Source can be very nurturing but it has sharp edges--conflict resolution is 
sometimes not possible (or not attempted).</P>
+<H3 CLASS="HeadB">
+System-Level Design</H3>
+<P CLASS="Body">There usually just is no system-level design for an unfunded 
Open Source effort. Either the system design is implicit, springing forth whole 
and complete straight from Zeus's forehead, or it evolves over time (like the 
software itself). Usually by Version 2 or 3 of an open-source system, there 
actually <EM CLASS="Emphasis">is</EM> a system design even if it doesn't get 
written down anywhere.</P>
+<P CLASS="Body">It is here, rather than in any other departure from the normal 
rules of the software engineering road, that Open Source earns its reputation 
for being a little bit flakey. You can compensate for a lack of a formal MRD or 
even formal QA by just having really good programmers (or really friendly 
users), but if there's no system design (even if it's only in someone's head), 
the project's quality will be self-limited.</P>
+<H3 CLASS="HeadB">
+Detailed Design</H3>
+<P CLASS="Body">Another casualty of being unfunded and wanting to have fun is 
a detailed design. Some people do find DDDs fun to work on, but these people 
generally get all the fun they can stand by writing DDDs during their day jobs. 
Detailed design ends up being a side effect of the implementation. &quot;I know 
I need a parser, so I'll write one.&quot; Documenting the API in the form of 
external symbols in header files or manpages is optional and may not occur if 
the API isn't intended to be published or used outside of the project.</P>
+<P CLASS="Body">This is a shame, since a lot of good and otherwise reusable 
code gets hidden this way. Even modules that are not reusable or tightly bound 
to the project where they are created, and whose APIs are not part of the 
feature deliverables, really ought to have manpages explaining what they do and 
how to call them. It's hugely helpful to the other people who want to enhance 
the code, since they have to start by reading and understanding it.</P>
+<H3 CLASS="HeadB">
+Implementation</H3>
+<P CLASS="Body">This is the fun part. Implementation is what programmers love 
most; it's what keeps them up late hacking when they could be sleeping. The 
opportunity to write code is the primary motivation for almost all open-source 
software development effort ever expended. If one focuses on this one aspect of 
software engineering to the exclusion of the others, there's a huge freedom of 
expression.</P>
+<P CLASS="Body">Open-source projects are how most programmers experiment with 
new styles, either styles of indentation or variable naming or &quot;try to 
save memory&quot; or &quot;try to save CPU cycles&quot; or what have you. And 
there are some artifacts of great beauty waiting in tarballs everywhere, where 
some programmer tried out a style for the first time and it <EM 
CLASS="Emphasis">worked</EM>.</P>
+<P CLASS="Body">An unfunded Open Source effort can have as much rigor and 
consistency as it wants--users will run the code if it's functional; most 
people don't care if the developer switched styles three times during the 
implementation process. The developers generally care, or they learn to care 
after a while. In this situation, Larry Wall's past comments about programming 
being an artistic expression very much hit home. </P>
+<P CLASS="Body">The main difference in an unfunded Open Source implementation 
is that review is informal. There's usually no mentor or peer looking at the 
code before it goes out. There are usually no unit tests, regression or 
otherwise.</P>
+<H3 CLASS="HeadB">
+Integration</H3>
+<P CLASS="Body">Integration of an open-source project usually involves writing 
some manpages, making sure that it builds on every kind of system the developer 
has access to, cleaning up the Makefile to remove the random hair that creeps 
in during the implementation phase, writing a README, making a tarball, putting 
it up for anonymous FTP somewhere, and posting a note to some mailing list or 
newsgroup where interested users can find it.</P>
+<P CLASS="Body">Note that the comp.sources.unix newsgroup was rekindled in 
1998 by Rob Braun, and it's a fine place to send announcements of new or 
updated open-source software packages. It also functions as a 
repository/archive.</P>
+<P CLASS="Body">That's right, no system-level testing. But then there's 
usually no system-level test plan and no unit tests. In fact, Open Source 
efforts are pretty light on testing overall. (Exceptions exist, such as Perl 
and PostgreSQL.) This lack of pre-release testing is not a weakness, though, as 
explained below.</P>
+<H3 CLASS="HeadB">
+Field Testing</H3>
+<P CLASS="Body">Unfunded open-source software enjoys the best system-level 
testing in the industry, unless we include NASA's testing on space-bound robots 
in our comparison. The reason is simply that users tend to be much friendlier 
when they aren't being charged any money, and power users (often developers 
themselves) are much more helpful when they can read, and fix, the source code 
to something they're running.</P>
+<P CLASS="Body">The essence of field testing is its lack of rigor. What 
software engineering is looking for from its field testers is patterns of use 
which are inherently unpredictable at the time the system is being designed and 
built--in other words, real world experiences of real users. Unfunded 
open-source projects are simply unbeatable in this area.</P>
+<P CLASS="Body">An additional advantage enjoyed by open-source projects is the 
&quot;peer review&quot; of dozens or hundreds of other programmers looking for 
bugs by reading the source code rather than just by executing packaged 
executables. Some of the readers will be looking for security flaws and some of 
those found will not be reported (other than among other crackers), but this 
danger does not take away from the overall advantage of having uncounted 
strangers reading the source code. These strangers can really keep an Open 
Source developer on his or her toes in a way that no manager or mentor ever 
could.</P>
+<H3 CLASS="HeadB">
+Support</H3>
+<P CLASS="Body">&quot;Oops, sorry!&quot; is what's usually said when a user 
finds a bug, or &quot;Oops, sorry, and thanks!&quot; if they also send a patch. 
&quot;Hey, it works for me&quot; is how Open Source developers do bug triage. 
If this sounds chaotic, it is. The lack of support can keep some users from 
being willing (or able) to run unfunded Open Source programs, but it also 
creates opportunities for consultants or software distributors to sell support 
contracts and/or enhanced and/or commercial versions.</P>
+<P CLASS="Body">When the Unix vendor community first encountered a strong 
desire from their users to ship prepackaged open-source software with their 
base systems, their first reaction was pretty much &quot;Well, OK, but we're 
not going to support it.&quot; The success of companies like Cygnus has 
prompted reexamination of that position, but the culture clash runs pretty 
deep. Traditional software houses, including Unix vendors, just cannot plan or 
budget for the cost of sales of a support business if there are unreviewed 
changes being contributed by uncounted strangers. </P>
+<P CLASS="Body">Sometimes the answer is to internalize the software, running 
it through the normal QA process including unit and system testing, code 
coverage analysis, and so on. This can involve a reverse-engineered MRD and DDD 
to give QA some kind of context (i.e., what functionality to test for). Other 
times the answer is to rewrite the terms of the support agreement to &quot;best 
efforts&quot; rather than &quot;guaranteed results.&quot; Ultimately the 
software support market will be filled by who can get leverage from all those 
uncounted strangers, since a lot of them are good people writing good software, 
and the Open Source culture is more effective in most cases at generating the 
level of functionality that users actually want (witness Linux versus 
Windows).</P>
+<H2 CLASS="HeadA">
+Conclusions</H2>
+<P CLASS="Body">Engineering is an old field, and no matter whether one is 
building software, hardware, or railroad bridges, the elements of the 
engineering process are essentially the same:</P>
+<UL>
+<LI CLASS="ListBullet">
+                                       Identify a requirement, and its 
requirers.</LI>
+<LI CLASS="ListBullet">
+                                       Design a solution that meets the 
requirement.</LI>
+<LI CLASS="ListBullet">
+                                       Modularize the design; plan the 
implementation.</LI>
+<LI CLASS="ListBullet">
+                                       Build it; test it; deliver it; support 
it.</LI>
+</UL>
+<P CLASS="Body">Some fields put greater emphasis on some phases. For example, 
railroad bridge builders don't usually have to put a lot of thought into an 
MRD, the implementation process, or support--but they have to pay very close 
attention to the SDD and DDD and of course QA.</P>
+<P CLASS="Body">The seminal moment in the conversion of a 
&quot;programmer&quot; into a &quot;software engineer&quot; is that instant 
when they realize that engineering is a field and that they are able to enter 
that field but that it will require a fundamentally different mindset--and a 
lot more work. Open Source developers often succeed for years before the 
difference between programming and software engineering finally catches up to 
them, simply because Open Source projects take longer to suffer from the lack 
of engineering rigor.</P>
+<P CLASS="Body">This chapter has given a very shallow overview of software 
engineering, and hopefully provided some motivation and context for Open Source 
programmers to consider entering that field. Remember that the future is always 
a hybrid of all the best of what has gone into the past and present. Software 
engineering isn't just for the slide rule and pocket protector set--it's a rich 
field with a lot of proven techniques for building high-quality systems, 
especially high-quality systems that aren't amenable to the &quot;one smart 
programmer&quot; approach common to Open Source projects.</P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="linus.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/wall.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/wall.gif
diff -N Proyectos/Mecagtk/OpenSource/wall.gif
Binary files /dev/null and /tmp/cvsq5EFDx differ

Index: Proyectos/Mecagtk/OpenSource/young.html
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/young.html
diff -N Proyectos/Mecagtk/OpenSource/young.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/OpenSource/young.html     3 Mar 2012 06:14:21 -0000       
1.1
@@ -0,0 +1,199 @@
+<HTML>
+<HEAD>
+<META NAME="DC.title" CONTENT="Open Sources: Voices from the Open Source
+Revolution">
+<META NAME="DC.creator" CONTENT="Robert Young">
+<META NAME="DC.publisher" CONTENT="O'Reilly & Associates, Inc.">
+<META NAME="DC.date" CONTENT="1999-03-29">
+<META NAME="DC.type" CONTENT="Text.Article">
+<META NAME="DC.format" CONTENT="text/html" SCHEME="MIME">
+<META NAME="DC.source" CONTENT="1-56592-582-3" SCHEME="ISBN">
+<META NAME="DC.language" CONTENT="en-US">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
+<META NAME="Type" CONTENT="SampChapDAO">
+<TITLE>Open Sources: Voices from the Open Source Revolution
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" LINK="#AA0000" VLINK="#000077">
+<table BORDER="0" CELLPADDING="0" CELLSPACING="0" width="90%">
+
+<tr>
+<td colspan=2>
+</td>
+</tr>
+
+<tr>
+<td width="25%" valign="TOP">
+
+<A HREF="http://www.oreilly.com/catalog/opensources/";>
+<img hspace=10 vspace=10 src="opensources.s.gif"
+alt="Open Sources: Voices from the Open Source Revolution" 
+align=left valign=top border=0>
+</a>
+</td>
+<td height="105" valign="TOP">
+<br>
+<H2>Open Sources: Voices from the Open Source Revolution
+</h2>
+<font size="-1">
+
+<br>1st Edition January 1999
+<br>1-56592-582-3, Order Number: 5823
+<br>280 pages, $24.95
+</font>
+</td>
+
+</table>
+
+<hr size=1 noshade>
+
+<br>
+
+<!-- Sample chapter begins here -->
+
+<LINK REL="STYLESHEET" HREF="opensrc.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Giving It Away</TITLE>
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H1 class="ChapterTitle" align="right">Giving It Away</H1>
+<H2 CLASS="ChapterSubtitle" align="right">How Red Hat Software Stumbled Across 
a New Economic Model and Helped Improve an Industry</H2>
+<H4 CLASS="ChapterAuthor" align="right">Robert Young</H4>
+<P CLASS="Body">As a founder of one of the leading commercial companies 
offering open-source software, anything I say is tainted for the purpose of 
objective academic research or analysis. The skeptical reader will not view 
this is a definitive paper on this topic, but simply a collection of 
interesting, enlightening, or just plain curious stories of the moments and 
events that have influenced the progress of Red Hat Software, Inc.</P>
+<H2 CLASS="HeadA">
+Where Did Red Hat Come From?</H2>
+<P CLASS="Body">In the early days of the Linux OS (1993), we were a small 
software distribution company. We offered Unix applications, books, and 
low-cost CD-ROMs from vendors like Walnut Creek and Infomagic. In addition to 
conventional Unix offerings, these vendors were beginning to offer a new line: 
Linux CD-ROMs. The Linux CDs were becoming bestsellers for us. When we'd ask 
where this Linux stuff was coming from, we'd get answers like, &quot;It's from 
the programmers according to their skill to the users according to their 
needs.&quot;</P>
+<P CLASS="Body">If the collapse of the Berlin Wall had taught us anything, it 
was that socialism alone was not a sustainable economic model. Hopeful slogans 
aside, human activities did not replicate themselves without a good economic 
model driving the effort. Linux seemed to lack such a model. We reasoned, 
therefore, that the whole Linux thing was a big fluke. A fluke that was 
generating enough cash to keep our little business and a number of other small 
businesses in the black, but a fluke nonetheless.</P>
+<P CLASS="Body">However, we found that instead of this bizarre Linux OS effort 
collapsing, it continued to improve. The number of users continued to grow and 
the applications they were putting it to were growing in sophistication.</P>
+<P CLASS="Body">So we began to study the OS development more carefully. We 
spoke to the key developers and the largest users. The more we studied, the 
more of a solid, albeit unusual, economic model we saw.</P>
+<P CLASS="Body">This economic model was effective. More importantly, our sales 
of Linux compared to our sales of other Unixes were sufficient to convince us 
that this was a real technology with a real future. At this point (fall of 94) 
we were looking for Linux products that we could sell into CompUSA and other 
leading retail distribution outlets. So Marc Ewing and I hooked up to create 
Red Hat Software, Inc. in January of 1995, and the rest of this chapter is 
devoted to the trials and errors of developing a business plan that was 
compatible with the bizarre economic model. Bizarre as it was, this model was 
producing a remarkable OS, providing value to our customers, and providing 
profit for our shareholders.</P>
+<P CLASS="Body">At Red Hat, our role is to work with all the development teams 
across the Internet to take some four hundred software packages and assemble 
them into a useful operating system. We operate much like a car assembly 
plant--we test the finished product and offer support and services for the 
users of the Red Hat Linux OS. </P>
+<P CLASS="Body">The &quot;unique value proposition&quot; of our business plan 
was, and continues to be, to cater to our customers' need to gain control over 
the operating system they were using by delivering the technical benefits of 
freely-redistributable software (source code and a free license) to 
technically-oriented OS consumers.</P>
+<H2 CLASS="HeadA">
+How Do You Make Money in Free Software?</H2>
+<P CLASS="Body">That question assumes that it is easy, or at least easier, to 
make money selling proprietary binary-only software.</P>
+<P CLASS="Body">This is a mistake. Most software ventures, whether based on 
free or proprietary software, fail. Given that until very recently all software 
ventures were of the proprietary binary-only kind, it is therefore safe to say 
that the IP (Intellectual Property) model of software development and marketing 
is a very difficult way to make a living. Of course so was panning for gold 
during the gold rushes of the 19th century. But when software companies strike 
it rich they generate a lot of money, just like past gold rushes, so lots of 
people are willing to assume the risks in order to have an opportunity to 
&quot;strike gold.&quot;</P>
+<P CLASS="Body">No one expects it to be easy to make money in free software. 
While making money with free software is a challenge, the challenge is not 
necessarily greater than with proprietary software. In fact you make money in 
free software exactly the same way you do it in proprietary software: by 
building a great product, marketing it with skill and imagination, looking 
after your customers, and thereby building a brand that stands for quality and 
customer service.</P>
+<P CLASS="Body">Marketing with skill and imagination, particularly in highly 
competitive markets, requires that you offer solutions to your customers that 
others cannot or will not match. To that end Open Source is not a liability but 
a competitive advantage. The Open Source development model produces software 
that is stable, flexible, and highly customizable. So the vendor of open-source 
software starts with a quality product. The trick is to devise an effective way 
to make money delivering the benefits of open-source software to you clients. 
</P>
+<P CLASS="Body">Inventing new economic models is not a trivial task, and the 
innovations that Red Hat has stumbled upon certainly do not apply to everyone 
or every product. But there are some principles that should apply to many 
software ventures, and to many Open Source ventures.</P>
+<P CLASS="Body">Many companies attempt a partially open-source approach to the 
market. Most commonly they will adopt a license that allows for free 
distribution of their software if the user is not using the software for a 
commercial purpose, but if he is he must pay the publisher a license fee or 
royalty. Open Source is defined as software that includes source code and a 
free license--these partially open-source companies provide source code but 
without a free license.</P>
+<P CLASS="Body">And remember, we're in the very early days of the deployment 
and growth of market share for free software. If you aren't making money today 
it may be simply because the market for your product is still small. While we 
are pleased with the growth of the Linux OS, estimates being as high as 10 
million users today (1998), you need to remember that there are some 230 
million DOS/Windows users.</P>
+<H2 CLASS="HeadA">
+We Are in the Commodity Product Business</H2>
+<P CLASS="Body">If we do not own intellectual property the way almost all of 
today's software companies do, and if those companies insist that their most 
valuable asset is the intellectual property represented by the source code to 
the software they own, then it is safe to say that Red Hat is not in the 
Software Business. Red Hat is not licensing intellectual property over which it 
has ownership. That's not the economic model that will support our customers, 
staff, and shareholders. So the question became: What business are we in?</P>
+<P CLASS="Body">The answer was to look around at other industries and try and 
find one that matched. We wanted an industry where the basic ingredients were 
free, or at least freely available. We looked at the legal industry; you cannot 
trademark or patent legal arguments. If a lawyer wins a case in front of the 
Supreme Court, other lawyers are allowed to use those arguments without 
requesting permission. In effect, the arguments have become public domain. </P>
+<P CLASS="Body">We looked at the car industry; you can get parts from a large 
number of suppliers. No one drives a car--we all drive Hondas or Fords or any 
of several hundred alternative models of cars assembled from the collective 
parts available in that industry. Few people have the technical ability to 
assemble their own car. Those who do seldom have the time or inclination. 
Assembly and service form the core of the automotive business model.</P>
+<P CLASS="Body">We looked at the commodity industries and began to recognize 
some ideas. All leading companies selling commodity products, including bottled 
water (Perrier or Evian), the soap business (Tide), or the tomato paste 
business (Heinz), base their marketing strategies on building strong brands. 
These brands must stand for quality, consistency, and reliability. We saw 
something in the brand management of these commodity products that we thought 
we could emulate.</P>
+<P CLASS="Body">Ketchup is nothing more than flavored tomato paste. Something 
that looks and tastes a lot like Heinz Ketchup can be made in your kitchen sink 
without so much as bending a copyright rule. It is effectively all 
freely-redistributable objects: tomatoes, vinegar, salt, and spices. So why 
don't we, as consumers, make ketchup in our kitchen sink, and how does Heinz 
have 80% of the ketchup market? </P>
+<P CLASS="Body">We don't make ketchup because it is cheaper and much more 
convenient to buy ketchup from Heinz, Hunts, or Del Monte than it is to make 
it. But convenience is only part of the story. Convenience alone would suggest 
that Heinz, Hunts, and Del Monte share the market equally because they offer 
roughly equivalent convenience. In fact, Heinz owns 80% of the market. </P>
+<P CLASS="Body">Heinz owns 80% of the market not because Heinz tastes better. 
If you go to the Third World and find 100 people who have never tasted ketchup 
before, you find out two things: one is that people don't actually like tomato 
ketchup, the other is that they dislike all ketchups equally.</P>
+<P CLASS="Body">Heinz has 80% of the ketchup market because they have been 
able to define the taste of ketchup in the mind of ketchup consumers. Now the 
Heinz Ketchup brand is so effective that as consumers we think that ketchup 
that will not come out of the bottle is somehow better than ketchup that pours 
easily!</P>
+<P CLASS="Body">This was Red Hat's opportunity: to offer convenience, to offer 
quality, and most importantly to help define, in the minds of our customers, 
what an operating system can be. At Red Hat, if we do a good job of supplying 
and supporting a consistently high-quality product, we have a great opportunity 
to establish a brand that Linux OS customers simply prefer.</P>
+<P CLASS="Body">But how do we reconcile our need to create more Linux users 
with our need to ensure that those Linux users use Red Hat? We looked at 
industries where the participants benefit because of, not despite, the 
activities of the other participants.</P>
+<P CLASS="Body">Drinking water can be had in most industrial countries simply 
by turning on the nearest tap, so why does Evian sell millions of dollars of 
French tap water into those markets? It boils down to a largely irrational fear 
that the water coming from your tap is not to be trusted.</P>
+<P CLASS="Body">This is the same reason that many people prefer to purchase 
&quot;Official&quot; Red Hat Linux in a box for $50 when they could download it 
for free or buy unofficial CD-ROM copies of Red Hat for as little as $2. Evian 
does have the advantage that most of humanity drinks water--we still have to 
create a lot of Linux consumers in order to have a market to sell our brand 
into.</P>
+<P CLASS="Body">The challenge is to focus on market size, not just market 
share. When consumer demand for bottled water grows, Evian benefits, even 
though many of those consumers start with a bottle other than Evian. Red Hat, 
like Evian, benefits when other Linux suppliers do a great job building a taste 
for the product. The more Linux users there are overall, the more potential 
customers Red Hat has for our flavor.</P>
+<P CLASS="Body">The power of brands translate very effectively into the 
technology business. We have evidence of this in the Venture Capital investors 
who have recently invested in several Open Source software companies. The one 
common denominator between all of the investments to date have been that the 
companies or their products have great name recognition, and are recognized as 
being quality products. In other words, they have successfully established a 
brand.</P>
+<H2 CLASS="HeadA">
+The Strategic Appeal of This Model to the Corporate Computing Industry</H2>
+<P CLASS="Body">Much of brand management comes down to market positioning. 
Consider the challenges that a new OS faces in trying to gain significant 
marketshare. The current OS market is crowded, and dominated by a definite 
market favorite from a brilliant marketing organization. Positioning a 
competing product correctly is crucial to competitive success.</P>
+<P CLASS="Body">Linux fills this role naturally and extremely well. The 
primary complaint about the market leader is the control that vendor has over 
the industry. A new OS must deliver control over the OS platform to its user 
and not become just another proprietary binary-only OS whose owner would then 
gain the same dominant market position that consumers are currently complaining 
about.</P>
+<P CLASS="Body">Consider that Linux is not really an OS. It has come to 
describe a whole collection of open-source components much like the term 
&quot;car&quot; describes an industry better than the thing we drive on the 
highway. We don't drive cars--we drive Ford Tauruses or Honda Accords. Red Hat 
is the equivalent of an OS assembly plant of the Free Software operating system 
industry. Red Hat succeeds when customers perceive themselves not as purchasing 
an operating system, or even purchasing Linux, but purchasing Red Hat first and 
foremost. </P>
+<P CLASS="Body">Honda buys tires from Michelin, airbags from TRW, and paint 
from Dupont and assembles these diverse pieces into an Accord that comes with 
certification, warranties, and a network of Honda and independent repair 
shops.</P>
+<P CLASS="Body">Red Hat takes compilers from Cygnus, web servers from Apache, 
an X Window System from the X Consortium (who built it with support from 
Digital, HP, IBM, Sun, and others), and assembles these into a certifiable, 
warranted, and award-winning Red Hat Linux OS.</P>
+<P CLASS="Body">Much like the car industry, it is Red Hat's job to take what 
it considers the best of the available open-source components to build the best 
OS we can. But control over the OS is not held by Red Hat or anyone else. If a 
Red Hat customer disagrees with our choice of Sendmail and want to use Qmail or 
some other solution, they continue to have the control that enables them to do 
this. In much the same way, someone buying a Ford Taurus may want a higher 
performance manifold installed on the engine in place of the one that was 
shipped from the factory. Because the Taurus owner can open the hood of the car 
they have control over the car. Similarly, Red Hat users have control over the 
Linux OS they use, because they have license to open and modify the source 
code.</P>
+<P CLASS="Body">You can't compete with a monopoly by playing the game by the 
monopolist's rules. The monopoly has the resources, the distribution channels, 
the R&amp;D resources; in short, they just have too many strengths. You compete 
with a monopoly by changing the rules of the game into a set that favors your 
strengths.</P>
+<P CLASS="Body">At the end of the 19th century, the big American monopoly 
concern was not operating systems, but railroads. The major railroads held 
effective monopolies on transportation between major cities. Indeed, major 
American cities, like Chicago, had grown up around the central railway 
terminals owned by the railroad companies.</P>
+<P CLASS="Body">These monopolies were not overcome by building new railroads 
and charging several fewer dollars. They were overcome with the building of the 
interstate highway system and the benefit of door-to-door delivery that the 
trucking companies could offer over the more limited point-to-point delivery 
that the railroad model previously offered.</P>
+<P CLASS="Body">Today the owners of the existing proprietary OSes own a 
technology that is much like owning the railway system. The APIs of a 
proprietary OS are much like the routes and timetables of a railroad. The OS 
vendors can charge whatever toll they like. They can also control and change 
the &quot;route&quot; the APIs take through the OS to suit the needs of the 
applications they sell, without regard to the needs of the applications that 
their competitors sell. These OS vendors' biggest competitive advantage is that 
they control access to the source code that both their applications and the 
Independent Software Vendors (ISVs) applications must run on.</P>
+<P CLASS="Body">To escape the confines of this model, ISVs need an OS model 
where the vendor of that OS (Linux) does not control the OS; where the supplier 
of the OS is responsible for the maintenance of the OS only; and where the ISV 
can sell his application secure in the knowledge that the OS vendor is not his 
biggest competitive threat. The appeal of this OS model has begun to take hold 
in the software world. This is a big part of the reasoning behind Corel's port 
of WordPerfect to Linux, behind Oracle's port of their database software to 
Linux, and behind IBM's support for Apache.</P>
+<P CLASS="Body">The benefit an open-source OS offers over the proprietary 
binary-only OSes is the control the users gain over the technology they are 
using. The proprietary OS vendors, with their huge investment in the 
proprietary software that their products consist of, would be crazy to try and 
match the benefit we are offering their customers, as we generate a fraction of 
the revenue per user that the current proprietary OS vendors rely on.</P>
+<P CLASS="Body">Of course if our technology model becomes accepted by a large 
enough group of computer users, the existing OS vendors are going to have to 
react somehow. But that's still several years in the future. If they do react 
by &quot;freeing&quot; their code the way Netscape &quot;freed&quot; the code 
to the Navigator browser, it would result in better products at dramatically 
lower cost. The industry at large will be well served if that were the only 
result of our efforts. Of course it is not Red Hat's goal to stop there.</P>
+<P CLASS="Body">As an illustration of the importance of the 
&quot;control&quot; benefit of the Linux OS, it is interesting to note 
Fermilab's experience. Fermilab is the big particle accelerator research 
laboratory outside Chicago. They employ over a thousand high-level physics 
engineers who need state-of-the-art technology that they can customize to the 
needs of the projects they are working on. An example of the benefit of Linux 
is its ability to be used in cluster farms to build massively parallel 
super-computers. Fermilab needs this feature, as they are proposing to increase 
the performance of their accelerator. As a result of this performance increase, 
they expect to need to analyze almost 10 times more data per second than they 
have been. Their budgets simply will not enable them to acquire the computing 
power they need from the existing super-computer suppliers.</P>
+<P CLASS="Body">For this and other reasons Fermilab wanted something Open 
Source. They recognized that Red Hat Linux was one of the more popular Open 
Source choices, so they called us. In fact they called us six times in the four 
months during the system selection phase of the project, and we did not respond 
even once to their inquiries. Nonetheless the result of their study was to 
select Red Hat Linux as an officially supported OS at Fermilab. The moral here 
is that (a) we need to learn how to answer our phones better (we have), and (b) 
that Fermilab was able to recognize that our business model was delivering them 
the control over the Red Hat Linux OS they were intending to use--whether or 
not Red Hat Software, Inc. was in position to support them.</P>
+<P CLASS="Body">So whether it is the large computer consuming organizations, 
or the large computer technology suppliers (ISVs), the Linux OS provides 
benefits and is free from the major limitations of all the proprietary 
binary-only OSes available today. Careful brand management of Red Hat Linux 
among Linux distributions, and careful market position of Linux among OS 
alternatives, enables Red Hat to enjoy the growth and success we have today.</P>
+<H2 CLASS="HeadA">
+Licensing, Open Source, or Free Software</H2>
+<P CLASS="Body">The benefit to using Linux is not the high reliability, ease 
of use, robustness, or the tools included with the Linux OS. It is the benefit 
of <EM CLASS="Emphasis">control</EM> that results from the two distinctive 
features of this OS; namely, that it ships with complete source code, and that 
you can use this source code for whatever you chose--without so much as asking 
our permission.</P>
+<P CLASS="Body">NASA, the outfit that rockets people off into outer space for 
a living, has an expression: &quot;Software is not software without source 
code.&quot;</P>
+<P CLASS="Body">To the engineers at NASA, high reliability is not good enough. 
Extremely high reliability it not good enough. NASA need perfect reliability. 
They cannot afford to suffer the &quot;blue screen of death&quot; with twelve 
trusting souls rocketing at a thousand miles an hour around the earth, 
depending on their systems to keep them alive.</P>
+<P CLASS="Body">NASA needs access to the source code of the software they are 
using to build these systems. And they need that software to come with a 
license that allows them to modify it to meet their needs. Now I'll admit that 
the average dental office billing system does not need the standards of 
reliability that NASA astronauts depend on to bill patients for their annual 
teeth cleaning, but the principle remains the same.</P>
+<P CLASS="Body">And unlike proprietary binary-only OSes, with Linux our users 
can modify the product to meet the needs of the application they are building. 
This is the <EM CLASS="Emphasis">unique value proposition</EM> that Red Hat 
offers our customers. This is the proposition that none of our much bigger 
competitors are willing or able to offer.</P>
+<P CLASS="Body">This is a value proposition that overturns usual notions of 
intellectual property. Rather than using a license to lock customers in and 
wall them off from the source code, Red Hat needs a license that embodies the 
very idea of access to and control over source code. So what is an acceptable 
license for the purpose of delivering this unique value proposition? Reasonable 
people in the Open Source community can and do differ in how they answer this 
question. But at Red Hat we do have our current opinions on the subject and 
here they are:</P>
+<P CLASS="Body">The General Public License from the Free Software Foundation 
is in the spirit of Open Source and, because it ensures that the modifications 
and improvements made to the OS remain public, most effective for managing a 
cooperative development project.</P>
+<P CLASS="Body">Our definition of &quot;effective&quot; goes back to the old 
days of Unix development. Prior to 1984, AT&amp;T used to share the source code 
to the Unix OS with any team who could help them improve it. When AT&amp;T was 
broken up, the resulting AT&amp;T was no longer restricted to being a telephone 
company. It decided to try and make money selling licenses to the Unix OS. All 
the universities and research groups who had helped build Unix suddenly found 
themselves having to pay for licenses for an OS that they had helped build. 
They were not happy, but could not do much about it--after all, AT&amp;T owned 
the copyright to Unix. The other development teams had been helping AT&amp;T at 
AT&amp;T's discretion.</P>
+<P CLASS="Body">Our concern is the same. If Red Hat builds an innovation that 
our competitors are able to use, the least we can demand is that the 
innovations our competitors build are available to our engineering teams as 
well. And the GPL is the most effective license for ensuring that this forced 
cooperation among the various team members continues to occur regardless of the 
competitive environment at the time.</P>
+<P CLASS="Body">Keep in mind that one of the great strengths of the Linux OS 
is that it is a highly modular technology. When we ship a version of Red Hat 
Linux we are shipping over 435 separate packages. So licensing also has a 
practical dimension to it. A license that enables Red Hat to ship the software 
but not make modifications to it creates problems because users cannot correct 
or modify the software to their needs. A less restrictive license that requires 
that the user ask the permission of the original author before making changes 
still burdens Red Hat and our users with too many restrictions. Having to ask 
possibly 435 different authors or development teams for permission to make 
modifications is simply not practical.</P>
+<P CLASS="Body">But we are not ideological about licenses. We are comfortable 
with any license that provides us with control over the software we are using, 
because that in turn enables us to deliver the benefit of control to our 
customers and users, whether they are NASA engineers or application programmers 
working on a dental office billing system.</P>
+<H2 CLASS="HeadA">
+The Economic Engine Behind Development of<BR>
+Open Source Software</H2>
+<P CLASS="Body">The interesting stories of where Linux comes from helps 
illustrate the strong economic model that is driving the development of this 
OS.</P>
+<P CLASS="Body">The Open Source community has had to overcome the stereotype 
of the hobbyist hacker. According to this stereotype, Linux, for example, is 
built by fourteen-year-old hackers in their bedrooms. We see here an example of 
the Fear, Uncertainty, and Doubt (FUD) foisted on the software industry by 
vendors of proprietary systems. After all, who wants to trust their 
mission-critical enterprise applications to software written by a 
fourteen-year-old in his spare time?</P>
+<P CLASS="Body">The reality, of course, is very different from this 
stereotype. While the &quot;lone hacker&quot; is a valuable and important part 
of the development process, such programmers account for a minority of the code 
that make up the Linux OS. Linux's creator, Linus Torvalds, began work on Linux 
while he was a student, and much of the code in the Linux OS is built by 
professional software developers at major software, engineering, and research 
organizations.</P>
+<P CLASS="Body">A few examples include the GNU C and C++ compilers that come 
from Cygnus Solutions Inc. of Sunnyvale, California. The X Window System 
originally came from the X Consortium (made up of support from IBM, HP, 
Digital, and Sun). A number of ethernet drivers are now largely the 
responsibility of engineers at NASA. Device drivers are now coming frequently 
from the device manufacturers themselves. In short, building open-source 
software is often not so different from building conventional software, and the 
talent behind Open Source is by and large the same talent that is behind 
conventional software.</P>
+<P CLASS="Body">Grant Guenther, at the time a member of Empress Software's 
database development team, wanted to enable his co-workers to work on projects 
from home. They needed a secure method of moving large files from their office 
to home and back. They were using Linux on PCs and using Zip drives. The only 
problem was that at the time (1996), good Zip drive support was not available 
in Linux.</P>
+<P CLASS="Body">So Grant had a choice: throw out the Linux solution and 
purchase a much more expensive proprietary solution, or stop what he was doing 
and spend a couple of days writing a decent Zip drive driver. He wrote one, and 
worked with other Zip drive users across the Internet to test and refine the 
driver.</P>
+<P CLASS="Body">Consider the cost to Red Hat, or any other software company, 
of having to pay Empress and Grant to develop that driver. Safe to say the cost 
would have been in the tens of thousands of dollars, and yet Grant chose to 
&quot;give away&quot; his work. In return, instead of money he received the use 
of a great solution for his problem of enabling Empress programmers to work 
from home, at a fraction of the cost of the alternatives. This is the kind of 
win-win proposition offered by cooperative models like the Open Source 
development model.</P>
+<H2 CLASS="HeadA">
+Unique Benefits</H2>
+<P CLASS="Body">It's easy to confuse features with benefits. The Open Source 
model in general and Linux in particular certainly have some unique features, 
and it's tempting to say that those features are the reason that the world is 
adopting Linux with such enthusiasm. As hundreds of MIS managers have commented 
to me, &quot;Why would anyone want source code to their OS?&quot; The point is 
no one wants source code. No one needs a Free Software license. Those are 
simply features of the OS. But a feature is not necessarily a benefit. So 
what's the benefit associated with that feature? </P>
+<P CLASS="Body">To the ongoing disappointment of the technical computing 
community, the best technology seldom wins in even the most technical markets. 
Building a better mousetrap does not assure you of success. Linux is not going 
to be successful because it can be installed on a machine with less memory than 
alternative OSes, or because it costs less than other OSes, or because it is 
more reliable. Those are all just features that make Linux arguably a better 
mousetrap than NT or OS/2.</P>
+<P CLASS="Body">The forces that will ultimately drive the success or failure 
of the Linux OS work at a different level. In effect those factors are lumped 
generally under the topic of &quot;market positioning.&quot; As a senior 
executive at Lotus asked us recently, &quot;Why does the world need another 
OS?&quot; Linux will succeed only if it is not &quot;just another OS.&quot; In 
other words, does Linux represent a new model for the development and 
deployment of OSes or is it &quot;just another OS&quot;?</P>
+<P CLASS="Body">That is the question. And the answer is: Linux and the whole 
Open Source movement represent a revolution in software development that will 
profoundly improve the computing systems we are building now and in the future. 
</P>
+<P CLASS="Body">Open-source code is a feature. Control is the benefit. Every 
company wants control over their software, and the feature of Open Source is 
the best way the industry has found so far to achieve that benefit.</P>
+<H2 CLASS="HeadA">
+The Great Unix Flaw</H2>
+<P CLASS="Body">The best example I know of to illustrate that the Linux model 
is a profoundly different approach to building OSes is to look at what many 
people are convinced is the ultimate outcome of this OS effort, namely that 
Linux will balkanize the same way all the Unixes have. There are apparently 
thirty different, largely incompatible, versions of the Unix OS available 
today.</P>
+<P CLASS="Body">But the forces that drive the various Unixes apart are working 
to unify the various Linuxes.</P>
+<P CLASS="Body">The primary difference between Unix and Linux is not the 
kernel, or the Apache server, or any other set of features. The primary 
difference between the two is that Unix is just another proprietary binary-only 
or IP-based OS. The problem with a proprietary binary-only OS that is available 
from multiple suppliers is that those suppliers have short-term marketing 
pressures to keep whatever innovations they make to the OS to themselves for 
the benefit of their customers exclusively. Over time these &quot;proprietary 
innovations&quot; to each version of the Unix OS cause the various Unixes to 
differ substantially from each other. This occurs when the other vendors do not 
have access to the source code of the innovation and the license the Unix 
vendors use prohibit the use of that innovation even if everyone else involved 
in Unix wanted to use the same innovation.</P>
+<P CLASS="Body">In Linux the pressures are the reverse. If one Linux supplier 
adopts an innovation that becomes popular in the market, the other Linux 
vendors will immediately adopt that innovation. This is because they have 
access to the source code of that innovation and it comes under a license that 
allows them to use it.</P>
+<P CLASS="Body">An example of how this works is the very example that all the 
Linux skeptics have been using to predict the downfall of the OS, namely the 
debate in 1997 between the older libc C libraries and the new glibc libraries. 
Red Hat adopted the newer glibc libraries for strong technical reasons. There 
were popular versions of Linux that stuck with the older libc libraries. The 
debate raged for all of six months. Yet as 1998 drew to a close all the popular 
Linux distributions had either switched or announced plans to switch to the 
newer, more stable, more secure, and higher performance glibc libraries.</P>
+<P CLASS="Body">That is part of the power of Open Source: it creates this kind 
of unifying pressure to conform to a common reference point--in effect, an open 
standard--and it removes the intellectual property barriers that would 
otherwise inhibit this convergence.</P>
+<H2 CLASS="HeadA">
+It's Your Choice</H2>
+<P CLASS="Body">Whenever a revolutionary new practice comes along there are 
always skeptics who predict its inevitable downfall, pointing out all the 
obstacles the new model must overcome before it can be called a success. There 
are also the ideologues who insist that it is only the purest implementation of 
the new model that can possibly succeed. And then there are the rest of us who 
are just plugging away, testing, innovating, and using the new technology model 
for those applications where the new model works better than the old one.</P>
+<P CLASS="Body">The primary benefit of this new technology model can be seen 
in the birth of the PC. When IBM published the specs to its PC in 1981, why did 
the world adopt the PC computing model with such enthusiasm? It was not that 
the IBM PC was a better mousetrap. The original 8086-based PCs shipped with 64K 
(yes, K) bytes of main memory. They had an upper memory limit of 640K. No one 
could imagine that a single user would need more that 640K on their individual 
machine. A tape cassette recorder was available for data back-up.</P>
+<P CLASS="Body">What drove the PC revolution was that it provided its users 
with control over their computing platform. They could buy their first PC from 
IBM, their second from Compaq, and their third from HP. They could buy memory 
or hard drives from one of a hundred suppliers, and they could get an almost 
infinite range of peripheral equipment for almost any purpose or 
application.</P>
+<P CLASS="Body">This new model introduced a huge number of inconsistencies, 
incompatibilities, and confusion, between technologies, products, and 
suppliers. But as the world now knows, consumers <EM CLASS="Emphasis">love</EM> 
choice. Consumers will put up with a measure of confusion and inconsistency in 
order to have choice--choice and control.</P>
+<P CLASS="Body">Notice also that the PC hardware business did not fragment. 
Specifications have generally remained open, and there is strong pressure to 
conform to standards to preserve interoperability. No one has a sufficiently 
better mousetrap with which to entice users and then hold them hostage by going 
proprietary. Instead innovations--better mousetraps--accrue to the community at 
large.</P>
+<P CLASS="Body">The Linux OS gives consumers choice over the technology that 
comes with their computers at the operating system level. Does it require a 
whole new level of responsibility and an expertise on the part of the user? 
Certainly. </P>
+<P CLASS="Body">Will that user prefer to go back to the old model of being 
forced to trust his proprietary binary-only OS supplier once he has experienced 
the choice and freedom of the new model? Not likely.</P>
+<P CLASS="Body">Critics will continue to look for, and occasionally find, 
serious problems with Linux technology. But consumers love choice, and the huge 
Internet-based open-source software development marketplace is going to figure 
out ways to solve all of them.</P>
+
+</font>
+<br>
+<font size="3">
+<P align=right>
+<a href="larry.html"><i><b>Next Chapter ---></b></i></a>
+</font></P>
+
+<!-- Sample chapter ends here -->
+
+<p>
+<CENTER>
+<HR SIZE="1" NOSHADE>
+<FONT SIZE="1" FACE="Verdana, Arial, Helvetica">
+<A HREF="http://www.oreilly.com/";>
+<B>O'Reilly Home</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/sales/bookstores";>
+<B>O'Reilly Bookstores</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/order_new/";>
+<B>How to Order</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/contact.html";>
+<B>O'Reilly Contacts<BR></B></A>
+<A HREF="http://www.oreilly.com/international/";>
+<B>International</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/oreilly/about.html";>
+<B>About O'Reilly</B></A> <B> | </B>
+<A HREF="http://www.oreilly.com/affiliates.html";>
+<B>Affiliated Companies</B></A><p>
+<EM>&copy; 1999, O'Reilly &amp; Associates, Inc.</EM>
+</FONT>
+</CENTER>
+</td>
+</tr>
+</table>
+<br>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/OpenSource/young2.gif
===================================================================
RCS file: Proyectos/Mecagtk/OpenSource/young2.gif
diff -N Proyectos/Mecagtk/OpenSource/young2.gif
Binary files /dev/null and /tmp/cvssLcHLA differ

Index: Proyectos/Mecagtk/doc_devel/doxygen.css
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/doxygen.css
diff -N Proyectos/Mecagtk/doc_devel/doxygen.css
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/doxygen.css     3 Mar 2012 06:14:21 -0000       
1.1
@@ -0,0 +1,20 @@
+H1 { text-align: center; }
+A.qindex {}
+A.qindexRef {}
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+DL.el { margin-left: -1cm }
+DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
+DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }
+TD.md { background-color: #f2f2ff }
+DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; 
font-weight: bold }
+DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }
+FONT.keyword       { color: #008000 }
+FONT.keywordtype   { color: #604020 }
+FONT.keywordflow   { color: #e08000 }
+FONT.comment       { color: #800000 }
+FONT.preprocessor  { color: #806020 }
+FONT.stringliteral { color: #002080 }
+FONT.charliteral   { color: #008080 }

Index: Proyectos/Mecagtk/doc_devel/doxygen.gif
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/doxygen.gif
diff -N Proyectos/Mecagtk/doc_devel/doxygen.gif
Binary files /dev/null and /tmp/cvsZ559Nz differ

Index: Proyectos/Mecagtk/doc_devel/files.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/files.html
diff -N Proyectos/Mecagtk/doc_devel/files.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/files.html      3 Mar 2012 06:14:22 -0000       
1.1
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:47 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>mecagtk Lista de archivos</h1>Lista de todos los archivos  con 
descripciones breves:<ul>
+<li><a class="el" href="interfaz_c.html">interfaz.c</a> <a 
href="interfaz_c-source.html">[código]</a><li><a class="el" 
href="lectura_c.html">lectura.c</a> <a 
href="lectura_c-source.html">[código]</a><li><a class="el" 
href="main_c.html">main.c</a> <a href="main_c-source.html">[código]</a><li><a 
class="el" href="retrollamadas_c.html">retrollamadas.c</a> <a 
href="retrollamadas_c-source.html">[código]</a><li><a class="el" 
href="suporte_c.html">suporte.c</a> <a 
href="suporte_c-source.html">[código]</a></ul>
+<hr><address><small>Generado el Tue Mar 13 02:46:47 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/globals.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/globals.html
diff -N Proyectos/Mecagtk/doc_devel/globals.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/globals.html    3 Mar 2012 06:14:22 -0000       
1.1
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>File Member Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:54 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>mecagtk Archivos de los miembros</h1>Lista de los miembros con enlaces 
a los documentos de cada archivo a los que pertenecen:<ul>
+<li>acento
+: <a class="el" 
href="retrollamadas_c.html#a7">retrollamadas.c</a><li>add_pixmap_directory()
+: <a class="el" href="suporte_c.html#a5">suporte.c</a><li>caracter_actual
+: <a class="el" 
href="retrollamadas_c.html#a5">retrollamadas.c</a><li>CargaLeccion()
+: <a class="el" href="lectura_c.html#a0">lectura.c</a><li>check_file_exists()
+: <a class="el" href="suporte_c.html#a2">suporte.c</a><li>contador_caracter
+: <a class="el" 
href="retrollamadas_c.html#a6">retrollamadas.c</a><li>create_centanaeditor()
+: <a class="el" 
href="interfaz_c.html#a3">interfaz.c</a><li>create_dummy_pixmap()
+: <a class="el" href="suporte_c.html#a3">suporte.c</a><li>create_pixmap()
+: <a class="el" href="suporte_c.html#a6">suporte.c</a><li>create_ventanaayuda()
+: <a class="el" href="interfaz_c.html#a4">interfaz.c</a><li>create_window1()
+: <a class="el" href="interfaz_c.html#a0">interfaz.c</a><li>create_window3()
+: <a class="el" href="interfaz_c.html#a1">interfaz.c</a><li>create_window5()
+: <a class="el" href="interfaz_c.html#a2">interfaz.c</a><li>dummy_pixmap_xpm
+: <a class="el" href="suporte_c.html#a0">suporte.c</a><li>leccion_a_insertar
+: <a class="el" 
href="retrollamadas_c.html#a3">retrollamadas.c</a><li>leccion_insertada
+: <a class="el" 
href="retrollamadas_c.html#a0">retrollamadas.c</a><li>leccionactual
+: <a class="el" href="retrollamadas_c.html#a4">retrollamadas.c</a><li>longitud
+: <a class="el" 
href="retrollamadas_c.html#a2">retrollamadas.c</a><li>lookup_widget()
+: <a class="el" href="suporte_c.html#a4">suporte.c</a><li>main()
+: <a class="el" href="main_c.html#a0">main.c</a><li>max_lecciones
+: <a class="el" 
href="retrollamadas_c.html#a1">retrollamadas.c</a><li>on_about_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a10">retrollamadas.c</a><li>on_aboutcerrar_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a26">retrollamadas.c</a><li>on_abrir_lecci_n1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a14">retrollamadas.c</a><li>on_ayuda2_activate()
+: <a class="el" 
href="retrollamadas_c.html#a18">retrollamadas.c</a><li>on_ayuda_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a11">retrollamadas.c</a><li>on_ayudamenu_activate()
+: <a class="el" 
href="retrollamadas_c.html#a9">retrollamadas.c</a><li>on_cargar_lecci_n1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a20">retrollamadas.c</a><li>on_cerrar_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a25">retrollamadas.c</a><li>on_cortar1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a23">retrollamadas.c</a><li>on_editor_de_lecciones1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a16">retrollamadas.c</a><li>on_guardar_como1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a22">retrollamadas.c</a><li>on_guardar_lecci_n1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a21">retrollamadas.c</a><li>on_lecant_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a12">retrollamadas.c</a><li>on_lecsig_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a13">retrollamadas.c</a><li>on_nueva1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a19">retrollamadas.c</a><li>on_pegar1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a24">retrollamadas.c</a><li>on_salir1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a15">retrollamadas.c</a><li>on_salir2_activate()
+: <a class="el" 
href="retrollamadas_c.html#a28">retrollamadas.c</a><li>on_salirayuda_clicked()
+: <a class="el" 
href="retrollamadas_c.html#a29">retrollamadas.c</a><li>on_sobre_mecagtk1_activate()
+: <a class="el" 
href="retrollamadas_c.html#a17">retrollamadas.c</a><li>on_window1_key_press_event()
+: <a class="el" 
href="retrollamadas_c.html#a8">retrollamadas.c</a><li>on_window3_enter_notify_event()
+: <a class="el" 
href="retrollamadas_c.html#a27">retrollamadas.c</a><li>pixmaps_directories
+: <a class="el" href="suporte_c.html#a1">suporte.c</a></ul>
+<hr><address><small>Generado el Tue Mar 13 02:46:54 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/index.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/index.html
diff -N Proyectos/Mecagtk/doc_devel/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/index.html      3 Mar 2012 06:14:22 -0000       
1.1
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Main Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:47 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>mecagtk Documentación</h1>
+<p>
+<h3 align="center">0.1.2.GTK</h3><hr><address><small>Generado el Tue Mar 13 
02:46:47 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/interfaz_c-source.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/interfaz_c-source.html
diff -N Proyectos/Mecagtk/doc_devel/interfaz_c-source.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/interfaz_c-source.html  3 Mar 2012 06:14:22 
-0000       1.1
@@ -0,0 +1,1641 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>interfaz.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:47 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>interfaz.c</h1><a href="interfaz_c.html">Ir a la documentación de este 
archivo.</a><div class="fragment"><pre>00001 <font class="comment">/*
+</font>00002 <font class="comment"> * DO NOT EDIT THIS FILE - it is generated 
by Glade.
+</font>00003 <font class="comment"> */</font>
+00004 
+00005 <font class="preprocessor">#ifdef HAVE_CONFIG_H
+</font>00006 <font class="preprocessor"></font><font class="preprocessor">#  
include &lt;config.h&gt;</font>
+00007 <font class="preprocessor">#endif
+</font>00008 <font class="preprocessor"></font>
+00009 <font class="preprocessor">#include &lt;sys/types.h&gt;</font>
+00010 <font class="preprocessor">#include &lt;sys/stat.h&gt;</font>
+00011 <font class="preprocessor">#include &lt;unistd.h&gt;</font>
+00012 <font class="preprocessor">#include &lt;string.h&gt;</font>
+00013 
+00014 <font class="preprocessor">#include &lt;gdk/gdkkeysyms.h&gt;</font>
+00015 <font class="preprocessor">#include &lt;gtk/gtk.h&gt;</font>
+00016 
+00017 <font class="preprocessor">#include "retrollamadas.h"</font>
+00018 <font class="preprocessor">#include "interfaz.h"</font>
+00019 <font class="preprocessor">#include "suporte.h"</font>
+00020 
+00021 GtkWidget*
+<a name="l00022"></a><a class="code" href="interfaz_c.html#a0">00022</a> <a 
class="code" href="interfaz_c.html#a0">create_window1</a> (<font 
class="keywordtype">void</font>)<font class="keyword">
+</font>00023 <font class="keyword"></font>{
+00024   GtkWidget *window1;
+00025   GtkWidget *vbox9;
+00026   GtkWidget *vbox10;
+00027   GtkWidget *menubar1;
+00028   GtkWidget *archivo1;
+00029   GtkWidget *archivo1_menu;
+00030   GtkAccelGroup *archivo1_menu_accels;
+00031   GtkWidget *abrir_lecci_n1;
+00032   GtkWidget *salir1;
+00033   GtkWidget *preferencias1;
+00034   GtkWidget *preferencias1_menu;
+00035   GtkAccelGroup *preferencias1_menu_accels;
+00036   GtkWidget *editor_de_lecciones1;
+00037   GtkWidget *ayuda1;
+00038   GtkWidget *ayuda1_menu;
+00039   GtkAccelGroup *ayuda1_menu_accels;
+00040   GtkWidget *sobre_mecagtk1;
+00041   GtkWidget *ayuda2;
+00042   GtkWidget *scrolledwindow1;
+00043   GtkWidget *text1;
+00044   GtkWidget *scrolledwindow3;
+00045   GtkWidget *text2;
+00046   GtkWidget *fixed9;
+00047   GtkWidget *shiftderecha;
+00048   GtkWidget *retorno;
+00049   GtkWidget *borrar;
+00050   GtkWidget *shiftizquierda;
+00051   GtkWidget *button152;
+00052   GtkWidget *button153;
+00053   guint rayas_key;
+00054   GtkWidget *rayas;
+00055   GtkWidget *dopuntos;
+00056   GtkWidget *puntoycoma;
+00057   GtkWidget *bm;
+00058   GtkWidget *bn;
+00059   GtkWidget *bb;
+00060   GtkWidget *bv;
+00061   GtkWidget *bc;
+00062   GtkWidget *bx;
+00063   GtkWidget *bz;
+00064   GtkWidget *mayormenor;
+00065   GtkWidget *cedilla;
+00066   GtkWidget *unlaut;
+00067   GtkWidget *bnn;
+00068   GtkWidget *bl;
+00069   GtkWidget *bk;
+00070   GtkWidget *bj;
+00071   GtkWidget *bh;
+00072   GtkWidget *bg;
+00073   GtkWidget *bf;
+00074   GtkWidget *bd;
+00075   GtkWidget *bs;
+00076   GtkWidget *ba;
+00077   GtkWidget *asterisco;
+00078   GtkWidget *circunflej;
+00079   GtkWidget *bp;
+00080   GtkWidget *bo;
+00081   GtkWidget *bi;
+00082   GtkWidget *bu;
+00083   GtkWidget *by;
+00084   GtkWidget *bt;
+00085   GtkWidget *br;
+00086   GtkWidget *be;
+00087   GtkWidget *bw;
+00088   GtkWidget *bq;
+00089   GtkWidget *button189;
+00090   GtkWidget *button190;
+00091   GtkWidget *button191;
+00092   GtkWidget *button192;
+00093   GtkWidget *button193;
+00094   GtkWidget *button194;
+00095   GtkWidget *button195;
+00096   GtkWidget *button196;
+00097   GtkWidget *button197;
+00098   GtkWidget *button198;
+00099   GtkWidget *button199;
+00100   GtkWidget *button200;
+00101   GtkWidget *altgr;
+00102   GtkWidget *alt;
+00103   GtkWidget *button203;
+00104   GtkWidget *controldcha;
+00105   GtkWidget *controlizda;
+00106   GtkWidget *espacio;
+00107   GtkWidget *frame1;
+00108   GtkWidget *fixed10;
+00109   GtkWidget *about;
+00110   GtkWidget *ayuda;
+00111   GtkWidget *cerrar;
+00112   GtkWidget *label1;
+00113   GtkWidget *frame3;
+00114   GtkWidget *hbox1;
+00115   GtkWidget *lecant;
+00116   GtkWidget *lecsig;
+00117   GtkWidget *pixmap9;
+00118   GtkWidget *label14;
+00119   GtkWidget *hseparator1;
+00120   GtkAccelGroup *accel_group;
+00121   GtkTooltips *tooltips;
+00122 
+00123   tooltips = gtk_tooltips_new ();
+00124 
+00125   accel_group = gtk_accel_group_new ();
+00126 
+00127   window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+00128   gtk_object_set_data (GTK_OBJECT (window1), <font 
class="stringliteral">"window1"</font>, window1);
+00129   gtk_widget_set_usize (window1, 878, 478);
+00130   gtk_tooltips_set_tip (tooltips, window1, _(<font 
class="stringliteral">"Meca GTK  :)"</font>), NULL);
+00131   gtk_window_set_title (GTK_WINDOW (window1), _(<font 
class="stringliteral">"Meca GTK v0.1 (Edición BETA)"</font>));
+00132   gtk_window_set_position (GTK_WINDOW (window1), GTK_WIN_POS_CENTER);
+00133   gtk_window_set_policy (GTK_WINDOW (window1), FALSE, FALSE, FALSE);
+00134 
+00135   vbox9 = gtk_vbox_new (FALSE, 0);
+00136   gtk_widget_ref (vbox9);
+00137   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"vbox9"</font>, vbox9,
+00138                             (GtkDestroyNotify) gtk_widget_unref);
+00139   gtk_widget_show (vbox9);
+00140   gtk_container_add (GTK_CONTAINER (window1), vbox9);
+00141 
+00142   vbox10 = gtk_vbox_new (FALSE, 0);
+00143   gtk_widget_ref (vbox10);
+00144   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"vbox10"</font>, vbox10,
+00145                             (GtkDestroyNotify) gtk_widget_unref);
+00146   gtk_widget_show (vbox10);
+00147   gtk_box_pack_start (GTK_BOX (vbox9), vbox10, TRUE, TRUE, 0);
+00148 
+00149   menubar1 = gtk_menu_bar_new ();
+00150   gtk_widget_ref (menubar1);
+00151   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"menubar1"</font>, menubar1,
+00152                             (GtkDestroyNotify) gtk_widget_unref);
+00153   gtk_widget_show (menubar1);
+00154   gtk_box_pack_start (GTK_BOX (vbox10), menubar1, FALSE, FALSE, 0);
+00155   gtk_menu_bar_set_shadow_type (GTK_MENU_BAR (menubar1), 
GTK_SHADOW_ETCHED_IN);
+00156 
+00157   archivo1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Archivo"</font>));
+00158   gtk_widget_ref (archivo1);
+00159   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"archivo1"</font>, archivo1,
+00160                             (GtkDestroyNotify) gtk_widget_unref);
+00161   gtk_widget_show (archivo1);
+00162   gtk_container_add (GTK_CONTAINER (menubar1), archivo1);
+00163 
+00164   archivo1_menu = gtk_menu_new ();
+00165   gtk_widget_ref (archivo1_menu);
+00166   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"archivo1_menu"</font>, archivo1_menu,
+00167                             (GtkDestroyNotify) gtk_widget_unref);
+00168   gtk_menu_item_set_submenu (GTK_MENU_ITEM (archivo1), archivo1_menu);
+00169   archivo1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(archivo1_menu));
+00170 
+00171   abrir_lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Abrir Lección"</font>));
+00172   gtk_widget_ref (abrir_lecci_n1);
+00173   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"abrir_lecci_n1"</font>, abrir_lecci_n1,
+00174                             (GtkDestroyNotify) gtk_widget_unref);
+00175   gtk_widget_show (abrir_lecci_n1);
+00176   gtk_container_add (GTK_CONTAINER (archivo1_menu), abrir_lecci_n1);
+00177 
+00178   salir1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Salir"</font>));
+00179   gtk_widget_ref (salir1);
+00180   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"salir1"</font>, salir1,
+00181                             (GtkDestroyNotify) gtk_widget_unref);
+00182   gtk_widget_show (salir1);
+00183   gtk_container_add (GTK_CONTAINER (archivo1_menu), salir1);
+00184 
+00185   preferencias1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Preferencias"</font>));
+00186   gtk_widget_ref (preferencias1);
+00187   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"preferencias1"</font>, preferencias1,
+00188                             (GtkDestroyNotify) gtk_widget_unref);
+00189   gtk_widget_show (preferencias1);
+00190   gtk_container_add (GTK_CONTAINER (menubar1), preferencias1);
+00191 
+00192   preferencias1_menu = gtk_menu_new ();
+00193   gtk_widget_ref (preferencias1_menu);
+00194   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"preferencias1_menu"</font>, preferencias1_menu,
+00195                             (GtkDestroyNotify) gtk_widget_unref);
+00196   gtk_menu_item_set_submenu (GTK_MENU_ITEM (preferencias1), 
preferencias1_menu);
+00197   preferencias1_menu_accels = gtk_menu_ensure_uline_accel_group 
(GTK_MENU (preferencias1_menu));
+00198 
+00199   editor_de_lecciones1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Editor de Lecciones"</font>));
+00200   gtk_widget_ref (editor_de_lecciones1);
+00201   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"editor_de_lecciones1"</font>, editor_de_lecciones1,
+00202                             (GtkDestroyNotify) gtk_widget_unref);
+00203   gtk_widget_show (editor_de_lecciones1);
+00204   gtk_container_add (GTK_CONTAINER (preferencias1_menu), 
editor_de_lecciones1);
+00205 
+00206   ayuda1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Ayuda"</font>));
+00207   gtk_widget_ref (ayuda1);
+00208   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda1"</font>, ayuda1,
+00209                             (GtkDestroyNotify) gtk_widget_unref);
+00210   gtk_widget_show (ayuda1);
+00211   gtk_container_add (GTK_CONTAINER (menubar1), ayuda1);
+00212 
+00213   ayuda1_menu = gtk_menu_new ();
+00214   gtk_widget_ref (ayuda1_menu);
+00215   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda1_menu"</font>, ayuda1_menu,
+00216                             (GtkDestroyNotify) gtk_widget_unref);
+00217   gtk_menu_item_set_submenu (GTK_MENU_ITEM (ayuda1), ayuda1_menu);
+00218   ayuda1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(ayuda1_menu));
+00219 
+00220   sobre_mecagtk1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Sobre MecaGTK"</font>));
+00221   gtk_widget_ref (sobre_mecagtk1);
+00222   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"sobre_mecagtk1"</font>, sobre_mecagtk1,
+00223                             (GtkDestroyNotify) gtk_widget_unref);
+00224   gtk_widget_show (sobre_mecagtk1);
+00225   gtk_container_add (GTK_CONTAINER (ayuda1_menu), sobre_mecagtk1);
+00226 
+00227   ayuda2 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Ayuda"</font>));
+00228   gtk_widget_ref (ayuda2);
+00229   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda2"</font>, ayuda2,
+00230                             (GtkDestroyNotify) gtk_widget_unref);
+00231   gtk_widget_show (ayuda2);
+00232   gtk_container_add (GTK_CONTAINER (ayuda1_menu), ayuda2);
+00233 
+00234   scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
+00235   gtk_widget_ref (scrolledwindow1);
+00236   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"scrolledwindow1"</font>, scrolledwindow1,
+00237                             (GtkDestroyNotify) gtk_widget_unref);
+00238   gtk_widget_show (scrolledwindow1);
+00239   gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow1, TRUE, TRUE, 0);
+00240   gtk_widget_set_usize (scrolledwindow1, -2, 81);
+00241   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+00242 
+00243   text1 = gtk_text_new (NULL, NULL);
+00244   gtk_widget_ref (text1);
+00245   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"text1"</font>, text1,
+00246                             (GtkDestroyNotify) gtk_widget_unref);
+00247   gtk_widget_show (text1);
+00248   gtk_container_add (GTK_CONTAINER (scrolledwindow1), text1);
+00249   gtk_widget_set_usize (text1, -2, 103);
+00250 
+00251   scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
+00252   gtk_widget_ref (scrolledwindow3);
+00253   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"scrolledwindow3"</font>, scrolledwindow3,
+00254                             (GtkDestroyNotify) gtk_widget_unref);
+00255   gtk_widget_show (scrolledwindow3);
+00256   gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow3, TRUE, TRUE, 0);
+00257   gtk_widget_set_usize (scrolledwindow3, -2, 1);
+00258   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow3), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+00259 
+00260   text2 = gtk_text_new (NULL, NULL);
+00261   gtk_widget_ref (text2);
+00262   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"text2"</font>, text2,
+00263                             (GtkDestroyNotify) gtk_widget_unref);
+00264   gtk_widget_show (text2);
+00265   gtk_container_add (GTK_CONTAINER (scrolledwindow3), text2);
+00266   gtk_widget_set_usize (text2, -2, 0);
+00267 
+00268   fixed9 = gtk_fixed_new ();
+00269   gtk_widget_ref (fixed9);
+00270   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"fixed9"</font>, fixed9,
+00271                             (GtkDestroyNotify) gtk_widget_unref);
+00272   gtk_widget_show (fixed9);
+00273   gtk_box_pack_start (GTK_BOX (vbox9), fixed9, TRUE, TRUE, 0);
+00274   gtk_widget_set_usize (fixed9, -2, 139);
+00275 
+00276   shiftderecha = gtk_button_new_with_label (_(<font 
class="stringliteral">"Shift"</font>));
+00277   gtk_widget_ref (shiftderecha);
+00278   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"shiftderecha"</font>, shiftderecha,
+00279                             (GtkDestroyNotify) gtk_widget_unref);
+00280   gtk_widget_show (shiftderecha);
+00281   gtk_fixed_put (GTK_FIXED (fixed9), shiftderecha, 512, 144);
+00282   gtk_widget_set_uposition (shiftderecha, 512, 144);
+00283   gtk_widget_set_usize (shiftderecha, 107, 35);
+00284 
+00285   retorno = gtk_button_new_with_label (_(<font 
class="stringliteral">"Enter"</font>));
+00286   gtk_widget_ref (retorno);
+00287   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"retorno"</font>, retorno,
+00288                             (GtkDestroyNotify) gtk_widget_unref);
+00289   gtk_widget_show (retorno);
+00290   gtk_fixed_put (GTK_FIXED (fixed9), retorno, 568, 64);
+00291   gtk_widget_set_uposition (retorno, 568, 64);
+00292   gtk_widget_set_usize (retorno, 51, 75);
+00293 
+00294   borrar = gtk_button_new_with_label (_(<font 
class="stringliteral">"&lt;--"</font>));
+00295   gtk_widget_ref (borrar);
+00296   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"borrar"</font>, borrar,
+00297                             (GtkDestroyNotify) gtk_widget_unref);
+00298   gtk_widget_show (borrar);
+00299   gtk_fixed_put (GTK_FIXED (fixed9), borrar, 544, 24);
+00300   gtk_widget_set_uposition (borrar, 544, 24);
+00301   gtk_widget_set_usize (borrar, 75, 35);
+00302 
+00303   shiftizquierda = gtk_button_new_with_label (_(<font 
class="stringliteral">" Shift"</font>));
+00304   gtk_widget_ref (shiftizquierda);
+00305   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"shiftizquierda"</font>, shiftizquierda,
+00306                             (GtkDestroyNotify) gtk_widget_unref);
+00307   gtk_widget_show (shiftizquierda);
+00308   gtk_fixed_put (GTK_FIXED (fixed9), shiftizquierda, 16, 144);
+00309   gtk_widget_set_uposition (shiftizquierda, 16, 144);
+00310   gtk_widget_set_usize (shiftizquierda, 52, 35);
+00311 
+00312   button152 = gtk_button_new_with_label (_(<font 
class="stringliteral">"Bloq\nMayús"</font>));
+00313   gtk_widget_ref (button152);
+00314   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button152"</font>, button152,
+00315                             (GtkDestroyNotify) gtk_widget_unref);
+00316   gtk_widget_show (button152);
+00317   gtk_fixed_put (GTK_FIXED (fixed9), button152, 16, 104);
+00318   gtk_widget_set_uposition (button152, 16, 104);
+00319   gtk_widget_set_usize (button152, 66, 35);
+00320 
+00321   button153 = gtk_button_new_with_label (_(<font 
class="stringliteral">"|&lt;--\n--&gt;|"</font>));
+00322   gtk_widget_ref (button153);
+00323   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button153"</font>, button153,
+00324                             (GtkDestroyNotify) gtk_widget_unref);
+00325   gtk_widget_show (button153);
+00326   gtk_fixed_put (GTK_FIXED (fixed9), button153, 16, 64);
+00327   gtk_widget_set_uposition (button153, 16, 64);
+00328   gtk_widget_set_usize (button153, 59, 35);
+00329 
+00330   rayas = gtk_button_new_with_label (<font 
class="stringliteral">""</font>);
+00331   rayas_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN 
(rayas)-&gt;child),
+00332                                    _(<font 
class="stringliteral">"_\n-\n"</font>));
+00333   gtk_widget_add_accelerator (rayas, <font 
class="stringliteral">"clicked"</font>, accel_group,
+00334                               rayas_key, GDK_MOD1_MASK, 0);
+00335   gtk_widget_ref (rayas);
+00336   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"rayas"</font>, rayas,
+00337                             (GtkDestroyNotify) gtk_widget_unref);
+00338   gtk_widget_show (rayas);
+00339   gtk_fixed_put (GTK_FIXED (fixed9), rayas, 472, 144);
+00340   gtk_widget_set_uposition (rayas, 472, 144);
+00341   gtk_widget_set_usize (rayas, 35, 35);
+00342 
+00343   dopuntos = gtk_button_new_with_label (_(<font 
class="stringliteral">":\n."</font>));
+00344   gtk_widget_ref (dopuntos);
+00345   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"dopuntos"</font>, dopuntos,
+00346                             (GtkDestroyNotify) gtk_widget_unref);
+00347   gtk_widget_show (dopuntos);
+00348   gtk_fixed_put (GTK_FIXED (fixed9), dopuntos, 432, 144);
+00349   gtk_widget_set_uposition (dopuntos, 432, 144);
+00350   gtk_widget_set_usize (dopuntos, 35, 35);
+00351 
+00352   puntoycoma = gtk_button_new_with_label (_(<font 
class="stringliteral">";\n,"</font>));
+00353   gtk_widget_ref (puntoycoma);
+00354   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"puntoycoma"</font>, puntoycoma,
+00355                             (GtkDestroyNotify) gtk_widget_unref);
+00356   gtk_widget_show (puntoycoma);
+00357   gtk_fixed_put (GTK_FIXED (fixed9), puntoycoma, 392, 144);
+00358   gtk_widget_set_uposition (puntoycoma, 392, 144);
+00359   gtk_widget_set_usize (puntoycoma, 35, 35);
+00360 
+00361   bm = gtk_button_new_with_label (_(<font 
class="stringliteral">"M\n"</font>));
+00362   gtk_widget_ref (bm);
+00363   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bm"</font>, bm,
+00364                             (GtkDestroyNotify) gtk_widget_unref);
+00365   gtk_widget_show (bm);
+00366   gtk_fixed_put (GTK_FIXED (fixed9), bm, 352, 144);
+00367   gtk_widget_set_uposition (bm, 352, 144);
+00368   gtk_widget_set_usize (bm, 35, 35);
+00369 
+00370   bn = gtk_button_new_with_label (_(<font 
class="stringliteral">"N\n"</font>));
+00371   gtk_widget_ref (bn);
+00372   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bn"</font>, bn,
+00373                             (GtkDestroyNotify) gtk_widget_unref);
+00374   gtk_widget_show (bn);
+00375   gtk_fixed_put (GTK_FIXED (fixed9), bn, 312, 144);
+00376   gtk_widget_set_uposition (bn, 312, 144);
+00377   gtk_widget_set_usize (bn, 35, 35);
+00378 
+00379   bb = gtk_button_new_with_label (_(<font 
class="stringliteral">"B\n"</font>));
+00380   gtk_widget_ref (bb);
+00381   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bb"</font>, bb,
+00382                             (GtkDestroyNotify) gtk_widget_unref);
+00383   gtk_widget_show (bb);
+00384   gtk_fixed_put (GTK_FIXED (fixed9), bb, 272, 144);
+00385   gtk_widget_set_uposition (bb, 272, 144);
+00386   gtk_widget_set_usize (bb, 35, 35);
+00387 
+00388   bv = gtk_button_new_with_label (_(<font 
class="stringliteral">"V\n"</font>));
+00389   gtk_widget_ref (bv);
+00390   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bv"</font>, bv,
+00391                             (GtkDestroyNotify) gtk_widget_unref);
+00392   gtk_widget_show (bv);
+00393   gtk_fixed_put (GTK_FIXED (fixed9), bv, 232, 144);
+00394   gtk_widget_set_uposition (bv, 232, 144);
+00395   gtk_widget_set_usize (bv, 35, 35);
+00396 
+00397   bc = gtk_button_new_with_label (_(<font 
class="stringliteral">"C\n"</font>));
+00398   gtk_widget_ref (bc);
+00399   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bc"</font>, bc,
+00400                             (GtkDestroyNotify) gtk_widget_unref);
+00401   gtk_widget_show (bc);
+00402   gtk_fixed_put (GTK_FIXED (fixed9), bc, 192, 144);
+00403   gtk_widget_set_uposition (bc, 192, 144);
+00404   gtk_widget_set_usize (bc, 35, 35);
+00405 
+00406   bx = gtk_button_new_with_label (_(<font 
class="stringliteral">"X\n"</font>));
+00407   gtk_widget_ref (bx);
+00408   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bx"</font>, bx,
+00409                             (GtkDestroyNotify) gtk_widget_unref);
+00410   gtk_widget_show (bx);
+00411   gtk_fixed_put (GTK_FIXED (fixed9), bx, 152, 144);
+00412   gtk_widget_set_uposition (bx, 152, 144);
+00413   gtk_widget_set_usize (bx, 35, 35);
+00414 
+00415   bz = gtk_button_new_with_label (_(<font 
class="stringliteral">"Z\n"</font>));
+00416   gtk_widget_ref (bz);
+00417   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bz"</font>, bz,
+00418                             (GtkDestroyNotify) gtk_widget_unref);
+00419   gtk_widget_show (bz);
+00420   gtk_fixed_put (GTK_FIXED (fixed9), bz, 112, 144);
+00421   gtk_widget_set_uposition (bz, 112, 144);
+00422   gtk_widget_set_usize (bz, 35, 35);
+00423 
+00424   mayormenor = gtk_button_new_with_label (_(<font 
class="stringliteral">"&gt;\n&lt;"</font>));
+00425   gtk_widget_ref (mayormenor);
+00426   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"mayormenor"</font>, mayormenor,
+00427                             (GtkDestroyNotify) gtk_widget_unref);
+00428   gtk_widget_show (mayormenor);
+00429   gtk_fixed_put (GTK_FIXED (fixed9), mayormenor, 72, 144);
+00430   gtk_widget_set_uposition (mayormenor, 72, 144);
+00431   gtk_widget_set_usize (mayormenor, 35, 35);
+00432 
+00433   cedilla = gtk_button_new_with_label (_(<font 
class="stringliteral">"Ç\n  }"</font>));
+00434   gtk_widget_ref (cedilla);
+00435   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"cedilla"</font>, cedilla,
+00436                             (GtkDestroyNotify) gtk_widget_unref);
+00437   gtk_widget_show (cedilla);
+00438   gtk_fixed_put (GTK_FIXED (fixed9), cedilla, 528, 104);
+00439   gtk_widget_set_uposition (cedilla, 528, 104);
+00440   gtk_widget_set_usize (cedilla, 35, 35);
+00441 
+00442   unlaut = gtk_button_new_with_label (_(<font 
class="stringliteral">"\"\n' {"</font>));
+00443   gtk_widget_ref (unlaut);
+00444   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"unlaut"</font>, unlaut,
+00445                             (GtkDestroyNotify) gtk_widget_unref);
+00446   gtk_widget_show (unlaut);
+00447   gtk_fixed_put (GTK_FIXED (fixed9), unlaut, 488, 104);
+00448   gtk_widget_set_uposition (unlaut, 488, 104);
+00449   gtk_widget_set_usize (unlaut, 35, 35);
+00450 
+00451   bnn = gtk_button_new_with_label (_(<font 
class="stringliteral">"Ñ\n"</font>));
+00452   gtk_widget_ref (bnn);
+00453   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bnn"</font>, bnn,
+00454                             (GtkDestroyNotify) gtk_widget_unref);
+00455   gtk_widget_show (bnn);
+00456   gtk_fixed_put (GTK_FIXED (fixed9), bnn, 448, 104);
+00457   gtk_widget_set_uposition (bnn, 448, 104);
+00458   gtk_widget_set_usize (bnn, 35, 35);
+00459 
+00460   bl = gtk_button_new_with_label (_(<font 
class="stringliteral">"L\n"</font>));
+00461   gtk_widget_ref (bl);
+00462   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bl"</font>, bl,
+00463                             (GtkDestroyNotify) gtk_widget_unref);
+00464   gtk_widget_show (bl);
+00465   gtk_fixed_put (GTK_FIXED (fixed9), bl, 408, 104);
+00466   gtk_widget_set_uposition (bl, 408, 104);
+00467   gtk_widget_set_usize (bl, 35, 35);
+00468 
+00469   bk = gtk_button_new_with_label (_(<font 
class="stringliteral">"K\n"</font>));
+00470   gtk_widget_ref (bk);
+00471   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bk"</font>, bk,
+00472                             (GtkDestroyNotify) gtk_widget_unref);
+00473   gtk_widget_show (bk);
+00474   gtk_fixed_put (GTK_FIXED (fixed9), bk, 368, 104);
+00475   gtk_widget_set_uposition (bk, 368, 104);
+00476   gtk_widget_set_usize (bk, 35, 35);
+00477 
+00478   bj = gtk_button_new_with_label (_(<font 
class="stringliteral">"J"</font>));
+00479   gtk_widget_ref (bj);
+00480   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bj"</font>, bj,
+00481                             (GtkDestroyNotify) gtk_widget_unref);
+00482   gtk_widget_show (bj);
+00483   gtk_fixed_put (GTK_FIXED (fixed9), bj, 328, 104);
+00484   gtk_widget_set_uposition (bj, 328, 104);
+00485   gtk_widget_set_usize (bj, 35, 35);
+00486 
+00487   bh = gtk_button_new_with_label (_(<font 
class="stringliteral">"H\n"</font>));
+00488   gtk_widget_ref (bh);
+00489   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bh"</font>, bh,
+00490                             (GtkDestroyNotify) gtk_widget_unref);
+00491   gtk_widget_show (bh);
+00492   gtk_fixed_put (GTK_FIXED (fixed9), bh, 288, 104);
+00493   gtk_widget_set_uposition (bh, 288, 104);
+00494   gtk_widget_set_usize (bh, 35, 35);
+00495 
+00496   bg = gtk_button_new_with_label (_(<font 
class="stringliteral">"G\n"</font>));
+00497   gtk_widget_ref (bg);
+00498   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bg"</font>, bg,
+00499                             (GtkDestroyNotify) gtk_widget_unref);
+00500   gtk_widget_show (bg);
+00501   gtk_fixed_put (GTK_FIXED (fixed9), bg, 248, 104);
+00502   gtk_widget_set_uposition (bg, 248, 104);
+00503   gtk_widget_set_usize (bg, 35, 35);
+00504 
+00505   bf = gtk_button_new_with_label (_(<font 
class="stringliteral">"F"</font>));
+00506   gtk_widget_ref (bf);
+00507   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bf"</font>, bf,
+00508                             (GtkDestroyNotify) gtk_widget_unref);
+00509   gtk_widget_show (bf);
+00510   gtk_fixed_put (GTK_FIXED (fixed9), bf, 208, 104);
+00511   gtk_widget_set_uposition (bf, 208, 104);
+00512   gtk_widget_set_usize (bf, 35, 35);
+00513 
+00514   bd = gtk_button_new_with_label (_(<font 
class="stringliteral">"D\n"</font>));
+00515   gtk_widget_ref (bd);
+00516   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bd"</font>, bd,
+00517                             (GtkDestroyNotify) gtk_widget_unref);
+00518   gtk_widget_show (bd);
+00519   gtk_fixed_put (GTK_FIXED (fixed9), bd, 168, 104);
+00520   gtk_widget_set_uposition (bd, 168, 104);
+00521   gtk_widget_set_usize (bd, 35, 35);
+00522 
+00523   bs = gtk_button_new_with_label (_(<font 
class="stringliteral">"S\n"</font>));
+00524   gtk_widget_ref (bs);
+00525   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bs"</font>, bs,
+00526                             (GtkDestroyNotify) gtk_widget_unref);
+00527   gtk_widget_show (bs);
+00528   gtk_fixed_put (GTK_FIXED (fixed9), bs, 128, 104);
+00529   gtk_widget_set_uposition (bs, 128, 104);
+00530   gtk_widget_set_usize (bs, 35, 35);
+00531 
+00532   ba = gtk_button_new_with_label (_(<font 
class="stringliteral">"A\n"</font>));
+00533   gtk_widget_ref (ba);
+00534   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ba"</font>, ba,
+00535                             (GtkDestroyNotify) gtk_widget_unref);
+00536   gtk_widget_show (ba);
+00537   gtk_fixed_put (GTK_FIXED (fixed9), ba, 88, 104);
+00538   gtk_widget_set_uposition (ba, 88, 104);
+00539   gtk_widget_set_usize (ba, 35, 35);
+00540   gtk_widget_add_accelerator (ba, <font 
class="stringliteral">"clicked"</font>, accel_group,
+00541                               GDK_A, 0,
+00542                               GTK_ACCEL_VISIBLE);
+00543 
+00544   asterisco = gtk_button_new_with_label (_(<font 
class="stringliteral">"*\n+ ]"</font>));
+00545   gtk_widget_ref (asterisco);
+00546   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"asterisco"</font>, asterisco,
+00547                             (GtkDestroyNotify) gtk_widget_unref);
+00548   gtk_widget_show (asterisco);
+00549   gtk_fixed_put (GTK_FIXED (fixed9), asterisco, 520, 64);
+00550   gtk_widget_set_uposition (asterisco, 520, 64);
+00551   gtk_widget_set_usize (asterisco, 35, 35);
+00552 
+00553   circunflej = gtk_button_new_with_label (_(<font 
class="stringliteral">"^\n` ["</font>));
+00554   gtk_widget_ref (circunflej);
+00555   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"circunflej"</font>, circunflej,
+00556                             (GtkDestroyNotify) gtk_widget_unref);
+00557   gtk_widget_show (circunflej);
+00558   gtk_fixed_put (GTK_FIXED (fixed9), circunflej, 480, 64);
+00559   gtk_widget_set_uposition (circunflej, 480, 64);
+00560   gtk_widget_set_usize (circunflej, 35, 35);
+00561 
+00562   bp = gtk_button_new_with_label (_(<font 
class="stringliteral">"P\n"</font>));
+00563   gtk_widget_ref (bp);
+00564   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bp"</font>, bp,
+00565                             (GtkDestroyNotify) gtk_widget_unref);
+00566   gtk_widget_show (bp);
+00567   gtk_fixed_put (GTK_FIXED (fixed9), bp, 440, 64);
+00568   gtk_widget_set_uposition (bp, 440, 64);
+00569   gtk_widget_set_usize (bp, 35, 35);
+00570 
+00571   bo = gtk_button_new_with_label (_(<font 
class="stringliteral">"O\n"</font>));
+00572   gtk_widget_ref (bo);
+00573   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bo"</font>, bo,
+00574                             (GtkDestroyNotify) gtk_widget_unref);
+00575   gtk_widget_show (bo);
+00576   gtk_fixed_put (GTK_FIXED (fixed9), bo, 400, 64);
+00577   gtk_widget_set_uposition (bo, 400, 64);
+00578   gtk_widget_set_usize (bo, 35, 35);
+00579 
+00580   bi = gtk_button_new_with_label (_(<font 
class="stringliteral">"I\n"</font>));
+00581   gtk_widget_ref (bi);
+00582   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bi"</font>, bi,
+00583                             (GtkDestroyNotify) gtk_widget_unref);
+00584   gtk_widget_show (bi);
+00585   gtk_fixed_put (GTK_FIXED (fixed9), bi, 360, 64);
+00586   gtk_widget_set_uposition (bi, 360, 64);
+00587   gtk_widget_set_usize (bi, 35, 35);
+00588 
+00589   bu = gtk_button_new_with_label (_(<font 
class="stringliteral">"U\n"</font>));
+00590   gtk_widget_ref (bu);
+00591   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bu"</font>, bu,
+00592                             (GtkDestroyNotify) gtk_widget_unref);
+00593   gtk_widget_show (bu);
+00594   gtk_fixed_put (GTK_FIXED (fixed9), bu, 320, 64);
+00595   gtk_widget_set_uposition (bu, 320, 64);
+00596   gtk_widget_set_usize (bu, 35, 35);
+00597 
+00598   by = gtk_button_new_with_label (_(<font 
class="stringliteral">"Y\n"</font>));
+00599   gtk_widget_ref (by);
+00600   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"by"</font>, by,
+00601                             (GtkDestroyNotify) gtk_widget_unref);
+00602   gtk_widget_show (by);
+00603   gtk_fixed_put (GTK_FIXED (fixed9), by, 280, 64);
+00604   gtk_widget_set_uposition (by, 280, 64);
+00605   gtk_widget_set_usize (by, 35, 35);
+00606 
+00607   bt = gtk_button_new_with_label (_(<font 
class="stringliteral">"T\n"</font>));
+00608   gtk_widget_ref (bt);
+00609   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bt"</font>, bt,
+00610                             (GtkDestroyNotify) gtk_widget_unref);
+00611   gtk_widget_show (bt);
+00612   gtk_fixed_put (GTK_FIXED (fixed9), bt, 240, 64);
+00613   gtk_widget_set_uposition (bt, 240, 64);
+00614   gtk_widget_set_usize (bt, 35, 35);
+00615 
+00616   br = gtk_button_new_with_label (_(<font 
class="stringliteral">"R\n"</font>));
+00617   gtk_widget_ref (br);
+00618   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"br"</font>, br,
+00619                             (GtkDestroyNotify) gtk_widget_unref);
+00620   gtk_widget_show (br);
+00621   gtk_fixed_put (GTK_FIXED (fixed9), br, 200, 64);
+00622   gtk_widget_set_uposition (br, 200, 64);
+00623   gtk_widget_set_usize (br, 35, 35);
+00624 
+00625   be = gtk_button_new_with_label (_(<font 
class="stringliteral">"E\n"</font>));
+00626   gtk_widget_ref (be);
+00627   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"be"</font>, be,
+00628                             (GtkDestroyNotify) gtk_widget_unref);
+00629   gtk_widget_show (be);
+00630   gtk_fixed_put (GTK_FIXED (fixed9), be, 160, 64);
+00631   gtk_widget_set_uposition (be, 160, 64);
+00632   gtk_widget_set_usize (be, 35, 35);
+00633 
+00634   bw = gtk_button_new_with_label (_(<font 
class="stringliteral">"W\n"</font>));
+00635   gtk_widget_ref (bw);
+00636   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bw"</font>, bw,
+00637                             (GtkDestroyNotify) gtk_widget_unref);
+00638   gtk_widget_show (bw);
+00639   gtk_fixed_put (GTK_FIXED (fixed9), bw, 120, 64);
+00640   gtk_widget_set_uposition (bw, 120, 64);
+00641   gtk_widget_set_usize (bw, 35, 35);
+00642 
+00643   bq = gtk_button_new_with_label (_(<font 
class="stringliteral">"Q\n"</font>));
+00644   gtk_widget_ref (bq);
+00645   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bq"</font>, bq,
+00646                             (GtkDestroyNotify) gtk_widget_unref);
+00647   gtk_widget_show (bq);
+00648   gtk_fixed_put (GTK_FIXED (fixed9), bq, 80, 64);
+00649   gtk_widget_set_uposition (bq, 80, 64);
+00650   gtk_widget_set_usize (bq, 35, 35);
+00651 
+00652   button189 = gtk_button_new_with_label (_(<font 
class="stringliteral">"¿\n¡"</font>));
+00653   gtk_widget_ref (button189);
+00654   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button189"</font>, button189,
+00655                             (GtkDestroyNotify) gtk_widget_unref);
+00656   gtk_widget_show (button189);
+00657   gtk_fixed_put (GTK_FIXED (fixed9), button189, 496, 24);
+00658   gtk_widget_set_uposition (button189, 496, 24);
+00659   gtk_widget_set_usize (button189, 35, 35);
+00660 
+00661   button190 = gtk_button_new_with_label (_(<font 
class="stringliteral">"?\n'"</font>));
+00662   gtk_widget_ref (button190);
+00663   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button190"</font>, button190,
+00664                             (GtkDestroyNotify) gtk_widget_unref);
+00665   gtk_widget_show (button190);
+00666   gtk_fixed_put (GTK_FIXED (fixed9), button190, 456, 24);
+00667   gtk_widget_set_uposition (button190, 456, 24);
+00668   gtk_widget_set_usize (button190, 35, 35);
+00669 
+00670   button191 = gtk_button_new_with_label (_(<font 
class="stringliteral">"=\n0"</font>));
+00671   gtk_widget_ref (button191);
+00672   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button191"</font>, button191,
+00673                             (GtkDestroyNotify) gtk_widget_unref);
+00674   gtk_widget_show (button191);
+00675   gtk_fixed_put (GTK_FIXED (fixed9), button191, 416, 24);
+00676   gtk_widget_set_uposition (button191, 416, 24);
+00677   gtk_widget_set_usize (button191, 35, 35);
+00678 
+00679   button192 = gtk_button_new_with_label (_(<font 
class="stringliteral">")\n9"</font>));
+00680   gtk_widget_ref (button192);
+00681   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button192"</font>, button192,
+00682                             (GtkDestroyNotify) gtk_widget_unref);
+00683   gtk_widget_show (button192);
+00684   gtk_fixed_put (GTK_FIXED (fixed9), button192, 376, 24);
+00685   gtk_widget_set_uposition (button192, 376, 24);
+00686   gtk_widget_set_usize (button192, 35, 35);
+00687 
+00688   button193 = gtk_button_new_with_label (_(<font 
class="stringliteral">"!\n1 |"</font>));
+00689   gtk_widget_ref (button193);
+00690   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button193"</font>, button193,
+00691                             (GtkDestroyNotify) gtk_widget_unref);
+00692   gtk_widget_show (button193);
+00693   gtk_fixed_put (GTK_FIXED (fixed9), button193, 56, 24);
+00694   gtk_widget_set_uposition (button193, 56, 24);
+00695   gtk_widget_set_usize (button193, 35, 35);
+00696 
+00697   button194 = gtk_button_new_with_label (_(<font 
class="stringliteral">"/\n7"</font>));
+00698   gtk_widget_ref (button194);
+00699   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button194"</font>, button194,
+00700                             (GtkDestroyNotify) gtk_widget_unref);
+00701   gtk_widget_show (button194);
+00702   gtk_fixed_put (GTK_FIXED (fixed9), button194, 296, 24);
+00703   gtk_widget_set_uposition (button194, 296, 24);
+00704   gtk_widget_set_usize (button194, 35, 35);
+00705 
+00706   button195 = gtk_button_new_with_label (_(<font 
class="stringliteral">"&amp;\n6 ¬"</font>));
+00707   gtk_widget_ref (button195);
+00708   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button195"</font>, button195,
+00709                             (GtkDestroyNotify) gtk_widget_unref);
+00710   gtk_widget_show (button195);
+00711   gtk_fixed_put (GTK_FIXED (fixed9), button195, 256, 24);
+00712   gtk_widget_set_uposition (button195, 256, 24);
+00713   gtk_widget_set_usize (button195, 35, 35);
+00714 
+00715   button196 = gtk_button_new_with_label (_(<font 
class="stringliteral">"%\n5"</font>));
+00716   gtk_widget_ref (button196);
+00717   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button196"</font>, button196,
+00718                             (GtkDestroyNotify) gtk_widget_unref);
+00719   gtk_widget_show (button196);
+00720   gtk_fixed_put (GTK_FIXED (fixed9), button196, 216, 24);
+00721   gtk_widget_set_uposition (button196, 216, 24);
+00722   gtk_widget_set_usize (button196, 35, 35);
+00723 
+00724   button197 = gtk_button_new_with_label (_(<font 
class="stringliteral">"$\n4"</font>));
+00725   gtk_widget_ref (button197);
+00726   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button197"</font>, button197,
+00727                             (GtkDestroyNotify) gtk_widget_unref);
+00728   gtk_widget_show (button197);
+00729   gtk_fixed_put (GTK_FIXED (fixed9), button197, 176, 24);
+00730   gtk_widget_set_uposition (button197, 176, 24);
+00731   gtk_widget_set_usize (button197, 35, 35);
+00732 
+00733   button198 = gtk_button_new_with_label (_(<font 
class="stringliteral">"·\n3 #"</font>));
+00734   gtk_widget_ref (button198);
+00735   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button198"</font>, button198,
+00736                             (GtkDestroyNotify) gtk_widget_unref);
+00737   gtk_widget_show (button198);
+00738   gtk_fixed_put (GTK_FIXED (fixed9), button198, 136, 24);
+00739   gtk_widget_set_uposition (button198, 136, 24);
+00740   gtk_widget_set_usize (button198, 35, 35);
+00741 
+00742   button199 = gtk_button_new_with_label (_(<font 
class="stringliteral">"\"\n2 @"</font>));
+00743   gtk_widget_ref (button199);
+00744   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button199"</font>, button199,
+00745                             (GtkDestroyNotify) gtk_widget_unref);
+00746   gtk_widget_show (button199);
+00747   gtk_fixed_put (GTK_FIXED (fixed9), button199, 96, 24);
+00748   gtk_widget_set_uposition (button199, 96, 24);
+00749   gtk_widget_set_usize (button199, 35, 35);
+00750 
+00751   button200 = gtk_button_new_with_label (_(<font 
class="stringliteral">"(\n8"</font>));
+00752   gtk_widget_ref (button200);
+00753   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button200"</font>, button200,
+00754                             (GtkDestroyNotify) gtk_widget_unref);
+00755   gtk_widget_show (button200);
+00756   gtk_fixed_put (GTK_FIXED (fixed9), button200, 336, 24);
+00757   gtk_widget_set_uposition (button200, 336, 24);
+00758   gtk_widget_set_usize (button200, 35, 35);
+00759 
+00760   altgr = gtk_button_new_with_label (_(<font class="stringliteral">"Alt 
Gr"</font>));
+00761   gtk_widget_ref (altgr);
+00762   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"altgr"</font>, altgr,
+00763                             (GtkDestroyNotify) gtk_widget_unref);
+00764   gtk_widget_show (altgr);
+00765   gtk_fixed_put (GTK_FIXED (fixed9), altgr, 496, 184);
+00766   gtk_widget_set_uposition (altgr, 496, 184);
+00767   gtk_widget_set_usize (altgr, 62, 35);
+00768 
+00769   alt = gtk_button_new_with_label (_(<font 
class="stringliteral">"Alt"</font>));
+00770   gtk_widget_ref (alt);
+00771   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"alt"</font>, alt,
+00772                             (GtkDestroyNotify) gtk_widget_unref);
+00773   gtk_widget_show (alt);
+00774   gtk_fixed_put (GTK_FIXED (fixed9), alt, 80, 184);
+00775   gtk_widget_set_uposition (alt, 80, 184);
+00776   gtk_widget_set_usize (alt, 62, 35);
+00777 
+00778   button203 = gtk_button_new_with_label (_(<font 
class="stringliteral">"ª\nº \\"</font>));
+00779   gtk_widget_ref (button203);
+00780   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button203"</font>, button203,
+00781                             (GtkDestroyNotify) gtk_widget_unref);
+00782   gtk_widget_show (button203);
+00783   gtk_fixed_put (GTK_FIXED (fixed9), button203, 16, 24);
+00784   gtk_widget_set_uposition (button203, 16, 24);
+00785   gtk_widget_set_usize (button203, 35, 35);
+00786 
+00787   controldcha = gtk_button_new_with_label (_(<font 
class="stringliteral">"Control"</font>));
+00788   gtk_widget_ref (controldcha);
+00789   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"controldcha"</font>, controldcha,
+00790                             (GtkDestroyNotify) gtk_widget_unref);
+00791   gtk_widget_show (controldcha);
+00792   gtk_fixed_put (GTK_FIXED (fixed9), controldcha, 560, 184);
+00793   gtk_widget_set_uposition (controldcha, 560, 184);
+00794   gtk_widget_set_usize (controldcha, 62, 35);
+00795 
+00796   controlizda = gtk_button_new_with_label (_(<font 
class="stringliteral">"Control"</font>));
+00797   gtk_widget_ref (controlizda);
+00798   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"controlizda"</font>, controlizda,
+00799                             (GtkDestroyNotify) gtk_widget_unref);
+00800   gtk_widget_show (controlizda);
+00801   gtk_fixed_put (GTK_FIXED (fixed9), controlizda, 16, 184);
+00802   gtk_widget_set_uposition (controlizda, 16, 184);
+00803   gtk_widget_set_usize (controlizda, 62, 35);
+00804 
+00805   espacio = gtk_button_new_with_label (<font 
class="stringliteral">""</font>);
+00806   gtk_widget_ref (espacio);
+00807   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"espacio"</font>, espacio,
+00808                             (GtkDestroyNotify) gtk_widget_unref);
+00809   gtk_widget_show (espacio);
+00810   gtk_fixed_put (GTK_FIXED (fixed9), espacio, 168, 184);
+00811   gtk_widget_set_uposition (espacio, 168, 184);
+00812   gtk_widget_set_usize (espacio, 297, 35);
+00813 
+00814   frame1 = gtk_frame_new (_(<font class="stringliteral">"Ayuda"</font>));
+00815   gtk_widget_ref (frame1);
+00816   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"frame1"</font>, frame1,
+00817                             (GtkDestroyNotify) gtk_widget_unref);
+00818   gtk_widget_show (frame1);
+00819   gtk_fixed_put (GTK_FIXED (fixed9), frame1, 632, 24);
+00820   gtk_widget_set_uposition (frame1, 632, 24);
+00821   gtk_widget_set_usize (frame1, 99, 195);
+00822   gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
+00823 
+00824   fixed10 = gtk_fixed_new ();
+00825   gtk_widget_ref (fixed10);
+00826   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"fixed10"</font>, fixed10,
+00827                             (GtkDestroyNotify) gtk_widget_unref);
+00828   gtk_widget_show (fixed10);
+00829   gtk_container_add (GTK_CONTAINER (frame1), fixed10);
+00830 
+00831   about = gtk_button_new_with_label (_(<font 
class="stringliteral">"Sobre..."</font>));
+00832   gtk_widget_ref (about);
+00833   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"about"</font>, about,
+00834                             (GtkDestroyNotify) gtk_widget_unref);
+00835   gtk_widget_show (about);
+00836   gtk_fixed_put (GTK_FIXED (fixed10), about, 16, 16);
+00837   gtk_widget_set_uposition (about, 16, 16);
+00838   gtk_widget_set_usize (about, 61, 22);
+00839 
+00840   ayuda = gtk_button_new_with_label (_(<font 
class="stringliteral">"Ayuda"</font>));
+00841   gtk_widget_ref (ayuda);
+00842   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda"</font>, ayuda,
+00843                             (GtkDestroyNotify) gtk_widget_unref);
+00844   gtk_widget_show (ayuda);
+00845   gtk_fixed_put (GTK_FIXED (fixed10), ayuda, 16, 48);
+00846   gtk_widget_set_uposition (ayuda, 16, 48);
+00847   gtk_widget_set_usize (ayuda, 61, 22);
+00848 
+00849   cerrar = gtk_button_new_with_label (_(<font 
class="stringliteral">"cerrar"</font>));
+00850   gtk_widget_ref (cerrar);
+00851   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"cerrar"</font>, cerrar,
+00852                             (GtkDestroyNotify) gtk_widget_unref);
+00853   gtk_widget_show (cerrar);
+00854   gtk_fixed_put (GTK_FIXED (fixed10), cerrar, 16, 136);
+00855   gtk_widget_set_uposition (cerrar, 16, 136);
+00856   gtk_widget_set_usize (cerrar, 61, 22);
+00857 
+00858   label1 = gtk_label_new (_(<font class="stringliteral">"  Equipo\n 
NEMESyS\n    "</font>));
+00859   gtk_widget_ref (label1);
+00860   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"label1"</font>, label1,
+00861                             (GtkDestroyNotify) gtk_widget_unref);
+00862   gtk_widget_show (label1);
+00863   gtk_fixed_put (GTK_FIXED (fixed10), label1, 8, 72);
+00864   gtk_widget_set_uposition (label1, 8, 72);
+00865   gtk_widget_set_usize (label1, 71, 56);
+00866   gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE);
+00867 
+00868   frame3 = gtk_frame_new (_(<font 
class="stringliteral">"Lección"</font>));
+00869   gtk_widget_ref (frame3);
+00870   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"frame3"</font>, frame3,
+00871                             (GtkDestroyNotify) gtk_widget_unref);
+00872   gtk_widget_show (frame3);
+00873   gtk_fixed_put (GTK_FIXED (fixed9), frame3, 738, 183);
+00874   gtk_widget_set_uposition (frame3, 738, 183);
+00875   gtk_widget_set_usize (frame3, 125, 36);
+00876 
+00877   hbox1 = gtk_hbox_new (FALSE, 0);
+00878   gtk_widget_ref (hbox1);
+00879   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"hbox1"</font>, hbox1,
+00880                             (GtkDestroyNotify) gtk_widget_unref);
+00881   gtk_widget_show (hbox1);
+00882   gtk_container_add (GTK_CONTAINER (frame3), hbox1);
+00883 
+00884   lecant = gtk_button_new_with_label (_(<font 
class="stringliteral">"Anterior  "</font>));
+00885   gtk_widget_ref (lecant);
+00886   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"lecant"</font>, lecant,
+00887                             (GtkDestroyNotify) gtk_widget_unref);
+00888   gtk_widget_show (lecant);
+00889   gtk_box_pack_start (GTK_BOX (hbox1), lecant, FALSE, FALSE, 0);
+00890   gtk_tooltips_set_tip (tooltips, lecant, _(<font 
class="stringliteral">"No disponible en esta versión"</font>), NULL);
+00891 
+00892   lecsig = gtk_button_new_with_label (_(<font 
class="stringliteral">"Siguente "</font>));
+00893   gtk_widget_ref (lecsig);
+00894   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"lecsig"</font>, lecsig,
+00895                             (GtkDestroyNotify) gtk_widget_unref);
+00896   gtk_widget_show (lecsig);
+00897   gtk_box_pack_start (GTK_BOX (hbox1), lecsig, FALSE, FALSE, 0);
+00898   gtk_tooltips_set_tip (tooltips, lecsig, _(<font 
class="stringliteral">"No disponible en esta versión"</font>), NULL);
+00899 
+00900   pixmap9 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window1, <font class="stringliteral">"mecatux.xpm"</font>);
+00901   gtk_widget_ref (pixmap9);
+00902   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"pixmap9"</font>, pixmap9,
+00903                             (GtkDestroyNotify) gtk_widget_unref);
+00904   gtk_widget_show (pixmap9);
+00905   gtk_fixed_put (GTK_FIXED (fixed9), pixmap9, 760, 24);
+00906   gtk_widget_set_uposition (pixmap9, 760, 24);
+00907   gtk_widget_set_usize (pixmap9, 80, 88);
+00908 
+00909   label14 = gtk_label_new (_(<font class="stringliteral">"En esta 
zona\nirán las ventanas\nde estadísticas."</font>));
+00910   gtk_widget_ref (label14);
+00911   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"label14"</font>, label14,
+00912                             (GtkDestroyNotify) gtk_widget_unref);
+00913   gtk_widget_show (label14);
+00914   gtk_fixed_put (GTK_FIXED (fixed9), label14, 752, 104);
+00915   gtk_widget_set_uposition (label14, 752, 104);
+00916   gtk_widget_set_usize (label14, 104, 64);
+00917   gtk_label_set_justify (GTK_LABEL (label14), GTK_JUSTIFY_LEFT);
+00918 
+00919   hseparator1 = gtk_hseparator_new ();
+00920   gtk_widget_ref (hseparator1);
+00921   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"hseparator1"</font>, hseparator1,
+00922                             (GtkDestroyNotify) gtk_widget_unref);
+00923   gtk_widget_show (hseparator1);
+00924   gtk_fixed_put (GTK_FIXED (fixed9), hseparator1, 24, 8);
+00925   gtk_widget_set_uposition (hseparator1, 24, 8);
+00926   gtk_widget_set_usize (hseparator1, 836, 16);
+00927 
+00928   gtk_signal_connect (GTK_OBJECT (window1), <font 
class="stringliteral">"key_press_event"</font>,
+00929                       GTK_SIGNAL_FUNC (on_window1_key_press_event),
+00930                       NULL);
+00931   gtk_signal_connect (GTK_OBJECT (abrir_lecci_n1), <font 
class="stringliteral">"activate"</font>,
+00932                       GTK_SIGNAL_FUNC (on_abrir_lecci_n1_activate),
+00933                       NULL);
+00934   gtk_signal_connect (GTK_OBJECT (salir1), <font 
class="stringliteral">"activate"</font>,
+00935                       GTK_SIGNAL_FUNC (on_salir1_activate),
+00936                       NULL);
+00937   gtk_signal_connect (GTK_OBJECT (editor_de_lecciones1), <font 
class="stringliteral">"activate"</font>,
+00938                       GTK_SIGNAL_FUNC (on_editor_de_lecciones1_activate),
+00939                       NULL);
+00940   gtk_signal_connect (GTK_OBJECT (sobre_mecagtk1), <font 
class="stringliteral">"activate"</font>,
+00941                       GTK_SIGNAL_FUNC (on_sobre_mecagtk1_activate),
+00942                       NULL);
+00943   gtk_signal_connect (GTK_OBJECT (ayuda2), <font 
class="stringliteral">"activate"</font>,
+00944                       GTK_SIGNAL_FUNC (on_ayuda2_activate),
+00945                       NULL);
+00946   gtk_signal_connect (GTK_OBJECT (about), <font 
class="stringliteral">"clicked"</font>,
+00947                       GTK_SIGNAL_FUNC (on_about_clicked),
+00948                       NULL);
+00949   gtk_signal_connect (GTK_OBJECT (ayuda), <font 
class="stringliteral">"clicked"</font>,
+00950                       GTK_SIGNAL_FUNC (on_ayuda_clicked),
+00951                       NULL);
+00952   gtk_signal_connect (GTK_OBJECT (cerrar), <font 
class="stringliteral">"clicked"</font>,
+00953                       GTK_SIGNAL_FUNC (on_cerrar_clicked),
+00954                       NULL);
+00955   gtk_signal_connect (GTK_OBJECT (lecant), <font 
class="stringliteral">"clicked"</font>,
+00956                       GTK_SIGNAL_FUNC (on_lecant_clicked),
+00957                       NULL);
+00958   gtk_signal_connect (GTK_OBJECT (lecsig), <font 
class="stringliteral">"clicked"</font>,
+00959                       GTK_SIGNAL_FUNC (on_lecsig_clicked),
+00960                       NULL);
+00961 
+00962   gtk_object_set_data (GTK_OBJECT (window1), <font 
class="stringliteral">"tooltips"</font>, tooltips);
+00963 
+00964   gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);
+00965 
+00966   <font class="keywordflow">return</font> window1;
+00967 }
+00968 
+00969 GtkWidget*
+<a name="l00970"></a><a class="code" href="interfaz_c.html#a1">00970</a> <a 
class="code" href="interfaz_c.html#a1">create_window3</a> (<font 
class="keywordtype">void</font>)<font class="keyword">
+</font>00971 <font class="keyword"></font>{
+00972   GtkWidget *window3;
+00973   GtkWidget *pixmap4;
+00974 
+00975   window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+00976   gtk_object_set_data (GTK_OBJECT (window3), <font 
class="stringliteral">"window3"</font>, window3);
+00977   gtk_window_set_title (GTK_WINDOW (window3), _(<font 
class="stringliteral">"Bienvenidos a MecaGTK"</font>));
+00978   gtk_window_set_position (GTK_WINDOW (window3), GTK_WIN_POS_CENTER);
+00979   gtk_window_set_modal (GTK_WINDOW (window3), TRUE);
+00980 
+00981   pixmap4 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window3, <font class="stringliteral">"mecalogo2.xpmwq"</font>);
+00982   gtk_widget_ref (pixmap4);
+00983   gtk_object_set_data_full (GTK_OBJECT (window3), <font 
class="stringliteral">"pixmap4"</font>, pixmap4,
+00984                             (GtkDestroyNotify) gtk_widget_unref);
+00985   gtk_widget_show (pixmap4);
+00986   gtk_container_add (GTK_CONTAINER (window3), pixmap4);
+00987 
+00988   gtk_signal_connect (GTK_OBJECT (window3), <font 
class="stringliteral">"enter_notify_event"</font>,
+00989                       GTK_SIGNAL_FUNC (on_window3_enter_notify_event),
+00990                       NULL);
+00991 
+00992   <font class="keywordflow">return</font> window3;
+00993 }
+00994 
+00995 GtkWidget*
+<a name="l00996"></a><a class="code" href="interfaz_c.html#a2">00996</a> <a 
class="code" href="interfaz_c.html#a2">create_window5</a> (<font 
class="keywordtype">void</font>)<font class="keyword">
+</font>00997 <font class="keyword"></font>{
+00998   GtkWidget *window5;
+00999   GtkWidget *fixed13;
+01000   GtkWidget *notebook1;
+01001   GtkWidget *fixed14;
+01002   GtkWidget *label9;
+01003   GtkWidget *label12;
+01004   GtkWidget *label26;
+01005   GtkWidget *label6;
+01006   GtkWidget *scrolledwindow4;
+01007   GtkWidget *text3;
+01008   GtkWidget *label7;
+01009   GtkWidget *scrolledwindow5;
+01010   GtkWidget *text4;
+01011   GtkWidget *label8;
+01012   GtkWidget *fixed15;
+01013   GtkWidget *label11;
+01014   GtkWidget *label13;
+01015   GtkWidget *label10;
+01016   GtkWidget *aboutcerrar;
+01017   GtkWidget *pixmap10;
+01018   GtkWidget *pixmap7;
+01019 
+01020   window5 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+01021   gtk_object_set_data (GTK_OBJECT (window5), <font 
class="stringliteral">"window5"</font>, window5);
+01022   gtk_widget_set_usize (window5, 521, 440);
+01023   gtk_window_set_title (GTK_WINDOW (window5), _(<font 
class="stringliteral">"Acerca de MecaGTK"</font>));
+01024 
+01025   fixed13 = gtk_fixed_new ();
+01026   gtk_widget_ref (fixed13);
+01027   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"fixed13"</font>, fixed13,
+01028                             (GtkDestroyNotify) gtk_widget_unref);
+01029   gtk_widget_show (fixed13);
+01030   gtk_container_add (GTK_CONTAINER (window5), fixed13);
+01031 
+01032   notebook1 = gtk_notebook_new ();
+01033   gtk_widget_ref (notebook1);
+01034   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"notebook1"</font>, notebook1,
+01035                             (GtkDestroyNotify) gtk_widget_unref);
+01036   gtk_widget_show (notebook1);
+01037   gtk_fixed_put (GTK_FIXED (fixed13), notebook1, 8, 80);
+01038   gtk_widget_set_uposition (notebook1, 8, 80);
+01039   gtk_widget_set_usize (notebook1, 504, 288);
+01040   gtk_container_set_border_width (GTK_CONTAINER (notebook1), 2);
+01041 
+01042   fixed14 = gtk_fixed_new ();
+01043   gtk_widget_ref (fixed14);
+01044   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"fixed14"</font>, fixed14,
+01045                             (GtkDestroyNotify) gtk_widget_unref);
+01046   gtk_widget_show (fixed14);
+01047   gtk_container_add (GTK_CONTAINER (notebook1), fixed14);
+01048 
+01049   label9 = gtk_label_new (_(<font class="stringliteral">"Este programa 
está en fase de desarrollo.\n\nSi desea hacernos alguna sugerencia, contribuir 
de alguna forma o\nsimplemente comunicarnos su opinión sobre el programa, por 
favor\nno dude en ponerse en contacto con nosotros:"</font>));
+01050   gtk_widget_ref (label9);
+01051   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label9"</font>, label9,
+01052                             (GtkDestroyNotify) gtk_widget_unref);
+01053   gtk_widget_show (label9);
+01054   gtk_fixed_put (GTK_FIXED (fixed14), label9, 24, 24);
+01055   gtk_widget_set_uposition (label9, 24, 24);
+01056   gtk_widget_set_usize (label9, 424, 112);
+01057   gtk_label_set_justify (GTK_LABEL (label9), GTK_JUSTIFY_LEFT);
+01058 
+01059   label12 = gtk_label_new (_(<font 
class="stringliteral">"address@hidden"</font>));
+01060   gtk_widget_ref (label12);
+01061   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label12"</font>, label12,
+01062                             (GtkDestroyNotify) gtk_widget_unref);
+01063   gtk_widget_show (label12);
+01064   gtk_fixed_put (GTK_FIXED (fixed14), label12, 176, 144);
+01065   gtk_widget_set_uposition (label12, 176, 144);
+01066   gtk_widget_set_usize (label12, 126, 30);
+01067 
+01068   label26 = gtk_label_new (_(<font 
class="stringliteral">"http://www.es.gnu.org/Proyectos/Mecagtk";</font>));
+01069   gtk_widget_ref (label26);
+01070   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label26"</font>, label26,
+01071                             (GtkDestroyNotify) gtk_widget_unref);
+01072   gtk_widget_show (label26);
+01073   gtk_fixed_put (GTK_FIXED (fixed14), label26, 112, 168);
+01074   gtk_widget_set_uposition (label26, 112, 168);
+01075   gtk_widget_set_usize (label26, 272, 16);
+01076 
+01077   label6 = gtk_label_new (_(<font class="stringliteral">"Acerca 
de"</font>));
+01078   gtk_widget_ref (label6);
+01079   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label6"</font>, label6,
+01080                             (GtkDestroyNotify) gtk_widget_unref);
+01081   gtk_widget_show (label6);
+01082   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label6);
+01083 
+01084   scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL);
+01085   gtk_widget_ref (scrolledwindow4);
+01086   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"scrolledwindow4"</font>, scrolledwindow4,
+01087                             (GtkDestroyNotify) gtk_widget_unref);
+01088   gtk_widget_show (scrolledwindow4);
+01089   gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow4);
+01090   gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow4), 4);
+01091   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow4), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+01092 
+01093   text3 = gtk_text_new (NULL, NULL);
+01094   gtk_widget_ref (text3);
+01095   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"text3"</font>, text3,
+01096                             (GtkDestroyNotify) gtk_widget_unref);
+01097   gtk_widget_show (text3);
+01098   gtk_container_add (GTK_CONTAINER (scrolledwindow4), text3);
+01099   gtk_text_insert (GTK_TEXT (text3), NULL, NULL, NULL,
+01100                    _(<font class="stringliteral">"\nEste programa es 
fruto del esfuerzo combinado y desinteresado de varias\npersonas, sin cuya 
colaboración jamás hubiera sido posible su desarrollo.\n\nTodo lo bueno que 
pueda tener este programa se debe a:\n\t\n\t* Manuel Álvarez Cea : Verificó la 
portabilidad a otras plataformas en \n        sus ratos libres de cuartel.\n\t* 
David Rodríguez Sánchez : Sugirió cambiar el método de carga\n\tde las 
lecciones.\n        * A \"lain\" por encargarse del port a otros sistemas y por 
su apología del \n        software multiplataforma... ;o)\n\n\nTodos ellos son 
copropietarios del copyrigth (©) de este programa. (Según los\n términos de 
licencia GNU)\n\nUn agradecimiento especial a Simon Baldwin y el equipo de 
desarrollo de \nGNU Typist, programa de una calidad impecable y que nos ha 
servido de \ninspiación a la hora de desarrollar este programa. Somos a la vez 
vuestros\ndeudores y tal vez algún día vuestros competidores... ;^)\n\nTambién 
me gustaría expresar mi agradecimiento a mis hermanas. De ellas\nsurgió la idea 
de crear un programa de este tipo.\n\n\t\t\t\tLuis U.Rodríguez 
Paniagua\n\t"</font>), 1061);
+01101 
+01102   label7 = gtk_label_new (_(<font 
class="stringliteral">"Colaboradores"</font>));
+01103   gtk_widget_ref (label7);
+01104   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label7"</font>, label7,
+01105                             (GtkDestroyNotify) gtk_widget_unref);
+01106   gtk_widget_show (label7);
+01107   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label7);
+01108 
+01109   scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL);
+01110   gtk_widget_ref (scrolledwindow5);
+01111   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"scrolledwindow5"</font>, scrolledwindow5,
+01112                             (GtkDestroyNotify) gtk_widget_unref);
+01113   gtk_widget_show (scrolledwindow5);
+01114   gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow5);
+01115   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow5), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+01116 
+01117   text4 = gtk_text_new (NULL, NULL);
+01118   gtk_widget_ref (text4);
+01119   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"text4"</font>, text4,
+01120                             (GtkDestroyNotify) gtk_widget_unref);
+01121   gtk_widget_show (text4);
+01122   gtk_container_add (GTK_CONTAINER (scrolledwindow5), text4);
+01123   gtk_text_insert (GTK_TEXT (text4), NULL, NULL, NULL,
+01124                    _(<font class="stringliteral">"\nEste programa es 
software libre; puede distribuirlo y/o modificarlo bajo los\ntérminos de la 
Licencia Pública General GNU GPL publicada por la\nFree Software Foundation; 
para la versión 2 de la licencia, o ( a su gusto ) \ncualquier versión 
posterior.\n\nEl programa es distribuido con la esperanza de que sea útil, pero 
SIN\nNINGUNA GARANTÍA; incluso sin la garantía de COMERCIABILIDAD o de\nSERVIR 
PARA UN PROPÓSITO PARTICULAR. Para más detalles consulte\nel fichero 
LICENCIA.txt que se adjunta con esta distribución.\n\nDebería haber recibido 
una copia de esta Licencia Pública General GNU\njunto con este programa en el 
fichero arriba mencionado. Si no ha sido\nasí, escriba a :\n Free Software 
Foundation Inc.\n 675 Mass Ave, Cambridge, MA 02139, USA\n"</font>), 743);
+01125 
+01126   label8 = gtk_label_new (_(<font 
class="stringliteral">"Licencia"</font>));
+01127   gtk_widget_ref (label8);
+01128   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label8"</font>, label8,
+01129                             (GtkDestroyNotify) gtk_widget_unref);
+01130   gtk_widget_show (label8);
+01131   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label8);
+01132 
+01133   fixed15 = gtk_fixed_new ();
+01134   gtk_widget_ref (fixed15);
+01135   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"fixed15"</font>, fixed15,
+01136                             (GtkDestroyNotify) gtk_widget_unref);
+01137   gtk_widget_show (fixed15);
+01138   gtk_container_add (GTK_CONTAINER (notebook1), fixed15);
+01139 
+01140   label11 = gtk_label_new (_(<font class="stringliteral">"Me gustaría 
expresar mi más sincero agradecimiento  a la \nFSF/GNU España por las 
facilidades prestadas. Jamás \nhubiese sido posible un desarrollo decente sin 
su apoyo\ntécnico y humano. Especialmente quiero expresar mi 
público\nagradecimiento a Nacho (address@hidden) por su ilimitada\npaciencia 
para con un desarrollador novato como yo.\nSi estáis interesados en desarrollar 
software bajo términos GNU, \nno dudéis en poneros en contacto con 
ellos:"</font>));
+01141   gtk_widget_ref (label11);
+01142   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label11"</font>, label11,
+01143                             (GtkDestroyNotify) gtk_widget_unref);
+01144   gtk_widget_show (label11);
+01145   gtk_fixed_put (GTK_FIXED (fixed15), label11, 32, 8);
+01146   gtk_widget_set_uposition (label11, 32, 8);
+01147   gtk_widget_set_usize (label11, 416, 144);
+01148   gtk_label_set_justify (GTK_LABEL (label11), GTK_JUSTIFY_FILL);
+01149 
+01150   label13 = gtk_label_new (_(<font 
class="stringliteral">"http://www.es.gnu.org/";</font>));
+01151   gtk_widget_ref (label13);
+01152   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label13"</font>, label13,
+01153                             (GtkDestroyNotify) gtk_widget_unref);
+01154   gtk_widget_show (label13);
+01155   gtk_fixed_put (GTK_FIXED (fixed15), label13, 200, 168);
+01156   gtk_widget_set_uposition (label13, 200, 168);
+01157   gtk_widget_set_usize (label13, 141, 26);
+01158 
+01159   label10 = gtk_label_new (_(<font class="stringliteral">"FSF/GNU 
España"</font>));
+01160   gtk_widget_ref (label10);
+01161   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label10"</font>, label10,
+01162                             (GtkDestroyNotify) gtk_widget_unref);
+01163   gtk_widget_show (label10);
+01164   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), label10);
+01165 
+01166   aboutcerrar = gtk_button_new_with_label (_(<font 
class="stringliteral">"Aceptar"</font>));
+01167   gtk_widget_ref (aboutcerrar);
+01168   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"aboutcerrar"</font>, aboutcerrar,
+01169                             (GtkDestroyNotify) gtk_widget_unref);
+01170   gtk_widget_show (aboutcerrar);
+01171   gtk_fixed_put (GTK_FIXED (fixed13), aboutcerrar, 152, 384);
+01172   gtk_widget_set_uposition (aboutcerrar, 152, 384);
+01173   gtk_widget_set_usize (aboutcerrar, 224, 32);
+01174 
+01175   pixmap10 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window5, <font class="stringliteral">"mecatux.xpm"</font>);
+01176   gtk_widget_ref (pixmap10);
+01177   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"pixmap10"</font>, pixmap10,
+01178                             (GtkDestroyNotify) gtk_widget_unref);
+01179   gtk_widget_show (pixmap10);
+01180   gtk_fixed_put (GTK_FIXED (fixed13), pixmap10, 0, 0);
+01181   gtk_widget_set_uposition (pixmap10, 0, 0);
+01182   gtk_widget_set_usize (pixmap10, 96, 88);
+01183 
+01184   pixmap7 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window5, <font class="stringliteral">"mecalogo.xpm"</font>);
+01185   gtk_widget_ref (pixmap7);
+01186   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"pixmap7"</font>, pixmap7,
+01187                             (GtkDestroyNotify) gtk_widget_unref);
+01188   gtk_widget_show (pixmap7);
+01189   gtk_fixed_put (GTK_FIXED (fixed13), pixmap7, 56, 8);
+01190   gtk_widget_set_uposition (pixmap7, 56, 8);
+01191   gtk_widget_set_usize (pixmap7, 256, 56);
+01192 
+01193   gtk_signal_connect (GTK_OBJECT (aboutcerrar), <font 
class="stringliteral">"clicked"</font>,
+01194                       GTK_SIGNAL_FUNC (on_aboutcerrar_clicked),
+01195                       NULL);
+01196 
+01197   <font class="keywordflow">return</font> window5;
+01198 }
+01199 
+01200 GtkWidget*
+<a name="l01201"></a><a class="code" href="interfaz_c.html#a3">01201</a> <a 
class="code" href="interfaz_c.html#a3">create_centanaeditor</a> (<font 
class="keywordtype">void</font>)<font class="keyword">
+</font>01202 <font class="keyword"></font>{
+01203   GtkWidget *centanaeditor;
+01204   GtkWidget *vbox11;
+01205   GtkWidget *menubar2;
+01206   GtkWidget *lecci_n1;
+01207   GtkWidget *lecci_n1_menu;
+01208   GtkAccelGroup *lecci_n1_menu_accels;
+01209   GtkWidget *nueva1;
+01210   GtkWidget *cargar_lecci_n1;
+01211   GtkWidget *guardar_lecci_n1;
+01212   GtkWidget *guardar_como1;
+01213   GtkWidget *separador1;
+01214   GtkWidget *salir1;
+01215   GtkWidget *edici_n1;
+01216   GtkWidget *edici_n1_menu;
+01217   GtkAccelGroup *edici_n1_menu_accels;
+01218   GtkWidget *cortar1;
+01219   GtkWidget *pegar1;
+01220   GtkWidget *scrolledwindow6;
+01221   GtkWidget *text5;
+01222   GtkWidget *statusbar1;
+01223 
+01224   centanaeditor = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+01225   gtk_object_set_data (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"centanaeditor"</font>, centanaeditor);
+01226   gtk_widget_set_usize (centanaeditor, 489, 144);
+01227   gtk_window_set_title (GTK_WINDOW (centanaeditor), _(<font 
class="stringliteral">"Editor de Lecciones"</font>));
+01228 
+01229   vbox11 = gtk_vbox_new (FALSE, 0);
+01230   gtk_widget_ref (vbox11);
+01231   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"vbox11"</font>, vbox11,
+01232                             (GtkDestroyNotify) gtk_widget_unref);
+01233   gtk_widget_show (vbox11);
+01234   gtk_container_add (GTK_CONTAINER (centanaeditor), vbox11);
+01235   gtk_widget_set_usize (vbox11, 664, 459);
+01236 
+01237   menubar2 = gtk_menu_bar_new ();
+01238   gtk_widget_ref (menubar2);
+01239   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"menubar2"</font>, menubar2,
+01240                             (GtkDestroyNotify) gtk_widget_unref);
+01241   gtk_widget_show (menubar2);
+01242   gtk_box_pack_start (GTK_BOX (vbox11), menubar2, FALSE, FALSE, 0);
+01243   gtk_container_set_border_width (GTK_CONTAINER (menubar2), 3);
+01244   gtk_menu_bar_set_shadow_type (GTK_MENU_BAR (menubar2), 
GTK_SHADOW_ETCHED_IN);
+01245 
+01246   lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Lección"</font>));
+01247   gtk_widget_ref (lecci_n1);
+01248   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"lecci_n1"</font>, lecci_n1,
+01249                             (GtkDestroyNotify) gtk_widget_unref);
+01250   gtk_widget_show (lecci_n1);
+01251   gtk_container_add (GTK_CONTAINER (menubar2), lecci_n1);
+01252 
+01253   lecci_n1_menu = gtk_menu_new ();
+01254   gtk_widget_ref (lecci_n1_menu);
+01255   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"lecci_n1_menu"</font>, lecci_n1_menu,
+01256                             (GtkDestroyNotify) gtk_widget_unref);
+01257   gtk_menu_item_set_submenu (GTK_MENU_ITEM (lecci_n1), lecci_n1_menu);
+01258   lecci_n1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(lecci_n1_menu));
+01259 
+01260   nueva1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Nueva"</font>));
+01261   gtk_widget_ref (nueva1);
+01262   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"nueva1"</font>, nueva1,
+01263                             (GtkDestroyNotify) gtk_widget_unref);
+01264   gtk_widget_show (nueva1);
+01265   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), nueva1);
+01266 
+01267   cargar_lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Cargar Lección"</font>));
+01268   gtk_widget_ref (cargar_lecci_n1);
+01269   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"cargar_lecci_n1"</font>, cargar_lecci_n1,
+01270                             (GtkDestroyNotify) gtk_widget_unref);
+01271   gtk_widget_show (cargar_lecci_n1);
+01272   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), cargar_lecci_n1);
+01273 
+01274   guardar_lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Guardar Lección"</font>));
+01275   gtk_widget_ref (guardar_lecci_n1);
+01276   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"guardar_lecci_n1"</font>, guardar_lecci_n1,
+01277                             (GtkDestroyNotify) gtk_widget_unref);
+01278   gtk_widget_show (guardar_lecci_n1);
+01279   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), guardar_lecci_n1);
+01280 
+01281   guardar_como1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Guardar Como..."</font>));
+01282   gtk_widget_ref (guardar_como1);
+01283   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"guardar_como1"</font>, guardar_como1,
+01284                             (GtkDestroyNotify) gtk_widget_unref);
+01285   gtk_widget_show (guardar_como1);
+01286   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), guardar_como1);
+01287 
+01288   separador1 = gtk_menu_item_new ();
+01289   gtk_widget_ref (separador1);
+01290   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"separador1"</font>, separador1,
+01291                             (GtkDestroyNotify) gtk_widget_unref);
+01292   gtk_widget_show (separador1);
+01293   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), separador1);
+01294   gtk_widget_set_sensitive (separador1, FALSE);
+01295 
+01296   salir1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Salir"</font>));
+01297   gtk_widget_ref (salir1);
+01298   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"salir1"</font>, salir1,
+01299                             (GtkDestroyNotify) gtk_widget_unref);
+01300   gtk_widget_show (salir1);
+01301   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), salir1);
+01302 
+01303   edici_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Edición"</font>));
+01304   gtk_widget_ref (edici_n1);
+01305   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"edici_n1"</font>, edici_n1,
+01306                             (GtkDestroyNotify) gtk_widget_unref);
+01307   gtk_widget_show (edici_n1);
+01308   gtk_container_add (GTK_CONTAINER (menubar2), edici_n1);
+01309 
+01310   edici_n1_menu = gtk_menu_new ();
+01311   gtk_widget_ref (edici_n1_menu);
+01312   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"edici_n1_menu"</font>, edici_n1_menu,
+01313                             (GtkDestroyNotify) gtk_widget_unref);
+01314   gtk_menu_item_set_submenu (GTK_MENU_ITEM (edici_n1), edici_n1_menu);
+01315   edici_n1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(edici_n1_menu));
+01316 
+01317   cortar1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Cortar"</font>));
+01318   gtk_widget_ref (cortar1);
+01319   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"cortar1"</font>, cortar1,
+01320                             (GtkDestroyNotify) gtk_widget_unref);
+01321   gtk_widget_show (cortar1);
+01322   gtk_container_add (GTK_CONTAINER (edici_n1_menu), cortar1);
+01323 
+01324   pegar1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Pegar"</font>));
+01325   gtk_widget_ref (pegar1);
+01326   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"pegar1"</font>, pegar1,
+01327                             (GtkDestroyNotify) gtk_widget_unref);
+01328   gtk_widget_show (pegar1);
+01329   gtk_container_add (GTK_CONTAINER (edici_n1_menu), pegar1);
+01330 
+01331   scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL);
+01332   gtk_widget_ref (scrolledwindow6);
+01333   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"scrolledwindow6"</font>, scrolledwindow6,
+01334                             (GtkDestroyNotify) gtk_widget_unref);
+01335   gtk_widget_show (scrolledwindow6);
+01336   gtk_box_pack_start (GTK_BOX (vbox11), scrolledwindow6, TRUE, TRUE, 0);
+01337   gtk_widget_set_usize (scrolledwindow6, 656, 334);
+01338   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+01339 
+01340   text5 = gtk_text_new (NULL, NULL);
+01341   gtk_widget_ref (text5);
+01342   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"text5"</font>, text5,
+01343                             (GtkDestroyNotify) gtk_widget_unref);
+01344   gtk_widget_show (text5);
+01345   gtk_container_add (GTK_CONTAINER (scrolledwindow6), text5);
+01346   gtk_text_set_editable (GTK_TEXT (text5), TRUE);
+01347 
+01348   statusbar1 = gtk_statusbar_new ();
+01349   gtk_widget_ref (statusbar1);
+01350   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"statusbar1"</font>, statusbar1,
+01351                             (GtkDestroyNotify) gtk_widget_unref);
+01352   gtk_widget_show (statusbar1);
+01353   gtk_box_pack_start (GTK_BOX (vbox11), statusbar1, FALSE, FALSE, 0);
+01354 
+01355   gtk_signal_connect (GTK_OBJECT (nueva1), <font 
class="stringliteral">"activate"</font>,
+01356                       GTK_SIGNAL_FUNC (on_nueva1_activate),
+01357                       NULL);
+01358   gtk_signal_connect (GTK_OBJECT (cargar_lecci_n1), <font 
class="stringliteral">"activate"</font>,
+01359                       GTK_SIGNAL_FUNC (on_cargar_lecci_n1_activate),
+01360                       NULL);
+01361   gtk_signal_connect (GTK_OBJECT (guardar_lecci_n1), <font 
class="stringliteral">"activate"</font>,
+01362                       GTK_SIGNAL_FUNC (on_guardar_lecci_n1_activate),
+01363                       NULL);
+01364   gtk_signal_connect (GTK_OBJECT (guardar_como1), <font 
class="stringliteral">"activate"</font>,
+01365                       GTK_SIGNAL_FUNC (on_guardar_como1_activate),
+01366                       NULL);
+01367   gtk_signal_connect (GTK_OBJECT (salir1), <font 
class="stringliteral">"activate"</font>,
+01368                       GTK_SIGNAL_FUNC (on_salir2_activate),
+01369                       NULL);
+01370   gtk_signal_connect (GTK_OBJECT (cortar1), <font 
class="stringliteral">"activate"</font>,
+01371                       GTK_SIGNAL_FUNC (on_cortar1_activate),
+01372                       NULL);
+01373   gtk_signal_connect (GTK_OBJECT (pegar1), <font 
class="stringliteral">"activate"</font>,
+01374                       GTK_SIGNAL_FUNC (on_pegar1_activate),
+01375                       NULL);
+01376 
+01377   <font class="keywordflow">return</font> centanaeditor;
+01378 }
+01379 
+01380 GtkWidget*
+<a name="l01381"></a><a class="code" href="interfaz_c.html#a4">01381</a> <a 
class="code" href="interfaz_c.html#a4">create_ventanaayuda</a> (<font 
class="keywordtype">void</font>)<font class="keyword">
+</font>01382 <font class="keyword"></font>{
+01383   GtkWidget *ventanaayuda;
+01384   GtkWidget *vbox12;
+01385   GtkWidget *pixmap11;
+01386   GtkWidget *fixed17;
+01387   GtkWidget *notebook2;
+01388   GtkWidget *fixed18;
+01389   GtkWidget *hseparator2;
+01390   GtkWidget *label25;
+01391   GtkWidget *pixmap13;
+01392   GtkWidget *vseparator1;
+01393   GtkWidget *pixmap12;
+01394   GtkWidget *label15;
+01395   GtkWidget *empty_notebook_page;
+01396   GtkWidget *label16;
+01397   GtkWidget *label17;
+01398   GtkWidget *label18;
+01399   GtkWidget *label19;
+01400   GtkWidget *label20;
+01401   GtkWidget *label21;
+01402   GtkWidget *label22;
+01403   GtkWidget *label23;
+01404   GtkWidget *label24;
+01405   GtkWidget *fixed16;
+01406   GtkWidget *salirayuda;
+01407 
+01408   ventanaayuda = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+01409   gtk_object_set_data (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"ventanaayuda"</font>, ventanaayuda);
+01410   gtk_widget_set_usize (ventanaayuda, 612, 375);
+01411   gtk_window_set_title (GTK_WINDOW (ventanaayuda), _(<font 
class="stringliteral">"Ayuda"</font>));
+01412 
+01413   vbox12 = gtk_vbox_new (FALSE, 0);
+01414   gtk_widget_ref (vbox12);
+01415   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"vbox12"</font>, vbox12,
+01416                             (GtkDestroyNotify) gtk_widget_unref);
+01417   gtk_widget_show (vbox12);
+01418   gtk_container_add (GTK_CONTAINER (ventanaayuda), vbox12);
+01419 
+01420   pixmap11 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(ventanaayuda, <font class="stringliteral">"titulotut.xpm"</font>);
+01421   gtk_widget_ref (pixmap11);
+01422   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"pixmap11"</font>, pixmap11,
+01423                             (GtkDestroyNotify) gtk_widget_unref);
+01424   gtk_widget_show (pixmap11);
+01425   gtk_box_pack_start (GTK_BOX (vbox12), pixmap11, TRUE, TRUE, 0);
+01426 
+01427   fixed17 = gtk_fixed_new ();
+01428   gtk_widget_ref (fixed17);
+01429   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"fixed17"</font>, fixed17,
+01430                             (GtkDestroyNotify) gtk_widget_unref);
+01431   gtk_widget_show (fixed17);
+01432   gtk_box_pack_start (GTK_BOX (vbox12), fixed17, TRUE, TRUE, 0);
+01433 
+01434   notebook2 = gtk_notebook_new ();
+01435   gtk_widget_ref (notebook2);
+01436   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"notebook2"</font>, notebook2,
+01437                             (GtkDestroyNotify) gtk_widget_unref);
+01438   gtk_widget_show (notebook2);
+01439   gtk_fixed_put (GTK_FIXED (fixed17), notebook2, 3, 0);
+01440   gtk_widget_set_uposition (notebook2, 3, 0);
+01441   gtk_widget_set_usize (notebook2, 602, 252);
+01442 
+01443   fixed18 = gtk_fixed_new ();
+01444   gtk_widget_ref (fixed18);
+01445   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"fixed18"</font>, fixed18,
+01446                             (GtkDestroyNotify) gtk_widget_unref);
+01447   gtk_widget_show (fixed18);
+01448   gtk_container_add (GTK_CONTAINER (notebook2), fixed18);
+01449 
+01450   hseparator2 = gtk_hseparator_new ();
+01451   gtk_widget_ref (hseparator2);
+01452   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"hseparator2"</font>, hseparator2,
+01453                             (GtkDestroyNotify) gtk_widget_unref);
+01454   gtk_widget_show (hseparator2);
+01455   gtk_fixed_put (GTK_FIXED (fixed18), hseparator2, 0, 88);
+01456   gtk_widget_set_uposition (hseparator2, 0, 88);
+01457   gtk_widget_set_usize (hseparator2, 248, 16);
+01458 
+01459   label25 = gtk_label_new (_(<font class="stringliteral">"Aquí irá un 
tutorial de mecanografía\ncon elementos como posición correcta\nde las manos, 
cómo usar este programa,\netcétera...."</font>));
+01460   gtk_widget_ref (label25);
+01461   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label25"</font>, label25,
+01462                             (GtkDestroyNotify) gtk_widget_unref);
+01463   gtk_widget_show (label25);
+01464   gtk_fixed_put (GTK_FIXED (fixed18), label25, 0, 0);
+01465   gtk_widget_set_uposition (label25, 0, 0);
+01466   gtk_widget_set_usize (label25, 232, 104);
+01467   gtk_label_set_justify (GTK_LABEL (label25), GTK_JUSTIFY_LEFT);
+01468 
+01469   pixmap13 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(ventanaayuda, <font class="stringliteral">"mecatux.xpm"</font>);
+01470   gtk_widget_ref (pixmap13);
+01471   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"pixmap13"</font>, pixmap13,
+01472                             (GtkDestroyNotify) gtk_widget_unref);
+01473   gtk_widget_show (pixmap13);
+01474   gtk_fixed_put (GTK_FIXED (fixed18), pixmap13, 48, 104);
+01475   gtk_widget_set_uposition (pixmap13, 48, 104);
+01476   gtk_widget_set_usize (pixmap13, 144, 104);
+01477 
+01478   vseparator1 = gtk_vseparator_new ();
+01479   gtk_widget_ref (vseparator1);
+01480   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"vseparator1"</font>, vseparator1,
+01481                             (GtkDestroyNotify) gtk_widget_unref);
+01482   gtk_widget_show (vseparator1);
+01483   gtk_fixed_put (GTK_FIXED (fixed18), vseparator1, 224, 0);
+01484   gtk_widget_set_uposition (vseparator1, 224, 0);
+01485   gtk_widget_set_usize (vseparator1, 16, 224);
+01486 
+01487   pixmap12 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(ventanaayuda, <font class="stringliteral">"mecalogo2.xpmwq"</font>);
+01488   gtk_widget_ref (pixmap12);
+01489   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"pixmap12"</font>, pixmap12,
+01490                             (GtkDestroyNotify) gtk_widget_unref);
+01491   gtk_widget_show (pixmap12);
+01492   gtk_fixed_put (GTK_FIXED (fixed18), pixmap12, 232, 0);
+01493   gtk_widget_set_uposition (pixmap12, 232, 0);
+01494   gtk_widget_set_usize (pixmap12, 368, 216);
+01495 
+01496   label15 = gtk_label_new (_(<font class="stringliteral">"Tema 
1"</font>));
+01497   gtk_widget_ref (label15);
+01498   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label15"</font>, label15,
+01499                             (GtkDestroyNotify) gtk_widget_unref);
+01500   gtk_widget_show (label15);
+01501   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 0), label15);
+01502 
+01503   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01504   gtk_widget_show (empty_notebook_page);
+01505   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01506 
+01507   label16 = gtk_label_new (_(<font class="stringliteral">"Tema 
2"</font>));
+01508   gtk_widget_ref (label16);
+01509   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label16"</font>, label16,
+01510                             (GtkDestroyNotify) gtk_widget_unref);
+01511   gtk_widget_show (label16);
+01512   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 1), label16);
+01513 
+01514   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01515   gtk_widget_show (empty_notebook_page);
+01516   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01517 
+01518   label17 = gtk_label_new (_(<font class="stringliteral">"Tema 
3"</font>));
+01519   gtk_widget_ref (label17);
+01520   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label17"</font>, label17,
+01521                             (GtkDestroyNotify) gtk_widget_unref);
+01522   gtk_widget_show (label17);
+01523   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label17);
+01524 
+01525   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01526   gtk_widget_show (empty_notebook_page);
+01527   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01528 
+01529   label18 = gtk_label_new (_(<font class="stringliteral">"Tema 
4"</font>));
+01530   gtk_widget_ref (label18);
+01531   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label18"</font>, label18,
+01532                             (GtkDestroyNotify) gtk_widget_unref);
+01533   gtk_widget_show (label18);
+01534   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 3), label18);
+01535 
+01536   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01537   gtk_widget_show (empty_notebook_page);
+01538   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01539 
+01540   label19 = gtk_label_new (_(<font class="stringliteral">"Tema 
5"</font>));
+01541   gtk_widget_ref (label19);
+01542   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label19"</font>, label19,
+01543                             (GtkDestroyNotify) gtk_widget_unref);
+01544   gtk_widget_show (label19);
+01545   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 4), label19);
+01546 
+01547   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01548   gtk_widget_show (empty_notebook_page);
+01549   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01550 
+01551   label20 = gtk_label_new (_(<font class="stringliteral">"Tema 
6"</font>));
+01552   gtk_widget_ref (label20);
+01553   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label20"</font>, label20,
+01554                             (GtkDestroyNotify) gtk_widget_unref);
+01555   gtk_widget_show (label20);
+01556   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 5), label20);
+01557 
+01558   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01559   gtk_widget_show (empty_notebook_page);
+01560   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01561 
+01562   label21 = gtk_label_new (_(<font class="stringliteral">"Tema 
7"</font>));
+01563   gtk_widget_ref (label21);
+01564   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label21"</font>, label21,
+01565                             (GtkDestroyNotify) gtk_widget_unref);
+01566   gtk_widget_show (label21);
+01567   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 6), label21);
+01568 
+01569   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01570   gtk_widget_show (empty_notebook_page);
+01571   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01572 
+01573   label22 = gtk_label_new (_(<font class="stringliteral">"Tema 
8"</font>));
+01574   gtk_widget_ref (label22);
+01575   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label22"</font>, label22,
+01576                             (GtkDestroyNotify) gtk_widget_unref);
+01577   gtk_widget_show (label22);
+01578   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 7), label22);
+01579 
+01580   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01581   gtk_widget_show (empty_notebook_page);
+01582   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01583 
+01584   label23 = gtk_label_new (_(<font class="stringliteral">"Tema 
9"</font>));
+01585   gtk_widget_ref (label23);
+01586   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label23"</font>, label23,
+01587                             (GtkDestroyNotify) gtk_widget_unref);
+01588   gtk_widget_show (label23);
+01589   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 8), label23);
+01590 
+01591   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01592   gtk_widget_show (empty_notebook_page);
+01593   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01594 
+01595   label24 = gtk_label_new (_(<font class="stringliteral">"Tema 
10"</font>));
+01596   gtk_widget_ref (label24);
+01597   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label24"</font>, label24,
+01598                             (GtkDestroyNotify) gtk_widget_unref);
+01599   gtk_widget_show (label24);
+01600   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 9), label24);
+01601 
+01602   fixed16 = gtk_fixed_new ();
+01603   gtk_widget_ref (fixed16);
+01604   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"fixed16"</font>, fixed16,
+01605                             (GtkDestroyNotify) gtk_widget_unref);
+01606   gtk_widget_show (fixed16);
+01607   gtk_box_pack_start (GTK_BOX (vbox12), fixed16, TRUE, TRUE, 0);
+01608   gtk_widget_set_usize (fixed16, -2, 25);
+01609 
+01610   salirayuda = gtk_button_new_with_label (_(<font 
class="stringliteral">"Aceptar"</font>));
+01611   gtk_widget_ref (salirayuda);
+01612   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"salirayuda"</font>, salirayuda,
+01613                             (GtkDestroyNotify) gtk_widget_unref);
+01614   gtk_widget_show (salirayuda);
+01615   gtk_fixed_put (GTK_FIXED (fixed16), salirayuda, 256, 8);
+01616   gtk_widget_set_uposition (salirayuda, 256, 8);
+01617   gtk_widget_set_usize (salirayuda, 103, 28);
+01618 
+01619   gtk_signal_connect (GTK_OBJECT (salirayuda), <font 
class="stringliteral">"clicked"</font>,
+01620                       GTK_SIGNAL_FUNC (on_salirayuda_clicked),
+01621                       NULL);
+01622 
+01623   <font class="keywordflow">return</font> ventanaayuda;
+01624 }
+01625 
+</div></pre><hr><address><small>Generado el Tue Mar 13 02:46:48 2001 para 
mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/interfaz_c.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/interfaz_c.html
diff -N Proyectos/Mecagtk/doc_devel/interfaz_c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/interfaz_c.html 3 Mar 2012 06:14:22 -0000       
1.1
@@ -0,0 +1,1791 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>interfaz.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:49 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>interfaz.c Archivo referencia</h1><code>#include 
&lt;sys/types.h&gt;</code><br>
+<code>#include &lt;sys/stat.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;string.h&gt;</code><br>
+<code>#include &lt;gdk/gdkkeysyms.h&gt;</code><br>
+<code>#include &lt;gtk/gtk.h&gt;</code><br>
+<code>#include "retrollamadas.h"</code><br>
+<code>#include "interfaz.h"</code><br>
+<code>#include "suporte.h"</code><br>
+
+<p>
+<a href="interfaz_c-source.html">Ir al código fuente de este 
archivo.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Funciones</h2></td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="interfaz_c.html#a0">create_window1</a> 
(void)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="interfaz_c.html#a1">create_window3</a> 
(void)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="interfaz_c.html#a2">create_window5</a> 
(void)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="interfaz_c.html#a3">create_centanaeditor</a> 
(void)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="interfaz_c.html#a4">create_ventanaayuda</a> 
(void)</td></tr>
+</table>
+<hr><h2>Documentación de las funciones</h2>
+<a name="a3" doxytag="interfaz.c::create_centanaeditor"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_centanaeditor (
+          </b></td>
+          <td valign="bottom"><b>
+void&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="interfaz_c-source.html#l01201">1201</a> del archivo <a class="el" 
href="interfaz_c-source.html">interfaz.c</a>.
+<p>
+Referenciado por <a class="el" 
href="retrollamadas_c-source.html#l01040">on_editor_de_lecciones1_activate</a>().<div
 class="fragment"><pre>01202 {
+01203   GtkWidget *centanaeditor;
+01204   GtkWidget *vbox11;
+01205   GtkWidget *menubar2;
+01206   GtkWidget *lecci_n1;
+01207   GtkWidget *lecci_n1_menu;
+01208   GtkAccelGroup *lecci_n1_menu_accels;
+01209   GtkWidget *nueva1;
+01210   GtkWidget *cargar_lecci_n1;
+01211   GtkWidget *guardar_lecci_n1;
+01212   GtkWidget *guardar_como1;
+01213   GtkWidget *separador1;
+01214   GtkWidget *salir1;
+01215   GtkWidget *edici_n1;
+01216   GtkWidget *edici_n1_menu;
+01217   GtkAccelGroup *edici_n1_menu_accels;
+01218   GtkWidget *cortar1;
+01219   GtkWidget *pegar1;
+01220   GtkWidget *scrolledwindow6;
+01221   GtkWidget *text5;
+01222   GtkWidget *statusbar1;
+01223 
+01224   centanaeditor = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+01225   gtk_object_set_data (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"centanaeditor"</font>, centanaeditor);
+01226   gtk_widget_set_usize (centanaeditor, 489, 144);
+01227   gtk_window_set_title (GTK_WINDOW (centanaeditor), _(<font 
class="stringliteral">"Editor de Lecciones"</font>));
+01228 
+01229   vbox11 = gtk_vbox_new (FALSE, 0);
+01230   gtk_widget_ref (vbox11);
+01231   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"vbox11"</font>, vbox11,
+01232                             (GtkDestroyNotify) gtk_widget_unref);
+01233   gtk_widget_show (vbox11);
+01234   gtk_container_add (GTK_CONTAINER (centanaeditor), vbox11);
+01235   gtk_widget_set_usize (vbox11, 664, 459);
+01236 
+01237   menubar2 = gtk_menu_bar_new ();
+01238   gtk_widget_ref (menubar2);
+01239   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"menubar2"</font>, menubar2,
+01240                             (GtkDestroyNotify) gtk_widget_unref);
+01241   gtk_widget_show (menubar2);
+01242   gtk_box_pack_start (GTK_BOX (vbox11), menubar2, FALSE, FALSE, 0);
+01243   gtk_container_set_border_width (GTK_CONTAINER (menubar2), 3);
+01244   gtk_menu_bar_set_shadow_type (GTK_MENU_BAR (menubar2), 
GTK_SHADOW_ETCHED_IN);
+01245 
+01246   lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Lección"</font>));
+01247   gtk_widget_ref (lecci_n1);
+01248   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"lecci_n1"</font>, lecci_n1,
+01249                             (GtkDestroyNotify) gtk_widget_unref);
+01250   gtk_widget_show (lecci_n1);
+01251   gtk_container_add (GTK_CONTAINER (menubar2), lecci_n1);
+01252 
+01253   lecci_n1_menu = gtk_menu_new ();
+01254   gtk_widget_ref (lecci_n1_menu);
+01255   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"lecci_n1_menu"</font>, lecci_n1_menu,
+01256                             (GtkDestroyNotify) gtk_widget_unref);
+01257   gtk_menu_item_set_submenu (GTK_MENU_ITEM (lecci_n1), lecci_n1_menu);
+01258   lecci_n1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(lecci_n1_menu));
+01259 
+01260   nueva1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Nueva"</font>));
+01261   gtk_widget_ref (nueva1);
+01262   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"nueva1"</font>, nueva1,
+01263                             (GtkDestroyNotify) gtk_widget_unref);
+01264   gtk_widget_show (nueva1);
+01265   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), nueva1);
+01266 
+01267   cargar_lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Cargar Lección"</font>));
+01268   gtk_widget_ref (cargar_lecci_n1);
+01269   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"cargar_lecci_n1"</font>, cargar_lecci_n1,
+01270                             (GtkDestroyNotify) gtk_widget_unref);
+01271   gtk_widget_show (cargar_lecci_n1);
+01272   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), cargar_lecci_n1);
+01273 
+01274   guardar_lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Guardar Lección"</font>));
+01275   gtk_widget_ref (guardar_lecci_n1);
+01276   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"guardar_lecci_n1"</font>, guardar_lecci_n1,
+01277                             (GtkDestroyNotify) gtk_widget_unref);
+01278   gtk_widget_show (guardar_lecci_n1);
+01279   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), guardar_lecci_n1);
+01280 
+01281   guardar_como1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Guardar Como..."</font>));
+01282   gtk_widget_ref (guardar_como1);
+01283   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"guardar_como1"</font>, guardar_como1,
+01284                             (GtkDestroyNotify) gtk_widget_unref);
+01285   gtk_widget_show (guardar_como1);
+01286   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), guardar_como1);
+01287 
+01288   separador1 = gtk_menu_item_new ();
+01289   gtk_widget_ref (separador1);
+01290   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"separador1"</font>, separador1,
+01291                             (GtkDestroyNotify) gtk_widget_unref);
+01292   gtk_widget_show (separador1);
+01293   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), separador1);
+01294   gtk_widget_set_sensitive (separador1, FALSE);
+01295 
+01296   salir1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Salir"</font>));
+01297   gtk_widget_ref (salir1);
+01298   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"salir1"</font>, salir1,
+01299                             (GtkDestroyNotify) gtk_widget_unref);
+01300   gtk_widget_show (salir1);
+01301   gtk_container_add (GTK_CONTAINER (lecci_n1_menu), salir1);
+01302 
+01303   edici_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Edición"</font>));
+01304   gtk_widget_ref (edici_n1);
+01305   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"edici_n1"</font>, edici_n1,
+01306                             (GtkDestroyNotify) gtk_widget_unref);
+01307   gtk_widget_show (edici_n1);
+01308   gtk_container_add (GTK_CONTAINER (menubar2), edici_n1);
+01309 
+01310   edici_n1_menu = gtk_menu_new ();
+01311   gtk_widget_ref (edici_n1_menu);
+01312   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"edici_n1_menu"</font>, edici_n1_menu,
+01313                             (GtkDestroyNotify) gtk_widget_unref);
+01314   gtk_menu_item_set_submenu (GTK_MENU_ITEM (edici_n1), edici_n1_menu);
+01315   edici_n1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(edici_n1_menu));
+01316 
+01317   cortar1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Cortar"</font>));
+01318   gtk_widget_ref (cortar1);
+01319   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"cortar1"</font>, cortar1,
+01320                             (GtkDestroyNotify) gtk_widget_unref);
+01321   gtk_widget_show (cortar1);
+01322   gtk_container_add (GTK_CONTAINER (edici_n1_menu), cortar1);
+01323 
+01324   pegar1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Pegar"</font>));
+01325   gtk_widget_ref (pegar1);
+01326   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"pegar1"</font>, pegar1,
+01327                             (GtkDestroyNotify) gtk_widget_unref);
+01328   gtk_widget_show (pegar1);
+01329   gtk_container_add (GTK_CONTAINER (edici_n1_menu), pegar1);
+01330 
+01331   scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL);
+01332   gtk_widget_ref (scrolledwindow6);
+01333   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"scrolledwindow6"</font>, scrolledwindow6,
+01334                             (GtkDestroyNotify) gtk_widget_unref);
+01335   gtk_widget_show (scrolledwindow6);
+01336   gtk_box_pack_start (GTK_BOX (vbox11), scrolledwindow6, TRUE, TRUE, 0);
+01337   gtk_widget_set_usize (scrolledwindow6, 656, 334);
+01338   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+01339 
+01340   text5 = gtk_text_new (NULL, NULL);
+01341   gtk_widget_ref (text5);
+01342   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"text5"</font>, text5,
+01343                             (GtkDestroyNotify) gtk_widget_unref);
+01344   gtk_widget_show (text5);
+01345   gtk_container_add (GTK_CONTAINER (scrolledwindow6), text5);
+01346   gtk_text_set_editable (GTK_TEXT (text5), TRUE);
+01347 
+01348   statusbar1 = gtk_statusbar_new ();
+01349   gtk_widget_ref (statusbar1);
+01350   gtk_object_set_data_full (GTK_OBJECT (centanaeditor), <font 
class="stringliteral">"statusbar1"</font>, statusbar1,
+01351                             (GtkDestroyNotify) gtk_widget_unref);
+01352   gtk_widget_show (statusbar1);
+01353   gtk_box_pack_start (GTK_BOX (vbox11), statusbar1, FALSE, FALSE, 0);
+01354 
+01355   gtk_signal_connect (GTK_OBJECT (nueva1), <font 
class="stringliteral">"activate"</font>,
+01356                       GTK_SIGNAL_FUNC (on_nueva1_activate),
+01357                       NULL);
+01358   gtk_signal_connect (GTK_OBJECT (cargar_lecci_n1), <font 
class="stringliteral">"activate"</font>,
+01359                       GTK_SIGNAL_FUNC (on_cargar_lecci_n1_activate),
+01360                       NULL);
+01361   gtk_signal_connect (GTK_OBJECT (guardar_lecci_n1), <font 
class="stringliteral">"activate"</font>,
+01362                       GTK_SIGNAL_FUNC (on_guardar_lecci_n1_activate),
+01363                       NULL);
+01364   gtk_signal_connect (GTK_OBJECT (guardar_como1), <font 
class="stringliteral">"activate"</font>,
+01365                       GTK_SIGNAL_FUNC (on_guardar_como1_activate),
+01366                       NULL);
+01367   gtk_signal_connect (GTK_OBJECT (salir1), <font 
class="stringliteral">"activate"</font>,
+01368                       GTK_SIGNAL_FUNC (on_salir2_activate),
+01369                       NULL);
+01370   gtk_signal_connect (GTK_OBJECT (cortar1), <font 
class="stringliteral">"activate"</font>,
+01371                       GTK_SIGNAL_FUNC (on_cortar1_activate),
+01372                       NULL);
+01373   gtk_signal_connect (GTK_OBJECT (pegar1), <font 
class="stringliteral">"activate"</font>,
+01374                       GTK_SIGNAL_FUNC (on_pegar1_activate),
+01375                       NULL);
+01376 
+01377   <font class="keywordflow">return</font> centanaeditor;
+01378 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a4" doxytag="interfaz.c::create_ventanaayuda"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_ventanaayuda (
+          </b></td>
+          <td valign="bottom"><b>
+void&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="interfaz_c-source.html#l01381">1381</a> del archivo <a class="el" 
href="interfaz_c-source.html">interfaz.c</a>.
+<p>
+Referenciado por <a class="el" 
href="retrollamadas_c-source.html#l01064">on_ayuda2_activate</a>(), and <a 
class="el" 
href="retrollamadas_c-source.html#l00984">on_ayuda_clicked</a>().<div 
class="fragment"><pre>01382 {
+01383   GtkWidget *ventanaayuda;
+01384   GtkWidget *vbox12;
+01385   GtkWidget *pixmap11;
+01386   GtkWidget *fixed17;
+01387   GtkWidget *notebook2;
+01388   GtkWidget *fixed18;
+01389   GtkWidget *hseparator2;
+01390   GtkWidget *label25;
+01391   GtkWidget *pixmap13;
+01392   GtkWidget *vseparator1;
+01393   GtkWidget *pixmap12;
+01394   GtkWidget *label15;
+01395   GtkWidget *empty_notebook_page;
+01396   GtkWidget *label16;
+01397   GtkWidget *label17;
+01398   GtkWidget *label18;
+01399   GtkWidget *label19;
+01400   GtkWidget *label20;
+01401   GtkWidget *label21;
+01402   GtkWidget *label22;
+01403   GtkWidget *label23;
+01404   GtkWidget *label24;
+01405   GtkWidget *fixed16;
+01406   GtkWidget *salirayuda;
+01407 
+01408   ventanaayuda = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+01409   gtk_object_set_data (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"ventanaayuda"</font>, ventanaayuda);
+01410   gtk_widget_set_usize (ventanaayuda, 612, 375);
+01411   gtk_window_set_title (GTK_WINDOW (ventanaayuda), _(<font 
class="stringliteral">"Ayuda"</font>));
+01412 
+01413   vbox12 = gtk_vbox_new (FALSE, 0);
+01414   gtk_widget_ref (vbox12);
+01415   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"vbox12"</font>, vbox12,
+01416                             (GtkDestroyNotify) gtk_widget_unref);
+01417   gtk_widget_show (vbox12);
+01418   gtk_container_add (GTK_CONTAINER (ventanaayuda), vbox12);
+01419 
+01420   pixmap11 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(ventanaayuda, <font class="stringliteral">"titulotut.xpm"</font>);
+01421   gtk_widget_ref (pixmap11);
+01422   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"pixmap11"</font>, pixmap11,
+01423                             (GtkDestroyNotify) gtk_widget_unref);
+01424   gtk_widget_show (pixmap11);
+01425   gtk_box_pack_start (GTK_BOX (vbox12), pixmap11, TRUE, TRUE, 0);
+01426 
+01427   fixed17 = gtk_fixed_new ();
+01428   gtk_widget_ref (fixed17);
+01429   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"fixed17"</font>, fixed17,
+01430                             (GtkDestroyNotify) gtk_widget_unref);
+01431   gtk_widget_show (fixed17);
+01432   gtk_box_pack_start (GTK_BOX (vbox12), fixed17, TRUE, TRUE, 0);
+01433 
+01434   notebook2 = gtk_notebook_new ();
+01435   gtk_widget_ref (notebook2);
+01436   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"notebook2"</font>, notebook2,
+01437                             (GtkDestroyNotify) gtk_widget_unref);
+01438   gtk_widget_show (notebook2);
+01439   gtk_fixed_put (GTK_FIXED (fixed17), notebook2, 3, 0);
+01440   gtk_widget_set_uposition (notebook2, 3, 0);
+01441   gtk_widget_set_usize (notebook2, 602, 252);
+01442 
+01443   fixed18 = gtk_fixed_new ();
+01444   gtk_widget_ref (fixed18);
+01445   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"fixed18"</font>, fixed18,
+01446                             (GtkDestroyNotify) gtk_widget_unref);
+01447   gtk_widget_show (fixed18);
+01448   gtk_container_add (GTK_CONTAINER (notebook2), fixed18);
+01449 
+01450   hseparator2 = gtk_hseparator_new ();
+01451   gtk_widget_ref (hseparator2);
+01452   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"hseparator2"</font>, hseparator2,
+01453                             (GtkDestroyNotify) gtk_widget_unref);
+01454   gtk_widget_show (hseparator2);
+01455   gtk_fixed_put (GTK_FIXED (fixed18), hseparator2, 0, 88);
+01456   gtk_widget_set_uposition (hseparator2, 0, 88);
+01457   gtk_widget_set_usize (hseparator2, 248, 16);
+01458 
+01459   label25 = gtk_label_new (_(<font class="stringliteral">"Aquí irá un 
tutorial de mecanografía\ncon elementos como posición correcta\nde las manos, 
cómo usar este programa,\netcétera...."</font>));
+01460   gtk_widget_ref (label25);
+01461   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label25"</font>, label25,
+01462                             (GtkDestroyNotify) gtk_widget_unref);
+01463   gtk_widget_show (label25);
+01464   gtk_fixed_put (GTK_FIXED (fixed18), label25, 0, 0);
+01465   gtk_widget_set_uposition (label25, 0, 0);
+01466   gtk_widget_set_usize (label25, 232, 104);
+01467   gtk_label_set_justify (GTK_LABEL (label25), GTK_JUSTIFY_LEFT);
+01468 
+01469   pixmap13 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(ventanaayuda, <font class="stringliteral">"mecatux.xpm"</font>);
+01470   gtk_widget_ref (pixmap13);
+01471   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"pixmap13"</font>, pixmap13,
+01472                             (GtkDestroyNotify) gtk_widget_unref);
+01473   gtk_widget_show (pixmap13);
+01474   gtk_fixed_put (GTK_FIXED (fixed18), pixmap13, 48, 104);
+01475   gtk_widget_set_uposition (pixmap13, 48, 104);
+01476   gtk_widget_set_usize (pixmap13, 144, 104);
+01477 
+01478   vseparator1 = gtk_vseparator_new ();
+01479   gtk_widget_ref (vseparator1);
+01480   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"vseparator1"</font>, vseparator1,
+01481                             (GtkDestroyNotify) gtk_widget_unref);
+01482   gtk_widget_show (vseparator1);
+01483   gtk_fixed_put (GTK_FIXED (fixed18), vseparator1, 224, 0);
+01484   gtk_widget_set_uposition (vseparator1, 224, 0);
+01485   gtk_widget_set_usize (vseparator1, 16, 224);
+01486 
+01487   pixmap12 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(ventanaayuda, <font class="stringliteral">"mecalogo2.xpmwq"</font>);
+01488   gtk_widget_ref (pixmap12);
+01489   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"pixmap12"</font>, pixmap12,
+01490                             (GtkDestroyNotify) gtk_widget_unref);
+01491   gtk_widget_show (pixmap12);
+01492   gtk_fixed_put (GTK_FIXED (fixed18), pixmap12, 232, 0);
+01493   gtk_widget_set_uposition (pixmap12, 232, 0);
+01494   gtk_widget_set_usize (pixmap12, 368, 216);
+01495 
+01496   label15 = gtk_label_new (_(<font class="stringliteral">"Tema 
1"</font>));
+01497   gtk_widget_ref (label15);
+01498   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label15"</font>, label15,
+01499                             (GtkDestroyNotify) gtk_widget_unref);
+01500   gtk_widget_show (label15);
+01501   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 0), label15);
+01502 
+01503   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01504   gtk_widget_show (empty_notebook_page);
+01505   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01506 
+01507   label16 = gtk_label_new (_(<font class="stringliteral">"Tema 
2"</font>));
+01508   gtk_widget_ref (label16);
+01509   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label16"</font>, label16,
+01510                             (GtkDestroyNotify) gtk_widget_unref);
+01511   gtk_widget_show (label16);
+01512   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 1), label16);
+01513 
+01514   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01515   gtk_widget_show (empty_notebook_page);
+01516   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01517 
+01518   label17 = gtk_label_new (_(<font class="stringliteral">"Tema 
3"</font>));
+01519   gtk_widget_ref (label17);
+01520   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label17"</font>, label17,
+01521                             (GtkDestroyNotify) gtk_widget_unref);
+01522   gtk_widget_show (label17);
+01523   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label17);
+01524 
+01525   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01526   gtk_widget_show (empty_notebook_page);
+01527   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01528 
+01529   label18 = gtk_label_new (_(<font class="stringliteral">"Tema 
4"</font>));
+01530   gtk_widget_ref (label18);
+01531   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label18"</font>, label18,
+01532                             (GtkDestroyNotify) gtk_widget_unref);
+01533   gtk_widget_show (label18);
+01534   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 3), label18);
+01535 
+01536   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01537   gtk_widget_show (empty_notebook_page);
+01538   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01539 
+01540   label19 = gtk_label_new (_(<font class="stringliteral">"Tema 
5"</font>));
+01541   gtk_widget_ref (label19);
+01542   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label19"</font>, label19,
+01543                             (GtkDestroyNotify) gtk_widget_unref);
+01544   gtk_widget_show (label19);
+01545   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 4), label19);
+01546 
+01547   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01548   gtk_widget_show (empty_notebook_page);
+01549   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01550 
+01551   label20 = gtk_label_new (_(<font class="stringliteral">"Tema 
6"</font>));
+01552   gtk_widget_ref (label20);
+01553   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label20"</font>, label20,
+01554                             (GtkDestroyNotify) gtk_widget_unref);
+01555   gtk_widget_show (label20);
+01556   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 5), label20);
+01557 
+01558   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01559   gtk_widget_show (empty_notebook_page);
+01560   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01561 
+01562   label21 = gtk_label_new (_(<font class="stringliteral">"Tema 
7"</font>));
+01563   gtk_widget_ref (label21);
+01564   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label21"</font>, label21,
+01565                             (GtkDestroyNotify) gtk_widget_unref);
+01566   gtk_widget_show (label21);
+01567   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 6), label21);
+01568 
+01569   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01570   gtk_widget_show (empty_notebook_page);
+01571   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01572 
+01573   label22 = gtk_label_new (_(<font class="stringliteral">"Tema 
8"</font>));
+01574   gtk_widget_ref (label22);
+01575   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label22"</font>, label22,
+01576                             (GtkDestroyNotify) gtk_widget_unref);
+01577   gtk_widget_show (label22);
+01578   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 7), label22);
+01579 
+01580   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01581   gtk_widget_show (empty_notebook_page);
+01582   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01583 
+01584   label23 = gtk_label_new (_(<font class="stringliteral">"Tema 
9"</font>));
+01585   gtk_widget_ref (label23);
+01586   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label23"</font>, label23,
+01587                             (GtkDestroyNotify) gtk_widget_unref);
+01588   gtk_widget_show (label23);
+01589   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 8), label23);
+01590 
+01591   empty_notebook_page = gtk_vbox_new (FALSE, 0);
+01592   gtk_widget_show (empty_notebook_page);
+01593   gtk_container_add (GTK_CONTAINER (notebook2), empty_notebook_page);
+01594 
+01595   label24 = gtk_label_new (_(<font class="stringliteral">"Tema 
10"</font>));
+01596   gtk_widget_ref (label24);
+01597   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"label24"</font>, label24,
+01598                             (GtkDestroyNotify) gtk_widget_unref);
+01599   gtk_widget_show (label24);
+01600   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 9), label24);
+01601 
+01602   fixed16 = gtk_fixed_new ();
+01603   gtk_widget_ref (fixed16);
+01604   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"fixed16"</font>, fixed16,
+01605                             (GtkDestroyNotify) gtk_widget_unref);
+01606   gtk_widget_show (fixed16);
+01607   gtk_box_pack_start (GTK_BOX (vbox12), fixed16, TRUE, TRUE, 0);
+01608   gtk_widget_set_usize (fixed16, -2, 25);
+01609 
+01610   salirayuda = gtk_button_new_with_label (_(<font 
class="stringliteral">"Aceptar"</font>));
+01611   gtk_widget_ref (salirayuda);
+01612   gtk_object_set_data_full (GTK_OBJECT (ventanaayuda), <font 
class="stringliteral">"salirayuda"</font>, salirayuda,
+01613                             (GtkDestroyNotify) gtk_widget_unref);
+01614   gtk_widget_show (salirayuda);
+01615   gtk_fixed_put (GTK_FIXED (fixed16), salirayuda, 256, 8);
+01616   gtk_widget_set_uposition (salirayuda, 256, 8);
+01617   gtk_widget_set_usize (salirayuda, 103, 28);
+01618 
+01619   gtk_signal_connect (GTK_OBJECT (salirayuda), <font 
class="stringliteral">"clicked"</font>,
+01620                       GTK_SIGNAL_FUNC (on_salirayuda_clicked),
+01621                       NULL);
+01622 
+01623   <font class="keywordflow">return</font> ventanaayuda;
+01624 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a0" doxytag="interfaz.c::create_window1"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_window1 (
+          </b></td>
+          <td valign="bottom"><b>
+void&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="interfaz_c-source.html#l00022">22</a> del archivo <a class="el" 
href="interfaz_c-source.html">interfaz.c</a>.
+<p>
+Referenciado por <a class="el" 
href="main_c-source.html#l00016">main</a>().<div class="fragment"><pre>00023 {
+00024   GtkWidget *window1;
+00025   GtkWidget *vbox9;
+00026   GtkWidget *vbox10;
+00027   GtkWidget *menubar1;
+00028   GtkWidget *archivo1;
+00029   GtkWidget *archivo1_menu;
+00030   GtkAccelGroup *archivo1_menu_accels;
+00031   GtkWidget *abrir_lecci_n1;
+00032   GtkWidget *salir1;
+00033   GtkWidget *preferencias1;
+00034   GtkWidget *preferencias1_menu;
+00035   GtkAccelGroup *preferencias1_menu_accels;
+00036   GtkWidget *editor_de_lecciones1;
+00037   GtkWidget *ayuda1;
+00038   GtkWidget *ayuda1_menu;
+00039   GtkAccelGroup *ayuda1_menu_accels;
+00040   GtkWidget *sobre_mecagtk1;
+00041   GtkWidget *ayuda2;
+00042   GtkWidget *scrolledwindow1;
+00043   GtkWidget *text1;
+00044   GtkWidget *scrolledwindow3;
+00045   GtkWidget *text2;
+00046   GtkWidget *fixed9;
+00047   GtkWidget *shiftderecha;
+00048   GtkWidget *retorno;
+00049   GtkWidget *borrar;
+00050   GtkWidget *shiftizquierda;
+00051   GtkWidget *button152;
+00052   GtkWidget *button153;
+00053   guint rayas_key;
+00054   GtkWidget *rayas;
+00055   GtkWidget *dopuntos;
+00056   GtkWidget *puntoycoma;
+00057   GtkWidget *bm;
+00058   GtkWidget *bn;
+00059   GtkWidget *bb;
+00060   GtkWidget *bv;
+00061   GtkWidget *bc;
+00062   GtkWidget *bx;
+00063   GtkWidget *bz;
+00064   GtkWidget *mayormenor;
+00065   GtkWidget *cedilla;
+00066   GtkWidget *unlaut;
+00067   GtkWidget *bnn;
+00068   GtkWidget *bl;
+00069   GtkWidget *bk;
+00070   GtkWidget *bj;
+00071   GtkWidget *bh;
+00072   GtkWidget *bg;
+00073   GtkWidget *bf;
+00074   GtkWidget *bd;
+00075   GtkWidget *bs;
+00076   GtkWidget *ba;
+00077   GtkWidget *asterisco;
+00078   GtkWidget *circunflej;
+00079   GtkWidget *bp;
+00080   GtkWidget *bo;
+00081   GtkWidget *bi;
+00082   GtkWidget *bu;
+00083   GtkWidget *by;
+00084   GtkWidget *bt;
+00085   GtkWidget *br;
+00086   GtkWidget *be;
+00087   GtkWidget *bw;
+00088   GtkWidget *bq;
+00089   GtkWidget *button189;
+00090   GtkWidget *button190;
+00091   GtkWidget *button191;
+00092   GtkWidget *button192;
+00093   GtkWidget *button193;
+00094   GtkWidget *button194;
+00095   GtkWidget *button195;
+00096   GtkWidget *button196;
+00097   GtkWidget *button197;
+00098   GtkWidget *button198;
+00099   GtkWidget *button199;
+00100   GtkWidget *button200;
+00101   GtkWidget *altgr;
+00102   GtkWidget *alt;
+00103   GtkWidget *button203;
+00104   GtkWidget *controldcha;
+00105   GtkWidget *controlizda;
+00106   GtkWidget *espacio;
+00107   GtkWidget *frame1;
+00108   GtkWidget *fixed10;
+00109   GtkWidget *about;
+00110   GtkWidget *ayuda;
+00111   GtkWidget *cerrar;
+00112   GtkWidget *label1;
+00113   GtkWidget *frame3;
+00114   GtkWidget *hbox1;
+00115   GtkWidget *lecant;
+00116   GtkWidget *lecsig;
+00117   GtkWidget *pixmap9;
+00118   GtkWidget *label14;
+00119   GtkWidget *hseparator1;
+00120   GtkAccelGroup *accel_group;
+00121   GtkTooltips *tooltips;
+00122 
+00123   tooltips = gtk_tooltips_new ();
+00124 
+00125   accel_group = gtk_accel_group_new ();
+00126 
+00127   window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+00128   gtk_object_set_data (GTK_OBJECT (window1), <font 
class="stringliteral">"window1"</font>, window1);
+00129   gtk_widget_set_usize (window1, 878, 478);
+00130   gtk_tooltips_set_tip (tooltips, window1, _(<font 
class="stringliteral">"Meca GTK  :)"</font>), NULL);
+00131   gtk_window_set_title (GTK_WINDOW (window1), _(<font 
class="stringliteral">"Meca GTK v0.1 (Edición BETA)"</font>));
+00132   gtk_window_set_position (GTK_WINDOW (window1), GTK_WIN_POS_CENTER);
+00133   gtk_window_set_policy (GTK_WINDOW (window1), FALSE, FALSE, FALSE);
+00134 
+00135   vbox9 = gtk_vbox_new (FALSE, 0);
+00136   gtk_widget_ref (vbox9);
+00137   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"vbox9"</font>, vbox9,
+00138                             (GtkDestroyNotify) gtk_widget_unref);
+00139   gtk_widget_show (vbox9);
+00140   gtk_container_add (GTK_CONTAINER (window1), vbox9);
+00141 
+00142   vbox10 = gtk_vbox_new (FALSE, 0);
+00143   gtk_widget_ref (vbox10);
+00144   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"vbox10"</font>, vbox10,
+00145                             (GtkDestroyNotify) gtk_widget_unref);
+00146   gtk_widget_show (vbox10);
+00147   gtk_box_pack_start (GTK_BOX (vbox9), vbox10, TRUE, TRUE, 0);
+00148 
+00149   menubar1 = gtk_menu_bar_new ();
+00150   gtk_widget_ref (menubar1);
+00151   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"menubar1"</font>, menubar1,
+00152                             (GtkDestroyNotify) gtk_widget_unref);
+00153   gtk_widget_show (menubar1);
+00154   gtk_box_pack_start (GTK_BOX (vbox10), menubar1, FALSE, FALSE, 0);
+00155   gtk_menu_bar_set_shadow_type (GTK_MENU_BAR (menubar1), 
GTK_SHADOW_ETCHED_IN);
+00156 
+00157   archivo1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Archivo"</font>));
+00158   gtk_widget_ref (archivo1);
+00159   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"archivo1"</font>, archivo1,
+00160                             (GtkDestroyNotify) gtk_widget_unref);
+00161   gtk_widget_show (archivo1);
+00162   gtk_container_add (GTK_CONTAINER (menubar1), archivo1);
+00163 
+00164   archivo1_menu = gtk_menu_new ();
+00165   gtk_widget_ref (archivo1_menu);
+00166   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"archivo1_menu"</font>, archivo1_menu,
+00167                             (GtkDestroyNotify) gtk_widget_unref);
+00168   gtk_menu_item_set_submenu (GTK_MENU_ITEM (archivo1), archivo1_menu);
+00169   archivo1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(archivo1_menu));
+00170 
+00171   abrir_lecci_n1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Abrir Lección"</font>));
+00172   gtk_widget_ref (abrir_lecci_n1);
+00173   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"abrir_lecci_n1"</font>, abrir_lecci_n1,
+00174                             (GtkDestroyNotify) gtk_widget_unref);
+00175   gtk_widget_show (abrir_lecci_n1);
+00176   gtk_container_add (GTK_CONTAINER (archivo1_menu), abrir_lecci_n1);
+00177 
+00178   salir1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Salir"</font>));
+00179   gtk_widget_ref (salir1);
+00180   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"salir1"</font>, salir1,
+00181                             (GtkDestroyNotify) gtk_widget_unref);
+00182   gtk_widget_show (salir1);
+00183   gtk_container_add (GTK_CONTAINER (archivo1_menu), salir1);
+00184 
+00185   preferencias1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Preferencias"</font>));
+00186   gtk_widget_ref (preferencias1);
+00187   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"preferencias1"</font>, preferencias1,
+00188                             (GtkDestroyNotify) gtk_widget_unref);
+00189   gtk_widget_show (preferencias1);
+00190   gtk_container_add (GTK_CONTAINER (menubar1), preferencias1);
+00191 
+00192   preferencias1_menu = gtk_menu_new ();
+00193   gtk_widget_ref (preferencias1_menu);
+00194   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"preferencias1_menu"</font>, preferencias1_menu,
+00195                             (GtkDestroyNotify) gtk_widget_unref);
+00196   gtk_menu_item_set_submenu (GTK_MENU_ITEM (preferencias1), 
preferencias1_menu);
+00197   preferencias1_menu_accels = gtk_menu_ensure_uline_accel_group 
(GTK_MENU (preferencias1_menu));
+00198 
+00199   editor_de_lecciones1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Editor de Lecciones"</font>));
+00200   gtk_widget_ref (editor_de_lecciones1);
+00201   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"editor_de_lecciones1"</font>, editor_de_lecciones1,
+00202                             (GtkDestroyNotify) gtk_widget_unref);
+00203   gtk_widget_show (editor_de_lecciones1);
+00204   gtk_container_add (GTK_CONTAINER (preferencias1_menu), 
editor_de_lecciones1);
+00205 
+00206   ayuda1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Ayuda"</font>));
+00207   gtk_widget_ref (ayuda1);
+00208   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda1"</font>, ayuda1,
+00209                             (GtkDestroyNotify) gtk_widget_unref);
+00210   gtk_widget_show (ayuda1);
+00211   gtk_container_add (GTK_CONTAINER (menubar1), ayuda1);
+00212 
+00213   ayuda1_menu = gtk_menu_new ();
+00214   gtk_widget_ref (ayuda1_menu);
+00215   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda1_menu"</font>, ayuda1_menu,
+00216                             (GtkDestroyNotify) gtk_widget_unref);
+00217   gtk_menu_item_set_submenu (GTK_MENU_ITEM (ayuda1), ayuda1_menu);
+00218   ayuda1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU 
(ayuda1_menu));
+00219 
+00220   sobre_mecagtk1 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Sobre MecaGTK"</font>));
+00221   gtk_widget_ref (sobre_mecagtk1);
+00222   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"sobre_mecagtk1"</font>, sobre_mecagtk1,
+00223                             (GtkDestroyNotify) gtk_widget_unref);
+00224   gtk_widget_show (sobre_mecagtk1);
+00225   gtk_container_add (GTK_CONTAINER (ayuda1_menu), sobre_mecagtk1);
+00226 
+00227   ayuda2 = gtk_menu_item_new_with_label (_(<font 
class="stringliteral">"Ayuda"</font>));
+00228   gtk_widget_ref (ayuda2);
+00229   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda2"</font>, ayuda2,
+00230                             (GtkDestroyNotify) gtk_widget_unref);
+00231   gtk_widget_show (ayuda2);
+00232   gtk_container_add (GTK_CONTAINER (ayuda1_menu), ayuda2);
+00233 
+00234   scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
+00235   gtk_widget_ref (scrolledwindow1);
+00236   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"scrolledwindow1"</font>, scrolledwindow1,
+00237                             (GtkDestroyNotify) gtk_widget_unref);
+00238   gtk_widget_show (scrolledwindow1);
+00239   gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow1, TRUE, TRUE, 0);
+00240   gtk_widget_set_usize (scrolledwindow1, -2, 81);
+00241   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+00242 
+00243   text1 = gtk_text_new (NULL, NULL);
+00244   gtk_widget_ref (text1);
+00245   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"text1"</font>, text1,
+00246                             (GtkDestroyNotify) gtk_widget_unref);
+00247   gtk_widget_show (text1);
+00248   gtk_container_add (GTK_CONTAINER (scrolledwindow1), text1);
+00249   gtk_widget_set_usize (text1, -2, 103);
+00250 
+00251   scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
+00252   gtk_widget_ref (scrolledwindow3);
+00253   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"scrolledwindow3"</font>, scrolledwindow3,
+00254                             (GtkDestroyNotify) gtk_widget_unref);
+00255   gtk_widget_show (scrolledwindow3);
+00256   gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow3, TRUE, TRUE, 0);
+00257   gtk_widget_set_usize (scrolledwindow3, -2, 1);
+00258   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow3), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+00259 
+00260   text2 = gtk_text_new (NULL, NULL);
+00261   gtk_widget_ref (text2);
+00262   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"text2"</font>, text2,
+00263                             (GtkDestroyNotify) gtk_widget_unref);
+00264   gtk_widget_show (text2);
+00265   gtk_container_add (GTK_CONTAINER (scrolledwindow3), text2);
+00266   gtk_widget_set_usize (text2, -2, 0);
+00267 
+00268   fixed9 = gtk_fixed_new ();
+00269   gtk_widget_ref (fixed9);
+00270   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"fixed9"</font>, fixed9,
+00271                             (GtkDestroyNotify) gtk_widget_unref);
+00272   gtk_widget_show (fixed9);
+00273   gtk_box_pack_start (GTK_BOX (vbox9), fixed9, TRUE, TRUE, 0);
+00274   gtk_widget_set_usize (fixed9, -2, 139);
+00275 
+00276   shiftderecha = gtk_button_new_with_label (_(<font 
class="stringliteral">"Shift"</font>));
+00277   gtk_widget_ref (shiftderecha);
+00278   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"shiftderecha"</font>, shiftderecha,
+00279                             (GtkDestroyNotify) gtk_widget_unref);
+00280   gtk_widget_show (shiftderecha);
+00281   gtk_fixed_put (GTK_FIXED (fixed9), shiftderecha, 512, 144);
+00282   gtk_widget_set_uposition (shiftderecha, 512, 144);
+00283   gtk_widget_set_usize (shiftderecha, 107, 35);
+00284 
+00285   retorno = gtk_button_new_with_label (_(<font 
class="stringliteral">"Enter"</font>));
+00286   gtk_widget_ref (retorno);
+00287   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"retorno"</font>, retorno,
+00288                             (GtkDestroyNotify) gtk_widget_unref);
+00289   gtk_widget_show (retorno);
+00290   gtk_fixed_put (GTK_FIXED (fixed9), retorno, 568, 64);
+00291   gtk_widget_set_uposition (retorno, 568, 64);
+00292   gtk_widget_set_usize (retorno, 51, 75);
+00293 
+00294   borrar = gtk_button_new_with_label (_(<font 
class="stringliteral">"&lt;--"</font>));
+00295   gtk_widget_ref (borrar);
+00296   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"borrar"</font>, borrar,
+00297                             (GtkDestroyNotify) gtk_widget_unref);
+00298   gtk_widget_show (borrar);
+00299   gtk_fixed_put (GTK_FIXED (fixed9), borrar, 544, 24);
+00300   gtk_widget_set_uposition (borrar, 544, 24);
+00301   gtk_widget_set_usize (borrar, 75, 35);
+00302 
+00303   shiftizquierda = gtk_button_new_with_label (_(<font 
class="stringliteral">" Shift"</font>));
+00304   gtk_widget_ref (shiftizquierda);
+00305   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"shiftizquierda"</font>, shiftizquierda,
+00306                             (GtkDestroyNotify) gtk_widget_unref);
+00307   gtk_widget_show (shiftizquierda);
+00308   gtk_fixed_put (GTK_FIXED (fixed9), shiftizquierda, 16, 144);
+00309   gtk_widget_set_uposition (shiftizquierda, 16, 144);
+00310   gtk_widget_set_usize (shiftizquierda, 52, 35);
+00311 
+00312   button152 = gtk_button_new_with_label (_(<font 
class="stringliteral">"Bloq\nMayús"</font>));
+00313   gtk_widget_ref (button152);
+00314   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button152"</font>, button152,
+00315                             (GtkDestroyNotify) gtk_widget_unref);
+00316   gtk_widget_show (button152);
+00317   gtk_fixed_put (GTK_FIXED (fixed9), button152, 16, 104);
+00318   gtk_widget_set_uposition (button152, 16, 104);
+00319   gtk_widget_set_usize (button152, 66, 35);
+00320 
+00321   button153 = gtk_button_new_with_label (_(<font 
class="stringliteral">"|&lt;--\n--&gt;|"</font>));
+00322   gtk_widget_ref (button153);
+00323   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button153"</font>, button153,
+00324                             (GtkDestroyNotify) gtk_widget_unref);
+00325   gtk_widget_show (button153);
+00326   gtk_fixed_put (GTK_FIXED (fixed9), button153, 16, 64);
+00327   gtk_widget_set_uposition (button153, 16, 64);
+00328   gtk_widget_set_usize (button153, 59, 35);
+00329 
+00330   rayas = gtk_button_new_with_label (<font 
class="stringliteral">""</font>);
+00331   rayas_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN 
(rayas)-&gt;child),
+00332                                    _(<font 
class="stringliteral">"_\n-\n"</font>));
+00333   gtk_widget_add_accelerator (rayas, <font 
class="stringliteral">"clicked"</font>, accel_group,
+00334                               rayas_key, GDK_MOD1_MASK, 0);
+00335   gtk_widget_ref (rayas);
+00336   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"rayas"</font>, rayas,
+00337                             (GtkDestroyNotify) gtk_widget_unref);
+00338   gtk_widget_show (rayas);
+00339   gtk_fixed_put (GTK_FIXED (fixed9), rayas, 472, 144);
+00340   gtk_widget_set_uposition (rayas, 472, 144);
+00341   gtk_widget_set_usize (rayas, 35, 35);
+00342 
+00343   dopuntos = gtk_button_new_with_label (_(<font 
class="stringliteral">":\n."</font>));
+00344   gtk_widget_ref (dopuntos);
+00345   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"dopuntos"</font>, dopuntos,
+00346                             (GtkDestroyNotify) gtk_widget_unref);
+00347   gtk_widget_show (dopuntos);
+00348   gtk_fixed_put (GTK_FIXED (fixed9), dopuntos, 432, 144);
+00349   gtk_widget_set_uposition (dopuntos, 432, 144);
+00350   gtk_widget_set_usize (dopuntos, 35, 35);
+00351 
+00352   puntoycoma = gtk_button_new_with_label (_(<font 
class="stringliteral">";\n,"</font>));
+00353   gtk_widget_ref (puntoycoma);
+00354   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"puntoycoma"</font>, puntoycoma,
+00355                             (GtkDestroyNotify) gtk_widget_unref);
+00356   gtk_widget_show (puntoycoma);
+00357   gtk_fixed_put (GTK_FIXED (fixed9), puntoycoma, 392, 144);
+00358   gtk_widget_set_uposition (puntoycoma, 392, 144);
+00359   gtk_widget_set_usize (puntoycoma, 35, 35);
+00360 
+00361   bm = gtk_button_new_with_label (_(<font 
class="stringliteral">"M\n"</font>));
+00362   gtk_widget_ref (bm);
+00363   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bm"</font>, bm,
+00364                             (GtkDestroyNotify) gtk_widget_unref);
+00365   gtk_widget_show (bm);
+00366   gtk_fixed_put (GTK_FIXED (fixed9), bm, 352, 144);
+00367   gtk_widget_set_uposition (bm, 352, 144);
+00368   gtk_widget_set_usize (bm, 35, 35);
+00369 
+00370   bn = gtk_button_new_with_label (_(<font 
class="stringliteral">"N\n"</font>));
+00371   gtk_widget_ref (bn);
+00372   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bn"</font>, bn,
+00373                             (GtkDestroyNotify) gtk_widget_unref);
+00374   gtk_widget_show (bn);
+00375   gtk_fixed_put (GTK_FIXED (fixed9), bn, 312, 144);
+00376   gtk_widget_set_uposition (bn, 312, 144);
+00377   gtk_widget_set_usize (bn, 35, 35);
+00378 
+00379   bb = gtk_button_new_with_label (_(<font 
class="stringliteral">"B\n"</font>));
+00380   gtk_widget_ref (bb);
+00381   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bb"</font>, bb,
+00382                             (GtkDestroyNotify) gtk_widget_unref);
+00383   gtk_widget_show (bb);
+00384   gtk_fixed_put (GTK_FIXED (fixed9), bb, 272, 144);
+00385   gtk_widget_set_uposition (bb, 272, 144);
+00386   gtk_widget_set_usize (bb, 35, 35);
+00387 
+00388   bv = gtk_button_new_with_label (_(<font 
class="stringliteral">"V\n"</font>));
+00389   gtk_widget_ref (bv);
+00390   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bv"</font>, bv,
+00391                             (GtkDestroyNotify) gtk_widget_unref);
+00392   gtk_widget_show (bv);
+00393   gtk_fixed_put (GTK_FIXED (fixed9), bv, 232, 144);
+00394   gtk_widget_set_uposition (bv, 232, 144);
+00395   gtk_widget_set_usize (bv, 35, 35);
+00396 
+00397   bc = gtk_button_new_with_label (_(<font 
class="stringliteral">"C\n"</font>));
+00398   gtk_widget_ref (bc);
+00399   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bc"</font>, bc,
+00400                             (GtkDestroyNotify) gtk_widget_unref);
+00401   gtk_widget_show (bc);
+00402   gtk_fixed_put (GTK_FIXED (fixed9), bc, 192, 144);
+00403   gtk_widget_set_uposition (bc, 192, 144);
+00404   gtk_widget_set_usize (bc, 35, 35);
+00405 
+00406   bx = gtk_button_new_with_label (_(<font 
class="stringliteral">"X\n"</font>));
+00407   gtk_widget_ref (bx);
+00408   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bx"</font>, bx,
+00409                             (GtkDestroyNotify) gtk_widget_unref);
+00410   gtk_widget_show (bx);
+00411   gtk_fixed_put (GTK_FIXED (fixed9), bx, 152, 144);
+00412   gtk_widget_set_uposition (bx, 152, 144);
+00413   gtk_widget_set_usize (bx, 35, 35);
+00414 
+00415   bz = gtk_button_new_with_label (_(<font 
class="stringliteral">"Z\n"</font>));
+00416   gtk_widget_ref (bz);
+00417   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bz"</font>, bz,
+00418                             (GtkDestroyNotify) gtk_widget_unref);
+00419   gtk_widget_show (bz);
+00420   gtk_fixed_put (GTK_FIXED (fixed9), bz, 112, 144);
+00421   gtk_widget_set_uposition (bz, 112, 144);
+00422   gtk_widget_set_usize (bz, 35, 35);
+00423 
+00424   mayormenor = gtk_button_new_with_label (_(<font 
class="stringliteral">"&gt;\n&lt;"</font>));
+00425   gtk_widget_ref (mayormenor);
+00426   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"mayormenor"</font>, mayormenor,
+00427                             (GtkDestroyNotify) gtk_widget_unref);
+00428   gtk_widget_show (mayormenor);
+00429   gtk_fixed_put (GTK_FIXED (fixed9), mayormenor, 72, 144);
+00430   gtk_widget_set_uposition (mayormenor, 72, 144);
+00431   gtk_widget_set_usize (mayormenor, 35, 35);
+00432 
+00433   cedilla = gtk_button_new_with_label (_(<font 
class="stringliteral">"Ç\n  }"</font>));
+00434   gtk_widget_ref (cedilla);
+00435   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"cedilla"</font>, cedilla,
+00436                             (GtkDestroyNotify) gtk_widget_unref);
+00437   gtk_widget_show (cedilla);
+00438   gtk_fixed_put (GTK_FIXED (fixed9), cedilla, 528, 104);
+00439   gtk_widget_set_uposition (cedilla, 528, 104);
+00440   gtk_widget_set_usize (cedilla, 35, 35);
+00441 
+00442   unlaut = gtk_button_new_with_label (_(<font 
class="stringliteral">"\"\n' {"</font>));
+00443   gtk_widget_ref (unlaut);
+00444   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"unlaut"</font>, unlaut,
+00445                             (GtkDestroyNotify) gtk_widget_unref);
+00446   gtk_widget_show (unlaut);
+00447   gtk_fixed_put (GTK_FIXED (fixed9), unlaut, 488, 104);
+00448   gtk_widget_set_uposition (unlaut, 488, 104);
+00449   gtk_widget_set_usize (unlaut, 35, 35);
+00450 
+00451   bnn = gtk_button_new_with_label (_(<font 
class="stringliteral">"Ñ\n"</font>));
+00452   gtk_widget_ref (bnn);
+00453   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bnn"</font>, bnn,
+00454                             (GtkDestroyNotify) gtk_widget_unref);
+00455   gtk_widget_show (bnn);
+00456   gtk_fixed_put (GTK_FIXED (fixed9), bnn, 448, 104);
+00457   gtk_widget_set_uposition (bnn, 448, 104);
+00458   gtk_widget_set_usize (bnn, 35, 35);
+00459 
+00460   bl = gtk_button_new_with_label (_(<font 
class="stringliteral">"L\n"</font>));
+00461   gtk_widget_ref (bl);
+00462   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bl"</font>, bl,
+00463                             (GtkDestroyNotify) gtk_widget_unref);
+00464   gtk_widget_show (bl);
+00465   gtk_fixed_put (GTK_FIXED (fixed9), bl, 408, 104);
+00466   gtk_widget_set_uposition (bl, 408, 104);
+00467   gtk_widget_set_usize (bl, 35, 35);
+00468 
+00469   bk = gtk_button_new_with_label (_(<font 
class="stringliteral">"K\n"</font>));
+00470   gtk_widget_ref (bk);
+00471   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bk"</font>, bk,
+00472                             (GtkDestroyNotify) gtk_widget_unref);
+00473   gtk_widget_show (bk);
+00474   gtk_fixed_put (GTK_FIXED (fixed9), bk, 368, 104);
+00475   gtk_widget_set_uposition (bk, 368, 104);
+00476   gtk_widget_set_usize (bk, 35, 35);
+00477 
+00478   bj = gtk_button_new_with_label (_(<font 
class="stringliteral">"J"</font>));
+00479   gtk_widget_ref (bj);
+00480   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bj"</font>, bj,
+00481                             (GtkDestroyNotify) gtk_widget_unref);
+00482   gtk_widget_show (bj);
+00483   gtk_fixed_put (GTK_FIXED (fixed9), bj, 328, 104);
+00484   gtk_widget_set_uposition (bj, 328, 104);
+00485   gtk_widget_set_usize (bj, 35, 35);
+00486 
+00487   bh = gtk_button_new_with_label (_(<font 
class="stringliteral">"H\n"</font>));
+00488   gtk_widget_ref (bh);
+00489   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bh"</font>, bh,
+00490                             (GtkDestroyNotify) gtk_widget_unref);
+00491   gtk_widget_show (bh);
+00492   gtk_fixed_put (GTK_FIXED (fixed9), bh, 288, 104);
+00493   gtk_widget_set_uposition (bh, 288, 104);
+00494   gtk_widget_set_usize (bh, 35, 35);
+00495 
+00496   bg = gtk_button_new_with_label (_(<font 
class="stringliteral">"G\n"</font>));
+00497   gtk_widget_ref (bg);
+00498   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bg"</font>, bg,
+00499                             (GtkDestroyNotify) gtk_widget_unref);
+00500   gtk_widget_show (bg);
+00501   gtk_fixed_put (GTK_FIXED (fixed9), bg, 248, 104);
+00502   gtk_widget_set_uposition (bg, 248, 104);
+00503   gtk_widget_set_usize (bg, 35, 35);
+00504 
+00505   bf = gtk_button_new_with_label (_(<font 
class="stringliteral">"F"</font>));
+00506   gtk_widget_ref (bf);
+00507   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bf"</font>, bf,
+00508                             (GtkDestroyNotify) gtk_widget_unref);
+00509   gtk_widget_show (bf);
+00510   gtk_fixed_put (GTK_FIXED (fixed9), bf, 208, 104);
+00511   gtk_widget_set_uposition (bf, 208, 104);
+00512   gtk_widget_set_usize (bf, 35, 35);
+00513 
+00514   bd = gtk_button_new_with_label (_(<font 
class="stringliteral">"D\n"</font>));
+00515   gtk_widget_ref (bd);
+00516   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bd"</font>, bd,
+00517                             (GtkDestroyNotify) gtk_widget_unref);
+00518   gtk_widget_show (bd);
+00519   gtk_fixed_put (GTK_FIXED (fixed9), bd, 168, 104);
+00520   gtk_widget_set_uposition (bd, 168, 104);
+00521   gtk_widget_set_usize (bd, 35, 35);
+00522 
+00523   bs = gtk_button_new_with_label (_(<font 
class="stringliteral">"S\n"</font>));
+00524   gtk_widget_ref (bs);
+00525   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bs"</font>, bs,
+00526                             (GtkDestroyNotify) gtk_widget_unref);
+00527   gtk_widget_show (bs);
+00528   gtk_fixed_put (GTK_FIXED (fixed9), bs, 128, 104);
+00529   gtk_widget_set_uposition (bs, 128, 104);
+00530   gtk_widget_set_usize (bs, 35, 35);
+00531 
+00532   ba = gtk_button_new_with_label (_(<font 
class="stringliteral">"A\n"</font>));
+00533   gtk_widget_ref (ba);
+00534   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ba"</font>, ba,
+00535                             (GtkDestroyNotify) gtk_widget_unref);
+00536   gtk_widget_show (ba);
+00537   gtk_fixed_put (GTK_FIXED (fixed9), ba, 88, 104);
+00538   gtk_widget_set_uposition (ba, 88, 104);
+00539   gtk_widget_set_usize (ba, 35, 35);
+00540   gtk_widget_add_accelerator (ba, <font 
class="stringliteral">"clicked"</font>, accel_group,
+00541                               GDK_A, 0,
+00542                               GTK_ACCEL_VISIBLE);
+00543 
+00544   asterisco = gtk_button_new_with_label (_(<font 
class="stringliteral">"*\n+ ]"</font>));
+00545   gtk_widget_ref (asterisco);
+00546   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"asterisco"</font>, asterisco,
+00547                             (GtkDestroyNotify) gtk_widget_unref);
+00548   gtk_widget_show (asterisco);
+00549   gtk_fixed_put (GTK_FIXED (fixed9), asterisco, 520, 64);
+00550   gtk_widget_set_uposition (asterisco, 520, 64);
+00551   gtk_widget_set_usize (asterisco, 35, 35);
+00552 
+00553   circunflej = gtk_button_new_with_label (_(<font 
class="stringliteral">"^\n` ["</font>));
+00554   gtk_widget_ref (circunflej);
+00555   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"circunflej"</font>, circunflej,
+00556                             (GtkDestroyNotify) gtk_widget_unref);
+00557   gtk_widget_show (circunflej);
+00558   gtk_fixed_put (GTK_FIXED (fixed9), circunflej, 480, 64);
+00559   gtk_widget_set_uposition (circunflej, 480, 64);
+00560   gtk_widget_set_usize (circunflej, 35, 35);
+00561 
+00562   bp = gtk_button_new_with_label (_(<font 
class="stringliteral">"P\n"</font>));
+00563   gtk_widget_ref (bp);
+00564   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bp"</font>, bp,
+00565                             (GtkDestroyNotify) gtk_widget_unref);
+00566   gtk_widget_show (bp);
+00567   gtk_fixed_put (GTK_FIXED (fixed9), bp, 440, 64);
+00568   gtk_widget_set_uposition (bp, 440, 64);
+00569   gtk_widget_set_usize (bp, 35, 35);
+00570 
+00571   bo = gtk_button_new_with_label (_(<font 
class="stringliteral">"O\n"</font>));
+00572   gtk_widget_ref (bo);
+00573   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bo"</font>, bo,
+00574                             (GtkDestroyNotify) gtk_widget_unref);
+00575   gtk_widget_show (bo);
+00576   gtk_fixed_put (GTK_FIXED (fixed9), bo, 400, 64);
+00577   gtk_widget_set_uposition (bo, 400, 64);
+00578   gtk_widget_set_usize (bo, 35, 35);
+00579 
+00580   bi = gtk_button_new_with_label (_(<font 
class="stringliteral">"I\n"</font>));
+00581   gtk_widget_ref (bi);
+00582   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bi"</font>, bi,
+00583                             (GtkDestroyNotify) gtk_widget_unref);
+00584   gtk_widget_show (bi);
+00585   gtk_fixed_put (GTK_FIXED (fixed9), bi, 360, 64);
+00586   gtk_widget_set_uposition (bi, 360, 64);
+00587   gtk_widget_set_usize (bi, 35, 35);
+00588 
+00589   bu = gtk_button_new_with_label (_(<font 
class="stringliteral">"U\n"</font>));
+00590   gtk_widget_ref (bu);
+00591   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bu"</font>, bu,
+00592                             (GtkDestroyNotify) gtk_widget_unref);
+00593   gtk_widget_show (bu);
+00594   gtk_fixed_put (GTK_FIXED (fixed9), bu, 320, 64);
+00595   gtk_widget_set_uposition (bu, 320, 64);
+00596   gtk_widget_set_usize (bu, 35, 35);
+00597 
+00598   by = gtk_button_new_with_label (_(<font 
class="stringliteral">"Y\n"</font>));
+00599   gtk_widget_ref (by);
+00600   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"by"</font>, by,
+00601                             (GtkDestroyNotify) gtk_widget_unref);
+00602   gtk_widget_show (by);
+00603   gtk_fixed_put (GTK_FIXED (fixed9), by, 280, 64);
+00604   gtk_widget_set_uposition (by, 280, 64);
+00605   gtk_widget_set_usize (by, 35, 35);
+00606 
+00607   bt = gtk_button_new_with_label (_(<font 
class="stringliteral">"T\n"</font>));
+00608   gtk_widget_ref (bt);
+00609   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bt"</font>, bt,
+00610                             (GtkDestroyNotify) gtk_widget_unref);
+00611   gtk_widget_show (bt);
+00612   gtk_fixed_put (GTK_FIXED (fixed9), bt, 240, 64);
+00613   gtk_widget_set_uposition (bt, 240, 64);
+00614   gtk_widget_set_usize (bt, 35, 35);
+00615 
+00616   br = gtk_button_new_with_label (_(<font 
class="stringliteral">"R\n"</font>));
+00617   gtk_widget_ref (br);
+00618   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"br"</font>, br,
+00619                             (GtkDestroyNotify) gtk_widget_unref);
+00620   gtk_widget_show (br);
+00621   gtk_fixed_put (GTK_FIXED (fixed9), br, 200, 64);
+00622   gtk_widget_set_uposition (br, 200, 64);
+00623   gtk_widget_set_usize (br, 35, 35);
+00624 
+00625   be = gtk_button_new_with_label (_(<font 
class="stringliteral">"E\n"</font>));
+00626   gtk_widget_ref (be);
+00627   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"be"</font>, be,
+00628                             (GtkDestroyNotify) gtk_widget_unref);
+00629   gtk_widget_show (be);
+00630   gtk_fixed_put (GTK_FIXED (fixed9), be, 160, 64);
+00631   gtk_widget_set_uposition (be, 160, 64);
+00632   gtk_widget_set_usize (be, 35, 35);
+00633 
+00634   bw = gtk_button_new_with_label (_(<font 
class="stringliteral">"W\n"</font>));
+00635   gtk_widget_ref (bw);
+00636   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bw"</font>, bw,
+00637                             (GtkDestroyNotify) gtk_widget_unref);
+00638   gtk_widget_show (bw);
+00639   gtk_fixed_put (GTK_FIXED (fixed9), bw, 120, 64);
+00640   gtk_widget_set_uposition (bw, 120, 64);
+00641   gtk_widget_set_usize (bw, 35, 35);
+00642 
+00643   bq = gtk_button_new_with_label (_(<font 
class="stringliteral">"Q\n"</font>));
+00644   gtk_widget_ref (bq);
+00645   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"bq"</font>, bq,
+00646                             (GtkDestroyNotify) gtk_widget_unref);
+00647   gtk_widget_show (bq);
+00648   gtk_fixed_put (GTK_FIXED (fixed9), bq, 80, 64);
+00649   gtk_widget_set_uposition (bq, 80, 64);
+00650   gtk_widget_set_usize (bq, 35, 35);
+00651 
+00652   button189 = gtk_button_new_with_label (_(<font 
class="stringliteral">"¿\n¡"</font>));
+00653   gtk_widget_ref (button189);
+00654   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button189"</font>, button189,
+00655                             (GtkDestroyNotify) gtk_widget_unref);
+00656   gtk_widget_show (button189);
+00657   gtk_fixed_put (GTK_FIXED (fixed9), button189, 496, 24);
+00658   gtk_widget_set_uposition (button189, 496, 24);
+00659   gtk_widget_set_usize (button189, 35, 35);
+00660 
+00661   button190 = gtk_button_new_with_label (_(<font 
class="stringliteral">"?\n'"</font>));
+00662   gtk_widget_ref (button190);
+00663   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button190"</font>, button190,
+00664                             (GtkDestroyNotify) gtk_widget_unref);
+00665   gtk_widget_show (button190);
+00666   gtk_fixed_put (GTK_FIXED (fixed9), button190, 456, 24);
+00667   gtk_widget_set_uposition (button190, 456, 24);
+00668   gtk_widget_set_usize (button190, 35, 35);
+00669 
+00670   button191 = gtk_button_new_with_label (_(<font 
class="stringliteral">"=\n0"</font>));
+00671   gtk_widget_ref (button191);
+00672   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button191"</font>, button191,
+00673                             (GtkDestroyNotify) gtk_widget_unref);
+00674   gtk_widget_show (button191);
+00675   gtk_fixed_put (GTK_FIXED (fixed9), button191, 416, 24);
+00676   gtk_widget_set_uposition (button191, 416, 24);
+00677   gtk_widget_set_usize (button191, 35, 35);
+00678 
+00679   button192 = gtk_button_new_with_label (_(<font 
class="stringliteral">")\n9"</font>));
+00680   gtk_widget_ref (button192);
+00681   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button192"</font>, button192,
+00682                             (GtkDestroyNotify) gtk_widget_unref);
+00683   gtk_widget_show (button192);
+00684   gtk_fixed_put (GTK_FIXED (fixed9), button192, 376, 24);
+00685   gtk_widget_set_uposition (button192, 376, 24);
+00686   gtk_widget_set_usize (button192, 35, 35);
+00687 
+00688   button193 = gtk_button_new_with_label (_(<font 
class="stringliteral">"!\n1 |"</font>));
+00689   gtk_widget_ref (button193);
+00690   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button193"</font>, button193,
+00691                             (GtkDestroyNotify) gtk_widget_unref);
+00692   gtk_widget_show (button193);
+00693   gtk_fixed_put (GTK_FIXED (fixed9), button193, 56, 24);
+00694   gtk_widget_set_uposition (button193, 56, 24);
+00695   gtk_widget_set_usize (button193, 35, 35);
+00696 
+00697   button194 = gtk_button_new_with_label (_(<font 
class="stringliteral">"/\n7"</font>));
+00698   gtk_widget_ref (button194);
+00699   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button194"</font>, button194,
+00700                             (GtkDestroyNotify) gtk_widget_unref);
+00701   gtk_widget_show (button194);
+00702   gtk_fixed_put (GTK_FIXED (fixed9), button194, 296, 24);
+00703   gtk_widget_set_uposition (button194, 296, 24);
+00704   gtk_widget_set_usize (button194, 35, 35);
+00705 
+00706   button195 = gtk_button_new_with_label (_(<font 
class="stringliteral">"&amp;\n6 ¬"</font>));
+00707   gtk_widget_ref (button195);
+00708   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button195"</font>, button195,
+00709                             (GtkDestroyNotify) gtk_widget_unref);
+00710   gtk_widget_show (button195);
+00711   gtk_fixed_put (GTK_FIXED (fixed9), button195, 256, 24);
+00712   gtk_widget_set_uposition (button195, 256, 24);
+00713   gtk_widget_set_usize (button195, 35, 35);
+00714 
+00715   button196 = gtk_button_new_with_label (_(<font 
class="stringliteral">"%\n5"</font>));
+00716   gtk_widget_ref (button196);
+00717   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button196"</font>, button196,
+00718                             (GtkDestroyNotify) gtk_widget_unref);
+00719   gtk_widget_show (button196);
+00720   gtk_fixed_put (GTK_FIXED (fixed9), button196, 216, 24);
+00721   gtk_widget_set_uposition (button196, 216, 24);
+00722   gtk_widget_set_usize (button196, 35, 35);
+00723 
+00724   button197 = gtk_button_new_with_label (_(<font 
class="stringliteral">"$\n4"</font>));
+00725   gtk_widget_ref (button197);
+00726   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button197"</font>, button197,
+00727                             (GtkDestroyNotify) gtk_widget_unref);
+00728   gtk_widget_show (button197);
+00729   gtk_fixed_put (GTK_FIXED (fixed9), button197, 176, 24);
+00730   gtk_widget_set_uposition (button197, 176, 24);
+00731   gtk_widget_set_usize (button197, 35, 35);
+00732 
+00733   button198 = gtk_button_new_with_label (_(<font 
class="stringliteral">"·\n3 #"</font>));
+00734   gtk_widget_ref (button198);
+00735   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button198"</font>, button198,
+00736                             (GtkDestroyNotify) gtk_widget_unref);
+00737   gtk_widget_show (button198);
+00738   gtk_fixed_put (GTK_FIXED (fixed9), button198, 136, 24);
+00739   gtk_widget_set_uposition (button198, 136, 24);
+00740   gtk_widget_set_usize (button198, 35, 35);
+00741 
+00742   button199 = gtk_button_new_with_label (_(<font 
class="stringliteral">"\"\n2 @"</font>));
+00743   gtk_widget_ref (button199);
+00744   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button199"</font>, button199,
+00745                             (GtkDestroyNotify) gtk_widget_unref);
+00746   gtk_widget_show (button199);
+00747   gtk_fixed_put (GTK_FIXED (fixed9), button199, 96, 24);
+00748   gtk_widget_set_uposition (button199, 96, 24);
+00749   gtk_widget_set_usize (button199, 35, 35);
+00750 
+00751   button200 = gtk_button_new_with_label (_(<font 
class="stringliteral">"(\n8"</font>));
+00752   gtk_widget_ref (button200);
+00753   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button200"</font>, button200,
+00754                             (GtkDestroyNotify) gtk_widget_unref);
+00755   gtk_widget_show (button200);
+00756   gtk_fixed_put (GTK_FIXED (fixed9), button200, 336, 24);
+00757   gtk_widget_set_uposition (button200, 336, 24);
+00758   gtk_widget_set_usize (button200, 35, 35);
+00759 
+00760   altgr = gtk_button_new_with_label (_(<font class="stringliteral">"Alt 
Gr"</font>));
+00761   gtk_widget_ref (altgr);
+00762   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"altgr"</font>, altgr,
+00763                             (GtkDestroyNotify) gtk_widget_unref);
+00764   gtk_widget_show (altgr);
+00765   gtk_fixed_put (GTK_FIXED (fixed9), altgr, 496, 184);
+00766   gtk_widget_set_uposition (altgr, 496, 184);
+00767   gtk_widget_set_usize (altgr, 62, 35);
+00768 
+00769   alt = gtk_button_new_with_label (_(<font 
class="stringliteral">"Alt"</font>));
+00770   gtk_widget_ref (alt);
+00771   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"alt"</font>, alt,
+00772                             (GtkDestroyNotify) gtk_widget_unref);
+00773   gtk_widget_show (alt);
+00774   gtk_fixed_put (GTK_FIXED (fixed9), alt, 80, 184);
+00775   gtk_widget_set_uposition (alt, 80, 184);
+00776   gtk_widget_set_usize (alt, 62, 35);
+00777 
+00778   button203 = gtk_button_new_with_label (_(<font 
class="stringliteral">"ª\nº \\"</font>));
+00779   gtk_widget_ref (button203);
+00780   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"button203"</font>, button203,
+00781                             (GtkDestroyNotify) gtk_widget_unref);
+00782   gtk_widget_show (button203);
+00783   gtk_fixed_put (GTK_FIXED (fixed9), button203, 16, 24);
+00784   gtk_widget_set_uposition (button203, 16, 24);
+00785   gtk_widget_set_usize (button203, 35, 35);
+00786 
+00787   controldcha = gtk_button_new_with_label (_(<font 
class="stringliteral">"Control"</font>));
+00788   gtk_widget_ref (controldcha);
+00789   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"controldcha"</font>, controldcha,
+00790                             (GtkDestroyNotify) gtk_widget_unref);
+00791   gtk_widget_show (controldcha);
+00792   gtk_fixed_put (GTK_FIXED (fixed9), controldcha, 560, 184);
+00793   gtk_widget_set_uposition (controldcha, 560, 184);
+00794   gtk_widget_set_usize (controldcha, 62, 35);
+00795 
+00796   controlizda = gtk_button_new_with_label (_(<font 
class="stringliteral">"Control"</font>));
+00797   gtk_widget_ref (controlizda);
+00798   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"controlizda"</font>, controlizda,
+00799                             (GtkDestroyNotify) gtk_widget_unref);
+00800   gtk_widget_show (controlizda);
+00801   gtk_fixed_put (GTK_FIXED (fixed9), controlizda, 16, 184);
+00802   gtk_widget_set_uposition (controlizda, 16, 184);
+00803   gtk_widget_set_usize (controlizda, 62, 35);
+00804 
+00805   espacio = gtk_button_new_with_label (<font 
class="stringliteral">""</font>);
+00806   gtk_widget_ref (espacio);
+00807   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"espacio"</font>, espacio,
+00808                             (GtkDestroyNotify) gtk_widget_unref);
+00809   gtk_widget_show (espacio);
+00810   gtk_fixed_put (GTK_FIXED (fixed9), espacio, 168, 184);
+00811   gtk_widget_set_uposition (espacio, 168, 184);
+00812   gtk_widget_set_usize (espacio, 297, 35);
+00813 
+00814   frame1 = gtk_frame_new (_(<font class="stringliteral">"Ayuda"</font>));
+00815   gtk_widget_ref (frame1);
+00816   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"frame1"</font>, frame1,
+00817                             (GtkDestroyNotify) gtk_widget_unref);
+00818   gtk_widget_show (frame1);
+00819   gtk_fixed_put (GTK_FIXED (fixed9), frame1, 632, 24);
+00820   gtk_widget_set_uposition (frame1, 632, 24);
+00821   gtk_widget_set_usize (frame1, 99, 195);
+00822   gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
+00823 
+00824   fixed10 = gtk_fixed_new ();
+00825   gtk_widget_ref (fixed10);
+00826   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"fixed10"</font>, fixed10,
+00827                             (GtkDestroyNotify) gtk_widget_unref);
+00828   gtk_widget_show (fixed10);
+00829   gtk_container_add (GTK_CONTAINER (frame1), fixed10);
+00830 
+00831   about = gtk_button_new_with_label (_(<font 
class="stringliteral">"Sobre..."</font>));
+00832   gtk_widget_ref (about);
+00833   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"about"</font>, about,
+00834                             (GtkDestroyNotify) gtk_widget_unref);
+00835   gtk_widget_show (about);
+00836   gtk_fixed_put (GTK_FIXED (fixed10), about, 16, 16);
+00837   gtk_widget_set_uposition (about, 16, 16);
+00838   gtk_widget_set_usize (about, 61, 22);
+00839 
+00840   ayuda = gtk_button_new_with_label (_(<font 
class="stringliteral">"Ayuda"</font>));
+00841   gtk_widget_ref (ayuda);
+00842   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"ayuda"</font>, ayuda,
+00843                             (GtkDestroyNotify) gtk_widget_unref);
+00844   gtk_widget_show (ayuda);
+00845   gtk_fixed_put (GTK_FIXED (fixed10), ayuda, 16, 48);
+00846   gtk_widget_set_uposition (ayuda, 16, 48);
+00847   gtk_widget_set_usize (ayuda, 61, 22);
+00848 
+00849   cerrar = gtk_button_new_with_label (_(<font 
class="stringliteral">"cerrar"</font>));
+00850   gtk_widget_ref (cerrar);
+00851   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"cerrar"</font>, cerrar,
+00852                             (GtkDestroyNotify) gtk_widget_unref);
+00853   gtk_widget_show (cerrar);
+00854   gtk_fixed_put (GTK_FIXED (fixed10), cerrar, 16, 136);
+00855   gtk_widget_set_uposition (cerrar, 16, 136);
+00856   gtk_widget_set_usize (cerrar, 61, 22);
+00857 
+00858   label1 = gtk_label_new (_(<font class="stringliteral">"  Equipo\n 
NEMESyS\n    "</font>));
+00859   gtk_widget_ref (label1);
+00860   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"label1"</font>, label1,
+00861                             (GtkDestroyNotify) gtk_widget_unref);
+00862   gtk_widget_show (label1);
+00863   gtk_fixed_put (GTK_FIXED (fixed10), label1, 8, 72);
+00864   gtk_widget_set_uposition (label1, 8, 72);
+00865   gtk_widget_set_usize (label1, 71, 56);
+00866   gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE);
+00867 
+00868   frame3 = gtk_frame_new (_(<font 
class="stringliteral">"Lección"</font>));
+00869   gtk_widget_ref (frame3);
+00870   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"frame3"</font>, frame3,
+00871                             (GtkDestroyNotify) gtk_widget_unref);
+00872   gtk_widget_show (frame3);
+00873   gtk_fixed_put (GTK_FIXED (fixed9), frame3, 738, 183);
+00874   gtk_widget_set_uposition (frame3, 738, 183);
+00875   gtk_widget_set_usize (frame3, 125, 36);
+00876 
+00877   hbox1 = gtk_hbox_new (FALSE, 0);
+00878   gtk_widget_ref (hbox1);
+00879   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"hbox1"</font>, hbox1,
+00880                             (GtkDestroyNotify) gtk_widget_unref);
+00881   gtk_widget_show (hbox1);
+00882   gtk_container_add (GTK_CONTAINER (frame3), hbox1);
+00883 
+00884   lecant = gtk_button_new_with_label (_(<font 
class="stringliteral">"Anterior  "</font>));
+00885   gtk_widget_ref (lecant);
+00886   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"lecant"</font>, lecant,
+00887                             (GtkDestroyNotify) gtk_widget_unref);
+00888   gtk_widget_show (lecant);
+00889   gtk_box_pack_start (GTK_BOX (hbox1), lecant, FALSE, FALSE, 0);
+00890   gtk_tooltips_set_tip (tooltips, lecant, _(<font 
class="stringliteral">"No disponible en esta versión"</font>), NULL);
+00891 
+00892   lecsig = gtk_button_new_with_label (_(<font 
class="stringliteral">"Siguente "</font>));
+00893   gtk_widget_ref (lecsig);
+00894   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"lecsig"</font>, lecsig,
+00895                             (GtkDestroyNotify) gtk_widget_unref);
+00896   gtk_widget_show (lecsig);
+00897   gtk_box_pack_start (GTK_BOX (hbox1), lecsig, FALSE, FALSE, 0);
+00898   gtk_tooltips_set_tip (tooltips, lecsig, _(<font 
class="stringliteral">"No disponible en esta versión"</font>), NULL);
+00899 
+00900   pixmap9 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window1, <font class="stringliteral">"mecatux.xpm"</font>);
+00901   gtk_widget_ref (pixmap9);
+00902   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"pixmap9"</font>, pixmap9,
+00903                             (GtkDestroyNotify) gtk_widget_unref);
+00904   gtk_widget_show (pixmap9);
+00905   gtk_fixed_put (GTK_FIXED (fixed9), pixmap9, 760, 24);
+00906   gtk_widget_set_uposition (pixmap9, 760, 24);
+00907   gtk_widget_set_usize (pixmap9, 80, 88);
+00908 
+00909   label14 = gtk_label_new (_(<font class="stringliteral">"En esta 
zona\nirán las ventanas\nde estadísticas."</font>));
+00910   gtk_widget_ref (label14);
+00911   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"label14"</font>, label14,
+00912                             (GtkDestroyNotify) gtk_widget_unref);
+00913   gtk_widget_show (label14);
+00914   gtk_fixed_put (GTK_FIXED (fixed9), label14, 752, 104);
+00915   gtk_widget_set_uposition (label14, 752, 104);
+00916   gtk_widget_set_usize (label14, 104, 64);
+00917   gtk_label_set_justify (GTK_LABEL (label14), GTK_JUSTIFY_LEFT);
+00918 
+00919   hseparator1 = gtk_hseparator_new ();
+00920   gtk_widget_ref (hseparator1);
+00921   gtk_object_set_data_full (GTK_OBJECT (window1), <font 
class="stringliteral">"hseparator1"</font>, hseparator1,
+00922                             (GtkDestroyNotify) gtk_widget_unref);
+00923   gtk_widget_show (hseparator1);
+00924   gtk_fixed_put (GTK_FIXED (fixed9), hseparator1, 24, 8);
+00925   gtk_widget_set_uposition (hseparator1, 24, 8);
+00926   gtk_widget_set_usize (hseparator1, 836, 16);
+00927 
+00928   gtk_signal_connect (GTK_OBJECT (window1), <font 
class="stringliteral">"key_press_event"</font>,
+00929                       GTK_SIGNAL_FUNC (on_window1_key_press_event),
+00930                       NULL);
+00931   gtk_signal_connect (GTK_OBJECT (abrir_lecci_n1), <font 
class="stringliteral">"activate"</font>,
+00932                       GTK_SIGNAL_FUNC (on_abrir_lecci_n1_activate),
+00933                       NULL);
+00934   gtk_signal_connect (GTK_OBJECT (salir1), <font 
class="stringliteral">"activate"</font>,
+00935                       GTK_SIGNAL_FUNC (on_salir1_activate),
+00936                       NULL);
+00937   gtk_signal_connect (GTK_OBJECT (editor_de_lecciones1), <font 
class="stringliteral">"activate"</font>,
+00938                       GTK_SIGNAL_FUNC (on_editor_de_lecciones1_activate),
+00939                       NULL);
+00940   gtk_signal_connect (GTK_OBJECT (sobre_mecagtk1), <font 
class="stringliteral">"activate"</font>,
+00941                       GTK_SIGNAL_FUNC (on_sobre_mecagtk1_activate),
+00942                       NULL);
+00943   gtk_signal_connect (GTK_OBJECT (ayuda2), <font 
class="stringliteral">"activate"</font>,
+00944                       GTK_SIGNAL_FUNC (on_ayuda2_activate),
+00945                       NULL);
+00946   gtk_signal_connect (GTK_OBJECT (about), <font 
class="stringliteral">"clicked"</font>,
+00947                       GTK_SIGNAL_FUNC (on_about_clicked),
+00948                       NULL);
+00949   gtk_signal_connect (GTK_OBJECT (ayuda), <font 
class="stringliteral">"clicked"</font>,
+00950                       GTK_SIGNAL_FUNC (on_ayuda_clicked),
+00951                       NULL);
+00952   gtk_signal_connect (GTK_OBJECT (cerrar), <font 
class="stringliteral">"clicked"</font>,
+00953                       GTK_SIGNAL_FUNC (on_cerrar_clicked),
+00954                       NULL);
+00955   gtk_signal_connect (GTK_OBJECT (lecant), <font 
class="stringliteral">"clicked"</font>,
+00956                       GTK_SIGNAL_FUNC (on_lecant_clicked),
+00957                       NULL);
+00958   gtk_signal_connect (GTK_OBJECT (lecsig), <font 
class="stringliteral">"clicked"</font>,
+00959                       GTK_SIGNAL_FUNC (on_lecsig_clicked),
+00960                       NULL);
+00961 
+00962   gtk_object_set_data (GTK_OBJECT (window1), <font 
class="stringliteral">"tooltips"</font>, tooltips);
+00963 
+00964   gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);
+00965 
+00966   <font class="keywordflow">return</font> window1;
+00967 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a1" doxytag="interfaz.c::create_window3"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_window3 (
+          </b></td>
+          <td valign="bottom"><b>
+void&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="interfaz_c-source.html#l00970">970</a> del archivo <a class="el" 
href="interfaz_c-source.html">interfaz.c</a>.
+<p>
+Referenciado por <a class="el" 
href="main_c-source.html#l00016">main</a>().<div class="fragment"><pre>00971 {
+00972   GtkWidget *window3;
+00973   GtkWidget *pixmap4;
+00974 
+00975   window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+00976   gtk_object_set_data (GTK_OBJECT (window3), <font 
class="stringliteral">"window3"</font>, window3);
+00977   gtk_window_set_title (GTK_WINDOW (window3), _(<font 
class="stringliteral">"Bienvenidos a MecaGTK"</font>));
+00978   gtk_window_set_position (GTK_WINDOW (window3), GTK_WIN_POS_CENTER);
+00979   gtk_window_set_modal (GTK_WINDOW (window3), TRUE);
+00980 
+00981   pixmap4 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window3, <font class="stringliteral">"mecalogo2.xpmwq"</font>);
+00982   gtk_widget_ref (pixmap4);
+00983   gtk_object_set_data_full (GTK_OBJECT (window3), <font 
class="stringliteral">"pixmap4"</font>, pixmap4,
+00984                             (GtkDestroyNotify) gtk_widget_unref);
+00985   gtk_widget_show (pixmap4);
+00986   gtk_container_add (GTK_CONTAINER (window3), pixmap4);
+00987 
+00988   gtk_signal_connect (GTK_OBJECT (window3), <font 
class="stringliteral">"enter_notify_event"</font>,
+00989                       GTK_SIGNAL_FUNC (on_window3_enter_notify_event),
+00990                       NULL);
+00991 
+00992   <font class="keywordflow">return</font> window3;
+00993 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a2" doxytag="interfaz.c::create_window5"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_window5 (
+          </b></td>
+          <td valign="bottom"><b>
+void&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="interfaz_c-source.html#l00996">996</a> del archivo <a class="el" 
href="interfaz_c-source.html">interfaz.c</a>.
+<p>
+Referenciado por <a class="el" 
href="retrollamadas_c-source.html#l00972">on_about_clicked</a>(), and <a 
class="el" 
href="retrollamadas_c-source.html#l01052">on_sobre_mecagtk1_activate</a>().<div 
class="fragment"><pre>00997 {
+00998   GtkWidget *window5;
+00999   GtkWidget *fixed13;
+01000   GtkWidget *notebook1;
+01001   GtkWidget *fixed14;
+01002   GtkWidget *label9;
+01003   GtkWidget *label12;
+01004   GtkWidget *label26;
+01005   GtkWidget *label6;
+01006   GtkWidget *scrolledwindow4;
+01007   GtkWidget *text3;
+01008   GtkWidget *label7;
+01009   GtkWidget *scrolledwindow5;
+01010   GtkWidget *text4;
+01011   GtkWidget *label8;
+01012   GtkWidget *fixed15;
+01013   GtkWidget *label11;
+01014   GtkWidget *label13;
+01015   GtkWidget *label10;
+01016   GtkWidget *aboutcerrar;
+01017   GtkWidget *pixmap10;
+01018   GtkWidget *pixmap7;
+01019 
+01020   window5 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+01021   gtk_object_set_data (GTK_OBJECT (window5), <font 
class="stringliteral">"window5"</font>, window5);
+01022   gtk_widget_set_usize (window5, 521, 440);
+01023   gtk_window_set_title (GTK_WINDOW (window5), _(<font 
class="stringliteral">"Acerca de MecaGTK"</font>));
+01024 
+01025   fixed13 = gtk_fixed_new ();
+01026   gtk_widget_ref (fixed13);
+01027   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"fixed13"</font>, fixed13,
+01028                             (GtkDestroyNotify) gtk_widget_unref);
+01029   gtk_widget_show (fixed13);
+01030   gtk_container_add (GTK_CONTAINER (window5), fixed13);
+01031 
+01032   notebook1 = gtk_notebook_new ();
+01033   gtk_widget_ref (notebook1);
+01034   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"notebook1"</font>, notebook1,
+01035                             (GtkDestroyNotify) gtk_widget_unref);
+01036   gtk_widget_show (notebook1);
+01037   gtk_fixed_put (GTK_FIXED (fixed13), notebook1, 8, 80);
+01038   gtk_widget_set_uposition (notebook1, 8, 80);
+01039   gtk_widget_set_usize (notebook1, 504, 288);
+01040   gtk_container_set_border_width (GTK_CONTAINER (notebook1), 2);
+01041 
+01042   fixed14 = gtk_fixed_new ();
+01043   gtk_widget_ref (fixed14);
+01044   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"fixed14"</font>, fixed14,
+01045                             (GtkDestroyNotify) gtk_widget_unref);
+01046   gtk_widget_show (fixed14);
+01047   gtk_container_add (GTK_CONTAINER (notebook1), fixed14);
+01048 
+01049   label9 = gtk_label_new (_(<font class="stringliteral">"Este programa 
está en fase de desarrollo.\n\nSi desea hacernos alguna sugerencia, contribuir 
de alguna forma o\nsimplemente comunicarnos su opinión sobre el programa, por 
favor\nno dude en ponerse en contacto con nosotros:"</font>));
+01050   gtk_widget_ref (label9);
+01051   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label9"</font>, label9,
+01052                             (GtkDestroyNotify) gtk_widget_unref);
+01053   gtk_widget_show (label9);
+01054   gtk_fixed_put (GTK_FIXED (fixed14), label9, 24, 24);
+01055   gtk_widget_set_uposition (label9, 24, 24);
+01056   gtk_widget_set_usize (label9, 424, 112);
+01057   gtk_label_set_justify (GTK_LABEL (label9), GTK_JUSTIFY_LEFT);
+01058 
+01059   label12 = gtk_label_new (_(<font 
class="stringliteral">"address@hidden"</font>));
+01060   gtk_widget_ref (label12);
+01061   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label12"</font>, label12,
+01062                             (GtkDestroyNotify) gtk_widget_unref);
+01063   gtk_widget_show (label12);
+01064   gtk_fixed_put (GTK_FIXED (fixed14), label12, 176, 144);
+01065   gtk_widget_set_uposition (label12, 176, 144);
+01066   gtk_widget_set_usize (label12, 126, 30);
+01067 
+01068   label26 = gtk_label_new (_(<font 
class="stringliteral">"http://www.es.gnu.org/Proyectos/Mecagtk";</font>));
+01069   gtk_widget_ref (label26);
+01070   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label26"</font>, label26,
+01071                             (GtkDestroyNotify) gtk_widget_unref);
+01072   gtk_widget_show (label26);
+01073   gtk_fixed_put (GTK_FIXED (fixed14), label26, 112, 168);
+01074   gtk_widget_set_uposition (label26, 112, 168);
+01075   gtk_widget_set_usize (label26, 272, 16);
+01076 
+01077   label6 = gtk_label_new (_(<font class="stringliteral">"Acerca 
de"</font>));
+01078   gtk_widget_ref (label6);
+01079   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label6"</font>, label6,
+01080                             (GtkDestroyNotify) gtk_widget_unref);
+01081   gtk_widget_show (label6);
+01082   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label6);
+01083 
+01084   scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL);
+01085   gtk_widget_ref (scrolledwindow4);
+01086   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"scrolledwindow4"</font>, scrolledwindow4,
+01087                             (GtkDestroyNotify) gtk_widget_unref);
+01088   gtk_widget_show (scrolledwindow4);
+01089   gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow4);
+01090   gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow4), 4);
+01091   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow4), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+01092 
+01093   text3 = gtk_text_new (NULL, NULL);
+01094   gtk_widget_ref (text3);
+01095   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"text3"</font>, text3,
+01096                             (GtkDestroyNotify) gtk_widget_unref);
+01097   gtk_widget_show (text3);
+01098   gtk_container_add (GTK_CONTAINER (scrolledwindow4), text3);
+01099   gtk_text_insert (GTK_TEXT (text3), NULL, NULL, NULL,
+01100                    _(<font class="stringliteral">"\nEste programa es 
fruto del esfuerzo combinado y desinteresado de varias\npersonas, sin cuya 
colaboración jamás hubiera sido posible su desarrollo.\n\nTodo lo bueno que 
pueda tener este programa se debe a:\n\t\n\t* Manuel Álvarez Cea : Verificó la 
portabilidad a otras plataformas en \n        sus ratos libres de cuartel.\n\t* 
David Rodríguez Sánchez : Sugirió cambiar el método de carga\n\tde las 
lecciones.\n        * A \"lain\" por encargarse del port a otros sistemas y por 
su apología del \n        software multiplataforma... ;o)\n\n\nTodos ellos son 
copropietarios del copyrigth (©) de este programa. (Según los\n términos de 
licencia GNU)\n\nUn agradecimiento especial a Simon Baldwin y el equipo de 
desarrollo de \nGNU Typist, programa de una calidad impecable y que nos ha 
servido de \ninspiación a la hora de desarrollar este programa. Somos a la vez 
vuestros\ndeudores y tal vez algún día vuestros competidores... ;^)\n\nTambién 
me gustaría expresar mi agradecimiento a mis hermanas. De ellas\nsurgió la idea 
de crear un programa de este tipo.\n\n\t\t\t\tLuis U.Rodríguez 
Paniagua\n\t"</font>), 1061);
+01101 
+01102   label7 = gtk_label_new (_(<font 
class="stringliteral">"Colaboradores"</font>));
+01103   gtk_widget_ref (label7);
+01104   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label7"</font>, label7,
+01105                             (GtkDestroyNotify) gtk_widget_unref);
+01106   gtk_widget_show (label7);
+01107   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label7);
+01108 
+01109   scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL);
+01110   gtk_widget_ref (scrolledwindow5);
+01111   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"scrolledwindow5"</font>, scrolledwindow5,
+01112                             (GtkDestroyNotify) gtk_widget_unref);
+01113   gtk_widget_show (scrolledwindow5);
+01114   gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow5);
+01115   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow5), 
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+01116 
+01117   text4 = gtk_text_new (NULL, NULL);
+01118   gtk_widget_ref (text4);
+01119   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"text4"</font>, text4,
+01120                             (GtkDestroyNotify) gtk_widget_unref);
+01121   gtk_widget_show (text4);
+01122   gtk_container_add (GTK_CONTAINER (scrolledwindow5), text4);
+01123   gtk_text_insert (GTK_TEXT (text4), NULL, NULL, NULL,
+01124                    _(<font class="stringliteral">"\nEste programa es 
software libre; puede distribuirlo y/o modificarlo bajo los\ntérminos de la 
Licencia Pública General GNU GPL publicada por la\nFree Software Foundation; 
para la versión 2 de la licencia, o ( a su gusto ) \ncualquier versión 
posterior.\n\nEl programa es distribuido con la esperanza de que sea útil, pero 
SIN\nNINGUNA GARANTÍA; incluso sin la garantía de COMERCIABILIDAD o de\nSERVIR 
PARA UN PROPÓSITO PARTICULAR. Para más detalles consulte\nel fichero 
LICENCIA.txt que se adjunta con esta distribución.\n\nDebería haber recibido 
una copia de esta Licencia Pública General GNU\njunto con este programa en el 
fichero arriba mencionado. Si no ha sido\nasí, escriba a :\n Free Software 
Foundation Inc.\n 675 Mass Ave, Cambridge, MA 02139, USA\n"</font>), 743);
+01125 
+01126   label8 = gtk_label_new (_(<font 
class="stringliteral">"Licencia"</font>));
+01127   gtk_widget_ref (label8);
+01128   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label8"</font>, label8,
+01129                             (GtkDestroyNotify) gtk_widget_unref);
+01130   gtk_widget_show (label8);
+01131   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label8);
+01132 
+01133   fixed15 = gtk_fixed_new ();
+01134   gtk_widget_ref (fixed15);
+01135   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"fixed15"</font>, fixed15,
+01136                             (GtkDestroyNotify) gtk_widget_unref);
+01137   gtk_widget_show (fixed15);
+01138   gtk_container_add (GTK_CONTAINER (notebook1), fixed15);
+01139 
+01140   label11 = gtk_label_new (_(<font class="stringliteral">"Me gustaría 
expresar mi más sincero agradecimiento  a la \nFSF/GNU España por las 
facilidades prestadas. Jamás \nhubiese sido posible un desarrollo decente sin 
su apoyo\ntécnico y humano. Especialmente quiero expresar mi 
público\nagradecimiento a Nacho (address@hidden) por su ilimitada\npaciencia 
para con un desarrollador novato como yo.\nSi estáis interesados en desarrollar 
software bajo términos GNU, \nno dudéis en poneros en contacto con 
ellos:"</font>));
+01141   gtk_widget_ref (label11);
+01142   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label11"</font>, label11,
+01143                             (GtkDestroyNotify) gtk_widget_unref);
+01144   gtk_widget_show (label11);
+01145   gtk_fixed_put (GTK_FIXED (fixed15), label11, 32, 8);
+01146   gtk_widget_set_uposition (label11, 32, 8);
+01147   gtk_widget_set_usize (label11, 416, 144);
+01148   gtk_label_set_justify (GTK_LABEL (label11), GTK_JUSTIFY_FILL);
+01149 
+01150   label13 = gtk_label_new (_(<font 
class="stringliteral">"http://www.es.gnu.org/";</font>));
+01151   gtk_widget_ref (label13);
+01152   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label13"</font>, label13,
+01153                             (GtkDestroyNotify) gtk_widget_unref);
+01154   gtk_widget_show (label13);
+01155   gtk_fixed_put (GTK_FIXED (fixed15), label13, 200, 168);
+01156   gtk_widget_set_uposition (label13, 200, 168);
+01157   gtk_widget_set_usize (label13, 141, 26);
+01158 
+01159   label10 = gtk_label_new (_(<font class="stringliteral">"FSF/GNU 
España"</font>));
+01160   gtk_widget_ref (label10);
+01161   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"label10"</font>, label10,
+01162                             (GtkDestroyNotify) gtk_widget_unref);
+01163   gtk_widget_show (label10);
+01164   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), 
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), label10);
+01165 
+01166   aboutcerrar = gtk_button_new_with_label (_(<font 
class="stringliteral">"Aceptar"</font>));
+01167   gtk_widget_ref (aboutcerrar);
+01168   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"aboutcerrar"</font>, aboutcerrar,
+01169                             (GtkDestroyNotify) gtk_widget_unref);
+01170   gtk_widget_show (aboutcerrar);
+01171   gtk_fixed_put (GTK_FIXED (fixed13), aboutcerrar, 152, 384);
+01172   gtk_widget_set_uposition (aboutcerrar, 152, 384);
+01173   gtk_widget_set_usize (aboutcerrar, 224, 32);
+01174 
+01175   pixmap10 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window5, <font class="stringliteral">"mecatux.xpm"</font>);
+01176   gtk_widget_ref (pixmap10);
+01177   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"pixmap10"</font>, pixmap10,
+01178                             (GtkDestroyNotify) gtk_widget_unref);
+01179   gtk_widget_show (pixmap10);
+01180   gtk_fixed_put (GTK_FIXED (fixed13), pixmap10, 0, 0);
+01181   gtk_widget_set_uposition (pixmap10, 0, 0);
+01182   gtk_widget_set_usize (pixmap10, 96, 88);
+01183 
+01184   pixmap7 = <a class="code" href="suporte_c.html#a6">create_pixmap</a> 
(window5, <font class="stringliteral">"mecalogo.xpm"</font>);
+01185   gtk_widget_ref (pixmap7);
+01186   gtk_object_set_data_full (GTK_OBJECT (window5), <font 
class="stringliteral">"pixmap7"</font>, pixmap7,
+01187                             (GtkDestroyNotify) gtk_widget_unref);
+01188   gtk_widget_show (pixmap7);
+01189   gtk_fixed_put (GTK_FIXED (fixed13), pixmap7, 56, 8);
+01190   gtk_widget_set_uposition (pixmap7, 56, 8);
+01191   gtk_widget_set_usize (pixmap7, 256, 56);
+01192 
+01193   gtk_signal_connect (GTK_OBJECT (aboutcerrar), <font 
class="stringliteral">"clicked"</font>,
+01194                       GTK_SIGNAL_FUNC (on_aboutcerrar_clicked),
+01195                       NULL);
+01196 
+01197   <font class="keywordflow">return</font> window5;
+01198 }
+</div></pre>    </td>
+  </tr>
+</table>
+<hr><address><small>Generado el Tue Mar 13 02:46:51 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/lectura_c-source.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/lectura_c-source.html
diff -N Proyectos/Mecagtk/doc_devel/lectura_c-source.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/lectura_c-source.html   3 Mar 2012 06:14:22 
-0000       1.1
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>lectura.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:48 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>lectura.c</h1><a href="lectura_c.html">Ir a la documentación de este 
archivo.</a><div class="fragment"><pre>00001 <font class="comment">/* 
+</font>00002 <font class="comment"> *
+</font>00003 <font class="comment"> * AUTOR: Luis
+</font>00004 <font class="comment"> * DESCRIPCIÓN: Este fichero se corresponde 
con el almacén de lecciones.
+</font>00005 <font class="comment"> *      He preferido incluir aquí las 
lecciones en vez de cargarlas desde ficheros
+</font>00006 <font class="comment"> *      porque no creo que se deban de 
insertar más lecciones a posteriori. Además
+</font>00007 <font class="comment"> *      si hubiese optado por 
ficheros,estos tendrían que estar formateados.
+</font>00008 <font class="comment"> *      Por ejemplo, para realizar todo 
aquello que hace este fichero necesitaría:
+</font>00009 <font class="comment"> *
+</font>00010 <font class="comment"> *              typedef struct{        -- 
Para los muy curiosos, verán que esta estructura
+</font>00011 <font class="comment"> *                      gchar *leccion;    
-- está implementada en 'lectura.h'. Esto quiere decir
+</font>00012 <font class="comment"> *                      gint  tamagno      
-- que lo que dicho es lo padecido... ;^)
+</font>00013 <font class="comment"> *              }mileccion
+</font>00014 <font class="comment"> *              
+</font>00015 <font class="comment"> * Además necesitaría crear un programa 
auxiliar que escribiese un fichero de structs
+</font>00016 <font class="comment"> * ... ¡¡¡ Para luego tener que leerlo otra 
vez desde aquí !!!
+</font>00017 <font class="comment"> *
+</font>00018 <font class="comment"> * De esta madera, las lecciones quedan 
almacenadas en un array de gchar. El tamaño
+</font>00019 <font class="comment"> * se pasa como parámetro por referencia y 
santaspascuas.
+</font>00020 <font class="comment"> *
+</font>00021 <font class="comment"> * INFORMACIÓN RCS:
+</font>00022 <font class="comment"> * $Author: ineiev $
+</font>00023 <font class="comment"> * $Id: lectura_c-source.html,v 1.1 
2012/03/03 06:14:22 ineiev Exp $
+</font>00024 <font class="comment"> * $Source: 
/sources/trans-coord/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/lectura_c-source.html,v
 $
+</font>00025 <font class="comment"> * $Header: 
/sources/trans-coord/trans-coord/graveyard/wwwes/Proyectos/Mecagtk/doc_devel/lectura_c-source.html,v
 1.1 2012/03/03 06:14:22 ineiev Exp $
+</font>00026 <font class="comment"> * 
+</font>00027 <font class="comment">*/</font>
+00028 <font class="preprocessor">#include "lectura.h"</font>
+<a name="l00029"></a><a class="code" href="lectura_c.html#a0">00029</a> <font 
class="keywordtype">char</font> *<a class="code" 
href="lectura_c.html#a0">CargaLeccion</a>(<font class="keywordtype">int</font> 
numero, <font class="keywordtype">int</font> *tamagno)<font class="keyword">
+</font>00030 <font class="keyword">                
+</font>00031 <font class="keyword"></font>{
+00032                 <font class="keyword">static</font> <font 
class="keywordtype">char</font> *tmp;
+00033 
+00034             <font class="keywordflow">switch</font>(numero)
+00035                 {
+00036                                 <font class="keywordflow">case</font> 1: 
tmp=<font class="stringliteral">"asdf jklñ asdf jklñ asdf jklñ asdf jklñ 
asdf"</font>; <font class="keywordflow">break</font>;
+00037                                 <font class="keywordflow">case</font> 2: 
tmp=<font class="stringliteral">"qwer uiop qwer uiop qwer uiop qwer uiop 
qwer"</font>; <font class="keywordflow">break</font>;
+00038                                 <font class="keywordflow">case</font> 3: 
tmp=<font class="stringliteral">"zxcv mnb djse ioei jfie fjeiwo jfww 
jewowjjd"</font>; <font class="keywordflow">break</font>;
+00039                                 <font class="keywordflow">case</font> 4: 
tmp=<font class="stringliteral">"áéíóú aeiou ÁÉÍÓÚ AEIOU áéíóú aeiou 
ÁÉÍÓÚ"</font>;<font class="keywordflow">break</font>;
+00040                                 <font 
class="keywordflow">default</font>: tmp=<font class="stringliteral">"Lección no 
disponible                       "</font>;
+00041                 }
+00042                 *tamagno=strlen(tmp);
+00043                 <font class="keywordflow">return</font> tmp;
+00044                 
+00045                         
+00046 }
+00047    
+00048 
+</div></pre><hr><address><small>Generado el Tue Mar 13 02:46:48 2001 para 
mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/lectura_c.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/lectura_c.html
diff -N Proyectos/Mecagtk/doc_devel/lectura_c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/lectura_c.html  3 Mar 2012 06:14:22 -0000       
1.1
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>lectura.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:51 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>lectura.c Archivo referencia</h1><code>#include "lectura.h"</code><br>
+
+<p>
+<a href="lectura_c-source.html">Ir al código fuente de este archivo.</a><table 
border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Funciones</h2></td></tr>
+<tr><td nowrap align=right valign=top>char*&nbsp;</td><td valign=bottom><a 
class="el" href="lectura_c.html#a0">CargaLeccion</a> (int numero, int 
*tamagno)</td></tr>
+</table>
+<hr><h2>Documentación de las funciones</h2>
+<a name="a0" doxytag="lectura.c::CargaLeccion"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+char * CargaLeccion (
+          </b></td>
+          <td valign="bottom"><b>
+int <em>numero</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+int * <em>tamagno</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="lectura_c-source.html#l00029">29</a> del archivo <a class="el" 
href="lectura_c-source.html">lectura.c</a>.
+<p>
+Referenciado por <a class="el" 
href="retrollamadas_c-source.html#l00024">on_window1_key_press_event</a>().<div 
class="fragment"><pre>00031 {
+00032                 <font class="keyword">static</font> <font 
class="keywordtype">char</font> *tmp;
+00033 
+00034             <font class="keywordflow">switch</font>(numero)
+00035                 {
+00036                                 <font class="keywordflow">case</font> 1: 
tmp=<font class="stringliteral">"asdf jklñ asdf jklñ asdf jklñ asdf jklñ 
asdf"</font>; <font class="keywordflow">break</font>;
+00037                                 <font class="keywordflow">case</font> 2: 
tmp=<font class="stringliteral">"qwer uiop qwer uiop qwer uiop qwer uiop 
qwer"</font>; <font class="keywordflow">break</font>;
+00038                                 <font class="keywordflow">case</font> 3: 
tmp=<font class="stringliteral">"zxcv mnb djse ioei jfie fjeiwo jfww 
jewowjjd"</font>; <font class="keywordflow">break</font>;
+00039                                 <font class="keywordflow">case</font> 4: 
tmp=<font class="stringliteral">"áéíóú aeiou ÁÉÍÓÚ AEIOU áéíóú aeiou 
ÁÉÍÓÚ"</font>;<font class="keywordflow">break</font>;
+00040                                 <font 
class="keywordflow">default</font>: tmp=<font class="stringliteral">"Lección no 
disponible                       "</font>;
+00041                 }
+00042                 *tamagno=strlen(tmp);
+00043                 <font class="keywordflow">return</font> tmp;
+00044                 
+00045                         
+00046 }
+</div></pre>    </td>
+  </tr>
+</table>
+<hr><address><small>Generado el Tue Mar 13 02:46:51 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/main_c-source.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/main_c-source.html
diff -N Proyectos/Mecagtk/doc_devel/main_c-source.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/main_c-source.html      3 Mar 2012 06:14:22 
-0000       1.1
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>main.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:48 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>main.c</h1><a href="main_c.html">Ir a la documentación de este 
archivo.</a><div class="fragment"><pre>00001 <font class="comment">/*
+</font>00002 <font class="comment"> * Initial main.c file generated by Glade. 
Edit as required.
+</font>00003 <font class="comment"> * Glade will not overwrite this file.
+</font>00004 <font class="comment"> */</font>
+00005 
+00006 <font class="preprocessor">#ifdef HAVE_CONFIG_H
+</font>00007 <font class="preprocessor"></font><font class="preprocessor">#  
include &lt;config.h&gt;</font>
+00008 <font class="preprocessor">#endif
+</font>00009 <font class="preprocessor"></font>
+00010 <font class="preprocessor">#include &lt;gtk/gtk.h&gt;</font>
+00011 
+00012 <font class="preprocessor">#include "interfaz.h"</font>
+00013 <font class="preprocessor">#include "suporte.h"</font>
+00014 
+00015 <font class="keywordtype">int</font>
+<a name="l00016"></a><a class="code" href="main_c.html#a0">00016</a> <a 
class="code" href="main_c.html#a0">main</a> (<font 
class="keywordtype">int</font> argc, <font class="keywordtype">char</font> 
*argv[])<font class="keyword">
+</font>00017 <font class="keyword"></font>{
+00018   GtkWidget *window1;
+00019   GtkWidget *window3;
+00020 
+00021 <font class="preprocessor">#ifdef ENABLE_NLS
+</font>00022 <font class="preprocessor"></font>  bindtextdomain (PACKAGE, 
PACKAGE_LOCALE_DIR);
+00023   textdomain (PACKAGE);
+00024 <font class="preprocessor">#endif
+</font>00025 <font class="preprocessor"></font>
+00026   gtk_set_locale ();
+00027   gtk_init (&amp;argc, &amp;argv);
+00028 
+00029   <a class="code" href="suporte_c.html#a5">add_pixmap_directory</a> 
(PACKAGE_DATA_DIR <font class="stringliteral">"/pixmaps"</font>);
+00030   <a class="code" href="suporte_c.html#a5">add_pixmap_directory</a> 
(PACKAGE_SOURCE_DIR <font class="stringliteral">"/pixmaps"</font>);
+00031 
+00032   <font class="comment">/*
+</font>00033 <font class="comment">   * The following code was added by Glade 
to create one of each component
+</font>00034 <font class="comment">   * (except popup menus), just so that you 
see something after building
+</font>00035 <font class="comment">   * the project. Delete any components 
that you don't want shown initially.
+</font>00036 <font class="comment">   */</font>
+00037   window1 = <a class="code" href="interfaz_c.html#a0">create_window1</a> 
();
+00038   gtk_widget_show (window1);
+00039   window3 = <a class="code" href="interfaz_c.html#a1">create_window3</a> 
();
+00040   gtk_widget_show (window3);
+00041 
+00042   gtk_main ();
+00043   <font class="keywordflow">return</font> 0;
+00044 }
+00045 
+</div></pre><hr><address><small>Generado el Tue Mar 13 02:46:48 2001 para 
mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/main_c.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/main_c.html
diff -N Proyectos/Mecagtk/doc_devel/main_c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/main_c.html     3 Mar 2012 06:14:23 -0000       
1.1
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>main.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:51 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>main.c Archivo referencia</h1><code>#include 
&lt;gtk/gtk.h&gt;</code><br>
+<code>#include "interfaz.h"</code><br>
+<code>#include "suporte.h"</code><br>
+
+<p>
+<a href="main_c-source.html">Ir al código fuente de este archivo.</a><table 
border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Funciones</h2></td></tr>
+<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a 
class="el" href="main_c.html#a0">main</a> (int argc, char *argv[])</td></tr>
+</table>
+<hr><h2>Documentación de las funciones</h2>
+<a name="a0" doxytag="main.c::main"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+int main (
+          </b></td>
+          <td valign="bottom"><b>
+int <em>argc</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+char * <em>argv</em>[]&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" href="main_c-source.html#l00016">16</a> 
del archivo <a class="el" href="main_c-source.html">main.c</a>.<div 
class="fragment"><pre>00017 {
+00018   GtkWidget *window1;
+00019   GtkWidget *window3;
+00020 
+00021 <font class="preprocessor">#ifdef ENABLE_NLS
+</font>00022 <font class="preprocessor"></font>  bindtextdomain (PACKAGE, 
PACKAGE_LOCALE_DIR);
+00023   textdomain (PACKAGE);
+00024 <font class="preprocessor">#endif
+</font>00025 <font class="preprocessor"></font>
+00026   gtk_set_locale ();
+00027   gtk_init (&amp;argc, &amp;argv);
+00028 
+00029   <a class="code" href="suporte_c.html#a5">add_pixmap_directory</a> 
(PACKAGE_DATA_DIR <font class="stringliteral">"/pixmaps"</font>);
+00030   <a class="code" href="suporte_c.html#a5">add_pixmap_directory</a> 
(PACKAGE_SOURCE_DIR <font class="stringliteral">"/pixmaps"</font>);
+00031 
+00032   <font class="comment">/*
+</font>00033 <font class="comment">   * The following code was added by Glade 
to create one of each component
+</font>00034 <font class="comment">   * (except popup menus), just so that you 
see something after building
+</font>00035 <font class="comment">   * the project. Delete any components 
that you don't want shown initially.
+</font>00036 <font class="comment">   */</font>
+00037   window1 = <a class="code" href="interfaz_c.html#a0">create_window1</a> 
();
+00038   gtk_widget_show (window1);
+00039   window3 = <a class="code" href="interfaz_c.html#a1">create_window3</a> 
();
+00040   gtk_widget_show (window3);
+00041 
+00042   gtk_main ();
+00043   <font class="keywordflow">return</font> 0;
+00044 }
+</div></pre>    </td>
+  </tr>
+</table>
+<hr><address><small>Generado el Tue Mar 13 02:46:51 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/null.gif
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/null.gif
diff -N Proyectos/Mecagtk/doc_devel/null.gif
Binary files /dev/null and /tmp/cvsIipV3E differ

Index: Proyectos/Mecagtk/doc_devel/retrollamadas_c-source.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/retrollamadas_c-source.html
diff -N Proyectos/Mecagtk/doc_devel/retrollamadas_c-source.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/retrollamadas_c-source.html     3 Mar 2012 
06:14:23 -0000       1.1
@@ -0,0 +1,1193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>retrollamadas.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:48 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>retrollamadas.c</h1><a href="retrollamadas_c.html">Ir a la 
documentación de este archivo.</a><div class="fragment"><pre>00001 <font 
class="preprocessor">#ifdef HAVE_CONFIG_H
+</font>00002 <font class="preprocessor"></font><font class="preprocessor">#  
include &lt;config.h&gt;</font>
+00003 <font class="preprocessor">#endif
+</font>00004 <font class="preprocessor"></font>
+00005 <font class="preprocessor">#include &lt;gtk/gtk.h&gt;</font>
+00006 
+00007 <font class="preprocessor">#include "retrollamadas.h"</font>
+00008 <font class="preprocessor">#include "interfaz.h"</font>
+00009 <font class="preprocessor">#include "suporte.h"</font>
+00010 <font class="preprocessor">#include "lectura.h"</font>
+00011 
+00012 
+<a name="l00013"></a><a class="code" href="retrollamadas_c.html#a0">00013</a> 
gint leccion_insertada=0;               <font class="comment">// ¿Se insertó 
alguna lección?</font>
+<a name="l00014"></a><a class="code" href="retrollamadas_c.html#a1">00014</a> 
gint max_lecciones=10;                  <font class="comment">// Número máximo 
de lecciones</font>
+<a name="l00015"></a><a class="code" href="retrollamadas_c.html#a2">00015</a> 
gint longitud;                  <font class="comment">// Tamaño de la 
lección</font>
+<a name="l00016"></a><a class="code" href="retrollamadas_c.html#a3">00016</a> 
gint leccion_a_insertar=1;              <font class="comment">// Lección por 
defecto.</font>
+<a name="l00017"></a><a class="code" href="retrollamadas_c.html#a4">00017</a> 
gchar *leccionactual;           <font class="comment">// Puntero a la lección 
actual.</font>
+<a name="l00018"></a><a class="code" href="retrollamadas_c.html#a5">00018</a> 
gchar caracter_actual;                  <font class="comment">// Apuntador al 
caracter actual</font>
+<a name="l00019"></a><a class="code" href="retrollamadas_c.html#a6">00019</a> 
gint  contador_caracter=0;      <font class="comment">// Cuenta letras.</font>
+00020 <font class="comment">// 
*---------------------------------------------*/</font>
+<a name="l00021"></a><a class="code" href="retrollamadas_c.html#a7">00021</a> 
gint acento=0;
+00022 
+00023 gboolean
+<a name="l00024"></a><a class="code" href="retrollamadas_c.html#a8">00024</a> 
<a class="code" href="retrollamadas_c.html#a8">on_window1_key_press_event</a>   
          (GtkWidget       *widget,
+00025                                         GdkEventKey     *event,
+00026                                         gpointer         user_data)<font 
class="keyword">
+</font>00027 <font class="keyword"></font>{
+00028    GtkWidget *miboton;
+00029    GtkWidget *mitexto;
+00030    GtkWidget *leccion;
+00031    GdkColormap *mapacolor;
+00032    GdkColor error;
+00033    GdkFont *fuente;
+00034   leccion = <a class="code" href="suporte_c.html#a4">lookup_widget</a> 
(GTK_WIDGET (widget), <font class="stringliteral">"text1"</font>); 
+00035   mitexto = <a class="code" href="suporte_c.html#a4">lookup_widget</a> 
(GTK_WIDGET (widget), <font class="stringliteral">"text2"</font>);
+00036   mapacolor=gdk_colormap_get_system();
+00037   <font class="keywordflow">if</font> (leccion_insertada==0) 
+00038   { 
+00039     error.red = 0;
+00040     error.green = 0;
+00041     error.blue =0xff00;  
+00042         leccionactual=<a class="code" 
href="lectura_c.html#a0">CargaLeccion</a>(leccion_a_insertar,&amp;longitud);
+00043         caracter_actual=leccionactual[contador_caracter];
+00044         leccion_insertada=1;
+00045         gtk_text_backward_delete(GTK_TEXT (leccion),500);
+00046     fuente = gdk_font_load(<font 
class="stringliteral">"-adobe-courier-bold-r-*-*-25-*-*-*-*-*-*-*"</font>);     
  
+00047         gtk_text_insert (GTK_TEXT (leccion),fuente,&amp;error,NULL, 
<font class="stringliteral">"\n\nLección: \n\n\n"</font>, 14);
+00048         <font class="comment">/*Modificar por acá para insertar el 
número de lección */</font>
+00049     fuente = gdk_font_load(<font 
class="stringliteral">"-adobe-courier-bold-r-*-*-18-*-*-*-*-*-*-*"</font>);
+00050     gtk_text_insert (GTK_TEXT 
(leccion),fuente,&amp;error,NULL,leccionactual, longitud);
+00051     gtk_text_insert (GTK_TEXT (leccion),fuente,&amp;error,NULL, <font 
class="stringliteral">"\n\n"</font>,2);
+00052   }
+00053   error.red = 0xff00;
+00054   error.green = 0;
+00055   error.blue =0;    
+00056   fuente = gdk_font_load(<font 
class="stringliteral">"-adobe-courier-bold-r-*-*-18-*-*-*-*-*-*-*"</font>);
+00057   <font class="comment">/* ¿Qué carajo pasa aquí? */</font>
+00058   <font class="comment">/*
+</font>00059 <font class="comment">   * Nada, que el servidor de sonido de 
GNOME
+</font>00060 <font class="comment">   * no me hace ni puñetero caso, oye
+</font>00061 <font class="comment">   * De todas formas, como no se usará 
GNOME, esto habrá que cambiarlo o dejarlo
+</font>00062 <font class="comment">   *
+</font>00063 <font class="comment">   * lain: ¿Qué te parecería que pusiésemos 
esl sonido en un módulo aparte (llamadas IOCTL)
+</font>00064 <font class="comment">   * y aquí tan sólo llamásemos a una 
función genérica como reproduce_sonido()?
+</font>00065 <font class="comment">   * 
+</font>00066 <font class="comment">   * 
+</font>00067 <font class="comment">   */</font>
+00068   <font class="comment">/*gnome_sound_init("localhost");*/</font>
+00069   <font class="comment">/*gnome_sound_play("pop.wav");*/</font>
+00070   <font class="comment">/*gnome_sound_shutdown();*/</font>
+00071   <font class="comment">/* Ein? */</font>
+00072   <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'d'</font> || event-&gt;keyval == <font 
class="charliteral">'D'</font>)
+00073           {
+00074 
+00075                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bd"</font>);
+00076             gtk_widget_grab_focus (miboton);
+00077         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00078 
+00079         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'d'</font>)
+00080                     <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00081                           gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
+00082                                 <font class="keywordflow">else</font>
+00083                           gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"d"</font>,1);
+00084         <font class="keywordflow">else</font>
+00085                                 <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00086                                                 gtk_text_insert 
(GTK_TEXT (mitexto),fuente,&amp;error,NULL,<font 
class="stringliteral">"*"</font>,1);
+00087                                 <font class="keywordflow">else</font>
+00088                                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"D"</font>, 1); 
+00089                 <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00090                 contador_caracter = contador_caracter +1;
+00091         <font class="keywordflow">else</font>
+00092                 contador_caracter = 0;
+00093                         caracter_actual=leccionactual[contador_caracter];
+00094                                            }                       
+00095 
+00096 <font class="comment">/*****************************************/</font>
+00097 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'q'</font> || event-&gt;keyval == <font 
class="charliteral">'Q'</font>)
+00098           {
+00099 
+00100                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bq"</font>);
+00101             gtk_widget_grab_focus (miboton);
+00102         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00103                 <font class="keywordflow">if</font> (event-&gt;keyval == 
<font class="charliteral">'q'</font>)
+00104                         <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)   
+00105                 gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00106                     <font class="keywordflow">else</font>
+00107                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"q"</font>,1);          
             
+00108         <font class="keywordflow">else</font>
+00109                                 <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00110                                                 gtk_text_insert 
(GTK_TEXT (mitexto),fuente,&amp;error,NULL,<font 
class="stringliteral">"*"</font>,1);
+00111                                 <font class="keywordflow">else</font>
+00112                                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"Q"</font>, 1);
+00113         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00114                                 contador_caracter = contador_caracter +1;
+00115                 <font class="keywordflow">else</font>
+00116                                 contador_caracter = 0;
+00117                 caracter_actual=leccionactual[contador_caracter];
+00118            }
+00119 
+00120 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'w'</font> || event-&gt;keyval == <font 
class="charliteral">'W'</font>)
+00121           {
+00122 
+00123                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bw"</font>);
+00124             gtk_widget_grab_focus (miboton);
+00125         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00126         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'w'</font>)
+00127             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00128             gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);    
+00129                         <font class="keywordflow">else</font>
+00130             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"w"</font>,1);
+00131         <font class="keywordflow">else</font>
+00132                                 <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00133                                                 gtk_text_insert 
(GTK_TEXT(mitexto),fuente,&amp;error,NULL,<font 
class="stringliteral">"*"</font>,1);
+00134                                 <font class="keywordflow">else</font>
+00135                                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"W"</font>, 1);       
+00136             <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00137             contador_caracter = contador_caracter +1;
+00138                 <font class="keywordflow">else</font>
+00139                     contador_caracter = 0;
+00140                     caracter_actual=leccionactual[contador_caracter];
+00141           }                       
+00142 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'e'</font> || event-&gt;keyval == <font 
class="charliteral">'E'</font>)
+00143           {
+00144 
+00145                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"be"</font>);
+00146             gtk_widget_grab_focus (miboton);
+00147         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00148  <font class="keywordflow">if</font> (acento == 1)
+00149         {
+00150           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'e'</font>)
+00151             <font class="keywordflow">if</font> (<font 
class="charliteral">'é'</font> != caracter_actual)
+00152              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00153             <font class="keywordflow">else</font>
+00154             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"é"</font>,1);
+00155          <font class="keywordflow">else</font>
+00156             <font class="keywordflow">if</font> (<font 
class="charliteral">'É'</font> != caracter_actual)
+00157               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00158             <font class="keywordflow">else</font>
+00159              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"É"</font>, 1);
+00160          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00161                 contador_caracter = contador_caracter +1;
+00162          <font class="keywordflow">else</font>
+00163                  contador_caracter = 0;
+00164          caracter_actual=leccionactual[contador_caracter];
+00165          acento=0;
+00166         }
+00167         <font class="keywordflow">else</font>
+00168         {          
+00169          <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'e'</font>)
+00170              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00171                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
 
+00172                          <font class="keywordflow">else</font>
+00173                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"e"</font>,1);
+00174                   <font class="keywordflow">else</font>
+00175                          <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00176                                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL,<font class="stringliteral">"*"</font>,1);
+00177                          <font class="keywordflow">else</font>
+00178                              gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"E"</font>, 1); 
+00179                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00180                      contador_caracter = contador_caracter +1;
+00181                   <font class="keywordflow">else</font>
+00182                               contador_caracter = 0;
+00183                               
caracter_actual=leccionactual[contador_caracter];
+00184           }            
+00185 }       
+00186 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'r'</font> || event-&gt;keyval == <font 
class="charliteral">'R'</font>)
+00187           {
+00188 
+00189                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"br"</font>);
+00190             gtk_widget_grab_focus (miboton);
+00191         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00192                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'r'</font>)
+00193                       <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00194                           gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00195                           <font class="keywordflow">else</font>
+00196                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"r"</font>,1);
+00197          <font class="keywordflow">else</font>
+00198                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00199                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00200                         <font class="keywordflow">else</font>
+00201                                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"R"</font>, 1);   
+00202                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00203                 contador_caracter = contador_caracter +1;
+00204          <font class="keywordflow">else</font>
+00205                 contador_caracter = 0;
+00206                          
caracter_actual=leccionactual[contador_caracter];
+00207            }                       
+00208 
+00209 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'t'</font> || event-&gt;keyval == <font 
class="charliteral">'T'</font>)
+00210           {
+00211 
+00212                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bt"</font>);
+00213             gtk_widget_grab_focus (miboton);
+00214         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00215                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'t'</font>)
+00216            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00217              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);   
+00218                    <font class="keywordflow">else</font>
+00219              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"t"</font>,1);
+00220          <font class="keywordflow">else</font>
+00221                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00222                 gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00223                         <font class="keywordflow">else</font>
+00224                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"T"</font>, 1);     
+00225                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00226                     contador_caracter = contador_caracter +1;
+00227                  <font class="keywordflow">else</font>
+00228                         contador_caracter = 0;
+00229                     caracter_actual=leccionactual[contador_caracter];
+00230            }                       
+00231 
+00232 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'y'</font> || event-&gt;keyval == <font 
class="charliteral">'Y'</font>)
+00233           {
+00234 
+00235                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"by"</font>);
+00236             gtk_widget_grab_focus (miboton);
+00237         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00238                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'y'</font>)
+00239             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00240              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1); 
+00241                         <font class="keywordflow">else</font>
+00242              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"y"</font>,1);
+00243          <font class="keywordflow">else</font>
+00244                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00245             gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);  
+00246                         <font class="keywordflow">else</font> 
+00247                                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"Y"</font>, 1);     
+00248                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00249              contador_caracter = contador_caracter +1;
+00250          <font class="keywordflow">else</font>
+00251              contador_caracter = 0;
+00252              caracter_actual=leccionactual[contador_caracter];
+00253           }                       
+00254 
+00255 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'u'</font> || event-&gt;keyval == <font 
class="charliteral">'U'</font>)
+00256           {
+00257 
+00258                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bu"</font>);
+00259             gtk_widget_grab_focus (miboton);
+00260         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00261  <font class="keywordflow">if</font> (acento == 1)
+00262         {
+00263           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'u'</font>)
+00264             <font class="keywordflow">if</font> (<font 
class="charliteral">'ú'</font> != caracter_actual)
+00265              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00266             <font class="keywordflow">else</font>
+00267             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"ú"</font>,1);
+00268          <font class="keywordflow">else</font>
+00269             <font class="keywordflow">if</font> (<font 
class="charliteral">'Ú'</font> != caracter_actual)
+00270               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00271             <font class="keywordflow">else</font>
+00272              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Ú"</font>, 1);
+00273          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00274                 contador_caracter = contador_caracter +1;
+00275          <font class="keywordflow">else</font>
+00276                  contador_caracter = 0;
+00277          caracter_actual=leccionactual[contador_caracter];
+00278          acento=0;
+00279         }
+00280         <font class="keywordflow">else</font>
+00281         {          
+00282                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'u'</font>)
+00283             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00284                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00285                         <font class="keywordflow">else</font>
+00286                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"u"</font>,1);
+00287          <font class="keywordflow">else</font>
+00288                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00289                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00290           <font class="keywordflow">else</font>  
+00291                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"U"</font>, 1);   
  
+00292                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00293                 contador_caracter = contador_caracter +1;
+00294                  <font class="keywordflow">else</font>
+00295                  contador_caracter = 0;
+00296                          
caracter_actual=leccionactual[contador_caracter];
+00297            }       
+00298 }                
+00299 
+00300 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'i'</font> || event-&gt;keyval == <font 
class="charliteral">'I'</font>)
+00301           {
+00302 
+00303                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bi"</font>);
+00304             gtk_widget_grab_focus (miboton);
+00305         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00306  <font class="keywordflow">if</font> (acento == 1)
+00307         {
+00308           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'i'</font>)
+00309             <font class="keywordflow">if</font> (<font 
class="charliteral">'í'</font> != caracter_actual)
+00310              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00311             <font class="keywordflow">else</font>
+00312             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"í"</font>,1);
+00313          <font class="keywordflow">else</font>
+00314             <font class="keywordflow">if</font> (<font 
class="charliteral">'Í'</font> != caracter_actual)
+00315               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00316             <font class="keywordflow">else</font>
+00317              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Í"</font>, 1);
+00318          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00319                 contador_caracter = contador_caracter +1;
+00320          <font class="keywordflow">else</font>
+00321                  contador_caracter = 0;
+00322          caracter_actual=leccionactual[contador_caracter];
+00323          acento=0;
+00324         }
+00325         <font class="keywordflow">else</font>
+00326         {          
+00327                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'i'</font>)
+00328             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00329              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);   
+00330                         <font class="keywordflow">else</font>
+00331              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"i"</font>,1);
+00332               <font class="keywordflow">else</font>
+00333                    <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00334               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00335            <font class="keywordflow">else</font>  
+00336              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"I"</font>, 1);  
+00337                          <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00338                  contador_caracter = contador_caracter +1;
+00339                  <font class="keywordflow">else</font>
+00340                  contador_caracter = 0;
+00341                          
caracter_actual=leccionactual[contador_caracter];
+00342        }           
+00343 }            
+00344 
+00345 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'o'</font> || event-&gt;keyval == <font 
class="charliteral">'O'</font>)
+00346           {
+00347 
+00348                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bo"</font>);
+00349             gtk_widget_grab_focus (miboton);
+00350         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00351  <font class="keywordflow">if</font> (acento == 1)
+00352         {
+00353           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'o'</font>)
+00354             <font class="keywordflow">if</font> (<font 
class="charliteral">'ó'</font> != caracter_actual)
+00355              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00356             <font class="keywordflow">else</font>
+00357             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"ó"</font>,1);
+00358          <font class="keywordflow">else</font>
+00359             <font class="keywordflow">if</font> (<font 
class="charliteral">'Ó'</font> != caracter_actual)
+00360               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00361             <font class="keywordflow">else</font>
+00362              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Ó"</font>, 1);
+00363          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00364                 contador_caracter = contador_caracter +1;
+00365          <font class="keywordflow">else</font>
+00366                  contador_caracter = 0;
+00367          caracter_actual=leccionactual[contador_caracter];
+00368          acento=0;
+00369         }
+00370         <font class="keywordflow">else</font>
+00371         {          
+00372                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'o'</font>)
+00373           <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00374              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);     
+00375                   <font class="keywordflow">else</font>
+00376              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"o"</font>,1);
+00377          <font class="keywordflow">else</font>
+00378                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00379              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00380           <font class="keywordflow">else</font>  
+00381                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"O"</font>, 1);   
 
+00382                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00383               contador_caracter = contador_caracter +1;
+00384                  <font class="keywordflow">else</font>
+00385               contador_caracter = 0;
+00386                  caracter_actual=leccionactual[contador_caracter];
+00387        }                       
+00388 }
+00389 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'p'</font> || event-&gt;keyval == <font 
class="charliteral">'P'</font>)
+00390           {
+00391 
+00392                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bp"</font>);
+00393             gtk_widget_grab_focus (miboton);
+00394         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00395                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'p'</font>)
+00396              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00397                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00398                          <font class="keywordflow">else</font>
+00399                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"p"</font>,1);
+00400          <font class="keywordflow">else</font>
+00401                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00402              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00403           <font class="keywordflow">else</font>  
+00404                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"P"</font>, 1);   
 
+00405                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00406                contador_caracter = contador_caracter +1;
+00407          <font class="keywordflow">else</font>
+00408                contador_caracter = 0;
+00409                  caracter_actual=leccionactual[contador_caracter];
+00410        }                       
+00411 
+00412 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'a'</font> || event-&gt;keyval == <font 
class="charliteral">'A'</font>)
+00413           {
+00414 
+00415                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"ba"</font>);
+00416             gtk_widget_grab_focus (miboton);
+00417         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00418         <font class="keywordflow">if</font> (acento == 1)
+00419                 {
+00420                   <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'a'</font>)
+00421             <font class="keywordflow">if</font> (<font 
class="charliteral">'á'</font> != caracter_actual)
+00422              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00423             <font class="keywordflow">else</font>
+00424             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"á"</font>,1);
+00425          <font class="keywordflow">else</font>
+00426             <font class="keywordflow">if</font> (<font 
class="charliteral">'Á'</font> != caracter_actual)
+00427               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00428             <font class="keywordflow">else</font>
+00429              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Á"</font>, 1);
+00430          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00431                 contador_caracter = contador_caracter +1;
+00432          <font class="keywordflow">else</font>
+00433                  contador_caracter = 0;
+00434          caracter_actual=leccionactual[contador_caracter];
+00435                  acento=0;    
+00436                 }
+00437                 <font class="keywordflow">else</font>
+00438                 {
+00439                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'a'</font>)
+00440             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00441              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);  
+00442                         <font class="keywordflow">else</font>
+00443                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"a"</font>,1);          
 
+00444          <font class="keywordflow">else</font>
+00445                 <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00446               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00447             <font class="keywordflow">else</font>  
+00448                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"A"</font>, 1);   
+00449                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00450                 contador_caracter = contador_caracter +1;
+00451          <font class="keywordflow">else</font>
+00452                  contador_caracter = 0;
+00453                  caracter_actual=leccionactual[contador_caracter];
+00454                 }
+00455 }
+00456 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'f'</font> || event-&gt;keyval == <font 
class="charliteral">'F'</font>)
+00457           {
+00458 
+00459                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bf"</font>);
+00460             gtk_widget_grab_focus (miboton);
+00461         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00462                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'f'</font>)
+00463             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00464                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00465                         <font class="keywordflow">else</font>
+00466                 gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"f"</font>,1);
+00467          <font class="keywordflow">else</font>
+00468                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00469              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00470           <font class="keywordflow">else</font>  
+00471              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"F"</font>, 1);  
+00472                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00473                  contador_caracter = contador_caracter +1;
+00474          <font class="keywordflow">else</font>
+00475                  contador_caracter = 0;
+00476                          
caracter_actual=leccionactual[contador_caracter];
+00477            }                       
+00478 
+00479 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'g'</font> || event-&gt;keyval == <font 
class="charliteral">'G'</font>)
+00480           {
+00481 
+00482                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bg"</font>);
+00483             gtk_widget_grab_focus (miboton);
+00484         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00485                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'g'</font>)
+00486              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00487                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
   
+00488                          <font class="keywordflow">else</font>
+00489                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"g"</font>,1);
+00490                  <font class="keywordflow">else</font>
+00491           <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00492            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00493       <font class="keywordflow">else</font>  
+00494                    gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"G"</font>, 1);   
    
+00495                    <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00496                                    contador_caracter = contador_caracter 
+1;
+00497                          <font class="keywordflow">else</font>
+00498                                       contador_caracter = 0;
+00499                                          
caracter_actual=leccionactual[contador_caracter];
+00500                                                     }                    
   
+00501 
+00502 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'h'</font> || event-&gt;keyval == <font 
class="charliteral">'H'</font>)
+00503           {
+00504 
+00505                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bh"</font>);
+00506             gtk_widget_grab_focus (miboton);
+00507         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00508                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'h'</font>)
+00509              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00510                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00511                          <font class="keywordflow">else</font>
+00512                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"h"</font>,1);
+00513              <font class="keywordflow">else</font>
+00514                  <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00515                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00516                  <font class="keywordflow">else</font>  
+00517                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"H"</font>, 1);   
+00518                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00519                 contador_caracter = contador_caracter +1;
+00520          <font class="keywordflow">else</font>
+00521                                                                  
contador_caracter = 0;
+00522                                          
caracter_actual=leccionactual[contador_caracter];
+00523                                                     }                    
   
+00524 
+00525 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'j'</font> || event-&gt;keyval == <font 
class="charliteral">'J'</font>)
+00526           {
+00527 
+00528                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bj"</font>);
+00529             gtk_widget_grab_focus (miboton);
+00530         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00531                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'j'</font>)
+00532             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00533                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1); 
+00534                         <font class="keywordflow">else</font>
+00535              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"j"</font>,1);
+00536                  <font class="keywordflow">else</font>
+00537                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00538              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00539           <font class="keywordflow">else</font>  
+00540              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"J"</font>, 1);   
+00541                          <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00542                       contador_caracter = contador_caracter +1;
+00543                  <font class="keywordflow">else</font>
+00544                      contador_caracter = 0;
+00545                          
caracter_actual=leccionactual[contador_caracter];
+00546               }                       
+00547 
+00548                           
+00549 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'k'</font> || event-&gt;keyval == <font 
class="charliteral">'K'</font>)
+00550 {
+00551                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bk"</font>);
+00552             gtk_widget_grab_focus (miboton);
+00553         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00554                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'k'</font>)
+00555              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00556                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00557                          <font class="keywordflow">else</font>
+00558                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"k"</font>,1);
+00559              <font class="keywordflow">else</font>
+00560                  <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00561                    gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00562                  <font class="keywordflow">else</font>  
+00563                gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"K"</font>, 1);   
 
+00564                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00565             contador_caracter = contador_caracter +1;
+00566          <font class="keywordflow">else</font>
+00567          contador_caracter = 0;
+00568         caracter_actual=leccionactual[contador_caracter];
+00569                     }                       
+00570 
+00571 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'l'</font> || event-&gt;keyval == <font 
class="charliteral">'L'</font>)
+00572           {
+00573 
+00574                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bl"</font>);
+00575             gtk_widget_grab_focus (miboton);
+00576         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00577                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'l'</font>)
+00578              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00579                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1); 
+00580                          <font class="keywordflow">else</font>
+00581                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"l"</font>,1);
+00582                          <font class="keywordflow">else</font>
+00583                                  <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00584                                   gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00585                                  <font class="keywordflow">else</font>  
+00586                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"L"</font>, 1);   
 
+00587                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00588                              contador_caracter = contador_caracter +1;
+00589                          <font class="keywordflow">else</font>
+00590                          contador_caracter = 0;
+00591                          
caracter_actual=leccionactual[contador_caracter];
+00592                                                             }            
           
+00593 
+00594 <font class="keywordflow">if</font> (event-&gt;keyval == 241 || 
event-&gt;keyval == 209 )
+00595           {
+00596 
+00597                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bnn"</font>);
+00598             gtk_widget_grab_focus (miboton);
+00599         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00600                  <font class="keywordflow">if</font> (event-&gt;keyval 
== 0xf1)
+00601           <font class="keywordflow">if</font> ((<font 
class="charliteral">'ñ'</font> != caracter_actual <font class="comment">/* 
Depurar ESTO */</font>))
+00602              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);     
+00603                   <font class="keywordflow">else</font>
+00604              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"ñ"</font>,1);
+00605                  <font class="keywordflow">else</font>
+00606                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00607                   gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00608                   <font class="keywordflow">else</font>  
+00609                    gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"Ñ"</font>, 1);   
+00610                <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00611                      contador_caracter = contador_caracter +1;
+00612                    <font class="keywordflow">else</font>
+00613                     contador_caracter = 0;
+00614              caracter_actual=leccionactual[contador_caracter];
+00615      }                       
+00616 
+00617 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'z'</font> || event-&gt;keyval == <font 
class="charliteral">'Z'</font>)
+00618           {
+00619 
+00620                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bz"</font>);
+00621             gtk_widget_grab_focus (miboton);
+00622         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00623                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'z'</font>)
+00624              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00625                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00626                          <font class="keywordflow">else</font>
+00627                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"z"</font>,1);
+00628                          <font class="keywordflow">else</font>
+00629                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00630                                   gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00631                           <font class="keywordflow">else</font>  
+00632                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"Z"</font>, 1);   
+00633                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00634                              contador_caracter = contador_caracter +1;
+00635                          <font class="keywordflow">else</font>
+00636                              contador_caracter = 0;
+00637                          
caracter_actual=leccionactual[contador_caracter];
+00638                                                             }            
           
+00639 
+00640 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'x'</font> || event-&gt;keyval == <font 
class="charliteral">'X'</font>)
+00641           {
+00642 
+00643                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bx"</font>);
+00644             gtk_widget_grab_focus (miboton);
+00645         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00646                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'x'</font>)
+00647          <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00648              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);   
+00649                  <font class="keywordflow">else</font>
+00650             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"x"</font>,1);
+00651          <font class="keywordflow">else</font>
+00652           <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00653                gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00654             <font class="keywordflow">else</font>  
+00655             gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"X"</font>, 1);   
+00656                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00657              contador_caracter = contador_caracter +1;
+00658          <font class="keywordflow">else</font>
+00659              contador_caracter = 0;
+00660                  caracter_actual=leccionactual[contador_caracter];
+00661                                                             }            
           
+00662 
+00663 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'c'</font> || event-&gt;keyval == <font 
class="charliteral">'C'</font>)
+00664           {
+00665 
+00666                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bc"</font>);
+00667             gtk_widget_grab_focus (miboton);
+00668         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00669                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'c'</font>)
+00670                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00671                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
   
+00672                   <font class="keywordflow">else</font>
+00673                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"c"</font>,1);
+00674                  <font class="keywordflow">else</font>
+00675                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00676                               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00677                          <font class="keywordflow">else</font>  
+00678                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"C"</font>, 1);   
+00679                          <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00680                        contador_caracter = contador_caracter +1;
+00681                          <font class="keywordflow">else</font>
+00682                         contador_caracter = 0;
+00683                          
caracter_actual=leccionactual[contador_caracter];
+00684                                                             }            
           
+00685 
+00686 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'v'</font> || event-&gt;keyval == <font 
class="charliteral">'V'</font>)
+00687           {
+00688 
+00689                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bv"</font>);
+00690             gtk_widget_grab_focus (miboton);
+00691         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00692                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'v'</font>)
+00693                      <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00694                             gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00695                          <font class="keywordflow">else</font>
+00696             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"v"</font>,1);
+00697                          <font class="keywordflow">else</font>
+00698                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00699                              gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00700                           <font class="keywordflow">else</font>  
+00701                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"V"</font>, 1);   
  
+00702                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00703                                  contador_caracter = contador_caracter 
+1;
+00704                          <font class="keywordflow">else</font>
+00705                                  contador_caracter = 0;
+00706                                          
caracter_actual=leccionactual[contador_caracter];
+00707                                                             }            
           
+00708 
+00709 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'b'</font> || event-&gt;keyval == <font 
class="charliteral">'B'</font>)
+00710           {
+00711 
+00712                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bb"</font>);
+00713             gtk_widget_grab_focus (miboton);
+00714         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00715                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'b'</font>)
+00716                        <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00717                             gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00718                            <font class="keywordflow">else</font>
+00719                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"b"</font>,1);
+00720                          <font class="keywordflow">else</font>
+00721                                  <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00722                                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00723                                  <font class="keywordflow">else</font>  
+00724                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"B"</font>, 1);   
   
+00725                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00726                               contador_caracter = contador_caracter +1;
+00727                          <font class="keywordflow">else</font>
+00728                                  contador_caracter = 0;
+00729                                          
caracter_actual=leccionactual[contador_caracter];
+00730                                                             }            
           
+00731 
+00732 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'n'</font> || event-&gt;keyval == <font 
class="charliteral">'N'</font>)
+00733           {
+00734 
+00735                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bn"</font>);
+00736             gtk_widget_grab_focus (miboton);
+00737         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00738                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'n'</font>)
+00739              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00740              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);  
+00741                          <font class="keywordflow">else</font>
+00742              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"n"</font>,1);
+00743          <font class="keywordflow">else</font>
+00744                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00745                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00746                   <font class="keywordflow">else</font>  
+00747              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"N"</font>, 1);
+00748                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00749              contador_caracter = contador_caracter +1;
+00750          <font class="keywordflow">else</font>
+00751               contador_caracter = 0;
+00752                  caracter_actual=leccionactual[contador_caracter];
+00753                             }                       
+00754 <font class="comment">/***/</font>
+00755 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'m'</font> || event-&gt;keyval == <font 
class="charliteral">'M'</font>)
+00756           {
+00757 
+00758                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00759             gtk_widget_grab_focus (miboton);
+00760         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00761                 <font class="keywordflow">if</font> (event-&gt;keyval == 
<font class="charliteral">'m'</font>)
+00762            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00763                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1); 
+00764                    <font class="keywordflow">else</font>
+00765                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"m"</font>,1);
+00766         <font class="keywordflow">else</font>
+00767             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00768                gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00769             <font class="keywordflow">else</font>  
+00770                    gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"M"</font>, 1);   
  
+00771                 <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00772             contador_caracter = contador_caracter +1;
+00773         <font class="keywordflow">else</font>
+00774             contador_caracter = 0;
+00775         caracter_actual=leccionactual[contador_caracter];
+00776 }                       
+00777 <font class="comment">/***/</font>
+00778 <font class="comment">/***/</font>
+00779 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">','</font> || event-&gt;keyval == <font 
class="charliteral">';'</font>)
+00780       {
+00781  
+00782         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00783         gtk_widget_grab_focus (miboton);
+00784     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00785         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">','</font>)
+00786            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00787                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00788            <font class="keywordflow">else</font>
+00789                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">","</font>,1);
+00790         <font class="keywordflow">else</font>
+00791         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00792            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00793         <font class="keywordflow">else</font>
+00794            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">";"</font>, 1);
+00795         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00796             contador_caracter = contador_caracter +1;
+00797         <font class="keywordflow">else</font>
+00798             contador_caracter = 0;
+00799         caracter_actual=leccionactual[contador_caracter];
+00800 }
+00801 <font class="comment">/***/</font>
+00802 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'.'</font> || event-&gt;keyval == <font 
class="charliteral">':'</font>)
+00803       {
+00804  
+00805         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00806         gtk_widget_grab_focus (miboton);
+00807     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00808         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'.'</font>)
+00809            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00810                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00811            <font class="keywordflow">else</font>
+00812                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"."</font>,1);
+00813         <font class="keywordflow">else</font>
+00814         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00815            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00816         <font class="keywordflow">else</font>
+00817            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">":"</font>, 1);
+00818         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00819             contador_caracter = contador_caracter +1;
+00820         <font class="keywordflow">else</font>
+00821             contador_caracter = 0;
+00822         caracter_actual=leccionactual[contador_caracter];
+00823 }
+00824 <font class="comment">/***/</font>
+00825 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'-'</font> || event-&gt;keyval == <font 
class="charliteral">'_'</font>)
+00826       {
+00827  
+00828         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00829         gtk_widget_grab_focus (miboton);
+00830     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00831         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'-'</font>)
+00832            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00833                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00834            <font class="keywordflow">else</font>
+00835                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"-"</font>,1);
+00836         <font class="keywordflow">else</font>
+00837         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00838            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00839         <font class="keywordflow">else</font>
+00840            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"_"</font>, 1);
+00841         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00842             contador_caracter = contador_caracter +1;
+00843         <font class="keywordflow">else</font>
+00844             contador_caracter = 0;
+00845         caracter_actual=leccionactual[contador_caracter];
+00846 }
+00847 <font class="comment">/***/</font>
+00848 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'&lt;'</font> || event-&gt;keyval == <font 
class="charliteral">'&gt;'</font>)
+00849       {
+00850  
+00851         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00852         gtk_widget_grab_focus (miboton);
+00853     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00854         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'&lt;'</font>)
+00855            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00856                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00857            <font class="keywordflow">else</font>
+00858                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"&lt;"</font>,1);
+00859         <font class="keywordflow">else</font>
+00860         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00861            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00862         <font class="keywordflow">else</font>
+00863            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"&gt;"</font>, 1);
+00864         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00865             contador_caracter = contador_caracter +1;
+00866         <font class="keywordflow">else</font>
+00867             contador_caracter = 0;
+00868         caracter_actual=leccionactual[contador_caracter];
+00869 }
+00870 <font class="comment">/***/</font>
+00871 <font class="comment">/***/</font>    
+00872 <font class="comment">/***/</font>    
+00873 <font class="comment">/***/</font>    
+00874 <font class="comment">/***/</font>    
+00875 <font class="comment">/***/</font>
+00876 
+00877 <font class="comment">//Se pulsó acento    </font>
+00878 <font class="keywordflow">if</font> (event-&gt;keyval == 0xfe51)
+00879         {
+00880                 acento=1;
+00881         }
+00882 
+00883 <font class="comment">//Borrar</font>
+00884 <font class="keywordflow">if</font> (event-&gt;keyval == 65288)
+00885       {
+00886           miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"borrar"</font>);
+00887           gtk_widget_grab_focus (miboton);
+00888           <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00889           gtk_text_backward_delete (GTK_TEXT (mitexto),(guint) 1);
+00890                   contador_caracter = contador_caracter - 1;
+00891                   caracter_actual=leccionactual[contador_caracter];   
+00892       }
+00893 
+00894 
+00895 <font class="comment">/*****************************************/</font>
+00896  <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'s'</font> || event-&gt;keyval == <font 
class="charliteral">'S'</font>)
+00897        {
+00898 
+00899            miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bs"</font>);
+00900            gtk_widget_grab_focus (miboton);
+00901        <font class="comment">/*    gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00902                     <font class="keywordflow">if</font> 
(event-&gt;keyval == <font class="charliteral">'s'</font>)
+00903                     <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00904                             gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00905                                 <font class="keywordflow">else</font>
+00906                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"s"</font>,1);
+00907                 <font class="keywordflow">else</font>
+00908                  <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00909                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00910                     <font class="keywordflow">else</font>  
+00911                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"S"</font>, 1);   
     
+00912                         <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00913                         contador_caracter = contador_caracter +1;
+00914                      <font class="keywordflow">else</font>
+00915                         contador_caracter = 0;
+00916                        caracter_actual=leccionactual[contador_caracter];
+00917                                                                    }     
                  
+00918 
+00919                    
+00920  <font class="keywordflow">if</font> (event-&gt;keyval == 65293)
+00921        {
+00922 
+00923            miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"retorno"</font>);
+00924            gtk_widget_grab_focus (miboton);
+00925       <font class="comment">/*     gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00926            gtk_text_insert (GTK_TEXT (mitexto),NULL,NULL,NULL, <font 
class="stringliteral">"\n"</font>, 1);
+00927                    contador_caracter = 0;
+00928                    caracter_actual=leccionactual[contador_caracter];     
        
+00929 
+00930            }          
+00931  <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">' '</font>)
+00932       {
+00933 
+00934            miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"espacio"</font>);
+00935            gtk_widget_grab_focus (miboton);
+00936       <font class="comment">/*     gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00937                    <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">' '</font>)
+00938                <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00939                        gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
      
+00940                            <font class="keywordflow">else</font>
+00941                            gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">" "</font>,1);
+00942                    <font class="keywordflow">else</font>
+00943                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">" "</font>, 1);   
  
+00944                    <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00945                     contador_caracter = contador_caracter +1;
+00946                <font class="keywordflow">else</font>
+00947                     contador_caracter = 0;
+00948                   caracter_actual=leccionactual[contador_caracter];
+00949                                                               }          
             
+00950         
+00951 
+00952 
+00953    <font class="comment">/* Fines de depuración */</font>
+00954    g_print(<font class="stringliteral">"Información de depuración: 
"</font>);
+00955    g_print(<font class="stringliteral">"%x --- Acento = 
%i|\n"</font>,event-&gt;keyval, acento);       
+00956  
+00957   <font class="keywordflow">return</font> FALSE;
+00958 }
+00959 
+00960 
+00961 
+00962 
+00963 <font class="keywordtype">void</font>
+<a name="l00964"></a><a class="code" href="retrollamadas_c.html#a9">00964</a> 
<a class="code" href="retrollamadas_c.html#a9">on_ayudamenu_activate</a>        
          (GtkMenuItem     *menuitem,
+00965                                         gpointer         user_data)<font 
class="keyword">
+</font>00966 <font class="keyword"></font>{
+00967 
+00968 }
+00969 
+00970 
+00971 <font class="keywordtype">void</font>
+<a name="l00972"></a><a class="code" href="retrollamadas_c.html#a10">00972</a> 
<a class="code" href="retrollamadas_c.html#a10">on_about_clicked</a>            
           (GtkButton       *button,
+00973                                         gpointer         user_data)<font 
class="keyword">
+</font>00974 <font class="keyword"></font>{
+00975   GtkWidget *about1;
+00976 
+00977   about1 = <a class="code" href="interfaz_c.html#a2">create_window5</a> 
();
+00978   gtk_widget_show (about1);
+00979           
+00980 }
+00981 
+00982 
+00983 <font class="keywordtype">void</font>
+<a name="l00984"></a><a class="code" href="retrollamadas_c.html#a11">00984</a> 
<a class="code" href="retrollamadas_c.html#a11">on_ayuda_clicked</a>            
           (GtkButton       *button,
+00985                                         gpointer         user_data)<font 
class="keyword">
+</font>00986 <font class="keyword"></font>{
+00987   GtkWidget *ayuda;
+00988 
+00989   ayuda = <a class="code" 
href="interfaz_c.html#a4">create_ventanaayuda</a> ();
+00990   gtk_widget_show (ayuda);
+00991           
+00992 }
+00993 
+00994 
+00995 <font class="keywordtype">void</font>
+<a name="l00996"></a><a class="code" href="retrollamadas_c.html#a12">00996</a> 
<a class="code" href="retrollamadas_c.html#a12">on_lecant_clicked</a>           
           (GtkButton       *button,
+00997                                         gpointer         user_data)<font 
class="keyword">
+</font>00998 <font class="keyword"></font>{
+00999 leccion_insertada=0;
+01000 contador_caracter=0;
+01001 <font class="keywordflow">if</font> (leccion_a_insertar&gt;0)
+01002   leccion_a_insertar=leccion_a_insertar -1;
+01003   
+01004 }
+01005 
+01006 
+01007 <font class="keywordtype">void</font>
+<a name="l01008"></a><a class="code" href="retrollamadas_c.html#a13">01008</a> 
<a class="code" href="retrollamadas_c.html#a13">on_lecsig_clicked</a>           
           (GtkButton       *button,
+01009                                         gpointer         user_data)<font 
class="keyword">
+</font>01010 <font class="keyword"></font>{
+01011 leccion_insertada=0;
+01012 contador_caracter=0;
+01013 <font class="keywordflow">if</font> (leccion_a_insertar &lt; 
max_lecciones)
+01014      leccion_a_insertar=leccion_a_insertar + 1;
+01015                 
+01016 }
+01017 
+01018 <font class="keywordtype">void</font>
+<a name="l01019"></a><a class="code" href="retrollamadas_c.html#a14">01019</a> 
<a class="code" href="retrollamadas_c.html#a14">on_abrir_lecci_n1_activate</a>  
           (GtkMenuItem     *menuitem,
+01020                                         gpointer         user_data)<font 
class="keyword">
+</font>01021 <font class="keyword"></font>{
+01022 
+01023 }
+01024 
+01025 
+01026 <font class="keywordtype">void</font>
+<a name="l01027"></a><a class="code" href="retrollamadas_c.html#a15">01027</a> 
<a class="code" href="retrollamadas_c.html#a15">on_salir1_activate</a>          
           (GtkMenuItem     *menuitem,
+01028                                         gpointer         user_data)<font 
class="keyword">
+</font>01029 <font class="keyword"></font>{
+01030  g_print(<font class="stringliteral">"Gracias por utilizar software 
GNU...     O:^)  \n"</font>);
+01031  g_print(<font class="stringliteral">" NEMESyS \n (c)2001 Luis U. 
Rodríguez Paniagua \n"</font>);
+01032  g_print(<font class="stringliteral">" Sugerencias, críticas, etc... a 
address@hidden"</font>);
+01033  g_print(<font class="stringliteral">" Flames, como siempre a 
/dev/null\n"</font>);
+01034  gtk_main_quit();
+01035          
+01036 }
+01037 
+01038 
+01039 <font class="keywordtype">void</font>
+<a name="l01040"></a><a class="code" href="retrollamadas_c.html#a16">01040</a> 
<a class="code" 
href="retrollamadas_c.html#a16">on_editor_de_lecciones1_activate</a>       
(GtkMenuItem     *menuitem,
+01041                                         gpointer         user_data)<font 
class="keyword">
+</font>01042 <font class="keyword"></font>{
+01043  GtkWidget *ventana_editor;
+01044 
+01045  ventana_editor = <a class="code" 
href="interfaz_c.html#a3">create_centanaeditor</a> ();
+01046  gtk_widget_show (ventana_editor);
+01047          
+01048 }
+01049 
+01050 
+01051 <font class="keywordtype">void</font>
+<a name="l01052"></a><a class="code" href="retrollamadas_c.html#a17">01052</a> 
<a class="code" href="retrollamadas_c.html#a17">on_sobre_mecagtk1_activate</a>  
           (GtkMenuItem     *menuitem,
+01053                                         gpointer         user_data)<font 
class="keyword">
+</font>01054 <font class="keyword"></font>{
+01055   GtkWidget *about1;
+01056 
+01057   about1 = <a class="code" href="interfaz_c.html#a2">create_window5</a> 
();
+01058   gtk_widget_show (about1);
+01059           
+01060 }
+01061 
+01062 
+01063 <font class="keywordtype">void</font>
+<a name="l01064"></a><a class="code" href="retrollamadas_c.html#a18">01064</a> 
<a class="code" href="retrollamadas_c.html#a18">on_ayuda2_activate</a>          
           (GtkMenuItem     *menuitem,
+01065                                         gpointer         user_data)<font 
class="keyword">
+</font>01066 <font class="keyword"></font>{
+01067   GtkWidget *ayuda;
+01068 
+01069   ayuda = <a class="code" 
href="interfaz_c.html#a4">create_ventanaayuda</a> ();
+01070   gtk_widget_show (ayuda);
+01071           
+01072 }
+01073 
+01074 
+01075 <font class="keywordtype">void</font>
+<a name="l01076"></a><a class="code" href="retrollamadas_c.html#a19">01076</a> 
<a class="code" href="retrollamadas_c.html#a19">on_nueva1_activate</a>          
           (GtkMenuItem     *menuitem,
+01077                                         gpointer         user_data)<font 
class="keyword">
+</font>01078 <font class="keyword"></font>{
+01079 
+01080 }
+01081 
+01082 
+01083 <font class="keywordtype">void</font>
+<a name="l01084"></a><a class="code" href="retrollamadas_c.html#a20">01084</a> 
<a class="code" href="retrollamadas_c.html#a20">on_cargar_lecci_n1_activate</a> 
           (GtkMenuItem     *menuitem,
+01085                                         gpointer         user_data)<font 
class="keyword">
+</font>01086 <font class="keyword"></font>{
+01087 
+01088 }
+01089 
+01090 
+01091 <font class="keywordtype">void</font>
+<a name="l01092"></a><a class="code" href="retrollamadas_c.html#a21">01092</a> 
<a class="code" 
href="retrollamadas_c.html#a21">on_guardar_lecci_n1_activate</a>           
(GtkMenuItem     *menuitem,
+01093                                         gpointer         user_data)<font 
class="keyword">
+</font>01094 <font class="keyword"></font>{
+01095 
+01096 }
+01097 
+01098 
+01099 <font class="keywordtype">void</font>
+<a name="l01100"></a><a class="code" href="retrollamadas_c.html#a22">01100</a> 
<a class="code" href="retrollamadas_c.html#a22">on_guardar_como1_activate</a>   
           (GtkMenuItem     *menuitem,
+01101                                         gpointer         user_data)<font 
class="keyword">
+</font>01102 <font class="keyword"></font>{
+01103 
+01104 }
+01105 
+01106 
+01107 <font class="keywordtype">void</font>
+<a name="l01108"></a><a class="code" href="retrollamadas_c.html#a23">01108</a> 
<a class="code" href="retrollamadas_c.html#a23">on_cortar1_activate</a>         
           (GtkMenuItem     *menuitem,
+01109                                         gpointer         user_data)<font 
class="keyword">
+</font>01110 <font class="keyword"></font>{
+01111 
+01112 }
+01113 
+01114 
+01115 <font class="keywordtype">void</font>
+<a name="l01116"></a><a class="code" href="retrollamadas_c.html#a24">01116</a> 
<a class="code" href="retrollamadas_c.html#a24">on_pegar1_activate</a>          
           (GtkMenuItem     *menuitem,
+01117                                         gpointer         user_data)<font 
class="keyword">
+</font>01118 <font class="keyword"></font>{
+01119 
+01120 }
+01121 
+01122 
+01123 <font class="keywordtype">void</font>
+<a name="l01124"></a><a class="code" href="retrollamadas_c.html#a25">01124</a> 
<a class="code" href="retrollamadas_c.html#a25">on_cerrar_clicked</a>           
           (GtkButton       *button,
+01125                                         gpointer         user_data)<font 
class="keyword">
+</font>01126 <font class="keyword"></font>{
+01127  g_print(<font class="stringliteral">"Gracias por utilizar software 
GNU...     O:^)  \n"</font>);
+01128  g_print(<font class="stringliteral">" NEMESyS \n (c)2001 Luis U. 
Rodríguez Paniagua \n"</font>);
+01129  g_print(<font class="stringliteral">" Sugerencias, críticas, etc... a 
address@hidden"</font>);
+01130  g_print(<font class="stringliteral">" Flames, como siempre a 
/dev/null\n"</font>);
+01131  gtk_main_quit();
+01132          
+01133 }
+01134 
+01135 
+01136 <font class="keywordtype">void</font>
+<a name="l01137"></a><a class="code" href="retrollamadas_c.html#a26">01137</a> 
<a class="code" href="retrollamadas_c.html#a26">on_aboutcerrar_clicked</a>      
           (GtkButton       *button,
+01138                                         gpointer         user_data)<font 
class="keyword">
+</font>01139 <font class="keyword"></font>{
+01140  GtkWidget *ventana_padre;
+01141  
+01142  ventana_padre = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (button), <font 
class="stringliteral">"window5"</font>);
+01143  gtk_widget_destroy(ventana_padre);
+01144 }
+01145 
+01146 gboolean
+<a name="l01147"></a><a class="code" href="retrollamadas_c.html#a27">01147</a> 
<a class="code" 
href="retrollamadas_c.html#a27">on_window3_enter_notify_event</a>          
(GtkWidget       *widget,
+01148                                         GdkEventCrossing *event,
+01149                                         gpointer         user_data)<font 
class="keyword">
+</font>01150 <font class="keyword"></font>{
+01151   gtk_widget_destroy(widget);
+01152   <font class="keywordflow">return</font> FALSE;
+01153 }
+01154 
+01155 
+01156 <font class="keywordtype">void</font>
+<a name="l01157"></a><a class="code" href="retrollamadas_c.html#a28">01157</a> 
<a class="code" href="retrollamadas_c.html#a28">on_salir2_activate</a>          
           (GtkMenuItem     *menuitem,
+01158                                         gpointer         user_data)<font 
class="keyword">
+</font>01159 <font class="keyword"></font>{
+01160  GtkWidget *ventana_padre;
+01161 
+01162   ventana_padre = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (menuitem), <font 
class="stringliteral">"centanaeditor"</font>);
+01163   gtk_widget_destroy(ventana_padre);
+01164 }
+01165 
+01166 
+01167 <font class="keywordtype">void</font>
+<a name="l01168"></a><a class="code" href="retrollamadas_c.html#a29">01168</a> 
<a class="code" href="retrollamadas_c.html#a29">on_salirayuda_clicked</a>       
           (GtkButton       *button,
+01169                                         gpointer         user_data)<font 
class="keyword">
+</font>01170 <font class="keyword"></font>{
+01171  GtkWidget *ventana_padre;
+01172 
+01173  ventana_padre = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (button), <font 
class="stringliteral">"ventanaayuda"</font>);
+01174  gtk_widget_destroy(ventana_padre);
+01175          
+01176 }
+01177 
+</div></pre><hr><address><small>Generado el Tue Mar 13 02:46:49 2001 para 
mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/retrollamadas_c.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/retrollamadas_c.html
diff -N Proyectos/Mecagtk/doc_devel/retrollamadas_c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/retrollamadas_c.html    3 Mar 2012 06:14:23 
-0000       1.1
@@ -0,0 +1,2153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>retrollamadas.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:51 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>retrollamadas.c Archivo referencia</h1><code>#include 
&lt;gtk/gtk.h&gt;</code><br>
+<code>#include "retrollamadas.h"</code><br>
+<code>#include "interfaz.h"</code><br>
+<code>#include "suporte.h"</code><br>
+<code>#include "lectura.h"</code><br>
+
+<p>
+<a href="retrollamadas_c-source.html">Ir al código fuente de este 
archivo.</a><table border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Funciones</h2></td></tr>
+<tr><td nowrap align=right valign=top>gboolean&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a8">on_window1_key_press_event</a> 
(GtkWidget *widget, GdkEventKey *event, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a9">on_ayudamenu_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a10">on_about_clicked</a> (GtkButton 
*button, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a11">on_ayuda_clicked</a> (GtkButton 
*button, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a12">on_lecant_clicked</a> (GtkButton 
*button, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a13">on_lecsig_clicked</a> (GtkButton 
*button, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a14">on_abrir_lecci_n1_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a15">on_salir1_activate</a> (GtkMenuItem 
*menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a16">on_editor_de_lecciones1_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a17">on_sobre_mecagtk1_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a18">on_ayuda2_activate</a> (GtkMenuItem 
*menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a19">on_nueva1_activate</a> (GtkMenuItem 
*menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a20">on_cargar_lecci_n1_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a21">on_guardar_lecci_n1_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a22">on_guardar_como1_activate</a> 
(GtkMenuItem *menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a23">on_cortar1_activate</a> (GtkMenuItem 
*menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a24">on_pegar1_activate</a> (GtkMenuItem 
*menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a25">on_cerrar_clicked</a> (GtkButton 
*button, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a26">on_aboutcerrar_clicked</a> 
(GtkButton *button, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>gboolean&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a27">on_window3_enter_notify_event</a> 
(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a28">on_salir2_activate</a> (GtkMenuItem 
*menuitem, gpointer user_data)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a29">on_salirayuda_clicked</a> (GtkButton 
*button, gpointer user_data)</td></tr>
+<tr><td colspan=2><br><h2>Variables</h2></td></tr>
+<tr><td nowrap align=right valign=top>gint&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a0">leccion_insertada</a> = 0</td></tr>
+<tr><td nowrap align=right valign=top>gint&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a1">max_lecciones</a> = 10</td></tr>
+<tr><td nowrap align=right valign=top>gint&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a2">longitud</a></td></tr>
+<tr><td nowrap align=right valign=top>gint&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a3">leccion_a_insertar</a> = 1</td></tr>
+<tr><td nowrap align=right valign=top>gchar*&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a4">leccionactual</a></td></tr>
+<tr><td nowrap align=right valign=top>gchar&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a5">caracter_actual</a></td></tr>
+<tr><td nowrap align=right valign=top>gint&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a6">contador_caracter</a> = 0</td></tr>
+<tr><td nowrap align=right valign=top>gint&nbsp;</td><td valign=bottom><a 
class="el" href="retrollamadas_c.html#a7">acento</a> = 0</td></tr>
+</table>
+<hr><h2>Documentación de las funciones</h2>
+<a name="a10" doxytag="retrollamadas.c::on_about_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_about_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00972">972</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>00974 {
+00975   GtkWidget *about1;
+00976 
+00977   about1 = <a class="code" href="interfaz_c.html#a2">create_window5</a> 
();
+00978   gtk_widget_show (about1);
+00979           
+00980 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a26" doxytag="retrollamadas.c::on_aboutcerrar_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_aboutcerrar_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01137">1137</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01139 {
+01140  GtkWidget *ventana_padre;
+01141  
+01142  ventana_padre = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (button), <font 
class="stringliteral">"window5"</font>);
+01143  gtk_widget_destroy(ventana_padre);
+01144 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a14" doxytag="retrollamadas.c::on_abrir_lecci_n1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_abrir_lecci_n1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01019">1019</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01021 {
+01022 
+01023 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a18" doxytag="retrollamadas.c::on_ayuda2_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_ayuda2_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01064">1064</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01066 {
+01067   GtkWidget *ayuda;
+01068 
+01069   ayuda = <a class="code" 
href="interfaz_c.html#a4">create_ventanaayuda</a> ();
+01070   gtk_widget_show (ayuda);
+01071           
+01072 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a11" doxytag="retrollamadas.c::on_ayuda_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_ayuda_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00984">984</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>00986 {
+00987   GtkWidget *ayuda;
+00988 
+00989   ayuda = <a class="code" 
href="interfaz_c.html#a4">create_ventanaayuda</a> ();
+00990   gtk_widget_show (ayuda);
+00991           
+00992 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a9" doxytag="retrollamadas.c::on_ayudamenu_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_ayudamenu_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00964">964</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>00966 {
+00967 
+00968 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a20" doxytag="retrollamadas.c::on_cargar_lecci_n1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_cargar_lecci_n1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01084">1084</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01086 {
+01087 
+01088 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a25" doxytag="retrollamadas.c::on_cerrar_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_cerrar_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01124">1124</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01126 {
+01127  g_print(<font class="stringliteral">"Gracias por utilizar software 
GNU...     O:^)  \n"</font>);
+01128  g_print(<font class="stringliteral">" NEMESyS \n (c)2001 Luis U. 
Rodríguez Paniagua \n"</font>);
+01129  g_print(<font class="stringliteral">" Sugerencias, críticas, etc... a 
address@hidden"</font>);
+01130  g_print(<font class="stringliteral">" Flames, como siempre a 
/dev/null\n"</font>);
+01131  gtk_main_quit();
+01132          
+01133 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a23" doxytag="retrollamadas.c::on_cortar1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_cortar1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01108">1108</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01110 {
+01111 
+01112 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a16" 
doxytag="retrollamadas.c::on_editor_de_lecciones1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_editor_de_lecciones1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01040">1040</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01042 {
+01043  GtkWidget *ventana_editor;
+01044 
+01045  ventana_editor = <a class="code" 
href="interfaz_c.html#a3">create_centanaeditor</a> ();
+01046  gtk_widget_show (ventana_editor);
+01047          
+01048 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a22" doxytag="retrollamadas.c::on_guardar_como1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_guardar_como1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01100">1100</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01102 {
+01103 
+01104 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a21" doxytag="retrollamadas.c::on_guardar_lecci_n1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_guardar_lecci_n1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01092">1092</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01094 {
+01095 
+01096 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a12" doxytag="retrollamadas.c::on_lecant_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_lecant_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00996">996</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>00998 {
+00999 leccion_insertada=0;
+01000 contador_caracter=0;
+01001 <font class="keywordflow">if</font> (leccion_a_insertar&gt;0)
+01002   leccion_a_insertar=leccion_a_insertar -1;
+01003   
+01004 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a13" doxytag="retrollamadas.c::on_lecsig_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_lecsig_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01008">1008</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01010 {
+01011 leccion_insertada=0;
+01012 contador_caracter=0;
+01013 <font class="keywordflow">if</font> (leccion_a_insertar &lt; 
max_lecciones)
+01014      leccion_a_insertar=leccion_a_insertar + 1;
+01015                 
+01016 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a19" doxytag="retrollamadas.c::on_nueva1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_nueva1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01076">1076</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01078 {
+01079 
+01080 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a24" doxytag="retrollamadas.c::on_pegar1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_pegar1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01116">1116</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01118 {
+01119 
+01120 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a15" doxytag="retrollamadas.c::on_salir1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_salir1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01027">1027</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01029 {
+01030  g_print(<font class="stringliteral">"Gracias por utilizar software 
GNU...     O:^)  \n"</font>);
+01031  g_print(<font class="stringliteral">" NEMESyS \n (c)2001 Luis U. 
Rodríguez Paniagua \n"</font>);
+01032  g_print(<font class="stringliteral">" Sugerencias, críticas, etc... a 
address@hidden"</font>);
+01033  g_print(<font class="stringliteral">" Flames, como siempre a 
/dev/null\n"</font>);
+01034  gtk_main_quit();
+01035          
+01036 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a28" doxytag="retrollamadas.c::on_salir2_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_salir2_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01157">1157</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01159 {
+01160  GtkWidget *ventana_padre;
+01161 
+01162   ventana_padre = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (menuitem), <font 
class="stringliteral">"centanaeditor"</font>);
+01163   gtk_widget_destroy(ventana_padre);
+01164 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a29" doxytag="retrollamadas.c::on_salirayuda_clicked"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_salirayuda_clicked (
+          </b></td>
+          <td valign="bottom"><b>
+GtkButton * <em>button</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01168">1168</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01170 {
+01171  GtkWidget *ventana_padre;
+01172 
+01173  ventana_padre = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (button), <font 
class="stringliteral">"ventanaayuda"</font>);
+01174  gtk_widget_destroy(ventana_padre);
+01175          
+01176 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a17" doxytag="retrollamadas.c::on_sobre_mecagtk1_activate"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void on_sobre_mecagtk1_activate (
+          </b></td>
+          <td valign="bottom"><b>
+GtkMenuItem * <em>menuitem</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01052">1052</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01054 {
+01055   GtkWidget *about1;
+01056 
+01057   about1 = <a class="code" href="interfaz_c.html#a2">create_window5</a> 
();
+01058   gtk_widget_show (about1);
+01059           
+01060 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a8" doxytag="retrollamadas.c::on_window1_key_press_event"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gboolean on_window1_key_press_event (
+          </b></td>
+          <td valign="bottom"><b>
+GtkWidget * <em>widget</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+GdkEventKey * <em>event</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00024">24</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>00027 {
+00028    GtkWidget *miboton;
+00029    GtkWidget *mitexto;
+00030    GtkWidget *leccion;
+00031    GdkColormap *mapacolor;
+00032    GdkColor error;
+00033    GdkFont *fuente;
+00034   leccion = <a class="code" href="suporte_c.html#a4">lookup_widget</a> 
(GTK_WIDGET (widget), <font class="stringliteral">"text1"</font>); 
+00035   mitexto = <a class="code" href="suporte_c.html#a4">lookup_widget</a> 
(GTK_WIDGET (widget), <font class="stringliteral">"text2"</font>);
+00036   mapacolor=gdk_colormap_get_system();
+00037   <font class="keywordflow">if</font> (leccion_insertada==0) 
+00038   { 
+00039     error.red = 0;
+00040     error.green = 0;
+00041     error.blue =0xff00;  
+00042         leccionactual=<a class="code" 
href="lectura_c.html#a0">CargaLeccion</a>(leccion_a_insertar,&amp;longitud);
+00043         caracter_actual=leccionactual[contador_caracter];
+00044         leccion_insertada=1;
+00045         gtk_text_backward_delete(GTK_TEXT (leccion),500);
+00046     fuente = gdk_font_load(<font 
class="stringliteral">"-adobe-courier-bold-r-*-*-25-*-*-*-*-*-*-*"</font>);     
  
+00047         gtk_text_insert (GTK_TEXT (leccion),fuente,&amp;error,NULL, 
<font class="stringliteral">"\n\nLección: \n\n\n"</font>, 14);
+00048         <font class="comment">/*Modificar por acá para insertar el 
número de lección */</font>
+00049     fuente = gdk_font_load(<font 
class="stringliteral">"-adobe-courier-bold-r-*-*-18-*-*-*-*-*-*-*"</font>);
+00050     gtk_text_insert (GTK_TEXT 
(leccion),fuente,&amp;error,NULL,leccionactual, longitud);
+00051     gtk_text_insert (GTK_TEXT (leccion),fuente,&amp;error,NULL, <font 
class="stringliteral">"\n\n"</font>,2);
+00052   }
+00053   error.red = 0xff00;
+00054   error.green = 0;
+00055   error.blue =0;    
+00056   fuente = gdk_font_load(<font 
class="stringliteral">"-adobe-courier-bold-r-*-*-18-*-*-*-*-*-*-*"</font>);
+00057   <font class="comment">/* ¿Qué carajo pasa aquí? */</font>
+00058   <font class="comment">/*
+</font>00059 <font class="comment">   * Nada, que el servidor de sonido de 
GNOME
+</font>00060 <font class="comment">   * no me hace ni puñetero caso, oye
+</font>00061 <font class="comment">   * De todas formas, como no se usará 
GNOME, esto habrá que cambiarlo o dejarlo
+</font>00062 <font class="comment">   *
+</font>00063 <font class="comment">   * lain: ¿Qué te parecería que pusiésemos 
esl sonido en un módulo aparte (llamadas IOCTL)
+</font>00064 <font class="comment">   * y aquí tan sólo llamásemos a una 
función genérica como reproduce_sonido()?
+</font>00065 <font class="comment">   * 
+</font>00066 <font class="comment">   * 
+</font>00067 <font class="comment">   */</font>
+00068   <font class="comment">/*gnome_sound_init("localhost");*/</font>
+00069   <font class="comment">/*gnome_sound_play("pop.wav");*/</font>
+00070   <font class="comment">/*gnome_sound_shutdown();*/</font>
+00071   <font class="comment">/* Ein? */</font>
+00072   <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'d'</font> || event-&gt;keyval == <font 
class="charliteral">'D'</font>)
+00073           {
+00074 
+00075                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bd"</font>);
+00076             gtk_widget_grab_focus (miboton);
+00077         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00078 
+00079         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'d'</font>)
+00080                     <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00081                           gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
+00082                                 <font class="keywordflow">else</font>
+00083                           gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"d"</font>,1);
+00084         <font class="keywordflow">else</font>
+00085                                 <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00086                                                 gtk_text_insert 
(GTK_TEXT (mitexto),fuente,&amp;error,NULL,<font 
class="stringliteral">"*"</font>,1);
+00087                                 <font class="keywordflow">else</font>
+00088                                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"D"</font>, 1); 
+00089                 <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00090                 contador_caracter = contador_caracter +1;
+00091         <font class="keywordflow">else</font>
+00092                 contador_caracter = 0;
+00093                         caracter_actual=leccionactual[contador_caracter];
+00094                                            }                       
+00095 
+00096 <font class="comment">/*****************************************/</font>
+00097 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'q'</font> || event-&gt;keyval == <font 
class="charliteral">'Q'</font>)
+00098           {
+00099 
+00100                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bq"</font>);
+00101             gtk_widget_grab_focus (miboton);
+00102         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00103                 <font class="keywordflow">if</font> (event-&gt;keyval == 
<font class="charliteral">'q'</font>)
+00104                         <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)   
+00105                 gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00106                     <font class="keywordflow">else</font>
+00107                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"q"</font>,1);          
             
+00108         <font class="keywordflow">else</font>
+00109                                 <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00110                                                 gtk_text_insert 
(GTK_TEXT (mitexto),fuente,&amp;error,NULL,<font 
class="stringliteral">"*"</font>,1);
+00111                                 <font class="keywordflow">else</font>
+00112                                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"Q"</font>, 1);
+00113         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00114                                 contador_caracter = contador_caracter +1;
+00115                 <font class="keywordflow">else</font>
+00116                                 contador_caracter = 0;
+00117                 caracter_actual=leccionactual[contador_caracter];
+00118            }
+00119 
+00120 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'w'</font> || event-&gt;keyval == <font 
class="charliteral">'W'</font>)
+00121           {
+00122 
+00123                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bw"</font>);
+00124             gtk_widget_grab_focus (miboton);
+00125         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00126         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'w'</font>)
+00127             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00128             gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);    
+00129                         <font class="keywordflow">else</font>
+00130             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"w"</font>,1);
+00131         <font class="keywordflow">else</font>
+00132                                 <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00133                                                 gtk_text_insert 
(GTK_TEXT(mitexto),fuente,&amp;error,NULL,<font 
class="stringliteral">"*"</font>,1);
+00134                                 <font class="keywordflow">else</font>
+00135                                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"W"</font>, 1);       
+00136             <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00137             contador_caracter = contador_caracter +1;
+00138                 <font class="keywordflow">else</font>
+00139                     contador_caracter = 0;
+00140                     caracter_actual=leccionactual[contador_caracter];
+00141           }                       
+00142 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'e'</font> || event-&gt;keyval == <font 
class="charliteral">'E'</font>)
+00143           {
+00144 
+00145                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"be"</font>);
+00146             gtk_widget_grab_focus (miboton);
+00147         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00148  <font class="keywordflow">if</font> (acento == 1)
+00149         {
+00150           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'e'</font>)
+00151             <font class="keywordflow">if</font> (<font 
class="charliteral">'é'</font> != caracter_actual)
+00152              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00153             <font class="keywordflow">else</font>
+00154             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"é"</font>,1);
+00155          <font class="keywordflow">else</font>
+00156             <font class="keywordflow">if</font> (<font 
class="charliteral">'É'</font> != caracter_actual)
+00157               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00158             <font class="keywordflow">else</font>
+00159              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"É"</font>, 1);
+00160          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00161                 contador_caracter = contador_caracter +1;
+00162          <font class="keywordflow">else</font>
+00163                  contador_caracter = 0;
+00164          caracter_actual=leccionactual[contador_caracter];
+00165          acento=0;
+00166         }
+00167         <font class="keywordflow">else</font>
+00168         {          
+00169          <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'e'</font>)
+00170              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00171                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
 
+00172                          <font class="keywordflow">else</font>
+00173                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"e"</font>,1);
+00174                   <font class="keywordflow">else</font>
+00175                          <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00176                                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL,<font class="stringliteral">"*"</font>,1);
+00177                          <font class="keywordflow">else</font>
+00178                              gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"E"</font>, 1); 
+00179                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00180                      contador_caracter = contador_caracter +1;
+00181                   <font class="keywordflow">else</font>
+00182                               contador_caracter = 0;
+00183                               
caracter_actual=leccionactual[contador_caracter];
+00184           }            
+00185 }       
+00186 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'r'</font> || event-&gt;keyval == <font 
class="charliteral">'R'</font>)
+00187           {
+00188 
+00189                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"br"</font>);
+00190             gtk_widget_grab_focus (miboton);
+00191         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00192                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'r'</font>)
+00193                       <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00194                           gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00195                           <font class="keywordflow">else</font>
+00196                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"r"</font>,1);
+00197          <font class="keywordflow">else</font>
+00198                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00199                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00200                         <font class="keywordflow">else</font>
+00201                                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"R"</font>, 1);   
+00202                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00203                 contador_caracter = contador_caracter +1;
+00204          <font class="keywordflow">else</font>
+00205                 contador_caracter = 0;
+00206                          
caracter_actual=leccionactual[contador_caracter];
+00207            }                       
+00208 
+00209 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'t'</font> || event-&gt;keyval == <font 
class="charliteral">'T'</font>)
+00210           {
+00211 
+00212                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bt"</font>);
+00213             gtk_widget_grab_focus (miboton);
+00214         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00215                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'t'</font>)
+00216            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00217              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);   
+00218                    <font class="keywordflow">else</font>
+00219              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"t"</font>,1);
+00220          <font class="keywordflow">else</font>
+00221                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00222                 gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00223                         <font class="keywordflow">else</font>
+00224                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"T"</font>, 1);     
+00225                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00226                     contador_caracter = contador_caracter +1;
+00227                  <font class="keywordflow">else</font>
+00228                         contador_caracter = 0;
+00229                     caracter_actual=leccionactual[contador_caracter];
+00230            }                       
+00231 
+00232 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'y'</font> || event-&gt;keyval == <font 
class="charliteral">'Y'</font>)
+00233           {
+00234 
+00235                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"by"</font>);
+00236             gtk_widget_grab_focus (miboton);
+00237         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00238                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'y'</font>)
+00239             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00240              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1); 
+00241                         <font class="keywordflow">else</font>
+00242              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"y"</font>,1);
+00243          <font class="keywordflow">else</font>
+00244                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00245             gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);  
+00246                         <font class="keywordflow">else</font> 
+00247                                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"Y"</font>, 1);     
+00248                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00249              contador_caracter = contador_caracter +1;
+00250          <font class="keywordflow">else</font>
+00251              contador_caracter = 0;
+00252              caracter_actual=leccionactual[contador_caracter];
+00253           }                       
+00254 
+00255 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'u'</font> || event-&gt;keyval == <font 
class="charliteral">'U'</font>)
+00256           {
+00257 
+00258                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bu"</font>);
+00259             gtk_widget_grab_focus (miboton);
+00260         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00261  <font class="keywordflow">if</font> (acento == 1)
+00262         {
+00263           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'u'</font>)
+00264             <font class="keywordflow">if</font> (<font 
class="charliteral">'ú'</font> != caracter_actual)
+00265              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00266             <font class="keywordflow">else</font>
+00267             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"ú"</font>,1);
+00268          <font class="keywordflow">else</font>
+00269             <font class="keywordflow">if</font> (<font 
class="charliteral">'Ú'</font> != caracter_actual)
+00270               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00271             <font class="keywordflow">else</font>
+00272              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Ú"</font>, 1);
+00273          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00274                 contador_caracter = contador_caracter +1;
+00275          <font class="keywordflow">else</font>
+00276                  contador_caracter = 0;
+00277          caracter_actual=leccionactual[contador_caracter];
+00278          acento=0;
+00279         }
+00280         <font class="keywordflow">else</font>
+00281         {          
+00282                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'u'</font>)
+00283             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00284                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00285                         <font class="keywordflow">else</font>
+00286                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"u"</font>,1);
+00287          <font class="keywordflow">else</font>
+00288                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00289                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00290           <font class="keywordflow">else</font>  
+00291                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"U"</font>, 1);   
  
+00292                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00293                 contador_caracter = contador_caracter +1;
+00294                  <font class="keywordflow">else</font>
+00295                  contador_caracter = 0;
+00296                          
caracter_actual=leccionactual[contador_caracter];
+00297            }       
+00298 }                
+00299 
+00300 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'i'</font> || event-&gt;keyval == <font 
class="charliteral">'I'</font>)
+00301           {
+00302 
+00303                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bi"</font>);
+00304             gtk_widget_grab_focus (miboton);
+00305         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00306  <font class="keywordflow">if</font> (acento == 1)
+00307         {
+00308           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'i'</font>)
+00309             <font class="keywordflow">if</font> (<font 
class="charliteral">'í'</font> != caracter_actual)
+00310              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00311             <font class="keywordflow">else</font>
+00312             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"í"</font>,1);
+00313          <font class="keywordflow">else</font>
+00314             <font class="keywordflow">if</font> (<font 
class="charliteral">'Í'</font> != caracter_actual)
+00315               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00316             <font class="keywordflow">else</font>
+00317              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Í"</font>, 1);
+00318          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00319                 contador_caracter = contador_caracter +1;
+00320          <font class="keywordflow">else</font>
+00321                  contador_caracter = 0;
+00322          caracter_actual=leccionactual[contador_caracter];
+00323          acento=0;
+00324         }
+00325         <font class="keywordflow">else</font>
+00326         {          
+00327                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'i'</font>)
+00328             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00329              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);   
+00330                         <font class="keywordflow">else</font>
+00331              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"i"</font>,1);
+00332               <font class="keywordflow">else</font>
+00333                    <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00334               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00335            <font class="keywordflow">else</font>  
+00336              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"I"</font>, 1);  
+00337                          <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00338                  contador_caracter = contador_caracter +1;
+00339                  <font class="keywordflow">else</font>
+00340                  contador_caracter = 0;
+00341                          
caracter_actual=leccionactual[contador_caracter];
+00342        }           
+00343 }            
+00344 
+00345 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'o'</font> || event-&gt;keyval == <font 
class="charliteral">'O'</font>)
+00346           {
+00347 
+00348                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bo"</font>);
+00349             gtk_widget_grab_focus (miboton);
+00350         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00351  <font class="keywordflow">if</font> (acento == 1)
+00352         {
+00353           <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'o'</font>)
+00354             <font class="keywordflow">if</font> (<font 
class="charliteral">'ó'</font> != caracter_actual)
+00355              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00356             <font class="keywordflow">else</font>
+00357             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"ó"</font>,1);
+00358          <font class="keywordflow">else</font>
+00359             <font class="keywordflow">if</font> (<font 
class="charliteral">'Ó'</font> != caracter_actual)
+00360               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00361             <font class="keywordflow">else</font>
+00362              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Ó"</font>, 1);
+00363          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00364                 contador_caracter = contador_caracter +1;
+00365          <font class="keywordflow">else</font>
+00366                  contador_caracter = 0;
+00367          caracter_actual=leccionactual[contador_caracter];
+00368          acento=0;
+00369         }
+00370         <font class="keywordflow">else</font>
+00371         {          
+00372                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'o'</font>)
+00373           <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00374              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);     
+00375                   <font class="keywordflow">else</font>
+00376              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"o"</font>,1);
+00377          <font class="keywordflow">else</font>
+00378                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00379              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00380           <font class="keywordflow">else</font>  
+00381                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"O"</font>, 1);   
 
+00382                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00383               contador_caracter = contador_caracter +1;
+00384                  <font class="keywordflow">else</font>
+00385               contador_caracter = 0;
+00386                  caracter_actual=leccionactual[contador_caracter];
+00387        }                       
+00388 }
+00389 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'p'</font> || event-&gt;keyval == <font 
class="charliteral">'P'</font>)
+00390           {
+00391 
+00392                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bp"</font>);
+00393             gtk_widget_grab_focus (miboton);
+00394         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00395                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'p'</font>)
+00396              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00397                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00398                          <font class="keywordflow">else</font>
+00399                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"p"</font>,1);
+00400          <font class="keywordflow">else</font>
+00401                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00402              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00403           <font class="keywordflow">else</font>  
+00404                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"P"</font>, 1);   
 
+00405                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00406                contador_caracter = contador_caracter +1;
+00407          <font class="keywordflow">else</font>
+00408                contador_caracter = 0;
+00409                  caracter_actual=leccionactual[contador_caracter];
+00410        }                       
+00411 
+00412 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'a'</font> || event-&gt;keyval == <font 
class="charliteral">'A'</font>)
+00413           {
+00414 
+00415                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"ba"</font>);
+00416             gtk_widget_grab_focus (miboton);
+00417         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00418         <font class="keywordflow">if</font> (acento == 1)
+00419                 {
+00420                   <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'a'</font>)
+00421             <font class="keywordflow">if</font> (<font 
class="charliteral">'á'</font> != caracter_actual)
+00422              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00423             <font class="keywordflow">else</font>
+00424             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"á"</font>,1);
+00425          <font class="keywordflow">else</font>
+00426             <font class="keywordflow">if</font> (<font 
class="charliteral">'Á'</font> != caracter_actual)
+00427               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00428             <font class="keywordflow">else</font>
+00429              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"Á"</font>, 1);
+00430          <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00431                 contador_caracter = contador_caracter +1;
+00432          <font class="keywordflow">else</font>
+00433                  contador_caracter = 0;
+00434          caracter_actual=leccionactual[contador_caracter];
+00435                  acento=0;    
+00436                 }
+00437                 <font class="keywordflow">else</font>
+00438                 {
+00439                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'a'</font>)
+00440             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00441              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);  
+00442                         <font class="keywordflow">else</font>
+00443                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"a"</font>,1);          
 
+00444          <font class="keywordflow">else</font>
+00445                 <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00446               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00447             <font class="keywordflow">else</font>  
+00448                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"A"</font>, 1);   
+00449                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00450                 contador_caracter = contador_caracter +1;
+00451          <font class="keywordflow">else</font>
+00452                  contador_caracter = 0;
+00453                  caracter_actual=leccionactual[contador_caracter];
+00454                 }
+00455 }
+00456 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'f'</font> || event-&gt;keyval == <font 
class="charliteral">'F'</font>)
+00457           {
+00458 
+00459                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bf"</font>);
+00460             gtk_widget_grab_focus (miboton);
+00461         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00462                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'f'</font>)
+00463             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00464                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00465                         <font class="keywordflow">else</font>
+00466                 gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"f"</font>,1);
+00467          <font class="keywordflow">else</font>
+00468                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00469              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00470           <font class="keywordflow">else</font>  
+00471              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"F"</font>, 1);  
+00472                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00473                  contador_caracter = contador_caracter +1;
+00474          <font class="keywordflow">else</font>
+00475                  contador_caracter = 0;
+00476                          
caracter_actual=leccionactual[contador_caracter];
+00477            }                       
+00478 
+00479 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'g'</font> || event-&gt;keyval == <font 
class="charliteral">'G'</font>)
+00480           {
+00481 
+00482                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bg"</font>);
+00483             gtk_widget_grab_focus (miboton);
+00484         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00485                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'g'</font>)
+00486              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00487                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
   
+00488                          <font class="keywordflow">else</font>
+00489                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"g"</font>,1);
+00490                  <font class="keywordflow">else</font>
+00491           <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00492            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00493       <font class="keywordflow">else</font>  
+00494                    gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"G"</font>, 1);   
    
+00495                    <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00496                                    contador_caracter = contador_caracter 
+1;
+00497                          <font class="keywordflow">else</font>
+00498                                       contador_caracter = 0;
+00499                                          
caracter_actual=leccionactual[contador_caracter];
+00500                                                     }                    
   
+00501 
+00502 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'h'</font> || event-&gt;keyval == <font 
class="charliteral">'H'</font>)
+00503           {
+00504 
+00505                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bh"</font>);
+00506             gtk_widget_grab_focus (miboton);
+00507         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00508                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'h'</font>)
+00509              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00510                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00511                          <font class="keywordflow">else</font>
+00512                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"h"</font>,1);
+00513              <font class="keywordflow">else</font>
+00514                  <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00515                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00516                  <font class="keywordflow">else</font>  
+00517                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"H"</font>, 1);   
+00518                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00519                 contador_caracter = contador_caracter +1;
+00520          <font class="keywordflow">else</font>
+00521                                                                  
contador_caracter = 0;
+00522                                          
caracter_actual=leccionactual[contador_caracter];
+00523                                                     }                    
   
+00524 
+00525 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'j'</font> || event-&gt;keyval == <font 
class="charliteral">'J'</font>)
+00526           {
+00527 
+00528                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bj"</font>);
+00529             gtk_widget_grab_focus (miboton);
+00530         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00531                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'j'</font>)
+00532             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00533                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1); 
+00534                         <font class="keywordflow">else</font>
+00535              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"j"</font>,1);
+00536                  <font class="keywordflow">else</font>
+00537                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00538              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00539           <font class="keywordflow">else</font>  
+00540              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"J"</font>, 1);   
+00541                          <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00542                       contador_caracter = contador_caracter +1;
+00543                  <font class="keywordflow">else</font>
+00544                      contador_caracter = 0;
+00545                          
caracter_actual=leccionactual[contador_caracter];
+00546               }                       
+00547 
+00548                           
+00549 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'k'</font> || event-&gt;keyval == <font 
class="charliteral">'K'</font>)
+00550 {
+00551                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bk"</font>);
+00552             gtk_widget_grab_focus (miboton);
+00553         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00554                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'k'</font>)
+00555              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00556                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00557                          <font class="keywordflow">else</font>
+00558                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"k"</font>,1);
+00559              <font class="keywordflow">else</font>
+00560                  <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00561                    gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00562                  <font class="keywordflow">else</font>  
+00563                gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"K"</font>, 1);   
 
+00564                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00565             contador_caracter = contador_caracter +1;
+00566          <font class="keywordflow">else</font>
+00567          contador_caracter = 0;
+00568         caracter_actual=leccionactual[contador_caracter];
+00569                     }                       
+00570 
+00571 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'l'</font> || event-&gt;keyval == <font 
class="charliteral">'L'</font>)
+00572           {
+00573 
+00574                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bl"</font>);
+00575             gtk_widget_grab_focus (miboton);
+00576         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00577                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'l'</font>)
+00578              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00579                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1); 
+00580                          <font class="keywordflow">else</font>
+00581                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"l"</font>,1);
+00582                          <font class="keywordflow">else</font>
+00583                                  <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00584                                   gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00585                                  <font class="keywordflow">else</font>  
+00586                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"L"</font>, 1);   
 
+00587                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00588                              contador_caracter = contador_caracter +1;
+00589                          <font class="keywordflow">else</font>
+00590                          contador_caracter = 0;
+00591                          
caracter_actual=leccionactual[contador_caracter];
+00592                                                             }            
           
+00593 
+00594 <font class="keywordflow">if</font> (event-&gt;keyval == 241 || 
event-&gt;keyval == 209 )
+00595           {
+00596 
+00597                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bnn"</font>);
+00598             gtk_widget_grab_focus (miboton);
+00599         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00600                  <font class="keywordflow">if</font> (event-&gt;keyval 
== 0xf1)
+00601           <font class="keywordflow">if</font> ((<font 
class="charliteral">'ñ'</font> != caracter_actual <font class="comment">/* 
Depurar ESTO */</font>))
+00602              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);     
+00603                   <font class="keywordflow">else</font>
+00604              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"ñ"</font>,1);
+00605                  <font class="keywordflow">else</font>
+00606                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00607                   gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00608                   <font class="keywordflow">else</font>  
+00609                    gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"Ñ"</font>, 1);   
+00610                <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00611                      contador_caracter = contador_caracter +1;
+00612                    <font class="keywordflow">else</font>
+00613                     contador_caracter = 0;
+00614              caracter_actual=leccionactual[contador_caracter];
+00615      }                       
+00616 
+00617 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'z'</font> || event-&gt;keyval == <font 
class="charliteral">'Z'</font>)
+00618           {
+00619 
+00620                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bz"</font>);
+00621             gtk_widget_grab_focus (miboton);
+00622         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00623                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'z'</font>)
+00624              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00625                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
  
+00626                          <font class="keywordflow">else</font>
+00627                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"z"</font>,1);
+00628                          <font class="keywordflow">else</font>
+00629                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00630                                   gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00631                           <font class="keywordflow">else</font>  
+00632                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"Z"</font>, 1);   
+00633                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00634                              contador_caracter = contador_caracter +1;
+00635                          <font class="keywordflow">else</font>
+00636                              contador_caracter = 0;
+00637                          
caracter_actual=leccionactual[contador_caracter];
+00638                                                             }            
           
+00639 
+00640 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'x'</font> || event-&gt;keyval == <font 
class="charliteral">'X'</font>)
+00641           {
+00642 
+00643                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bx"</font>);
+00644             gtk_widget_grab_focus (miboton);
+00645         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00646                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'x'</font>)
+00647          <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00648              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);   
+00649                  <font class="keywordflow">else</font>
+00650             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"x"</font>,1);
+00651          <font class="keywordflow">else</font>
+00652           <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00653                gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00654             <font class="keywordflow">else</font>  
+00655             gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"X"</font>, 1);   
+00656                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00657              contador_caracter = contador_caracter +1;
+00658          <font class="keywordflow">else</font>
+00659              contador_caracter = 0;
+00660                  caracter_actual=leccionactual[contador_caracter];
+00661                                                             }            
           
+00662 
+00663 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'c'</font> || event-&gt;keyval == <font 
class="charliteral">'C'</font>)
+00664           {
+00665 
+00666                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bc"</font>);
+00667             gtk_widget_grab_focus (miboton);
+00668         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00669                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'c'</font>)
+00670                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00671                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
   
+00672                   <font class="keywordflow">else</font>
+00673                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"c"</font>,1);
+00674                  <font class="keywordflow">else</font>
+00675                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00676                               gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00677                          <font class="keywordflow">else</font>  
+00678                          gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"C"</font>, 1);   
+00679                          <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00680                        contador_caracter = contador_caracter +1;
+00681                          <font class="keywordflow">else</font>
+00682                         contador_caracter = 0;
+00683                          
caracter_actual=leccionactual[contador_caracter];
+00684                                                             }            
           
+00685 
+00686 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'v'</font> || event-&gt;keyval == <font 
class="charliteral">'V'</font>)
+00687           {
+00688 
+00689                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bv"</font>);
+00690             gtk_widget_grab_focus (miboton);
+00691         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00692                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'v'</font>)
+00693                      <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00694                             gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00695                          <font class="keywordflow">else</font>
+00696             gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"v"</font>,1);
+00697                          <font class="keywordflow">else</font>
+00698                           <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00699                              gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00700                           <font class="keywordflow">else</font>  
+00701                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"V"</font>, 1);   
  
+00702                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00703                                  contador_caracter = contador_caracter 
+1;
+00704                          <font class="keywordflow">else</font>
+00705                                  contador_caracter = 0;
+00706                                          
caracter_actual=leccionactual[contador_caracter];
+00707                                                             }            
           
+00708 
+00709 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'b'</font> || event-&gt;keyval == <font 
class="charliteral">'B'</font>)
+00710           {
+00711 
+00712                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bb"</font>);
+00713             gtk_widget_grab_focus (miboton);
+00714         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00715                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'b'</font>)
+00716                        <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00717                             gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00718                            <font class="keywordflow">else</font>
+00719                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"b"</font>,1);
+00720                          <font class="keywordflow">else</font>
+00721                                  <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00722                                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00723                                  <font class="keywordflow">else</font>  
+00724                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"B"</font>, 1);   
   
+00725                                  <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00726                               contador_caracter = contador_caracter +1;
+00727                          <font class="keywordflow">else</font>
+00728                                  contador_caracter = 0;
+00729                                          
caracter_actual=leccionactual[contador_caracter];
+00730                                                             }            
           
+00731 
+00732 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'n'</font> || event-&gt;keyval == <font 
class="charliteral">'N'</font>)
+00733           {
+00734 
+00735                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bn"</font>);
+00736             gtk_widget_grab_focus (miboton);
+00737         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00738                  <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">'n'</font>)
+00739              <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00740              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);  
+00741                          <font class="keywordflow">else</font>
+00742              gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, <font 
class="stringliteral">"n"</font>,1);
+00743          <font class="keywordflow">else</font>
+00744                   <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00745                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00746                   <font class="keywordflow">else</font>  
+00747              gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"N"</font>, 1);
+00748                  <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00749              contador_caracter = contador_caracter +1;
+00750          <font class="keywordflow">else</font>
+00751               contador_caracter = 0;
+00752                  caracter_actual=leccionactual[contador_caracter];
+00753                             }                       
+00754 <font class="comment">/***/</font>
+00755 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'m'</font> || event-&gt;keyval == <font 
class="charliteral">'M'</font>)
+00756           {
+00757 
+00758                 miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00759             gtk_widget_grab_focus (miboton);
+00760         <font class="comment">/*      gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00761                 <font class="keywordflow">if</font> (event-&gt;keyval == 
<font class="charliteral">'m'</font>)
+00762            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00763                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1); 
+00764                    <font class="keywordflow">else</font>
+00765                      gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"m"</font>,1);
+00766         <font class="keywordflow">else</font>
+00767             <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00768                gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00769             <font class="keywordflow">else</font>  
+00770                    gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"M"</font>, 1);   
  
+00771                 <font class="keywordflow">if</font> (contador_caracter 
&lt; (longitud ))
+00772             contador_caracter = contador_caracter +1;
+00773         <font class="keywordflow">else</font>
+00774             contador_caracter = 0;
+00775         caracter_actual=leccionactual[contador_caracter];
+00776 }                       
+00777 <font class="comment">/***/</font>
+00778 <font class="comment">/***/</font>
+00779 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">','</font> || event-&gt;keyval == <font 
class="charliteral">';'</font>)
+00780       {
+00781  
+00782         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00783         gtk_widget_grab_focus (miboton);
+00784     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00785         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">','</font>)
+00786            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00787                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00788            <font class="keywordflow">else</font>
+00789                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">","</font>,1);
+00790         <font class="keywordflow">else</font>
+00791         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00792            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00793         <font class="keywordflow">else</font>
+00794            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">";"</font>, 1);
+00795         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00796             contador_caracter = contador_caracter +1;
+00797         <font class="keywordflow">else</font>
+00798             contador_caracter = 0;
+00799         caracter_actual=leccionactual[contador_caracter];
+00800 }
+00801 <font class="comment">/***/</font>
+00802 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'.'</font> || event-&gt;keyval == <font 
class="charliteral">':'</font>)
+00803       {
+00804  
+00805         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00806         gtk_widget_grab_focus (miboton);
+00807     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00808         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'.'</font>)
+00809            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00810                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00811            <font class="keywordflow">else</font>
+00812                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"."</font>,1);
+00813         <font class="keywordflow">else</font>
+00814         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00815            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00816         <font class="keywordflow">else</font>
+00817            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">":"</font>, 1);
+00818         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00819             contador_caracter = contador_caracter +1;
+00820         <font class="keywordflow">else</font>
+00821             contador_caracter = 0;
+00822         caracter_actual=leccionactual[contador_caracter];
+00823 }
+00824 <font class="comment">/***/</font>
+00825 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'-'</font> || event-&gt;keyval == <font 
class="charliteral">'_'</font>)
+00826       {
+00827  
+00828         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00829         gtk_widget_grab_focus (miboton);
+00830     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00831         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'-'</font>)
+00832            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00833                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00834            <font class="keywordflow">else</font>
+00835                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"-"</font>,1);
+00836         <font class="keywordflow">else</font>
+00837         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00838            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00839         <font class="keywordflow">else</font>
+00840            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"_"</font>, 1);
+00841         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00842             contador_caracter = contador_caracter +1;
+00843         <font class="keywordflow">else</font>
+00844             contador_caracter = 0;
+00845         caracter_actual=leccionactual[contador_caracter];
+00846 }
+00847 <font class="comment">/***/</font>
+00848 <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'&lt;'</font> || event-&gt;keyval == <font 
class="charliteral">'&gt;'</font>)
+00849       {
+00850  
+00851         miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bm"</font>);
+00852         gtk_widget_grab_focus (miboton);
+00853     <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00854         <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'&lt;'</font>)
+00855            <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00856                  gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00857            <font class="keywordflow">else</font>
+00858                  gtk_text_insert (GTK_TEXT (mitexto),fuente,NULL,NULL, 
<font class="stringliteral">"&lt;"</font>,1);
+00859         <font class="keywordflow">else</font>
+00860         <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00861            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"*"</font>, 1);
+00862         <font class="keywordflow">else</font>
+00863            gtk_text_insert (GTK_TEXT (mitexto),fuente,&amp;error,NULL, 
<font class="stringliteral">"&gt;"</font>, 1);
+00864         <font class="keywordflow">if</font> (contador_caracter &lt; 
(longitud ))
+00865             contador_caracter = contador_caracter +1;
+00866         <font class="keywordflow">else</font>
+00867             contador_caracter = 0;
+00868         caracter_actual=leccionactual[contador_caracter];
+00869 }
+00870 <font class="comment">/***/</font>
+00871 <font class="comment">/***/</font>    
+00872 <font class="comment">/***/</font>    
+00873 <font class="comment">/***/</font>    
+00874 <font class="comment">/***/</font>    
+00875 <font class="comment">/***/</font>
+00876 
+00877 <font class="comment">//Se pulsó acento    </font>
+00878 <font class="keywordflow">if</font> (event-&gt;keyval == 0xfe51)
+00879         {
+00880                 acento=1;
+00881         }
+00882 
+00883 <font class="comment">//Borrar</font>
+00884 <font class="keywordflow">if</font> (event-&gt;keyval == 65288)
+00885       {
+00886           miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"borrar"</font>);
+00887           gtk_widget_grab_focus (miboton);
+00888           <font class="comment">/*  gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00889           gtk_text_backward_delete (GTK_TEXT (mitexto),(guint) 1);
+00890                   contador_caracter = contador_caracter - 1;
+00891                   caracter_actual=leccionactual[contador_caracter];   
+00892       }
+00893 
+00894 
+00895 <font class="comment">/*****************************************/</font>
+00896  <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">'s'</font> || event-&gt;keyval == <font 
class="charliteral">'S'</font>)
+00897        {
+00898 
+00899            miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"bs"</font>);
+00900            gtk_widget_grab_focus (miboton);
+00901        <font class="comment">/*    gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00902                     <font class="keywordflow">if</font> 
(event-&gt;keyval == <font class="charliteral">'s'</font>)
+00903                     <font class="keywordflow">if</font> 
(event-&gt;keyval != caracter_actual)
+00904                             gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);  
+00905                                 <font class="keywordflow">else</font>
+00906                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">"s"</font>,1);
+00907                 <font class="keywordflow">else</font>
+00908                  <font class="keywordflow">if</font> (event-&gt;keyval 
!= caracter_actual)
+00909                         gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);
+00910                     <font class="keywordflow">else</font>  
+00911                     gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"S"</font>, 1);   
     
+00912                         <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00913                         contador_caracter = contador_caracter +1;
+00914                      <font class="keywordflow">else</font>
+00915                         contador_caracter = 0;
+00916                        caracter_actual=leccionactual[contador_caracter];
+00917                                                                    }     
                  
+00918 
+00919                    
+00920  <font class="keywordflow">if</font> (event-&gt;keyval == 65293)
+00921        {
+00922 
+00923            miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"retorno"</font>);
+00924            gtk_widget_grab_focus (miboton);
+00925       <font class="comment">/*     gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00926            gtk_text_insert (GTK_TEXT (mitexto),NULL,NULL,NULL, <font 
class="stringliteral">"\n"</font>, 1);
+00927                    contador_caracter = 0;
+00928                    caracter_actual=leccionactual[contador_caracter];     
        
+00929 
+00930            }          
+00931  <font class="keywordflow">if</font> (event-&gt;keyval == <font 
class="charliteral">' '</font>)
+00932       {
+00933 
+00934            miboton = <a class="code" 
href="suporte_c.html#a4">lookup_widget</a> (GTK_WIDGET (widget), <font 
class="stringliteral">"espacio"</font>);
+00935            gtk_widget_grab_focus (miboton);
+00936       <font class="comment">/*     gtk_button_clicked (GTK_BUTTON 
(miboton));*/</font>
+00937                    <font class="keywordflow">if</font> (event-&gt;keyval 
== <font class="charliteral">' '</font>)
+00938                <font class="keywordflow">if</font> (event-&gt;keyval != 
caracter_actual)
+00939                        gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">"*"</font>, 1);   
      
+00940                            <font class="keywordflow">else</font>
+00941                            gtk_text_insert (GTK_TEXT 
(mitexto),fuente,NULL,NULL, <font class="stringliteral">" "</font>,1);
+00942                    <font class="keywordflow">else</font>
+00943                       gtk_text_insert (GTK_TEXT 
(mitexto),fuente,&amp;error,NULL, <font class="stringliteral">" "</font>, 1);   
  
+00944                    <font class="keywordflow">if</font> 
(contador_caracter &lt; (longitud ))
+00945                     contador_caracter = contador_caracter +1;
+00946                <font class="keywordflow">else</font>
+00947                     contador_caracter = 0;
+00948                   caracter_actual=leccionactual[contador_caracter];
+00949                                                               }          
             
+00950         
+00951 
+00952 
+00953    <font class="comment">/* Fines de depuración */</font>
+00954    g_print(<font class="stringliteral">"Información de depuración: 
"</font>);
+00955    g_print(<font class="stringliteral">"%x --- Acento = 
%i|\n"</font>,event-&gt;keyval, acento);       
+00956  
+00957   <font class="keywordflow">return</font> FALSE;
+00958 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a27" doxytag="retrollamadas.c::on_window3_enter_notify_event"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gboolean on_window3_enter_notify_event (
+          </b></td>
+          <td valign="bottom"><b>
+GtkWidget * <em>widget</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+GdkEventCrossing * <em>event</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+gpointer <em>user_data</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l01147">1147</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.<div 
class="fragment"><pre>01150 {
+01151   gtk_widget_destroy(widget);
+01152   <font class="keywordflow">return</font> FALSE;
+01153 }
+</div></pre>    </td>
+  </tr>
+</table>
+<hr><h2>Documentación de las variables</h2>
+<a name="a7" doxytag="retrollamadas.c::acento"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gint acento = 0
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00021">21</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a5" doxytag="retrollamadas.c::caracter_actual"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gchar caracter_actual
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00018">18</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a6" doxytag="retrollamadas.c::contador_caracter"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gint contador_caracter = 0
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00019">19</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a3" doxytag="retrollamadas.c::leccion_a_insertar"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gint leccion_a_insertar = 1
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00016">16</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a0" doxytag="retrollamadas.c::leccion_insertada"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gint leccion_insertada = 0
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00013">13</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a4" doxytag="retrollamadas.c::leccionactual"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gchar * leccionactual
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00017">17</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a2" doxytag="retrollamadas.c::longitud"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gint longitud
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00015">15</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<a name="a1" doxytag="retrollamadas.c::max_lecciones"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gint max_lecciones = 10
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="retrollamadas_c-source.html#l00014">14</a> del archivo <a class="el" 
href="retrollamadas_c-source.html">retrollamadas.c</a>.    </td>
+  </tr>
+</table>
+<hr><address><small>Generado el Tue Mar 13 02:46:53 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/suporte_c-source.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/suporte_c-source.html
diff -N Proyectos/Mecagtk/doc_devel/suporte_c-source.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/suporte_c-source.html   3 Mar 2012 06:14:23 
-0000       1.1
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>suporte.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:49 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>suporte.c</h1><a href="suporte_c.html">Ir a la documentación de este 
archivo.</a><div class="fragment"><pre>00001 <font class="comment">/*
+</font>00002 <font class="comment"> * DO NOT EDIT THIS FILE - it is generated 
by Glade.
+</font>00003 <font class="comment"> */</font>
+00004 
+00005 <font class="preprocessor">#ifdef HAVE_CONFIG_H
+</font>00006 <font class="preprocessor"></font><font class="preprocessor">#  
include &lt;config.h&gt;</font>
+00007 <font class="preprocessor">#endif
+</font>00008 <font class="preprocessor"></font>
+00009 <font class="preprocessor">#include &lt;sys/types.h&gt;</font>
+00010 <font class="preprocessor">#include &lt;sys/stat.h&gt;</font>
+00011 <font class="preprocessor">#include &lt;unistd.h&gt;</font>
+00012 <font class="preprocessor">#include &lt;string.h&gt;</font>
+00013 
+00014 <font class="preprocessor">#include &lt;gtk/gtk.h&gt;</font>
+00015 
+00016 <font class="preprocessor">#include "suporte.h"</font>
+00017 
+00018 <font class="comment">/* This is an internally used function to check if 
a pixmap file exists. */</font>
+00019 <font class="keyword">static</font> gchar* <a class="code" 
href="suporte_c.html#a2">check_file_exists</a>        (<font 
class="keyword">const</font> gchar     *directory,
+00020                                         <font 
class="keyword">const</font> gchar     *filename);
+00021 
+00022 <font class="comment">/* This is an internally used function to create 
pixmaps. */</font>
+00023 <font class="keyword">static</font> GtkWidget* <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a>  (GtkWidget       *widget);
+00024 
+00025 GtkWidget*
+<a name="l00026"></a><a class="code" href="suporte_c.html#a4">00026</a> <a 
class="code" href="suporte_c.html#a4">lookup_widget</a>                         
 (GtkWidget       *widget,
+00027                                         <font 
class="keyword">const</font> gchar     *widget_name)<font class="keyword">
+</font>00028 <font class="keyword"></font>{
+00029   GtkWidget *parent, *found_widget;
+00030 
+00031   <font class="keywordflow">for</font> (;;)
+00032     {
+00033       <font class="keywordflow">if</font> (GTK_IS_MENU (widget))
+00034         parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+00035       <font class="keywordflow">else</font>
+00036         parent = widget-&gt;parent;
+00037       <font class="keywordflow">if</font> (parent == NULL)
+00038         <font class="keywordflow">break</font>;
+00039       widget = parent;
+00040     }
+00041 
+00042   found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
+00043                                                    widget_name);
+00044   <font class="keywordflow">if</font> (!found_widget)
+00045     g_warning (<font class="stringliteral">"Widget not found: 
%s"</font>, widget_name);
+00046   <font class="keywordflow">return</font> found_widget;
+00047 }
+00048 
+00049 <font class="comment">/* This is a dummy pixmap we use when a pixmap 
can't be found. */</font>
+<a name="l00050"></a><a class="code" href="suporte_c.html#a0">00050</a> <font 
class="keyword">static</font> <font class="keywordtype">char</font> 
*dummy_pixmap_xpm[] = {
+00051 <font class="comment">/* columns rows colors chars-per-pixel */</font>
+00052 <font class="stringliteral">"1 1 1 1"</font>,
+00053 <font class="stringliteral">"  c None"</font>,
+00054 <font class="comment">/* pixels */</font>
+00055 <font class="stringliteral">" "</font>
+00056 };
+00057 
+00058 <font class="comment">/* This is an internally used function to create 
pixmaps. */</font>
+00059 <font class="keyword">static</font> GtkWidget*
+<a name="l00060"></a><a class="code" href="suporte_c.html#a3">00060</a> <a 
class="code" href="suporte_c.html#a3">create_dummy_pixmap</a>                   
 (GtkWidget       *widget)<font class="keyword">
+</font>00061 <font class="keyword"></font>{
+00062   GdkColormap *colormap;
+00063   GdkPixmap *gdkpixmap;
+00064   GdkBitmap *mask;
+00065   GtkWidget *pixmap;
+00066 
+00067   colormap = gtk_widget_get_colormap (widget);
+00068   gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, 
&amp;mask,
+00069                                                      NULL, 
dummy_pixmap_xpm);
+00070   <font class="keywordflow">if</font> (gdkpixmap == NULL)
+00071     g_error (<font class="stringliteral">"Couldn't create replacement 
pixmap."</font>);
+00072   pixmap = gtk_pixmap_new (gdkpixmap, mask);
+00073   gdk_pixmap_unref (gdkpixmap);
+00074   gdk_bitmap_unref (mask);
+00075   <font class="keywordflow">return</font> pixmap;
+00076 }
+00077 
+<a name="l00078"></a><a class="code" href="suporte_c.html#a1">00078</a> <font 
class="keyword">static</font> GList *pixmaps_directories = NULL;
+00079 
+00080 <font class="comment">/* Use this function to set the directory 
containing installed pixmaps. */</font>
+00081 <font class="keywordtype">void</font>
+<a name="l00082"></a><a class="code" href="suporte_c.html#a5">00082</a> <a 
class="code" href="suporte_c.html#a5">add_pixmap_directory</a>                  
 (<font class="keyword">const</font> gchar     *directory)<font class="keyword">
+</font>00083 <font class="keyword"></font>{
+00084   pixmaps_directories = g_list_prepend (pixmaps_directories,
+00085                                         g_strdup (directory));
+00086 }
+00087 
+00088 <font class="comment">/* This is an internally used function to create 
pixmaps. */</font>
+00089 GtkWidget*
+<a name="l00090"></a><a class="code" href="suporte_c.html#a6">00090</a> <a 
class="code" href="suporte_c.html#a6">create_pixmap</a>                         
 (GtkWidget       *widget,
+00091                                         <font 
class="keyword">const</font> gchar     *filename)<font class="keyword">
+</font>00092 <font class="keyword"></font>{
+00093   gchar *found_filename = NULL;
+00094   GdkColormap *colormap;
+00095   GdkPixmap *gdkpixmap;
+00096   GdkBitmap *mask;
+00097   GtkWidget *pixmap;
+00098   GList *elem;
+00099 
+00100   <font class="keywordflow">if</font> (!filename || !filename[0])
+00101       <font class="keywordflow">return</font> <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a> (widget);
+00102 
+00103   <font class="comment">/* We first try any pixmaps directories set by 
the application. */</font>
+00104   elem = pixmaps_directories;
+00105   <font class="keywordflow">while</font> (elem)
+00106     {
+00107       found_filename = <a class="code" 
href="suporte_c.html#a2">check_file_exists</a> ((gchar*)elem-&gt;data, 
filename);
+00108       <font class="keywordflow">if</font> (found_filename)
+00109         <font class="keywordflow">break</font>;
+00110       elem = elem-&gt;next;
+00111     }
+00112 
+00113   <font class="comment">/* If we haven't found the pixmap, try the 
source directory. */</font>
+00114   <font class="keywordflow">if</font> (!found_filename)
+00115     {
+00116       found_filename = <a class="code" 
href="suporte_c.html#a2">check_file_exists</a> (<font 
class="stringliteral">"../pixmaps"</font>, filename);
+00117     }
+00118 
+00119   <font class="keywordflow">if</font> (!found_filename)
+00120     {
+00121       g_warning (_(<font class="stringliteral">"Couldn't find pixmap 
file: %s"</font>), filename);
+00122       <font class="keywordflow">return</font> <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a> (widget);
+00123     }
+00124 
+00125   colormap = gtk_widget_get_colormap (widget);
+00126   gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, 
&amp;mask,
+00127                                                    NULL, found_filename);
+00128   <font class="keywordflow">if</font> (gdkpixmap == NULL)
+00129     {
+00130       g_warning (_(<font class="stringliteral">"Error loading pixmap 
file: %s"</font>), found_filename);
+00131       g_free (found_filename);
+00132       <font class="keywordflow">return</font> <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a> (widget);
+00133     }
+00134   g_free (found_filename);
+00135   pixmap = gtk_pixmap_new (gdkpixmap, mask);
+00136   gdk_pixmap_unref (gdkpixmap);
+00137   gdk_bitmap_unref (mask);
+00138   <font class="keywordflow">return</font> pixmap;
+00139 }
+00140 
+00141 <font class="comment">/* This is an internally used function to check if 
a pixmap file exists. */</font>
+00142 gchar*
+<a name="l00143"></a><a class="code" href="suporte_c.html#a2">00143</a> <a 
class="code" href="suporte_c.html#a2">check_file_exists</a>                     
 (<font class="keyword">const</font> gchar     *directory,
+00144                                         <font 
class="keyword">const</font> gchar     *filename)<font class="keyword">
+</font>00145 <font class="keyword"></font>{
+00146   gchar *full_filename;
+00147   <font class="keyword">struct </font>stat s;
+00148   gint status;
+00149 
+00150   full_filename = (gchar*) g_malloc (strlen (directory) + 1
+00151                                      + strlen (filename) + 1);
+00152   strcpy (full_filename, directory);
+00153   strcat (full_filename, G_DIR_SEPARATOR_S);
+00154   strcat (full_filename, filename);
+00155 
+00156   status = stat (full_filename, &amp;s);
+00157   <font class="keywordflow">if</font> (status == 0 &amp;&amp; S_ISREG 
(s.st_mode))
+00158     <font class="keywordflow">return</font> full_filename;
+00159   g_free (full_filename);
+00160   <font class="keywordflow">return</font> NULL;
+00161 }
+00162 
+</div></pre><hr><address><small>Generado el Tue Mar 13 02:46:49 2001 para 
mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/doc_devel/suporte_c.html
===================================================================
RCS file: Proyectos/Mecagtk/doc_devel/suporte_c.html
diff -N Proyectos/Mecagtk/doc_devel/suporte_c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/doc_devel/suporte_c.html  3 Mar 2012 06:14:23 -0000       
1.1
@@ -0,0 +1,387 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta name="robots" content="noindex">
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>suporte.c File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body bgcolor="#ffffff">
+<!-- Generated by Doxygen 1.2.1 on Tue Mar 13 02:46:53 2001 -->
+<center>
+<a class="qindex" href="index.html">Página principal</a> &nbsp; <a 
class="qindex" href="files.html">Lista de archivos</a> &nbsp; <a class="qindex" 
href="globals.html">Archivos de los miembros</a> &nbsp; </center>
+<hr><h1>suporte.c Archivo referencia</h1><code>#include 
&lt;sys/types.h&gt;</code><br>
+<code>#include &lt;sys/stat.h&gt;</code><br>
+<code>#include &lt;unistd.h&gt;</code><br>
+<code>#include &lt;string.h&gt;</code><br>
+<code>#include &lt;gtk/gtk.h&gt;</code><br>
+<code>#include "suporte.h"</code><br>
+
+<p>
+<a href="suporte_c-source.html">Ir al código fuente de este archivo.</a><table 
border=0 cellpadding=0 cellspacing=0>
+<tr><td colspan=2><br><h2>Funciones</h2></td></tr>
+<tr><td nowrap align=right valign=top>gchar*&nbsp;</td><td valign=bottom><a 
class="el" href="suporte_c.html#a2">check_file_exists</a> (const gchar 
*directory, const gchar *filename)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="suporte_c.html#a3">create_dummy_pixmap</a> 
(GtkWidget *widget)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="suporte_c.html#a4">lookup_widget</a> 
(GtkWidget *widget, const gchar *widget_name)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a 
class="el" href="suporte_c.html#a5">add_pixmap_directory</a> (const gchar 
*directory)</td></tr>
+<tr><td nowrap align=right valign=top>GtkWidget*&nbsp;</td><td 
valign=bottom><a class="el" href="suporte_c.html#a6">create_pixmap</a> 
(GtkWidget *widget, const gchar *filename)</td></tr>
+<tr><td colspan=2><br><h2>Variables</h2></td></tr>
+<tr><td nowrap align=right valign=top>char*&nbsp;</td><td valign=bottom><a 
class="el" href="suporte_c.html#a0">dummy_pixmap_xpm</a> []</td></tr>
+<tr><td nowrap align=right valign=top>GList*&nbsp;</td><td valign=bottom><a 
class="el" href="suporte_c.html#a1">pixmaps_directories</a> = NULL</td></tr>
+</table>
+<hr><h2>Documentación de las funciones</h2>
+<a name="a5" doxytag="suporte.c::add_pixmap_directory"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+void add_pixmap_directory (
+          </b></td>
+          <td valign="bottom"><b>
+const gchar * <em>directory</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00082">82</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.
+<p>
+Referenciado por <a class="el" 
href="main_c-source.html#l00016">main</a>().<div class="fragment"><pre>00083 {
+00084   pixmaps_directories = g_list_prepend (pixmaps_directories,
+00085                                         g_strdup (directory));
+00086 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a2" doxytag="suporte.c::check_file_exists"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+gchar * check_file_exists (
+          </b></td>
+          <td valign="bottom"><b>
+const gchar * <em>directory</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+const gchar * <em>filename</em>&nbsp;)<code> [static]</code>
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00143">143</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.
+<p>
+Referenciado por <a class="el" 
href="suporte_c-source.html#l00090">create_pixmap</a>().<div 
class="fragment"><pre>00145 {
+00146   gchar *full_filename;
+00147   <font class="keyword">struct </font>stat s;
+00148   gint status;
+00149 
+00150   full_filename = (gchar*) g_malloc (strlen (directory) + 1
+00151                                      + strlen (filename) + 1);
+00152   strcpy (full_filename, directory);
+00153   strcat (full_filename, G_DIR_SEPARATOR_S);
+00154   strcat (full_filename, filename);
+00155 
+00156   status = stat (full_filename, &amp;s);
+00157   <font class="keywordflow">if</font> (status == 0 &amp;&amp; S_ISREG 
(s.st_mode))
+00158     <font class="keywordflow">return</font> full_filename;
+00159   g_free (full_filename);
+00160   <font class="keywordflow">return</font> NULL;
+00161 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a3" doxytag="suporte.c::create_dummy_pixmap"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_dummy_pixmap (
+          </b></td>
+          <td valign="bottom"><b>
+GtkWidget * <em>widget</em>&nbsp;)<code> [static]</code>
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00060">60</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.
+<p>
+Referenciado por <a class="el" 
href="suporte_c-source.html#l00090">create_pixmap</a>().<div 
class="fragment"><pre>00061 {
+00062   GdkColormap *colormap;
+00063   GdkPixmap *gdkpixmap;
+00064   GdkBitmap *mask;
+00065   GtkWidget *pixmap;
+00066 
+00067   colormap = gtk_widget_get_colormap (widget);
+00068   gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, 
&amp;mask,
+00069                                                      NULL, 
dummy_pixmap_xpm);
+00070   <font class="keywordflow">if</font> (gdkpixmap == NULL)
+00071     g_error (<font class="stringliteral">"Couldn't create replacement 
pixmap."</font>);
+00072   pixmap = gtk_pixmap_new (gdkpixmap, mask);
+00073   gdk_pixmap_unref (gdkpixmap);
+00074   gdk_bitmap_unref (mask);
+00075   <font class="keywordflow">return</font> pixmap;
+00076 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a6" doxytag="suporte.c::create_pixmap"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * create_pixmap (
+          </b></td>
+          <td valign="bottom"><b>
+GtkWidget * <em>widget</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+const gchar * <em>filename</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00090">90</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.
+<p>
+Referenciado por <a class="el" 
href="interfaz_c-source.html#l01381">create_ventanaayuda</a>(), <a class="el" 
href="interfaz_c-source.html#l00022">create_window1</a>(), <a class="el" 
href="interfaz_c-source.html#l00970">create_window3</a>(), and <a class="el" 
href="interfaz_c-source.html#l00996">create_window5</a>().<div 
class="fragment"><pre>00092 {
+00093   gchar *found_filename = NULL;
+00094   GdkColormap *colormap;
+00095   GdkPixmap *gdkpixmap;
+00096   GdkBitmap *mask;
+00097   GtkWidget *pixmap;
+00098   GList *elem;
+00099 
+00100   <font class="keywordflow">if</font> (!filename || !filename[0])
+00101       <font class="keywordflow">return</font> <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a> (widget);
+00102 
+00103   <font class="comment">/* We first try any pixmaps directories set by 
the application. */</font>
+00104   elem = pixmaps_directories;
+00105   <font class="keywordflow">while</font> (elem)
+00106     {
+00107       found_filename = <a class="code" 
href="suporte_c.html#a2">check_file_exists</a> ((gchar*)elem-&gt;data, 
filename);
+00108       <font class="keywordflow">if</font> (found_filename)
+00109         <font class="keywordflow">break</font>;
+00110       elem = elem-&gt;next;
+00111     }
+00112 
+00113   <font class="comment">/* If we haven't found the pixmap, try the 
source directory. */</font>
+00114   <font class="keywordflow">if</font> (!found_filename)
+00115     {
+00116       found_filename = <a class="code" 
href="suporte_c.html#a2">check_file_exists</a> (<font 
class="stringliteral">"../pixmaps"</font>, filename);
+00117     }
+00118 
+00119   <font class="keywordflow">if</font> (!found_filename)
+00120     {
+00121       g_warning (_(<font class="stringliteral">"Couldn't find pixmap 
file: %s"</font>), filename);
+00122       <font class="keywordflow">return</font> <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a> (widget);
+00123     }
+00124 
+00125   colormap = gtk_widget_get_colormap (widget);
+00126   gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, 
&amp;mask,
+00127                                                    NULL, found_filename);
+00128   <font class="keywordflow">if</font> (gdkpixmap == NULL)
+00129     {
+00130       g_warning (_(<font class="stringliteral">"Error loading pixmap 
file: %s"</font>), found_filename);
+00131       g_free (found_filename);
+00132       <font class="keywordflow">return</font> <a class="code" 
href="suporte_c.html#a3">create_dummy_pixmap</a> (widget);
+00133     }
+00134   g_free (found_filename);
+00135   pixmap = gtk_pixmap_new (gdkpixmap, mask);
+00136   gdk_pixmap_unref (gdkpixmap);
+00137   gdk_bitmap_unref (mask);
+00138   <font class="keywordflow">return</font> pixmap;
+00139 }
+</div></pre>    </td>
+  </tr>
+</table>
+<a name="a4" doxytag="suporte.c::lookup_widget"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GtkWidget * lookup_widget (
+          </b></td>
+          <td valign="bottom"><b>
+GtkWidget * <em>widget</em>, 
+          </b></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td><b>
+const gchar * <em>widget_name</em>&nbsp;)
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00026">26</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.
+<p>
+Referenciado por <a class="el" 
href="retrollamadas_c-source.html#l01137">on_aboutcerrar_clicked</a>(), <a 
class="el" href="retrollamadas_c-source.html#l01157">on_salir2_activate</a>(), 
<a class="el" 
href="retrollamadas_c-source.html#l01168">on_salirayuda_clicked</a>(), and <a 
class="el" 
href="retrollamadas_c-source.html#l00024">on_window1_key_press_event</a>().<div 
class="fragment"><pre>00028 {
+00029   GtkWidget *parent, *found_widget;
+00030 
+00031   <font class="keywordflow">for</font> (;;)
+00032     {
+00033       <font class="keywordflow">if</font> (GTK_IS_MENU (widget))
+00034         parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+00035       <font class="keywordflow">else</font>
+00036         parent = widget-&gt;parent;
+00037       <font class="keywordflow">if</font> (parent == NULL)
+00038         <font class="keywordflow">break</font>;
+00039       widget = parent;
+00040     }
+00041 
+00042   found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
+00043                                                    widget_name);
+00044   <font class="keywordflow">if</font> (!found_widget)
+00045     g_warning (<font class="stringliteral">"Widget not found: 
%s"</font>, widget_name);
+00046   <font class="keywordflow">return</font> found_widget;
+00047 }
+</div></pre>    </td>
+  </tr>
+</table>
+<hr><h2>Documentación de las variables</h2>
+<a name="a0" doxytag="suporte.c::dummy_pixmap_xpm"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+char * dummy_pixmap_xpm[]<code> [static]</code>
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+<b>Valor inicial:</b><div class="fragment"><pre>{
+
+<font class="stringliteral">"1 1 1 1"</font>,
+<font class="stringliteral">"  c None"</font>,
+
+<font class="stringliteral">" "</font>
+}</div></pre>
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00050">50</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.    </td>
+  </tr>
+</table>
+<a name="a1" doxytag="suporte.c::pixmaps_directories"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td nowrap valign="top"><b> 
+GList * pixmaps_directories = NULL<code> [static]</code>
+          </b></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Definición en la línea <a class="el" 
href="suporte_c-source.html#l00078">78</a> del archivo <a class="el" 
href="suporte_c-source.html">suporte.c</a>.    </td>
+  </tr>
+</table>
+<hr><address><small>Generado el Tue Mar 13 02:46:53 2001 para mecagtk por
+<a href="http://www.stack.nl/~dimitri/doxygen/index.html";>
+<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
+width=110 height=53></a>1.2.1 escrito por <a 
href="mailto:address@hidden";>Dimitri van Heesch</a>,
+ &copy;&nbsp;1997-2000</small></address>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/LICENCIA.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/LICENCIA.txt
diff -N Proyectos/Mecagtk/miweb/LICENCIA.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/LICENCIA.txt        3 Mar 2012 06:14:23 -0000       
1.1
@@ -0,0 +1,383 @@
+
+   #[1]Free Software Foundation [2]Proyecto GNU [3]LuCAS: biblioteca de
+   GNU/Linux en español
+   
+Licencia Pública GNU
+
+   Esta es la conocida GNU Public License (GPL), versión 2 (de junio de
+   1.991), que cubre la mayor parte del software de la Free Software
+   Foundation, y muchos más programas. La traducción al español ha sido
+   revisada por Richard Stallman, pero no tiene ningún valor legal, ni ha
+   sido comprobada de acuerdo a la legislación de ningún país en
+   particular.
+   
+   Los autores de esta traducción son:
+     * Jesús González Barahona
+     * Pedro de las Heras Quirós
+       
+   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+   
+   675 Mass Ave, Cambridge, MA 02139, EEUU
+   
+   Se permite la copia y distribución de copias literales de este
+   documento, pero no se permite su modificación.
+   
+Preámbulo
+
+   Las licencias que cubren la mayor parte del software están diseñadas
+   para quitarle a usted la libertad de compartirlo y modificarlo. Por el
+   contrario, la Licencia Pública General de GNU pretende garantizarle la
+   libertad de compartir y modificar software libre, para asegurar que el
+   software es libre para todos sus usuarios. Esta Licencia Pública
+   General se aplica a la mayor parte del software del la Free Software
+   Foundation y a cualquier otro programa si sus autores se comprometen a
+   utilizarla. (Existe otro software de la Free Software Foundation que
+   está cubierto por la Licencia Pública General de GNU para
+   Bibliotecas). Si quiere, también puede aplicarla a sus propios
+   programas.
+   
+   Cuando hablamos de software libre, estamos refiriéndonos a libertad,
+   no a precio. Nuestras Licencias Públicas Generales están diseñadas
+   para asegurarnos de que tenga la libertad de distribuir copias de
+   software libre (y cobrar por ese servicio si quiere), de que reciba el
+   código fuente o que pueda conseguirlo si lo quiere, de que pueda
+   modificar el software o usar fragmentos de él en nuevos programas
+   libres, y de que sepa que puede hacer todas estas cosas.
+   
+   Para proteger sus derechos necesitamos algunas restricciones que
+   prohiban a cualquiera negarle a usted estos derechos o pedirle que
+   renuncie a ellos. Estas restricciones se traducen en ciertas
+   obligaciones que le afectan si distribuye copias del software, o si lo
+   modifica.
+   
+   Por ejemplo, si distribuye copias de uno de estos programas, sea
+   gratuitamente, o a cambio de una contraprestación, debe dar a los
+   receptores todos los derechos que tiene. Debe asegurarse de que ellos
+   también reciben, o pueden conseguir, el código fuente. Y debe
+   mostrarles estas condiciones de forma que conozcan sus derechos.
+   
+   Protegemos sus derechos con la combinación de dos medidas:
+    1. Ponemos el software bajo copyright y
+    2. le ofrecemos esta licencia, que le da permiso legal para copiar,
+       distribuir y/o modificar el software.
+       
+   También, para la protección de cada autor y la nuestra propia,
+   queremos asegurarnos de que todo el mundo comprende que no se
+   proporciona ninguna garantía para este software libre. Si el software
+   se modifica por cualquiera y éste a su vez lo distribuye, queremos que
+   sus receptores sepan que lo que tienen no es el original, de forma que
+   cualquier problema introducido por otros no afecte a la reputación de
+   los autores originales.
+   
+   Por último, cualquier programa libre está constantemente amenazado por
+   patentes sobre el software. Queremos evitar el peligro de que los
+   redistribuidores de un programa libre obtengan patentes por su cuenta,
+   convirtiendo de facto el programa en propietario. Para evitar esto,
+   hemos dejado claro que cualquier patente debe ser pedida para el uso
+   libre de cualquiera, o no ser pedida.
+   
+   Los términos exactos y las condiciones para la copia, distribución y
+   modificación se exponen a continuación.
+   
+Términos y condiciones para la copia, distribución y modificación
+
+    1. Esta Licencia se aplica a cualquier programa u otro tipo de
+       trabajo que contenga una nota colocada por el tenedor del
+       copyright diciendo que puede ser distribuido bajo los términos de
+       esta Licencia Pública General. En adelante, «Programa» se referirá
+       a cualquier programa o trabajo que cumpla esa condición y «trabajo
+       basado en el Programa» se referirá bien al Programa o a cualquier
+       trabajo derivado de él según la ley de copyright. Esto es, un
+       trabajo que contenga el programa o una proción de él, bien en
+       forma literal o con modificaciones y/o traducido en otro lenguaje.
+       Por lo tanto, la traducción está incluida sin limitaciones en el
+       término «modificación». Cada concesionario (licenciatario) será
+       denominado «usted».
+       Cualquier otra actividad que no sea la copia, distribución o
+       modificación no está cubierta por esta Licencia, está fuera de su
+       ámbito. El acto de ejecutar el Programa no está restringido, y los
+       resultados del Programa están cubiertos únicamente si sus
+       contenidos constituyen un trabajo basado en el Programa,
+       independientemente de haberlo producido mediante la ejecución del
+       programa. El que esto se cumpla, depende de lo que haga el
+       programa.
+    2. Usted puede copiar y distribuir copias literales del código fuente
+       del Programa, según lo has recibido, en cualquier medio, supuesto
+       que de forma adecuada y bien visible publique en cada copia un
+       anuncio de copyright adecuado y un repudio de garantía, mantenga
+       intactos todos los anuncios que se refieran a esta Licencia y a la
+       ausencia de garantía, y proporcione a cualquier otro receptor del
+       programa una copia de esta Licencia junto con el Programa.
+       Puede cobrar un precio por el acto físico de transferir una copia,
+       y puede, según su libre albedrío, ofrecer garantía a cambio de
+       unos honorarios.
+    3. Puede modificar su copia o copias del Programa o de cualquier
+       porción de él, formando de esta manera un trabajo basado en el
+       Programa, y copiar y distribuir esa modificación o trabajo bajo
+       los términos del apartado 1, antedicho, supuesto que además cumpla
+       las siguientes condiciones:
+         a. Debe hacer que los ficheros modificados lleven anuncios
+            prominentes indicando que los ha cambiado y la fecha de
+            cualquier cambio.
+         b. Debe hacer que cualquier trabajo que distribuya o publique y
+            que en todo o en parte contenga o sea derivado del Programa o
+            de cualquier parte de él sea licenciada como un todo, sin
+            carga alguna, a todas las terceras partes y bajo los términos
+            de esta Licencia.
+         c. Si el programa modificado lee normalmente órdenes
+            interactivamente cuando es ejecutado, debe hacer que, cuando
+            comience su ejecución para ese uso interactivo de la forma
+            más habitual, muestre o escriba un mensaje que incluya un
+            anuncio de copyright y un anuncio de que no se ofrece ninguna
+            garantía (o por el contrario que sí se ofrece garantía) y que
+            los usuarios pueden redistribuir el programa bajo estas
+            condiciones, e indicando al usuario cómo ver una copia de
+            esta licencia. (Excepción: si el propio programa es
+            interactivo pero normalmente no muestra ese anuncio, no se
+            requiere que su trabajo basado en el Programa muestre ningún
+            anuncio).
+       Estos requisitos se aplican al trabajo modificado como un todo. Si
+       partes identificables de ese trabajo no son derivadas del
+       Programa, y pueden, razonablemente, ser consideradas trabajos
+       independientes y separados por ellos mismos, entonces esta
+       Licencia y sus términos no se aplican a esas partes cuando sean
+       distribuidas como trabajos separados. Pero cuando distribuya esas
+       mismas secciones como partes de un todo que es un trabajo basado
+       en el Programa, la distribución del todo debe ser según los
+       términos de esta licencia, cuyos permisos para otros
+       licenciatarios se extienden al todo completo, y por lo tanto a
+       todas y cada una de sus partes, con independencia de quién la
+       escribió.
+       Por lo tanto, no es la intención de este apartado reclamar
+       derechos o desafiar sus derechos sobre trabajos escritos
+       totalmente por usted mismo. El intento es ejercer el derecho a
+       controlar la distribución de trabajos derivados o colectivos
+       basados en el Programa.
+       Además, el simple hecho de reunir un trabajo no basado en el
+       Programa con el Programa (o con un trabajo basado en el Programa)
+       en un volumen de almacenamiento o en un medio de distribución no
+       hace que dicho trabajo entre dentro del ámbito cubierto por esta
+       Licencia.
+    4. Puede copiar y distribuir el Programa (o un trabajo basado en él,
+       según se especifica en el apartado 2, como código objeto o en
+       formato ejecutable según los términos de los apartados 1 y 2,
+       supuesto que además cumpla una de las siguientes condiciones:
+         a. Acompañarlo con el código fuente completo correspondiente, en
+            formato electrónico, que debe ser distribuido según se
+            especifica en los apartados 1 y 2 de esta Licencia en un
+            medio habitualmente utilizado para el intercambio de
+            programas, o
+         b. Acompañarlo con una oferta por escrito, válida durante al
+            menos tres años, de proporcionar a cualquier tercera parte
+            una copia completa en formato electrónico del código fuente
+            correspondiente, a un coste no mayor que el de realizar
+            físicamente la distribución del fuente, que será distribuido
+            bajo las condiciones descritas en los apartados 1 y 2
+            anteriores, en un medio habitualmente utilizado para el
+            intercambio de programas, o
+         c. Acompañarlo con la información que recibiste ofreciendo
+            distribuir el código fuente correspondiente. (Esta opción se
+            permite sólo para distribución no comercial y sólo si usted
+            recibió el programa como código objeto o en formato
+            ejecutable con tal oferta, de acuerdo con el apartado b
+            anterior).
+       Por código fuente de un trabajo se entiende la forma preferida del
+       trabajo cuando se le hacen modificaciones. Para un trabajo
+       ejecutable, se entiende por código fuente completo todo el código
+       fuente para todos los módulos que contiene, más cualquier fichero
+       asociado de definición de interfaces, más los guiones utilizados
+       para controlar la compilación e instalación del ejecutable. Como
+       excepción especial el código fuente distribuido no necesita
+       incluir nada que sea distribuido normalmente (bien como fuente,
+       bien en forma binaria) con los componentes principales
+       (compilador, kernel y similares) del sistema operativo en el cual
+       funciona el ejecutable, a no ser que el propio componente acompañe
+       al ejecutable.
+       Si la distribución del ejecutable o del código objeto se hace
+       mediante la oferta acceso para copiarlo de un cierto lugar,
+       entonces se considera la oferta de acceso para copiar el código
+       fuente del mismo lugar como distribución del código fuente,
+       incluso aunque terceras partes no estén forzadas a copiar el
+       fuente junto con el código objeto.
+    5. No puede copiar, modificar, sublicenciar o distribuir el Programa
+       excepto como prevé expresamente esta Licencia. Cualquier intento
+       de copiar, modificar sublicenciar o distribuir el Programa de otra
+       forma es inválida, y hará que cesen automáticamente los derechos
+       que te proporciona esta Licencia. En cualquier caso, las partes
+       que hayan recibido copias o derechos de usted bajo esta Licencia
+       no cesarán en sus derechos mientras esas partes continúen
+       cumpliéndola.
+    6. No está obligado a aceptar esta licencia, ya que no la ha firmado.
+       Sin embargo, no hay hada más que le proporcione permiso para
+       modificar o distribuir el Programa o sus trabajos derivados. Estas
+       acciones están prohibidas por la ley si no acepta esta Licencia.
+       Por lo tanto, si modifica o distribuye el Programa (o cualquier
+       trabajo basado en el Programa), está indicando que acepta esta
+       Licencia para poder hacerlo, y todos sus términos y condiciones
+       para copiar, distribuir o modificar el Programa o trabajos basados
+       en él.
+    7. Cada vez que redistribuya el Programa (o cualquier trabajo basado
+       en el Programa), el receptor recibe automáticamente una licencia
+       del licenciatario original para copiar, distribuir o modificar el
+       Programa, de forma sujeta a estos términos y condiciones. No puede
+       imponer al receptor ninguna restricción más sobre el ejercicio de
+       los derechos aquí garantizados. No es usted responsable de hacer
+       cumplir esta licencia por terceras partes.
+    8. Si como consecuencia de una resolución judicial o de una alegación
+       de infracción de patente o por cualquier otra razón (no limitada a
+       asuntos relacionados con patentes) se le imponen condiciones (ya
+       sea por mandato judicial, por acuerdo o por cualquier otra causa)
+       que contradigan las condiciones de esta Licencia, ello no le exime
+       de cumplir las condiciones de esta Licencia. Si no puede realizar
+       distribuciones de forma que se satisfagan simultáneamente sus
+       obligaciones bajo esta licencia y cualquier otra obligación
+       pertinente entonces, como consecuencia, no puede distribuir el
+       Programa de ninguna forma. Por ejemplo, si una patente no permite
+       la redistribución libre de derechos de autor del Programa por
+       parte de todos aquellos que reciban copias directa o
+       indirectamente a través de usted, entonces la única forma en que
+       podría satisfacer tanto esa condición como esta Licencia sería
+       evitar completamente la distribución del Programa.
+       Si cualquier porción de este apartado se considera inválida o
+       imposible de cumplir bajo cualquier circunstancia particular ha de
+       cumplirse el resto y la sección por entero ha de cumplirse en
+       cualquier otra circunstancia.
+       No es el propósito de este apartado inducirle a infringir ninguna
+       reivindicación de patente ni de ningún otro derecho de propiedad o
+       impugnar la validez de ninguna de dichas reivindicaciones. Este
+       apartado tiene el único propósito de proteger la integridad del
+       sistema de distribución de software libre, que se realiza mediante
+       prácticas de licencia pública. Mucha gente ha hecho contribuciones
+       generosas a la gran variedad de software distribuido mediante ese
+       sistema con la confianza de que el sistema se aplicará
+       consistentemente. Será el autor/donante quien decida si quiere
+       distribuir software mediante cualquier otro sistema y una licencia
+       no puede imponer esa elección.
+       Este apartado pretende dejar completamente claro lo que se cree
+       que es una consecuencia del resto de esta Licencia.
+    9. Si la distribución y/o uso de el Programa está restringida en
+       ciertos países, bien por patentes o por interfaces bajo copyright,
+       el tenedor del copyright que coloca este Programa bajo esta
+       Licencia puede añadir una limitación explícita de distribución
+       geográfica excluyendo esos países, de forma que la distribución se
+       permita sólo en o entre los países no excluidos de esta manera. En
+       ese caso, esta Licencia incorporará la limitación como si
+       estuviese escrita en el cuerpo de esta Licencia.
+   10. La Free Software Foundation puede publicar versiones revisadas y/o
+       nuevas de la Licencia Pública General de tiempo en tiempo. Dichas
+       nuevas versiones serán similares en espíritu a la presente
+       versión, pero pueden ser diferentes en detalles para considerar
+       nuevos problemas o situaciones.
+       Cada versión recibe un número de versión que la distingue de
+       otras. Si el Programa especifica un número de versión de esta
+       Licencia que se refiere a ella y a «cualquier versión posterior»,
+       tienes la opción de seguir los términos y condiciones, bien de esa
+       versión, bien de cualquier versión posterior publicada por la Free
+       Software Foundation. Si el Programa no especifica un número de
+       versión de esta Licencia, puedes escoger cualquier versión
+       publicada por la Free Software Foundation.
+   11. Si quiere incorporar partes del Programa en otros programas libres
+       cuyas condiciones de distribución son diferentes, escribe al autor
+       para pedirle permiso. Si el software tiene copyright de la Free
+       Software Foundation, escribe a la Free Software Foundation:
+       algunas veces hacemos excepciones en estos casos. Nuestra decisión
+       estará guiada por el doble objetivo de de preservar la libertad de
+       todos los derivados de nuestro software libre y promover el que se
+       comparta y reutilice el software en general.
+       
+AUSENCIA DE GARANTÍA
+
+   12. Como el programa se licencia libre de cargas, no se ofrece ninguna
+       garantía sobre el programa, en todas la extensión permitida por la
+       legislación aplicable. Excepto cuando se indique de otra forma por
+       escrito, los tenedores del copyright y/u otras partes proporcionan
+       el programa «tal cual», sin garantía de ninguna clase, bien
+       expresa o implícita, con inclusión, pero sin limitación a las
+       garantías mercantiles implícitas o a la conveniencia para un
+       propósito particular. Cualquier riesgo referente a la calidad y
+       prestaciones del programa es asumido por usted. Si se probase que
+       el Programa es defectuoso, asume el coste de cualquier servicio,
+       reparación o corrección.
+   13. En ningún caso, salvo que lo requiera la legislación aplicable o
+       haya sido acordado por escrito, ningún tenedor del copyright ni
+       ninguna otra parte que modifique y/o redistribuya el Programa
+       según se permite en esta Licencia será responsable ante usted por
+       daños, incluyendo cualquier daño general, especial, incidental o
+       resultante producido por el uso o la imposibilidad de uso del
+       Programa (con inclusión, pero sin limitación a la pérdida de datos
+       o a la generación incorrecta de datos o a pérdidas sufridas por
+       usted o por terceras partes o a un fallo del Programa al funcionar
+       en combinación con cualquier otro programa), incluso si dicho
+       tenedor u otra parte ha sido advertido de la posibilidad de dichos
+       daños.
+       
+   FIN DE TÉRMINOS Y CONDICIONES
+   
+Apéndice: Cómo aplicar estos términos a sus nuevos programas.
+
+   Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso
+   posible para el público en general, la mejor forma de conseguirlo es
+   convirtiéndolo en software libre que cualquiera pueda redistribuir y
+   cambiar bajo estos términos.
+   
+   Para hacerlo, añada los siguientes anuncios al programa. Lo más seguro
+   es añadirlos al principio de cada fichero fuente para transmitir lo
+   más efectivamente posible la ausencia de garantía. Además cada fichero
+   debería tener al menos la línea de «copyright» y un indicador a dónde
+   puede encontrarse el anuncio completo.
+   <una línea para indicar el nombre del programa y una rápida idea de
+   qué hace.>
+   
+   Copyright (C) 19aa <nombre del autor>
+   
+   Este programa es software libre. Puede redistribuirlo y/o modificarlo
+   bajo los términos de la Licencia Pública General de GNU según es
+   publicada por la Free Software Foundation, bien de la versión 2 de
+   dicha Licencia o bien (según su elección) de cualquier versión
+   posterior.
+   
+   Este programa se distribuye con la esperanza de que sea útil, pero SIN
+   NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin
+   garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la
+   Licencia Pública General de GNU para más detalles.
+   
+   Debería haber recibido una copia de la Licencia Pública General junto
+   con este programa. Si no ha sido así, escriba a la Free Software
+   Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
+   Añada también información sobre cómo contactar con usted mediante
+   correo electrónico y postal.
+   
+   Si el programa es interactivo, haga que muestre un pequeño anuncio
+   como el siguiente, cuando comienza a funcionar en modo interactivo:
+   Gnomovision versión 69, Copyright (C) 19aa nombre del autor
+   
+   Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para más
+   detalles escriba «show w».
+   Los comandos hipotéticos «show w» y «show c» deberían mostrar las
+   partes adecuadas de la Licencia Pública General. Por supuesto, los
+   comandos que use pueden llamarse de cualquier otra manera. Podrían
+   incluso ser pulsaciones del ratón o elementos de un menú (lo que sea
+   apropiado para su programa).
+   
+   También deberías conseguir que su empleador (si trabaja como
+   programador) o tu Universidad (si es el caso) firme un «renuncia de
+   copyright» para el programa, si es necesario. A continuación se ofrece
+   un ejemplo, altere los nombres según sea conveniente:
+   Yoyodyne, Inc. mediante este documento renuncia a cualquier interés de
+       derechos de copyright con respecto al programa Gnomovision (que
+       hace pasadas a compiladores) escrito por Pepe Programador.
+       <firma de Pepito Grillo>, 20 de diciembre de 1996
+       Pepito Grillo, Presidente de Asuntillos Varios.
+       
+   Esta Licencia Pública General no permite que incluya sus programas en
+   programas propietarios. Si su programa es una biblioteca de
+   subrutinas, puede considerar más útil el permitir el enlazado de
+   aplicaciones propietarias con la biblioteca. Si este es el caso, use
+   la Licencia Pública General de GNU para Bibliotecas en lugar de esta
+   Licencia.
+
+References
+
+   1. http://www.fsf.org/
+   2. http://www.gnu.org/
+   3. http://lucas.hispalinux.es/

Index: Proyectos/Mecagtk/miweb/OpenSource-doc.tgz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/OpenSource-doc.tgz
diff -N Proyectos/Mecagtk/miweb/OpenSource-doc.tgz
Binary files /dev/null and /tmp/cvsiGiQyJ differ

Index: Proyectos/Mecagtk/miweb/devel.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/devel.html
diff -N Proyectos/Mecagtk/miweb/devel.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/devel.html  3 Mar 2012 06:14:23 -0000       1.1
@@ -0,0 +1,89 @@
+<html>
+<body bgcolor=#ffffff>
+<h2> Herramientas de utilización recomendadas </h2>
+A la hora de colaborar en el desarrollo de <b>MecaGTK</b> se recomienda el uso 
de las siguientes herramientas:
+( El uso de estas herramientas es recomendable no obligatorio ):
+<ul>
+<li> Compilador C GNU. Preferiblemente 2.9 o mayor. <p>
+También se pueden utilizar los siguientes: egcs, djgpp y  cygwin.
+<li> Librerías GTK versiones 1.2 y posteriores. Si utilizáis LiNUX, tendréis 
que tener instalado
+el paquete <i>gtk+-devel</i>
+
+<li> Librerías Gnome versiones 1.2.4 y posteriores. El paquete correspondiente 
en linux será <i>gnome-libs-devel</i>.
+</ul>
+La lista anterior se corresponde a los requisitos mínimos para poder compilar 
el código
+fuente tras su modificación.<p>
+Para un trabajo medianamente coordinado es recomendable utilizar los 
siguientes programas:
+<ul>
+<li><font color=blue> Sistema operativo LiNUX.</font> <b>NO</b> importa la 
versión que tengáis. Lo importante son las
+versiones de los programas arriba citados. 
+<li><font color=blue> CVS (Control Version System):</font> Bueno, al parecer 
los chicos de GNU recomiendan VCS en vez de RCS. Es m&aacute;s l&oacute;gico el 
empleo de CVS para proyectos de desarrollo de equipos grandes sobre una 
m&aacute;quina remota. Cuando esta p&aacute;gina se ponga en <a 
href="http://www.es.gnu.org";>www.es.gnu.org</a> pondr&eacute; un enlace a la 
documentaci&oacute;n y a los ejemplos necesarios.<br>
+En resumen, pod&eacute;is olvidaros del RCS.
+<li><font color=blue> RCS (Revision Control System):</font> Es un programa con 
el que podremos ir almacenando de forma
+
+ordenada ls sucesivas modificaciones que realicemos sobre el código fuente. Se 
prefiere a CVS por su 
+simplicidad y rapidez de aprendizaje (sólo requiere de dos comandos 
principales).
+<li><font color=blue>VIM como editor predeterminado</font>. A los que no lo 
manejáis os preguntaréis que por qué se 
+escoge un editor tan <i>complejo</i>.... Los que lo utilizáis habituelmente, 
ya conocéis las múltiples respuestas.
+En caso de no gustaros VIM podéis escojer entre joe, kwrite y emacs.
+<li><font color=blue>diff:</font> Para generar parches sobre el código fuente. 
Utilizadlo sólo aquellos que sepáis manejarlo correctamente.
+Se recomienda no realizarlo hasta el estadode desarrollo 0.1.2 dado que el 
código fuente cambiará radicalmente al pasar de 0.1.0 a 0.1.2.
+
+</ul>
+<h2>¿Cómo entregar modificaciones del programa? </h2>
+Los programas entregados deben de constar de dos archivos (esto será 
<b>imperativo</b> a partir de la versión 0.1.2):
+<ul>
+<li> Archivo de prototipos <i> *.h </i>
+<li> Archivo de código <i> *.c </i>
+</ul>
+Los progamas entregados deben de tener el siguiente encabezamiento:
+<pre>
+  /*
+   *
+   *  AUTOR: nombre del autor/autores
+   *  VERSIÓN: versión sobre la que se está trabajando (NO para la que se está 
trabajando)
+   *
+   *  DESCRIPCIÓN: Breve descripción
+   *
+   */
+</pre>
+He aquí un ejemplo de un pequeño proyecto en C  tomado de los apuntes de la 
asignatura <i>Estructura de Datos</i> de 1997:
+<ul>
+<li><a href="matriz.h.html">matriz.h</a>
+<li><a href="matriz.c.html">matriz.c</a>
+<li><a href="hora.h.html">hora.h</a>
+<li><a href="hora.c.html">hora.c</a>
+<li><a href="main.c.html">main.c</a>
+<li>Fichero comprimido con el código fuente: <a 
href="fuentes.tgz">fuentes.tgz</a>
+</ul>
+No será necesario que incluyáis un fichero <i>Makefile</i>. De eso me 
encargaré yo mismo, dado que espero que me lleguen varios archivos 
<i>*.h</i>... (La esperanza nunca se pierde... Mirad si no a la actual 
presidenta del senado :))
+<h2>¿Dónde necesito ayuda URGENTE?</h2>
+Me interesa mucho internacionalizar el programa. Para ello necesito que 
alguien me ayude con la herramienta <i>gettext</i> de la que prácticamente 
desconozco todo.
+Mejoras posteriores como soporte de diferentes tipos de teclado quedan 
relegadas a una posible versión 2.0.1, así que por favor no insistáis mucho en 
esta mejora.
+<h2> Sobre la documentación </h2>
+A partir de la versión 0.1.2 la documentación se realizará en <b>SGML</b>. Yo 
mismo seré el encargado de traducirla a este formato, así que sugiero que la 
entreguéis o bien en formato
+ASCII, LaTeX o HTML.
+<h2>Sobre los derechos de autor</h2>
+Este programa seguirá los términos de la licencia <a 
href="LICENCIA.txt">GNU</a>. El copyright <b>pertenecerá a todos aquellos que 
colaboren en el desarrollo del programa</b> teniendo estos el derecho 
inalienable
+ de que su nombre aparezca en los créditos explícitamente, indicando en que 
parte han colaborado. Si por algún motivo vuestro nombre no aparece y
+habéis colaborado, acédmelo saber <b>urgentemente</b>. Seguramente un error de 
este tipo se debe 
+a mi provervial <i>existencialismus chaoticus</i>. Vayan mis disculpas 
públicas por delante...<p>
+Todos aquellos que colaboren en este programa someten el código fuente de sus
+ módulos a la licencia <b>GNU</b> arriba descrita. 
+La no aceptación de este término excluirá sus
+módulos de las versiones oficiales del programa perteneciendo la propiedad 
intelectual de
+dischos módulos a su autor original y distribuyéndose éstos bajo los términos 
de
+licencia que éste considere adecuados.
+<p>
+Los bienes indirectos generados por la distribución de las versiones estables 
(invitaciones
+a cerveza, retribuciones personales por haber cambiado la vida a alguna 
secretaria,regalo de mascotas, fama,...) serán repartidos equitativamente entre 
los propietarios
+del copyrigth arriba descritos. Lo mismo <b> no </b> es aplicable a las 
críticas, problemas
+legales con terceras distribuciones, malos rollos de todo calibre, etc... De 
los cuales
+se responsabiliza exclusivamente el coordinador (un servidor) del proyecto.
+<hr>
+<address>
+Luis U.Rodríguez Paniagua<br>
+<a href="mailto:address@hidden";>address@hidden</a><br>
+Valladolid, 20/FEB/01
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/download.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/download.html
diff -N Proyectos/Mecagtk/miweb/download.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/download.html       3 Mar 2012 06:14:23 -0000       
1.1
@@ -0,0 +1,21 @@
+<html>
+<body>
+<center><h1>Programas de libre distribución</h1></center>
+<hr>
+<h2>Presentación</h2>
+Todos estos programas, menos en los que se indique lo contrario, son propiedad 
intelectual de Luis U. Rodríguez Paniagua y se distribuyen bajo los términos de 
la licencia pública GNU.<br>
+Para mayor información sobre los términos de esta licencia, léanse los 
archivos LIENCIA.txt que se adjuntan con las fuentes de cada programa.<br>
+Este software en su mayor parte está aún en fase BETA. Cualquier sugerencia 
para su mejora o cualquier crítica constructiva será bienvenida.<br>
+<h2>Software disponible:</h2>
+<ul>
+<li> <h3>MecaGTK versión BETA 0.1:</h3> Es una herramienta para el aprendizaje 
de mecanografía desarrollado en GTK utilizando la herramienta GLADE. <a 
href="soft/mecagtk1.tgz">DOWNLOAD</a>
+<br><b>Nota de última hora:</b> Es necesario tener instalado GNOME. 8-(. ¡El 
primer bug ya ha sido detectado!
+<li> <h3>Práctica de la asignatura Programación III:</h3> Una calculadora 
sencilla desarrollada en SmallEiffel utilizando la librería EGTK. Por razones 
docentes no estará disponible hasta Agosto de 2001.
+</ul>
+<hr>
+<address>
+Luis U. Rodríguez Paniagua
+<a href="mailto:address@hidden";>address@hidden</a>
+</address>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/eiffel.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/eiffel.html
diff -N Proyectos/Mecagtk/miweb/eiffel.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/eiffel.html 3 Mar 2012 06:14:24 -0000       1.1
@@ -0,0 +1,27 @@
+<html>
+<body bgcolor=#003366 text=#ffffff link=#ffffcc vlink=#ffff66> 
+<center><h1> Bienvenido al rincón de Eiffel</h1></center>
+Aquí podrás bajar código fuente para SmallEiffel. Por ahora está disponible la 
práctica I de la asignatura PIII.<p>
+A partir del 14/FEB/2001 estará disponible la versión BETA de mecaGTK 
desarrollada en SmallEiffel.
+<ul>
+<li><a href="down/prac1_P3.tgz"> Calculadora </a> Es una sencilla calculadora 
de sobremesa programada en SmallEiffel y con librerías GTK
+<li> MecaGTK Es un entorno de aprendizaje de mecanografía desarrollado en 
SmallEiffel y GTK.
+<li><b> María</b>, en esta página tienes un montón de entornos de desarrollo 
para LiNUX (referencia atu carta de 15/FEB/01): <a 
href="http://linuxberg.ua.pt/x11html/dev_env.html";>achúchame</a>
+</ul>
+<hr>
+<h2>Condiciones de distribución:</h2>
+Esta página no pertenece aún al sistema NEMESyS. Lo enlazaré cuando termine la 
convocatoria extraordinaria de PIII por razones obvias.
+<ul>
+<li> Calculadora: NO TIENE PERMISOS DE DISTRIBUCIÓN HASTA AGOSTO DE 2001. A 
partir de entonces se distribuirá bajo licencia GNU.
+<li> MecaGTK: Se distribuye bajo licencia GNU.
+</ul>
+Para más información sobre los términos de la licencia GNU, consultar la 
página de OpenSource en <a href="http://www.geocities.com/luisubaldo";> NEMESyS 
</a>.
+</body>
+<hr>
+<address>
+Luis U. Rodríguez Paniagua<br>
+<a 
href="http://www.geocities.com/luisubaldo";>www.geocities.com/luisubaldo</a><br>
+<a href="mailto:address@hidden";>address@hidden</a>
+</html>
+
+

Index: Proyectos/Mecagtk/miweb/fuentes.tgz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/fuentes.tgz
diff -N Proyectos/Mecagtk/miweb/fuentes.tgz
Binary files /dev/null and /tmp/cvsk5cOVL differ

Index: Proyectos/Mecagtk/miweb/hora.c.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/hora.c.html
diff -N Proyectos/Mecagtk/miweb/hora.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/hora.c.html 3 Mar 2012 06:14:24 -0000       1.1
@@ -0,0 +1,38 @@
+<HTML>
+<HEAD>
+<TITLE>hora.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo hora.c. Implementa el TAD 
hora</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;stdio.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;assert.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;hora.h&quot;</FONT>
+
+<B><FONT color=#288a51>void</FONT></B> HoraInicializa(Hora *pH, <B><FONT 
color=#288a51>int</FONT></B> hh, <B><FONT color=#288a51>int</FONT></B> mm, 
<B><FONT color=#288a51>int</FONT></B> ss)
+{
+    assert ( pH != <FONT color=#ff00ff>NULL</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= hh &amp;&amp; hh &lt; <FONT 
color=#ff00ff>24</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= mm &amp;&amp; mm &lt; <FONT 
color=#ff00ff>60</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= ss &amp;&amp; ss &lt; <FONT 
color=#ff00ff>60</FONT> );
+    pH-&gt;hh = hh;
+    pH-&gt;mm = mm;
+    pH-&gt;ss = ss;
+}
+
+<B><FONT color=#288a51>char</FONT></B> *HoraACadena( Hora *pH)
+{
+    <B><FONT color=#288a51>static</FONT></B> <B><FONT 
color=#288a51>char</FONT></B> buffer[<FONT color=#ff00ff>9</FONT>];
+    sprintf(buffer,<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%02d</FONT><FONT color=#ff00ff>:</FONT><FONT 
color=#6959cf>%02d</FONT><FONT color=#ff00ff>:</FONT><FONT 
color=#6959cf>%02d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,pH-&gt;hh,pH-&gt;mm,pH-&gt;ss);
+    <B><FONT color=#a62828>return</FONT></B> buffer;
+}
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/hora.h.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/hora.h.html
diff -N Proyectos/Mecagtk/miweb/hora.h.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/hora.h.html 3 Mar 2012 06:14:24 -0000       1.1
@@ -0,0 +1,31 @@
+<HTML>
+<HEAD>
+<TITLE>hora.h.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo de prototipos para el fichero 
hora.c</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#ifndef _HORA_H_</FONT>
+<FONT color=#a620f7>#define _HORA_H_</FONT>
+
+<B><FONT color=#288a51>typedef</FONT></B> <B><FONT 
color=#288a51>struct</FONT></B> {
+    <B><FONT color=#288a51>int</FONT></B> hh;
+    <B><FONT color=#288a51>int</FONT></B> mm;
+    <B><FONT color=#288a51>int</FONT></B> ss;
+}Hora;
+
+<B><FONT color=#288a51>void</FONT></B> HoraInicializa( Hora *pH, <B><FONT 
color=#288a51>int</FONT></B> hh, <B><FONT color=#288a51>int</FONT></B> mm, 
<B><FONT color=#288a51>int</FONT></B> ss);
+<B><FONT color=#288a51>char</FONT></B> *HoraACadena( Hora *pH);
+
+<FONT color=#a620f7>#endif</FONT>
+
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/index.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/index.html
diff -N Proyectos/Mecagtk/miweb/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/index.html  3 Mar 2012 06:14:24 -0000       1.1
@@ -0,0 +1,20 @@
+<HTML>
+<HEAD>
+<META NAME="GENERATOR" CONTENT="Adobe PageMill 2.0 Win">
+<TITLE>Página NEMESyS -- Centor de Consulta de LiNUX en castellano. Situado en 
Valladolid</TITLE>
+</HEAD>
+<FRAMESET ROWS="20%%,80%">
+<FRAME SRC="html/titulo.html" NAME="titulo" bgcolor="#ffffff" FRAMEBORDER=0 
MARGINWIDTH=0 SCROLLING=NO NORESIZE>
+<FRAMESET COLS="25%,70%">
+<FRAME SRC="html/menu.html" NAME="menu" bgcolor="#ffffff" FRAMEBORDER=0 
MARGINWIDTH=0>
+<FRAME SRC="html/cuerpo.html" NAME="cuerpo" bgcolor="#ffffff" FRAMEBORDER=0 
MARGINWIDTH=0 >
+
+</FRAMESET>
+<NOFRAMES>
+<BODY>
+Viewing this page requires a browser capable of displaying frames.
+</BODY>
+</NOFRAMES>
+</FRAMESET>
+</HTML>
+    

Index: Proyectos/Mecagtk/miweb/index.old.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/index.old.html
diff -N Proyectos/Mecagtk/miweb/index.old.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/index.old.html      3 Mar 2012 06:14:24 -0000       
1.1
@@ -0,0 +1,30 @@
+<html>
+
+<head>
+<title>Página personal del Usuario luisrod</title>
+</head>
+
+<body bgcolor="#FFFFCC">
+
+<h1 align="center"><font face="Albertus Medium" size="5" 
color="#0000FF">Escuela Técnica
+Superior de Ingeniería Informática</font></h1>
+
+<h2 align="center"><font face="Albertus" size="4">Servidor Web de los 
Laboratorios
+Docentes</font></h2>
+
+<p><font face="Arial Narrow" size="2"><strong>Usuario: 
</strong>luisrod<strong><br>
+Host: </strong>duero.lab.fi.uva.es</font></p>
+
+<p style="text-align: justify; margin-left: 1cm; margin-right: 1cm"><font
+face="Arial Rounded MT Bold">
+Muy pronto se dispondrá de la versión actualizada de esta página WEB. En ella 
se encontrarán cosas como temas relacionados con astronomía, LiNUX, etc.... 
+<p style="margin-left: 1cm; margin-right: 1cm" align="right"><font
+face="Arial Rounded MT Bold">Luis U. Rodríguez Paniagua</font></p>
+
+<hr>
+<a HREF="mailto:address@hidden";>
+
+<p align="right"></a><font face="Arial Rounded MT Bold" color="#FF0000">This 
site Powered
+by <a href="/manual/index.html">Apache</a></font></p>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/main.c.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/main.c.html
diff -N Proyectos/Mecagtk/miweb/main.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/main.c.html 3 Mar 2012 06:14:24 -0000       1.1
@@ -0,0 +1,84 @@
+<HTML>
+<HEAD>
+<TITLE>main.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN:  Fichero principal</FONT>
+<FONT color=#0000ff>   *  Compilación:</FONT>
+<FONT color=#0000ff>   *                    gcc -c hora.c -I.</FONT>
+<FONT color=#0000ff>   *                    gcc -c matriz.c -I.</FONT>
+<FONT color=#0000ff>   *                    gcc -o tadmatrix main.c hora.o 
matriz.o -I.</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;stdio.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;matriz.h&quot;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;hora.h&quot;</FONT>
+
+main()
+{
+    Matriz A,B;
+    <B><FONT color=#288a51>int</FONT></B> m,n,i,j;
+    <B><FONT color=#288a51>float</FONT></B> x;
+    Hora h;
+    
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Obtener la dimensión de 
la matriz */</FONT>
+    printf(<FONT color=#ff00ff>&quot;Altura  :&quot;</FONT>);
+    scanf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>%d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,&amp;m);
+    printf(<FONT color=#ff00ff>&quot;Anchura :&quot;</FONT>);
+    scanf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>%d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,&amp;n);
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Creamos una matriz de 
floats */</FONT>
+    MatrizCrea(&amp;A, m, n, <B><FONT color=#a62828>sizeof</FONT></B>(<B><FONT 
color=#288a51>float</FONT></B>));
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Creamos una matriz de 
horas */</FONT>
+    MatrizCrea(&amp;B, m, n, <B><FONT color=#a62828>sizeof</FONT></B>(h));
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Inicializamos las 
Matrices */</FONT>
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                x=(i+j+<FONT color=#ff00ff>2.0</FONT>)/(n+m);
+                MatrizCambia(&amp;A,i,j,&amp;x);
+                HoraInicializa(&amp;h,<FONT color=#ff00ff>1</FONT>,i,j);
+                MatrizCambia(&amp;B,i,j,&amp;h);
+            }
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Recorremos la matriz de 
floats */</FONT>
+    printf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>\n</FONT><FONT 
color=#ff00ff>Matriz de FLOATS ((i+j+2.0)/(alt+anch)):</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>); 
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+    {
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                MatrizObten(&amp;A,i,j,&amp;x);
+                printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%f</FONT><FONT color=#ff00ff> &quot;</FONT>,x);
+            }      
+        printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>);
+    }
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Recorremos la matriz de 
Hora */</FONT>
+     printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>Matriz de Horas:</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>); 
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+    {
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                MatrizObten(&amp;B,i,j,&amp;h);
+                printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%s</FONT><FONT color=#ff00ff> &quot;</FONT>,HoraACadena(&amp;h));
+            }
+        printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>);
+    }         
+
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Limpieza */</FONT>
+    MatrizDestruye(&amp;A);
+    MatrizDestruye(&amp;B);
+}
+
+    
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/matrix
===================================================================
RCS file: Proyectos/Mecagtk/miweb/matrix
diff -N Proyectos/Mecagtk/miweb/matrix
Binary files /dev/null and /tmp/cvsIdxQXO differ

Index: Proyectos/Mecagtk/miweb/matriz.c.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/matriz.c.html
diff -N Proyectos/Mecagtk/miweb/matriz.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/matriz.c.html       3 Mar 2012 06:14:24 -0000       
1.1
@@ -0,0 +1,62 @@
+<HTML>
+<HEAD>
+<TITLE>matriz.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo fuente matriz.c. Implementa un 
TAD matriz</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>        
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;stdlib.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> calloc, free....*/</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;string.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> memcpy */</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;assert.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> aserciones */</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;matriz.h&quot;</FONT>
+
+<FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff> * Macro para obtener una posición. El puntero se 
convierte a (char *) porque</FONT>
+<FONT color=#0000ff> * algunos compiladores no permiten sumar a punteros void. 
La posición que </FONT>
+<FONT color=#0000ff> * ocupa un elemento será su fila más su columna. Esto hay 
que multiplicarlo por </FONT>
+<FONT color=#0000ff> * el tamaño de cada elemento.</FONT>
+<FONT color=#0000ff> *</FONT>
+<FONT color=#0000ff> */</FONT>
+<FONT color=#a620f7>#define POS( pM, i, j)((</FONT><B><FONT 
color=#288a51>char</FONT></B><FONT color=#a620f7> *) pM-&gt;elementos + 
pM-&gt;tamagno * (i * pM-&gt;n +j))</FONT>
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCrea( Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> m, <B><FONT color=#288a51>int</FONT></B> n, 
<B><FONT color=#288a51>int</FONT></B> tamagno)
+{
+    assert (m&gt;<FONT color=#ff00ff>0</FONT>);
+    assert (n&gt;<FONT color=#ff00ff>0</FONT>);
+    assert (tamagno&gt;<FONT color=#ff00ff>0</FONT>);
+    pM-&gt;m = m;
+    pM-&gt;n = n;
+    pM-&gt;tamagno = tamagno;
+    pM-&gt;elementos = calloc ( m*n, tamagno);
+    assert (pM-&gt;elementos != <FONT color=#ff00ff>NULL</FONT>);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizDestruye(Matriz *pM)
+{
+    assert ( pM-&gt;elementos != <FONT color=#ff00ff>NULL</FONT> );
+    free (pM-&gt;elementos);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizObten(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento)
+{
+    assert(i &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; i &lt; pM-&gt;m);
+    assert(j &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; j &lt; pM-&gt;n);
+    memcpy(elemento, POS(pM, i, j), pM-&gt;tamagno);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCambia(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento)
+{
+   assert(i &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; i &lt; pM-&gt;m);
+   assert(j &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; j &lt; pM-&gt;n);
+   memcpy(POS(pM, i, j),elemento, pM-&gt;tamagno);
+}                     
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/matriz.h.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/matriz.h.html
diff -N Proyectos/Mecagtk/miweb/matriz.h.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/matriz.h.html       3 Mar 2012 06:14:24 -0000       
1.1
@@ -0,0 +1,35 @@
+<HTML>
+<HEAD>
+<TITLE>matriz.h.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0 </FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo de prototipos para el fichero 
matriz.c</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>
+
+<FONT color=#a620f7>#ifndef _MATRIZ_H_</FONT>
+<FONT color=#a620f7>#define _MATRIZ_H_</FONT>
+
+<B><FONT color=#288a51>typedef</FONT></B> <B><FONT 
color=#288a51>struct</FONT></B> {
+    <B><FONT color=#288a51>int</FONT></B> m,n;
+    <B><FONT color=#288a51>size_t</FONT></B> tamagno;
+    <B><FONT color=#288a51>void</FONT></B> *elementos;
+} Matriz;
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCrea(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> m, <B><FONT color=#288a51>int</FONT></B> n, 
<B><FONT color=#288a51>int</FONT></B> tamagno);
+<B><FONT color=#288a51>void</FONT></B> MatrizDestruye(Matriz *pM);
+<B><FONT color=#288a51>void</FONT></B> MatrizObten(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento);
+<B><FONT color=#288a51>void</FONT></B> MatrizCambia(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento);
+
+<FONT color=#a620f7>#endif</FONT> _MATRIZ_H_
+<FONT color=#0000ff>/*</FONT><FONT color=#0000ff>-EOF-*/</FONT>
+
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/mecagtk.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/mecagtk.gif
diff -N Proyectos/Mecagtk/miweb/mecagtk.gif
Binary files /dev/null and /tmp/cvs86HFvQ differ

Index: Proyectos/Mecagtk/miweb/mecagtk.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/mecagtk.html
diff -N Proyectos/Mecagtk/miweb/mecagtk.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/mecagtk.html        3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,125 @@
+<html>
+<body bgcolor=#ffffff>
+<p>
+<br>
+<center>
+<table  width=800>
+<td width=20% align=left><img align=left src="mecagtk.gif"></td>
+<td><h1>Página principal de MecaGTK - Estado de desarrollo: <font color=red> 
BETA</font><br>Zona para BETA-Testers<br>Estado actual de la 
distribución</h1></td>
+</center>
+<center>
+</table><br>
+Última actualización de esta página: 01/MAR/01
+<hr width=800 >
+<table width=800 bgcolor=#666666 text=#ffffff>
+<tr>
+<td><font color=#ffffff>  <b>Historial de desarrollo</b></font></td>
+</tr>
+</table>
+</center>
+<center>
+<table width=800 bgcolor=#cccccc text=#ffffff>
+<tr>
+<td  width=20% valign=top>Revisiones:</td>
+<td  width=80% valign=top>
+<ul>
+<li><font color=red>19/FEB/01</font> Revisión 0.1.0 <a 
href="../soft/mecagtk1.tgz">mecagtk-0.1.tgz</a> Edición BETA-Tester.
+<li><font color=red>01/MAR/01</font> (<font color=red>*</font>)Revisión 
0.1.2<a href="../soft/mecagtk-0.1.2.tar.gz"> mecagtk-0.1.2.tar.gz.</a> Nuevo 
diseño. Mayor claridad en el diseño, programación y documentación.<p>
+Estado de programación a día 22/FEB/01: Se ha traducido parte del programa al 
inglés (pero mi inglés no es muy bueno); se ha estructurado y documentado el 
código. Se ha añadidido el soporte de mayúsculas y vocales acentuadas.<br>
+<b>NOTA:</b> Finalmente las lecciones se cargar&aacute;n como archivos 
separados y se incluir&aacute; un editor de lecciones. (Cortes&iacute;a de los 
sesos de PeReX.)
+<li><font color=red>??/???/??</font> Revisión 0.1.4 <tt>.o0 Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 0.1.6 <tt>.o0 Segunda quincena 
Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 0.1.8 <tt>.o0 Abril 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 1.0.0 <tt>.o0 Versión estable 
definitiva. Antes del 30 de Abril 2001</tt>
+</ul>
+(<font color=red>*</font>) Versión actual en desarrollo.
+</td>
+</tr>
+<tr>
+<td valign=top> Bitácorra de errores (BUGS)</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> Problemas 
al inicializar la ventana de lección.
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> No se 
consigue cerrar el diálogo de ayuda al
+pulsar el botón TERMINAR. El botón CANCELAR sí funciona correctamente.
+</ul>
+</td>
+</tr>
+
+<tr>
+<td valign=top> Bitácorra de sugerencias</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green>DRS</font> Motor de 
lecciones autónomo. 
+Las lecciones deberán ser ficheros de texto ASCII comunes de forma que 
cualquier fichero
+puede ser susceptible de convertirse en lección.<p>
+<b>Nota:</b> esto implicaría también modificar el modelo de corrección. 
INTERESANTE. 
+¿Un puntero que vaya recorriendo caracteres? ¿Una entrada en el menú para 
cargar archivos?
+<br>
+<u>PROS:</u> Flexible, gran modularidad, obliga a diferenciar aún más las 
partes del programa.<br>
+<u>CONTRAS:</u> El tamaño de la ventana de la lección es limitado. No nos 
interesa un lector
+de textos, sino un TUTORIAL de mecanografia. Las lecciones deben cumplir 
ciertos
+requisitos de altura y anchura del texto.
+<br>SE ESTUDIAR&Aacute;<p>
+<li> <font color=red>23/FEB/01</font><font color=green> DRS</font> ¿Vas a 
poner un editor de lecciones? Ser&iacute;a buena idea.<p>
+Camarada PeReX; el editor ya es una realidad. A&uacute;n no es operativo, pero 
forma parte ya de las opciones del men&uacute;. <br>
+Gracias por la sugerencia :^)<p>
+<p>
+<p>
+</ul>
+</td>
+</tr>         
+
+<tr>
+<td valign=top> Directorio de BETA-Testers</td>
+<td valign=top>
+<ul>
+<li><font color=green>MAC</font> <a href="mailto:/dev/null";>Álvarez Cea, 
Manuel A.</a>
+<li><font color=green>LRP</font> <a href="mailto:address@hidden";>Rodríguez 
Paniagua, Luis U.</a>
+<li><font color=green>DRS</font> <a href="mailto:address@hidden";>Rodríguez 
Sánchez, David</a>
+</ul>
+</td>
+</tr>
+
+</table>
+<p><br>
+<table width=800 bgcolor=#666666 text=#ffffff>
+<tr>
+<td><font color=#ffffff> <b>Tablón de Anuncios</b></font></td>
+</tr>
+</table>   
+<table width=800 bgcolor=yellow text=#ffffff>   
+<tr valign=top>
+<td width=400>
+<b> NOTA 1:</b>
+En esta zona se pondrán avisos de interés para todos los involucrados
+en el desarrollo de este proyecto. Para las citas, flames, etc... utilizad
+ vuestro correo electrónico. Gracias.
+</td>
+<td width=400>
+<b> NOTA 2:</b>
+Algunos consejos relativos a la forma de colaborar con este proyecto: <a 
href="devel.html">NORMALIZACIÓN</a>
+</td>
+</tr>
+<tr>
+<td width=400>
+<b>NOTA 3:</b>
+Como supongo que mantener esta página en duero consume recursos de la máquina 
necesarios para el resto de los compañeros, estoy pensando en colgar esta WEB 
de otro lugar. Actualmente una versión antigua reside en <a 
href="http://www.geocities.com/luisubaldo";> www.geocities.com/luisubaldo</a>, 
pero no estoy muy satisfecho. ¿Alguna sugerencia?
+</td>
+<td width=400>
+<b>NOTA 4:</b>
+Buenas noticias. Este proyecto ha sido auspiciado por la FSF/GNU España y en
+breve (15 d&iacute;as a partir de hoy 1 de Marzo de 2001) todo el proyecto 
cambiar&aacute; de sitio. Se comunicar&aacute; la p&aacute;gina en breve. Nota 
golosa: <b>los colaboradores tambi&eacute;n podr&aacute;n disponer de cuenta en 
el ordenador en el que se instalar&aacute; el proyecto.</b>
+</td>
+</tr>
+
+</table>
+
+</center>
+<hr width=800 >  
+<address>
+<center>
+Luis U.Rodríguez Paniagua<br><a href="mailto:address@hidden";>address@hidden<a>
+</center>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/poweredby.png
===================================================================
RCS file: Proyectos/Mecagtk/miweb/poweredby.png
diff -N Proyectos/Mecagtk/miweb/poweredby.png
Binary files /dev/null and /tmp/cvsBCWihR differ

Index: Proyectos/Mecagtk/miweb/src.html.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/src.html.html
diff -N Proyectos/Mecagtk/miweb/src.html.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/src.html.html       3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,28 @@
+<HTML>
+<HEAD>
+<TITLE>src.html.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>HTML</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>HEAD</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>META</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>NAME</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;GENERATOR&quot;</FONT><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>CONTENT</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;Adobe PageMill 2.0 
Win&quot;</FONT><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>TITLE</FONT></B><FONT 
color=#008a8e>&gt;</FONT><B><FONT color=#ff00ff>Página NEMESyS</FONT></B><FONT 
color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>TITLE</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>HEAD</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAMESET</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>ROWS</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;39,90%&quot;</FONT><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAME</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>SRC</FONT></B><FONT 
color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;html/titulo.html&quot;</FONT><FONT color=#008a8e> 
</FONT><B><FONT color=#288a51>NAME</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;titulo&quot;</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>FRAMEBORDER</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>MARGINWIDTH</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>SCROLLING</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>NO</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>NORESIZE</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAMESET</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>COLS</FONT></B><FONT 
color=#008a8e>=</FONT><FONT color=#ff00ff>&quot;25%,70%&quot;</FONT><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAME</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>SRC</FONT></B><FONT 
color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;html/menu.html&quot;</FONT><FONT color=#008a8e> 
</FONT><B><FONT color=#288a51>NAME</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;menu&quot;</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>FRAMEBORDER</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>MARGINWIDTH</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>FRAME</FONT></B><FONT 
color=#008a8e> </FONT><B><FONT color=#288a51>SRC</FONT></B><FONT 
color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;html/cuerpo.html&quot;</FONT><FONT color=#008a8e> 
</FONT><B><FONT color=#288a51>NAME</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>&quot;cuerpo&quot;</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>FRAMEBORDER</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> </FONT><B><FONT 
color=#288a51>MARGINWIDTH</FONT></B><FONT color=#008a8e>=</FONT><FONT 
color=#ff00ff>0</FONT><FONT color=#008a8e> &gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT 
color=#a62828>FRAMESET</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>NOFRAMES</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;</FONT><B><FONT color=#a62828>BODY</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+Viewing this page requires a browser capable of displaying frames.
+<FONT color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>BODY</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT 
color=#a62828>NOFRAMES</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT 
color=#a62828>FRAMESET</FONT></B><FONT color=#008a8e>&gt;</FONT>
+<FONT color=#008a8e>&lt;/</FONT><B><FONT color=#a62828>HTML</FONT></B><FONT 
color=#008a8e>&gt;</FONT>
+    
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/doc/LICENCIA.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/LICENCIA.txt
diff -N Proyectos/Mecagtk/miweb/doc/LICENCIA.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/LICENCIA.txt    3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,383 @@
+
+   #[1]Free Software Foundation [2]Proyecto GNU [3]LuCAS: biblioteca de
+   GNU/Linux en español
+   
+Licencia Pública GNU
+
+   Esta es la conocida GNU Public License (GPL), versión 2 (de junio de
+   1.991), que cubre la mayor parte del software de la Free Software
+   Foundation, y muchos más programas. La traducción al español ha sido
+   revisada por Richard Stallman, pero no tiene ningún valor legal, ni ha
+   sido comprobada de acuerdo a la legislación de ningún país en
+   particular.
+   
+   Los autores de esta traducción son:
+     * Jesús González Barahona
+     * Pedro de las Heras Quirós
+       
+   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+   
+   675 Mass Ave, Cambridge, MA 02139, EEUU
+   
+   Se permite la copia y distribución de copias literales de este
+   documento, pero no se permite su modificación.
+   
+Preámbulo
+
+   Las licencias que cubren la mayor parte del software están diseñadas
+   para quitarle a usted la libertad de compartirlo y modificarlo. Por el
+   contrario, la Licencia Pública General de GNU pretende garantizarle la
+   libertad de compartir y modificar software libre, para asegurar que el
+   software es libre para todos sus usuarios. Esta Licencia Pública
+   General se aplica a la mayor parte del software del la Free Software
+   Foundation y a cualquier otro programa si sus autores se comprometen a
+   utilizarla. (Existe otro software de la Free Software Foundation que
+   está cubierto por la Licencia Pública General de GNU para
+   Bibliotecas). Si quiere, también puede aplicarla a sus propios
+   programas.
+   
+   Cuando hablamos de software libre, estamos refiriéndonos a libertad,
+   no a precio. Nuestras Licencias Públicas Generales están diseñadas
+   para asegurarnos de que tenga la libertad de distribuir copias de
+   software libre (y cobrar por ese servicio si quiere), de que reciba el
+   código fuente o que pueda conseguirlo si lo quiere, de que pueda
+   modificar el software o usar fragmentos de él en nuevos programas
+   libres, y de que sepa que puede hacer todas estas cosas.
+   
+   Para proteger sus derechos necesitamos algunas restricciones que
+   prohiban a cualquiera negarle a usted estos derechos o pedirle que
+   renuncie a ellos. Estas restricciones se traducen en ciertas
+   obligaciones que le afectan si distribuye copias del software, o si lo
+   modifica.
+   
+   Por ejemplo, si distribuye copias de uno de estos programas, sea
+   gratuitamente, o a cambio de una contraprestación, debe dar a los
+   receptores todos los derechos que tiene. Debe asegurarse de que ellos
+   también reciben, o pueden conseguir, el código fuente. Y debe
+   mostrarles estas condiciones de forma que conozcan sus derechos.
+   
+   Protegemos sus derechos con la combinación de dos medidas:
+    1. Ponemos el software bajo copyright y
+    2. le ofrecemos esta licencia, que le da permiso legal para copiar,
+       distribuir y/o modificar el software.
+       
+   También, para la protección de cada autor y la nuestra propia,
+   queremos asegurarnos de que todo el mundo comprende que no se
+   proporciona ninguna garantía para este software libre. Si el software
+   se modifica por cualquiera y éste a su vez lo distribuye, queremos que
+   sus receptores sepan que lo que tienen no es el original, de forma que
+   cualquier problema introducido por otros no afecte a la reputación de
+   los autores originales.
+   
+   Por último, cualquier programa libre está constantemente amenazado por
+   patentes sobre el software. Queremos evitar el peligro de que los
+   redistribuidores de un programa libre obtengan patentes por su cuenta,
+   convirtiendo de facto el programa en propietario. Para evitar esto,
+   hemos dejado claro que cualquier patente debe ser pedida para el uso
+   libre de cualquiera, o no ser pedida.
+   
+   Los términos exactos y las condiciones para la copia, distribución y
+   modificación se exponen a continuación.
+   
+Términos y condiciones para la copia, distribución y modificación
+
+    1. Esta Licencia se aplica a cualquier programa u otro tipo de
+       trabajo que contenga una nota colocada por el tenedor del
+       copyright diciendo que puede ser distribuido bajo los términos de
+       esta Licencia Pública General. En adelante, «Programa» se referirá
+       a cualquier programa o trabajo que cumpla esa condición y «trabajo
+       basado en el Programa» se referirá bien al Programa o a cualquier
+       trabajo derivado de él según la ley de copyright. Esto es, un
+       trabajo que contenga el programa o una proción de él, bien en
+       forma literal o con modificaciones y/o traducido en otro lenguaje.
+       Por lo tanto, la traducción está incluida sin limitaciones en el
+       término «modificación». Cada concesionario (licenciatario) será
+       denominado «usted».
+       Cualquier otra actividad que no sea la copia, distribución o
+       modificación no está cubierta por esta Licencia, está fuera de su
+       ámbito. El acto de ejecutar el Programa no está restringido, y los
+       resultados del Programa están cubiertos únicamente si sus
+       contenidos constituyen un trabajo basado en el Programa,
+       independientemente de haberlo producido mediante la ejecución del
+       programa. El que esto se cumpla, depende de lo que haga el
+       programa.
+    2. Usted puede copiar y distribuir copias literales del código fuente
+       del Programa, según lo has recibido, en cualquier medio, supuesto
+       que de forma adecuada y bien visible publique en cada copia un
+       anuncio de copyright adecuado y un repudio de garantía, mantenga
+       intactos todos los anuncios que se refieran a esta Licencia y a la
+       ausencia de garantía, y proporcione a cualquier otro receptor del
+       programa una copia de esta Licencia junto con el Programa.
+       Puede cobrar un precio por el acto físico de transferir una copia,
+       y puede, según su libre albedrío, ofrecer garantía a cambio de
+       unos honorarios.
+    3. Puede modificar su copia o copias del Programa o de cualquier
+       porción de él, formando de esta manera un trabajo basado en el
+       Programa, y copiar y distribuir esa modificación o trabajo bajo
+       los términos del apartado 1, antedicho, supuesto que además cumpla
+       las siguientes condiciones:
+         a. Debe hacer que los ficheros modificados lleven anuncios
+            prominentes indicando que los ha cambiado y la fecha de
+            cualquier cambio.
+         b. Debe hacer que cualquier trabajo que distribuya o publique y
+            que en todo o en parte contenga o sea derivado del Programa o
+            de cualquier parte de él sea licenciada como un todo, sin
+            carga alguna, a todas las terceras partes y bajo los términos
+            de esta Licencia.
+         c. Si el programa modificado lee normalmente órdenes
+            interactivamente cuando es ejecutado, debe hacer que, cuando
+            comience su ejecución para ese uso interactivo de la forma
+            más habitual, muestre o escriba un mensaje que incluya un
+            anuncio de copyright y un anuncio de que no se ofrece ninguna
+            garantía (o por el contrario que sí se ofrece garantía) y que
+            los usuarios pueden redistribuir el programa bajo estas
+            condiciones, e indicando al usuario cómo ver una copia de
+            esta licencia. (Excepción: si el propio programa es
+            interactivo pero normalmente no muestra ese anuncio, no se
+            requiere que su trabajo basado en el Programa muestre ningún
+            anuncio).
+       Estos requisitos se aplican al trabajo modificado como un todo. Si
+       partes identificables de ese trabajo no son derivadas del
+       Programa, y pueden, razonablemente, ser consideradas trabajos
+       independientes y separados por ellos mismos, entonces esta
+       Licencia y sus términos no se aplican a esas partes cuando sean
+       distribuidas como trabajos separados. Pero cuando distribuya esas
+       mismas secciones como partes de un todo que es un trabajo basado
+       en el Programa, la distribución del todo debe ser según los
+       términos de esta licencia, cuyos permisos para otros
+       licenciatarios se extienden al todo completo, y por lo tanto a
+       todas y cada una de sus partes, con independencia de quién la
+       escribió.
+       Por lo tanto, no es la intención de este apartado reclamar
+       derechos o desafiar sus derechos sobre trabajos escritos
+       totalmente por usted mismo. El intento es ejercer el derecho a
+       controlar la distribución de trabajos derivados o colectivos
+       basados en el Programa.
+       Además, el simple hecho de reunir un trabajo no basado en el
+       Programa con el Programa (o con un trabajo basado en el Programa)
+       en un volumen de almacenamiento o en un medio de distribución no
+       hace que dicho trabajo entre dentro del ámbito cubierto por esta
+       Licencia.
+    4. Puede copiar y distribuir el Programa (o un trabajo basado en él,
+       según se especifica en el apartado 2, como código objeto o en
+       formato ejecutable según los términos de los apartados 1 y 2,
+       supuesto que además cumpla una de las siguientes condiciones:
+         a. Acompañarlo con el código fuente completo correspondiente, en
+            formato electrónico, que debe ser distribuido según se
+            especifica en los apartados 1 y 2 de esta Licencia en un
+            medio habitualmente utilizado para el intercambio de
+            programas, o
+         b. Acompañarlo con una oferta por escrito, válida durante al
+            menos tres años, de proporcionar a cualquier tercera parte
+            una copia completa en formato electrónico del código fuente
+            correspondiente, a un coste no mayor que el de realizar
+            físicamente la distribución del fuente, que será distribuido
+            bajo las condiciones descritas en los apartados 1 y 2
+            anteriores, en un medio habitualmente utilizado para el
+            intercambio de programas, o
+         c. Acompañarlo con la información que recibiste ofreciendo
+            distribuir el código fuente correspondiente. (Esta opción se
+            permite sólo para distribución no comercial y sólo si usted
+            recibió el programa como código objeto o en formato
+            ejecutable con tal oferta, de acuerdo con el apartado b
+            anterior).
+       Por código fuente de un trabajo se entiende la forma preferida del
+       trabajo cuando se le hacen modificaciones. Para un trabajo
+       ejecutable, se entiende por código fuente completo todo el código
+       fuente para todos los módulos que contiene, más cualquier fichero
+       asociado de definición de interfaces, más los guiones utilizados
+       para controlar la compilación e instalación del ejecutable. Como
+       excepción especial el código fuente distribuido no necesita
+       incluir nada que sea distribuido normalmente (bien como fuente,
+       bien en forma binaria) con los componentes principales
+       (compilador, kernel y similares) del sistema operativo en el cual
+       funciona el ejecutable, a no ser que el propio componente acompañe
+       al ejecutable.
+       Si la distribución del ejecutable o del código objeto se hace
+       mediante la oferta acceso para copiarlo de un cierto lugar,
+       entonces se considera la oferta de acceso para copiar el código
+       fuente del mismo lugar como distribución del código fuente,
+       incluso aunque terceras partes no estén forzadas a copiar el
+       fuente junto con el código objeto.
+    5. No puede copiar, modificar, sublicenciar o distribuir el Programa
+       excepto como prevé expresamente esta Licencia. Cualquier intento
+       de copiar, modificar sublicenciar o distribuir el Programa de otra
+       forma es inválida, y hará que cesen automáticamente los derechos
+       que te proporciona esta Licencia. En cualquier caso, las partes
+       que hayan recibido copias o derechos de usted bajo esta Licencia
+       no cesarán en sus derechos mientras esas partes continúen
+       cumpliéndola.
+    6. No está obligado a aceptar esta licencia, ya que no la ha firmado.
+       Sin embargo, no hay hada más que le proporcione permiso para
+       modificar o distribuir el Programa o sus trabajos derivados. Estas
+       acciones están prohibidas por la ley si no acepta esta Licencia.
+       Por lo tanto, si modifica o distribuye el Programa (o cualquier
+       trabajo basado en el Programa), está indicando que acepta esta
+       Licencia para poder hacerlo, y todos sus términos y condiciones
+       para copiar, distribuir o modificar el Programa o trabajos basados
+       en él.
+    7. Cada vez que redistribuya el Programa (o cualquier trabajo basado
+       en el Programa), el receptor recibe automáticamente una licencia
+       del licenciatario original para copiar, distribuir o modificar el
+       Programa, de forma sujeta a estos términos y condiciones. No puede
+       imponer al receptor ninguna restricción más sobre el ejercicio de
+       los derechos aquí garantizados. No es usted responsable de hacer
+       cumplir esta licencia por terceras partes.
+    8. Si como consecuencia de una resolución judicial o de una alegación
+       de infracción de patente o por cualquier otra razón (no limitada a
+       asuntos relacionados con patentes) se le imponen condiciones (ya
+       sea por mandato judicial, por acuerdo o por cualquier otra causa)
+       que contradigan las condiciones de esta Licencia, ello no le exime
+       de cumplir las condiciones de esta Licencia. Si no puede realizar
+       distribuciones de forma que se satisfagan simultáneamente sus
+       obligaciones bajo esta licencia y cualquier otra obligación
+       pertinente entonces, como consecuencia, no puede distribuir el
+       Programa de ninguna forma. Por ejemplo, si una patente no permite
+       la redistribución libre de derechos de autor del Programa por
+       parte de todos aquellos que reciban copias directa o
+       indirectamente a través de usted, entonces la única forma en que
+       podría satisfacer tanto esa condición como esta Licencia sería
+       evitar completamente la distribución del Programa.
+       Si cualquier porción de este apartado se considera inválida o
+       imposible de cumplir bajo cualquier circunstancia particular ha de
+       cumplirse el resto y la sección por entero ha de cumplirse en
+       cualquier otra circunstancia.
+       No es el propósito de este apartado inducirle a infringir ninguna
+       reivindicación de patente ni de ningún otro derecho de propiedad o
+       impugnar la validez de ninguna de dichas reivindicaciones. Este
+       apartado tiene el único propósito de proteger la integridad del
+       sistema de distribución de software libre, que se realiza mediante
+       prácticas de licencia pública. Mucha gente ha hecho contribuciones
+       generosas a la gran variedad de software distribuido mediante ese
+       sistema con la confianza de que el sistema se aplicará
+       consistentemente. Será el autor/donante quien decida si quiere
+       distribuir software mediante cualquier otro sistema y una licencia
+       no puede imponer esa elección.
+       Este apartado pretende dejar completamente claro lo que se cree
+       que es una consecuencia del resto de esta Licencia.
+    9. Si la distribución y/o uso de el Programa está restringida en
+       ciertos países, bien por patentes o por interfaces bajo copyright,
+       el tenedor del copyright que coloca este Programa bajo esta
+       Licencia puede añadir una limitación explícita de distribución
+       geográfica excluyendo esos países, de forma que la distribución se
+       permita sólo en o entre los países no excluidos de esta manera. En
+       ese caso, esta Licencia incorporará la limitación como si
+       estuviese escrita en el cuerpo de esta Licencia.
+   10. La Free Software Foundation puede publicar versiones revisadas y/o
+       nuevas de la Licencia Pública General de tiempo en tiempo. Dichas
+       nuevas versiones serán similares en espíritu a la presente
+       versión, pero pueden ser diferentes en detalles para considerar
+       nuevos problemas o situaciones.
+       Cada versión recibe un número de versión que la distingue de
+       otras. Si el Programa especifica un número de versión de esta
+       Licencia que se refiere a ella y a «cualquier versión posterior»,
+       tienes la opción de seguir los términos y condiciones, bien de esa
+       versión, bien de cualquier versión posterior publicada por la Free
+       Software Foundation. Si el Programa no especifica un número de
+       versión de esta Licencia, puedes escoger cualquier versión
+       publicada por la Free Software Foundation.
+   11. Si quiere incorporar partes del Programa en otros programas libres
+       cuyas condiciones de distribución son diferentes, escribe al autor
+       para pedirle permiso. Si el software tiene copyright de la Free
+       Software Foundation, escribe a la Free Software Foundation:
+       algunas veces hacemos excepciones en estos casos. Nuestra decisión
+       estará guiada por el doble objetivo de de preservar la libertad de
+       todos los derivados de nuestro software libre y promover el que se
+       comparta y reutilice el software en general.
+       
+AUSENCIA DE GARANTÍA
+
+   12. Como el programa se licencia libre de cargas, no se ofrece ninguna
+       garantía sobre el programa, en todas la extensión permitida por la
+       legislación aplicable. Excepto cuando se indique de otra forma por
+       escrito, los tenedores del copyright y/u otras partes proporcionan
+       el programa «tal cual», sin garantía de ninguna clase, bien
+       expresa o implícita, con inclusión, pero sin limitación a las
+       garantías mercantiles implícitas o a la conveniencia para un
+       propósito particular. Cualquier riesgo referente a la calidad y
+       prestaciones del programa es asumido por usted. Si se probase que
+       el Programa es defectuoso, asume el coste de cualquier servicio,
+       reparación o corrección.
+   13. En ningún caso, salvo que lo requiera la legislación aplicable o
+       haya sido acordado por escrito, ningún tenedor del copyright ni
+       ninguna otra parte que modifique y/o redistribuya el Programa
+       según se permite en esta Licencia será responsable ante usted por
+       daños, incluyendo cualquier daño general, especial, incidental o
+       resultante producido por el uso o la imposibilidad de uso del
+       Programa (con inclusión, pero sin limitación a la pérdida de datos
+       o a la generación incorrecta de datos o a pérdidas sufridas por
+       usted o por terceras partes o a un fallo del Programa al funcionar
+       en combinación con cualquier otro programa), incluso si dicho
+       tenedor u otra parte ha sido advertido de la posibilidad de dichos
+       daños.
+       
+   FIN DE TÉRMINOS Y CONDICIONES
+   
+Apéndice: Cómo aplicar estos términos a sus nuevos programas.
+
+   Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso
+   posible para el público en general, la mejor forma de conseguirlo es
+   convirtiéndolo en software libre que cualquiera pueda redistribuir y
+   cambiar bajo estos términos.
+   
+   Para hacerlo, añada los siguientes anuncios al programa. Lo más seguro
+   es añadirlos al principio de cada fichero fuente para transmitir lo
+   más efectivamente posible la ausencia de garantía. Además cada fichero
+   debería tener al menos la línea de «copyright» y un indicador a dónde
+   puede encontrarse el anuncio completo.
+   <una línea para indicar el nombre del programa y una rápida idea de
+   qué hace.>
+   
+   Copyright (C) 19aa <nombre del autor>
+   
+   Este programa es software libre. Puede redistribuirlo y/o modificarlo
+   bajo los términos de la Licencia Pública General de GNU según es
+   publicada por la Free Software Foundation, bien de la versión 2 de
+   dicha Licencia o bien (según su elección) de cualquier versión
+   posterior.
+   
+   Este programa se distribuye con la esperanza de que sea útil, pero SIN
+   NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin
+   garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la
+   Licencia Pública General de GNU para más detalles.
+   
+   Debería haber recibido una copia de la Licencia Pública General junto
+   con este programa. Si no ha sido así, escriba a la Free Software
+   Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
+   Añada también información sobre cómo contactar con usted mediante
+   correo electrónico y postal.
+   
+   Si el programa es interactivo, haga que muestre un pequeño anuncio
+   como el siguiente, cuando comienza a funcionar en modo interactivo:
+   Gnomovision versión 69, Copyright (C) 19aa nombre del autor
+   
+   Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para más
+   detalles escriba «show w».
+   Los comandos hipotéticos «show w» y «show c» deberían mostrar las
+   partes adecuadas de la Licencia Pública General. Por supuesto, los
+   comandos que use pueden llamarse de cualquier otra manera. Podrían
+   incluso ser pulsaciones del ratón o elementos de un menú (lo que sea
+   apropiado para su programa).
+   
+   También deberías conseguir que su empleador (si trabaja como
+   programador) o tu Universidad (si es el caso) firme un «renuncia de
+   copyright» para el programa, si es necesario. A continuación se ofrece
+   un ejemplo, altere los nombres según sea conveniente:
+   Yoyodyne, Inc. mediante este documento renuncia a cualquier interés de
+       derechos de copyright con respecto al programa Gnomovision (que
+       hace pasadas a compiladores) escrito por Pepe Programador.
+       <firma de Pepito Grillo>, 20 de diciembre de 1996
+       Pepito Grillo, Presidente de Asuntillos Varios.
+       
+   Esta Licencia Pública General no permite que incluya sus programas en
+   programas propietarios. Si su programa es una biblioteca de
+   subrutinas, puede considerar más útil el permitir el enlazado de
+   aplicaciones propietarias con la biblioteca. Si este es el caso, use
+   la Licencia Pública General de GNU para Bibliotecas en lugar de esta
+   Licencia.
+
+References
+
+   1. http://www.fsf.org/
+   2. http://www.gnu.org/
+   3. http://lucas.hispalinux.es/

Index: Proyectos/Mecagtk/miweb/doc/devel.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/devel.html
diff -N Proyectos/Mecagtk/miweb/doc/devel.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/devel.html      3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,89 @@
+<html>
+<body bgcolor=#ffffff>
+<h2> Herramientas de utilización recomendadas </h2>
+A la hora de colaborar en el desarrollo de <b>MecaGTK</b> se recomienda el uso 
de las siguientes herramientas:
+( El uso de estas herramientas es recomendable no obligatorio ):
+<ul>
+<li> Compilador C GNU. Preferiblemente 2.9 o mayor. <p>
+También se pueden utilizar los siguientes: egcs, djgpp y  cygwin.
+<li> Librerías GTK versiones 1.2 y posteriores. Si utilizáis LiNUX, tendréis 
que tener instalado
+el paquete <i>gtk+-devel</i>
+
+<li> Librerías Gnome versiones 1.2.4 y posteriores. El paquete correspondiente 
en linux será <i>gnome-libs-devel</i>.
+</ul>
+La lista anterior se corresponde a los requisitos mínimos para poder compilar 
el código
+fuente tras su modificación.<p>
+Para un trabajo medianamente coordinado es recomendable utilizar los 
siguientes programas:
+<ul>
+<li><font color=blue> Sistema operativo LiNUX.</font> <b>NO</b> importa la 
versión que tengáis. Lo importante son las
+versiones de los programas arriba citados. 
+<li><font color=blue> CVS (Control Version System):</font> Bueno, al parecer 
los chicos de GNU recomiendan VCS en vez de RCS. Es m&aacute;s l&oacute;gico el 
empleo de CVS para proyectos de desarrollo de equipos grandes sobre una 
m&aacute;quina remota. Cuando esta p&aacute;gina se ponga en <a 
href="http://www.es.gnu.org";>www.es.gnu.org</a> pondr&eacute; un enlace a la 
documentaci&oacute;n y a los ejemplos necesarios.<br>
+En resumen, pod&eacute;is olvidaros del RCS.
+<li><font color=blue> RCS (Revision Control System):</font> Es un programa con 
el que podremos ir almacenando de forma
+
+ordenada ls sucesivas modificaciones que realicemos sobre el código fuente. Se 
prefiere a CVS por su 
+simplicidad y rapidez de aprendizaje (sólo requiere de dos comandos 
principales).
+<li><font color=blue>VIM como editor predeterminado</font>. A los que no lo 
manejáis os preguntaréis que por qué se 
+escoge un editor tan <i>complejo</i>.... Los que lo utilizáis habituelmente, 
ya conocéis las múltiples respuestas.
+En caso de no gustaros VIM podéis escojer entre joe, kwrite y emacs.
+<li><font color=blue>diff:</font> Para generar parches sobre el código fuente. 
Utilizadlo sólo aquellos que sepáis manejarlo correctamente.
+Se recomienda no realizarlo hasta el estadode desarrollo 0.1.2 dado que el 
código fuente cambiará radicalmente al pasar de 0.1.0 a 0.1.2.
+
+</ul>
+<h2>¿Cómo entregar modificaciones del programa? </h2>
+Los programas entregados deben de constar de dos archivos (esto será 
<b>imperativo</b> a partir de la versión 0.1.2):
+<ul>
+<li> Archivo de prototipos <i> *.h </i>
+<li> Archivo de código <i> *.c </i>
+</ul>
+Los progamas entregados deben de tener el siguiente encabezamiento:
+<pre>
+  /*
+   *
+   *  AUTOR: nombre del autor/autores
+   *  VERSIÓN: versión sobre la que se está trabajando (NO para la que se está 
trabajando)
+   *
+   *  DESCRIPCIÓN: Breve descripción
+   *
+   */
+</pre>
+He aquí un ejemplo de un pequeño proyecto en C  tomado de los apuntes de la 
asignatura <i>Estructura de Datos</i> de 1997:
+<ul>
+<li><a href="matriz.h.html">matriz.h</a>
+<li><a href="matriz.c.html">matriz.c</a>
+<li><a href="hora.h.html">hora.h</a>
+<li><a href="hora.c.html">hora.c</a>
+<li><a href="main.c.html">main.c</a>
+<li>Fichero comprimido con el código fuente: <a 
href="fuentes.tgz">fuentes.tgz</a>
+</ul>
+No será necesario que incluyáis un fichero <i>Makefile</i>. De eso me 
encargaré yo mismo, dado que espero que me lleguen varios archivos 
<i>*.h</i>... (La esperanza nunca se pierde... Mirad si no a la actual 
presidenta del senado :))
+<h2>¿Dónde necesito ayuda URGENTE?</h2>
+Me interesa mucho internacionalizar el programa. Para ello necesito que 
alguien me ayude con la herramienta <i>gettext</i> de la que prácticamente 
desconozco todo.
+Mejoras posteriores como soporte de diferentes tipos de teclado quedan 
relegadas a una posible versión 2.0.1, así que por favor no insistáis mucho en 
esta mejora.
+<h2> Sobre la documentación </h2>
+A partir de la versión 0.1.2 la documentación se realizará en <b>SGML</b>. Yo 
mismo seré el encargado de traducirla a este formato, así que sugiero que la 
entreguéis o bien en formato
+ASCII, LaTeX o HTML.
+<h2>Sobre los derechos de autor</h2>
+Este programa seguirá los términos de la licencia <a 
href="LICENCIA.txt">GNU</a>. El copyright <b>pertenecerá a todos aquellos que 
colaboren en el desarrollo del programa</b> teniendo estos el derecho 
inalienable
+ de que su nombre aparezca en los créditos explícitamente, indicando en que 
parte han colaborado. Si por algún motivo vuestro nombre no aparece y
+habéis colaborado, acédmelo saber <b>urgentemente</b>. Seguramente un error de 
este tipo se debe 
+a mi provervial <i>existencialismus chaoticus</i>. Vayan mis disculpas 
públicas por delante...<p>
+Todos aquellos que colaboren en este programa someten el código fuente de sus
+ módulos a la licencia <b>GNU</b> arriba descrita. 
+La no aceptación de este término excluirá sus
+módulos de las versiones oficiales del programa perteneciendo la propiedad 
intelectual de
+dischos módulos a su autor original y distribuyéndose éstos bajo los términos 
de
+licencia que éste considere adecuados.
+<p>
+Los bienes indirectos generados por la distribución de las versiones estables 
(invitaciones
+a cerveza, retribuciones personales por haber cambiado la vida a alguna 
secretaria,regalo de mascotas, fama,...) serán repartidos equitativamente entre 
los propietarios
+del copyrigth arriba descritos. Lo mismo <b> no </b> es aplicable a las 
críticas, problemas
+legales con terceras distribuciones, malos rollos de todo calibre, etc... De 
los cuales
+se responsabiliza exclusivamente el coordinador (un servidor) del proyecto.
+<hr>
+<address>
+Luis U.Rodríguez Paniagua<br>
+<a href="mailto:address@hidden";>address@hidden</a><br>
+Valladolid, 20/FEB/01
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/doc/fuentes.tgz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/fuentes.tgz
diff -N Proyectos/Mecagtk/miweb/doc/fuentes.tgz
Binary files /dev/null and /tmp/cvsdHzarT differ

Index: Proyectos/Mecagtk/miweb/doc/hora.c.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/hora.c.html
diff -N Proyectos/Mecagtk/miweb/doc/hora.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/hora.c.html     3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,38 @@
+<HTML>
+<HEAD>
+<TITLE>hora.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo hora.c. Implementa el TAD 
hora</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;stdio.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;assert.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;hora.h&quot;</FONT>
+
+<B><FONT color=#288a51>void</FONT></B> HoraInicializa(Hora *pH, <B><FONT 
color=#288a51>int</FONT></B> hh, <B><FONT color=#288a51>int</FONT></B> mm, 
<B><FONT color=#288a51>int</FONT></B> ss)
+{
+    assert ( pH != <FONT color=#ff00ff>NULL</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= hh &amp;&amp; hh &lt; <FONT 
color=#ff00ff>24</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= mm &amp;&amp; mm &lt; <FONT 
color=#ff00ff>60</FONT> );
+    assert ( <FONT color=#ff00ff>0</FONT> &lt;= ss &amp;&amp; ss &lt; <FONT 
color=#ff00ff>60</FONT> );
+    pH-&gt;hh = hh;
+    pH-&gt;mm = mm;
+    pH-&gt;ss = ss;
+}
+
+<B><FONT color=#288a51>char</FONT></B> *HoraACadena( Hora *pH)
+{
+    <B><FONT color=#288a51>static</FONT></B> <B><FONT 
color=#288a51>char</FONT></B> buffer[<FONT color=#ff00ff>9</FONT>];
+    sprintf(buffer,<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%02d</FONT><FONT color=#ff00ff>:</FONT><FONT 
color=#6959cf>%02d</FONT><FONT color=#ff00ff>:</FONT><FONT 
color=#6959cf>%02d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,pH-&gt;hh,pH-&gt;mm,pH-&gt;ss);
+    <B><FONT color=#a62828>return</FONT></B> buffer;
+}
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/doc/hora.h.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/hora.h.html
diff -N Proyectos/Mecagtk/miweb/doc/hora.h.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/hora.h.html     3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,31 @@
+<HTML>
+<HEAD>
+<TITLE>hora.h.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo de prototipos para el fichero 
hora.c</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#ifndef _HORA_H_</FONT>
+<FONT color=#a620f7>#define _HORA_H_</FONT>
+
+<B><FONT color=#288a51>typedef</FONT></B> <B><FONT 
color=#288a51>struct</FONT></B> {
+    <B><FONT color=#288a51>int</FONT></B> hh;
+    <B><FONT color=#288a51>int</FONT></B> mm;
+    <B><FONT color=#288a51>int</FONT></B> ss;
+}Hora;
+
+<B><FONT color=#288a51>void</FONT></B> HoraInicializa( Hora *pH, <B><FONT 
color=#288a51>int</FONT></B> hh, <B><FONT color=#288a51>int</FONT></B> mm, 
<B><FONT color=#288a51>int</FONT></B> ss);
+<B><FONT color=#288a51>char</FONT></B> *HoraACadena( Hora *pH);
+
+<FONT color=#a620f7>#endif</FONT>
+
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/doc/main.c.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/main.c.html
diff -N Proyectos/Mecagtk/miweb/doc/main.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/main.c.html     3 Mar 2012 06:14:25 -0000       
1.1
@@ -0,0 +1,84 @@
+<HTML>
+<HEAD>
+<TITLE>main.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN:  Fichero principal</FONT>
+<FONT color=#0000ff>   *  Compilación:</FONT>
+<FONT color=#0000ff>   *                    gcc -c hora.c -I.</FONT>
+<FONT color=#0000ff>   *                    gcc -c matriz.c -I.</FONT>
+<FONT color=#0000ff>   *                    gcc -o tadmatrix main.c hora.o 
matriz.o -I.</FONT>
+<FONT color=#0000ff>   */</FONT>       
+<FONT color=#a620f7>#include </FONT><FONT color=#ff00ff>&lt;stdio.h&gt;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;matriz.h&quot;</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;hora.h&quot;</FONT>
+
+main()
+{
+    Matriz A,B;
+    <B><FONT color=#288a51>int</FONT></B> m,n,i,j;
+    <B><FONT color=#288a51>float</FONT></B> x;
+    Hora h;
+    
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Obtener la dimensión de 
la matriz */</FONT>
+    printf(<FONT color=#ff00ff>&quot;Altura  :&quot;</FONT>);
+    scanf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>%d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,&amp;m);
+    printf(<FONT color=#ff00ff>&quot;Anchura :&quot;</FONT>);
+    scanf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>%d</FONT><FONT 
color=#ff00ff>&quot;</FONT>,&amp;n);
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Creamos una matriz de 
floats */</FONT>
+    MatrizCrea(&amp;A, m, n, <B><FONT color=#a62828>sizeof</FONT></B>(<B><FONT 
color=#288a51>float</FONT></B>));
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Creamos una matriz de 
horas */</FONT>
+    MatrizCrea(&amp;B, m, n, <B><FONT color=#a62828>sizeof</FONT></B>(h));
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Inicializamos las 
Matrices */</FONT>
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                x=(i+j+<FONT color=#ff00ff>2.0</FONT>)/(n+m);
+                MatrizCambia(&amp;A,i,j,&amp;x);
+                HoraInicializa(&amp;h,<FONT color=#ff00ff>1</FONT>,i,j);
+                MatrizCambia(&amp;B,i,j,&amp;h);
+            }
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Recorremos la matriz de 
floats */</FONT>
+    printf(<FONT color=#ff00ff>&quot;</FONT><FONT color=#6959cf>\n</FONT><FONT 
color=#ff00ff>Matriz de FLOATS ((i+j+2.0)/(alt+anch)):</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>); 
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+    {
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                MatrizObten(&amp;A,i,j,&amp;x);
+                printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%f</FONT><FONT color=#ff00ff> &quot;</FONT>,x);
+            }      
+        printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>);
+    }
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Recorremos la matriz de 
Hora */</FONT>
+     printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>Matriz de Horas:</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>); 
+    <B><FONT color=#a62828>for</FONT></B>(i=<FONT color=#ff00ff>0</FONT>;i 
&lt; m; i++)
+    {
+        <B><FONT color=#a62828>for</FONT></B>(j=<FONT color=#ff00ff>0</FONT>;j 
&lt; n; j++)
+            {
+                MatrizObten(&amp;B,i,j,&amp;h);
+                printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>%s</FONT><FONT color=#ff00ff> &quot;</FONT>,HoraACadena(&amp;h));
+            }
+        printf(<FONT color=#ff00ff>&quot;</FONT><FONT 
color=#6959cf>\n</FONT><FONT color=#ff00ff>&quot;</FONT>);
+    }         
+
+
+    <FONT color=#0000ff>/*</FONT><FONT color=#0000ff> Limpieza */</FONT>
+    MatrizDestruye(&amp;A);
+    MatrizDestruye(&amp;B);
+}
+
+    
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/doc/matrix
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/matrix
diff -N Proyectos/Mecagtk/miweb/doc/matrix
Binary files /dev/null and /tmp/cvsszNXDV differ

Index: Proyectos/Mecagtk/miweb/doc/matriz.c.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/matriz.c.html
diff -N Proyectos/Mecagtk/miweb/doc/matriz.c.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/matriz.c.html   3 Mar 2012 06:14:26 -0000       
1.1
@@ -0,0 +1,62 @@
+<HTML>
+<HEAD>
+<TITLE>matriz.c.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo fuente matriz.c. Implementa un 
TAD matriz</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>        
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;stdlib.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> calloc, free....*/</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;string.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> memcpy */</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&lt;assert.h&gt;</FONT> <FONT color=#0000ff>/*</FONT><FONT 
color=#0000ff> aserciones */</FONT>
+<FONT color=#a620f7>#include </FONT><FONT 
color=#ff00ff>&quot;matriz.h&quot;</FONT>
+
+<FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff> * Macro para obtener una posición. El puntero se 
convierte a (char *) porque</FONT>
+<FONT color=#0000ff> * algunos compiladores no permiten sumar a punteros void. 
La posición que </FONT>
+<FONT color=#0000ff> * ocupa un elemento será su fila más su columna. Esto hay 
que multiplicarlo por </FONT>
+<FONT color=#0000ff> * el tamaño de cada elemento.</FONT>
+<FONT color=#0000ff> *</FONT>
+<FONT color=#0000ff> */</FONT>
+<FONT color=#a620f7>#define POS( pM, i, j)((</FONT><B><FONT 
color=#288a51>char</FONT></B><FONT color=#a620f7> *) pM-&gt;elementos + 
pM-&gt;tamagno * (i * pM-&gt;n +j))</FONT>
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCrea( Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> m, <B><FONT color=#288a51>int</FONT></B> n, 
<B><FONT color=#288a51>int</FONT></B> tamagno)
+{
+    assert (m&gt;<FONT color=#ff00ff>0</FONT>);
+    assert (n&gt;<FONT color=#ff00ff>0</FONT>);
+    assert (tamagno&gt;<FONT color=#ff00ff>0</FONT>);
+    pM-&gt;m = m;
+    pM-&gt;n = n;
+    pM-&gt;tamagno = tamagno;
+    pM-&gt;elementos = calloc ( m*n, tamagno);
+    assert (pM-&gt;elementos != <FONT color=#ff00ff>NULL</FONT>);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizDestruye(Matriz *pM)
+{
+    assert ( pM-&gt;elementos != <FONT color=#ff00ff>NULL</FONT> );
+    free (pM-&gt;elementos);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizObten(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento)
+{
+    assert(i &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; i &lt; pM-&gt;m);
+    assert(j &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; j &lt; pM-&gt;n);
+    memcpy(elemento, POS(pM, i, j), pM-&gt;tamagno);
+}
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCambia(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento)
+{
+   assert(i &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; i &lt; pM-&gt;m);
+   assert(j &gt;= <FONT color=#ff00ff>0</FONT> &amp;&amp; j &lt; pM-&gt;n);
+   memcpy(POS(pM, i, j),elemento, pM-&gt;tamagno);
+}                     
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/doc/matriz.h.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/matriz.h.html
diff -N Proyectos/Mecagtk/miweb/doc/matriz.h.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/matriz.h.html   3 Mar 2012 06:14:26 -0000       
1.1
@@ -0,0 +1,35 @@
+<HTML>
+<HEAD>
+<TITLE>matriz.h.html</TITLE>
+</HEAD>
+<BODY BGcolor=#FFFFFF TEXT=#000000>
+<PRE>
+ <FONT color=#0000ff>/*</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  AUTOR: Luis</FONT>
+<FONT color=#0000ff>   *  VERSIÓN: 0.0 </FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   *  DESCRIPCIÓN: Archivo de prototipos para el fichero 
matriz.c</FONT>
+<FONT color=#0000ff>   *</FONT>
+<FONT color=#0000ff>   */</FONT>
+
+<FONT color=#a620f7>#ifndef _MATRIZ_H_</FONT>
+<FONT color=#a620f7>#define _MATRIZ_H_</FONT>
+
+<B><FONT color=#288a51>typedef</FONT></B> <B><FONT 
color=#288a51>struct</FONT></B> {
+    <B><FONT color=#288a51>int</FONT></B> m,n;
+    <B><FONT color=#288a51>size_t</FONT></B> tamagno;
+    <B><FONT color=#288a51>void</FONT></B> *elementos;
+} Matriz;
+
+<B><FONT color=#288a51>void</FONT></B> MatrizCrea(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> m, <B><FONT color=#288a51>int</FONT></B> n, 
<B><FONT color=#288a51>int</FONT></B> tamagno);
+<B><FONT color=#288a51>void</FONT></B> MatrizDestruye(Matriz *pM);
+<B><FONT color=#288a51>void</FONT></B> MatrizObten(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento);
+<B><FONT color=#288a51>void</FONT></B> MatrizCambia(Matriz *pM, <B><FONT 
color=#288a51>int</FONT></B> i, <B><FONT color=#288a51>int</FONT></B> j, 
<B><FONT color=#288a51>void</FONT></B> *elemento);
+
+<FONT color=#a620f7>#endif</FONT> _MATRIZ_H_
+<FONT color=#0000ff>/*</FONT><FONT color=#0000ff>-EOF-*/</FONT>
+
+</PRE>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/doc/mecagtk.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/mecagtk.gif
diff -N Proyectos/Mecagtk/miweb/doc/mecagtk.gif
Binary files /dev/null and /tmp/cvshw4ctZ differ

Index: Proyectos/Mecagtk/miweb/doc/mecagtk.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/doc/mecagtk.html
diff -N Proyectos/Mecagtk/miweb/doc/mecagtk.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/doc/mecagtk.html    3 Mar 2012 06:14:26 -0000       
1.1
@@ -0,0 +1,125 @@
+<html>
+<body bgcolor=#ffffff>
+<p>
+<br>
+<center>
+<table  width=800>
+<td width=20% align=left><img align=left src="mecagtk.gif"></td>
+<td><h1>Página principal de MecaGTK - Estado de desarrollo: <font color=red> 
BETA</font><br>Zona para BETA-Testers<br>Estado actual de la 
distribución</h1></td>
+</center>
+<center>
+</table><br>
+Última actualización de esta página: 01/MAR/01
+<hr width=800 >
+<table width=800 bgcolor=#666666 text=#ffffff>
+<tr>
+<td><font color=#ffffff>  <b>Historial de desarrollo</b></font></td>
+</tr>
+</table>
+</center>
+<center>
+<table width=800 bgcolor=#cccccc text=#ffffff>
+<tr>
+<td  width=20% valign=top>Revisiones:</td>
+<td  width=80% valign=top>
+<ul>
+<li><font color=red>19/FEB/01</font> Revisión 0.1.0 <a 
href="../soft/mecagtk1.tgz">mecagtk-0.1.tgz</a> Edición BETA-Tester.
+<li><font color=red>01/MAR/01</font> (<font color=red>*</font>)Revisión 
0.1.2<a href="../soft/mecagtk-0.1.2.tar.gz"> mecagtk-0.1.2.tar.gz.</a> Nuevo 
diseño. Mayor claridad en el diseño, programación y documentación.<p>
+Estado de programación a día 22/FEB/01: Se ha traducido parte del programa al 
inglés (pero mi inglés no es muy bueno); se ha estructurado y documentado el 
código. Se ha añadidido el soporte de mayúsculas y vocales acentuadas.<br>
+<b>NOTA:</b> Finalmente las lecciones se cargar&aacute;n como archivos 
separados y se incluir&aacute; un editor de lecciones. (Cortes&iacute;a de los 
sesos de PeReX.)
+<li><font color=red>??/???/??</font> Revisión 0.1.4 <tt>.o0 Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 0.1.6 <tt>.o0 Segunda quincena 
Marzo 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 0.1.8 <tt>.o0 Abril 2001 </tt>
+<li><font color=red>??/???/??</font> Revisión 1.0.0 <tt>.o0 Versión estable 
definitiva. Antes del 30 de Abril 2001</tt>
+</ul>
+(<font color=red>*</font>) Versión actual en desarrollo.
+</td>
+</tr>
+<tr>
+<td valign=top> Bitácorra de errores (BUGS)</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> Problemas 
al inicializar la ventana de lección.
+<li> <font color=red>19/FEB/01</font> <font color=green> LRP</font> No se 
consigue cerrar el diálogo de ayuda al
+pulsar el botón TERMINAR. El botón CANCELAR sí funciona correctamente.
+</ul>
+</td>
+</tr>
+
+<tr>
+<td valign=top> Bitácorra de sugerencias</td>
+<td valign=top>
+<ul>
+<li> <font color=red>19/FEB/01</font> <font color=green>DRS</font> Motor de 
lecciones autónomo. 
+Las lecciones deberán ser ficheros de texto ASCII comunes de forma que 
cualquier fichero
+puede ser susceptible de convertirse en lección.<p>
+<b>Nota:</b> esto implicaría también modificar el modelo de corrección. 
INTERESANTE. 
+¿Un puntero que vaya recorriendo caracteres? ¿Una entrada en el menú para 
cargar archivos?
+<br>
+<u>PROS:</u> Flexible, gran modularidad, obliga a diferenciar aún más las 
partes del programa.<br>
+<u>CONTRAS:</u> El tamaño de la ventana de la lección es limitado. No nos 
interesa un lector
+de textos, sino un TUTORIAL de mecanografia. Las lecciones deben cumplir 
ciertos
+requisitos de altura y anchura del texto.
+<br>SE ESTUDIAR&Aacute;<p>
+<li> <font color=red>23/FEB/01</font><font color=green> DRS</font> ¿Vas a 
poner un editor de lecciones? Ser&iacute;a buena idea.<p>
+Camarada PeReX; el editor ya es una realidad. A&uacute;n no es operativo, pero 
forma parte ya de las opciones del men&uacute;. <br>
+Gracias por la sugerencia :^)<p>
+<p>
+<p>
+</ul>
+</td>
+</tr>         
+
+<tr>
+<td valign=top> Directorio de BETA-Testers</td>
+<td valign=top>
+<ul>
+<li><font color=green>MAC</font> <a href="mailto:/dev/null";>Álvarez Cea, 
Manuel A.</a>
+<li><font color=green>LRP</font> <a href="mailto:address@hidden";>Rodríguez 
Paniagua, Luis U.</a>
+<li><font color=green>DRS</font> <a href="mailto:address@hidden";>Rodríguez 
Sánchez, David</a>
+</ul>
+</td>
+</tr>
+
+</table>
+<p><br>
+<table width=800 bgcolor=#666666 text=#ffffff>
+<tr>
+<td><font color=#ffffff> <b>Tablón de Anuncios</b></font></td>
+</tr>
+</table>   
+<table width=800 bgcolor=yellow text=#ffffff>   
+<tr valign=top>
+<td width=400>
+<b> NOTA 1:</b>
+En esta zona se pondrán avisos de interés para todos los involucrados
+en el desarrollo de este proyecto. Para las citas, flames, etc... utilizad
+ vuestro correo electrónico. Gracias.
+</td>
+<td width=400>
+<b> NOTA 2:</b>
+Algunos consejos relativos a la forma de colaborar con este proyecto: <a 
href="devel.html">NORMALIZACIÓN</a>
+</td>
+</tr>
+<tr>
+<td width=400>
+<b>NOTA 3:</b>
+Como supongo que mantener esta página en duero consume recursos de la máquina 
necesarios para el resto de los compañeros, estoy pensando en colgar esta WEB 
de otro lugar. Actualmente una versión antigua reside en <a 
href="http://www.geocities.com/luisubaldo";> www.geocities.com/luisubaldo</a>, 
pero no estoy muy satisfecho. ¿Alguna sugerencia?
+</td>
+<td width=400>
+<b>NOTA 4:</b>
+Buenas noticias. Este proyecto ha sido auspiciado por la FSF/GNU España y en
+breve (15 d&iacute;as a partir de hoy 1 de Marzo de 2001) todo el proyecto 
cambiar&aacute; de sitio. Se comunicar&aacute; la p&aacute;gina en breve. Nota 
golosa: <b>los colaboradores tambi&eacute;n podr&aacute;n disponer de cuenta en 
el ordenador en el que se instalar&aacute; el proyecto.</b>
+</td>
+</tr>
+
+</table>
+
+</center>
+<hr width=800 >  
+<address>
+<center>
+Luis U.Rodríguez Paniagua<br><a href="mailto:address@hidden";>address@hidden<a>
+</center>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/graf/captura1.jpg
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/captura1.jpg
diff -N Proyectos/Mecagtk/miweb/graf/captura1.jpg
Binary files /dev/null and /tmp/cvsdPJnVX differ

Index: Proyectos/Mecagtk/miweb/graf/captura2.jpg
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/captura2.jpg
diff -N Proyectos/Mecagtk/miweb/graf/captura2.jpg
Binary files /dev/null and /tmp/cvsg0W1yY differ

Index: Proyectos/Mecagtk/miweb/graf/captura3.jpg
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/captura3.jpg
diff -N Proyectos/Mecagtk/miweb/graf/captura3.jpg
Binary files /dev/null and /tmp/cvsTSMxx1 differ

Index: Proyectos/Mecagtk/miweb/graf/cool.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/cool.gif
diff -N Proyectos/Mecagtk/miweb/graf/cool.gif
Binary files /dev/null and /tmp/cvsP3hWc2 differ

Index: Proyectos/Mecagtk/miweb/graf/fondotit.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/fondotit.gif
diff -N Proyectos/Mecagtk/miweb/graf/fondotit.gif
Binary files /dev/null and /tmp/cvsEuVjYZ differ

Index: Proyectos/Mecagtk/miweb/graf/hechogimp.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/hechogimp.gif
diff -N Proyectos/Mecagtk/miweb/graf/hechogimp.gif
Binary files /dev/null and /tmp/cvsrKqyz0 differ

Index: Proyectos/Mecagtk/miweb/graf/iractivo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/iractivo.gif
diff -N Proyectos/Mecagtk/miweb/graf/iractivo.gif
Binary files /dev/null and /tmp/cvszOqeA3 differ

Index: Proyectos/Mecagtk/miweb/graf/irinactivo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/irinactivo.gif
diff -N Proyectos/Mecagtk/miweb/graf/irinactivo.gif
Binary files /dev/null and /tmp/cvsFObMe4 differ

Index: Proyectos/Mecagtk/miweb/graf/irpresabj.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/irpresabj.gif
diff -N Proyectos/Mecagtk/miweb/graf/irpresabj.gif
Binary files /dev/null and /tmp/cvs3jGDx2 differ

Index: Proyectos/Mecagtk/miweb/graf/linux-inside.xbm
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/linux-inside.xbm
diff -N Proyectos/Mecagtk/miweb/graf/linux-inside.xbm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/graf/linux-inside.xbm       3 Mar 2012 06:14:27 
-0000       1.1
@@ -0,0 +1,46 @@
+#define linux-inside_width 73
+#define linux-inside_height 64
+static char linux-inside_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x1f,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,
+ 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,
+ 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,
+ 0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0xfc,0xff,0x07,0x00,0x00,0x1f,0x00,0x00,
+ 0x00,0x00,0xfe,0x3f,0x00,0x00,0x0e,0x18,0x00,0x00,0x00,0x00,0xff,0x0f,0x00,
+ 0x00,0xfe,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x60,0xd6,0x03,0x00,0x00,
+ 0x00,0xe0,0x7f,0x00,0x80,0xf3,0xbe,0x07,0x00,0x00,0x00,0xf0,0x3f,0x00,0xc0,
+ 0xf7,0xbe,0x1f,0x00,0x00,0x00,0xf8,0x0f,0x00,0xc0,0xff,0xd6,0x3f,0x00,0x00,
+ 0x00,0xfc,0x03,0x00,0x80,0x7f,0xfe,0x7f,0x00,0x00,0x00,0xfe,0x01,0xc0,0x01,
+ 0x7f,0xf0,0xff,0x00,0x00,0x00,0x7e,0x00,0xc0,0x73,0x3e,0x80,0xff,0x01,0x00,
+ 0x00,0x3f,0x00,0xc0,0x73,0x7e,0x00,0xfc,0x03,0x00,0x80,0x1f,0x00,0xc0,0x73,
+ 0x7e,0x00,0xf8,0x07,0x00,0x80,0x0f,0x00,0xc0,0x73,0xff,0x00,0xe0,0x07,0x00,
+ 0xc0,0x67,0xec,0xc3,0x73,0xff,0x00,0xc0,0x0f,0x00,0xc0,0xf7,0xee,0xcf,0x73,
+ 0xef,0x01,0x80,0x0f,0x00,0xe0,0xf3,0xee,0xdf,0x7b,0xe7,0x01,0x80,0x1f,0x00,
+ 0xe0,0xf1,0xe6,0x9f,0x7f,0xc7,0x00,0x00,0x1f,0x00,0xf0,0xf1,0xe0,0x9f,0x7f,
+ 0x03,0x00,0x00,0x1e,0x00,0xf0,0xf0,0xee,0xbd,0x7f,0x00,0x18,0x00,0x3e,0x00,
+ 0xf0,0xf0,0xee,0x3d,0xff,0x00,0x78,0x00,0x3c,0x00,0xf0,0xf0,0xee,0x39,0xff,
+ 0x00,0x78,0x00,0x3c,0x00,0x78,0xf0,0xee,0x38,0xef,0x30,0x78,0x3c,0x38,0x00,
+ 0x78,0xf0,0xee,0x38,0x00,0x78,0x38,0x7e,0x78,0x00,0x78,0xf0,0xee,0x38,0x00,
+ 0x78,0x38,0x7f,0x78,0x00,0x38,0xf0,0xee,0x30,0x00,0x70,0x3c,0x77,0x78,0x00,
+ 0x38,0xf0,0xce,0x00,0x80,0x03,0x3e,0x7b,0x78,0x00,0x38,0x70,0x0e,0x00,0xc0,
+ 0x3b,0xbf,0x7f,0x78,0x00,0x38,0x70,0x06,0x01,0xe0,0x3b,0xbf,0x3f,0x38,0x00,
+ 0x38,0x70,0x86,0x1b,0xf0,0xbb,0xbf,0x5f,0x3c,0x00,0x38,0x70,0x86,0xfb,0xf0,
+ 0xb9,0xbb,0xe7,0x3c,0x00,0x78,0x70,0x80,0xfb,0xf1,0xb8,0xbb,0xff,0x3c,0x00,
+ 0x78,0x60,0x00,0xf8,0xf3,0xb8,0xbb,0x7f,0x1c,0x00,0x78,0x20,0x80,0xfb,0xf7,
+ 0xb9,0x3b,0x3f,0x1e,0x00,0xf0,0x00,0xc0,0xfb,0xe7,0xbb,0x3f,0x1e,0x1e,0x00,
+ 0xf0,0x00,0xc0,0x7b,0xc7,0xbb,0x3f,0x00,0x0f,0x00,0xf0,0x00,0xc0,0x3b,0xc7,
+ 0xbb,0x3f,0x80,0x0f,0x00,0xe0,0x01,0xc0,0x3b,0xc7,0x3b,0x3f,0x80,0x07,0x00,
+ 0xe0,0x03,0xc0,0x3b,0xe7,0x3b,0x30,0xc0,0x07,0x00,0xe0,0x07,0xc0,0x3b,0xf7,
+ 0x3b,0x00,0xe0,0x03,0x00,0xc0,0x0f,0xc0,0x3b,0xf7,0x01,0x00,0xf0,0x01,0x00,
+ 0x80,0x1f,0xc0,0x39,0xf7,0x00,0x00,0xf8,0x01,0x00,0x80,0x3f,0xc0,0x19,0x76,
+ 0x00,0x00,0xfc,0x00,0x00,0x00,0x7f,0xc0,0x01,0x06,0x00,0x00,0x7f,0x00,0x00,
+ 0x00,0xfe,0x80,0x01,0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,
+ 0x00,0xe0,0x1f,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,
+ 0x00,0xf0,0x7f,0x00,0x00,0x00,0xff,0x07,0x00,0x00,0x00,0xe0,0xff,0x03,0x00,
+ 0xf0,0xff,0x01,0x00,0x00,0x00,0x80,0xff,0xff,0x80,0xff,0x7f,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,
+ 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

Index: Proyectos/Mecagtk/miweb/graf/logo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/logo.gif
diff -N Proyectos/Mecagtk/miweb/graf/logo.gif
Binary files /dev/null and /tmp/cvs8dedc6 differ

Index: Proyectos/Mecagtk/miweb/graf/mano.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/mano.gif
diff -N Proyectos/Mecagtk/miweb/graf/mano.gif
Binary files /dev/null and /tmp/cvsLdnOf6 differ

Index: Proyectos/Mecagtk/miweb/graf/mono.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/mono.gif
diff -N Proyectos/Mecagtk/miweb/graf/mono.gif
Binary files /dev/null and /tmp/cvsmmj3S6 differ

Index: Proyectos/Mecagtk/miweb/graf/pollo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/pollo.gif
diff -N Proyectos/Mecagtk/miweb/graf/pollo.gif
Binary files /dev/null and /tmp/cvs7Hqvc5 differ

Index: Proyectos/Mecagtk/miweb/graf/principal.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/principal.gif
diff -N Proyectos/Mecagtk/miweb/graf/principal.gif
Binary files /dev/null and /tmp/cvswIHTR5 differ

Index: Proyectos/Mecagtk/miweb/graf/users.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/users.gif
diff -N Proyectos/Mecagtk/miweb/graf/users.gif
Binary files /dev/null and /tmp/cvsvGD6R8 differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/cool.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/cool.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/cool.gif
Binary files /dev/null and /tmp/cvsbdoLv9 differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/fondomenu.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/fondomenu.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/fondomenu.gif
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/graf/.xvpics/fondomenu.gif  3 Mar 2012 06:14:28 
-0000       1.1
@@ -0,0 +1,5 @@
+P7 332
+#IMGINFO:115x600 RGB (3423 bytes)
+#END_OF_COMMENTS
+11 60 255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛþÛÛÚÛÛÚÛÚÿ’¶’‘¶’’–²‘ÿ’¶’‘¶’’–²‘ÿ’¶’‘¶’’–²‘ÿ’¶ÿÿÿÿÿÿÿÿÿ’¶ÿÿÿÿÿÿÿÿÿ’¶ÿÿÿÿÿÿÿÿÿ’¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÛÚöÚûÙÿ·ÚÿÖÕÒÕÖµÖÿ’±ÿÖÕÒÕÖµÖÿ’±ÿÖÕÒÕÖµÖÿ’±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’¶’‘¶’’–²‘ÿ’¶’‘¶’’–²‘ÿ’¶’µ“‘¶’’•ÿÿÿÿÿÿ’‘’¶’ÿÿÿÿ’¶‘“µ·ÿÿÿ¶’¶’‘·ÿÿÿÿ’¶’‘¶ÿÿÿÿÿÿ’¶’‘¶’–²’¶ÿ’¶’‘¶’’–²‘ÿ’¶’‘¶’’–²‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿÚÿÿÿÿ’¶’‘¶’’–²ÿ’¶’‘¶’’–²‘ÿ’¶’‘¶’’–²‘ÿ’¶¶ÿÿÿÿÿÿÿÿ’¶ÿÿÿÿÿÿÿÿÿ’¶Ûÿÿÿÿÿÿÿÿ’¶’‘¶’’–²‘ÿ’¶’‘¶’’–²‘ÿÿ’¶’‘¶’’–²ÿÿÿÛÚÛº×ÚÛºÿÛÿÿÿÿÿÿÿÿÿÿ’¶ÿÿÿÿÿÿۑÿ’¶’Úÿÿÿ’¶’ÿ’¶’‘¶Û’‘–²ÿÿ¶’¶’‘–²’¶ÿÿÿÿ’¶‘“•ÿÿÿÿ–²’‘¶’’Ûÿÿ’¶’‘¶’’–²‘ÿÿÿ’Úÿÿ¶’’¶ÿrÿÿÿÿÿÿÿ’’ÿ.)ÿÿÿÿÿÿÿÛÿ.)ÿÿÿÿÿÿÿÿÿ.rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿI$IIÛ¶¶¶IH%I$IIÛ¶¶¶IH%I$IIÛ¶¶¶IH%
\ No newline at end of file

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/fondotit.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/fondotit.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/fondotit.gif
Binary files /dev/null and /tmp/cvsRR9JS7 differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/hechogimp.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/hechogimp.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/hechogimp.gif
Binary files /dev/null and /tmp/cvsUfMSSa differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/iractivo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/iractivo.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/iractivo.gif
Binary files /dev/null and /tmp/cvsDngavb differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/irinactivo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/irinactivo.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/irinactivo.gif
Binary files /dev/null and /tmp/cvsth1IO9 differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/irpresabj.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/irpresabj.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/irpresabj.gif
Binary files /dev/null and /tmp/cvsz9p5ta differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/linux-inside.xbm
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/linux-inside.xbm
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/linux-inside.xbm
Binary files /dev/null and /tmp/cvs9P7Ysd differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/logo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/logo.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/logo.gif
Binary files /dev/null and /tmp/cvspJB14d differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/pollo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/pollo.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/pollo.gif
Binary files /dev/null and /tmp/cvsgYW49d differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/principal.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/principal.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/principal.gif
Binary files /dev/null and /tmp/cvsfIP3uc differ

Index: Proyectos/Mecagtk/miweb/graf/.xvpics/users.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/graf/.xvpics/users.gif
diff -N Proyectos/Mecagtk/miweb/graf/.xvpics/users.gif
Binary files /dev/null and /tmp/cvsuEYP7c differ

Index: Proyectos/Mecagtk/miweb/html/autor.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/autor.html
diff -N Proyectos/Mecagtk/miweb/html/autor.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/autor.html     3 Mar 2012 06:14:29 -0000       
1.1
@@ -0,0 +1,15 @@
+<html>
+<body bgcolor="#ffffff" text="#000000">
+<h1>Sobre el Autor</h1>
+Lo cierto es que no hay mucho que decir. Estas son algunas capturas de su 
equipo doméstico de <b>LiNUX</b>:
+<center>
+<hr>
+<h2>Mi entorno favorito: AnotherLevel (fvwm2 )</h2>
+<img src="../graf/captura1.jpg">
+<h2>El más atractivo visualmente... Pero lento hasta la desesperación.
+<img src="../graf/captura2.jpg"> 
+<h2>El más robusto... Pero el más <em>windowizado</em></h2>   
+<img src="../graf/captura3.jpg"> 
+</center>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/consulta.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/consulta.html
diff -N Proyectos/Mecagtk/miweb/html/consulta.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/consulta.html  3 Mar 2012 06:14:29 -0000       
1.1
@@ -0,0 +1,55 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.73 [es] (X11; I; Linux 2.2.14-12 
i586) [Netscape]">
+</head>
+<body bgcolor="#ffffff">
+<center><font color="#ff0000"><h1>Consultorio <em>El Pollo</em></h1>
+<img src="../graf/pollo.gif"><br>
+<h2>(A.K.A.<b> TuX)</b></h2>
+<hr></font></center>
+&nbsp;
+<center><table COLS=2 WIDTH="640" BGCOLOR="#666666" NOSAVE >
+<tr ALIGN=LEFT VALIGN=CENTER BGCOLOR="#000000" NOSAVE>
+<td ALIGN=LEFT NOSAVE><font color="#FFFFFF">¿Por qu&eacute;
+el nombre de <b>NEMESyS</b> ?</font></td>
+<td width="20"><font color="#ff0000"> 18/DiC/2000 </font> </td>
+</tr>
+<tr ALIGN=LEFT VALIGN=CENTER NOSAVE>
+<td NOSAVE>
+<font color="#ffffff">Principalmente porque es el nombre de mi máquina 
doméstica. De todas formas la historia del nombre es un poco absurda y a muchos 
les parecerá una tontería. El némesys de una persona viene a significar la 
persona opuesta. Este nombre tiene sus orígenes en los antiguos sistemas 
planetarios: Los protocientíficos que sobrevivieron a la hoguera y aceptaron el 
sistema heliocentrista se encontraron con un problema: Las órbitas eran 
elípticas contraviniendo herméticas creencias que reflejaban la perfección del 
universo en la perfección de la esfera.
+<br> Entonces una teoría se sacó de la manga la existencia de <em>otro sol que 
no lucía</em> y que era el culpable de que las órbitas fueran elípticas y no 
perfectamente circulares. A su vez este nombre fue tomado de la mitología.<br>
+Resumiendo: Si hoy en día la estrella que brilla con más fulgor en esto de la 
informática  es la MegaHiperCorporación cuyas siglas son <b>M.S.</b>, ¿cuál 
podría ser su <em>némesys</em>?</font>
+</td>
+<td>
+</td>
+</tr>
+</table>
+&nbsp;
+&nbsp;
+&nbsp;
+&nbsp;
+
+
+
+<table COLS=2 WIDTH="640" BGCOLOR="#666666" NOSAVE >
+<tr ALIGN=LEFT VALIGN=CENTER BGCOLOR="#000000" NOSAVE>
+<td ALIGN=LEFT NOSAVE><font color="#FFFFFF">¿Cómo puedo dejar aquí
+mi pregunta ?</font></td>
+<td width="20"><font color="#ff0000"> 18/DiC/2000 </font> </td>
+</tr>
+<tr ALIGN=LEFT VALIGN=CENTER NOSAVE>
+<td NOSAVE>
+<font color="#ffffff">Fácil: mándame un correo electrónico a la siguiente 
dirección:
+<br><center><a href="mailto:address@hidden";>address@hidden</a></center>
+<br><center> o bien </center>
+<br><center><a href="mailto:address@hidden";>address@hidden</a></center>
+<br> Poniendo como Asunto (<em>Subject</em>) <b> Consulta LiNUX </b>. 
Procuraré responder esa misma semana tanto personalmente como en esta misma 
página.
+</td>
+<td>
+</td>
+</tr>
+</table>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/cuerpo.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/cuerpo.html
diff -N Proyectos/Mecagtk/miweb/html/cuerpo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/cuerpo.html    3 Mar 2012 06:14:29 -0000       
1.1
@@ -0,0 +1,43 @@
+<html>
+<body bgcolor="#ffffff">
+<img src="../graf/logo.gif">
+<h1><b>NEMESyS</b></h1>
+Bienvenidos al sistema centralizado de ayuda de NEMESyS. Desde aquí podrá 
acceder a gran parte de la ayuda que sobre <b>LiNUX</b> se encuentra en la 
red.<br>
+El autor pretende además desde sus más bien escasos conocimientos, ayudar a 
todos aquellos que comiencen su andadura en este nuevo <b>S</b>istema 
<b>O</b>perativo.(Sí; con mayúsculas).<br>
+Llevo tres años en esto del <b>LiNUX</b> y la verdad es que cada vez me gusta 
más. He cometido casi todos los fallos posibles, así que seguramente, si no mis 
conocimientos, sí mi experiencia servirán de ayuda.
+<br>
+No se olvide de visitar la zona de <a href="../doc/mecagtk.html">DOWNLOADs</a>
+<br>
+Esta p&aacute;guna pretende ser un centro de consultas de <b>LiNUX</b>. La 
raz&oacute;n por la que me decid&iacute; a hacerla fue la gran cantidad de 
preguntas que mis compa&ntilde;eros me hac&iacute;an al respecto. De este modo 
responder&eacute; las preguntas una &uacute;nica vez y estar&eacute; m&aacute;s 
tiempo disponible.
+<h2><font color="#ff0000">NOTA:</font></h2>
+Mis conocimientos sobre HTML dinámico son prácticamente nulos. Agradecería que 
alguien me ayudara a hacer esta página un poco más atractiva y funcional... Una 
página como esta dedicada a JAVA o ASP no estaría mal.... ;)
+<br>
+<br> Gracias por su atención.
+<hr>
+<h2>Gustos</h2>
+<ul>
+<li><b>M&uacute;sica:</b></li>
+Cl&aacute;sica(Bach, Beethoven,...), Jazz (Coltrane, Davis, Cole,...), Les 
Luthiers,  Blues...
+<li><b>Inform&aacute;tica:</b></li>
+LiNUX ( :) ), LaTeX, C, Eiffel, etc..
+<li><b>Miscel&aacute;nea:</b></li>
+Buena cerveza, Astronom&iacute;a, Escher, tertulias del 
<em>Irland&eacute;s</em>(por cierto; estamos en pleno ciclo de cine 
balc&aacute;nico)
+</ul>
+<br>
+<hr>
+Dudas, cuestiones, preguntas, etc... a:<br>
+<em>
+<a href="autor.html">Luis U. Rodríguez Paniagua</a> <br>
+</em>
+Flames, como siempre a <em>/dev/null</em><br>
+<address>
+<a href="mailto:address@hidden";>address@hidden</a><br>
+(c) NEMESyS 2000<br>
+<center>Última actualización: Diciembre de 20000</center>
+<hr>
+
+
+
+
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/error.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/error.html
diff -N Proyectos/Mecagtk/miweb/html/error.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/error.html     3 Mar 2012 06:14:29 -0000       
1.1
@@ -0,0 +1,17 @@
+<html>
+<body>
+
+<center>
+<hr>
+<font color="#ff0000">
+Por causas derivadas de la actual<br>
+política de distribución<br>
+de este documento<br>
+aún no estoy seguro de poder publicarlo<br>
+en este sitio<br>
+</font>
+<hr>
+</center>
+Si desea ponerse en contacto con el autor: <a 
href="mailto:address@hidden";>Agustín Froufe</a>.
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/iractivo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/iractivo.gif
diff -N Proyectos/Mecagtk/miweb/html/iractivo.gif
Binary files /dev/null and /tmp/cvs8QSOai differ

Index: Proyectos/Mecagtk/miweb/html/menu.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/menu.html
diff -N Proyectos/Mecagtk/miweb/html/menu.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/menu.html      3 Mar 2012 06:14:29 -0000       
1.1
@@ -0,0 +1,158 @@
+<html>
+<body  bgcolor="ffffff" text="000000" link="00ff00" vlink="0033dd" >
+<hr>
+<br>
+<center><img src="../graf/mano.gif"></center>
+<center><a href="cuerpo.html" target="cuerpo"><img src="../graf/principal.gif" 
border=0 align=ABSCENTER></a>
+
+<br>
+<hr>
+<br>
+<table COLS=1 WIDTH="100%" BGCOLOR="#0000FF" NOSAVE>
+<tr><td><h2><font color="FFFFFF">Documentación:</font></h2></td></tr>
+</table>
+<br>
+<center><table COLS=2 WIDTH="150" BGCOLOR="#DDDDff" NOSAVE >
+<tr NOSAVE>
+<td bgcolor="#ffffff" WIDTH="10" NOSAVE>
+<a href="es/index2.html" target="cuerpo"><img src="../graf/iractivo.gif" 
border=0 align=ABSCENTER></a>
+</td>
+<td>
+<b> Tutorial Linux</b>
+</td> 
+</tr>
+<tr NOSAVE>
+<td bgcolor="#ffffff" width="10" valign="top"  NOSAVE>
+<a href="../OpenSource/toc.html" target="cuerpo"><img src="../graf/iractivo
+.gif" border=0 align=TOP></a>
+</td>
+<td>
+<b>Debate sobre Software de Libre Distribución (ojo a los autores)</b>
+</td>
+</tr>             
+<tr NOSAVE>
+<td bgcolor="#ffffff" width="10" valign="top"  NOSAVE>
+<a href="http://www.sololinux.com"; target="cuerpo"><img src="../graf/iractivo
+.gif" border=0 align=TOP></a>
+</td>
+<td>
+<b>SoloLiNUX.com</b>
+</td>
+</tr>                                                                          
+<tr NOSAVE>
+<td bgcolor="#ffffff" width="10" NOSAVE>
+<a href="http://lucas.hispalinux.es/"; target="cuerpo"><img 
src="../graf/iractivo.gif" border=0 align=ABSCENTER></a>
+</td>
+<td>
+<b>Proyecto LuCAS</b>
+</td>
+</tr>
+</table>
+</center>
+
+<hr>     
+<br>
+<table COLS=1 WIDTH="100%" BGCOLOR="#0000FF" NOSAVE>
+<tr><td><h2><font color="FFFFFF">Lenguajes de 
Programación:</font></h2></td></tr>
+</table>
+
+   
+<center><table COLS=2 WIDTH="150" BGCOLOR="#ddddFF" NOSAVE >
+<tr NOSAVE>
+<td bgcolor="#FFFFFF" WIDTH="10" NOSAVE valign=TOP>
+<a href="http://java.sun.com/docs/books/tutorial/"; target="cuerpo"><img 
src="../graf/iractivo.gif" border=0 align=ABSCENTER></a>
+</td>
+<td>
+<b> Tutorial De Java</b>
+</td>
+</tr>
+
+
+
+<tr>
+<td bgcolor="#ffffff" valign=TOP >
+<a href="gtk/gtk_tut.html" target="cuerpo"><img src="../graf/iractivo.gif" 
border=0 i align=ABSCENTER></a>
+</td>
+<td>
+<b> Tutorial de GTK+ </b>
+</td>
+</tr>
+<tr>
+<td bgcolor="#ffffff" valign=TOP >
+<a href="bash/bashref.html" target="cuerpo"><img src="../graf/iractivo.gif" 
border=0  align=ABSCENTER></a>
+</td>
+<td>
+<b> Referencia Bash-Shell </b>
+</td>
+</tr>
+
+
+<tr>
+<td bgcolor="#ffffff" valign=TOP >
+<a href="http://www-cgi.cs.cmu.edu/cgi-bin/perl-man"; target="cuerpo"><img 
src="../graf/iractivo.gif" border=0 align=ABSCENTER></a>
+
+</td>
+<td>
+<b> Referencia PERL </b>
+</td>
+</tr>
+
+</table></center>
+
+
+<hr>
+<br>
+<table COLS=1 WIDTH="100%" BGCOLOR="#0000FF" NOSAVE>
+<tr><td><h2><font color="FFFFFF">Rincón Científico:</font></h2></td></tr>
+</table>
+
+<center><table COLS=2 width="150" BGCOLOR="#ddddFF" NOSAVE >
+<tr NOSAVE>
+<td bgcolor="#ffffff" WIDTH="10" NOSAVE valign=TOP>
+<a href="http://www.gnuplot.vt.edu/"; target="cuerpo"><img 
src="../graf/iractivo.gif" border=0 align=ABSCENTER></a>
+</td>
+<td>
+<b> GNUplot</b>
+</td>
+</tr>
+<tr>
+<td bgcolor="#ffffff" valign=TOP >
+<a href="http://www.ugr.es/~gebqmed/esrasmol.html"; target="cuerpo"><img 
src="../graf/iractivo.gif" border=0 i align=ABSCENTER></a>
+</td>
+<td>
+<b> RasMol </b>
+</td>
+</tr>
+<tr>
+<td bgcolor="#ffffff" valign=TOP >
+<a href="http://www.clearskyinstitute.com/xephem"; target="cuerpo"><img 
src="../graf/iractivo.gif" border=0 i align=ABSCENTER></a>
+</td>
+<td>
+<b> Xephem </b>
+</td>
+</tr>
+
+
+</table></center>
+
+
+<hr>
+<br>
+<table COLS=1 WIDTH="100%" BGCOLOR="#0000FF" NOSAVE>
+<tr><td><h2><font color="FFFFFF">Consultorio del Pollo (a.k.a. 
<b>TuX</b>):</font></h2></td></tr>
+</table>
+
+<center><table COLS=2 width="150" BGCOLOR="#DDDDff" NOSAVE >
+<tr NOSAVE>
+<td bgcolor="#FFFFFF" WIDTH="10" NOSAVE valign=TOP>
+<a href="consulta.html" target="cuerpo"><img src="../graf/users.gif" border=0 
align=ABSCENTER></a>
+</td>
+<td>
+<b> Últimas Preguntas y Respuestas</b>
+</td>
+</tr>
+
+</table></center>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/titulo.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/titulo.html
diff -N Proyectos/Mecagtk/miweb/html/titulo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/titulo.html    3 Mar 2012 06:14:29 -0000       
1.1
@@ -0,0 +1,5 @@
+<html>
+<body bgcolor="#ffffff" text="#FFFFFF" >
+<img src="../graf/fondotit.gif" width="100%" height="83" >
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/bash/bashref.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/bash/bashref.html
diff -N Proyectos/Mecagtk/miweb/html/bash/bashref.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/bash/bashref.html      3 Mar 2012 06:14:29 
-0000       1.1
@@ -0,0 +1,10571 @@
+<HTML>
+<HEAD>
+<!-- This HTML file has been created by texi2html 1.52
+     from /usr/homes/chet/src/bash/src/doc/bashref.texi on 1 Febuary 1999 -->
+
+<TITLE>Bash Reference Manual</TITLE>
+</HEAD>
+<BODY>
+<H1>Bash Reference Manual</H1>
+<H2>Reference Documentation for Bash</H2>
+<H2>Edition 2.3, for <CODE>Bash</CODE> Version 2.03.</H2>
+<H2>January 1999</H2>
+<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
+<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
+<P>
+<P><HR><P>
+<H1>Table of Contents</H1>
+<UL>
+<LI><A NAME="TOC1" HREF="bashref.html#SEC1">Introduction</A>
+<UL>
+<LI><A NAME="TOC2" HREF="bashref.html#SEC2">What is Bash?</A>
+<LI><A NAME="TOC3" HREF="bashref.html#SEC3">What is a shell?</A>
+</UL>
+<LI><A NAME="TOC4" HREF="bashref.html#SEC4">Definitions</A>
+<LI><A NAME="TOC5" HREF="bashref.html#SEC5">Basic Shell Features</A>
+<UL>
+<LI><A NAME="TOC6" HREF="bashref.html#SEC6">Shell Syntax</A>
+<UL>
+<LI><A NAME="TOC7" HREF="bashref.html#SEC7">Shell Operation</A>
+<LI><A NAME="TOC8" HREF="bashref.html#SEC8">Quoting</A>
+<UL>
+<LI><A NAME="TOC9" HREF="bashref.html#SEC9">Escape Character</A>
+<LI><A NAME="TOC10" HREF="bashref.html#SEC10">Single Quotes</A>
+<LI><A NAME="TOC11" HREF="bashref.html#SEC11">Double Quotes</A>
+<LI><A NAME="TOC12" HREF="bashref.html#SEC12">ANSI-C Quoting</A>
+<LI><A NAME="TOC13" HREF="bashref.html#SEC13">Locale-Specific Translation</A>
+</UL>
+<LI><A NAME="TOC14" HREF="bashref.html#SEC14">Comments</A>
+</UL>
+<LI><A NAME="TOC15" HREF="bashref.html#SEC15">Shell Commands</A>
+<UL>
+<LI><A NAME="TOC16" HREF="bashref.html#SEC16">Simple Commands</A>
+<LI><A NAME="TOC17" HREF="bashref.html#SEC17">Pipelines</A>
+<LI><A NAME="TOC18" HREF="bashref.html#SEC18">Lists of Commands</A>
+<LI><A NAME="TOC19" HREF="bashref.html#SEC19">Looping Constructs</A>
+<LI><A NAME="TOC20" HREF="bashref.html#SEC20">Conditional Constructs</A>
+<LI><A NAME="TOC21" HREF="bashref.html#SEC21">Grouping Commands</A>
+</UL>
+<LI><A NAME="TOC22" HREF="bashref.html#SEC22">Shell Functions</A>
+<LI><A NAME="TOC23" HREF="bashref.html#SEC23">Shell Parameters</A>
+<UL>
+<LI><A NAME="TOC24" HREF="bashref.html#SEC24">Positional Parameters</A>
+<LI><A NAME="TOC25" HREF="bashref.html#SEC25">Special Parameters</A>
+</UL>
+<LI><A NAME="TOC26" HREF="bashref.html#SEC26">Shell Expansions</A>
+<UL>
+<LI><A NAME="TOC27" HREF="bashref.html#SEC27">Brace Expansion</A>
+<LI><A NAME="TOC28" HREF="bashref.html#SEC28">Tilde Expansion</A>
+<LI><A NAME="TOC29" HREF="bashref.html#SEC29">Shell Parameter Expansion</A>
+<LI><A NAME="TOC30" HREF="bashref.html#SEC30">Command Substitution</A>
+<LI><A NAME="TOC31" HREF="bashref.html#SEC31">Arithmetic Expansion</A>
+<LI><A NAME="TOC32" HREF="bashref.html#SEC32">Process Substitution</A>
+<LI><A NAME="TOC33" HREF="bashref.html#SEC33">Word Splitting</A>
+<LI><A NAME="TOC34" HREF="bashref.html#SEC34">Filename Expansion</A>
+<UL>
+<LI><A NAME="TOC35" HREF="bashref.html#SEC35">Pattern Matching</A>
+</UL>
+<LI><A NAME="TOC36" HREF="bashref.html#SEC36">Quote Removal</A>
+</UL>
+<LI><A NAME="TOC37" HREF="bashref.html#SEC37">Redirections</A>
+<UL>
+<LI><A NAME="TOC38" HREF="bashref.html#SEC38">Redirecting Input</A>
+<LI><A NAME="TOC39" HREF="bashref.html#SEC39">Redirecting Output</A>
+<LI><A NAME="TOC40" HREF="bashref.html#SEC40">Appending Redirected Output</A>
+<LI><A NAME="TOC41" HREF="bashref.html#SEC41">Redirecting Standard Output and 
Standard Error</A>
+<LI><A NAME="TOC42" HREF="bashref.html#SEC42">Here Documents</A>
+<LI><A NAME="TOC43" HREF="bashref.html#SEC43">Duplicating File Descriptors</A>
+<LI><A NAME="TOC44" HREF="bashref.html#SEC44">Opening File Descriptors for 
Reading and Writing</A>
+</UL>
+<LI><A NAME="TOC45" HREF="bashref.html#SEC45">Executing Commands</A>
+<UL>
+<LI><A NAME="TOC46" HREF="bashref.html#SEC46">Simple Command Expansion</A>
+<LI><A NAME="TOC47" HREF="bashref.html#SEC47">Command Search and Execution</A>
+<LI><A NAME="TOC48" HREF="bashref.html#SEC48">Command Execution Environment</A>
+<LI><A NAME="TOC49" HREF="bashref.html#SEC49">Environment</A>
+<LI><A NAME="TOC50" HREF="bashref.html#SEC50">Exit Status</A>
+<LI><A NAME="TOC51" HREF="bashref.html#SEC51">Signals</A>
+</UL>
+<LI><A NAME="TOC52" HREF="bashref.html#SEC52">Shell Scripts</A>
+</UL>
+<LI><A NAME="TOC53" HREF="bashref.html#SEC53">Bourne Shell Style Features</A>
+<UL>
+<LI><A NAME="TOC54" HREF="bashref.html#SEC54">Bourne Shell Builtins</A>
+<LI><A NAME="TOC55" HREF="bashref.html#SEC55">Bourne Shell Variables</A>
+<LI><A NAME="TOC56" HREF="bashref.html#SEC56">Other Bourne Shell Features</A>
+<UL>
+<LI><A NAME="TOC57" HREF="bashref.html#SEC57">Major Differences From The 
SVR4.2 Bourne Shell</A>
+<LI><A NAME="TOC58" HREF="bashref.html#SEC58">Implementation Differences From 
The SVR4.2 Shell</A>
+</UL>
+</UL>
+<LI><A NAME="TOC59" HREF="bashref.html#SEC59">Bash Features</A>
+<UL>
+<LI><A NAME="TOC60" HREF="bashref.html#SEC60">Invoking Bash</A>
+<LI><A NAME="TOC61" HREF="bashref.html#SEC61">Bash Startup Files</A>
+<LI><A NAME="TOC62" HREF="bashref.html#SEC62">Is This Shell Interactive?</A>
+<LI><A NAME="TOC63" HREF="bashref.html#SEC63">Bash Builtin Commands</A>
+<LI><A NAME="TOC64" HREF="bashref.html#SEC64">The Set Builtin</A>
+<LI><A NAME="TOC65" HREF="bashref.html#SEC65">Bash Conditional Expressions</A>
+<LI><A NAME="TOC66" HREF="bashref.html#SEC66">Bash Variables</A>
+<LI><A NAME="TOC67" HREF="bashref.html#SEC67">Shell Arithmetic</A>
+<LI><A NAME="TOC68" HREF="bashref.html#SEC68">Aliases</A>
+<UL>
+<LI><A NAME="TOC69" HREF="bashref.html#SEC69">Alias Builtins</A>
+</UL>
+<LI><A NAME="TOC70" HREF="bashref.html#SEC70">Arrays</A>
+<LI><A NAME="TOC71" HREF="bashref.html#SEC71">The Directory Stack</A>
+<LI><A NAME="TOC72" HREF="bashref.html#SEC72">Controlling the Prompt</A>
+<LI><A NAME="TOC73" HREF="bashref.html#SEC73">The Restricted Shell</A>
+<LI><A NAME="TOC74" HREF="bashref.html#SEC74">Bash POSIX Mode</A>
+</UL>
+<LI><A NAME="TOC75" HREF="bashref.html#SEC75">Job Control</A>
+<UL>
+<LI><A NAME="TOC76" HREF="bashref.html#SEC76">Job Control Basics</A>
+<LI><A NAME="TOC77" HREF="bashref.html#SEC77">Job Control Builtins</A>
+<LI><A NAME="TOC78" HREF="bashref.html#SEC78">Job Control Variables</A>
+</UL>
+<LI><A NAME="TOC79" HREF="bashref.html#SEC79">Using History Interactively</A>
+<UL>
+<LI><A NAME="TOC80" HREF="bashref.html#SEC80">Bash History Facilities</A>
+<LI><A NAME="TOC81" HREF="bashref.html#SEC81">Bash History Builtins</A>
+<LI><A NAME="TOC82" HREF="bashref.html#SEC82">History Expansion</A>
+<UL>
+<LI><A NAME="TOC83" HREF="bashref.html#SEC83">Event Designators</A>
+<LI><A NAME="TOC84" HREF="bashref.html#SEC84">Word Designators</A>
+<LI><A NAME="TOC85" HREF="bashref.html#SEC85">Modifiers</A>
+</UL>
+</UL>
+<LI><A NAME="TOC86" HREF="bashref.html#SEC86">Command Line Editing</A>
+<UL>
+<LI><A NAME="TOC87" HREF="bashref.html#SEC87">Introduction to Line Editing</A>
+<LI><A NAME="TOC88" HREF="bashref.html#SEC88">Readline Interaction</A>
+<UL>
+<LI><A NAME="TOC89" HREF="bashref.html#SEC89">Readline Bare Essentials</A>
+<LI><A NAME="TOC90" HREF="bashref.html#SEC90">Readline Movement Commands</A>
+<LI><A NAME="TOC91" HREF="bashref.html#SEC91">Readline Killing Commands</A>
+<LI><A NAME="TOC92" HREF="bashref.html#SEC92">Readline Arguments</A>
+<LI><A NAME="TOC93" HREF="bashref.html#SEC93">Searching for Commands in the 
History</A>
+</UL>
+<LI><A NAME="TOC94" HREF="bashref.html#SEC94">Readline Init File</A>
+<UL>
+<LI><A NAME="TOC95" HREF="bashref.html#SEC95">Readline Init File Syntax</A>
+<LI><A NAME="TOC96" HREF="bashref.html#SEC96">Conditional Init Constructs</A>
+<LI><A NAME="TOC97" HREF="bashref.html#SEC97">Sample Init File</A>
+</UL>
+<LI><A NAME="TOC98" HREF="bashref.html#SEC98">Bindable Readline Commands</A>
+<UL>
+<LI><A NAME="TOC99" HREF="bashref.html#SEC99">Commands For Moving</A>
+<LI><A NAME="TOC100" HREF="bashref.html#SEC100">Commands For Manipulating The 
History</A>
+<LI><A NAME="TOC101" HREF="bashref.html#SEC101">Commands For Changing Text</A>
+<LI><A NAME="TOC102" HREF="bashref.html#SEC102">Killing And Yanking</A>
+<LI><A NAME="TOC103" HREF="bashref.html#SEC103">Specifying Numeric 
Arguments</A>
+<LI><A NAME="TOC104" HREF="bashref.html#SEC104">Letting Readline Type For 
You</A>
+<LI><A NAME="TOC105" HREF="bashref.html#SEC105">Keyboard Macros</A>
+<LI><A NAME="TOC106" HREF="bashref.html#SEC106">Some Miscellaneous Commands</A>
+</UL>
+<LI><A NAME="TOC107" HREF="bashref.html#SEC107">Readline vi Mode</A>
+</UL>
+<LI><A NAME="TOC108" HREF="bashref.html#SEC108">Installing Bash</A>
+<UL>
+<LI><A NAME="TOC109" HREF="bashref.html#SEC109">Basic Installation</A>
+<LI><A NAME="TOC110" HREF="bashref.html#SEC110">Compilers and Options</A>
+<LI><A NAME="TOC111" HREF="bashref.html#SEC111">Compiling For Multiple 
Architectures</A>
+<LI><A NAME="TOC112" HREF="bashref.html#SEC112">Installation Names</A>
+<LI><A NAME="TOC113" HREF="bashref.html#SEC113">Specifying the System Type</A>
+<LI><A NAME="TOC114" HREF="bashref.html#SEC114">Sharing Defaults</A>
+<LI><A NAME="TOC115" HREF="bashref.html#SEC115">Operation Controls</A>
+<LI><A NAME="TOC116" HREF="bashref.html#SEC116">Optional Features</A>
+</UL>
+<LI><A NAME="TOC117" HREF="bashref.html#SEC117">Reporting Bugs</A>
+<LI><A NAME="TOC118" HREF="bashref.html#SEC118">Index of Shell Builtin 
Commands</A>
+<LI><A NAME="TOC119" HREF="bashref.html#SEC119">Shell Reserved Words</A>
+<LI><A NAME="TOC120" HREF="bashref.html#SEC120">Parameter and Variable 
Index</A>
+<LI><A NAME="TOC121" HREF="bashref.html#SEC121">Function Index</A>
+<LI><A NAME="TOC122" HREF="bashref.html#SEC122">Concept Index</A>
+</UL>
+<P><HR><P>
+
+<P>
+Copyright (C) 1991-1999 Free Software Foundation, Inc.
+
+</P>
+<P>
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+</P>
+<P>
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+</P>
+<P>
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Free Software Foundation.
+
+</P>
+
+
+
+<H1><A NAME="SEC1" HREF="bashref.html#TOC1">Introduction</A></H1>
+
+<UL>
+<LI><A HREF="bashref.html#SEC2">What is Bash?</A>: A short description of Bash.
+
+<LI><A HREF="bashref.html#SEC3">What is a shell?</A>: A brief introduction to 
shells.
+</UL>
+
+
+
+<H2><A NAME="SEC2" HREF="bashref.html#TOC2">What is Bash?</A></H2>
+
+<P>
+Bash is the shell, or command language interpreter,
+that will appear in the GNU operating system.
+The name is an acronym for the <SAMP>`Bourne-Again SHell'</SAMP>,
+a pun on Steve Bourne, the author of the direct ancestor of the current
+Unix shell <CODE>/bin/sh</CODE>, 
+which appeared in the Seventh Edition Bell Labs Research version
+of Unix.
+
+</P>
+<P>
+Bash is an <CODE>sh</CODE>-compatible shell that incorporates useful
+features from the Korn shell <CODE>ksh</CODE> and the C shell <CODE>csh</CODE>.
+It is intended to be a conformant implementation of the IEEE
+POSIX Shell and Tools specification (IEEE Working Group 1003.2).
+It offers functional improvements over <CODE>sh</CODE> for both interactive and
+programming use.
+
+</P>
+<P>
+While the GNU operating system will include a version
+of <CODE>csh</CODE>, Bash will be the default shell.
+Like other GNU software, Bash is quite portable.  It currently runs
+on nearly every version of Unix and a few other operating systems -
+independently-supported ports exist for MS-DOS, OS/2,
+Windows 95, and Windows NT.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="bashref.html#TOC3">What is a shell?</A></H2>
+
+<P>
+At its base, a shell is simply a macro processor that executes
+commands.  A Unix shell is both a command interpreter, which
+provides the user interface to the rich set of Unix utilities,
+and a programming language, allowing these utilitites to be
+combined.  Files containing commands can be created, and become
+commands themselves.  These new commands have the same status as
+system commands in directories like <TT>`/bin'</TT>, allowing users
+or groups to establish custom environments. 
+
+</P>
+<P>
+A shell allows execution of Unix commands, both synchronously and
+asynchronously.
+The shell waits for synchronous commands to complete before accepting
+more input; asynchronous commands continue to execute in parallel
+with the shell while it reads and executes additional commands.
+The <EM>redirection</EM> constructs permit
+fine-grained control of the input and output of those commands,
+and the shell allows control over the contents of their
+environment.  Unix shells also provide a small set of built-in
+commands (<EM>builtins</EM>) implementing functionality impossible
+(e.g., <CODE>cd</CODE>, <CODE>break</CODE>, <CODE>continue</CODE>, and
+<CODE>exec</CODE>), or inconvenient (<CODE>history</CODE>, 
<CODE>getopts</CODE>,
+<CODE>kill</CODE>, or <CODE>pwd</CODE>, for example) to obtain via separate
+utilities.  Shells may be used interactively or
+non-interactively: they accept input typed from the keyboard or
+from a file.  All of the shell builtins are described in
+subsequent sections.
+
+</P>
+<P>
+While executing commands is essential, most of the power (and
+complexity) of shells is due to their embedded programming
+languages.  Like any high-level language, the shell provides
+variables, flow control constructs, quoting, and functions. 
+
+</P>
+<P>
+Shells have begun offering features geared specifically for
+interactive use rather than to augment the programming language. 
+These interactive features include job control, command line
+editing, history and aliases.  Each of these features is
+described in this manual.
+
+</P>
+
+
+<H1><A NAME="SEC4" HREF="bashref.html#TOC4">Definitions</A></H1>
+<P>
+These definitions are used throughout the remainder of this manual.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>POSIX</CODE>
+<DD>
+<A NAME="IDX1"></A>
+A family of open system standards based on Unix.  Bash
+is concerned with POSIX 1003.2, the Shell and Tools Standard.
+
+<DT><CODE>blank</CODE>
+<DD>
+A space or tab character.
+
+<DT><CODE>builtin</CODE>
+<DD>
+<A NAME="IDX2"></A>
+A command that is implemented internally by the shell itself, rather
+than by an executable program somewhere in the file system.
+
+<DT><CODE>control operator</CODE>
+<DD>
+<A NAME="IDX3"></A>
+A <CODE>word</CODE> that performs a control function.  It is a 
<CODE>newline</CODE>
+or one of the following:
+<SAMP>`||'</SAMP>, <SAMP>`&#38;&#38;'</SAMP>, <SAMP>`&#38;'</SAMP>, 
<SAMP>`;'</SAMP>, <SAMP>`;;'</SAMP>,
+<SAMP>`|'</SAMP>, <SAMP>`('</SAMP>, or <SAMP>`)'</SAMP>.
+
+<DT><CODE>exit status</CODE>
+<DD>
+<A NAME="IDX4"></A>
+The value returned by a command to its caller.
+
+<DT><CODE>field</CODE>
+<DD>
+<A NAME="IDX5"></A>
+A unit of text that is the result of one of the shell expansions.  After
+expansion, when executing a command, the resulting fields are used as
+the command name and arguments.
+
+<DT><CODE>filename</CODE>
+<DD>
+<A NAME="IDX6"></A>
+A string of characters used to identify a file.
+
+<DT><CODE>job</CODE>
+<DD>
+<A NAME="IDX7"></A>
+A set of processes comprising a pipeline, and any processes descended
+from it, that are all in the same process group.
+
+<DT><CODE>job control</CODE>
+<DD>
+<A NAME="IDX8"></A>
+A mechanism by which users can selectively stop (suspend) and restart
+(resume) execution of processes.
+
+<DT><CODE>metacharacter</CODE>
+<DD>
+<A NAME="IDX9"></A>
+A character that, when unquoted, separates words.  A metacharacter is
+a <CODE>blank</CODE> or one of the following characters:
+<SAMP>`|'</SAMP>, <SAMP>`&#38;'</SAMP>, <SAMP>`;'</SAMP>, <SAMP>`('</SAMP>, 
<SAMP>`)'</SAMP>, <SAMP>`&#60;'</SAMP>, or
+<SAMP>`&#62;'</SAMP>.
+
+<DT><CODE>name</CODE>
+<DD>
+<A NAME="IDX10"></A>
+<A NAME="IDX11"></A>
+A <CODE>word</CODE> consisting solely of letters, numbers, and underscores,
+and beginning with a letter or underscore.  <CODE>Name</CODE>s are used as
+shell variable and function names.
+Also referred to as an <CODE>identifier</CODE>.
+
+<DT><CODE>operator</CODE>
+<DD>
+<A NAME="IDX12"></A>
+A <CODE>control operator</CODE> or a <CODE>redirection operator</CODE>.
+See section <A HREF="bashref.html#SEC37">Redirections</A>, for a list of 
redirection operators.
+
+<DT><CODE>process group</CODE>
+<DD>
+<A NAME="IDX13"></A>
+A collection of related processes each having the same process
+group ID.
+
+<DT><CODE>process group ID</CODE>
+<DD>
+<A NAME="IDX14"></A>
+A unique identifer that represents a <CODE>process group</CODE>
+during its lifetime.
+
+<DT><CODE>reserved word</CODE>
+<DD>
+<A NAME="IDX15"></A>
+A <CODE>word</CODE> that has a special meaning to the shell.  Most reserved
+words introduce shell flow control constructs, such as <CODE>for</CODE> and
+<CODE>while</CODE>.
+
+<DT><CODE>return status</CODE>
+<DD>
+<A NAME="IDX16"></A>
+A synonym for <CODE>exit status</CODE>.
+
+<DT><CODE>signal</CODE>
+<DD>
+<A NAME="IDX17"></A>
+A mechanism by which a process may be notified by the kernal
+of an event occurring in the system.
+
+<DT><CODE>special builtin</CODE>
+<DD>
+<A NAME="IDX18"></A>
+A shell builtin command that has been classified as special by the
+POSIX.2 standard.
+
+<DT><CODE>token</CODE>
+<DD>
+<A NAME="IDX19"></A>
+A sequence of characters considered a single unit by the shell.  It is
+either a <CODE>word</CODE> or an <CODE>operator</CODE>.
+
+<DT><CODE>word</CODE>
+<DD>
+<A NAME="IDX20"></A>
+A <CODE>token</CODE> that is not an <CODE>operator</CODE>.
+</DL>
+
+
+
+<H1><A NAME="SEC5" HREF="bashref.html#TOC5">Basic Shell Features</A></H1>
+<P>
+<A NAME="IDX21"></A>
+
+</P>
+<P>
+Bash is an acronym for <SAMP>`Bourne-Again SHell'</SAMP>.
+The Bourne shell is
+the traditional Unix shell originally written by Stephen Bourne.
+All of the Bourne shell builtin commands are available in Bash,
+and the rules for evaluation and quoting are taken from the POSIX
+1003.2 specification for the `standard' Unix shell.
+
+</P>
+<P>
+This chapter briefly summarizes the shell's `building blocks':
+commands, control structures, shell functions, shell <I>parameters</I>,
+shell expansions,
+<I>redirections</I>, which are a way to direct input and output from
+and to named files, and how the shell executes commands.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC6">Shell Syntax</A>: What your input means to the 
shell.
+<LI><A HREF="bashref.html#SEC15">Shell Commands</A>: The types of commands you 
can use.
+<LI><A HREF="bashref.html#SEC22">Shell Functions</A>: Grouping commands by 
name.
+<LI><A HREF="bashref.html#SEC23">Shell Parameters</A>: Special shell variables.
+<LI><A HREF="bashref.html#SEC26">Shell Expansions</A>: How Bash expands 
variables and the various
+                               expansions available.
+<LI><A HREF="bashref.html#SEC37">Redirections</A>: A way to control where 
input and output go.
+<LI><A HREF="bashref.html#SEC45">Executing Commands</A>: What happens when you 
run a command.
+<LI><A HREF="bashref.html#SEC52">Shell Scripts</A>: Executing files of shell 
commands.
+</UL>
+
+
+
+<H2><A NAME="SEC6" HREF="bashref.html#TOC6">Shell Syntax</A></H2>
+
+<UL>
+<LI><A HREF="bashref.html#SEC7">Shell Operation</A>: The basic operation of 
the shell.
+
+<LI><A HREF="bashref.html#SEC8">Quoting</A>: How to remove the special meaning 
from characters.
+
+<LI><A HREF="bashref.html#SEC14">Comments</A>: How to specify comments.
+</UL>
+
+
+
+<H3><A NAME="SEC7" HREF="bashref.html#TOC7">Shell Operation</A></H3>
+
+<P>
+The following is a brief description of the shell's operation when it
+reads and executes a command.  Basically, the shell does the
+following:
+
+</P>
+
+<OL>
+<LI>
+
+Reads its input from a file (see section <A HREF="bashref.html#SEC52">Shell 
Scripts</A>), from a string
+supplied as an argument to the <SAMP>`-c'</SAMP> invocation option
+(see section <A HREF="bashref.html#SEC60">Invoking Bash</A>), or from the 
user's terminal.
+
+<LI>
+
+Breaks the input into words and operators, obeying the quoting rules
+described in section <A HREF="bashref.html#SEC8">Quoting</A>.  These tokens 
are separated by
+<CODE>metacharacters</CODE>.  Alias expansion is performed by this step
+(see section <A HREF="bashref.html#SEC68">Aliases</A>).
+
+<LI>
+
+Parses the tokens into simple and compound commands
+(see section <A HREF="bashref.html#SEC15">Shell Commands</A>).
+
+<LI>
+
+Performs the various shell expansions (see section <A 
HREF="bashref.html#SEC26">Shell Expansions</A>), breaking
+the expanded tokens into lists of filenames (see section <A 
HREF="bashref.html#SEC34">Filename Expansion</A>)
+and commands and arguments.
+
+<LI>
+
+Performs any necessary redirections (see section <A 
HREF="bashref.html#SEC37">Redirections</A>) and removes
+the redirection operators and their operands from the argument list.
+
+<LI>
+
+Executes the command (see section <A HREF="bashref.html#SEC45">Executing 
Commands</A>).
+
+<LI>
+
+Optionally waits for the command to complete and collects its exit
+status (see section <A HREF="bashref.html#SEC50">Exit Status</A>).
+
+</OL>
+
+
+
+<H3><A NAME="SEC8" HREF="bashref.html#TOC8">Quoting</A></H3>
+<P>
+<A NAME="IDX22"></A>
+
+<UL>
+<LI><A HREF="bashref.html#SEC9">Escape Character</A>: How to remove the 
special meaning from a single
+                       character.
+<LI><A HREF="bashref.html#SEC10">Single Quotes</A>: How to inhibit all 
interpretation of a sequence
+                       of characters.
+<LI><A HREF="bashref.html#SEC11">Double Quotes</A>: How to suppress most of 
the interpretation of a
+                       sequence of characters.
+<LI><A HREF="bashref.html#SEC12">ANSI-C Quoting</A>: How to expand ANSI-C 
sequences in quoted strings.
+
+<LI><A HREF="bashref.html#SEC13">Locale Translation</A>: How to translate 
strings into different languages.
+</UL>
+
+<P>
+Quoting is used to remove the special meaning of certain
+characters or words to the shell.  Quoting can be used to
+disable special treatment for special characters, to prevent
+reserved words from being recognized as such, and to prevent
+parameter expansion.
+
+</P>
+<P>
+Each of the shell metacharacters (see section <A 
HREF="bashref.html#SEC4">Definitions</A>)
+has special meaning to the shell and must be quoted if it is to
+represent itself.  There are three quoting mechanisms: the
+<VAR>escape character</VAR>, single quotes, and double quotes.
+
+</P>
+
+
+<H4><A NAME="SEC9" HREF="bashref.html#TOC9">Escape Character</A></H4>
+<P>
+A non-quoted backslash <SAMP>`\'</SAMP> is the Bash escape character.
+It preserves the literal value of the next character that follows,
+with the exception of <CODE>newline</CODE>.  If a <CODE>\newline</CODE> pair
+appears, and the backslash itself is not quoted, the <CODE>\newline</CODE>
+is treated as a line continuation (that is, it is removed from
+the input stream and effectively ignored).
+
+</P>
+
+
+<H4><A NAME="SEC10" HREF="bashref.html#TOC10">Single Quotes</A></H4>
+
+<P>
+Enclosing characters in single quotes preserves the literal value
+of each character within the quotes.  A single quote may not occur
+between single quotes, even when preceded by a backslash.
+
+</P>
+
+
+<H4><A NAME="SEC11" HREF="bashref.html#TOC11">Double Quotes</A></H4>
+
+<P>
+Enclosing characters in double quotes preserves the literal value
+of all characters within the quotes, with the exception of
+<SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, and <SAMP>`\'</SAMP>.
+The characters <SAMP>`$'</SAMP> and <SAMP>``'</SAMP>
+retain their special meaning within double quotes (see section <A 
HREF="bashref.html#SEC26">Shell Expansions</A>).
+The backslash retains its special meaning only when followed by one of
+the following characters:
+<SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, <SAMP>`"'</SAMP>, <SAMP>`\'</SAMP>, or 
<CODE>newline</CODE>.
+Within double quotes, backslashes that are followed by one of these
+characters are removed.  Backslashes preceding characters without a
+special meaning are left unmodified.
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+
+</P>
+<P>
+The special parameters <SAMP>`*'</SAMP> and <SAMP>`@'</SAMP> have special 
meaning
+when in double quotes (see section <A HREF="bashref.html#SEC29">Shell 
Parameter Expansion</A>).
+
+</P>
+
+
+<H4><A NAME="SEC12" HREF="bashref.html#TOC12">ANSI-C Quoting</A></H4>
+<P>
+<A NAME="IDX23"></A>
+
+</P>
+<P>
+Words of the form <CODE>$'<VAR>string</VAR>'</CODE> are treated specially.  The
+word expands to <VAR>string</VAR>, with backslash-escaped characters replaced
+as specifed by the ANSI C standard.  Backslash escape sequences, if
+present, are decoded as follows:
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>\a</CODE>
+<DD>
+alert (bell)
+<DT><CODE>\b</CODE>
+<DD>
+backspace
+<DT><CODE>\e</CODE>
+<DD>
+an escape character (not ANSI C)
+<DT><CODE>\f</CODE>
+<DD>
+form feed
+<DT><CODE>\n</CODE>
+<DD>
+newline
+<DT><CODE>\r</CODE>
+<DD>
+carriage return
+<DT><CODE>\t</CODE>
+<DD>
+horizontal tab
+<DT><CODE>\v</CODE>
+<DD>
+vertical tab
+<DT><CODE>\\</CODE>
+<DD>
+backslash
+<DT><CODE>\<VAR>nnn</VAR></CODE>
+<DD>
+the character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR>
+(one to three digits)
+<DT><CODE>\x<VAR>nnn</VAR></CODE>
+<DD>
+the character whose <CODE>ASCII</CODE> code is the hexadecimal value 
<VAR>nnn</VAR>
+(one to three digits)
+</DL>
+
+<P>
+The result is single-quoted, as if the dollar sign had not been present.
+
+</P>
+
+
+<H4><A NAME="SEC13" HREF="bashref.html#TOC13">Locale-Specific 
Translation</A></H4>
+<P>
+<A NAME="IDX24"></A>
+
+</P>
+<P>
+A double-quoted string preceded by a dollar sign (<SAMP>`$'</SAMP>) will cause
+the string to be translated according to the current locale.
+If the current locale is <CODE>C</CODE> or <CODE>POSIX</CODE>, the dollar sign
+is ignored.
+If the string is translated and replaced, the replacement is
+double-quoted.
+
+</P>
+
+
+<H3><A NAME="SEC14" HREF="bashref.html#TOC14">Comments</A></H3>
+<P>
+<A NAME="IDX25"></A>
+
+</P>
+<P>
+In a non-interactive shell, or an interactive shell in which the
+<CODE>interactive_comments</CODE> option to the <CODE>shopt</CODE>
+builtin is enabled (see section <A HREF="bashref.html#SEC63">Bash Builtin 
Commands</A>),
+a word beginning with <SAMP>`#'</SAMP>
+causes that word and all remaining characters on that line to
+be ignored.  An interactive shell without the <CODE>interactive_comments</CODE>
+option enabled does not allow comments.  The <CODE>interactive_comments</CODE>
+option is on by default in interactive shells.
+See section <A HREF="bashref.html#SEC62">Is This Shell Interactive?</A>, for a 
description of what makes
+a shell interactive.
+
+</P>
+
+
+<H2><A NAME="SEC15" HREF="bashref.html#TOC15">Shell Commands</A></H2>
+<P>
+<A NAME="IDX26"></A>
+
+<UL>
+<LI><A HREF="bashref.html#SEC16">Simple Commands</A>: The most common type of 
command.
+<LI><A HREF="bashref.html#SEC17">Pipelines</A>: Connecting the input and 
output of several
+                               commands.
+<LI><A HREF="bashref.html#SEC18">Lists</A>: How to execute commands 
sequentially.
+<LI><A HREF="bashref.html#SEC19">Looping Constructs</A>: Shell commands for 
iterative action.
+<LI><A HREF="bashref.html#SEC20">Conditional Constructs</A>: Shell commands 
for conditional execution.
+<LI><A HREF="bashref.html#SEC21">Command Grouping</A>: Ways to group commands.
+</UL>
+
+
+
+<H3><A NAME="SEC16" HREF="bashref.html#TOC16">Simple Commands</A></H3>
+<P>
+<A NAME="IDX27"></A>
+
+</P>
+<P>
+A simple command is the kind of command encountered most often.
+It's just a sequence of words separated by <CODE>blank</CODE>s, terminated
+by one of the shell's control operators (see section <A 
HREF="bashref.html#SEC4">Definitions</A>).  The
+first word generally specifies a command to be executed.
+
+</P>
+<P>
+The return status (see section <A HREF="bashref.html#SEC50">Exit Status</A>) 
of a simple command is
+its exit status as provided
+by the POSIX.1 <CODE>waitpid</CODE> function, or 128+<VAR>n</VAR> if the 
command
+was terminated by signal <VAR>n</VAR>.
+
+</P>
+
+
+<H3><A NAME="SEC17" HREF="bashref.html#TOC17">Pipelines</A></H3>
+<P>
+<A NAME="IDX28"></A>
+<A NAME="IDX29"></A>
+
+</P>
+<P>
+A <CODE>pipeline</CODE> is a sequence of simple commands separated by
+<SAMP>`|'</SAMP>.
+
+</P>
+<P>
+<A NAME="IDX30"></A>
+<A NAME="IDX31"></A>
+<A NAME="IDX32"></A>
+The format for a pipeline is
+
+<PRE>
+[<CODE>time</CODE> [<CODE>-p</CODE>]] [<CODE>!</CODE>] <VAR>command1</VAR> 
[<CODE>|</CODE> <VAR>command2</VAR> ...]
+</PRE>
+
+<P>
+The output of each command in the pipeline is connected to the input of
+the next command.  That is, each command reads the previous command's
+output.
+
+</P>
+<P>
+The reserved word <CODE>time</CODE> causes timing statistics
+to be printed for the pipeline once it finishes.
+The statistics currently consist of elapsed (wall-clock) time and
+user and system time consumed by the command's execution.
+The <SAMP>`-p'</SAMP> option changes the output format to that specified
+by POSIX.
+The <CODE>TIMEFORMAT</CODE> variable may be set to a format string that
+specifies how the timing information should be displayed.
+See section <A HREF="bashref.html#SEC66">Bash Variables</A>, for a description 
of the available formats.
+The use of <CODE>time</CODE> as a reserved word permits the timing of
+shell builtins, shell functions, and pipelines.  An external
+<CODE>time</CODE> command cannot time these easily.
+
+</P>
+<P>
+If the pipeline is not executed asynchronously (see section <A 
HREF="bashref.html#SEC18">Lists of Commands</A>), the
+shell waits for all commands in the pipeline to complete.
+
+</P>
+<P>
+Each command in a pipeline is executed in its own subshell
+(see section <A HREF="bashref.html#SEC48">Command Execution Environment</A>).  
The exit
+status of a pipeline is the exit status of the last command in the
+pipeline.  If the reserved word <SAMP>`!'</SAMP> precedes the pipeline, the
+exit status is the logical negation of the exit status of the last command.
+
+</P>
+
+
+<H3><A NAME="SEC18" HREF="bashref.html#TOC18">Lists of Commands</A></H3>
+<P>
+<A NAME="IDX33"></A>
+
+</P>
+<P>
+A <CODE>list</CODE> is a sequence of one or more pipelines separated by one
+of the operators <SAMP>`;'</SAMP>, <SAMP>`&#38;'</SAMP>, 
<SAMP>`&#38;&#38;'</SAMP>, or <SAMP>`||'</SAMP>,
+and optionally terminated by one of <SAMP>`;'</SAMP>, <SAMP>`&#38;'</SAMP>, or 
a
+<CODE>newline</CODE>.
+
+</P>
+<P>
+Of these list operators, <SAMP>`&#38;&#38;'</SAMP> and <SAMP>`||'</SAMP>
+have equal precedence, followed by <SAMP>`;'</SAMP> and <SAMP>`&#38;'</SAMP>,
+which have equal precedence.
+
+</P>
+<P>
+If a command is terminated by the control operator <SAMP>`&#38;'</SAMP>,
+the shell executes the command asynchronously in a subshell.
+This is known as executing the command in the <VAR>background</VAR>.
+The shell does not wait for the command to finish, and the return
+status is 0 (true).
+The standard input for asynchronous commands, in the absence of any
+explicit redirections, is redirected from <CODE>/dev/null</CODE>.
+
+</P>
+<P>
+Commands separated by a <SAMP>`;'</SAMP> are executed sequentially; the shell
+waits for each command to terminate in turn.  The return status is the
+exit status of the last command executed.
+
+</P>
+<P>
+The control operators <SAMP>`&#38;&#38;'</SAMP> and <SAMP>`||'</SAMP>
+denote AND lists and OR lists, respectively.
+An AND list has the form
+
+<PRE>
+<VAR>command</VAR> &#38;&#38; <VAR>command2</VAR>
+</PRE>
+
+<P>
+<VAR>command2</VAR> is executed if, and only if, <VAR>command</VAR>
+returns an exit status of zero.
+
+</P>
+<P>
+An OR list has the form
+
+<PRE>
+<VAR>command</VAR> || <VAR>command2</VAR>
+</PRE>
+
+<P>
+<VAR>command2</VAR> is executed if, and only if, <VAR>command</VAR>
+returns a non-zero exit status.
+
+</P>
+<P>
+The return status of
+AND and OR lists is the exit status of the last command
+executed in the list.
+
+</P>
+
+
+<H3><A NAME="SEC19" HREF="bashref.html#TOC19">Looping Constructs</A></H3>
+<P>
+<A NAME="IDX34"></A>
+
+</P>
+<P>
+Bash supports the following looping constructs.
+
+</P>
+<P>
+Note that wherever you see a <SAMP>`;'</SAMP> in the description of a
+command's syntax, it may be replaced with one or more newlines.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>until</CODE>
+<DD>
+<A NAME="IDX35"></A>
+<A NAME="IDX36"></A>
+<A NAME="IDX37"></A>
+The syntax of the <CODE>until</CODE> command is:
+
+<PRE>
+until <VAR>test-commands</VAR>; do <VAR>consequent-commands</VAR>; done
+</PRE>
+
+Execute <VAR>consequent-commands</VAR> as long as
+<VAR>test-commands</VAR> has an exit status which is not zero.
+The return status is the exit status of the last command executed
+in <VAR>consequent-commands</VAR>, or zero if none was executed.
+
+<DT><CODE>while</CODE>
+<DD>
+<A NAME="IDX38"></A>
+The syntax of the <CODE>while</CODE> command is:
+
+<PRE>
+while <VAR>test-commands</VAR>; do <VAR>consequent-commands</VAR>; done
+</PRE>
+
+Execute <VAR>consequent-commands</VAR> as long as
+<VAR>test-commands</VAR> has an exit status of zero.
+The return status is the exit status of the last command executed
+in <VAR>consequent-commands</VAR>, or zero if none was executed.
+
+<DT><CODE>for</CODE>
+<DD>
+<A NAME="IDX39"></A>
+The syntax of the <CODE>for</CODE> command is:
+
+
+<PRE>
+for <VAR>name</VAR> [in <VAR>words</VAR> ...]; do <VAR>commands</VAR>; done
+</PRE>
+
+Expand <VAR>words</VAR>, and execute <VAR>commands</VAR> once for each member
+in the resultant list, with <VAR>name</VAR> bound to the current member.
+If <SAMP>`in <VAR>words</VAR>'</SAMP> is not present, <SAMP>`in "$@"'</SAMP> 
is assumed.
+The return status is the exit status of the last command that executes.
+If there are no items in the expansion of <VAR>words</VAR>, no commands are
+executed, and the return status is zero.
+</DL>
+
+<P>
+The <CODE>break</CODE> and <CODE>continue</CODE> builtins (see section <A 
HREF="bashref.html#SEC54">Bourne Shell Builtins</A>)
+may be used to control loop execution.
+
+</P>
+
+
+<H3><A NAME="SEC20" HREF="bashref.html#TOC20">Conditional Constructs</A></H3>
+<P>
+<A NAME="IDX40"></A>
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>if</CODE>
+<DD>
+<A NAME="IDX41"></A>
+<A NAME="IDX42"></A>
+<A NAME="IDX43"></A>
+<A NAME="IDX44"></A>
+<A NAME="IDX45"></A>
+The syntax of the <CODE>if</CODE> command is:
+
+
+<PRE>
+if <VAR>test-commands</VAR>; then
+  <VAR>consequent-commands</VAR>;
+[elif <VAR>more-test-commands</VAR>; then
+  <VAR>more-consequents</VAR>;]
+[else <VAR>alternate-consequents</VAR>;]
+fi
+</PRE>
+
+The <VAR>test-commands</VAR> list is executed, and if its return status is 
zero,
+the <VAR>consequent-commands</VAR> list is executed.
+If <VAR>test-commands</VAR> returns a non-zero status, each <CODE>elif</CODE> 
list
+is executed in turn, and if its exit status is zero,
+the corresponding <VAR>more-consequents</VAR> is executed and the   
+command completes.
+If <SAMP>`else <VAR>alternate-consequents</VAR>'</SAMP> is present, and
+the final command in the final <CODE>if</CODE> or <CODE>elif</CODE> clause
+has a non-zero exit status, then <VAR>alternate-consequents</VAR> is executed.
+The return status is the exit status of the last command executed, or
+zero if no condition tested true.
+
+<DT><CODE>case</CODE>
+<DD>
+<A NAME="IDX46"></A>
+<A NAME="IDX47"></A>
+<A NAME="IDX48"></A>
+The syntax of the <CODE>case</CODE> command is:
+
+
+<PRE>
+<CODE>case <VAR>word</VAR> in [ [(] <VAR>pattern</VAR> [| 
<VAR>pattern</VAR>]...) <VAR>command-list</VAR> ;;]... esac</CODE>
+</PRE>
+
+<CODE>case</CODE> will selectively execute the <VAR>command-list</VAR> 
corresponding to
+the first <VAR>pattern</VAR> that matches <VAR>word</VAR>.
+The <SAMP>`|'</SAMP> is used to separate multiple patterns, and the 
<SAMP>`)'</SAMP>
+operator terminates a pattern list.
+A list of patterns and an associated command-list is known
+as a <VAR>clause</VAR>.  Each clause must be terminated with <SAMP>`;;'</SAMP>.
+The <VAR>word</VAR> undergoes tilde expansion, parameter expansion, command
+substitution, arithmetic expansion, and quote removal before matching is
+attempted.  Each <VAR>pattern</VAR> undergoes tilde expansion, parameter
+expansion, command substitution, and arithmetic expansion.
+
+There may be an arbitrary number of <CODE>case</CODE> clauses, each terminated
+by a <SAMP>`;;'</SAMP>.  The first pattern that matches determines the
+command-list that is executed.
+
+Here is an example using <CODE>case</CODE> in a script that could be used to
+describe one interesting feature of an animal:
+
+
+<PRE>
+echo -n "Enter the name of an animal: "
+read ANIMAL
+echo -n "The $ANIMAL has "
+case $ANIMAL in
+  horse | dog | cat) echo -n "four";;
+  man | kangaroo ) echo -n "two";;
+  *) echo -n "an unknown number of";;
+esac
+echo " legs."
+</PRE>
+
+The return status is zero if no <VAR>pattern</VAR> is matched.  Otherwise, the
+return status is the exit status of the <VAR>command-list</VAR> executed.
+
+<DT><CODE>select</CODE>
+<DD>
+<A NAME="IDX49"></A>
+
+The <CODE>select</CODE> construct allows the easy generation of menus.
+It has almost the same syntax as the <CODE>for</CODE> command:
+
+
+<PRE>
+select <VAR>name</VAR> [in <VAR>words</VAR> ...]; do <VAR>commands</VAR>; done
+</PRE>
+
+The list of words following <CODE>in</CODE> is expanded, generating a list
+of items.  The set of expanded words is printed on the standard
+error output stream, each preceded by a number.  If the
+<SAMP>`in <VAR>words</VAR>'</SAMP> is omitted, the positional parameters are 
printed,
+as if <SAMP>`in "$@"'</SAMP> had been specifed.
+The <CODE>PS3</CODE> prompt is then displayed and a line is read from the
+standard input.
+If the line consists of a number corresponding to one of the displayed
+words, then the value of <VAR>name</VAR> is set to that word.
+If the line is empty, the words and prompt are displayed again.
+If <CODE>EOF</CODE> is read, the <CODE>select</CODE> command completes.
+Any other value read causes <VAR>name</VAR> to be set to null.
+The line read is saved in the variable <CODE>REPLY</CODE>.
+
+The <VAR>commands</VAR> are executed after each selection until a
+<CODE>break</CODE> or <CODE>return</CODE> command is executed, at which
+point the <CODE>select</CODE> command completes.
+
+Here is an example that allows the user to pick a filename from the
+current directory, and displays the name and index of the file
+selected.
+
+
+<PRE>
+select fname in *;
+do
+       echo you picked $fname \($REPLY\)
+       break;
+done
+</PRE>
+
+<DT><CODE>((...))</CODE>
+<DD>
+
+<PRE>
+(( <VAR>expression</VAR> ))
+</PRE>
+
+The arithmetic <VAR>expression</VAR> is evaluated according to the rules
+described below (see section <A HREF="bashref.html#SEC67">Shell 
Arithmetic</A>).
+If the value of the expression is non-zero, the return status is 0;
+otherwise the return status is 1.  This is exactly equivalent to
+
+<PRE>
+let "<VAR>expression</VAR>"
+</PRE>
+
+See section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>, for a full 
description of the <CODE>let</CODE> builtin.
+
+<DT><CODE>[[...]]</CODE>
+<DD>
+<A NAME="IDX50"></A>
+<A NAME="IDX51"></A>
+
+<PRE>
+[[ <VAR>expression</VAR> ]]
+</PRE>
+
+Return a status of 0 or 1 depending on the evaluation of
+the conditional expression <VAR>expression</VAR>.
+Expressions are composed of the primaries described below in
+section <A HREF="bashref.html#SEC65">Bash Conditional Expressions</A>.
+Word splitting and filename expansion are not performed on the words
+between the <SAMP>`[['</SAMP> and <SAMP>`]]'</SAMP>; tilde expansion, 
parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+
+When the <SAMP>`=='</SAMP> and <SAMP>`!='</SAMP> operators are used, the 
string to the
+right of the operator is considered a pattern and matched according
+to the rules described below in section <A HREF="bashref.html#SEC35">Pattern 
Matching</A>.
+The return value is 0 if the string matches or does not match
+the pattern, respectively, and 1 otherwise.
+Any part of the pattern may be quoted to force it to be matched as a
+string.
+
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+
+<DL COMPACT>
+
+<DT><CODE>( <VAR>expression</VAR> )</CODE>
+<DD>
+Returns the value of <VAR>expression</VAR>.
+This may be used to override the normal precedence of operators.
+
+<DT><CODE>! <VAR>expression</VAR></CODE>
+<DD>
+True if <VAR>expression</VAR> is false.
+
+<DT><CODE><VAR>expression1</VAR> &#38;&#38; <VAR>expression2</VAR></CODE>
+<DD>
+True if both <VAR>expression1</VAR> and <VAR>expression2</VAR> are true.
+
+<DT><CODE><VAR>expression1</VAR> || <VAR>expression2</VAR></CODE>
+<DD>
+True if either <VAR>expression1</VAR> or <VAR>expression2</VAR> is true.
+</DL>
+The &#38;&#38; and || commands do not execute <VAR>expression2</VAR> if the
+value of <VAR>expression1</VAR> is sufficient to determine the return
+value of the entire conditional expression.
+
+</DL>
+
+
+
+<H3><A NAME="SEC21" HREF="bashref.html#TOC21">Grouping Commands</A></H3>
+<P>
+<A NAME="IDX52"></A>
+
+</P>
+<P>
+Bash provides two ways to group a list of commands to be executed
+as a unit.  When commands are grouped, redirections may be applied
+to the entire command list.  For example, the output of all the
+commands in the list may be redirected to a single stream.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>()</CODE>
+<DD>
+
+<PRE>
+( <VAR>list</VAR> )
+</PRE>
+
+Placing a list of commands between parentheses causes a subshell
+to be created, and each of the commands in <VAR>list</VAR> to be executed
+in that subshell.  Since the <VAR>list</VAR> is executed in a subshell,
+variable assignments do not remain in effect after the subshell completes.
+
+<DT><CODE>{}</CODE>
+<DD>
+<A NAME="IDX53"></A>
+<A NAME="IDX54"></A>
+
+<PRE>
+{ <VAR>list</VAR>; }
+</PRE>
+
+Placing a list of commands between curly braces causes the list to
+be executed in the current shell context.  No subshell is created.
+The semicolon (or newline) following <VAR>list</VAR> is required.
+</DL>
+
+<P>
+In addition to the creation of a subshell, there is a subtle difference
+between these two constructs due to historical reasons.  The braces
+are <CODE>reserved words</CODE>, so they must be separated from the 
<VAR>list</VAR>
+by <CODE>blank</CODE>s.  The parentheses are <CODE>operators</CODE>, and are
+recognized as separate tokens by the shell even if they are not separated
+from the <VAR>list</VAR> by whitespace.
+
+</P>
+<P>
+The exit status of both of these constructs is the exit status of
+<VAR>list</VAR>.
+
+</P>
+
+
+<H2><A NAME="SEC22" HREF="bashref.html#TOC22">Shell Functions</A></H2>
+<P>
+<A NAME="IDX55"></A>
+<A NAME="IDX56"></A>
+
+</P>
+<P>
+Shell functions are a way to group commands for later execution
+using a single name for the group.  They are executed just like
+a "regular" command.  Shell functions are executed in the current
+shell context; no new process is created to interpret them.
+
+</P>
+<P>
+Functions are declared using this syntax:
+<A NAME="IDX57"></A>
+
+<PRE>
+[ <CODE>function</CODE> ] <VAR>name</VAR> () { <VAR>command-list</VAR>; }
+</PRE>
+
+<P>
+This defines a shell function named <VAR>name</VAR>.  The reserved
+word <CODE>function</CODE> is optional.
+If the <CODE>function</CODE> reserved
+word is supplied, the parentheses are optional.
+The <VAR>body</VAR> of the function is the <VAR>command-list</VAR> between { 
and }.
+This list is executed whenever <VAR>name</VAR> is specified as the
+name of a command.  The exit status of a function is
+the exit status of the last command executed in the body.
+
+</P>
+<P>
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution (see section <A HREF="bashref.html#SEC24">Positional 
Parameters</A>).
+The special parameter <SAMP>`#'</SAMP> that expands to the number of
+positional parameters is updated to reflect the change.
+Positional parameter <CODE>0</CODE> is unchanged.
+
+</P>
+<P>
+If the builtin command <CODE>return</CODE>
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.  When a function completes, the values of the
+positional parameters and the special parameter <SAMP>`#'</SAMP>
+are restored to the values they had prior to the function's
+execution.  If a numeric argument is given to <CODE>return</CODE>,
+that is the function's return status; otherwise the functions's
+return status is the exit status of the last command executed
+before the <CODE>return</CODE>.
+
+</P>
+<P>
+Variables local to the function may be declared with the
+<CODE>local</CODE> builtin.  These variables are visible only to
+the function and the commands it invokes.
+
+</P>
+<P>
+Functions may be recursive.  No limit is placed on the number of
+recursive  calls.
+
+</P>
+
+
+<H2><A NAME="SEC23" HREF="bashref.html#TOC23">Shell Parameters</A></H2>
+<P>
+<A NAME="IDX58"></A>
+<A NAME="IDX59"></A>
+<A NAME="IDX60"></A>
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC24">Positional Parameters</A>: The shell's 
command-line arguments.
+<LI><A HREF="bashref.html#SEC25">Special Parameters</A>: Parameters with 
special meanings.
+</UL>
+
+<P>
+A <VAR>parameter</VAR> is an entity that stores values.
+It can be a <CODE>name</CODE>, a number, or one of the special characters
+listed below.
+For the shell's purposes, a <VAR>variable</VAR> is a parameter denoted by a
+<CODE>name</CODE>.
+
+</P>
+<P>
+A parameter is set if it has been assigned a value.  The null string is
+a valid value.  Once a variable is set, it may be unset only by using
+the <CODE>unset</CODE> builtin command.
+
+</P>
+<P>
+A variable may be assigned to by a statement of the form
+
+<PRE>
+<VAR>name</VAR>=[<VAR>value</VAR>]
+</PRE>
+
+<P>
+If <VAR>value</VAR>
+is not given, the variable is assigned the null string.  All
+<VAR>value</VAR>s undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote
+removal (detailed below).  If the variable has its <CODE>integer</CODE>
+attribute set (see the description of the <CODE>declare</CODE> builtin in
+section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>), then 
<VAR>value</VAR> 
+is subject to arithmetic expansion even if the <CODE>$((...))</CODE>
+expansion is not used (see section <A HREF="bashref.html#SEC31">Arithmetic 
Expansion</A>).
+Word splitting is not performed, with the exception
+of <CODE>"$@"</CODE> as explained below.
+Filename expansion is not performed.
+
+</P>
+
+
+<H3><A NAME="SEC24" HREF="bashref.html#TOC24">Positional Parameters</A></H3>
+<P>
+<A NAME="IDX61"></A>
+
+</P>
+<P>
+A <VAR>positional parameter</VAR> is a parameter denoted by one or more
+digits, other than the single digit <CODE>0</CODE>.  Positional parameters are
+assigned from the shell's arguments when it is invoked,
+and may be reassigned using the <CODE>set</CODE> builtin command.
+Positional parameter <CODE>N</CODE> may be referenced as <CODE>${N}</CODE>.
+Positional parameters may not be assigned to
+with assignment statements.  The positional parameters are
+temporarily replaced when a shell function is executed
+(see section <A HREF="bashref.html#SEC22">Shell Functions</A>).
+
+</P>
+<P>
+When a positional parameter consisting of more than a single
+digit is expanded, it must be enclosed in braces.
+
+</P>
+
+
+<H3><A NAME="SEC25" HREF="bashref.html#TOC25">Special Parameters</A></H3>
+<P>
+<A NAME="IDX62"></A>
+
+</P>
+<P>
+The shell treats several parameters specially.  These parameters may
+only be referenced; assignment to them is not allowed.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>*</CODE>
+<DD>
+<A NAME="IDX63"></A>
+Expands to the positional parameters, starting from one.  When the
+expansion occurs within double quotes, it expands to a single word
+with the value of each parameter separated by the first character
+of the <CODE>IFS</CODE>
+special variable.  That is, <CODE>"$*"</CODE> is equivalent
+to <CODE>"$1<VAR>c</VAR>$2<VAR>c</VAR>..."</CODE>, where <VAR>c</VAR>
+is the first character of the value of the <CODE>IFS</CODE>
+variable.
+If <CODE>IFS</CODE> is unset, the parameters are separated by spaces.
+If <CODE>IFS</CODE> is null, the parameters are joined without intervening
+separators.
+
+<DT><CODE>@</CODE>
+<DD>
+<A NAME="IDX64"></A>
+Expands to the positional parameters, starting from one.  When the
+expansion occurs within double quotes, each parameter expands to a
+separate word.  That is, <CODE>"$@"</CODE> is equivalent to
+<CODE>"$1" "$2" ...</CODE>.
+When there are no positional parameters, <CODE>"$@"</CODE> and
+<CODE>$@</CODE>
+expand to nothing (i.e., they are removed).
+
+<DT><CODE>#</CODE>
+<DD>
+<A NAME="IDX65"></A>
+Expands to the number of positional parameters in decimal.
+
+<DT><CODE>?</CODE>
+<DD>
+<A NAME="IDX66"></A>
+Expands to the exit status of the most recently executed foreground
+pipeline.
+
+<DT><CODE>-</CODE>
+<DD>
+<A NAME="IDX67"></A>
+Expands to the current option flags as specified upon invocation,
+by the <CODE>set</CODE>
+builtin command, or those set by the shell itself
+(such as the <SAMP>`-i'</SAMP> option).
+
+<DT><CODE>$</CODE>
+<DD>
+<A NAME="IDX68"></A>
+Expands to the process ID of the shell.  In a <CODE>()</CODE> subshell, it
+expands to the process ID of the invoking shell, not the subshell.
+
+<DT><CODE>!</CODE>
+<DD>
+<A NAME="IDX69"></A>
+Expands to the process ID of the most recently executed background
+(asynchronous) command.
+
+<DT><CODE>0</CODE>
+<DD>
+<A NAME="IDX70"></A>
+Expands to the name of the shell or shell script.  This is set at
+shell initialization.  If Bash is invoked with a file of commands
+(see section <A HREF="bashref.html#SEC52">Shell Scripts</A>), <CODE>$0</CODE> 
is set to the name of that file.
+If Bash is started with the <SAMP>`-c'</SAMP> option (see section <A 
HREF="bashref.html#SEC60">Invoking Bash</A>),
+then <CODE>$0</CODE> is set to the first argument after the string to be
+executed, if one is present.  Otherwise, it is set
+to the filename used to invoke Bash, as given by argument zero.
+
+<DT><CODE>_</CODE>
+<DD>
+<A NAME="IDX71"></A>
+At shell startup, set to the absolute filename of the shell or shell
+script being executed as passed in the argument list.
+Subsequently, expands to the last argument to the previous command,
+after expansion.   
+Also set to the full pathname of each command executed and placed in
+the environment exported to that command.
+When checking mail, this parameter holds the name of the mail file.
+</DL>
+
+
+
+<H2><A NAME="SEC26" HREF="bashref.html#TOC26">Shell Expansions</A></H2>
+<P>
+<A NAME="IDX72"></A>
+
+</P>
+<P>
+Expansion is performed on the command line after it has been split into
+<CODE>token</CODE>s.  There are seven kinds of expansion performed:
+
+<UL>
+<LI>brace expansion
+
+<LI>tilde expansion
+
+<LI>parameter and variable expansion
+
+<LI>command substitution
+
+<LI>arithmetic expansion
+
+<LI>word splitting
+
+<LI>filename expansion
+
+</UL>
+
+
+<UL>
+<LI><A HREF="bashref.html#SEC27">Brace Expansion</A>: Expansion of expressions 
within braces.
+<LI><A HREF="bashref.html#SEC28">Tilde Expansion</A>: Expansion of the ~ 
character.
+<LI><A HREF="bashref.html#SEC29">Shell Parameter Expansion</A>: How Bash 
expands variables to their values.
+<LI><A HREF="bashref.html#SEC30">Command Substitution</A>: Using the output of 
a command as an argument.
+<LI><A HREF="bashref.html#SEC31">Arithmetic Expansion</A>: How to use 
arithmetic in shell expansions.
+<LI><A HREF="bashref.html#SEC32">Process Substitution</A>: A way to write and 
read to and from a
+                               command.
+<LI><A HREF="bashref.html#SEC33">Word Splitting</A>: How the results of 
expansion are split into separate
+                       arguments.
+<LI><A HREF="bashref.html#SEC34">Filename Expansion</A>: A shorthand for 
specifying filenames matching patterns.
+<LI><A HREF="bashref.html#SEC36">Quote Removal</A>: How and when quote 
characters are removed from
+                       words.
+</UL>
+
+<P>
+The order of expansions is: brace expansion, tilde expansion,
+parameter, variable, and arithmetic expansion and
+command substitution
+(done in a left-to-right fashion), word splitting, and filename
+expansion.
+
+</P>
+<P>
+On systems that can support it, there is an additional expansion
+available: <VAR>process substitution</VAR>.  This is performed at the
+same time as parameter, variable, and arithmetic expansion and
+command substitution.
+
+</P>
+<P>
+Only brace expansion, word splitting, and filename expansion
+can change the number of words of the expansion; other expansions
+expand a single word to a single word.
+The only exceptions to this are the expansions of
+<CODE>"$@"</CODE> (see section <A HREF="bashref.html#SEC25">Special 
Parameters</A>) and <CODE>"${<VAR>name</VAR>address@hidden"</CODE>
+(see section <A HREF="bashref.html#SEC70">Arrays</A>).
+
+</P>
+<P>
+After all expansions, <CODE>quote removal</CODE> (see section <A 
HREF="bashref.html#SEC36">Quote Removal</A>)
+is performed.
+
+</P>
+
+
+<H3><A NAME="SEC27" HREF="bashref.html#TOC27">Brace Expansion</A></H3>
+<P>
+<A NAME="IDX73"></A>
+<A NAME="IDX74"></A>
+
+</P>
+<P>
+Brace expansion
+is a mechanism by which arbitrary strings
+may be generated.  This mechanism is similar to
+<VAR>filename expansion</VAR> (see section <A 
HREF="bashref.html#SEC34">Filename Expansion</A>),
+but the file names generated
+need not exist.  Patterns to be brace expanded take
+the form of an optional <VAR>preamble</VAR>,
+followed by a series of comma-separated strings
+between a pair of braces, followed by an optional <VAR>postscript</VAR>.
+The preamble is prepended to each string contained
+within the braces, and the postscript is then appended
+to each resulting string, expanding left to right.
+
+</P>
+<P>
+Brace expansions may be nested.  The results of each expanded
+string are not sorted; left to right order is preserved.
+For example,
+
+<PRE>
+bash$ echo a{d,c,b}e
+ade ace abe
+</PRE>
+
+<P>
+Brace expansion is performed before any other expansions,
+and any characters special to other expansions are preserved
+in the result.  It is strictly textual.  Bash
+does not apply any syntactic interpretation to the context of the
+expansion or the text between the braces.
+
+</P>
+<P>
+A correctly-formed brace expansion must contain unquoted opening
+and closing braces, and at least one unquoted comma.
+Any incorrectly formed brace expansion is left unchanged.
+
+</P>
+<P>
+This construct is typically used as shorthand when the common
+prefix of the strings to be generated is longer than in the
+above example:
+
+<PRE>
+mkdir /usr/local/src/bash/{old,new,dist,bugs}
+</PRE>
+
+<P>
+or
+
+<PRE>
+chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+</PRE>
+
+
+
+<H3><A NAME="SEC28" HREF="bashref.html#TOC28">Tilde Expansion</A></H3>
+<P>
+<A NAME="IDX75"></A>
+<A NAME="IDX76"></A>
+
+</P>
+<P>
+If a word begins with an unquoted tilde character (<SAMP>`~'</SAMP>), all of 
the
+characters up to the first unquoted slash (or all characters,
+if there is no unquoted slash) are considered a <VAR>tilde-prefix</VAR>.
+If none of the characters in the tilde-prefix are quoted, the
+characters in the tilde-prefix following the tilde are treated as a
+possible <VAR>login name</VAR>.
+If this login name is the null string, the tilde is replaced with the
+value of the <CODE>HOME</CODE> shell variable.
+If <CODE>HOME</CODE> is unset, the home directory of the user executing the
+shell is substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+
+</P>
+<P>
+If the tilde-prefix is <SAMP>`~+'</SAMP>, the value of
+the shell variable <CODE>PWD</CODE> replaces the tilde-prefix.
+If the tilde-prefix is <SAMP>`~-'</SAMP>, the value of the shell variable
+<CODE>OLDPWD</CODE>, if it is set, is substituted.
+
+</P>
+<P>
+If the characters following the tilde in the tilde-prefix consist of a
+number <VAR>N</VAR>, optionally prefixed by a <SAMP>`+'</SAMP> or a 
<SAMP>`-'</SAMP>,
+the tilde-prefix is replaced with the
+corresponding element from the directory stack, as it would be displayed
+by the <CODE>dirs</CODE> builtin invoked with the characters following tilde
+in the tilde-prefix as an argument (see section <A 
HREF="bashref.html#SEC71">The Directory Stack</A>).
+If the tilde-prefix, sans the tilde, consists of a number without a
+leading <SAMP>`+'</SAMP> or <SAMP>`-'</SAMP>, <SAMP>`+'</SAMP> is assumed.
+
+</P>
+<P>
+If the login name is invalid, or the tilde expansion fails, the word is
+left unchanged.
+
+</P>
+<P>
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a <SAMP>`:'</SAMP> or <SAMP>`='</SAMP>.
+In these cases, tilde expansion is also performed.
+Consequently, one may use file names with tildes in assignments to
+<CODE>PATH</CODE>, <CODE>MAILPATH</CODE>, and <CODE>CDPATH</CODE>,
+and the shell assigns the expanded value.
+
+</P>
+<P>
+The following table shows how Bash treats unquoted tilde-prefixes:
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>~</CODE>
+<DD>
+The value of <CODE>$HOME</CODE>
+<DT><CODE>~/foo</CODE>
+<DD>
+<TT>`$HOME/foo'</TT>
+
+<DT><CODE>~fred/foo</CODE>
+<DD>
+The subdirectory <CODE>foo</CODE> of the home directory of the user
+<CODE>fred</CODE>
+
+<DT><CODE>~+/foo</CODE>
+<DD>
+<TT>`$PWD/foo'</TT>
+
+<DT><CODE>~-/foo</CODE>
+<DD>
+<TT>`${OLDPWD-'~-'}/foo'</TT>
+
+<DT><CODE>~<VAR>N</VAR></CODE>
+<DD>
+The string that would be displayed by <SAMP>`dirs +<VAR>N</VAR>'</SAMP>
+
+<DT><CODE>~+<VAR>N</VAR></CODE>
+<DD>
+The string that would be displayed by <SAMP>`dirs +<VAR>N</VAR>'</SAMP>
+
+<DT><CODE>~-<VAR>N</VAR></CODE>
+<DD>
+The string that would be displayed by <SAMP>`dirs -<VAR>N</VAR>'</SAMP>
+
+</DL>
+
+
+
+<H3><A NAME="SEC29" HREF="bashref.html#TOC29">Shell Parameter 
Expansion</A></H3>
+<P>
+<A NAME="IDX77"></A>
+<A NAME="IDX78"></A>
+
+</P>
+<P>
+The <SAMP>`$'</SAMP> character introduces parameter expansion,
+command substitution, or arithmetic expansion.  The parameter name
+or symbol to be expanded may be enclosed in braces, which
+are optional but serve to protect the variable to be expanded from
+characters immediately following it which could be
+interpreted as part of the name.
+
+</P>
+<P>
+When braces are used, the matching ending brace is the first <SAMP>`}'</SAMP>
+not escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+
+</P>
+<P>
+The basic form of parameter expansion is ${<VAR>parameter</VAR>}.
+The value of <VAR>parameter</VAR> is substituted.  The braces are required
+when <VAR>parameter</VAR>
+is a positional parameter with more than one digit,
+or when <VAR>parameter</VAR>
+is followed by a character that is not to be
+interpreted as part of its name.
+
+</P>
+<P>
+If the first character of <VAR>parameter</VAR> is an exclamation point,
+a level of variable indirection is introduced.
+Bash uses the value of the variable formed from the rest of
+<VAR>parameter</VAR> as the name of the variable; this variable is then
+expanded and that value is used in the rest of the substitution, rather
+than the value of <VAR>parameter</VAR> itself.
+This is known as <CODE>indirect expansion</CODE>.
+
+</P>
+<P>
+In each of the cases below, <VAR>word</VAR> is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+When not performing substring expansion, Bash tests for a parameter
+that is unset or null; omitting the colon results in a test only for a
+parameter that is unset.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>${<VAR>parameter</VAR>:-<VAR>word</VAR>}</CODE>
+<DD>
+If <VAR>parameter</VAR> is unset or null, the expansion of
+<VAR>word</VAR> is substituted.  Otherwise, the value of
+<VAR>parameter</VAR> is substituted.
+
+<DT><CODE>${<VAR>parameter</VAR>:=<VAR>word</VAR>}</CODE>
+<DD>
+If <VAR>parameter</VAR>
+is unset or null, the expansion of <VAR>word</VAR>
+is assigned to <VAR>parameter</VAR>.
+The value of <VAR>parameter</VAR>
+is then substituted.  Positional parameters and special parameters may
+not be assigned to in this way.
+
+<DT><CODE>${<VAR>parameter</VAR>:?<VAR>word</VAR>}</CODE>
+<DD>
+If <VAR>parameter</VAR>
+is null or unset, the expansion of <VAR>word</VAR> (or a message
+to that effect if <VAR>word</VAR>
+is not present) is written to the standard error and the shell, if it
+is not interactive, exits.  Otherwise, the value of <VAR>parameter</VAR> is
+substituted.
+
+<DT><CODE>${<VAR>parameter</VAR>:+<VAR>word</VAR>}</CODE>
+<DD>
+If <VAR>parameter</VAR>
+is null or unset, nothing is substituted, otherwise the expansion of
+<VAR>word</VAR> is substituted.
+
+<DT><CODE>${<VAR>parameter</VAR>:<VAR>offset</VAR>}</CODE>
+<DD>
+<DT><CODE>${<VAR>parameter</VAR>:<VAR>offset</VAR>:<VAR>length</VAR>}</CODE>
+<DD>
+Expands to up to <VAR>length</VAR> characters of <VAR>parameter</VAR>,
+starting at the character specified by <VAR>offset</VAR>.
+If <VAR>length</VAR> is omitted, expands to the substring of
+<VAR>parameter</VAR>, starting at the character specified by <VAR>offset</VAR>.
+<VAR>length</VAR> and <VAR>offset</VAR> are arithmetic expressions
+(see section <A HREF="bashref.html#SEC67">Shell Arithmetic</A>).
+This is referred to as Substring Expansion.
+
+<VAR>length</VAR> must evaluate to a number greater than or equal to zero.
+If <VAR>offset</VAR> evaluates to a number less than zero, the value
+is used as an offset from the end of the value of <VAR>parameter</VAR>.
+If <VAR>parameter</VAR> is <SAMP>`@'</SAMP>, the result is <VAR>length</VAR> 
positional
+parameters beginning at <VAR>offset</VAR>.
+If <VAR>parameter</VAR> is an array name indexed by <SAMP>`@'</SAMP> or 
<SAMP>`*'</SAMP>,
+the result is the <VAR>length</VAR>
+members of the array beginning with 
<CODE>${<VAR>parameter</VAR>[<VAR>offset</VAR>]}</CODE>.
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1.
+
+<DT><CODE>${#<VAR>parameter</VAR>}</CODE>
+<DD>
+The length in characters of the expanded value of <VAR>parameter</VAR> is
+substituted.
+If <VAR>parameter</VAR> is <SAMP>`*'</SAMP> or <SAMP>`@'</SAMP>, the value 
substituted
+is the number of positional parameters.
+If <VAR>parameter</VAR> is an array name subscripted by <SAMP>`*'</SAMP> or 
<SAMP>`@'</SAMP>, 
+the value substituted is the number of elements in the array.
+
+<DT><CODE>${<VAR>parameter</VAR>#<VAR>word</VAR>}</CODE>
+<DD>
+<DT><CODE>${<VAR>parameter</VAR>##<VAR>word</VAR>}</CODE>
+<DD>
+The <VAR>word</VAR>
+is expanded to produce a pattern just as in filename
+expansion (see section <A HREF="bashref.html#SEC34">Filename Expansion</A>).  
If the pattern matches
+the beginning of the expanded value of <VAR>parameter</VAR>,
+then the result of the expansion is the expanded value of <VAR>parameter</VAR>
+with the shortest matching pattern (the <SAMP>`#'</SAMP> case) or the
+longest matching pattern (the <SAMP>`##'</SAMP> case) deleted.
+If <VAR>parameter</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If <VAR>parameter</VAR> is an array variable subscripted with
+<SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+<DT><CODE>${<VAR>parameter</VAR>%<VAR>word</VAR>}</CODE>
+<DD>
+<DT><CODE>${<VAR>parameter</VAR>%%<VAR>word</VAR>}</CODE>
+<DD>
+The <VAR>word</VAR> is expanded to produce a pattern just as in
+filename expansion.
+If the pattern matches a trailing portion of the expanded value of
+<VAR>parameter</VAR>, then the result of the expansion is the value of
+<VAR>parameter</VAR> with the shortest matching pattern (the <SAMP>`%'</SAMP> 
case)
+or the longest matching pattern (the <SAMP>`%%'</SAMP> case) deleted.
+If <VAR>parameter</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If <VAR>parameter</VAR>
+is an array variable subscripted with <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+<DT><CODE>${<VAR>parameter</VAR>/<VAR>pattern</VAR>/<VAR>string</VAR>}</CODE>
+<DD>
+<DT><CODE>${<VAR>parameter</VAR>//<VAR>pattern</VAR>/<VAR>string</VAR>}</CODE>
+<DD>
+The <VAR>pattern</VAR> is expanded to produce a pattern just as in
+filename expansion.
+<VAR>Parameter</VAR> is expanded and the longest match of <VAR>pattern</VAR>
+against its value is replaced with <VAR>string</VAR>.
+In the first form, only the first match is replaced.
+The second form causes all matches of <VAR>pattern</VAR> to be
+replaced with <VAR>string</VAR>.
+If <VAR>pattern</VAR> begins with <SAMP>`#'</SAMP>, it must match at the 
beginning
+of the expanded value of <VAR>parameter</VAR>.
+If <VAR>pattern</VAR> begins with <SAMP>`%'</SAMP>, it must match at the end
+of the expanded value of <VAR>parameter</VAR>.
+If <VAR>string</VAR> is null, matches of <VAR>pattern</VAR> are deleted
+and the <CODE>/</CODE> following <VAR>pattern</VAR> may be omitted.
+If <VAR>parameter</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
+the substitution operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If <VAR>parameter</VAR>
+is an array variable subscripted with <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>,
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+</DL>
+
+
+
+<H3><A NAME="SEC30" HREF="bashref.html#TOC30">Command Substitution</A></H3>
+<P>
+<A NAME="IDX79"></A>
+
+</P>
+<P>
+Command substitution allows the output of a command to replace
+the command name.  There are two forms:
+
+<PRE>
+$(<VAR>command</VAR>)
+</PRE>
+
+<P>
+or
+
+<PRE>
+`<VAR>command</VAR>`
+</PRE>
+
+<P>
+Bash performs the expansion by executing <VAR>command</VAR> and
+replacing the command substitution with the standard output of the
+command, with any trailing newlines deleted.
+Embedded newlines are not deleted, but they may be removed during
+word splitting.
+The command substitution <CODE>$(cat <VAR>file</VAR>)</CODE> can be
+replaced by the equivalent but faster <CODE>$(&#60; <VAR>file</VAR>)</CODE>.
+
+</P>
+<P>
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+<SAMP>`$'</SAMP>, <SAMP>``'</SAMP>, or <SAMP>`\'</SAMP>. 
+The first backquote not preceded by a backslash terminates the
+command substitution.
+When using the <CODE>$(<VAR>command</VAR>)</CODE> form, all characters between
+the parentheses make up the command; none are treated specially.
+
+</P>
+<P>
+Command substitutions may be nested.  To nest when using the backquoted
+form, escape the inner backquotes with backslashes.
+
+</P>
+<P>
+If the substitution appears within double quotes, word splitting and
+filename expansion are not performed on the results.
+
+</P>
+
+
+<H3><A NAME="SEC31" HREF="bashref.html#TOC31">Arithmetic Expansion</A></H3>
+<P>
+<A NAME="IDX80"></A>
+<A NAME="IDX81"></A>
+
+</P>
+<P>
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result.  The format for arithmetic expansion is:
+
+</P>
+
+<PRE>
+$(( <VAR>expression</VAR> ))
+</PRE>
+
+<P>
+The expression is treated as if it were within double quotes, but
+a double quote inside the parentheses is not treated specially.
+All tokens in the expression undergo parameter expansion, command
+substitution, and quote removal.
+Arithmetic substitutions may be nested. 
+
+</P>
+<P>
+The evaluation is performed according to the rules listed below
+(see section <A HREF="bashref.html#SEC67">Shell Arithmetic</A>).
+If the expression is invalid, Bash prints a message indicating
+failure to the standard error and no substitution occurs.
+
+</P>
+
+
+<H3><A NAME="SEC32" HREF="bashref.html#TOC32">Process Substitution</A></H3>
+<P>
+<A NAME="IDX82"></A>
+
+</P>
+<P>
+Process substitution is supported on systems that support named
+pipes (FIFOs) or the <TT>`/dev/fd'</TT> method of naming open files.
+It takes the form of 
+
+<PRE>
+&#60;(<VAR>list</VAR>)
+</PRE>
+
+<P>
+or
+
+<PRE>
+&#62;(<VAR>list</VAR>)
+</PRE>
+
+<P>
+The process <VAR>list</VAR> is run with its input or output connected to a
+FIFO or some file in <TT>`/dev/fd'</TT>.  The name of this file is
+passed as an argument to the current command as the result of the
+expansion.  If the <CODE>&#62;(<VAR>list</VAR>)</CODE> form is used, writing to
+the file will provide input for <VAR>list</VAR>.  If the
+<CODE>&#60;(<VAR>list</VAR>)</CODE> form is used, the file passed as an
+argument should be read to obtain the output of <VAR>list</VAR>.
+
+</P>
+<P>
+When available, process substitution is performed simultaneously with
+parameter and variable expansion, command substitution, and arithmetic
+expansion.
+
+</P>
+
+
+<H3><A NAME="SEC33" HREF="bashref.html#TOC33">Word Splitting</A></H3>
+<P>
+<A NAME="IDX83"></A>
+
+</P>
+<P>
+The shell scans the results of parameter expansion, command substitution,
+and arithmetic expansion that did not occur within double quotes for
+word splitting.
+
+</P>
+<P>
+The shell treats each character of <CODE>$IFS</CODE>
+as a delimiter, and splits the results of the other
+expansions into words on these characters.  If
+<CODE>IFS</CODE> is unset, or its value is exactly 
<CODE>&#60;space&#62;&#60;tab&#62;&#60;newline&#62;</CODE>,
+the default, then any sequence of <CODE>IFS</CODE>
+characters serves to delimit words.  If <CODE>IFS</CODE>
+has a value other than the default, then sequences of
+the whitespace characters <CODE>space</CODE> and <CODE>tab</CODE>
+are ignored at the beginning and end of the
+word, as long as the whitespace character is in the
+value of <CODE>IFS</CODE> (an <CODE>IFS</CODE> whitespace character).
+Any character in <CODE>IFS</CODE> that is not <CODE>IFS</CODE>
+whitespace, along with any adjacent <CODE>IFS</CODE>
+whitespace characters, delimits a field.  A sequence of <CODE>IFS</CODE>
+whitespace characters is also treated as a delimiter.
+If the value of <CODE>IFS</CODE> is null, no word splitting occurs.
+
+</P>
+<P>
+Explicit null arguments (<CODE>""</CODE> or <CODE>"</CODE>) are retained.
+Unquoted implicit null arguments, resulting from the expansion of
+<VAR>parameter</VAR>s
+that have no values, are removed.
+If a parameter with no value is expanded within double quotes, a
+null argument results and is retained.
+
+</P>
+<P>
+Note that if no expansion occurs, no splitting
+is performed.
+
+</P>
+
+
+<H3><A NAME="SEC34" HREF="bashref.html#TOC34">Filename Expansion</A></H3>
+
+<UL>
+<LI><A HREF="bashref.html#SEC35">Pattern Matching</A>: How the shell matches 
patterns.
+</UL>
+<P>
+<A NAME="IDX84"></A>
+<A NAME="IDX85"></A>
+<A NAME="IDX86"></A>
+<A NAME="IDX87"></A>
+
+</P>
+<P>
+After word splitting, unless the <SAMP>`-f'</SAMP> option has been set
+(see section <A HREF="bashref.html#SEC64">The Set Builtin</A>), Bash scans 
each word for the characters
+<SAMP>`*'</SAMP>, <SAMP>`?'</SAMP>, <SAMP>`('</SAMP>, and <SAMP>`['</SAMP>.
+If one of these characters appears, then the word is
+regarded as a <VAR>pattern</VAR>,
+and replaced with an alphabetically sorted list of
+file names matching the pattern. If no matching file names are found,
+and the shell option <CODE>nullglob</CODE> is disabled, the word is left
+unchanged.
+If the <CODE>nullglob</CODE> option is set, and no matches are found, the word
+is removed.
+If the shell option <CODE>nocaseglob</CODE> is enabled, the match is performed
+without regard to the case of alphabetic characters.
+
+</P>
+<P>
+When a pattern is used for filename generation, the character <SAMP>`.'</SAMP>
+at the start of a filename or immediately following a slash
+must be matched explicitly, unless the shell option <CODE>dotglob</CODE> is 
set.
+When matching a file name, the slash character must always be
+matched explicitly.
+In other cases, the <SAMP>`.'</SAMP> character is not treated specially.
+
+</P>
+<P>
+See the description of <CODE>shopt</CODE> in section <A 
HREF="bashref.html#SEC63">Bash Builtin Commands</A>,
+for a description of the <CODE>nocaseglob</CODE>, <CODE>nullglob</CODE>,
+and <CODE>dotglob</CODE> options.
+
+</P>
+<P>
+The <CODE>GLOBIGNORE</CODE>
+shell variable may be used to restrict the set of filenames matching a
+pattern.  If <CODE>GLOBIGNORE</CODE>
+is set, each matching filename that also matches one of the patterns in
+<CODE>GLOBIGNORE</CODE> is removed from the list of matches.  The filenames
+<TT>`.'</TT> and <TT>`..'</TT>
+are always ignored, even when <CODE>GLOBIGNORE</CODE>
+is set.  However, setting <CODE>GLOBIGNORE</CODE> has the effect of
+enabling the <CODE>dotglob</CODE>
+shell option, so all other filenames beginning with a
+<SAMP>`.'</SAMP> will match.
+To get the old behavior of ignoring filenames beginning with a
+<SAMP>`.'</SAMP>, make <SAMP>`.*'</SAMP> one of the patterns in 
<CODE>GLOBIGNORE</CODE>.
+The <CODE>dotglob</CODE> option is disabled when <CODE>GLOBIGNORE</CODE>
+is unset.
+
+</P>
+
+
+<H4><A NAME="SEC35" HREF="bashref.html#TOC35">Pattern Matching</A></H4>
+<P>
+<A NAME="IDX88"></A>
+<A NAME="IDX89"></A>
+
+</P>
+<P>
+Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself.  The NUL character may not
+occur in a pattern.  The special pattern characters must be quoted if
+they are to be matched literally.
+
+</P>
+<P>
+The special pattern characters have the following meanings:
+<DL COMPACT>
+
+<DT><CODE>*</CODE>
+<DD>
+Matches any string, including the null string.
+<DT><CODE>?</CODE>
+<DD>
+Matches any single character.
+<DT><CODE>[...]</CODE>
+<DD>
+Matches any one of the enclosed characters.  A pair of characters
+separated by a minus sign denotes a <VAR>range</VAR>;
+any character lexically between those two characters, inclusive,
+is matched.  If the first character following the
+<SAMP>`['</SAMP> is a <SAMP>`!'</SAMP>  or a <SAMP>`^'</SAMP>
+then any character not enclosed is matched.  A <SAMP>`-'</SAMP>
+may be matched by including it as the first or last character
+in the set.  A <SAMP>`]'</SAMP> may be matched by including it as the first
+character in the set.
+
+Within <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, <VAR>character classes</VAR> can 
be specified
+using the syntax
+<CODE>[:</CODE><VAR>class</VAR><CODE>:]</CODE>, where <VAR>class</VAR> is one 
of the
+following classes defined in the POSIX.2 standard:
+
+<PRE>
+alnum   alpha   ascii   blank   cntrl   digit   graph   lower
+print   punct   space   upper   xdigit
+</PRE>
+
+A character class matches any character belonging to that class.
+
+Within <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, an <VAR>equivalence class</VAR> 
can be
+specified using the syntax <CODE>[=</CODE><VAR>c</VAR><CODE>=]</CODE>, which
+matches all characters with the same collation weight (as defined
+by the current locale) as the character <VAR>c</VAR>.
+
+Within <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, the syntax 
<CODE>[.</CODE><VAR>symbol</VAR><CODE>.]</CODE>
+matches the collating symbol <VAR>symbol</VAR>.
+</DL>
+
+<P>
+If the <CODE>extglob</CODE> shell option is enabled using the 
<CODE>shopt</CODE>
+builtin, several extended pattern matching operators are recognized.
+In the following description, a <VAR>pattern-list</VAR> is a list of one
+or more patterns separated by a <SAMP>`|'</SAMP>.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>?(<VAR>pattern-list</VAR>)</CODE>
+<DD>
+Matches zero or one occurrence of the given patterns.
+
+<DT><CODE>*(<VAR>pattern-list</VAR>)</CODE>
+<DD>
+Matches zero or more occurrences of the given patterns.
+
+<DT><CODE>+(<VAR>pattern-list</VAR>)</CODE>
+<DD>
+Matches one or more occurrences of the given patterns.
+
+<DT><CODE>@(<VAR>pattern-list</VAR>)</CODE>
+<DD>
+Matches exactly one of the given patterns.
+
+<DT><CODE>!(<VAR>pattern-list</VAR>)</CODE>
+<DD>
+Matches anything except one of the given patterns.
+</DL>
+
+
+
+<H3><A NAME="SEC36" HREF="bashref.html#TOC36">Quote Removal</A></H3>
+
+<P>
+After the preceding expansions, all unquoted occurrences of the
+characters <SAMP>`\'</SAMP>, <SAMP>`''</SAMP>, and <SAMP>`"'</SAMP> that did 
not
+result from one of the above expansions are removed.
+
+</P>
+
+
+<H2><A NAME="SEC37" HREF="bashref.html#TOC37">Redirections</A></H2>
+<P>
+<A NAME="IDX90"></A>
+
+</P>
+<P>
+Before a command is executed, its input and output
+may be <VAR>redirected</VAR>
+using a special notation interpreted by the shell.
+Redirection may also be used to open and close files for the
+current shell execution environment.  The following redirection
+operators may precede or appear anywhere within a
+simple command or may follow a command.
+Redirections are processed in the order they appear, from
+left to right.
+
+</P>
+<P>
+In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+<SAMP>`&#60;'</SAMP>, the redirection refers to the standard input (file
+descriptor 0).  If the first character of the redirection operator
+is <SAMP>`&#62;'</SAMP>, the redirection refers to the standard output (file
+descriptor 1).
+
+</P>
+<P>
+The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to brace expansion,
+tilde expansion, parameter expansion, command substitution, arithmetic
+expansion, quote removal, and filename expansion.
+If it expands to more than one word, Bash reports an error.
+
+</P>
+<P>
+Note that the order of redirections is significant.  For example,
+the command
+
+<PRE>
+ls &#62; <VAR>dirlist</VAR> 2&#62;&#38;1
+</PRE>
+
+<P>
+directs both standard output and standard error to the file   
+<VAR>dirlist</VAR>, while the command
+
+<PRE>
+ls 2&#62;&#38;1 &#62; <VAR>dirlist</VAR>
+</PRE>
+
+<P>
+directs only the standard output to file <VAR>dirlist</VAR>,
+because the standard error was duplicated as standard output
+before the standard output was redirected to <VAR>dirlist</VAR>.
+
+</P>
+<P>
+A failure to open or create a file causes the redirection to fail.
+
+</P>
+
+
+<H3><A NAME="SEC38" HREF="bashref.html#TOC38">Redirecting Input</A></H3>
+<P>
+Redirection of input causes the file whose name results from
+the expansion of <VAR>word</VAR>
+to be opened for reading on file descriptor <CODE>n</CODE>,
+or the standard input (file descriptor 0) if <CODE>n</CODE>
+is not specified.
+
+</P>
+<P>
+The general format for redirecting input is:
+
+<PRE>
+[n]&#60;<VAR>word</VAR>
+</PRE>
+
+
+
+<H3><A NAME="SEC39" HREF="bashref.html#TOC39">Redirecting Output</A></H3>
+<P>
+Redirection of output causes the file whose name results from
+the expansion of <VAR>word</VAR>
+to be opened for writing on file descriptor <CODE>n</CODE>,
+or the standard output (file descriptor 1) if <CODE>n</CODE>
+is not specified.  If the file does not exist it is created;
+if it does exist it is truncated to zero size.
+
+</P>
+<P>
+The general format for redirecting output is:
+
+<PRE>
+[n]&#62;[|]<VAR>word</VAR>
+</PRE>
+
+<P>
+If the redirection operator is <SAMP>`&#62;'</SAMP>, and the 
<CODE>noclobber</CODE>
+option to the <CODE>set</CODE> builtin has been enabled, the redirection
+will fail if the filename whose name results from the expansion of
+<VAR>word</VAR> exists and is a regular file.
+If the redirection operator is <SAMP>`&#62;|'</SAMP>, or the redirection 
operator is
+<SAMP>`&#62;'</SAMP> and the <CODE>noclobber</CODE> option is not enabled, the 
redirection
+is attempted even if the file named by <VAR>word</VAR> exists.
+
+</P>
+
+
+<H3><A NAME="SEC40" HREF="bashref.html#TOC40">Appending Redirected 
Output</A></H3>
+<P>
+Redirection of output in this fashion
+causes the file whose name results from
+the expansion of <VAR>word</VAR>
+to be opened for appending on file descriptor <CODE>n</CODE>,
+or the standard output (file descriptor 1) if <CODE>n</CODE>
+is not specified.  If the file does not exist it is created.
+
+</P>
+<P>
+The general format for appending output is:
+
+<PRE>
+[n]&#62;&#62;<VAR>word</VAR>
+</PRE>
+
+
+
+<H3><A NAME="SEC41" HREF="bashref.html#TOC41">Redirecting Standard Output and 
Standard Error</A></H3>
+<P>
+Bash allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be redirected to the file whose name is the
+expansion of <VAR>word</VAR> with this construct.
+
+</P>
+<P>
+There are two formats for redirecting standard output and
+standard error:
+
+<PRE>
+&#38;&#62;<VAR>word</VAR>
+</PRE>
+
+<P>
+and
+
+<PRE>
+&#62;&#38;<VAR>word</VAR>
+</PRE>
+
+<P>
+Of the two forms, the first is preferred.
+This is semantically equivalent to
+
+<PRE>
+&#62;<VAR>word</VAR> 2&#62;&#38;1
+</PRE>
+
+
+
+<H3><A NAME="SEC42" HREF="bashref.html#TOC42">Here Documents</A></H3>
+<P>
+This type of redirection instructs the shell to read input from the
+current source until a line containing only <VAR>word</VAR>
+(with no trailing blanks) is seen.  All of
+the lines read up to that point are then used as the standard
+input for a command.
+
+</P>
+<P>
+The format of here-documents is as follows:
+
+<PRE>
+&#60;&#60;[-]<VAR>word</VAR>
+        <VAR>here-document</VAR>
+<VAR>delimiter</VAR>
+</PRE>
+
+<P>
+No parameter expansion, command substitution, filename
+expansion, or arithmetic expansion is performed on
+<VAR>word</VAR>.  If any characters in <VAR>word</VAR> are quoted, the
+<VAR>delimiter</VAR> is the result of quote removal on <VAR>word</VAR>,
+and the lines in the here-document are not expanded.
+If <VAR>word</VAR> is unquoted,
+all lines of the here-document are subjected to parameter expansion,
+command substitution, and arithmetic expansion.  In the latter
+case, the pair <CODE>\newline</CODE> is ignored, and <SAMP>`\'</SAMP>
+must be used to quote the characters
+<SAMP>`\'</SAMP>, <SAMP>`$'</SAMP>, and <SAMP>``'</SAMP>.
+
+</P>
+<P>
+If the redirection operator is <SAMP>`&#60;&#60;-'</SAMP>,
+then all leading tab characters are stripped from input lines and the
+line containing <VAR>delimiter</VAR>.
+This allows here-documents within shell scripts to be indented in a
+natural fashion.
+
+</P>
+
+
+<H3><A NAME="SEC43" HREF="bashref.html#TOC43">Duplicating File 
Descriptors</A></H3>
+<P>
+The redirection operator
+
+<PRE>
+[n]&#60;&#38;<VAR>word</VAR>
+</PRE>
+
+<P>
+is used to duplicate input file descriptors.
+If <VAR>word</VAR>
+expands to one or more digits, the file descriptor denoted by <CODE>n</CODE>
+is made to be a copy of that file descriptor.
+If the digits in <VAR>word</VAR> do not specify a file descriptor open for
+input, a redirection error occurs.
+If <VAR>word</VAR>
+evaluates to <SAMP>`-'</SAMP>, file descriptor <CODE>n</CODE> is closed.  If
+<CODE>n</CODE> is not specified, the standard input (file descriptor 0) is 
used.
+
+</P>
+<P>
+The operator
+
+<PRE>
+[n]&#62;&#38;<VAR>word</VAR>
+</PRE>
+
+<P>
+is used similarly to duplicate output file descriptors.  If
+<CODE>n</CODE>
+is not specified, the standard output (file descriptor 1) is used.
+If the digits in <VAR>word</VAR> do not specify a file descriptor open for
+output, a redirection error occurs.
+As a special case, if <CODE>n</CODE> is omitted, and <VAR>word</VAR> does not
+expand to one or more digits, the standard output and standard
+error are redirected as described previously.
+
+</P>
+
+
+<H3><A NAME="SEC44" HREF="bashref.html#TOC44">Opening File Descriptors for 
Reading and Writing</A></H3>
+<P>
+The redirection operator
+
+<PRE>
+[n]&#60;&#62;<VAR>word</VAR>
+</PRE>
+
+<P>
+causes the file whose name is the expansion of <VAR>word</VAR>
+to be opened for both reading and writing on file descriptor
+<CODE>n</CODE>, or on file descriptor 0 if <CODE>n</CODE>
+is not specified.  If the file does not exist, it is created.
+
+</P>
+
+
+<H2><A NAME="SEC45" HREF="bashref.html#TOC45">Executing Commands</A></H2>
+
+
+<UL>
+<LI><A HREF="bashref.html#SEC46">Simple Command Expansion</A>: How Bash 
expands simple commands before
+                               executing them.
+
+<LI><A HREF="bashref.html#SEC47">Command Search and Execution</A>: How Bash 
finds commands and runs them.
+
+<LI><A HREF="bashref.html#SEC48">Command Execution Environment</A>: The 
environment in which Bash
+                                       executes commands that are not
+                                       shell builtins.
+
+<LI><A HREF="bashref.html#SEC49">Environment</A>: The environment given to a 
command.
+
+<LI><A HREF="bashref.html#SEC50">Exit Status</A>: The status returned by 
commands and how Bash
+                       interprets it.
+
+<LI><A HREF="bashref.html#SEC51">Signals</A>: What happens when Bash or a 
command it runs
+                       receives a signal.
+
+</UL>
+
+
+
+<H3><A NAME="SEC46" HREF="bashref.html#TOC46">Simple Command Expansion</A></H3>
+<P>
+<A NAME="IDX91"></A>
+
+</P>
+<P>
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+
+</P>
+
+<OL>
+<LI>
+
+The words that the parser has marked as variable assignments (those
+preceding the command name) and redirections are saved for later
+processing.
+
+<LI>
+
+The words that are not variable assignments or redirections are
+expanded (see section <A HREF="bashref.html#SEC26">Shell Expansions</A>).
+If any words remain after expansion, the first word
+is taken to be the name of the command and the remaining words are
+the arguments.
+
+<LI>
+
+Redirections are performed as described above (see section <A 
HREF="bashref.html#SEC37">Redirections</A>).
+
+<LI>
+
+The text after the <SAMP>`='</SAMP> in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+</OL>
+
+<P>
+If no command name results, the variable assignments affect the current
+shell environment.  Otherwise, the variables are added to the environment
+of the executed command and do not affect the current shell environment.
+If any of the assignments attempts to assign a value to a readonly variable,
+an error occurs, and the command exits with a non-zero status.
+
+</P>
+<P>
+If no command name results, redirections are performed, but do not
+affect the current shell environment.  A redirection error causes the
+command to exit with a non-zero status.
+
+</P>
+<P>
+If there is a command name left after expansion, execution proceeds as
+described below.  Otherwise, the command exits.  If one of the expansions
+contained a command substitution, the exit status of the command is
+the exit status of the last command substitution performed.  If there
+were no command substitutions, the command exits with a status of zero.
+
+</P>
+
+
+<H3><A NAME="SEC47" HREF="bashref.html#TOC47">Command Search and 
Execution</A></H3>
+<P>
+<A NAME="IDX92"></A>
+<A NAME="IDX93"></A>
+
+</P>
+<P>
+After a command has been split into words, if it results in a
+simple command and an optional list of arguments, the following
+actions are taken.
+
+</P>
+
+<OL>
+<LI>
+
+If the command name contains no slashes, the shell attempts to
+locate it.  If there exists a shell function by that name, that
+function is invoked as described above in section <A 
HREF="bashref.html#SEC22">Shell Functions</A>.
+
+<LI>
+
+If the name does not match a function, the shell searches for
+it in the list of shell builtins.  If a match is found, that
+builtin is invoked.
+
+<LI>
+
+If the name is neither a shell function nor a builtin,
+and contains no slashes, Bash searches each element of
+<CODE>$PATH</CODE> for a directory containing an executable file
+by that name.  Bash uses a hash table to remember the full
+pathnames of executable files to avoid multiple <CODE>PATH</CODE> searches
+(see the description of <CODE>hash</CODE> in section <A 
HREF="bashref.html#SEC54">Bourne Shell Builtins</A>).
+A full search of the directories in <CODE>$PATH</CODE>
+is performed only if the command is not found in the hash table.
+If the search is unsuccessful, the shell prints an error
+message and returns an exit status of 127.
+
+<LI>
+
+If the search is successful, or if the command name contains
+one or more slashes, the shell executes the named program in
+a separate execution environment.
+Argument 0 is set to the name given, and the remaining arguments
+to the command are set to the arguments supplied, if any.
+
+<LI>
+
+If this execution fails because the file is not in executable
+format, and the file is not a directory, it is assumed to be a
+<VAR>shell script</VAR> and the shell executes it as described in
+section <A HREF="bashref.html#SEC52">Shell Scripts</A>.
+
+<LI>
+
+If the command was not begun asynchronously, the shell waits for
+the command to complete and collects its exit status.
+
+</OL>
+
+
+
+<H3><A NAME="SEC48" HREF="bashref.html#TOC48">Command Execution 
Environment</A></H3>
+<P>
+<A NAME="IDX94"></A>
+
+</P>
+<P>
+The shell has an <VAR>execution environment</VAR>, which consists of the
+following:
+
+</P>
+
+<UL>
+<LI>
+
+open files inherited by the shell at invocation, as modified by
+redirections supplied to the <CODE>exec</CODE> builtin
+
+<LI>
+
+the current working directory as set by <CODE>cd</CODE>, <CODE>pushd</CODE>, or
+<CODE>popd</CODE>, or inherited by the shell at invocation
+
+<LI>
+
+the file creation mode mask as set by <CODE>umask</CODE> or inherited from
+the shell's parent
+
+<LI>
+
+current traps set by <CODE>trap</CODE>
+
+<LI>
+
+shell parameters that are set by variable assignment or with <CODE>set</CODE>
+or inherited from the shell's parent in the environment
+
+<LI>
+
+shell functions defined during execution or inherited from the shell's
+parent in the environment
+
+<LI>
+
+options enabled at invocation (either by default or with command-line
+arguments) or by <CODE>set</CODE>
+
+<LI>
+
+options enabled by <CODE>shopt</CODE>
+
+<LI>
+
+shell aliases defined with <CODE>alias</CODE> (see section <A 
HREF="bashref.html#SEC68">Aliases</A>)
+
+<LI>
+
+various process IDs, including those of background jobs
+(see section <A HREF="bashref.html#SEC18">Lists of Commands</A>), the value of 
<CODE>$$</CODE>, and the value of
+<CODE>$PPID</CODE>
+
+</UL>
+
+<P>
+When a simple command other than a builtin or shell function
+is to be executed, it
+is invoked in a separate execution environment that consists of
+the following.  Unless otherwise noted, the values are inherited
+from the shell.
+
+</P>
+
+<UL>
+<LI>
+
+the shell's open files, plus any modifications and additions specified
+by redirections to the command
+
+<LI>
+
+the current working directory
+
+<LI>
+
+the file creation mode mask
+
+<LI>
+
+shell variables marked for export, along with variables exported for
+the command, passed in the environment (see section <A 
HREF="bashref.html#SEC49">Environment</A>)
+
+<LI>
+
+traps caught by the shell are reset to the values inherited from the
+shell's parent, and traps ignored by the shell are ignored
+
+</UL>
+
+<P>
+A command invoked in this separate environment cannot affect the
+shell's execution environment. 
+
+</P>
+<P>
+Command substitution and asynchronous commands are invoked in a
+subshell environment that is a duplicate of the shell environment,
+except that traps caught by the shell are reset to the values
+that the shell inherited from its parent at invocation.  Builtin
+commands that are invoked as part of a pipeline are also executed
+in a subshell environment.  Changes made to the subshell environment
+cannot affect the shell's execution environment.
+
+</P>
+
+
+<H3><A NAME="SEC49" HREF="bashref.html#TOC49">Environment</A></H3>
+<P>
+<A NAME="IDX95"></A>
+
+</P>
+<P>
+When a program is invoked it is given an array of strings
+called the <VAR>environment</VAR>.
+This is a list of name-value pairs, of the form <CODE>name=value</CODE>.
+
+</P>
+<P>
+Bash allows you to manipulate the environment in several
+ways.  On invocation, the shell scans its own environment and
+creates a parameter for each name found, automatically marking
+it for <VAR>export</VAR>
+to child processes.  Executed commands inherit the environment.
+The <CODE>export</CODE> and <SAMP>`declare -x'</SAMP>
+commands allow parameters and functions to be added to and
+deleted from the environment.  If the value of a parameter
+in the environment is modified, the new value becomes part
+of the environment, replacing the old.  The environment
+inherited by any executed command consists of the shell's
+initial environment, whose values may be modified in the shell,
+less any pairs removed by the <CODE>unset</CODE> and <SAMP>`export -n'</SAMP>
+commands, plus any additions via the <CODE>export</CODE> and
+<SAMP>`declare -x'</SAMP> commands.
+
+</P>
+<P>
+The environment for any simple command
+or function may be augmented temporarily by prefixing it with
+parameter assignments, as described in section <A 
HREF="bashref.html#SEC23">Shell Parameters</A>.
+These assignment statements affect only the environment seen
+by that command.
+
+</P>
+<P>
+If the <SAMP>`-k'</SAMP> option is set (see section <A 
HREF="bashref.html#SEC64">The Set Builtin</A>), then all
+parameter assignments are placed in the environment for a command,
+not just those that precede the command name.
+
+</P>
+<P>
+When Bash invokes an external command, the variable <SAMP>`$_'</SAMP>
+is set to the full path name of the command and passed to that
+command in its environment.
+
+</P>
+
+
+<H3><A NAME="SEC50" HREF="bashref.html#TOC50">Exit Status</A></H3>
+<P>
+<A NAME="IDX96"></A>
+
+</P>
+<P>
+For the shell's purposes, a command which exits with a
+zero exit status has succeeded.
+A non-zero exit status indicates failure.
+This seemingly counter-intuitive scheme is used so there
+is one well-defined way to indicate success and a variety of
+ways to indicate various failure modes.
+When a command terminates on a fatal signal whose number is <VAR>n</VAR>,
+Bash uses the value 128+<VAR>n</VAR> as the exit status.
+
+</P>
+<P>
+If a command is not found, the child process created to
+execute it returns a status of 127.  If a command is found  
+but is not executable, the return status is 126.
+
+</P>
+<P>
+If a command fails because of an error during expansion or redirection,
+the exit status is greater than zero.
+
+</P>
+<P>
+The exit status is used by the Bash conditional commands
+(see section <A HREF="bashref.html#SEC20">Conditional Constructs</A>) and some 
of the list
+constructs (see section <A HREF="bashref.html#SEC18">Lists of Commands</A>).
+
+</P>
+<P>
+All of the Bash builtins return an exit status of zero if they succeed
+and a non-zero status on failure, so they may be used by the
+conditional and list constructs.
+All builtins return an exit status of 2 to indicate incorrect usage.
+
+</P>
+
+
+<H3><A NAME="SEC51" HREF="bashref.html#TOC51">Signals</A></H3>
+<P>
+<A NAME="IDX97"></A>
+
+</P>
+<P>
+When Bash is interactive, in the absence of any traps, it ignores
+<CODE>SIGTERM</CODE> (so that <SAMP>`kill 0'</SAMP> does not kill an 
interactive shell),
+and <CODE>SIGINT</CODE>
+is caught and handled (so that the <CODE>wait</CODE> builtin is interruptible).
+When Bash receives a <CODE>SIGINT</CODE>, it breaks out of any executing loops.
+In all cases, Bash ignores <CODE>SIGQUIT</CODE>.
+If job control is in effect (see section <A HREF="bashref.html#SEC75">Job 
Control</A>), Bash
+ignores <CODE>SIGTTIN</CODE>, <CODE>SIGTTOU</CODE>, and <CODE>SIGTSTP</CODE>.
+
+</P>
+<P>
+Commands started by Bash have signal handlers set to the
+values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore <CODE>SIGINT</CODE> and <CODE>SIGQUIT</CODE> as well.
+Commands run as a result of
+command substitution ignore the keyboard-generated job control signals
+<CODE>SIGTTIN</CODE>, <CODE>SIGTTOU</CODE>, and <CODE>SIGTSTP</CODE>.
+
+</P>
+<P>
+The shell exits by default upon receipt of a <CODE>SIGHUP</CODE>.
+Before exiting, it resends the <CODE>SIGHUP</CODE> to all jobs, running
+or stopped.
+Stopped jobs are sent <CODE>SIGCONT</CODE> to ensure that they receive
+the <CODE>SIGHUP</CODE>.
+To prevent the shell from sending the <CODE>SIGHUP</CODE> signal to a
+particular job, it should be removed
+from the jobs table with the <CODE>disown</CODE>
+builtin (see section <A HREF="bashref.html#SEC77">Job Control Builtins</A>) or 
marked
+to not receive <CODE>SIGHUP</CODE> using <CODE>disown -h</CODE>.
+
+</P>
+<P>
+If the  <CODE>huponexit</CODE> shell option has been set with 
<CODE>shopt</CODE>
+(see section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>), Bash 
sends a <CODE>SIGHUP</CODE> to all jobs when
+an interactive login shell exits.
+
+</P>
+<P>
+When Bash receives a signal for which a trap has been set while waiting
+for a command to complete, the trap will not be executed until the
+command completes. 
+When Bash is waiting for an asynchronous
+command via the <CODE>wait</CODE> builtin, the reception of a signal for
+which a trap has been set will cause the <CODE>wait</CODE> builtin to return
+immediately with an exit status greater than 128, immediately after
+which the trap is executed.
+
+</P>
+
+
+<H2><A NAME="SEC52" HREF="bashref.html#TOC52">Shell Scripts</A></H2>
+<P>
+<A NAME="IDX98"></A>
+
+</P>
+<P>
+A shell script is a text file containing shell commands.  When such
+a file is used as the first non-option argument when invoking Bash,
+and neither the <SAMP>`-c'</SAMP> nor <SAMP>`-s'</SAMP> option is supplied
+(see section <A HREF="bashref.html#SEC60">Invoking Bash</A>), 
+Bash reads and executes commands from the file, then exits.  This
+mode of operation creates a non-interactive shell.  When Bash runs
+a shell script, it sets the special parameter <CODE>0</CODE> to the name
+of the file, rather than the name of the shell, and the positional
+parameters are set to the remaining arguments, if any are given.
+If no additional arguments are supplied, the positional parameters
+are unset.
+
+</P>
+<P>
+A shell script may be made executable by using the <CODE>chmod</CODE> command
+to turn on the execute bit.  When Bash finds such a file while
+searching the <CODE>$PATH</CODE> for a command, it spawns a subshell to
+execute it.  In other words, executing
+
+<PRE>
+filename <VAR>arguments</VAR>
+</PRE>
+
+<P>
+is equivalent to executing
+
+<PRE>
+bash filename <VAR>arguments</VAR>
+</PRE>
+
+<P>
+if <CODE>filename</CODE> is an executable shell script.
+This subshell reinitializes itself, so that the effect is as if a
+new shell had been invoked to interpret the script, with the
+exception that the locations of commands remembered by the parent
+(see the description of <CODE>hash</CODE> in section <A 
HREF="bashref.html#SEC54">Bourne Shell Builtins</A>)
+are retained by the child.
+
+</P>
+<P>
+Most versions of Unix make this a part of the kernel's command
+execution mechanism.  If the first line of a script begins with
+the two characters <SAMP>`#!'</SAMP>, the remainder of the line specifies
+an interpreter for the program.  The arguments to the interpreter
+consist of a single optional argument following the interpreter
+name on the first line of the script file, followed by the name of
+the script file, followed by the rest of the arguments.  Bash
+will perform this action on operating systems that do not handle it
+themselves.  Note that some older versions of Unix limit the interpreter
+name and argument to a maximum of 32 characters.
+
+</P>
+
+
+<H1><A NAME="SEC53" HREF="bashref.html#TOC53">Bourne Shell Style 
Features</A></H1>
+
+
+<UL>
+<LI><A HREF="bashref.html#SEC54">Bourne Shell Builtins</A>: Builtin commands 
inherited from the Bourne
+                               Shell.
+<LI><A HREF="bashref.html#SEC55">Bourne Shell Variables</A>: Variables which 
Bash uses in the same way
+                               as the Bourne Shell.
+<LI><A HREF="bashref.html#SEC56">Other Bourne Shell Features</A>: Addtional 
aspects of Bash which behave in
+                               the same way as the Bourne Shell.
+</UL>
+
+<P>
+This section briefly summarizes things which Bash inherits from
+the Bourne Shell: builtins, variables, and other features.
+It also lists the significant differences between Bash and the Bourne Shell.
+Many of the builtins have been extended by POSIX or Bash.
+
+</P>
+
+
+<H2><A NAME="SEC54" HREF="bashref.html#TOC54">Bourne Shell Builtins</A></H2>
+
+<P>
+The following shell builtin commands are inherited from the Bourne
+Shell.  These commands are implemented as specified by the POSIX
+1003.2 standard.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>:</CODE>
+<DD>
+<A NAME="IDX99"></A>
+
+<PRE>
+: [<VAR>arguments</VAR>]
+</PRE>
+
+Do nothing beyond expanding <VAR>arguments</VAR> and performing redirections.
+The return status is zero.
+
+<DT><CODE>.</CODE>
+<DD>
+<A NAME="IDX100"></A>
+
+<PRE>
+. <VAR>filename</VAR> [<VAR>arguments</VAR>]
+</PRE>
+
+Read and execute commands from the <VAR>filename</VAR> argument in the
+current shell context.  If <VAR>filename</VAR> does not contain a slash,
+the <CODE>$PATH</CODE> variable is used to find
+<VAR>filename</VAR>.  The current directory is searched if <VAR>filename</VAR>
+is not found in <CODE>$PATH</CODE>.
+If any <VAR>arguments</VAR> are supplied, they become the positional
+parameters when <VAR>filename</VAR> is executed.  Otherwise the positional
+parameters are unchanged.
+The return status is the exit status of the last command executed, or
+zero if no commands are executed.  If <VAR>filename</VAR> is not found, or
+cannot be read, the return status is non-zero.
+
+<DT><CODE>break</CODE>
+<DD>
+<A NAME="IDX101"></A>
+
+<PRE>
+break [<VAR>n</VAR>]
+</PRE>
+
+Exit from a <CODE>for</CODE>, <CODE>while</CODE>, <CODE>until</CODE>, or 
<CODE>select</CODE> loop.
+If <VAR>n</VAR> is supplied, the <VAR>n</VAR>th enclosing loop is exited.
+<VAR>n</VAR> must be greater than or equal to 1.
+The return status is zero unless <VAR>n</VAR> is not greater than or equal to 
1.
+
+<DT><CODE>cd</CODE>
+<DD>
+<A NAME="IDX102"></A>
+
+<PRE>
+cd [-LP] [<VAR>directory</VAR>]
+</PRE>
+
+Change the current working directory to <VAR>directory</VAR>.  If 
<VAR>directory</VAR>
+is not given, the value of the <CODE>HOME</CODE> shell variable is used.  If 
the
+shell variable <CODE>CDPATH</CODE> exists, it is used as a search path.  If
+<VAR>directory</VAR> begins with a slash, <CODE>CDPATH</CODE> is not used.
+The <SAMP>`-P'</SAMP> option means
+to not follow symbolic links; symbolic links are followed by default
+or with the <SAMP>`-L'</SAMP> option.
+If <VAR>directory</VAR> is <SAMP>`-'</SAMP>, it is equivalent to 
<CODE>$OLDPWD</CODE>.
+The return status is zero if the directory is successfully changed,
+non-zero otherwise.
+
+<DT><CODE>continue</CODE>
+<DD>
+<A NAME="IDX103"></A>
+
+<PRE>
+continue [<VAR>n</VAR>]
+</PRE>
+
+Resume the next iteration of an enclosing <CODE>for</CODE>, <CODE>while</CODE>,
+<CODE>until</CODE>, or <CODE>select</CODE> loop.
+If <VAR>n</VAR> is supplied, the execution of the <VAR>n</VAR>th enclosing loop
+is resumed.
+<VAR>n</VAR> must be greater than or equal to 1.
+The return status is zero unless <VAR>n</VAR> is not greater than or equal to 
1.
+
+<DT><CODE>eval</CODE>
+<DD>
+<A NAME="IDX104"></A>
+
+<PRE>
+eval [<VAR>arguments</VAR>]
+</PRE>
+
+The arguments are concatenated together into a single command, which is
+then read and executed, and its exit status returned as the exit status
+of <CODE>eval</CODE>.
+If there are no arguments or only empty arguments, the return status is
+zero.
+
+<DT><CODE>exec</CODE>
+<DD>
+<A NAME="IDX105"></A>
+
+<PRE>
+exec [-cl] [-a <VAR>name</VAR>] [<VAR>command</VAR> [<VAR>arguments</VAR>]]
+</PRE>
+
+If <VAR>command</VAR>
+is supplied, it replaces the shell without creating a new process.
+If the <SAMP>`-l'</SAMP> option is supplied, the shell places a dash in the
+zeroth arg passed to <VAR>command</VAR>.
+This is what the <CODE>login</CODE> program does.
+The <SAMP>`-c'</SAMP> option causes <VAR>command</VAR> to be executed with an 
empty
+environment.
+If <SAMP>`-a'</SAMP> is supplied, the shell passes <VAR>name</VAR> as the 
zeroth
+argument to <VAR>command</VAR>.
+If no <VAR>command</VAR> is specified, redirections may be used to affect
+the current shell environment.  If there are no redirection errors, the
+return status is zero; otherwise the return status is non-zero.
+
+<DT><CODE>exit</CODE>
+<DD>
+<A NAME="IDX106"></A>
+
+<PRE>
+exit [<VAR>n</VAR>]
+</PRE>
+
+Exit the shell, returning a status of <VAR>n</VAR> to the shell's parent.
+Any trap on <CODE>EXIT</CODE> is executed before the shell terminates.
+
+<DT><CODE>export</CODE>
+<DD>
+<A NAME="IDX107"></A>
+
+<PRE>
+export [-fn] [-p] [<VAR>name</VAR>[=<VAR>value</VAR>]]
+</PRE>
+
+Mark each <VAR>name</VAR> to be passed to child processes
+in the environment.  If the <SAMP>`-f'</SAMP> option is supplied, the 
<VAR>name</VAR>s
+refer to shell functions; otherwise the names refer to shell variables.
+The <SAMP>`-n'</SAMP> option means to no longer mark each <VAR>name</VAR> for 
export.
+If no <VAR>names</VAR> are supplied, or if the <SAMP>`-p'</SAMP> option is 
given, a
+list of exported names is displayed.
+The <SAMP>`-p'</SAMP> option displays output in a form that may be reused as 
input.
+The return status is zero unless an invalid option is supplied, one of
+the names is not a valid shell variable name, or <SAMP>`-f'</SAMP> is supplied
+with a name that is not a shell function.
+
+<DT><CODE>getopts</CODE>
+<DD>
+<A NAME="IDX108"></A>
+
+<PRE>
+getopts <VAR>optstring</VAR> <VAR>name</VAR> [<VAR>args</VAR>]
+</PRE>
+
+<CODE>getopts</CODE> is used by shell scripts to parse positional parameters.
+<VAR>optstring</VAR> contains the option letters to be recognized; if a letter
+is followed by a colon, the option is expected to have an
+argument, which should be separated from it by white space.
+Each time it is invoked, <CODE>getopts</CODE>
+places the next option in the shell variable <VAR>name</VAR>, initializing
+<VAR>name</VAR> if it does not exist,
+and the index of the next argument to be processed into the
+variable <CODE>OPTIND</CODE>.
+<CODE>OPTIND</CODE> is initialized to 1 each time the shell or a shell script
+is invoked.
+When an option requires an argument,
+<CODE>getopts</CODE> places that argument into the variable 
<CODE>OPTARG</CODE>.
+The shell does not reset <CODE>OPTIND</CODE> automatically; it must be manually
+reset between multiple calls to <CODE>getopts</CODE> within the same shell
+invocation if a new set of parameters is to be used.
+
+When the end of options is encountered, <CODE>getopts</CODE> exits with a
+return value greater than zero.
+<CODE>OPTIND</CODE> is set to the index of the first non-option argument,
+and <CODE>name</CODE> is set to <SAMP>`?'</SAMP>.
+
+<CODE>getopts</CODE>
+normally parses the positional parameters, but if more arguments are
+given in <VAR>args</VAR>, <CODE>getopts</CODE> parses those instead.
+
+<CODE>getopts</CODE> can report errors in two ways.  If the first character of
+<VAR>optstring</VAR> is a colon, <VAR>silent</VAR>
+error reporting is used.  In normal operation diagnostic messages
+are printed when invalid options or missing option arguments are
+encountered.
+If the variable <CODE>OPTERR</CODE>
+is set to 0, no error messages will be displayed, even if the first
+character of <CODE>optstring</CODE> is not a colon.
+
+If an invalid option is seen,
+<CODE>getopts</CODE> places <SAMP>`?'</SAMP> into <VAR>name</VAR> and, if not 
silent,
+prints an error message and unsets <CODE>OPTARG</CODE>.
+If <CODE>getopts</CODE> is silent, the option character found is placed in
+<CODE>OPTARG</CODE> and no diagnostic message is printed.
+
+If a required argument is not found, and <CODE>getopts</CODE>
+is not silent, a question mark (<SAMP>`?'</SAMP>) is placed in <VAR>name</VAR>,
+<CODE>OPTARG</CODE> is unset, and a diagnostic message is printed.
+If <CODE>getopts</CODE> is silent, then a colon (<SAMP>`:'</SAMP>) is placed in
+<VAR>name</VAR> and <CODE>OPTARG</CODE> is set to the option character found.
+
+<DT><CODE>hash</CODE>
+<DD>
+<A NAME="IDX109"></A>
+
+<PRE>
+hash [-r] [-p <VAR>filename</VAR>] [<VAR>name</VAR>]
+</PRE>
+
+Remember the full pathnames of commands specified as <VAR>name</VAR> arguments,
+so they need not be searched for on subsequent invocations.
+The commands are found by searching through the directories listed in
+<CODE>$PATH</CODE>.
+The <SAMP>`-p'</SAMP> option inhibits the path search, and <VAR>filename</VAR> 
is
+used as the location of <VAR>name</VAR>.
+The <SAMP>`-r'</SAMP> option causes the shell to forget all remembered 
locations.
+If no arguments are given, information about remembered commands is printed.
+The return status is zero unless a <VAR>name</VAR> is not found or an invalid
+option is supplied.
+
+<DT><CODE>pwd</CODE>
+<DD>
+<A NAME="IDX110"></A>
+
+<PRE>
+pwd [-LP]
+</PRE>
+
+Print the current working directory.
+If the <SAMP>`-P'</SAMP> option is supplied, the path printed will not
+contain symbolic links.
+If the <SAMP>`-L'</SAMP> option is supplied, the path printed may contain
+symbolic links.
+The return status is zero unless an error is encountered while
+determining the name of the current directory or an invalid option
+is supplied.
+
+<DT><CODE>readonly</CODE>
+<DD>
+<A NAME="IDX111"></A>
+
+<PRE>
+readonly [-apf] [<VAR>name</VAR>] ...
+</PRE>
+
+Mark each <VAR>name</VAR> as readonly.
+The values of these names may not be changed by subsequent assignment.
+If the <SAMP>`-f'</SAMP> option is supplied, each <VAR>name</VAR> refers to a 
shell
+function.
+The <SAMP>`-a'</SAMP> option means each <VAR>name</VAR> refers to an array 
variable.
+If no <VAR>name</VAR> arguments are given, or if the <SAMP>`-p'</SAMP>
+option is supplied, a list of all readonly names is printed.
+The <SAMP>`-p'</SAMP> option causes output to be displayed in a format that
+may be reused as input.
+The return status is zero unless an invalid option is supplied, one of
+the <VAR>name</VAR> arguments is not a valid shell variable or function name,
+or the <SAMP>`-f'</SAMP> option is supplied with a name that is not a shell 
function.
+
+<DT><CODE>return</CODE>
+<DD>
+<A NAME="IDX112"></A>
+
+<PRE>
+return [<VAR>n</VAR>]
+</PRE>
+
+Cause a shell function to exit with the return value <VAR>n</VAR>.
+This may also be used to terminate execution of a script being executed
+with the <CODE>.</CODE> builtin, returning either <VAR>n</VAR> or the exit 
status
+of the last command executed within the script as the exit status of the
+script.
+The return status is false if <CODE>return</CODE> is used outside a function
+and not during the execution of a script by <SAMP>`.'</SAMP>.
+
+<DT><CODE>shift</CODE>
+<DD>
+<A NAME="IDX113"></A>
+
+<PRE>
+shift [<VAR>n</VAR>]
+</PRE>
+
+Shift the positional parameters to the left by <VAR>n</VAR>.
+The positional parameters from <VAR>n</VAR>+1 ... <CODE>$#</CODE> are
+renamed to <CODE>$1</CODE> ... <CODE>$#</CODE>-<VAR>n</VAR>+1.
+Parameters represented by the numbers <CODE>$#</CODE> to <VAR>n</VAR>+1 are 
unset.
+<VAR>n</VAR> must be a non-negative number less than or equal to 
<CODE>$#</CODE>.
+If <VAR>n</VAR> is zero or greater than <CODE>$#</CODE>, the positional 
parameters
+are not changed.
+The return status is zero unless <VAR>n</VAR> is greater than <CODE>$#</CODE> 
or
+less than zero, non-zero otherwise.
+
+<DT><CODE>test</CODE>
+<DD>
+<DT><CODE>[</CODE>
+<DD>
+<A NAME="IDX114"></A>
+<A NAME="IDX115"></A>
+Evaluate a conditional expression <VAR>expr</VAR>.
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described below in
+section <A HREF="bashref.html#SEC65">Bash Conditional Expressions</A>.
+
+Expressions may be combined using the following operators, listed in
+decreasing order of precedence.
+
+<DL COMPACT>
+
+<DT><CODE>! <VAR>expr</VAR></CODE>
+<DD>
+True if <VAR>expr</VAR> is false.
+
+<DT><CODE>( <VAR>expr</VAR> )</CODE>
+<DD>
+Returns the value of <VAR>expr</VAR>.
+This may be used to override the normal precedence of operators.
+
+<DT><CODE><VAR>expr1</VAR> -a <VAR>expr2</VAR></CODE>
+<DD>
+True if both <VAR>expr1</VAR> and <VAR>expr2</VAR> are true.
+
+<DT><CODE><VAR>expr1</VAR> -o <VAR>expr2</VAR></CODE>
+<DD>
+True if either <VAR>expr1</VAR> or <VAR>expr2</VAR> is true.
+</DL>
+
+The <CODE>test</CODE> and <CODE>[</CODE> builtins evaluate conditional
+expressions using a set of rules based on the number of arguments.
+
+<DL COMPACT>
+
+<DT>0 arguments
+<DD>
+The expression is false.
+
+<DT>1 argument
+<DD>
+The expression is true if and only if the argument is not null.
+
+<DT>2 arguments
+<DD>
+If the first argument is <SAMP>`!'</SAMP>, the expression is true if and
+only if the second argument is null.
+If the first argument is one of the unary conditional operators
+(see section <A HREF="bashref.html#SEC65">Bash Conditional Expressions</A>), 
the expression
+is true if the unary test is true.
+If the first argument is not a valid unary operator, the expression is
+false.
+
+<DT>3 arguments
+<DD>
+If the second argument is one of the binary conditional
+operators (see section <A HREF="bashref.html#SEC65">Bash Conditional 
Expressions</A>), the
+result of the expression is the result of the binary test using the
+first and third arguments as operands.
+If the first argument is <SAMP>`!'</SAMP>, the value is the negation of
+the two-argument test using the second and third arguments.
+If the first argument is exactly <SAMP>`('</SAMP> and the third argument is
+exactly <SAMP>`)'</SAMP>, the result is the one-argument test of the second
+argument.
+Otherwise, the expression is false.
+The <SAMP>`-a'</SAMP> and <SAMP>`-o'</SAMP> operators are considered binary 
operators
+in this case.  
+
+<DT>4 arguments
+<DD>
+If the first argument is <SAMP>`!'</SAMP>, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+Otherwise, the expression is parsed and evaluated according to 
+precedence using the rules listed above.
+
+<DT>5 or more arguments
+<DD>
+The expression is parsed and evaluated according to precedence
+using the rules listed above.
+</DL>
+
+<DT><CODE>times</CODE>
+<DD>
+<A NAME="IDX116"></A>
+
+<PRE>
+times
+</PRE>
+
+Print out the user and system times used by the shell and its children.
+The return status is zero.
+
+<DT><CODE>trap</CODE>
+<DD>
+<A NAME="IDX117"></A>
+
+<PRE>
+trap [-lp] [<VAR>arg</VAR>] [<VAR>sigspec</VAR> ...]
+</PRE>
+
+The commands in <VAR>arg</VAR> are to be read and executed when the
+shell receives signal <VAR>sigspec</VAR>.  If <VAR>arg</VAR> is absent or
+equal to <SAMP>`-'</SAMP>, all specified signals are reset to the values
+they had when the shell was started.
+If <VAR>arg</VAR> is the null string, then the signal specified by
+each <VAR>sigspec</VAR> is ignored by the shell and commands it invokes.
+If <VAR>arg</VAR> is <SAMP>`-p'</SAMP>, the shell displays the trap commands
+associated with each <VAR>sigspec</VAR>.  If no arguments are supplied, or
+only <SAMP>`-p'</SAMP> is given, <CODE>trap</CODE> prints the list of commands
+associated with each signal number in a form that may be reused as
+shell input.
+Each <VAR>sigspec</VAR> is either a signal name such as <CODE>SIGINT</CODE> 
(with
+or without the <CODE>SIG</CODE> prefix) or a signal number.
+If a <VAR>sigspec</VAR>
+is <CODE>0</CODE> or <CODE>EXIT</CODE>, <VAR>arg</VAR> is executed when the 
shell exits.
+If a <VAR>sigspec</VAR> is <CODE>DEBUG</CODE>, the command <VAR>arg</VAR> is 
executed
+after every simple command.
+The <SAMP>`-l'</SAMP> option causes the shell to print a list of signal names
+and their corresponding numbers.
+
+Signals ignored upon entry to the shell cannot be trapped or reset.
+Trapped signals are reset to their original values in a child  
+process when it is created.
+
+The return status is zero unless a <VAR>sigspec</VAR> does not specify a
+valid signal.
+
+<DT><CODE>umask</CODE>
+<DD>
+<A NAME="IDX118"></A>
+
+<PRE>
+umask [-p] [-S] [<VAR>mode</VAR>]
+</PRE>
+
+Set the shell process's file creation mask to <VAR>mode</VAR>.  If
+<VAR>mode</VAR> begins with a digit, it is interpreted as an octal number;
+if not, it is interpreted as a symbolic mode mask similar
+to that accepted by the <CODE>chmod</CODE> command.  If <VAR>mode</VAR> is
+omitted, the current value of the mask is printed.  If the <SAMP>`-S'</SAMP>
+option is supplied without a <VAR>mode</VAR> argument, the mask is printed
+in a symbolic format.
+If the  <SAMP>`-p'</SAMP> option is supplied, and <VAR>mode</VAR>
+is omitted, the output is in a form that may be reused as input.
+The return status is zero if the mode is successfully changed or if
+no <VAR>mode</VAR> argument is supplied, and non-zero otherwise.
+
+<DT><CODE>unset</CODE>
+<DD>
+<A NAME="IDX119"></A>
+
+<PRE>
+unset [-fv] [<VAR>name</VAR>]
+</PRE>
+
+Each variable or function <VAR>name</VAR> is removed.
+If no options are supplied, or the <SAMP>`-v'</SAMP> option is given, each
+<VAR>name</VAR> refers to a shell variable. 
+If the <SAMP>`-f'</SAMP> option is given, the <VAR>name</VAR>s refer to shell
+functions, and the function definition is removed.
+Readonly variables and functions may not be unset.
+The return status is zero unless a <VAR>name</VAR> does not exist or is
+readonly.
+</DL>
+
+
+
+<H2><A NAME="SEC55" HREF="bashref.html#TOC55">Bourne Shell Variables</A></H2>
+
+<P>
+Bash uses certain shell variables in the same way as the Bourne shell.
+In some cases, Bash assigns a default value to the variable.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>CDPATH</CODE>
+<DD>
+<A NAME="IDX120"></A>
+A colon-separated list of directories used as a search path for
+the <CODE>cd</CODE> builtin command.
+
+<DT><CODE>HOME</CODE>
+<DD>
+<A NAME="IDX121"></A>
+The current user's home directory; the default for the <CODE>cd</CODE> builtin
+command.
+The value of this variable is also used by tilde expansion
+(see section <A HREF="bashref.html#SEC28">Tilde Expansion</A>).
+
+<DT><CODE>IFS</CODE>
+<DD>
+<A NAME="IDX122"></A>
+A list of characters that separate fields; used when the shell splits
+words as part of expansion.
+
+<DT><CODE>MAIL</CODE>
+<DD>
+<A NAME="IDX123"></A>
+If this parameter is set to a filename and the <CODE>MAILPATH</CODE> variable
+is not set, Bash informs the user of the arrival of mail in
+the specified file.
+
+<DT><CODE>MAILPATH</CODE>
+<DD>
+<A NAME="IDX124"></A>
+A colon-separated list of filenames which the shell periodically checks
+for new mail.
+Each list entry can specify the message that is printed when new mail
+arrives in the mail file by separating the file name from the message with
+a <SAMP>`?'</SAMP>.
+When used in the text of the message, <CODE>$_</CODE> expands to the name of
+the current mail file.
+
+<DT><CODE>OPTARG</CODE>
+<DD>
+<A NAME="IDX125"></A>
+The value of the last option argument processed by the <CODE>getopts</CODE> 
builtin.
+
+<DT><CODE>OPTIND</CODE>
+<DD>
+<A NAME="IDX126"></A>
+The index of the last option argument processed by the <CODE>getopts</CODE> 
builtin.
+
+<DT><CODE>PATH</CODE>
+<DD>
+<A NAME="IDX127"></A>
+A colon-separated list of directories in which the shell looks for
+commands.
+
+<DT><CODE>PS1</CODE>
+<DD>
+<A NAME="IDX128"></A>
+The primary prompt string.  The default value is <SAMP>`\s-\v\$ '</SAMP>.
+
+<DT><CODE>PS2</CODE>
+<DD>
+<A NAME="IDX129"></A>
+The secondary prompt string.  The default value is <SAMP>`&#62; '</SAMP>.
+
+</DL>
+
+
+
+<H2><A NAME="SEC56" HREF="bashref.html#TOC56">Other Bourne Shell 
Features</A></H2>
+
+
+<UL>
+<LI><A HREF="bashref.html#SEC57">Major Differences From The Bourne Shell</A>: 
Major differences between
+                                               Bash and the Bourne shell.
+</UL>
+
+<P>
+Bash implements essentially the same grammar, parameter and
+variable expansion, redirection, and quoting as the Bourne Shell. 
+Bash uses the POSIX 1003.2 standard as the specification of
+how these features are to be implemented.  There are some
+differences between the traditional Bourne shell and Bash; this
+section quickly details the differences of significance.  A
+number of these differences are explained in greater depth in
+subsequent sections. 
+
+</P>
+
+
+<H3><A NAME="SEC57" HREF="bashref.html#TOC57">Major Differences From The 
SVR4.2 Bourne Shell</A></H3>
+
+
+<UL>
+
+<LI>
+
+Bash is POSIX-conformant, even where the POSIX specification
+differs from traditional <CODE>sh</CODE> behavior.
+
+<LI>
+
+Bash has multi-character invocation options (see section <A 
HREF="bashref.html#SEC60">Invoking Bash</A>).
+
+<LI>
+
+Bash has command-line editing (see section <A 
HREF="bashref.html#SEC86">Command Line Editing</A>) and
+the <CODE>bind</CODE> builtin.
+
+<LI>
+
+Bash has command history (see section <A HREF="bashref.html#SEC80">Bash 
History Facilities</A>) and the
+<CODE>history</CODE> and <CODE>fc</CODE> builtins to manipulate it.
+
+<LI>
+
+Bash implements <CODE>csh</CODE>-like history expansion
+(see section <A HREF="bashref.html#SEC82">History Expansion</A>).
+
+<LI>
+
+Bash has one-dimensional array variables (see section <A 
HREF="bashref.html#SEC70">Arrays</A>), and the
+appropriate variable expansions and assignment syntax to use them.
+Several of the Bash builtins take options to act on arrays.
+Bash provides a number of built-in array variables.
+
+<LI>
+
+The <CODE>$'...'</CODE> quoting syntax, which expands ANSI-C
+backslash-escaped characters in the text between the single quotes,
+is supported (see section <A HREF="bashref.html#SEC12">ANSI-C Quoting</A>).
+
+<LI>
+
+Bash supports the <CODE>$"..."</CODE> quoting syntax to do
+locale-specific translation of the characters between the double
+quotes.  The <SAMP>`-D'</SAMP>, <SAMP>`--dump-strings'</SAMP>, and 
<SAMP>`--dump-po-strings'</SAMP>
+invocation options list the translatable strings found in a script
+(see section <A HREF="bashref.html#SEC13">Locale-Specific Translation</A>).
+
+<LI>
+
+Bash implements the <CODE>!</CODE> keyword to negate the return value of
+a pipeline (see section <A HREF="bashref.html#SEC17">Pipelines</A>).
+Very useful when an <CODE>if</CODE> statement needs to act only if a test 
fails.
+
+<LI>
+
+Bash has the <CODE>time</CODE> reserved word and command timing (see section 
<A HREF="bashref.html#SEC17">Pipelines</A>).
+The display of the timing statistics may be controlled with the
+<CODE>TIMEFORMAT</CODE> variable.
+
+<LI>
+
+Bash includes the <CODE>select</CODE> compound command, which allows the
+generation of simple menus (see section <A 
HREF="bashref.html#SEC20">Conditional Constructs</A>).
+
+<LI>
+
+Bash includes the <CODE>[[</CODE> compound command, which makes conditional
+testing part of the shell grammar (see section <A 
HREF="bashref.html#SEC20">Conditional Constructs</A>).
+
+<LI>
+
+Bash includes brace expansion (see section <A HREF="bashref.html#SEC27">Brace 
Expansion</A>) and tilde
+expansion (see section <A HREF="bashref.html#SEC28">Tilde Expansion</A>).
+
+<LI>
+
+Bash implements command aliases and the <CODE>alias</CODE> and 
<CODE>unalias</CODE>
+builtins (see section <A HREF="bashref.html#SEC68">Aliases</A>).
+
+<LI>
+
+Bash provides shell arithmetic, the <CODE>((</CODE> compound command
+(see section <A HREF="bashref.html#SEC20">Conditional Constructs</A>),
+and arithmetic expansion (see section <A HREF="bashref.html#SEC67">Shell 
Arithmetic</A>).
+
+<LI>
+
+Variables present in the shell's initial environment are automatically
+exported to child processes.  The Bourne shell does not normally do
+this unless the variables are explicitly marked using the <CODE>export</CODE>
+command.
+
+<LI>
+
+Bash includes the POSIX pattern removal <SAMP>`%'</SAMP>, <SAMP>`#'</SAMP>, 
<SAMP>`%%'</SAMP>
+and <SAMP>`##'</SAMP> expansions to remove leading or trailing substrings from
+variable values (see section <A HREF="bashref.html#SEC29">Shell Parameter 
Expansion</A>).
+
+<LI>
+
+The expansion <CODE>${#xx}</CODE>, which returns the length of 
<CODE>${xx}</CODE>,
+is supported (see section <A HREF="bashref.html#SEC29">Shell Parameter 
Expansion</A>).
+
+<LI>
+
+The expansion 
<CODE>${var:</CODE><VAR>offset</VAR><CODE>[:</CODE><VAR>length</VAR><CODE>]}</CODE>,
+which expands to the substring of <CODE>var</CODE>'s value of length
+<VAR>length</VAR>, beginning at <VAR>offset</VAR>, is present
+(see section <A HREF="bashref.html#SEC29">Shell Parameter Expansion</A>).
+
+<LI>
+
+The expansion
+<CODE>${var/[/]</CODE><VAR>pattern</VAR><CODE>[/</CODE><VAR>replacement</VAR><CODE>]}</CODE>,
+which matches <VAR>pattern</VAR> and replaces it with <VAR>replacement</VAR> in
+the value of <CODE>var</CODE>, is available (see section <A 
HREF="bashref.html#SEC29">Shell Parameter Expansion</A>).
+
+<LI>
+
+Bash has <VAR>indirect</VAR> variable expansion using <CODE>${!word}</CODE>
+(see section <A HREF="bashref.html#SEC29">Shell Parameter Expansion</A>).
+
+<LI>
+
+Bash can expand positional parameters beyond <CODE>$9</CODE> using
+<CODE>${<VAR>num</VAR>}</CODE>.
+
+<LI>
+
+The POSIX <CODE>$()</CODE> form of command substitution
+is implemented (see section <A HREF="bashref.html#SEC30">Command 
Substitution</A>),
+and preferred to the Bourne shell's <CODE>"</CODE> (which
+is also implemented for backwards compatibility).
+
+<LI>
+
+Bash has process substitution (see section <A 
HREF="bashref.html#SEC32">Process Substitution</A>).
+
+<LI>
+
+Bash automatically assigns variables that provide information about the
+current user (<CODE>UID</CODE>, <CODE>EUID</CODE>, and <CODE>GROUPS</CODE>), 
the current host
+(<CODE>HOSTTYPE</CODE>, <CODE>OSTYPE</CODE>, <CODE>MACHTYPE</CODE>, and 
<CODE>HOSTNAME</CODE>),
+and the instance of Bash that is running (<CODE>BASH</CODE>,
+<CODE>BASH_VERSION</CODE>, and <CODE>BASH_VERSINFO</CODE>).  See section <A 
HREF="bashref.html#SEC66">Bash Variables</A>,
+for details.
+
+<LI>
+
+The <CODE>IFS</CODE> variable is used to split only the results of expansion,
+not all words (see section <A HREF="bashref.html#SEC33">Word Splitting</A>).
+This closes a longstanding shell security hole.
+
+<LI>
+
+Bash implements the full set of POSIX.2 filename expansion operators,
+including <VAR>character classes</VAR>, <VAR>equivalence classes</VAR>, and
+<VAR>collating symbols</VAR> (see section <A 
HREF="bashref.html#SEC34">Filename Expansion</A>).
+
+<LI>
+
+Bash implements extended pattern matching features when the 
<CODE>extglob</CODE>
+shell option is enabled (see section <A HREF="bashref.html#SEC35">Pattern 
Matching</A>).
+
+<LI>
+
+It is possible to have a variable and a function with the same name;
+<CODE>sh</CODE> does not separate the two name spaces.
+
+<LI>
+
+Bash functions are permitted to have local variables using the
+<CODE>local</CODE> builtin, and thus useful recursive functions may be written.
+
+<LI>
+
+Variable assignments preceding commands affect only that command, even
+builtins and functions (see section <A 
HREF="bashref.html#SEC49">Environment</A>).
+In <CODE>sh</CODE>, all variable assignments 
+preceding commands are global unless the command is executed from the
+file system.
+
+<LI>
+
+Bash performs filename expansion on filenames specified as operands
+to input and output redirection operators.
+
+<LI>
+
+Bash contains the <SAMP>`&#60;&#62;'</SAMP> redirection operator, allowing a 
file to be
+opened for both reading and writing, and the <SAMP>`&#38;&#62;'</SAMP> 
redirection
+operator, for directing standard output and standard error to the same
+file (see section <A HREF="bashref.html#SEC37">Redirections</A>).
+
+<LI>
+
+The <CODE>noclobber</CODE> option is available to avoid overwriting existing
+files with output redirection (see section <A HREF="bashref.html#SEC64">The 
Set Builtin</A>).
+The <SAMP>`&#62;|'</SAMP> redirection operator may be used to override 
<CODE>noclobber</CODE>.
+
+<LI>
+
+The Bash <CODE>cd</CODE> and <CODE>pwd</CODE> builtins (see section <A 
HREF="bashref.html#SEC54">Bourne Shell Builtins</A>)
+each take <SAMP>`-L'</SAMP> and <SAMP>`-P'</SAMP> builtins to switch between 
logical and
+physical modes.
+
+<LI>
+
+Bash allows a function to override a builtin with the same name, and provides
+access to that builtin's functionality within the function via the
+<CODE>builtin</CODE> and <CODE>command</CODE> builtins (see section <A 
HREF="bashref.html#SEC63">Bash Builtin Commands</A>).
+
+<LI>
+
+The <CODE>command</CODE> builtin allows selective disabling of functions
+when command lookup is performed (see section <A 
HREF="bashref.html#SEC63">Bash Builtin Commands</A>).
+
+<LI>
+
+Individual builtins may be enabled or disabled using the <CODE>enable</CODE>
+builtin (see section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>).
+
+<LI>
+
+The Bash <CODE>exec</CODE> builtin takes additional options that allow users
+to control the contents of the environment passed to the executed
+command, and what the zeroth argument to the command is to be
+(see section <A HREF="bashref.html#SEC54">Bourne Shell Builtins</A>).
+
+<LI>
+
+Shell functions may be exported to children via the environment
+using <CODE>export -f</CODE> (see section <A HREF="bashref.html#SEC22">Shell 
Functions</A>).
+
+<LI>
+
+The Bash <CODE>export</CODE>, <CODE>readonly</CODE>, and <CODE>declare</CODE> 
builtins can
+take a <SAMP>`-f'</SAMP> option to act on shell functions, a <SAMP>`-p'</SAMP> 
option to
+display variables with various attributes set in a format that can be
+used as shell input, a <SAMP>`-n'</SAMP> option to remove various variable
+attributes, and <SAMP>`name=value'</SAMP> arguments to set variable attributes
+and values simultaneously.
+
+<LI>
+
+The Bash <CODE>hash</CODE> builtin allows a name to be associated with
+an arbitrary filename, even when that filename cannot be found by
+searching the <CODE>$PATH</CODE>, using <SAMP>`hash -p'</SAMP>
+(see section <A HREF="bashref.html#SEC54">Bourne Shell Builtins</A>).
+
+<LI>
+
+Bash includes a <CODE>help</CODE> builtin for quick reference to shell
+facilities (see section <A HREF="bashref.html#SEC63">Bash Builtin 
Commands</A>).
+
+<LI>
+
+The <CODE>printf</CODE> builtin is available to display formatted output
+(see section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>).
+
+<LI>
+
+The Bash <CODE>read</CODE> builtin (see section <A 
HREF="bashref.html#SEC63">Bash Builtin Commands</A>)
+will read a line ending in <SAMP>`\'</SAMP> with
+the <SAMP>`-r'</SAMP> option, and will use the <CODE>REPLY</CODE> variable as a
+default if no arguments are supplied.  The Bash <CODE>read</CODE> builtin
+also accepts a prompt string with the <SAMP>`-p'</SAMP> option and will use
+Readline to obtain the line when given the <SAMP>`-e'</SAMP> option.
+
+<LI>
+
+The <CODE>return</CODE> builtin may be used to abort execution of scripts
+executed with the <CODE>.</CODE> or <CODE>source</CODE> builtins
+(see section <A HREF="bashref.html#SEC54">Bourne Shell Builtins</A>).
+
+<LI>
+
+Bash includes the <CODE>shopt</CODE> builtin, for finer control of shell
+optional capabilities (see section <A HREF="bashref.html#SEC63">Bash Builtin 
Commands</A>).
+
+<LI>
+
+Bash has much more optional behavior controllable with the <CODE>set</CODE>
+builtin (see section <A HREF="bashref.html#SEC64">The Set Builtin</A>).
+
+<LI>
+
+The <CODE>test</CODE> builtin (see section <A HREF="bashref.html#SEC54">Bourne 
Shell Builtins</A>)
+is slightly different, as it implements the POSIX algorithm,
+which specifies the behavior based on the number of arguments.
+
+<LI>
+
+The <CODE>trap</CODE> builtin (see section <A HREF="bashref.html#SEC54">Bourne 
Shell Builtins</A>)
+allows a <CODE>DEBUG</CODE> pseudo-signal specification,
+similar to <CODE>EXIT</CODE>.  Commands specified with a <CODE>DEBUG</CODE> 
trap are
+executed after every simple command.  The <CODE>DEBUG</CODE> trap is not
+inherited by shell functions.
+
+<LI>
+
+The Bash <CODE>type</CODE> builtin is more extensive and gives more information
+about the names it finds (see section <A HREF="bashref.html#SEC63">Bash 
Builtin Commands</A>).
+
+<LI>
+
+The Bash <CODE>umask</CODE> builtin permits a <SAMP>`-p'</SAMP> option to cause
+the output to be displayed in the form of a <CODE>umask</CODE> command
+that may be reused as input (see section <A HREF="bashref.html#SEC54">Bourne 
Shell Builtins</A>).
+
+<LI>
+
+Bash implements a <CODE>csh</CODE>-like directory stack, and provides the
+<CODE>pushd</CODE>, <CODE>popd</CODE>, and <CODE>dirs</CODE> builtins to 
manipulate it
+(see section <A HREF="bashref.html#SEC71">The Directory Stack</A>).
+Bash also makes the directory stack visible as the value of the
+<CODE>DIRSTACK</CODE> shell variable.
+
+<LI>
+
+Bash interprets special backslash-escaped characters in the prompt
+strings when interactive (see section <A HREF="bashref.html#SEC72">Controlling 
the Prompt</A>).
+
+<LI>
+
+The Bash restricted mode is more useful (see section <A 
HREF="bashref.html#SEC73">The Restricted Shell</A>);
+the SVR4.2 shell restricted mode is too limited.
+
+<LI>
+
+The <CODE>disown</CODE> builtin can remove a job from the internal shell
+job table (see section <A HREF="bashref.html#SEC77">Job Control Builtins</A>) 
or suppress the sending
+of <CODE>SIGHUP</CODE> to a job when the shell exits as the result of a
+<CODE>SIGHUP</CODE>.
+
+<LI>
+
+The SVR4.2 shell has two privilege-related builtins
+(<CODE>mldmode</CODE> and <CODE>priv</CODE>) not present in Bash.
+
+<LI>
+
+Bash does not have the <CODE>stop</CODE> or <CODE>newgrp</CODE> builtins.
+
+<LI>
+
+Bash does not use the <CODE>SHACCT</CODE> variable or perform shell accounting.
+
+<LI>
+
+The SVR4.2 <CODE>sh</CODE> uses a <CODE>TIMEOUT</CODE> variable like Bash uses
+<CODE>TMOUT</CODE>.
+
+</UL>
+
+<P>
+More features unique to Bash may be found in section <A 
HREF="bashref.html#SEC59">Bash Features</A>.
+
+</P>
+
+
+<H3><A NAME="SEC58" HREF="bashref.html#TOC58">Implementation Differences From 
The SVR4.2 Shell</A></H3>
+
+<P>
+Since Bash is a completely new implementation, it does not suffer from
+many of the limitations of the SVR4.2 shell.  For instance:
+
+</P>
+
+<UL>
+
+<LI>
+
+Bash does not fork a subshell when redirecting into or out of
+a shell control structure such as  an <CODE>if</CODE> or <CODE>while</CODE>
+statement.
+
+<LI>
+
+Bash does not allow unbalanced quotes.  The SVR4.2 shell will silently
+insert a needed closing quote at <CODE>EOF</CODE> under certain circumstances.
+This can be the cause of some hard-to-find errors.
+
+<LI>
+
+The SVR4.2 shell uses a baroque memory management scheme based on
+trapping <CODE>SIGSEGV</CODE>.  If the shell is started from a process with
+<CODE>SIGSEGV</CODE> blocked (e.g., by using the <CODE>system()</CODE> C 
library
+function call), it misbehaves badly.
+
+<LI>
+
+In a questionable attempt at security, the SVR4.2 shell,
+when invoked without the <SAMP>`-p'</SAMP> option, will alter its real
+and effective UID and GID if they are less than some
+magic threshold value, commonly 100.
+This can lead to unexpected results.
+
+<LI>
+
+The SVR4.2 shell does not allow users to trap <CODE>SIGSEGV</CODE>,
+<CODE>SIGALRM</CODE>, or <CODE>SIGCHLD</CODE>.
+
+<LI>
+
+The SVR4.2 shell does not allow the <CODE>IFS</CODE>, <CODE>MAILCHECK</CODE>,
+<CODE>PATH</CODE>, <CODE>PS1</CODE>, or <CODE>PS2</CODE> variables to be unset.
+
+<LI>
+
+The SVR4.2 shell treats <SAMP>`^'</SAMP> as the undocumented equivalent of
+<SAMP>`|'</SAMP>.
+
+<LI>
+
+Bash allows multiple option arguments when it is invoked (<CODE>-x -v</CODE>);
+the SVR4.2 shell allows only one option argument (<CODE>-xv</CODE>).  In
+fact, some versions of the shell dump core if the second argument begins
+with a <SAMP>`-'</SAMP>.
+
+<LI>
+
+The SVR4.2 shell exits a script if any builtin fails; Bash exits
+a script only if one of the POSIX.2 special builtins fails, and
+only for certain failures, as enumerated in the POSIX.2 standard.
+
+<LI>
+
+The SVR4.2 shell behaves differently when invoked as <CODE>jsh</CODE>
+(it turns on job control).
+</UL>
+
+
+
+<H1><A NAME="SEC59" HREF="bashref.html#TOC59">Bash Features</A></H1>
+
+<P>
+This section describes features unique to Bash.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC60">Invoking Bash</A>: Command line options that 
you can give
+                               to Bash.
+<LI><A HREF="bashref.html#SEC61">Bash Startup Files</A>: When and how Bash 
executes scripts.
+<LI><A HREF="bashref.html#SEC62">Is This Shell Interactive?</A>: Determining 
the state of a running Bash.
+<LI><A HREF="bashref.html#SEC63">Bash Builtins</A>: Table of builtins specific 
to Bash.
+<LI><A HREF="bashref.html#SEC64">The Set Builtin</A>: This builtin is so 
overloaded it
+                               deserves its own section.
+<LI><A HREF="bashref.html#SEC65">Bash Conditional Expressions</A>: Primitives 
used in composing expressions for
+                               the <CODE>test</CODE> builtin.
+<LI><A HREF="bashref.html#SEC66">Bash Variables</A>: List of variables that 
exist in Bash.
+<LI><A HREF="bashref.html#SEC67">Shell Arithmetic</A>: Arithmetic on shell 
variables.
+<LI><A HREF="bashref.html#SEC68">Aliases</A>: Substituting one command for 
another.
+<LI><A HREF="bashref.html#SEC70">Arrays</A>: Array Variables.
+<LI><A HREF="bashref.html#SEC71">The Directory Stack</A>: History of visited 
directories.
+<LI><A HREF="bashref.html#SEC72">Printing a Prompt</A>: Controlling the PS1 
string.
+<LI><A HREF="bashref.html#SEC73">The Restricted Shell</A>: A more controlled 
mode of shell execution.
+<LI><A HREF="bashref.html#SEC74">Bash POSIX Mode</A>: Making Bash behave more 
closely to what
+                               the POSIX standard specifies.
+</UL>
+
+
+
+<H2><A NAME="SEC60" HREF="bashref.html#TOC60">Invoking Bash</A></H2>
+
+
+<PRE>
+bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <VAR>option</VAR>] 
[<VAR>argument</VAR> ...]
+bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <VAR>option</VAR>] -c 
<VAR>string</VAR> [<VAR>argument</VAR> ...]
+bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <VAR>option</VAR>] 
[<VAR>argument</VAR> ...]
+</PRE>
+
+<P>
+In addition to the single-character shell command-line options
+(see section <A HREF="bashref.html#SEC64">The Set Builtin</A>), there are 
several multi-character
+options that you can use.  These options must appear on the command
+line before the single-character options in order for them
+to be recognized. 
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>--dump-po-strings</CODE>
+<DD>
+Equivalent to <SAMP>`-D'</SAMP>, but the output is in the GNU 
<CODE>gettext</CODE>
+PO (portable object) file format.
+
+<DT><CODE>--dump-strings</CODE>
+<DD>
+Equivalent to <SAMP>`-D'</SAMP>.
+
+<DT><CODE>--help</CODE>
+<DD>
+Display a usage message on standard output and exit sucessfully.
+
+<DT><CODE>--login</CODE>
+<DD>
+Make this shell act as if it were directly invoked by login.
+This is equivalent to <SAMP>`exec -l bash'</SAMP> but can be issued from
+another shell, such as <CODE>csh</CODE>.  <SAMP>`exec bash --login'</SAMP>
+will replace the current shell with a Bash login shell.
+
+<DT><CODE>--noediting</CODE>
+<DD>
+Do not use the GNU Readline library (see section <A 
HREF="bashref.html#SEC86">Command Line Editing</A>)
+to read interactive command lines.
+
+<DT><CODE>--noprofile</CODE>
+<DD>
+Don't load the system-wide startup file <TT>`/etc/profile'</TT>
+or any of the personal initialization files
+<TT>`~/.bash_profile'</TT>, <TT>`~/.bash_login'</TT>, or <TT>`~/.profile'</TT>
+when Bash is invoked as a login shell.
+
+<DT><CODE>--norc</CODE>
+<DD>
+Don't read the <TT>`~/.bashrc'</TT> initialization file in an
+interactive shell.  This is on by default if the shell is
+invoked as <CODE>sh</CODE>.
+
+<DT><CODE>--posix</CODE>
+<DD>
+Change the behavior of Bash where the default operation differs
+from the POSIX 1003.2 standard to match the standard.  This
+is intended to make Bash behave as a strict superset of that
+standard.  See section <A HREF="bashref.html#SEC74">Bash POSIX Mode</A>, for a 
description of the Bash
+POSIX mode.
+
+<DT><CODE>--rcfile <VAR>filename</VAR></CODE>
+<DD>
+Execute commands from <VAR>filename</VAR> (instead of <TT>`~/.bashrc'</TT>)
+in an interactive shell.
+
+<DT><CODE>--restricted</CODE>
+<DD>
+Make the shell a restricted shell (see section <A 
HREF="bashref.html#SEC73">The Restricted Shell</A>).
+
+<DT><CODE>--verbose</CODE>
+<DD>
+Equivalent to <SAMP>`-v'</SAMP>.
+
+<DT><CODE>--version</CODE>
+<DD>
+Show version information for this instance of
+Bash on the standard output and exit successfully.
+
+</DL>
+
+<P>
+There are several single-character options that may be supplied at
+invocation which are not available with the <CODE>set</CODE> builtin.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>-c <VAR>string</VAR></CODE>
+<DD>
+Read and execute commands from <VAR>string</VAR> after processing the
+options, then exit.  Any remaining arguments are assigned to the
+positional parameters, starting with <CODE>$0</CODE>.
+
+<DT><CODE>-i</CODE>
+<DD>
+Force the shell to run interactively.
+
+<DT><CODE>-r</CODE>
+<DD>
+Make the shell a restricted shell (see section <A 
HREF="bashref.html#SEC73">The Restricted Shell</A>).
+
+<DT><CODE>-s</CODE>
+<DD>
+If this option is present, or if no arguments remain after option
+processing, then commands are read from the standard input.
+This option allows the positional parameters to be set
+when invoking an interactive shell.
+
+<DT><CODE>-D</CODE>
+<DD>
+A list of all double-quoted strings preceded by <SAMP>`$'</SAMP>
+is printed on the standard ouput.
+These are the strings that
+are subject to language translation when the current locale
+is not <CODE>C</CODE> or <CODE>POSIX</CODE> (see section <A 
HREF="bashref.html#SEC13">Locale-Specific Translation</A>).
+This implies the <SAMP>`-n'</SAMP> option; no commands will be executed.
+
+<DT><CODE>--</CODE>
+<DD>
+A <CODE>--</CODE> signals the end of options and disables further option
+processing.
+Any arguments after the <CODE>--</CODE> are treated as filenames and arguments.
+
+</DL>
+
+<P>
+<A NAME="IDX130"></A>
+An <EM>interactive</EM> shell is one whose input and output are both
+connected to terminals (as determined by <CODE>isatty(3)</CODE>), or one
+started with the <SAMP>`-i'</SAMP> option.
+
+</P>
+<P>
+If arguments remain after option processing, and neither the
+<SAMP>`-c'</SAMP> nor the <SAMP>`-s'</SAMP>
+option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands (see section <A 
HREF="bashref.html#SEC52">Shell Scripts</A>).
+When Bash is invoked in this fashion, <CODE>$0</CODE>
+is set to the name of the file, and the positional parameters
+are set to the remaining arguments.
+Bash reads and executes commands from this file, then exits.   
+Bash's exit status is the exit status of the last command executed
+in the script.  If no commands are executed, the exit status is 0.
+
+</P>
+
+
+<H2><A NAME="SEC61" HREF="bashref.html#TOC61">Bash Startup Files</A></H2>
+<P>
+<A NAME="IDX131"></A>
+
+</P>
+<P>
+This section describs how Bash executes its startup files.
+If any of the files exist but cannot be read, Bash reports an error.
+Tildes are expanded in file names as described above under
+Tilde Expansion (see section <A HREF="bashref.html#SEC28">Tilde Expansion</A>).
+
+</P>
+<P>
+When Bash is invoked as an interactive login shell, or as a
+non-interactive shell with the <SAMP>`--login'</SAMP> option, it first reads 
and
+executes commands from the file <TT>`/etc/profile'</TT>, if that file exists.
+After reading that file, it looks for <TT>`~/.bash_profile'</TT>,
+<TT>`~/.bash_login'</TT>, and <TT>`~/.profile'</TT>, in that order, and reads
+and executes commands from the first one that exists and is readable.
+The <SAMP>`--noprofile'</SAMP> option may be used when the shell is started to
+inhibit this behavior.
+
+</P>
+<P>
+When a login shell exits, Bash reads and executes commands from
+the file <TT>`~/.bash_logout'</TT>, if it exists.
+
+</P>
+<P>
+When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from <TT>`~/.bashrc'</TT>, if that file exists.
+This may be inhibited by using the <SAMP>`--norc'</SAMP> option.
+The <SAMP>`--rcfile <VAR>file</VAR>'</SAMP> option will force Bash to read and
+execute commands from <VAR>file</VAR> instead of <TT>`~/.bashrc'</TT>.
+
+</P>
+<P>
+So, typically, your <TT>`~/.bash_profile'</TT> contains the line
+
+<PRE>
+<CODE>if [ -f <TT>`~/.bashrc'</TT> ]; then . <TT>`~/.bashrc'</TT>; fi</CODE>
+</PRE>
+
+<P>
+after (or before) any login-specific initializations.
+
+</P>
+<P>
+When Bash is started non-interactively, to run a shell script,
+for example, it looks for the variable <CODE>BASH_ENV</CODE> in the 
environment,
+expands its value if it appears there, and uses the expanded value as
+the name of a file to read and execute.  Bash behaves as if the
+following command were executed:
+
+<PRE>
+<CODE>if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi</CODE>
+</PRE>
+
+<P>
+but the value of the <CODE>PATH</CODE> variable is not used to search for the
+file name.
+
+</P>
+<P>
+If Bash is invoked with the name <CODE>sh</CODE>, it tries to mimic the
+startup behavior of historical versions of <CODE>sh</CODE> as closely as
+possible, while conforming to the POSIX standard as well.
+
+</P>
+<P>
+When invoked as an interactive login shell, or as a non-interactive
+shell with the <SAMP>`--login'</SAMP> option, it first attempts to read
+and execute commands from <TT>`/etc/profile'</TT> and <TT>`~/.profile'</TT>, in
+that order.
+The <SAMP>`--noprofile'</SAMP> option may be used to inhibit this behavior.
+When invoked as an interactive shell with the name <CODE>sh</CODE>, Bash
+looks for the variable <CODE>ENV</CODE>, expands its value if it is defined,
+and uses the expanded value as the name of a file to read and execute.
+Since a shell invoked as <CODE>sh</CODE> does not attempt to read and execute
+commands from any other startup files, the <SAMP>`--rcfile'</SAMP> option has
+no effect.
+A non-interactive shell invoked with the name <CODE>sh</CODE> does not attempt
+to read any other startup files.
+
+</P>
+<P>
+When invoked as <CODE>sh</CODE>, Bash enters POSIX mode after
+the startup files are read.
+
+</P>
+<P>
+When Bash is started in POSIX mode, as with the
+<SAMP>`--posix'</SAMP> command line option, it follows the POSIX standard
+for startup files.
+In this mode, interactive shells expand the <CODE>ENV</CODE> variable
+and commands are read and executed from the file whose name is the
+expanded value.
+No other startup files are read.
+
+</P>
+<P>
+Bash attempts to determine when it is being run by the remote shell
+daemon, usually <CODE>rshd</CODE>.  If Bash determines it is being run by
+rshd, it reads and executes commands from <TT>`~/.bashrc'</TT>, if that
+file exists and is readable.
+It will not do this if invoked as <CODE>sh</CODE>.
+The <SAMP>`--norc'</SAMP> option may be used to inhibit this behavior, and the
+<SAMP>`--rcfile'</SAMP> option may be used to force another file to be read, 
but
+<CODE>rshd</CODE> does not generally invoke the shell with those options or
+allow them to be specified.
+
+</P>
+<P>
+If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the <CODE>-p</CODE> option is not supplied, no 
startup
+files are read, shell functions are not inherited from the environment,
+the <CODE>SHELLOPTS</CODE> variable, if it appears in the environment, is 
ignored,
+and the effective user id is set to the real user id.
+If the <CODE>-p</CODE> option is supplied at invocation, the startup behavior 
is
+the same, but the effective user id is not reset.
+
+</P>
+
+
+<H2><A NAME="SEC62" HREF="bashref.html#TOC62">Is This Shell 
Interactive?</A></H2>
+<P>
+<A NAME="IDX132"></A>
+
+</P>
+<P>
+As defined in section <A HREF="bashref.html#SEC60">Invoking Bash</A>, an 
interactive shell
+is one whose input and output are both
+connected to terminals (as determined by <CODE>isatty(3)</CODE>),
+or one started with the <SAMP>`-i'</SAMP> option.
+
+</P>
+<P>
+To determine within a startup script whether Bash is
+running interactively or not, examine the variable
+<CODE>$PS1</CODE>; it is unset in non-interactive shells, and set in
+interactive shells.  Thus:
+
+</P>
+
+<PRE>
+if [ -z "$PS1" ]; then
+        echo This shell is not interactive
+else
+        echo This shell is interactive
+fi
+</PRE>
+
+<P>
+Alternatively, startup scripts may test the value of the <SAMP>`-'</SAMP>
+special parameter.
+It contains <CODE>i</CODE> when the shell is interactive.  For example:
+
+</P>
+
+<PRE>
+case "$-" in
+*i*)   echo This shell is interactive ;;
+*)     echo This shell is not interactive ;;
+esac
+</PRE>
+
+
+
+<H2><A NAME="SEC63" HREF="bashref.html#TOC63">Bash Builtin Commands</A></H2>
+
+<P>
+This section describes builtin commands which are unique to
+or have been extended in Bash.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>bind</CODE>
+<DD>
+<A NAME="IDX133"></A>
+
+<PRE>
+bind [-m <VAR>keymap</VAR>] [-lpsvPSV]
+bind [-m <VAR>keymap</VAR>] [-q <VAR>function</VAR>] [-u <VAR>function</VAR>] 
[-r <VAR>keyseq</VAR>]
+bind [-m <VAR>keymap</VAR>] -f <VAR>filename</VAR>
+bind [-m <VAR>keymap</VAR>] <VAR>keyseq:function-name</VAR>
+</PRE>
+
+Display current Readline (see section <A HREF="bashref.html#SEC86">Command 
Line Editing</A>)
+key and function bindings, or
+bind a key sequence to a Readline function or macro.  The
+binding syntax accepted is identical to that of
+<TT>`.inputrc'</TT> (see section <A HREF="bashref.html#SEC94">Readline Init 
File</A>),
+but each binding must be passed as a separate argument:  e.g.,
+<SAMP>`"\C-x\C-r":re-read-init-file'</SAMP>.
+Options, if supplied, have the following meanings:
+
+<DL COMPACT>
+
+<DT><CODE>-m <VAR>keymap</VAR></CODE>
+<DD>
+Use <VAR>keymap</VAR> as the keymap to be affected by
+the subsequent bindings.  Acceptable <VAR>keymap</VAR>
+names are
+<CODE>emacs</CODE>,
+<CODE>emacs-standard</CODE>,
+<CODE>emacs-meta</CODE>,
+<CODE>emacs-ctlx</CODE>,
+<CODE>vi</CODE>,
+<CODE>vi-command</CODE>, and
+<CODE>vi-insert</CODE>.
+<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>;
+<CODE>emacs</CODE> is equivalent to <CODE>emacs-standard</CODE>.
+
+<DT><CODE>-l</CODE>
+<DD>
+List the names of all Readline functions.
+
+<DT><CODE>-p</CODE>
+<DD>
+Display Readline function names and bindings in such a way that they
+can be re-read.
+
+<DT><CODE>-P</CODE>
+<DD>
+List current Readline function names and bindings.
+
+<DT><CODE>-v</CODE>
+<DD>
+Display Readline variable names and values in such a way that they
+can be re-read.
+
+<DT><CODE>-V</CODE>
+<DD>
+List current Readline variable names and values.
+
+<DT><CODE>-s</CODE>
+<DD>
+Display Readline key sequences bound to macros and the strings they output
+in such a way that they can be re-read.
+
+<DT><CODE>-S</CODE>
+<DD>
+Display Readline key sequences bound to macros and the strings they output.
+
+<DT><CODE>-f <VAR>filename</VAR></CODE>
+<DD>
+Read key bindings from <VAR>filename</VAR>.
+
+<DT><CODE>-q <VAR>function</VAR></CODE>
+<DD>
+Query about which keys invoke the named <VAR>function</VAR>.
+
+<DT><CODE>-u <VAR>function</VAR></CODE>
+<DD>
+Unbind all keys bound to the named <VAR>function</VAR>.
+
+<DT><CODE>-r <VAR>keyseq</VAR></CODE>
+<DD>
+Remove any current binding for <VAR>keyseq</VAR>.
+
+</DL>
+
+The return status is zero unless an invalid option is supplied or an
+error occurs.
+
+<DT><CODE>builtin</CODE>
+<DD>
+<A NAME="IDX134"></A>
+
+<PRE>
+builtin [<VAR>shell-builtin</VAR> [<VAR>args</VAR>]]
+</PRE>
+
+Run a shell builtin, passing it <VAR>args</VAR>, and return its exit status.
+This is useful when defining a shell function with the same
+name as a shell builtin, retaining the functionality of the builtin within
+the function.
+The return status is non-zero if <VAR>shell-builtin</VAR> is not a shell
+builtin command.
+
+<DT><CODE>command</CODE>
+<DD>
+<A NAME="IDX135"></A>
+
+<PRE>
+command [-pVv] <VAR>command</VAR> [<VAR>arguments</VAR> ...]
+</PRE>
+
+Runs <VAR>command</VAR> with <VAR>arguments</VAR> ignoring any shell function
+named <VAR>command</VAR>.
+Only shell builtin commands or commands found by searching the
+<CODE>PATH</CODE> are executed.
+If there is a shell function named <CODE>ls</CODE>, running <SAMP>`command 
ls'</SAMP>
+within the function will execute the external command <CODE>ls</CODE>
+instead of calling the function recursively.
+The <SAMP>`-p'</SAMP> option means to use a default value for 
<CODE>$PATH</CODE>
+that is guaranteed to find all of the standard utilities.
+The return status in this case is 127 if <VAR>command</VAR> cannot be
+found or an error occurred, and the exit status of <VAR>command</VAR>
+otherwise.
+
+If either the <SAMP>`-V'</SAMP> or <SAMP>`-v'</SAMP> option is supplied, a
+description of <VAR>command</VAR> is printed.  The <SAMP>`-v'</SAMP> option
+causes a single word indicating the command or file name used to
+invoke <VAR>command</VAR> to be displayed; the <SAMP>`-V'</SAMP> option 
produces
+a more verbose description.  In this case, the return status is
+zero if <VAR>command</VAR> is found, and non-zero if not.
+
+<DT><CODE>declare</CODE>
+<DD>
+<A NAME="IDX136"></A>
+
+<PRE>
+declare [-afFrxi] [-p] [<VAR>name</VAR>[=<VAR>value</VAR>]]
+</PRE>
+
+Declare variables and give them attributes.  If no <VAR>name</VAR>s
+are given, then display the values of variables instead. 
+
+The <SAMP>`-p'</SAMP> option will display the attributes and values of each
+<VAR>name</VAR>.  When <SAMP>`-p'</SAMP> is used, additional options are 
ignored.
+The <SAMP>`-F'</SAMP> option inhibits the display of function definitions;
+only the function name and attributes are printed.  <SAMP>`-F'</SAMP> implies
+<SAMP>`-f'</SAMP>.  The following options can be used to restrict output
+to variables with the specified attributes or to give variables
+attributes:
+
+<DL COMPACT>
+
+<DT><CODE>-a</CODE>
+<DD>
+Each <VAR>name</VAR> is an array variable (see section <A 
HREF="bashref.html#SEC70">Arrays</A>).
+
+<DT><CODE>-f</CODE>
+<DD>
+Use function names only.
+
+<DT><CODE>-i</CODE>
+<DD>
+The variable is to be treated as
+an integer; arithmetic evaluation (see section <A 
HREF="bashref.html#SEC67">Shell Arithmetic</A>) is
+performed when the variable is assigned a value.
+
+<DT><CODE>-r</CODE>
+<DD>
+Make <VAR>name</VAR>s readonly.  These names cannot then be assigned values
+by subsequent assignment statements or unset.
+
+<DT><CODE>-x</CODE>
+<DD>
+Mark each <VAR>name</VAR> for export to subsequent commands via
+the environment.
+</DL>
+
+Using <SAMP>`+'</SAMP> instead of <SAMP>`-'</SAMP> turns off the attribute 
instead.
+When used in a function, <CODE>declare</CODE> makes each <VAR>name</VAR> local,
+as with the <CODE>local</CODE> command. 
+
+The return status is zero unless an invalid option is encountered,
+an attempt is made to define a function using <CODE>-f foo=bar</CODE>,
+an attempt is made to assign a value to a readonly variable,
+an attempt is made to assign a value to an array variable without
+using the compound assignment syntax (see section <A 
HREF="bashref.html#SEC70">Arrays</A>),
+one of the <VAR>names</VAR> is not a valid shell variable name,
+an attempt is made to turn off readonly status for a readonly variable,
+an attempt is made to turn off array status for an array variable,
+or an attempt is made to display a non-existent function with 
<SAMP>`-f'</SAMP>.
+
+<DT><CODE>echo</CODE>
+<DD>
+<A NAME="IDX137"></A>
+
+<PRE>
+echo [-neE] [<VAR>arg</VAR> ...]
+</PRE>
+
+Output the <VAR>arg</VAR>s, separated by spaces, terminated with a
+newline.
+The return status is always 0.
+If <SAMP>`-n'</SAMP> is specified, the trailing newline is suppressed.
+If the <SAMP>`-e'</SAMP> option is given, interpretation of the following
+backslash-escaped characters is enabled.
+The <SAMP>`-E'</SAMP> option disables the interpretation of these escape 
characters,
+even on systems where they are interpreted by default.
+<CODE>echo</CODE> interprets the following escape sequences:
+<DL COMPACT>
+
+<DT><CODE>\a</CODE>
+<DD>
+alert (bell)
+<DT><CODE>\b</CODE>
+<DD>
+backspace
+<DT><CODE>\c</CODE>
+<DD>
+suppress trailing newline
+<DT><CODE>\e</CODE>
+<DD>
+escape
+<DT><CODE>\f</CODE>
+<DD>
+form feed
+<DT><CODE>\n</CODE>
+<DD>
+new line
+<DT><CODE>\r</CODE>
+<DD>
+carriage return
+<DT><CODE>\t</CODE>
+<DD>
+horizontal tab
+<DT><CODE>\v</CODE>
+<DD>
+vertical tab
+<DT><CODE>\\</CODE>
+<DD>
+backslash
+<DT><CODE>\<VAR>nnn</VAR></CODE>
+<DD>
+the character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR>
+(one to three digits)
+<DT><CODE>\x<VAR>nnn</VAR></CODE>
+<DD>
+the character whose <CODE>ASCII</CODE> code is the hexadecimal value 
<VAR>nnn</VAR>
+(one to three digits)
+</DL>
+
+<DT><CODE>enable</CODE>
+<DD>
+<A NAME="IDX138"></A>
+
+<PRE>
+enable [-n] [-p] [-f <VAR>filename</VAR>] [-ads] [<VAR>name</VAR> ...]
+</PRE>
+
+Enable and disable builtin shell commands.
+Disabling a builtin allows a disk command which has the same name
+as a shell builtin to be executed with specifying a full pathname,
+even though the shell normally searches for builtins before disk commands.
+If <SAMP>`-n'</SAMP> is used, the <VAR>name</VAR>s become disabled.  Otherwise
+<VAR>name</VAR>s are enabled.  For example, to use the <CODE>test</CODE> binary
+found via <CODE>$PATH</CODE> instead of the shell builtin version, type
+<SAMP>`enable -n test'</SAMP>.
+
+If the <SAMP>`-p'</SAMP> option is supplied, or no <VAR>name</VAR> arguments 
appear,
+a list of shell builtins is printed.  With no other arguments, the list
+consists of all enabled shell builtins.
+The <SAMP>`-a'</SAMP> option means to list
+each builtin with an indication of whether or not it is enabled. 
+
+The <SAMP>`-f'</SAMP> option means to load the new builtin command 
<VAR>name</VAR>
+from shared object <VAR>filename</VAR>, on systems that support dynamic 
loading.
+The <SAMP>`-d'</SAMP> option will delete a builtin loaded with 
<SAMP>`-f'</SAMP>.
+
+If there are no options, a list of the shell builtins is displayed.
+The <SAMP>`-s'</SAMP> option restricts <CODE>enable</CODE> to the POSIX special
+builtins.  If <SAMP>`-s'</SAMP> is used with <SAMP>`-f'</SAMP>, the new 
builtin becomes
+a special builtin.
+
+The return status is zero unless a <VAR>name</VAR> is not a shell builtin
+or there is an error loading a new builtin from a shared object.
+
+<DT><CODE>help</CODE>
+<DD>
+<A NAME="IDX139"></A>
+
+<PRE>
+help [<VAR>pattern</VAR>]
+</PRE>
+
+Display helpful information about builtin commands.
+If <VAR>pattern</VAR> is specified, <CODE>help</CODE> gives detailed help
+on all commands matching <VAR>pattern</VAR>, otherwise a list of
+the builtins is printed.  The return status is zero unless no
+command matches <VAR>pattern</VAR>.
+
+<DT><CODE>let</CODE>
+<DD>
+<A NAME="IDX140"></A>
+
+<PRE>
+let <VAR>expression</VAR> [<VAR>expression</VAR>]
+</PRE>
+
+The <CODE>let</CODE> builtin allows arithmetic to be performed on shell
+variables.  Each <VAR>expression</VAR> is evaluated according to the
+rules given below in section <A HREF="bashref.html#SEC67">Shell 
Arithmetic</A>.  If the
+last <VAR>expression</VAR> evaluates to 0, <CODE>let</CODE> returns 1;
+otherwise 0 is returned.
+
+<DT><CODE>local</CODE>
+<DD>
+<A NAME="IDX141"></A>
+
+<PRE>
+local <VAR>name</VAR>[=<VAR>value</VAR>]
+</PRE>
+
+For each argument, a local variable named <VAR>name</VAR> is created,
+and assigned <VAR>value</VAR>.
+<CODE>local</CODE> can only be used within a function; it makes the variable
+<VAR>name</VAR> have a visible scope restricted to that function and its
+children.  The return status is zero unless <CODE>local</CODE> is used outside
+a function or an invalid <VAR>name</VAR> is supplied.
+
+<DT><CODE>logout</CODE>
+<DD>
+<A NAME="IDX142"></A>
+
+<PRE>
+logout [<VAR>n</VAR>]
+</PRE>
+
+Exit a login shell, returning a status of <VAR>n</VAR> to the shell's
+parent.
+
+<DT><CODE>printf</CODE>
+<DD>
+<A NAME="IDX143"></A>
+
+<PRE>
+<CODE>printf</CODE> <VAR>format</VAR> [<VAR>arguments</VAR>]
+</PRE>
+
+Write the formatted <VAR>arguments</VAR> to the standard output under the
+control of the <VAR>format</VAR>.
+The <VAR>format</VAR> is a character string which contains three types of 
objects:
+plain characters, which are simply copied to standard output, character
+escape sequences, which are converted and copied to the standard output, and
+format specifications, each of which causes printing of the next successive
+<VAR>argument</VAR>.
+In addition to the standard <CODE>printf(1)</CODE> formats, <SAMP>`%b'</SAMP> 
causes
+<CODE>printf</CODE> to expand backslash escape sequences in the corresponding
+<VAR>argument</VAR>, and <SAMP>`%q'</SAMP> causes <CODE>printf</CODE> to 
output the
+corresponding <VAR>argument</VAR> in a format that can be reused as shell 
input.
+
+The <VAR>format</VAR> is reused as necessary to consume all of the 
<VAR>arguments</VAR>.
+If the <VAR>format</VAR> requires more <VAR>arguments</VAR> than are supplied, 
the
+extra format specifications behave as if a zero value or null string, as
+appropriate, had been supplied.
+
+<DT><CODE>read</CODE>
+<DD>
+<A NAME="IDX144"></A>
+
+<PRE>
+read [-a <VAR>aname</VAR>] [-p <VAR>prompt</VAR>] [-er] [<VAR>name</VAR> ...]
+</PRE>
+
+One line is read from the standard input, and the first word
+is assigned to the first <VAR>name</VAR>, the second word to the second 
<VAR>name</VAR>,
+and so on, with leftover words and their intervening separators assigned
+to the last <VAR>name</VAR>.
+If there are fewer words read from the standard input than names,
+the remaining names are assigned empty values.
+The characters in the value of the <CODE>IFS</CODE> variable
+are used to split the line into words.
+The backslash character <SAMP>`\'</SAMP> may be used to remove any special
+meaning for the next character read and for line continuation.
+If no names are supplied, the line read is assigned to the
+variable <CODE>REPLY</CODE>.
+The return code is zero, unless end-of-file is encountered.
+Options, if supplied, have the following meanings:
+
+<DL COMPACT>
+
+<DT><CODE>-r</CODE>
+<DD>
+If this option is given, backslash does not act as an escape
+character.  The backslash is considered to be part of the line.
+In particular, a backslash-newline pair may not be used as a line
+continuation.
+
+<DT><CODE>-p <VAR>prompt</VAR></CODE>
+<DD>
+Display <VAR>prompt</VAR>, without a
+trailing newline, before attempting to read any input.  The prompt
+is displayed only if input is coming from a terminal.
+
+<DT><CODE>-a <VAR>aname</VAR></CODE>
+<DD>
+The words are assigned to sequential indices of the array variable
+<VAR>aname</VAR>, starting at 0.
+All elements are removed from <VAR>aname</VAR> before the assignment.
+Other <VAR>name</VAR> arguments are ignored.
+
+<DT><CODE>-e</CODE>
+<DD>
+Readline (see section <A HREF="bashref.html#SEC86">Command Line Editing</A>)
+is used to obtain the line.
+</DL>
+
+<DT><CODE>shopt</CODE>
+<DD>
+<A NAME="IDX145"></A>
+
+<PRE>
+shopt [-pqsu] [-o] [<VAR>optname</VAR> ...]
+</PRE>
+
+Toggle the values of variables controlling optional shell behavior.
+With no options, or with the <SAMP>`-p'</SAMP> option, a list of all settable
+options is displayed, with an indication of whether or not each is set.
+The <SAMP>`-p'</SAMP> option causes output to be displayed in a form that
+may be reused as input.
+Other options have the following meanings:
+
+<DL COMPACT>
+
+<DT><CODE>-s</CODE>
+<DD>
+Enable (set) each <VAR>optname</VAR>.
+
+<DT><CODE>-u</CODE>
+<DD>
+Disable (unset) each <VAR>optname</VAR>.
+
+<DT><CODE>-q</CODE>
+<DD>
+Suppresses normal output; the return status
+indicates whether the <VAR>optname</VAR> is set or unset.
+If multiple <VAR>optname</VAR> arguments are given with <SAMP>`-q'</SAMP>,
+the return status is zero if all <VAR>optnames</VAR> are enabled;
+non-zero otherwise.
+
+<DT><CODE>-o</CODE>
+<DD>
+Restricts the values of
+<VAR>optname</VAR> to be those defined for the <SAMP>`-o'</SAMP> option to the
+<CODE>set</CODE> builtin (see section <A HREF="bashref.html#SEC64">The Set 
Builtin</A>).
+</DL>
+
+If either <SAMP>`-s'</SAMP> or <SAMP>`-u'</SAMP>
+is used with no <VAR>optname</VAR> arguments, the display is limited to
+those options which are set or unset, respectively.
+
+Unless otherwise noted, the <CODE>shopt</CODE> options are disabled (off)
+by default.
+
+The return status when listing options is zero if all <VAR>optnames</VAR>
+are enabled, non-zero otherwise.  When setting or unsetting options,
+the return status is zero unless an <VAR>optname</VAR> is not a valid shell
+option.
+
+The list of <CODE>shopt</CODE> options is:
+<DL COMPACT>
+
+<DT><CODE>cdable_vars</CODE>
+<DD>
+If this is set, an argument to the <CODE>cd</CODE>
+builtin command that
+is not a directory is assumed to be the name of a variable whose
+value is the directory to change to.
+
+<DT><CODE>cdspell</CODE>
+<DD>
+If set, minor errors in the spelling of a directory component in a
+<CODE>cd</CODE> command will be corrected.
+The errors checked for are transposed characters,
+a missing character, and a character too many.
+If a correction is found, the corrected path is printed,
+and the command proceeds.
+This option is only used by interactive shells.
+
+<DT><CODE>checkhash</CODE>
+<DD>
+If this is set, Bash checks that a command found in the hash
+table exists before trying to execute it.  If a hashed command no
+longer exists, a normal path search is performed.
+
+<DT><CODE>checkwinsize</CODE>
+<DD>
+If set, Bash checks the window size after each command
+and, if necessary, updates the values of    
+<CODE>LINES</CODE> and <CODE>COLUMNS</CODE>.
+
+<DT><CODE>cmdhist</CODE>
+<DD>
+If set, Bash
+attempts to save all lines of a multiple-line
+command in the same history entry.  This allows
+easy re-editing of multi-line commands.
+
+<DT><CODE>dotglob</CODE>
+<DD>
+If set, Bash includes filenames beginning with a `.' in
+the results of filename expansion.
+
+<DT><CODE>execfail</CODE>
+<DD>
+If this is set, a non-interactive shell will not exit if
+it cannot execute the file specified as an argument to the <CODE>exec</CODE>
+builtin command.  An interactive shell does not exit if <CODE>exec</CODE>
+fails.
+
+<DT><CODE>expand_aliases</CODE>
+<DD>
+If set, aliases are expanded as described below&#60; under Aliases
+(see section <A HREF="bashref.html#SEC68">Aliases</A>).
+This option is enabled by default for interactive shells.
+
+<DT><CODE>extglob</CODE>
+<DD>
+If set, the extended pattern matching features described above
+(see section <A HREF="bashref.html#SEC35">Pattern Matching</A>) are enabled.
+
+<DT><CODE>histappend</CODE>
+<DD>
+If set, the history list is appended to the file named by the value
+of the <CODE>HISTFILE</CODE>
+variable when the shell exits, rather than overwriting the file.
+
+<DT><CODE>histreedit</CODE>
+<DD>
+If set, and Readline
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+
+<DT><CODE>histverify</CODE>
+<DD>
+If set, and Readline
+is being used, the results of history substitution are not immediately
+passed to the shell parser.  Instead, the resulting line is loaded into
+the Readline editing buffer, allowing further modification.
+
+<DT><CODE>hostcomplete</CODE>
+<DD>
+If set, and Readline is being used, Bash will attempt to perform
+hostname completion when a word containing a <SAMP>`@'</SAMP> is being
+completed (see section <A HREF="bashref.html#SEC104">Letting Readline Type For 
You</A>).  This option is enabled
+by default.
+
+<DT><CODE>huponexit</CODE>
+<DD>
+If set, Bash will send <CODE>SIGHUP</CODE> to all jobs when an interactive
+login shell exits (see section <A HREF="bashref.html#SEC51">Signals</A>).
+
+<DT><CODE>interactive_comments</CODE>
+<DD>
+Allow a word beginning with <SAMP>`#'</SAMP>
+to cause that word and all remaining characters on that
+line to be ignored in an interactive shell.
+This option is enabled by default.
+
+<DT><CODE>lithist</CODE>
+<DD>
+If enabled, and the <CODE>cmdhist</CODE>
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
+
+<DT><CODE>mailwarn</CODE>
+<DD>
+If set, and a file that Bash is checking for mail has been  
+accessed since the last time it was checked, the message
+<CODE>"The mail in <VAR>mailfile</VAR> has been read"</CODE> is displayed.
+
+<DT><CODE>nocaseglob</CODE>
+<DD>
+If set, Bash matches filenames in a case-insensitive fashion when
+performing filename expansion.
+
+<DT><CODE>nullglob</CODE>
+<DD>
+If set, Bash allows filename patterns which match no
+files to expand to a null string, rather than themselves.
+
+<DT><CODE>promptvars</CODE>
+<DD>
+If set, prompt strings undergo variable and parameter expansion after
+being expanded (see section <A HREF="bashref.html#SEC72">Controlling the 
Prompt</A>).
+This option is enabled by default.
+
+<DT><CODE>restricted_shell</CODE>
+<DD>
+The shell sets this option if it is started in restricted mode
+(see section <A HREF="bashref.html#SEC73">The Restricted Shell</A>).
+The value may not be changed.
+This is not reset when the startup files are executed, allowing
+the startup files to discover whether or not a shell is restricted.
+
+<DT><CODE>shift_verbose</CODE>
+<DD>
+If this is set, the <CODE>shift</CODE>
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+
+<DT><CODE>sourcepath</CODE>
+<DD>
+If set, the <CODE>source</CODE> builtin uses the value of <CODE>PATH</CODE>
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
+</DL>
+
+The return status when listing options is zero if all <VAR>optnames</VAR>
+are enabled, non-zero otherwise.
+When setting or unsetting options, the return status is zero unless an
+<VAR>optname</VAR> is not a valid shell option.
+
+<DT><CODE>source</CODE>
+<DD>
+<A NAME="IDX146"></A>
+
+<PRE>
+source <VAR>filename</VAR>
+</PRE>
+
+A synonym for <CODE>.</CODE> (see section <A HREF="bashref.html#SEC54">Bourne 
Shell Builtins</A>).
+
+<DT><CODE>type</CODE>
+<DD>
+<A NAME="IDX147"></A>
+
+<PRE>
+type [-atp] [<VAR>name</VAR> ...]
+</PRE>
+
+For each <VAR>name</VAR>, indicate how it would be interpreted if used as a
+command name.
+
+If the <SAMP>`-t'</SAMP> option is used, <CODE>type</CODE> prints a single word
+which is one of <SAMP>`alias'</SAMP>, <SAMP>`function'</SAMP>, 
<SAMP>`builtin'</SAMP>,
+<SAMP>`file'</SAMP> or <SAMP>`keyword'</SAMP>,
+if <VAR>name</VAR> is an alias, shell function, shell builtin,
+disk file, or shell reserved word, respectively.
+If the <VAR>name</VAR> is not found, then nothing is printed, and
+<CODE>type</CODE> returns a failure status.
+
+If the <SAMP>`-p'</SAMP> option is used, <CODE>type</CODE> either returns the 
name
+of the disk file that would be executed, or nothing if <SAMP>`-t'</SAMP>
+would not return <SAMP>`file'</SAMP>.
+
+If the <SAMP>`-a'</SAMP> option is used, <CODE>type</CODE> returns all of the 
places
+that contain an executable named <VAR>file</VAR>.
+This includes aliases and functions, if and only if the <SAMP>`-p'</SAMP> 
option
+is not also used.
+
+The return status is zero if any of the <VAR>names</VAR> are found, non-zero
+if none are found.
+
+<DT><CODE>typeset</CODE>
+<DD>
+<A NAME="IDX148"></A>
+
+<PRE>
+typeset [-afFrxi] [-p] [<VAR>name</VAR>[=<VAR>value</VAR>]]
+</PRE>
+
+The <CODE>typeset</CODE> command is supplied for compatibility with the Korn
+shell; however, it has been deprecated in favor of the <CODE>declare</CODE>
+builtin command.
+
+<DT><CODE>ulimit</CODE>
+<DD>
+<A NAME="IDX149"></A>
+
+<PRE>
+ulimit [-acdflmnpstuvSH] [<VAR>limit</VAR>]
+</PRE>
+
+<CODE>ulimit</CODE> provides control over the resources available to processes
+started by the shell, on systems that allow such control.  If an
+option is given, it is interpreted as follows:
+<DL COMPACT>
+
+<DT><CODE>-S</CODE>
+<DD>
+Change and report the soft limit associated with a resource.
+
+<DT><CODE>-H</CODE>
+<DD>
+Change and report the hard limit associated with a resource.
+
+<DT><CODE>-a</CODE>
+<DD>
+All current limits are reported.
+
+<DT><CODE>-c</CODE>
+<DD>
+The maximum size of core files created.
+
+<DT><CODE>-d</CODE>
+<DD>
+The maximum size of a process's data segment.
+
+<DT><CODE>-f</CODE>
+<DD>
+The maximum size of files created by the shell.
+
+<DT><CODE>-l</CODE>
+<DD>
+The maximum size that may be locked into memory.
+
+<DT><CODE>-m</CODE>
+<DD>
+The maximum resident set size.
+
+<DT><CODE>-n</CODE>
+<DD>
+The maximum number of open file descriptors.
+
+<DT><CODE>-p</CODE>
+<DD>
+The pipe buffer size.
+
+<DT><CODE>-s</CODE>
+<DD>
+The maximum stack size.
+
+<DT><CODE>-t</CODE>
+<DD>
+The maximum amount of cpu time in seconds.
+
+<DT><CODE>-u</CODE>
+<DD>
+The maximum number of processes available to a single user.
+
+<DT><CODE>-v</CODE>
+<DD>
+The maximum amount of virtual memory available to the process.
+
+</DL>
+
+If <VAR>limit</VAR> is given, it is the new value of the specified resource.
+Otherwise, the current value of the soft limit for the specified resource
+is printed, unless the <SAMP>`-H'</SAMP> option is supplied.
+When setting new limits, if neither <SAMP>`-H'</SAMP> nor <SAMP>`-S'</SAMP> is 
supplied,
+both the hard and soft limits are set.
+If no option is given, then <SAMP>`-f'</SAMP> is assumed.  Values are in 
1024-byte
+increments, except for <SAMP>`-t'</SAMP>, which is in seconds, 
<SAMP>`-p'</SAMP>,
+which is in units of 512-byte blocks, and <SAMP>`-n'</SAMP> and 
<SAMP>`-u'</SAMP>, which
+are unscaled values.
+
+The return status is zero unless an invalid option is supplied, a
+non-numeric argument other than <CODE>unlimited</CODE> is supplied as a
+<VAR>limit</VAR>, or an error occurs while setting a new limit.
+
+</DL>
+
+
+
+<H2><A NAME="SEC64" HREF="bashref.html#TOC64">The Set Builtin</A></H2>
+
+<P>
+This builtin is so complicated that it deserves its own section.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>set</CODE>
+<DD>
+<A NAME="IDX150"></A>
+
+<PRE>
+set [--abefhkmnptuvxBCHP] [-o <VAR>option</VAR>] [<VAR>argument</VAR> ...]
+</PRE>
+
+If no options or arguments are supplied, <CODE>set</CODE> displays the names
+and values of all shell variables and functions, sorted according to the
+current locale, in a format that may be reused as input.
+
+When options are supplied, they set or unset shell attributes.
+Options, if specified, have the following meanings:
+
+<DL COMPACT>
+
+<DT><CODE>-a</CODE>
+<DD>
+Mark variables which are modified or created for export.
+
+<DT><CODE>-b</CODE>
+<DD>
+Cause the status of terminated background jobs to be reported
+immediately, rather than before printing the next primary prompt.
+
+<DT><CODE>-e</CODE>
+<DD>
+Exit immediately if a simple command (see section <A 
HREF="bashref.html#SEC16">Simple Commands</A>) exits
+with a non-zero status, unless the command that fails is part of an
+<CODE>until</CODE> or <CODE>while</CODE> loop, part of an <CODE>if</CODE> 
statement,
+part of a <CODE>&#38;&#38;</CODE> or <CODE>||</CODE> list, or if the command's 
return
+status is being inverted using <CODE>!</CODE>.
+
+<DT><CODE>-f</CODE>
+<DD>
+Disable file name generation (globbing).
+
+<DT><CODE>-h</CODE>
+<DD>
+Locate and remember (hash) commands as they are looked up for execution.
+This option is enabled by default.
+
+<DT><CODE>-k</CODE>
+<DD>
+All arguments in the form of assignment statements are placed
+in the environment for a command, not just those that precede
+the command name.
+
+<DT><CODE>-m</CODE>
+<DD>
+Job control is enabled (see section <A HREF="bashref.html#SEC75">Job 
Control</A>).
+
+<DT><CODE>-n</CODE>
+<DD>
+Read commands but do not execute them; this may be used to check a
+script for syntax errors.
+This option is ignored by interactive shells.
+
+<DT><CODE>-o <VAR>option-name</VAR></CODE>
+<DD>
+Set the option corresponding to <VAR>option-name</VAR>:
+
+<DL COMPACT>
+
+<DT><CODE>allexport</CODE>
+<DD>
+Same as <CODE>-a</CODE>.
+
+<DT><CODE>braceexpand</CODE>
+<DD>
+Same as <CODE>-B</CODE>.
+
+<DT><CODE>emacs</CODE>
+<DD>
+Use an <CODE>emacs</CODE>-style line editing interface (see section <A 
HREF="bashref.html#SEC86">Command Line Editing</A>).
+
+<DT><CODE>errexit</CODE>
+<DD>
+Same as <CODE>-e</CODE>.
+
+<DT><CODE>hashall</CODE>
+<DD>
+Same as <CODE>-h</CODE>.
+
+<DT><CODE>histexpand</CODE>
+<DD>
+Same as <CODE>-H</CODE>.
+
+<DT><CODE>history</CODE>
+<DD>
+Enable command history, as described in section <A 
HREF="bashref.html#SEC80">Bash History Facilities</A>.
+This option is on by default in interactive shells.
+
+<DT><CODE>ignoreeof</CODE>
+<DD>
+An interactive shell will not exit upon reading EOF.
+
+<DT><CODE>keyword</CODE>
+<DD>
+Same as <CODE>-k</CODE>.
+
+<DT><CODE>monitor</CODE>
+<DD>
+Same as <CODE>-m</CODE>.
+
+<DT><CODE>noclobber</CODE>
+<DD>
+Same as <CODE>-C</CODE>.
+
+<DT><CODE>noexec</CODE>
+<DD>
+Same as <CODE>-n</CODE>.
+
+<DT><CODE>noglob</CODE>
+<DD>
+Same as <CODE>-f</CODE>.
+
+<DT><CODE>notify</CODE>
+<DD>
+Same as <CODE>-b</CODE>.
+
+<DT><CODE>nounset</CODE>
+<DD>
+Same as <CODE>-u</CODE>.
+
+<DT><CODE>onecmd</CODE>
+<DD>
+Same as <CODE>-t</CODE>.
+
+<DT><CODE>physical</CODE>
+<DD>
+Same as <CODE>-P</CODE>.
+
+<DT><CODE>posix</CODE>
+<DD>
+Change the behavior of Bash where the default operation differs
+from the POSIX 1003.2 standard to match the standard
+(see section <A HREF="bashref.html#SEC74">Bash POSIX Mode</A>).
+This is intended to make Bash behave as a strict superset of that
+standard.
+
+<DT><CODE>privileged</CODE>
+<DD>
+Same as <CODE>-p</CODE>.
+
+<DT><CODE>verbose</CODE>
+<DD>
+Same as <CODE>-v</CODE>.
+
+<DT><CODE>vi</CODE>
+<DD>
+Use a <CODE>vi</CODE>-style line editing interface.
+
+<DT><CODE>xtrace</CODE>
+<DD>
+Same as <CODE>-x</CODE>.
+</DL>
+
+<DT><CODE>-p</CODE>
+<DD>
+Turn on privileged mode.
+In this mode, the <CODE>$BASH_ENV</CODE> and <CODE>$ENV</CODE> files are not
+processed, shell functions are not inherited from the environment,
+and the <CODE>SHELLOPTS</CODE> variable, if it appears in the environment,
+is ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the <CODE>-p</CODE> option is not supplied, these 
actions
+are taken and the effective user id is set to the real user id.
+If the <CODE>-p</CODE> option is supplied at startup, the effective user id is
+not reset.
+Turning this option off causes the effective user
+and group ids to be set to the real user and group ids.
+
+<DT><CODE>-t</CODE>
+<DD>
+Exit after reading and executing one command.
+
+<DT><CODE>-u</CODE>
+<DD>
+Treat unset variables as an error when performing parameter expansion.
+An error message will be written to the standard error, and a non-interactive
+shell will exit.
+
+<DT><CODE>-v</CODE>
+<DD>
+Print shell input lines as they are read.
+
+<DT><CODE>-x</CODE>
+<DD>
+Print a trace of simple commands and their arguments after they are
+expanded and before they are executed.
+
+<DT><CODE>-B</CODE>
+<DD>
+The shell will perform brace expansion (see section <A 
HREF="bashref.html#SEC27">Brace Expansion</A>).
+This option is on by default.
+
+<DT><CODE>-C</CODE>
+<DD>
+Prevent output redirection using <SAMP>`&#62;'</SAMP>, 
<SAMP>`&#62;&#38;'</SAMP>, and <SAMP>`&#60;&#62;'</SAMP>
+from overwriting existing files.
+
+<DT><CODE>-H</CODE>
+<DD>
+Enable <SAMP>`!'</SAMP> style history substitution (see section <A 
HREF="bashref.html#SEC82">History Expansion</A>).
+This option is on by default for interactive shells.
+
+<DT><CODE>-P</CODE>
+<DD>
+If set, do not follow symbolic links when performing commands such as
+<CODE>cd</CODE> which change the current directory.  The physical directory
+is used instead.  By default, Bash follows
+the logical chain of directories when performing commands
+which change the current directory.
+
+For example, if <TT>`/usr/sys'</TT> is a symbolic link to 
<TT>`/usr/local/sys'</TT>
+then:
+
+<PRE>
+$ cd /usr/sys; echo $PWD
+/usr/sys
+$ cd ..; pwd
+/usr
+</PRE>
+
+If <CODE>set -P</CODE> is on, then:
+
+<PRE>
+$ cd /usr/sys; echo $PWD
+/usr/local/sys
+$ cd ..; pwd
+/usr/local
+</PRE>
+
+<DT><CODE>--</CODE>
+<DD>
+If no arguments follow this option, then the positional parameters are
+unset.  Otherwise, the positional parameters are set to the
+<VAR>arguments</VAR>, even if some of them begin with a <SAMP>`-'</SAMP>.
+
+<DT><CODE>-</CODE>
+<DD>
+Signal the end of options, cause all remaining <VAR>arguments</VAR>
+to be assigned to the positional parameters.  The <SAMP>`-x'</SAMP>
+and <SAMP>`-v'</SAMP>  options are turned off.
+If there are no arguments, the positional parameters remain unchanged.
+</DL>
+
+Using <SAMP>`+'</SAMP> rather than <SAMP>`-'</SAMP> causes these options to be
+turned off.  The options can also be used upon invocation of the
+shell.  The current set of options may be found in <CODE>$-</CODE>.
+
+The remaining N <VAR>arguments</VAR> are positional parameters and are
+assigned, in order, to <CODE>$1</CODE>, <CODE>$2</CODE>, ...  <CODE>$N</CODE>.
+The special parameter <CODE>#</CODE> is set to N.
+
+The return status is always zero unless an invalid option is supplied.
+</DL>
+
+
+
+<H2><A NAME="SEC65" HREF="bashref.html#TOC65">Bash Conditional 
Expressions</A></H2>
+<P>
+<A NAME="IDX151"></A>
+
+</P>
+<P>
+Conditional expressions are used by the <CODE>[[</CODE> compound command
+and the <CODE>test</CODE> and <CODE>[</CODE> builtin commands.
+
+</P>
+<P>
+Expressions may be unary or binary.
+Unary expressions are often used to examine the status of a file.
+There are string operators and numeric comparison operators as well.
+If any <VAR>file</VAR> argument to one of the primaries is of the form
+<TT>`/dev/fd/<VAR>N</VAR>'</TT>, then file descriptor <VAR>N</VAR> is checked.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>-a <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists.
+
+<DT><CODE>-b <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a block special file.
+
+<DT><CODE>-c <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a character special file.
+
+<DT><CODE>-d <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a directory.
+
+<DT><CODE>-e <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists.
+
+<DT><CODE>-f <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a regular file.
+
+<DT><CODE>-g <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and its set-group-id bit is set.
+
+<DT><CODE>-h <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a symbolic link.
+
+<DT><CODE>-k <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and its "sticky" bit is set.
+
+<DT><CODE>-p <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a named pipe (FIFO).
+
+<DT><CODE>-r <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is readable.
+
+<DT><CODE>-s <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and has a size greater than zero.
+
+<DT><CODE>-t <VAR>fd</VAR></CODE>
+<DD>
+True if file descriptor <VAR>fd</VAR> is open and refers to a terminal.
+
+<DT><CODE>-u <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and its set-user-id bit is set.
+
+<DT><CODE>-w <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is writable.
+
+<DT><CODE>-x <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is executable.
+
+<DT><CODE>-O <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is owned by the effective user id.
+
+<DT><CODE>-G <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is owned by the effective group id.
+
+<DT><CODE>-L <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a symbolic link.
+
+<DT><CODE>-S <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and is a socket.
+
+<DT><CODE>-N <VAR>file</VAR></CODE>
+<DD>
+True if <VAR>file</VAR> exists and has been modified since it was last read.
+
+<DT><CODE><VAR>file1</VAR> -nt <VAR>file2</VAR></CODE>
+<DD>
+True if <VAR>file1</VAR> is newer (according to
+modification date) than <VAR>file2</VAR>.
+
+<DT><CODE><VAR>file1</VAR> -ot <VAR>file2</VAR></CODE>
+<DD>
+True if <VAR>file1</VAR> is older than <VAR>file2</VAR>.
+
+<DT><CODE><VAR>file1</VAR> -ef <VAR>file2</VAR></CODE>
+<DD>
+True if <VAR>file1</VAR> and <VAR>file2</VAR> have the same device and
+inode numbers.
+
+<DT><CODE>-o <VAR>optname</VAR></CODE>
+<DD>
+True if shell option <VAR>optname</VAR> is enabled.
+The list of options appears in the description of the <SAMP>`-o'</SAMP>
+option to the <CODE>set</CODE> builtin (see section <A 
HREF="bashref.html#SEC64">The Set Builtin</A>).
+
+<DT><CODE>-z <VAR>string</VAR></CODE>
+<DD>
+True if the length of <VAR>string</VAR> is zero.
+
+<DT><CODE>-n <VAR>string</VAR></CODE>
+<DD>
+<DT><CODE><VAR>string</VAR></CODE>
+<DD>
+True if the length of <VAR>string</VAR> is non-zero.
+
+<DT><CODE><VAR>string1</VAR> == <VAR>string2</VAR></CODE>
+<DD>
+True if the strings are equal.
+<SAMP>`='</SAMP> may be used in place of <SAMP>`=='</SAMP>.
+
+<DT><CODE><VAR>string1</VAR> != <VAR>string2</VAR></CODE>
+<DD>
+True if the strings are not equal.
+
+<DT><CODE><VAR>string1</VAR> &#60; <VAR>string2</VAR></CODE>
+<DD>
+True if <VAR>string1</VAR> sorts before <VAR>string2</VAR> lexicographically
+in the current locale.
+
+<DT><CODE><VAR>string1</VAR> &#62; <VAR>string2</VAR></CODE>
+<DD>
+True if <VAR>string1</VAR> sorts after <VAR>string2</VAR> lexicographically
+in the current locale.
+
+<DT><CODE><VAR>arg1</VAR> OP <VAR>arg2</VAR></CODE>
+<DD>
+<CODE>OP</CODE> is one of 
+<SAMP>`-eq'</SAMP>, <SAMP>`-ne'</SAMP>, <SAMP>`-lt'</SAMP>, 
<SAMP>`-le'</SAMP>, <SAMP>`-gt'</SAMP>, or <SAMP>`-ge'</SAMP>.
+These arithmetic binary operators return true if <VAR>arg1</VAR>
+is equal to, not equal to, less than, less than or equal to,
+greater than, or greater than or equal to <VAR>arg2</VAR>,
+respectively.  <VAR>Arg1</VAR> and <VAR>arg2</VAR>
+may be positive or negative integers.
+
+</DL>
+
+
+
+<H2><A NAME="SEC66" HREF="bashref.html#TOC66">Bash Variables</A></H2>
+
+<P>
+These variables are set or used by Bash, but other shells
+do not normally treat them specially.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>BASH</CODE>
+<DD>
+<A NAME="IDX152"></A>
+The full pathname used to execute the current instance of Bash.
+
+<DT><CODE>BASH_ENV</CODE>
+<DD>
+<A NAME="IDX153"></A>
+If this variable is set when Bash is invoked to execute a shell
+script, its value is expanded and used as the name of a startup file
+to read before executing the script.  See section <A 
HREF="bashref.html#SEC61">Bash Startup Files</A>.
+
+<DT><CODE>BASH_VERSION</CODE>
+<DD>
+<A NAME="IDX154"></A>
+The version number of the current instance of Bash.
+
+<DT><CODE>BASH_VERSINFO</CODE>
+<DD>
+<A NAME="IDX155"></A>
+A readonly array variable whose members hold version information for
+this instance of Bash.
+The values assigned to the array members are as follows:
+
+<DL COMPACT>
+
+<DT><CODE>BASH_VERSINFO[0]</CODE>
+<DD>
+The major version number (the <VAR>release</VAR>).
+
+<DT><CODE>BASH_VERSINFO[1]</CODE>
+<DD>
+The minor version number (the <VAR>version</VAR>).
+
+<DT><CODE>BASH_VERSINFO[2]</CODE>
+<DD>
+The patch level.
+
+<DT><CODE>BASH_VERSINFO[3]</CODE>
+<DD>
+The build version.
+
+<DT><CODE>BASH_VERSINFO[4]</CODE>
+<DD>
+The release status (e.g., <VAR>beta1</VAR>).
+
+<DT><CODE>BASH_VERSINFO[5]</CODE>
+<DD>
+The value of <CODE>MACHTYPE</CODE>.
+
+</DL>
+
+<DT><CODE>DIRSTACK</CODE>
+<DD>
+<A NAME="IDX156"></A>
+An array variable (see section <A HREF="bashref.html#SEC70">Arrays</A>)
+containing the current contents of the directory stack.
+Directories appear in the stack in the order they are displayed by the
+<CODE>dirs</CODE> builtin.
+Assigning to members of this array variable may be used to modify
+directories already in the stack, but the <CODE>pushd</CODE> and 
<CODE>popd</CODE>
+builtins must be used to add and remove directories.
+Assignment to this variable will not change the current directory.
+If <CODE>DIRSTACK</CODE> is unset, it loses its special properties, even if
+it is subsequently reset.
+
+<DT><CODE>EUID</CODE>
+<DD>
+<A NAME="IDX157"></A>
+The numeric effective user id of the current user.  This variable
+is readonly.
+
+<DT><CODE>FCEDIT</CODE>
+<DD>
+<A NAME="IDX158"></A>
+The editor used as a default by the <SAMP>`-e'</SAMP> option to the 
<CODE>fc</CODE>
+builtin command.
+
+<DT><CODE>FIGNORE</CODE>
+<DD>
+<A NAME="IDX159"></A>
+A colon-separated list of suffixes to ignore when performing
+filename completion.
+A file name whose suffix matches one of the entries in 
+<CODE>FIGNORE</CODE>
+is excluded from the list of matched file names.  A sample
+value is <SAMP>`.o:~'</SAMP>
+
+<DT><CODE>GLOBIGNORE</CODE>
+<DD>
+<A NAME="IDX160"></A>
+A colon-separated list of patterns defining the set of filenames to
+be ignored by filename expansion.
+If a filename matched by a filename expansion pattern also matches one
+of the patterns in <CODE>GLOBIGNORE</CODE>, it is removed from the list
+of matches.
+
+<DT><CODE>GROUPS</CODE>
+<DD>
+<A NAME="IDX161"></A>
+An array variable containing the list of groups of which the current    
+user is a member.  This variable is readonly.
+
+<DT><CODE>histchars</CODE>
+<DD>
+<A NAME="IDX162"></A>
+Up to three characters which control history expansion, quick
+substitution, and tokenization (see section <A 
HREF="bashref.html#SEC82">History Expansion</A>).
+The first character is the
+<EM>history-expansion-char</EM>, that is, the character which signifies the
+start of a history expansion, normally <SAMP>`!'</SAMP>.  The second character 
is the
+character which signifies `quick substitution' when seen as the first
+character on a line, normally <SAMP>`^'</SAMP>.  The optional third character 
is the
+character which indicates that the remainder of the line is a comment when
+found as the first character of a word, usually <SAMP>`#'</SAMP>.  The history
+comment character causes history substitution to be skipped for the
+remaining words on the line.  It does not necessarily cause the shell
+parser to treat the rest of the line as a comment.
+
+<DT><CODE>HISTCMD</CODE>
+<DD>
+<A NAME="IDX163"></A>
+The history number, or index in the history list, of the current
+command.  If <CODE>HISTCMD</CODE> is unset, it loses its special properties,
+even if it is subsequently reset.
+
+<DT><CODE>HISTCONTROL</CODE>
+<DD>
+<A NAME="IDX164"></A>
+Set to a value of <SAMP>`ignorespace'</SAMP>, it means don't enter lines which
+begin with a space or tab into the history list.  Set to a value
+of <SAMP>`ignoredups'</SAMP>, it means don't enter lines which match the last
+entered line.  A value of <SAMP>`ignoreboth'</SAMP> combines the two options.
+Unset, or set to any other value than those above, means to save
+all lines on the history list. 
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+<CODE>HISTCONTROL</CODE>.
+
+<DT><CODE>HISTIGNORE</CODE>
+<DD>
+<A NAME="IDX165"></A>
+A colon-separated list of patterns used to decide which command
+lines should be saved on the history list.  Each pattern is
+anchored at the beginning of the line and must fully specify the
+line (no implicit <SAMP>`*'</SAMP> is appended).  Each pattern is tested
+against the line after the checks specified by <CODE>HISTCONTROL</CODE>
+are applied.  In addition to the normal shell pattern matching
+characters, <SAMP>`&#38;'</SAMP> matches the previous history line.  
<SAMP>`&#38;'</SAMP>
+may be escaped using a backslash.  The backslash is removed
+before attempting a match. 
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+<CODE>HISTIGNORE</CODE>.
+
+<CODE>HISTIGNORE</CODE> subsumes the function of <CODE>HISTCONTROL</CODE>.  A
+pattern of <SAMP>`&#38;'</SAMP> is identical to <CODE>ignoredups</CODE>, and a
+pattern of <SAMP>`[ ]*'</SAMP> is identical to <CODE>ignorespace</CODE>. 
+Combining these two patterns, separating them with a colon,
+provides the functionality of <CODE>ignoreboth</CODE>. 
+
+<DT><CODE>HISTFILE</CODE>
+<DD>
+<A NAME="IDX166"></A>
+The name of the file to which the command history is saved.  The
+default is <TT>`~/.bash_history'</TT>.
+
+<DT><CODE>HISTSIZE</CODE>
+<DD>
+<A NAME="IDX167"></A>
+The maximum number of commands to remember on the history list.
+The default value is 500.
+
+<DT><CODE>HISTFILESIZE</CODE>
+<DD>
+<A NAME="IDX168"></A>
+The maximum number of lines contained in the history file.  When this
+variable is assigned a value, the history file is truncated, if
+necessary, to contain no more than that number of lines.  The default
+value is 500.  The history file is also truncated to this size after
+writing it when an interactive shell exits.
+
+<DT><CODE>HOSTFILE</CODE>
+<DD>
+<A NAME="IDX169"></A>
+Contains the name of a file in the same format as <TT>`/etc/hosts'</TT> that
+should be read when the shell needs to complete a hostname.  You can
+change the file interactively; the next time you attempt to complete a
+hostname, Bash will add the contents of the new file to the already
+existing database.
+
+<DT><CODE>HOSTNAME</CODE>
+<DD>
+<A NAME="IDX170"></A>
+The name of the current host.
+
+<DT><CODE>HOSTTYPE</CODE>
+<DD>
+<A NAME="IDX171"></A>
+A string describing the machine Bash is running on.
+
+<DT><CODE>IGNOREEOF</CODE>
+<DD>
+<A NAME="IDX172"></A>
+Controls the action of the shell on receipt of an <CODE>EOF</CODE> character
+as the sole input.  If set, the value denotes the number
+of consecutive <CODE>EOF</CODE> characters that can be read as the
+first character on an input line
+before the shell will exit.  If the variable exists but does not
+have a numeric value (or has no value) then the default is 10.
+If the variable does not exist, then <CODE>EOF</CODE> signifies the end of 
+input to the shell.  This is only in effect for interactive shells.
+
+<DT><CODE>INPUTRC</CODE>
+<DD>
+<A NAME="IDX173"></A>
+The name of the Readline startup file, overriding the default
+of <TT>`~/.inputrc'</TT>.
+
+<DT><CODE>LANG</CODE>
+<DD>
+<A NAME="IDX174"></A>
+Used to determine the locale category for any category not specifically
+selected with a variable starting with <CODE>LC_</CODE>.
+
+<DT><CODE>LC_ALL</CODE>
+<DD>
+<A NAME="IDX175"></A>
+This variable overrides the value of <CODE>LANG</CODE> and any other
+<CODE>LC_</CODE> variable specifying a locale category.
+
+<DT><CODE>LC_COLLATE</CODE>
+<DD>
+<A NAME="IDX176"></A>
+This variable determines the collation order used when sorting the
+results of filename expansion, and
+determines the behavior of range expressions, equivalence classes,
+and collating sequences within filename expansion and pattern matching
+(see section <A HREF="bashref.html#SEC34">Filename Expansion</A>).
+
+<DT><CODE>LC_CTYPE</CODE>
+<DD>
+<A NAME="IDX177"></A>
+This variable determines the interpretation of characters and the
+behavior of character classes within filename expansion and pattern
+matching (see section <A HREF="bashref.html#SEC34">Filename Expansion</A>).
+
+<DT><CODE>LC_MESSAGES</CODE>
+<DD>
+<A NAME="IDX178"></A>
+This variable determines the locale used to translate double-quoted
+strings preceded by a <SAMP>`$'</SAMP> (see section <A 
HREF="bashref.html#SEC13">Locale-Specific Translation</A>).
+
+<DT><CODE>LINENO</CODE>
+<DD>
+<A NAME="IDX179"></A>
+The line number in the script or shell function currently executing.
+
+<DT><CODE>MACHTYPE</CODE>
+<DD>
+<A NAME="IDX180"></A>
+A string that fully describes the system type on which Bash
+is executing, in the standard GNU <VAR>cpu-company-system</VAR> format.
+
+<DT><CODE>MAILCHECK</CODE>
+<DD>
+<A NAME="IDX181"></A>
+How often (in seconds) that the shell should check for mail in the
+files specified in the <CODE>MAILPATH</CODE> or <CODE>MAIL</CODE> variables.
+
+<DT><CODE>OLDPWD</CODE>
+<DD>
+<A NAME="IDX182"></A>
+The previous working directory as set by the <CODE>cd</CODE> builtin.
+
+<DT><CODE>OPTERR</CODE>
+<DD>
+<A NAME="IDX183"></A>
+If set to the value 1, Bash displays error messages
+generated by the <CODE>getopts</CODE> builtin command.
+
+<DT><CODE>OSTYPE</CODE>
+<DD>
+<A NAME="IDX184"></A>
+A string describing the operating system Bash is running on.
+
+<DT><CODE>PIPESTATUS</CODE>
+<DD>
+<A NAME="IDX185"></A>
+An array variable (see section <A HREF="bashref.html#SEC70">Arrays</A>)
+containing a list of exit status values from the processes
+in the most-recently-executed foreground pipeline (which may
+contain only a single command).
+
+<DT><CODE>PPID</CODE>
+<DD>
+<A NAME="IDX186"></A>
+The process id of the shell's parent process.  This variable
+is readonly.
+
+<DT><CODE>PROMPT_COMMAND</CODE>
+<DD>
+<A NAME="IDX187"></A>
+If present, this contains a string which is a command to execute
+before the printing of each primary prompt (<CODE>$PS1</CODE>).
+
+<DT><CODE>PS3</CODE>
+<DD>
+<A NAME="IDX188"></A>
+The value of this variable is used as the prompt for the
+<CODE>select</CODE> command.  If this variable is not set, the
+<CODE>select</CODE> command prompts with <SAMP>`#? '</SAMP>
+
+<DT><CODE>PS4</CODE>
+<DD>
+<A NAME="IDX189"></A>
+This is the prompt printed before the command line is echoed
+when the <SAMP>`-x'</SAMP> option is set (see section <A 
HREF="bashref.html#SEC64">The Set Builtin</A>).
+The first character of <CODE>PS4</CODE> is replicated multiple times, as
+necessary, to indicate multiple levels of indirection.
+The default is <SAMP>`+ '</SAMP>.
+
+<DT><CODE>PWD</CODE>
+<DD>
+<A NAME="IDX190"></A>
+The current working directory as set by the <CODE>cd</CODE> builtin.
+
+<DT><CODE>RANDOM</CODE>
+<DD>
+<A NAME="IDX191"></A>
+Each time this parameter is referenced, a random integer
+between 0 and 32767 is generated.  Assigning a value to this
+variable seeds the random number generator.
+
+<DT><CODE>REPLY</CODE>
+<DD>
+<A NAME="IDX192"></A>
+The default variable for the <CODE>read</CODE> builtin.
+
+<DT><CODE>SECONDS</CODE>
+<DD>
+<A NAME="IDX193"></A>
+This variable expands to the number of seconds since the
+shell was started.  Assignment to this variable resets
+the count to the value assigned, and the expanded value
+becomes the value assigned plus the number of seconds
+since the assignment.
+
+<DT><CODE>SHELLOPTS</CODE>
+<DD>
+<A NAME="IDX194"></A>
+A colon-separated list of enabled shell options.  Each word in
+the list is a valid argument for the <SAMP>`-o'</SAMP> option to the
+<CODE>set</CODE> builtin command (see section <A HREF="bashref.html#SEC64">The 
Set Builtin</A>).
+The options appearing in <CODE>SHELLOPTS</CODE> are those reported
+as <SAMP>`on'</SAMP> by <SAMP>`set -o'</SAMP>.
+If this variable is in the environment when Bash
+starts up, each shell option in the list will be enabled before
+reading any startup files.  This variable is readonly.
+
+<DT><CODE>SHLVL</CODE>
+<DD>
+<A NAME="IDX195"></A>
+Incremented by one each time a new instance of Bash is started.  This is
+intended to be a count of how deeply your Bash shells are nested.
+
+<DT><CODE>TIMEFORMAT</CODE>
+<DD>
+<A NAME="IDX196"></A>
+The value of this parameter is used as a format string specifying
+how the timing information for pipelines prefixed with the <CODE>time</CODE>
+reserved word should be displayed.
+The <SAMP>`%'</SAMP> character introduces an
+escape sequence that is expanded to a time value or other
+information.
+The escape sequences and their meanings are as
+follows; the braces denote optional portions. 
+
+<DL COMPACT>
+
+<DT><CODE>%%</CODE>
+<DD>
+A literal <SAMP>`%'</SAMP>.
+
+<DT><CODE>%[<VAR>p</VAR>][l]R</CODE>
+<DD>
+The elapsed time in seconds. 
+
+<DT><CODE>%[<VAR>p</VAR>][l]U</CODE>
+<DD>
+The number of CPU seconds spent in user mode. 
+
+<DT><CODE>%[<VAR>p</VAR>][l]S</CODE>
+<DD>
+The number of CPU seconds spent in system mode. 
+
+<DT><CODE>%P</CODE>
+<DD>
+The CPU percentage, computed as (%U + %S) / %R. 
+</DL>
+
+The optional <VAR>p</VAR> is a digit specifying the precision, the number of
+fractional digits after a decimal point.
+A value of 0 causes no decimal point or fraction to be output.
+At most three places after the decimal point may be specified; values
+of <VAR>p</VAR> greater than 3 are changed to 3.
+If <VAR>p</VAR> is not specified, the value 3 is used. 
+
+The optional <CODE>l</CODE> specifies a longer format, including minutes, of
+the form <VAR>MM</VAR>m<VAR>SS</VAR>.<VAR>FF</VAR>s.
+The value of <VAR>p</VAR> determines whether or not the fraction is included. 
+
+If this variable is not set, Bash acts as if it had the value
+
+<PRE>
+<CODE>$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</CODE>
+</PRE>
+
+If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+
+<DT><CODE>TMOUT</CODE>
+<DD>
+<A NAME="IDX197"></A>
+If set to a value greater than zero, the value is interpreted as
+the number of seconds to wait for input after issuing the primary
+prompt.
+Bash terminates after that number of seconds if input does
+not arrive.
+
+<DT><CODE>UID</CODE>
+<DD>
+<A NAME="IDX198"></A>
+The numeric real user id of the current user.  This variable is readonly.
+
+</DL>
+
+
+
+<H2><A NAME="SEC67" HREF="bashref.html#TOC67">Shell Arithmetic</A></H2>
+<P>
+<A NAME="IDX199"></A>
+<A NAME="IDX200"></A>
+<A NAME="IDX201"></A>
+<A NAME="IDX202"></A>
+<A NAME="IDX203"></A>
+
+</P>
+<P>
+The shell allows arithmetic expressions to be evaluated, as one of
+the shell expansions or by the <CODE>let</CODE> builtin.
+
+</P>
+<P>
+Evaluation is done in long integers with no check for overflow,
+though division by 0 is trapped and flagged as an error.  The
+following list of operators is grouped into levels of
+equal-precedence operators.  The levels are listed in order of
+decreasing precedence. 
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>- +</CODE>
+<DD>
+unary minus and plus
+
+<DT><CODE>! ~</CODE>
+<DD>
+logical and bitwise negation
+
+<DT><CODE>**</CODE>
+<DD>
+exponentiation
+
+<DT><CODE>* / %</CODE>
+<DD>
+multiplication, division, remainder
+
+<DT><CODE>+ -</CODE>
+<DD>
+addition, subtraction
+
+<DT><CODE>&#60;&#60; &#62;&#62;</CODE>
+<DD>
+left and right bitwise shifts
+
+<DT><CODE>&#60;= &#62;= &#60; &#62;</CODE>
+<DD>
+comparison
+
+<DT><CODE>== !=</CODE>
+<DD>
+equality and inequality
+
+<DT><CODE>&#38;</CODE>
+<DD>
+bitwise AND
+
+<DT><CODE>^</CODE>
+<DD>
+bitwise exclusive OR
+
+<DT><CODE>|</CODE>
+<DD>
+bitwise OR
+
+<DT><CODE>&#38;&#38;</CODE>
+<DD>
+logical AND
+
+<DT><CODE>||</CODE>
+<DD>
+logical OR
+
+<DT><CODE>expr ? expr : expr</CODE>
+<DD>
+conditional evaluation
+
+<DT><CODE>= *= /= %= += -= &#60;&#60;= &#62;&#62;= &#38;= ^= |=</CODE>
+<DD>
+assignment
+</DL>
+
+<P>
+Shell variables are allowed as operands; parameter expansion is
+performed before the expression is evaluated. 
+The value of a parameter is coerced to a long integer within
+an expression.  A shell variable need not have its integer attribute
+turned on to be used in an expression.
+
+</P>
+<P>
+Constants with a leading 0 are interpreted as octal numbers.
+A leading <SAMP>`0x'</SAMP> or <SAMP>`0X'</SAMP> denotes hexadecimal.  
Otherwise,
+numbers take the form [<VAR>base</VAR><CODE>#</CODE>]<VAR>n</VAR>, where 
<VAR>base</VAR>
+is a decimal number between 2 and 64 representing the arithmetic
+base, and <VAR>n</VAR> is a number in that base.  If <VAR>base</VAR> is
+omitted, then base 10 is used.
+The digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, <SAMP>`_'</SAMP>, and <SAMP>`@'</SAMP>, in that order.
+If <VAR>base</VAR> is less than or equal to 36, lowercase and uppercase
+letters may be used interchangably to represent numbers between 10
+and 35.
+
+</P>
+<P>
+Operators are evaluated in order of precedence.  Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+
+</P>
+
+
+<H2><A NAME="SEC68" HREF="bashref.html#TOC68">Aliases</A></H2>
+<P>
+<A NAME="IDX204"></A>
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC69">Alias Builtins</A>: Builtins commands to 
maniuplate aliases.
+</UL>
+
+<P>
+Aliases allow a string to be substituted for a word when it is used
+as the first word of a simple command.
+The shell maintains a list of <VAR>aliases</VAR>
+that may be set and unset with the <CODE>alias</CODE> and
+<CODE>unalias</CODE> builtin commands.
+
+</P>
+<P>
+The first word of each simple command, if unquoted, is checked to see
+if it has an alias.
+If so, that word is replaced by the text of the alias.
+The alias name and the replacement text may contain any valid
+shell input, including shell metacharacters, with the exception
+that the alias name may not contain <SAMP>`='</SAMP>.
+The first word of the replacement text is tested for
+aliases, but a word that is identical to an alias being expanded
+is not expanded a second time.  This means that one may alias
+<CODE>ls</CODE> to <CODE>"ls -F"</CODE>,
+for instance, and Bash does not try to recursively expand the
+replacement text. If the last character of the alias value is a
+space or tab character, then the next command word following the
+alias is also checked for alias expansion.
+
+</P>
+<P>
+Aliases are created and listed with the <CODE>alias</CODE>
+command, and removed with the <CODE>unalias</CODE> command.
+
+</P>
+<P>
+There is no mechanism for using arguments in the replacement text,
+as in <CODE>csh</CODE>.
+If arguments are needed, a shell function should be used
+(see section <A HREF="bashref.html#SEC22">Shell Functions</A>).
+
+</P>
+<P>
+Aliases are not expanded when the shell is not interactive,
+unless the <CODE>expand_aliases</CODE> shell option is set using
+<CODE>shopt</CODE> (see section <A HREF="bashref.html#SEC63">Bash Builtin 
Commands</A>).
+
+</P>
+<P>
+The rules concerning the definition and use of aliases are
+somewhat confusing.  Bash
+always reads at least one complete line
+of input before executing any
+of the commands on that line.  Aliases are expanded when a
+command is read, not when it is executed.  Therefore, an
+alias definition appearing on the same line as another
+command does not take effect until the next line of input is read.
+The commands following the alias definition
+on that line are not affected by the new alias.
+This behavior is also an issue when functions are executed.
+Aliases are expanded when a function definition is read,
+not when the function is executed, because a function definition
+is itself a compound command.  As a consequence, aliases
+defined in a function are not available until after that
+function is executed.  To be safe, always put
+alias definitions on a separate line, and do not use <CODE>alias</CODE>
+in compound commands.
+
+</P>
+<P>
+For almost every purpose, aliases are superseded by
+shell functions.
+
+</P>
+
+
+<H3><A NAME="SEC69" HREF="bashref.html#TOC69">Alias Builtins</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>alias</CODE>
+<DD>
+<A NAME="IDX205"></A>
+
+<PRE>
+alias [<CODE>-p</CODE>] [<VAR>name</VAR>[=<VAR>value</VAR>] ...]
+</PRE>
+
+Without arguments or with the <SAMP>`-p'</SAMP> option, <CODE>alias</CODE> 
prints
+the list of aliases on the standard output in a form that allows
+them to be reused as input.
+If arguments are supplied, an alias is defined for each <VAR>name</VAR>
+whose <VAR>value</VAR> is given.  If no <VAR>value</VAR> is given, the name
+and value of the alias is printed.
+
+<DT><CODE>unalias</CODE>
+<DD>
+<A NAME="IDX206"></A>
+
+<PRE>
+unalias [-a] [<VAR>name</VAR> ... ]
+</PRE>
+
+Remove each <VAR>name</VAR> from the list of aliases.  If <SAMP>`-a'</SAMP> is
+supplied, all aliases are removed.
+</DL>
+
+
+
+<H2><A NAME="SEC70" HREF="bashref.html#TOC70">Arrays</A></H2>
+<P>
+<A NAME="IDX207"></A>
+
+</P>
+<P>
+Bash provides one-dimensional array variables.  Any variable may be used as
+an array; the <CODE>declare</CODE> builtin will explicitly declare an array.
+There is no maximum
+limit on the size of an array, nor any requirement that members
+be indexed or assigned contiguously.  Arrays are zero-based.
+
+</P>
+<P>
+An array is created automatically if any variable is assigned to using
+the syntax
+
+<PRE>
+name[<VAR>subscript</VAR>]=<VAR>value</VAR>
+</PRE>
+
+<P>
+The <VAR>subscript</VAR>
+is treated as an arithmetic expression that must evaluate to a number
+greater than or equal to zero.  To explicitly declare an array, use
+
+<PRE>
+declare -a <VAR>name</VAR>
+</PRE>
+
+<P>
+The syntax
+
+<PRE>
+declare -a <VAR>name</VAR>[<VAR>subscript</VAR>]
+</PRE>
+
+<P>
+is also accepted; the <VAR>subscript</VAR> is ignored.  Attributes may be
+specified for an array variable using the <CODE>declare</CODE> and
+<CODE>readonly</CODE> builtins.  Each attribute applies to all members of
+an array.
+
+</P>
+<P>
+Arrays are assigned to using compound assignments of the form
+
+<PRE>
+name=(value<VAR>1</VAR> ... value<VAR>n</VAR>)
+</PRE>
+
+<P>
+where each
+<VAR>value</VAR> is of the form 
<CODE>[[<VAR>subscript</VAR>]=]</CODE><VAR>string</VAR>.  If
+the optional subscript is supplied, that index is assigned to;
+otherwise the index of the element assigned is the last index assigned
+to by the statement plus one.  Indexing starts at zero.
+This syntax is also accepted by the <CODE>declare</CODE>
+builtin.  Individual array elements may be assigned to using the
+<CODE>name[</CODE><VAR>subscript</VAR><CODE>]=</CODE><VAR>value</VAR> syntax 
introduced above.
+
+</P>
+<P>
+Any element of an array may be referenced using
+<CODE>${name[</CODE><VAR>subscript</VAR><CODE>]}</CODE>.
+The braces are required to avoid
+conflicts with the shell's filename expansion operators.  If the
+<VAR>subscript</VAR> is <SAMP>`@'</SAMP> or <SAMP>`*'</SAMP>, the word expands 
to all members
+of the array <VAR>name</VAR>.  These subscripts differ only when the word
+appears within double quotes.  If the word is double-quoted,
+<CODE>${name[*]}</CODE> expands to a single word with
+the value of each array member separated by the first character of the
+<CODE>IFS</CODE> variable, and <CODE>address@hidden</CODE> expands each 
element of
+<VAR>name</VAR> to a separate word.  When there are no array members,
+<CODE>address@hidden</CODE> expands to nothing.  This is analogous to the
+expansion of the special parameters <SAMP>`@'</SAMP> and <SAMP>`*'</SAMP>. 
+<CODE>${#name[</CODE><VAR>subscript</VAR><CODE>]}</CODE> expands to the length 
of
+<CODE>${name[</CODE><VAR>subscript</VAR><CODE>]}</CODE>.
+If <VAR>subscript</VAR> is <SAMP>`@'</SAMP> or
+<SAMP>`*'</SAMP>, the expansion is the number of elements in the array. 
+Referencing an array variable without a subscript is equivalent to
+referencing element zero. 
+
+</P>
+<P>
+The <CODE>unset</CODE> builtin is used to destroy arrays.
+<CODE>unset</CODE> <CODE>name[<VAR>subscript</VAR>]</CODE>
+destroys the array element at index <VAR>subscript</VAR>.
+<CODE>unset</CODE> <VAR>name</VAR>, where <VAR>name</VAR> is an array, removes 
the
+entire array. A subscript of <SAMP>`*'</SAMP> or <SAMP>`@'</SAMP> also removes 
the
+entire array.
+
+</P>
+<P>
+The <CODE>declare</CODE>, <CODE>local</CODE>, and <CODE>readonly</CODE>
+builtins each accept a <SAMP>`-a'</SAMP>
+option to specify an array.  The <CODE>read</CODE>
+builtin accepts a <SAMP>`-a'</SAMP>
+option to assign a list of words read from the standard input
+to an array, and can read values from the standard input into
+individual array elements.  The <CODE>set</CODE> and <CODE>declare</CODE>
+builtins display array values in a way that allows them to be
+reused as input.
+
+</P>
+
+
+<H2><A NAME="SEC71" HREF="bashref.html#TOC71">The Directory Stack</A></H2>
+<P>
+<A NAME="IDX208"></A>
+
+</P>
+<P>
+The directory stack is a list of recently-visited directories.  The
+<CODE>pushd</CODE> builtin adds directories to the stack as it changes
+the current directory, and the <CODE>popd</CODE> builtin removes specified
+directories from the stack and changes the current directory to
+the directory removed.  The <CODE>dirs</CODE> builtin displays the contents
+of the directory stack.
+
+</P>
+<P>
+The contents of the directory stack are also visible
+as the value of the <CODE>DIRSTACK</CODE> shell variable.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>dirs</CODE>
+<DD>
+<A NAME="IDX209"></A>
+
+<PRE>
+dirs [+<VAR>N</VAR> | -<VAR>N</VAR>] [-clvp]
+</PRE>
+
+Display the list of currently remembered directories.  Directories
+are added to the list with the <CODE>pushd</CODE> command; the
+<CODE>popd</CODE> command removes directories from the list.
+<DL COMPACT>
+
+<DT><CODE>+<VAR>N</VAR></CODE>
+<DD>
+Displays the <VAR>N</VAR>th directory (counting from the left of the
+list printed by <CODE>dirs</CODE> when invoked without options), starting
+with zero.
+<DT><CODE>-<VAR>N</VAR></CODE>
+<DD>
+Displays the <VAR>N</VAR>th directory (counting from the right of the
+list printed by <CODE>dirs</CODE> when invoked without options), starting
+with zero.
+<DT><CODE>-c</CODE>
+<DD>
+Clears the directory stack by deleting all of the elements.
+<DT><CODE>-l</CODE>
+<DD>
+Produces a longer listing; the default listing format uses a 
+tilde to denote the home directory.
+<DT><CODE>-p</CODE>
+<DD>
+Causes <CODE>dirs</CODE> to print the directory stack with one entry per
+line.
+<DT><CODE>-v</CODE>
+<DD>
+Causes <CODE>dirs</CODE> to print the directory stack with one entry per
+line, prefixing each entry with its index in the stack.
+</DL>
+
+<DT><CODE>popd</CODE>
+<DD>
+<A NAME="IDX210"></A>
+
+<PRE>
+popd [+<VAR>N</VAR> | -<VAR>N</VAR>] [-n]
+</PRE>
+
+Remove the top entry from the directory stack, and <CODE>cd</CODE>
+to the new top directory.
+When no arguments are given, <CODE>popd</CODE>
+removes the top directory from the stack and
+performs a <CODE>cd</CODE> to the new top directory.  The
+elements are numbered from 0 starting at the first directory listed with
+<CODE>dirs</CODE>; i.e., <CODE>popd</CODE> is equivalent to <CODE>popd 
+0</CODE>.
+<DL COMPACT>
+
+<DT><CODE>+<VAR>N</VAR></CODE>
+<DD>
+Removes the <VAR>N</VAR>th directory (counting from the left of the
+list printed by <CODE>dirs</CODE>), starting with zero.
+<DT><CODE>-<VAR>N</VAR></CODE>
+<DD>
+Removes the <VAR>N</VAR>th directory (counting from the right of the
+list printed by <CODE>dirs</CODE>), starting with zero.
+<DT><CODE>-n</CODE>
+<DD>
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+</DL>
+
+<A NAME="IDX211"></A>
+<DT><CODE>pushd</CODE>
+<DD>
+
+<PRE>
+pushd [<VAR>dir</VAR> | <VAR>+N</VAR> | <VAR>-N</VAR>] [-n]
+</PRE>
+
+Save the current directory on the top of the directory stack
+and then <CODE>cd</CODE> to <VAR>dir</VAR>.
+With no arguments, <CODE>pushd</CODE> exchanges the top two directories.
+
+<DL COMPACT>
+
+<DT><CODE>+<VAR>N</VAR></CODE>
+<DD>
+Brings the <VAR>N</VAR>th directory (counting from the left of the
+list printed by <CODE>dirs</CODE>, starting with zero) to the top of
+the list by rotating the stack.
+<DT><CODE>-<VAR>N</VAR></CODE>
+<DD>
+Brings the <VAR>N</VAR>th directory (counting from the right of the
+list printed by <CODE>dirs</CODE>, starting with zero) to the top of
+the list by rotating the stack.
+<DT><CODE>-n</CODE>
+<DD>
+Suppresses the normal change of directory when adding directories
+to the stack, so that only the stack is manipulated.
+<DT><CODE><VAR>dir</VAR></CODE>
+<DD>
+Makes the current working directory be the top of the stack, and then
+executes the equivalent of `<CODE>cd</CODE> <VAR>dir</VAR>'.
+<CODE>cd</CODE>s to <VAR>dir</VAR>.
+</DL>
+
+</DL>
+
+
+
+<H2><A NAME="SEC72" HREF="bashref.html#TOC72">Controlling the Prompt</A></H2>
+<P>
+<A NAME="IDX212"></A>
+
+</P>
+<P>
+The value of the variable <CODE>PROMPT_COMMAND</CODE> is examined just before
+Bash prints each primary prompt.  If it is set and non-null, then the
+value is executed just as if it had been typed on the command line.
+
+</P>
+<P>
+In addition, the following table describes the special characters which
+can appear in the prompt variables:
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>\a</CODE>
+<DD>
+A bell character.
+<DT><CODE>\d</CODE>
+<DD>
+The date, in "Weekday Month Date" format (e.g., "Tue May 26").
+<DT><CODE>\e</CODE>
+<DD>
+An escape character.
+<DT><CODE>\h</CODE>
+<DD>
+The hostname, up to the first `.'.
+<DT><CODE>\H</CODE>
+<DD>
+The hostname.
+<DT><CODE>\n</CODE>
+<DD>
+A newline.
+<DT><CODE>\r</CODE>
+<DD>
+A carriage return.
+<DT><CODE>\s</CODE>
+<DD>
+The name of the shell, the basename of <CODE>$0</CODE> (the portion
+following the final slash).
+<DT><CODE>\t</CODE>
+<DD>
+The time, in 24-hour HH:MM:SS format.
+<DT><CODE>\T</CODE>
+<DD>
+The time, in 12-hour HH:MM:SS format.
+<DT><CODE>\@</CODE>
+<DD>
+The time, in 12-hour am/pm format.
+<DT><CODE>\u</CODE>
+<DD>
+The username of the current user.
+<DT><CODE>\v</CODE>
+<DD>
+The version of Bash (e.g., 2.00)          
+<DT><CODE>\V</CODE>
+<DD>
+The release of Bash, version + patchlevel (e.g., 2.00.0)
+<DT><CODE>\w</CODE>
+<DD>
+The current working directory.
+<DT><CODE>\W</CODE>
+<DD>
+The basename of <CODE>$PWD</CODE>.
+<DT><CODE>\!</CODE>
+<DD>
+The history number of this command.
+<DT><CODE>\#</CODE>
+<DD>
+The command number of this command.
+<DT><CODE>\$</CODE>
+<DD>
+If the effective uid is 0, <CODE>#</CODE>, otherwise <CODE>$</CODE>.
+<DT><CODE>\<VAR>nnn</VAR></CODE>
+<DD>
+The character whose ASCII code is the octal value <VAR>nnn</VAR>.
+<DT><CODE>\\</CODE>
+<DD>
+A backslash.
+<DT><CODE>\[</CODE>
+<DD>
+Begin a sequence of non-printing characters.  This could be used to
+embed a terminal control sequence into the prompt.
+<DT><CODE>\]</CODE>
+<DD>
+End a sequence of non-printing characters.
+</DL>
+
+
+
+<H2><A NAME="SEC73" HREF="bashref.html#TOC73">The Restricted Shell</A></H2>
+<P>
+<A NAME="IDX213"></A>
+
+</P>
+<P>
+If Bash is started with the name <CODE>rbash</CODE>, or the
+<SAMP>`--restricted'</SAMP>
+option is supplied at invocation, the shell becomes restricted.
+A restricted shell is used to
+set up an environment more controlled than the standard shell.
+A restricted shell behaves identically to <CODE>bash</CODE>
+with the exception that the following are disallowed:
+
+<UL>
+<LI>
+
+Changing directories with the <CODE>cd</CODE> builtin.
+<LI>
+
+Setting or unsetting the values of the <CODE>SHELL</CODE>, <CODE>PATH</CODE>,
+<CODE>ENV</CODE>, or <CODE>BASH_ENV</CODE> variables.
+<LI>
+
+Specifying command names containing slashes.
+<LI>
+
+Specifying a filename containing a slash as an argument to the <CODE>.</CODE>
+builtin command.
+<LI>
+
+Importing function definitions from the shell environment at startup.
+<LI>
+
+Parsing the value of <CODE>SHELLOPTS</CODE> from the shell environment at 
startup.
+<LI>
+
+Redirecting output using the <SAMP>`&#62;'</SAMP>, <SAMP>`&#62;|'</SAMP>, 
<SAMP>`&#60;&#62;'</SAMP>, <SAMP>`&#62;&#38;'</SAMP>,
+<SAMP>`&#38;&#62;'</SAMP>, and <SAMP>`&#62;&#62;'</SAMP> redirection operators.
+<LI>
+
+Using the <CODE>exec</CODE> builtin to replace the shell with another command.
+<LI>
+
+Adding or deleting builtin commands with the
+<SAMP>`-f'</SAMP> and <SAMP>`-d'</SAMP> options to the <CODE>enable</CODE> 
builtin.
+<LI>
+
+Specifying the <SAMP>`-p'</SAMP> option to the <CODE>command</CODE> builtin.
+<LI>
+
+Turning off restricted mode with <SAMP>`set +r'</SAMP> or <SAMP>`set +o 
restricted'</SAMP>.
+</UL>
+
+
+
+<H2><A NAME="SEC74" HREF="bashref.html#TOC74">Bash POSIX Mode</A></H2>
+<P>
+<A NAME="IDX214"></A>
+
+</P>
+<P>
+Starting Bash with the <SAMP>`--posix'</SAMP> command-line option or executing
+<SAMP>`set -o posix'</SAMP> while Bash is running will cause Bash to conform 
more
+closely to the POSIX.2 standard by changing the behavior to match that
+specified by POSIX.2 in areas where the Bash default differs.
+
+</P>
+<P>
+The following list is what's changed when `POSIX mode' is in effect:
+
+</P>
+
+<OL>
+<LI>
+
+When a command in the hash table no longer exists, Bash will re-search
+<CODE>$PATH</CODE> to find the new location.  This is also available with
+<SAMP>`shopt -s checkhash'</SAMP>.
+
+<LI>
+
+The <SAMP>`&#62;&#38;'</SAMP> redirection does not redirect stdout and stderr.
+
+<LI>
+
+The message printed by the job control code and builtins when a job
+exits with a non-zero status is `Done(status)'.
+
+<LI>
+
+Reserved words may not be aliased.
+
+<LI>
+
+The POSIX.2 <CODE>PS1</CODE> and <CODE>PS2</CODE> expansions of 
<SAMP>`!'</SAMP> to
+the history number and <SAMP>`!!'</SAMP> to <SAMP>`!'</SAMP> are enabled,
+and parameter expansion is performed on the values of <CODE>PS1</CODE> and
+<CODE>PS2</CODE> regardless of the setting of the <CODE>promptvars</CODE> 
option.
+
+<LI>
+
+Interactive comments are enabled by default.  (Bash has them on by
+default anyway.)
+
+<LI>
+
+The POSIX.2 startup files are executed (<CODE>$ENV</CODE>) rather than
+the normal Bash files.
+
+<LI>
+
+Tilde expansion is only performed on assignments preceding a command
+name, rather than on all assignment statements on the line.
+
+<LI>
+
+The default history file is <TT>`~/.sh_history'</TT> (this is the
+default value of <CODE>$HISTFILE</CODE>).
+
+<LI>
+
+The output of <SAMP>`kill -l'</SAMP> prints all the signal names on a single 
line,
+separated by spaces.
+
+<LI>
+
+Non-interactive shells exit if <VAR>filename</VAR> in <CODE>.</CODE> 
<VAR>filename</VAR>
+is not found.
+
+<LI>
+
+Non-interactive shells exit if a syntax error in an arithmetic expansion
+results in an invalid expression.
+
+<LI>
+
+Redirection operators do not perform filename expansion on the word
+in the redirection unless the shell is interactive.
+
+<LI>
+
+Function names must be valid shell <CODE>name</CODE>s.  That is, they may not
+contain characters other than letters, digits, and underscores, and
+may not start with a digit.  Declaring a function with an invalid name
+causes a fatal syntax error in non-interactive shells.
+
+<LI>
+
+POSIX.2 `special' builtins are found before shell functions
+during command lookup.
+
+<LI>
+
+If a POSIX.2 special builtin returns an error status, a
+non-interactive shell exits.  The fatal errors are those listed in
+the POSIX.2 standard, and include things like passing incorrect options,
+redirection errors, variable assignment errors for assignments preceding
+the command name, and so on.
+
+<LI>
+
+If the <CODE>cd</CODE> builtin finds a directory to change to
+using <CODE>$CDPATH</CODE>, the
+value it assigns to the <CODE>PWD</CODE> variable does not contain any
+symbolic links, as if <SAMP>`cd -P'</SAMP> had been executed.
+
+<LI>
+
+If <CODE>$CDPATH</CODE> is set, the <CODE>cd</CODE> builtin will not implicitly
+append the current directory to it.  This means that <CODE>cd</CODE> will
+fail if no valid directory name can be constructed from
+any of the entries in <CODE>$CDPATH</CODE>, even if the a directory with
+the same name as the name given as an argument to <CODE>cd</CODE> exists
+in the current directory.
+
+<LI>
+
+A non-interactive shell exits with an error status if a variable
+assignment error occurs when no command name follows the assignment
+statements.
+A variable assignment error occurs, for example, when trying to assign
+a value to a readonly variable.
+
+<LI>
+
+A non-interactive shell exits with an error status if the iteration
+variable in a <CODE>for</CODE> statement or the selection variable in a
+<CODE>select</CODE> statement is a readonly variable.
+
+<LI>
+
+Process substitution is not available.
+
+<LI>
+
+Assignment statements preceding POSIX.2 special builtins
+persist in the shell environment after the builtin completes.
+
+<LI>
+
+The <CODE>export</CODE> and <CODE>readonly</CODE> builtin commands display 
their
+output in the format required by POSIX.2.
+
+</OL>
+
+<P>
+There is other POSIX.2 behavior that Bash does not implement.
+Specifically:
+
+</P>
+
+<OL>
+<LI>
+
+Assignment statements affect the execution environment of all
+builtins, not just special ones.
+</OL>
+
+
+
+<H1><A NAME="SEC75" HREF="bashref.html#TOC75">Job Control</A></H1>
+
+<P>
+This chapter discusses what job control is, how it works, and how
+Bash allows you to access its facilities.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC76">Job Control Basics</A>: How job control works.
+<LI><A HREF="bashref.html#SEC77">Job Control Builtins</A>: Bash builtin 
commands used to interact
+                               with job control.
+<LI><A HREF="bashref.html#SEC78">Job Control Variables</A>: Variables Bash 
uses to customize job
+                               control.
+</UL>
+
+
+
+<H2><A NAME="SEC76" HREF="bashref.html#TOC76">Job Control Basics</A></H2>
+<P>
+<A NAME="IDX215"></A>
+<A NAME="IDX216"></A>
+<A NAME="IDX217"></A>
+<A NAME="IDX218"></A>
+
+</P>
+<P>
+Job control
+refers to the ability to selectively stop (suspend)
+the execution of processes and continue (resume)
+their execution at a later point.  A user typically employs
+this facility via an interactive interface supplied jointly
+by the system's terminal driver and Bash.
+
+</P>
+<P>
+The shell associates a <VAR>job</VAR> with each pipeline.  It keeps a
+table of currently executing jobs, which may be listed with the
+<CODE>jobs</CODE> command.  When Bash starts a job
+asynchronously, it prints a line that looks
+like:
+
+<PRE>
+[1] 25647
+</PRE>
+
+<P>
+indicating that this job is job number 1 and that the process ID
+of the last process in the pipeline associated with this job is
+25647.  All of the processes in a single pipeline are members of
+the same job.  Bash uses the <VAR>job</VAR> abstraction as the
+basis for job control. 
+
+</P>
+<P>
+To facilitate the implementation of the user interface to job
+control, the system maintains the notion of a current terminal
+process group ID.  Members of this process group (processes whose
+process group ID is equal to the current terminal process group
+ID) receive keyboard-generated signals such as <CODE>SIGINT</CODE>. 
+These processes are said to be in the foreground.  Background
+processes are those whose process group ID differs from the
+terminal's; such processes are immune to keyboard-generated
+signals.  Only foreground processes are allowed to read from or
+write to the terminal.  Background processes which attempt to
+read from (write to) the terminal are sent a <CODE>SIGTTIN</CODE>
+(<CODE>SIGTTOU</CODE>) signal by the terminal driver, which, unless
+caught, suspends the process. 
+
+</P>
+<P>
+If the operating system on which Bash is running supports
+job control, Bash contains facilities to use it.  Typing the
+<VAR>suspend</VAR> character (typically <SAMP>`^Z'</SAMP>, Control-Z) while a
+process is running causes that process to be stopped and returns
+control to Bash.  Typing the <VAR>delayed suspend</VAR> character
+(typically <SAMP>`^Y'</SAMP>, Control-Y) causes the process to be stopped
+when it attempts to read input from the terminal, and control to
+be returned to Bash.  The user then manipulates the state of
+this job, using the <CODE>bg</CODE> command to continue it in the
+background, the <CODE>fg</CODE> command to continue it in the
+foreground, or the <CODE>kill</CODE> command to kill it.  A <SAMP>`^Z'</SAMP>
+takes effect immediately, and has the additional side effect of
+causing pending output and typeahead to be discarded. 
+
+</P>
+<P>
+There are a number of ways to refer to a job in the shell.  The
+character <SAMP>`%'</SAMP> introduces a job name.  Job number <CODE>n</CODE>
+may be referred to as <SAMP>`%n'</SAMP>.  A job may also be referred to
+using a prefix of the name used to start it, or using a substring
+that appears in its command line.  For example, <SAMP>`%ce'</SAMP> refers
+to a stopped <CODE>ce</CODE> job. Using <SAMP>`%?ce'</SAMP>, on the
+other hand, refers to any job containing the string <SAMP>`ce'</SAMP> in
+its command line.  If the prefix or substring matches more than one job,
+Bash reports an error.  The symbols <SAMP>`%%'</SAMP> and
+<SAMP>`%+'</SAMP> refer to the shell's notion of the current job, which
+is the last job stopped while it was in the foreground or started
+in the background.  The
+previous job may be referenced using <SAMP>`%-'</SAMP>.  In output
+pertaining to jobs (e.g., the output of the <CODE>jobs</CODE> command),
+the current job is always flagged with a <SAMP>`+'</SAMP>, and the
+previous job with a <SAMP>`-'</SAMP>. 
+
+</P>
+<P>
+Simply naming a job can be used to bring it into the foreground:
+<SAMP>`%1'</SAMP> is a synonym for <SAMP>`fg %1'</SAMP>, bringing job 1 from 
the
+background into the foreground.  Similarly, <SAMP>`%1 &#38;'</SAMP> resumes
+job 1 in the background, equivalent to <SAMP>`bg %1'</SAMP>
+
+</P>
+<P>
+The shell learns immediately whenever a job changes state. 
+Normally, Bash waits until it is about to print a prompt
+before reporting changes in a job's status so as to not interrupt
+any other output.  If the 
+the <SAMP>`-b'</SAMP> option to the <CODE>set</CODE> builtin is enabled,
+Bash reports such changes immediately (see section <A 
HREF="bashref.html#SEC64">The Set Builtin</A>).
+
+</P>
+<P>
+If an attempt to exit Bash is while jobs are stopped, the
+shell prints a message warning that there are stopped jobs.
+The <CODE>jobs</CODE> command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+Bash does not print another warning, and the stopped jobs are terminated.
+
+</P>
+
+
+<H2><A NAME="SEC77" HREF="bashref.html#TOC77">Job Control Builtins</A></H2>
+
+<DL COMPACT>
+
+<DT><CODE>bg</CODE>
+<DD>
+<A NAME="IDX219"></A>
+
+<PRE>
+bg [<VAR>jobspec</VAR>]
+</PRE>
+
+Resume the suspended job <VAR>jobspec</VAR> in the background, as if it
+had been started with <SAMP>`&#38;'</SAMP>.
+If <VAR>jobspec</VAR> is not supplied, the current job is used.
+The return status is zero unless it is run when job control is not
+enabled, or, when run with job control enabled, if <VAR>jobspec</VAR> was
+not found or <VAR>jobspec</VAR> specifies a job that was started without
+job control.
+
+<DT><CODE>fg</CODE>
+<DD>
+<A NAME="IDX220"></A>
+
+<PRE>
+fg [<VAR>jobspec</VAR>]
+</PRE>
+
+Resume the job <VAR>jobspec</VAR> in the foreground and make it the current 
job.
+If <VAR>jobspec</VAR> is not supplied, the current job is used.
+The return status is that of the command placed into the foreground,
+or non-zero if run when job control is disabled or, when run with
+job control enabled, <VAR>jobspec</VAR> does not specify a valid job or
+<VAR>jobspec</VAR> specifies a job that was started without job control.
+
+<DT><CODE>jobs</CODE>
+<DD>
+<A NAME="IDX221"></A>
+
+<PRE>
+jobs [-lpnrs] [<VAR>jobspec</VAR>]
+jobs -x <VAR>command</VAR> [<VAR>arguments</VAR>]
+</PRE>
+
+The first form lists the active jobs.  The options have the
+following meanings:
+
+<DL COMPACT>
+
+<DT><CODE>-l</CODE>
+<DD>
+List process IDs in addition to the normal information.
+
+<DT><CODE>-n</CODE>
+<DD>
+Display information only about jobs that have changed status since
+the user was last notified of their status.
+
+<DT><CODE>-p</CODE>
+<DD>
+List only the process ID of the job's process group leader.
+
+<DT><CODE>-r</CODE>
+<DD>
+Restrict output to running jobs.
+
+<DT><CODE>-s</CODE>
+<DD>
+Restrict output to stopped jobs.
+</DL>
+
+If <VAR>jobspec</VAR> is given,
+output is restricted to information about that job. 
+If <VAR>jobspec</VAR> is not supplied, the status of all jobs is
+listed.
+
+If the <SAMP>`-x'</SAMP> option is supplied, <CODE>jobs</CODE> replaces any
+<VAR>jobspec</VAR> found in <VAR>command</VAR> or <VAR>arguments</VAR> with the
+corresponding process group ID, and executes <VAR>command</VAR>,
+passing it <VAR>argument</VAR>s, returning its exit status. 
+
+<DT><CODE>kill</CODE>
+<DD>
+<A NAME="IDX222"></A>
+
+<PRE>
+kill [-s <VAR>sigspec</VAR>] [-n <VAR>signum</VAR>] [-<VAR>sigspec</VAR>] 
<VAR>jobspec</VAR> or <VAR>pid</VAR>
+kill -l [<VAR>exit_status</VAR>]
+</PRE>
+
+Send a signal specified by <VAR>sigspec</VAR> or <VAR>signum</VAR> to the 
process
+named by job specification <VAR>jobspec</VAR> or process ID <VAR>pid</VAR>.
+<VAR>sigspec</VAR> is either a signal name such as <CODE>SIGINT</CODE> (with 
or without
+the <CODE>SIG</CODE> prefix) or a signal number; <VAR>signum</VAR> is a signal 
number.
+If <VAR>sigspec</VAR> and <VAR>signum</VAR> are not present, 
<CODE>SIGTERM</CODE> is used.
+The <SAMP>`-l'</SAMP> option lists the signal names.
+If any arguments are supplied when <SAMP>`-l'</SAMP> is given, the names of the
+signals corresponding to the arguments are listed, and the return status
+is zero.
+<VAR>exit_status</VAR> is a number specifying a signal number or the exit
+status of a process terminated by a signal.
+The return status is zero if at least one signal was successfully sent,
+or non-zero if an error occurs or an invalid option is encountered.
+
+<DT><CODE>wait</CODE>
+<DD>
+<A NAME="IDX223"></A>
+
+<PRE>
+wait [<VAR>jobspec</VAR>|<VAR>pid</VAR>]
+</PRE>
+
+Wait until the child process specified by process ID <VAR>pid</VAR> or job
+specification <VAR>jobspec</VAR> exits and return the exit status of the last
+command waited for.
+If a job spec is given, all processes in the job are waited for.
+If no arguments are given, all currently active child processes are
+waited for, and the return status is zero.
+If neither <VAR>jobspec</VAR> nor <VAR>pid</VAR> specifies an active child 
process
+of the shell, the return status is 127.
+
+<DT><CODE>disown</CODE>
+<DD>
+<A NAME="IDX224"></A>
+
+<PRE>
+disown [-ar] [-h] [<VAR>jobspec</VAR> ...]
+</PRE>
+
+Without options, each <VAR>jobspec</VAR> is removed from the table of
+active jobs.
+If the <SAMP>`-h'</SAMP> option is given, the job is not removed from the 
table,
+but is marked so that <CODE>SIGHUP</CODE> is not sent to the job if the shell
+receives a <CODE>SIGHUP</CODE>.
+If <VAR>jobspec</VAR> is not present, and neither the <SAMP>`-a'</SAMP> nor 
<SAMP>`-r'</SAMP>
+option is supplied, the current job is used.
+If no <VAR>jobspec</VAR> is supplied, the <SAMP>`-a'</SAMP> option means to 
remove or
+mark all jobs; the <SAMP>`-r'</SAMP> option without a <VAR>jobspec</VAR>
+argument restricts operation to running jobs.
+
+<DT><CODE>suspend</CODE>
+<DD>
+<A NAME="IDX225"></A>
+
+<PRE>
+suspend [-f]
+</PRE>
+
+Suspend the execution of this shell until it receives a
+<CODE>SIGCONT</CODE> signal.  The <SAMP>`-f'</SAMP> option means to suspend
+even if the shell is a login shell.
+
+</DL>
+
+<P>
+When job control is not active, the <CODE>kill</CODE> and <CODE>wait</CODE>
+builtins do not accept <VAR>jobspec</VAR> arguments.  They must be
+supplied process IDs.
+
+</P>
+
+
+<H2><A NAME="SEC78" HREF="bashref.html#TOC78">Job Control Variables</A></H2>
+
+<DL COMPACT>
+
+<DT><CODE>auto_resume</CODE>
+<DD>
+<A NAME="IDX226"></A>
+This variable controls how the shell interacts with the user and
+job control.  If this variable exists then single word simple
+commands without redirections are treated as candidates for resumption
+of an existing job.  There is no ambiguity allowed; if there is
+more than one job beginning with the string typed, then
+the most recently accessed job will be selected.
+The name of a stopped job, in this context, is the command line
+used to start it.  If this variable is set to the value <SAMP>`exact'</SAMP>,
+the string supplied must match the name of a stopped job exactly;
+if set to <SAMP>`substring'</SAMP>,
+the string supplied needs to match a substring of the name of a
+stopped job.  The <SAMP>`substring'</SAMP> value provides functionality
+analogous to the <SAMP>`%?'</SAMP> job ID (see section <A 
HREF="bashref.html#SEC76">Job Control Basics</A>).
+If set to any other value, the supplied string must
+be a prefix of a stopped job's name; this provides functionality
+analogous to the <SAMP>`%'</SAMP> job ID.
+
+</DL>
+
+<P>
+<A NAME="IDX227"></A>
+
+</P>
+
+
+<H1><A NAME="SEC79" HREF="bashref.html#TOC79">Using History 
Interactively</A></H1>
+
+<P>
+This chapter describes how to use the GNU History Library interactively,
+from a user's standpoint.  It should be considered a user's guide.  For
+information on using the GNU History Library in other programs,
+see the GNU Readline Library Manual.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC80">Bash History Facilities</A>: How Bash lets 
you manipulate your command
+                               history.
+<LI><A HREF="bashref.html#SEC81">Bash History Builtins</A>: The Bash builtin 
commands that manipulate
+                               the command history.
+<LI><A HREF="bashref.html#SEC82">History Interaction</A>: What it feels like 
using History as a user.
+</UL>
+
+
+
+<H2><A NAME="SEC80" HREF="bashref.html#TOC80">Bash History Facilities</A></H2>
+<P>
+<A NAME="IDX228"></A>
+<A NAME="IDX229"></A>
+
+</P>
+<P>
+When the <SAMP>`-o history'</SAMP> option to the <CODE>set</CODE> builtin
+is enabled (see section <A HREF="bashref.html#SEC64">The Set Builtin</A>),
+the shell provides access to the <VAR>command history</VAR>,
+the list of commands previously typed.  The text of the last
+<CODE>HISTSIZE</CODE>
+commands (default 500) is saved in a history list.  The shell
+stores each command in the history list prior to parameter and
+variable expansion
+but after history expansion is performed, subject to the
+values of the shell variables
+<CODE>HISTIGNORE</CODE> and <CODE>HISTCONTROL</CODE>.
+When the shell starts up, the history is initialized from the
+file named by the <CODE>HISTFILE</CODE> variable (default 
<TT>`~/.bash_history'</TT>).
+<CODE>HISTFILE</CODE> is truncated, if necessary, to contain no more than
+the number of lines specified by the value of the <CODE>HISTFILESIZE</CODE>
+variable.  When an interactive shell exits, the last
+<CODE>HISTSIZE</CODE> lines are copied from the history list to 
<CODE>HISTFILE</CODE>.
+If the <CODE>histappend</CODE> shell option is set (see section <A 
HREF="bashref.html#SEC63">Bash Builtin Commands</A>),
+the lines are appended to the history file,
+otherwise the history file is overwritten.
+If <CODE>HISTFILE</CODE>
+is unset, or if the history file is unwritable, the history is
+not saved.  After saving the history, the history file is truncated
+to contain no more than <CODE>$HISTFILESIZE</CODE>
+lines.  If <CODE>HISTFILESIZE</CODE> is not set, no truncation is performed.
+
+</P>
+<P>
+The builtin command <CODE>fc</CODE> may be used to list or edit and re-execute
+a portion of the history list.
+The <CODE>history</CODE> builtin can be used to display or modify the history
+list and manipulate the history file.
+When using the command-line editing, search commands
+are available in each editing mode that provide access to the
+history list.
+
+</P>
+<P>
+The shell allows control over which commands are saved on the history
+list.  The <CODE>HISTCONTROL</CODE> and <CODE>HISTIGNORE</CODE>
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The <CODE>cmdhist</CODE>
+shell option, if enabled, causes the shell to attempt to save each
+line of a multi-line command in the same history entry, adding
+semicolons where necessary to preserve syntactic correctness.
+The <CODE>lithist</CODE>
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons.
+See section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>, for a 
description of <CODE>shopt</CODE>.
+
+</P>
+
+
+<H2><A NAME="SEC81" HREF="bashref.html#TOC81">Bash History Builtins</A></H2>
+<P>
+<A NAME="IDX230"></A>
+
+</P>
+<P>
+Bash provides two builtin commands that allow you to manipulate the
+history list and history file.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>fc</CODE>
+<DD>
+<A NAME="IDX231"></A>
+
+<PRE>
+<CODE>fc [-e <VAR>ename</VAR>] [-nlr] [<VAR>first</VAR>] 
[<VAR>last</VAR>]</CODE>
+<CODE>fc -s [<VAR>pat</VAR>=<VAR>rep</VAR>] [<VAR>command</VAR>]</CODE>
+</PRE>
+
+Fix Command.  In the first form, a range of commands from <VAR>first</VAR> to
+<VAR>last</VAR> is selected from the history list.  Both <VAR>first</VAR> and
+<VAR>last</VAR> may be specified as a string (to locate the most recent
+command beginning with that string) or as a number (an index into the
+history list, where a negative number is used as an offset from the
+current command number).  If <VAR>last</VAR> is not specified it is set to
+<VAR>first</VAR>.  If <VAR>first</VAR> is not specified it is set to the 
previous
+command for editing and -16 for listing.  If the <SAMP>`-l'</SAMP> flag is
+given, the commands are listed on standard output.  The <SAMP>`-n'</SAMP> flag
+suppresses the command numbers when listing.  The <SAMP>`-r'</SAMP> flag
+reverses the order of the listing.  Otherwise, the editor given by
+<VAR>ename</VAR> is invoked on a file containing those commands.  If
+<VAR>ename</VAR> is not given, the value of the following variable expansion
+is used: <CODE>${FCEDIT:-${EDITOR:-vi}}</CODE>.  This says to use the
+value of the <CODE>FCEDIT</CODE> variable if set, or the value of the
+<CODE>EDITOR</CODE> variable if that is set, or <CODE>vi</CODE> if neither is 
set.
+When editing is complete, the edited commands are echoed and executed.
+
+In the second form, <VAR>command</VAR> is re-executed after each instance
+of <VAR>pat</VAR> in the selected command is replaced by <VAR>rep</VAR>.
+
+A useful alias to use with the <CODE>fc</CODE> command is <CODE>r='fc 
-s'</CODE>, so
+that typing <SAMP>`r cc'</SAMP> runs the last command beginning with 
<CODE>cc</CODE>
+and typing <SAMP>`r'</SAMP> re-executes the last command (see section <A 
HREF="bashref.html#SEC68">Aliases</A>).
+
+<DT><CODE>history</CODE>
+<DD>
+<A NAME="IDX232"></A>
+
+<PRE>
+history [-c] [<VAR>n</VAR>]
+history [-anrw] [<VAR>filename</VAR>]
+history -ps <VAR>arg</VAR>
+</PRE>
+
+Display the history list with line numbers.  Lines prefixed with
+with a <SAMP>`*'</SAMP> have been modified.  An argument of <VAR>n</VAR> says
+to list only the last <VAR>n</VAR> lines.  Options, if supplied, have
+the following meanings:
+
+<DL COMPACT>
+
+<DT><CODE>-w</CODE>
+<DD>
+Write out the current history to the history file.
+
+<DT><CODE>-r</CODE>
+<DD>
+Read the current history file and append its contents to
+the history list.
+
+<DT><CODE>-a</CODE>
+<DD>
+Append the new
+history lines (history lines entered since the beginning of the
+current Bash session) to the history file.
+
+<DT><CODE>-n</CODE>
+<DD>
+Append the history lines not already read from the history file
+to the current history list.  These are lines appended to the history
+file since the beginning of the current Bash session.
+
+<DT><CODE>-c</CODE>
+<DD>
+Clear the history list.  This may be combined
+with the other options to replace the history list completely.
+
+<DT><CODE>-s</CODE>
+<DD>
+The <VAR>arg</VAR>s are added to the end of
+the history list as a single entry.
+
+<DT><CODE>-p</CODE>
+<DD>
+Perform history substitution on the <VAR>arg</VAR>s and display the result
+on the standard output, without storing the results in the history list.
+</DL>
+
+When the <SAMP>`-w'</SAMP>, <SAMP>`-r'</SAMP>, <SAMP>`-a'</SAMP>, or 
<SAMP>`-n'</SAMP> option is
+used, if <VAR>filename</VAR>
+is given, then it is used as the history file.  If not, then
+the value of the <CODE>HISTFILE</CODE> variable is used.
+
+</DL>
+
+
+
+<H2><A NAME="SEC82" HREF="bashref.html#TOC82">History Expansion</A></H2>
+<P>
+<A NAME="IDX233"></A>
+
+</P>
+<P>
+The History library provides a history expansion feature that is similar
+to the history expansion provided by <CODE>csh</CODE>.  This section
+describes the syntax used to manipulate the history information.
+
+</P>
+<P>
+History expansions introduce words from the history list into
+the input stream, making it easy to repeat commands, insert the
+arguments to a previous command into the current input line, or
+fix errors in previous commands quickly.
+
+</P>
+<P>
+History expansion takes place in two parts.  The first is to determine
+which line from the history list should be used during substitution.
+The second is to select portions of that line for inclusion into the
+current one.  The line selected from the history is called the
+<EM>event</EM>, and the portions of that line that are acted upon are
+called <EM>words</EM>.  Various <EM>modifiers</EM> are available to manipulate
+the selected words.  The line is broken into words in the same fashion
+that Bash does, so that several words
+surrounded by quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is <SAMP>`!'</SAMP> by default.
+Only <SAMP>`\'</SAMP> and <SAMP>`''</SAMP> may be used to escape the history 
expansion
+character.
+
+</P>
+<P>
+Several shell options settable with the <CODE>shopt</CODE>
+builtin (see section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>) 
may be used to tailor
+the behavior of history expansion.  If the
+<CODE>histverify</CODE> shell option is enabled, and Readline
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification.
+If Readline is being used, and the <CODE>histreedit</CODE>
+shell option is enabled, a failed history expansion will be
+reloaded into the Readline editing buffer for correction.
+The <SAMP>`-p'</SAMP> option to the <CODE>history</CODE> builtin command
+may be used to see what a history expansion will do before using it.
+The <SAMP>`-s'</SAMP> option to the <CODE>history</CODE> builtin may be used to
+add commands to the end of the history list without actually executing
+them, so that they are available for subsequent recall.
+This is most useful in conjunction with Readline.
+
+</P>
+<P>
+The shell allows control of the various characters used by the
+history expansion mechanism with the <CODE>histchars</CODE> variable.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC83">Event Designators</A>: How to specify which 
history line to use.
+<LI><A HREF="bashref.html#SEC84">Word Designators</A>: Specifying which words 
are of interest.
+<LI><A HREF="bashref.html#SEC85">Modifiers</A>: Modifying the results of 
substitution.
+</UL>
+
+
+
+<H3><A NAME="SEC83" HREF="bashref.html#TOC83">Event Designators</A></H3>
+<P>
+<A NAME="IDX234"></A>
+
+</P>
+<P>
+An event designator is a reference to a command line entry in the
+history list.
+<A NAME="IDX235"></A>
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>!</CODE>
+<DD>
+Start a history substitution, except when followed by a space, tab,
+the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>.
+
+<DT><CODE>!<VAR>n</VAR></CODE>
+<DD>
+Refer to command line <VAR>n</VAR>.
+
+<DT><CODE>!-<VAR>n</VAR></CODE>
+<DD>
+Refer to the command <VAR>n</VAR> lines back.
+
+<DT><CODE>!!</CODE>
+<DD>
+Refer to the previous command.  This is a synonym for <SAMP>`!-1'</SAMP>.
+
+<DT><CODE>!<VAR>string</VAR></CODE>
+<DD>
+Refer to the most recent command starting with <VAR>string</VAR>.
+
+<DT><CODE>!?<VAR>string</VAR>[?]</CODE>
+<DD>
+Refer to the most recent command containing <VAR>string</VAR>.  The trailing
+<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed 
immediately by
+a newline.
+
+<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE>
+<DD>
+Quick Substitution.  Repeat the last command, replacing <VAR>string1</VAR>
+with <VAR>string2</VAR>.  Equivalent to
+<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>.
+
+<DT><CODE>!#</CODE>
+<DD>
+The entire command line typed so far.
+
+</DL>
+
+
+
+<H3><A NAME="SEC84" HREF="bashref.html#TOC84">Word Designators</A></H3>
+
+<P>
+Word designators are used to select desired words from the event.
+A <SAMP>`:'</SAMP> separates the event specification from the word designator. 
 It
+may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, 
<SAMP>`$'</SAMP>,
+<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>.  Words are numbered 
from the beginning
+of the line, with the first word being denoted by 0 (zero).  Words are
+inserted into the current line separated by single spaces.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>0 (zero)</CODE>
+<DD>
+The <CODE>0</CODE>th word.  For many applications, this is the command word.
+
+<DT><CODE><VAR>n</VAR></CODE>
+<DD>
+The <VAR>n</VAR>th word.
+
+<DT><CODE>^</CODE>
+<DD>
+The first argument; that is, word 1.
+
+<DT><CODE>$</CODE>
+<DD>
+The last argument.
+
+<DT><CODE>%</CODE>
+<DD>
+The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
+
+<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE>
+<DD>
+A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates 
<SAMP>`0-<VAR>y</VAR>'</SAMP>.
+
+<DT><CODE>*</CODE>
+<DD>
+All of the words, except the <CODE>0</CODE>th.  This is a synonym for 
<SAMP>`1-$'</SAMP>.
+It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the 
event;
+the empty string is returned in that case.
+
+<DT><CODE><VAR>x</VAR>*</CODE>
+<DD>
+Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
+
+<DT><CODE><VAR>x</VAR>-</CODE>
+<DD>
+Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, 
but omits the last word.
+
+</DL>
+
+<P>
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+</P>
+
+
+<H3><A NAME="SEC85" HREF="bashref.html#TOC85">Modifiers</A></H3>
+
+<P>
+After the optional word designator, you can add a sequence of one or more
+of the following modifiers, each preceded by a <SAMP>`:'</SAMP>.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>h</CODE>
+<DD>
+Remove a trailing pathname component, leaving only the head.
+
+<DT><CODE>t</CODE>
+<DD>
+Remove all leading  pathname  components, leaving the tail.
+
+<DT><CODE>r</CODE>
+<DD>
+Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
+the basename.
+
+<DT><CODE>e</CODE>
+<DD>
+Remove all but the trailing suffix.
+
+<DT><CODE>p</CODE>
+<DD>
+Print the new command but do not execute it.
+
+<DT><CODE>q</CODE>
+<DD>
+Quote the substituted words, escaping further substitutions.
+
+<DT><CODE>x</CODE>
+<DD>
+Quote the substituted words as with <SAMP>`q'</SAMP>,
+but break into words at spaces, tabs, and newlines.
+
+<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>
+<DD>
+Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
+event line.  Any delimiter may be used in place of <SAMP>`/'</SAMP>.
+The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR>
+with a single backslash.  If <SAMP>`&#38;'</SAMP> appears in <VAR>new</VAR>,
+it is replaced by <VAR>old</VAR>.  A single backslash will quote
+the <SAMP>`&#38;'</SAMP>.  The final delimiter is optional if it is the last
+character on the input line.
+
+<DT><CODE>&#38;</CODE>
+<DD>
+Repeat the previous substitution.
+
+<DT><CODE>g</CODE>
+<DD>
+Cause changes to be applied over the entire event line.  Used in
+conjunction with <SAMP>`s'</SAMP>, as in 
<CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>,
+or with <SAMP>`&#38;'</SAMP>.
+
+</DL>
+<P>
+<A NAME="IDX236"></A>
+
+</P>
+
+
+
+<H1><A NAME="SEC86" HREF="bashref.html#TOC86">Command Line Editing</A></H1>
+
+<P>
+This chapter describes the basic features of the GNU
+command line editing interface.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC87">Introduction and Notation</A>: Notation used 
in this text.
+<LI><A HREF="bashref.html#SEC88">Readline Interaction</A>: The minimum set of 
commands for editing a line.
+<LI><A HREF="bashref.html#SEC94">Readline Init File</A>: Customizing Readline 
from a user's view.
+<LI><A HREF="bashref.html#SEC98">Bindable Readline Commands</A>: A description 
of most of the Readline commands
+                               available for binding
+<LI><A HREF="bashref.html#SEC107">Readline vi Mode</A>: A short description of 
how to make Readline
+                               behave like the vi editor.
+</UL>
+
+
+
+<H2><A NAME="SEC87" HREF="bashref.html#TOC87">Introduction to Line 
Editing</A></H2>
+
+<P>
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+</P>
+<P>
+The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
+produced when the <KBD>k</KBD> key is pressed while the Control key
+is depressed.
+
+</P>
+<P>
+The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
+produced when the meta key (if you have one) is depressed, and the <KBD>k</KBD>
+key is pressed.  If you do not have a meta key, the identical keystroke
+can be generated by typing <KBD>ESC</KBD> <I>first</I>, and then typing 
<KBD>k</KBD>.
+Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
+
+</P>
+<P>
+The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
+character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
+
+</P>
+<P>
+In addition, several keys have their own names.  Specifically,
+<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, 
<KBD>RET</KBD>, and <KBD>TAB</KBD> all
+stand for themselves when seen in this text, or in an init file
+(see section <A HREF="bashref.html#SEC94">Readline Init File</A>).
+
+</P>
+
+
+<H2><A NAME="SEC88" HREF="bashref.html#TOC88">Readline Interaction</A></H2>
+<P>
+<A NAME="IDX237"></A>
+
+</P>
+<P>
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled.  The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line.  Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections.  Then, when you are satisfied with
+the line, you simply press <KBD>RETURN</KBD>.  You do not have to be at the
+end of the line to press <KBD>RETURN</KBD>; the entire line is accepted
+regardless of the location of the cursor within the line.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC89">Readline Bare Essentials</A>: The least you 
need to know about Readline.
+<LI><A HREF="bashref.html#SEC90">Readline Movement Commands</A>: Moving about 
the input line.
+<LI><A HREF="bashref.html#SEC91">Readline Killing Commands</A>: How to delete 
text, and how to get it back!
+<LI><A HREF="bashref.html#SEC92">Readline Arguments</A>: Giving numeric 
arguments to commands.
+<LI><A HREF="bashref.html#SEC93">Searching</A>: Searching through previous 
lines.
+</UL>
+
+
+
+<H3><A NAME="SEC89" HREF="bashref.html#TOC89">Readline Bare Essentials</A></H3>
+<P>
+<A NAME="IDX238"></A>
+<A NAME="IDX239"></A>
+<A NAME="IDX240"></A>
+
+</P>
+<P>
+In order to enter characters into the line, simply type them.  The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right.  If you mistype a character, you can use your
+erase character to back up and delete the mistyped character.
+
+</P>
+<P>
+Sometimes you may miss typing a character that you wanted to type, and
+not notice your error until you have typed several other characters.  In
+that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then
+correct your mistake.  Afterwards, you can move the cursor to the right
+with <KBD>C-f</KBD>.
+
+</P>
+<P>
+When you add text in the middle of a line, you will notice that characters
+to the right of the cursor are `pushed over' to make room for the text
+that you have inserted.  Likewise, when you delete text behind the cursor,
+characters to the right of the cursor are `pulled back' to fill in the
+blank space created by the removal of the text.  A list of the basic bare
+essentials for editing the text of an input line follows.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-b</KBD>
+<DD>
+Move back one character.
+<DT><KBD>C-f</KBD>
+<DD>
+Move forward one character.
+<DT><KBD>DEL</KBD>
+<DD>
+Delete the character to the left of the cursor.
+<DT><KBD>C-d</KBD>
+<DD>
+Delete the character underneath the cursor.
+<DT>Printing characters
+<DD>
+Insert the character into the line at the cursor.
+<DT><KBD>C-_</KBD>
+<DD>
+Undo the last editing command.  You can undo all the way back to an
+empty line.
+</DL>
+
+
+
+<H3><A NAME="SEC90" HREF="bashref.html#TOC90">Readline Movement 
Commands</A></H3>
+
+<P>
+The above table describes the most basic possible keystrokes that you need
+in order to do editing of the input line.  For your convenience, many
+other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>,
+<KBD>C-d</KBD>, and <KBD>DEL</KBD>.  Here are some commands for moving more 
rapidly
+about the line.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-a</KBD>
+<DD>
+Move to the start of the line.
+<DT><KBD>C-e</KBD>
+<DD>
+Move to the end of the line.
+<DT><KBD>M-f</KBD>
+<DD>
+Move forward a word, where a word is composed of letters and digits.
+<DT><KBD>M-b</KBD>
+<DD>
+Move backward a word.
+<DT><KBD>C-l</KBD>
+<DD>
+Clear the screen, reprinting the current line at the top.
+</DL>
+
+<P>
+Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
+forward a word.  It is a loose convention that control keystrokes
+operate on characters while meta keystrokes operate on words.
+
+</P>
+
+
+<H3><A NAME="SEC91" HREF="bashref.html#TOC91">Readline Killing 
Commands</A></H3>
+
+<P>
+<A NAME="IDX241"></A>
+<A NAME="IDX242"></A>
+
+</P>
+<P>
+<EM>Killing</EM> text means to delete the text from the line, but to save
+it away for later use, usually by <EM>yanking</EM> (re-inserting)
+it back into the line.
+If the description for a command says that it `kills' text, then you can
+be sure that you can get the text back in a different (or the same)
+place later.
+
+</P>
+<P>
+When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all.  The kill
+ring is not line specific; the text that you killed on a previously
+typed line is available to be yanked back later, when you are typing
+another line.
+<A NAME="IDX243"></A>
+
+</P>
+<P>
+Here is the list of commands for killing text.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-k</KBD>
+<DD>
+Kill the text from the current cursor position to the end of the line.
+
+<DT><KBD>M-d</KBD>
+<DD>
+Kill from the cursor to the end of the current word, or if between
+words, to the end of the next word.
+
+<DT><KBD>M-DEL</KBD>
+<DD>
+Kill from the cursor the start of the previous word, or if between
+words, to the start of the previous word.
+
+<DT><KBD>C-w</KBD>
+<DD>
+Kill from the cursor to the previous whitespace.  This is different than
+<KBD>M-DEL</KBD> because the word boundaries differ.
+
+</DL>
+
+<P>
+Here is how to <EM>yank</EM> the text back into the line.  Yanking
+means to copy the most-recently-killed text from the kill buffer.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-y</KBD>
+<DD>
+Yank the most recently killed text back into the buffer at the cursor.
+
+<DT><KBD>M-y</KBD>
+<DD>
+Rotate the kill-ring, and yank the new top.  You can only do this if
+the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
+</DL>
+
+
+
+<H3><A NAME="SEC92" HREF="bashref.html#TOC92">Readline Arguments</A></H3>
+
+<P>
+You can pass numeric arguments to Readline commands.  Sometimes the
+argument acts as a repeat count, other times it is the <I>sign</I> of the
+argument that is significant.  If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction.  For example, to kill text back to the
+start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
+
+</P>
+<P>
+The general way to pass numeric arguments to a command is to type meta
+digits before the command.  If the first `digit' typed is a minus
+sign (<KBD>-</KBD>), then the sign of the argument will be negative.  Once
+you have typed one meta digit to get the argument started, you can type
+the remainder of the digits, and then the command.  For example, to give
+the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 
C-d'</SAMP>.
+
+</P>
+
+
+<H3><A NAME="SEC93" HREF="bashref.html#TOC93">Searching for Commands in the 
History</A></H3>
+
+<P>
+Readline provides commands for searching through the command history
+(see section <A HREF="bashref.html#SEC80">Bash History Facilities</A>)
+for lines containing a specified string.
+There are two search modes:  <VAR>incremental</VAR> and 
<VAR>non-incremental</VAR>.
+
+</P>
+<P>
+Incremental searches begin before the user has finished typing the
+search string.
+As each character of the search string is typed, Readline displays
+the next entry from the history matching the string typed so far.
+An incremental search requires only as many characters as needed to
+find the desired history entry.
+The characters present in the value of the <VAR>isearch-terminators</VAR> 
variable
+are used to terminate an incremental search.
+If that variable has not been assigned a value, the <KBD>ESC</KBD> and
+<KBD>C-J</KBD> characters will terminate an incremental search.
+<KBD>C-g</KBD> will abort an incremental search and restore the original line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+To find other matching entries in the history list, type <KBD>C-s</KBD> or
+<KBD>C-r</KBD> as appropriate.
+This will search backward or forward in the history for the next
+entry matching the search string typed so far.
+Any other key sequence bound to a Readline command will terminate
+the search and execute that command.
+For instance, a <KBD>RET</KBD> will terminate the search and accept
+the line, thereby executing the command from the history list.
+
+</P>
+<P>
+Non-incremental searches read the entire search string before starting
+to search for matching history lines.  The search string may be
+typed by the user or be part of the contents of the current line.
+
+</P>
+
+
+<H2><A NAME="SEC94" HREF="bashref.html#TOC94">Readline Init File</A></H2>
+<P>
+<A NAME="IDX244"></A>
+
+</P>
+<P>
+Although the Readline library comes with a set of <CODE>emacs</CODE>-like
+keybindings installed by default, it is possible to use a different set
+of keybindings.
+Any user can customize programs that use Readline by putting
+commands in an <EM>inputrc</EM> file in his home directory.
+The name of this
+file is taken from the value of the shell variable <CODE>INPUTRC</CODE>.  If
+that variable is unset, the default is <TT>`~/.inputrc'</TT>.
+
+</P>
+<P>
+When a program which uses the Readline library starts up, the
+init file is read, and the key bindings are set.
+
+</P>
+<P>
+In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC95">Readline Init File Syntax</A>: Syntax for the 
commands in the inputrc file.
+
+<LI><A HREF="bashref.html#SEC96">Conditional Init Constructs</A>: Conditional 
key bindings in the inputrc file.
+
+<LI><A HREF="bashref.html#SEC97">Sample Init File</A>: An example inputrc file.
+</UL>
+
+
+
+<H3><A NAME="SEC95" HREF="bashref.html#TOC95">Readline Init File 
Syntax</A></H3>
+
+<P>
+There are only a few basic constructs allowed in the
+Readline init file.  Blank lines are ignored.
+Lines beginning with a <SAMP>`#'</SAMP> are comments.
+Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
+constructs (see section <A HREF="bashref.html#SEC96">Conditional Init 
Constructs</A>).  Other lines
+denote variable settings and key bindings.
+
+</P>
+<DL COMPACT>
+
+<DT>Variable Settings
+<DD>
+You can modify the run-time behavior of Readline by
+altering the values of variables in Readline
+using the <CODE>set</CODE> command within the init file.  Here is how to
+change from the default Emacs-like key binding to use
+<CODE>vi</CODE> line editing commands:
+
+
+<PRE>
+set editing-mode vi
+</PRE>
+
+A great deal of run-time behavior is changeable with the following
+variables.
+
+<DL COMPACT>
+
+<DT><CODE>bell-style</CODE>
+<DD>
+<A NAME="IDX245"></A>
+Controls what happens when Readline wants to ring the terminal bell.
+If set to <SAMP>`none'</SAMP>, Readline never rings the bell.  If set to
+<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
+If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
+the terminal's bell.
+
+<DT><CODE>comment-begin</CODE>
+<DD>
+<A NAME="IDX246"></A>
+The string to insert at the beginning of the line when the
+<CODE>insert-comment</CODE> command is executed.  The default value
+is <CODE>"#"</CODE>.
+
+<DT><CODE>completion-ignore-case</CODE>
+<DD>
+If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
+in a case-insensitive fashion.
+The default value is <SAMP>`off'</SAMP>.
+
+<DT><CODE>completion-query-items</CODE>
+<DD>
+<A NAME="IDX247"></A>
+The number of possible completions that determines when the user is
+asked whether he wants to see the list of possibilities.  If the
+number of possible completions is greater than this value,
+Readline will ask the user whether or not he wishes to view
+them; otherwise, they are simply listed.  The default limit is
+<CODE>100</CODE>.
+
+<DT><CODE>convert-meta</CODE>
+<DD>
+<A NAME="IDX248"></A>
+If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
+eighth bit set to an ASCII key sequence by stripping the eighth
+bit and prepending an <KBD>ESC</KBD> character, converting them to a
+meta-prefixed key sequence.  The default value is <SAMP>`on'</SAMP>.
+
+<DT><CODE>disable-completion</CODE>
+<DD>
+<A NAME="IDX249"></A>
+If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
+Completion  characters will be inserted into the line as if they had
+been mapped to <CODE>self-insert</CODE>.  The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>editing-mode</CODE>
+<DD>
+<A NAME="IDX250"></A>
+The <CODE>editing-mode</CODE> variable controls which default set of
+key bindings is used.  By default, Readline starts up in Emacs editing
+mode, where the keystrokes are most similar to Emacs.  This variable can be
+set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
+
+<DT><CODE>enable-keypad</CODE>
+<DD>
+<A NAME="IDX251"></A>
+When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
+keypad when it is called.  Some systems need this to enable the
+arrow keys.  The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>expand-tilde</CODE>
+<DD>
+<A NAME="IDX252"></A>
+If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
+attempts word completion.  The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>horizontal-scroll-mode</CODE>
+<DD>
+<A NAME="IDX253"></A>
+This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>.  
Setting it
+to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
+horizontally on a single screen line when they are longer than the width
+of the screen, instead of wrapping onto a new screen line.  By default,
+this variable is set to <SAMP>`off'</SAMP>.
+
+<DT><CODE>input-meta</CODE>
+<DD>
+<A NAME="IDX254"></A>
+<A NAME="IDX255"></A>
+If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
+will not strip the eighth bit from the characters it reads),
+regardless of what the terminal claims it can support.  The
+default value is <SAMP>`off'</SAMP>.  The name <CODE>meta-flag</CODE> is a
+synonym for this variable.
+
+<DT><CODE>isearch-terminators</CODE>
+<DD>
+<A NAME="IDX256"></A>
+The string of characters that should terminate an incremental search without
+subsequently executing the character as a command (see section <A 
HREF="bashref.html#SEC93">Searching for Commands in the History</A>).
+If this variable has not been given a value, the characters <KBD>ESC</KBD> and
+<KBD>C-J</KBD> will terminate an incremental search.
+
+<DT><CODE>keymap</CODE>
+<DD>
+<A NAME="IDX257"></A>
+Sets Readline's idea of the current keymap for key binding commands.
+Acceptable <CODE>keymap</CODE> names are
+<CODE>emacs</CODE>,
+<CODE>emacs-standard</CODE>,
+<CODE>emacs-meta</CODE>,
+<CODE>emacs-ctlx</CODE>,
+<CODE>vi</CODE>,
+<CODE>vi-command</CODE>, and
+<CODE>vi-insert</CODE>.
+<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is
+equivalent to <CODE>emacs-standard</CODE>.  The default value is 
<CODE>emacs</CODE>.
+The value of the <CODE>editing-mode</CODE> variable also affects the
+default keymap.
+
+<DT><CODE>mark-directories</CODE>
+<DD>
+If set to <SAMP>`on'</SAMP>, completed directory names have a slash
+appended.  The default is <SAMP>`on'</SAMP>.
+
+<DT><CODE>mark-modified-lines</CODE>
+<DD>
+<A NAME="IDX258"></A>
+This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
+asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been 
modified.
+This variable is <SAMP>`off'</SAMP> by default.
+
+<DT><CODE>output-meta</CODE>
+<DD>
+<A NAME="IDX259"></A>
+If set to <SAMP>`on'</SAMP>, Readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.  The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>print-completions-horizontally</CODE>
+<DD>
+If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>show-all-if-ambiguous</CODE>
+<DD>
+<A NAME="IDX260"></A>
+This alters the default behavior of the completion functions.  If
+set to <SAMP>`on'</SAMP>, 
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+The default value is <SAMP>`off'</SAMP>.
+
+<DT><CODE>visible-stats</CODE>
+<DD>
+<A NAME="IDX261"></A>
+If set to <SAMP>`on'</SAMP>, a character denoting a file's type
+is appended to the filename when listing possible
+completions.  The default is <SAMP>`off'</SAMP>.
+
+</DL>
+
+<DT>Key Bindings
+<DD>
+The syntax for controlling key bindings in the init file is
+simple.  First you have to know the name of the command that you
+want to change.  The following sections contain tables of the command
+name, the default keybinding, if any, and a short description of what
+the command does.
+
+Once you know the name of the command, simply place the name of the key
+you wish to bind the command to, a colon, and then the name of the
+command on a line in the init file.  The name of the key
+can be expressed in different ways, depending on which is most
+comfortable for you.
+
+<DL COMPACT>
+
+<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
+<DD>
+<VAR>keyname</VAR> is the name of a key spelled out in English.  For example:
+
+<PRE>
+Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: "&#62; output"
+</PRE>
+
+In the above example, <KBD>C-u</KBD> is bound to the function
+<CODE>universal-argument</CODE>, and <KBD>C-o</KBD> is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+<SAMP>`&#62; output'</SAMP> into the line).
+
+<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
+<DD>
+<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
+denoting an entire key sequence can be specified, by placing
+the key sequence in double quotes.  Some GNU Emacs style key
+escapes can be used, as in the following example, but the
+special character names are not recognized.
+
+
+<PRE>
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
+"\e[11~": "Function Key 1"
+</PRE>
+
+In the above example, <KBD>C-u</KBD> is bound to the function
+<CODE>universal-argument</CODE> (just as it was in the first example),
+<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function 
<CODE>re-read-init-file</CODE>,
+and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> 
<KBD>~</KBD>'</SAMP> is bound to insert
+the text <SAMP>`Function Key 1'</SAMP>.
+
+</DL>
+
+The following GNU Emacs style escape sequences are available when
+specifying key sequences:
+
+<DL COMPACT>
+
+<DT><CODE><KBD>\C-</KBD></CODE>
+<DD>
+control prefix
+<DT><CODE><KBD>\M-</KBD></CODE>
+<DD>
+meta prefix
+<DT><CODE><KBD>\e</KBD></CODE>
+<DD>
+an escape character
+<DT><CODE><KBD>\\</KBD></CODE>
+<DD>
+backslash
+<DT><CODE><KBD>\"</KBD></CODE>
+<DD>
+<KBD>"</KBD>
+<DT><CODE><KBD>\'</KBD></CODE>
+<DD>
+<KBD>'</KBD>
+</DL>
+
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+
+<DL COMPACT>
+
+<DT><CODE>\a</CODE>
+<DD>
+alert (bell)
+<DT><CODE>\b</CODE>
+<DD>
+backspace
+<DT><CODE>\d</CODE>
+<DD>
+delete
+<DT><CODE>\f</CODE>
+<DD>
+form feed
+<DT><CODE>\n</CODE>
+<DD>
+newline
+<DT><CODE>\r</CODE>
+<DD>
+carriage return
+<DT><CODE>\t</CODE>
+<DD>
+horizontal tab
+<DT><CODE>\v</CODE>
+<DD>
+vertical tab
+<DT><CODE>\<VAR>nnn</VAR></CODE>
+<DD>
+the character whose ASCII code is the octal value <VAR>nnn</VAR>
+(one to three digits)
+<DT><CODE>\x<VAR>nnn</VAR></CODE>
+<DD>
+the character whose ASCII code is the hexadecimal value <VAR>nnn</VAR>
+(one to three digits)
+</DL>
+
+When entering the text of a macro, single or double quotes must
+be used to indicate a macro definition.
+Unquoted text is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
+For example, the following binding will make <SAMP>`C-x \'</SAMP>
+insert a single <SAMP>`\'</SAMP> into the line:
+
+<PRE>
+"\C-x\\": "\\"
+</PRE>
+
+</DL>
+
+
+
+<H3><A NAME="SEC96" HREF="bashref.html#TOC96">Conditional Init 
Constructs</A></H3>
+
+<P>
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key
+bindings and variable settings to be performed as the result
+of tests.  There are four parser directives used.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>$if</CODE>
+<DD>
+The <CODE>$if</CODE> construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+Readline.  The text of the test extends to the end of the line;
+no characters are required to isolate it.
+
+<DL COMPACT>
+
+<DT><CODE>mode</CODE>
+<DD>
+The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
+whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
+This may be used in conjunction
+with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
+the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
+Readline is starting out in <CODE>emacs</CODE> mode.
+
+<DT><CODE>term</CODE>
+<DD>
+The <CODE>term=</CODE> form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal's function keys.  The word on the right side of the
+<SAMP>`='</SAMP> is tested against both the full name of the terminal and
+the portion of the terminal name before the first <SAMP>`-'</SAMP>.  This
+allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and 
<CODE>sun-cmd</CODE>,
+for instance.
+
+<DT><CODE>application</CODE>
+<DD>
+The <VAR>application</VAR> construct is used to include
+application-specific settings.  Each program using the Readline
+library sets the <VAR>application name</VAR>, and you can test for it. 
+This could be used to bind key sequences to functions useful for
+a specific program.  For instance, the following command adds a
+key sequence that quotes the current or previous word in Bash:
+
+<PRE>
+$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+</PRE>
+
+</DL>
+
+<DT><CODE>$endif</CODE>
+<DD>
+This command, as seen in the previous example, terminates an
+<CODE>$if</CODE> command.
+
+<DT><CODE>$else</CODE>
+<DD>
+Commands in this branch of the <CODE>$if</CODE> directive are executed if
+the test fails.
+
+<DT><CODE>$include</CODE>
+<DD>
+This directive takes a single filename as an argument and reads commands
+and bindings from that file.
+
+<PRE>
+$include /etc/inputrc
+</PRE>
+
+</DL>
+
+
+
+<H3><A NAME="SEC97" HREF="bashref.html#TOC97">Sample Init File</A></H3>
+
+<P>
+Here is an example of an inputrc file.  This illustrates key
+binding, variable assignment, and conditional syntax.
+
+</P>
+
+<PRE>
+# This file controls the behaviour of line input editing for
+# programs that use the Gnu Readline library.  Existing programs
+# include FTP, Bash, and Gdb.
+#
+# You can re-read the inputrc file with C-x C-r.
+# Lines beginning with '#' are comments.
+#
+# First, include any systemwide bindings and variable assignments from
+# /etc/Inputrc
+$include /etc/Inputrc
+
+#
+# Set various bindings for emacs mode.
+
+set editing-mode emacs 
+
+$if mode=emacs
+
+Meta-Control-h:        backward-kill-word      Text after the function name is 
ignored
+
+#
+# Arrow keys in keypad mode
+#
+#"\M-OD":        backward-char
+#"\M-OC":        forward-char
+#"\M-OA":        previous-history
+#"\M-OB":        next-history
+#
+# Arrow keys in ANSI mode
+#
+"\M-[D":        backward-char
+"\M-[C":        forward-char
+"\M-[A":        previous-history
+"\M-[B":        next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#"\M-\C-OD":       backward-char
+#"\M-\C-OC":       forward-char
+#"\M-\C-OA":       previous-history
+#"\M-\C-OB":       next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#"\M-\C-[D":       backward-char
+#"\M-\C-[C":       forward-char
+#"\M-\C-[A":       previous-history
+#"\M-\C-[B":       next-history
+
+C-q: quoted-insert
+
+$endif
+
+# An old-style binding.  This happens to be the default.
+TAB: complete
+
+# Macros that are convenient for shell interaction
+$if Bash
+# edit the path
+"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+# prepare to type a quoted word -- insert open and close double quotes
+# and move to just after the open quote
+"\C-x\"": "\"\"\C-b"
+# insert a backslash (testing backslash escapes in sequences and macros)
+"\C-x\\": "\\"
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+# Add a binding to refresh the line, which is unbound
+"\C-xr": redraw-current-line
+# Edit variable on current line.
+"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+$endif
+
+# use a visible bell if one is available
+set bell-style visible
+
+# don't strip characters to 7 bits when reading
+set input-meta on
+
+# allow iso-latin1 characters to be inserted rather than converted to
+# prefix-meta sequences
+set convert-meta off
+
+# display characters with the eighth bit set directly rather than
+# as meta-prefixed characters
+set output-meta on
+
+# if there are more than 150 possible completions for a word, ask the
+# user if he wants to see all of them
+set completion-query-items 150
+
+# For FTP
+$if Ftp
+"\C-xg": "get \M-?"
+"\C-xt": "put \M-?"
+"\M-.": yank-last-arg
+$endif
+</PRE>
+
+
+
+<H2><A NAME="SEC98" HREF="bashref.html#TOC98">Bindable Readline 
Commands</A></H2>
+
+
+<UL>
+<LI><A HREF="bashref.html#SEC99">Commands For Moving</A>: Moving about the 
line.
+<LI><A HREF="bashref.html#SEC100">Commands For History</A>: Getting at 
previous lines.
+<LI><A HREF="bashref.html#SEC101">Commands For Text</A>: Commands for changing 
text.
+<LI><A HREF="bashref.html#SEC102">Commands For Killing</A>: Commands for 
killing and yanking.
+<LI><A HREF="bashref.html#SEC103">Numeric Arguments</A>: Specifying numeric 
arguments, repeat counts.
+<LI><A HREF="bashref.html#SEC104">Commands For Completion</A>: Getting 
Readline to do the typing for you.
+<LI><A HREF="bashref.html#SEC105">Keyboard Macros</A>: Saving and re-executing 
typed characters
+<LI><A HREF="bashref.html#SEC106">Miscellaneous Commands</A>: Other 
miscellaneous commands.
+</UL>
+
+<P>
+This section describes Readline commands that may be bound to key
+sequences.
+
+</P>
+
+
+<H3><A NAME="SEC99" HREF="bashref.html#TOC99">Commands For Moving</A></H3>
+<DL COMPACT>
+
+<DT><CODE>beginning-of-line (C-a)</CODE>
+<DD>
+<A NAME="IDX262"></A>
+Move to the start of the current line.
+
+<DT><CODE>end-of-line (C-e)</CODE>
+<DD>
+<A NAME="IDX263"></A>
+Move to the end of the line.
+
+<DT><CODE>forward-char (C-f)</CODE>
+<DD>
+<A NAME="IDX264"></A>
+Move forward a character.
+
+<DT><CODE>backward-char (C-b)</CODE>
+<DD>
+<A NAME="IDX265"></A>
+Move back a character.
+
+<DT><CODE>forward-word (M-f)</CODE>
+<DD>
+<A NAME="IDX266"></A>
+Move forward to the end of the next word.  Words are composed of
+letters and digits.
+
+<DT><CODE>backward-word (M-b)</CODE>
+<DD>
+<A NAME="IDX267"></A>
+Move back to the start of this, or the previous, word.  Words are
+composed of letters and digits.
+
+<DT><CODE>clear-screen (C-l)</CODE>
+<DD>
+<A NAME="IDX268"></A>
+Clear the screen and redraw the current line,
+leaving the current line at the top of the screen.
+
+<DT><CODE>redraw-current-line ()</CODE>
+<DD>
+<A NAME="IDX269"></A>
+Refresh the current line.  By default, this is unbound.
+
+</DL>
+
+
+
+<H3><A NAME="SEC100" HREF="bashref.html#TOC100">Commands For Manipulating The 
History</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>accept-line (Newline, Return)</CODE>
+<DD>
+<A NAME="IDX270"></A>
+Accept the line regardless of where the cursor is.  If this line is
+non-empty, add it to the history list according to the setting of
+the <CODE>HISTCONTROL</CODE> and <CODE>HISTIGNORE</CODE> variables.
+If this line was a history line, then restore the history line to its
+original state.
+
+<DT><CODE>previous-history (C-p)</CODE>
+<DD>
+<A NAME="IDX271"></A>
+Move `up' through the history list.
+
+<DT><CODE>next-history (C-n)</CODE>
+<DD>
+<A NAME="IDX272"></A>
+Move `down' through the history list.
+
+<DT><CODE>beginning-of-history (M-&#60;)</CODE>
+<DD>
+<A NAME="IDX273"></A>
+Move to the first line in the history.
+
+<DT><CODE>end-of-history (M-&#62;)</CODE>
+<DD>
+<A NAME="IDX274"></A>
+Move to the end of the input history, i.e., the line currently
+being entered.
+
+<DT><CODE>reverse-search-history (C-r)</CODE>
+<DD>
+<A NAME="IDX275"></A>
+Search backward starting at the current line and moving `up' through
+the history as necessary.  This is an incremental search.
+
+<DT><CODE>forward-search-history (C-s)</CODE>
+<DD>
+<A NAME="IDX276"></A>
+Search forward starting at the current line and moving `down' through
+the the history as necessary.  This is an incremental search.
+
+<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
+<DD>
+<A NAME="IDX277"></A>
+Search backward starting at the current line and moving `up'
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+<DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
+<DD>
+<A NAME="IDX278"></A>
+Search forward starting at the current line and moving `down'
+through the the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+<DT><CODE>history-search-forward ()</CODE>
+<DD>
+<A NAME="IDX279"></A>
+Search forward through the history for the string of characters
+between the start of the current line and the current cursor
+position (the <VAR>point</VAR>).  This is a non-incremental search.  By
+default, this command is unbound.
+
+<DT><CODE>history-search-backward ()</CODE>
+<DD>
+<A NAME="IDX280"></A>
+Search backward through the history for the string of characters
+between the start of the current line and the point.  This
+is a non-incremental search.  By default, this command is unbound.
+
+<DT><CODE>yank-nth-arg (M-C-y)</CODE>
+<DD>
+<A NAME="IDX281"></A>
+Insert the first argument to the previous command (usually
+the second word on the previous line).  With an argument <VAR>n</VAR>,
+insert the <VAR>n</VAR>th word from the previous command (the words
+in the previous command begin with word 0).  A negative argument
+inserts the <VAR>n</VAR>th word from the end of the previous command.
+
+<DT><CODE>yank-last-arg (M-., M-_)</CODE>
+<DD>
+<A NAME="IDX282"></A>
+Insert last argument to the previous command (the last word of the
+previous history entry).  With an
+argument, behave exactly like <CODE>yank-nth-arg</CODE>.
+Successive calls to <CODE>yank-last-arg</CODE> move back through the history
+list, inserting the last argument of each line in turn.
+
+</DL>
+
+
+
+<H3><A NAME="SEC101" HREF="bashref.html#TOC101">Commands For Changing 
Text</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>delete-char (C-d)</CODE>
+<DD>
+<A NAME="IDX283"></A>
+Delete the character under the cursor.  If the cursor is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to <CODE>delete-char</CODE>, then
+return <CODE>EOF</CODE>.
+
+<DT><CODE>backward-delete-char (Rubout)</CODE>
+<DD>
+<A NAME="IDX284"></A>
+Delete the character behind the cursor.  A numeric argument means
+to kill the characters instead of deleting them.
+
+<DT><CODE>forward-backward-delete-char ()</CODE>
+<DD>
+<A NAME="IDX285"></A>
+Delete the character under the cursor, unless the cursor is at the
+end of the line, in which case the character behind the cursor is
+deleted.  By default, this is not bound to a key.
+
+<DT><CODE>quoted-insert (C-q, C-v)</CODE>
+<DD>
+<A NAME="IDX286"></A>
+Add the next character typed to the line verbatim.  This is
+how to insert key sequences like <KBD>C-q</KBD>, for example.
+
+<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE>
+<DD>
+<A NAME="IDX287"></A>
+Insert yourself.
+
+<DT><CODE>transpose-chars (C-t)</CODE>
+<DD>
+<A NAME="IDX288"></A>
+Drag the character before the cursor forward over
+the character at the cursor, moving the
+cursor forward as well.  If the insertion point
+is at the end of the line, then this
+transposes the last two characters of the line.
+Negative arguments don't work.
+
+<DT><CODE>transpose-words (M-t)</CODE>
+<DD>
+<A NAME="IDX289"></A>
+Drag the word behind the cursor past the word in front of the cursor
+moving the cursor over that word as well.
+
+<DT><CODE>upcase-word (M-u)</CODE>
+<DD>
+<A NAME="IDX290"></A>
+Uppercase the current (or following) word.  With a negative argument,
+uppercase the previous word, but do not move the cursor.
+
+<DT><CODE>downcase-word (M-l)</CODE>
+<DD>
+<A NAME="IDX291"></A>
+Lowercase the current (or following) word.  With a negative argument,
+lowercase the previous word, but do not move the cursor.
+
+<DT><CODE>capitalize-word (M-c)</CODE>
+<DD>
+<A NAME="IDX292"></A>
+Capitalize the current (or following) word.  With a negative argument,
+capitalize the previous word, but do not move the cursor.
+
+</DL>
+
+
+
+<H3><A NAME="SEC102" HREF="bashref.html#TOC102">Killing And Yanking</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>kill-line (C-k)</CODE>
+<DD>
+<A NAME="IDX293"></A>
+Kill the text from the current cursor position to the end of the line.
+
+<DT><CODE>backward-kill-line (C-x Rubout)</CODE>
+<DD>
+<A NAME="IDX294"></A>
+Kill backward to the beginning of the line.
+
+<DT><CODE>unix-line-discard (C-u)</CODE>
+<DD>
+<A NAME="IDX295"></A>
+Kill backward from the cursor to the beginning of the current line.
+The killed text is saved on the kill-ring.
+
+<DT><CODE>kill-whole-line ()</CODE>
+<DD>
+<A NAME="IDX296"></A>
+Kill all characters on the current line, no matter where the
+cursor is.  By default, this is unbound.
+
+<DT><CODE>kill-word (M-d)</CODE>
+<DD>
+<A NAME="IDX297"></A>
+Kill from the cursor to the end of the current word, or if between
+words, to the end of the next word.  Word boundaries are the same
+as <CODE>forward-word</CODE>.
+
+<DT><CODE>backward-kill-word (M-DEL)</CODE>
+<DD>
+<A NAME="IDX298"></A>
+Kill the word behind the cursor.  Word boundaries are the same
+as <CODE>backward-word</CODE>.
+
+<DT><CODE>unix-word-rubout (C-w)</CODE>
+<DD>
+<A NAME="IDX299"></A>
+Kill the word behind the cursor, using white space as a word
+boundary.  The killed text is saved on the kill-ring.
+
+<DT><CODE>delete-horizontal-space ()</CODE>
+<DD>
+<A NAME="IDX300"></A>
+Delete all spaces and tabs around point.  By default, this is unbound.
+
+<DT><CODE>kill-region ()</CODE>
+<DD>
+<A NAME="IDX301"></A>
+Kill the text between the point and the <EM>mark</EM> (saved
+cursor position).  This text is referred to as the <VAR>region</VAR>.
+By default, this command is unbound.
+
+<DT><CODE>copy-region-as-kill ()</CODE>
+<DD>
+<A NAME="IDX302"></A>
+Copy the text in the region to the kill buffer, so it can be yanked
+right away.  By default, this command is unbound.
+
+<DT><CODE>copy-backward-word ()</CODE>
+<DD>
+<A NAME="IDX303"></A>
+Copy the word before point to the kill buffer.
+The word boundaries are the same as <CODE>backward-word</CODE>.
+By default, this command is unbound.
+
+<DT><CODE>copy-forward-word ()</CODE>
+<DD>
+<A NAME="IDX304"></A>
+Copy the word following point to the kill buffer.
+The word boundaries are the same as <CODE>forward-word</CODE>.
+By default, this command is unbound.
+
+<DT><CODE>yank (C-y)</CODE>
+<DD>
+<A NAME="IDX305"></A>
+Yank the top of the kill ring into the buffer at the current
+cursor position.
+
+<DT><CODE>yank-pop (M-y)</CODE>
+<DD>
+<A NAME="IDX306"></A>
+Rotate the kill-ring, and yank the new top.  You can only do this if
+the prior command is yank or yank-pop.
+</DL>
+
+
+
+<H3><A NAME="SEC103" HREF="bashref.html#TOC103">Specifying Numeric 
Arguments</A></H3>
+<DL COMPACT>
+
+<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE>
+<DD>
+<A NAME="IDX307"></A>
+Add this digit to the argument already accumulating, or start a new
+argument.  <KBD>M--</KBD> starts a negative argument.
+
+<DT><CODE>universal-argument ()</CODE>
+<DD>
+<A NAME="IDX308"></A>
+This is another way to specify an argument.
+If this command is followed by one or more digits, optionally with a
+leading minus sign, those digits define the argument.
+If the command is followed by digits, executing <CODE>universal-argument</CODE>
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+By default, this is not bound to a key.
+</DL>
+
+
+
+<H3><A NAME="SEC104" HREF="bashref.html#TOC104">Letting Readline Type For 
You</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>complete (TAB)</CODE>
+<DD>
+<A NAME="IDX309"></A>
+Attempt to do completion on the text before the cursor.  This is
+application-specific.  Generally, if you are typing a filename
+argument, you can do filename completion; if you are typing a command,
+you can do command completion; if you are typing in a symbol to GDB, you
+can do symbol name completion; if you are typing in a variable to Bash,
+you can do variable name completion, and so on.
+Bash attempts completion treating the text as a variable (if the
+text begins with <SAMP>`$'</SAMP>), username (if the text begins with
+<SAMP>`~'</SAMP>), hostname (if the text begins with <SAMP>`@'</SAMP>), or
+command (including aliases and functions) in turn.  If none 
+of these produces a match, filename completion is attempted.
+
+<DT><CODE>possible-completions (M-?)</CODE>
+<DD>
+<A NAME="IDX310"></A>
+List the possible completions of the text before the cursor.
+
+<DT><CODE>insert-completions (M-*)</CODE>
+<DD>
+<A NAME="IDX311"></A>
+Insert all completions of the text before point that would have
+been generated by <CODE>possible-completions</CODE>.
+
+<DT><CODE>menu-complete ()</CODE>
+<DD>
+<A NAME="IDX312"></A>
+Similar to <CODE>complete</CODE>, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of <CODE>menu-complete</CODE> steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung and the
+original text is restored.
+An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list
+of matches; a negative argument may be used to move backward
+through the list.
+This command is intended to be bound to <CODE>TAB</CODE>, but is unbound
+by default.
+
+<DT><CODE>delete-char-or-list ()</CODE>
+<DD>
+<A NAME="IDX313"></A>
+Deletes the character under the cursor if not at the beginning or
+end of the line (like <CODE>delete-char</CODE>).
+If at the end of the line, behaves identically to
+<CODE>possible-completions</CODE>.
+This command is unbound by default.
+
+<DT><CODE>complete-filename (M-/)</CODE>
+<DD>
+<A NAME="IDX314"></A>
+Attempt filename completion on the text before point.
+
+<DT><CODE>possible-filename-completions (C-x /)</CODE>
+<DD>
+<A NAME="IDX315"></A>
+List the possible completions of the text before point,
+treating it as a filename.
+
+<DT><CODE>complete-username (M-~)</CODE>
+<DD>
+<A NAME="IDX316"></A>
+Attempt completion on the text before point, treating
+it as a username.
+
+<DT><CODE>possible-username-completions (C-x ~)</CODE>
+<DD>
+<A NAME="IDX317"></A>
+List the possible completions of the text before point,
+treating it as a username.
+
+<DT><CODE>complete-variable (M-$)</CODE>
+<DD>
+<A NAME="IDX318"></A>
+Attempt completion on the text before point, treating
+it as a shell variable.
+
+<DT><CODE>possible-variable-completions (C-x $)</CODE>
+<DD>
+<A NAME="IDX319"></A>
+List the possible completions of the text before point,
+treating it as a shell variable.
+
+<DT><CODE>complete-hostname (M-@)</CODE>
+<DD>
+<A NAME="IDX320"></A>
+Attempt completion on the text before point, treating
+it as a hostname.
+
+<DT><CODE>possible-hostname-completions (C-x @)</CODE>
+<DD>
+<A NAME="IDX321"></A>
+List the possible completions of the text before point,
+treating it as a hostname.
+
+<DT><CODE>complete-command (M-!)</CODE>
+<DD>
+<A NAME="IDX322"></A>
+Attempt completion on the text before point, treating
+it as a command name.  Command completion attempts to
+match the text against aliases, reserved words, shell
+functions, shell builtins, and finally executable filenames,
+in that order.
+
+<DT><CODE>possible-command-completions (C-x !)</CODE>
+<DD>
+<A NAME="IDX323"></A>
+List the possible completions of the text before point,
+treating it as a command name.
+
+<DT><CODE>dynamic-complete-history (M-TAB)</CODE>
+<DD>
+<A NAME="IDX324"></A>
+Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+
+<DT><CODE>complete-into-braces (M-{)</CODE>
+<DD>
+<A NAME="IDX325"></A>
+Perform filename completion and return the list of possible completions
+enclosed within braces so the list is available to the shell
+(see section <A HREF="bashref.html#SEC27">Brace Expansion</A>).
+
+</DL>
+
+
+
+<H3><A NAME="SEC105" HREF="bashref.html#TOC105">Keyboard Macros</A></H3>
+<DL COMPACT>
+
+<DT><CODE>start-kbd-macro (C-x ()</CODE>
+<DD>
+<A NAME="IDX326"></A>
+Begin saving the characters typed into the current keyboard macro.
+
+<DT><CODE>end-kbd-macro (C-x ))</CODE>
+<DD>
+<A NAME="IDX327"></A>
+Stop saving the characters typed into the current keyboard macro
+and save the definition.
+
+<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
+<DD>
+<A NAME="IDX328"></A>
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+
+</DL>
+
+
+
+<H3><A NAME="SEC106" HREF="bashref.html#TOC106">Some Miscellaneous 
Commands</A></H3>
+<DL COMPACT>
+
+<DT><CODE>re-read-init-file (C-x C-r)</CODE>
+<DD>
+<A NAME="IDX329"></A>
+Read in the contents of the inputrc file, and incorporate
+any bindings or variable assignments found there.
+
+<DT><CODE>abort (C-g)</CODE>
+<DD>
+<A NAME="IDX330"></A>
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+<CODE>bell-style</CODE>).
+
+<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE>
+<DD>
+<A NAME="IDX331"></A>
+If the metafied character <VAR>x</VAR> is lowercase, run the command
+that is bound to the corresponding uppercase character.
+
+<DT><CODE>prefix-meta (ESC)</CODE>
+<DD>
+<A NAME="IDX332"></A>
+Make the next character typed be metafied.  This is for keyboards
+without a meta key.  Typing <SAMP>`ESC f'</SAMP> is equivalent to typing
+<SAMP>`M-f'</SAMP>.
+
+<DT><CODE>undo (C-_, C-x C-u)</CODE>
+<DD>
+<A NAME="IDX333"></A>
+Incremental undo, separately remembered for each line.
+
+<DT><CODE>revert-line (M-r)</CODE>
+<DD>
+<A NAME="IDX334"></A>
+Undo all changes made to this line.  This is like executing the 
<CODE>undo</CODE>
+command enough times to get back to the beginning.
+
+<DT><CODE>tilde-expand (M-&#38;)</CODE>
+<DD>
+<A NAME="IDX335"></A>
+Perform tilde expansion on the current word.
+
+<DT><CODE>set-mark (C-@)</CODE>
+<DD>
+<A NAME="IDX336"></A>
+Set the mark to the current point.  If a
+numeric argument is supplied, the mark is set to that position.
+
+<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
+<DD>
+<A NAME="IDX337"></A>
+Swap the point with the mark.  The current cursor position is set to
+the saved position, and the old cursor position is saved as the mark.
+
+<DT><CODE>character-search (C-])</CODE>
+<DD>
+<A NAME="IDX338"></A>
+A character is read and point is moved to the next occurrence of that
+character.  A negative count searches for previous occurrences.
+
+<DT><CODE>character-search-backward (M-C-])</CODE>
+<DD>
+<A NAME="IDX339"></A>
+A character is read and point is moved to the previous occurrence
+of that character.  A negative count searches for subsequent
+occurrences.
+
+<DT><CODE>insert-comment (M-#)</CODE>
+<DD>
+<A NAME="IDX340"></A>
+The value of the <CODE>comment-begin</CODE>
+variable is inserted at the beginning of the current line,
+and the line is accepted as if a newline had been typed.
+This makes the current line a shell comment.
+
+<DT><CODE>dump-functions ()</CODE>
+<DD>
+<A NAME="IDX341"></A>
+Print all of the functions and their key bindings to the
+Readline output stream.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+
+<DT><CODE>dump-variables ()</CODE>
+<DD>
+<A NAME="IDX342"></A>
+Print all of the settable variables and their values to the
+Readline output stream.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+
+<DT><CODE>dump-macros ()</CODE>
+<DD>
+<A NAME="IDX343"></A>
+Print all of the Readline key sequences bound to macros and the
+strings they ouput.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+
+<DT><CODE>glob-expand-word (C-x *)</CODE>
+<DD>
+<A NAME="IDX344"></A>
+The word before point is treated as a pattern for pathname expansion,
+and the list of matching file names is inserted, replacing the word.
+
+<DT><CODE>glob-list-expansions (C-x g)</CODE>
+<DD>
+<A NAME="IDX345"></A>
+The list of expansions that would have been generated by
+<CODE>glob-expand-word</CODE> is displayed, and the line is redrawn.
+
+<DT><CODE>display-shell-version (C-x C-v)</CODE>
+<DD>
+<A NAME="IDX346"></A>
+Display version information about the current instance of Bash.
+
+<DT><CODE>shell-expand-line (M-C-e)</CODE>
+<DD>
+<A NAME="IDX347"></A>
+Expand the line as the shell does.
+This performs alias and history expansion as well as all of the shell
+word expansions (see section <A HREF="bashref.html#SEC26">Shell 
Expansions</A>).
+
+<DT><CODE>history-expand-line (M-^)</CODE>
+<DD>
+<A NAME="IDX348"></A>
+Perform history expansion on the current line.
+
+<DT><CODE>magic-space ()</CODE>
+<DD>
+<A NAME="IDX349"></A>
+Perform history expansion on the current line and insert a space
+(see section <A HREF="bashref.html#SEC82">History Expansion</A>).
+
+<DT><CODE>alias-expand-line ()</CODE>
+<DD>
+<A NAME="IDX350"></A>
+Perform alias expansion on the current line (see section <A 
HREF="bashref.html#SEC68">Aliases</A>).
+
+<DT><CODE>history-and-alias-expand-line ()</CODE>
+<DD>
+<A NAME="IDX351"></A>
+Perform history and alias expansion on the current line.
+
+<DT><CODE>insert-last-argument (M-., M-_)</CODE>
+<DD>
+<A NAME="IDX352"></A>
+A synonym for <CODE>yank-last-arg</CODE>.
+
+<DT><CODE>operate-and-get-next (C-o)</CODE>
+<DD>
+<A NAME="IDX353"></A>
+Accept the current line for execution and fetch the next line
+relative to the current line from the history for editing.  Any
+argument is ignored.
+
+<DT><CODE>emacs-editing-mode (C-e)</CODE>
+<DD>
+<A NAME="IDX354"></A>
+When in <CODE>vi</CODE> editing mode, this causes a switch back to
+<CODE>emacs</CODE> editing mode, as if the command <SAMP>`set -o emacs'</SAMP> 
had
+been executed.
+
+</DL>
+
+
+
+<H2><A NAME="SEC107" HREF="bashref.html#TOC107">Readline vi Mode</A></H2>
+
+<P>
+While the Readline library does not have a full set of <CODE>vi</CODE>
+editing functions, it does contain enough to allow simple editing
+of the line.  The Readline <CODE>vi</CODE> mode behaves as specified in
+the POSIX 1003.2 standard.
+
+</P>
+<P>
+In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
+editing modes, use the <SAMP>`set -o emacs'</SAMP> and <SAMP>`set -o vi'</SAMP>
+commands (see section <A HREF="bashref.html#SEC64">The Set Builtin</A>).
+The Readline default is <CODE>emacs</CODE> mode.
+
+</P>
+<P>
+When you enter a line in <CODE>vi</CODE> mode, you are already placed in
+`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>.  Pressing 
<KBD>ESC</KBD>
+switches you into `command' mode, where you can edit the text of the
+line with the standard <CODE>vi</CODE> movement keys, move to previous
+history lines with <SAMP>`k'</SAMP> and subsequent lines with 
<SAMP>`j'</SAMP>, and
+so forth.
+
+</P>
+
+
+<H1><A NAME="SEC108" HREF="bashref.html#TOC108">Installing Bash</A></H1>
+
+<P>
+This chapter provides basic instructions for installing Bash on
+the various supported platforms.  The distribution supports nearly every
+version of Unix (and, someday, GNU).  Other independent ports exist for
+MS-DOS, OS/2, Windows 95, and Windows NT.
+
+</P>
+
+<UL>
+<LI><A HREF="bashref.html#SEC109">Basic Installation</A>: Installation 
instructions.
+
+<LI><A HREF="bashref.html#SEC110">Compilers and Options</A>: How to set 
special options for various
+                               systems.
+
+<LI><A HREF="bashref.html#SEC111">Compiling For Multiple Architectures</A>: 
How to compile Bash for more
+                                               than one kind of system from
+                                               the same source tree.
+
+<LI><A HREF="bashref.html#SEC112">Installation Names</A>: How to set the 
various paths used by the installation.
+
+<LI><A HREF="bashref.html#SEC113">Specifying the System Type</A>: How to 
configure Bash for a particular system.
+
+<LI><A HREF="bashref.html#SEC114">Sharing Defaults</A>: How to share default 
configuration values among GNU
+                       programs.
+
+<LI><A HREF="bashref.html#SEC115">Operation Controls</A>: Options recognized 
by the configuration program.
+
+<LI><A HREF="bashref.html#SEC116">Optional Features</A>: How to enable and 
disable optional features when
+                       building Bash.
+</UL>
+
+
+
+<H2><A NAME="SEC109" HREF="bashref.html#TOC109">Basic Installation</A></H2>
+<P>
+<A NAME="IDX355"></A>
+<A NAME="IDX356"></A>
+<A NAME="IDX357"></A>
+<A NAME="IDX358"></A>
+
+</P>
+<P>
+These are installation instructions for Bash.
+
+</P>
+<P>
+The <CODE>configure</CODE> shell script attempts to guess correct
+values for various system-dependent variables used during
+compilation.  It uses those values to create a <TT>`Makefile'</TT> in
+each directory of the package (the top directory, the
+<TT>`builtins'</TT> and <TT>`doc'</TT> directories, and the
+each directory under <TT>`lib'</TT>).  It also creates a
+<TT>`config.h'</TT> file containing system-dependent definitions. 
+Finally, it creates a shell script named <CODE>config.status</CODE> that you
+can run in the future to recreate the current configuration, a
+file <TT>`config.cache'</TT> that saves the results of its tests to
+speed up reconfiguring, and a file <TT>`config.log'</TT> containing
+compiler output (useful mainly for debugging <CODE>configure</CODE>). 
+If at some point
+<TT>`config.cache'</TT> contains results you don't want to keep, you
+may remove or edit it. 
+
+</P>
+<P>
+If you need to do unusual things to compile Bash, please
+try to figure out how <CODE>configure</CODE> could check whether or not
+to do them, and mail diffs or instructions to
+<A HREF="mailto:address@hidden";>address@hidden</A> so they can be
+considered for the next release.
+
+</P>
+<P>
+The file <TT>`configure.in'</TT> is used to create <CODE>configure</CODE>
+by a program called Autoconf.  You only need
+<TT>`configure.in'</TT> if you want to change it or regenerate
+<CODE>configure</CODE> using a newer version of Autoconf.  If
+you do this, make sure you are using Autoconf version 2.10 or
+newer.
+
+</P>
+<P>
+If you need to change <TT>`configure.in'</TT> or regenerate
+<CODE>configure</CODE>, you will need to create two files: 
+<TT>`_distribution'</TT> and <TT>`_patchlevel'</TT>.  <TT>`_distribution'</TT>
+should contain the major and minor version numbers of the Bash
+distribution, for example <SAMP>`2.01'</SAMP>.  <TT>`_patchlevel'</TT> should
+contain the patch level of the Bash distribution, <SAMP>`0'</SAMP> for
+example.  The script <TT>`support/mkconffiles'</TT> has been provided
+to automate the creation of these files.
+
+</P>
+<P>
+The simplest way to compile Bash is:
+
+</P>
+
+<OL>
+<LI>
+
+<CODE>cd</CODE> to the directory containing the source code and type
+<SAMP>`./configure'</SAMP> to configure Bash for your system.  If you're
+using <CODE>csh</CODE> on an old version of System V, you might need to
+type <SAMP>`sh ./configure'</SAMP> instead to prevent <CODE>csh</CODE> from 
trying
+to execute <CODE>configure</CODE> itself.
+
+Running <CODE>configure</CODE> takes awhile.  While running, it prints some
+messages telling which features it is checking for.
+
+<LI>
+
+Type <SAMP>`make'</SAMP> to compile Bash and build the <CODE>bashbug</CODE> bug
+reporting script.
+
+<LI>
+
+Optionally, type <SAMP>`make tests'</SAMP> to run the Bash test suite.
+
+<LI>
+
+Type <SAMP>`make install'</SAMP> to install <CODE>bash</CODE> and 
<CODE>bashbug</CODE>.
+This will also install the manual pages and Info file.
+
+</OL>
+
+<P>
+You can remove the program binaries and object files from the
+source code directory by typing <SAMP>`make clean'</SAMP>.  To also remove the
+files that <CODE>configure</CODE> created (so you can compile Bash for
+a different kind of computer), type <SAMP>`make distclean'</SAMP>.
+
+</P>
+
+
+<H2><A NAME="SEC110" HREF="bashref.html#TOC110">Compilers and Options</A></H2>
+
+<P>
+Some systems require unusual options for compilation or linking
+that the <CODE>configure</CODE> script does not know about.  You can
+give <CODE>configure</CODE> initial values for variables by setting
+them in the environment.  Using a Bourne-compatible shell, you
+can do that on the command line like this:
+
+</P>
+
+<PRE>
+CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+</PRE>
+
+<P>
+On systems that have the <CODE>env</CODE> program, you can do it like this:
+
+</P>
+
+<PRE>
+env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+</PRE>
+
+<P>
+The configuration process uses GCC to build Bash if it
+is available.
+
+</P>
+
+
+<H2><A NAME="SEC111" HREF="bashref.html#TOC111">Compiling For Multiple 
Architectures</A></H2>
+
+<P>
+You can compile Bash for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of <CODE>make</CODE> that
+supports the <CODE>VPATH</CODE> variable, such as GNU <CODE>make</CODE>.
+<CODE>cd</CODE> to the
+directory where you want the object files and executables to go and run
+the <CODE>configure</CODE> script from the source directory.  You may need to
+supply the <SAMP>`--srcdir=PATH'</SAMP> argument to tell 
<CODE>configure</CODE> where the
+source files are.  <CODE>configure</CODE> automatically checks for the
+source code in the directory that <CODE>configure</CODE> is in and in `..'.
+
+</P>
+<P>
+If you have to use a <CODE>make</CODE> that does not supports the 
<CODE>VPATH</CODE>
+variable, you can compile Bash for one architecture at a
+time in the source code directory.  After you have installed
+Bash for one architecture, use <SAMP>`make distclean'</SAMP> before
+reconfiguring for another architecture.
+
+</P>
+<P>
+Alternatively, if your system supports symbolic links, you can use the
+<TT>`support/mkclone'</TT> script to create a build tree which has
+symbolic links back to each file in the source directory.  Here's an
+example that creates a build directory in the current directory from a
+source directory <TT>`/usr/gnu/src/bash-2.0'</TT>:
+
+</P>
+
+<PRE>
+bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+</PRE>
+
+<P>
+The <CODE>mkclone</CODE> script requires Bash, so you must have already built
+Bash for at least one architecture before you can create build
+directories for other architectures.
+
+</P>
+
+
+<H2><A NAME="SEC112" HREF="bashref.html#TOC112">Installation Names</A></H2>
+
+<P>
+By default, <SAMP>`make install'</SAMP> will install into
+<TT>`/usr/local/bin'</TT>, <TT>`/usr/local/man'</TT>, etc.  You can
+specify an installation prefix other than <TT>`/usr/local'</TT> by
+giving <CODE>configure</CODE> the option <SAMP>`--prefix=PATH'</SAMP>. 
+
+</P>
+<P>
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. 
+If you give <CODE>configure</CODE> the option
+<SAMP>`--exec-prefix=PATH'</SAMP>, <SAMP>`make install'</SAMP> will use 
<SAMP>`PATH'</SAMP> as the
+prefix for installing programs and libraries.  Documentation and
+other data files will still use the regular prefix. 
+
+</P>
+
+
+<H2><A NAME="SEC113" HREF="bashref.html#TOC113">Specifying the System 
Type</A></H2>
+
+<P>
+There may be some features <CODE>configure</CODE> can not figure out
+automatically, but needs to determine by the type of host Bash
+will run on.  Usually <CODE>configure</CODE> can figure that
+out, but if it prints a message saying it can not guess the host
+type, give it the <SAMP>`--host=TYPE'</SAMP> option.  <SAMP>`TYPE'</SAMP> can
+either be a short name for the system type, such as <SAMP>`sun4'</SAMP>,
+or a canonical name with three fields: <SAMP>`CPU-COMPANY-SYSTEM'</SAMP>
+(e.g., <SAMP>`sparc-sun-sunos4.1.2'</SAMP>).
+
+</P>
+<P>
+See the file <TT>`support/config.sub'</TT> for the possible
+values of each field. 
+
+</P>
+
+
+<H2><A NAME="SEC114" HREF="bashref.html#TOC114">Sharing Defaults</A></H2>
+
+<P>
+If you want to set default values for <CODE>configure</CODE> scripts to
+share, you can create a site shell script called
+<CODE>config.site</CODE> that gives default values for variables like
+<CODE>CC</CODE>, <CODE>cache_file</CODE>, and <CODE>prefix</CODE>.  
<CODE>configure</CODE>
+looks for <TT>`PREFIX/share/config.site'</TT> if it exists, then
+<TT>`PREFIX/etc/config.site'</TT> if it exists.  Or, you can set the
+<CODE>CONFIG_SITE</CODE> environment variable to the location of the site
+script.  A warning: the Bash <CODE>configure</CODE> looks for a site script,
+but not all <CODE>configure</CODE> scripts do.
+
+</P>
+
+
+<H2><A NAME="SEC115" HREF="bashref.html#TOC115">Operation Controls</A></H2>
+
+<P>
+<CODE>configure</CODE> recognizes the following options to control how it
+operates.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>--cache-file=<VAR>FILE</VAR></CODE>
+<DD>
+Use and save the results of the tests in
+<VAR>FILE</VAR> instead of <TT>`./config.cache'</TT>.  Set <VAR>FILE</VAR> to
+<TT>`/dev/null'</TT> to disable caching, for debugging
+<CODE>configure</CODE>. 
+
+<DT><CODE>--help</CODE>
+<DD>
+Print a summary of the options to <CODE>configure</CODE>, and exit.
+
+<DT><CODE>--quiet</CODE>
+<DD>
+<DT><CODE>--silent</CODE>
+<DD>
+<DT><CODE>-q</CODE>
+<DD>
+Do not print messages saying which checks are being made.
+
+<DT><CODE>--srcdir=<VAR>DIR</VAR></CODE>
+<DD>
+Look for the Bash source code in directory <VAR>DIR</VAR>.  Usually
+<CODE>configure</CODE> can determine that directory automatically.
+
+<DT><CODE>--version</CODE>
+<DD>
+Print the version of Autoconf used to generate the <CODE>configure</CODE>
+script, and exit.
+</DL>
+
+<P>
+<CODE>configure</CODE> also accepts some other, not widely used, boilerplate
+options.
+
+</P>
+
+
+<H2><A NAME="SEC116" HREF="bashref.html#TOC116">Optional Features</A></H2>
+
+<P>
+The Bash <CODE>configure</CODE> has a number of 
<SAMP>`--enable-<VAR>FEATURE</VAR>'</SAMP>
+options, where <VAR>FEATURE</VAR> indicates an optional part of Bash.
+There are also several <SAMP>`--with-<VAR>PACKAGE</VAR>'</SAMP> options,
+where <VAR>PACKAGE</VAR> is something like <SAMP>`gnu-malloc'</SAMP> or 
<SAMP>`purify'</SAMP>.
+To turn off the default use of a package, use
+<SAMP>`--without-<VAR>PACKAGE</VAR>'</SAMP>.  To configure Bash without a 
feature
+that is enabled by default, use <SAMP>`--disable-<VAR>FEATURE</VAR>'</SAMP>.
+
+</P>
+<P>
+Here is a complete list of the <SAMP>`--enable-'</SAMP> and
+<SAMP>`--with-'</SAMP> options that the Bash <CODE>configure</CODE> 
recognizes. 
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>--with-afs</CODE>
+<DD>
+Define if you are using the Andrew File System from Transarc.
+
+<DT><CODE>--with-curses</CODE>
+<DD>
+Use the curses library instead of the termcap library.  This should
+be supplied if your system has an inadequate or incomplete termcap
+database.
+
+<DT><CODE>--with-glibc-malloc</CODE>
+<DD>
+Use the GNU libc version of <CODE>malloc</CODE> in
+<TT>`lib/malloc/gmalloc.c'</TT>.  This is not the version of 
<CODE>malloc</CODE>
+that appears in glibc version 2, but a modified version of the
+<CODE>malloc</CODE> from glibc version 1.  This is somewhat slower than the
+default <CODE>malloc</CODE>, but wastes less space on a per-allocation
+basis, and will return memory to the operating system under
+some circumstances.
+
+<DT><CODE>--with-gnu-malloc</CODE>
+<DD>
+Use the GNU version of
+<CODE>malloc</CODE> in <TT>`lib/malloc/malloc.c'</TT>.  This is not the same
+<CODE>malloc</CODE> that appears in GNU libc, but an older version
+derived from the 4.2 BSD <CODE>malloc</CODE>.  This <CODE>malloc</CODE> is
+very fast, but wastes some space on each allocation.
+This option is enabled by default.
+The <TT>`NOTES'</TT> file contains a list of systems for
+which this should be turned off, and <CODE>configure</CODE> disables this
+option automatically for a number of systems.
+
+<DT><CODE>--with-installed-readline</CODE>
+<DD>
+Define this to make bash link with a locally-installed version of Readline
+rather than the version in lib/readline.  This works only with readline 4.0
+and later versions.
+
+<DT><CODE>--with-purify</CODE>
+<DD>
+Define this to use the Purify memory allocation checker from Pure
+Software.
+
+<DT><CODE>--enable-minimal-config</CODE>
+<DD>
+This produces a shell with minimal features, close to the historical
+Bourne shell.
+</DL>
+
+<P>
+There are several <SAMP>`--enable-'</SAMP> options that alter how Bash is
+compiled and linked, rather than changing run-time features.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>--enable-profiling</CODE>
+<DD>
+This builds a Bash binary that produces profiling information to be
+processed by <CODE>gprof</CODE> each time it is executed.
+
+<DT><CODE>--enable-static-link</CODE>
+<DD>
+This causes Bash to be linked statically, if <CODE>gcc</CODE> is being used.
+This could be used to build a version to use as root's shell.
+</DL>
+
+<P>
+The <SAMP>`minimal-config'</SAMP> option can be used to disable all of
+the following options, but it is processed first, so individual
+options may be enabled using <SAMP>`enable-<VAR>FEATURE</VAR>'</SAMP>. 
+
+</P>
+<P>
+All of the following options except for <SAMP>`disabled-builtins'</SAMP> and
+<SAMP>`usg-echo-default'</SAMP> are
+enabled by default, unless the operating system does not provide the
+necessary support.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>--enable-alias</CODE>
+<DD>
+Allow alias expansion and include the <CODE>alias</CODE> and 
<CODE>unalias</CODE>
+builtins (see section <A HREF="bashref.html#SEC68">Aliases</A>).
+
+<DT><CODE>--enable-array-variables</CODE>
+<DD>
+Include support for one-dimensional array shell variables
+(see section <A HREF="bashref.html#SEC70">Arrays</A>).
+
+<DT><CODE>--enable-bang-history</CODE>
+<DD>
+Include support for <CODE>csh</CODE>-like history substitution
+(see section <A HREF="bashref.html#SEC82">History Expansion</A>).
+
+<DT><CODE>--enable-brace-expansion</CODE>
+<DD>
+Include <CODE>csh</CODE>-like brace expansion
+( <CODE>b{a,b}c</CODE> ==> <CODE>bac bbc</CODE> ).
+See section <A HREF="bashref.html#SEC27">Brace Expansion</A>, for a complete 
description.
+
+<DT><CODE>--enable-command-timing</CODE>
+<DD>
+Include support for recognizing <CODE>time</CODE> as a reserved word and for
+displaying timing statistics for the pipeline following <CODE>time</CODE>.  
This
+allows pipelines as well as shell builtins and functions to be timed.
+
+<DT><CODE>--enable-cond-command</CODE>
+<DD>
+Include support for the <CODE>[[</CODE> conditional command
+(see section <A HREF="bashref.html#SEC20">Conditional Constructs</A>).
+
+<DT><CODE>--enable-directory-stack</CODE>
+<DD>
+Include support for a <CODE>csh</CODE>-like directory stack and the
+<CODE>pushd</CODE>, <CODE>popd</CODE>, and <CODE>dirs</CODE> builtins
+(see section <A HREF="bashref.html#SEC71">The Directory Stack</A>).
+
+<DT><CODE>--enable-disabled-builtins</CODE>
+<DD>
+Allow builtin commands to be invoked via <SAMP>`builtin xxx'</SAMP>
+even after <CODE>xxx</CODE> has been disabled using <SAMP>`enable -n 
xxx'</SAMP>.
+See section <A HREF="bashref.html#SEC63">Bash Builtin Commands</A>, for 
details of the <CODE>builtin</CODE> and
+<CODE>enable</CODE> builtin commands.
+
+<DT><CODE>--enable-dparen-arithmetic</CODE>
+<DD>
+Include support for the <CODE>((...))</CODE> command
+(see section <A HREF="bashref.html#SEC20">Conditional Constructs</A>).
+
+<DT><CODE>--enable-extended-glob</CODE>
+<DD>
+Include support for the extended pattern matching features described
+above under section <A HREF="bashref.html#SEC35">Pattern Matching</A>.
+
+<DT><CODE>--enable-help-builtin</CODE>
+<DD>
+Include the <CODE>help</CODE> builtin, which displays help on shell builtins 
and
+variables.
+
+<DT><CODE>--enable-history</CODE>
+<DD>
+Include command history and the <CODE>fc</CODE> and <CODE>history</CODE>
+builtin commands.
+
+<DT><CODE>--enable-job-control</CODE>
+<DD>
+This enables the job control features (see section <A 
HREF="bashref.html#SEC75">Job Control</A>),
+if the operating system supports them.
+
+<DT><CODE>--enable-process-substitution</CODE>
+<DD>
+This enables process substitution (see section <A 
HREF="bashref.html#SEC32">Process Substitution</A>) if
+the operating system provides the necessary support.
+
+<DT><CODE>--enable-prompt-string-decoding</CODE>
+<DD>
+Turn on the interpretation of a number of backslash-escaped characters
+in the <CODE>$PS1</CODE>, <CODE>$PS2</CODE>, <CODE>$PS3</CODE>, and 
<CODE>$PS4</CODE> prompt
+strings.  See section <A HREF="bashref.html#SEC72">Controlling the Prompt</A>, 
for a complete list of prompt
+string escape sequences.
+
+<DT><CODE>--enable-readline</CODE>
+<DD>
+Include support for command-line editing and history with the Bash
+version of the Readline library (see section <A 
HREF="bashref.html#SEC86">Command Line Editing</A>).
+
+<DT><CODE>--enable-restricted</CODE>
+<DD>
+Include support for a <EM>restricted shell</EM>.  If this is enabled, Bash,
+when called as <CODE>rbash</CODE>, enters a restricted mode.  See
+section <A HREF="bashref.html#SEC73">The Restricted Shell</A>, for a 
description of restricted mode.
+
+<DT><CODE>--enable-select</CODE>
+<DD>
+Include the <CODE>select</CODE> builtin, which allows the generation of simple
+menus (see section <A HREF="bashref.html#SEC20">Conditional Constructs</A>).
+
+<DT><CODE>--enable-usg-echo-default</CODE>
+<DD>
+Make the <CODE>echo</CODE> builtin expand backslash-escaped characters by 
default,
+without requiring the <SAMP>`-e'</SAMP> option.  This makes the Bash 
<CODE>echo</CODE>
+behave more like the System V version.
+
+</DL>
+
+<P>
+The file <TT>`config.h.top'</TT> contains C Preprocessor
+<SAMP>`#define'</SAMP> statements for options which are not settable from
+<CODE>configure</CODE>.
+Some of these are not meant to be changed; beware of the consequences if
+you do.
+Read the comments associated with each definition for more
+information about its effect.
+
+</P>
+
+
+<H1><A NAME="SEC117" HREF="bashref.html#TOC117">Reporting Bugs</A></H1>
+
+<P>
+Please report all bugs you find in Bash.
+But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of Bash that you have.
+
+</P>
+<P>
+Once you have determined that a bug actually exists, use the
+<CODE>bashbug</CODE> command to submit a bug report.
+If you have a fix, you are encouraged to mail that as well!
+Suggestions and `philosophical' bug reports may be mailed
+to <A HREF="mailto:address@hidden";>address@hidden</A> or posted to the Usenet
+newsgroup <CODE>gnu.bash.bug</CODE>.
+
+</P>
+<P>
+All bug reports should include:
+
+<UL>
+<LI>
+
+The version number of Bash.
+<LI>
+
+The hardware and operating system.
+<LI>
+
+The compiler used to compile Bash.
+<LI>
+
+A description of the bug behaviour.
+<LI>
+
+A short script or `recipe' which exercises the bug and may be used
+to reproduce it.
+</UL>
+
+<P>
+<CODE>bashbug</CODE> inserts the first three items automatically into
+the template it provides for filing a bug report.
+
+</P>
+<P>
+Please send all reports concerning this manual to
+<A HREF="mailto:address@hidden";>address@hidden</A>.
+
+</P>
+
+
+<H1><A NAME="SEC118" HREF="bashref.html#TOC118">Index of Shell Builtin 
Commands</A></H1>
+<P>
+Jump to:
+<A HREF="#.">.</A>
+-
+<A HREF="#:">:</A>
+-
+<A HREF="#[">[</A>
+-
+<A HREF="#a">a</A>
+-
+<A HREF="#b">b</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#d">d</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#f">f</A>
+-
+<A HREF="#g">g</A>
+-
+<A HREF="#h">h</A>
+-
+<A HREF="#j">j</A>
+-
+<A HREF="#k">k</A>
+-
+<A HREF="#l">l</A>
+-
+<A HREF="#p">p</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#t">t</A>
+-
+<A HREF="#u">u</A>
+-
+<A HREF="#w">w</A>
+<P>
+<H2><A NAME=".">.</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX100">.</A>
+</DIR>
+<H2><A NAME=":">:</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX99">:</A>
+</DIR>
+<H2><A NAME="[">[</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX115">[</A>
+</DIR>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX205">alias</A>
+</DIR>
+<H2><A NAME="b">b</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX219">bg</A>
+<LI><A HREF="bashref.html#IDX133">bind</A>
+<LI><A HREF="bashref.html#IDX101">break</A>
+<LI><A HREF="bashref.html#IDX134">builtin</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX102">cd</A>
+<LI><A HREF="bashref.html#IDX135">command</A>
+<LI><A HREF="bashref.html#IDX103">continue</A>
+</DIR>
+<H2><A NAME="d">d</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX136">declare</A>
+<LI><A HREF="bashref.html#IDX209">dirs</A>
+<LI><A HREF="bashref.html#IDX224">disown</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX137">echo</A>
+<LI><A HREF="bashref.html#IDX138">enable</A>
+<LI><A HREF="bashref.html#IDX104">eval</A>
+<LI><A HREF="bashref.html#IDX105">exec</A>
+<LI><A HREF="bashref.html#IDX106">exit</A>
+<LI><A HREF="bashref.html#IDX107">export</A>
+</DIR>
+<H2><A NAME="f">f</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX231">fc</A>
+<LI><A HREF="bashref.html#IDX220">fg</A>
+</DIR>
+<H2><A NAME="g">g</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX108">getopts</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX109">hash</A>
+<LI><A HREF="bashref.html#IDX139">help</A>
+<LI><A HREF="bashref.html#IDX232">history</A>
+</DIR>
+<H2><A NAME="j">j</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX221">jobs</A>
+</DIR>
+<H2><A NAME="k">k</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX222">kill</A>
+</DIR>
+<H2><A NAME="l">l</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX140">let</A>
+<LI><A HREF="bashref.html#IDX141">local</A>
+<LI><A HREF="bashref.html#IDX142">logout</A>
+</DIR>
+<H2><A NAME="p">p</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX210">popd</A>
+<LI><A HREF="bashref.html#IDX143">printf</A>
+<LI><A HREF="bashref.html#IDX211">pushd</A>
+<LI><A HREF="bashref.html#IDX110">pwd</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX144">read</A>
+<LI><A HREF="bashref.html#IDX111">readonly</A>
+<LI><A HREF="bashref.html#IDX112">return</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX150">set</A>
+<LI><A HREF="bashref.html#IDX113">shift</A>
+<LI><A HREF="bashref.html#IDX145">shopt</A>
+<LI><A HREF="bashref.html#IDX146">source</A>
+<LI><A HREF="bashref.html#IDX225">suspend</A>
+</DIR>
+<H2><A NAME="t">t</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX114">test</A>
+<LI><A HREF="bashref.html#IDX116">times</A>
+<LI><A HREF="bashref.html#IDX117">trap</A>
+<LI><A HREF="bashref.html#IDX147">type</A>
+<LI><A HREF="bashref.html#IDX148">typeset</A>
+</DIR>
+<H2><A NAME="u">u</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX149">ulimit</A>
+<LI><A HREF="bashref.html#IDX118">umask</A>
+<LI><A HREF="bashref.html#IDX206">unalias</A>
+<LI><A HREF="bashref.html#IDX119">unset</A>
+</DIR>
+<H2><A NAME="w">w</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX223">wait</A>
+</DIR>
+
+</P>
+
+
+<H1><A NAME="SEC119" HREF="bashref.html#TOC119">Shell Reserved Words</A></H1>
+<P>
+Jump to:
+<A HREF="#!">!</A>
+-
+<A HREF="#[">[</A>
+-
+<A HREF="#]">]</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#d">d</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#f">f</A>
+-
+<A HREF="#i">i</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#t">t</A>
+-
+<A HREF="#u">u</A>
+-
+<A HREF="#w">w</A>
+-
+<A HREF="#{">{</A>
+-
+<A HREF="#}">}</A>
+<P>
+<H2><A NAME="!">!</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX31">!</A>
+</DIR>
+<H2><A NAME="[">[</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX50">[[</A>
+</DIR>
+<H2><A NAME="]">]</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX51">]]</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX46">case</A>
+</DIR>
+<H2><A NAME="d">d</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX36">do</A>
+<LI><A HREF="bashref.html#IDX37">done</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX44">elif</A>
+<LI><A HREF="bashref.html#IDX43">else</A>
+<LI><A HREF="bashref.html#IDX48">esac</A>
+</DIR>
+<H2><A NAME="f">f</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX45">fi</A>
+<LI><A HREF="bashref.html#IDX39">for</A>
+<LI><A HREF="bashref.html#IDX57">function</A>
+</DIR>
+<H2><A NAME="i">i</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX41">if</A>
+<LI><A HREF="bashref.html#IDX47">in</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX49">select</A>
+</DIR>
+<H2><A NAME="t">t</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX42">then</A>
+<LI><A HREF="bashref.html#IDX30">time</A>
+</DIR>
+<H2><A NAME="u">u</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX35">until</A>
+</DIR>
+<H2><A NAME="w">w</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX38">while</A>
+</DIR>
+<H2><A NAME="{">{</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX53">{</A>
+</DIR>
+<H2><A NAME="}">}</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX54">}</A>
+</DIR>
+
+</P>
+
+
+<H1><A NAME="SEC120" HREF="bashref.html#TOC120">Parameter and Variable 
Index</A></H1>
+<P>
+Jump to:
+<A HREF="#!">!</A>
+-
+<A HREF="##">#</A>
+-
+<A HREF="#$">$</A>
+-
+<A HREF="#*">*</A>
+-
+<A HREF="#-">-</A>
+-
+<A HREF="#0">0</A>
+-
+<A HREF="#?">?</A>
+-
+<A HREF="#@">@</A>
+-
+<A HREF="#_">_</A>
+-
+<A HREF="#a">a</A>
+-
+<A HREF="#b">b</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#d">d</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#f">f</A>
+-
+<A HREF="#g">g</A>
+-
+<A HREF="#h">h</A>
+-
+<A HREF="#i">i</A>
+-
+<A HREF="#k">k</A>
+-
+<A HREF="#l">l</A>
+-
+<A HREF="#m">m</A>
+-
+<A HREF="#o">o</A>
+-
+<A HREF="#p">p</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#t">t</A>
+-
+<A HREF="#u">u</A>
+-
+<A HREF="#v">v</A>
+<P>
+<H2><A NAME="!">!</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX69">!</A>
+</DIR>
+<H2><A NAME="#">#</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX65">#</A>
+</DIR>
+<H2><A NAME="$">$</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX68">$</A>
+</DIR>
+<H2><A NAME="*">*</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX63">*</A>
+</DIR>
+<H2><A NAME="-">-</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX67">-</A>
+</DIR>
+<H2><A NAME="0">0</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX70">0</A>
+</DIR>
+<H2><A NAME="?">?</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX66">?</A>
+</DIR>
+<H2><A NAME="@">@</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX64">@</A>
+</DIR>
+<H2><A NAME="_">_</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX71">_</A>
+</DIR>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX226">auto_resume</A>
+</DIR>
+<H2><A NAME="b">b</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX152">BASH</A>
+<LI><A HREF="bashref.html#IDX153">BASH_ENV</A>
+<LI><A HREF="bashref.html#IDX155">BASH_VERSINFO</A>
+<LI><A HREF="bashref.html#IDX154">BASH_VERSION</A>
+<LI><A HREF="bashref.html#IDX245">bell-style</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX120">CDPATH</A>
+<LI><A HREF="bashref.html#IDX246">comment-begin</A>
+<LI><A HREF="bashref.html#IDX247">completion-query-items</A>
+<LI><A HREF="bashref.html#IDX248">convert-meta</A>
+</DIR>
+<H2><A NAME="d">d</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX156">DIRSTACK</A>
+<LI><A HREF="bashref.html#IDX249">disable-completion</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX250">editing-mode</A>
+<LI><A HREF="bashref.html#IDX251">enable-keypad</A>
+<LI><A HREF="bashref.html#IDX157">EUID</A>
+<LI><A HREF="bashref.html#IDX252">expand-tilde</A>
+</DIR>
+<H2><A NAME="f">f</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX158">FCEDIT</A>
+<LI><A HREF="bashref.html#IDX159">FIGNORE</A>
+</DIR>
+<H2><A NAME="g">g</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX160">GLOBIGNORE</A>
+<LI><A HREF="bashref.html#IDX161">GROUPS</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX162">histchars</A>
+<LI><A HREF="bashref.html#IDX163">HISTCMD</A>
+<LI><A HREF="bashref.html#IDX164">HISTCONTROL</A>
+<LI><A HREF="bashref.html#IDX166">HISTFILE</A>
+<LI><A HREF="bashref.html#IDX168">HISTFILESIZE</A>
+<LI><A HREF="bashref.html#IDX165">HISTIGNORE</A>
+<LI><A HREF="bashref.html#IDX167">HISTSIZE</A>
+<LI><A HREF="bashref.html#IDX121">HOME</A>
+<LI><A HREF="bashref.html#IDX253">horizontal-scroll-mode</A>
+<LI><A HREF="bashref.html#IDX169">HOSTFILE</A>
+<LI><A HREF="bashref.html#IDX170">HOSTNAME</A>
+<LI><A HREF="bashref.html#IDX171">HOSTTYPE</A>
+</DIR>
+<H2><A NAME="i">i</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX122">IFS</A>
+<LI><A HREF="bashref.html#IDX172">IGNOREEOF</A>
+<LI><A HREF="bashref.html#IDX254">input-meta</A>
+<LI><A HREF="bashref.html#IDX173">INPUTRC</A>
+<LI><A HREF="bashref.html#IDX256">isearch-terminators</A>
+</DIR>
+<H2><A NAME="k">k</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX257">keymap</A>
+</DIR>
+<H2><A NAME="l">l</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX174">LANG</A>
+<LI><A HREF="bashref.html#IDX175">LC_ALL</A>
+<LI><A HREF="bashref.html#IDX176">LC_COLLATE</A>
+<LI><A HREF="bashref.html#IDX177">LC_CTYPE</A>
+<LI><A HREF="bashref.html#IDX178">LC_MESSAGES</A>
+<LI><A HREF="bashref.html#IDX179">LINENO</A>
+</DIR>
+<H2><A NAME="m">m</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX180">MACHTYPE</A>
+<LI><A HREF="bashref.html#IDX123">MAIL</A>
+<LI><A HREF="bashref.html#IDX181">MAILCHECK</A>
+<LI><A HREF="bashref.html#IDX124">MAILPATH</A>
+<LI><A HREF="bashref.html#IDX258">mark-modified-lines</A>
+<LI><A HREF="bashref.html#IDX255">meta-flag</A>
+</DIR>
+<H2><A NAME="o">o</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX182">OLDPWD</A>
+<LI><A HREF="bashref.html#IDX125">OPTARG</A>
+<LI><A HREF="bashref.html#IDX183">OPTERR</A>
+<LI><A HREF="bashref.html#IDX126">OPTIND</A>
+<LI><A HREF="bashref.html#IDX184">OSTYPE</A>
+<LI><A HREF="bashref.html#IDX259">output-meta</A>
+</DIR>
+<H2><A NAME="p">p</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX127">PATH</A>
+<LI><A HREF="bashref.html#IDX185">PIPESTATUS</A>
+<LI><A HREF="bashref.html#IDX186">PPID</A>
+<LI><A HREF="bashref.html#IDX187">PROMPT_COMMAND</A>
+<LI><A HREF="bashref.html#IDX128">PS1</A>
+<LI><A HREF="bashref.html#IDX129">PS2</A>
+<LI><A HREF="bashref.html#IDX188">PS3</A>
+<LI><A HREF="bashref.html#IDX189">PS4</A>
+<LI><A HREF="bashref.html#IDX190">PWD</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX191">RANDOM</A>
+<LI><A HREF="bashref.html#IDX192">REPLY</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX193">SECONDS</A>
+<LI><A HREF="bashref.html#IDX194">SHELLOPTS</A>
+<LI><A HREF="bashref.html#IDX195">SHLVL</A>
+<LI><A HREF="bashref.html#IDX260">show-all-if-ambiguous</A>
+</DIR>
+<H2><A NAME="t">t</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX196">TIMEFORMAT</A>
+<LI><A HREF="bashref.html#IDX197">TMOUT</A>
+</DIR>
+<H2><A NAME="u">u</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX198">UID</A>
+</DIR>
+<H2><A NAME="v">v</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX261">visible-stats</A>
+</DIR>
+
+</P>
+
+
+<H1><A NAME="SEC121" HREF="bashref.html#TOC121">Function Index</A></H1>
+<P>
+Jump to:
+<A HREF="#a">a</A>
+-
+<A HREF="#b">b</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#d">d</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#f">f</A>
+-
+<A HREF="#g">g</A>
+-
+<A HREF="#h">h</A>
+-
+<A HREF="#i">i</A>
+-
+<A HREF="#k">k</A>
+-
+<A HREF="#m">m</A>
+-
+<A HREF="#n">n</A>
+-
+<A HREF="#o">o</A>
+-
+<A HREF="#p">p</A>
+-
+<A HREF="#q">q</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#t">t</A>
+-
+<A HREF="#u">u</A>
+-
+<A HREF="#y">y</A>
+<P>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX330">abort (C-g)</A>
+<LI><A HREF="bashref.html#IDX270">accept-line (Newline, Return)</A>
+<LI><A HREF="bashref.html#IDX350">alias-expand-line ()</A>
+</DIR>
+<H2><A NAME="b">b</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX265">backward-char (C-b)</A>
+<LI><A HREF="bashref.html#IDX284">backward-delete-char (Rubout)</A>
+<LI><A HREF="bashref.html#IDX294">backward-kill-line (C-x Rubout)</A>
+<LI><A HREF="bashref.html#IDX298">backward-kill-word (M-DEL)</A>
+<LI><A HREF="bashref.html#IDX267">backward-word (M-b)</A>
+<LI><A HREF="bashref.html#IDX273">beginning-of-history (M-&#38;#60;)</A>
+<LI><A HREF="bashref.html#IDX262">beginning-of-line (C-a)</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX328">call-last-kbd-macro (C-x e)</A>
+<LI><A HREF="bashref.html#IDX292">capitalize-word (M-c)</A>
+<LI><A HREF="bashref.html#IDX338">character-search (C-])</A>
+<LI><A HREF="bashref.html#IDX339">character-search-backward (M-C-])</A>
+<LI><A HREF="bashref.html#IDX268">clear-screen (C-l)</A>
+<LI><A HREF="bashref.html#IDX309">complete (TAB)</A>
+<LI><A HREF="bashref.html#IDX322">complete-command (M-!)</A>
+<LI><A HREF="bashref.html#IDX314">complete-filename (M-/)</A>
+<LI><A HREF="bashref.html#IDX320">complete-hostname (M-@)</A>
+<LI><A HREF="bashref.html#IDX325">complete-into-braces (M-{)</A>
+<LI><A HREF="bashref.html#IDX316">complete-username (M-~)</A>
+<LI><A HREF="bashref.html#IDX318">complete-variable (M-$)</A>
+<LI><A HREF="bashref.html#IDX303">copy-backward-word ()</A>
+<LI><A HREF="bashref.html#IDX304">copy-forward-word ()</A>
+<LI><A HREF="bashref.html#IDX302">copy-region-as-kill ()</A>
+</DIR>
+<H2><A NAME="d">d</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX283">delete-char (C-d)</A>
+<LI><A HREF="bashref.html#IDX313">delete-char-or-list ()</A>
+<LI><A HREF="bashref.html#IDX300">delete-horizontal-space ()</A>
+<LI><A HREF="bashref.html#IDX307">digit-argument (M-0, M-1, ... M--)</A>
+<LI><A HREF="bashref.html#IDX346">display-shell-version (C-x C-v)</A>
+<LI><A HREF="bashref.html#IDX331">do-uppercase-version (M-a, M-b, 
M-<VAR>x</VAR>, ...)</A>
+<LI><A HREF="bashref.html#IDX291">downcase-word (M-l)</A>
+<LI><A HREF="bashref.html#IDX341">dump-functions ()</A>
+<LI><A HREF="bashref.html#IDX343">dump-macros ()</A>
+<LI><A HREF="bashref.html#IDX342">dump-variables ()</A>
+<LI><A HREF="bashref.html#IDX324">dynamic-complete-history (M-TAB)</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX354">emacs-editing-mode (C-e)</A>
+<LI><A HREF="bashref.html#IDX327">end-kbd-macro (C-x ))</A>
+<LI><A HREF="bashref.html#IDX274">end-of-history (M-&#38;#62;)</A>
+<LI><A HREF="bashref.html#IDX263">end-of-line (C-e)</A>
+<LI><A HREF="bashref.html#IDX337">exchange-point-and-mark (C-x C-x)</A>
+</DIR>
+<H2><A NAME="f">f</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX285">forward-backward-delete-char ()</A>
+<LI><A HREF="bashref.html#IDX264">forward-char (C-f)</A>
+<LI><A HREF="bashref.html#IDX276">forward-search-history (C-s)</A>
+<LI><A HREF="bashref.html#IDX266">forward-word (M-f)</A>
+</DIR>
+<H2><A NAME="g">g</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX344">glob-expand-word (C-x *)</A>
+<LI><A HREF="bashref.html#IDX345">glob-list-expansions (C-x g)</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX351">history-and-alias-expand-line ()</A>
+<LI><A HREF="bashref.html#IDX348">history-expand-line (M-^)</A>
+<LI><A HREF="bashref.html#IDX280">history-search-backward ()</A>
+<LI><A HREF="bashref.html#IDX279">history-search-forward ()</A>
+</DIR>
+<H2><A NAME="i">i</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX340">insert-comment (M-#)</A>
+<LI><A HREF="bashref.html#IDX311">insert-completions (M-*)</A>
+<LI><A HREF="bashref.html#IDX352">insert-last-argument (M-., M-_)</A>
+</DIR>
+<H2><A NAME="k">k</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX293">kill-line (C-k)</A>
+<LI><A HREF="bashref.html#IDX301">kill-region ()</A>
+<LI><A HREF="bashref.html#IDX296">kill-whole-line ()</A>
+<LI><A HREF="bashref.html#IDX297">kill-word (M-d)</A>
+</DIR>
+<H2><A NAME="m">m</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX349">magic-space ()</A>
+<LI><A HREF="bashref.html#IDX312">menu-complete ()</A>
+</DIR>
+<H2><A NAME="n">n</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX272">next-history (C-n)</A>
+<LI><A HREF="bashref.html#IDX278">non-incremental-forward-search-history 
(M-n)</A>
+<LI><A HREF="bashref.html#IDX277">non-incremental-reverse-search-history 
(M-p)</A>
+</DIR>
+<H2><A NAME="o">o</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX353">operate-and-get-next (C-o)</A>
+</DIR>
+<H2><A NAME="p">p</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX323">possible-command-completions (C-x !)</A>
+<LI><A HREF="bashref.html#IDX310">possible-completions (M-?)</A>
+<LI><A HREF="bashref.html#IDX315">possible-filename-completions (C-x /)</A>
+<LI><A HREF="bashref.html#IDX321">possible-hostname-completions (C-x @)</A>
+<LI><A HREF="bashref.html#IDX317">possible-username-completions (C-x ~)</A>
+<LI><A HREF="bashref.html#IDX319">possible-variable-completions (C-x $)</A>
+<LI><A HREF="bashref.html#IDX332">prefix-meta (ESC)</A>
+<LI><A HREF="bashref.html#IDX271">previous-history (C-p)</A>
+</DIR>
+<H2><A NAME="q">q</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX286">quoted-insert (C-q, C-v)</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX329">re-read-init-file (C-x C-r)</A>
+<LI><A HREF="bashref.html#IDX269">redraw-current-line ()</A>
+<LI><A HREF="bashref.html#IDX275">reverse-search-history (C-r)</A>
+<LI><A HREF="bashref.html#IDX334">revert-line (M-r)</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX287">self-insert (a, b, A, 1, !, ...)</A>
+<LI><A HREF="bashref.html#IDX336">set-mark (C-@)</A>
+<LI><A HREF="bashref.html#IDX347">shell-expand-line (M-C-e)</A>
+<LI><A HREF="bashref.html#IDX326">start-kbd-macro (C-x ()</A>
+</DIR>
+<H2><A NAME="t">t</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX335">tilde-expand (M-&#38;#38;)</A>
+<LI><A HREF="bashref.html#IDX288">transpose-chars (C-t)</A>
+<LI><A HREF="bashref.html#IDX289">transpose-words (M-t)</A>
+</DIR>
+<H2><A NAME="u">u</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX333">undo (C-_, C-x C-u)</A>
+<LI><A HREF="bashref.html#IDX308">universal-argument ()</A>
+<LI><A HREF="bashref.html#IDX295">unix-line-discard (C-u)</A>
+<LI><A HREF="bashref.html#IDX299">unix-word-rubout (C-w)</A>
+<LI><A HREF="bashref.html#IDX290">upcase-word (M-u)</A>
+</DIR>
+<H2><A NAME="y">y</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX305">yank (C-y)</A>
+<LI><A HREF="bashref.html#IDX282">yank-last-arg (M-., M-_)</A>
+<LI><A HREF="bashref.html#IDX281">yank-nth-arg (M-C-y)</A>
+<LI><A HREF="bashref.html#IDX306">yank-pop (M-y)</A>
+</DIR>
+
+</P>
+
+
+<H1><A NAME="SEC122" HREF="bashref.html#TOC122">Concept Index</A></H1>
+<P>
+Jump to:
+<A HREF="#a">a</A>
+-
+<A HREF="#b">b</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#d">d</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#f">f</A>
+-
+<A HREF="#h">h</A>
+-
+<A HREF="#i">i</A>
+-
+<A HREF="#j">j</A>
+-
+<A HREF="#k">k</A>
+-
+<A HREF="#l">l</A>
+-
+<A HREF="#m">m</A>
+-
+<A HREF="#n">n</A>
+-
+<A HREF="#o">o</A>
+-
+<A HREF="#p">p</A>
+-
+<A HREF="#q">q</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#t">t</A>
+-
+<A HREF="#v">v</A>
+-
+<A HREF="#w">w</A>
+-
+<A HREF="#y">y</A>
+<P>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX204">alias expansion</A>
+<LI><A HREF="bashref.html#IDX203">arithmetic evaluation</A>
+<LI><A HREF="bashref.html#IDX81">arithmetic expansion</A>
+<LI><A HREF="bashref.html#IDX199">arithmetic, shell</A>
+<LI><A HREF="bashref.html#IDX207">arrays</A>
+</DIR>
+<H2><A NAME="b">b</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX217">background</A>
+<LI><A HREF="bashref.html#IDX358">Bash configuration</A>
+<LI><A HREF="bashref.html#IDX357">Bash installation</A>
+<LI><A HREF="bashref.html#IDX21">Bourne shell</A>
+<LI><A HREF="bashref.html#IDX73">brace expansion</A>
+<LI><A HREF="bashref.html#IDX2">builtin</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX239">command editing</A>
+<LI><A HREF="bashref.html#IDX92">command execution</A>
+<LI><A HREF="bashref.html#IDX91">command expansion</A>
+<LI><A HREF="bashref.html#IDX228">command history</A>
+<LI><A HREF="bashref.html#IDX93">command search</A>
+<LI><A HREF="bashref.html#IDX79">command substitution</A>
+<LI><A HREF="bashref.html#IDX32">command timing</A>
+<LI><A HREF="bashref.html#IDX40">commands, conditional</A>
+<LI><A HREF="bashref.html#IDX52">commands, grouping</A>
+<LI><A HREF="bashref.html#IDX33">commands, lists</A>
+<LI><A HREF="bashref.html#IDX34">commands, looping</A>
+<LI><A HREF="bashref.html#IDX29">commands, pipelines</A>
+<LI><A HREF="bashref.html#IDX26">commands, shell</A>
+<LI><A HREF="bashref.html#IDX27">commands, simple</A>
+<LI><A HREF="bashref.html#IDX25">comments, shell</A>
+<LI><A HREF="bashref.html#IDX356">configuration</A>
+<LI><A HREF="bashref.html#IDX3">control operator</A>
+</DIR>
+<H2><A NAME="d">d</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX208">directory stack</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX240">editing command lines</A>
+<LI><A HREF="bashref.html#IDX95">environment</A>
+<LI><A HREF="bashref.html#IDX202">evaluation, arithmetic</A>
+<LI><A HREF="bashref.html#IDX234">event designators</A>
+<LI><A HREF="bashref.html#IDX94">execution environment</A>
+<LI><A HREF="bashref.html#IDX4">exit status</A>, <A 
HREF="bashref.html#IDX96">exit status</A>
+<LI><A HREF="bashref.html#IDX72">expansion</A>
+<LI><A HREF="bashref.html#IDX80">expansion, arithmetic</A>
+<LI><A HREF="bashref.html#IDX74">expansion, brace</A>
+<LI><A HREF="bashref.html#IDX84">expansion, filename</A>
+<LI><A HREF="bashref.html#IDX78">expansion, parameter</A>
+<LI><A HREF="bashref.html#IDX85">expansion, pathname</A>
+<LI><A HREF="bashref.html#IDX76">expansion, tilde</A>
+<LI><A HREF="bashref.html#IDX201">expressions, arithmetic</A>
+<LI><A HREF="bashref.html#IDX151">expressions, conditional</A>
+</DIR>
+<H2><A NAME="f">f</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX5">field</A>
+<LI><A HREF="bashref.html#IDX6">filename</A>
+<LI><A HREF="bashref.html#IDX86">filename expansion</A>
+<LI><A HREF="bashref.html#IDX216">foreground</A>
+<LI><A HREF="bashref.html#IDX56">functions, shell</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX230">history builtins</A>
+<LI><A HREF="bashref.html#IDX235">history events</A>
+<LI><A HREF="bashref.html#IDX233">history expansion</A>
+<LI><A HREF="bashref.html#IDX229">history list</A>
+<LI><A HREF="bashref.html#IDX227">History, how to use</A>
+</DIR>
+<H2><A NAME="i">i</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX11">identifier</A>
+<LI><A HREF="bashref.html#IDX244">initialization file, readline</A>
+<LI><A HREF="bashref.html#IDX355">installation</A>
+<LI><A HREF="bashref.html#IDX237">interaction, readline</A>
+<LI><A HREF="bashref.html#IDX130">interactive shell</A>, <A 
HREF="bashref.html#IDX132">interactive shell</A>
+</DIR>
+<H2><A NAME="j">j</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX7">job</A>
+<LI><A HREF="bashref.html#IDX8">job control</A>, <A 
HREF="bashref.html#IDX215">job control</A>
+</DIR>
+<H2><A NAME="k">k</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX243">kill ring</A>
+<LI><A HREF="bashref.html#IDX241">killing text</A>
+</DIR>
+<H2><A NAME="l">l</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX24">localization</A>
+</DIR>
+<H2><A NAME="m">m</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX89">matching, pattern</A>
+<LI><A HREF="bashref.html#IDX9">metacharacter</A>
+</DIR>
+<H2><A NAME="n">n</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX10">name</A>
+<LI><A HREF="bashref.html#IDX238">notation, readline</A>
+</DIR>
+<H2><A NAME="o">o</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX12">operator, shell</A>
+</DIR>
+<H2><A NAME="p">p</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX77">parameter expansion</A>
+<LI><A HREF="bashref.html#IDX58">parameters</A>
+<LI><A HREF="bashref.html#IDX61">parameters, positional</A>
+<LI><A HREF="bashref.html#IDX62">parameters, special</A>
+<LI><A HREF="bashref.html#IDX87">pathname expansion</A>
+<LI><A HREF="bashref.html#IDX88">pattern matching</A>
+<LI><A HREF="bashref.html#IDX28">pipeline</A>
+<LI><A HREF="bashref.html#IDX1">POSIX</A>
+<LI><A HREF="bashref.html#IDX214">POSIX Mode</A>
+<LI><A HREF="bashref.html#IDX13">process group</A>
+<LI><A HREF="bashref.html#IDX14">process group ID</A>
+<LI><A HREF="bashref.html#IDX82">process substitution</A>
+<LI><A HREF="bashref.html#IDX212">prompting</A>
+</DIR>
+<H2><A NAME="q">q</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX22">quoting</A>
+<LI><A HREF="bashref.html#IDX23">quoting, ANSI</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX236">Readline, how to use</A>
+<LI><A HREF="bashref.html#IDX90">redirection</A>
+<LI><A HREF="bashref.html#IDX15">reserved word</A>
+<LI><A HREF="bashref.html#IDX213">restricted shell</A>
+<LI><A HREF="bashref.html#IDX16">return status</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX200">shell arithmetic</A>
+<LI><A HREF="bashref.html#IDX55">shell function</A>
+<LI><A HREF="bashref.html#IDX98">shell script</A>
+<LI><A HREF="bashref.html#IDX60">shell variable</A>
+<LI><A HREF="bashref.html#IDX17">signal</A>
+<LI><A HREF="bashref.html#IDX97">signal handling</A>
+<LI><A HREF="bashref.html#IDX18">special builtin</A>
+<LI><A HREF="bashref.html#IDX131">startup files</A>
+<LI><A HREF="bashref.html#IDX218">suspending jobs</A>
+</DIR>
+<H2><A NAME="t">t</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX75">tilde expansion</A>
+<LI><A HREF="bashref.html#IDX19">token</A>
+</DIR>
+<H2><A NAME="v">v</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX59">variable, shell</A>
+</DIR>
+<H2><A NAME="w">w</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX20">word</A>
+<LI><A HREF="bashref.html#IDX83">word splitting</A>
+</DIR>
+<H2><A NAME="y">y</A></H2>
+<DIR>
+<LI><A HREF="bashref.html#IDX242">yanking text</A>
+</DIR>
+
+</P>
+<P><HR><P>
+This document was generated on 1 Febuary 1999 using the
+<A HREF="http://wwwinfo.cern.ch/dis/texi2html/";>texi2html</A>
+translator version 1.52.</P>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/COPYING
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/COPYING
diff -N Proyectos/Mecagtk/miweb/html/es/COPYING
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/COPYING     3 Mar 2012 06:14:30 -0000       
1.1
@@ -0,0 +1,339 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+       Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Index: Proyectos/Mecagtk/miweb/html/es/InicioTutorial
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/InicioTutorial
diff -N Proyectos/Mecagtk/miweb/html/es/InicioTutorial
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/InicioTutorial      3 Mar 2012 06:14:30 
-0000       1.1
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# Si existe el fichero lynx, en el directorio se ejecutará
+# Si no, mostrará el mensaje de error:
+#
+#
+/sbin/pidof X > /tmp/LTdisplay.tmp
+Xrulan=$(cat /tmp/LTdisplay.tmp)
+rm -f /tmp/LTdisplay.tmp
+if expr "$Xrulan" != ""
+ then
+   echo
+   echo "Se está intentando ejecutar Netscape, ya que se ha detectado"
+   echo "el funcionamiento de X-Window..."
+   netscape tutorial.html
+ exit 1
+else
+ echo NO
+fi
+rm -f /tmp/LTdisplay.tmp
+#
+clear
+Version=`pwd`
+if [ -f /usr/bin/lynx ]; then
+   lynx tutorial.html
+else
+  echo
+  echo
+  echo NO TIENES lynx INSTALADO, ES RECOMENDABLE HACERLO
+  echo PARA VERLO EN MODO TEXTO.
+  echo
+  echo "También puede que no sepas donde pudiera estar instalado, para lo"
+  echo "cual deberás seguir estos pasos:"
+  echo
+  echo "cd /"
+  echo "find -iname lynx"
+  echo
+  echo "Una vez encontrado accede al directorio y escribe su nombre"
+  echo "Si no lo tuvieras, deberás ejecutar cualquier navegador HTML"
+  echo "que tengas en X-Window, de todas formas ¡¡INSTALA LYNX!! " 
+  echo
+  echo "O de tenerlo, copialo en el directorio:        /usr/bin"
+  echo
+fi

Index: Proyectos/Mecagtk/miweb/html/es/index2.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/index2.html
diff -N Proyectos/Mecagtk/miweb/html/es/index2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/index2.html 3 Mar 2012 06:14:30 -0000       
1.1
@@ -0,0 +1,17 @@
+<html>
+<body>
+<h2>Tutorial de LiNUX</h2>
+Este tutorial está hecho por un par de chicos llamados<br>
+
+<center>
+<em>
+       Javier Orovengua: (Eggun): address@hidden<br>
+       </em>y<em><br>
+             José Carlos Orovengua: (Shaell): address@hidden<br>
+</em>
+</center>
+<br>
+Los derechos de distribución del mismo están conforme a la licencia <a 
href="COPYING">GNU</a>. Es muy útil para aquellos que acaban de instalar 
<b>LiNUX</b>
+<br><hr><center><a href="index.html">Acceso al tutorial</a></center>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/tutorial.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/tutorial.html
diff -N Proyectos/Mecagtk/miweb/html/es/tutorial.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/tutorial.html       3 Mar 2012 06:14:30 
-0000       1.1
@@ -0,0 +1,227 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12-20 
i686) [Netscape]">
+   <meta name="Author" content="Javier Orovengua Miguel, José Carlos Orovengua 
Miguel.">
+   <meta name="Description" content="Tutorial de Linux/AYUDA EN LINEA">
+   <meta name="Keywords" content="Tutorial, Linux, LinuxTutorial, 
TutorialLinux, Javier Orovengua Miguel, Javier Orovengua, Orovengua, Javier, 
José Carlos Orovengua Miguel, José Carlos Orovengua, Carlos Orovengua.">
+   <title>Bienvenido al Tutorial de Linux.</title>
+</head>
+<body text="#000080" bgcolor="#AEDEF4" link="#3333FF" vlink="#000066" 
alink="#800000">
+[ &lt; ]<a href="linux_files/contenidos.html">[
+|| ]</a>[ > ] Revisi&oacute;n: - Marzo / 2.000
+<center><a href="http://sunsite.unc.edu/mdw/";>[&nbsp; L.D.P. ]</a><a 
href="linux_files/translate.html">[
+Translations ]</a></center>
+
+<center>
+<h1>
+<img SRC="linux_files/logoLT.gif" height=123 width=80><img 
SRC="linux_files/logo.jpg" height=191 width=633></h1></center>
+
+<center>
+<h1>
+<a NAME="InicioTutorial"></a>Bienvenido a TutorialLinux.<font 
size=+1>&reg;</font></h1></center>
+
+<blockquote>
+<center><a NAME="Comienzo"></a>Los n&uacute;meros abajo indicados expresan
+los d&iacute;as que puede tardarse en aprender el tutorial.</center>
+</blockquote>
+
+<blockquote>
+<center><a href="linux_files/contenidos.html">CONTENIDOS</a></center>
+</blockquote>
+
+<ul>
+<li>
+<font size=+1><a href="linux_files/sobre_tutorial.html">LEEME</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/lynxhow1.html">Pantalla de Texto, estoy
+en Lynx &iquest;Qu&eacute; hago?.</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/quitlinux.html">Salir CORRECTAMENTE
+de Linux</a></font></li>
+
+<li>
+<font size=+1><a href="#TuLengua">No veo los caracteres en mi 
lengua:</a></font></li>
+</ul>
+
+<ol>
+<li>
+<font size=+1><a href="linux_files/linux1.html">Nunca antes hab&iacute;a
+estado en Linux.</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux2.html">Repaso de comandos. 
(Gu&iacute;a
+R&aacute;pida) + Estructura de directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux3.html">&iquest;C&oacute;mo uso
+la multitarea de Linux?</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux4.html">Gestionar 
Ficheros</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/exercise.html">&iquest;Te gustan los
+deberes?</a></font></li>
+</ol>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<font size=+1><a href="linux_files/linux5.html">Gestionando 
usuarios</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/conexion.html">Conexi&oacute;n a 
internet</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux6.html">Herramientas, 
Administraci&oacute;n
+y Configuraci&oacute;n.</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux9.htm">Seguridad</a>.</font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux7.html">&iquest;que no hay espacio?
+Creando una partici&oacute;n m&aacute;s...</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/linux8.html">&iquest;Y ahora, qu&eacute;?
+(Internet, emuladores...)</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/trucos.html">ALGUNOS TRUCOS.</a></font></li>
+
+<li>
+<font size=+1><a href="linux_files/aPROBLEMAS.html">Y si tengo 
problemas...</a></font></li>
+
+<li>
+<font size=+1><a 
href="linux_files/x-window.html">&iexcl;&iexcl;X-Window!!</a></font></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<font size=+1><a href="/usr/doc/HOWTO/translations/es/html/">Tus 
&iquest;C&oacute;mo
+puedo...? <b>locales</b>: /usr/doc/HOWTO/translations/es/html/</a></font></li>
+
+<li>
+<font size=+1><a href="/usr/doc/FAQ/html/">Tus FAQ <b>locales</b>: 
/usr/doc/FAQ/html/</a></font></li>
+
+<li>
+<font size=+1><a href="/usr/doc/">Tu Documentaci&oacute;n <b>local</b>
+varia: /usr/doc/</a></font></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<font size=+1><a href="linux_files/gracias_a.html">El Equipo 
TutorialLinux:</a></font></li>
+
+<li>
+<font size=+1><a href="#CopyRight">&copy; Copyright, y todo 
eso.</a></font></li>
+
+<li>
+<font size=+1><a href="tutorial.html#Enlaces">De donde bajarse la &uacute;ltima
+actualizaci&oacute;n del tutorial</a></font></li>
+
+<li>
+<font size=+1><a href="#Enlaces">Enlaces convenientes de este 
tutorial</a></font></li>
+</ul>
+
+<hr WIDTH="100%">
+<br>&nbsp;
+<h1>
+<a NAME="TuLengua"></a>Para Seleccionar los caracteres en tu lengua (y
+tu lengua en general)&nbsp; escribe :</h1>
+<b><font color="#330000">Edita el fichero:</font></b>
+<br><b><font color="#330000">/etc/sysconfig/i18n</font></b>
+<p><b><font color="#330000">y escribe las siguientes l&iacute;neas al final
+del fichero (si no existieran):</font></b>
+<p><b><font color="#330000">export LC_LANG=(tu_lengua)</font></b>
+<br><b><font color="#330000">export LANG=(tu_lengua)</font></b>
+<br><b><font color="#330000">export LANGUAGE=(tu_lengua)</font></b>
+<p><b><font color="#330000">(tu_lengua) es un directorio con un conjunto
+de funciones que se pueden encontrar en:</font></b>
+<p><b><font color="#330000">/usr/share/locale</font></b>
+<br><b><font color="#330000">/usr/share/i18n/locales/</font></b>
+<p><font color="#330000">Ejemplo:</font>
+<br><b><font color="#330000">export LC_LANG=es_ES</font></b>
+<br><b><font color="#330000">export LANG=es_ES</font></b>
+<br><b><font color="#330000">export LANGUAGE=es_ES</font></b>
+<p><font color="#330000">Si tu lengua no estuviera all&iacute;:</font>
+<br>
+<hr WIDTH="100%">
+<br><a href="linux_files/glosary.html">setfont&nbsp;&nbsp; lat1u-16.psf</a>
+<p>Si no ves los caracteres que pertenecen a tu idioma, deber&aacute;s
+cargar el fichero correspondiente del directorio:
+<p><a href="/usr/lib/kbd/consolefonts">/usr/lib/kbd/consolefonts/.</a>
+<p>Escribe:
+<br>cd /usr/lib/consolefonts
+<p>y haz un listado de los ficheros. Si no sabes cu&aacute;l es, l&eacute;ete
+el README que hay, y posteriormente escribe lo de arriba indicado.
+<p>setfont = Comando para inicializar las fuentes
+<br>lat1u-16.psf = La fuente que se est&aacute; inicializando en ese momento.
+<p>Las fuentes pueden ser de muchos tipos y muy variadas. Elige la que
+m&aacute;s te guste.
+<p><font color="#330000"><a href="#Comienzo">[ ^ ]</a></font>
+<br>&nbsp;
+<h3>
+Modificar tus ficheros: <a href="linux_files/bashrc.sample.txt">.bashrc</a>
+y <a href="linux_files/bash_profile.sample.txt">.bash_profile</a>, si tu
+<a href="linux_files/glosary.html#shell">SHELL</a>
+seleccionada es <a href="linux_files/glosary.html#bash">BASH</a></h3>
+
+<hr WIDTH="100%">
+<br><a NAME="CopyRight"></a>
+<h2>
+Copyright:</h2>
+
+<ul>&nbsp;
+<center>
+<p>Este Tutorial S&oacute;lo puede ser distribuido s&oacute;lo bajo los
+t&eacute;rminos de la <a href="linux_files/stutorial2.html">licencia 
GNU.</a></center>
+
+<ul>
+<pre>P&aacute;gina Web donde podr&aacute;s bajar la &uacute;ltima 
versi&oacute;n actualizada de: TutorialLinux
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
_______________________________________________
+&nbsp;___________|&nbsp; <a 
href="http://lucas.hispalinux.es";>http://lucas.hispalinux.es</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 |__________
+&nbsp;\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; <a 
href="http://www.todolinux.org";>http://www.todolinux.org</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /
+&nbsp; \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; <a 
href="ftp://lucas.hispalinux.es/pub/LuCAS";>ftp://lucas.hispalinux.es/pub/LuCAS</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /
+&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
|_______________________________________________|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 \
+&nbsp;/_____________)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 (_____________\</pre>
+</ul>
+</ul>
+<font color="#330000"><a href="#Comienzo">[ ^ ]</a></font>
+<p>
+<hr WIDTH="100%">
+<br><a NAME="Enlaces"></a>
+<h2>
+Enlaces:</h2>
+
+<ul>
+<center>
+<h1>
+<tt><a href="linux_files/webdirs.html">Mira aqu&iacute; algunos de los
+enlaces m&aacute;s interesantes.</a></tt></h1></center>
+</ul>
+<font color="#330000"><a href="#Comienzo">[ ^ ]</a></font>
+<center>
+<p>
+<hr WIDTH="100%">
+<br><img SRC="linux_files/email.gif" height=50 width=69>
+<br>Autores:</center>
+
+<blockquote>
+<center>Javier Orovengua: (Eggun): <a 
href="mailto:address@hidden";>address@hidden</a>
+<br>Jos&eacute; Carlos Orovengua: (Shaell): <a 
href="mailto:address@hidden";>address@hidden</a></center>
+</blockquote>
+
+<blockquote>&nbsp;</blockquote>
+
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/Examples/COPYING
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/COPYING
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/COPYING
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/Examples/COPYING    3 Mar 2012 06:14:30 
-0000       1.1
@@ -0,0 +1,339 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+       Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Index: Proyectos/Mecagtk/miweb/html/es/Examples/LICENCIA.TXT
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/LICENCIA.TXT
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/LICENCIA.TXT
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/Examples/LICENCIA.TXT       3 Mar 2012 
06:14:30 -0000       1.1
@@ -0,0 +1,711 @@
+             --------------------------------------
+              Esta licencia es una traducción de la
+                     original licencia GPL.
+             --------------------------------------
+                                
+                  LICENCIA PÚBLICA GENERAL GNU
+                    Versión 2, junio de 1991
+                                
+                  Copyright (C) 1989, 1991 Free
+                    Software Foundation, Inc.
+             675 Mass Ave, Cambridge, MA 02139, USA
+                                
+               Se permite a todo el mundo copiar y
+               distribuir copias idénticas de este
+               documento de licencia, aunque no se
+                    permite su modificación.
+                                
+                            Preámbulo
+                                
+              Las licencias de uso de casi todo el
+               software han sido establecidas para
+              quitarle la libertad de compartirlo y
+               modificarlo. En contraste con esta
+                 costumbre, la Licencia General
+               Pública GNU pretende garantizar su
+                libertad de compartir y modificar
+              software libre, a fin de asegurar que
+               el software es libre para todos sus
+                 usuarios. Esta Licencia General
+                Pública es de aplicación para la
+               mayor parte del software de la Free
+              Software Foundation y para cualquier
+                 otro programa cuyos autores se
+               comprometen a su utilización. (Otro
+                  software de la Free Software
+                    Foundation está cubierto
+                alternativamente por la Licencia
+               General Pública de biblioteca GNU).
+                También puede aplicar ésta a sus
+                           programas.
+                                
+              Cuando hablamos de software libre nos
+                 referimos a la libertad, no al
+              precio. Nuestras Licencias Generales
+                Públicas han sido diseñadas para
+              asegurarle la libertad necesaria para
+               distribuir copias de software libre
+               (y de cobrar por este servicio, si
+                así lo desea), que reciba código
+              fuente o pueda obtenerlo si lo desea,
+                que pueda modificar el software o
+               utilizar partes del mismo en nuevos
+              programas libres y que sepa que puede
+                       hacer estas cosas.
+                                
+                A fin de proteger sus derechos, es
+               necesario constituir restricciones
+                  que impidan que alguien pueda
+               denegarle estos derechos o pedirle
+                que renuncie a los mismos. Estas
+                 restricciones implican también
+                  ciertas responsabilidades si
+               distribuye copias del software o lo
+                            modifica.
+                                
+               Por ejemplo, si distribuye copias de
+              este programa, tanto gratuitamente o
+              con ánimo de lucro, deber conceder a
+               los recipientes del mismo todos los
+               derechos con los que cuente. Deberá
+                asegurarse de que los recipientes
+               reciben o pueden obtener el código
+               fuente. Y deber asimismo mostrarle
+               estos términos, a fin de que puedan
+                      conocer sus derechos.
+                                
+                 Protegemos sus derechos con dos
+               pasos: (1) copyright del software y
+              (2) le ofrecemos esta licencia que le
+               concede permiso legal para copiar,
+              distribuir y/o modificar el software.
+                Adema protecci
+                autor así como la nuestra propia,
+                deseamos asegurarnos que todo el
+                mundo comprende que este software
+              libre no cuenta con garant
+                Si el software es modificado por
+              alguna otra persona y posteriormente
+                  distribuido, deseamos que sus
+                 destinatarios sepan que lo que
+               reciben no es el producto original,
+                 de forma que cualquier problema
+              introducido por otras partes no pueda
+                   reflejarse en la reputación
+                   profesional de los autores
+                           originales.
+                                
+               Finalmente, cualquier programa libre
+               se ve constantemente amenazado por
+              patentes de software. Deseamos evitar
+                      el peligro de que los
+              redistribuidores de un programa libre
+                 obtengan licencias de patente a
+               título individual, lo que haría de
+               éste un programa privado. A fin de
+               impedir esto hemos dejado muy claro
+              que cualquier patente obtenida deber               ser 
licenciada para la utilización
+                 libre de todos o no deberá ser
+                     licenciada en absoluto.
+                 A continuación se encuentran los
+              términos y condiciones precisos para
+                    la copia, distribuci                          modificación.
+                                
+                          LICENCIA GENERAL P
+                   TCONDICIONES PARA LA
+        REALIZACIÓN DE COPIAS, DISTRIBUCIÓN/MODIFICACIÓN
+                                
+                                
+               0. Esta Licencia es de aplicación a
+              cualquier programa u otro trabajo que
+                contenga un aviso incluido por el
+              titular de los derechos de copyright
+                  estableciendo su libertad de
+                 distribución bajo los t                   esta Licencia 
General Pública
+                "Programa", a continuaci                referencia a cualquier 
programa o
+               trabajo de este tipo y un "trabajo
+                basado en el Programa" indica el
+              Programa o cualquier tipo de trabajo
+              derivado bajo las leyes de copyright:
+              es decir, un trabajo que contenga el
+                Programa o una porción del mismo,
+                     bien en version bien con
+               modificaciones y/o traducido a otro
+                    idioma. (En adelante, las
+               traducciones quedan incluidas, sin
+                limitación alguna, en el término
+              "modificación"). Cada beneficiario de
+               esta licencia quedará indicado por
+                       el término "usted".
+                                
+                 Las actividades que no incluyan
+              copia, distribución y modificación no
+                  quedarán protegidas por esta
+              Licencia; quedan fuera de su alcance.
+              El acto de ejecución del Programa no
+                 queda limitado y los resultados
+             obtenidos de la ejecución Programa quedan
+            cubiertos sólo si su contenido constituye
+                un trabajo basado en el Programa
+              (independientemente de que haya sido
+               obtenido mediante la ejecución del
+                  Programa). La validez de esto
+              dependerá de lo que haga el Programa.
+               1. Podrá copiar y distribuir copias
+                       exactas del cte del
+               programa según lo hubiera recibido,
+               utilizando cualquier medio, siempre
+                que de forma notoria y apropiada
+                publique, en cada copia, un aviso
+               adecuado de derechos de copyright y
+               relativo a la ausencia de garantía
+              alguna; y de que proporcione a todos
+               los destinatarios del Programa una
+               copia de esta Licencia junto con el
+                             mismo.
+                                
+               Podrá cobrar honorarios por el acto
+              físico de transferencia de una copia
+                y podrá, a su propia discreción,
+               ofrecer servicios de protección de
+                garantía a cambio de honorarios.
+               2. Puede modificar su copia o copias
+              del Programa o cualquier porción del
+             mismo, hasta la formación trabajo basado
+             en el Programa, y podrá asimismo copiar
+              y distribuir dichas modificaciones o
+           trabajos bajo los t la Sección 1
+               anteriormente reseñada, siempre que
+               cumpla las condiciones adicionales
+                 que se detallan a continuación:
+                                
+                        A) Deberse de que
+                      los archivos modificados
+                         incorporen avisos
+                    prominentes que establezcan
+                       que ha modificado los
+                    archivos, así como la fecha
+                       de dicha modificación.
+                                
+                        B) Deberse de que
+                       cualquier trabajo que
+                     distribuya o publique, que
+                     pudiera, en su totalidad o
+                     en parte, contener o haber
+                     sido derivado del Programa
+                      o de cualquier parte del
+                    mismo, sea licenciado en su
+                       totalidad y sin cargo
+                      alguno a terceros que lo
+                    requieran bajo los t                         de esta 
Licencia.
+                                
+                        C) Si el programa
+                     modificado lee normalmente
+                     comandos interactivamente
+                     cuando se ejecuta, deberá
+                     asegurarse de que, cuando
+                       se ponga en marcha su
+                        ejecución para dicha
+                     utilizacitiva de
+                    la forma mimprima
+                     o muestre una proclama que
+                          incluya un aviso
+                     correspondiente relativo a
+                    los derechos de copyright y
+                      una clarificación de la
+                        falta de garantía (o
+                     estableciendo la provisión
+                      de dicha garantía por su
+                     parte) y que confirme que
+                        los usuarios pueden
+                      redistribuir el programa
+                     bajo estas condiciones, e
+                      informe al usuario cómo
+                      visualizar una copia de
+                     esta Licencia. (Excepción:
+                    si el Programa es de por si
+                    interactivo pero no imprime
+                    normalmente dicha proclama,
+                    tampoco se requerirá que su
+                        trabajo basado en el
+                     Programa deba imprimirla).
+                                
+              Estos requisitos son de aplicación al
+               trabajo modificado en su totalidad.
+               Si hubiera secciones identificables
+                de dicho trabajo no derivadas del
+              Programa y que pudieran considerarse
+                     trabajos razonablemente
+                  independientes, entonces esta
+               Licencia, así como sus términos, no
+                  serian de aplicación a dichas
+              secciones cuando las distribuya como
+              trabajos independientes. Pero cuando
+              distribuya las mismas secciones como
+               parte de un trabajo completo mayor
+                    basado en el Programa, la
+                distribución del trabajo completo
+               deberse bajo los términos
+              de esta Licencia, cuyos permisos con
+                  respecto a otras licencias se
+              ampliarán a la totalidad del trabajo
+              completo y por lo tanto a cada una de
+                     las partes del trabajo
+                irrespectivamente de qui                            escrito.
+                                
+               Por todo esto, no es el propósito de
+                esta sección reclamar derechos o
+                disputar sus derechos a trabajos
+               escritos enteramente por el titular
+               de esta licencia sino ejercitar el
+               derecho a controlar la distribución
+               de trabajos derivados o colectivos
+                     basados en el Programa.
+               Además, la simple agregación de otro
+               trabajo no basado en el Programa a
+               éste (o con un trabajo basado en el
+               Programa) en un volumen de un medio
+               de almacenamiento o distribución no
+              somete al otro trabajo al alcance de
+                         esta Licencia.
+                                
+                 3. Podrá copiar y distribuir el
+            Programa (o un trabajo basado en  mismo,
+               bajo los términos de la Sección 2)
+                   en código objeto o formato
+                  ejecutable bajo los términos
+                 anteriormente reseñados en las
+              Secciones 1 y 2, siempre que observe
+                 asimismo una de las condiciones
+                           siguientes:
+                                
+                      A) Lo acompañe con el
+                       correspondiente c                       completo leíble 
por él
+                        sistema, que deber á
+                       distribuirse bajos los
+                       términos anteriormente
+                     reseñados en las Secciones
+                         1 y 2 en un medio
+                     normalmente utilizado para
+                    intercambios de software; o
+                                
+                     B) Lo acompañe con una
+                    oferta por escrito, con una
+                       validez mínima de tres
+                        años. de facilitar a
+                      terceros, a un precio no
+                        superior al coste de
+                      realizar la distribución
+                       física del código, una
+                     copia completa leíble por
+                           la máquina del
+                       correspondiente c                     fuente, a 
distribuir bajo
+                     los términos anteriormente
+                     reseñados en las Secciones
+                         1 y 2 en un medio
+                     normalmente utilizado para
+                    intercambios de software; o
+                                
+                      C) Lo acompañe con la
+                        información que haya
+                     recibido en relación a la
+                     oferta de distribución del
+                        código fuente. (Esta
+                       alternativa se permite
+                        exclusivamente para
+                         distribuciones no
+                      comerciales y sólo si ha
+                      recibido el programa en
+                      código objeto o formato
+                        ejecutable con dicha
+                     oferta, de acuerdo con los
+                       términos anteriormente
+                   reseñados en la Subsección B).
+                                
+                  El código fuente de un trabajo
+                significa la forma preferida del
+                 trabajo para la realización de
+                modificaciones al mismo. Para un
+              trabajo ejecutable, el código fuente
+                completo significa todo el código
+                     fuente para todos los m
+               contiene, más cualesquiera archivos
+              de definición de interfaz asociados,
+               más las secuencias que se utilicen
+                 para controlar la compilación y
+                  ejecución del ejecutable. Sin
+              embargo, como una excepción especial,
+                 el código fuente distribuido no
+                  necesita incluir nada que sea
+               normalmente distribuido (en formato
+              fuente o binario) con los componentes
+                principales (compilador, núcleo,
+              etc.) del sistema operativo en el que
+              se ejecuta el ejecutable, a menos que
+                el propio componente acompañe al
+                           ejecutable.
+                                
+                   Si llegara a realizarse una
+                 distribución de código objeto o
+              ejecutable ofreciendo acceso a copiar
+                    de un lugar designado, el
+              ofrecimiento de acceso equivalente a
+                copiar el código fuente del mismo
+  lugar contará como una distribuci del código fuente, incluso
+                           cuando las
+              terceras partes no tengan que copiar
+              el código fuente conjuntamente con el
+                         código objeto.
+                                
+                  4. No podrá copiar, modificar,
+              sublicenciar o distribuir el Programa
+                  salvo en la forma en que esta
+                Licencia expresamente lo permita.
+                Cualquier otro intento de copia,
+                   modificación, sublicencia o
+              distribución del Programa será nula y
+                         darorma automs
+               derechos bajo los términos de esta
+              Licencia. Sin embargo, las licencias
+                 correspondientes a terceros que
+                hubieran podido recibir copias, o
+                  derechos, del titular de esta
+                licencia bajo los términos de la
+              misma no quedarán canceladas siempre
+                 que dichas partes observen sus
+                          condiciones.
+                                
+                 5. No tiene obligación alguna de
+               aceptar esta Licencia, ya que no ha
+               firmado la misma. Sin embargo, nada
+                        aqude permiso de
+                 modificación o distribución del
+               Programa o sus trabajos derivados.
+               Estas acciones quedarán prohibidas
+               por la ley si decidiera no aceptar
+              esta Licencia. Por lo tanto, mediante
+                    la modificaciibución del
+                Programa (o de cualquier trabajo
+                basado en el mismo), indicará su
+              aceptación de esta Licencia y de sus
+              términos y condiciones para la copia,
+                 distribución o modificación del
+              Programa o de los trabajos basados en
+                            el mismo.
+                                
+                 6. Cada vez que redistribuya el
+              Programa (o cualquier trabajo basado
+              en el mismo), el destinatario recibe
+                automáticamente una licencia del
+                  titular original para copiar,
+              distribuir o modificar el Programa en
+              base a estos términos y condiciones.
+                  No podrá imponer restricción
+              adicional alguna sobre el ejercicio,
+               por parte del destinatario, de los
+                derechos que aquí se conceden. No
+               tendrbilidad alguna en lo
+     que atañe a asegurar la observaci por terceros, de las
+                          condiciones a
+               las que está sujeta esta licencia.
+                                
+                 7. Si, como consecuencia de una
+               sentencia judicial de infracción de
+               derechos de patente o por cualquier
+              otra razón (no limitada a cuestiones
+                  de patente), se le impusiera
+                 condición alguna (por sentencia
+               judicial, acuerdo, o cualquier otra
+  vía) que estuviera en contradicci con las condiciones de
+esta
+                            Licencia,
+                         dicha condiciir
+                   excusa en lo que atañe a la
+                   obligación de observar las
+               condiciones de esta Licencia. Si no
+               pudiera efectuar distribuciones de
+               forma que satisfaga simultáneamente
+              sus obligaciones bajo los términos de
+               esta Licencia y cualesquiera otras
+                  obligaciones que le pudieran
+                corresponder, la consecuencia de
+              dichas circunstancias es que no podr               distribuir el 
Programa en absoluto.
+                 Por ejemplo, si una licencia de
+                    patente no permitiera la
+               redistribución libre de derechos de
+                royalty del Programa por parte de
+                aquellos que recibieran copias de
+               forma directa o indirecta a través
+              suya, entonces la única forma en que
+               podría satisfacer dicha licencia de
+              patente y esta Licencia consistir en
+                  no distribuir el Programa en
+                            absoluto.
+                                
+               Si cualquier porción de esta sección
+              llegara a ser declarada inválida o no
+                    ejecutable bajo cualquier
+               circunstancia determinada, el resto
+                 de la sección seguirá siendo de
+                aplicación y la sección completa
+                seguirá siendo asimismo aplicable
+                   siempre que concurran otras
+                         circunstancias.
+                                
+                     No es el propsta sección
+                inducirle a infringir patentes u
+                 otros derechos de la propiedad
+                 intelectual o disputar en forma
+              alguna la validez de dichos derechos;
+                   el tivo de esta secci               la protección de la 
integridad del
+               sistema de distribución de software
+               libre, implantado por prácticas de
+              licencia pública. Muchas personas han
+              hecho generosas contribuciones a una
+              amplia gama de software distribuido a
+               través de este sistema confiando en
+                 la coherente aplicación de este
+              sistema de distribución; depende del
+                 autor/donante decidir si desea
+                 distribuir el software mediante
+                  cualquier otro sistema, y un
+                 licenciado no puede establecer
+                imposición alguna con respecto a
+                         dicha decisión.
+                                
+                  Esta sección pretende aclarar
+              perfectamente lo que se supone es una
+                 consecuencia del resto de esta
+                            licencia.
+                                
+              8. Si la distribución y/o utilización
+               del Programa quedara restringida en
+                ciertos países bajo el efecto de
+                derechos de patente o interfaces
+                 sujetas a copyright, el titular
+              original de los derechos de copyright
+                que ampara el Programa bajo esta
+                   Licencia podrna limitación
+              explícita del ámbito de distribución
+                 geográfica que excluya a dichos
+              países, de forma que la distribución
+                quede permitida sólo en países, o
+              entre países, que no estén sujetos a
+                    dicha exclusie caso, esta
+              Licencia incorporar la limitación de
+               la misma forma que si hubiera sido
+                  incluida en el texto de esta
+                            Licencia.
+                                
+               9. La Free Software Foundation podr                publicar 
versiones revisadas y/o
+              nuevas de la Licencia General Pública
+                     de forma previas nuevas
+                   versiones seres en espíritu
+               a la versión actual. aunque podrían
+              diferir en detalles a fin de resolver
+                 nuevos problemas o cuestiones.
+                                
+                Cada versión recibirá un número de
+                versión distinto. Si el Programa
+               especifica un nersión de
+               esta Licencia que sea de aplicación
+              la misma y a "cualquier otra versión
+                 posterior", tendrá la opción de
+              seguir los términos y condiciones de
+              dicha versión o de cualquier versión
+                 posterior publicada por la Free
+               Software Foundation. Si el Programa
+              no especificara un número de versión
+               de esta Licencia, podrá seleccionar
+                 cualquier versión publicada en
+                  cualquier momento por la Free
+                      Software Foundation.
+                                
+               10. Si deseara incorporar partes del
+               Programa en otros programas libres
+                cuyas condiciones de distribución
+               sean distintas, escriba al autor y
+               solicite permiso. Escriba a la Free
+               Software Foundation con respecto al
+              software cuyos derechos de copyright
+                correspondan a esta organización;
+              algunas veces concedemos excepciones
+              a estas normas. Nuestra decisión ser                 guiada por 
los dos objetivos de
+              conservar el care de todos
+                los derivados de nuestro software
+               libre y de promover generalmente la
+                participación en el software y su
+                         reutilización.
+                                
+                        INEXISTENCIA DE GARANTIA
+                 11. DEBIDO A QUE EL PROGRAMA SE
+              LICENCIA LIBRE DE COSTE ALGUNO, EN LO
+              QUE PERMITE LA LEY, ESTE PROGRAMA NO
+               ESTA PROTEGIDO POR GARANT
+                  SALVO CUANDO SE ESTABLEZCA LO
+              CONTRARIO POR ESCRITO, LOS TITULARES
+                DE LOS DERECHOS DE COPYRIGHT Y/O
+              OTRAS PARTES SUMINISTRAN EL PROGRAMA
+                "TAL Y COMO ES", SIN GARANTÍA DE
+                NINGUN TIPO, EXPRESA O IMPLÍCITA,
+               INCLUYENDO, PERO SIN QUE ESTO SIRVA
+                  DE LIMITACIÓN, LAS GARANTÍAS
+                 IMPLÍCITAS DE COMERCIABILIDAD O
+                  UTILIDAD PARA ALGÚN PROPÓSITO
+              DETERMINADO. LA TOTALIDAD DEL RIESGO
+                   EN RELACION A LA CALIDAD Y
+              RENDIMIENTO DEL PROGRAMA DESCANSA EN
+              EL USUARIO. SI SE LLEGARA A ENCONTRAR
+                QUE EL PROGRAMA ADOLECE DE ALGUN
+                DEFECTO, EL USUARIO DEBERA ASUMIR
+                 TODOS LOS COSTES QUE RESULTARAN
+                  NECESARIOS PARA SU SERVICIO,
+                    REPARACION O CORRECCION.
+                                
+                12. BAJO NINGUNA CIRCUNSTANCIA, A
+                MENOS QUE LO REQUIERA ALGUNA LEY
+                 APLICABLE O QUE SE ACUERDE POR
+               ESCRITO, EL TITULAR DE LOS DERECHOS
+               DE COPYRIGHT O CUALQUIER OTRA PARTE
+                QUE HUBIERA PODIDO MODIFICAR Y/O
+               REDISTRIBUIR EL PROGRAMA DE ACUERDO
+                CON LAS CONDICIONES ANTERIORMENTE
+               RESEÑADAS, SERÁ RESPONSABLE ANTE EL
+                 USUARIO POR DAÑOS Y PERJUICIOS,
+                       INCLUYENDO DAUICIOS
+              GENERALES, ESPECIALES, INCIDENTALES O
+                 CONSECUENTES, RESULTANTES DE LA
+              UTILIZACIÓN O INCAPACIDAD DE USO DEL
+               PROGRAMA (INCLUYENDO, PERO SIN QUE
+               ESTO CONSTITUYA UNA LIMITACIÓN, LA
+              PÉRDIDA DE DATOS O LA INEXACTITUD DE
+                   DICHOS DATOS O LAS PÉRDIDAS
+              SOSTENIDAS POR EL USUARIO O TERCEROS
+              O UN FALLO DEL PROGRAMA CON RESPECTO
+                  A SU FUNCIONAMIENTO CON OTROS
+              PROGRAMAS), INCLUSO SI DICHO TITULAR
+               U OTRA PARTE HUBIERA SIDO INFORMADO
+                CON RESPECTO A LA POSIBILIDAD DE
+                   DICHOS DAÑOS Y PERJUICIOS.
+                FIN DE LOS TÉRMINOS Y CONDICIONES
+                                
+              Apéndice: Como Aplicar estos Términos
+                                
+                         a sus Nuevos Programas
+                Si llegara a desarrollar un nuevo
+               programa y desea fuera de la mayor
+              utilidad posible al público, la mejor
+                forma de conseguirlo es escribir
+                software libre que todo el mundo
+                  pueda redistribuir y cambiar
+                  libremente bajo estos términos
+               Para hacer esto, adjunte los avisos
+               que se relacionan a continuación al
+                   programa. Lo más seguro es
+                adjuntarlos al principio de cada
+              archivo fuente a fin de expresar con
+              la mayor efectividad la exclusión de
+                garantías; y cada archivo debería
+              tener por lo menos la l "copyright" y
+              un indicador que informe sobre dónde
+              puede localizarse el texto completo.
+                                
+                       Nombre del programa
+     Una pequeña línea de lo que hace
+
+                    Copyright mbre
+                        del autor.>
+                                
+                    Este programa es software
+                   libre; lo puede reditribuir
+                     y/o modificar bajo los
+                     términos de la Licencia
+                    General Pública GNU según
+                    lo publicado por la Free
+                    Software Foumdation, bien
+                       la versión Licencia
+                     o (a su propia opci                     cualquier otra 
versión
+                           posterior.
+                                
+                   Este programa se distribuye
+                     con la esperanza de que
+                   será útil, pero SIN NINGÚN
+                    TIPO DE GARANTÍA; incluso
+                    sin la garantía impl                      de 
COMERCIABILIDAD o
+                       UTILIDAD PARA ALG                   PROPÓSITO 
DETERMINADO. Mire
+                   la Licencia pública general
+                         de GNU para más
+                          información.
+                                
+                   Debería haber recibido una
+                      copia de la Licencia
+                    General Pública GNU junto
+                   con este programa; en caso
+                     contrario, escriba a la
+                                
+                    Free Software Foundation,
+                       Inc., 675 Mass Ave,
+                     Cambridge MA 02139 USA
+                                
+                      Adjunte también sobre
+              cómo contactar por correo electrónico
+                      o por correo normal.
+                                
+               Si el programa es interactivo, haga
+               que proporcione un corto aviso como
+                el que se muestra a continuación
+                  cuando comienza en modalidad
+                          interactiva:
+
+                     Gnomovision version 69,
+                    Copyright e of
+                    author Gnomovision comes
+                       with ABSOLUTELY NO
+                    WARRANTY;for details type
+                       'show w' This free
+                      software, and you are
+                   welcome to redistribute it
+                    under certain conditions;
+                   type 'show c' for details.
+               los comandos hipotéticos 'show w' y
+                  'show c' deberían mostrar las
+                secciones correspondientes de la
+                Licencia General Pública. Como es
+                natural, los comandos que utilice
+               podrían denominar algo diferente a
+              'show w' y 'show c', podrían incluso
+               ser pulsaciones de los botones del
+                   ratntos de menú, lo que se
+                    adecue más a su programa.
+                    También debersi lo creyera
+              necesario, que su empresa (si trabaja
+              como un programador) o su institución
+              educativa, si correspondiera, firmara
+                un "aviso de no aplicabilidad de
+                    derechos de copyright". A
+               continuación se muestra un ejemplo,
+              modifique los nombres de acuerdo con
+                         sus requisitos:
+                                
+                       Yoyodyne, Inc., por este
+                      medio renuncia a todos los
+                      derechos de copyright del
+                        programa 'Gnomovision'
+                        (which makes passes at
+                        compilers) escrito por
+                            James Hacker.
+                      <firma del Empresario>, 1
+                       Abril 1989 Empresario, o
+                         Director en su lugar
+                                
+      Esta Licencia General P permite la incorporación de su
+              programa a programas privados. Si su
+                  programa es una biblioteca de
+                subrutinas, podría considerar más
+                   útil permitir el enlace de
+                  aplicaciones privadas con la
+               biblioteca. Si esto es lo que desea
+               hacer, utilice la Licencia General
+              Pública de Biblioteca GNU en lugar de
+                         esta Licencia.
+                                

Index: Proyectos/Mecagtk/miweb/html/es/Examples/issue.gz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/issue.gz
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/issue.gz
Binary files /dev/null and /tmp/cvsJrkK8p differ

Index: Proyectos/Mecagtk/miweb/html/es/Examples/leeme.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/leeme.txt
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/leeme.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/Examples/leeme.txt  3 Mar 2012 06:14:31 
-0000       1.1
@@ -0,0 +1,24 @@
+
+-----------------------------------------------------------
+
+Para descomprimir los fichero .gz escribe:
+
+gzip -d fichero.gz
+
+Por ejemplo para descomprimir issue, escribe:
+
+gzip -d issue.gz
+
+-----------------------------------------------------------
+
+Ahora escribe: 
+
+cat issue
+
+----------------------------------------------------------
+
+Copia ese fichero al directorio /etc/, haciendo una copia de seguiridad
+del antiguo "issue" por si no te gusta, también puede que necesites hacer
+algunas modificaciones en el fichero: /etc/irc.d/rc.local
+
+----------------------------------------------------------

Index: Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/ExampleIssue.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/ExampleIssue.txt
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/ExampleIssue.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/ExampleIssue.txt 3 Mar 
2012 06:14:31 -0000       1.1
@@ -0,0 +1,64 @@
+Para crear este fichero con colores hemos redireccionado una salida hemos
+hecho:
+
+./bins/forMakeIssue > ExampleIssue.txt
+
+Con lo que hemos conseguido la primera entrada, para hacer una nueva entrada
+hemos hecho:
+
+./bins/forMakeIssue >> ExampleIssue.txt
+
+Y en vez de suprimir el contenido, hemos añadido al fichero que ya existía.
+
+Ahora para ver este fichero con colores escribiendo:
+
+cat ExampleIssue.txt
+
+Deberás dejarle los últimos 7 caracteres. Y sobre todo deberás quitarle los
+caracteres "", ya que eso produce una limpieza de pantalla, impidiendo
+que veas nada, suprimiendo esos caracteres, ya no producirá limpiado de
+pantalla.
+
+Ejemplo: Entrada original de la redirección:
+
+Red Hat Linux  
+Kernel 2.0.34 on a i486 
++-----------------------------------------------------------+
 
+| Bienvenido a LINUX, tu sistema operativo más potente.     
| 
++-----------------------------------------------------------+
 
+| Cuando desees abandonar linux, usa [Ctrl]+[Alt]+[Supr]    | 
+| si eres un simple usuario, halt o reboot, como root y     | 
+| usa shutdown, si varios usuarios están a tu cargo.        | 
++-----------------------------------------------------------+ 
+| Identificate con tu login y password para acceder 
gracias.| 
+| Si eres novato, evita las entradas como root              
| 
++-----------------------------------------------------------+
 
+
+
+Para que quede, dejando los últimos 7 caracteres así:
+
+Red Hat Linux  
+Kernel 2.0.34 on a i486 
++-----------------------------------------------------------+ 
+| Bienvenido a LINUX, tu sistema operativo más potente.     | 
++-----------------------------------------------------------+ 
+| Cuando desees abandonar linux, usa [Ctrl]+[Alt]+[Supr]    | 
+| si eres un simple usuario, halt o reboot, como root y     | 
+| usa shutdown, si varios usuarios están a tu cargo.        | 
++-----------------------------------------------------------+ 
+| Identificate con tu login y password para acceder gracias.| 
+| Si eres novato, evita las entradas como root              | 
++-----------------------------------------------------------+ 
+Prueba:
+
+./bins/ForMakeIssue > UnaPrueba.txt
+cat UnaPrueba.txt
+(no se ve nada)
+---------------------------------------------------------------------------
+Editas UnaPrueba.txt
+Suprimes los caracteres para dejar (de los caracteres extraños) los últimos
+7 caracteres
+cat UnaPrueba.txt
+(ves el fichero con colores)
+---------------------------------------------------------------------------
+Edita con 'joe' este fichero, para explicarte el funcionamiento, gracias

Index: Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/LEEME
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/LEEME
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/LEEME
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/Examples/issueCOMO/LEEME    3 Mar 2012 
06:14:31 -0000       1.1
@@ -0,0 +1,33 @@
+---------------------------------------------------------------------------
+Para hacer el "issue" con colores hemos utilizado el binario "echoc"
+que se encuentra en: Examples/scripts/bins, haciendo un script llamado
+"forMakeIssue", que también se encuentra en la misma dirección del tu-
+torial.
+
+Para usar el "issue" (una vez personalizado) deberás editar (si procede)
+el fichero: "/etc/rc.d/rc.local" y dejarlo de la siguiente manera:
+*------------------------------------------------------------------*
+...
+#----inicio modificación----------
+    # echo "" > /etc/issue
+    # SUPRIMES LA LINEA DE ARRIBA.
+    
+    cp -f /etc/mi.issue /etc/issue
+    # COPIAS EL FICHERO CON TU CONFIGURACIÓN
+#----fin modificación-------------    
+    echo "$R" >> /etc/issue
+    echo "Núcleo $(uname -r) en $a $(uname -m)" >> /etc/issue
+
+    cp -f /etc/issue /etc/issue.net
+    echo >> /etc/issue
+fi
+*------------------------------------------------------------------*
+Ahora mismo, podrías modificar tu feo "issue", sigue estos pasos:
+
+1 -. su
+2 -. cd /usr/doc/glhis/TutorialLinux/Examples
+3 -. cp issue /etc/mi.issue
+4 -. Edita el fichero "/etc/rc.d/rc.local" de la forma arriba indicada.
+5 -. Guarda el documento, y reinicia. ¡¡¡ sorpresa !!!
+
+---------------------------------------------------------------------

Index: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/AA-LEEME.TXT
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/AA-LEEME.TXT
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/scripts/AA-LEEME.TXT
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/Examples/scripts/AA-LEEME.TXT       3 Mar 
2012 06:14:31 -0000       1.1
@@ -0,0 +1,24 @@
+----------------------------------------------------
+----------------------------------------------------
+Los ficheros que contengan las extensiones:
+.tar.gz ó .tgz, podrán ser descomprimdos:
+
+tar xvfz <nombre-del-fichero[.tar.gz][.tgz]
+----------------------------------------------------
+----------------------------------------------------
+Los siguientes Scripts son enlaces a:
+
+CompilaNucleo.  Enlace a: ../../linux_files/CompilaNucleo
+makina.sh.gz.   Enlace a: ../../linux_files/linuxzone/web/tgz/makina.sh.gz
+setserial.sh.gz.Enlace a: ../../linux_files/linuxzone/web/tgz/setserial.sh.gz
+usuarios.sh.gz. Enlace a: ../../linux_files/linuxzone/web/tgz/usuarios.sh.gz
+
+-----------------------------------------------------
+Para descomprimir los *.sh.gz hacer:
+
+gzip -df fichero.sh.gz
+-----------------------------------------------------
+(Si quieres volver a enlazarlo)
+-----------------------------------------------------  
+ln -s ../../linux_files/web/tgz/fichero.sh.gz fichero.sh.gz
+-----------------------------------------------------

Index: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/CopiaSeguridad.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/CopiaSeguridad.tar.gz
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/scripts/CopiaSeguridad.tar.gz
Binary files /dev/null and /tmp/cvsSHv9Lq differ

Index: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/Scripts.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/Scripts.tar.gz
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/scripts/Scripts.tar.gz
Binary files /dev/null and /tmp/cvsaheDor differ

Index: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/bins/binarios.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/bins/binarios.tar.gz
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/scripts/bins/binarios.tar.gz
Binary files /dev/null and /tmp/cvsa6aAku differ

Index: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/src/fuentes.tar.bz2
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/Examples/scripts/src/fuentes.tar.bz2
diff -N Proyectos/Mecagtk/miweb/html/es/Examples/scripts/src/fuentes.tar.bz2
Binary files /dev/null and /tmp/cvsQ3btVu differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/CompilaNucleo
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/CompilaNucleo
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/CompilaNucleo
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/CompilaNucleo   3 Mar 2012 
06:14:32 -0000       1.1
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Ejemplo de Script para la compilación del núcleo.    Versión Script: 4.2.0 
+# Fecha: 26 / Junio / 1.999
+#
+#      Primero deberás hacer "manualmente" un  make menuconfig  ó
+#      make xconfig, una vez configurado, escribe: ./CompilaNucleo
+#      y espera el resultado.
+#
+#      Este script, básicamente lo único que hace es:
+#
+#      make dep
+#      make clean
+#      make zImage
+#      Y algún adorno más para hacerlo mas elegante.
+#
+clear
+#
+echo "******************************************************************"
+
+if [ -f /usr/src/linux/arch/i386/boot/zImage ]; then
+ echo
+ echo "Existe ya un nucleo compilado llamado zImage en el directorio: "
+ echo -n "/usr/src/linux/arch/i386/boot/ ¿Deseas continuar? [s] :"
+ read SoN
+ if expr "$SoN" == "n"
+   then
+    echo
+    echo "Proceso detenido, haz copia o mueve el fichero."
+    echo
+    exit
+ fi
+fi
+
+if [ -f /usr/src/linux/arch/i386/boot/bzImage ]; then
+ echo
+ echo "Existe ya un nucleo compilado llamado bzImage en el directorio: "
+ echo -n "/usr/src/linux/arch/i386/boot/ ¿Deseas continuar? [s] :"
+ read SoN
+ if expr "$SoN" == "n"
+   then
+    echo
+    echo "Proceso detenido, haz copia o mueve el fichero."
+    echo
+    exit
+ fi
+fi
+
+  clear
+  #
+  echo "******************************************************************"
+  echo "COMPROBANDO DEPENDENCIAS..."
+  echo
+  make dep
+  echo
+  echo 7 segundos de espera...
+  sleep 7
+  clear
+  echo "******************************************************************"
+  echo LIMPIANDO BASURA... 
+  make clean
+  echo
+  echo 7 segundos de espera...
+  sleep 7
+  clear
+  echo "******************************************************************"
+  echo "CON UN POCO DE SUERTE, COMPILANDO EL NÚCLEO..."
+  echo "Estáte atento a los posibles mensajes de error..."
+  echo 
+  make bzImage
+  echo 
+  #
+  # Comprobamos si existe el fichero
+  #
+  if [ -f /usr/src/linux/arch/i386/boot/bzImage ]; then        
+       echo
+         echo 
"******************************************************************"
+       printf "\a"
+       echo "¡¡ TENEMOS NUCLEO NUEVO !!"
+       sleep 1
+       echo
+       printf "\a"
+        echo "¡¡ TENEMOS NUCLEO NUEVO !!"
+       sleep 1
+       echo
+       printf "\a"
+        echo "¡¡ TENEMOS NUCLEO NUEVO !!"
+        printf "\a"
+        printf "\a"
+        echo 
"******************************************************************"
+       printf "\a"
+                echo "INSTALACION/PRECONFIGURACION AUTOMÁTICA: (RECOMENDADO 
SOLO PARA PRINCIPIANTES)"
+               echo
+               echo "CompilaNucleo puede tratar de INSTALAR Y CONFIGURAR el 
nuevo núcleo, siempre y"
+               echo "cuando en el fichero /etc/lilo.conf, exista (vmlinuz) y 
esté el primero en la "
+               echo "lista de ejecución. Te lo vamos a mostrar para que tu 
decidas. Si apareciera: "
+               echo
+               echo "image=/boot/bzImage"
+               echo "image=/boot/vmlinuz"
+               echo
+               echo "NO HARÁ NADA, ya que el fichero sustituido será vmlinuz, 
y has de copiar el "
+               echo "nuevo núclo via: cp -v 
/usr/src/linux/arch/i386/boot/bzImage /boot. Posterior-"
+               echo "mente deberás ejecutar el comando 'lilo' para que surga 
efecto. Si la lista "
+               echo "apareciera al reves, no deberías hacer nada ya que 
COMPILANUCLEO ha hecho eso "
+               echo "por tí. MONSTRANDO..."
+               echo
+               grep image /etc/lilo.conf               
+                echo
+               echo -n "¿Quieres que automáticamente lo instale y 
preconfigure?: (s/n) [s]"
+                read Preconf
+
+                if expr "$Preconf" == "s"
+                then
+                        make bzlilo
+                       echo "Moviendo:..  /System.map    a:   /boot/"
+                       mv -fv /System.map /boot/
+                       echo "Moviendo:..  /vmlinuz   a:   /boot/"
+                       mv -fv /vmlinuz /boot/
+                fi
+               
+               printf "\a"
+               echo 
"******************************************************************"
+               printf "\a"
+               echo "¿ Quieres que automáticamente haga: "
+               echo -n " make modules  y  make modules_install ? [s] : "
+               read Querer
+
+               if expr "$Querer" == "n"
+                then
+                       echo "SALIENDO..."
+                       exit 1
+               else
+                        echo "TRABAJANDO..."
+                        make modules
+                        make modules_install
+  echo "******************************************************************"
+                       echo
+                       echo "Ahora lee la sección del tutorial:"
+                       echo "Herramientas y administración/Compilando el 
núcleo/Cómo arrancar con él."
+                       echo
+               fi
+
+  else
+        printf "\a"
+       echo "¡¡ HA HABIDO ERRORES DE COMPILACION, NO TENEMOS NUEVO NUCLEO !!"
+       sleep 1
+       printf "\a"
+       echo -n "Pulse [intro] para continuar...."
+       read
+       echo
+       echo "Recomendación: haz: make mrproper, make menuconfig/xconfig y"
+       echo "./CompilaNucleo otra vez o escribe ahora make para continuar"
+       echo "la compilación del nucleo."
+       echo
+       echo "Desaconsejamos: intentar cargar el fichero de configuración"
+       echo "del nucleo que hubieras podido guardar, y compilar de nuevo."
+       echo
+fi
+#

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/Fondo.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/Fondo.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/Fondo.gif
Binary files /dev/null and /tmp/cvsmlaVOt differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/PSafu.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/PSafu.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/PSafu.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/PSafu.txt       3 Mar 2012 
06:14:33 -0000       1.1
@@ -0,0 +1,50 @@
+USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
+al         196  0.0  0.0  1460     0   1 SW  21:09   0:00 (login)
+al         204  0.0  0.0  1184     0   1 SW  21:09   0:00  \_ (bash)
+al         227  0.0  0.0   752     0   1 SW  21:09   0:00      \_ (banner)
+ana        198  0.0  0.0  1456     0   3 SW  21:09   0:00 (login)
+ana        303  0.0  0.0  1176     0   3 SW  21:11   0:00  \_ (bash)
+carlos     197  0.0  0.0  1460     0   2 SW  21:09   0:00 (login)
+carlos     233  0.0  0.0  1184     0   2 SW  21:10   0:00  \_ (bash)
+carlos     280  0.4  2.5  2264   372   2 R   21:10   0:07      \_ /usr/bin/mc -
+carlos     282  0.0  0.0  1184     0  p0 SW  21:10   0:00          \_ (bash)
+javier     199  0.0  0.0  1460     0   4 SW  21:09   0:00 (login)
+javier     323  0.0  0.0  1188     0   4 SW  21:11   0:00  \_ (bash)
+javier     476  0.0  0.0  1144     0   4 SW  21:14   0:00      \_ (startx)
+javier     477  0.0  0.0  1828     0   4 SW  21:14   0:00          \_ (xinit)
+javier     485  0.1  0.0  1708     0   4 SW  21:15   0:02              \_ (fvwm
+javier     510  0.0  0.0  1496     0   4 SW  21:15   0:00              |  (Fvwm
+javier     512  0.0  1.3  1536   200   4 S   21:15   0:00              |  /usr/
+javier     517  0.0  0.0  1464     0   4 SW  21:15   0:00              |  (Fvwm
+root       478  0.9  4.0  5376   596  ?  S   21:14   0:12              \_ X :0
+javier     515  0.0  0.5  2092    84   4 S   21:15   0:00 (xclock)
+javier     516  0.0  2.5  2128   368   4 S   21:15   0:00 xload -nolabel -bg gr
+javier     519  0.9  0.5 13956    88   4 S   21:15   0:13 (netscape-commun)
+javier     528  0.0  0.0 10640     0   4 SW  21:15   0:00  \_ (netscape-commun)
+javier     557  0.1  3.0  2920   448   4 S   21:16   0:01 xboard 
+javier     558 36.9 61.0 10112  8980   4 R   21:16   7:44  \_ gnuchessx 40 5 
+root         1  0.1  0.0   764     0  ?  SW  21:08   0:03 (init)
+root         2  0.0  0.0     0     0  ?  SW  21:08   0:00 (kflushd)
+root         3  0.2  0.0     0     0  ?  SW< 21:08   0:03 (kswapd)
+root         4  0.0  0.0     0     0  ?  SW  21:08   0:00 (nfsiod)
+root         5  0.0  0.0     0     0  ?  SW  21:08   0:00 (nfsiod)
+root         6  0.0  0.0     0     0  ?  SW  21:08   0:00 (nfsiod)
+root         7  0.0  0.0     0     0  ?  SW  21:08   0:00 (nfsiod)
+root        36  0.0  0.4   740    64  ?  S   21:09   0:00 /sbin/kerneld 
+root        83  0.0  0.6   800    96  ?  S   21:09   0:00 syslogd 
+root        92  0.0  0.0   896     8  ?  S   21:09   0:01 (klogd)
+root       103  0.0  0.2   852    44  ?  S   21:09   0:00 crond 
+root      1067  0.0  0.5   852    76  ?  S   21:37   0:00  \_ (crond)
+root      1081  0.5  4.2  1460   620  ?  S   21:37   0:00  |   \_ /usr/sbin/sen
+javier    1085  0.1  3.1  1000   464  ?  S   21:37   0:00  |       \_ procmail
+root      1068  0.0  0.4   852    64  ?  S   21:37   0:00  \_ (crond)
+root      1080  0.5  4.3  1460   640  ?  S   21:37   0:00      \_ /usr/sbin/sen
+al        1084  0.2  3.2  1000   480  ?  S   21:37   0:00          \_ procmail
+root       115  0.0  0.0   824     0  ?  SW  21:09   0:00 (lpd)
+root       153  0.0  0.0  1424     4  ?  S   21:09   0:00 (sendmail)
+root       166  0.0  0.0   748     0  a0 SW  21:09   0:00 (gpm)
+root       200  0.0  0.0  1460     0   5 SW  21:09   0:00 (login)
+root       362  0.0  2.6  1204   396   5 S   21:12   0:00  \_ -bash 
+root      1087  0.0  3.4   836   512   5 R   21:37   0:00      \_ ps xafu 
+root       201  0.0  0.0   728     0   6 SW  21:09   0:00 (mingetty)
+root       203  0.0  0.1   724    24  ?  S   21:09   0:00 update (bdflush) 

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/PSx.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/PSx.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/PSx.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/PSx.txt 3 Mar 2012 06:14:33 
-0000       1.1
@@ -0,0 +1,25 @@
+  PID TTY STAT  TIME COMMAND
+    1  ?  SW   0:03 (init)
+    2  ?  SW   0:00 (kflushd)
+    3  ?  SW<  0:02 (kswapd)
+    4  ?  SW   0:00 (nfsiod)
+    5  ?  SW   0:00 (nfsiod)
+    6  ?  SW   0:00 (nfsiod)
+    7  ?  SW   0:00 (nfsiod)
+   36  ?  S    0:00 (kerneld)
+   83  ?  S    0:00 syslogd 
+   92  ?  SW   0:01 (klogd)
+  103  ?  SW   0:00 (crond)
+  115  ?  SW   0:00 (lpd)
+  153  ?  S    0:00 (sendmail)
+  166  a0 SW   0:00 (gpm)
+  200   5 SW   0:00 (login)
+  201   6 SW   0:00 (mingetty)
+  203  ?  S    0:00 update (bdflush) 
+  362   5 S    0:00 -bash 
+  478  ?  S    0:12 X :0 
+ 1023  ?  S    0:00 (crond)
+ 1024  ?  S    0:00 (crond)
+ 1035  ?  S    0:00 /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s javier 
+ 1037  ?  S    0:00 /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s al 
+ 1043   5 R    0:00 ps x 

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/PSxa.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/PSxa.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/PSxa.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/PSxa.txt        3 Mar 2012 
06:14:33 -0000       1.1
@@ -0,0 +1,54 @@
+  PID TTY STAT  TIME COMMAND
+    1  ?  SW   0:03 (init)
+    2  ?  SW   0:00 (kflushd)
+    3  ?  SW<  0:02 (kswapd)
+    4  ?  SW   0:00 (nfsiod)
+    5  ?  SW   0:00 (nfsiod)
+    6  ?  SW   0:00 (nfsiod)
+    7  ?  SW   0:00 (nfsiod)
+   36  ?  S    0:00 (kerneld)
+   83  ?  S    0:00 (syslogd)
+   92  ?  SW   0:01 (klogd)
+  103  ?  S    0:00 crond 
+  115  ?  SW   0:00 (lpd)
+  153  ?  S    0:00 (sendmail)
+  166  a0 SW   0:00 (gpm)
+  200   5 SW   0:00 (login)
+  201   6 SW   0:00 (mingetty)
+  203  ?  S    0:00 update (bdflush) 
+  362   5 S    0:00 -bash 
+  478  ?  S    0:12 X :0 
+ 1023  ?  S    0:00 (crond)
+ 1024  ?  S    0:00 (crond)
+ 1035  ?  S    0:00 /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s javier 
+ 1037  ?  S    0:00 /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s al 
+ 1044  ?  S    0:00 CROND 
+ 1045  ?  S    0:00 CROND 
+ 1048   5 R    0:00 ps xa 
+  197   2 SW   0:00 (login)
+  233   2 SW   0:00 (bash)
+  280   2 D    0:02 /usr/bin/mc -P 
+  282  p0 SW   0:00 (bash)
+  199   4 SW   0:00 (login)
+  323   4 SW   0:00 (bash)
+  476   4 SW   0:00 (startx)
+  477   4 SW   0:00 (xinit)
+  485   4 SW   0:02 (fvwm2)
+  510   4 SW   0:00 (FvwmButtons)
+  512   4 S    0:00 /usr/X11R6/lib/X11/fvwm2//FvwmTaskBar 9 4 /usr/X11R6/lib/X1
+  515   4 S    0:00 (xclock)
+  516   4 S    0:00 xload -nolabel -bg grey60 -update 5 -geometry -1500-1500 
+  517   4 SW   0:00 (FvwmPager)
+  519   4 S    0:13 /usr/lib/netscape/netscape-communicator -geometry 920x622+9
+  528   4 SW   0:00 (netscape-commun)
+  557   4 S    0:01 xboard 
+  558   4 R    6:08 gnuchessx 40 5 
+ 1041  ?  S    0:00 procmail -Y -a  -d javier 
+ 1046  ?  D    0:00 /bin/sh -c /home/javier/AutoTrabajos/Gestion1Mes 
+  196   1 SW   0:00 (login)
+  204   1 SW   0:00 (bash)
+  227   1 SW   0:00 (banner)
+ 1040  ?  S    0:00 procmail -Y -a  -d al 
+ 1047  ?  D    0:00 /bin/sh -c /home/al/AutoTrabajos/BorrarMbox 
+  198   3 SW   0:00 (login)
+  303   3 SW   0:00 (bash)

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/PSxaf.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/PSxaf.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/PSxaf.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/PSxaf.txt       3 Mar 2012 
06:14:33 -0000       1.1
@@ -0,0 +1,50 @@
+  PID TTY STAT  TIME COMMAND
+    1  ?  SW   0:03 (init)
+    2  ?  SW   0:00 (kflushd)
+    3  ?  SW<  0:02 (kswapd)
+    4  ?  SW   0:00 (nfsiod)
+    5  ?  SW   0:00 (nfsiod)
+    6  ?  SW   0:00 (nfsiod)
+    7  ?  SW   0:00 (nfsiod)
+   36  ?  S    0:00 (kerneld)
+   83  ?  S    0:00 (syslogd)
+   92  ?  S    0:01 klogd 
+  103  ?  S    0:00 (crond)
+ 1044  ?  S    0:00  \_ CROND 
+ 1059  ?  S    0:00  |   \_ /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s jav
+ 1064  ?  S    0:00  |       \_ procmail -Y -a  -d javier 
+ 1045  ?  S    0:00  \_ (crond)
+ 1057  ?  S    0:00      \_ /usr/sbin/sendmail -FCronDaemon -odi -oem -or0s al
+ 1063  ?  S    0:00          \_ procmail -Y -a  -d al 
+  115  ?  SW   0:00 (lpd)
+  153  ?  S    0:00 (sendmail)
+  166  a0 SW   0:00 (gpm)
+  200   5 SW   0:00 (login)
+  362   5 S    0:00  \_ -bash 
+ 1065   5 R    0:00      \_ ps xaf 
+  201   6 SW   0:00 (mingetty)
+  203  ?  S    0:00 update (bdflush) 
+  197   2 SW   0:00 (login)
+  233   2 SW   0:00  \_ (bash)
+  280   2 D    0:02      \_ /usr/bin/mc -P 
+  282  p0 SW   0:00          \_ (bash)
+  199   4 SW   0:00 (login)
+  323   4 SW   0:00  \_ (bash)
+  476   4 SW   0:00      \_ (startx)
+  477   4 SW   0:00          \_ (xinit)
+  478  ?  S    0:12              \_ X :0 
+  485   4 SW   0:02              \_ (fvwm2)
+  510   4 SW   0:00                  \_ (FvwmButtons)
+  512   4 S    0:00                  \_ /usr/X11R6/lib/X11/fvwm2//FvwmTaskBar 9
+  517   4 SW   0:00                  \_ (FvwmPager)
+  515   4 S    0:00 xclock -bg #c0c0c0 -padding 0 -geometry -1500-1500 
+  516   4 S    0:00 xload -nolabel -bg grey60 -update 5 -geometry -1500-1500 
+  519   4 D    0:13 (netscape-commun)
+  528   4 SW   0:00  \_ (netscape-commun)
+  557   4 S    0:01 xboard 
+  558   4 R    6:26  \_ gnuchessx 40 5 
+  196   1 SW   0:00 (login)
+  204   1 SW   0:00  \_ (bash)
+  227   1 SW   0:00      \_ (banner)
+  198   3 SW   0:00 (login)
+  303   3 SW   0:00  \_ (bash)

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/Passwd.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/Passwd.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/Passwd.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/Passwd.sample.txt       3 Mar 
2012 06:14:33 -0000       1.1
@@ -0,0 +1,29 @@
+#---------------------------------------------------------------------
+# Es muy importante que después de cada cuenta existiera un asterisco "*"
+# ya, que de no existir, significa que esa cuenta no tiene clave para acceder
+# y cualquier persona podría entrar haciendo telnet en nuestro PC.
+#--------------------------------------------------------------------
+root:AtiTeLoVoyADecir:0:0:root:/root:/bin/bash
+bin:*:1:1:bin:/bin:
+daemon:*:2:2:daemon:/sbin:
+adm:*:3:4:adm:/var/adm:
+lp:*:4:7:lp:/var/spool/lpd:
+sync:*:5:0:sync:/sbin:/bin/sync
+shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
+halt:*:7:0:halt:/sbin:/sbin/halt
+mail:*:8:12:mail:/var/spool/mail:
+news:*:9:13:news:/var/spool/news:
+uucp:*:10:14:uucp:/var/spool/uucp:
+operator:*:11:0:operator:/root:
+games:*:12:100:games:/usr/games:
+gopher:*:13:30:gopher:/usr/lib/gopher-data:
+ftp:*:14:50:FTP User:/home/ftp:
+nobody:*:99:99:Nobody:/:
+postgres:*:100:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash
+# NOSOTROS NO TENEMOS CLAVE, PORQUE NO TENEMOS CONEXIÓN.
+carlos::500:100:Jose Carlos:/home/carlos:/bin/bash             
+javier::501:100:Javier:/home/javier:/bin/bash
+angel::502:100:Angel Luis Orovengua Miguel:/home/angel:/bin/bash
+ana::503:100:Ana Cristina:/home/ana:/bin/bash
+tutorial::504:100:Linux Tutorial:/home/tutorial:/bin/bash
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/RPMgestion.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/RPMgestion.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/RPMgestion.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/RPMgestion.html 3 Mar 2012 
06:14:33 -0000       1.1
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.3 
i586) [Netscape]">
+   <TITLE>Gesti&oacute;n de paquetes .RPM</TITLE>
+</HEAD>
+<BODY>
+
+<H1>
+<A NAME="Arriba"></A></H1>
+<A HREF="contenidos.html">[ &lt; ]</A> [ > ] <A HREF="../tutorial.html">[
+|| ]</A>
+<H1>
+Gesti&oacute;n de .RPMs</H1>
+
+<BLOCKQUOTE>Como ya sabe, el tipo de paquete m&aacute;s utilizado en Linux
+y actualmente en Unix son los .RPM, por su f&aacute;cil administraci&oacute;n,
+ya que son f&aacute;cilmente de: instalar/desinstalar/consultar, como los
+otros procesos instalar y desinstalar ya est&aacute;n vistos, ahora nos
+toca simplemente los de gestionarlo.
+<BR>&nbsp;
+<UL>
+<LI>
+REPASO DE <A HREF="onlyfile.html#InstalarRPM">INSTALACI&Oacute;N</A>/<A 
HREF="onlyfile.html#DesinstRPM">DESINSTALACI&Oacute;N</A></LI>
+
+<LI>
+<A HREF="#QueRPMS">Consulta de todos los paquetes instalados</A></LI>
+
+<LI>
+<A HREF="#UnPaquete">Consulta de un paquete instalado</A></LI>
+
+<LI>
+<A HREF="#ForzarInst">Forzar una instalaci&oacute;n y actualizar</A></LI>
+
+<LI>
+<A HREF="#DesinstXQSI">Desinstalar a toda costa</A></LI>
+
+<LI>
+<A HREF="#EjemploKDE">Ejemplo de instalaci&oacute;n (INSTALANDO LAS 
KDE)</A></LI>
+
+<LI>
+<A HREF="/usr/doc/HOWTO/translations/es/html/RPM-Como.html">M&aacute;s
+informaci&oacute;n sobres .RPM (Requiere documentaci&oacute;n)</A></LI>
+</UL>
+</BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BR><A NAME="QueRPMS"></A>
+<H3>
+Consulta de RPMs INSTALADOS</H3>
+&nbsp;
+<BLOCKQUOTE>Para saber que paquetes .RPM est&aacute;n instalados, ser&aacute;
+tan f&aacute;cil como escribir:
+<P>rpm -qa
+<P>Pero, claro, esta informaci&oacute;n aparecer&aacute; un tanto desordenada,
+porque que podemos forzar su informaci&oacute;n y una f&aacute;cil consulta
+escribiendo:
+<P>rpm -qa|sort|less
+<P>Te recordamos, que esto te dir&aacute; todos los programas que est&aacute;n
+instalados v&iacute;a .RPM, osea, que los que hubieran sido instalados
+como .tgz, (o .tar.gz, que es lo mismo), o .deb, o cualquier otro tipo
+de paquete que no fuera compatible con el .rpm, no mostrar&aacute; esta
+informaci&oacute;n.
+<BR>&nbsp;</BLOCKQUOTE>
+<A HREF="#Arriba">[ ^ ]</A>
+<BR>
+<HR WIDTH="100%">
+<P><A NAME="UnPaquete"></A>
+<H3>
+Consulta de un paquete INSTALADO</H3>
+
+<BLOCKQUOTE>&nbsp;
+<UL>
+<LI>
+Para saber cierta informaci&oacute;n sobre un paquete, bastara poner:</LI>
+</UL>
+
+<P><BR>rpm -qi nombre
+<BR>&nbsp;
+<UL>
+<LI>
+Para consultar donde est&aacute; instalado...</LI>
+</UL>
+
+<P><BR>rpm -qil nombre
+<BR>&nbsp;
+<UL>
+<LI>
+Para consultar un paquete QUE NO EST&Aacute; INSTALADO, y ahora mismo lo
+tienes delante:</LI>
+</UL>
+
+<P><BR>rpm -qpi nombre.xxx.xx.rpm
+<BR>&nbsp;
+<UL>
+<LI>
+Si quieres saber donde se instalar&aacute;</LI>
+</UL>
+
+<P><BR>rpm -qpil nombre.xxx.xx.rpm
+<BR>&nbsp;</BLOCKQUOTE>
+<A HREF="#Arriba">[ ^ ]</A>
+<BR>
+<HR WIDTH="100%">
+<BR><A NAME="ForzarInst"></A>
+<H3>
+Forzar una instalaci&oacute;n:</H3>
+&nbsp;
+<BLOCKQUOTE>
+<UL>
+<LI>
+Para forzar una instalaci&oacute;n que deseamos a toda costa, bastar&aacute;
+con poner:</LI>
+</UL>
+
+<P><BR>rpm -U programa.xxx.xx.rpm
+<BR>&nbsp;
+<UL>
+<LI>
+para forzarlo use: --force</LI>
+</UL>
+
+<P><BR>rpm -U --force programa.xxx.xx.rpm</BLOCKQUOTE>
+
+<P><BR><A HREF="#Arriba">[ ^ ]</A>
+<BR>
+<HR WIDTH="100%">
+<BR><A NAME="DesinstXQSI"></A>
+<H3>
+Desinstalar a toda costa:</H3>
+
+<BLOCKQUOTE>&nbsp;
+<BR>Para desinstalar a toda costa, usa --nodeps, para que no dependa de
+las dependencias instaladas
+<BR>(esta opci&oacute;n no es muy aconsejable)</BLOCKQUOTE>
+<A HREF="#Arriba">[ ^ ]</A>
+<BR>
+<HR WIDTH="100%">
+<BR><A NAME="EjemploKDE"></A>
+<H2>
+EJEMPLO DE INSTALACI&Oacute;N, INSTALANDO LAS KDE:</H2>
+
+<UL>&nbsp;
+<BR><A HREF="#kde-1.1">(Nota para versiones KDE 1.1 y posteriores)</A>
+<BR>&nbsp;
+<P>Cuando uno se mete en esto de Linux, y preguntas por el entorno 
gr&aacute;fico,
+te hablan de las X-Window, del FVWM95, del Enlightment (muy bonito) y te
+hablan de las KDE, y dices &iquest;C&oacute;mo las instalo?
+<P>Lo primero, cuando te traes todos los paquetes de internet, dices 
&iexcl;joer!,
+porque no habr&aacute; un script de instalaci&oacute;n, la verdad, no hay
+script porque es algo muy sencillo, y como es tan sencillo pues ni se molestan
+en hacer el script
+<P>Lo primero que har&iacute;as ser&iacute;a:
+<BR>&nbsp;
+<UL>
+<LI>
+rpm -i kdebase.xxx.xx.rpm</LI>
+</UL>
+
+<P><BR>Y claro, te dir&aacute; que necesita, tal o cual fichero instalado
+para instalar esto, pues s&oacute;lo habr&aacute; que leer, &iquest;qu&eacute;
+es lo que necesita?, e instalarlo
+<P>qt*.rpm
+<BR>kdelibs*.rpm
+<BR>kde*.rpm
+<P>Pues procedemos haciendo:
+<BR>&nbsp;
+<OL>
+<LI>
+rpm -i qt*.rpm</LI>
+
+<LI>
+rpm -i kde*.rpm</LI>
+</OL>
+
+<P><BR>&iexcl;Ya est&aacute;!
+<P>tenemos KDE instalado
+<BR><A NAME="KDE_fichs"></A>
+<BR>Ahora, s&oacute;lo habr&aacute; que modificar ciertos ficheros, cosa
+que vendr&aacute; en el .TXT, que acompa&ntilde;a siempre la 
instalaci&oacute;n,
+y que de todas formas nosotros daremos los pasos necesarios: (Estos fichero
+suelen instalarse en <B>/usr/doc/</B>)
+<P>------------------------------
+<BR>Los ficheros a modificar son:
+<BR>&nbsp;
+<UL>
+<LI>
+<B>$HOME/.xinitrc</B></LI>
+
+<LI>
+<B>/etc/bashrc</B></LI>
+</UL>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+<UL>
+<LI>
+($HOME&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp; ~/&nbsp;&nbsp;&nbsp;&nbsp;
+hacen siempre referencia a la casa del usuario)</LI>
+</UL>
+------------------------------
+<BR>El car&aacute;cter `~', se llama vidigudina.
+<P>Editar el fichero ".xinitrc", que hay en el directorio /home/usuario,
+y tambi&eacute;n en el de /root
+<BR>Si no existiera el fichero ".xinitrc", deber&iacute;as crearlo, y si
+existe, guarda una copia con otro nombre, borra todo el contenido y sigue
+estos pasos
+<BR>&nbsp;
+<OL>
+<LI>
+joe .xinitrc</LI>
+
+<LI>
+y escribes dentro: startkde</LI>
+
+<LI>
+Guardar y salir</LI>
+
+<LI>
+editas el fichero /etc/bashrc</LI>
+
+<LI>
+pones: export PATH=$PATH:/opt/kde/bin</LI>
+
+<LI>
+Guardar y salir</LI>
+</OL>
+
+<P><BR>Ahora, escribes:
+<BR>&nbsp;
+<OL>
+<LI>
+exit</LI>
+
+<LI>
+Entras otra vez (como root, o como el usuario que se ha modificado)</LI>
+
+<LI>
+Escribes: startx</LI>
+
+<LI>
+El comando "startx", intentar&aacute; leer el fichero .xinitrc que hay
+en tu directorio, si existe cargar&aacute; ese, si no, cargar&aacute; uno
+por defecto que es el gestor de ventanas que hasta entonces estabas viendo,
+generalmente el FVWM95</LI>
+
+<LI>
+A LOS POCO SEGUNDOS, ESTAR&Aacute;S VIENDO EL ENTORNO KDE.</LI>
+</OL>
+
+<P><BR>Si ya lo ten&iacute;as instalado, deber&aacute;s hacer una 
actualizaci&oacute;n,
+en vez de escribir -i, deber&iacute;as escribir -U
+<BR><A NAME="KDE_truco"></A>
+<BR>&iexcl;TRUCO! - Tambi&eacute;n puedes:
+<BR>&nbsp;
+<OL>
+<LI>
+Editar el fichero /etc/bashrc</LI>
+
+<LI>
+escribir: alias kde="xinit /opt/bin/startkde"</LI>
+
+<LI>
+Guardar y salir</LI>
+
+<LI>
+exit, y entrar otra vez como el usuario que sea.</LI>
+</OL>
+
+<P><BR>Ahora cuando escribas <B>kde</B>, siempre entrar&aacute;s en dicho
+entorno. (Este truco lo puedes usar para tener varios gestores diferentes,
+mientras te decides con cual quedarte) (<B>xinit</B>, es el <B>motor</B>
+/opt/bin/<B>startkde</B>, es el <B>gestor de ventanas</B>)</UL>
+
+<P><BR>Ejemplo Concluido
+<BR><A HREF="#Arriba">[ ^ ]</A>
+<BR>
+<HR WIDTH="100%">
+<BR><A NAME="kde-1.1"></A>
+<BR>Para las <B><FONT SIZE=+1>versiones del KDE 1.1</FONT> </B>y posteriores
+<B><FONT SIZE=+1>se
+ha creado un script de instalaci&oacute;n</FONT></B>:
+<BR>&nbsp;
+<OL>
+<LI>
+<B><FONT SIZE=+1>install-kde-x.y</FONT></B></LI>
+
+<BR>
+<HR WIDTH="100%">
+<BR>Siendo:
+<BR>
+<HR WIDTH="100%">
+<LI>
+X: El n&uacute;mero de la versi&oacute;n del K Desktop Enviroment a 
instalar</LI>
+
+<LI>
+Y: Versi&oacute;n de estabilidad del KDE, recuerde: n&uacute;mero impares
+son inestables, y los pares son estables.
+<HR WIDTH="100%"></LI>
+</OL>
+El proceso de instalaci&oacute;n es el siguiente:
+<BR>&nbsp;
+<OL>
+<LI>
+rpm -ivh kde-installer*.rpm</LI>
+
+<LI>
+install-kde-x.y</LI>
+
+<LI>
+(Proceso de instalaci&oacute;n concluido) ahora escribir startx</LI>
+</OL>
+
+<P><BR>Ahora, bien, si no funcionara, lea la secci&oacute;n: <A 
HREF="#KDE_fichs">(C&oacute;mo
+instalar las KDE)</A>
+<BR>O preferiblemente <A HREF="#KDE_truco">eliga el truco.</A>
+<P><A HREF="#Arriba">[ ^ ]</A>
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/WebLinuxZone.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/WebLinuxZone.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/WebLinuxZone.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/WebLinuxZone.html       3 Mar 
2012 06:14:33 -0000       1.1
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i586) [Netscape]">
+</HEAD>
+<BODY TEXT="#FFFF99" BGCOLOR="#000066" LINK="#FF6666" VLINK="#66FF99" 
ALINK="#FF0000">
+<A HREF="linux8.html">[ &lt; ]</A>[ || ][ > ]
+<H1>
+LINUX ZONE</H1>
+&nbsp;
+<BLOCKQUOTE>Linux Zone es un enlace de nuestro tutorial a la p&aacute;gina
+del autor, el tiene los derechos de Copyright de su obra, y s&oacute;lo
+el podr&aacute; autorizar la copia, distribuci&oacute;n o inclusi&oacute;n
+de su obra a otras obras, HOWTO, o MINI-HOWTOs
+<P>Gracias por prestarnos tu obra.
+<P>
+<HR WIDTH="100%">
+<BR>&nbsp;
+<UL>
+<LI>
+LINUX&nbsp; ZONE</LI>
+</UL>
+
+<BLOCKQUOTE>Gracias a la estimada ayuda de algunos de nuestros colaboradores,
+tenemos aqu&iacute; una informaci&oacute;n muy estimable para aquellos
+usuarios que quieran seguir aprendiendo, entre otras cosas agracias a el
+enlace de nuestro amigo dan-man, podr&aacute;s configurar tu modem, tu
+emulador del DOS dosemu, tu emulador de Windows wine, y muchas m&aacute;s
+cosas.
+<P><A HREF="linuxzone/web/linuxzone/index.htm">PINCHA AQU&Iacute; PARA
+AMPLIAR TUS CONOCIMIENTOS.</A>
+<BR>&nbsp;</BLOCKQUOTE>
+</BLOCKQUOTE>
+[ &lt; ]
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/aPROBLEMAS.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/aPROBLEMAS.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/aPROBLEMAS.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/aPROBLEMAS.html 3 Mar 2012 
06:14:33 -0000       1.1
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.1 
i586) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFCCFF" LINK="#0000EF" VLINK="#55188A" 
ALINK="#FF0000">
+
+<H1>
+<FONT SIZE=+1><A HREF="../tutorial.html">[ &lt; ]</A></FONT></H1>
+
+<H1>
+&iquest;Y SI TENGO PROBLEMAS?</H1>
+&nbsp;
+<BLOCKQUOTE><FONT SIZE=+1>Bueno, pues si tienes problemas, hay un mont&oacute;n
+de sitios donde podr&aacute;s ir para solucionarlos, as&iacute; que no
+te agobies:</FONT>
+<P><FONT SIZE=+1>Est&aacute;n las FAQ (Frequently Asked Question) (Preguntas
+de uso frecuente, "PUF")</FONT>
+<P><FONT SIZE=+1><A HREF="/usr/doc/FAQ">/usr/doc/FAQ</A></FONT>
+<BR><FONT SIZE=+1>En espa&ntilde;ol est&aacute;n en:</FONT>
+<BR><FONT SIZE=+1><A 
HREF="/usr/doc/HOWTO/translations/es">/usr/doc/HOWTO/translations/es</A></FONT>
+<P><FONT SIZE=+1>Est&aacute;n tambi&eacute;n las HOWTO 
(&iquest;C&oacute;mo?)</FONT>
+<P><FONT SIZE=+1><A HREF="/usr/doc/HOWTO/">/usr/doc/HOWTO/</A></FONT>
+<BR><FONT SIZE=+1>En espa&ntilde;ol est&aacute;n en:</FONT>
+<BR><FONT SIZE=+1><A 
HREF="/usr/doc/HOWTO/translations/es">/usr/doc/HOWTO/translations/es</A></FONT>
+<P><FONT SIZE=+1>Tambi&eacute;n est&aacute;n los manuales de los 
programas:</FONT>
+<P><FONT SIZE=+1><A HREF="glosary.html#man">man</A> comando</FONT>
+<P><FONT SIZE=+1>Tambi&eacute;n est&aacute; la documentaci&oacute;n exclusiva
+de cada programa</FONT>
+<P><FONT SIZE=+1><A HREF="/usr/doc">/usr/doc</A></FONT>
+<BR>
+<HR WIDTH="100%">
+<BR><FONT SIZE=+1>Tambi&eacute;n existen las listas de correos, las cuales
+te invitamos a que te suscribas a alguna de ellas, es, <B>sin lugar a duda
+la manera m&aacute;s efectiva de aprender linux</B>, y que te resuelvan
+las al principio muchas dudas de tu Linux.</FONT>
+<P><FONT SIZE=+1>Y para subscribirte a alguna de las listas de correo,
+generalmente deber&aacute;s escribir <B>en el cuerpo del mensaje</B> "dentro
+del correo, no en el <I>asunto o subject</I> ":</FONT>
+<P><FONT SIZE=+1>subscribe &lt;mensaje-subcripcion></FONT>
+<P><FONT SIZE=+1>Algunas listas de correo de habla hispana:</FONT>
+<BR>&nbsp;
+<UL>
+<LI>
+<FONT SIZE=+1><A HREF="mailto:address@hidden";>address@hidden</A></FONT></LI>
+
+<UL>
+<LI>
+<FONT SIZE=+1>General y de ayuda sobre Linux: en el cuerpo del mensaje:
+<FONT COLOR="#FF0000">subscribe
+redhat</FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT SIZE=+1><A HREF="mailto:address@hidden";>address@hidden</A></FONT></LI>
+
+<UL>
+<LI>
+<FONT SIZE=+1>General y de ayuda sobre Linux: en el cuerpo del mensaje:
+<FONT COLOR="#3366FF">subscribe
+l-linux</FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT SIZE=+1><A HREF="mailto:address@hidden";>address@hidden</A></FONT></LI>
+
+<UL>
+<LI>
+<FONT SIZE=+1>Lista de correo de programaci&oacute;n: en el cuerpo del
+mensaje: <B><FONT COLOR="#000000">subscribe linux-prog</FONT></B></FONT></LI>
+</UL>
+
+<LI>
+<FONT SIZE=+1><A HREF="mailto:address@hidden";>address@hidden</A></FONT></LI>
+
+<UL>
+<LI>
+<FONT SIZE=+1>Linux Ayuda: general y de ayuda: en el cuerpo del mensaje:
+<FONT COLOR="#33CC00">subscribe
+linux-ayuda</FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT SIZE=+1><A HREF="mailto:address@hidden";>address@hidden</A></FONT></LI>
+
+<UL>
+<LI>
+<FONT SIZE=+1>General y de ayuda sobre Linux: en el cuerpo del mensaje:
+<FONT COLOR="#330000">subscribe
+linux.</FONT></FONT></LI>
+</UL>
+</UL>
+</BLOCKQUOTE>
+
+<BLOCKQUOTE><FONT COLOR="#330000"><FONT SIZE=+1>En todos las listas de
+correo mencionadas hay gente que tiene distintos tipos de distribuci&oacute;n,
+RedHat, Debian, SuSe, Slackware..., as&iacute; pues, aunque te subscribas
+a "eurielec", y tienes "debian", te ayudar&aacute;n igual.</FONT></FONT>
+<BR>
+<HR WIDTH="100%">
+<P><FONT SIZE=+1>Si aun as&iacute;, no te enteras, tambi&eacute;n hay canales
+de <FONT COLOR="#3333FF">IRC</FONT> de Linux. Hay varios canales, siendo
+<B>los m&aacute;s visitados:</B></FONT>
+<BR>&nbsp;
+<BR>&nbsp;
+<TABLE BORDER WIDTH="60%" NOSAVE >
+<TR NOSAVE>
+<TD NOSAVE><FONT SIZE=+1>#<FONT COLOR="#009900">linux</FONT></FONT></TD>
+
+<TD><FONT SIZE=+1>// Canal de Linux de <FONT COLOR="#3333FF">prop&oacute;sito
+general</FONT></FONT></TD>
+</TR>
+
+<TR>
+<TD><FONT SIZE=+1>#<FONT COLOR="#000099">linux_galicia</FONT></FONT></TD>
+
+<TD><FONT SIZE=+1>// Canal de Linux de <FONT COLOR="#FF0000">G</FONT><FONT 
COLOR="#33FF33">L</FONT><FONT COLOR="#3333FF">U</FONT><FONT 
COLOR="#993399">G</FONT>,
+y prop&oacute;sito general</FONT></TD>
+</TR>
+
+<TR>
+<TD><FONT SIZE=+1>#<B>linux_novatos</B></FONT></TD>
+
+<TD><FONT SIZE=+1>// Canal de ayuda <FONT COLOR="#FF0000">para novatos</FONT>
+de Linux</FONT></TD>
+</TR>
+
+<TR>
+<TD><FONT SIZE=+1>#<FONT COLOR="#FF0000">linux_party</FONT></FONT></TD>
+
+<TD><FONT SIZE=+1>// Canal de <FONT COLOR="#993300">programaci&oacute;n
+bajo entornos Unix/Linux</FONT></FONT></TD>
+</TR>
+
+<TR>
+<TD><FONT SIZE=+1><FONT COLOR="#33FF33">#</FONT><FONT 
COLOR="#FF6666">linux_glhis</FONT></FONT></TD>
+
+<TD><FONT SIZE=+1>// Canal de la distribuci&oacute;n <FONT COLOR="#006600">GNU
+/ Linux Hispano.</FONT></FONT></TD>
+</TR>
+
+<TR>
+<TD><FONT SIZE=+1>#<FONT COLOR="#993300">linux_seg</FONT></FONT></TD>
+
+<TD><FONT SIZE=+1>// Canal dedicado a la <FONT COLOR="#CC33CC">seguridad
+en internet.</FONT> (No Hacker)</FONT></TD>
+</TR>
+
+<CAPTION ALIGN=BOTTOM>&nbsp;</CAPTION>
+</TABLE>
+
+<P><FONT SIZE=+1>En los que hay unas <A 
HREF="http://linux.compusis.com/";>normas
+b&aacute;sicas</A> para exponer una pregunta, entre ellas est&aacute;n:</FONT>
+<BR>&nbsp;
+<UL>
+<LI>
+<FONT SIZE=+1>No usar colores</FONT></LI>
+
+<LI>
+<FONT SIZE=+1>No usar may&uacute;sculas</FONT></LI>
+
+<LI>
+<FONT SIZE=+1>Ser respetuoso</FONT></LI>
+</UL>
+
+<P><BR><FONT SIZE=+1>Tambi&eacute;n, claro est&aacute;, tienes que exponer
+tu pregunta de forma, clara y concisa, as&iacute; que no pongas un:</FONT>
+<BR><FONT SIZE=+1>"&iquest;Alguien podr&iacute;a ayudarme...?", o algo
+as&iacute; como "&iquest;Buenos d&iacute;as, sabr&iacute;an...?". S&eacute;
+claro y directo, siempre habr&aacute; gente dispuesta a ayudarte, y si
+no lo hay en ese momento, seguro que dentro de un par de horas si la 
habr&aacute;.</FONT>
+<P><FONT SIZE=+1>Por ejemplo, supongamos que no sabemos <A 
HREF="RPMgestion.html#EjemploKDE">c&oacute;mo
+se instalan las KDE</A>, pues preguntar&iacute;amos algo as&iacute;:</FONT>
+<P><FONT SIZE=+1>.</FONT>
+<BR><FONT SIZE=+1>&lt;MrYo> &iquest;Qu&eacute; tengo que hacer para instalar
+las KDE en formato .rpm?</FONT>
+<BR><FONT SIZE=+1>.</FONT>
+<P><FONT SIZE=+1>Y si a&uacute;n as&iacute; tuvieras problemas, c&oacute;mprate
+un buen libro sobre Linux, y suscr&iacute;bete a una lista de correo.</FONT>
+<P>C&oacute;mo habr&aacute;s le&iacute;do en las normas del canal, si no
+encuentras contestaci&oacute;n, puede ser porque mucha gente est&eacute;
+conectado con el nick all&iacute;, pero podr&aacute;n estar navegando por
+internet, o sencillamente, ni estar, pero se quedan conectados, o simplemente,
+que nadie de los que all&iacute; est&aacute;n en ese momento sepan o conozcan
+sobre el tema que tu preguntas.</BLOCKQUOTE>
+<FONT SIZE=+1><A HREF="../tutorial.html">[ &lt; ]</A></FONT>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/amos_files.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/amos_files.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/amos_files.gif
Binary files /dev/null and /tmp/cvsqfNMBB differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/bash_profile.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/bash_profile.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/bash_profile.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/bash_profile.sample.txt 3 Mar 
2012 06:14:33 -0000       1.1
@@ -0,0 +1,28 @@
+# .bash_profile
+# Al entrar en tu sesión, el primer fich. que se carga es: '.bash_profile'
+
+# Get the aliases and functions
+if [ -f ~/.bashrc ]; then
+       . ~/.bashrc                     # Luego se carga éste.
+fi
+
+# Y tras la carga  de .bashrc y /etc/bashrc, se termina de cargar lo
+# siguiente:
+
+setleds +num           # Enciende el bloq. numérico al entrar en la sesión.
+set meta-flag on        # conservar bit 8 en entrada de teclado
+set output-meta on      # conservar bit 8 en salida por terminal
+set convert-meta off    # no convertir secuencias de escape
+
+PATH=$PATH:$HOME/bin
+BASH_ENV=$HOME/.bashrc
+USERNAME="Eggun"
+
+echo ----------------------------------------------------
+free                   # Memoria libre
+echo ----------------------------------------------------
+df -h                  # Cantidad disco libre
+echo ----------------------------------------------------
+
+export USERNAME BASH_ENV PATH
+export LC_CTYPE=ISO_8859_1

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc  3 Mar 2012 06:14:33 
-0000       1.1
@@ -0,0 +1,104 @@
+# /etc/bashrc
+
+# System wide functions and aliases
+# Environment stuff goes in /etc/profile
+
+# For some unknown reason bash refuses to inherit
+# PS1 in some circumstances that I can't figure out.
+# Putting PS1 here ensures that it gets loaded every time.
+PS1="address@hidden \W]\\$ "
+#---------------------------------------------------------
+#
+# *** Inicio de la modificación de TutorialLinux. *** 
+#
+# Inicializamos un PATH, para en el que a partir de ahora
+# no haga falta escribir ./programa, porque ya estará en
+# el PATH
+# Esta opción de poner './', no es recomendable si varios
+# usuarios ajenos al sistema acceden a su máquina (telnet)
+# o procure que sea la última opción de path
+export 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/sbin:/usr/bin:/usr/local/bin:/opt/kde:./
+#
+# Usar 'F' será buena idea para los usuarios que se conecten
+# de forma remota (por telnet) en el alias del comando 'ls'
+#
+
+alias ls='ls --color -shF'
+alias rd='rmdir'
+alias cp='cp -i -v'
+ alias md='mkdir'
+alias mv='mv -i -v'
+alias rm='rm -i'
+alias cd..='cd ..'
+alias dir='dir --color -hFs'
+alias vdir='vdir --color -shF'
+alias cls='clear'
+alias joe='joe -asis'
+alias less='less -r'
+alias df="df -h"
+alias du="du -h"
+
+#
+# ALIAS para montar las unidades, en vez de escribir mount -t...
+# escribes su alias y montas la unidad, luego sólo cambia de unidad
+# Te recordamos que los directorios mencionados en /mnt, deben de existir
+# -1disco, 2disco, cdrom, floppy...-, así como hda1 deberá ser una
+# unidad para windows con vfat, o sda1 si es SCSI...
+#
+# Cuando tengas configurado tu fichero /etc/fstab, puede ser que
+# te convenga sustituir los alias, y quede por ejemplo así:
+# alias A1='mount /dev/hda1'
+# Ya que en el fichero /etc/fstab, tendrás los modos por defecto.
+#
+# Te recomendamos crees los directorios en /mnt/
+#
+alias WFLOPPY='mount -t vfat /dev/fd0 /mnt/floppy' # (W)in and DOS floppys
+alias FLOPPY='mount -t ext2 /dev/fd0 /mnt/floppy'  # (L)INUX FLOPPY
+alias A1='mount -t vfat /dev/hda1 /mnt/1disco'    # HD(A1) (Disco duro)
+alias B1='mount -t vfat /dev/hdb1 /mnt/2disco'    # HD(B1) (Disco duro)
+alias CDR='mount -t iso9660 /dev/cdrom /mnt/cdrom' # (CDR)om
+alias l+='mount -t ext2 /dev/hdb2 /mnt/+linux'    # +Linux (Particion Linux)
+#
+# ALIAS para desmontar las unidades
+#
+alias DFLOPPY='umount /dev/fd0'   # (D)esmontar (cualquier fs) FD(0)
+alias DA1='umount /dev/hda1'      # (D)esmontar HD(A1)
+alias DB1='umount /dev/hdb1'      # (D)esmontar HD(B1)
+alias DCDR='umount /dev/cdrom'    # (D)esmontar (CDR)om
+alias Dl+='umount /dev/hdb2'     # (D)esmontar +Linux
+#
+# Ejemplo ilustrativo de un 'alias', para usarlo
+#
+# alias kde='xinit startkde'
+#
+# Funcionará si el kde está instalado y el path accesible
+#
+# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 
+# Cuando uses, por ejemplo: linuxconf, podrás configurar
+# tu equipo linux, para que si quieres los usuarios puedan
+# montar unidades, entonces, retoca este punto y quita
+# el caracter inicial de la balla.
+# 
+# alias para montar los usuarios las unidades.
+# ahora usando el alias: floppy, o cdr, montaremos la unidad.
+# 
+
+alias floppy='mount /dev/fd0' 
+alias a1='mount /dev/hda1'  
+alias b1='mount /dev/hdb1' 
+alias cdr='mount /dev/cdrom' 
+alias +l='mount /dev/hdb2' 
+
+# 
+# desmontar las unidades
+# 
+
+alias dfloppy='umount /dev/fd0'
+alias da1='umount /dev/hda1'
+alias db1='umount /dev/hdb1'
+alias dcdr='umount /dev/cdrom'
+alias dl+='umount /dev/hdb2'
+
+# 
+# *** Fin de la modificación de TutorialLinux. *** 
+# 

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/bashrc.sample.txt       3 Mar 
2012 06:14:34 -0000       1.1
@@ -0,0 +1,21 @@
+# .bashrc
+
+# User specific aliases and functions
+
+alias rm='rm -i'
+alias cp='cp -i'
+alias mv='mv -i'
+alias ppp='exec /usr/sbin/pppd -detach debug'
+alias BitchX='BitchX root Wakitaki.org'
+alias df="df -h"
+alias du="du -h"
+alias cls="clear"
+alias cd..="cd .."
+
+# Source global definitions
+if [ -f /etc/bashrc ]; then
+       . /etc/bashrc
+fi
+
+alias ls="ls --color -shaF"
+alias vdir="vdir --color -shaF"

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/coment.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/coment.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/coment.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/coment.html     3 Mar 2012 
06:14:34 -0000       1.1
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i486) [Netscape]">
+   <TITLE>Comentario de LinuxTutorial</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#CCCCCC" LINK="#0000EE" VLINK="#551A8B" 
ALINK="#FF0000">
+
+<H1>
+Comentario.</H1>
+
+<HR WIDTH="100%">
+<BR>Bueno, pues si hasta ahora hab&iacute;as estado siempre en un entorno
+por ventanas, que sepas que Linux, tambi&eacute;n disfruta de un entorno
+por ventanas, llamado X-Window.(se vera m&aacute;s adelante)
+<P>De todas formas, y aunque es muy pronto para hablar de eso, has de conocer
+el trabajo en modo texto, ya que muy seguramente ser&aacute; el modo de
+trabajo en el que m&aacute;s tiempo est&eacute;s, incluso aun disfrutando
+de un entorno tan potente como X-Window, que nada tiene que envidiar a
+otros entornos gr&aacute;ficos comerciales, como OS/2 Warp, o las distintas
+versiones del m&aacute;s conocido Windows.
+<P>
+<HR WIDTH="100%">
+<BR><A HREF="linux1.html">[ &lt; ]</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/comodines.htm
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/comodines.htm
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/comodines.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/comodines.htm   3 Mar 2012 
06:14:34 -0000       1.1
@@ -0,0 +1,197 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.10 
i586) [Netscape]">
+   <title>Comodines en Ficheros</title>
+</head>
+<body>
+<a NAME="ARRIBA"></a>
+<br><a href="linux1.html">[ &lt; ]</a>
+<ul>
+<li>
+<a href="#Comodines">COMODINES</a></li>
+
+<li>
+<a href="#PATH">PATH</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<p><a NAME="Comodines"></a>
+<h1>
+Comodines.</h1>
+
+<ul>En cualquier Sistema Operativo (S.O.) que tenga comandos, existen formas
+de recortar y facilitar las cosas m&aacute;s usuales, entre las que 
est&aacute;n
+facilitar la selecci&oacute;n de ficheros.
+<p>Siempre, estos son los comodines, v&aacute;lidos para cualquier fichero:
+"*" y "?"
+<br>&nbsp;
+<ol>
+<li>
+"*" -> RESTO/TODO: Solo sustituye a TODOS los ficheros, delante/detras/en
+medio del fichero todo lo que coincida con &eacute;l.</li>
+
+<li>
+"?" -> CUALQUIER CAR&Aacute;CTER: que coincida con el resto que est&eacute;
+escrito.</li>
+</ol>
+
+<p><br>
+<hr WIDTH="100%">
+<br>Adem&aacute;s Linux dispone de una potente <a 
href="glosary.html#shell">shell</a>,
+llamada <a href="glosary.html#bash">bash</a>, que har&aacute; las delicias
+de todo usuario, ya que no har&aacute; falta terminar de escribir el nombre
+de un comando, fichero, directorio, ya que pulsando la tecla de tabulador,
+terminar&aacute; de escribirnos el resto, por ejemplo pruebe a escribir:
+<p>Cuando pongamos [TAB], usted deber&aacute; pulsar el tabulador.
+<br>&nbsp;
+<ol>
+<li>
+cd /m[TAB]/cd[TAB]</li>
+
+<li>
+cd /us[TAB]/do[TAB]/glh[TAB]/li[TAB]</li>
+
+<br>Ini[TAB]
+<p>(Y as&iacute; cualquier ejemplo)</ol>
+
+<hr WIDTH="100%">
+<br>En linux, un fichero es un contenedor de informaci&oacute;n en la que
+puede haber un escrito, tal y como &eacute;ste que ahora ve, informaci&oacute;n
+binaria, que podr&aacute; tener la aplicaci&oacute;n que ahora mismo utiliza...
+<p>Los ficheros tienen un nombre, as&iacute; por ejemplo, el fichero 
<b>carta</b>.<b>txt</b>
+tiene un nombre "carta" y una extensi&oacute;n asociada ".txt", esto nos
+indicar&aacute; que ".txt" es un fichero de texto, dependiendo de la 
extensi&oacute;n
+indicar&aacute; una u otra cosa..., en linux, las aplicaciones NO LLEVAN
+EXTENSI&Oacute;N.
+<p>Si tuvi&eacute;ramos muchos ficheros que empezaran por carta..., tal
+como:
+<p>cartaAjuan.txt
+<br>cartaAmaria.txt
+<br>cartaALbanco.txt
+<br>cartaDeMiCurriculumVitae.txt
+<br>cartaDeUnAmigo.doc
+<br>cartaFEA.txt
+<br>cartaBONITA.txt
+<br>carta-email.txt
+<p>Te dar&aacute;s cuenta que las primeras 5 letras todos las tienen en
+com&uacute;n, para mostrar esos ficheros har&iacute;as <a 
href="glosary.html#ls">ls</a>
+carta<b>*</b>, siendo el asterisco "*" el comod&iacute;n que har&aacute;
+mostrarte todo lo que tenga coincidencia con las primeras 5 letras.
+<p>Tambi&eacute;n puedes poner <a href="glosary.html#ls">ls</a> c<b>*,
+</b>que
+como bien habr&aacute;s podido comprender, te mostrar&aacute; todos los
+ficheros cuya primera letra empiece por "c"
+<p>Los comodines son com&uacute;n A TODOS LOS COMANDOS que se utilicen
+para la gesti&oacute;n de ficheros, y ser&aacute;n soportados por casi
+TODOS ESTOS COMANDOS, algunos de los cuales son:
+<br>&nbsp;
+<ul>
+<li>
+<a href="glosary.html#rm">rm</a></li>
+
+<li>
+<a href="glosary.html#ls">ls</a></li>
+
+<li>
+dir</li>
+
+<li>
+vdir</li>
+
+<li>
+<a href="glosary.html#lpr">lpr</a></li>
+
+<li>
+<a href="glosary.html#cp">cp</a></li>
+
+<li>
+<a href="glosary.html#mv">mv</a></li>
+
+<li>
+cmp</li>
+
+<li>
+<a href="glosary.html#find">find</a></li>
+</ul>
+Y otros muchos que aqu&iacute; no exponemos.</ul>
+
+<ul>Te todas formas, estas son las formas principales para la selecci&oacute;n
+de ficheros, pero no la &uacute;nica. Tambi&eacute;n podr&aacute;s seleccionar:
+<p>Si est&aacute;s en el mismo directorio, y NO S&Oacute;LO quieres mostrar
+todos los ficheros que empiecen por "c", sino tambi&eacute;n los que lo
+hagan por "<b>a,</b> <b>b</b>, <b>d</b>, <b>mi</b>, o que contengan cualquier
+cosa entre <b>alg&uacute;n</b> y <b>fichero,</b> podr&aacute;s escribir
+(en una sola l&iacute;nea)
+<p><b><a href="glosary.html#ls">ls</a> a* b* c* d* mi* algun*fichero</b>
+<br><b>ls [a-d]*</b>
+<p>Para mayor informaci&oacute;n usa el <a href="glosary.html#man">manual</a>
+con <b><a href="glosary.html#man">man </a><a href="glosary.html#ls">ls</a></b>
+<p>Recomendaci&oacute;n NO SE TE OLVIDE ESTO DE LOS COMODINES, deber&aacute;s
+usarlo muchas veces a lo largo de tu vida en un sistema Linux/Unix.
+<br>&nbsp;</ul>
+<a href="#ARRIBA">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="PATH"></a>
+<ul>
+<h2>
+<b>El path (ruta o camino)</b></h2>
+
+<p><br>El path es una variable de entorno que contiene el o los caminos
+<i>"directorios"</i>
+para buscar el nombre de un comando o programa. Por ejemplo si pusieras:
+<b>echo
+$PATH</b>, te imprimir&aacute; los caminos que est&aacute;n declarados
+por defecto, por ejemplo:
+<p><b>/sbin:/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin</b>
+<p>Con lo que podremos observar varios caminos, como son: <b>/sbin</b>,
+y <b>/bin</b> y <b>/usr/bin</b> y <b>/usr/sbin</b> y para los programas
+de X-Window <b>/usr/X11R6/bin. </b>As&iacute;, cuando escribas
+<b>ls, los
+buscar&aacute; en ese orden.</b>
+<br>Si quieres poner el directorio en el que est&eacute;s como parte del
+PATH (camino), no deber&aacute;s de hacer otra cosa sino editar el fichero
+/etc/bashrc, y escribir la l&iacute;nea:
+<p><b>export PATH=$PATH:./</b>
+<br>(o editarla en caso de que exista, la inclusi&oacute;n de la palabra
+<b>export</b>
+es opcional).
+<p>Mientras no est&eacute; declarada esta &uacute;ltima sentencia, para
+ejecutar cualquier programa que est&eacute; en el directorio actual 
deber&aacute;s
+escribir <b>./programa.</b>
+<br>&nbsp;
+<ul>Tambi&eacute;n, esta sentencia (<b>./</b>) ser&aacute; necesaria para
+ejecutar programas que se llaman igual en el path que el que est&aacute;
+en el actual directorio:&nbsp; por ejemplo cuando instalemos las StarOffice,
+para no ejecutar el setup de Linux, habr&aacute; que escribir 
<b>./setup</b></ul>
+<b>Puedes a&ntilde;adir distintos caminos al PATH, siempre y cuando separes
+el &uacute;ltimo camino del siguiente con un ":"</b>
+<p>Ejemplo: (Mi path)
+<br>export 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/opt/kde/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin/wine:/usr/local/bin/dosemu:<b>./</b>
+<p>Como se puede apreciar el <b><font color="#FF0000">"./"</font></b>,
+est&aacute; situado el &uacute;ltimo.. :-)
+<br>&nbsp;
+<ul>
+<li>
+Por motivos de seguridad si deseas incluir <b>"<u>./</u>" </b>en el path,
+has de colocarlo en &uacute;ltima posici&oacute;n, ya que evitar&aacute;s
+sorpresas desagradables si ponen un comando en el directorio donde est&eacute;s
+con fines destructivos y que se llame igual. Ejemplo:</li>
+</ul>
+
+<ul>El comando "ls" es el que m&aacute;s se utiliza, est&aacute; situado
+en /usr/bin, si pusieran un script que que llame "ls" en tu directorio,
+y tu lo ejecutas, y el <a href="glosary.html#script">script </a>"ls" tuviera
+por ejemplo las siguientes setencias:
+<p>#!/bin/bash
+<br>echo "jajajajaja"
+<br>rm -rfv *
+<p>Te destruir&aacute; TODOS LOS FICHEROS y DIRECTORIOS en donde 
est&eacute;s.</ul>
+</ul>
+<a href="#ARRIBA">[ ^ ]</a>
+<br><a href="linux1.html">[ &lt; ]</a>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet.gif
Binary files /dev/null and /tmp/cvsXFAz0s differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet2.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet2.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/conexinet2.gif
Binary files /dev/null and /tmp/cvsDpBsXv differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/conexion.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/conexion.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/conexion.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/conexion.html   3 Mar 2012 
06:14:34 -0000       1.1
@@ -0,0 +1,60 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+</head>
+<body text="#000000" bgcolor="#CCFFFF" link="#0000EF" vlink="#51188E" 
alink="#FF0000">
+<a href="../tutorial.html#Comienzo">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+Conexi&oacute;n a Internet: (por modem)</h1>
+
+<p><br>Una vez que tengas <a href="kernelYsonido.html">compilado el 
n&uacute;cleo</a>
+con las opciones oportunas o que m&aacute;s se aproximan a tus gustos,
+existen herramientas que te har&aacute;n muy sencilla esta labor, 
tambi&eacute;n
+en modo texto (consola), estas son:
+<p>"linuxconf"
+<br>"netconf"
+<p>Tanto en modo texto (consola) como para X-Window, se llaman igual.
+<p>No dejes de hecharle un vistazo a:
+<br>&nbsp;
+<ol>
+<li>
+<a 
href="/usr/doc/HOWTO/translations/es/html/PPP-Como.html">PPP-Como&nbsp;&nbsp;&nbsp;
+(Protocolo Punto a Punto - Como)</a></li>
+
+<li>
+<a 
href="/usr/doc/HOWTO/translations/es/html/Infobia-Como.html">Infobia-Como&nbsp;&nbsp;&nbsp;
+(Conexi&oacute;n a traves un servidor)</a></li>
+
+<br>&nbsp;
+<h3>
+Ejemplos gr&aacute;ficos:</h3>
+
+<p><br><img SRC="conexinet.gif" height=463 width=608>
+<h3>
+Tambi&eacute;n <a href="x-window.html">Entornos Gr&aacute;ficos como KDE
+o GNOME</a> permiten accesos r&aacute;pidos al modem.</h3>
+</ol>
+
+<br>&nbsp;
+<blockquote><img SRC="conexinet2.gif" height=444 width=458>
+<br>&nbsp;
+<p>Tambi&eacute;n puedes encotrar m&aacute;s informaci&oacute;n en <a 
href="linuxzone/web/linuxzone/index.htm">LinuxZone
+sobre la configuraci&oacute;n manual del modem.</a></blockquote>
+
+<p><br>
+<hr WIDTH="100%">
+<br>&nbsp;
+<blockquote>Si sus intenciones son montar un servidor lea:</blockquote>
+
+<blockquote><a href="/usr/doc/HOWTO">/usr/doc/HOWTO/</a></blockquote>
+
+<blockquote>Donde hay informaci&oacute;n muy interesante sobre sus 
pretensiones.</blockquote>
+
+<p><br><a href="../tutorial.html#Comienzo">[ &lt; ]</a><a 
href="contenidos.html">[
+|| ]</a>[ > ]
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/contenidos.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/contenidos.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/contenidos.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/contenidos.html 3 Mar 2012 
06:14:34 -0000       1.1
@@ -0,0 +1,544 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12-20 
i686) [Netscape]">
+   <meta name="Author" content="Javier Orovengua Miguel, José Carlos Orovengua 
Miguel.">
+   <title>Bienvenido al Tutorial de Linux.</title>
+</head>
+<body text="#000080" bgcolor="#AEDEF4" link="#3333FF" vlink="#000066" 
alink="#800000">
+[ &lt; ]<a href="../tutorial.html">[ ||
+]</a>[ > ] Revisi&oacute;n: - Marzo / 2.000
+<center><a href="http://sunsite.unc.edu/mdw/";>[&nbsp; L.D.P. ]</a><a 
href="translate.html">[
+Translations ]</a></center>
+
+<center>
+<h1>
+<img SRC="logoLT.gif" height=123 width=80><img SRC="logo.jpg" height=191 
width=633></h1></center>
+
+<center>
+<h1>
+<a NAME="InicioTutorial"></a>Bienvenido a TutorialLinux.<font 
size=+1>&reg;</font></h1></center>
+
+<blockquote>
+<center><a NAME="Comienzo"></a>Los n&uacute;meros abajo indicados expresan
+los d&iacute;as que puede tardarse en aprender el tutorial.</center>
+</blockquote>
+
+<blockquote>
+<center><a href="../tutorial.html">Ocultar CONTENIDOS</a></center>
+</blockquote>
+
+<ul>
+<li>
+<font size=+1><a href="sobre_tutorial.html">LEEME</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="sobre_tutorial.html#Linux">&iquest;Qu&eacute; es
+LiNUX?</a></font></li>
+
+<li>
+<font size=+1><a href="sobre_tutorial.html#Instrucciones">Leeme (Instrucciones
+para aprendices)</a></font></li>
+
+<ul>
+<li>
+<font size=+1><a href="stutorial2.html">Palabras de uso com&uacute;n en
+Linux:</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="zMayores65.html">Recomendado mayores 65 
a&ntilde;os</a></font></li>
+
+<li>
+<font size=+1><a href="nuevo.html">&iquest;Que tiene de nuevo esta 
versi&oacute;n
+de LinuxTutorial?</a></font></li>
+
+<li>
+<font size=+1><a href="sobre_tutorial.html#Nota">Nota del equipo de desarrollo
+para ver el tutorial.</a></font></li>
+</ul>
+<font size=+1><a href="sobre_tutorial.html#Licencia">Leeme (Sobre la licencia
+y distribuci&oacute;n)</a></font></ul>
+
+<ul>
+<li>
+<font size=+1><a href="lynxhow1.html">Pantalla de Texto, estoy en Lynx
+&iquest;Qu&eacute; hago?.</a></font></li>
+
+<li>
+<font size=+1><a href="quitlinux.html">Salir CORRECTAMENTE de 
Linux</a></font></li>
+
+<li>
+<font size=+1><a href="../tutorial.html#TuLengua">No veo los caraceteres
+en mi lengua:</a></font></li>
+</ul>
+
+<ul>
+<li>
+<font size=+1><a href="linux1.html">Nunca antes hab&iacute;a estado en
+Linux.</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="comodines.htm">Nombres, comodines.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#MFicheros">Mostrar ficheros.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#MFicherosPero">Distinci&oacute;n de
+ficheros.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#MFicherosColor">Distinci&oacute;n de
+ficheros con colores.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#CDirectorios">Creando 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#BDirectorios">Borrando 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#RDirectorios">Renombrando 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#MovDirectorios">Moviendo 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#AccediendoDir">Accediendo 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#Clear">Limpiando la 
pantalla.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#MontDEV">Montando unidades.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#AccDEV">Accediendo a 
unidades.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#cpDEV">Trabajando con 
unidades.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#DesmonDEV">Desmontando 
unidades.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#Automatizar">Configurando los ficheros
+.bashrc, y .bash_profile.</a></font></li>
+
+<li>
+<font size=+1><a href="linux1.html#MidnightCommader">Utilizando el Midnight
+Comander de Linux, el MC.</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="linux2.html">Repaso comandos. (Gu&iacute;a 
R&aacute;pida)
++ Estructura de directorios.</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="linux2.html#Rapida">Toma de contacto muy r&aacute;pida
+con Linux.</a></font></li>
+
+<li>
+<font size=+1><a href="linux2.html#FormaDirs">La nueva forma de 
directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux2.html#MayusYminus">Las formas, may&uacute;sculas
+y min&uacute;sculas.</a></font></li>
+
+<li>
+<font size=+1><a href="linux2.html#DirRaiz">La ra&iacute;z, estructura
+de directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux2.html#PideAyuda">Pidiendo ayuda, 
uso:</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="linux3.html">&iquest;C&oacute;mo uso la multitarea
+de linux?</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="linux3.html#CombinacionTeclas">Combinaci&oacute;n
+de teclas.</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#CombinacionXWindow">Combinaci&oacute;n
+de teclas en X-Window.</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#ProcesosEscondidos">Procesos que no
+se ven (demonios).</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#Ejecutandose">&iquest;Qu&eacute; procesos
+se est&aacute;n ejecutando?.</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#SegundoPlano">Ejecutar cualquier proceso
+en segundo plano</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#MatandoProcesos">&iexcl;Matando 
procesos!.</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#MatandoUsuarios">&iexcl;Matando 
usuarios!.</a></font></li>
+
+<li>
+<font size=+1><a href="linux3.html#WhoAmI">&iquest;Qui&eacute;n soy y donde
+estoy?.</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="linux4.html">Gestionar Ficheros</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="linux4.html#FicherosPropietarios">Los ficheros tienen
+propietarios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux4.html#CambiamosPermisos">Cambiamos el propietario
+de un fichero.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html">Gestionando avanzada de 
archivos</a></font></li>
+
+<ul>
+<li>
+<font size=+1><a href="setuid.html">Hacer SET UID/GID a 
ficheros/directorios</a></font></li>
+</ul>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="onlyfile.html#VerArchivo">Ver el contenido de un
+archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#VerArchivoComprimido">Ver el contenido
+de un archivo COMPRIMIDO.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#CopiarArchivo">Copiar un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#MoverArchivo">Mover un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#RenombrarArchivo">Renombrar un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#BorrarArchivo">Borrar un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#BorrarDirectorio">Borrar un 
DIRECTORIO.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#Redireccion">Redireccionamiento, 
tipos.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#ImprimirArchivo">Imprimir un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#CrearConJoe">Crear un archivo con
+joe.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#CrearConVi">Crear un archivo con 
vi.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#CrearConEmacs">Crear un archivo con
+Emacs.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#CompriArchivo">Comprimir un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#ComprEstruc">Comprimir una estructura
+de directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#DescomArchivo">Descomprimir un 
archivo.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#DescomEstruct">Descomprimir una estructura
+de directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#InstalarRPM">Instalar un programa
+(formato .RPM)</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#DesinstRPM">Desinstalar un programa
+(formato .RPM)</a></font></li>
+
+<li>
+<font size=+1><a href="/usr/doc/HOWTO/translations/es/html/RPM-Como.html">Mini
+curso de creaci&oacute;n de un .RPM</a></font></li>
+
+<li>
+<font size=+1><a href="RPMgestion.html">Gesti&oacute;n paquetes 
.RPM</a></font></li>
+
+<ul>
+<li>
+REPASO DE <a href="onlyfile.html#InstalarRPM">INSTALACI&Oacute;N</a>/<a 
href="onlyfile.html#DesinstRPM">DESINSTALACI&Oacute;N</a></li>
+
+<li>
+<a href="RPMgestion.html#QueRPMS">Consulta de todos los paquetes 
instalados</a></li>
+
+<li>
+<a href="RPMgestion.html#UnPaquete">Consulta de un paquete instalado</a></li>
+
+<li>
+<a href="RPMgestion.html#ForzarInst">Forzar una instalaci&oacute;n y 
actualizar</a></li>
+
+<li>
+<a href="RPMgestion.html#DesinstXQSI">Desinstalar a toda costa</a></li>
+
+<li>
+<a href="RPMgestion.html#EjemploKDE">Ejemplo de instalaci&oacute;n (INSTALANDO
+LAS KDE)</a></li>
+
+<li>
+<a href="/usr/doc/HOWTO/translations/es/html/RPM-Como.html">M&aacute;s
+informaci&oacute;n sobres .RPM (Requiere documentaci&oacute;n)</a></li>
+
+<br>&nbsp;</ul>
+
+<li>
+<font size=+1><a href="onlyfile.html#InstTGZ">Instalar un programa (formato
+.TGZ &oacute; TAR.GZ)</a></font></li>
+
+<li>
+<font size=+1><a href="onlyfile.html#DesinstTGZ">Desinstalar un programa
+(formato .TGZ &oacute; TAR.GZ)</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="linux4.html#Seguridad">&iexcl;&iexcl;Seguridad de
+Ficheros!!</a></font></li>
+
+<li>
+<font size=+1><a href="linux4.html#ChmodYchattrib">Comandos chmod y 
chattr.</a></font></li>
+
+<li>
+<font size=+1><a href="linux4.html#script2exec">Convertir un script a 
ejecutable.</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="exercise.html">&iquest;Te gustan los 
deberes?</a></font></li>
+</ul>
+
+<hr WIDTH="100%">
+<br>&nbsp;
+<ul>
+<li>
+<font size=+1><a href="linux5.html">Gestionando usuarios.</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="linux5.html#CrearUsuarios">Creando un 
usuario.</a></font></li>
+
+<li>
+<font size=+1><a href="linux5.html#EditarUsuarios">Editando 
usuarios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux5.html#BorrandoUsuarios">Borrando 
usuarios.</a></font></li>
+
+<li>
+<font size=+1><a href="linux5.html#DesdeX">Desde X-Window.</a></font></li>
+</ul>
+
+<li>
+<font size=+1><a href="conexion.html">Conexi&oacute;n a 
internet</a></font></li>
+</ul>
+
+<ul>
+<li>
+<font size=+1><a href="linux6.html">Herramientas, Administraci&oacute;n
+y Configuraci&oacute;n.</a></font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="linux6.html#BasicConfig">Configuraci&oacute;n 
B&aacute;sica
+del sistema.</a></font></li>
+
+<li>
+<font size=+1><a href="linux6.html#BasicConfig">Configuraci&oacute;n de
+la impresora.</a></font></li>
+
+<li>
+<font size=+1><a href="linux6.html#HacerRestaurarCopias">Hacer copia de
+seguridad/Restaurar copia de seguridad.</a></font></li>
+
+<li>
+<font size=+1><a href="linux6.html#FormatFloppy">Formatear disquetes y
+chequear su integridad</a></font></li>
+
+<li>
+<font size=+1><a href="rawrite.html">CREAR DISQUETES DE 
ARRANQUE:</a></font></li>
+
+<li>
+<font size=+1><a href="linux6.html#ComunicacionInterna">Comunicaci&oacute;n
+interna en un sistema Linux (principios b&aacute;sicos)</a></font></li>
+
+<li>
+<font size=+1>Gestionar comunicaci&oacute;n externa.</font></li>
+
+<li>
+<font size=+1><a href="linux6.html#CheckSistemaFicheros">Chequear el sistema
+de ficheros.</a></font></li>
+
+<li>
+<font size=+1><a href="linux6.html#ArchivosRegistro">Utilidad sudo y archivos
+de registro.</a></font></li>
+
+<li>
+<font size=+1><a href="linux6.html#CasoCatastrofe">En caso de 
cat&aacute;strofe.</a></font></li>
+
+<li>
+<font size=+1><a href="kernelYsonido.html">Compilar el n&uacute;cleo y
+sonido.</a></font></li>
+
+<ul>
+<li>
+<font size=+1><a href="kernelYsonido.html#InstallKernel">C&oacute;mo instalar
+el n&uacute;cleo.</a></font></li>
+
+<li>
+<font size=+1><a href="kernelYsonido.html#CompilKernel">C&oacute;mo 
compilarlo.</a></font></li>
+
+<li>
+<font size=+1><a href="kernelYsonido.html#ArranKernel">C&oacute;mo arrancar
+con &eacute;l.</a></font></li>
+
+<li>
+<font size=+1><a href="kernelYsonido.html#KernelCompilado">C&oacute;mo
+hacer copia de seguridad del n&uacute;cleo COMPILADO.</a></font></li>
+
+<li>
+<font size=+1><a 
href="/usr/doc/HOWTO/translations/es/html/Kernel-Como.html">&iquest;Nuevo
+n&uacute;cleo? &iexcl;instala un parche! (requiere 
documentaci&oacute;n).</a></font></li>
+
+<li>
+<font size=+1><a href="sonido.html">&iexcl;SONIDO&nbsp;&nbsp;&nbsp; 
POR&nbsp;&nbsp;&nbsp;
+FAVOR!</a></font></li>
+</ul>
+</ul>
+<font size=+1><a href="linux6.html#Comunica">Comunicacion a todos los 
usuarios.</a></font></ul>
+
+<ul>
+<li>
+<font size=+1><a href="linux9.htm">Seguridad</a>.</font></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+<font size=+1><a href="linux9.htm#CambioContraseña">Cambio de 
contrase&ntilde;a.</a></font></li>
+
+<li>
+<font size=+1><a href="linux9.htm#ContraseñaRoot">Contrase&ntilde;a olvidada
+-a root-</a></font></li>
+
+<li>
+<font size=+1><a href="linux9.htm#ComandosUtiles">Comandos 
&uacute;tiles.</a></font></li>
+
+<li>
+<font size=+1><a href="linux9.htm#ArchivosLOGS">Archivos de 
registro.</a></font></li>
+
+<li>
+<font size=+1><a href="linux9.htm#EntrarEnLinux">Formas de entrar en 
Linux</a></font></li>
+
+<li>
+<font size=+1><a href="linux9.htm#ActualizarSistema">Actualizar el 
sistema</a></font></li>
+
+<li>
+<font size=+1><a href="linux9.htm#SeguridadInternet">Seguridad en 
Internet.</a></font></li>
+</ul>
+<font size=+1><a href="gransistema.html">Grandes sistemas</a></font></ul>
+
+<ul>
+<li>
+<font size=+1><a href="linux7.html">&iquest;Que no hay espacio? Creando
+una partici&oacute;n m&aacute;s...</a></font></li>
+
+<li>
+<font size=+1><a href="linux8.html">&iquest;Y ahora, qu&eacute;? (Internet,
+emuladores...)</a></font></li>
+
+<ul>
+<li>
+<font size=+1><a 
href="linuxzone/web/linuxzone/index.htm">LINUXZONE</a></font></li>
+
+<br><font size=+1>Con Linux&nbsp; Zone, aprender&aacute;s a configurar
+tu modem, irc, DosEmu, Wine...</font></ul>
+
+<li>
+<font size=+1><a href="trucos.html">ALGUNOS TRUCOS.</a></font></li>
+
+<li>
+<font size=+1><a href="aPROBLEMAS.html">Y si tengo problemas...</a></font></li>
+
+<li>
+<font size=+1><a href="x-window.html">&iexcl;&iexcl;X-Window !!</a></font></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<font size=+1><a href="/usr/doc/HOWTO/translations/es/html/">Tus 
&iquest;C&oacute;mo
+puedo...? <b>locales</b>: /usr/doc/HOWTO/translations/es/html/</a></font></li>
+
+<li>
+<font size=+1><a href="/usr/doc/FAQ/html/">Tus FAQ <b>locales</b>: 
/usr/doc/FAQ/html/</a></font></li>
+
+<br><font size=+1><a href="/usr/doc/">Tu Documentaci&oacute;n <b>local</b>
+varia: /usr/doc/</a></font></ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<font size=+1><a href="gracias_a.html">El Equipo TutorialLinux.</a></font></li>
+
+<li>
+<font size=+1><a href="../tutorial.html#CopyRight">&copy; Copyright, y
+todo eso.</a></font></li>
+
+<li>
+<font size=+1><a href="../tutorial.html#Enlaces">De donde bajarse la 
&uacute;ltima
+actualizaci&oacute;n del tutorial</a></font></li>
+
+<li>
+<font size=+1><a href="../tutorial.html#Enlaces">Enlaces convenientes de
+este tutorial</a></font></li>
+</ul>
+
+<center>
+<hr WIDTH="100%">
+<p>Autores: Javier Orovengua: (Eggun): <a 
href="mailto:address@hidden";>address@hidden</a>.
+<br>Jos&eacute; Carlos Orovengua: (Shaell): <a 
href="mailto:address@hidden";>address@hidden</a></center>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/crond.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/crond.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/crond.gif
Binary files /dev/null and /tmp/cvsHDCEsv differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/crontab.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/crontab.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/crontab.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/crontab.sample.txt      3 Mar 
2012 06:14:35 -0000       1.1
@@ -0,0 +1,24 @@
+       # Usa /bin/bash para arrancar comandos, no importa lo que /etc/passwd
+diga.
+       SHELL=/bin/bash
+       # mail a carlos, no importe de quién sea el crontab 
+       MAILTO=carlos
+       #
+# Arranca 23 minutos después de las 6pm, todos los días
+       23 18 * * *             $HOME/trabajos/diario.job >> $HOME/tmp/diario 
2>&1
+       
+# Arranca a las 7:15pm a primeros de mes --con salida de mail a carlos
+       15 19 1 * *             $HOME/trabajos/mensual.job >> $HOME/tmp/mensual 
2>&1
+
+# Arranca a las 20 y a las 21 horas en punto todas las semanas y hace copias 
de seguridad
+      0 20,21 * * mon  $HOME/trabajos/semanal.job >> $HOME/tmp/semanal 2>&1
+
+# Arranca de las 18:00  a las 21 horas en días de diario, y le recuerda a 
Javier
+     0 18-21 * * 1-5           mail -s "Fíjate qué hora es" javier%Javier, 
¿aquí pretendes ligar?%Así no te echarás novia nunca.%%Perdona la coña, 
macho%%Tu "brother":%José Carlos.%
+
+# Arranca cada 2 horas los días de diario, molesta a Carlos
+       * */2 * * 1-5   mail -s "Son las 5 pm" carlos%Carlos,%%¿Hoy no tomas 
café?%
+
+# Arranca a las 18:00 pm el 25 de diciembre y recuérdame que estamos en 
Navidad.
+       0 18 25 12 *   mail -s  "Llegó la Navidad" carlos%José Carlos, %%¡ 
FELIZ NAVIDAD !%
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/email.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/email.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/email.gif
Binary files /dev/null and /tmp/cvsNQPU3y differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/exampleWordPerfect.kdelnk
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/exampleWordPerfect.kdelnk
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/exampleWordPerfect.kdelnk
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/exampleWordPerfect.kdelnk       
3 Mar 2012 06:14:35 -0000       1.1
@@ -0,0 +1,15 @@
+# KDE Config File
+[KDE Desktop Entry]
+SwallowTitle=
+SwallowExec=
+Comment[fr]=Application
+BinaryPattern=
+Comment[es]=Mi WordPerfect para Linux!!!
+MimeType=
+Exec=/opt/wp8.0/wpbin/xwp
+Icon=ChartHammer.xpm
+TerminalOptions=
+Path=XGuardaFicheros/
+Type=Application
+Name[es]=WordPerfect
+Terminal=0

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/exercise.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/exercise.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/exercise.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/exercise.html   3 Mar 2012 
06:14:35 -0000       1.1
@@ -0,0 +1,82 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12-20 
i686) [Netscape]">
+   <title>Ejercicios para MEJORAR EL RENDIMIENTO.</title>
+</head>
+<body text="#000000" bgcolor="#CCFFFF" link="#0000EE" vlink="#551A8B" 
alink="#FF0000">
+
+<h1>
+&iquest;Te gustan los deberes?</h1>
+
+<hr WIDTH="100%">
+<ul>Ahora procuraremos hacer un peque&ntilde;o repaso a lo que has visto,
+as&iacute; podr&aacute;s irte introduciendo m&aacute;s f&aacute;cilmente
+en Linux.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+Usa [Ctrl]+[F2], Si est&aacute;s desde un terminal (modo texto)</li>
+
+<li>
+o [Ctrl]+[Alt]+[F2], si est&aacute;s en X-Window (modo gr&aacute;fico)</li>
+
+<br>&nbsp;
+<ol>
+<li>
+Ve al directorio ra&iacute;z "/", y crea con joe, o cualquier otro procesador
+de textos una carta a un(a) amigo(a), a la carta la llamas: "MYLETTER.txt"</li>
+
+<li>
+Crea un directorio en <b>/usr/local</b> que se llame "amigos", de forma
+que cuando hagas un <b>ls </b>veas tu carta <b>/usr/local/amigos</b>.</li>
+
+<li>
+Copia la carta "MYLETTER.txt" en el directorio "amigos" que est&aacute;
+en "<b>/usr/local</b>"</li>
+
+<li>
+Monta tu otra partici&oacute;n del disco duro</li>
+
+<li>
+Accede a ella</li>
+
+<li>
+Copia el fichero "autoexec.bat" a <b>/usr/local/amigos</b></li>
+
+<li>
+Renombra <b>/usr/local/amigos</b>, por<b> /usr/local/mis_amigos</b></li>
+
+<li>
+Desmonta la unidad.</li>
+</ol>
+</ul>
+
+<ul>
+<li>
+Para regresar al tutorial deber&aacute;s de pulsar [Ctr]+[F1], si est&aacute;s
+desde un terminal (modo texto)</li>
+
+<li>
+&Oacute; [Ctrl]+[F7], si est&aacute;s en X-Window</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Si has conseguido lo de arriba tienes el aprobado, ya sabes manejar
+linux, el resto ser&aacute; leer.
+<ul>&nbsp;
+<ul>
+<li>
+Por supuesto, puedes utilizar el tutorial/gu&iacute;a como referencia para
+el aprobado, utilizalo si te ves atascado.</li>
+</ul>
+</ul>
+</ul>
+<a href="../tutorial.html">[ &lt; ]</a>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/exports.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/exports.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/exports.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/exports.sample.txt      3 Mar 
2012 06:14:35 -0000       1.1
@@ -0,0 +1,2 @@
+(fichero vacio)
+:-)

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/fondo_javi.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/fondo_javi.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/fondo_javi.gif
Binary files /dev/null and /tmp/cvsC03arB differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.txt        3 Mar 
2012 06:14:35 -0000       1.1
@@ -0,0 +1,6 @@
+/dev/hda3               /                       ext2    defaults        1 1
+/dev/hda2               swap                    swap    defaults        0 0
+/dev/hdb2              /mnt/+linux             ext2    defaults        1 1
+/dev/fd0                /mnt/floppy             ext2    noauto          0 0
+/dev/cdrom              /mnt/cdrom              iso9660 noauto,ro       0 0
+none                    /proc                   proc    defaults        0 0

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.usersmount.txt
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.usersmount.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.usersmount.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/fstab.sample.usersmount.txt     
3 Mar 2012 06:14:35 -0000       1.1
@@ -0,0 +1,8 @@
+/dev/hda3      /       ext2     exec,dev,suid,rw 1 1
+/dev/hda2               swap                    swap    defaults        0 0
+/dev/fd0       /mnt/floppy     vfat     user,exec,dev,suid,rw,noauto 0 0
+/dev/cdrom     /mnt/cdrom      iso9660  user,exec,dev,suid,ro,noauto 0 0
+none                    /proc                   proc    defaults        0 0
+/dev/hda1       /mnt/1disco     vfat     user,exec,dev,suid,rw,noauto 1 1
+/dev/hdb1       /mnt/2disco     vfat     user,exec,dev,suid,rw,noauto 1 1
+/dev/hdb2      /mnt/+linux     ext2     user,exec,dev,suid,rw 1 1

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/glosary.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/glosary.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/glosary.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/glosary.html    3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,534 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="Author" CONTENT="Javier Orovengua Miguel">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.3 
i586) [Netscape]">
+   <TITLE>Glosario de palabras utilizadas</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFCCCC" LINK="#0000EE" VLINK="#551A8B" 
ALINK="#FF0000">
+
+<H1>
+Glosario.</H1>
+
+<P><BR>(El glosario se encuentra todav&iacute;a en desarrollo)
+<H3>
+Bienvenido al glosario:</H3>
+El glosario ser&aacute; utilizado solamente desde el Tutorial, de todas
+formas, si quiere aprender el glosario, nos parece muy bien.
+<P>
+<HR WIDTH="100%">
+<BR><A NAME="alias"></A>
+<BR>Alias:
+<UL>Un alias, es la forma de reducir a&uacute;n m&aacute;s el tiempo de
+acceso a cualquier comando que se pueda escribir por el teclado, por ejemplo
+si hacemos un alias para <A HREF="#Unidades">montar </A>el disco floppy:
+<P>alias FLOPPY='mount -t ext2 /dev/df0 /mnt/floppy'
+<P>Con escribir FLOPPY, montaremos el disquete en el directorio /mnt/floppy
+<BR>&nbsp;</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="atributos"></A>
+<BR>Atributos de ficheros:
+<UL>Permiten que un fichero tenga caracter&iacute;sticas propias, como
+que pueda ser le&iacute;do, escrito o ejecutado s&oacute;lo por el due&ntilde;o
+del fichero, su grupo, o por todos los usuarios.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="bash"></A>
+<BR>bash:
+<UL>Es la <A HREF="#shell">shell </A>de Linux m&aacute;s utilizada, se
+caracteriza por su comodidad y facilidad de uso, y porque casi todos los
+programas la requieren para su funcionamiento, entre las principales 
caracter&iacute;sticas
+est&aacute; la de "economizar" el tiempo de acceso desde el teclado a cualquier
+sitio.
+<P>Ejemplo: vete al directorio ra&iacute;z escribiendo: "cd /", y ahora
+escribe "cd ho" y pulsa la tecla de tabulador. La shell terminar&aacute;
+de escribir "cd home", tambi&eacute;n servir&aacute; para los ficheros,
+y si escribes 2 veces tabulador desde la l&iacute;nea de comandos te 
mostrar&aacute;
+TODOS los programas que se pueden ejecutar ahora mismo.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="cd"></A>
+<BR>cd:
+<UL>Comando que sirve para acceder a un directorio/carpeta</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="CodigoFuente"></A>
+<BR>C&oacute;digo Fuente:
+<BLOCKQUOTE>Sentencias de un lenguaje ordenadas en un fichero (o conjuntamente
+con otros ficheros) que produce uno o varios resultados.
+<P><B><FONT COLOR="#000000">Ejemplo:</FONT></B><FONT COLOR="#666600"> <B>/*
+Lenguaje utilizado C */</B></FONT>
+<BR>
+<HR WIDTH="100%">
+<BR><FONT COLOR="#006600">#include</FONT><FONT COLOR="#FF6666"> 
</FONT>&lt;stdio.h>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+
+<FONT COLOR="#666600">/* Libreria Standart Input/Output */</FONT>
+<P>void <FONT 
COLOR="#3333FF">main</FONT>()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+
+<FONT COLOR="#666600">/* void=vac&iacute;o, la funci&oacute;n main, no
+devolver&aacute; nada */</FONT>
+<BR>{
+<BR>&nbsp;&nbsp;&nbsp; <FONT COLOR="#FF0000">printf</FONT> <FONT 
COLOR="#FF6600">"Hola
+Mundo\n"&nbsp;&nbsp;&nbsp; </FONT><FONT COLOR="#666600">/* mensaje que
+sale por la pantalla, el <B>'\n'</B>, produce un retorno de carro.&nbsp;
+*/</FONT>
+<BR>}
+<BR><FONT COLOR="#666600">/* Aqu&iacute; se acab&oacute; el programa. 
F&aacute;cil
+&iquest;eh? */</FONT></BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BR><A NAME="comando"></A>
+<BR>Comando:
+<UL>&oacute;rdenes del sistema (ejecutables o <A 
HREF="#script">scripts</A>).</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="Compilación"></A>
+<BR>Compilaci&oacute;n:
+<BLOCKQUOTE>Compilar: -Caso general- Consiste en reunir en un s&oacute;lo
+fichero toda la informaci&oacute;n existente en ficheros de texto que contienen
+sentencias ordenadas (<A HREF="#CodigoFuente">C&oacute;digo fuente</A>)
+para obtener un resultado concreto.
+<P>Un fichero compilado no requiere ser interpretado, por lo que desde
+ese momento es ejecutable.
+<P>Un fichero compilado para un Sistema Operativo, s&oacute;lo 
funcionar&aacute;
+en ese sistema operativo (o Emulador), pero con el c&oacute;digo fuente,
+el mismo programa podr&aacute; funcionar, compilandolo en otros Sistemas
+Operativos.
+<P>(Ver ejemplo: <A HREF="#CodigoFuente">C&oacute;digo fuente</A>)</BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BR><A NAME="cuentaOusuario"></A>
+<BR>Cuenta:
+<UL>Referente al usuario, es su nombre dentro de Linux (Ej.: <A 
HREF="#root">root</A>,
+javier, carlos, ...)</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="cp"></A>
+<BR>cp:
+<UL>Comando que se utiliza para copiar ficheros.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="demonio"></A>
+<BR>Demonio:
+<UL>Son programas encargados de la gesti&oacute;n y administraci&oacute;n
+del sistema, automatizando las tareas tediosas. Pueden hacer archivos de
+registro que se guardan normalmente en /var/adm/.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="Enlaces"></A>
+<BR>Enlaces o accesos directos:
+<UL>Un enlace es una marca a un sitio, del mismo modo que una marca en
+un libro para recordar esa frase.
+<P>De esta forma usando la marca haces referencia al lugar.
+<P>Los enlaces de Linux son:
+<BR>&nbsp;
+<UL>
+<LI>
+FUERTES (fijos): Existe la marca mientras exista el punto de referencia,
+(no se alterar&aacute;)</LI>
+
+<LI>
+SIMB&Oacute;LICOS: Existe la marca (que puede ser alterada)</LI>
+</UL>
+
+<P><BR>Por ejemplo, para hacer un enlace ("-s" simb&oacute;lico, en este
+caso, pero puede ser fuerte "-f")en mi directorio al archivo que est&aacute;
+en&nbsp; <B>/usr/doc/HOWTO/translations/es/Kernel-Como</B>, escribo desde
+mi directorio:
+<P><B>&nbsp;ln </B>-s /usr/doc/HOWTO/translations/es/Kernel-Como<B> 
Kernel_como.</B>
+<BR>De esta forma, cada vez que desde mi directorio acceda a &eacute;l
+mediante <B>joe Kernel-Como</B>, en realidad abro 
<B>/usr/doc/HOWTO/translations/es/Kernel-Como.</B>
+<P>Se usa as&iacute;:<B> ln -s fichero_a_enlazar&nbsp; fichero_enlace.</B>
+<P><B>Otro ejemplo:</B>
+<BR>Para tener los enlaces de los directorios que hay en /mnt, y desde
+nuestro directorio /home/usario, podamos acceder a ellos har&iacute;amos:
+<P><B>ln -sf /mnt/cdrom</B> cdrom
+<BR><B>ln -sf /mnt/floppy</B> disquete
+<P>As&iacute;, ahora, en vez de escribir <B>cd /mnt/cdrom</B>, por ejemplo,
+podemos escribir:
+<BR>&nbsp;
+<OL>
+<LI>
+<B>cd</B></LI>
+</OL>
+Para regresar al directorio de 'casa'
+<OL>
+<LI>
+<B>cd cdrom</B></LI>
+</OL>
+y ya estamos en el cdrom
+<BR>&nbsp;
+<UL>Existen otros tipos de enlaces, al m&aacute;s puro estilo de los sistemas
+operativos: OS/2, Mac, o Windows, que utilizan algunos gestores de ventanas
+de las X-Window, como pueden ser los <B>.kdelnk, </B>que incluyen esta
+extensi&oacute;n para mostrar el tipo de enlace que son.
+<P><A HREF="exampleWordPerfect.kdelnk">Aqu&iacute; tiene un ejemplo del
+enlace WordPerfect.kdelnk, que es utilizado desde el escritorio para llamar
+al programa "WordPerfect"</A></UL>
+
+<HR WIDTH="100%"></UL>
+<A NAME="find"></A>
+<BR>find:
+<UL>find, comando que se utiliza para buscar archivos:
+<BR>&nbsp;
+<UL>
+<LI>
+<B>find -name archivo</B></LI>
+
+<BR>Buscar&aacute; el archivo "archivo", respetando may&uacute;sculas y
+min&uacute;sculas
+<BR>&nbsp;
+<LI>
+<B>find -iname archivo</B></LI>
+
+<BR>Buscar&aacute; el archivo "archivo", aunque tenga variaciones en 
may&uacute;sculas
+y min&uacute;sculas
+<BR>pudi&eacute;ndose haber escrito: Archivo, archivO, ArchivO...</UL>
+Otro comando relacionado con find, es whereis que buscar&aacute; en el
+directorio /usr</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="Formato"></A>
+<BR>Formato:
+<UL>Formato, es la capacidad de ordenaci&oacute;n del sistemas de archivos,
+no todos los formatos son igual, ni todos dan al operador la misma cantidad
+de espacio, para ello puede influir la partici&oacute;n, por ejemplo:
+<BR>&nbsp;
+<UL>
+<LI>
+la ext2 &lt;-> Extendida II de Linux, es una forma muy buena de ahorrar
+espacio.</LI>
+
+<LI>
+el dos &lt;-> En discos muy grandes es una forma de despilfarrar disco
+duro.</LI>
+
+<LI>
+la vfat &lt;-> Si soporta la FAT 32 en un disco duro muy grande se ahorra
+considerablemente.</LI>
+
+<LI>
+minix &lt;-> Antiguo y primer sistema de ficheros de Linux.</LI>
+
+<LI>
+Y as&iacute;, podr&iacute;amos pasarnos muchos mas.</LI>
+</UL>
+</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="glosario"></A>
+<BR>Glosario:
+<UL>Peque&ntilde;o diccionario de t&eacute;rminos, que usted podr&aacute;
+utilizar para las t&eacute;rminos que vengan enlazadas a &eacute;l, pinchando
+sobre la letra seleccionada, habr&aacute; escogido la palabra del glosario
+a consultar.
+<P>Para regresar a la pantalla inmediatamente anterior, deber&aacute;s
+hacer:
+<BR>&nbsp;
+<UL>
+<LI>
+Si est&aacute;s en <A HREF="#Lynx:">Lynx</A>: pulsar la tecla del cursor
+[&lt;--], que es, empezando desde arriba desde la tecla de funci&oacute;n
+[F12], 5 teclas hac&iacute;a abajo, la que est&aacute; a la izquierda de
+la tecla [Ctrl]</LI>
+</UL>
+
+<UL>
+<LI>
+Si est&aacute;s en un navegador gr&aacute;fico (<A 
HREF="#Netscape">Netscape</A>,
+kfm...) un bot&oacute;n que aparece en la pantalla con el s&iacute;mbolo
+de una flecha que apunta hacia la izquierda, que suele estar en la ventana
+que ocupa (si no ocupa toda la pantalla) en la parte superior izquierda
+debajo del men&uacute; flotantes: (File, Edit...)</LI>
+
+<BR>&nbsp;
+<UL>
+<LI>
+Si tu navegador no dispone de esta opci&oacute;n deber&aacute;s buscarla
+entre los men&uacute;s flotantes.</LI>
+</UL>
+</UL>
+</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="GID"></A>
+<BR>GID:
+<BLOCKQUOTE>GID: Es el n&uacute;mero identificador de grupo: (<B>G</B>ruop
+<B>ID</B>entification).
+El ordenador entiende los grupos, y los usuarios, no por su nombre, si
+no por su n&uacute;mero, as&iacute; y a modo de ejemplo: para Linux, el
+usuario con <A HREF="#UID">UID</A> 0 y GID 0 es root</BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BR><A NAME="GLHis"></A>
+<BR>GLHis:
+<UL>GLHis es el acr&oacute;nimo de: GNU Linux/Hispano, es NUESTRA 
distribuci&oacute;n
+del famoso Sistema Operativo Linux que pretende tener gran parte de su
+software y documentaci&oacute;n exclusivamente en castellano.
+<P>El software que engloba GLHis, (as&iacute; como otras distribuciones)
+es propiedad de los correspondientes desarrolladores.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="ide"></A>
+<BR>IDE:
+<UL>El sistema de velocidad e intercambio del disco.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="login"></A>
+<BR>login:
+<UL>Identificador de usuario. Detr&aacute;s de la palabra <A 
HREF="#login">login</A>
+el usuario deber&aacute; identificarse con su nombre, mote, nick, o cualquier
+palabra que tenga establecida para introducirse en su cuenta de usuario
+de Linux.</UL>
+
+<HR WIDTH="100%"><A NAME="lpr"></A>
+<BR>lpr:
+<UL>Comando utilizado para imprimir archivos.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="ls"></A>
+<BR>ls:
+<UL>Comando para <A HREF="#ls">L</A>i<A HREF="#ls">S</A>tar los ficheros
+y directorios.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="Lynx:"></A>
+<BR>Lynx:
+<UL>Navegador de p&aacute;ginas Web generalmente en modo texto, tiene al
+menos 3 versiones, una para Unix, para Linux y para DOS, siendo esta 
&uacute;ltima
+la menos desarrollada.</UL>
+
+<HR SIZE=0 WIDTH="100%">
+<P><A NAME="man"></A>
+<BR>man:
+<UL>Son los manuales de los <A HREF="#comando">comandos</A> de Linux. Se
+usa para pedir ayuda detallada de los mismos.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="mc"></A>
+<BR>mc:
+<UL>Es la versi&oacute;n del Midnight Comander de Symantec para Linux.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="mkdir"></A>
+<BR>mkdir:
+<UL>Comando utilizado para crear directorios.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="mv"></A>
+<BR>mv:
+<UL>Comando utilizado para MOVER y RENOMBRAR tanto ficheros como directorios,
+no debe utilizarse desde "/", y si eso ocurriera, procura no hacerlo como
+ROOT</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="Netscape"></A>
+<BR>Netscape:
+<UL>Navegador de p&aacute;ginas Web generalmente en modo gr&aacute;fico
+y que tiene muchas versiones dependiendo del S.O.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="oculto"></A>
+<BR>Oculto o escondido:
+<UL>Que no se ve</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="Parametro"></A>
+<BR>Par&aacute;metro o modificador:
+<UL>Un modificador o par&aacute;metro, es un dato introducido por el teclado
+a un comando para que realice una cosa concreta de una forma determinada,
+ejemplo:
+<P>cat &lt;fichero>
+<P>El comando 'cat', mostrar&aacute; el contenido del fichero &lt;fichero>,
+si se le a&ntilde;ade el par&aacute;metro '|more', detr&aacute;s de 
&lt;fichero>,
+har&aacute; una pausa cuando termine la &uacute;ltima l&iacute;nea de fichero,
+mostrando pausas para seguir vi&eacute;ndolo.</UL>
+
+<HR WIDTH="100%"><A NAME="Particion"></A>
+<BR>Partici&oacute;n:
+<UL>La partici&oacute;n de un disco, como su propio nombre indica es un
+fraccionamiento l&oacute;gico (que se utilizan programas para hacerlo,
+no f&iacute;sico) donde se puede guardar informaci&oacute;n, o son requeridas
+dependiendo del S.O. utilizado.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="password"></A>
+<BR>Password:
+<UL>Clave que pudiera tener el usuario. Si es as&iacute;, deber&aacute;
+ser tecleada cuando aparece esta palabra, y si la palabra de acceso y su
+login es correcto dar&aacute; paso a la <A HREF="#cuentaOusuario">cuenta</A>
+de usuario de Linux.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="pid"></A>
+<BR>PID:
+<UL>Es el identificador que el sistema asigna a cada proceso. Es un 
n&uacute;mero
+que puedes averiguar, por ejemplo, mediante la ejecuci&oacute;n del comando
+<B>ps.</B>
+<BR>(<B>P</B>rocess <B>ID</B>entification)</UL>
+
+<HR WIDTH="100%"><A NAME="rm"></A>
+<BR>rm:
+<UL>Comando utilizado para BORRAR FICHEROS. Usalo con precauci&oacute;n,
+en Linux no hay UNDELETES (Recuperaci&oacute;n de ficheros)</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="rmdir"></A>
+<BR>rmdir:
+<UL>Comando utilizado para borrar directorios.
+<P>Para borrar un &aacute;rbol de directorios de forma recursiva usa: <A 
HREF="#rm">rm
+-r &lt;directorio></A></UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="root"></A>
+<BR>root:
+<UL>Superusuario. Es el administrador del sistema, con todos los derechos
+sobre el mismo. Vamos, un peque&ntilde;o dios. ES PELIGROSO ENREDAR COMO
+ROOT SI NO SE SABE O QUE SE HACE. (Procura sus accesos los menos posibles...,
+crear usuarios, borrarlos, montar unidades...)</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="setfont"></A>
+<BR>setfont
+<BR>&nbsp;
+<BLOCKQUOTE>Inicia la fuente que se le indique el usuario, la direcci&oacute;n
+de las fuentes que pueden ser modificadas est&aacute; en:
+<BR>/usr/lib/consolefonts.
+<BR>&nbsp;
+<UL>
+<LI>
+El ejemplo para poner la fuente en espa&ntilde;ol es: setfont lat1u-16.psf</LI>
+</UL>
+</BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BR><A NAME="scsi"></A>
+<BR>SCSI:
+<UL>El sistema de velocidad e intercambio del disco.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="script"></A>
+<BR>Script:
+<UL>Conjunto de <A HREF="#comando">comandos</A> u &oacute;rdenes en un
+fichero que ordenados producen una salida concreta. Los Scripts no requieren
+ser <A HREF="#Compilación">compilados</A>, ya que quien los ejecuta 
(interpreta)
+en la misma <A HREF="#shell">shell </A>a trav&eacute;s de los comandos
+que dispone.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="shell"></A>
+<BR>shell:
+<UL>La shell, es una capa que protege al usuario de la m&aacute;quina pura
+y dura y &eacute;l mismo, gracias a la shell puedes introducir comandos,
+y te podr&aacute; hacer la vida m&aacute;s o menos f&aacute;cil, dependiendo
+de la shell que uses. Generalmente en Linux, la shell suele ser la '<A 
HREF="#bash">bash</A>',
+que se caracteriza por no tener necesidad de teclear todos los comandos,
+o nombres de ficheros ya que cuando pulsas tabulador, terminar&aacute;
+de escribir el resto.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="swap"></A>
+<BR>swap:
+<UL>Swap (intercambio en ingl&eacute;s), generalmente suele ser en Linux
+una partici&oacute;n que servir&aacute; de &aacute;rea de intercambio,
+cuando se agote la memoria disponible.
+<P>Generalmente la memoria Swap ha de ser como m&iacute;nimo la misma cantidad
+que existe de memoria RAM.
+<P>Swap, podr&iacute;a ser tambi&eacute;n un fichero de que realizar&aacute;
+la misma funci&oacute;n que esta partici&oacute;n de tu disco duro (aunque
+m&aacute;s lentamente), pero tambi&eacute;n podr&iacute;a hacer referencia
+a una funci&oacute;n, un m&eacute;todo...</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="S.O.:"></A>
+<P>S.O.:
+<BR>&nbsp;
+<UL>Son las siglas de <B>S</B>istema <B>O</B>perativo, que tambi&eacute;n
+te lo puedes encontrar en ingl&eacute;s como <B>O.S.</B>
+<P>Existen muchos y muy diversos Sistemas Operativos, aqu&iacute; te 
mencionaremos
+algunos:
+<BR>&nbsp;
+<UL>
+<LI>
+Unix</LI>
+
+<LI>
+FreeBSD</LI>
+
+<LI>
+Linux</LI>
+
+<LI>
+OS/2</LI>
+
+<LI>
+MacOS</LI>
+
+<LI>
+Windows</LI>
+
+<LI>
+Y otros aqu&iacute; no mencionados.</LI>
+</UL>
+</UL>
+
+<HR WIDTH="100%">
+<P><A NAME="TeclaIntro"></A>
+<BR>Tecla Intro:
+<UL>Es (de arriba a abajo) la tercera tecla a partir de [F12], la tecla
+situada en el bloque num&eacute;rico con la palabra [Intro], hace el mismo
+efecto.
+<P>"En algunos programas comerciales y de gesti&oacute;n", la tecla [intro]
+del bloque num&eacute;rico puede ser capturada para hacer la misma 
funci&oacute;n
+que tabulador.</UL>
+
+<HR WIDTH="100%"><A NAME="Terminal"></A>
+<BR>Terminal:
+<UL>Tras escribir tu '<A HREF="#login">login</A>' y si procede tu '<A 
HREF="#password">password</A>'
+habr&aacute;s accedido a una pantalla, esta pantalla es conocida como 
'terminal'
+<P>Terminal, es tambi&eacute;n, un ordenador que s&oacute;lo sirve para
+entrada de datos y que son enviados a un 'servidor' el cual los procesa
+y manda una 'respuesta apropiada' al terminal con lo que hay que hacer:
+<P>Ejemplos de terminal: Cajero Autom&aacute;tico, Terminal Punto de Venta
+(por donde pasan tu tarjeta), Cajero Registrador, el Ordenador que est&aacute;
+en un Banco y que el se&ntilde;or de la ventanilla introduce datos, cualquier
+ordenador conectado en Red y que no sea Servidor.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="UID"></A>
+<BR>UID:
+<BR>&nbsp;
+<BLOCKQUOTE>UID: Es el n&uacute;mero identificador de usuario (<B>U</B>ser
+<B>ID</B>entification)El
+ordenador entiende los grupos, y los usuarios, no por su nombre, si no
+por su n&uacute;mero, as&iacute; y a modo de ejemplo: para Linux, el usuario
+con UID 0 y <A HREF="#GID">GID</A> 0 es root</BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BR><A NAME="Unidades"></A>
+<BR>Unidades:
+<UL>Una unidad es un dispositivo f&iacute;sico que tiene capacidad para
+almacenar informaci&oacute;n.
+<BR>Dispositivos f&iacute;sicos que almacenan informaci&oacute;n pueden
+ser, el CD-ROM, una especie de Compact Disk, pero le&iacute;ble por el
+PC, el disquete, el Disco Duro, cintas...
+<P>Para poder acceder a ellos hay que <A 
HREF="linux1.html#MontDEV">montarlos</A>,
+puesto que Linux considera que todo son archivos.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="vdir"></A>
+<BR>vdir:
+<UL>Comando relacionado con listar ficheros.</UL>
+
+<HR WIDTH="100%">
+<BR><A NAME="X-Window"></A>
+<BR>X-Window:
+<UL>Motor de ventanas de Linux, soporta muchos y muy diversos tipos de
+gestores de ventanas, como FVWM, OLM, Enlightenment, KDE (Que a su vez
+soporta los gestores: (imitando a:) Motif, Windows, MacOS...), GNOME.</UL>
+
+<HR WIDTH="100%">
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/gracias_a.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/gracias_a.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/gracias_a.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/gracias_a.html  3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,71 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier & José Carlos">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.14 
i686) [Netscape]">
+</head>
+<body text="#000000" bgcolor="#30CFFF" link="#0000EF" vlink="#55188A" 
alink="#FF0000">
+<a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[ || ]</a>[
+> ]
+<br>&nbsp;
+<h1>
+El Equipo TutorialLinux lo formamos:</h1>
+
+<hr WIDTH="100%">
+<br>&nbsp;
+<ul>
+<li>
+<b><font size=+2>T&uacute; por usarlo, porque realmente sin ti, este tutorial
+no existir&iacute;a.</font></b></li>
+
+<br>&nbsp;
+<li>
+<font size=+1>HISPALINUX:</font></li>
+
+<br>Por apoyarme en todo momento, sobre todo Ismael Olea y Carlos 
Perell&oacute;.
+<br>&nbsp;
+<li>
+<font size=+1>Marc TitUs:</font></li>
+
+<br><font size=+1>Por la creaci&oacute;n del nuevo interfaz, m&aacute;s
+vistoso que el de las versiones 1.x, y del ping&uuml;ino grande.</font></ul>
+
+<ul>
+<li>
+<font size=+1>Daniel Molina Prietos.</font></li>
+
+<br>Por&nbsp; LinuxZone, toda una joya para cualquier linuxero que se 
precie.</ul>
+
+<ul>
+<li>
+<font size=+1>Mar&iacute;a Mena.</font></li>
+
+<br>Por su <b>BONITO Logotipo</b> del 
tutorial.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+;-*,&nbsp;&nbsp;&nbsp; Gracias Mar&iacute;a
+<br>&nbsp;
+<li>
+<font size=+1>Ana M&ordf; Rico</font></li>
+
+<br>Por dar moral.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;-)
+<br>&nbsp;
+<li>
+<font size=+1>Nuestros Testers</font></li>
+
+<br>Sin los cuales no podr&iacute;an haberse hallado los problemas/errores
+de nuestro tutorial.
+<br>&nbsp;
+<li>
+<font size=+1>Javier Fernandez-Sanguino Pe&ntilde;a</font></li>
+
+<br>Por convertir nuestros paquetes de .rpm a .deb
+<br>&nbsp;
+<li>
+<font size=+1>Nuestros m&aacute;s sinceros agradecimientos a: <a 
href="muchasgracias.html">(Pincha
+aqu&iacute;)</a></font></li>
+
+<br>&nbsp;</ul>
+
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.gif
Binary files /dev/null and /tmp/cvsgR4KxC differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.html        3 Mar 
2012 06:14:36 -0000       1.1
@@ -0,0 +1,61 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.9 
i586) [Netscape]">
+</head>
+<body text="#000000" bgcolor="#99FFCC" link="#0000EF" vlink="#51188E" 
alink="#FF0000">
+<a href="linux9.htm">[ &lt; ]</a><a href="contenidos.html">[ || ]</a>[
+> ]
+<h1>
+<b>Grandes Sistemas</b></h1>
+La informaci&oacute;n que aqu&iacute; se adjunta el simplemente a nivel
+de recomendaci&oacute;n.
+<p>
+<hr WIDTH="100%">
+<p>Si tiene usted un gran sistema, o simplemente considera que la 
informaci&oacute;n
+que el mismo contiene es muy importante, se recomienda haga usted estos
+pasos.
+<p>Cree varias particiones con formato ext2, preferiblemente. De forma
+que una de las particiones, sirva para guardar copias de seguridad, o contenga
+programas, que no est&eacute;n en la ra&iacute;z "/", para evitar que la
+perdida de la ra&iacute;z afecte al programa concreto.
+<p><img SRC="gransistema.gif" height=388 width=572>
+<p>Como por ejemplo, puede comprobar en la imagen, en el primer disco "hda",
+se encuentran las particiones de Windows, Swap y linux native, siendo esta
+&uacute;ltima la ra&iacute;z, esta partici&oacute;n es la partici&oacute;n
+esencial de todo el sistema Linux.
+<p>En el segundo disco duro "hdb", podremos apreciar otras 2 particiones,
+una para Windows, y otra m&aacute;s peque&ntilde;a, de unos 370 Megas 
aproximadamente
+como partici&oacute;n del sistema de seguridad.
+<br>
+<hr WIDTH="100%">
+<br>As&iacute;, por ejemplo cuando queramos arrancar un script para hacer
+copias de seguridad, no har&aacute; la copia de seguridad en la misma 
partici&oacute;n
+que estemos, sino que la har&aacute; en la partici&oacute;n de seguridad,
+un ejemplo de estos scripts los tienes en: 
<b>/usr/doc/glhis/linux_tutorial/Examples/Scripts</b>
+de este tutorial.
+<p>La forma que quieras darle a tu partici&oacute;n es cosa tuya, por ejemplo
+la partici&oacute;n "+linux" que has visto durante todo el tutorial tiene
+una forma (resumidamente) as&iacute;
+<p><a href="gransistema.txt">Pincha aqu&iacute; para ver la 
partici&oacute;n.</a>
+<p>
+<hr WIDTH="100%">
+<br>Tenemos que recordarte, que tengas varios n&uacute;cleos para que cuando
+uno falle, tengas otros con los que poder arrancar el sistema, para eso
+tendr&aacute;s que configurar tu fichero /etc/lilo.conf
+<p><a href="lilo.conf.sample.txt">Pincha aqu&iacute; para ver un ejemplo
+de /etc/lilo.conf</a>
+<p>
+<hr WIDTH="100%">
+<br>Y adem&aacute;s de todo esto, te recomendamos que hagas varios diskettes
+de arranque, incluso de versiones antiguas, para que puedas rescatar datos
+en caso de ayuda.
+<br>&nbsp;
+<br>&nbsp;
+<p>
+<hr WIDTH="100%">
+<p><a href="linux9.htm">[ &lt; ]</a><a href="contenidos.html">[ || ]</a>[
+> ]
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/gransistema.txt 3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,32 @@
+/dev/hdb2    ( Información relativa a: )
+.
+|-- CopiaSeguridad
+|   |-- NoBorrar_de
+|   |   |-- Ana
+|   |   |-- Angel
+|   |   |-- Carlos
+|   |   |-- Javier
+|   |   |-- Mama
+|   |   |-- Papa
+|   |   |-- Root
+|   |   `-- Tutorial
+|   `-- Programas
+|       |-- casi_malos
+|       |-- kernels
+|       |-- librerias
+|       |-- primera_categoria
+|       `-- segunda_categoria
+|-- DESARROLLO
+|-- XTRAs
+|-- lib
+|-- lost+found
+|-- opt
+|   |-- Office50
+|   |   |-- (y todo Star Office)
+|   |-- kde
+|   |   |-- (y todo el KDE)
+|   `-- wp8.0
+|       `-- (y todo el WordPerfect)
+`-- usr
+    `-- doc
+        `-- (y toda la documentación)

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/group.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/group.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/group.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/group.sample.txt        3 Mar 
2012 06:14:36 -0000       1.1
@@ -0,0 +1,26 @@
+root::0:root
+bin::1:root,bin,daemon
+daemon::2:root,bin,daemon
+sys::3:root,bin,adm
+adm::4:root,adm,daemon
+tty::5:
+disk::6:root
+lp::7:daemon,lp
+mem::8:
+kmem::9:
+wheel::10:root
+mail::12:mail
+news::13:news
+uucp::14:uucp
+man::15:
+games::20:
+gopher::30:
+dip::40:
+ftp::50:
+nobody::99:
+users::100:carlos,javier,angel,ana,tutorial,Eggun
+floppy:x:19:
+pppusers:x:230:
+popusers:x:231:
+slipusers:x:232:
+postgres:x:233:

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/host.conf
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/host.conf
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/host.conf
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/host.conf       3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,2 @@
+order hosts,bind
+multi on

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/hosts
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/hosts
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/hosts
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/hosts   3 Mar 2012 06:14:36 
-0000       1.1
@@ -0,0 +1,3 @@
+127.0.0.1              localhost localhost.localdomain
+192.168.1.1            proxy.wakitaki.net proxy
+192.168.1.2            laser.wakitaki.net laser

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.allow
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.allow
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.allow
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.allow     3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,8 @@
+#
+# hosts.allow  This file describes the names of the hosts which are
+#              allowed to use the local INET services, as decided
+#              by the '/usr/sbin/tcpd' server.
+#
+
+in.ftpd:one.dir.of.internet/255.255.255.0
+in.ftpd:192.168.1.0/255.255.255.0

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.deny
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.deny
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.deny
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/hosts.deny      3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,10 @@
+#
+# hosts.deny   This file describes the names of the hosts which are
+#              *not* allowed to use the local INET services, as decided
+#              by the '/usr/sbin/tcpd' server.
+#
+# The portmap line is redundant, but it is left to remind you that
+# the new secure portmap uses hosts.deny and hosts.allow.  In particular
+# you should know that NFS uses portmap!
+
+ALL:PARANOID

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/inetd.conf
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/inetd.conf
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/inetd.conf
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/inetd.conf      3 Mar 2012 
06:14:36 -0000       1.1
@@ -0,0 +1,80 @@
+#
+# inetd.conf   This file describes the services that will be available
+#              through the INETD TCP/IP super server.  To re-configure
+#              the running INETD process, edit this file, then send the
+#              INETD process a SIGHUP signal.
+#
+# Version:     @(#)/etc/inetd.conf     3.10    05/27/93
+#
+# Authors:     Original taken from BSD UNIX 4.3/TAHOE.
+#              Fred N. van Kempen, <address@hidden>
+#
+# Modified for Debian Linux by Ian A. Murdock <address@hidden>
+#
+# Modified for RHS Linux by Marc Ewing <address@hidden>
+#
+# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
+#
+# Echo, discard, daytime, and chargen are used primarily for testing.
+#
+# To re-read this file after changes, just do a 'killall -HUP inetd'
+#
+#echo  stream  tcp     nowait  root    internal
+#echo  dgram   udp     wait    root    internal
+#discard       stream  tcp     nowait  root    internal
+#discard       dgram   udp     wait    root    internal
+#daytime       stream  tcp     nowait  root    internal
+#daytime       dgram   udp     wait    root    internal
+#chargen       stream  tcp     nowait  root    internal
+#chargen       dgram   udp     wait    root    internal
+#time  stream  tcp     nowait  root    internal
+#time  dgram   udp     wait    root    internal
+#
+# These are standard services.
+#
+ftp    stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a
+#telnet        stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
+#
+# Shell, login, exec, comsat and talk are BSD protocols.
+#
+#shell stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
+#login stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
+#exec  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
+#comsat        dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat
+#talk  dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
+#ntalk dgram   udp     wait    root    /usr/sbin/tcpd  in.ntalkd
+#dtalk stream  tcp     waut    nobody  /usr/sbin/tcpd  in.dtalkd
+#
+# Pop and imap mail services et al
+#
+#pop-2   stream  tcp     nowait  root    /usr/sbin/tcpd        ipop2d
+#pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd        ipop3d
+#imap    stream  tcp     nowait  root    /usr/sbin/tcpd        imapd
+#
+# The Internet UUCP service.
+#
+#uucp  stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico    
-l
+#
+# Tftp service is provided primarily for booting.  Most sites
+# run this only on machines acting as "boot servers." Do not uncomment
+# this unless you *need* it.  
+#
+#tftp  dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd
+#bootps        dgram   udp     wait    root    /usr/sbin/tcpd  bootpd
+#
+# Finger, systat and netstat give out user information which may be
+# valuable to potential "system crackers."  Many sites choose to disable 
+# some or all of these services to improve security.
+#
+#finger        stream  tcp     nowait  root    /usr/sbin/tcpd  in.fingerd
+#cfinger stream        tcp     nowait  root    /usr/sbin/tcpd  in.cfingerd
+#systat        stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/ps -auwwx
+#netstat       stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/netstat    
-f inet
+#
+# Authentication
+#
+#auth   stream  tcp     nowait    nobody    /usr/sbin/in.identd in.identd -l 
-e -o
+#
+# End of inetd.conf
+
+swat      stream  tcp     nowait.400      root /usr/sbin/swat swat

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/jerarquia_sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/jerarquia_sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/jerarquia_sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/jerarquia_sample.txt    3 Mar 
2012 06:14:37 -0000       1.1
@@ -0,0 +1,226 @@
+
+       Un sistema Unix/Linux típico puede tener entre otros los siguientes
+       directorios:
+
+       /       Directorio raiz. Donde comienza el árbol de direc -
+               de torios.
+
+       /bin    Binarios esenciales en modo monousuario para repara
+                       ción y arranque.
+
+       /boot   Fichero de inicio (núcleo), y otros ficheros de
+                       carga. 
+                       
+       /dev    Ficheros de dispositivos
+
+
+       /etc    Ficheros de configuración de la máquina, en los que
+                       puede haber directorios dependiendo del programa
+                       que contenga los ficheros de configuración. Algunos
+                       programas guardarán sus ficheros de configuración en
+                       /etc o /usr/etc (que podrían ser enlaces)
+     
+       /etc/skel
+               Guardará el "esqueleto", que tendrá en común todo
+               nuevo usuario que se cree.
+
+       /etc/X11
+               Ficheros de configuración del sistema X11.
+
+       /home   Directorio donde se guardarán los usuarios.
+       
+
+       /lib    Bibliotecas compartidas (shared) o librerías
+                       dinámicas, necesarias para el funcionamiento
+                       del sistema.
+
+       /mnt    Directorio sobre el que se montarán las sistemas
+                       de ficheros.
+
+       /proc   Información acerca del estado del núcleo.
+       
+
+       /sbin   Directorio que contiene comandos, sólo ejecutables
+                       para el SuperUsuario
+
+       /tmp    Este directorio contiene  ficheros  temporales  que
+               pueden  borrarse  sin previo aviso. o durante el 
+               arranque del sistema.
+
+       /usr    Normalmente,  este  directorio  se  monta desde una
+               partición  separada.  Debería  contener   solamente
+               datos  compartibles  de  sólo lectura, de forma que
+               pueda ser montado  por  varias  máquinas  que  usen
+               Linux.
+
+       /usr/X11R6
+               El sistema X-Window, versión 11 distribución 6.
+
+       /usr/X11R6/bin
+               Binarios pertenecientes al sistema X11R6 (X Versión
+               11, revisión 6)
+
+       /usr/X11R6/lib
+               Bibliotecas de programas (librerías) asociadas a los
+               binarios.
+
+       /usr/X11R6/lib/X11
+               Varios ficheros de distinta utilización para las X
+
+       /usr/X11R6/include/X11
+               Ficheros de cabecera, necesarios para la compilación
+               de las mismas X, o para cualquier otro programa
+               que quieras compilar.
+
+       /usr/bin
+               Binarios para el funcionamiento del sistema, deberán
+               de estar aquí todos aquellos programas que puedan
+               usar los usuarios, EXCEPTO los programas que sean del
+               administrador, que debieran estar en /usr/sbin
+        
+       /usr/bin/X11
+               Binarios de las X11, generalmente enlace a /usr/X11R6
+
+       /usr/dict
+               Diccionarios de palabras para distintos correctores or-
+               tográficos.
+
+       /usr/etc
+               Directorio donde se guardan los ficheros de configuración
+               de los distintos programas, los programas que funcionen
+               en /usr/local/bin, tendrán, generalmente su configuración
+               en /usr/local/etc
+
+       /usr/include
+               Ficheros de cabecera para el compilador C.
+
+       /usr/include/X11
+               Ficheros de cabecera para el compilador C y el sistema 
+               X-Windows.
+
+       /usr/include/asm
+               Ficheros de cabecera que declaran algunas funciones
 de 
+               ensamblador. 
+
+       /usr/include/linux
+               Información acerca de la versión de el sistema Linux.
+               estas cabeceras son necesarias para la compilación de
+               cualquier programa.
+
+       /usr/include/g++
+               Ficheros  de  cabecera  para usar con el compilador
+               GNU C++.
+
+       /usr/lib
+               Bibliotecas de programas (libererías), y ejecutables
+               que son requeridos para el funcionamiento de algunos
+               programas.
+                     
+       /usr/lib/X11
+               Librerías para las X
+
+       /usr/lib/zoneinfo
+               Ficheros para la información de la zona horaria.
+
+       /usr/local
+               Aquí es donde van típicamente los programas que son
+               locales a la máquina.
+
+       /usr/local/bin
+               Aquí van los binarios de los programas locales a la
+               máquina.
+
+       /usr/local/doc
+               Documentación local.
+
+       /usr/local/etc
+               Ficheros de configuración instalados localmente.
+
+       /usr/local/lib
+               Aquí van los ficheros  asociados  a  los  programas
+               instalados localmente.
+
+       /usr/local/man
+               Ayudas
+
+       /usr/local/src
+               Código fuente para los programas instalados  local­
+               mente.
+
+
+       /usr/man/<locale>/man[1-9]
+               Aquellos sistemas que den cabida a varios usuarios
+               de distintas nacionalidades, podrán tener en la
+               cadena <locale>, el lenguaje al que pertenece cada
+               ayuda             
+       
+       /usr/sbin
+               Programas binarios para la administaración del sis-
+               tema
+       /usr/src
+               Ficheros fuentes (incluido el núcleo)
+
+       /usr/src/linux
+               Núcleo en código fuente
+
+       /usr/tmp
+               Directorio que contiene información temporal
+
+       /var   
+               Contenedor de información, como registros de último
+               acceso, colas de impresión, peticiones..., PIDs
+       
+
+       /var/lock
+               En este directorio se crean los  ficheros  de  blo­
+               queo.  La  convención  para nombrar los ficheros de
+               bloqueo es LCK.<device> donde <device> es el  nom­
+               bre  del dispositivo en el sistema de ficheros.  El
+               formato utilizado es el de los ficheros de  bloqueo
+               HDU  UUCP,  esto  es,  ficheros de bloqueo que con­
+               tienen un PID como un número decimal  ASCII  de  10
+               bytes, seguido por un carácter de salto de línea.
+
+       /var/log
+              Ficheros "log" misceláneos.
+
+       /var/preserve
+               Copias de seguridad del editor VI
+
+       /var/run
+              Ficheros  de  variables  de  ejecución,  como   los
+              ficheros  que contienen los identificadores de pro­
+              ceso  (PIDs)  y  la  información  de  los  usuarios
+              "logeados".  (utmp).  Los ficheros de este directo­
+              rio se suelen borrar cuando se arranca el  sistema.
+
+       /var/spool
+              Ficheros en cola para varios programas.
+
+       /var/spool/at
+              Trabajos en cola para at(1).
+
+       /var/spool/cron
+              Trabajos en cola para cron.
+
+       /var/spool/lpd
+              Trabajos en cola para su impresión.
+
+       /var/spool/mail
+              Buzones de los usuarios.
+
+       /var/spool/smail
+              Ficheros  en cola para el programa smail de dis­
+              tribución de correo.
+
+       /var/spool/news
+              Directorio de encolado para el subsistema de  noti­
+              cias.
+
+       /var/spool/uucp
+              Ficheros en cola para uucp
+
+       /var/tmp
+              Como  /tmp este directorio contiene ficheros tem­
+              porales, almacenados durante un tiempo no especifi­
+              cado.

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/kernelYsonido.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/kernelYsonido.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/kernelYsonido.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/kernelYsonido.html      3 Mar 
2012 06:14:37 -0000       1.1
@@ -0,0 +1,386 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12-20 
i686) [Netscape]">
+   <title>Compilaci&oacute;n del Kernel y el Sonido.</title>
+</head>
+<body text="#000000" bgcolor="#FF6666" link="#0000EE" vlink="#551A8B" 
alink="#FF0000">
+<a NAME="Up"></a>
+<br><a href="../tutorial.html">[
+&lt; ]</a><a href="contenidos.html">[
+|| ]</a><a href="sonido.html">[
+> ]</a>
+<h2>
+Compilar el&nbsp; N&uacute;cleo.</h2>
+
+<ul><a href="glosary.html#Compilación">Compilar</a> el n&uacute;cleo de
+Linux es, si cabe, la tarea m&aacute;s importante de todas, ya que haremos
+que el n&uacute;cleo ahorre bastante memoria, y podremos disfrutar de 
m&uacute;sica
+y sonido con nuestra tarjeta de sonido. Tambi&eacute;n podremos ver 
&iexcl;&iexcl;la
+televisi&oacute;n en Linux!!, si disponemos de la correspondiente tarjeta
+de televisi&oacute;n.
+<p>Trataremos de momento de ver cu&aacute;les son los pasos m&aacute;s
+importantes de la compilaci&oacute;n del n&uacute;cleo:
+<br>&nbsp;
+<li>
+<a href="#InstallKernel">C&oacute;mo instalar el n&uacute;cleo</a></li>
+
+<li>
+<a href="#CompilKernel">C&oacute;mo compilarlo</a></li>
+
+<li>
+<a href="#ArranKernel">C&oacute;mo arrancar con &eacute;l.</a></li>
+
+<li>
+<a href="#KernelCompilado">C&oacute;mo hacer copia de seguridad del 
n&uacute;cleo
+COMPILADO</a></li>
+
+<li>
+<a href="/usr/doc/HOWTO/translations/es/html/Kernel-Como.html">&iquest;Nuevo
+n&uacute;cleo? &iexcl;instala un parche! (requiere 
documentaci&oacute;n)</a></li>
+
+<li>
+<a href="linux_files/sonido.html">&iexcl;SONIDO
+POR FAVOR!</a></li>
+
+<br>&nbsp;</ul>
+
+<h2>
+
+<hr WIDTH="100%"></h2>
+
+<ul>
+<h2>
+<a NAME="InstallKernel"></a>C&oacute;mo instalar el n&uacute;cleo.</h2>
+
+<hr WIDTH="100%">
+<p>&iexcl;&iexcl;ATENCI&Oacute;N!!
+<br>----------
+<br><b>Tanto si eres programador, como si no</b>, has de saber que no 
podr&aacute;
+desaparecer los ficheros de cabecera del n&uacute;cleo 
(/usr/src/linux/include/),
+si en alg&uacute;n momento decides borrar el n&uacute;cleo en <a 
href="glosary.html#CodigoFuente">c&oacute;digo
+fuente</a>. (opci&oacute;n recomendada para liberar disco duro). Los ficheros
+de cabecera son utilizados continuamente para la compilaci&oacute;n de
+algunos ficheros fuentes.
+<br>-----------
+<p>Si existiera una versi&oacute;n en <b>/usr/src/linux, </b>con la que
+ya hubieras trabajado, y tuvieras alg&uacute;n n&uacute;cleo ya compilado,
+ser&iacute;a recomendable hacer una copia de seguridad, y por lo tanto
+deber&aacute; hacerla, teniendo cuidado de <b>NO</b> hacer copia de seguridad
+del <a href="glosary.html#Enlaces">acceso directo</a>, sino del directorio
+donde estuviera el n&uacute;cleo:
+<p>Ejemplo:
+<p>tar&nbsp;&nbsp;&nbsp;&nbsp; cvfz&nbsp;&nbsp;&nbsp;&nbsp; kernel-2_0_36.tgz
+<b>linux-2.0.36/</b>
+<p>Una vez que tengas el fichero comprimido, podr&aacute;s proceder a borrar
+el directorio <b>linux-2.0.36/:</b>
+<p>rm -rfv linux-2.0.36/
+<p>Tambi&eacute;n, deber&aacute;s borrar (si existiera) el fichero de enlace
+<b>linux/</b>
+<p>Posteriormente, haces copia del fichero <b>kernel-2_0_36.tgz,</b> en
+alg&uacute;n sitio, mientras se resuelve satisfactoriamente la 
compilaci&oacute;n
+de tu nuevo n&uacute;cleo.
+<p>
+<hr WIDTH="100%">
+<li>
+Si est&aacute; en .RPM</li>
+
+<br>
+<hr WIDTH="100%">
+<br>El n&uacute;cleo podemos instalarlo de varias maneras, siendo todas
+ellas de extrema facilidad. En la versi&oacute;n de reedita el n&uacute;cleo
+est&aacute; situado en el cdrom, en RedHat/RPMS con formato RPM. As&iacute;,
+podemos escribir: <b>rpm -i&nbsp; 
</b>/mnt/cdrom/RedHat<b>/RPMS/kernel*&nbsp;</b>
+y el sistema se encargar&aacute; de instalar lo necesario.
+<p>En caso de que queramos actualizar el n&uacute;cleo por uno m&aacute;s
+moderno deberemos escribir: <b>rpm -U kernel*.</b>
+<br>Para este caso, no deber&iacute;amos haber borrado el anterior.
+<br>
+<hr WIDTH="100%">
+<li>
+Si est&aacute; en .TGZ</li>
+
+<br>
+<hr WIDTH="100%">
+<br>Muy posiblemente, sea este el formato por defecto en el que nos lo
+encontremos, ya que nos lo podremos bajar as&iacute; de la mayor&iacute;a
+de las direcciones de internet.
+<p>Si tenemos el n&uacute;cleo en formato <b>tgz</b> &oacute; <b>tar.gz</b>,
+tenemos que copiar el mismo en <b>/usr/src</b>, y descomprirlo mediante:
+<b>tar
+xvfz kernel-x.x.xx.tgz</b>, donde las x corresponden a la versi&oacute;n
+del mismo.
+<p>Si, por ejemplo, has decido esperar a que te venga en alg&uacute;n CD-ROM,
+te recordamos que no hace falta que copies el fichero .tar.gz al directorio
+/usr/src. Haz como se ense&ntilde;o en las secci&oacute;n&nbsp; "<a 
href="¡onlyfile.html#InstTGZ">C&oacute;mo
+instalar un fichero .tar.gz</a>", puedes descomprimir escribiendo:
+<br><b>tar xvfz &lt;fichero.tar.gz> -C /usr/src</b>
+<p>Una vez descomprimido, tendremos que pasar a configurarlo. Subimos al
+directorio <b>/usr/src/linux&nbsp; </b>(el directorio<b> linux </b>puede
+ser un <a href="glosary.html#Enlaces">enlace simb&oacute;lico</a> al 
n&uacute;cleo
+que arrancamos y lo haremos:
+<br><a NAME="ConfigKernel"></a>
+<br>&nbsp;
+<br>&nbsp;
+<li>
+en las X-Window con <b>make xconfig </b>(que es lo m&aacute;s 
c&oacute;modo)</li>
+
+<li>
+en un terminal con <b>make menuconfig</b></li>
+
+<li>
+o con <b>make config </b>(que es lo m&aacute;s pesado)</li>
+</ul>
+
+<p><br><a href="#Up">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br>&nbsp;
+<ul>
+<h2>
+<a NAME="CompilKernel"></a>C&oacute;mo compilar el n&uacute;cleo.</h2>
+<a href="#ConfigKernel">Una vez que tengamos CONFIGURADO el n&uacute;cleo,</a>
+s&oacute;lo bastar&aacute; con seguir los pasos que nos indican al salir
+de la instalaci&oacute;n y que son b&aacute;sicamente:
+<p><b><font color="#FF0000">make dep</font></b>
+<ul>
+<li>
+Genera las dependencias.</li>
+</ul>
+<b><font color="#FF0000">make clean</font></b>
+<ul>
+<li>
+Limpia ficheros basura.</li>
+</ul>
+<b><font color="#FF0000">make bzImage</font></b>
+<ul>
+<li>
+Crea el n&uacute;cleo.</li>
+</ul>
+[make bzlilo]
+<ul>
+<li>
+Hace una instalaci&oacute;n autom&aacute;tica.</li>
+
+<br>Si se hace [make bzlilo] los ficheros que se copian en la ra&iacute;z:
+/vmlinuz y /System.map, deber&aacute;n ser movidos al directorio /boot
+<br>Es recomendable editar /etc/lilo.conf y volver a ejecutar lilo</ul>
+</ul>
+
+<ul>Las 2 opciones de compilaci&oacute;n son: "make zImage" y "make bzImage",
+zImage, hace que el n&uacute;cleo quede comprimido tras su creaci&oacute;n,
+pero pude ser que el n&uacute;cleo fuera demasiado extenso, para cuya 
opci&oacute;n
+se recomienda encarecidamente make bzImage.
+<p><b>Recomendaci&oacute;n: "make bzImage"</b>
+<p>Con esto, tendremos lo que es el n&uacute;cleo, ahora deberemos compilar
+los m&oacute;dulos e instalarlos, gracias que la instalaci&oacute;n de
+los m&oacute;dulos es autom&aacute;tica.
+<p><b><font color="#FF0000">make modules</font></b>
+<ul>
+<li>
+Crea los m&oacute;dulos</li>
+</ul>
+<b><font color="#FF0000">make modules_install</font></b>
+<ul>
+<li>
+Instala los m&oacute;dulos</li>
+</ul>
+<b><font color="#FF0000">depmod -e</font></b>
+<ul>
+<li>
+Fuerza la comprobaci&oacute;n.</li>
+</ul>
+
+<p><br>Y dependiendo de la velocidad de nuestro procesador tardar&aacute;
+entre: 20-25 minutos en un 486/DX4 120 Mhz, y unos 3 &oacute; 5 minutos
+en un AMD K6-II MMX a 300 Mhz (o en un Intel Pentium II MMX a 300 Mhz)
+<p>Al final el archivo <b>bzImage</b>, ser&aacute; el nuevo n&uacute;cleo
+compilado
+<br>Dicho archivo, se encuentra situado en el directorio: 
<b>/usr/src/linux/arch/i386/boot/</b></ul>
+
+<ul>Ahora que lo tienes compilado deber&aacute;s hacer:</ul>
+
+<ul>&nbsp;
+<ul>
+<li>
+<a href="#ArranKernel">Arrancar con el nuevo n&uacute;cleo compilado, 
&iexcl;&iexcl;&iexcl;y
+si funciona!!!</a></li>
+
+<li>
+<a href="#KernelCompilado">Copia de seguridad del nuevo n&uacute;cleo y
+los m&oacute;dulos</a></li>
+</ul>
+</ul>
+
+<ul>Un fichero importante, que es el que nos da la ayuda, es el 
<b>Configure.help.
+</b>En
+nuestra p&aacute;gina encontrar&aacute;s el mismo en castellano. Para que
+sea el que se utiliza, deber&aacute;s copiarlo en /usr/src/linux, hacer
+un enlace simb&oacute;lico al mismo con su mismo nombre, o renombrarlo
+con <b>mv.</b>
+<p><i><font size=+3>Para facilitar esta tarea, tenemos un script que 
est&aacute;
+en el directorio linux_files/ de este tutorial y que una vez copiado al
+directorio /usr/src/linux te facilitar&aacute; la compilaci&oacute;n del
+n&uacute;cleo.</font></i>
+<p><i><font size=+3>Pincha aqu&iacute; para ver el <a 
href="CompilaNucleo">script</a>
+de compilaci&oacute;n del n&uacute;cleo</font></i>
+<br>&nbsp;</ul>
+<a href="#Up">[ ^ ]</a>
+<hr WIDTH="100%">
+<ul>
+<h2>
+<a NAME="ArranKernel"></a>Arrancar con el nuevo n&uacute;cleo.</h2>
+
+<p><br>B&aacute;sicamente, tienes que hacer estos pasos, aunque son muy
+fundamentales, te recomendamos que leas la documentaci&oacute;n a la que
+abajo hacemos referencia.
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<ul>
+<li>
+<b>Copiar el archivo bzImage, al directorio /boot</b></li>
+
+<li>
+<b>Acceder al directorio /etc/.</b></li>
+
+<li>
+<b>Editar lilo.conf,&nbsp; para que haga una llamada al nuevo n&uacute;cleo,
+salir del fichero lilo.conf</b></li>
+
+<li>
+<b>Escribir el comando lilo. Si se te olvida escribir este comando, 
tendr&aacute;s
+problemas, y deber&aacute;s de iniciar desde el disquete (o cd-rom, v&iacute;a
+upgrade) para escribir lilo (con el disquete, porque el CD-ROM, podr&aacute;
+hacertelo autom&aacute;ticamente)</b></li>
+
+<li>
+&iexcl;&iexcl;QUE NO SE TE OLVIDE!!, CADA VEZ QUE MODIFIQUES EL FICHERO
+<b>/etc/lilo.conf,</b>
+ESCRIBIR EL COMANDO <b>lilo</b></li>
+</ul>
+
+<p><br>&iexcl;Ya esta!
+<p>Basicamente los ficheros a copiar son:
+<p>address@hidden linux]# pwd
+<br>/usr/src/linux
+<br>address@hidden linux]# cp System.map /boot
+<br>address@hidden linux]# cp arch/i386/boot/bzImage /boot
+<br>address@hidden linux]# cp vmlin* /boot
+<br>address@hidden linux]# joe /etc/lilo.conf
+<br>address@hidden linux]# lilo
+<p>El fichero lilo.conf, ha de quedar algo as&iacute; como:
+<br>&nbsp;
+<p>[ Ctrl] + [Alt] + [Supr]
+<p>&iexcl;&iexcl;&iexcl;&iexcl; Y suerte !!!!
+<br>&nbsp;
+<p><b><font size=+2>Documentaci&oacute;n al respecto:</font></b>
+<br><font size=+2><a 
href="/usr/doc/HOWTO/translations/es/Kernel-Como">/usr/doc/HOWTO/translations/es/Kernel-Como</a></font>
+<br><font size=+2>/<a 
href="/usr/src/linux/Documentation">usr/src/linux/Documentation/</a></font>
+<p>&iexcl;TE RECORDAMOS!
+<br>El nuevo n&uacute;cleo compilado se hallar&aacute; en 
<b>/usr/src/linux/arch/i386/boot</b>,
+con el nombre<b> bzImage.</b> Para poder arrancar con &eacute;l se recomienda
+copiarlo en <b>/boot</b>, luego editaremos <b>/etc/lilo.conf</b>, con lo
+que pondremos el nuevo n&uacute;cleo como la imagen (<i>image</i>)de arranque
+de Linux al leer <b><a href="lilo.conf.sample.txt">lilo.conf</a></b>
+<br>Tras esto, arrancaremos <b>lilo </b>como root, y se instalar&aacute;
+el nuevo n&uacute;cleo . No hacer este paso, supondr&aacute; no arrancar
+con el nuevo n&uacute;cleo.
+<p>&Eacute;sta es la forma m&aacute;s sencilla de instalar el nuevo 
n&uacute;cleo.
+Existen otras, como crear una imagen para un disquete mediante <b>make
+zdisk </b>o tambi&eacute;n <b>make zlilo. </b>Para m&aacute;s 
informaci&oacute;n
+te remitimos a:
+<p><a 
href="/usr/doc/HOWTO/translations/es/Kernel-Como">/usr/doc/HOWTO/translations/es/Kernel-Como</a>
+<br>/<a 
href="/usr/src/linux/Documentation">usr/src/linux/Documentation/</a></ul>
+
+<p><br><a href="#Up">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="KernelCompilado"></a>
+<h1>
+&iexcl;&iexcl;&iexcl;Hacer copia del nuevo n&uacute;cleo COMPILADO!!!</h1>
+&nbsp;
+<blockquote>Muchos Usuarios, tras la compilaci&oacute;n no hacen copia
+de seguridad del nuevo n&uacute;cleo compilado, grave error, ya que si
+en alg&uacute;n caso perdi&eacute;ramos la informaci&oacute;n de la 
partici&oacute;n,
+tambi&eacute;n perder&iacute;amos ese n&uacute;cleo, y las horas de trabajo
+que hubi&eacute;ramos trabajado en &eacute;l.
+<p>Para hacer copia de seguridad deber&iacute;amos hacer
+<p>[Ejemplo]
+<br>(Para este ejemplo hemos usado la versi&oacute;n 2.2.1 del kernel)
+<ul>
+<li>
+mkdir /root/miKERNEL</li>
+
+<br>(Creamos un directorio, con una peque&ntilde;a estructura de directorios
+para recordar donde colocar cada cosa)
+<li>
+mkdir /root/miKERNEL/boot</li>
+
+<li>
+mkdir /root/miKERNEL/etc</li>
+
+<li>
+mkdir /root/miKERNEL/lib</li>
+
+<li>
+mkdir /root/miKERNEL/lib/modules</li>
+
+<li>
+(Crear&iacute;amos un fichero de texto con informaci&oacute;n adicional
+para nosotros, pero lo comentar&iacute;amos como si se lo fu&eacute;ramos
+a dar a alguien que no tiene ni idea de Linux)</li>
+</ul>
+
+<ul>
+<li>
+cp -v /boot/<b><font color="#FFFFFF">bzImage</font></b> 
/<b>root/miKERNEL/boot</b></li>
+
+<li>
+cp -v /boot/<b><font color="#FFFFFF">System.map</font></b> 
/<b>root/miKERNEL/boot</b></li>
+
+<li>
+cp -v /boot/<b><font color="#FFFFFF">vmlinu*</font></b> 
/<b>root/miKERNEL/boot</b></li>
+
+<li>
+cp -v /boot/<b>kernel.h</b> /<b>root/miKERNEL/boot</b></li>
+
+<li>
+cp -v /<font color="#330033">etc</font>/<font 
color="#66FFFF">conf.modules</font>
+/<b>root/miKERNEL/etc</b></li>
+
+<li>
+cp -v /<font color="#330033">etc</font>/<font 
color="#CCFFFF">lilo.conf</font><b>/root/miKERNEL/etc</b></li>
+
+<li>
+cp -v /<font color="#330033">etc</font>/<font 
color="#CCFFFF">isapnp.conf</font><b>/root/miKERNEL/etc</b></li>
+
+<li>
+cp -Rv /lib/modules/2.2.1/* <b>/root/miKERNEL/modules/2.2.1</b></li>
+
+<li>
+cp -v /usr/src/linux/[tu fichero de configuraci&oacute;n del n&uacute;cleo]<b>
+/root/miKERNEL</b></li>
+</ul>
+
+<ul>
+<li>
+cd /root</li>
+</ul>
+
+<ul>
+<li>
+tar cvfz <b>miKernel-686-2_2_1.tgz </b>miKERNEL/</li>
+</ul>
+
+<p><br>Ahora, copia el fichero <b>miKernel-686-2_2_1.tgz,</b> copialo en
+alg&uacute;n disquete o en alguna partici&oacute;n de copias de seguridad
+o en los dos sitios, o donde quieras.!
+<p>:-)
+<p><b><font size=+1>Leer:</font></b>
+<p><b><font size=+1>man modprobe</font></b></blockquote>
+<a href="#Up">[ ^ ]</a>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/lilo.conf.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/lilo.conf.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/lilo.conf.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/lilo.conf.sample.txt    3 Mar 
2012 06:14:37 -0000       1.1
@@ -0,0 +1,26 @@
+boot = /dev/hda                        # Disco maestro de Inicio.
+timeout = 50                   # Decimas de segundo.
+prompt                         # Mostrar el "LILO"
+  message = /boot/mensaje.txt  # Mensaje antes de cargar LILO.
+  default = linux              # Sistema Operativo por defecto. (etiqueta)
+  vga = normal                 # Modo gráfico de la carga.
+  read-only                    
+map=/boot/map                  # Mapa de carga
+install=/boot/boot.b           # Inicio de carga
+
+image = /boot/bzImage          # Núcleo de Linux (y carga)
+  label = linux                        # Etiqueta por la que será conocido al 
LILO,
+  root = /dev/hda3             # Ubicación en el disco duro.
+
+other = /dev/hda1              # Ubicación (y carga) de otro sistema NO LINUX
+  label = win                  # Etiqueta por la que será conocido al LILO.
+  table=/dev/hda               # Tabla de ficheros.
+#
+# En unacompilación hemos renombrado /boot/bzImage, por /boot/bzImageOLD
+# hemos hecho estos cambios en /etc/lilo.conf, y hemos ejecutado "lilo", para
+# poder usar este núclo en caso de que el núcleo de linux recien compilado
+# /boot/bzImage, no funcionara.
+#
+image = /boot/bzImageOLD       # Núcleo de Linux VIEJO (fich. bzImageOLD)
+  label = oldlinux             # Etiqueta para reconocerlo/cargarlo
+  root = /dev/hda3             # Ubicación

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux1.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux1.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux1.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux1.html     3 Mar 2012 
06:14:37 -0000       1.1
@@ -0,0 +1,776 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.10 
i586) [Netscape]">
+   <title>Gesti&oacute;n b&aacute;sica de Linux</title>
+</head>
+<body text="#000000" bgcolor="#FFFFCC" link="#0000EE" vlink="#551A8B" 
alink="#FF0000">
+
+<h4>
+<a NAME="EnTutorial"></a></h4>
+
+<h4>
+<a href="../tutorial.html#Comienzo">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]</h4>
+
+<h1>
+Nunca hab&iacute;a estado antes en linux</h1>
+<a href="coment.html">Comentario</a>
+<h2>
+Lo b&aacute;sico</h2>
+
+<ul>
+<li>
+<font size=+1><a href="comodines.htm">Nombres, comodines Y 
path...</a></font></li>
+
+<li>
+<font size=+1><a href="#MFicheros">Mostrar ficheros.</a></font></li>
+
+<li>
+<font size=+1><a href="#MFicherosPero">Distinci&oacute;n de 
ficheros.</a></font></li>
+
+<li>
+<font size=+1><a href="#MFicherosColor">Distinci&oacute;n de ficheros CON
+COLORES.</a></font></li>
+</ul>
+---
+<h2>
+Algo de gesti&oacute;n</h2>
+
+<ul>
+<li>
+<font size=+1><a href="#CDirectorios">Creando 
ficheros/directorios</a></font></li>
+
+<li>
+<font size=+1><a href="#BDirectorios">Borrando 
ficheros/directorios</a></font></li>
+
+<li>
+<font size=+1><a href="#RDirectorios">Renombrando 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="#MovDirectorios">Moviendo 
ficheros/directorios.</a></font></li>
+
+<li>
+<font size=+1><a href="#AccediendoDir">Accediendo 
directorios/ficheros.</a></font></li>
+</ul>
+---
+<h2>
+Algo de Limpieza</h2>
+
+<ul>
+<li>
+<font size=+1><a href="#Clear">Limpiando la pantalla.</a></font></li>
+</ul>
+---
+<h2>
+&iquest;Bueno,&nbsp; y ahora, que pasa con mi CD-ROM,&nbsp; disquetera,&nbsp;
+y Discos Duros?</h2>
+
+<ul>
+<li>
+<font size=+1><a href="#MontDEV">Montando unidades....</a></font></li>
+
+<li>
+<font size=+1><a href="#AccDEV">Accediendo a unidades....</a></font></li>
+
+<li>
+<font size=+1><a href="#cpDEV">Copiando, moviendo, borrando, ficheros de
+unidades...</a></font></li>
+
+<li>
+<font size=+1><a href="#DesmonDEV">DESMONTANDO UNIDADES....</a></font></li>
+</ul>
+----
+<br>&iquest;Y... hay alguna forma de hacer que todo esto sea mas f&aacute;cil?
+<ul>
+<li>
+<a href="#Automatizar">Configurando tu fichero de usuario: .bashrc, y 
.bash_profile</a></li>
+
+<li>
+<a href="#MidnightCommader">Tambi&eacute;n podr&aacute;s utilizar (si lo
+has instalado) el MC de Linux</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<br>---
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MFicheros"></a>
+<h2>
+Mostrando Ficheros</h2>
+
+<ul>El comando que se utiliza en Unix, y por lo tanto en Linux para mostrar
+los ficheros es el comando: "<a href="glosary.html#ls">ls</a>", tambi&eacute;n
+se utiliza "dir", pero no es mas que una copia de "<a 
href="glosary.html#ls">ls</a>",
+con otro nombre.
+<p>Para hacerte una demostraci&oacute;n haremos lo siguiente:
+<ol>
+<li>
+Si est&aacute;s en LYNX:</li>
+</ol>
+Pulsa [alt] y sin soltar, pulsa ahora [F2], para regresar tendr&aacute;s
+que pulsar [alt] y sin soltar [f1]
+<ol>
+<li>
+Si estas en <a href="glosary.html#X-Window">XWindow</a>:</li>
+</ol>
+Pulsa [control], sin soltar ahora tambi&eacute;n [alt], y ahora sin soltar
+ninguna de las dos teclas pulsa [F3], para regresar pulsa [alt] y [F7]
+<p>* Suelta todas las teclas que tengas presionadas.
+<p>Escribe en <a href="glosary.html#login">login </a>'<a 
href="glosary.html#root">root</a>'
+y en <a href="glosary.html#password">password </a>, la clave de acceso
+que tengas.(Si procede)
+<p><img SRC="login_img.gif" height=424 width=585>
+<h4>
+Una vez iniciada la sesi&oacute;n;</h4>
+escribe:
+<br>address@hidden /root]$ ls
+<p>Ver&aacute;s los ficheros que est&eacute;n en ese directorio. Esos ficheros
+pueden ser:
+<p>ejecutables (binarios), de texto, directorios, scripts (conjunto de
+comandos dentro de un fichero de texto).</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MFicherosPero"></a>
+<h2>
+Has visto los ficheros... pero... Bien, ahora te preguntar&aacute;s 
&iquest;qu&eacute;
+ficheros son binarios, cu&aacute;les son directorios...?</h2>
+
+<ul>Bueno, pues para saber cuales son cuales, puedes escribir <a 
href="glosary.html#vdir">vdir</a>,
+en vez de <a href="glosary.html#ls">ls</a>, entonces ver&aacute;s 
informaci&oacute;n
+muy rara ajustada a la izquierda de la pantalla (como -rw-r--r--), eso
+son los <a href="glosary.html#atributos">atributos </a>del fichero (no
+entraremos en detalles), despu&eacute;s un nombre, puede que 'root', eso
+indicar&aacute; a quien pertenece el fichero/directorio, despu&eacute;s
+otra vez 'root', eso es el grupo al que pertenece, tras varios espacios
+podr&aacute;s ver ficheros como:
+<br><b>*noseque </b>(eso es bien un binario o un script, ambos son ejecutables)
+<br><b>otronombre </b>(eso podr&aacute; ser un fichero de texto, o binario,
+pero no ejecutable, podr&aacute; ser de texto si lleva una extensi&oacute;n
+identificativa, como: otronombre.txt, o otronombre.doc, etc., etc...)
+<br><b>directorio/ </b>(los conocer&aacute;s porque siempre llevan 
detr&aacute;s
+la barra identificativa: '/')
+<p>(Si alguna vez te encuentras con un fichero y no sabes que es, escribe:
+<b>file
+</b>nombre_del_fichero)
+<p>Claro, que esta no son formas de ver los ficheros, &iquest;habr&iacute;a
+alguna forma de identificarlos de un vistazo?
+<p>USAR COLORES... continua el tutorial...</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MFicherosColor"></a>
+<h2>
+Mostrando los ficheros en color</h2>
+
+<ul>Para ver los ficheros con colores usa:
+<br>address@hidden /root]$ <a href="glosary.html#ls">ls </a>--color -s
+<br>Adem&aacute;s, el <a href="glosary.html#Parametro">par&aacute;metro
+</a>"-s",
+mostrar&aacute; el tama&ntilde;o del fichero ("size" en ingl&eacute;s)
+<p>Pero... claro, dir&aacute;s que si siempre hay que escribir eso... (yo
+tambi&eacute;n), apaga y v&aacute;monos, porque aunque hay que reconocer
+que es bonito, hay que escribir muchas letras, incluso hasta para uno que
+sepa MECANOGRAF&Iacute;A.
+<p>Una de las muchas formas que tiene Linux para ahorrar tiempo es usando
+un '<a href="glosary.html#alias">alias</a>', de forma que cuando hagamos
+referencia al <a href="glosary.html#alias">alias</a>, se escriba el comando
+que queramos con todos sus par&aacute;metros, este es el ejemplo que tienes
+que aprender (todos los alias hacen referencia a la
+<a href="glosary.html#shell">shell
+</a>'<a href="glosary.html#bash">bash</a>',
+que es la que seguramente tengas por defecto):
+<p>address@hidden /root]$ alias ls='ls --color -s'
+<p>ahora, escribe ls
+<p>address@hidden /root]$ ls
+<p>&iexcl;&iexcl;SORPRESA!!
+<p><img SRC="ls_conYsin_alias.gif" height=424 width=585>
+<p>Puedes hacer que cada vez que arranques se vea en colores tu terminal,
+pero eso se ver&aacute; en el tema de <a href="#Automatizar">Configurando
+tu fichero de usuario: .bashrc, y .bash_profile</a>
+<p>Pero si lo que quieres es que esa (y otras) opciones puedan disponerlas
+todos los usuarios deber&aacute;s configurar el fichero /etc/bashrc
+<br>&nbsp;</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CDirectorios"></a>
+<h2>
+Creando Directorios</h2>
+
+<ul>Un directorio, es un archivo el cual tiene la propiedad de poder almacenar,
+ficheros y directorios.
+<p>En Linux existe una forma muy sencilla de crear directorios. Para ello,
+simplemente has de escribir <a href="glosary.html#mkdir">mkdir&nbsp; 
</a><u>NombreDirectorio,</u>
+por ejemplo: <a href="glosary.html#mkdir">mkdir </a><u>carlos</u>&nbsp;
+crear&aacute; un directorio llamado <u>carlos</u>. Un punto importante
+es recordarte que Linux es sensible a las may&uacute;sculas y no es lo
+mismo escribir <u>mkdir</u> <u>carlos</u> que <u>mkdir Carlos</u> ni 
<u>CARLOS</u>.
+Estos son directorios diferentes, y, por tanto, para acceder a ellos 
habr&aacute;s
+de escribirlo tal y como los llamaste.
+<p>Si has venido del DOS, (Y si no has venido no importa), te acordar&aacute;s
+que para crear directorios se usaba el comando: md, que es el acr&oacute;nimo
+de <b>M</b>ake <b>D</b>irectory (MD), y dir&aacute;s que es mas corto,
+pues te recordamos que en Linux existe 'alias', as&iacute; que usando el
+alias de la forma siguiente podr&aacute;s obtener la misma comodidad
+<p>alias md='mkdir'
+<p>Ahora para crear el directorio <u>carlos.</u> puedes hacer:
+<p><u>mkdir carlos</u>
+<br>o tambi&eacute;n
+<br><u>md carlos</u>
+<p>Prueba (dependiendo si est&aacute;s en un terminal (pantalla de texto)
+o en X-Window) de la forma expresada en <a href="#MFicheros">Mostrar 
ficheros</a>
+<br>y prueba a crear los directorios: Amigos, Familia, Banco, Internet,
+Trabajos, Estudios...
+<p>Prueba: a crear tanto con mkdir o con md, es decir crea <u>mkdir Amigos</u>,
+<u>md
+Familia...</u>
+<br>---
+<h4>
+FICHEROS</h4>
+Los ficheros o archivos, tienen la propiedad de poder almacenar en su interior
+datos, de tipo texto o binarios, en este caso, nos ocuparemos del primer
+caso.
+<p>Para crear FICHEROS DE TEXTOS, como no, nuestras queridas cartas...
+<p>Aqu&iacute; puedes utilizar, VARIOS procesadores de textos, entre todos
+ellos destacan estos tres:
+<br>&nbsp;
+<ul>
+<li>
+vi</li>
+
+<li>
+emacs</li>
+
+<li>
+joe</li>
+</ul>
+Te aconsejamos que para empezar uses el JOE, y una vez que tengas experiencia,
+te vayas introduciendo tanto en vi como en vim (el editor vi <b>M</b>ejorado)
+o emacs. Particularmente, el que mas me gusta a mi es el emacs, pero cuando
+s&oacute;lo tengo que escribir un simple documento de Texto, uso el joe,
+que ademas es el que utilizo para crear 80 de cada 100 documentos.
+<p>Si no tienes el JOE instalado haz esto (deber&aacute; estar en formato
+.RPM) (ejemplo para las distribuciones: SuSE, RedHat o GLHis) para instalarlo
+desde el CD-ROM
+<br>&nbsp;
+<ol>
+<li>
+mount -t iso9660 /dev/cdrom /mnt/cdrom</li>
+
+<li>
+rpm -i /mnt/cdrom/RedHat/RPMS/joe*.rpm</li>
+
+<ol>
+<li>
+(Si no fuera la distribuci&oacute;n de RedHat, pero por ejemplo la 
distribuci&oacute;n
+fuera en paquetes .rpm, podr&iacute;as poner...)</li>
+</ol>
+
+<li>
+rpm -i <b>`</b>find /mnt/cdrom -iname joe*.rpm<b>`</b></li>
+
+<li>
+umount /dev/cdrom</li>
+</ol>
+
+<ul>
+<li>
+Si lo tuvieras en formato .TGZ o TAR.GZ (que es lo mismo) (En el caso de
+que usaras SlackWare), deber&aacute;s hacer los casos 1 y 3, pero en el
+caso 2 haz:</li>
+
+<li>
+cd /</li>
+
+<li>
+tar xvfz joe*.tgz</li>
+
+<li>
+y Leete el fichero INSTALL, <b>en el caso de que se hubiera creado alg&uacute;n
+directorio nuevo</b></li>
+</ul>
+
+<p><br>Si no te aclaras, tambi&eacute;n podr&aacute;s meter el CD-ROM y
+reiniciar como cuando instalaste por primera vez Linux y elegir la 
opci&oacute;n
+(Upgrade=Actualizar) y seleccionar el paquete JOE.
+<p>El joe, es un SENCILLISIMO editor de textos, al estilo WordStar de 
Microsoft,
+o Editor de Digital Research, algo mas potente, pero hay que buscar mucho
+para ver todas sus cualidades.
+<p>Ejemplos:
+<p>* Crear un documento de texto
+<p>joe carta.txt
+<p>* Salir Guardando el documento
+<p>[Ctrl]+[K]+[X] &lt;--> Recuerda que significa: Pulsar [Ctrl], sin soltarla
+pulsar [K], y sin soltar ninguna de las dos, pulsar [X]
+<p>* Salir SIN Salvar el documento
+<p>[Ctrl]+[C]
+<p>Preguntar&aacute; si desea PERDER LOS CAMBIOS, para lo que habr&aacute;
+que pulsar: [Y], o [N] <u>PARA NO PERDER LOS CAMBIOS</u>
+<p>* AYUDA DE JOE
+<p>[Ctrl]+[K]+[H]
+<p>Activa la visualizaci&oacute;n de la ayuda
+<p>[Ctrl]+[K]+[H]
+<p>Desactiva la visualizaci&oacute;n de la ayuda
+<p>(En ti queda aprender el resto)
+<p>Para obtener m&aacute;s informaci&oacute;n puedes escribir desde un
+terminal: man joe, si lo que quieres es informaci&oacute;n a cerca del
+joe, man vi, o man vim, o man emacs, dependiendo de la informaci&oacute;n
+de desees obtener.
+<br>&nbsp;</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="BDirectorios"></a>
+<h2>
+Borrando Directorios (CUIDADO!)</h2>
+
+<ul>Para borrar directorios en Linux, debes usar el comando: <u>rmdir 
NombreDirectorio</u>,
+pero te aconsejamos que uses un alias para poder utilizar tambi&eacute;n
+rd, (si no te acuerdas mira&nbsp; <a href="#CDirectorios">Trabajando con
+ficheros... crear directorios (y ficheros de texto, por ejemplo)</a>) .
+<p>Te recuerdo que la estructura de directorios de Linux es muy importante,
+por lo que NO borres ning&uacute;n directorio que no este bajo tu &aacute;rbol
+de directorios. Por ejemplo, yo podr&eacute; borrar todo lo que este bajo&nbsp;
+/home/carlos, porque me pertenecen esos ficheros, pero no podr&eacute;
+borrar los ficheros que est&eacute;n fuera de &eacute;l, entre otras cosas
+porque a menos que sea el superusuario (root) no me dejar&aacute;n por
+los permisos.
+<br>&nbsp;</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="RDirectorios"></a>
+<h2>
+Renombrando Directorios</h2>
+
+<ul>El comando que se utiliza para RENOMBRAR, es el mismo que se utiliza
+para MOVER, que es: 'mv'
+<p>Para cambiar el nombre del directorio <u>carlos</u> a <u>javier</u>,
+habr&aacute; que escribir:
+<p>mv carlos javier
+<p>El mismo comando se usa para renombrar tanto FICHEROS como DIRECTORIOS.
+<br>&nbsp;</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MovDirectorios"></a>
+<h2>
+Moviendo Directorios ( MUCHO CUIDADO...)</h2>
+
+<ul>Para mover ficheros, o directorios usa el comando mv:
+<p>Por ejemplo queremos MOVER el fichero: 'carta_a_pepe.txt' a 
/home/javier/cartas_a_amigos/,
+pues escribimos:
+<p>mv&nbsp;&nbsp; carta_a_pepe.txt&nbsp;&nbsp; /home/javier/cartas_a_amigos/
+<p>PERO, TAMBI&Eacute;N CON EL MISMO COMANDO SE PUEDE MOVER UN DIRECTORIO,
+por eso, es aconsejable no utilizar los comodines cuando EST&Eacute;S COMO
+ROOT, y peor, si est&aacute;s en la ra&iacute;z de directorios '/', (Que,
+a prop&oacute;sito, cuando creemos los perfiles de usuario, siempre 
deber&aacute;s
+entrar como el usuario creado, y usar s&oacute;lo ROOT, para acceder a
+las unidades...)
+<p>Por ejemplo:
+<p>mv&nbsp; <b>cartas_a_amigos/&nbsp;</b>&nbsp; /&nbsp; (mueve 
"cartas_a_amigos"
+a la ra&iacute;z)
+<br>&nbsp;
+<p>Si alguna vez estas en la ra&iacute;z, NI SE TE OCURRA hacer (Estando
+como root):
+<p>mv&nbsp; *&nbsp; <b>/alg&uacute;n_directorio</b>
+<p>(ls / )
+<p>Ya que en ese momento TE ESTAS CARGANDO EL SISTEMA, y tendr&aacute;s
+que entrar con un disco de mantenimiento, adem&aacute;s de lo sufrido que
+supone su (nueva) colocaci&oacute;n.
+<br>&nbsp;
+<br>&nbsp;</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="AccediendoDir"></a>
+<h2>
+Accediendo a directorios, y &iquest;En que directorio estoy?</h2>
+
+<ul><a href="glosary.html#cd">cd </a><u>NombreDirectorio</u> &lt;&lt;-
+para acceder a un directorio
+<p><u>pwd</u> &lt;-Te dir&aacute; tu ruta actual
+<p>PWD, es el mismo comando que el comando de Unix para mostrar la ruta
+"CWD", hace un: "Current Work Directory"
+<p><b>cd</b>
+<br>Sin par&aacute;metros regresara a "casa"
+<br>(Este comando, hace lo mismo que si escribes: "<b>cd ~</b>", o "<b>cd
+$HOME</b>", y de hecho, esto es muy utilizado para regresar a cualquier
+directorio del due&ntilde;o que en ese momento est&eacute; usando el ordenador,
+por ejemplo si quisiera ir al directorio /home/javier/programaci&oacute;n/C,
+y estuviera como el usuario "javier", escribir&iacute;a (independientemente
+de yo donde estuviera) cd ~/programaci&oacute;n/C, ahorrando evidentemente
+tener que escribir la sentencia "/home/javier")
+<p><b>cd /</b>
+<br>Independientemente del directorio donde te encuentres ira directamente
+a la ra&iacute;z
+<p><b>cd ..</b>
+<br>Acceder&aacute; a la carpeta/directorio inmediatamente anterior
+<ul>Como esto puede confundir a errores explicaremos.
+<p>El &aacute;rbol de directorios se puede ver como:
+<ul>
+<li>
+Una ra&iacute;z:</li>
+
+<br>Por lo que al directorio/carpeta '/' se le considera la ra&iacute;z,
+la superficie, y cada vez que accedes a otro directorio con <b>cd directorio,
+</b>te
+est&aacute;s alejando de la ra&iacute;z, y estas profundizando "un nivel",
+por lo que al escribir cd .. estar&aacute;s subiendo un nivel.
+<br>&nbsp;
+<li>
+<b>Un &aacute;rbol:</b></li>
+</ul>
+
+<ul>Al igual que en el anterior la carpeta/directorio '/' se le considera
+el nacimiento del &aacute;rbol y cada vez que accedes a un directorio,
+estas subiendo a las ramas del &aacute;rbol, por lo que escribir cd ..,
+significa bajar un directorio, este t&eacute;rmino es el mas utilizado,
+pero de todas formas es conveniente que ambas cosas "subir un nivel" o
+"bajarlo un directorio" significan lo mismo.
+<br>&nbsp;
+<li>
+EJEMPLO:</li>
+
+<br>Las KDE, consideran que acceder a un directorio es "bajar un nivel",
+y cambiar de directorio m&aacute;s pr&oacute;ximo a la ra&iacute;z lo considera
+como "subir un nivel", por lo que est&aacute; considerando la estructura
+como: &iquest;una ra&iacute;z o un &aacute;rbol?
+<br>-respuesta una ra&iacute;z-</ul>
+</ul>
+</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%"><a NAME="Clear"></a>
+<h2>
+Limpiando la pantalla</h2>
+
+<ul>clear &lt;--> Limpia la pantalla
+<p>(intenta hacer un alias para cls)
+<p>Limpiar la pantalla no requiere par&aacute;metros algunos, por lo que
+es bastante f&aacute;cil de recordar, clear significa en ingl&eacute;s
+"limpiar", mientras que cls, es el acr&oacute;nimo ingl&eacute;s de "Clear
+Screen", "Limpiar la pantalla"
+<br>&nbsp;
+<br>&nbsp;</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MontDEV"></a>
+<h2>
+Montando Unidades</h2>
+
+<ul>Esto es una de las cosas m&aacute;s importantes. Te preguntas 
&iquest;montar?.
+Pues s&iacute;, montar.
+<p>Un sistema de ficheros, no es m&aacute;s que una <a 
href="glosary.html#Particion">partici&oacute;n</a>
+en tu disco duro (que puede ser &uacute;nica) la cual tiene un <a 
href="glosary.html#Formato">formato</a>,
+y el formato es la forma de colocar los archivos.
+<br>&nbsp;
+<p>Por lo que para que un Sistema Operativo solo entienda su sistema de
+ficheros, como por ejemplo pueden ser: Windows, MS-DOS, OS/2, etc., etc...
+cuando se carga el sistema, autom&aacute;ticamente tambi&eacute;n cargan
+su sistema de ficheros, y trabajan con su <a 
href="glosary.html#Formato">sistema
+de ficheros</a>, &uacute;nica y exclusivamente (hasta que no se le 
a&ntilde;adan
+m&oacute;dulos al kernel o n&uacute;cleo del Sistema Operativo).
+<p>Linux, carga autom&aacute;ticamente su Sistema de ficheros, al cargar,
+se le denomina "montar", en ese momento, al igual que han hecho otros sistemas
+operativos puedes empezar a trabajar con tu sistema de ficheros, pero Linux,
+al contrario que otros sistemas puede adem&aacute;s acceder a Sistemas
+de Archivos que no son suyos, es decir, puedes desde Linux, acceder a tu
+partici&oacute;n de MS-DOS, Windows, OS/2, etc., etc. Es m&aacute;s, puedes
+acceder a tu disquete o disquetes que te hayan pasado que est&eacute;n
+formateados en otros sistemas, por ejemplo de un Mac.
+<br>&nbsp;
+<br>&nbsp;
+<table BORDER COLS=2 WIDTH="50%" NOSAVE >
+<tr NOSAVE>
+<td NOSAVE>ext2</td>
+
+<td>Navita de Linux</td>
+</tr>
+
+<tr>
+<td>NFS</td>
+
+<td>Network File System</td>
+</tr>
+
+<tr>
+<td>msdos</td>
+
+<td>Sistemas D.O.S.</td>
+</tr>
+
+<tr>
+<td>vfat</td>
+
+<td>Sistemas Windows</td>
+</tr>
+
+<tr>
+<td>iso9660</td>
+
+<td>Sistema de ficheros de CD-ROMs</td>
+</tr>
+
+<tr>
+<td><b>auto</b></td>
+
+<td><b>Intenta montar cualquier Sistema</b></td>
+</tr>
+
+<tr>
+<td>(m&aacute;s sistemas de ficheros)</td>
+
+<td>(m&aacute;s sistemas operativos)</td>
+</tr>
+</table>
+
+<p>Para montar tu disquete haz:
+<br>(En este caso, deber&aacute;s asegurarte de que existe el directorio
+/mnt/floppy, si no existiera cr&eacute;alo usando: mkdir /mnt/floppy)
+<br>&nbsp;
+<ol>
+<li>
+introduce el disquete en la disquetera</li>
+
+<li>
+escribe: mount -t vfat /dev/fd0 /mnt/floppy</li>
+
+<li>
+escribe cd /mnt/floppy</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<p>Ahora est&aacute;s viendo tu disquete.
+<p>"mount -t vfat"
+<br>&nbsp;
+<ul>
+<li>
+mount: es el comando.</li>
+
+<li>
+-t&nbsp; vfat: es la opci&oacute;n para montar la virtual fat de Windows</li>
+
+<li>
+/dev/fd0: en /dev/ se guardan los dispositivos (devices en ingl&eacute;s)
+y fd0, es el disco floppy 0, si tuvieras otro disco floppy deber&iacute;as
+escribir fd1, fd2...</li>
+
+<li>
+/mnt/floppy: son directorios, /mnt/ es donde se deben montar TODOS los
+sistemas de archivos, /floppy, es dentro del directorio /mnt/ donde vamos
+a montar el disquete.</li>
+</ul>
+Por ejemplo para montar el cdrom:
+<br>&nbsp;
+<ul>
+<li>
+mount -t iso9660 /dev/cdrom /mnt/cdrom &lt;-> has montado el cdrom, a 
trav&eacute;s
+del est&aacute;ndar iso9660 (que es general a casi todos los cdroms)</li>
+
+<li>
+cd /mnt/cdrom &lt;-> para acceder al cdrom.</li>
+</ul>
+Para montar tu disco duro, la partici&oacute;n que tienes para, por ejemplo
+Windows
+<br>&nbsp;
+<ul>
+<li>
+mount -t vfat /dev/hda1 /mnt/win</li>
+
+<li>
+cd /mnt/win &lt;-> para acceder a la partici&oacute;n</li>
+</ul>
+Para montar tu partici&oacute;n de ms-dos
+<br>&nbsp;
+<ul>
+<li>
+mount -t msdos /dev/hda2 /mnt/dos</li>
+
+<li>
+cd /mnt/dos &lt;-> para acceder a la partici&oacute;n</li>
+</ul>
+
+<p><br>Evidentemente, como habr&aacute;s podido observar, DEBEN de existir
+los directorios win, dos, cdrom, floppy... dentro del directorio /mnt/,
+si no existieran deber&aacute;s acceder a /mnt/ y crearlos, haz:
+<br>&nbsp;
+<ul>
+<li>
+cd /mnt</li>
+
+<li>
+ls</li>
+
+<li>
+(Que existen los directorios cdrom y floppy, pues por ejemplo crea win,
+y si tienes tambi&eacute;n una partici&oacute;n del dos crea otra para
+dos)</li>
+
+<li>
+ahora ya tienes creado varios directorios dentro de /mnt/, as&iacute;,
+cuando tengas montado win, el cdrom y el disquete, para cambiar podr&aacute;s
+hacer:</li>
+</ul>
+
+<ul>
+<ol>
+<li>
+pwd (para mostrar la ruta)</li>
+
+<li>
+cd ../win (para cambiar a la partici&oacute;n de windows)</li>
+
+<li>
+cd ../floppy (para cambiar a la partici&oacute;n del disquete...</li>
+</ol>
+</ul>
+para montar tu 2&ordm; disco duro, tienes que escribir: (con formato para
+la virtual fat de Windows)
+<br>&nbsp;
+<ul>
+<li>
+mount -t vfat /dev/hdb1 /mnt/2disco</li>
+</ul>
+para montar tu 3er disco.
+<br>&nbsp;
+<ul>
+<li>
+mount -t vfat /dev/hdc1 /mnt/3disco</li>
+</ul>
+tu 4&ordm; disco
+<br>&nbsp;
+<ul>
+<li>
+mount -t vfat /dev/hdd1 /mnt/4disco</li>
+</ul>
+</ol>
+Y evidentemente como habr&aacute;s podido comprobar, hd, son las siglas
+de Hard Disk " Disco duro en ingles", a, b,c, d, son los discos, a, el
+disco maestro, b, c, y d, los discos esclavos dependientes del maestro
+y los n&uacute;meros finales son el numero de las <a 
href="glosary.html#Particion">particiones</a>.
+<p>Un disco duro, puede tener hasta 4 particiones
+<br>&nbsp;
+<ol>&nbsp;
+<ul>
+<li>
+Si tu disco duro es <a href="glosary.html#ide">IDE</a>, entonces ser&aacute;
+hdxx (hda1, hda2, hdb1, hdc1...), pero si tu disco duro es <a 
href="glosary.html#scsi">SCSI</a>,
+entonces los discos duros ser&aacute;n scxx (sca1, sca2, sca3...)</li>
+</ul>
+Si has seguido el curso hasta ahora, como te podr&aacute;s suponer, 
tambi&eacute;n
+podemos utilizar alias para facilitarnos esta tarea, por ejemplo mira:
+<a href="#Automatizar">Configurando
+tu fichero de usuario: .bashrc, y .bash_profile</a></ol>
+</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="AccDEV"></a>
+<h2>
+Accediendo a Unidades</h2>
+
+<ul>Para acceder a las <a href="glosary.html#Unidades">unidades </a>(una
+vez montadas), deber&aacute;s acceder escribiendo:
+<p>cd /mnt/[directorio que haga referencia a la unidad montada y existente
+en el directorio mnt]
+<p>Ejemplo
+<p>cd /mnt/floppy
+<p>Acceder&aacute; a tu disquete.
+<br>
+<hr WIDTH="100%">
+<br>Claro est&aacute; que si quieres hacer m&aacute;s c&oacute;modo tus
+accesos a las <a href="glosary.html#Unidades">unidades</a> puedes hacer
+un <a href="glosary.html#Enlaces">enlace simb&oacute;lico </a>desde tu
+directorio /home/[usuario] &oacute; /root/ a los directorios existentes
+en el directorio /mnt/
+<p>Lo puedes hacer f&aacute;cilmente desde <a href="glosary.html#mc">mc</a>,
+o haciendo <b>ln -s fichero_a_enlazar&nbsp; fichero_enlace.</b></ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="cpDEV"></a>
+<h2>
+Trabajando con unidades</h2>
+
+<ul>El trabajo con unidades s&oacute;lo depender&aacute; de ti.</ul>
+
+<hr WIDTH="100%"><a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="DesmonDEV"></a>
+<h2>
+Desmontar Unidades</h2>
+
+<ul>Desmontar las unidades es FUNDAMENTAL, si no se desmontan las unidades
+y no se cierra correctamente el sistema se corre el riesgo de perder datos.
+<p>Para desmontar las unidades bastar&aacute; con escribir:
+<p>umount /dev/[dispositivo montado que se quiera desmontar]
+<p>Ejemplos:
+<br>&nbsp;
+<ul>umount /dev/df0
+<ul>Desmontar&aacute; el disquete.</ul>
+umount /dev/hda1
+<ul>Desmontar&aacute; la partici&oacute;n 1 del disco duro A</ul>
+umount&nbsp; -a
+<ul>Desmontar&aacute; TODAS las unidades montadas.</ul>
+</ul>
+Puedes si quieres automatizar estas tareas modificando tu fichero .bashrc
+y .bash_profile, esto lo podr&aacute;s ver en el tema: <a 
href="#Automatizar">Automatizar
+tareas</a></ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Automatizar"></a>
+<h2>
+Automatizar Tareas</h2>
+
+<ul>La automatizaci&oacute;n de tareas es algo fundamental, ya que si estamos
+mucho tiempo haciendo siempre el mismo trabajo, al automatizar algo, nos
+ahorraremos tiempo.
+<p>Con este objetivo se hizo en linux comandos como: alias, y tambi&eacute;n
+por el mismo motivo se hizo comandos para crear ejecutores de tareas (scripts)
+<p>En nuestro caso, lo que nos interesa ser&aacute; la automatizaci&oacute;n
+de tareas a trav&eacute;s de alias, por lo que observa los ficheros 
.bash_profile
+y .bashrc que a continuaci&oacute;n se presentan e intenta modificar tu
+.bash_profile y .bashrc con la misma intenci&oacute;n.</ul>
+(El punto delante del nombre lo convierte en "<a 
href="glosary.html#oculto">escondidos</a>")
+<ul>
+<li>
+Ejemplo de <a href="bash_profile.sample.txt">.bash_profile.</a></li>
+
+<li>
+Ejemplo de <a href="bashrc.sample.txt">.bashrc</a></li>
+</ul>
+<a href="#EnTutorial">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MidnightCommader"></a>
+<h2>
+Midnight Commader:</h2>
+
+<ul>El Midnight Commader de Linux, es un entorno amigable en modo texto
+que te ayudar&aacute; a hacer todas, todas, las gestiones de ficheros que
+normalmente usas, para ejecutar el Midnight Commander, bastar&aacute; con
+escribir:
+<p><a href="glosary.html#mc">mc</a>
+<p>Y ya estar&aacute;s en un entorno amigable para tu gesti&oacute;n de
+ficheros.
+<br>&nbsp;</ul>
+<img SRC="mc-mio-1.gif" height=397 width=545 align=BOTTOM>
+<p>Te decimos que muchos programas comerciales (los cuales aqu&iacute;
+no mencionaremos) de otros sistemas operativos est&aacute;n basados en
+<a href="glosary.html#mc">mc</a>
+de Linux aunque ellos los vendan como software original.
+<p><img SRC="mc-mio-2.gif" height=397 width=555 align=BOTTOM>
+<p><a href="#EnTutorial">[ ^ ]</a>
+<hr WIDTH="100%">
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux2.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux2.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux2.html     3 Mar 2012 
06:14:37 -0000       1.1
@@ -0,0 +1,299 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.10 
i586) [Netscape]">
+   <title>Repaso de Comandos</title>
+</head>
+<body text="#000000" bgcolor="#FFCCCC" link="#0000EE" vlink="#551A8B" 
alink="#FF0000">
+<a NAME="ArribaTC"></a>
+<br><a href="../tutorial.html#Comienzo">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+Repaso Comandos. (Gu&iacute;a R&aacute;pida)</h1>
+Si has continuado el tutorial, esto te servir&aacute; de repaso.
+<br>Si es la primera vez que vienes, te recomendamos que comiences desde
+el punto: 1.
+<br>&nbsp;
+<ul>
+<li>
+<a href="#Rapida">Una toma de contacto MUY R&Aacute;PIDA con Linux</a></li>
+
+<li>
+<a href="#FormaDirs">La nueva forma de los directorios</a></li>
+
+<li>
+<a href="#FormaDirs">Las formas, MAY&Uacute;SCULAS y min&uacute;sculas
+son deferentes en Linux</a></li>
+
+<li>
+<a href="#DirRaiz">La ra&iacute;z, estructura de directorios.</a></li>
+
+<li>
+<a href="linux2.html#PideAyuda">Pidiendo ayuda, Uso</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<br><a NAME="Rapida"></a>
+<h2>
+Una toma de contacto MUY R&Aacute;PIDA con linux</h2>
+Toma de contacto v&aacute;lida para aquellos usuarios con conocimientos
+de DOS
+<br>&nbsp;
+<table BORDER COLS=2 WIDTH="75%" BGCOLOR="#66FFFF" NOSAVE >
+<tr NOSAVE>
+<td NOSAVE>Comando del DOS</td>
+
+<td>Comando Linux/Unix</td>
+</tr>
+</table>
+
+<table BORDER COLS=2 WIDTH="75%" HEIGHT="75%" >
+<tr>
+<td>HELP</td>
+
+<td>man</td>
+</tr>
+
+<tr>
+<td>COPY</td>
+
+<td>cp</td>
+</tr>
+
+<tr>
+<td>MOVE</td>
+
+<td>mv</td>
+</tr>
+
+<tr>
+<td>ECHO</td>
+
+<td>echo</td>
+</tr>
+
+<tr>
+<td>MKDIR</td>
+
+<td>mkdir</td>
+</tr>
+
+<tr>
+<td>RMDIR</td>
+
+<td>rmdir</td>
+</tr>
+
+<tr>
+<td>DIR</td>
+
+<td>ls</td>
+</tr>
+
+<tr>
+<td>CD</td>
+
+<td>cd</td>
+</tr>
+
+<tr>
+<td>ATTRIB</td>
+
+<td>chmod</td>
+</tr>
+
+<tr>
+<td>DEL</td>
+
+<td>rm</td>
+</tr>
+
+<tr>
+<td>DELTREE</td>
+
+<td>rm -r</td>
+</tr>
+
+<tr>
+<td>TYPE</td>
+
+<td>cat</td>
+</tr>
+
+<tr>
+<td>EXIT</td>
+
+<td>exit</td>
+</tr>
+
+<tr>
+<td>UNDELETE</td>
+
+<td><a href="mc-mio-2.gif">(Aplicaci&oacute;n MC opci&oacute;n 
UNDELETE)</a></td>
+</tr>
+
+<tr>
+<td>(No Aplicable)</td>
+
+<td>alias</td>
+</tr>
+
+<tr>
+<td>Procesos por Lotes ".BAT"</td>
+
+<td>Scripts</td>
+</tr>
+
+<tr>
+<td>DIR (fichero) /S</td>
+
+<td>find -name fichero
+<br>find -iname FiChErO</td>
+</tr>
+
+<tr>
+<td>(DOS n/a)</td>
+
+<td>grep -e "cadena de alg&uacute;n fichero" nombre_fichero.txt</td>
+</tr>
+
+<tr>
+<td>(DOS n/a)</td>
+
+<td>strings "cadena de alg&uacute;n fichero" fichero.txt</td>
+</tr>
+
+<tr>
+<td>(DOS n/a)</td>
+
+<td>halt (apagar/detener equipo)</td>
+</tr>
+
+<tr>
+<td>(DOS n/a)</td>
+
+<td>reboot (reiniciar equipo)</td>
+</tr>
+
+<tr>
+<td>PRINT</td>
+
+<td>lpr</td>
+</tr>
+
+<tr>
+<td>DOS (n/a)</td>
+
+<td>lprm (limpiar trabajos de la cola de impresi&oacute;n)</td>
+</tr>
+
+<tr>
+<td>ipconfig</td>
+
+<td>ifconfig (Configuraci&oacute;n IP)</td>
+</tr>
+
+<tr>
+<td>winipcfg</td>
+
+<td>ifconfig</td>
+</tr>
+
+<tr>
+<td>ping</td>
+
+<td>ping (Comprobar paquetes/comunicaci&oacute;n)</td>
+</tr>
+</table>
+
+<p>De todas formas te recomendamos que te leas el tutorial desde el principio,
+ya que Linux, es un nuevo Sistema Operativo, muy potente y nada tiene que
+ver con tu obsoleto y arcaico DOS.
+<p><a href="#ArribaTC">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="FormaDirs"></a>
+<h2>
+La nueva forma de directorios</h2>
+La nueva forma de directorios es muy importante, a la cual debes ir 
familiarizandote,
+por ejemplo, todos los ficheros con extensi&oacute;n <b>.tgz</b> o 
<b>.tar.gz</b>
+que te traigas de internet o vengan en un CDROM o simplemente te lo pase
+un amigo en disquetes, te los debes copiar a tu directorio de casa 
<b>/home/usuario</b>,
+o <b>/root</b>, y deber&aacute;s instalarlo en el directorio <b>/usr/local/,
+</b>aquellos
+que ya vienen compilados directamente los descomprimir&aacute;s en: 
<b>/usr/local/</b>
+<p>&nbsp;Pincha <a href="jerarquia_sample.txt">aqu&iacute; para ver la
+jerarqu&iacute;a de directorios (al detalle)</a>
+<p><a href="#ArribaTC">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MayusYminus"></a>
+<h2>
+Las formas, MAY&Uacute;SCULAS y min&uacute;sculas son diferentes en Linux</h2>
+
+<ul>&nbsp;A partir de ahora, deber&aacute;s saber que las may&uacute;sculas
+y min&uacute;sculas son distintas en Linux, ahora, deber&aacute;s saber
+muy bien como escribes el nombre de un fichero.
+<p>Si, si por ejemplo escribes una carta que se llama MARIA.TXT, y en el
+directorio <b>/usr/misdocs/cartas/privadas</b>, que hayas creado tu, y
+est&aacute;s intentado buscar el fichero con el comando: <b>find -name
+maria.txt</b>, ni que decirte que &iexcl;&iexcl;JAMAS!! encontrar&aacute;
+el fichero, ya que en Linux, <b>maria.txt</b> es distinto de <b>MARIA.TXT</b>
+<p><b>Es recomendable</b> que escribas todos los comandos, scripts, cartas
+y dem&aacute;s ficheros y directorios en min&uacute;sculas, y, si por el
+contrario prefieres utilizar may&uacute;sculas y min&uacute;sculas 
indistintamente
+que recuerdes bien donde lo vas a dejar, o al menos, b&uacute;scalo con
+la opci&oacute;n de buscar: find -<b>iname</b> fichero, y buscar&aacute;
+el fichero, aunque tenga may&uacute;sculas o min&uacute;sculas indistintamente,
+y si tiene extensi&oacute;n pon la extensi&oacute;n del fichero.</ul>
+<a href="#ArribaTC">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<p><a NAME="DirRaiz"></a>
+<h2>
+La ra&iacute;z, estructura de directorios</h2>
+
+<ul>La estructura del directorio ra&iacute;z (en la cual tu no deber&iacute;as
+a&ntilde;adir ning&uacute;n directorio/carpeta manualmente) es la siguiente:
+<p><font color="#FF0000">/</font> (directorio ra&iacute;z)
+<br><font color="#FF0000">/bin</font> (Archivos binarios, ejecutables 
esenciales)
+<br><font color="#FF0000">/sbin</font> (Archivos binarios del 
SuperAdministrador,
+esenciales)
+<br><font color="#FF0000">/dev</font> (Archivos controladores de dispositivos
+"devices")
+<br><font color="#FF0000">/etc</font> (Archivos de configuraci&oacute;n
+del sistema)
+<br><font color="#FF0000">/tmp</font> (Archivos temporales "podr&aacute;s
+borrarlos cada x tiempo")
+<br><font color="#FF0000">/home</font> (Archivos donde se guardar&aacute;n
+TODOS los usuarios)
+<br><font color="#FF0000">/usr</font> (Aplicaciones para los usuarios)
+<br><font color="#FF0000">/usr/local/ </font><font 
color="#000000">(Aplicaciones
+donde deber&aacute;s descomprimir ficheros compilados/instalar las que
+compiles)</font>
+<br><font color="#FF0000">/var</font> (Archivos de tama&ntilde;o extensible)
+<br><font color="#3333FF">/proc</font> (Comunicaci&oacute;n directa con
+el n&uacute;cleo)
+<br><font color="#FF0000">/lib</font> (Librer&iacute;as esenciales para
+el sistema)
+<br><font color="#FF0000">/mnt</font> (Donde se montar&aacute;n los sistemas
+de archivos)
+<br><font color="#CC33CC">/opt</font> (Aplicaciones opcionales (KDE, 
StarOffice...)
+<p>En cualquier parte de la estructura del &aacute;rbol de directorio superior
+a la que te acabamos de presentar podr&aacute;s realizar todas las 
modificaciones
+(cre&aacute;ndolas y que sean tuyas) que quieras.</ul>
+
+<p><br><a NAME="PideAyuda"></a>
+<h2>
+Pidiendo ayuda, uso</h2>
+
+<ul>Para pedir ayuda de un comando podr&aacute;s hacer:
+<p><a href="glosary.html#man">man</a> comando
+<p>Por ejemplo:
+<p>man cp</ul>
+&nbsp;<a href="#ArribaTC">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux3.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux3.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux3.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux3.html     3 Mar 2012 
06:14:37 -0000       1.1
@@ -0,0 +1,426 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.9 
i586) [Netscape]">
+   <title>El poder de la multitarea</title>
+</head>
+<body>
+<a NAME="Arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<br>&nbsp;
+<h1>
+El poder de la multitarea.</h1>
+
+<hr WIDTH="100%">
+<br>&nbsp;
+<ul>
+<li>
+<a href="#CombinacionTeclas">Combinaciones de teclas</a></li>
+
+<li>
+<a href="#CombinacionXWindow">Combinaci&oacute;n de teclas en X-Window</a></li>
+
+<li>
+<a href="#ProcesosEscondidos">Procesos que no se ven, (demonios)</a></li>
+
+<li>
+<a href="#SegundoPlano">Ejecutar CUALQUIER proceso en segundo plano.</a></li>
+
+<li>
+<a href="#Ejecutandose">&iquest;Qu&eacute; procesos se est&aacute;n 
ejecutando?</a></li>
+
+<li>
+<a href="#MatandoProcesos">&iexcl;Matando procesos!</a></li>
+
+<li>
+<a href="#MatandoUsuarios">&iexcl;Matando usuarios!</a></li>
+
+<li>
+<a href="#WhoAmI">&iquest;Qui&eacute;n soy y d&oacute;nde estoy?</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<p><a NAME="CombinacionTeclas"></a>
+<h2>
+La combinaci&oacute;n de teclas, desde el terminal.</h2>
+
+<ul>La combinaci&oacute;n de teclas m&aacute;s usada es la de [Ctrl]+[tecla
+de funci&oacute;n] para abrir un nuevo <a 
href="glosary.html#Terminal">terminal</a>
+en el que poder trabajar. Lo m&aacute;s normal es [Ctrl]+[F1] hasta 
[Ctrl]+[F6],
+en modo texto.
+<p>Por supuesto existen m&aacute;s modos de teclas, pero &eacute;stas no
+se ver&aacute;n en el tutorial.
+<br>&nbsp;</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CombinacionXWindow"></a>
+<h2>
+La combinaci&oacute;n de teclas, desde X-Window</h2>
+
+<ul>&nbsp;Las combinaciones de teclas que uses en X-Window, depender&aacute;
+m&aacute;s del gestor de ventanas que tengas instalado que desde el propio
+X-Window (que no es m&aacute;s que un motor). El gestor de ventanas (que
+podr&iacute;amos denominarlo como conductor del veh&iacute;culo) que 
podr&aacute;s
+tener instalado podr&aacute; ser FVWM, FVWM95, OLWM, TWM, MWM, KDE o GNOME.
+<p>Las combinaciones m&aacute;s usadas son:
+<br>&nbsp;
+<ul>
+<li>
+[Ctrl]+[Alt]+[tecla de retroceso]</li>
+
+<br>Para salir de X-Window, TERMINANDO.
+<br>&nbsp;
+<li>
+[Ctrl]+[Alt]+[Tecla de funci&oacute;n]</li>
+
+<br>Para, SIN SALIR, ir al modo terminal (temporalmente) para realizar
+cualquier cosa sin querer abrir ning&uacute;n xterm, regresando a X-Window
+pulsando [Alt]+[F7]
+<br>&nbsp;
+<li>
+[Alt]+[F7]</li>
+
+<br>Para regresar a X-Window, si has salido temporalmente con 
[Ctrl]+[Alt]+[tecla
+de funci&oacute;n]
+<br>&nbsp;
+<li>
+[Ctrl]+[Alt]+[+]</li>
+
+<br>Cambiar a la resoluci&oacute;n inmediatamente superior (si existe)
+<br>&nbsp;
+<li>
+[Ctrl]+[Alt]+[-]</li>
+
+<br>Cambiar a la resoluci&oacute;n inmediatamente inferior (si existe)</ul>
+</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ProcesosEscondidos"></a>
+<h2>
+Los procesos escondidos, (Demonios)</h2>
+
+<ul>Los <a href="glosary.html#demonio">demonios</a> (del ingl&eacute;s
+<b>daemons</b>),
+son, en Linux, programas que se encargan de gestionar y administrar el
+sistema. Son varios y permiten la automatizaci&oacute;n de Linux hasta
+l&iacute;mites insospechados. Estos programas se llaman as&iacute; porque
+se ejecutan (o corren) en segundo plano, y una
+<br>vez configurados no requieren solicitar permisos al usuario para hacer
+tal y cual operaci&oacute;n, con el incremento de velocidad que esto supone.
+<p>Algunos de los m&aacute;s conocidos son el crond, el atd y el pppd.
+Curiosamente, los archivos terminados en -d suelen ser demonios. Su uso
+suele estar bastante bien documentado.
+<p>Veremos, a modo de ejemplo, el uso el uso de <b>at</b>.
+<p>El comando <b>at </b>te ayudar&aacute; a planificar la ejecuci&oacute;n
+de ciertas tareas. Puedes, por ejemplo, dejar para las horas nocturnas
+los trabajos que, por su empleo de recursos o su duraci&oacute;n, representen
+una gran carga para el sistema. En el momento que desees, at se 
encargar&aacute;
+de hacer ejecutar tus tareas pesadas.
+<p>Sintaxis:
+<p><b>at [-V] [-q queue] [-f file] [-m] fecha_y_hora</b>
+<br><b>at -c tarea [tarea...]</b>
+<p>Con <b>at </b>se pueden especificar diferentes formatos para especificar
+la fecha y la hora en que debe activarse. As&iacute;, el tiempo se puede
+especificar en HHMM o HH:MM para llevar a cabo una tarea en el mismo 
d&iacute;a.
+Tambi&eacute;n se puede especificar <b>midnight</b> (medianoche), <b>noon
+</b>(mediod&iacute;a)
+o<b> teatime </b>(4 de la tarde). Del mismo modo, se le puede colocar a
+la hora el sufijo am o pm, para indicar una hora de la noche o del d&iacute;a,
+por ejemplo 5pm.
+<p>Si quieres que tus tareas se ejecuten otro d&iacute;a distinto del que
+te encuentras, puedes darle la fecha en la forma 'mes d&iacute;a' por ejemplo,
+May 27, o si adem&aacute;s necesitas especificar el a&ntilde;o, en la forma
+MM/DD/AA o MM.DD.AA. Otra manera de que <b>at </b>sepa el momento en que
+tiene que actuar es darle la fecha y hora en forma de un signo '+' seguido
+de un n&uacute;mero de unidades de tiempo, ya sean weeks (semanas), days
+(d&iacute;as) hours (horas) o minutes (minutos). Por ejemplo puedes ejecutar
+algo a las 6 de la&nbsp; tarde dentro de 4 d&iacute;as, es decir 6pm+4
+days, o ma&ntilde;ana a las 8 de la tarde, 8 pm tomorrow. Hay muchas 
combinaciones
+posibles.
+<p><b>at </b>devuelve un n&uacute;mero, un identificador de tarea, al ser
+invocado. Este identificador lo podr&aacute;s usar m&aacute;s tarde para
+obtener informaci&oacute;n acerca de la tarea concreta con la opci&oacute;n
+-c. Por &uacute;ltimo, hay que decir que no se puede utilizar <b>at </b>cuando
+los usuarios compiten por los recursos.
+<p>Otro demonio muy interesante es el <b>cron</b>. Este demonio permite
+tambi&eacute;n la automatizaci&oacute;n de tareas. Su uso es un poco m&aacute;s
+complicado que el <b>at</b>, pero merece la pena.
+<p>Para activar el <b>cron</b>, escribiremos <b>crontab -e</b> como cualquier
+usuario (cada usuario puede tener su propio <b>cron</b>) y lo editaremos
+con el <a href="onlyfile.html#CrearConVi">vi </a>o el <a 
href="onlyfile.html#CrearConVi">vim</a>
+(vi mejorado), con lo que crearemos nuestro <b>crontab</b>. Para comprender
+mejor el <b>crontab </b>veremos nuestro <a 
href="crontab.sample.txt">ejemplo</a>.
+<p>Como podemos ver, hay 5 asteriscos. Cada uno de los asteriscos representa:
+<p>1&ordm;- minutos
+<br>2&ordm;- horas
+<br>3&ordm;- D&iacute;a del mes (1, 2, 15...)
+<br>4&ordm;- Mes del a&ntilde;o (1, 10, 12)
+<br>5&ordm;- D&iacute;as de la semana. Se pueden poner con n&uacute;meros
+o con letras en ingl&eacute;s, en may&uacute;sculas y en min&uacute;sculas
+(ej.: sat o Sat, para el s&aacute;bado).
+<p>&nbsp;&nbsp;&nbsp; Ej.:&nbsp; * * * * 
1-5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+(los d&iacute;as de diario)
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+* * * * mon-fri&nbsp; (los d&iacute;as de diario)
+<p>Algunas de los par&aacute;metros de <b>crontab</b>:
+<br><b>-u usuario</b>: permite modificar el <b>crontab </b>del usuario
+<br>Ej.:&nbsp; <b>crontab -u carlos -e</b>
+<br><b>-e </b>: Permite editar el <b>crontab</b>.
+<br>Ej.: <b>crontab -e</b>
+<p>Para mayor informaci&oacute;n, recomendamos ver las p&aacute;ginas 1
+y 8 del manual desde la l&iacute;nea de comandos (ej.: <b>man 8 crontab</b>).
+<p>Estas tareas se puede realizar con: linuxconf de una forma c&oacute;moda
+como muestra la imagen:
+<br><img SRC="crond.gif" height=592 width=800>
+<p>
+<hr WIDTH="100%"></ul>
+<a NAME="SegundoPlano"></a>
+<h3>
+&iexcl;Ejecutando procesos en segundo plano!</h3>
+
+<ul>&nbsp;
+<br>Pero, esto no es todo, cualquier programa de los que hay en linux los
+podemos hacer ejecutar en segundo plano, cualquier programa, cualquier
+script, y cualquier proceso, para hacerlo es tan sencillo como:
+<p>Escribir el nombre del programa y tras un espacio escribir el signo
+de amspersand.
+<br>(EJEMPLO:)
+<p><b>nombre_del_programa &amp;</b>
+<p>Al hacer esto, el programa '<b>nombre_del_programa</b>', se ejecutar&aacute;
+realizar&aacute; las tareas oportunas y una vez concluido retornar&aacute;.
+<br>Ejemplos:
+<br>&nbsp;
+<br>&nbsp;
+<ul>
+<li>
+..]$ find / -iname *.wav &amp;</li>
+
+<br><b>Segundo plano</b>, Busca a partir de la ra&iacute;z ficheros con
+extensi&oacute;n .wav
+<br>&nbsp;
+<li>
+..]$ find . -iname *.mid &amp;</li>
+
+<br><b>Segundo plano</b>, Busca a partir del directorio donde est&eacute;
+ficheros con extensi&oacute;n .mid
+<br>&nbsp;
+<li>
+..]$ MiScriptParaBorrarFicherosViejos &amp;</li>
+
+<br><b>Segundo plano</b>, Script que se ejecuta en segundo plano
+<br>&nbsp;
+<li>
+..]$ tar cvfz CopiaSeguridadUsuarios.tgz /home/ &amp;</li>
+
+<br><b>Segundo plano</b>, hacemos una copia de seguridad comprimiendola
+de todos los usuarios
+<br>&nbsp;
+<li>
+..]$ cd /usr/games/</li>
+
+<br><b>Primer plano</b>, cambiamos de directorio
+<br>&nbsp;
+<li>
+..]$ tar xvfz /mnt/cdrom/unix/juegos/Quake2.tgz &amp;</li>
+
+<br><b>Segundo plano</b>, descomprimimos el fichero que viene en un cd-rom
+<br>&nbsp;
+<li>
+..]$ cd ../local/</li>
+
+<br><b>Primer plano</b>, cambiamos de directorio
+<br>&nbsp;
+<li>
+..]$ tar xvfzp Programa.tgz</li>
+
+<br><b>Primer plano</b>, descomprimimos un fichero</ul>
+</ul>
+
+<ul>&nbsp;
+<br>Para regresar a cualquier proceso que has dejado en segundo plano,
+generalmente se utilizan los comandos "<b>fg</b>" o "<b>exit</b>"</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Ejecutandose"></a>
+<h2>
+&iquest;Qu&eacute; procesos se est&aacute;n ejecutando?</h2>
+
+<ul>&nbsp;Para ver que procesos se est&aacute;n ejecutando deber&aacute;s
+usar: <b>ps, </b>igualmente que desde X-Window pulsas [Ctrl]+[Esc]. Si
+quieres que esa informaci&oacute;n sea constante debes utilizar el comando
+<b>top.</b>
+<p>A&ntilde;adiendo <b>ps -a</b>, ver&aacute;s TODOS los procesos que en
+ese momento se est&aacute;n ejecutando, exceptuando los demonios.
+<br>&nbsp;
+<ul>
+<li>
+Estos son los par&aacute;metros de para ps:</li>
+
+<ul>
+<li>
+l</li>
+
+<br>Formato grande
+<li>
+u</li>
+
+<br>De usuario, con nombre y hora de comienzo
+<li>
+j</li>
+
+<br>De trabajos
+<li>
+s</li>
+
+<br>De se&ntilde;al
+<li>
+v</li>
+
+<br>De memoria Virtual
+<li>
+m</li>
+
+<br>De informaci&oacute;n acerca de la Memoria
+<li>
+f</li>
+
+<br>De &aacute;rbol familiar
+<li>
+a</li>
+
+<br>Procesos de otros usuarios
+<li>
+x</li>
+
+<br>Procesos sin terminal de control
+<li>
+S</li>
+
+<br>cpu hijo y posibles fallo de la p&aacute;gina
+<li>
+c</li>
+
+<br>Muestra el nombre del comando seg&uacute;n la tarea
+<li>
+e</li>
+
+<br>Muestra el entorno
+<li>
+h</li>
+
+<br>No muestra cabeceras
+<li>
+r</li>
+
+<br>Muestra procesos activos
+<li>
+n</li>
+
+<br>Muestra salida num&eacute;rica para USER
+<li>
+txx</li>
+
+<br>Procesos controlados por el terminal xx</ul>
+</ul>
+</ul>
+
+<hr WIDTH="100%">
+<br><a NAME="Ejemplo"></a>
+<ul>La informaci&oacute;n que ver&aacute;s ser&aacute; m&aacute;s o menos
+&eacute;sta: (ejemplo)
+<p>Ejemplo de:<a href="PSx.txt"> ps x</a>
+<br>Ejemplo de: <a href="PSxa.txt">ps xa</a>
+<br>Ejemplo de: <a href="PSxaf.txt">ps xaf</a>
+<br>Ejemplo de: <a href="PSafu.txt">ps auf</a>
+<br>&nbsp;</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MatandoProcesos"></a>
+<h2>
+&nbsp;&iexcl;Matando Procesos!</h2>
+Esta posibilidad se usa cuando por alg&uacute;n motivo un proceso se queda
+"colgado" en un terminal (&iexcl;ojo! se puede quedar "colgado" un terminal,
+pero PARA NADA el resto del sistema Linux). Para ello haremos, como 
superusuario:
+<p>$ ps -a
+<p>y veremos qu&eacute; es y d&oacute;nde est&aacute;. Tras esto usaremos
+el comando kill, que tiene esta sintaxis:
+<p>kill [-s se&ntilde;al] <a href="glosary.html#pid">pid</a> ...
+<p>kill -l [se&ntilde;al]
+<p>La opci&oacute;n&nbsp; -s especifica la se&ntilde;al a enviar. La 
se&ntilde;al
+debe ser suministrada como un nombre de se&ntilde;al o un n&uacute;mero.
+La opci&oacute;n -l muestra una lista de nombres de se&ntilde;al.
+<p>Ejemplo de los procesos ps xa
+<p>kill 558
+<br>Matar&aacute; el proceso 'gnuchessx' que est&aacute; ejecutando el
+usuario 'javier'
+<p>Otros ejemplo que tambi&eacute;n podr&aacute;s hacer es:
+<p>Ejemplo 1:
+<p>kill -s SIGALRM 87
+<p>Manda al proceso con pid 87 la se&ntilde;al SIGALRM
+<p>Ejemplo 2:
+<p>kill -9 116
+<p>Mata a toda costa el proceso 116.
+<p>Ejemplo 3:
+<p>kill -l
+<p>Saca un listado con todos los nombres de se&ntilde;ales posibles.
+<p>RECUERDA:
+<br>&nbsp;
+<ul>El SuperAdministrador 'root', podr&aacute; matar todos los procesos
+que est&eacute;n ejecutando
+<br>otros usuarios, as&iacute; tambi&eacute;n, los usuarios podr&aacute;n
+matar sus propios procesos, y ning&uacute;n
+<br>usuario podr&aacute; matar otro proceso distinto del suyo.</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MatandoUsuarios"></a>
+<h2>
+&nbsp;&iexcl;Matando Usuarios!</h2>
+
+<ul>Para matar un usuario deber&aacute;s usar el comando kill y el PID
+del proceso que se est&aacute; ejecutando.
+<p>Si ve&iacute;as el ejemplo <a href="#Ejemplo">anterior:</a> que puedes
+ver con <a href="PSafu.txt">ps auf</a>
+<p>kill 196
+<br>Mata al usuario con el PID 196
+<p>kill -9 198
+<br>Mata a toda costa al usuario con el pid 198.
+<br>&nbsp;</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="WhoAmI"></a>
+<h2>
+&nbsp;&iquest;Qui&eacute;n soy y d&oacute;nde estoy?</h2>
+
+<ul>
+<li>
+El comando <b>whoami</b> nos dir&aacute; qui&eacute;nes somos en la terminal
+en la que estemos, o sea, nuestro nombre de usuario.</li>
+
+<li>
+El comando <b>who </b>nos dice quienes est&aacute;n conectados al&nbsp;
+sistema en un momento determinado.</li>
+
+<li>
+El comando <b>w</b> es una variaci&oacute;n del anterior que te ofrece
+otro tipo de informaci&oacute;n, como puede ser el comando que est&aacute;n
+ejecutando los usuarios.</li>
+</ul>
+Del mismo modo, cuando queramos saber qu&eacute; recorrido hemos hecho
+por el disco duro (el path de nuestro directorio, por ejemplo), escribiremos
+<b>pwd.</b>
+<p><b>pwd = cwd</b>
+<br><b>cwd = Current Work Directory</b>
+<p><a href="#Arriba">[ ^ ]</a>
+<p>
+<hr WIDTH="100%">
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux4.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux4.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux4.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux4.html     3 Mar 2012 
06:14:37 -0000       1.1
@@ -0,0 +1,264 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+   <title>Gesti&oacute;n de Ficheros y Gesti&oacute;n AVANZADA.</title>
+</head>
+<body text="#000000" bgcolor="#FFF0F0" link="#FF0000" vlink="#800080" 
alink="#0000FF">
+<a NAME="Arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+Gestionar ficheros:</h1>
+
+<p><br>Una vez visto los cap&iacute;tulos anteriores ahora veremos como
+gestionar correctamente los ficheros, deber&aacute;s saber que:
+<br>&nbsp;
+<ul>
+<li>
+<a href="#FicherosPropietarios">Los ficheros tienen propietarios.</a></li>
+
+<li>
+<a href="#CambiamosPermisos">Cambiamos el propietario de un fichero.</a></li>
+
+<li>
+<a href="onlyfile.html">Gesti&oacute;n AVANZADA de ficheros.</a></li>
+
+<li>
+<a href="linux4.html#Seguridad">&iexcl;&iexcl;Seguridad de Ficheros!!</a></li>
+
+<li>
+<a href="linux4.html#ChmodYchattrib">comandos: chmod y chattr.</a></li>
+
+<li>
+<a href="linux4.html#script2exec">Convertir un peque&ntilde;o</a> <a 
href="glosary.html#script">script</a><a href="linux4.html#script2exec">a
+ejecutable.</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<br><a NAME="FicherosPropietarios"></a>
+<h2>
+Los ficheros tienen propietarios.</h2>
+
+<ul>En todo sistema Linux los archivos pertenecen a quien los crea, que
+es entonces el &uacute;nico que puede borrarlos, ejecutarlos, etc. Esto
+es as&iacute; porque Unix estaba pensado para ser manejado por muchos usuarios
+a la vez, y de esta forma nadie pod&iacute;a acceder a tus archivos sin
+tu consentimiento previo.
+<p>Para ver los permisos de los ficheros, puedes escribir bien
+<br>vdir
+<br>&oacute;
+<br>ls -la
+<br>y ver&iacute;amos algo as&iacute;:
+<p>[Atributos]&nbsp;&nbsp;&nbsp; [Due&ntilde;o] [Grupo]&nbsp;&nbsp;&nbsp;
+[Tama&ntilde;o][Fecha creaci&oacute;n][Nombre del fichero]
+<br>---------------------------------------------------------
+<br>-rw-r--r--&nbsp;&nbsp;&nbsp;&nbsp; carlos 
users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+1024&nbsp;&nbsp;&nbsp; Dic 21&nbsp;&nbsp;&nbsp; 20:30 carta.txt
+<br>---------------------------------------------------------
+<br>Que de forma resumida, expondremos as&iacute;:
+<p>-rw-r--r-- carlos users carta.txt
+<br>&nbsp;
+<p>O como puedes apreciar en la imagen:
+<p><img SRC="amos_files.gif" height=331 width=543>
+<p>Los signos que aparecen al comienzo a la izquierda de la pantalla son
+los atributos. Para entenderlos hay que tomarlos de 3 en 3, menos el 
gui&oacute;n
+del comienzo, que indica si es fichero, directorio o enlace poniendo:
+<br>&nbsp;
+<ul>
+<li>
+d (directorio)</li>
+
+<li>
+l (enlace)</li>
+
+<li>
+- (fichero)</li>
+</ul>
+Los atributos siguientes tomados de tres en tres significan:
+<br>&nbsp;
+<ul>
+<li>
+r (read): Permiso de lectura.</li>
+
+<li>
+w (write): Permiso de escritura, y</li>
+
+<li>
+x (execute): Permiso de ejecuci&oacute;n.</li>
+</ul>
+Su distribuci&oacute;n de 3 en 3 se debe a que los 3 primeros corresponden
+al due&ntilde;o del archivo, los 3 siguientes al grupo al que ese usuario
+pertenezca, y los &uacute;ltimos al resto de usuarios.
+<p>As&iacute;, ahora utilizando por ejemplo un script que se llamar&aacute;:
+"<b>miscript"</b>
+<p>-rwxr-xr-- carlos users miscript
+<p>tenemos que <b>carlos users </b>nos dicen el due&ntilde;o del fichero
+y el grupo del mismo, respectivamente. Carlos tiene permisos de lectura,
+escritura y ejecuci&oacute;n (para poder borrarlo, por ejemplo) (-<b><u><font 
color="#FF0000">rwx</font></u></b>r-xr--)
+<b>.
+</b>El
+grupo de Carlos,<b> users</b>, tiene permisos de lectura y ejecuci&oacute;n,
+(-rwx<b><u><font color="#FF0000">r-x</font></u></b>r--)&nbsp; y el resto
+de usuarios de s&oacute;lo lectura (-rwxr-x<b><u><font 
color="#FF0000">r--</font></u></b>
+).
+<br>&nbsp;</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CambiamosPermisos"></a>
+<h2>
+Cambiamos el propietario de un fichero.</h2>
+
+<ul>&nbsp;
+<br>Hay 3 utilidades para cambiar los atributos a un fichero:
+<p>chown - Cambia de due&ntilde;o al fichero.
+<br>chgrp - Cambia de grupo a un fichero.
+<br>chmod - Cambia los atributos a un fichero.
+<br>&nbsp;
+<p>Al crear un fichero, por defecto, ser&aacute; del due&ntilde;o que lo
+crea, osea, si estoy como javier, y escribo: joe carta.txt, la carta creada
+ser&aacute; de javier, con los atributos propios del mismo, pero si estoy
+como root, y creo la misma carta, la carta ahora ser&aacute; de root.
+<p>Antes de empezar a explicarte como cambiar los atributos a un fichero,
+debes saber algo bastante l&oacute;gico:
+<br>&nbsp;
+<ol>
+<li>
+S&oacute;lo el due&ntilde;o de un fichero, podr&aacute; cambiarles sus
+propiedades, e incluso de due&ntilde;o.</li>
+
+<li>
+Ning&uacute;n usuario podr&aacute; cambiarle las propiedades a ning&uacute;n
+fichero, ni su due&ntilde;o</li>
+
+<li>
+root, podr&aacute; cambiarle las propiedades a TODOS los ficheros, e incluso
+cambiarles de due&ntilde;o.</li>
+
+<li>
+Lo de arriba mencionado, no servir&aacute; de nada, si al grupo al que
+pertenece tambi&eacute;n tiene la propiedad de escribir sobre el fichero,
+por lo cual, podr&aacute; cualquier usuario cambiar el due&ntilde;o, grupo
+o propiedades a un fichero.</li>
+</ol>
+Ejemplos de modificaci&oacute;n de un fichero, y su significado.
+<br>&nbsp;
+<ul>
+<li>
+chmod u+rwx carta.txt</li>
+
+<br>Donde "u", se refiere al usuario el cual cre&oacute; el archivo.
+<br>&nbsp;
+<li>
+chmod g+rx-w carta.txt</li>
+
+<br>Donde "g", se refiere al grupo del usuario
+<br>&nbsp;
+<li>
+chmod o+r-wx carta.txt</li>
+
+<br>Donde "o", se refiere al resto de usuarios.
+<p>usar "a", modificar&aacute; todos los atributos
+<li>
+chmod a+x miscript</li>
+
+<br>Le pondr&aacute; todos los atributos de ejecuci&oacute;n al script
+"miscript", para lo ejecuten, el due&ntilde;o, el grupo y otros.
+<p>Tambi&eacute;n puede utilizarse chmod con n&uacute;meros OCTALES, que
+realizar&aacute;n las mismas funciones que las letras, pero no ser&aacute;n
+explicados aqu&iacute;.</ul>
+
+<p><br><b>Para cambiar de due&ntilde;o a un fichero</b>, deber&aacute;s
+usar el comando
+<b>chown</b>, o bien utilizar <a href="glosary.html#mc">mc</a>,
+que es m&aacute;s f&aacute;cil, siempre y cuando tenga los atributos que
+permitan ser cambiados.
+<br>&nbsp;
+<ul>
+<li>
+chown <b>-c javier</b> EsteFichero</li>
+</ul>
+
+<p><br>Ahora "EsteFichero" pertenecer&aacute; a javier.
+<p>Si quieres cambiar de grupo al fichero "EsteFichero"
+<br>&nbsp;
+<ul>
+<li>
+chgrp <b>-c users</b> EsteFichero</li>
+</ul>
+
+<p><br>Y si desde el princio hubieras querido cambiar de usuario y de grupo
+haber escrito:
+<br>&nbsp;
+<ul>
+<li>
+chown <b>-c javier.users</b> EsteFichero</li>
+</ul>
+
+<p><br>Para m&aacute;s informaci&oacute;n escribe:
+<p><b>man chown</b></ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Seguridad"></a>
+<h2>
+Seguridad de Ficheros</h2>
+
+<ul>Si tiene conexi&oacute;n a internet, y a su m&aacute;quina est&aacute;n
+conectados VARIOS USUARIOS v&iacute;a telnet, es recomendable que algunos
+directorios est&eacute;n fuera del alcance de ciertos curiosos, por lo
+que se recomienda el cambio de atributos a dichos ficheros.
+<p>Mire la secci&oacute;n <a href="onlyfile.html">Gesti&oacute;n AVANZADA
+de ficheros.</a></ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ChmodYchattrib"></a>
+<h2>
+Comandos chmod y chattr</h2>
+
+<ul>chmod. Cambiar&aacute; los modos a los ficheros, chattr cambiar&aacute;
+los atributos a dichos ficheros, es altamente recomendable que te informes
+para cambiarselos.
+<p>Escribe
+<p>man chmod
+<br>y
+<br>man chattr
+<br>&nbsp;</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="script2exec"></a>
+<h2>
+Convertir Script a ejecutable</h2>
+
+<ul>Para convertir un script a ejecutable deber&aacute;s hacer:
+<br>&nbsp;
+<br>&nbsp;
+<ol>
+<li>
+Crear el fichero</li>
+
+<li>
+Crear el c&oacute;digo con una salida determinada</li>
+
+<li>
+Guardar el fichero, como por ejemplo "MiScript"</li>
+
+<li>
+Ponerle los atributos de ejecutable escribiendo:</li>
+
+<ol>
+<li>
+chmod a+x MiScript</li>
+</ol>
+</ol>
+</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux5.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux5.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux5.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux5.html     3 Mar 2012 
06:14:37 -0000       1.1
@@ -0,0 +1,281 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+   <title>Gesti&oacute;n y Administraci&oacute;n de usuarios</title>
+</head>
+<body>
+<a NAME="Arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+Gestionando usuarios.</h1>
+
+<ul>Linux, como cl&oacute;nico de Unix, sistema nacido en Internet, est&aacute;
+pensado para servir a varios usuarios a la vez. Para ello existe la <a 
href="glosary.html#cuentaOusuario">cuenta</a>
+de "<a href="glosary.html#root">root</a>" o <a 
href="glosary.html#root">superususario</a>,
+y la de los dem&aacute;s usuarios del sistema.
+<br>&nbsp;
+<ul>
+<li>
+<a href="#CrearUsuarios">Creando un usuario.</a></li>
+
+<li>
+<a href="#EditarUsuarios">Editando usuarios.</a></li>
+
+<li>
+<a href="#BorrandoUsuarios">Borrando a un usuario.</a></li>
+
+<li>
+<a href="#DesdeX">Desde X-Window</a></li>
+</ul>
+</ul>
+
+<hr WIDTH="100%">
+<ul><a NAME="CrearUsuarios"></a>
+<h2>
+Creando un usuario.</h2>
+
+<ul>Para crear un usuario, escribimos, entrando como <a 
href="glosary.html#root">root</a>,&nbsp;
+"useradd" o "adduser" sin las comillas m&aacute;s el nombre del usuario.
+Ej.:
+<p><b>adduser carlos.</b>
+<p>Habr&aacute;s creado un usuario sin clave de acceso, y escribiendo al
+inicio de Linux en <a href="glosary.html#login">login</a> el nombre 
<b>carlos,</b>
+entrar&aacute;s en TU SESI&Oacute;N.
+<p>NOTA
+<br>(Si no existiera la sentencia "adduser", o "useradd", pudiera ser porque
+tienes "linuxconf" instalado, escribe linuxconf, que es un frontend (entorno
+amigable o entorno final) muy c&oacute;modo para gestionar todo linux,
+entre ellos la creaci&oacute;n de usuarios.)
+<br>FIN NOTA
+<p>De esta forma crearemos un usuario con las caracter&iacute;sticas por
+defecto, que suelen ser las mejores, pero para crear un usuario a nuestra
+medida, tambi&eacute;n podemos escribir:
+<br>(Forma general)
+<p>address@hidden /root]# adduser -u <b>500</b> -g <b>users</b> carlos
+<br>address@hidden /root]# passwd carlos
+<br>(y asignamos la clave para carlos)
+<p>address@hidden /root]# adduser -u <b>501</b> -g <b>users</b> javier
+<br>address@hidden /root]# passwd javier
+<br>(y asignamos la clave para javier)
+<p>o tambi&eacute;n:
+<p>address@hidden /root]# adduser -u&nbsp; 500 -g 100 -p 123 -r carlos.</ul>
+</ul>
+
+<ul>
+<ul>
+<ul>Ahora ya sabemos que<b> -u 500 -g 100 -p 123 -r </b>son opcionales,
+y no hace falta escribirlos para crear al usuario</ul>
+Esta son algunas de las caracter&iacute;sticas m&aacute;s importantes a
+la hora de crear usuarios.</ul>
+</ul>
+
+<ul>
+<ul>
+<ul>
+<li>
+adduser -u : Indica la <a href="glosary.html#UID">UID</a> del usuario,
+o sea, el n&uacute;mero con el que el sistema identificar&aacute; al usuario.
+Su n&uacute;mero debe ser mayor que el &uacute;ltimo usuario/cuenta que
+exista en el fichero <a href="Passwd.sample.txt">/etc/passwd</a>, por ejemplo
+podemos ponerle 500 para el primer usuario. El usuario 501 ser&aacute;
+el siguiente,&nbsp; 502 el 3&ordm;, etc.</li>
+</ul>
+</ul>
+</ul>
+
+<ul>
+<ul>
+<ul>
+<li>
+-g 100.&nbsp; Indica el <a href="glosary.html#GID">GID</a>, esto es, el
+grupo al que ese usuario pertenece. Esto es importante porque en Linux
+un grupo de usuarios puede compartir una serie de ficheros y directorios.
+El n&uacute;mero ha de ser el mismo para todos los que formen el grupo.
+As&iacute;, el grupo de los que formen el grupo 100 ser&aacute; uno, el
+101 ser&aacute; otro, el 102 otro, etc. (TODOS los USUARIOS, deber&iacute;an
+estar bajo el mismo grupo, "users", que suele ser el grupo 100). El fichero
+que identifica a los grupos es: <a href="group.sample.txt">/etc/group</a></li>
+</ul>
+</ul>
+</ul>
+
+<ul>
+<ul>
+<ul>
+<li>
+-p 123. Se refiere a la <a href="glosary.html#password">clave del usuario</a>
+para entrar en el sistema. Si se quiere, puede no ponerse ninguna si tu
+ordenador no va a estar conectado a ninguna red o si tu eres el &uacute;nico
+que entra. Veremos como hacerlo en Editando usuarios.</li>
+
+<li>
+-r carlos.&nbsp; Ser&aacute; el nombre con el que el usuario entre en el
+sistema.</li>
+</ul>
+</ul>
+</ul>
+
+<ul>
+<ul>
+<ul>
+<li>
+Otra forma m&aacute;s f&aacute;cil de crear usuarios es a trav&eacute;s
+de las X-Window con el programa control-panel.</li>
+</ul>
+
+<ul>
+<ul>Para comprobar su funcionamiento, pulsa [ctrl]+[F2], y escribe el nombre
+con el que hayas creado al nuevo usuario</ul>
+</ul>
+</ul>
+</ul>
+
+<ul>
+<ul>
+<ul>
+<ul>Si, al crear al nuevo usuario (y si no has especificado clave) te pide
+el <a href="glosary.html#password">password</a> y no eres capaz de entrar
+como &eacute;l, deber&aacute;s entonces <a href="#EditarUsuarios">editar
+el fichero passwd</a> para suprimir el car&aacute;cter de admiraci&oacute;n
+( ! ) "u otro(s)" que aparece en el segundo campo, pues el car&aacute;cter
+<b><u>!</u></b>
+impedir&aacute; todav&iacute;a entrar en la cuenta de carlos.
+<p>Tambi&eacute;n, es MUY probable que tengas que editar adem&aacute;s
+el fichero <b>/etc/shadow, </b>para activar la cuenta: (al que le pasar&aacute;
+algo parecido)
+<p>Ej.:
+<ul><b># fichero: /etc/passwd (ANTES de la modificaci&oacute;n)</b>
+<br>carlos:<b><u>!</u></b>:501:100:carlos orovengua:/home/carlos:/bin/bash
+<p><b># fichero: /etc/passwd (DESPU&Eacute;S de la modificaci&oacute;n)</b>
+<br>carlos::501:100:carlos orovengua:/home/carlos:/bin/bash
+<br>
+<hr WIDTH="100%">
+<br>Despu&eacute;s de quitarlo, (y si no hay que modificar el fichero 
<b>/etc/shadow</b>),
+con escribir en <a href="glosary.html#login">login</a> tu nombre, 
bastar&aacute;
+para entrar al sistema. Por ejemplo:</ul>
+
+<hr WIDTH="100%">
+<br>Ej:
+<ul><b># fichero: /etc/shadow (ANTES de la modificaci&oacute;n)</b>
+<br>carlos:xx:10745::99999::::
+<p><b># fichero: /etc/shadow (DESPU&Eacute;S de la modificaci&oacute;n)</b>
+<br>carlos::10745::99999::::
+<br>&nbsp;</ul>
+</ul>
+</ul>
+El usuario creado se guardar&aacute; en el directorio /home, y con el 
directorio
+con el nombre del usuario creado, en este caso ser&aacute;: /home/carlos,
+con todas las configuraciones por definir, un .bashrc y un fichero 
.bash_profile,
+que tienen una m&iacute;nima configuraci&oacute;n, la cual recomendamos
+(ver cap&iacute;tulos anteriores) para una gesti&oacute;n adecuada.</ul>
+</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<ul>
+<ul><a NAME="EditarUsuarios"></a></ul>
+
+<h2>
+Editando usuarios.</h2>
+Para editar usuarios, editamos el archivo passwd, con el joe, por ej.:
+<p>Escribiremos:
+<p>cd /etc
+<br>joe <a href="Passwd.sample.txt">passwd</a>
+<br>joe <b>shadow</b>
+<p>o bien:
+<p>joe /etc/<a href="Passwd.sample.txt">passwd</a>.
+<br>joe <b>/etc/shadow</b>
+<p>En este fichero hemos incluido su estructura:
+<br>&nbsp;
+<ul>
+<li>
+Cada l&iacute;nea de este archivo corresponde con un usuario, y cada uno
+de sus campos (separados por dos puntos) se refiere a un dato.</li>
+</ul>
+
+<ul>
+<li>
+Los asteriscos (*)&nbsp; en el segundo campo indican las cuentas que no
+se pueden usar como usuarios normales. Pueden usarse tambi&eacute;n cuando
+queremos dar de baja temporalmente a un usuario.</li>
+</ul>
+
+<ul>
+<li>
+Para eliminar una clave (password), podemos borrar lo que viene situado
+en el segundo campo de cada l&iacute;nea entre los dos puntos (:), o usar
+el comando:</li>
+
+<ul>
+<li>
+passwd carlos</li>
+</ul>
+</ul>
+para cambiarle la clave a Carlos. S&oacute;lo&nbsp; root puede cambiarle
+la clave a otros usuarios, y puede cambiarse cada uno la suya (incluido
+root, claro), si como usuarios normales escribimos:
+<p>passwd
+<p>donde nos preguntar&aacute; por la vieja, la nueva y que la verifiquemos.
+<p>Si no te acuerdas, o cualquier usuario no se acuerda de su password,
+root, deber&aacute; encargarse de editar el fichero /etc/passwd y suprimir
+la l&iacute;nea donde aparece la clave:
+<p>javier:<b>ClaveOlvidada</b>:...
+<p>Para quedar:
+<p>javier::...
+<br>&nbsp;</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<ul><a NAME="BorrandoUsuarios"></a>
+<h2>
+Borrando a un usuario.</h2>
+
+<ul>Para borrar un usurio, bastar&aacute; con escribir el comando:
+<p>"userdel" y el nombre del usuario, ejemplo.:
+<p>userdel carlos
+<p>Tambi&eacute;n, se podr&aacute; editar el fichero <a 
href="Passwd.sample.txt">passwd</a>
+y quitar la l&iacute;nea entera donde aparece el nombre del usuario en
+cuesti&oacute;n, y despu&eacute;s borraremos su directorio de /home. 
(tambi&eacute;n
+conocido como directorio ra&iacute;z de cada usuario)
+<p>De todas formas es conveniente hacerlo con el comando <b>userdel, </b>o
+desde X-Window en su defecto, ya que tambi&eacute;n se eliminar&aacute;
+el directorio "carlos" del directorio "home", ya que si no, como root,
+deber&aacute;s borrar el directorio del usuario eliminado.
+<p>NOTA IMPORTANTE:
+<br>&nbsp;
+<ul>Esta es una opci&oacute;n excesivamente TR&Aacute;GICA, ya, que al
+suprimir a un usuario, tambi&eacute;n se le elimina su configuraci&oacute;n,
+todos los programas y configuraciones particulares que tenga en su directorio
+/home/<b>usuario</b>, as&iacute; como semanas, incluso meses de trabajo
+que tenga, tanto en sus propios documentos, trabajos y horas que tard&oacute;
+en configurar a su gusto, el gestor de ventanas de <a 
href="glosary.html#X-Window">X-Window</a>,
+su <a href="glosary.html#Netscape">navegador Netscape</a>, sus StarOffices,
+su WordPerfect..., por esto, y si lo que se quiere es dar un toque de 
atenci&oacute;n,
+lo mejor es editar el fichero <a href="Passwd.sample.txt">passwd</a>, y
+colocar un signo "!", para desactivarlo, una vez dado el toque de 
atenci&oacute;n,
+quitas el signo "!", y su <a href="glosary.html#cuentaOusuario">cuenta</a>
+volver&aacute; a estar activa.</ul>
+</ul>
+</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<ul><a NAME="DesdeX"></a></ul>
+
+<h2>
+Desde X-Window</h2>
+Todas estas gestiones tambi&eacute;n lo podr&aacute;s hacer desde X-Window
+m&aacute;s f&aacute;cilmente, y claro est&aacute; de una forma gr&aacute;fica,
+existen multitud de programas para realizar estas tareas, el m&aacute;s
+utilizado es: 'linuxconf', que existe para los gestores de ventanas KDE
+y GNOME, adem&aacute;s de otros existentes.
+<p><img SRC="xadduser.gif" height=463 width=638>
+<p><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux6.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux6.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux6.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux6.html     3 Mar 2012 
06:14:38 -0000       1.1
@@ -0,0 +1,719 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+   <title>Herramientas y administraci&oacute;n, &iquest;Qui&eacute;n, 
Cu&aacute;ndo?</title>
+</head>
+<body text="#000000" bgcolor="#FFCC99" link="#0000EE" vlink="#551A8B" 
alink="#FF0000">
+<a NAME="AquiArriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h2>
+Herramientas, Administraci&oacute;n y Configuraci&oacute;n</h2>
+
+<ul>
+<li>
+<a href="#BasicConfig">Configuraci&oacute;n b&aacute;sica del sistema.</a></li>
+
+<li>
+<a href="#ConfigImpresora">Configuraci&oacute;n de la impresora.</a></li>
+
+<li>
+<a href="linux6.html#HacerRestaurarCopias">Hacer una copia de 
seguridad/Restaurar
+copia de seguridad.</a></li>
+
+<li>
+<a href="#FormatFloppy">Formatear disquetes y chequear su integridad.</a></li>
+
+<li>
+<a href="rawrite.html">CREAR DISQUETES DE ARRANQUE.</a></li>
+
+<li>
+<a href="#ComunicacionInterna">Comunicaci&oacute;n interna en un sistema
+Linux (principios b&aacute;sicos)</a></li>
+
+<li>
+<a href="#CheckSistemaFicheros">Chequear el sistema de ficheros.</a></li>
+
+<li>
+<a href="#ArchivosRegistro">Archivos de registro.</a></li>
+
+<li>
+<a href="#CasoCatastrofe">En caso de cat&aacute;strofe.</a></li>
+
+<li>
+<a href="kernelYsonido.html">Compilar el n&uacute;cleo y sonido.</a></li>
+
+<li>
+<a href="#Comunica">Comunicaci&oacute;n a todos los usuarios</a></li>
+
+<li>
+<a href="/usr/doc/HOWTO/translations/es/mini/Servidor-Intranet-Como">SERVIDOR
+Intranet -Como-</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<h2>
+<a NAME="BasicConfig"></a></h2>
+
+<h2>
+Configuraci&oacute;n B&aacute;sica del Sistema.</h2>
+
+<ul>Para su configuraci&oacute;n b&aacute;sica, generalmente bastar&aacute;
+con ejecutar el comando 'setup' desde una terminal.
+<p>Ejemplo:
+<p>$ setup
+<p>Actualmente se encuentra un programa muy avanzado para el desarrollo
+de esta tarea, se llama 'linuxconf' es un front-end (o c&oacute;modo acabado),
+por lo que es muy f&aacute;cil e intuitivo de manejar, se usa tanto desde
+una terminal (modo texto) gracias a la instalaci&oacute;n de las 
librer&iacute;as
+ncurses, y en modo gr&aacute;fico y con el mismo nombre, gracias a las
+librer&iacute;as gtk+
+<p>$ linuxconf
+<br>&nbsp;
+<ul>
+<li>
+Pese a nuestros intentos por estar al d&iacute;a la comunidad Linux es
+una de las comunidades que m&aacute;s r&aacute;pido avanzan, m&aacute;s
+incluso de lo que cabr&iacute;a esperar, por eso, es importante que te
+pongas al d&iacute;a, que visites en Internet&nbsp; P&aacute;ginas Web
+dedicadas a noticias de Linux, o compres revistas.</li>
+</ul>
+
+<p><br>Tras cargarse el programa de configuraci&oacute;n, podremos acceder
+a cualquier parte que queramos configurar.
+<p>Antes de ejecutar <b>un programa de configuraci&oacute;n</b> insistimos
+en leer el manual sobre dicho programa, por ejemplo si queremos programar
+acciones para que se ejecuten a cierta hora, cierto d&iacute;a limpiando
+ficheros viejos, etc., etc., tendremos que usar el <a 
href="linux3.html#ProcesosEscondidos">crond</a>,
+para saber como se configura el crond, escribimos: <a 
href="glosary.html#man">man
+</a><a href="linux3.html#ProcesosEscondidos">crond</a>
+<br>
+<hr WIDTH="100%">
+<br>Existen otras muchas aplicaciones para configurar muchas m&aacute;s
+cosas: y aunque puede que nunca tengas que hacer uso de ellas aqu&iacute;
+est&aacute;n algunas: (Estas aplicaciones suelen venir incluidas en otras
+apliciones, por ejemplo en el "control-panel" de redhat, linuxconf, o el
+mismo setup de toda Distribuci&oacute;n.)
+<p>kerneld (Para configurar el kernel una vez instalado y compilado)
+<br>sndconfig (Para configurar la tarjeta de sonido)
+<br>...
+<br>
+<hr WIDTH="100%">
+<ul>
+<li>
+crontab -e</li>
+
+<ul>
+<li>
+Edita el fichero. (Deber&aacute;s aprender el editor vi)</li>
+</ul>
+
+<li>
+crontab -l</li>
+
+<ul>
+<li>
+Lista el contenido de un fichero.</li>
+</ul>
+</ul>
+Como en todo sistema operativo, hay veces que tendremos que editar los
+ficheros manualmente, cosa a la cual no hay que tener miedo, incluso 
habr&aacute;
+veces que introduzcamos errores, para eso antes de editar un fichero de
+configuraci&oacute;n hay que:
+<br>&nbsp;
+<ol>
+<li>
+Hacer copia de seguridad del fichero a editar</li>
+
+<li>
+Guardar la copia de seguridad en un disquete, no s&oacute;lo bastar&aacute;
+la del directorio.</li>
+
+<li>
+En caso de error, sustituir por el contenido anterior</li>
+
+<ul>
+<li>
+cp <b>AntiguoFichero.config </b>NuevoYerroneoFichero.config, con lo cual
+estaremos copiando el Fichero antiguo de configuraci&oacute;n encima del
+Nuevo fichero de configuraci&oacute;n que hemos editado nosotros y est&aacute;
+mal.</li>
+</ul>
+</ol>
+los ficheros b&aacute;sicos de configuraci&oacute;n de todo sistema Linux
+son:
+<p><b>/etc/rc.d/</b><a href="rc.sysinit.sample.txt">rc.sysinit</a>
+<ul>
+<li>
+Fichero de INICIALIZACI&Oacute;N de la m&aacute;quina, donde se guarda
+el PATH...</li>
+</ul>
+<b>/etc/rc.d/</b><a href="rc.sample.txt">rc</a><b> y</b>
+<br><b>/etc/rc.d/</b><a href="rc.local.sample.txt">rc.local</a>
+<ul>
+<li>
+Ficheros, que tras cargados el inicializador se cargar&aacute;n los 
&uacute;ltimos,
+sirviendo de auxiliares.</li>
+</ul>
+<b>/etc/</b><a href="crontab.sample.txt">crontab</a>
+<ul>
+<li>
+Ejecuci&oacute;n de tareas programadas</li>
+</ul>
+<b>/etc/ethers</b>
+<ul>
+<li>
+Mapeado entre direcciones RARP entre Ethernet e IP</li>
+</ul>
+<b>/etc/</b><a href="exports.sample.txt">exports</a>
+<ul>
+<li>
+Lista de directorios exportados en unidades NFS</li>
+</ul>
+<b>/etc/</b><a href="fstab.sample.txt">fstab</a>
+<ul>
+<li>
+Lista de sistemas de ficheros a montar</li>
+</ul>
+<b>/etc/</b><a href="group.sample.txt">group</a>
+<ul>
+<li>
+Listado de grupos y miembros de cada uno</li>
+</ul>
+<b>/etc/</b><a href="hosts">hosts</a>
+<ul>
+<li>
+Direcciones IP y nombres de m&aacute;quinas</li>
+</ul>
+<b>/etc/<a href="hosts.allow">hosts.allow</a></b></ul>
+
+<ul>
+<ul>
+<li>
+Maquinas que pueden conectarse con la nuestra</li>
+</ul>
+<b>/etc/<a href="hosts.deny">hosts.deny</a></b>
+<ul>
+<li>
+Maquinas que tienen denegado permisos para conectarse a la nuestra</li>
+</ul>
+<b>/etc/<a href="inetd.conf">inetd.conf</a></b>
+<ul>
+<li>
+Fichero de configuraci&oacute;n del demonio inetd</li>
+</ul>
+<b>/etc/inittab</b>
+<ul>
+<li>
+Informaci&oacute;n de arranque del sistema</li>
+</ul>
+<b>/etc/</b><a href="lilo.conf.sample.txt">lilo.conf</a>
+<ul>
+<li>
+Configuraci&oacute;n del LInux LOader</li>
+</ul>
+<b>/etc/motd</b>
+<ul>
+<li>
+Mensaje del d&iacute;a</li>
+</ul>
+<b>/etc/nsswitch.conf</b>
+<ul>
+<li>
+Orden de lectura de datos del sistema (cuentas, servicios...)</li>
+</ul>
+<b>/etc/<a href="bashrc">bashrc</a></b>
+<ul>
+<li>
+Lo que se cargar&aacute; por defecto para todos los usuarios.</li>
+
+<li>
+La mala gesti&oacute;n del fichero /etc/bashrc, podr&aacute; alterar el
+funcionamiento del sistema, ya que este fichero junto los profile siempre
+se carga cuando se ejecuta alguna opci&oacute;n o comando para recargar
+la memoria y hacer as&iacute; una mejor gesti&oacute;n de ella, por eso,
+habr&aacute; comandos que no se podr&aacute; contener en &eacute; como
+son: (echo, setleds, o similares) ya que tras la ejecuci&oacute;n de un
+comando se repetir&aacute;n en pantalla.</li>
+</ul>
+</ul>
+
+<ul>&nbsp;
+<ul>
+<li>
+<b>LOS FICHEROS QUE HAS VISTO SON EJEMPLOS A&Ntilde;ADIDOS Y POR LO TANTO
+NO LOS DE TU SISTEMA</b></li>
+</ul>
+
+<br>&nbsp;
+<ul>Evidentemente, no vamos a poner todos los ficheros que hay en el directorio
+/etc./, ya que hay tantos que ocupar&iacute;a un tutorial completo como
+&eacute;ste s&oacute;lo para ese directorio.</ul>
+RECOMENDACI&Oacute;N:
+<br>&nbsp;
+<ul>Para enterarse de cualquier fichero puedes pedir ayuda con: <a 
href="glosary.html#man">man</a>
+fstab, tendr&aacute;s informaci&oacute;n m&aacute;s detallada de para 
qu&eacute;
+sirve el fichero fstab y c&oacute;mo se puede utilizar.</ul>
+</ul>
+<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<h2>
+<a NAME="ConfigImpresora"></a>Configuraci&oacute;n de la impresora.</h2>
+
+<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Para poder usar tu impresora bajo Linux, lo primero que necesitas es tener
+compilado el n&uacute;cleo con la opci&oacute;n como en "Parallel Printer
+Support", dentro de "Character Devices".
+<p><img SRC="parallel-printer.gif" height=210 width=350>
+<p>El n&uacute;cleo ya viene para soportar la impresora (esto es en caso
+de que no trajera soporte), y ahora deber&aacute;s configurar el fichero
+de impresora
+<br><a href="printcap">/etc/printcab</a>
+<p>------------------------------------------------------------
+<br># Please don't edit this file directly unless you know what you are
+doing!
+<br># Be warned that the control-panel printtool requires a very strict
+format!
+<br># Look at the printcap(5) man page for more info.
+<br>#
+<br># This file can be edited with the printtool in the control-panel.
+<p># HP660C Printer Default. NAxNA a4/
+<br>HP660C|lp|lp0:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :sd=/var/spool/lpd/lp0:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :mx#0:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :lp=/dev/lp0:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :if=/var/spool/lpd/lp0/filter:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :sh:
+<br># IBMprint Printer. NAxNA a4
+<br>IBMprint|lp1:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :sd=/var/spool/lpd/lp1:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :mx#0:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :sh:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :lp=/dev/lp1:\
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :if=/var/spool/lpd/lp1/filter:
+<br>-----------------------------------------------------------
+<br>Existe ABUNDANTE documentaci&oacute;n sobre la Impresi&oacute;n, para
+ello te remitimos:
+<p><a 
href="/usr/doc/HOWTO/translations/es/Configuracion-Impresion-Como">/usr/doc/HOWTO/translations/es/Configuraci&oacute;n-Impresi&oacute;n-Como</a>
+<br><a 
href="/usr/doc/HOWTO/translations/es/Uso-Impresion-Como">/usr/doc/HOWTO/translations/es/Uso-Impresi&oacute;n-Como</a>
+<p>Si lo que desea es usar LINUX como SERVIDOR y compartir las impresoras,
+o montar SERVIDORES de impresi&oacute;n:
+<p><a 
href="/usr/doc/HOWTO/translations/es/Samba-Como">/usr/doc/HOWTO/translations/es/Samba-Como</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="HacerRestaurarCopias"></a>
+<h2>
+Hacer/Restaurar copias de seguridad del sistema.</h2>
+&nbsp;
+<ul>Te recomendamos, si usas un gran sistema, que peri&oacute;dicamente
+hagas copias de seguridad de TODO el sistema, m&aacute;s todav&iacute;a
+si existen varios usuarios que usen tu m&aacute;quina. Para realizar esto
+con &eacute;xito has de hacer:
+<p>Si obtienes discos necesarios (sea cual sea su formato)
+<br>&nbsp;
+<br>&nbsp;
+<ul>
+<li>
+(Si tienes discos de 1.44 MBytes)</li>
+
+<li>
+<b>fdinit /dev/fd0H1440</b></li>
+
+<li>
+(Si tienes discos de 720 KBytes)</li>
+
+<li>
+<b>fdinit /dev/fd0H720</b></li>
+
+<li>
+</li>
+</ul>
+Utilizar <b>fdinit, </b>prepara el disquete para un formato necesario para
+hacer copias de seguridad, una vez inicializado el disquete podr&aacute;s
+realizarla.
+<p>Te recomendamos que tengas al menos la siguiente cantidad de disquetes
+preparados:
+<br><b>(formula no probada)</b>
+<br>NumDisquetes = ( ( (CapacidadParticionLinux-DiscoLibre)/CapacidadDisquetes
+) /1.7 )
+<br>Esto te puede dar una idea aproximada, pero siempre por si acaso 
tr&aacute;ete
+unos disquetes de m&aacute;s, ya que algunos ficheros no tienen la misma
+capacidad de compresi&oacute;n que otros.
+<p>(*En megas)
+<br>NumDisquete=(((1000-200/1.44)/1.7)
+<br>(*Siempre y cuando se utilice el segundo m&eacute;todo)
+<p>Total, 327 Disquetes para hacer una copia de seguridad de 800 Megas
+<p>Una vez obtienes los discos necesarios empezamos nuestra copia de seguridad
+<b>(backup)
+</b>estando
+en la ra&iacute;z escribes:
+<p>$ tar <b>cvfM</b> /dev/fd0 *
+<ul>
+<li>
+Opci&oacute;n no recomendada.</li>
+</ul>
+O bien para hacer copia de seguridad de algunos fichero o directorio(s)
+<p>$ tar <b>cvfM</b> /dev/fd0 fichero1 fichero1
+<br>&nbsp;
+<br>&nbsp;
+<ul>Nos quedaremos ahora con el ejemplo II:
+<ul>$ tar <b>cvfM</b> /dev/fd0 fichero1 fichero2</ul>
+</ul>
+No se puede emplear la opci&oacute;n 'z' de compresi&oacute;n en la copia
+de seguridad, sin embargo para ahorrar disquetes y tiempo, que es lo m&aacute;s
+importante podemos hacer:</ul>
+
+<ul>&nbsp;
+<ol>
+<li>
+$ tar cvfz <b>los2archivos.tgz</b>&nbsp; fichero1 fichero2</li>
+
+<li>
+$ tar cvfM /dev/fd0 <b>los2archivos.tgz</b></li>
+</ol>
+</ul>
+
+<hr WIDTH="100%">
+<h4>
+Recuperar la informaci&oacute;n:</h4>
+
+<ul>
+<ol>
+<li>
+cd /dir-destino</li>
+
+<li>
+tar <b>xvfM</b> /dev/fd0</li>
+</ol>
+
+<hr WIDTH="100%"></ul>
+
+<ul>
+<li>
+O bien empleando el segundo m&eacute;todo.:</li>
+
+<br>
+<hr WIDTH="100%">
+<ol>
+<li>
+cd /dir-destino</li>
+
+<li>
+tar xvfM /dev/fd0</li>
+
+<li>
+tar xvfz archivo.tgz</li>
+</ol>
+
+<hr WIDTH="100%">
+<br>Para lo cual es m&aacute;s que recomendable que se tenga un script
+para la creaci&oacute;n/recuperaci&oacute;n de backups
+<br>
+<hr WIDTH="100%">
+<br>
+<hr WIDTH="100%">
+<br>Si intentamos ver el directorio de los discos de backup, podemos ver
+que no tienen formato de sistema (msdos, minix, ext2, vfat...). De todas
+formas, es posible consultar el contenido escribiendo:
+<p>$ tar <b>tvfM</b> /dev/fd0
+<br>
+<hr WIDTH="100%"></ul>
+<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="FormatFloppy"></a>
+<h2>
+Formatear disquetes:</h2>
+&nbsp;
+<ul>Si nos encontramos discos sin formato alguno, sin sectores ni pistas
+definidas (generalmente ya todos llevan formato de ms-dos) deberemos hacer:
+<br>&nbsp;
+<ul>
+<li>
+fdformat /dev/fd0H1440</li>
+
+<li>
+fdformat /dev/fd0H720</li>
+</ul>
+
+<ul>
+<ul>
+<li>
+Ya que al no tener sectores ni pistas el sistema no podr&aacute; distinguir
+si el disco es de 1.44 Mb y 720 Kb, por lo que deber&aacute;s inicializarlo
+de esta manera. Este es un proceso lento y costoso y s&oacute;lo har&aacute;
+falta una &Uacute;NICA VEZ EN LA VIDA DEL DISQUETE.</li>
+</ul>
+</ul>
+</ul>
+
+<ul>Ahora si queremos ponerle formato de MS-DOS escribimos:
+<ul>
+<li>
+<b>mkfs -t msdos /dev/fd0</b></li>
+</ul>
+Si queremos darle formato con el sistema nativo de Linux: (recomendado,
+pues permite
+<br>los nombres largos)
+<ul>
+<li>
+<b>mkfs -t ext2 /dev/fd0</b></li>
+</ul>
+
+<hr WIDTH="100%">
+<br><a NAME="CheckSistemaFicheros"></a>Para chequear un disquete (o cualquier
+otro sistema de disco de Linux) escribiremos
+<p><b>CON EL <a href="linux9.htm#ContraseñaRoot">SISTEMA DE FICHEROS A
+CHEQUEAR DESMONTADO.</a></b>
+<br>&nbsp;
+<ol>
+<li>
+Tendr&aacute;s que saber qu&eacute; tipo de formato es: (msdos, ext2, vfat)
+"suponemos ext2"</li>
+
+<li>
+Asegurarse de que est&aacute; desmontado el sistema de ficheros, bien 
escribiendo
+<b>df</b>,
+o escribiendo <b>mount</b>, que te dir&aacute; qu&eacute; sistema de ficheros
+est&aacute;n montados (<b>y en caso de no haber sido desmontado</b>) 
escribir:</li>
+
+<ul>
+<li>
+<b>umount /dev/fd0</b></li>
+</ul>
+</ol>
+fsck -t ext2 /dev/fd0
+<br>&nbsp;
+<br>&nbsp;
+<ul>
+<li>
+Evidentemente podremos chequear manualmente nuestros sistemas de ficheros
+siempre y cuando est&eacute;n desmontados. (no se recomienda chequear sistemas
+de ficheros de otros sistemas operativos, raz&oacute;n por la cual cada
+S.O. introduce sus propias herramientas de chequeo de su sistema de 
ficheros)</li>
+</ul>
+
+<ul>
+<li>
+Ejemplo:</li>
+</ul>
+
+<ul>
+<li>
+fsck -t ext2 /dev/hda3</li>
+</ul>
+
+<br>&nbsp;
+<ul>Linux hace un chequeo interno cada vez que se inicia, a trav&eacute;s
+de un contador, y realiza un escaneado del sistema de ficheros de forma
+autom&aacute;tica, as&iacute; tambi&eacute;n como cuando detecta algo 
inconsistente.</ul>
+</ul>
+&nbsp;<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<ul>
+<h3>
+<a NAME="ComunicacionInterna"></a></h3>
+</ul>
+
+<h3>
+Gesti&oacute;n de comunicaci&oacute;n interna:</h3>
+
+<ul>Lo m&aacute;s normal para utilizar la comunicaci&oacute;n en Linux
+es mandar un e-mail a otro usuario.
+<br>Los programas m&aacute;s usados en modo texto para esta operaci&oacute;n
+son el <b>pine, </b>o el <b>mail</b>
+<p>Como el pine es un front-end (acabado c&oacute;modo), y es m&aacute;s
+bonito e intuitivo dejaremos que sea usted mismo quien tenga curiosidad
+por manejarlo e instalarlo. Ahora explicaremos el uso de <b>MAIL</b>
+<br>&nbsp;
+<li>
+FORMA:</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>&nbsp; En este ejemplo el usuario Carlos mandar&aacute; un email a Javier:
+<br>
+<hr WIDTH="100%"><b>mail javier</b>
+<br>Subject: <b>&iexcl;Reuni&oacute;n suspendida!</b>
+<br><b>Javier: He le&iacute;do en la lista de correo de GLHis, que nuestra
+reuni&oacute;n ha sido suspendida</b>
+<br><b>hasta el 14 del mes pr&oacute;ximo.</b>
+<br><b>El Coordinador nos ha dado un tel&eacute;fono de contacto que es
+el:</b>
+<br><b>555-55-55-55Un saludo Carlos.</b>
+<br>[Ctrl]+[D]
+<br>
+<hr WIDTH="100%">
+<ul>
+<li>
+Cuando Carlos escriba las l&iacute;neas de arriba para terminar el mensaje
+deber&aacute; pulsar la combinaci&oacute;n de teclas [Ctrl]+[D]</li>
+
+<li>
+En ese momento el mensaje ser&aacute; mandado.</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>A Javier, si est&aacute; en su sesi&oacute;n de Linux, o bien cuando
+se conecte, le saldr&aacute; un mensaje similar a este:
+<p><b>You have (new) mail.</b>
+<p>En ese momento para saber el correo que tiene, javier deber&aacute;
+escribir:
+<p><b>mail</b>
+<p>Entonces le saldr&aacute; una lista de correos recibidos. Si el correo
+recibido de Carlos fuera por ejemplo el 3&ordm;, para verlo carlos 
escribir&aacute;:
+<p>#<b>3</b>
+<br>y ya estar&aacute; viendo el mensaje. Si quiere pedir ayuda, 
escribir&aacute;:
+<p>#<b>?</b> &oacute; <b>help</b> Si quiere borrar los mensajes del 1 al
+8 escribir&aacute;:
+<p>#<b>d 1-8</b> Si quiere salir sin guardarlos escribir&aacute;:
+<p>#<b>x</b> Si desea guardar los correos le&iacute;dos escribir&aacute;:
+<p>#<b>q</b>
+<br>Si desea ver otra vez los ficheros que hay escribir&aacute;:
+<p>#<b>t</b>
+<p>Tambi&eacute;n se puede consultar el correo antiguo con la opci&oacute;n
+-f (<b>mail </b>-<b>f</b>)</ul>
+</ul>
+
+<blockquote><b>POSIBLES ERRORES:</b>
+<br>&nbsp;
+<p>Generalmente, cuando cambia el&nbsp; nombre de la m&aacute;quina, 
tambi&eacute;n
+hay que cambiar el "host" de la misma, esta opci&oacute;n tan aparentemente
+complicada se muy sencilla de hacer con aplicaciones como "<b>netcfg</b>"
+o "<b>netconf</b>" que viene con la aplicaci&oacute;n: 
"l<b><u>inuxconf</u></b>".
+y que la primera funciona bajo X-Window, a continuaci&oacute;n se muestran
+dos im&aacute;genes para hacer esto.
+<p><img SRC="network-cfg.gif" height=387 width=515>
+<br>&nbsp;
+<p>Otras opciones a cambiar...:
+<p><img SRC="network-cfg-2.gif" height=388 width=516></blockquote>
+
+<ul>
+<hr WIDTH="100%">
+<ul>OTRAS FORMAS DE COMUNICACI&Oacute;N:
+<br>&nbsp; Otra forma de comunicaci&oacute;n es v&iacute;a <b>talk</b>,
+con un usuario que est&eacute; conectado en tu red local, o en tu mismo
+ordenador en otro terminal.
+<br>&nbsp;
+<ul>
+<li>
+<b>talk ana</b></li>
+</ul>
+
+<li>
+Si no queremos recibir peticiones de comunicaci&oacute;n de esta forma,
+puedes usar&nbsp;&nbsp;&nbsp; <b>mesg n</b>. La orden: <b>mesg </b>(de
+<i>message</i>,
+mensaje en ingl&eacute;s) nos dir&aacute; si estamos <b>y
+</b>&oacute;
+<b>n.</b>
+S&oacute;lo nosotros y el superusuario puede cambiarnos de un estado a
+otro.</li>
+</ul>
+</ul>
+
+<ul>Ejemplo: Yo pondr&eacute; <b>mesg y,</b> que es el modo por defecto
+para los usuarios, (en la l&iacute;nea de comandos, se entiende) si quiero
+que lo dem&aacute;s hablen conmigo v&iacute;a <b>talk</b>, por ej. De la
+misma manera, pondr&eacute; <b>mesg n, </b>si por defecto quiero rechazar
+peticiones para hablar conmigo. Cuando no sepa en qu&eacute; modo me encuentro,
+el comando <b>mesg </b>me lo dice.
+<p>Para otras formas de comunicaci&oacute;n de recomendamos hagas <b>man
+talk</b></ul>
+<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<h2>
+&nbsp;<a NAME="ArchivosRegistro"></a>Archivos de registro.</h2>
+
+<ul>Linux, como buen sistema operativo que se precie, realiza una serie
+de archivos de registro para que el administrador del sistema sepa en todo
+momento qui&eacute;n entra, a qu&eacute; hora, cu&aacute;nto correo hay,
+etc.
+<p>Toda esta informaci&oacute;n se guarda celosamente en /var/log, en el
+que podemos observar varios archivos.
+<br>&nbsp;</ul>
+<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CasoCatastrofe"></a>
+<h2>
+En caso de cat&aacute;strofe.</h2>
+
+<ul>&nbsp;
+<br>Antes que nada, tranquil&iacute;zate, averigua cual es error:
+<br>&nbsp;
+<ul>
+<li>
+<a href="linux9.htm#CambioContraseña">Se me olvid&oacute; la clave de 
acceso</a></li>
+
+<li>
+<a href="linux9.htm#ContraseñaRoot">Se me olvid&oacute; la clave de acceso
+como root</a></li>
+
+<li>
+He movido el &aacute;rbol de directorio a otro sitio</li>
+</ul>
+
+<ul>
+<ul>
+<li>
+En este caso, haz un disquete de arranque, entra en el sistema montando:</li>
+
+<br>&nbsp;
+<ol>
+<li>
+mount -t ext2 /dev/hda3 /mnt</li>
+</ol>
+
+<ol>
+<li>
+cd /mnt</li>
+
+<ol>En este momento habr&aacute;s montado y estar&aacute;s en tu 
partici&oacute;n
+del disco duro 'a', partici&oacute;n '3', (suponiendo que es hay donde
+est&aacute; tu Sistema Linux, ya que hemos supuesto que en hda1, hay otro
+<a href="glosary.html#S.O.:">S.O.</a>,
+hda2 est&aacute; la partici&oacute;n para <a href="glosary.html#swap">swap</a>
+y en hda3 est&aacute; ext2 para tu soporte Linux.)</ol>
+</ol>
+</ul>
+</ul>
+</ul>
+<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<p>
+<hr WIDTH="100%">
+<h2>
+<a NAME="Comunica"></a></h2>
+
+<h2>
+Comunicaci&oacute;n a todos los usuarios:</h2>
+
+<blockquote>&nbsp;
+<br>En cualquier momento, puede ser que se necesite comentar a todos los
+usuarios cualquier cosa que surga en el sistema (funcionamiento, capacidad,
+nuevos servicios, servicios extinguidos...) esto, bien podr&iacute;a hacerse
+por correo electr&oacute;nico a todos los usuarios del sistema, pero a
+no ser que se tuviera configurado un "alias para el correo", o un "majordomo",
+podr&iacute;a ser algo tedioso sin coexisten muchos usuarios en el mismo
+sistema.
+<p>Para solucionar esto existe en fichero: <b>/etc/motd</b>, el cual 
podr&aacute;
+editar <a href="glosary.html#root">root</a> y exponer un comunicado que
+ser&aacute; presentado a todos los usuarios que se conecten a la m&aacute;quina
+tras identificar su <a href="glosary.html#login">login</a> y su <a 
href="glosary.html#password">clave
+de acceso.</a>
+<br>&nbsp;</blockquote>
+<a href="linux6.html#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux7.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux7.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux7.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux7.html     3 Mar 2012 
06:14:38 -0000       1.1
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="Author" CONTENT="Javier Orovengua Miguel">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.1 
i586) [Netscape]">
+   <TITLE>Creando Particiones</TITLE>
+</HEAD>
+<BODY>
+<A HREF="../tutorial.html">[ &lt; ]</A><A HREF="contenidos.html">[
+|| ]</A>[ > ]
+<H1>
+Creando particiones</H1>
+Para ver esta secci&oacute;n necesitar&aacute;s estar en un entorno 
gr&aacute;fico,
+as&iacute; que ves preparando tu sesi&oacute;n X-Window, o cualquier otro
+Sistema Operativo Gr&aacute;fico que utilices (OS/2, Mac, Windows...)
+<P><IMG SRC="paso1.gif" HEIGHT=311 WIDTH=571 ALIGN=BOTTOM>
+<P>Lo primero y fundamental ser&aacute; ejecutar el programa <B>fips </B>que
+est&aacute; en el disquete, pues se supone que ya lo habremos copiado al
+disquete.
+<P><IMG SRC="paso2.gif" HEIGHT=313 WIDTH=566 ALIGN=BOTTOM>
+<P>Seleccionaremos el disco duro (en el caso de que tuvi&eacute;ramos 
m&aacute;s
+de uno) donde realizaremos la nueva partici&oacute;n.
+<P><IMG SRC="paso3.gif" HEIGHT=307 WIDTH=574 ALIGN=BOTTOM>
+<P>Seleccionaremos la partici&oacute;n MS-DOS/VFAT de Windows de donde
+crearemos una nueva partici&oacute;n (creando la nueva partici&oacute;n
+a partir de la
+<BR>existente de Windows).
+<BR><IMG SRC="paso4.gif" HEIGHT=309 WIDTH=568 ALIGN=BOTTOM>
+<P>Le diremos, si proceder.
+<P><IMG SRC="paso5.gif" HEIGHT=309 WIDTH=568 ALIGN=BOTTOM>
+<P>Seleccionaremos el tama&ntilde;o, bastar&aacute; para hacerlo con mover
+las teclas del cursor (arriba y abajo)
+<P><IMG SRC="paso6.gif" HEIGHT=293 WIDTH=569 ALIGN=BOTTOM>
+<P>Y confirmamos.
+<P>Ahora, se hace lo m&aacute;s f&aacute;cil:
+<BR>&nbsp;
+<OL>
+<LI>
+Reiniciamos el ordenador</LI>
+
+<LI>
+ejecutamos FDISK</LI>
+
+<LI>
+Eliminamos la nueva partici&oacute;n creada</LI>
+
+<LI>
+Reiniciamos el ordenador</LI>
+
+<LI>
+Entramos en linux</LI>
+
+<LI>
+Creamos la partici&oacute;n con el FDISK o DISKDRUID de Linux</LI>
+
+<LI>
+y la formateamos con: <B>mkfs -t ext2&nbsp; -c /dev/[discoduro_y_particion]</B>
+(en este caso /dev/hdb2)</LI>
+
+<LI>
+Y ya est&aacute; formateada, ahora s&oacute;lo faltar&aacute; usarla y
+llenarla de datos</LI>
+
+<LI>
+Tambi&eacute;n podr&aacute; ponerla dentro de mtab, para que sea montada
+por el demonio fsmount, automount o cualquier otro en el proceso de inicio
+(carga) de Linux.</LI>
+
+<LI>
+<A HREF="fstab.sample.usersmount.txt">Ejemplo de fstab</A> (La 
aplicaci&oacute;n
+que se utiliz&oacute; para la elaboraci&oacute;n de este fichero ha sido
+linuxconf)</LI>
+</OL>
+<A HREF="../tutorial.html">[ &lt; ]</A><A HREF="contenidos.html">[ || ]</A>[
+> ]
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux8.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux8.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux8.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux8.html     3 Mar 2012 
06:14:38 -0000       1.1
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="Author" CONTENT="Javier Orovengua Miguel">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i586) [Netscape]">
+   <TITLE>&iquest;Y ahora qu&eacute;?</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#33FF33" LINK="#0000FF" VLINK="#FF0000" 
ALINK="#FF0000">
+<A HREF="../tutorial.html">[ &lt; ]</A><A HREF="contenidos.html">[
+|| ]</A>[ > ]
+<H1>
+&iquest;Y ahora qu&eacute;?</H1>
+
+<HR WIDTH="100%">
+<UL>
+<LI>
+<A HREF="WebLinuxZone.html">LINUX&nbsp; ZONE</A></LI>
+</UL>
+
+<BLOCKQUOTE>Gracias a la estimada ayuda de algunos de nuestros colaboradores,
+tenemos aqu&iacute; una informaci&oacute;n muy estimable para aquellos
+usuarios que quieran seguir aprendiendo, entre otras cosas gracias a el
+enlace de <B>nuestro amigo dan-man</B>, podr&aacute;s <B>configurar tu
+modem</B>, tu emulador del DOS <B>dosemu</B>, tu emulador de Windows 
<B>wine</B>,
+y muchas m&aacute;s cosas.</BLOCKQUOTE>
+
+<HR WIDTH="100%">
+<BLOCKQUOTE>Mientras seguimos esperando la colaboraci&oacute;n de m&aacute;s
+personas, te remitimos a las inestimables ayudas de las <A 
HREF="/usr/doc/HOWTO/translations/es/">&iquest;C&oacute;mo?</A>
+"<A HREF="/usr/doc/HOWTO">HOWTO</A>" y <A HREF="/usr/doc/FAQ/">Frecuentes
+preguntas y cuestiones</A> "<A HREF="/usr/doc/FAQ/">FAQ</A>", que se encuentran
+en:
+<BR>&nbsp;
+<P><A HREF="/usr/doc/HOWTO/">/usr/doc/HOWTO/</A>
+<BR><A 
HREF="/usr/doc/HOWTO/translations/es/">/usr/doc/HOWTO/translations/es/</A>
+<P>y
+<P><A HREF="/usr/doc/FAQ/">/usr/doc/FAQ/</A>
+<BR>&nbsp;</BLOCKQUOTE>
+
+<P><BR><A HREF="../tutorial.html">[ &lt; ]</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linux9.htm
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linux9.htm
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linux9.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linux9.htm      3 Mar 2012 
06:14:38 -0000       1.1
@@ -0,0 +1,457 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+   <title>Seguridad del Sistema</title>
+</head>
+<body>
+<a NAME="AquiArriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+Seguridad.</h1>
+
+<ul>
+<li>
+<a href="#CambioContraseña">Cambio de contrase&ntilde;a.</a></li>
+
+<li>
+<a href="#ContraseñaRoot">Contrase&ntilde;a olvidada.</a></li>
+
+<li>
+<a href="#ComandosUtiles">Comandos &uacute;tiles.</a></li>
+
+<li>
+<a href="#ArchivosLOGS">Archivos de registro.</a></li>
+
+<li>
+<a href="#EntrarEnLinux">Formas de entrar en linux</a></li>
+
+<li>
+<a href="#ActualizarSistema">Actualizar el sistema</a></li>
+
+<li>
+<a href="#SeguridadInternet">Seguridad Internet.</a></li>
+
+<li>
+<a href="gransistema.html">Grandes Sistemas</a></li>
+</ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<p><a NAME="CambioContraseña"></a>
+<h3>
+CAMBIO DE CONTRASE&Ntilde;A.</h3>
+
+<ul>Cambiar la contrase&ntilde;a que tenemos como usuario es tan sencillo
+como invocar el comando <b>passwd</b>. El sistema nos pedir&aacute; que
+introduzcamos la antigua, escribamos la nueva y la confirmemos para evitar
+errores.
+<p>Tambi&eacute;n podemos cambiar la contrase&ntilde;a de otro/s usuario/s
+como root si escribimos <b>passwd usuario</b> (ej.: passwd carlos). -Siempre
+con el permiso del usuario, claro-
+<p>Este proceso <b>se deber&aacute; hacer s&oacute;lo</b> cuando a alg&uacute;n
+usuario se le hubiera <b>olvidado la contrase&ntilde;a.</b></ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<h3>
+
+<hr WIDTH="100%"></h3>
+<a NAME="ContraseñaRoot"></a>
+<ul>
+<h3>
+CONTRASE&Ntilde;A OLVIDADA -a root-</h3>
+</ul>
+
+<ul><a href="#LinuxSingle">Chequear el disco duro.</a>
+<p>Si se te ha olvidado la contrase&ntilde;a, y tu eres 'root', no corras
+a por el CD-ROM y vuelvas a reinstalar Linux, Linux tiene herramientas
+de sobra para estos posibles y desagradables casos.
+<p>Si este caso ocurriera intenta:
+<br>&nbsp;
+<ol>
+<li>
+&nbsp;Reinicia el ordenador pulsando [Ctrl]+[Alt]+[Supr]</li>
+</ol>
+
+<ol>
+<li>
+Escribe cuando sale LILO la palabra: linux single <font color="#FF0000">(Si
+entre las directivas de control del fichero de configuraci&oacute;n del
+LILO (en /etc/lilo.conf) existen las palabras: PASSWORD=unpassword y 
RESTRICTED,
+este programa est&aacute; obligado a pedir contrase&ntilde;a (unpassword,
+en nuestro caso), y si tambi&eacute;n nos hemos olvidado de esta otra 
contrase&ntilde;a,
+y no podr&iacute;amos utilizar este m&eacute;todo.</font></li>
+</ol>
+
+<ol>
+<li>
+<font color="#FF0000">Si este fuera el caso, reinicia otra vez tu ordenador.
+Deber&aacute;s intentar arrancar s&oacute;lo una shell, (por ejemplo bash),
+escribiendo: LILO: linux init=/bin/bash (el fichero puede estar tambi&eacute;n
+en /sbin/bash o en /usr/bin/bash), si nos dan paso, continua con el punto
+siguiente:</font></li>
+</ol>
+
+<ol>
+<li>
+<font color="#000000">Si nos han dado paso, (ya nos hubi&eacute;ramos acordado
+del password 'unpassword', o no existiera esta l&iacute;nea en el fichero
+/etc/lilo.conf, deberemos montar nuestra unidad como de lectura y escritura,
+YA QUE POR DEFECTO SE MONTAR&Aacute; EN S&Oacute;LO LECTURA, </font><b><font 
color="#3333FF">(ESTA
+FORMA DE MONTAGE "S&oacute;lo lectura" PUEDE SER INTERESANTE PARA REALIZAR
+UN CHEQUEO MANUAL AL SISTEMA "fsck -ct /dev/disco_duro_y_partici&oacute;n")
+</font></b><font color="#000000">escribiendo
+las siguientes sentencias:</font></li>
+</ol>
+<a NAME="LinuxSingle"></a>
+<br>
+<hr WIDTH="100%">
+<ol>PARA MONTAR EL SISTEMA EN <b>SOLO LECTURA: </b>(previa entrada como
+"linux single" en LILO: al inicio)
+<ol>
+<li>
+<font color="#000000">mount -n -o remount,ro /</font></li>
+</ol>
+</ol>
+
+<hr WIDTH="100%">
+<ol>PARA MONTAR EL SISTEMA EN <b>LECTURA/ESCRITURA:</b>
+<ol>
+<li>
+<font color="#000000">mount -n -o remount,rw /</font></li>
+
+<li>
+<font color="#000000">mount /proc</font></li>
+
+<li>
+<font color="#000000">mount -a -t nonfs</font></li>
+
+<li>
+<font color="#000000">passwd</font></li>
+
+<br><font color="#000000">Para volver a poner el password de 
'root'.</font></ol>
+</ol>
+
+<hr WIDTH="100%">
+<ol>
+<li>
+<b><font size=+1>Edita el fichero (/etc/passwd) y suprime la l&iacute;nea
+del password</font></b>, y si no pudieras editar el fichero deber&aacute;s
+escribir la l&iacute;nea siguiente: (Editores: vi, emacs, joe...)</li>
+
+<ol>
+<li>
+cd /etc/</li>
+
+<li>
+(editar el fichero con vi, joe, emacs, si no puedes intenta con:)</li>
+
+<li>
+SOLO EN CASO DE QUE NO PUDIERAS EDITAR EL FICHERO, DEBEREMOS <b>INCORPORAR
+TEMPORALMENTE OTRO ADMINISTRADOR</b>, PARA LO QUE SE PROCEDER&Aacute; A:</li>
+
+<li>
+cp passwd passwd.ORIGINAL (o si quieres, ponle delante el camino (path)
+que es el siguiente: "cp /etc/passwd /etc/passwd.ORIGINAL"</li>
+
+<li>
+echo "otro::0:0::/:/bin/sh" >> passwd</li>
+</ol>
+
+<ol>DESPU&Eacute;S DE ESTO, REINICIA TU M&Aacute;QUINA:
+<p>Ahora deber&iacute;as poder entrar como 'otro' cuando aparece el login,
+osea
+<p>login: otro
+<p>(y ya podr&iacute;as entrar en tu m&aacute;quina)
+<br>&nbsp;</ol>
+</ol>
+Evidentemente, una vez que tengas solucionado tu mala memoria deber&aacute;s
+poner de nuevo el viejo fichero /etc/passwd, si te has visto obligado a
+incorporar temporalmente otro administrador.
+<br>&nbsp;
+<ol>
+<li>
+<font color="#FF0000">Si no te dan paso, hazte de un disco de arranque
+de Linux y escribe:</font></li>
+
+<ol>
+<li>
+<font color="#FF0000">mount -t ext2 /dev/hda2 /mnt</font></li>
+
+<li>
+<font color="#FF0000">cd /mnt/etc </font><font color="#3366FF">(Ahora 
estar&iacute;as
+en el disco duro "/dev/hda3")</font></li>
+
+<li>
+<font color="#FF0000">vi passwd</font></li>
+</ol>
+</ol>
+
+<ul>
+<ul>Si por alguna raz&oacute;n no pudieras, ve el punto de arriba poniendo
+otro administrador y siendo cuidadoso de poner delante "/mnt"</ul>
+Evidentemente, una vez que tengas solucionado tu mala memoria deber&aacute;s
+poner de nuevo el viejo fichero /etc/passwd, si te has visto obligado a
+incorporar temporalmente otro administrador.</ul>
+REPARA EN:
+<br>&nbsp;
+<ul>
+<li>
+Desconecta tu conexi&oacute;n a Internet (bastar&aacute; con que desconectes
+el tel&eacute;fono de tu PC, mientras haces estas operaciones)</li>
+
+<li>
+No decirles a tus amigos que se te ha olvidado la clave de acceso como
+'root'.</li>
+</ul>
+</ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ComandosUtiles"></a>
+<h3>
+COMANDOS &Uacute;TILES</h3>
+
+<ul>Los comandos &uacute;tiles para el sistema son:
+<br>&nbsp;
+<ul>
+<li>
+setup - Configuraci&oacute;n general del inicio del sistema</li>
+
+<li>
+linuxconf - Configuraci&oacute;n General del sistema</li>
+
+<li>
+(archivos de configuraci&oacute;n de los propios demonios)</li>
+
+<li>
+YaST - Similar a linuxconf</li>
+
+<li>
+netcfg - Configurar&aacute; la red (Bajo X-Window)</li>
+
+<li>
+<a href="mailto:address@hidden";>apachecfg</a> - Configurar&aacute;
+el servidor APACHE (Bajo X-Window) /* un 10 en facilidad */</li>
+
+<li>
+<a href="http://www.apache.org";>comanche</a> - Configurar&aacute; el servidor
+APACHE (Bajo X-Window) /* un 10 en potencia */</li>
+
+<li>
+(otros programas de configuraci&oacute;n para IRC y FTP)</li>
+
+<li>
+sudo (No se recomienda su instalaci&oacute;n)</li>
+
+<li>
+El fichero /etc/fstab, informar&aacute; de sistemas de ficheros que se
+pueden cargar.</li>
+
+<li>
+El fichero /etc/mtab, informar&aacute; de la forma de cargar los sistemas
+de ficheros durante el proceso de inicio.</li>
+</ul>
+
+<p><br>El fichero La modificaci&oacute;n del fichero /etc/group, podr&aacute;
+hacer que ciertos usuarios tengan privilegios sobre el sistema. (A Usuarios
+Inexpertos no se recomienda su modificaci&oacute;n)
+<p>Existen, actualmente multitud de programas para la configuraci&oacute;n
+de casi, cualquier proceso de Linux, otros, todav&iacute;a se encuentran
+en desarrollo, es evidente que no vamos a exponer aqu&iacute; todos ellos,
+por lo que solamente hemos puesto los m&aacute;s usados.
+<p>Y leete antes toda la documentaci&oacute;n disponible para evitar cometer
+errores.</ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ArchivosLOGS"></a>
+<h3>
+ARCHIVOS DE REGISTRO</h3>
+
+<ul>En el directorio /var/log/, se guardan los &uacute;ltimos accesos y
+que fue lo que hizo para cada uno de los programas que tengan un .log en
+este directorio.
+<p>Tambi&eacute;n existen .bash_history .(u otras shells)_history, para
+saber que fue lo &uacute;ltimo que hizo ese usuario.</ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<h3>
+<a NAME="EntrarEnLinux"></a></h3>
+
+<h3>
+FORMAS DE ENTRAR EN LINUX</h3>
+&nbsp;
+<ul>Mirate la secci&oacute;n <a href="#ContraseñaRoot">Contrase&ntilde;a
+Olvidada</a> o tambi&eacute;n <a href="#CambioContraseña">Cambiar 
Contrase&ntilde;a.</a></ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ActualizarSistema"></a>
+<h3>
+ACTUALIZAR EL SISTEMA</h3>
+
+<ul>Generalmente todos los Sistemas Linux se distribuyen en CD-ROM, y en
+la misma opci&oacute;n de instalaci&oacute;n nos da a elegir entre [Install]
+o [Upgrade], Install, lo usaremos para instalar una vez el sistema, mientras
+[Upgrade] (Actualizar en ingl&eacute;s) se utilizar&aacute; para Actualizar
+el Sistema, bien, a&ntilde;adiendo componentes que no hubi&eacute;ramos
+puesto antes, o si hemos comprado una nueva distribuci&oacute;n del mismo
+Sistema, Actualizar los &uacute;ltimos cambios.
+<p>Actualizar el Sistema v&iacute;a Internet, u otro tipo (por disquetes
+sueltos, no englobados en una distribuci&oacute;n...), este tipo de 
actualizaci&oacute;n
+ser&aacute; manual.
+<p>Todos los programas que te bajes de internet con formato .tgz, 
deber&aacute;s
+de moverlos a tu directorio /home/[usuario], y como USUARIO deber&aacute;n
+ser descomprimidos.
+<p>No se recomiendan ser descomprimidos como ROOT.</ul>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="SeguridadInternet"></a>
+<br>SEGURIDAD EN INTERNET
+<br>&nbsp;
+<blockquote><font color="#000000">Esta es una secci&oacute;n muy delicada,
+decir que nosotros tenemos la "medecina que todo lo cura", es imposible,
+s&oacute;lamente daremos algunas ideas, y est&aacute; especialmente dedicado
+a "intranets" y Administradores de redes, aunque tambi&eacute;n es 
perfectamente
+aplicable a usuarios dom&eacute;sticos.</font>
+<p><font color="#000000">Muy importante, mirate las HOWTO en Ingl&eacute;s,
+o los &iquest;C&oacute;mo? en Espa&ntilde;ol que se encuentran:</font>
+<br>&nbsp;
+<ul><font color="#000000"><a href="/usr/doc/HOWTO/">/usr/doc/HOWTO/</a></font>
+<ul>
+<li>
+<font color="#000000">En Ingl&eacute;s.</font></li>
+</ul>
+<font color="#000000"><a 
href="/usr/doc/HOWTO/translations/es/">/usr/doc/HOWTO/translations/es/</a></font>
+<ul>
+<li>
+<font color="#000000">En Espa&ntilde;ol.</font></li>
+</ul>
+</ul>
+
+<p><br><font color="#000000">1&ordm; Las claves:</font>
+<blockquote>&nbsp;
+<br><font color="#000000">Las claves son fundamentales, ten siempre una
+clave ALFANUM&Eacute;RICA, mezclada con signos de puntuaci&oacute;n.</font>
+<p><font color="#000000">Ejemplos de claves incorrectas:</font>
+<p><font color="#000000">usuario: javier</font>
+<br><font color="#000000">clave: 
javier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&iexcl;&iexcl;INCORRECTO!!</font>
+<p><font color="#000000">NUNCA tengas la misma clave de nombre que de 
usuario.</font>
+<br><font color="#000000">NUNCA tengas una clave s&oacute;lo alfab&eacute;tica
+y que se pueda buscar en un diccionario.</font>
+<br><font color="#000000">NUNCA tengas una clave inferior a 8 
caracteres.</font>
+<br><font color="#000000">NUNCA tengas una clave TODAS en may&uacute;sculas
+o en min&uacute;sculas</font>
+<p><font color="#000000">Ejemplo de claves correctas:</font>
+<p><font color="#000000">usuario: javier</font>
+<br><font color="#000000">clave: Ke3,$taX</font>
+<br>&nbsp;</blockquote>
+<font color="#000000">2&ordm; <a href="linux4.html">Los permisos:</a></font>
+<br>&nbsp;
+<br>&nbsp;
+<blockquote><font color="#000000">Has de tener claro el tema de <a 
href="linux4.html">los
+permisos</a>, a los usuarios que tengan cuentas en tu m&aacute;quina, "si
+acceden remotamente", bien sea por "telnet" o por: Secure Shell, no 
deber&aacute;n
+de:</font>
+<br>&nbsp;
+<ol>
+<li>
+<font color="#000000">Poder ejecutar aplicaciones asignadas a root: /sbin,
+/bin, /usr/sbin, dichas aplicaciones deber&aacute;n de tener siempre los
+permisos:&nbsp; <b>-rwx</b></font><b><font color="#FF0000">r-x</font><font 
color="#000000">---&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp; root</font></b><font color="#000000">, que
+significa que s&oacute;lo puede ejecutar, leer y escribir root, o el grupo
+de root, que en este caso s&oacute;lo podr&aacute;n leer y 
ejecutar.</font></li>
+
+<li>
+<font color="#000000">No poder acceder a ciertos directorios, o ciertos
+ficheros, para que no suelan realicar cambios al sistema, todos los ficheros
+que puedan ser susceptibles de ser cambiados deber&iacute;an de llevar
+directamente los atributos de arriba.</font></li>
+
+<ul>
+<li>
+<font color="#000000"><a href="Passwd.sample.txt">/etc/passwd</a></font></li>
+
+<li>
+<font color="#000000"><a href="group.sample.txt">/etc/group</a></font></li>
+
+<li>
+<font color="#000000">/etc/shadow</font></li>
+
+<li>
+<font color="#000000">/etc/rc.d/*</font></li>
+
+<li>
+<font color="#000000">/etc/inittab</font></li>
+
+<li>
+<font color="#000000">/root</font></li>
+
+<li>
+<font color="#000000">/etc/default</font></li>
+
+<li>
+<font color="#000000">etc&eacute;tera.</font></li>
+</ul>
+
+<li>
+<font color="#000000">No deber&aacute;n acceder a otras de cuentas de otros
+usuarios, por defecto.</font></li>
+
+<li>
+<font color="#000000">No deben de tener permisos de escritura sobre 
NING&Uacute;N
+DISPOSITIVO que puediera comprometer la seguridad del sistema. En /dev/,
+se guardan los nombres de los dispositivos del sistema.</font></li>
+</ol>
+</blockquote>
+
+<p><br>3&ordm; Los servicios (puertos)
+<br>&nbsp;
+<blockquote>Procura en la medida de lo posible tener TODOS LOS SERVICIOS
+QUE NO UTILICES CERRADOS, y cambia los puertos para que no sean los que
+vengan por defecto, un servicio abierto, y un puerto conocido, es un agujero
+por donde pueden entrar INDESEABLES! el fichero en concreto donde se guardan
+los servicios activos es:
+<p><a href="inetd.conf">/etc/inetd.conf</a>
+<p>El fichero donde se guardan los n&uacute;meros de los puertos del sistema
+es:
+<p><a href="services">/etc/services</a>
+<br>&nbsp;
+<p>As&iacute;, observando el fichero anterior observamos que para acceder
+al servicio FTP (el &uacute;nico abierto) a esta m&aacute;quina deber&aacute;
+ser a traves de puerto 21.</blockquote>
+
+<p><br>4&ordm; Usar DIALD
+<br>&nbsp;
+<blockquote>Usar DIALD, har&aacute; que se trabaje bajo demanda, y cuando
+un cliente requiera salir a INTERNET, diald se encargar&aacute; de llamar
+a pppd para que marque el tel&eacute;fono del modem/RDSI/etc y salga el
+cliente, cuando haya terminado si nadie requiere salir a INTERNET, DIALD
+le dir&aacute; a PPPD que cuelgue el modem.
+<p>Este es el m&eacute;todo m&aacute;s seguro ya que si NO EST&Aacute;S
+CONECTADO A INTERNET, nadie podr&aacute; entrar en tu m&aacute;quina.
+<p>&nbsp;<a 
href="/usr/doc/HOWTO/translations/es/PPP-Como">/usr/doc/HOWTO/translations/es/PPP-Como</a></blockquote>
+5&ordm; Configurar un PROXY y un FIREWALL
+<br>&nbsp;
+<blockquote><a 
href="/usr/doc/HOWTO/translations/es/Cortafuegos-Como">/usr/doc/HOWTO/translations/es/Cortafuegos-como</a>
+<br><a 
href="/usr/doc/HOWTO/translations/es/PPP-Como">/usr/doc/HOWTO/translations/es/PPP-Como</a>
+<br><a 
href="/usr/doc/HOWTO/translations/es/PPP-Como">/usr/doc/HOWTO/translations/es/mini/Servidor-Intranet-Como</a></blockquote>
+6&ordm; Actualizaci&oacute;n de Software de RED
+<br>&nbsp;
+<blockquote>Usa SOFTWARE ACTUALIZADO y pon los parches a los programas
+que tengan fallos.
+<br><a 
href="/usr/doc/HOWTO/translations/es/PPP-Como">/usr/doc/HOWTO/translations/es/PPP-Como</a>
+<br><a 
href="/usr/doc/HOWTO/translations/es/mini/Servidor-Intranet-Como">/usr/doc/HOWTO/translations/es/mini/Servidor-Intranet-Como</a></blockquote>
+</blockquote>
+<a href="#AquiArriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/login_img.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/login_img.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/login_img.gif
Binary files /dev/null and /tmp/cvsevU2fQ differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/logo.jpg
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/logo.jpg
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/logo.jpg
Binary files /dev/null and /tmp/cvsl6jFoR differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/logoLT.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/logoLT.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/logoLT.gif
Binary files /dev/null and /tmp/cvs1ds5gU differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/ls_conYsin_alias.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/ls_conYsin_alias.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/ls_conYsin_alias.gif
Binary files /dev/null and /tmp/cvs8xqqPU differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/lynx-cfg.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/lynx-cfg.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/lynx-cfg.gif
Binary files /dev/null and /tmp/cvsb8u92S differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/lynxhow1.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/lynxhow1.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/lynxhow1.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/lynxhow1.html   3 Mar 2012 
06:14:39 -0000       1.1
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i586) [Netscape]">
+</HEAD>
+<BODY>
+<A HREF="../tutorial.html#Comienzo">[ &lt; ]</A>
+<H1>
+&iquest;Qu&eacute; hago en Lynx?</H1>
+Lynx es un navegador Web que funciona en modo texto..
+<P>La principal ventaja de Lynx es que NO nos obliga a 'subir' a ning&uacute;n
+entorno de ventanas (ll&aacute;mese &eacute;ste XWindow, OS/2, Windows...)
+para ver cualquier fichero HTML que nos encontremos en nuestro disco duro,
+ya que simplemente podemos irnos en modo texto a cualquier p&aacute;gina
+Web para consultar cualquier cosa en un momento dado.
+<P>El principal funcionamiento de Lynx es:
+<UL>
+<LI>
+Teclas del cursor: Arriba y abajo, seleccionamos el enlace de la p&aacute;gina
+a ir.</LI>
+</UL>
+
+<OL>
+<LI>
+Teclas del cursor: (izquierda, derecha)</LI>
+</OL>
+
+<UL>
+<LI>
+La tecla del cursor izquierda, har&aacute; retroceder a la p&aacute;gina
+que anteriormente hubi&eacute;ramos visto.</LI>
+
+<LI>
+La tecla de la derecha, para avanzar hasta la p&aacute;g. que queramos
+ver.</LI>
+
+<LI>
+Espacio, har&aacute; ver la siguiente parte de la p&aacute;gina que no
+estamos viendo.</LI>
+
+<LI>
+[Insert] y [Supr], nos har&aacute; movernos suavemente por la 
p&aacute;gina.</LI>
+
+<LI>
+[Inicio] y [Fin ], har&aacute; movernos hasta los bordes de la 
p&aacute;gina.</LI>
+
+<LI>
+[Q] har&aacute; salirnos del programa, bien pulsando 2 veces [Q], o [Q]
+y posteriormente confirmando con Y</LI>
+</UL>
+Existe una magn&iacute;fica ayuda dentro del programa, as&iacute; como
+en el directorio <A HREF="/usr/doc/HOWTO">/usr/doc/HOWTO (comprimido)</A><A 
HREF="/usr/doc/HOWTO"></A>
+<P>Recomendamos que se haga una modificaci&oacute;n del fichero de 
configuraci&oacute;n:
+"/etc/lynx.cfg", para personalizar
+<BR>las opciones.<A HREF="/usr/doc/HOWTO"></A>
+<P><IMG SRC="lynx-cfg.gif" HEIGHT=306 WIDTH=512>
+<BR><A HREF="../tutorial.html#Comienzo">[ &lt; ]</A>
+<BR>(S&oacute;lo aplicable para lynx de linux)
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-1.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-1.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-1.gif
Binary files /dev/null and /tmp/cvsfo9s1W differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-2.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-2.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/mc-mio-2.gif
Binary files /dev/null and /tmp/cvshPWzdV differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/mkbootdisk.jpg
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/mkbootdisk.jpg
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/mkbootdisk.jpg
Binary files /dev/null and /tmp/cvslBGSLV differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/moreinfo.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/moreinfo.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/moreinfo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/moreinfo.html   3 Mar 2012 
06:14:39 -0000       1.1
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="Author" CONTENT="Javier Orovengua Miguel">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>More Information about LinuxTutorial</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" 
ALINK="#FF0000">
+
+<H2>
+More Information:</H2>
+
+<UL>
+<LI>
+This Tutorial has been written by Jos&eacute; Carlos &amp; Javier 
Orovengua.</LI>
+
+<BR>&nbsp;
+<UL>If you are not connected to the Internet, but you want to write an
+e-mail, then you must go to a CyberCaf&eacute; and open one e-mail account
+in one of this e-mail servers:</UL>
+
+<UL>
+<UL>
+<LI>
+<A HREF="http://www.latinmail.com";>http://www.latinmail.com</A></LI>
+
+<LI>
+<A HREF="http://www.usa.net";>http://www.usa.net</A></LI>
+
+<LI>
+<A HREF="http://www.yahoo.com";>http://www.yahoo.com</A></LI>
+
+<LI>
+etcetera.</LI>
+</UL>
+This e-mail servers are free (without charge), but you must tolerate the
+publicity.</UL>
+
+<LI>
+On the other hand, if you think something is badly expressed, or there
+is a word or sentence poorly written (in any language), please tell the
+authors.</LI>
+</UL>
+
+<UL>
+<LI>
+(When we have more things to say, we will put them in this page.)</LI>
+</UL>
+
+<UL>&nbsp;
+<P><A HREF="translate.html">(Back)</A></UL>
+
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/msdos.sys
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/msdos.sys
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/msdos.sys
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/msdos.sys       3 Mar 2012 
06:14:39 -0000       1.1
@@ -0,0 +1,39 @@
+;SYS
+[Paths]
+WinDir=C:\WINDOWS
+WinBootDir=C:\WINDOWS
+HostWinBootDrv=C
+
+[Options]
+Autoscan=2
+BootMulti=1
+BootGUI=1
+DoubleBuffer=1
+Network=1
+logo=0
+BootDelay=5
+;
+;The following lines are required for compatibility with other programs.
+;Do not remove them (MSDOS.SYS needs to be >1024 bytes).
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxh
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxj
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxk
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxl
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxm
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxn
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxo
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr
+;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs
+BootMenu=1
+BootMenuDelay=5
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.carga
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.carga
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.carga
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.carga       3 Mar 
2012 06:14:39 -0000       1.1
@@ -0,0 +1,4 @@
+/dev/hda3 / ext2 rw 0 0
+none /proc proc rw 0 0
+/dev/hdb2 /mnt/+linux ext2 rw 0 0
+/dev/hdb1 /mnt/2disco vfat rw,noexec,nosuid 0 0

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/mtab.sample.txt 3 Mar 2012 
06:14:40 -0000       1.1
@@ -0,0 +1,5 @@
+/dev/hda3 / ext2 rw 0 0
+none /proc proc rw 0 0
+/dev/hdb2 /mnt/+linux ext2 rw 0 0
+/dev/hda1 /mnt/1disco vfat rw,noexec,nosuid 0 0
+/dev/hdb1 /mnt/2disco vfat rw,noexec,nosuid 0 0

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/muchasgracias.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/muchasgracias.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/muchasgracias.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/muchasgracias.html      3 Mar 
2012 06:14:40 -0000       1.1
@@ -0,0 +1,69 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.14 
i686) [Netscape]">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="Description" content="Agradecimientos.">
+   <title>LinuxTutorial, Muchas gracias a...</title>
+</head>
+<body text="#000000" bgcolor="#FF6666" link="#0000EF" vlink="#33FF33" 
alink="#993399">
+<a href="gracias_a.html">[ &lt; ] </a><a href="contenidos.html">[
+|| ]</a> [ > ]
+<br>&nbsp;
+<blockquote>
+<center>
+<h1>
+<b><font size=+2>GRACIAS A:</font></b></h1></center>
+</blockquote>
+
+<blockquote>
+<center><font size=+1>A nuestros padres, hermanos y amistades (de cualquier
+tipo) por la paciencia y tiempo que les hemos quitado, A Carlos Perell&oacute;
+(lxhispano) "El primero que confi&oacute; en nosotros", Cox, Latino, Ator,
+HoraPe, pixie, dan-man, Ismael Olea (Coordinador de LuCAS, por interesarse
+en instalar LT en la <a href="http://lucas.hispalinux.es";>Web de LuCAS</a>),
+N0mada,Tom][3, (por ser nuestro primer LinuxTutorial-tester), Vader, Ohp,
+PandE, Fernand0, IP_HDRunk, ErConde, ash, Eric, banzai, Vidal, Motxu (Por
+dejarme su ordenador como "cacharro de pruebas", &iquest;Instalamos?&nbsp;
+;-D ), Lolo, Luis, ^Vs^, Suzuki (Por su paciencia), Pepo, Ama, Ana (dkl),
+padre, }-Pow-{, Wiwi... y a todos los que me quedo atr&aacute;s, a los
+principiantes de
+<font color="#99FFCC">#linux_novatos</font>, que en fase
+de desarrollo se decidieron por probarlo, a todas las personas que en fase
+de elaboraci&oacute;n, y cuando todav&iacute;a esto no era m&aacute;s que
+un boceto dijeron "&iexcl;est&aacute; chulo!", porque eso nos anim&oacute;
+a continuar, a la gente que me quedo atr&aacute;s del canal de <font 
color="#33CC00">#linux</font>,
+porque ellos me han ayudado mucho, al Cibercaf&eacute; <a 
href="http://www.007net.com/cibercity";>CiberCity
+de C&aacute;ceres</a>, por las muchas horas que me han regalado,&nbsp;
+;-), a la gente que del canal <font color="#66FFFF">#linux_party</font>
+que me dieron ideas de&nbsp; c&oacute;mo y a qu&eacute; otros formatos
+pasar TutorialLinux "con el tiempo lo har&eacute;" :-), A Extremoduro,
+Platero y t&uacute;, La Oreja De Van Gogh, Dover, Mal&uacute;,&nbsp; Mojinos
+Escocios, porque ellos hicieron con su m&uacute;sica m&aacute;s llevadero
+mi trabajo, A los bares y las copas, porque en ellos se intercambian muchas
+opiniones, A la gente que invent&oacute; el Composer de NetScape, porque
+sino fuera por ellos esto se habr&iacute;a eternizado, a PepsiCo y CocaCola,
+por mantenerme despierto, y a todos aquellos que han confiado en 
nosotros.</font>
+<br>&nbsp;
+<p><font size=+1>Me despido, hasta siempre.</font>
+<br><font size=+1>No cierres esos ojos</font>
+<br><font size=+1>Que tienen la luz que me falta.</font></center>
+
+<p><br>
+<ul>
+<li>
+<font size=+1>Javier Orovengua Miguel.</font></li>
+
+<li>
+<font size=+1>Jos&eacute; Carlos Orovengua Miguel.</font></li>
+</ul>
+</blockquote>
+
+<p><br><a href="gracias_a.html">[ &lt; ] </a><a href="contenidos.html">[
+|| ]</a> [ > ]
+<br>&nbsp;
+<blockquote>&nbsp;</blockquote>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg-2.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg-2.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg-2.gif
Binary files /dev/null and /tmp/cvs34XV51 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/network-cfg.gif
Binary files /dev/null and /tmp/cvsLXMgh0 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/nuevo.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/nuevo.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/nuevo.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/nuevo.html      3 Mar 2012 
06:14:40 -0000       1.1
@@ -0,0 +1,48 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="GNU Linux/Hispano con Javier y José Carlos 
Orovengua.">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.14 
i686) [Netscape]">
+</head>
+<body text="#000000" bgcolor="#33CCFF" link="#0000EF" vlink="#55188A" 
alink="#FF0000">
+<a href="sobre_tutorial.html">[ &lt; ]</a>
+<h1>
+<a href="sobre_tutorial.html"><img SRC="logoLT.gif" height=123 
width=80></a>&iquest;Qu&eacute;
+tiene de nuevo esta versi&oacute;n de TutorialLinux:?</h1>
+Con respecto a la versi&oacute;n: 2.4.1
+<br>
+<hr WIDTH="100%">
+<br>&nbsp;
+<blockquote>(Los puntos 1 y 2 son de inter&eacute;s si TutorialLinux 
est&aacute;
+instalado en local "disco duro")
+<ul>
+<li>
+La instalaci&oacute;n NO MODIFICA NADA, para modificar <a 
href="bashrc">/etc/bashrc</a>
+y <a href="profile">/etc/profile</a>, (que hacian las antiguas instalaciones)
+si lo desea, deber&aacute; ejecutar el script: "post-InstalaTutorial".
+TutorialLinux se instala para KDE y GNOME</li>
+
+<li>
+La nueva ubicaci&oacute;n de TutorialLinux es: <a 
href="/usr/doc/TutorialLinux">/usr/doc/TutorialLinux</a></li>
+
+<li>
+Los paquetes de instalaci&oacute;n ahora est&aacute;n en:</li>
+
+<ol>
+<li>
+.tar.gz (<b>Estandard Linux</b> y SlackWare)</li>
+
+<li>
+.rpm (Para compatibles con Red Hat Package Manager: suse, redhat...)</li>
+
+<li>
+.deb (Para Debian)</li>
+</ol>
+</ul>
+</blockquote>
+<a href="sobre_tutorial.html">[ &lt; ]</a>
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/onlyfile.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/onlyfile.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/onlyfile.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/onlyfile.html   3 Mar 2012 
06:14:40 -0000       1.1
@@ -0,0 +1,953 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Usuario por defecto al comenzar Netscape 
Communicator 4.0">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+   <title>Gesti&oacute;n completa de Ficheros.</title>
+</head>
+<body text="#000000" bgcolor="#FFCC99" link="#0000EE" vlink="#551A8B" 
alink="#FF0000">
+<a NAME="arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<br>&nbsp;
+<h2>
+Gestionando archivos.</h2>
+
+<ul>
+<li>
+<a href="setuid.html">Hacer SET UID/GID a ficheros/directorios</a></li>
+
+<li>
+<a href="#VerArchivo">Ver el contenido de un archivo.</a></li>
+
+<li>
+<a href="#VerArchivoComprimido">Ver el contenido de un archivo 
comprimido.</a></li>
+
+<li>
+<a href="#CopiarArchivo">Copiar un archivo.</a></li>
+
+<li>
+<a href="#MoverArchivo">Mover un archivo.</a></li>
+
+<li>
+<a href="#RenombrarArchivo">Renombrar un archivo.</a></li>
+
+<li>
+<a href="#BorrarArchivo">Borrar un archivo.</a></li>
+
+<li>
+<a href="#BorrarDirectorio">Borrar un DIRECTORIO.</a></li>
+
+<li>
+<a href="#ImprimirArchivo">Imprimir un archivo.</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<a href="onlyfile.html#Redireccion">Redireccionamiento, tipos.</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<a href="#CrearConJoe">Crear un archivo con Joe</a></li>
+
+<li>
+<a href="#CrearConVi">Crear un archivo con Vi</a></li>
+
+<li>
+<a href="#CrearConEmacs">Crear un archivo con Emacs</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<a href="#CompriArchivo">Comprimir un archivo.</a></li>
+
+<li>
+<a href="#ComprEstruc">Comprimir una estructura de directorios</a></li>
+
+<li>
+<a href="#DescomArchivo">Descomprimir un archivo</a></li>
+
+<li>
+<a href="#DescomEstruct">Descomprimir una estructura de directorios</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<a href="#InstalarRPM">Instalar un programa (formato .RPM)</a></li>
+
+<li>
+<a href="#DesinstRPM">Desinstalar un programa (formato .RPM)</a></li>
+
+<li>
+<a href="/usr/doc/HOWTO/translations/es/html/RPM-Como.html">Mini curso
+de creaci&oacute;n de un .RPM (Requiere documentaci&oacute;n)</a></li>
+
+<li>
+<a href="RPMgestion.html">Gesti&oacute;n paquetes .RPM</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+<a href="#InstTGZ">Instalar un programa (formato .tgz o .tar.gz)</a></li>
+
+<li>
+<a href="#DesinstTGZ">Desinstalar un programa (formato .tgz o .tar.gz)</a></li>
+</ul>
+
+<p><br><a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="VerArchivo"></a>
+<h2>
+Ver un archivo.</h2>
+
+<ul>Para ver el contenido de un archivo podr&aacute;s escribir:
+<ul>
+<li>
+cat</li>
+
+<li>
+more</li>
+
+<li>
+less</li>
+
+<br>&nbsp;
+<ul>
+<li>
+cat</li>
+
+<br>cat &lt;fichero>, y ver&aacute;s el contenido de un fichero, por ejemplo
+cat carta.txt ver&aacute;s el contenido de la carta, pero si la carta es
+demasiado grande deber&aacute;s escribir un par&aacute;metro para que puedas
+leer detenidamente el contenido, es "|more", entonces, para cartas largas
+escribe: cat carta.txt |more
+<br>&nbsp;
+<li>
+more</li>
+
+<br>more &lt;fichero>, realiza la misma opci&oacute;n de cat carta.txt
+|more, pero evidentemente tendr&aacute;s que escribir menos, bastar&aacute;
+escribir el comando de la siguiente manera: more carta.txt
+<br>&nbsp;
+<li>
+less</li>
+
+<br>Ya que con cat, perder&aacute;s el contenido del fichero por la parte
+superior de la pantalla, con less, podr&aacute;s navegar por el fichero,
+y con los cursores podr&aacute;s ir para arriba y para abajo dentro del
+mismo fichero: less carta.txt</ul>
+</ul>
+</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="VerArchivoComprimido"></a>
+<h2>
+Ver un archivo comprimido.</h2>
+
+<ul>Para ver un archivo comprimido, y sin quererlo descomprimir podr&aacute;s
+utilizar los comandos zcat, zmore y zless, que realizan las mismas cosas
+que cat, more y less respectivamente, pero en ficheros NO comprimidos.</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CopiarArchivo"></a>
+<h2>
+Copiar un Archivo.</h2>
+
+<ul>Para copiar un archivo deber&aacute;s utilizar el comando <b>cp</b>,
+este comando es muy potente, y podr&aacute;s realizar un mont&oacute;n
+de operaciones con el, su funcionamiento es el siguiente:
+<p>cp &lt;origen> &lt;destino>
+<p>As&iacute;, por ejemplo, si queremos copiar la carta "carta.txt" como
+"MiCarta.txt", podr&aacute;s escribir:
+<p>cp carta.txt MiCarta.txt
+<p>Tambi&eacute;n podr&aacute;s indicar la ruta de origen y destino 
(directorios
+en lo que est&aacute; situado), por ejemplo, supongamos que escribimos
+pwd, y nos dicen que estamos en:
+<p>/home/javier
+<p>Queremos copiar el archivo FAQ que hay en <b>/usr/doc/HOWTO/ </b>a mi
+directorio <b>MisDocumentos</b>, que se encuentra en 
<b>/home/javier/MisDocumentos,</b>
+podremos escribir:
+<p>cp /usr/doc/HOWTO/FAQ MisDocumentos/
+<p>o
+<p>cp /usr/doc/HOWTO/FAQ /home/javier/MisDocuementos/</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="MoverArchivo"></a>
+<h2>
+Mover un Archivo.</h2>
+
+<ul>Mover un archivo, significa, quitarlo de su posici&oacute;n actual
+para fijarlo donde se le indique, esta operaci&oacute;n, se hace en Linux
+con <a href="glosary.html#mv">mv</a> de la siguiente manera:
+<p>mv <b>fichero_o_directorio_a_mover</b> ruta_donde_moverlo
+<p>Supongamos que nos encontramos en: /home/javier:
+<p>Por ejemplo para mover el fichero "mbox" que est&aacute; en mi directorio
+al directorio MisDocumentos/javier/ que est&aacute; en /usr, escribir&eacute;:
+<p>mv mbox /usr/MisDocumentos/
+<p>Ahora, el fichero mbox, se encuentra en el directorio javier, que 
est&aacute;
+en MisDocumentos que est&aacute; en usr, es decir: 
"/usr/MisDocumentos/javier"</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="RenombrarArchivo"></a>
+<h2>
+Renombrar un Archivo.</h2>
+
+<ul>Para renombrar un archivo utilizar&aacute;s el comando <a 
href="glosary.html">mv</a>
+de la siguiente manera:
+<p>mv NombreOrinal <b>NuevoNombre</b>
+<p>Por ejemplo, renombrar el fichero mbox, a <b>EmailSaved</b>
+<p>mv mbox EmailSaved</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="BorrarArchivo"></a>
+<h2>
+Borrar un Archivo.</h2>
+
+<ul>Para borrar un archivo, es tan f&aacute;cil como utilizar el comando
+<a href="glosary.html#rm">rm</a>
+de la siguiente manera:
+<p>rm fichero_a_borrar
+<p>Ejemplo:
+<p>rm mbox</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%"><a NAME="BorrarDirectorio"></a>
+<h2>
+Borrar un DIRECTORIO.</h2>
+
+<ul>Para borrar un directorio deber&aacute;s utilizar el comando <a 
href="glosary.html#rmdir">rmdir</a>,
+de la siguiente manera:
+<p>Esto es un ejemplo:
+<p>Crea un directorio que se llame <b>ParaBorrar</b>, con el comando <a 
href="glosary.html#mkdir">mkdir</a>
+<p><a href="glosary.html#mkdir">mkdir</a> ParaBorrar
+<p>Vemos los ficheros que tenemos con el comando <a 
href="glosary.html#ls">ls</a>
+<p><a href="glosary.html#ls">ls</a>
+<p>y lo borramos con <a href="glosary.html#rmdir">rmdir</a>
+<p><a href="glosary.html#rmdir">rmdir</a> ParaBorrar
+<p>ls
+<p>Ya sabes, que tambi&eacute;n podr&aacute;s crear un directorio o borrarlo,
+sin necesidad de acceder a el, simplemente indicando su ruta:
+<p>mkdir /usr/doc/HOWTO/EstoEsMio
+<br>rmdir /usr/doc/HOWTO/EstoEsMio
+<br>&nbsp;</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ImprimirArchivo"></a>
+<h2>
+Imprimir un Archivo.</h2>
+
+<ul>&nbsp;Para verter el contenido de un archivo sobre papel, deber&aacute;s
+utilizar el comando lpr, de la siguiente manera:
+<p><a href="glosary.html#lpr">lpr</a> <b>Fichero_a_imprimir</b></ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CrearConJoe"></a>
+<h2>
+Crear con Joe</h2>
+
+<ul>El joe, es el procesador de Textos de Linux m&aacute;s f&aacute;cil
+de utilizar:
+<br>&nbsp;
+<ul>
+<li>
+Crear un archivo</li>
+
+<br>joe <b>nombre_del_fichero</b>
+<br>&nbsp;
+<li>
+Guardar el documento:</li>
+
+<br>Ctrl+K+X
+<br>&nbsp;
+<li>
+Pedir Ayuda</li>
+
+<br>Ctrl+K+H
+<ul>
+<li>
+Para quitar la ayuda pulsa otra vez, Ctrl+K+H</li>
+</ul>
+
+<li>
+Seleccionar texto, copiar y pegar:</li>
+</ul>
+
+<ul>
+<ul>
+<li>
+Con el rat&oacute;n (mouse)</li>
+
+<br>Al seleccionar el texto, AUTOM&Aacute;TICAMENTE, quedar&aacute;
+<b>copiado</b>,
+para <b>pegarlo </b>bastar&aacute; pulsar el bot&oacute;n (central o derecho,
+dependiendo del n&uacute;mero de botones que tenga tu rat&oacute;n 3 o
+2)
+<br>&nbsp;
+<li>
+Con el teclado:</li>
+
+<br>Seleccionar: Ctrl+K+B, comenzar&aacute; secci&oacute;n:
+<br>Ctrl+K+K, terminar&aacute; la selecci&oacute;n (autom&aacute;ticamente
+quedar&aacute; copiado)
+<p>Ctrl+K+P quedar&aacute; pegado
+<br>&nbsp;</ul>
+</ul>
+
+<ul>
+<li>
+Salir sin guardar cambios:</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Ctrl+C, o tambi&eacute;n: Ctrl+K+Q
+<br>&nbsp;
+<li>
+El resto de posibilidades (que son m&uacute;ltiples) deber&aacute;s de
+experimentarlos T&Uacute;.</li>
+</ul>
+</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CrearConVi"></a>
+<h2>
+Crear con Vi</h2>
+
+<ul>Vi, es el procesador de textos por excelencia de los Sistemas Unix,
+y al ser Linux un cl&oacute;nico de Unix, es el procesador de textos que
+viene siempre seleccionado para ser instalado.
+<p>Vi, es un procesador de textos por comandos y la forma de actuar es
+la siguiente:
+<p>Pulsando el bot&oacute;n [insert] de tu teclado, activar&aacute; el
+modo insertar, por lo que ya podr&aacute;s empezar a escribir, cuando quieras
+regresar al modo comandos de vi, deber&aacute;s pulsar [Esc], o bien [insert]
+(dependiendo de su versi&oacute;n)
+<p>Estos son los comandos principales de vi (aunque tiene muchos m&aacute;s
+no los explicaremos)
+<br>&nbsp;
+<ul>
+<li>
+:q</li>
+
+<br>Salir, s&oacute;lo cuando no has realizado ning&uacute;n cambio.
+<br>&nbsp;
+<li>
+:q!</li>
+
+<br>Salir sin guardar cambios.
+<br>&nbsp;
+<li>
+:wq</li>
+
+<br>Guardar cambios y salir.
+<br>&nbsp;
+<li>
+:x</li>
+
+<br>Igual que :wq
+<br>&nbsp;
+<li>
+ZZ</li>
+
+<br>Igual que :wq
+<br>&nbsp;
+<li>
+:w</li>
+
+<br>Guardar cambios y continuar edici&oacute;n.
+<br>&nbsp;
+<li>
+:w nombre_archivo</li>
+
+<br>Guardar cambios con un nombre (Guardar como...)
+<br>&nbsp;
+<li>
+u</li>
+
+<br>Deshace el &uacute;ltimo cambio en el texto.
+<br>&nbsp;
+<li>
+Mayus+h</li>
+
+<br>Desplaza el cursor a la primera l&iacute;nea de la pantalla
+<br>&nbsp;
+<li>
+Mayus+l</li>
+
+<br>Desplaza el cursor a la &uacute;ltima l&iacute;nea de la pantalla.
+<br>&nbsp;
+<li>
+Mayus+a</li>
+
+<br>A&ntilde;ade texto al final de la l&iacute;nea en la que est&aacute;
+situado el cursor.
+<br>&nbsp;
+<li>
+Mayus+i</li>
+
+<br>Inserta texto al principio de la l&iacute;nea en la que est&aacute;
+situado el cursor.
+<br>&nbsp;
+<li>
+x</li>
+
+<br>Elimina un car&aacute;cter.
+<br>&nbsp;
+<li>
+dd</li>
+
+<br>Elimina una linea
+<br>&nbsp;
+<li>
+:se number</li>
+
+<br>Muestra los n&uacute;meros de l&iacute;nea
+<br>&nbsp;
+<li>
+:se nonumber</li>
+
+<br>NO muestra los n&uacute;meros de linea (los esconde si se activaron)
+<br>&nbsp;
+<li>
+/cadena</li>
+
+<br>Buscar cadena hacia abajo del texto.
+<br>&nbsp;
+<li>
+?cadena</li>
+
+<br>Buscar cadena hacia arriba del texto.</ul>
+</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CrearConEmacs"></a>
+<h2>
+Crear con Emacs</h2>
+
+<ul>Emacs, es un f&aacute;cil procesador de textos, sus men&uacute;s (no
+despegables en la versi&oacute;n texto, sin en la versi&oacute;n 
gr&aacute;fica)
+se activan pulsando [F10]
+<p>Este procesador de texto, recuerda a alguna vieja versi&oacute;n del
+WordPerfect, pero siendo bastante m&aacute;s potente que aquella 
versi&oacute;n.
+<p>Emacs es un editor muy conocido y existen versiones para casi todas
+las plataformas Unix y no Unix, emacs es un editor especialmente 
dise&ntilde;ado
+para programadores y tambi&eacute;n es extenso y la mayor&iacute;a de los
+usuarios no necesitan todas sus funciones.
+<p>Entre otras cosas con Emacs podr&aacute;s:
+<br>&nbsp;
+<ul>
+<li>
+Leer/mandar correo electr&oacute;nico</li>
+
+<li>
+Leer fichero de extensi&oacute;n .info</li>
+
+<li>
+Activar modos de edici&oacute;n para diversos lenguajes.</li>
+
+<li>
+Verificar Sintaxis.</li>
+
+<li>
+Iluminar palabras clave del c&oacute;digo del lenguaje (como ahora hacen
+algunos compiladores de otros Sistemas Operativos)</li>
+</ul>
+Porsupuesto, WordPerfect, en su versi&oacute;n para Linux es m&aacute;s
+potente (en la versi&oacute;n para usuario) que el emacs, ya que facilita
+mucho los accesos a los men&uacute;s y a las opciones del usuario, pero,
+WordPerfect es una versi&oacute;n comercial, y lo menos que se puede pedir,
+es potencia.</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CompriArchivo"></a>
+<h2>
+Comprimir un archivo.</h2>
+
+<ul>&nbsp;Para comprimir un archivo podr&aacute;s utilizar un mont&oacute;n
+de compresores entre los que destacan:
+<br>&nbsp;
+<ul>
+<li>
+tar</li>
+
+<li>
+gzip</li>
+
+<li>
+compress</li>
+</ul>
+
+<ul>
+<ul>
+<li>
+tar</li>
+
+<br>Comandos:
+<ul>
+<li>
+c</li>
+
+<br>Crea un archivo contenedor
+<li>
+x</li>
+
+<br>Extrae archivos desde el contenedor, el cual estar&aacute; especificado
+con la opci&oacute;n <b>f</b>
+<li>
+<b>f nombre</b></li>
+
+<br>Crea el nombre del archivo contenedor
+<li>
+Z</li>
+
+<br>Opci&oacute;n de compresi&oacute;n con COMPRESS
+<li>
+z</li>
+
+<br>Opci&oacute;n de compresi&oacute;n con GZIP
+<li>
+t</li>
+
+<br>Crea &iacute;ndice de archivos almacenados
+<li>
+v</li>
+
+<br>(Verbose) - Modo detallado (Ver lo que est&aacute; haciendo)</ul>
+
+<hr WIDTH="100%">
+<ul>Crear Un archivo</ul>
+
+<ul>
+<li>
+tar cvf Carta.tar CartaExtensa.txt</li>
+
+<br>Crea un archivo llamado Carta.tar, que contendr&aacute; COMPRIMIDA
+la carta CartaExtensa.txt</ul>
+</ul>
+</ul>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<ul>
+<li>
+gzip</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Para comprimir un archivo con gzip, deber&aacute;s utilizar:
+<p>gzip -ratio_compresi&oacute;n <b>fichero_a_comprimir</b>
+<p>Ejemplo:
+<p>gzip CartaExtensa.txt
+<p>Crear&aacute; un fichero llamado <b>CartaExtensa.txt.gz</b> que 
contendr&aacute;
+el contenido de la carta CartaExtensa, pero comprimido.
+<p>Si ahora escribes:
+<p>gzip -9 CartaExtensa.txt
+<p>Crear&aacute; un fichero, con un ratio de compresi&oacute;n a&uacute;n
+mayor, con la misma informaci&oacute;n m&aacute;s comprimida.</ul>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<ul>
+<li>
+compress</li>
+
+<br>Crea archivos de compresi&oacute;n con extensi&oacute;n .Z, pero es
+m&aacute;s antiguo que el gzip.</ul>
+</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="ComprEstruc"></a>
+<h2>
+Comprimir un directorio</h2>
+
+<ul>Generalmente se utiliza esta estructura:
+<p>tar cvf[z &oacute; Z] FicheroComprimido <b>RutaAComprimir</b>
+<ul>
+<ul>
+<li>
+z - Usar&aacute; gzip (recomendado)</li>
+
+<li>
+Z - Usar&aacute; compress (no recomendado)</li>
+</ul>
+</ul>
+(Bastar&aacute; con ver el ejemplo)
+<p>tar cvfz TodoUsuario.tgz /home
+<p>Tambi&eacute;n podr&aacute;s utilizar (menos recomendado)
+<p>tar cvfZ todoUsuario.tgZ /home
+<p>La extensi&oacute;n al fichero comprimido, deber&aacute;s indic&aacute;rselo
+t&uacute;, y t&uacute; pondr&aacute;s la extensi&oacute;n .tgz, para indicar
+que se utiliz&oacute; la opci&oacute;n gzip, o .tgZ, para indicar que se
+us&oacute; compress.
+<p>Tambi&eacute;n t&uacute; y s&oacute;lo t&uacute;, deber&aacute;s indicar
+como .tgz, o .tar.gz, (dentro de estas dos) osea el fichero podr&aacute;
+ser: TodoUsuario.tgz o TodoUsuario.tar.gz</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="DescomArchivo"></a>
+<h2>
+Descomprimir un archivo.</h2>
+
+<ul>Para descomprimir un archivo, depender&aacute; gravemente del archivo
+con el que haya sido comprimido, as&iacute; pues .gz, .zip .z, ser&aacute;n
+descomprimidos con gzip/unzip, aun cuando el compresor pertenezca a otro
+Sistema Operativo tambi&eacute;n bastante conocido.
+<p>Linux disfruta de una cantidad bastante m&aacute;s que razonable para
+descomprimir casi cualquier archivo que haya sido comprimido incluso con
+y desde otro sistema operativo.
+<br>&nbsp;
+<ul>
+<li>
+Ejemplos de descompresores: (los m&aacute;s usuales)</li>
+</ul>
+
+<ul>
+<ul>
+<li>
+gzip (compresor/descompresor)</li>
+
+<li>
+tar (compresor/descompresor)</li>
+
+<li>
+unarj</li>
+
+<li>
+unzip</li>
+
+<li>
+uncompress</li>
+
+<li>
+bzip2 (compresor/descompresor)</li>
+</ul>
+Explicaremos algunos de estos descompresores:
+<br>&nbsp;
+<ul>
+<li>
+gzip -d fichero.gz (o tambi&eacute;n fichero.z)</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Descomprimir&aacute; un fichero .gz &oacute; .z
+<ul>&nbsp;</ul>
+
+<li>
+tar cvf fichero.tar</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Descomprimir&aacute; un fichero creado con tar.
+<ul>
+<li>
+Este es un fichero compresor/empaquetar, por lo cual podr&aacute;s encontrar
+extensiones como .tgz, tZ, tar.gz, para lo cual, deber&aacute;s leer la
+secci&oacute;n siguiente: (aunque sea tambi&eacute;n s&oacute;lo un fichero)
+<a href="#DescomEstruct">Descomprimir
+directorios</a></li>
+</ul>
+
+<li>
+unzip fichero.zip</li>
+</ul>
+
+<ul>Descomprimir&aacute; un fichero .zip</ul>
+
+<ul>
+<li>
+unarj x fichero.arj</li>
+</ul>
+
+<ul>Descomprimir&aacute; un fichero .arj
+<br>&nbsp;
+<li>
+uncompress fichero.Z</li>
+</ul>
+
+<ul>Descomprimir&aacute; un fichero creado con compress y con extensi&oacute;n
+.Z</ul>
+</ul>
+</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="DescomEstruct"></a>
+<h2>
+Descomprimir un directorio.</h2>
+
+<ul>En Linux, el empaquetador por excelencia utilizado es el GNU tar, 
as&iacute;
+pues, este ser&aacute; el des empaquetador que tendr&aacute;s que usar
+generalmente, raramente encontrar&aacute;s otros ficheros empaquetados
+con otros empaquetadores/compresores, pero ya eso implica que te den el
+des empaquetador y un fichero explicativo de como hacerlo.
+<p>Para descomprimirlos depender&aacute; de la extensi&oacute;n as&iacute;:
+<br>&nbsp;
+<ul>
+<li>
+tar</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Implica que s&oacute;lo se ha hecho con tar, por lo que bastar&aacute;
+con poner:
+<br><b>tar cvf fichero.tar [-C /ruta/directorio]</b>
+<br>&nbsp;
+<li>
+tgz (&oacute; tar.gz)</li>
+</ul>
+
+<ul>&nbsp;
+<br>Implica que se ha hecho con tar y gzip
+<p>tar cvfz fichero.tar.gz
+<br>tar cvfz fichero.tgz
+<br>&nbsp;
+<ul>
+<li>
+Acostumbrase a utilizar .tgz, ya que es por regla general la extensi&oacute;n
+m&aacute;s usada.</li>
+</ul>
+</ul>
+
+<ul>
+<li>
+tZ</li>
+</ul>
+
+<ul>Implica que se ha construido con tar y compress
+<br>tar cvfZ fichero.tZ
+<br>Este tipo de extensi&oacute;n es lo mismo que .tar.Z</ul>
+</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="InstalarRPM"></a>
+<h2>
+Instalar un .RPM</h2>
+
+<ul>rpm -i <b>ProgramaAINSTALAR</b>
+<br>rpm -U <b>ProgramaAactualizar</b> (Upgrade)</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="DesinstRPM"></a>
+<h2>
+Desinstalar un .RPM</h2>
+
+<ul>rpm -e <b>ProgramaADesinstalar</b></ul>
+<a href="#arriba">[ ^ ]</a>
+<p>
+<hr WIDTH="100%">
+<br><a NAME="Redireccion"></a>
+<h2>
+Redireccionamiento, tipos.</h2>
+
+<ul>El redireccionamiento sirve para dar una nueva salida (direcci&oacute;n)
+a una salida generalmente est&aacute;ndar. Ejemplo:
+<br>&nbsp;
+<ul>
+<li>
+Traspasar la salida de la pantalla a un fichero</li>
+
+<ul>
+<li>
+<a href="glosary.html#ls">ls</a> > listado_de_ficheros.txt</li>
+</ul>
+</ul>
+
+<ul>
+<ul>Hemos volcado sobre el archivo <b>listado_de_ficheros.txt, </b>la 
informaci&oacute;n
+que de otra forma hubiera salido por la pantalla.</ul>
+
+<ul>NOTA:
+<br>&nbsp;
+<br>&nbsp;
+<ul>Nosotros hemos utilizado el volcado de ficheros para la mayor&iacute;a
+de los ejemplos de este tutorial. Para otros ejemplos hemos utilizado la
+propiedad de copiar y pegar con el rat&oacute;n (al seleccionar, tambi&eacute;n
+se copia, y al pulsar el bot&oacute;n central o derecho se pega)</ul>
+</ul>
+</ul>
+
+<ul>
+<li>
+El redireccionamiento se utiliza no s&oacute;lo para el volcado de ficheros,
+sino tambi&eacute;n para pasar imprimir, para escuchar m&uacute;sica, para
+grabar desde la voz...</li>
+
+<h3>
+REPRODUCCI&Oacute;N DE SONIDO.</h3>
+
+<ul>
+<li>
+play fichero.wav</li>
+
+<li>
+cat fichero.wav > /dev/dsp</li>
+</ul>
+
+<h3>
+GRABAR&nbsp; SONIDO.</h3>
+
+<ul>
+<li>
+vrec mi_voz.wav</li>
+
+<li>
+cat fichero.wav /dev/mic</li>
+</ul>
+</ul>
+Te mencionaremos que tambi&eacute;n existen otras formas de redireccionamiento
+avanzadas, como son '>>', para a&ntilde;adir lineas a un fichero ya existente
+(sin perder su contenido) o '&lt;&lt;' para leer una l&iacute;nea de un
+fichero.</ul>
+<a href="#arriba">[ ^ ]</a>
+<p>
+<hr WIDTH="100%">
+<br><a NAME="InstTGZ"></a>
+<h3>
+INSTALACI&Oacute;N DE UN: .TAR.GZ</h3>
+
+<p><br>C&oacute;mo ya hemos visto anteriormente (.tgz o .tar.gz) significan
+lo mismo, el proceso de instalaci&oacute;n siempre ser&aacute;:
+<br>&nbsp;
+<ul>
+<li>
+cp fichero_a_instar.tar.gz ~/</li>
+
+<br>Lo que har&aacute; que copiemos el fichero <b>"fichero_a_instalar.tar.gz"
+</b>en
+el directorio de nuestra sesi&oacute;n, si estamos como root, en
+<b>/root</b>,
+y estamos como usuario en <b>/home/usuario</b>, por ejemplo, si estoy como
+javier, en <b>/home/javier</b>
+<br>&nbsp;
+<li>
+tar xvfz fichero_a_instalar.tar.gz</li>
+
+<br>Las opciones "xvfz", deber&aacute;n ponerse dependiendo de la 
extensi&oacute;n,
+ya que si es s&oacute;lo un <b>.tar</b>, las opciones ser&iacute;an "xvf",
+pero si el fichero fuera o tuviera una extensi&oacute;n "<b>.tar.bz2</b>",
+primeros deber&aacute;s descomprimirlo con el bzip, y despu&eacute;s con
+las opciones "xvf"
+<br>&nbsp;
+<li>
+El siguiente paso, y tras acceder al directorio donde estar&aacute; el
+fichero descomprimido ser&aacute; siempre leer el fichero:<b> INSTALL.TXT
+</b>ya
+que en este fichero deben venir las indicaciones de los pasos a seguir
+para, la compilaci&oacute;n si procede y la instalaci&oacute;n. Por ejemplo
+si instalamos las StarOffice una suite de oficina al estilo de las Office
+de Windows o Corel WordPerfect, hay que poner ./setup o /Runme respectivamente
+y esperar a que se ejecute el programa de instalaci&oacute;n.</li>
+</ul>
+
+<ul>
+<li>
+RECURDA, te podr&aacute;s ahorrar los pasos de copiar, y posteriormente
+descomprimir haciendo:&nbsp; <b>tar xvfz fichero -C $HOME/directorio</b></li>
+</ul>
+
+<ul>
+<ul>
+<li>
+Pero si no es este el caso, casi siempre por ejemplo si instalo el programa
+'glade', una RAD</li>
+</ul>
+</ul>
+
+<ul>
+<ul>
+<ol>
+<li>
+./configure</li>
+
+<li>
+make</li>
+
+<li>
+make install</li>
+</ol>
+
+<p><br>Habr&aacute; veces que ser&aacute;n necesarios par&aacute;metros
+necesarios dependiendo de distintas opciones.
+<p>(Opci&oacute;n a modo de ejemplo, no usar, en la medida de lo posible)
+<br>./configure --disable-gtktest</ul>
+PARA EL CASO DE LIBRER&Iacute;AS, Y ALG&Uacute;N QUE OTRO PROGRAMA (muy
+raramente), puede, (si no lo hace el script) que tengas que configurar
+manualmente algunos ficheros <b>ALGO MUY SENCILLO</b>, que si bien no se
+encuentra en el fichero INSTALL, te lo dir&aacute; el script de 
configuraci&oacute;n,
+por ejemplo, si instalamos la librer&iacute;a gr&aacute;fica GTK+, tras
+compilarla (convertirla a binario) habr&aacute; que modificar el fichero
+<b>/etc/ld.so.conf</b>,
+y a&ntilde;adir alguna l&iacute;nea, generalmente es donde se encuentra
+la nueva librer&iacute;a (que en mi caso las puse en: /usr/lib, pero que
+generalmente es /usr/local/lib). Tras a&ntilde;adir esa l&iacute;nea a
+ese fichero, escribir el comando <b>ldconfig</b>
+<p><b>Es </b>muy sencillo, te recuerdo que generalmente lo indica el script,
+Podr&iacute;a aparecerte alguna informaci&oacute;n como:
+<p>"<b>Now, you must edit /etc/ld.so.conf file, and add a line with the
+path to your library, save it, and then you may type ldconfig command to
+End.</b>"
+<p>Traducci&oacute;n:
+<p>"<b>Ahora debes editar el fichero /etc/ld.so.conf, y a&ntilde;adir una
+l&iacute;nea con la ruta de tu librer&iacute;a, guardalo, y entonces escribe
+el comando ldconfig para finalizar.</b>"</ul>
+<a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="DesinstTGZ"></a>
+<h3>
+DESINSTALACI&Oacute;N DE UN: .TAR.GZ</h3>
+
+<p><br>Para desinstalar un .tar.gz, deber&aacute; de soportarlo, por lo
+que y tras acceder al directorio donde lo descomprimiste la primera vez
+se desinstalar&aacute;
+<br>tras escribir: <b>make uninstall, </b>para saber si soporta esta 
opci&oacute;n
+deber&aacute;s leerte el fichero <b>INSTALL.TXT</b>
+<p><a href="#arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/parallel-printer.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/parallel-printer.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/parallel-printer.gif
Binary files /dev/null and /tmp/cvsnxoJW2 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/paso1.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/paso1.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/paso1.gif
Binary files /dev/null and /tmp/cvsY6Hfv3 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/paso2.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/paso2.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/paso2.gif
Binary files /dev/null and /tmp/cvswK31n6 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/paso3.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/paso3.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/paso3.gif
Binary files /dev/null and /tmp/cvsdkHoZ6 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/paso4.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/paso4.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/paso4.gif
Binary files /dev/null and /tmp/cvsGJSN94 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/paso5.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/paso5.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/paso5.gif
Binary files /dev/null and /tmp/cvsdOxlK5 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/paso6.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/paso6.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/paso6.gif
Binary files /dev/null and /tmp/cvsG7AGH8 differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/printcap
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/printcap
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/printcap
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/printcap        3 Mar 2012 
06:14:41 -0000       1.1
@@ -0,0 +1,23 @@
+#
+# Please don't edit this file directly unless you know what you are doing!
+# Be warned that the control-panel printtool requires a very strict format!
+# Look at the printcap(5) man page for more info.
+#
+# This file can be edited with the printtool in the control-panel.
+#
+# Fujitsu0 Printer for Linux. NAxNA a4 
+Fujitsu0|lp|lp0:\                      # Fujitsu0 y lp son alias de lp0
+       :sd=/var/spool/lpd/lp0:\        # Dirección de la cola
+       :mx#0:\                         # máximo, si mx=0 sin máximo
+       :lp=/dev/lp0:\                  # Nombre la de impresora
+       :if=/var/spool/lpd/lp0/filter:\ # Importar filtro de:
+       :sh:
+# TextPrint Printer for Linux. NAxNA a4. EPSON Compatible --24 pins--
+TextPrint|lp1:\                                # TextPrint es alias de lp1
+       :sd=/var/spool/lpd/lp1:\        # DirecciÓn de la cola
+       :mx#0:\                         # Máximo de la cola, si mx=0 no max.
+       :sh:\           
+       :lp=/dev/lp1:\                  # Impresora
+       :if=/var/spool/lpd/lp1/filter:  # Import Filter
+# PLOTTER is a Remote Machine.
+PLOTTER01:lp=:rm=plotter1.wakitaki.net:rp=PLOTTER01:sd=/var/spool/lpd/plotter:

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/profile
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/profile
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/profile
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/profile 3 Mar 2012 06:14:41 
-0000       1.1
@@ -0,0 +1,40 @@
+# /etc/profile
+
+# System wide environment and startup programs
+# Functions and aliases go in /etc/bashrc
+
+PATH="$PATH:/usr/X11R6/bin"
+PS1="address@hidden \W]\\$ "
+
+ulimit -c 1000000
+if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
+       umask 002
+else
+       umask 022
+fi
+
+USER=`id -un`
+LOGNAME=$USER
+MAIL="/var/spool/mail/$USER"
+
+HOSTNAME=`/bin/hostname`
+HISTSIZE=1000
+HISTFILESIZE=1000
+
+INPUTRC=/etc/inputrc
+
+export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC
+
+for i in /etc/profile.d/*.sh ; do
+       if [ -x $i ]; then
+               . $i
+       fi
+done
+
+unset i
+# ------------ Modif. por TutorialLinux ---------
+# ************  ESpañol, por defecto. ***********
+export LC_LANG=es_ES
+export LANG=es_ES
+export LANGUAGE=es_ES
+# ------------ Fin Modif. por TutorialLinux -----

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/quitlinux.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/quitlinux.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/quitlinux.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/quitlinux.html  3 Mar 2012 
06:14:41 -0000       1.1
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.1 
i586) [Netscape]">
+</HEAD>
+<BODY TEXT="#FFFFFF" BGCOLOR="#004000" LINK="#FFFF00" VLINK="#80FF80" 
ALINK="#00FF40">
+<A HREF="../tutorial.html">[ &lt; ]</A>
+<BR>&nbsp;
+<H3>
+Para SALIR CORRECTAMENTE de Linux haz:</H3>
+
+<UL>
+<LI>
+Si no te acuerdas:</LI>
+
+<BR>[Ctrl], sin soltarla pulsar [Alt] y sin soltar ninguna de las dos 
anteriores
+[Supr]. Esa combinaci&oacute;n es conocida como:<FONT SIZE=+3>
+<B>[Ctrl]+[Alt]+[Supr]</B>
+</FONT>(y la usaremos de ahora en adelante), cuando est&eacute; la pantalla
+en negro, apagas tu PC.
+<BR>&nbsp;
+<LI>
+<B><FONT SIZE=+3>halt</FONT></B></LI>
+
+<BR>Comando que har&aacute; DETENER el sistema, no requiere par&aacute;metros,
+cuando aparezca el mensaje "system halted", podremos apagar el ordenador.
+(Si tu n&uacute;cleo soporta apagar el equipo, y tu placa tambi&eacute;n
+(ATX), el equipo se apagar&aacute;) para n&uacute;cleos 2.2.x y posteriores.
+<BR>&nbsp;
+<LI>
+<B><FONT SIZE=+3>poweroff</FONT></B></LI>
+
+<BR>Este comando hace la misma funci&oacute;n que el arriba mencionado.
+<BR>&nbsp;
+<LI>
+<B><FONT SIZE=+3>reboot</FONT></B></LI>
+
+<BR>Comando que har&aacute; REINICIAR el sistema.</UL>
+
+<UL>
+<LI>
+Para Avisar a posibles usuarios el cierre del sistema (Para que no caiga
+por sorpresa)</LI>
+
+<OL>
+<LI>
+<B>shutdown </B>-h 15:35 "El sistema se detendr&aacute; a las 15:35 horas,
+vayan terminando."</LI>
+
+<LI>
+<B>shutdown</B> -r 15:35 "El sistema se reiniciar&aacute; a las 15:35 horas,
+vayan terminando."</LI>
+
+<LI>
+<B>shutdown</B> -[par&aacute;metros] [hora] ["mensaje"]</LI>
+</OL>
+</UL>
+<A HREF="../tutorial.html">[ &lt; ]</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.gif
Binary files /dev/null and /tmp/cvs87Ku8a differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/rawrite.html    3 Mar 2012 
06:14:42 -0000       1.1
@@ -0,0 +1,272 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+</head>
+<body text="#000000" bgcolor="#FFCC99" link="#0000EF" vlink="#51188E" 
alink="#FF0000">
+<a NAME="Arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h2>
+
+<hr WIDTH="100%"></h2>
+
+<h2>
+CREAR DISQUETES DE ARRANQUE PARA EL MANTENIMIENTO DEL SISTEMA:</h2>
+
+<h2>
+
+<hr WIDTH="100%"></h2>
+
+<h3>
+Creaci&oacute;n de disquetes:</h3>
+&nbsp;
+<ol>
+<li>
+<a href="#mkbootdisk">Con mkbootdisk desde LINUX.</a></li>
+
+<li>
+<a href="#rawrite">Con "RAWRITE.EXE", desde MS-DOS/WINDOWS.</a></li>
+
+<li>
+<a href="#Install">Con los procesos: "Instalaci&oacute;n/Actualizaci&oacute;n".
+(Del CD-ROM)</a></li>
+
+<li>
+<a href="#bzdisk">Con: make bzdisk, compilando en n&uacute;cleo.</a></li>
+
+<li>
+<a href="#Recomiend">&iquest;Qu&eacute; se recomienda?</a></li>
+</ol>
+
+<p><br>Es fundamental poder disponer de disquetes para casos "NO QUERIDOS"
+<br>&nbsp;
+<p><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="mkbootdisk"></a>
+<br>&nbsp;
+<h1>
+Crear disquetes con: "mkbootdisk"</h1>
+
+<p><br>Debe de existir el fichero /boot/vmlinuz-version.nucleo-revision
+<p>Si s&oacute;lo existiera /boot/vmlinuz, esribimos: uname -a y saldr&aacute;:
+<p>Linux localhost.localdomain <b>version.nucleo-revision</b> # Date_today,
+time_today machine unknown
+<p>Copiamos: cp /boot/vmlinuz /boot/vmlinuz-version.nucleo-revision
+<br>&nbsp;
+<p>Ahora escribimos:
+<ol>
+<li>
+mkbootdisk --verbose --device /dev/fd0 version.nucleo-revision</li>
+</ol>
+
+<ul>
+<li>
+&iexcl;Ya est&aacute;!, ya tenemos un disquete de arranque en 
aproxim&aacute;damente
+25 segundos.</li>
+</ul>
+
+<p><br>Ejemplo gr&aacute;fico:
+<br><img SRC="mkbootdisk.jpg" height=386 width=670>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="rawrite"></a>
+<br>&nbsp;
+<h1>
+Con RAWRITE, desde MSDOS/WINDOWS</h1>
+
+<p><br>Lo primero que deberemos de hacer es:
+<ul>
+<li>
+Ir a MS-DOS/Windows o Ejecutar un emulador de MS-DOS</li>
+</ul>
+UNA VEZ EN EL DOS:
+<p><img SRC="rawrite.gif" height=359 width=572>
+<br>&nbsp;
+<p>Es un grave error no crear disquetes del sistema para la reparaci&oacute;n
+del mismo, su creaci&oacute;n es muy simple:
+<ul>
+<li>
+Cambiamos de unidad escribiendo: <b>[Letra_del_cd-rom]:&nbsp;</b>&nbsp;
+(Por ejemplo: D:, E: o F: etc.)</li>
+
+<li>
+Copiamos el fichero: <b>[letra_del_cd-rom]:\dosutils\rawrite.exe</b> 
C:\WINDOWS</li>
+
+<li>
+Cambiamos al directorio: CD \IMAGES</li>
+
+<li>
+Escribimos: RAWRITE</li>
+
+<li>
+De las 3 im&aacute;genes que habr&aacute;: (BOOT.IMG, RESCUE.IMG y SUPP.IMG)
+tendremos que elegir por lo menos 2, un disquete para cada imagen preparamos
+y seleccionamos: boot.img, para el primer disquete (de arranque) y rescue.img
+(de rescate) en el segundo disquete.</li>
+</ul>
+
+<p><br>En este momento, el trabajo ha concluido, mete el disquete con la
+imagen (BOOT.IMG) y reinicia... A partir de ah&iacute; tendr&aacute;s que
+seguir las instrucciones que te den:
+<p><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Install"></a>
+<h2>
+Procesos Instalaci&oacute;n/Actualizaci&oacute;n: (Del CD-ROM)</h2>
+
+<blockquote>&nbsp;
+<br>Con los procesos de instalaci&oacute;n/actualizaci&oacute;n, de los
+CD-ROM, se pueden crear disquetes de arranque, que m&aacute;s que otra
+cosa sirven exclusivamente para hacer ejecutar el sistema cuando el 
n&uacute;cleo
+falla, o tiene un error determinado en el proceso de arranque, o simplemente
+se ha olvidado la clave de acceso como root.
+<p>Ventajas:
+<ul>
+<li>
+Se crea r&aacute;pidamente</li>
+</ul>
+Inconvenientes:
+<ul>
+<li>
+Gran nivel de limitaci&oacute;n (con respecto al creado con RAWRITE)</li>
+
+<li>
+No puede ser transferido a otras personas si tienen colocadas las particiones
+en distintos puntos (HDA1 por HDA3, etc., etc...)</li>
+</ul>
+</blockquote>
+
+<p><br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="bzdisk"></a>
+<h2>
+Con: Make bzdisk</h2>
+
+<ol>&nbsp;
+<br>El proceso que se sigue para crear un disco de esta manera, es de la
+misma forma que se <a href="kernelYsonido.html#CompilKernel">Compila el
+N&uacute;cleo. </a>Excepto que alteramos un comando.
+<br>&nbsp;
+<h3>
+FORMA:</h3>
+
+<ul>
+<li>
+<b>make</b> menuconfig&nbsp; ( xconfig si se va a configurar desde 
X-Window)</li>
+
+<li>
+make dep</li>
+
+<li>
+make clean</li>
+
+<li>
+make <b>bzdisk</b>&nbsp; ( bzImage, si se quisiera compilar el n&uacute;cleo,
+recuerda. ;-)&nbsp; )</li>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+Uso: El disquete creado de esta forma, generalmente se utiliza para (sin
+llegar a instalarlo, luego NO editando el fichero lilo.conf, y colocar
+el fichero n&uacute;cleo en el directorio /boot/ ), saber si funciona.</li>
+
+<li>
+Para uso de rescate en caso de que se "da&ntilde;ara" el n&uacute;cleo
+(o n&uacute;cleos) que tuvieramos en /boot/</li>
+</ul>
+
+<hr WIDTH="100%"></ol>
+<b>VENTAJAS:</b>
+<br>&nbsp;
+<li>
+Se crea r&aacute;pidamente ( habiendo ya usado el proceso de la 
compilaci&oacute;n
+del n&uacute;cleo), osea, compilas el n&uacute;cleo y despu&eacute;s creas
+el disco. haciendolo de esta forma, puede ser prestado a varias personas,
+ya que no depende exclusivamente donde tengas colocada tu partici&oacute;n,
+usa cualquier Sistema de Ficheros (vfat, dos, ext2...)</li>
+
+<ul>
+<li>
+Metodo a seguir: (Estando ya en el directorio /usr/src/linux), 1 de ellos
+puede ser usando el Script "CompilaNucleo" del tutorial y luego usar make
+bzdisk:</li>
+</ul>
+
+<ol>
+<li>
+make menuconfig</li>
+
+<li>
+CompilaNucleo</li>
+
+<li>
+make bzdisk (y ahora, con todo ya compiladito, creas el disco)</li>
+</ol>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+O tambi&eacute;n:</li>
+</ul>
+
+<hr WIDTH="100%">
+<ol>
+<li>
+make menuconfig</li>
+
+<li>
+make dep</li>
+
+<li>
+make clean</li>
+
+<li>
+make bzImage (creas el n&uacute;cleo)</li>
+
+<li>
+make bzdisk (y ahora, con todo ya compiladito, creas el disco)</li>
+</ol>
+<b>INCONVENIENTES:</b>
+<br>&nbsp;
+<ul>
+<li>
+No sirve para disco de rescate en muchas ocasiones, si por ejemplo se han
+movido datos, o se han corrompido los ficheros de inicio/carga de 
m&oacute;dulos
+y similar. (En este caso, es similar al disco de arranque que se crea en
+el proceso de instalaci&oacute;n)</li>
+</ul>
+
+<p><br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Recomiend"></a>
+<h2>
+Recomendaci&oacute;n:</h2>
+
+<ul>
+<li>
+Crear disquetes con <b>mkbootdisk</b></li>
+</ul>
+(Si no pudiera con mkbootdisk)
+<ul>
+<li>
+Crear disquetes con RAWRITE</li>
+</ul>
+(Si no pudiera con RAWRITE)
+<ul>
+<li>
+Crear al menos un disquete con bzdisk.</li>
+</ul>
+
+<p><br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/rc.local.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/rc.local.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/rc.local.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/rc.local.sample.txt     3 Mar 
2012 06:14:42 -0000       1.1
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# This script will be executed *after* all the other init scripts.
+# You can put your own initialization stuff in here if you don't
+# want to do the full Sys V style init stuff.
+
+if [ -f /etc/redhat-release ]; then
+    R=$(cat /etc/redhat-release)
+
+    arch=$(uname -m)
+    a="a"
+    case "_$arch" in
+           _a*) a="tu";;
+           _i*) a="tu";;
+    esac
+
+    # This will overwrite /etc/issue at every boot.  So, make any changes you
+    # want to make to /etc/issue here or you will lose them when you reboot.
+#----inicio modificación----------
+    # echo "" > /etc/issue
+    # SUPRIMES LA LINEA DE ARRIBA.
+
+    cp -f /etc/mi.issue /etc/issue
+    # COPIAS EL FICHERO CON TU CONFIGURACIÓN
+#----fin modificación-------------
+
+    echo "$R" >> /etc/issue
+    echo "Kernel $(uname -r) en $a $(uname -m)" >> /etc/issue
+
+    cp -f /etc/issue /etc/issue.net
+    echo >> /etc/issue
+fi
+setfont lat1u-16.psf

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sample.txt   3 Mar 2012 
06:14:42 -0000       1.1
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# rc            This file is responsible for starting/stopping
+#               services when the runlevel changes. It is also
+#               responsible for the very first setup of basic
+#               things, such as setting the hostname.
+#
+# Original Author:       
+#               Miquel van Smoorenburg, <address@hidden>
+#
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Now find out what the current and what the previous runlevel are.
+argv1="$1"
+set `/sbin/runlevel`
+runlevel=$2
+previous=$1
+export runlevel previous
+
+# Get first argument. Set new runlevel to this argument.
+[ "$1" != "" ] && runlevel="$argv1"
+
+# Is there an rc directory for this new runlevel?
+if [ -d /etc/rc.d/rc$runlevel.d ]; then
+       # First, run the KILL scripts.
+       for i in /etc/rc.d/rc$runlevel.d/K*; do
+               # Check if the script is there.
+               [ ! -f $i ] && continue
+
+               # Check if the subsystem is already up.
+               subsys=${i#/etc/rc.d/rc$runlevel.d/K??}
+               [ ! -f /var/lock/subsys/$subsys ] && \
+                   [ ! -f /var/lock/subsys/${subsys}.init ] && continue
+
+               # Bring the subsystem down.
+               $i stop
+       done
+
+       # Now run the START scripts.
+       for i in /etc/rc.d/rc$runlevel.d/S*; do
+               # Check if the script is there.
+               [ ! -f $i ] && continue
+
+               # Check if the subsystem is already up.
+               subsys=${i#/etc/rc.d/rc$runlevel.d/S??}
+               [ -f /var/lock/subsys/$subsys ] && \
+                   [ -f /var/lock/subsys/${subsys}.init ] && continue
+
+               # Bring the subsystem up.
+               $i start
+       done
+fi

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sysinit.sample.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sysinit.sample.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sysinit.sample.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/rc.sysinit.sample.txt   3 Mar 
2012 06:14:42 -0000       1.1
@@ -0,0 +1,272 @@
+#! /bin/sh
+#
+# /etc/rc.d/rc.sysinit - run once at boot time
+#
+# Taken in part from Miquel van Smoorenburg's bcheckrc.
+#
+
+# Set the path
+PATH=./:/bin:/sbin:/usr/bin:/usr/sbin
+export PATH
+
+# Read in config data.
+if [ -f /etc/sysconfig/network ]; then
+    . /etc/sysconfig/network
+else
+    NETWORKING=no
+    HOSTNAME=localhost
+fi
+
+# Start up swapping.
+echo 
+echo
+echoc /4 "Activando partición swap."
+swapon -a
+
+# Set the hostname.
+hostname ${HOSTNAME}
+echo hostname: `hostname`
+
+# Set the NIS domain name
+if [ -n "$NISDOMAIN" ]; then
+    domainname $NISDOMAIN
+else
+    domainname ""
+fi
+
+if [ -f /fsckoptions ]; then
+       fsckoptions=`cat /fsckoptions`
+    else
+       fsckoptions=''
+fi
+
+echo 
+echoc /14 "Chequeando partición HDB2, en busca de errores..."
+fsck -V -a /dev/hdb2
+echo 
+
+if [ ! -f /fastboot ]; then
+       echoc "Chequeando sistema de ficheros de root."
+       fsck -V -a $fsckoptions /
+
+       rc=$?
+
+       # A return of 2 or higher means there were serious problems.
+       if [ $rc -gt 1 ]; then
+               echo
+               echo
+               echoc /4 "*** An error occurred during the file system check."
+               echoc /4 "*** Dropping you to a shell; the system will reboot"
+               echoc /4 "*** when you leave the shell."
+
+               PS1="(Reparando sistema de ficheros) #"; export PS1
+               sulogin
+
+               echoc /14 "Desmontando sistema de ficheros."
+               umount -a
+               mount -n -o remount,ro /
+               echoc /14 "Reinicio automático en progreso."
+               reboot
+       elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
+               echoc "Chequeando sistema de ficheros de root, quotas"
+               /sbin/quotacheck -v /
+       fi
+fi
+
+if [ -x /sbin/quotaon ]; then
+    echo 
+    echoc /15 "Apagando usuarios y cuotas de grupos para sistema de ficheros 
de root."
+    /sbin/quotaon /
+fi
+
+# check for arguments 
+
+mount -t proc /proc /proc
+if grep -i nopnp /proc/cmdline >/dev/null ; then
+    PNP=
+else
+    PNP=yes
+fi
+
+# set up pnp 
+if [ -x /sbin/isapnp -a -f /etc/isapnp.conf ]; then
+    if [ -n "$PNP" ]; then
+       echo "Iniciando dispositivo ISA PNP"
+       /sbin/isapnp /etc/isapnp.conf
+    else
+       echo "Saltando ISA PNP configuracion en rescate usuarios."
+    fi
+fi
+
+# Remount the root filesystem read-write.
+echo "Remontando sistema de ficheros en modo lectura-escritura."
+mount -n -o remount,rw /
+
+if [ ! -f /etc/HOSTNAME ]; then
+    echo ${HOSTNAME} > /etc/HOSTNAME
+fi
+
+# Clear mtab
+>/etc/mtab
+
+# Enter root and /proc into mtab.
+mount -f /
+mount -f /proc
+
+if [ -f /proc/ksyms ]; then
+    USEMODULES=y
+else
+    USEMODULES=
+fi
+
+if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then
+    # Get ready for kerneld if module support in the kernel
+    echo 
+    echo -n "Buscando módulos en las dependencias..."
+    depmod -a
+    echo ""
+fi
+
+# load sound modules
+if ! grep -i nomodules /proc/cmdline >/dev/null ; then
+    if [ -n "$USEMODULES" ]; then
+       if grep -s "alias sound" /etc/conf.modules > /dev/null ; then
+           modprobe sound
+           if grep -s "alias midi" /etc/conf.modules > /dev/null ; then
+               modprobe midi
+           fi
+       fi
+    fi
+fi
+
+if [ -x /sbin/kerneld -a -n "$USEMODULES" ]; then
+    /sbin/kerneld
+    KERNELD=yes
+fi
+
+# Check filesystems
+if [ ! -f /fastboot ]; then
+       echo "Checking filesystems."
+       fsck -R -A -V -a $fsckoptions
+
+       # A return of 2 or higher means there were serious problems.
+       if [ $? -gt 1 ]; then
+               echo
+               echo
+               echoc /10 "*** An error occurred during the file system check."
+               echoc /10 "*** Dropping you to a shell; the system will reboot"
+               echoc /10 "*** when you leave the shell."
+
+               PS1="(Reparando sistema de ficheros) #"; export PS1
+               sulogin
+
+               echoc /12 "Desmontando sistema de ficheros"
+               umount -a
+               mount -n -o remount,ro /
+               echoc /13 "Reinicio automático en progreso."
+               reboot
+       elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
+               echoc "Checking filesystem quotas"
+               /sbin/quotacheck -v -R -a
+       fi
+fi
+
+# Mount all other filesystems (except for NFS and /proc, which is already
+# mounted). Contrary to standard usage,
+# filesystems are NOT unmounted in single user mode.
+echoc "Montando sistema de ficheros local."
+mount -a -t nonfs,proc
+
+if [ -x /sbin/quotaon ]; then
+    echo "Conectando usuarios y cuotas para sistema de ficheros local"
+    /sbin/quotaon -a
+fi
+
+if [ -z "$KERNELD" ]; then
+    touch /var/lock/subsys/kerneld
+fi
+
+# Clean out /etc.
+rm -f /etc/mtab~ /fastboot /etc/nologin /fsckoptions
+>/var/run/utmp
+
+# Delete UUCP lock files.
+rm -f /var/lock/LCK*
+
+# Delete stale subsystem files.
+rm -f /var/lock/subsys/*
+
+# Delete stale pid files
+rm -f /var/run/*.pid
+
+# Delete X locks
+rm -f /tmp/.X*-lock
+
+# Set the system clock.
+echo -n "Setting clock"
+
+ARC=0
+UTC=0
+if [ -f /etc/sysconfig/clock ]; then
+    . /etc/sysconfig/clock
+
+    # convert old style clock config to new values
+    if [ "${CLOCKMODE}" = "GMT" ]; then
+           UTC=true
+    elif [ "${CLOCKMODE}" = "ARC" ]; then
+           ARC=true
+    fi
+fi
+
+if [ -x /sbin/hwclock ]; then
+    CLOCKFLAGS="--hctosys"
+    CLOCK=/sbin/hwclock
+else
+    CLOCKFLAGS="-a"
+    CLOCK=/sbin/clock
+fi
+
+if [ $UTC = "true" ]; then
+    CLOCKFLAGS="$CLOCKFLAGS -u";
+    echo -n " (utc)"
+fi
+if [ $ARC = "true" ]; then
+    CLOCKFLAGS="$CLOCKFLAGS -A";
+    echo -n " (arc)"
+fi
+echo -n ": "
+$CLOCK $CLOCKFLAGS
+
+date
+
+# Right, now turn on swap in case we swap to files.
+echo "Enabling swap space."
+swapon -a 2>&1 | grep -v "busy"
+
+# Initialize the serial ports.
+if [ -f /etc/rc.d/rc.serial ]; then
+       . /etc/rc.d/rc.serial
+fi
+
+# Load modules (for backward compatibility with VARs)
+if [ -f /etc/rc.d/rc.modules ]; then
+       /etc/rc.d/rc.modules
+fi
+
+# If a SCSI tape has been detected, load the st module unconditionally
+# since many SCSI tapes don't deal well with st being loaded and unloaded
+if [ -f /proc/scsi/scsi ] && cat /proc/scsi/scsi | grep -q 'Type:   
Sequential-Access' 2>/dev/null ; then
+       if cat /proc/devices | grep -qv ' 9 st' ; then
+               if [ -n "$USEMODULES" ] ; then
+                       # Try to load the module.  If it fails, ignore it...
+                       modprobe st 2>/dev/null
+               fi
+       fi
+fi
+
+# Now that we have all of our basic modules loaded and the kernel going,
+# let's dump the syslog ring somewhere so we can find it later
+dmesg > /var/log/dmesg
+
+# Feed entropy into the entropy pool
+/etc/rc.d/init.d/random start

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/services
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/services
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/services
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/services        3 Mar 2012 
06:14:42 -0000       1.1
@@ -0,0 +1,314 @@
+# /etc/services:
+# $Id: services,v 1.1 2012/03/03 06:14:42 ineiev Exp $
+#
+# Network services, Internet style
+#
+# Note that it is presently the policy of IANA to assign a single well-known
+# port number for both TCP and UDP; hence, most entries here have two entries
+# even if the protocol doesn't support UDP operations.
+# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
+# are included, only the more common ones.
+
+tcpmux         1/tcp                           # TCP port service multiplexer
+echo           7/tcp
+echo           7/udp
+discard                9/tcp           sink null
+discard                9/udp           sink null
+systat         11/tcp          users
+daytime                13/tcp
+daytime                13/udp
+netstat                15/tcp
+qotd           17/tcp          quote
+msp            18/tcp                          # message send protocol
+msp            18/udp                          # message send protocol
+chargen                19/tcp          ttytst source
+chargen                19/udp          ttytst source
+ftp-data       20/tcp
+ftp            21/tcp
+fsp            21/udp          fspd
+ssh            22/tcp                          # SSH Remote Login Protocol
+ssh            22/udp                          # SSH Remote Login Protocol
+telnet         23/tcp
+# 24 - private
+smtp           25/tcp          mail
+# 26 - unassigned
+time           37/tcp          timserver
+time           37/udp          timserver
+rlp            39/udp          resource        # resource location
+nameserver     42/tcp          name            # IEN 116
+whois          43/tcp          nicname
+re-mail-ck     50/tcp                          # Remote Mail Checking Protocol
+re-mail-ck     50/udp                          # Remote Mail Checking Protocol
+domain         53/tcp          nameserver      # name-domain server
+domain         53/udp          nameserver
+mtp            57/tcp                          # deprecated
+bootps         67/tcp                          # BOOTP server
+bootps         67/udp
+bootpc         68/tcp                          # BOOTP client
+bootpc         68/udp
+tftp           69/udp
+gopher         70/tcp                          # Internet Gopher
+gopher         70/udp
+rje            77/tcp          netrjs
+finger         79/tcp
+www            80/tcp          http            # WorldWideWeb HTTP
+www            80/udp                          # HyperText Transfer Protocol
+link           87/tcp          ttylink
+kerberos       88/tcp          kerberos5 krb5  # Kerberos v5
+kerberos       88/udp          kerberos5 krb5  # Kerberos v5
+supdup         95/tcp
+# 100 - reserved
+hostnames      101/tcp         hostname        # usually from sri-nic
+iso-tsap       102/tcp         tsap            # part of ISODE.
+csnet-ns       105/tcp         cso-ns          # also used by CSO name server
+csnet-ns       105/udp         cso-ns
+# unfortunately the poppassd (Eudora) uses a port which has already
+# been assigned to a different service. We list the poppassd as an
+# alias here. This should work for programs asking for this service.
+# (due to a bug in inetd the 3com-tsmux line is disabled)
+#3com-tsmux    106/tcp         poppassd
+#3com-tsmux    106/udp         poppassd
+rtelnet                107/tcp                         # Remote Telnet
+rtelnet                107/udp
+pop-2          109/tcp         postoffice      # POP version 2
+pop-2          109/udp
+pop-3          110/tcp                         # POP version 3
+pop-3          110/udp
+sunrpc         111/tcp         portmapper      # RPC 4.0 portmapper TCP
+sunrpc         111/udp         portmapper      # RPC 4.0 portmapper UDP
+auth           113/tcp         authentication tap ident
+sftp           115/tcp
+uucp-path      117/tcp
+nntp           119/tcp         readnews untp   # USENET News Transfer Protocol
+ntp            123/tcp
+ntp            123/udp                         # Network Time Protocol
+netbios-ns     137/tcp                         # NETBIOS Name Service
+netbios-ns     137/udp
+netbios-dgm    138/tcp                         # NETBIOS Datagram Service
+netbios-dgm    138/udp
+netbios-ssn    139/tcp                         # NETBIOS session service
+netbios-ssn    139/udp
+imap2          143/tcp         imap            # Interim Mail Access Proto v2
+imap2          143/udp         imap
+snmp           161/udp                         # Simple Net Mgmt Proto
+snmp-trap      162/udp         snmptrap        # Traps for SNMP
+cmip-man       163/tcp                         # ISO mgmt over IP (CMOT)
+cmip-man       163/udp
+cmip-agent     164/tcp
+cmip-agent     164/udp
+xdmcp          177/tcp                         # X Display Mgr. Control Proto
+xdmcp          177/udp
+nextstep       178/tcp         NeXTStep NextStep       # NeXTStep window
+nextstep       178/udp         NeXTStep NextStep       # server
+bgp            179/tcp                         # Border Gateway Proto.
+bgp            179/udp
+prospero       191/tcp                         # Cliff Neuman's Prospero
+prospero       191/udp
+irc            194/tcp                         # Internet Relay Chat
+irc            194/udp
+smux           199/tcp                         # SNMP Unix Multiplexer
+smux           199/udp
+at-rtmp                201/tcp                         # AppleTalk routing
+at-rtmp                201/udp
+at-nbp         202/tcp                         # AppleTalk name binding
+at-nbp         202/udp
+at-echo                204/tcp                         # AppleTalk echo
+at-echo                204/udp
+at-zis         206/tcp                         # AppleTalk zone information
+at-zis         206/udp
+qmtp           209/tcp                         # The Quick Mail Transfer 
Protocol
+qmtp           209/udp                         # The Quick Mail Transfer 
Protocol
+z3950          210/tcp         wais            # NISO Z39.50 database
+z3950          210/udp         wais
+ipx            213/tcp                         # IPX
+ipx            213/udp
+imap3          220/tcp                         # Interactive Mail Access
+imap3          220/udp                         # Protocol v3
+rpc2portmap    369/tcp
+rpc2portmap    369/udp                         # Coda portmapper
+codaauth2      370/tcp
+codaauth2      370/udp                         # Coda authentication server
+ulistserv      372/tcp                         # UNIX Listserv
+ulistserv      372/udp
+https          443/tcp                         # MCom
+https          443/udp                         # MCom
+snpp           444/tcp                         # Simple Network Paging Protocol
+snpp           444/udp                         # Simple Network Paging Protocol
+saft           487/tcp                         # Simple Asynchronous File 
Transfer
+saft           487/udp                         # Simple Asynchronous File 
Transfer
+npmp-local     610/tcp         dqs313_qmaster  # npmp-local / DQS
+npmp-local     610/udp         dqs313_qmaster  # npmp-local / DQS
+npmp-gui       611/tcp         dqs313_execd    # npmp-gui / DQS
+npmp-gui       611/udp         dqs313_execd    # npmp-gui / DQS
+hmmp-ind       612/tcp         dqs313_intercell# HMMP Indication / DQS
+hmmp-ind       612/udp         dqs313_intercell# HMMP Indication / DQS
+#
+# UNIX specific services
+#
+exec           512/tcp
+biff           512/udp         comsat
+login          513/tcp
+who            513/udp         whod
+shell          514/tcp         cmd             # no passwords used
+syslog         514/udp
+printer                515/tcp         spooler         # line printer spooler
+talk           517/udp
+ntalk          518/udp
+route          520/udp         router routed   # RIP
+timed          525/udp         timeserver
+tempo          526/tcp         newdate
+courier                530/tcp         rpc
+conference     531/tcp         chat
+netnews                532/tcp         readnews
+netwall                533/udp                         # -for emergency 
broadcasts
+uucp           540/tcp         uucpd           # uucp daemon
+afpovertcp     548/tcp                         # AFP over TCP
+afpovertcp     548/udp                         # AFP over TCP
+remotefs       556/tcp         rfs_server rfs  # Brunhoff remote filesystem
+klogin         543/tcp                         # Kerberized `rlogin' (v5)
+kshell         544/tcp         krcmd           # Kerberized `rsh' (v5)
+kerberos-adm   749/tcp                         # Kerberos `kadmin' (v5)
+#
+webster                765/tcp                         # Network dictionary
+webster                765/udp
+#
+# From ``Assigned Numbers'':
+#
+#> The Registered Ports are not controlled by the IANA and on most systems
+#> can be used by ordinary user processes or programs executed by ordinary
+#> users.
+#
+#> Ports are used in the TCP [45,106] to name the ends of logical
+#> connections which carry long term conversations.  For the purpose of
+#> providing services to unknown callers, a service contact port is
+#> defined.  This list specifies the port used by the server process as its
+#> contact port.  While the IANA can not control uses of these ports it
+#> does register or list uses of these ports as a convienence to the
+#> community.
+#
+ingreslock     1524/tcp
+ingreslock     1524/udp
+prospero-np    1525/tcp                        # Prospero non-privileged
+prospero-np    1525/udp
+datametrics    1645/tcp        old-radius      # datametrics / old radius entry
+datametrics    1645/udp        old-radius      # datametrics / old radius entry
+sa-msg-port    1646/tcp        old-radacct     # sa-msg-port / old radacct 
entry
+sa-msg-port    1646/udp        old-radacct     # sa-msg-port / old radacct 
entry
+radius         1812/tcp                        # Radius
+radius         1812/udp                        # Radius
+radacct                1813/tcp                        # Radius Accounting
+radacct                1813/udp                        # Radius Accounting
+cvspserver     2401/tcp                        # CVS client/server operations
+cvspserver     2401/udp                        # CVS client/server operations
+venus          2430/tcp                        # codacon port
+venus          2430/udp                        # Venus callback/wbc interface
+venus-se       2431/tcp                        # tcp side effects
+venus-se       2431/udp                        # udp sftp side effect
+codasrv                2432/tcp                        # not used
+codasrv                2432/udp                        # server port
+codasrv-se     2433/tcp                        # tcp side effects
+codasrv-se     2433/udp                        # udp sftp side effect
+mysql          3306/tcp                        # MySQL
+mysql          3306/udp                        # MySQL
+rfe            5002/tcp                        # Radio Free Ethernet
+rfe            5002/udp                        # Actually uses UDP only
+cfengine       5308/tcp                        # CFengine
+cfengine       5308/udp                        # CFengine
+bbs            7000/tcp                        # BBS service
+#
+#
+# Kerberos (Project Athena/MIT) services
+# Note that these are for Kerberos v4, and are unofficial.  Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+kerberos4      750/udp         kerberos-iv kdc # Kerberos (server) udp
+kerberos4      750/tcp         kerberos-iv kdc # Kerberos (server) tcp
+kerberos_master        751/udp                         # Kerberos 
authentication
+kerberos_master        751/tcp                         # Kerberos 
authentication
+passwd_server  752/udp                         # Kerberos passwd server
+krb_prop       754/tcp                         # Kerberos slave propagation
+krbupdate      760/tcp         kreg            # Kerberos registration
+kpasswd                761/tcp         kpwd            # Kerberos "passwd"
+kpop           1109/tcp                        # Pop with Kerberos
+knetd          2053/tcp                        # Kerberos de-multiplexor
+zephyr-srv     2102/udp                        # Zephyr server
+zephyr-clt     2103/udp                        # Zephyr serv-hm connection
+zephyr-hm      2104/udp                        # Zephyr hostmanager
+eklogin                2105/tcp                        # Kerberos encrypted 
rlogin
+#
+# Unofficial but necessary (for NetBSD) services
+#
+supfilesrv     871/tcp                         # SUP server
+supfiledbg     1127/tcp                        # SUP debugging
+#
+# Datagram Delivery Protocol services
+#
+rtmp           1/ddp                           # Routing Table Maintenance 
Protocol
+nbp            2/ddp                           # Name Binding Protocol
+echo           4/ddp                           # AppleTalk Echo Protocol
+zip            6/ddp                           # Zone Information Protocol
+#
+# Services added for the Debian GNU/Linux distribution
+poppassd       106/tcp                         # Eudora
+poppassd       106/udp                         # Eudora
+mailq          174/tcp                         # Mailer transport queue for 
Zmailer
+mailq          174/tcp                         # Mailer transport queue for 
Zmailer
+ssmtp          465/tcp                         # SMTP over SSL
+gdomap         538/tcp                         # GNUstep distributed objects
+gdomap         538/udp                         # GNUstep distributed objects
+snews          563/tcp                         # NNTP over SSL
+ssl-ldap       636/tcp                         # LDAP over SSL
+omirr          808/tcp         omirrd          # online mirror
+omirr          808/udp         omirrd          # online mirror
+rsync          873/tcp                         # rsync
+rsync          873/udp                         # rsync
+simap          993/tcp                         # IMAP over SSL
+spop3          995/tcp                         # POP-3 over SSL
+socks          1080/tcp                        # socks proxy server
+socks          1080/udp                        # socks proxy server
+rmtcfg         1236/tcp                        # Gracilis Packeten remote 
config server
+xtel           1313/tcp                        # french minitel
+support                1529/tcp                        # GNATS
+cfinger                2003/tcp                        # GNU Finger
+ninstall       2150/tcp                        # ninstall service
+ninstall       2150/udp                        # ninstall service
+afbackup       2988/tcp                        # Afbackup system
+afbackup       2988/udp                        # Afbackup system
+icp            3130/tcp                        # Internet Cache Protocol 
(Squid)
+icp            3130/udp                        # Internet Cache Protocol 
(Squid)
+postgres       5432/tcp                        # POSTGRES
+postgres       5432/udp                        # POSTGRES
+fax            4557/tcp                        # FAX transmission service      
  (old)
+hylafax                4559/tcp                        # HylaFAX client-server 
protocol  (new)
+noclog         5354/tcp                        # noclogd with TCP (nocol)
+noclog         5354/udp                        # noclogd with UDP (nocol)
+hostmon                5355/tcp                        # hostmon uses TCP 
(nocol)
+hostmon                5355/udp                        # hostmon uses TCP 
(nocol)
+ircd           6667/tcp                        # Internet Relay Chat
+ircd           6667/udp                        # Internet Relay Chat
+webcache       8080/tcp                        # WWW caching service
+webcache       8080/udp                        # WWW caching service
+tproxy         8081/tcp                        # Transparent Proxy
+tproxy         8081/udp                        # Transparent Proxy
+mandelspawn    9359/udp        mandelbrot      # network mandelbrot
+amanda         10080/udp                       # amanda backup services
+kamanda                10081/tcp                       # amanda backup 
services (Kerberos)
+kamanda                10081/udp                       # amanda backup 
services (Kerberos)
+amandaidx      10082/tcp                       # amanda backup services
+amidxtape      10083/tcp                       # amanda backup services
+isdnlog                20011/tcp                       # isdn logging system
+isdnlog                20011/udp                       # isdn logging system
+vboxd          20012/tcp                       # voice box system
+vboxd          20012/udp                       # voice box system
+binkp          24554/tcp                       # Binkley
+binkp          24554/udp                       # Binkley
+asp            27374/tcp                       # Address Search Protocol
+asp            27374/udp                       # Address Search Protocol
+tfido          60177/tcp                       # Ifmail
+tfido          60177/udp                       # Ifmail
+fido           60179/tcp                       # Ifmail
+fido           60179/udp                       # Ifmail
+
+# Local services
+
+linuxconf 98/tcp

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/setuid.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/setuid.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/setuid.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/setuid.html     3 Mar 2012 
06:14:43 -0000       1.1
@@ -0,0 +1,97 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux 2.2.12-20 
i586) [Netscape]">
+</head>
+<body text="#000000" bgcolor="#FFCC99" link="#0000EF" vlink="#51188E" 
alink="#FF0000">
+<a href="onlyfile.html">[ &lt; ]</a><a href="contenidos.html">[ || ]</a>[
+> ]
+<br>&nbsp;
+<h1>
+SET UID&nbsp; y GID a ficheros y directorios.</h1>
+&nbsp;
+<blockquote>Hacer SET UID y GID a ficheros y directorios, generalmente
+a estos &uacute;ltimos, permitir&aacute; una "herencia" de 
caracter&iacute;sticas
+del directorio anterior al siguiente, y todos los ficheros/directorios
+que se generen/cree/copien en los directorios SET GID, tendr&aacute;n las
+caracter&iacute;sticas del directorio padre.
+<p>Generalmente se permite GID para&nbsp; que los usuarios de un grupo
+puedan trabajar con los ficheros de ese mismo grupo, UID podr&aacute; hacer
+cambiar por otra persona del GRUPO el due&ntilde;o del fichero y los permisos,
+si tiene activo la opci&oacute;n "pinchable"
+<p>SET GID es una opci&oacute;n interesante si MUCHOS USUARIOS van a acceder
+a un sistema de almacenamiento com&uacute;n, bien sea SAMBA, FTP, HTTP,
+Bases de Datos...
+<p>Ejemplo:
+<p>address@hidden tutorial]$ mkdir EJEMPLO
+<br>address@hidden tutorial]$ vdir
+<br>.
+<br>&nbsp;4 drwxr-xr-x&nbsp;&nbsp; 2 tutorial 
tutorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+4096 Dec 31 13:48 EJEMPLO
+<br>.
+<br>address@hidden tutorial]$ su root
+<br>Password: ******
+<br>address@hidden tutorial]# chown nobody.users EJEMPLO/
+<br>address@hidden tutorial]# vdir
+<br>.
+<br>4 drwxrwxrwx&nbsp;&nbsp; 2 nobody&nbsp;&nbsp; 
users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+4096 Dec 31 13:48 EJEMPLO
+<br>.
+<br>address@hidden tutorial]#&nbsp; chmod g+s EJEMPLO
+<br>address@hidden tutorial]#&nbsp; vdir
+<br>.
+<br>4 drwxrwsrwx&nbsp;&nbsp; 2 nobody&nbsp;&nbsp; 
users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+4096 Dec 31 13:48 EJEMPLO
+<br>.
+<br>Por defecto: NING&Uacute;N USUARIO que no pertenezca AL GRUPO podr&aacute;
+trabajar con los ficheros:
+<br>LOS USUARIOS DEL GRUPO podr&aacute;n trabajar on los ficheros dependiendo
+de sus atributos que tengan los usuarios.
+<p>SAMBA, FTP, HTTP... tiene caracter&iacute;sticas especiales que no se
+rigen por estas normas y las complementan enriqueciendolas.
+<p>Si dentro de EJEMPLOS varios usuarios crearan ficheros y directorios
+los siguientes ficheros:
+<p>address@hidden tutorial]$ cd EJEMPLO/
+<br>address@hidden EJEMPLO]$ vdir
+<br>total 52
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 2 
angel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:07 <font 
color="#000099">direct-of-angel</font>
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 2 
carlos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:05 <font 
color="#000099">direct-of-carlos</font>
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 2 
javier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:23 <font 
color="#000099">direct-of-javier</font>
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 2 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:22 <font 
color="#000099">direct-of-root</font>
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 2 
tutorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:41 <font 
color="#000099">direct-of-tutorial</font>
+<br><font color="#FF0000">&nbsp;&nbsp; 4 -rw-r-Sr--&nbsp;&nbsp; 1 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1414 Dec 31 14:33 
information.doc</font>
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 3 
angel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:08 <font 
color="#000099">privados</font>
+<br>&nbsp;&nbsp; 4 -rw-r-Sr--&nbsp;&nbsp; 1 
angel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1408 Dec 31 14:33 senders.wpd
+<br>&nbsp;&nbsp; 4 drwxr-sr-x&nbsp;&nbsp; 2 
tutorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4096 Dec 31 14:48 <font 
color="#000099">tras-tras</font>
+<br>&nbsp;&nbsp; 4 -rw-r-Sr--&nbsp;&nbsp; 1 
ana&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1055 Dec 31 14:33 vendors.txt
+<br>&nbsp;&nbsp; 4 -rw-r-Sr--&nbsp;&nbsp; 1 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2464 Dec 31 14:34 winers.doc
+<br>&nbsp;&nbsp; 4 -rw-r-Sr--&nbsp;&nbsp; 1 tutorial&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 844 Dec 31 14:38
+xabout-us.txt
+<br>&nbsp;&nbsp; 4 -rw-r-Sr--&nbsp;&nbsp; 1 
javier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1824 Dec 31 14:35 xfree86.doc
+<br>address@hidden EJEMPLO]$
+<br>Ahora accedemos a EJEMPLO&nbsp; y creamos varios ficheros:
+<p>Al estar el directorio EJEMPLO con los atributos:&nbsp; d<font 
color="#003300">rwx</font><font color="#663366">rw</font><font 
color="#FF0000">s</font><font color="#330000">rwx,
+indicando </font><font color="#000000">la</font><font color="#FF0000"><font 
size=+3>s</font></font><font color="#000000">,
+que el directorio se encuentra SET GID, todos los ficheros que se creen
+en &eacute;l pertenceran al usuario y al grupo que indique el SET GID.</font>
+<p><font color="#000000">Como ejemplo hemos resaltado el fichero 
"information.doc"
+que lo ha creado root, y sin embargo el grupo es users, ejemplo claro para
+esta explicaci&oacute;n. :-)</font></blockquote>
+<a href="onlyfile.html">[ &lt; ]</a><a href="contenidos.html">[ || ]</a>[
+> ]
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/sobre_tutorial.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/sobre_tutorial.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/sobre_tutorial.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/sobre_tutorial.html     3 Mar 
2012 06:14:43 -0000       1.1
@@ -0,0 +1,140 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.10 
i586) [Netscape]">
+   <title>Leeme, sobre LinuxTutorial</title>
+</head>
+<body text="#000000" bgcolor="#C0C0FF" link="#0000FF" vlink="#800080" 
alink="#FF0080">
+<a NAME="Arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+LEEME -sobre TutorialLinux-</h1>
+&nbsp;
+<ul>
+<li>
+<a href="#Linux">&iquest;Qu&eacute; es LiNUX ?</a></li>
+
+<li>
+<a href="#Instrucciones">Leeme (Instrucciones para aprendices)</a></li>
+
+<li>
+<a href="zMayores65.html">Recomendado mayores de 65 a&ntilde;os.</a></li>
+
+<li>
+<a href="nuevo.html">&iquest;Que tiene de nuevo esta versi&oacute;n de
+TutorialLinux?</a></li>
+
+<li>
+<a href="#Nota">Nota del equipo de desarrollo para ver el tutorial.</a></li>
+
+<li>
+<a href="#Licencia">Leeme (Sobre la licencia y distribuci&oacute;n)</a></li>
+</ul>
+
+<hr WIDTH="100%">
+<h2>
+<a NAME="Linux"></a></h2>
+
+<h2>
+&iquest; Qu&eacute; es LiNUX ?</h2>
+
+<p><br>Linux es el Unix gratuito escrito por Linus Torvalds con la asistencia
+t&eacute;cnica de un grupo de hackers a traves de la Internet cumpliendo
+todas las caracter&iacute;sticas de los Sistemas Operativos Unix actuales,
+y con todos los modernos avances en los Sistemas Operativos, con capacidad
+de multitarea real, memoria virtual, librer&iacute;as compartidas, 
consumici&oacute;n
+escasa de recursos, manejo estupendo de la memoria, trabajo con TCP/IP...
+<br>&nbsp;
+<p>Linux se ejecuta principalmente en m&aacute;quinas basadas en PC's usando
+las facilidades del hardware de la familia del procesador 80386 (Segmentos
+TSS) que implementan esta caracter&iacute;stica (y tienen capacidad 
multitarea).
+Portado tambi&eacute;n a otras arquitecturas que no son la familia Intel.
+<p>Lea el fichero de su distribuci&oacute;n: <a 
href="/usr/doc/FAQ/html/Linux-FAQ.html">file:/usr/doc/FAQ/html/Linux-FAQ.html</a>
+<p><a href="#Arriba">[ ^ ]</a>
+<p>
+<hr WIDTH="100%">
+<p><a NAME="Instrucciones"></a>
+<h2>
+Instrucciones:</h2>
+
+<p><br>Para cumplir el objetivo de aprendizaje contiene un peque&ntilde;o
+<a href="glosary.html#glosario">glosario</a>
+de t&eacute;rminos que podr&iacute;a desconocer, &uacute;selo.
+<p>El objetivo de este tutorial ser&aacute; la de que obtengas los 
conocimientos
+adecuados para que a partir del primer d&iacute;a ya puedas disfrutar del
+potencial de Linux, que en una semana te pongas al d&iacute;a, y que en
+un mes seas un usuario que puedas recomendar algunas sugerencias a otros
+nuevos usuarios.
+<p><font face="Times New Roman,Times">Muy seguramente habr&aacute;s escuchado
+que Linux, &iquest;es dif&iacute;cil?, &iquest;est&aacute; orientado 
s&oacute;lo
+a la red?, &iquest;no hay aplicaciones para Linux?, &iquest;no hay 
libros/tutoriales/ayudas/...
+de sus comandos?. Como podr&aacute;s observar todo eso es falso.</font>
+Para empezar, las p&aacute;ginas "<a href="glosary.html#man">man</a>" de
+Linux (o sea, la ayuda de los comandos de Linux) son tremendamente 
&uacute;tiles
+y completas. Su uso es tan sencillo como escribir man + comando. Por ejemplo:
+<a href="glosary.html#man">man
+</a><a href="glosary.html#ls">ls
+</a>(para
+obtener ayuda acerca de <a href="glosary.html#ls">ls</a>).
+<p><font face="Times New Roman,Times">Ahora, mu&eacute;vete con el cursor
+y pulsa [<a href="glosary.html#TeclaIntro">Intro</a>], si est&aacute;s
+en <a href="glosary.html#Lynx:">lynx</a>, o pincha dos veces con el cursor
+si est&aacute;s en un navegador en modo gr&aacute;fico (ej.
+<a href="glosary.html#Netscape">Netscape</a>),
+sobre las letras que est&aacute;n en <a href="../tutorial.html">azul</a></font>
+(o cualquier otro color, pero casi siempre subrayado)&nbsp; (usa el cursor
+en Lynx).
+<p>Cuando termines este tutorial TE RECOMENDAMOS que adquieras un libro
+sobre Linux, da igual que contenga CD, disquetes... o no, lo importante
+del libro es que te ayudar&aacute; a resolver las dudas que todav&iacute;a
+puedas tener, adem&aacute;s de consolidar tus conocimientos.
+<p>Este tutorial no puede albergar todos los conocimientos de Linux, ya
+que ese no es nuestro prop&oacute;sito. para eso est&aacute;n las ayudas
+de cada programa, y los manuales de todos los comandos.
+<ul>
+<ul>
+<li>
+<a href="stutorial2.html">Palabras de uso com&uacute;n en Linux</a></li>
+</ul>
+</ul>
+
+<p><br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Licencia"></a>
+<h2>
+Sobre la licencia.</h2>
+&nbsp;
+<blockquote>La licencia de este tutorial es <a 
href="stutorial2.html">GNU/GPL</a>,
+por lo que podr&aacute; ser libremente distribuido, aunque estar&iacute;amos
+muy agradecidos se nos comunicara dicha opci&oacute;n enviando un correo
+electr&oacute;nico a:
+<p><a href="mailto:address@hidden";>address@hidden</a>
+<br>o
+<br><a href="mailto:address@hidden";>address@hidden</a>
+<p>El simple hecho de la comunicaci&oacute;n nos evitar&iacute;a a todos
+aquellos que quieran distribuirlo muchos dolores de cabeza.</blockquote>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Nota"></a>
+<h2>
+<font color="#000099">Nota</font></h2>
+
+<hr WIDTH="100%">
+<br><font color="#000099">Los autores, ofrecen este tutorial para todos
+aquellos usuarios noveles que quieran ampliar r&aacute;pidamente sus 
conocimientos
+en Linux, recomendando seguirlo paso a paso. Nuestro equipo de desarrollo
+recomienda para una correcta visualizaci&oacute;n del tutorial los navegadores:
+Lynx, cualquier navegador que funcione bajo Linux o Netscape</font>
+<p>Si detecta alg&uacute;n error, por favor mande un correo electr&oacute;nico
+a: <a href="mailto:address@hidden";>address@hidden, indicando brevemente
+donde est&aacute; situado.</a>
+<p><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/sonido.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/sonido.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/sonido.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/sonido.html     3 Mar 2012 
06:14:43 -0000       1.1
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i586) [Netscape]">
+</HEAD>
+<BODY>
+<A HREF="kernelYsonido.html">[ &lt; ]</A><A HREF="contenidos.html">[ ||
+]</A>[ > ]
+<H1>
+&iexcl;SONIDO POR FAVOR!</H1>
+
+<P><BR>Una vez que ya tengas compilado tu n&uacute;cleo podr&aacute;s modificar
+los valores (asignaciones de memoria) si lo configuraste como m&oacute;dulo
+(no incluido en el n&uacute;cleo) con el programa <B>sndconfig.</B>
+<P>El principal programa en modo texto para subir o bajar el sonido, control
+de bajos, mezclador, sintetizador, treble... es:
+<P><B>aumix</B>
+<P>Para escuchar un MIDI.
+<P><B>playmidi</B>
+<P>Para escuchar un .WAV, MOD...
+<P><B>play</B>
+<P>Recuerda que siempre puedes dejar cualquier sonido en 2&ordm; plano
+usando el signo de amspersand "&amp;"
+<P><B>play</B> mimusica.wav &amp;
+<P>Si tienes un CD de m&uacute;sica, corre, mete un cd y escribe:
+<P><B>cdp</B>
+<P>Y gestionar&aacute;s la m&uacute;sica desde un c&oacute;mo interfaz
+<BR>O si s&oacute;lo quieres escuchar la m&uacute;sica que tienes, escribe:
+<P><B>playcd</B>
+<P>Saca el CD a trav&eacute;s del comando de Linux:
+<P><B>eject</B>
+<P>Para m&aacute;s informaci&oacute;n mira la documentaci&oacute;n:
+<BR>--------------------------
+<BR><A HREF="kernelYsonido.html">[ &lt; ]</A><A HREF="contenidos.html">[
+|| ]</A>[ > ]
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/stutorial2.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/stutorial2.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/stutorial2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/stutorial2.html 3 Mar 2012 
06:14:43 -0000       1.1
@@ -0,0 +1,237 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.9 
i586) [Netscape]">
+   <title>Palabras de uso com&uacute;n en Linux.</title>
+</head>
+<body text="#000000" bgcolor="#66FFFF" link="#0000EE" vlink="#FF6666" 
alink="#FF0000">
+<a href="sobre_tutorial.html">[ &lt;
+]</a>
+<h2>
+Palabras de uso com&uacute;n en Linux.</h2>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+DOMINIO P&Uacute;BLICO: (FREEWARE)</li>
+
+<br>Programas gratuitos y donados para ser usados por cualquiera. El principal
+inter&eacute;s de estos programas es el acad&eacute;mico ya que suelen
+ir incorporados con los programas fuentes, el autor renuncia a la propiedad
+del producto.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+LIBRE DISTRIBUCI&Oacute;N, GPL o GNU:</li>
+
+<br>El o los autores permiten la distribuci&oacute;n y modificaci&oacute;n
+de los programas fuentes de forma desinteresada, pero <b><i>mantiene los
+derechos de propiedad "Copyright"</i></b> sobre el producto, (que siempre
+debe incluir el/los nombre/s de el/los autor/es), y podr&aacute; ejercelos
+(incluso con acciones jur&iacute;dicas) en caso de uso indebido, como 
explotaci&oacute;n
+comercial por parte de terceros. Esto garantiza al autor un beneficio comercial
+y control del uso de su obra.
+<br>La mayor parte del software de Linux se engloba como GNU.
+<br>&nbsp;
+<ul>
+<li>
+Linux (El n&uacute;cleo o kernel) es propiedad intelectual de Linus 
Torlvads</li>
+
+<li>
+Este Tutorial es propiedad intelectual de Javier y Jos&eacute; Carlos Orovengua
+Miguel</li>
+</ul>
+</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+SHAREWARE:</li>
+
+<br>Ejecutables de libre distribuci&oacute;n, (No incluyen fuentes). Si
+el usuario los encuentra de inter&eacute;s, o los usa con frecuencia, el
+autor espera recibir una compensaci&oacute;n econ&oacute;mica. Para 
garantizarse
+esto, habr&aacute; veces que algunas caracter&iacute;stica est&eacute;n
+inhabilitadas, o se ofrece soporte adicional. El autor mantiene la propiedad
+intelectual.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+SOFTWARE COMERCIAL:</li>
+
+<br>El autor vende el producto compilado, adem&aacute;s, ofrece unos servicios
+a&ntilde;adidos tras la compra, como pueden ser: mantenimiento, 
actualizaciones,
+soporte t&eacute;cnico, (algunos productos ofrecen garant&iacute;a al 
hard/soft).
+El autor mantiene la propiedad del producto y permite el uso limitado a
+quien lo paga.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+VERSI&Oacute;N "ALFA"</li>
+
+<br>Paquete de software todav&iacute;a en fase de pruebas, y que puede
+contener errores.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+VERSI&Oacute;N "BETA"</li>
+
+<br>Paquete de software que ha superado la versi&oacute;n "Alfa", y no
+tendr&aacute; errores conocidos, lo cual no quiere decir que no aparezca
+alguno, y adem&aacute;s no se le han comprobado todas sus capacidades.
+Este tipo de software suele llevar un tipo de numeraci&oacute;n impar...:
+0.<u>99</u>.x, 1.<u>1</u>.x.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+VERSI&Oacute;N DE EXPLOTACI&Oacute;N:</li>
+
+<br>Paquete reconocido como estable. Aunque pudiera haber errores, 
ser&iacute;an
+leves e infrecuentes. Este tipo de software no podr&aacute; trabajar sobre
+sus propias versiones "Alfa" o "Beta", las versiones de estos programas
+suelen llevar numeraci&oacute;n par: 1.<u>0</u>.x, 1.<u>2</u>.x...</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+SISTEMA ABIERTO:</li>
+
+<br>Aquellos en el que son p&uacute;blicas y estables sus 
caracter&iacute;sticas
+externas de funcionamiento (servicios que ofrece). Esto posibilita la 
comunicaci&oacute;n
+con otros sistemas sin tener conocimiento exacto de su funcionamiento interno.
+Unix lo es, y Linux como cl&oacute;nico de Unix tambi&eacute;n lo es.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+SHELL:</li>
+
+<br>La shell (caparaz&oacute;n en ingl&eacute;s), es el programa encargado
+del di&aacute;logo con el usuario. Es el INT&Eacute;RPRETE DE COMANDOS,
+y est&aacute; encargado de su comunicaci&oacute;n con el n&uacute;cleo
+y otros programas. La shell que hayamos escogido se carga en el proceso
+de inicio, y entre las m&aacute;s famosas est&aacute;n: bash, ksh y csh,
+siendo bash la m&aacute;s f&aacute;cil de usar.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+COMANDOS:</li>
+
+<br>Herramientas de nivel inferior al Sistema Operativo (pero incluidas
+en &eacute;ste) y que posibilitan la mayor parte del trabajo con el mismo.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+APLICACIONES:</li>
+
+<br>Programas de complejidad relativa que permiten realizar tareas concretas,
+dentro de este tipo de software se engloban: Procesadores de Textos, Hojas
+de C&aacute;lculo, Navegadores...</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+SISTEMA DE VENTANAS: (o gr&aacute;fico):</li>
+
+<br>Entorno gr&aacute;fico que recubre al n&uacute;cleo y proporciona la
+apariencia que el usuario ve del mismo.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+GESTOR DE VENTANAS:</li>
+
+<br>Es un Administrador de Ventanas que recubre al n&uacute;cleo del Sistema
+de Ventanas (que este a su vez recubre al n&uacute;cleo del Sistema Operativo).
+<p>En Linux, el Sistema de Ventanas suele ser X-Window, y el gestor de
+ventanas lo puedes cambiar libremente a tu gusto, encontr&aacute;ndose
+entre ellos:
+<br>&nbsp;
+<ul>
+<li>
+KDE</li>
+
+<li>
+GNOME</li>
+
+<li>
+OpenLook</li>
+
+<li>
+FVWM</li>
+
+<li>
+TWM</li>
+
+<li>
+Y otros aqu&iacute; no mencionados.</li>
+</ul>
+Este t&eacute;rmino se suele confundir con "Sistema de Ventanas", ya que
+generalmente los usuarios migrados de otros Sistemas Operativos de entorno
+gr&aacute;fico (OS/2, Mac, Windows) suelen tener irremediablemente unido
+el "Sistema de Ventanas" y su "Gestor de Ventanas".
+<br>(y cuando fallan, no se sabe si falla el Sistema o el Gestor...)</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+DISTRIBUCI&Oacute;N:</li>
+
+<br>Linux, s&oacute;lo hay uno, b&aacute;sicamente Linux es su n&uacute;cleo.
+pero cuando cierto grupo de personas se encargan de "bajar" de internet
+todos los programas GNU o no, que acompa&ntilde;an al n&uacute;cleo (X-Window,
+NetScape, KDE, GNOME, AplixWare, Agendas, programas de administraci&oacute;n,
+Apache, SendMail...) organizan la informaci&oacute;n, crean programas de
+instalaci&oacute;n, a&ntilde;aden documentaci&oacute;n y/o sus propios
+programas, etc., etc., etc... lo meten todo en disquetes o en CD-ROM(s)
+crean una DISTRIBUCI&Oacute;N.
+<p>Estas son algunas de las distribuciones m&aacute;s conocidas.
+<br>&nbsp;
+<ul>
+<li>
+SlackWare</li>
+
+<li>
+RedHat</li>
+
+<li>
+SuSE</li>
+
+<li>
+Debian</li>
+
+<li>
+GLHis</li>
+
+<li>
+Y otras m&aacute;s aqu&iacute; no mencionadas.</li>
+</ul>
+
+<p><br>Las distribuciones se encargan de popularizar este sistema operativo
+(u otros), gracias a la licencia GNU, por eso, no pueden existir DISTRIBUCIONES
+de otros sistemas operativos como: MS-DOS, OS/2..., porque su licencia
+s&oacute;lo permite distribuirlos bajo un costo (un dinero a cambio del
+sistema) y s&oacute;lo ellos podr&aacute;n imponer los precios de venta.</ul>
+
+<hr WIDTH="100%">
+<ul>
+<li>
+CVS:</li>
+
+<br>"Current Versi&oacute;n Software": traduciremos literalmente:
+<br>Versi&oacute;n Actual del Software</ul>
+
+<hr WIDTH="100%">
+<p><a href="sobre_tutorial.html">[ &lt; ]</a>
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/translate.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/translate.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/translate.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/translate.html  3 Mar 2012 
06:14:43 -0000       1.1
@@ -0,0 +1,39 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.10 
i586) [Netscape]">
+   <title>\linux_files\translate</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" 
alink="#FF0000">
+
+<h1>
+About Translating The Tutorial.</h1>
+If you want to translate the tutorial into your own language, please contact
+with us by writing one e-mail to:
+<br>&nbsp;
+<ul>
+<li>
+<a href="mailto:address@hidden";>address@hidden</a> or:</li>
+
+<li>
+<a href="mailto:address@hidden";>address@hidden</a></li>
+</ul>
+
+<ul>With the subject: TRANSLATE TUTORIAL.
+<br>&nbsp;
+<ul>Our LinuxTutorial is GNU, but we want to know the people and languages
+into which it is translated, and we will ask for one copy of our/your tutorial
+translated.</ul>
+
+<ul>THANK YOU for collaborating with the Linux community and THANK YOU
+for your interesting.
+<br>&nbsp;</ul>
+
+<center><a href="../tutorial.html">[Back to tutorial]</a><a 
href="moreinfo.html">[More
+Info]</a>[Known Translations]</center>
+</ul>
+
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/trucos.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/trucos.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/trucos.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/trucos.html     3 Mar 2012 
06:14:43 -0000       1.1
@@ -0,0 +1,172 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.10 
i586) [Netscape]">
+   <meta name="Author" content="Javier Orovengua y colaboradores">
+   <meta name="Description" content="Trucos.">
+   <title>Trucos de linux.</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#55188A" 
alink="#FF0000">
+
+<h1>
+<a NAME="Salir"></a></h1>
+<a href="../tutorial.html">[ &lt; ]</a>
+<h1>
+Trucos:</h1>
+
+<h4>
+Si conoces alg&uacute;n truco de gesti&oacute;n, administraci&oacute;n
+o cual sea, si quieres no dudes en mandarlo a la direcci&oacute;n de correo:<a 
href="mailto:address@hidden";>
address@hidden</a>, la comunidad Linux y nosotros te estaremos muy 
agradecidos</h4>
+
+<hr WIDTH="100%">
+<p><a href="#AliasWorking">&iquest;Qu&eacute; alias est&aacute;n 
funcionando?</a>
+<br><a href="#FindANDremove">&iquest;C&oacute;mo puedo buscar los core
+y borrarlos?</a>
+<br><a href="#UserMounts">&iquest;C&oacute;mo puedo hacer que los usuarios
+monten las unidades?</a>
+<br><a href="#CargaWinoDOS">&iquest;C&oacute;mo hago que Windows me pregunte
+si quiero cargar Windows o MS-DOS?</a>
+<br><a href="#UsarCD">&iquest;C&oacute;mo hago para que todos los usarios
+monten/desmonten/usen el CD-ROM?</a>
+<br><a 
href="/usr/doc/HOWTO/translations/es/html/Linux-Tips-Como.html">file:///usr/doc/HOWTO/translations/es/html/Linux-Tips-Como.html</a>
+<br><a href="#SilenciarBEEP">&iquest;C&oacute;mo silencio el sonoro "BEEP"
+de consola para siempre?</a>
+<p>
+<hr WIDTH="100%">
+<br><a NAME="AliasWorking"></a>
+<h3>
+&iquest;Qu&eacute; alias est&aacute;n funcionando?</h3>
+
+<blockquote>&nbsp;
+<br>Para saber que alias est&aacute;n ahora mismo funcionando, no hay que
+escribir listalias ni nada parecido, escribe <b>alias</b> y pulsa [intro],
+y sabr&aacute;s los alias que tienes, mejor escribe: 
<b>alias|less</b></blockquote>
+<a href="#Salir">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<h3>
+<a NAME="FindANDremove"></a></h3>
+
+<h3>
+&iquest;C&oacute;mo puedo buscar los core y borrarlos?</h3>
+&nbsp;
+<blockquote>Los ficheros 'core' no son m&aacute;s que archivos de 
informaci&oacute;n
+de fallos del sistema y que se pueden quitar cuando hagas una nueva 
compilaci&oacute;n
+del n&uacute;cleo quitando la opci&oacute;n de depuraci&oacute;n del kernel.
+Tambi&eacute;n los podr&aacute;s quitar de cualquier sitio del disco duro
+(o cualquier otro fichero) escribiendo:
+<p><b>rm `find -iname core`</b>
+<p>Hay que tener en cuenta que las comas usadas son las invertidas <b><font 
size=+3>``</font></b>
+y no las normasles ''
+<p>Tambi&eacute;n puede utilizarse para las cartas muertas del Joe o las
+<i>dead.letter</i>
+<p><b>rm `find -iname deadjoe`</b>
+<p>O para mover ficheros, copiarlos etc. etc. etc.
+<p><b>mv `find -iname *.gif` /root/Imagenes</b>
+<br>&nbsp;</blockquote>
+<a href="#Salir">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="UserMounts"></a>
+<h3>
+&iquest;C&oacute;mo puedo hacer que los usuarios monten unidades?</h3>
+
+<blockquote>&nbsp;
+<br>Para hacer que los usuarios monten unidades puedes configurarlo con
+el programa 'linuxconf',&nbsp; o hacer un fichero como &eacute;ste
+<p><a href="fstab.sample.usersmount.txt">Fichero de ejemplo, pincha aqu&iacute;
+para verlo</a>
+<br>&nbsp;</blockquote>
+<a href="#Salir">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="CargaWinoDOS"></a>
+<h3>
+&iquest;C&oacute;mo hago para que Windows me pregunte si quiero cargar
+Windows o MS-DOS?</h3>
+&nbsp;
+<blockquote>(Necesario para algunos equipos viejos)
+<p>Para hacer que te pregunte, siempre, qu&eacute; quieres cargar, o sea,
+si quieres cargar s&oacute;lo el s&iacute;mbolo del sistema (si por ejemplo,
+tu tarjeta de sonido debe de ser inicializada v&iacute;a MS-DOS, pero no
+quieres entrar en Windows para nada), deber&aacute;s modificar el fichero
+MSDOS.SYS de forma que lo tengas como a continuaci&oacute;n se presenta:
+<p><a href="msdos.sys">Pincha aqu&iacute;, para ver c&oacute;mo ha de estar
+puesto el fichero MSDOS.SYS</a>
+<p>El fichero podr&aacute;s modificarlo a tu gusto para que te pregunte
+m&aacute;s o menos cosas. El 1 es verdadero y el 0 falso.</blockquote>
+<a href="#Salir">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="UsarCD"></a>
+<h3>
+&iquest;C&oacute;mo hago que todos los usuarios puedan montar/desmontar/usar
+el CD-ROM?</h3>
+
+<blockquote>Generalmente <b>'/dev/cdrom'</b>, es un enlace a <b>'/dev/hdc'</b>,
+o <b>'/dev/hdb'</b> si quieres que los usuarios puedan montar/desmontar
+el cdrom, (para saber cual es el enlace correcto escribe: <b><font 
color="#FF0000">"vdir
+/dev/cdrom"</font></b> o tambi&eacute;n: <b><font color="#FF0000">"ls -l
+/dev/cdrom"</font></b><font color="#000000">)</font> En el fichero <a 
href="fstab.sample.usersmount.txt">/etc/fstab</a>,
+se debe sustituir el enlace, por el aut&eacute;ntico dispositvo de montaje,
+este trabajo, por ejemplo, lo har&aacute;s de forma muy sencilla con el
+programa de configuraci&oacute;n de entorno amigable: <b>linuxconf.</b>
+<p>Una vez que hubieras hecho esto, haz como root:
+<p><b>chmod a+rwx /dev/cdrom</b>
+<br>o bien:
+<br><b>chmod 666 /dev/cdrom</b>
+<br>y tambi&eacute;n:
+<br><b>chmod a+rwx /dev/hdc (o hdb)</b>
+<p>Con esto, conseguir&aacute;s que los usuarios al meter un CD de 
m&uacute;sica
+puedan escucharla.
+<p>(Si de esta forma tuvieras problemas, reedita el fichero /etc/fstab,
+y donde ahora pone ."hdb" (o "hdc"), pon otra vez "cdrom")</blockquote>
+<a href="#Salir">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="SilenciarBEEP"></a>
+<h3>
+&iquest;C&oacute;mo silencio el "BEEP" de consola para siempre?</h3>
+
+<blockquote>&nbsp;
+<br>Bien, pues cuando te propongas compilar el n&uacute;cleo, edita el
+fichero que est&aacute; en esta direcci&oacute;n:
+<p><b>/usr/src/linux/</b>drivers/char/console.c
+<p>Y Busca en el fichero las siguientes l&iacute;neas:</blockquote>
+
+<p><br><font color="#666666">/*</font>
+<br><font color="#666666">&nbsp;* Here is the default bell parameters:
+750HZ, 1/8th of a second</font>
+<br><font color="#666666">&nbsp;*/</font>
+<br><b><font color="#33FF33">#define</font> <font 
color="#3366FF">DEFAULT_BELL_PITCH</font>&nbsp;
+
+<font color="#FF6666">750</font></b>
+<br><b><font color="#33FF33">#define</font> <font 
color="#3366FF">DEFAULT_BELL_DURATION</font>&nbsp;&nbsp;
+(HZ/8)</b>
+<br>&nbsp;
+<blockquote>Y sustituye los varoles 750 por 60.000 (no m&aacute;s), y 8
+lo dejas igual, quedando la l&iacute;nea modificada de la siguiente 
manera:</blockquote>
+
+<p><br><font color="#666666">/*</font>
+<br><font color="#666666">&nbsp;* Here is the default bell parameters:
+750HZ, 1/8th of a second</font>
+<br><font color="#666666">&nbsp;*/</font>
+<br><b><font color="#33FF33">#define</font> <font 
color="#3366FF">DEFAULT_BELL_PITCH</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font 
color="#FF6666">
+60000</font></b>
+<br><b><font color="#33FF33">#define</font> <font 
color="#3366FF">DEFAULT_BELL_DURATION</font>&nbsp;&nbsp;
+(HZ/8)</b>
+<br>&nbsp;
+<blockquote>Ahora, compila el n&uacute;cleo de la forma habitual (yo uso
+siempre el Script <a href="CompilaNucleo">CompilaNucleo</a>) que est&aacute;
+en <a 
href="/usr/doc/TutorialLinux/Examples/scripts/">/usr/doc/TutorialLinux/Examples/scripts.</a>
+<p>Si est&aacute;s compilando la misma versi&oacute;n del n&uacute;cleo,
+no hace falta que vuelvas a compilar los modulos, ni a instalarlos en /lib/
+<br>(en caso contrario, si)</blockquote>
+<a href="#Salir">[ ^ ]</a>
+<p>
+<hr WIDTH="100%">
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/webdirs.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/webdirs.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/webdirs.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/webdirs.html    3 Mar 2012 
06:14:43 -0000       1.1
@@ -0,0 +1,495 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Javier Orovengua Miguel">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12-20 
i686) [Netscape]">
+   <meta name="Description" content="Direcciones WEB de Linux">
+   <meta name="Keywords" 
content="LinuxTutorial,Linux,Gammes,Development,Desarrollo,Juegos,Varios,Drivers">
+   <title>ALGUNAS direcciones WEB de Linux</title>
+</head>
+<body text="#000000" bgcolor="#C3C3C3" link="#0000FF" vlink="#FF0000" 
alink="#FF0000">
+
+<h3>
+<a NAME="Arriba"></a></h3>
+
+<h3>
+<font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="../tutorial.html#Enlaces">[
+&lt; ]</a> <a href="../tutorial.html">[ || ]</a> [ > ]</font></font></h3>
+
+<h3>
+<font face="Arial, Helvetica, Condensed"><font size=-1>Estas son algunas
+de las muchas y muy variadas p&aacute;ginas de Linux que te puedes encontrar
+en Internet, si te has tomado como prop&oacute;sito visitarlas, t&oacute;matelo
+con tranquilidad hay muchas m&aacute;s de las que podr&aacute;s 
ver.</font></font></h3>
+<font face="Arial, Helvetica, Condensed"><font size=-1>Se han colocado
+2 direcciones Web de linux donde buscar informaci&oacute;n, adem&aacute;s
+de estas direcciones podr&aacute;s buscar en los BUSCADORES de toda la
+vida, y en mot&oacute;n de sitios que a usted se le ocurran.</font></font>
+<br>
+<hr WIDTH="100%">
+<br>&nbsp;
+<ul>
+<li>
+<font face="Arial, Helvetica, Condensed"><a href="#PropositoGeneral">Enlaces
+de prop&oacute;sito general.</a></font></li>
+
+<li>
+<font face="Arial, Helvetica, Condensed"><a href="#Juegos">Enlaces de Juegos
+y entretenimiento.</a></font></li>
+
+<li>
+<font face="Arial, Helvetica, Condensed"><a href="#Documentacion">Enlaces
+de direcciones de documentaci&oacute;n.</a></font></li>
+
+<li>
+<font face="Arial, Helvetica, Condensed"><a href="#Develop">Enlaces para
+programadores/desarrolladores.</a></font></li>
+
+<li>
+<font face="Arial, Helvetica, Condensed"><a href="#Tutoriales">Enlaces
+de otros tutoriales y documentaci&oacute;n.</a></font></li>
+
+<li>
+<font face="Arial, Helvetica, Condensed"><a href="#Mirrors">Mirrors de
+este tutorial.</a></font></li>
+</ul>
+
+<hr WIDTH="100%">
+<h3>
+<a NAME="PropositoGeneral"></a></h3>
+
+<h3>
+DIRECCIONES DE PROP&Oacute;SITO GENERAL.</h3>
+<font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/search";>http://www.linux.org/search</a>
+&lt;- La mejor p&aacute;gina para buscar.</font></font>
+<br><a href="http://www.linuxhq.com";>http://www.linuxhq.com</a> &lt;-&nbsp;
+Otra direcci&oacute;n donde buscar.
+<p><a href="http://www.todolinux.org";>http://www.todolinux.org</a> &lt;-
+P&aacute;gina para los iniciados en Linux.
+<br><a href="http://www.3dfx.com";>http://www.3dfx.com</a> &lt;- P&aacute;gina
+para tu servidor gr&aacute;fico de acelaraci&oacute;n.
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.mostang.com/sane";>http://www.mostang.com/sane</a>&nbsp;
+&lt;-</font> P&aacute;gina para bajarte drivers para tu scanner</font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.uno.edu/~adamico/banshee/";>http://www.uno.edu/~adamico/banshee/</a></font>&lt;-
+Chipset Banshee</font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://web.jet.es/jillona/";>http://web.jet.es/jillona/</a>
+&lt;- Grupo Linux Usuarios Bizkaia</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org.ar";>http://www.linux.org.ar</a>
+&lt;- " " Argentina</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://jgo.local.net/LinuxGuide/";>http://jgo.local.net/LinuxGuide/</a>
+&lt;- Gu&iacute;a Linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.jrd.com";>http://www.jrd.com</a>
+&lt;- Justin Dobbs' Linux Page</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.fokus.gmd.de/linux/";>http://www.fokus.gmd.de/linux/</a>
+&lt;- Free Un*x Clone</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://aisun0.ai.uga.edu/-jae/ai.html";>http://aisun0.ai.uga.edu/-jae/ai.html</a>
+&lt;- AI &amp; Alife</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.iinet.com.au/-pdcruze/";>http://www.iinet.com.au/-pdcruze/</a>
+&lt;- Linux Australia</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.torque.net/-campbell/";>http://www.torque.net/-campbell/</a>
+&lt;- Linux Driver Support</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org.mx/";>http://www.linux.org.mx/</a>
+&lt;- Grupo Linux Usuarios M&eacute;jico</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linuxgazette.com";>http://www.linuxgazette.com</a>
+&lt;- Linux Gazzete</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.li.org";>http://www.li.org</a>
+&lt;- <b>Linux Internacional</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://users.ox.ac.uk/-sann0312/kernel/";>http://users.ox.ac.uk/-sann0312/kernel/</a>
+&lt;- Linux Kernel Mirror</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.arrakis.es/-barreiro/";>http://www.arrakis.es/-barreiro/</a>
+&lt;- Linux Landia</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linuxnow.com";>http://www.linuxnow.com</a>
+&lt;- Linux Now</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.geocities.com/SiliconValley/Lakes/6537/";>http://www.geocities.com/Silicon
+Valley/Lakes/6537/</a> &lt;- Linux Organitation</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://members.xoom.com/xdo/mhc.htm";>http://members.xoom.com/xdo/mhc.htm</a>
+&lt;- Linux Power</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.uk.linux.org";>http://www.uk.linux.org</a>
+&lt;- Grupo Linux Usuarios Reino Unido</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.hongik.com/linux/linapps.html";>http://www.hongik.com/linux/linapps.html</a>
+&lt;- Linux Applications</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linuxhq.com";>http://www.linuxhq.com</a><b>
+&lt;- Linux v2 Information HQ</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.cs.es/archive/linux.html";>http://www.cs.es/archive/linux.html</a>
+&lt;- Grupo Usuarios Linux Espa&ntilde;a</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www2.et.byu.edu/-leippen/linux/linuxpagaindex.html";>http://www2.et.byu.edu/-leippen/linux/linuxpagaindex.html</a>
+&lt;- NickLinux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.geocities.com/Eureka/6263/";>http://www.geocities.com/Eureka/6263/</a>
+&lt;- Sistema Operativo Linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://slashdot.org";>http://slashdot.org</a>
+&lt;- Slashdot Linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.iki.fi/mjr/linux/cola.html";>http://www.iki.fi/mjr/linux/cola.html</a><b>&lt;-
+The coomp.os.linux.announce(c.o.l.a.)</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.kernel.org";>http://www.kernel.org</a>
+&lt;- Linux Kernel Archives</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linuxstandars.org";>http://www.linuxstandars.org</a>
+&lt;- Standart Linux (organizaci&oacute;n para la estandarizaci&oacute;n
+de Linux)</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.kde.org/";>http://www.kde.org/</a>&nbsp;
+&lt;- P&aacute;gina donde est&aacute;n las KDE (El principal gestor de
+ventanas de X-Window)</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.gnome.org/";>http://www.gnome.org/</a>
+&lt;- Pagina oficial de GNOME (Otro gran gestor de ventanas)</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://linux.compusis.com/normas.html";>http://linux.compusis.com/</a>&nbsp;
+&lt;- P&aacute;gina oficial de los canales: <b>#linux</b> y 
<b>#linux_novatos</b>
+del IRC</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.freshmeat.net";>http://www.freshmeat.net</a><b>
+&lt;- M&aacute;s drivers para casi todo</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://bbs.eui.upv.es/~vidal";>http://bbs.eui.upv.es/~vidal</a>
+&lt;- P&aacute;gina de Vidal</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.geocities.com/soho/lofts/3682/linux.htm";>http://www.geocities.com/soho/lofts/3682/linux.htm</a>&nbsp;
+&lt;-Linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/search/";>http://www.linux.org/search/</a><b>&lt;-
+P&aacute;gina para buscar casi cualquier cosa de Linux.</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://linux.apostols.org";>http://linux.apostols.org</a>&nbsp;
+&lt;- Para para seguidores de linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.sololinux.com";>http://www.sololinux.com</a>
+&lt;- &Uacute;ltimas novedades en linux</font></font>
+<br><a 
href="http://www.geocities.com/soho/lofts/3682/index.htm";>http://www.geocities.com/soho/lofts/3682/index.htm</a>&nbsp;
+&lt;- Linux Zone, p&aacute;gina de nuestro amigo: dan-man
+<br><a href="http://www.virtualoffice.es";>http://www.virtualoffice.es</a>
+&lt;- De oficina
+<br><a href="http://www.abcnet.es/linux";>http://www.abcnet.es/linux</a>
+&lt;- Todo en linux
+<br><a href="http://www.stardivision.com";>http://www.stardivision.com</a>
+&lt;- La Suite StarOffice de Linux
+<br><a href="http://linux.corel.com";>http://www.corel.com</a> &lt;- La
+Suite de WordPerfect
+<br><a href="http://www.kender.es";>http://www.kender.es</a> &lt;- Kender
+<br><a href="http://www.encis.es";>http://www.encis.es</a> &lt;- Encis
+<br><a 
href="http://www.cs.us.es/archive/linux.html";>http://www.cs.us.es/archive/linux.html</a>
+&lt;- Linux/Espa&ntilde;a
+<br><a href="http://luna.gui.uva.es";>http://luna.gui.uva.es</a> &lt;- <b>Grupo
+de Usuarios de Inform&aacute;tica</b>
+<br><a 
href="http://lml.ls.fi.upm.es/~jjamor/linux/LDP/";>http://lml.ls.fi.upm.es/~jjamor/linux/LDP/</a>
+&lt;- P&aacute;gina de Juan Jos&eacute; Amor
+<br>&nbsp;
+<p><font face="Arial, Helvetica, Condensed"><font size=-1>(Aqu&iacute;
+est&aacute;n expuestas un reducido n&uacute;mero de p&aacute;ginas dedicadas
+a Linux, te recomendamos que compres revistas/libros, para visitar 
p&aacute;ginas
+que creas que tengan un buen inter&eacute;s.)</font></font>
+<p><a href="#Arriba">[ ^ ]</a>
+<br><a NAME="Juegos"></a>
+<br>
+<hr WIDTH="100%">
+<h3>
+DIRECCIONES DE JUEGOS Y ENTRETENIMIENTO.</h3>
+
+<hr WIDTH="100%">
+<br>Alguna vez te han dicho: &iexcl;no hay juegos para Linux! &iquest;tu
+crees?
+<br>&nbsp;
+<p><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/search";>http://www.linux.org/search</a>
+&lt;- La mejor p&aacute;gina para buscar</font></font>
+<br><a href="http://www.linuxhq.com";>http://www.linuxhq.com</a> &lt;-&nbsp;
+Otra direcci&oacute;n donde buscar.
+<p><a href="http://www.linuxgames.com";>http://www.linuxgames.com</a> &lt;-
+La mejor direcci&oacute;n de juegos
+<br><a 
href="http://metalab.unc.edu/pub/Linux/games/";>http://metalab.unc.edu/pub/Linux/games/</a>
+&lt;- Donde encontrar
+<p><a 
href="http://www.nerdnet.nl/~thom/software.html";>http://www.nerdnet.nl/~thom/software.html</a>
+&lt;- Juegos 3D
+<br><a href="http://sabre.cobite.com";>http://sabre.cobite.com</a> &lt;-
+Juegos de cartas
+<br><a href="http://delorie.com/store/ace";>http://delorie.com/store/ace</a>
+&lt;- Buenos simuladores de vuelo
+<br><a href="http://www.quakeworld.net";>http://www.quakeworld.net</a> &lt;-
+Quake
+<br><a 
href="http://wildsau.idv.uni-linz.ac.at/mfx/pysol.html";>http://wildsau.idv.uni-linz.ac.at/mfx/pysol.html</a>
+&lt;- Juegos de cartas
+<br><a 
href="http://www.menet.umn.edu/~curt/fgfs/";>http://www.menet.umn.edu/~curt/fgfs/</a>
+&lt;- Simuladores de vuelo con combates
+<br><a 
href="http://ciips.ee.uwa.edu.au/~williams/bd/";>http://ciips.ee.uwa.edu.au/~williams/bd/</a>
+&lt;- Juegos de Unix y Linux
+<br><a href="http://www.freeciv.org";>http://www.freeciv.org</a> &lt;- 
Cl&oacute;nico
+del Civilitation II
+<br><a 
href="http://www.floot.demon.co.uk/lincity/html";>http://www.floot.demon.co.uk/lincity/html</a>
+&lt;- Cl&oacute;nico de SimCity
+<br><a 
href="http://www.sonic.net/~nbs/unix/x/";>http://www.sonic.net/~nbs/unix/x/</a>
+&lt;- Juegos peque&ntilde;os pero entretenidos
+<br><a 
href="http://pw1.netcom.com/~rrainey/acm.html";>http://pw1.netcom.com/~rrainey/acm.html</a>
+&lt;- Combates aeros
+<br><a href="http://www.spinne.com/x/games";>http://www.spinne.com/x/games</a>
+&lt;- Web para juegos de las X
+<br><a 
href="http://www.cs.washington.edu/homes/tlau/linux-game.html";>http://www.cs.washington.edu/homes/tlau/linux-game.html</a>
+&lt;- Colecci&oacute;n de juegos de este creador
+<br><a href="http://www.happypenguin.org/";>http://www.happypenguin.org/</a>
+&lt;- Direcciones de juegos
+<br><a href="http://drake.dit.upm.es/~mame/";>http://drake.dit.upm.es/~mame/</a>
+&lt;- Juegos Arcade de m&aacute;quinas recreativas
+<br><a 
href="http://www.komkon.org/fms/iNES/";>http://www.komkon.org/fms/iNES/</a>
+&lt;- Juegos de Nintendo para Linux
+<br><a 
href="http://www.hungry.com/~pere/gigs/";>http://www.hungry.com/~pere/gigs/</a>
+&lt;- Realizaci&oacute;n/distrib juegos
+<br><a href="http://samba.anu.edu.au/dumb/";>http://samba.anu.edu.au/dumb/</a>
+&lt;- Juegos 3D compatibles con Linux (y otros Sistemas)
+<br><a 
href="http://www710.univ-lyon1.fr/ftp/xbl.html";>http://www710.univ-lyon1.fr/ftp/xbl.html</a>
+&lt;- Cl&oacute;nico del Tetris
+<br><a 
href="http://groundhog.pair.com/bzflag.html";>http://groundhog.pair.com/bzflag.html</a>
+&lt;- Batallas entre tanques
+<br><a 
href="http://nether.tky.hut.fi/glchess/";>http://nether.tky.hut.fi/glchess/</a>
+&lt;- Juegos de ajedrez
+<br><a 
href="http://www.pharaonh0.demon.co.uk/hatman";>http://www.pharaonh0.demon.co.uk/hatman</a>
+&lt;- Cl&oacute;nico del PACMAN
+<br><a 
href="http://www.capsi.com/KDE/kmonop/";>http://www.capsi.com/KDE/kmonop/</a>
+&lt;- Monopoly en Linux
+<br><a 
href="http://www.fys.ruu.nl/~eendebak/kde/kde.html";>http://www.fys.ruu.nl/~eendebak/kde/kde.html</a>
+&lt;- Juegos de/por/para las kde
+<br><a 
href="http://home.sol.no/~sverrehu/pub-unix/";>http://home.sol.no/~sverrehu/pub-unix/</a>
+&lt;- Juegos de mesa
+<br><a 
href="http://nswt.tuwien.ac.at/internet/unix/games/multiteris.html";>http://nswt.tuwien.ac.at/internet/unix/games/multiteris.html</a>
+&lt;- Multitetris
+<br><a 
href="http://havanet.com/wms/comp/pente/";>http://havanet.com/wms/comp/pente/</a>
+&lt;-
+<br><a 
href="http://www.xdr.com/dash/linux.html";>http://www.xdr.com/dash/linux.html</a>
+&lt;-
+<br><a 
href="http://www.glue.umd.edu/~weave/vmwprod/seabattle.html";>http://www.glue.umd.edu/~weave/vmwprod/seabattle.html</a>
+&lt;- Batallas navales
+<br><a href="http://www.rustcorp.com";>http://www.rustcorp.com</a>
+<br><a 
href="http://thor.cam.ac.uk/~ac212/tc/";>http://thor.cam.ac.uk/~ac212/tc/</a>
+&lt;- Jugadores que controlan importantes fuerzas militares
+<br><a 
href="http://personal.redestb.es/pulpito/linux/juegos1.html";>http://personal.redestb.es/pulpito/linux/juegos1.html</a>
+&lt;- Doom I y II, Quake I y II, Virtual Combat, Jet Set Willy...
+<br><a 
href="http://www.pfff.software.demon.nl";>http://www.pfff.software.demon.nl</a>
+&lt;- Juegos de mesa
+<br><a href="http://www.marqueze.net/";>http://www.marqueze.net/</a>&nbsp;
+&lt;- Entretenimiento.
+<br><a 
href="http://www.marqueze.net/contaxto/foto.html";>http://www.marqueze.net/contaxto/foto.html</a>&nbsp;
+&lt;- Entretenimiento.
+<p>Existen muchas direcciones de juegos, principalmente en la direcci&oacute;n
+de <a href="http://www.linuxgames.com";>Linux Games</a>, lo &uacute;nico
+que hemos hecho ha sido seleccionar unas cuantas direcciones e incorporarlas
+al tutorial, as&iacute;, que ves pensando en o ampliar la partici&oacute;n
+de Linux, o en instalar parte de los juegos de Linux en la partici&oacute;n
+del otro sistema operativo que conviva con Linux
+<p><a href="#Arriba">[ ^ ]</a>
+<br><a NAME="Documentacion"></a>
+<br>
+<hr WIDTH="100%">
+<h3>
+DIRECCIONES DE DOCUMENTACI&Oacute;N DE LINUX.</h3>
+
+<hr WIDTH="100%">
+<p><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/search";>http://www.linux.org/search</a>
+&lt;- La mejor p&aacute;gina para buscar</font></font>
+<br><a href="http://www.linuxhq.com";>http://www.linuxhq.com</a> &lt;-&nbsp;
+Otra direcci&oacute;n donde buscar.
+<p><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://sunsite.unc.edu/mdw/";>http://sunsite.unc.edu/mdw/</a>
+&lt;- Proyecto de documentaci&oacute;n de linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux-howto.com";>http://www.linux-howto.com</a>
+&lt;- Linux Howto</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.ssc.com/lj/index.html";>http://www.ssc.com/lj/index.html</a>
+&lt;- Linux Journal</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://lucas.hispalinux.es";>http://lucas.hispalinux.es</a>
+&lt;- <b>Proyecto LinUx en CAStellano</b></font></font><b> 
(Documentaci&oacute;n
+de Linux en castellano)</b>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.hispalinux.es";>http://www.hispalinux.es</a>
+&lt;- Asociaci&oacute;n Espa&ntilde;ola de Linuxeros de habla 
Hispana</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://visar.csustan.edu/~carlos/";>http://visar.csustan.edu/~carlos/</a><b>&lt;-
+P&aacute;gina de nuestro amigo Carlos Perella.</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://slug.hispalinux.es";>http://slug.hispalinux.es</a></font></font>
+<br><a 
href="http://www.cs.us.es/archive/linux.html";>http://www.cs.us.es/archive/linux.html</a>
+&lt;- Linux/Espa&ntilde;a
+<br><a href="http://luna.gui.uva.es";>http://luna.gui.uva.es</a> &lt;- <b>Grupo
+de Usuarios de Inform&aacute;tica</b>
+<br><a 
href="http://lml.ls.fi.upm.es/~jjamor/linux/LDP/";>http://lml.ls.fi.upm.es/~jjamor/linux/LDP/</a>
+&lt;- P&aacute;gina de Juan Jos&eacute; Amor
+<br><a href="http://www.insflug.nova.es";>http://www.insflug.nova.es</a>
+&lt;- INSFLUG
+<br><tt><a href="ftp://ftp.insflug.nova.es/es";>ftp://ftp.insflug.nova.es/es</a>
+&lt;- FTP de INSFLUG</tt>
+<br><a href="http://www.infor.es/LuCAS/";>http://www.infor.es/LuCAS/</a>
+&lt;- LUCAS
+<br><tt><a 
href="ftp://ftp.infor.es/pub/LuCAS";>ftp://ftp.infor.es/pub/LuCAS/</a>
+&lt;- FTP de LUCAS.</tt>
+<br><a 
href="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/es/";>ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/es/</a>
+&lt;- Traducciones en CASTELLANO
+<p><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<p><a NAME="Develop"></a>
+<br>
+<hr WIDTH="100%">
+<br>Escribe a: <a href="mailto:address@hidden";>address@hidden</a>, si conoces
+direcci&oacute;n de inter&eacute;s que a&ntilde;adir aqu&iacute;.
+<h2>
+DIRECCIONES PARA PROGRAMADORES/DESARROLLADORES</h2>
+
+<hr WIDTH="100%">
+<p><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/search";>http://www.linux.org/search</a>
+&lt;- La mejor p&aacute;gina para buscar</font></font>
+<br><a href="http://www.linuxhq.com";>http://www.linuxhq.com</a> &lt;-&nbsp;
+Otra direcci&oacute;n donde buscar.
+<p><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/apps/development.html";>http://www.linux.org/apps/development.html</a>
+&lt;- LA MEJOR P&aacute;gina para desarrolladores</font></font>
+<p><a 
href="http://www.rpi.edu/~payned/xwpe";>http://www.rpi.edu/~payned/xwpe</a><b>&lt;-
+Para programadores acostumbrados a Entornos&nbsp; Borland y similares,
+XWPE ser&aacute; una delicia, soporta el desarrollo de m&uacute;ltples
+lenguajes. (wpe para consola y xpwe para X) (APIs)</b>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.comp.lacs.ac.uk/~damon/builder/";>http://www.comp.lacs.ac.uk/~damon/builder/</a>
+&lt;- GLADE, un RAD XML para generar programas, soporta m&uacute;ltiples
+lenguajes. (API)</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://glade.pn.org";>http://glade.pn.org</a><b>&lt;-
+GLADE, P&aacute;gina principal (API)</b></font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://gide.pn.org";>http://gide.pn.org</a>&nbsp;&nbsp;&nbsp;
+&lt;- gIDE, aplicaci&oacute;n en desarrollo, es al estilo de XWPE 
(API)</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://gedit.pn.org";>http://gedit.pn.org</a>
+&lt;- Un editor construido con las GTK+, es r&aacute;pido y muy 
flexible</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.brain.uni-freiburg.de/~klaus/fpk-pas/";>http://www.brain.uni-freiburg.de/~klaus/fpk-pas/</a>
+&lt;- Compilador Free Pascal para Linux</font></font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.gui.uva.es/";>http://www.gui.uva.es/</a>&nbsp;
+&lt;- Universidad Polit&eacute;cnica de Valladolid</font></font>
+<br><a 
href="http://mat.uni.torun.pl/~scisly/buildit";>http://mat.uni.torun.pl/~scisly/buildit</a>
+&lt;- <b>BuildIT, una herramienta al estilo glade/gide, pero para las Qt
+(API)</b>
+<br><a 
href="http://www.neuron.com/stewart/vtcl/";>http://www.neuron.com/stewart/vtcl/</a>
+&lt;- Visual TCL para Linux/Unix y otros Sistemas Operativos
+<br><a 
href="http://www.geocities.com/SiliconValley/Horizon/3991/lsp.html";>http://www.geocities.com/SiliconValley/Horizon/3991/lsp.html</a>
+&lt;- Programaci&oacute;n de aplicaciones de sonido.
+<br><a 
href="http://www.uni-mainz.de/~ihm/basic.html";>http://www.uni-mainz.de/~ihm/basic.html</a>
+&lt;- Yabasic, herramienta Basic
+<br><a href="http://www.xbasmark.com";>http://www.xbasmark.com</a> &lt;-
+XBasic 32 Bits, r&aacute;pido y multiplataforma. (no free) (API)
+<br><a 
href="ftp://sunsite.unc.edu/pub/Linux/devel/";>ftp://sunsite.unc.edu/pub/Linux/devel/</a>
+&lt;- Iterfaces para desarrollos (APIs), Entornos de desarrollos (IDEs)...,
+Aqu&iacute; podremos encontrar el RHIDE, que es una API, muy agradable
+(API)
+<br><a href="http://www.vmware.com";>http://www.vmware.com</a>&nbsp; &lt;-
+Maquina Virtual podremos arrancar cualquier S.O.
+<br><a 
href="ftp://diskobolo.mat.ucm.es/pub/linux";>ftp://diskobolo.mat.ucm.es/pub/linux</a>&nbsp;
+&lt;- Desarrollo en Linux
+<br><a 
href="http://www.cs.uni-potsdam.de/~smeier/kdevelop/";>http://www.cs.uni-potsdam.de/~smeier/kdevelop/</a><b>&lt;-
+Kdevelop, una interesante API para generar programas para las librer&iacute;as
+QT (API)</b>
+<br><a href="http://kdeveloper.kde.org";>http://kdeveloper.kde.org</a> &lt;-
+Para desarrolladores del KDE
+<br><a href="http://www.gnome.org";>http://www.gnome.org</a> &lt;- Para
+desarrolladores de GNOME
+<br><a href="http://www.kde.org";>http://www.kde.org</a> &lt;- KDE
+<br><a href="http://ceu.fi.udc.es/GPUL";>http://ceu.fi.udc.es/GPUL</a> &lt;-
+<b>G</b>rupo
+de <b>P</b>rogramadores y <b>U</b>suarios de <b>L</b>inux
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.iki.fi/mjr/linux/cola.html";>http://www.iki.fi/mjr/linux/cola.html</a>
+&lt;- The coomp.os.linux.announce(c.o.l.a.)</font></font>
+<br><a 
href="http://bragg.phys.uwm.edu/xforms";>http://bragg.phys.uwm.edu/xforms</a>
+&lt;- XForms, aplicaci&oacute;n de desarrollo sencilla (Estilo VB)
+<p><a href="#Arriba">[ ^ ]</a>
+<p>----------------
+<br>RECOMENDACION:
+<p>NO desperdicies esfuerzos intentando hacer nuevas distribuciones o grupos
+de desarrollo, ser&aacute; mucho m&aacute;s inteligente que te unas a 
cualquiera
+de los existentes actualmente.
+<p>Busca m&aacute;s informaci&oacute;n en: <a 
href="http://www.infor.es/LuCAS/";>LuCAS</a>
+y en <a href="http://www.insflug.nova.es";>INSFLUG</a>
+<br>----------------
+<br><a href="http://www.insflug.nova.es";>http://www.insflug.nova.es</a>
+&lt;- INSFLUG
+<br><a href="http://www.infor.es/LuCAS/";>http://www.infor.es/LuCAS/</a>
+&lt;- LUCAS
+<p>
+<hr WIDTH="100%">
+<br><a NAME="Tutoriales"></a>
+<br>
+<hr WIDTH="100%">
+<h1>
+TUTORIALES&nbsp; y documentaci&oacute;n de inter&eacute;s para LINUX</h1>
+
+<hr WIDTH="100%">
+<p><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux.org/search";>http://www.linux.org/search</a>
+&lt;- La mejor p&aacute;gina para buscar.</font></font>
+<br><a href="http://www.linuxhq.com";>http://www.linuxhq.com</a> &lt;-&nbsp;
+Otra direcci&oacute;n donde buscar.
+<p><font face="Arial, Helvetica, Condensed"><a 
href="ftp://ftp.troll.no";>ftp://ftp.troll.no</a>&lt;-
+Direcci&oacute;n FTP donde bajarse las librer&iacute;as de programaci&oacute;n
+QT y tutorial, esta es la librer&iacute;a gr&aacute;fica de Linux m&aacute;s
+potente,&nbsp; m&aacute;s incluso que algunas conocidas librer&iacute;as
+gr&aacute;ficas de pago, y ahora tienen licencia GPL, por lo que se espera
+una avalancha de buenas aplicaciones con esta librer&iacute;a. (X-Window)
+&lt;&lt; Con esta librer&iacute;a se desarrolla el m&aacute;s potente gestor
+de ventanas para linux, el KDE >></font>
+<br><font color="#000000"><a 
href="ftp://ftp.gtk.org";>ftp://ftp.gtk.org</a></font>&lt;-
+Direcci&oacute;n FTP de donde bajarse el tutorial y las librer&iacute;as
+GTK+, son las m&aacute;s directas competidoras de las llibrer&iacute;as
+de pago, y las aplicaciones desarrolladas en ella terminan con un buen
+y bonito acabado, &eacute;sta librer&iacute;a junto con las QT, ser&aacute;n
+las librer&iacute;as gr&aacute;ficas que en un futuro inmediato m&aacute;s
+exito tengan. (X-Window) &lt;&lt; Con esta librer&iacute;a se desarrolla
+uno de los gestores de ventanas m&aacute;s potentes para Linux, el GNOME
+>>
+<br><a href="http://www.gtk.org";>http://www.gtk.org</a> &lt;- 
Documentaci&oacute;n
+sobre GTK
+<br><a href="http://www.kde.org";>http://www.kde.org</a> &lt;- 
Documentaci&oacute;n
+sobre KDE, el primer y mas robusto Entorno de Escritorios
+<br><a href="http://www.gnome.org";>http://www.gnome.org</a> &lt;- El segundo,
+y no menos feo Entorno de Escritorios
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.linux-magazin.de";>http://www.linux-magazin.de</a></font>&lt;-
+multitud direcciones</font>
+<br><font face="Arial, Helvetica, Condensed"><font size=-1><a 
href="http://www.troll.no/qt/tutorial.html";>http://www.troll.no/qt/tutorial.html</a></font>&lt;-&nbsp;
+Direcci&oacute;n del tutorial para la programaci&oacute;n en QT</font>
+<br><a 
href="http://www.opensound.com/pguide/index.html";>http://www.opensound.com/pguide/index.html</a>
+&lt;- Manual para adentrarse en la programaci&oacute;n del sonido.
+<br><a 
href="http://www.tunes.org/~fare/Assambly-HOWTO";>http://www.tunes.org/~fare/Assambly-HOWTO</a><b>&lt;-
+Sitio donde econtrar Herramientas de programaci&oacute;n.</b>
+<br><a 
href="http://www.infodrom.north.de/linux/manpages-es/";>http://www.infodrom.north.de/linux/manpages-es/</a>
+&lt;- <b>Linux Spanish Manpages</b>
+<p><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/rhl-ig-6.1en/index.html">Red
+Hat Linux Installation Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/rhl-ig-6.1en/index.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/rhl-gsg-6.1en/index.html">Red
+Hat Linux Getting Starting Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/rhl-gsg-6.1en/index.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/rhl-rg-6.1en/index.html">Red
+Hat Linux Reference Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/rhl-rg-6.1en/index.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/HOWTO/other-formats/html/HOWTO-INDEX.html">Linux
+Documentation Project HOWTOS</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/HOWTO/other-formats/html/HOWTO-INDEX.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/LDP/install-guide/gs.html">Linux
+Installation and Getting Started Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/LDP/install-guide/gs.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/LDP/nag/nag.html">Linux
+Network Administrators Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/LDP/nag/nag.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/LDP/sag/index.html">Linux
+System Administrators Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/LDP/sag/index.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a 
href="/usr/doc/LDP/lpg/lpg.html">Linux
+Programmers Guide</a></font></font>
+<br><font face="HELVETICA"><font 
size=+0>(/usr/doc/LDP/lpg/lpg.html)</font></font>
+<br><font face="HELVETICA"><font size=+0><a href="/usr/doc/">Local 
documentation</a>
+organized by package</font></font>
+<br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Mirrors"></a>
+<h3>
+Mirrors de este tutorial.</h3>
+
+<ul>Si decides hacer un mirror de este tutorial, ponte en contacto con
+nosotros.</ul>
+
+<ul>
+<ul>
+<li>
+<a href="http://lucas.hispalinux.es";>(ES) http://lucas.hispalinux.es</a></li>
+
+<li>
+<a href="ftp://lucas.hispalinux.es/pub/LuCAS";>(ES) 
ftp://lucas.hispalinux.es/pub/LuCAS</a></li>
+
+<li>
+<a href="http://www.todolinux.org";>(ES) http://www.todolinux.org</a></li>
+
+<li>
+<a href="http://www.blaubit.com";>(ES) http://www.blaubit.com</a></li>
+
+<li>
+<a href="http://lucas.hispalinux.es";>(USA) </a><font face="Arial, Helvetica, 
Condensed"><font size=-1><a 
href="http://sunsite.unc.edu/mdw/";>http://sunsite.unc.edu/mdw/</a>
+&lt;- International. LDP</font></font></li>
+</ul>
+</ul>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window.html   3 Mar 2012 
06:14:44 -0000       1.1
@@ -0,0 +1,63 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.9 
i586) [Netscape]">
+   <title>La sesi&oacute;n de ventanas</title>
+</head>
+<body text="#000000" bgcolor="#66FFFF" link="#0000FF" vlink="#202020" 
alink="#FF0000">
+<a NAME="Arriba"></a>
+<br><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[
+|| ]</a>[ > ]
+<h1>
+X-Window:</h1>
+&nbsp;
+<ul>
+<li>
+<a href="#Temario">SALTAR A LOS TEMAS</a></li>
+</ul>
+
+<p><br>Esta imagen est&aacute; distorsionada al haberle reducido su 
tama&ntilde;o.
+<br><img SRC="Fondo.gif" height=584 width=780>
+<p>X-Window es un MOTOR de ventanas, para configurarlo correctamente 
deber&aacute;s
+de tener instalado una serie de librer&iacute;as:
+<p><a href="http://www.xfree86.org";>http://www.xfree86.org</a>
+<p>Existen varios gestores de ventanas para el mismo entorno gr&aacute;fico
+X-Window, como son:
+<p><a href="http://www.kde.org";>kde</a>
+<br><a href="http://www.gnome.org";>gnome</a>
+<br>AfterStep
+<br>Fvwm95
+<br>AnotherLevel
+<br>Enlightelment
+<br>...
+<p>Esto, por ejemplo no ocurre con otros Sistemas Operativos de entorno
+gr&aacute;fico como OS/2, Mac o Windows, que el gestor de Ventanas y el
+Motor van irremediablemente unidos.
+<p>Una vez que tengas instalado el entorno gr&aacute;fico, podr&aacute;s
+instalar el gestor de ventanas.
+<p>Si quieres m&aacute;s informaci&oacute;n te remitimos a <a 
href="/usr/doc/HOWTO">/usr/doc/HOWTO</a>
+as&iacute;, como <a href="/usr/doc/FAQ">/usr/doc/FAQ</a>, adem&aacute;s
+de la abundante informaci&oacute;n que podr&aacute;s encontrar en otros
+directorios de tu Disco Duro local como tambi&eacute;n son: <a 
href="/usr/info">/usr/info</a>
+y <a href="/usr/doc">/usr/doc</a>
+<p>A esta imagen se le ha a&ntilde;adido la mejor reducci&oacute;n de colores
+<br><img SRC="fondo_javi.gif" height=600 width=800>
+<p><a href="../tutorial.html">[ &lt; ]</a><a href="contenidos.html">[ ||
+]</a>[ > ]
+<p><a NAME="Temario"></a>
+<br>Las secciones agregadas para X-Window, creemos que b&aacute;sica y
+principalmente las que m&aacute;s importan son 2, como instalar el Motor
+de ventanas y como instalar un gestor de ventanas.
+<ul>
+<li>
+<a href="x-window2.html">&iquest;C&oacute;mo actualizo las XFree86?</a></li>
+
+<li>
+<a href="RPMgestion.html#EjemploKDE">&iquest;C&oacute;mo cambio el gestor
+de ventanas (Instalando las KDE)?</a></li>
+</ul>
+
+<p><br><a href="#Arriba">[ ^ ]</a>
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window2.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window2.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window2.html  3 Mar 2012 
06:14:44 -0000       1.1
@@ -0,0 +1,168 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.9 
i586) [Netscape]">
+   <meta name="Author" content="Javier Orovengua">
+   <meta name="Description" content="Hoja para la instalación y configuración 
de las X-Window">
+   <title>Instalaci&oacute;n y Configuraci&oacute;n de las X-Window</title>
+</head>
+<body text="#000000" bgcolor="#33CCFF" link="#0000FF" vlink="#202020" 
alink="#FF0000">
+<a NAME="Arriba"></a>
+<br><a href="x-window.html">[ &lt; ]</a><a href="contenidos.html">[ ||
+]</a>[ > ]
+<h1>
+La Joya de Linux:</h1>
+
+<h1>
+X-Window</h1>
+
+<hr WIDTH="100%">
+<br>
+<hr WIDTH="100%">
+<br>&nbsp;
+<ul>
+<ul>
+<li>
+<a href="#Upgrade">Actualizaci&oacute;n.</a></li>
+
+<li>
+<a href="#Config">Configuraci&oacute;n.</a></li>
+
+<li>
+<a href="#Running">Hacer funcionar.</a></li>
+
+<li>
+<a href="#NotaX">Nota.</a></li>
+</ul>
+</ul>
+
+<p><br>
+<hr WIDTH="100%">
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Upgrade"></a>
+<h2>
+Actualizaci&oacute;n:</h2>
+
+<blockquote>&nbsp;
+<br>Si ya existiera informaci&oacute;n en el directorio /usr/X11R6/, ya
+lo tendr&aacute;s instalado, si no quieres actualizar tu X-Window, saltate
+a la configuraci&oacute;n.
+<br>&nbsp;
+<p>Pincha aqu&iacute; para ver:<a href="x-window-dir/Lista_xfree.html">
+Lista de paquetes .tar.gz para X-Window</a>
+<br>&nbsp;
+<ol>
+<li>
+Borra toda la informaci&oacute;n (previa copia de seguridad de la 
documentaci&oacute;n
+o programas que se cree oportuno) que hay en el directorio /usr/X11R6</li>
+
+<li>
+Ejecutar el script de preinstalaci&oacute;n <b>`preinst.sh'</b></li>
+
+<li>
+Ir descomprimiendolos los paquetes mediante la orden: "<b>tar xvfz &lt;nombre
+del fichero.tgz></b>"</li>
+
+<li>
+Ejecutar el ficheros de postinstalaci&oacute;n <b>`postinst.sh'</b></li>
+
+<li>
+Obligaremos al sistema a sincronizar el fs, mediante la orden: "<b>sync;
+sync</b>"</li>
+
+<li>
+Y a releer la tabla de librer&iacute;as mediante: "<b>ldconfig</b>"</li>
+</ol>
+
+<p><br>&iexcl;ACTUALIZACI&Oacute;N TERMINADA!</blockquote>
+<a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Config"></a>
+<h2>
+Configuraci&oacute;n:</h2>
+
+<ul>
+<li>
+Ejecutamos primero SuperProbe, apuntando los resultados en un papel.</li>
+
+<li>
+Escribiremos XF86Setup</li>
+</ul>
+Comenzar&iacute;amos por decirle que tipo de rat&oacute;n tenemos, generalmente
+todo el mundo tiene un rat&oacute;n de la serie Microsoft, o compatible
+<br><img SRC="xf86s1.gif" height=486 width=605>
+<br>&nbsp;
+<br>&nbsp;
+<p>Una vez que tengamos definido el rat&oacute;n, lo haremos con el teclado.
+<br><img SRC="xf86s2.gif" height=486 width=605>
+<br>&nbsp;
+<p>Una vez definido el teclado, lo haremos seleccionando nuestra tarjeta
+de v&iacute;deo.
+<br>Ahora es buen momento para ir a por el libro que suele acompa&ntilde;ar
+el equipo cuando lo compraste, que comentar las especificaciones 
t&eacute;cnicas
+de tu tarjeta de v&iacute;deo, velocidades y procesos, tambi&eacute;n 
deber&aacute;s
+tener a mano el que vendr&iacute;a con el monitor.
+<p>Y seleccionaremos la marca y modelo de nuestro monitor o en su defecto,
+especificaremos las caracter&iacute;sticas del nuestro si es un "Cl&oacute;nico
+Digital"
+<br><img SRC="xf86s3.gif" height=486 width=605>
+<br>Una vez que tengas configurado el sistema obtendr&aacute;s un fichero
+que se almacena en: /etc/X11, con el nombre: XF86Config similar a los ejemplos:
+<ul>
+<li>
+<a href="x-window-dir/XF86Config1.ejemplo">XF86Config Ejemplo 1</a></li>
+
+<li>
+<a href="x-window-dir/XF86Config2.ejemplo">XF86Config Ejemplo 2</a></li>
+
+<li>
+<a href="x-window-dir/XF86Config3.ejemplo">XF86Config Ejemplo 3</a></li>
+</ul>
+Que son v&aacute;lidos para esa m&aacute;quina que tiene ese monitor con
+esa tarjeta gr&aacute;fica.
+<br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br>
+<hr WIDTH="100%">
+<br><a NAME="Running"></a>
+<h1>
+Funcionando:</h1>
+Cuando lo tenga terminado, haga una prueba ejecutando
+<br>&nbsp;
+<p><b>xinit</b>
+<br>Si va mal pulsa: "Ctrl+Alt+Tecla de retroceso", para salir
+<br>y reconfigure otra vez
+<p>cuando se empiece a ver bien, escriba
+<br><b>startx</b>
+<p>Si al salir, ve caracteres extra&ntilde;os, ponga:
+<br><b>setfont</b>
+<br>Y se restablecer&aacute; la pantalla
+<p><b>setfont lat1u-16.psf</b>
+<br>Se restablecer&aacute; la pantalla con las caracter&iacute;sticas de
+las fuentes en Castellano.
+<p>&iexcl;Ya tiene X-Window!
+<br><a href="#Arriba">[ ^ ]</a>
+<br>
+<hr WIDTH="100%">
+<br>
+<hr WIDTH="100%">
+<blockquote><a NAME="NotaX"></a>
+<br>Nos alegramos que hayas decidido por instalar X-Window, en este tutorial
+NO vamos a explicar como instalar X-Window en una u otra distribuci&oacute;n,
+lo haremos como se hace en .TAR.GZ, y como se actualiza, en caso de haber
+querido bajarte unas nuevas librer&iacute;as.
+<p>Tenemos que avisarte que X-Window es GNU, :), y que existen tambi&eacute;n
+entornos gr&aacute;ficos comerciales para Linux, pero sus librer&iacute;as
+no son XFree86, por lo que deber&aacute;s pagar por tener unas librer&iacute;as
+para tu entorno gr&aacute;fico, no podemos decirte (por no usarlas) si
+en dichas entornos gr&aacute;ficos puedes cambiar el gestor de 
ventanas</blockquote>
+<a href="#Arriba">[ ^ ]</a>
+<br>&nbsp;
+</body>
+</html>

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/xadduser.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/xadduser.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/xadduser.gif
Binary files /dev/null and /tmp/cvsFTmIfl differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s1.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s1.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s1.gif
Binary files /dev/null and /tmp/cvsg7yBrj differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s2.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s2.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s2.gif
Binary files /dev/null and /tmp/cvsjie9Yj differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s3.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s3.gif
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/xf86s3.gif
Binary files /dev/null and /tmp/cvsc8bssn differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/zMayores65.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/zMayores65.html
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/zMayores65.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/zMayores65.html 3 Mar 2012 
06:14:45 -0000       1.1
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i586) [Netscape]">
+   <TITLE>Para mayores de 65 a&ntilde;os</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFCCFF" LINK="#0000FF" VLINK="#820082" 
ALINK="#FF0000">
+<A HREF="sobre_tutorial.html">[ &lt; ]</A><A HREF="contenidos.html">[
+|| ]</A>[ > ]
+<BR>&nbsp;
+<H1>
+Recomendado mayores de 65 a&ntilde;os.</H1>
+&nbsp;
+<BLOCKQUOTE>Dicen los psic&oacute;logos y especialistas en medicina mental,
+que unas de las consecuencias del delirio que sufren nuestros mayores es
+causado porque se encuentran con demasiado tiempo libre, tanto, que en
+muchas de las veces no saben que hacer y piensan cosas que o bien ocurrieron
+en el pasado, o sencillamente, cosas en las que NO DEBER&Iacute;AN PENSAR.
+<BR>&nbsp;
+<P>Si este es su caso, &iexcl;&iexcl;ALEGRESE!!. Linux necesita seguramente
+todo el tiempo libre que usted tiene, y un poco del de ma&ntilde;ana. Puede
+usted pasarse horas y horas configurando este sistema operativo (denominado
+abierto, por su alto nivel de configuraci&oacute;n), y darse cuenta de
+que al haber terminado de configurarlo al darle un nuevo toque aqu&iacute;
+o all&aacute;, tendr&aacute; todav&iacute;a un aspecto m&aacute;s bonito
+y profesional, adem&aacute;s de estar entretenido usted estar&aacute;:
+<BR>&nbsp;
+<UL>
+<LI>
+Orgulloso de si mismo en cada logro.</LI>
+
+<LI>
+Impaciente por retocar nuevos aspectos.</LI>
+
+<LI>
+Ser&aacute; c&oacute;mplice de su nieto, que seguro tambi&eacute;n 
tendr&aacute;
+este S.O.</LI>
+
+<LI>
+Podr&aacute; aprender conocimientos los cuales siempre quiso.</LI>
+
+<LI>
+&iexcl;Estar&aacute; feliz!</LI>
+</UL>
+
+<P><BR>&iexcl;&iexcl;&iexcl;LINUX NO ES PARA COBARDES!!!
+<P>Aqu&iacute; est&aacute; un reto, que bien podr&aacute; superar.</BLOCKQUOTE>
+
+<P><BR><A HREF="sobre_tutorial.html">[ &lt; ]</A><A HREF="contenidos.html">[
+|| ]</A>[ > ]
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/basico.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/basico.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/basico.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/basico.htm  
    3 Mar 2012 06:14:45 -0000       1.1
@@ -0,0 +1,1030 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Linux basico</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="basico.gif" ALT="Manual basico" >
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Aprende
+a usar y sacar el m&aacute;ximo partido a tu Linux reci&eacute;n 
instalado</FONT></FONT></FONT></CENTER>
+
+<P>
+<HR>
+<UL><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Indice:</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1. <A 
HREF="#1">Moviendonos
+por el disco</A>: archivos y directorios</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2. <A 
HREF="#2">Otros
+comandos de disco</A>: uso, espacio libre ...</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3. <A 
HREF="#3">Procesos</A>:
+gesti&oacute;n y control</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4. <A 
HREF="#4">Informaci&oacute;n
+del sistema</A>: que m&aacute;quina tenemos?</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5. <A HREF="#5">Las
+ayudas</A>: donde buscarla?</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>6. <A 
HREF="#6">Empaquetadores
+y Compresores</A>: tar/gzip/bzip</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>7. <A 
HREF="#7">Grupos
+y usuarios (I)</A>: gesti&oacute;n</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>8. <A 
HREF="#8">Grupos
+y usuarios (II)</A>: permisos</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>9. <A 
HREF="#9">Variables
+de entorno</A>: los malditos PATHs</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>10. <A HREF="#10">El
+entorno gr&aacute;fico</A>: las bases</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>11. <A 
HREF="#11">Compilar</A>:
+por que? para que? con que?</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>12. <A 
HREF="#12">paquetes
+(I)</A>: RPM</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>13. <A HREF="#13">El
+teclado</A>: funciones avanzadas con el teclado</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>14. <A 
HREF="#14">Montando
+unidades</A>: Floppy, CD, NFS ...</FONT></FONT></FONT></LI>
+</UL>
+
+<HR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="1"></A>Moviendonos
+por el disco:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una vez 
introducido
+el login y pass nos veremos inmersos en un austero sistema basado en linea
+de comandos, que difiere mucho de la imagen que nos hab&iacute;amos creado
+de linux.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La pregunta
+es: y ahora que?</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Vamos por
+partes:</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Listando archivos:
+la orden b&aacute;sica es <I>ls</I> aunque es posible que al escribirlo
+no pase nada, ya que el directorio donde estamos esta vac&iacute;o.
+<I>ls</I>
+tiene opciones muy interesantes, aunque las mas &uacute;tiles son -a (para
+ver los archivos ocultos), -l (para ver los datos de los archivos, 
tama&ntilde;o,
+permisos ...) y --color (para ver los archivos en colores seg&uacute;n
+sean ejecutables, directorios, archivos comprimidos 
...)</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cambiando de
+directorio: la orden b&aacute;sica es <I>cd directorio</I>, los directorios
+se referencian con "/" y no con "\" como pasa en MS-DOS. Existen una serie
+de palabras clave para acelerar el uso del comando cd: <I>cd ~</I> nos
+lleva al directorio ra&iacute;z de cada usuario, <I>cd ..</I> baja un 
directorio,
+<I>cd /</I> te sit&uacute;a en el archivo ra&iacute;z del sistema, <I>cd</I>
+(sin par&aacute;metros) es equivalente a <I>cd ~</I>. La orden <I>pwd</I>
+nos indica en que directorio estamos actualmente.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Creando y eliminado
+directorios: <I>mkdir directorio</I> crea un directorio, <I>rmdir 
directorio</I>
+lo elimina solo si el directorio no contiene nada. Para eliminar directorios
+enteros se usa el comando <I>rm -rf directorio</I></FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ATENCI&Oacute;N!
+este es uno de los comandos mas peligrosos para el sistema, piensa bien
+lo que haces antes de ejecutarlo.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Copiar/mover/eliminar
+archivos: <I>cp archivo destino</I> copia archivo en destino, destino puede
+ser un directorio u otro archivo.
+<I>mv archivo destino</I> mueve archivo
+a destino, el efecto es igual al anterior pero eliminando el archivo de
+origen. <I>rm archivo</I> elimina archivo. Opciones interesantes para los
+tres es -i para confirmar siempre, y -f para forzar la acci&oacute;n. 
Recomiendo
+el uso de -i siempre.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Identificando
+archivos: estamos acostumbrados a distinguir los archivos por su 
extensi&oacute;n,
+pero Linux no impone ninguna restricci&oacute;n a los nombres de los archivos
+por lo que el archivo <I>pepito</I> podr&iacute;a ser tanto un ejecutanle,
+como un fichero de texto, como una foto ... para averiguarlo usaremos 
<I>file</I>,
+este comando busca cadenas especificas dentro de los archivos que determinan
+su tipo y por tanto el tratamiento que les vamos a dar. Por ejemplo el
+archivo:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-rw-r--r--
+1 root root 6842843 Jan 16 16:20 linux-2.0.34</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;no
+parece tener un formato conocido, aplicamos file:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>[root:/usr/src]#
+file linux-2.0.34</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>linux-2.0.34:
+gzip compressed data, deflated, last modified: Thu Jun 4 06:44:55 1998,
+max compression, os: Unix</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Ahora
+ya sabemos que se trata de un archivo comprimido con gzip y como 
tratarlo.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Links: un link
+es una imagen de un archivo o directorio en otra parte del disco, la ventaja
+de esto es tener accesible un mismo archivo o directorio desde diferentes
+puntos del &aacute;rbol de directorios, algo parecido a un acceso directo,
+la orden b&aacute;sica es <I>ln origen destino</I>, se pueden linkar tanto
+archivos como directorios y principalmente con las opciones -s (solo crea
+un puntero que apunta al origen) y -h (crea im&aacute;genes totales del
+origen).</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo,
+tenemos el directorio /usr/src/linux-2.2.0/ y queremos que el sistema 
tambi&eacute;n
+lo vea como /usr/src/linux/, en este caso el comando seria:
+<I>ln -s /usr/src/linux-2.2.0
+/usr/src/linux</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Buscar archivos:
+<I>find -name archivo</I> busca recursivamente el archivo desde el directorio
+actual. Tiene muchas opciones que pasan por buscar con comodines, por permisos,
+por fechas de modificaci&oacute;n, por propietario 
...</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Viendo archivos:
+las ordenes b&aacute;sicas son <I>cat archivo</I>, <I>more archivo</I>,
+<I>less archivo</I> y algunos otros, recomiendo que proveis los tres y
+ve&aacute;is cual os gusta mas.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Editando archivos:
+esta es una de las operaciones mas comunes dentro del mundo linux, pues
+casi todo se configura a partir de archivos de texto modificables por el
+usuario. Hay muchos editores de texto, el mas extendido es <I>vi</I> aunque
+recomiendo encarecidamente el uso de <I>joe</I> por su facilidad de uso
+(la orden Ctrl+K+H activa la ayuda) y relativa potencia. En general la
+mayor&iacute;a de editores se lanzan con la orden <I>editor 
archivo</I>.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="2"></A>Otros
+comandos de disco:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>A parte de
+archivos y directorios, hay mas cosas en el disco que debemos conocer,
+estado del sistema de archivos, espacio libre ...</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Espacio disponible:
+<I>df</I>, nos da informaci&oacute;n sobre la unidad actual, el nombre
+de la unidad, la capacidad total, el uso, el espacio libre ... la opci&oacute;n
+mas importante es -h que hace que la salida sea mas legible (usa unidades
+f&aacute;ciles de leer).</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Espacio usado:
+<I>du</I>, indica cuanto espacio usa el directorio actual y todos sus 
subdirectorios.
+De nuevo una buena opci&oacute;n es -h (mas legible) y -s para hacer solo
+un sumario y no dar informaci&oacute;n de todos los 
subdirectorios.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Sistema de archivos:
+ATENCI&Oacute;N! estos comandos son peligrosos, solo puede realizarlos
+root. <I>fsck /dev/dispositivo</I> chequea la integridad del sistema de
+archivos del dispositivo. <I>mkfs -t tipo /dev/dispositivo</I> crea un
+sistema de archivos del tipo especificado en el dispositivo. Por ejemplo:
+<I>mkfs -t ext2 /dev/fd0</I> formatea un disket con el sistema de archivos
+de linux.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="3"></A>Procesos:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un proceso
+es cualquier programa ejecutandose, son procesos todos los programas que
+lancemos, las consolas, los demonios de sistema ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La multitarea
+real de Linux unido al gran numero de procesos (mas de 20) que pueden estar
+corriendo a la vez en un sistema "normal" hacen que conocer el control
+de procesos (o tareas) sea importante.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Listando procesos:
+<I>ps</I> lista procesos. Opciones interesantes son (no llevan "-" delante!)
+a (muestra todos los procesos, aunque sean de otro usuario), u 
(informaci&oacute;n
+adicional del usuario y del proceso).</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ademas de
+ps, podemos usar la orden <I>top</I>, que nos informa de los procesos actuales
+y aparte indica los recursos que consumen, la memoria libre, la hora y
+otros datos de inter&eacute;s.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El PID: es el
+numero con el que el sistema identifica un proceso. Es muy importante 
conocerlo,
+pues se usa para referenciar procesos en multitud de comandos. Es la primera
+columna del comando <I>ps au</I>.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Controlando
+procesos: <I>kill SIGNAL PID</I> o <I>killall SIGNAL nombre_de_proceso</I>
+env&iacute;a la se&ntilde;al SIGNAL al proceso, SIGNAL puede ser -9 (matar
+proceso), -1 (reiniciar proceso) ...</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo
+killall -9 sendmail elimina el programa sendmail de la 
memoria.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Interrumpir
+procesos: <I>Ctrl+c</I> mata el proceso actual que se encuentra en primer
+plano, <I>Ctrl+z</I> env&iacute;a el proceso actual a segundo plano y para
+su ejecuci&oacute;n, aunque no lo elimina de la 
memoria.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Moviendo procesos:
+los procesos lanzados por el usuario pueden moverse de primer a segundo
+plano, para permitir seguir usando la consola aun cuando el proceso no
+ha acabado. La manera mas sencilla de lanzar un proceso a segundo plano
+es lanzandolo como <I>proceso &amp;</I>.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para listar
+los procesos en segundo plano usamos la orden <I>jobs</I>, para devolver
+un proceso en segundo plano a primer plano se usa la orden
+<I>fg numero</I>,
+numero es el primer par&aacute;metro que <I>jobs</I> asigna a cada 
proceso.</FONT></FONT></FONT></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="4"></A>Informaci&oacute;n
+del sistema:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Linux informa
+de pr&aacute;cticamente todo lo relacionado consigo mismo y con los programas
+que esta ejecutando, solo hay que saber donde mirar.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Informaci&oacute;n
+b&aacute;sica sobre nuestra m&aacute;quina: <I>uname -a</I>, nos informa
+sobre el sistema operativo, la versi&oacute;n del kernel, el nombre asignado
+a la m&aacute;quina, el tipo de procesador instalado 
...</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El arranque:
+durante el arranque el kernel detecta gran cantidad de hardware de nuestro
+sistema, aportando informaci&oacute;n importante, como nombre de las unidades
+detectadas, puertos, protocolos de red activados, perif&eacute;ricos ...
+esta informaci&oacute;n suele salir muy r&aacute;pido, para verla con mas
+tranquilidad solo hay que teclear <I>dmesg | 
more</I>.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El entorno:
+<I>env</I> nos muestra todas las variables de entorno definidas y sus 
valores.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Memoria: <I>free</I>
+nos da un informe sobre el estado de la RAM f&iacute;sica, as&iacute; como
+de la swap, el par&aacute;metro -m muestra los datos en megas.
+<I>top</I>
+ademas indica lo que esta consumiendo cada proceso activo y el estado global
+de la CPU.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El directorio
+/proc: es una imagen de la memoria, y en ella hay gran cantidad de 
informaci&oacute;n
+valiosa, la mayor&iacute;a de los archivos que contiene son de texto, muy
+informativos y su nombre es autodescriptivo, por ejemplo el archivo 
/prot/interrupts
+muestra informaci&oacute;n muy valiosa sobre las IRQs, para ver el contenido
+de estos archivos basta con usar <I>cat /proc/archivo</I>, por ejemplo
+este es el aspecto de mi /proc/mounts:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>[root:/proc]#
+cat mounts</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/root
+/ ext2 rw 0 0</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>none
+/proc proc rw 0 0</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hda1
+/mnt/dos msdos rw 0 0</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/cdrom
+/mnt/cdrom iso9660 ro 0 0</FONT></FONT></FONT></I></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5.&nbsp;<A 
NAME="5"></A>Las
+ayudas:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Hasta ahora
+todo parece bastante complicado y si no te lo has tomado con mucha calma
+seguramente no te has enterado de nada. Vamos a ver que se puede hacer
+cuando todo parece perdido.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ayudas de comando:
+muchos comandos incluyen pantallas de ayuda cuando son lanzados sin 
par&aacute;metros
+(si los requieren) o con la opci&oacute;n -h o --help. Si la pantalla de
+ayuda es demasiado larga puedes usar <I>Shift+RePag Shift+AvPag
+</I>para
+moverte por el buffer de pantalla.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo:
+<I>cp --help</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El comando 
<I>help</I>:
+muestra ayuda sobre el comando que se le pasa como par&aacute;metro, para
+saber que comandos conoce help, lanzalo sin 
par&aacute;metros.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo:
+<I>help jobs</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El comando 
<I>man</I>:
+es la ayuda mas usada, muestra un manual sobre el comando que se le pasa
+como par&aacute;metro, estos manuales son muy completos y es el primer
+lugar donde se debe acudir para solucionar cualquier problema. Hay una
+versi&oacute;n para las X un poco mas intuitiva llamada 
<I>xman</I>.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo:
+<I>man bash</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El comando 
<I>info</I>:
+con una finalidad similar a la de <I>man</I> aunque algo menos estandarizado,
+teclea <I>info</I> o <I>info comando</I>. Puede leer archivos man, y tiene
+multitud de opciones.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo:
+<I>info syslog</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El directorio
+/usr/doc: contiene documentaci&oacute;n sobre la mayor&iacute;a de paquetes
+instalados en el sistema. Es una base de datos muy amplia y que puede ser
+muy &uacute;til para aquellas cosas que el <I>man</I> no acaba de 
aclararnos.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Internet: el
+volumen de informaci&oacute;n sobre linux en internet es inmenso, solo
+ten&eacute;is que pasaros por <A HREF="http://slug.ctv.es";>SLUG</A> o
+<A HREF="http://lucas.ctv.es";>LUCAS</A>
+(ambas con informaci&oacute;n &iacute;ntegramente en castellano!) para
+haceros una idea. Podr&eacute;is encontrar manuales, libros 
electr&oacute;nicos,
+FAQs (respuestas a las preguntas mas comunes), HOWTOs (COMO hacer cualquier
+cosa), webs, ftp, news, irc ...</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>6.&nbsp;<A 
NAME="6"></A>Empaquetadores
+y Compresores:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Linux entiende
+todos los formatos de compresi&oacute;n mas extendidos, como son ZIP, RAR,
+TAR ... y tiene herramientas para su gesti&oacute;n, pero aqu&iacute; voy
+a centrarme en los mas usados: tar, gzip y bzip2.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Tar: es el 
empaquetador
+est&aacute;ndar de linux, empaquetador significa que no comprime, si no
+que junta un grupo de archivos en un solo archivo con extensi&oacute;n
+.tar, que es mas f&aacute;cil de transportar o intercambiar entre sistemas
+o por la red. Es la herramienta ideal para las copias de seguridad. Tiene
+multitud de modificadores aunque los usos mas frecuentes son: <I>tar cvf
+archivo.tar archivos_a_comprimir</I> (para crear archivos tar) y <I>tar
+xvf archivo.tar</I> (para desempaquetar un tar).</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Generalmente
+se usa junto a gzip con la orden: <I>tar xvfz archivo.tar.gz
+</I>, (la
+z indica a tar que use compresi&oacute;n zip). Tambi&eacute;n se puede
+usar junto a bzip2 con la orden: <I>bzip2 -d archivo.tar.bz2 | tar xfv
+-</I>.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Gzip: es el
+compresor est&aacute;ndar de linux, en general se usa junto a tar, para
+comprimir un grupo de archivos empaquetados. La extensi&oacute;n de los
+archivos comprimidos con gzip es .gz, y la de los empaquetados y comprimidos
+es .tar.gz o .tgz. Gzip solo puede comprimir los archivos de uno en uno
+por lo que no es adecuado para compactar grupos de archivos. La orden es
+<I>gzip -c archivo</I> (para comprimirlo) y <I>gzip -d archivo.gz</I> (para
+descomprimirlo).</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Bzip2: es el
+nuevo compresor sucesor del gzip, con ratios de compresi&oacute;n que lo
+superan en un 10% aproximadamente. La extensi&oacute;n es .bz2, y los comandos
+equivalentes al gzip, <I>bzip2 -c archivo</I> y <I>bzip -d 
archivo.bz2</I>.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>7.&nbsp;<A 
NAME="7"></A>Grupos
+y usuarios (I):</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Todo sistema
+linux permite el uso del mismo ordenador por diferentes usuarios. Para
+mantener una cierta seguridad de los datos de cada uno se asignan una serie
+de permisos y grupos.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ke usuarios
+necesito?: como m&iacute;nimo 2, root y otro mas, root ya existe y lo usaremos
+SOLAMENTE! para las tareas de mantenimiento del sistema, nunca para leer
+documentaci&oacute;n, jugar, navegar por internet, experimentar comandos
+... para todo esto se usan los dem&aacute;s usuarios.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Creando usuarios:
+hay varios comandos, el mas sencillo es <I>useradd nombre_de_usuario ;
+passwd nombre_de_usuario</I>, que crea un nuevo usuario con una serie de
+opciones predefinidas, estas opciones pueden cambiarse manualmente editando
+el archivo /etc/passwd (ATENCI&Oacute;N! un mal uso de este archivo puede
+llevar a la imposibilidad total de hacer un login en el 
sistema).</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Comandos 
relacionados:
+<I>users</I> lista los nombres de los usuarios conectados al sistema, <I>w</I>
+y <I>who</I> lista los usuarios e informa sobre la consola en la que 
est&aacute;n,
+el tiempo que llevan conectados y mas,
+<I>userdel nombre_de_usuario</I>
+elimina un usuario, <I>su</I> salta de modo usuario a modo 
root.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Usuarios de
+sistema: ademas de root y los usuarios que hayamos creado, el sistema tiene
+un grupo de usuarios que son necesarios y no debemos eliminar, son por
+ejemplo: bin, mail, news, operator, games ...</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Grupos: los
+grupos son una forma de dar los mismos permisos a un conjunto de usuarios,
+de manera que puedan trabajar en grupo. Por defecto se crea un grupo por
+cada usuario, y esa pol&iacute;tica es la mejor en la mayor&iacute;a de
+los casos, ademas existen grupos de sistema como: lp, mem, ftp 
...</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>8.&nbsp;<A 
NAME="8"></A>Grupos
+y usuarios (II):</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los permisos
+son necesarios para saber que usuarios pueden hacer ciertas cosas y cuales
+no. Por ejemplo, no es normal que dejemos entrar alguien por telnet y que
+nos modifique el /etc/passwd, por ejemplo.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: el
+permiso de ejecuci&oacute;n para un directorio significa que se puede acceder
+al contenido de ese directorio.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: los
+permisos de un link son los del archivo al que apunta.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Viendo y 
reconociendo
+permisos: los permisos de un archivo se ven con la orden <I>ls -l</I>,
+el formato de salida se parece a esto:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>drwx------
+5 dani dani 1024 Jan 5 00:54 Desktop</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>drwx------
+2 dani dani 1024 Jan 2 19:48 Mail</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>drwxr-xr-x
+2 dani dani 1024 Dec 27 16:27 docs</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Lo mas importante
+son esas primeras letras ilegibles de cada linea. La primera letra indica
+el tipo de archivo (- archivo normal, d directorio, l link, b dispositivo
+...). Las dem&aacute;s letras se leen de tres en tres, des esta manera:
+d/rwx/r-x/r-x. El primer tr&iacute;o se refiere al propietario del archivo,
+el segundo a los dem&aacute;s miembros del grupo del propietario y el tercero
+al resto. Las letras son: r (permiso de lectura), w (permiso de escritura),
+x (permiso de ejecuci&oacute;n).</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Despu&eacute;s
+los dos nombres se refieren al nombre del propietario y nombre del grupo
+al que pertenece el archivo, de esta manera nuestro archivo docs del ejemplo
+quedar&iacute;a as&iacute;:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>drwxr-xr-x
+2 dani dani 1024 Dec 27 16:27 docs</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ke 
significa:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>d: se trata
+de un directorio</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>rwx: permiso
+de lectura/escritura/ejecucion para el propietario</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>r-x: permiso
+de lectura/ejecuci&oacute;n para el grupo</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>r-x: permiso
+de lectura/ejecuci&oacute;n para el resto</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2: numero
+de inodos</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>dani: nombre
+del propietario</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>dani: nombre
+del grupo</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1024: 
bytes</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 27 16:27:
+fecha de creaci&oacute;n o de ultima modificaci&oacute;n</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>docs: 
nombre</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cambiando 
permisos:el
+comando es <I>chmod permisos fichero</I>, la forma de indicar los permisos
+es sencilla, se usa una letra para designar a quien se le quieren cambiar
+los permisos ("a" todos, "u" propietario, "g" grupo, "o" otros) despu&eacute;s
+se pone un s&iacute;mbolo + (para dar el permiso) o - (para quitarlo) y
+finalmente se pone el permiso o los permisos que queremos cambiar ("r"
+lectura, "w" escritura, "x" ejecuci&oacute;n).</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un ejemplo
+sencillo seria dar permiso de ejecuci&oacute;n para todos a un fichero,
+la orden seria: <I>chmod a+x archivo</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cambiando grupo
+y propietario: las ordenes son <I>chown usuario archivo</I> para cambiar
+el propietario y <I>chgrp grupo archivo</I> para cambiar el 
grupo.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Permisos especiales:
+a parte de los permisos b&aacute;sicos existen otros dos permisos, el sticky
+bit (completamente desfasado) y el SUID o SETUID. El SUID es un permiso
+que da permisos de root a un proceso aunque haya sido lanzado por un usuario,
+esto es necesario, por ejemplo para que usuarios normales puedan arrancar
+el entorno gr&aacute;fico, puedan conectarse a internet ... este permiso
+se simboliza con la letra "s" y se aplica as&iacute;: <I>chmod a+s 
archivo</I>.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>9.&nbsp;<A 
NAME="9"></A>Variables
+de entorno:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En ocasiones
+es necesario cambiar los par&aacute;metros del sistema, ya sea para adecuarlos
+a nuestro lenguaje, a nuestras necesidades, para acceder a nuevo software,
+localizar librer&iacute;as ...</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ke variables
+tengo definidas?: con el comando <I>env</I> veremos un listado de todas
+las variables que usa el sistema.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Donde se definen?:
+esto ya no es tan sencillo, hemos de plantearnos si queremos hacer cambios
+permanentes o temporales, para un usuario o para todos ... los cambios
+temporales podemos hacerlos directamente en la linea de comandos, los 
permanentes
+los haremos en alg&uacute;n archivo de inicio, en uno global si es para
+todos (por ejemplo en /etc/bashrc) o dentro del directorio del usuario
+para el que queremos definirla (por en ~/.bashrc)</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: los
+cambios en archivos de inicio no se reflejan hasta que se haga un nuevo
+login o con la orden <I>source archivo_de_inicio</I>.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como se definen?:
+tanto si lo ponemos en alg&uacute;n gui&oacute;n de inicio, como desde
+la linea de comandos la sintaxis es la siguiente: <I>export 
VARIABLE="valor"</I>.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Modificando
+el PATH: si queremos a&ntilde;adir una entrada al PATH no nos basta con
+la orden <I>export PATH="/home/dani/bin"</I>, pues esto elimina del PATH
+todas las dem&aacute;s entradas como /bin, /usr/bin ... la orden correcta
+seria: <I>export PATH="$PATH:/home/dani/bin"</I>, que indica al sistema
+que mantenga el PATH y a&ntilde;ada la nueva entrada.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>10.&nbsp;<A 
NAME="10"></A>El
+entorno gr&aacute;fico:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El entorno
+gr&aacute;fico (tambi&eacute;n llamado X o X-window) es una potente herramienta
+que facilita el control de tareas de una manera mucho mas sencilla, a parte
+de permitirnos ejecutar gran cantidad de software que no se ejecuta en
+consola. Usarlo no es dif&iacute;cil,
+los problemas surgen al intentar
+ponerlo en marcha. No voy a intentar resolver todos los problemas de las
+X, ni explicar como se usan las X con tal o cual tarjeta, para eso esta
+la documentaci&oacute;n. Tampoco voy a recomendar un gestor de ventanas
+pues eso queda a elecci&oacute;n de cada uno.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Requerimientos:
+sencillo, un rat&oacute;n bien configurado, una distribuci&oacute;n mas
+o menos reciente de X (en este momento 3.3.3 es la ultima) y una tarjeta
+gr&aacute;fica soportada por las X. ATENCI&Oacute;N! Este ultimo punto
+es muy importante, la gran velocidad con la que aparecen nuevos modelos
+y las dificultades que ponen los fabricantes hacen muy dif&iacute;cil el
+soporte de nuevo hardware por parte de X, lee toda la documentaci&oacute;n
+disponible en <A HREF="http://www.xfree86.org";>http://www.xfree86.org</A>
+para saber si tu tarjeta esta soportada.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Servidores:
+el servidor es la parte de las X encargada de comunicarse con la tarjeta,
+hay muchos y es importante que uses el mas adecuado para tu tarjeta (de
+nuevo lee toda la documentaci&oacute;n para esto). Ademas de los servidores
+aportados por XFree86 algunas compa&ntilde;ias como <A 
HREF="http://www.suse.com";>SUSE</A>
+o <A HREF="www.redhat.com">RedHat</A> tambi&eacute;n tienen los 
suyos.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Configuraci&oacute;n:
+hay varias utilidades para hacer esto, os sugiero que las us&eacute;is
+todas y que os kedeis con la que os de mejores 
resultados.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1><I>XF86Setup</I>:
+aplicaci&oacute;n gr&aacute;fica muy intuitiva, viene con las versiones
+mas modernas de X.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1><I>Xconfigurator</I>:
+aplicaci&oacute;n basada en ncurses, sencilla, pero solo configura 
video/monitor,
+viene con las distribuciones que usan paquetes RPM (Red Hat, Eurielec,
+Caldera y SuSE)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1><I>xf86config</I>:
+la mas austera, a veces es la mas efectiva, viene con todas las distribuciones
+de X.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Configuraci&oacute;n
+manual: una vez acabado puede ser necesario editar a mano el archivo XF86Config
+que generan las aplicaciones anteriores para acabar de pulir fallos. Este
+archivo puede estar en varios sitios del disco, yo recomiendo tener una
+sola copia y dentro de /etc.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El archivo X:
+Ha de ser un link al servidor X que queramos usar, puede estar en varios
+sitios del disco, recomiendo tener una sola copia dentro de 
/usr/X11R6/bin.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo,
+para arrancar las X usando el servidor gr&aacute;fico SVGA, haremos este
+link: <I>ln -s /usr/X11R6/bin/XF86_SVGA 
/usr/X11R6/bin/X</I>.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Arrancando las
+X: el comando base es <I>startx</I>, si surgen problemas es muy importante
+leer los mensajes de error que dan las X a la hora de pedir ayuda. Si 
<I>startx</I>
+no funciona puede ser problema de alg&uacute;n programa y no del propio
+entorno gr&aacute;fico, para distinguir esta situaci&oacute;n intentaremos
+arrancar las X con el comando <I>xinit</I>, si el resultado es una pantalla
+gris con el cursor en forma de cruz en el centro es que las X est&aacute;n
+bien y lo que falla es alg&uacute;n programa que intenta ejecutarse durante
+el inicio (seguramente alg&uacute;n fallo en el gestor de 
ventanas).</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>11.&nbsp;<A 
NAME="11"></A>Compilar:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En pocas
+palabras compilar es pasar de las fuentes del programa a un fichero ejecutable.
+Este proceso no es ni sencillo ni f&aacute;cil, por lo que es frecuente
+que aparezcan fallos. Por suerte existen algunas herramientas (Makefiles,
+configures ...) que nos van a facilitar la vida.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Requisitos:
+la verdad es que los requisitos para compilar son bastante altos, hay que
+tener instalados el gcc, el make, las libc-devel, libg++-devel, 
libstdc++-devel,
+todas las versiones de desarrollo de las librer&iacute;as que usa el programa
+que vayamos a compilar, las X-devel si el programa va ejecutarse bajo el
+entorno gr&aacute;fico, opcionalmente otros paquetes de control, 
revisi&oacute;n
+de versiones, comandos especiales ... y todo lo que nos pida la 
documentaci&oacute;n
+del programa que vayamos a compilar.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como se hace?:
+despu&eacute;s de descomprimir el paquete lo primero que hay que hacer
+es leer la documentaci&oacute;n (casi siempre hay alg&uacute;n README o
+INSTALL) y asegurarnos de que tenemos todo lo que necesitamos para compilar
+y que nuestro sistema esta soportado por las fuentes, es decir de nada
+nos sirve tener las fuentes de un programa que usa unas librer&iacute;as
+que no tenemos o que no compila en Linux. Un proceso semi-estandar entre
+el software mas reciente es tener que poner solo esto para conseguir compilar
+e instalar el programa:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>./configure</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>make</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make
+install</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Todo esto
+dentro del directorio donde se encuentran las fuentes. Aunque en muchos
+casos no existe el "configure" y deberemos editar a mano el archivo Makefile
+para adecuarlo a nuestro sistema (definir PATHs, comandos, opciones especificas
+de plataforma ...)</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Compilar un
+solo archivo (*.c): si lo que queremos compilar es un solo archivo el proceso
+es mucho mas sencillo, basta con la orden: <I>gcc -O2 -Wall -o 
nombre_del_ejecutable
+archivo.c</I>.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>12.&nbsp;<A 
NAME="12"></A>paquetes
+(I): RPM</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los paquetes
+son formas de distribuir software para facilitar su instalaci&oacute;n
+y mantenimiento. En general se distribuyen en forma de binarios por lo
+que no hace falta compilarlos. Hay Principalmente tres tipos RPM, DEB y
+TGZ. Es muy recomendable instalarlo todo de esta manera, pues as&iacute;
+nos evitaremos preocuparnos por donde dejan los programas cada archivo,
+ya que el gestor sabe en todo momento donde est&aacute;n facilitando su
+eliminaci&oacute;n o localizaci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>RPM: Es el
+tipo de paquetes binarios mas extendido y en el que se basan las distribuciones
+Red Hat (y Eurielec), Caldera Open Linux y SuSE.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Hay que
+remarcar que aunque el formato de paquetes sea el mismo, no significa que
+los paquetes de una distribuci&oacute;n vayan a funcionar en otra, hay
+que tener en cuenta las librer&iacute;as instaladas, el software adicional,
+las incompatibilidades ...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Gesti&oacute;n:
+existen varios programas para la gesti&oacute;n de RPMs, voy a comentar
+algunos.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>rpm: este comando
+es el b&aacute;sico para la gesti&oacute;n de RPMs y es en el que se basan
+las dem&aacute;s utilidades. La sintaxis es muy sencilla: <I>rpm -i 
archivo.rpm</I>
+para instalarlos, <I>rpm -U archivo.rpm</I> para actualizarlos, y <I>rpm
+-e paquete</I> para eliminarlos (ojo! los paquetes se eliminan por su nombre,
+no por el nombre de archivo, en general el nombre del paquete es el mismo
+que el del archivo sin la extensi&oacute;n .rpm)</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otras funciones
+interesantes son: <I>rpm -qa</I> para ver un listado de todos los paquetes
+instalados, <I>rpm -qlip archivo.rpm</I> para ver informaci&oacute;n y
+el listado de archivos de un paquete ... mas informaci&oacute;n en
+<I>man
+rpm</I> y <I>rpm</I> sin par&aacute;metros.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>purp: es un
+intento de facilitar el uso de rpm, con men&uacute;s e informaci&oacute;n
+gr&aacute;fica. Para mi es el mejor. Necesita la librer&iacute;a ncurses-4.2
+o superior. Funciona en modo consola por lo que no hace falta tener las
+X instaladas para usarlo.</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Se puede
+arrancar como <I>purp</I> sin par&aacute;metros, para gestionar solo los
+paquetes instalados en el sistema o <I>purp /directorio_de_rpms</I> para
+gestionar los paquetes instalados mas los disponibles en el directorio
+que se le pasa como par&aacute;metro (ideal para examinar CDs llenos de
+RPMs).</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Lo puedes
+encontrar en <A 
HREF="http://www.lysator.liu.se/purp/";>http://www.lysator.liu.se/purp/</A></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>glint: es un
+frontend gr&aacute;fico para rpm desarrollado por Red Hat, necesita tener
+instaladas y configuradas las X, a primera vista parece muy bueno e intuitivo,
+pero r&aacute;pidamente se echan en falta opciones e informaci&oacute;n
+adicional. Recomendado para los que no tienen purp y no se aclaran con
+las opciones de rpm.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>grpm: Simple
+GNOME RPM Tool. Otro frontend para rpm, este de mejor calidad que el glint
+pero requiere tener instalado GNOME.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las dependencias:
+para el usuario novato esta palabra es un dolor de cabeza constante, los
+paquetes no quieren instalarse por errores de dependencias. Ke 
son?</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La 
mayor&iacute;a
+de los programas necesitan de otros componentes software para funcionar,
+en su mayor&iacute;a son librer&iacute;as necesarias para el programa,
+pero tambi&eacute;n pueden ser otros programas, documentaci&oacute;n, la
+existencia de alg&uacute;n directorio ... los errores de dependencias lejos
+de ser un problema son una gran ventaja, pues nos evita estar instalando
+software que luego no funciona y no sabemos por que.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>A veces
+ocurre que el gestor de RPMs da como error de dependencias un paquete que
+sabemos seguro que tenemos instalado. Esto puede deberse a varias
+cosas:
+a que realmente no lo hemos instalado correctamente, a que tenemos una
+versi&oacute;n diferente a la que necesitamos o que hayamos instalado el
+programa usando otro m&eacute;todo (el gestor es incapaz de saber que paquetes
+hemos instalado en el sistema si no lo hemos usado a el para 
hacerlo).</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si estamos
+seguros de cumplir los requisitos y que el programa funcionara aunque el
+gestor crea que no, la orden es: <I>rpm -i --nodeps archivo.rpm</I> esto
+se salta el chekeo de dependencias, si aun as&iacute; no quiere instalarse
+podemos usar la orden: <I>rpm -i --nodeps --force archivo.rpm</I>, aunque
+en este caso lo mas seguro es que el programa acabe por no 
funcionar.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>RPMs en 
Debian/Slackware:
+Debian tiene herramientas para la gesti&oacute;n de RPMs por lo que no
+hay problemas en usarlos. De todas maneras, si no tenemos esas herramientas
+instaladas o usamos Slackware podemos usar el programa alien para convertir
+el formato del paquete. Alien es una utilidad que convierte RPM/DEB/TGZ
+a RPM/DEB/TGZ, y puede hacer todas las transformaciones posibles. De todas
+maneras este sistema debe usarse con cuidado, pueden aparecer problemas
+de dependencias y de incompatibilidades entre paquetes de diferentes 
distribuciones.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>13.&nbsp;<A 
NAME="13"></A>El
+teclado: funciones avanzadas con el teclado</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Podemos usar
+el teclado para mucho mas que para escribir, hay funciones complejas que
+podemos hacer f&aacute;cilmente pulsando un par de teclas.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cambiando de
+consola: Una consola es un terminal en el que pueden escribirse ordenes,
+por defecto la mayor&iacute;a de distribuciones incluyen 6 consolas (tty)
+mas todas las sesiones telnet (ttyp) mas todos los emuladores de terminal
+para las X (xterm, rxvt, eterm ...). Para cambiar de consola en modo local
+basta con pulsar la combinaci&oacute;n Alt+FX donde X es el numero de la
+consola a la que queremos movernos (FX son las teclas de 
funci&oacute;n!)</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Algunos
+programas "atrapan" esta combinaci&oacute;n de teclas asignandoles otra
+funci&oacute;n, es el caso de las X, el DOSEmu, el DOOM ... la 
combinaci&oacute;n
+de teclas para cambiar de consola en estos casos es 
Ctrl+Alt+FX.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: la
+consola en la que se proyectan las X es la primera libre, en la mayor&iacute;a
+de los casos la 7.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Reiniciar/cerrar:
+la combinaci&oacute;n Ctrl+Alt+Supr provoca un reinicio del ordenador,
+aunque este comportamiento se puede modificar llegando a realizar cualquier
+acci&oacute;n tras esta combinaci&oacute;n simplemente editando el archivo
+/etc/inittab, buscaremos unas lineas como estas:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>#
+Trap CTRL-ALT-DELETE</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>ca::ctrlaltdel:/sbin/shutdown
+-t3 -r now</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;El
+ultimo campo es la acci&oacute;n a realizar. Podemos substituir -r por
+-h para que cualquier usuario pueda cerrar la 
m&aacute;quina.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Completado:
+podemos usar la tecla TAB (tabulador, la tecla sobre el Bloq Mayus) para
+completar comandos y nombres de archivos, tan solo hay que teclear las
+primeras letras de la orden y pulsar TAB para que el sistema intente 
completarla.
+Por ejemplo, podemos pulsar:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>da'TAB'</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Para
+que en la linea aparezca:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>date</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Lo
+mismo pasa con los nombres de archivos, por ejemplo, desde / podemos 
hacer:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>cd 
r'TAB'</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;El
+resultado es:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>cd 
root/</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Si
+existen coincidencias de nombres, de manera que el sistema no sabe cual
+queremos completar, nos avisa par&aacute;ndose en el punto en el que las
+dos o mas ordenes empiezan a diferenciarse y emite un pitido. En este caso
+si volvemos a pulsar TAB se nos muestra una lista de todas las ordenes
+que coinciden con el patr&oacute;n dado.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo,
+si pulsamos:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>mak'TAB'</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Veremos
+en el terminal:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>make</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Si
+volvemos a pulsar TAB:</FONT></FONT></FONT>
+<BR>&nbsp;
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>make</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>makedepend</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>makewhatis</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>make-ssh-known-hosts</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>makeg</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>makedb</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>makeinfo</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Editar la linea
+de comandos: puede editarse la linea de comandos como si de un editor normal
+se tratase, a diferencia de MS-DOS que borra los caracteres por los que
+pasa el cursor.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Historial: Con
+las teclas de cursor de Arriba y Abajo podemos movernos por el historial
+de los &uacute;ltimos comandos tecleados. Muy &uacute;til para tareas 
repetitivas
+de sintaxis compleja.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>14.&nbsp;<A 
NAME="14"></A>Montando
+unidades:</FONT></FONT></FONT>
+<UL><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: las
+unidades en linux.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las unidades
+en linux son tratadas como ficheros, concretamente como ficheros de dispositivo
+y se encuentran dentro del directorio /dev.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los nombres
+son:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/fd0
+-> Primera disketera</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/fd1
+-> Segunda disketera ( ... y as&iacute; con todas las que 
haya)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hda
+-> Primer disco del primer canal IDE</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hdb
+-> Segundo disco del primer canal IDE</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hdc
+-> Primer disco del segundo canal IDE</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hdd
+-> Segundo disco del segundo canal IDE</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/sda
+-> Primer disco SCSI</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/sdb
+-> Segundo disco SCSI ( ... y as&iacute; con todos los que 
haya)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ademas, los
+discos duros (tanto IDE como SCSI) tienen particiones, a las que 
llamamos:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hda1
+-> Primera partici&oacute;n del primer disco del primer canal 
IDE</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hda2
+-> Segunda ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hdb1
+-> Primera partici&oacute;n del segundo disco ...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para saber
+que unidades i particiones reconoce el sistema haremos
+<I>dmesg</I> fijandonos
+especialmente en las lineas que definen las unidades, por ejemplo, en mi
+sistema:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:/]#
+dmesg</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>hda: ST33210A,
+ATA DISK drive</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>hdb: ACER
+CD-910E/JAS, ATAPI CDROM drive</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>hda: ST33210A,
+3098MB w/256kB Cache, CHS=787/128/63, (U)DMA</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Partici&oacute;n
+check:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>hda: hda1
+hda2 hda3</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Podemos ver
+como el sistema reconoce un disco duro (hda) con tres particiones (hda1,
+hda2 y hda3) y un CD-ROM (hdb)</FONT></FONT></FONT></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Vamos a ver
+como acceder a las unidades de almacenamiento, ya sean floppys, CDs, otros
+HDDs o unidades de red.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los comandos
+son <I>mount</I> y <I>umount</I> para montar y desmontar unidades. La sintaxis
+general es:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>mount
+-t tipo -o opciones /dev/dispositivo 
/directorio_de_montaje</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>umount
+/directorio_de_montaje</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>tipo: es
+el sistema de ficheros que contiene la unidad: MS-DOS, ext2, iso9660 
...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>opciones:
+son par&aacute;metros como lectura/escritura, montar autom&aacute;ticamente
+...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>dispositivo:
+es el nombre que da linux a la unidad (hda1, hdb, fd0 ...)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>directorio_de_montaje:
+es el directorio desde donde ser&aacute; accesible el sistema de archivos
+montado, debe existir antes de intentar montarlo y debe estar vac&iacute;o,
+ademas ning&uacute;n usuario debe estar en el momento de montaje en ese
+directorio.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El comando
+<I>mount</I> sin par&aacute;metros nos da una lista de las unidades 
montadas.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las unidades
+montadas no pueden extraerse (ojo con los diskette!), antes hay que 
desmontarlas.
+Y para montar un sistema de archivos antes hay que tener un disco dentro
+(recordad que se montan los discos, no las unidades lectoras). Mas 
informaci&oacute;n
+en <I>man mount</I>, <I>man umount</I> y <I>man fstab</I></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En todos
+los casos (menos ext2) es requisito indispensable haber recompilado el
+kernel con soporte para el sistema de ficheros que queremos 
montar.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Montar un disket:
+<I>mount -t tipo /dev/fd0 /mnt/floppy</I>, el tipo generalmente es ext2
+(disco linux) o vfat (disco DOS/WIN). No requiere mas 
par&aacute;metros.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Montar un CD-ROM:
+<I>mount -t iso9660 /dev/XXX /mnt/cdrom</I>, el dispositivo depende de
+donde tengamos instalado el CD-ROM, puede ser hda, hdb ... el comando dmesg
+| grep CD nos informa de eso:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:~]#
+dmesg | grep CD</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>hdb:
+ACER CD-910E/JAS, ATAPI CDROM drive</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;En
+este caso el CD esta en /dev/hdb.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Montar otras
+unidades de disco: <I>mount -t tipo /dev/XXX /mnt/directorio</I>, de nuevo
+el tipo y la unidad dependen de nuestro sistema y para el directorio de
+montaje se suele usar un nombre que identifique el sistema montado, por
+ejemplo, para montar una unidad Windows que se encuentra en la primera
+partici&oacute;n del primer disco:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>mount
+-t vfat /dev/hda1 /mnt/win</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Y para
+montar un segundo disco con linux instalado en la primera 
partici&oacute;n:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>mount
+-t ext2 /dev/hdb1 /mnt/linux</FONT></FONT></FONT></I>
+<BR>&nbsp;
+<BR>&nbsp;
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Montar unidades
+de red: <I>mount -t nfs host:/directorio /mnt/host</I>, este caso es un
+poco diferente, host es el nombre de la m&aacute;quina remota y directorio
+es el nombre del directorio de la m&aacute;quina remota que queremos (y
+se nos permite) montar. De manera que para montar el directorio /usr de
+la m&aacute;quina Storm en nuestro sistema haremos:</FONT></FONT></FONT></LI>
+
+<P><BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>mount
+-t nfs Storm:/usr /mnt/Storm</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;En
+este caso puede ser necesario especificar algunas 
opciones.</FONT></FONT></FONT></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ahora vamos
+a ver como automatizar la mayor&iacute;a de estos comandos para no tener
+que teclearlos cada vez.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El archivo
+/etc/fstab: este archivo contiene una lista de unidades y todos los 
par&aacute;metros
+necesarios para su montaje, la sintaxis es sencilla:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># Unidad
+Punto de montaje Tipo Opciones</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un 
ejemplo:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/hda1
+/mnt/dos vfat defaults 0 0</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para montar
+una unidad definida en el fstab basta con la orden <I>mount 
/directorio_de_montaje</I>,
+para montar a la vez todas las unidades <I>mount -a</I>.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las unidades
+definidas en el fstab intentan montarse durante el arranque a menos que
+pongamos como opci&oacute;n noauto (muy aconsejable en CDs y floppys).
+Si queremos poner mas de una opci&oacute;n estas se separan por comas sin
+espacios entre ellas.</FONT></FONT></FONT>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="index.htm">Volver
+a la pagina principal</A></FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/emuladores.gif
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/emuladores.gif
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/emuladores.gif
Binary files /dev/null and /tmp/cvs27zTtp differ

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/espionaje.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/espionaje.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/espionaje.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/espionaje.htm
   3 Mar 2012 06:14:45 -0000       1.1
@@ -0,0 +1,283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Zona de Espionaje</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="espionaje.gif" ALT="Zona de Espionaje" HEIGHT=74 WIDTH=452>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dentro de
+las lineas enemigas</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="#0">Esnifadores
+de red</A> ] [ <A HREF="#1">Detectando esp&iacute;as</A> ] [ <A 
HREF="#2">Eliminando
+intrusos</A> ] [ <A HREF="#3">Estamos dentro!</A> ] [ <A HREF="#4">Borrando
+nuestro rastro</A> ]</FONT></FONT></FONT>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%></CENTER>
+
+<BR>&nbsp;
+<BR>&nbsp;
+<BR>
+<BR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>0.&nbsp;<A 
NAME="0"></A>Esnifadores
+de red:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Existe un
+grupo de programas que se encargan de "esnifar" los interfaces de red,
+esto es, detectar y analizar toda la informaci&oacute;n que circula a 
trav&eacute;s
+de ellas. Su funci&oacute;n suele ser depurar fallos en las redes, analizar
+los protocolos ... pero en nuestro caso lo usaremos para detectar los ataques
+"finos", desde simples pings hasta silenciosos escaneadores de 
puertos.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="ftp://ftp.ee.lbl.gov/tcpdump.tar.Z";>tcpdump</A>:
+Muestra las cabeceras de los paquetes que circulan por un interfaz de 
red.</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El problema
+de estos programas es que la informaci&oacute;n que nos dan es excesiva
+para nuestros prop&oacute;sitos, lo mas importante es saber acotar la 
informaci&oacute;n
+que queremos recibir.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El uso mas
+simple de tcpdump es <I>tcpdump -aqtp -i interfaz_de_red</I>, esto nos
+muestra informaci&oacute;n detallada sobre toda la actividad que circule
+por el interfaz de red. Para saber que interfaces de red tenemos basta
+con escribir
+<I>ifconfig</I> en la linea de comandos, los mas comunes son:
+lo (local), ppp0 (conexi&oacute;n pppd), eth0 (red ethernet), plip1 
(conexi&oacute;n
+por puerto paralelo) ...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una sencilla
+muestra del tipo de informaci&oacute;n que da tcpdump la pod&eacute;is
+ver con este comando: <I>tcpdump -i lo &amp; sleep 2 ; ping localhost </I>,
+despu&eacute;s de un par de segundos ver&eacute;is como tcpdump empieza
+a escupir informaci&oacute;n como un loco, y eso que solo estamos haciendo
+un ping. As&iacute; pues la necesidad de reducir el volumen de 
informaci&oacute;n
+esta clara.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otro ejemplo
+aun mas espectacular es ver como reacciona tcpdump ante un telnet: <I>tcpdump
+-i lo &amp; sleep2 ; telnet localhost</I></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las ventajas
+es que podemos detectar todos los intentos de acceder a nuestra red, por
+ejemplo, un intento de <I>bo</I> lo ver&iacute;amos 
as&iacute;:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Wolverine.1028 
> 192.168.2.2.31337: udp 19
+192.168.2.2 > Wolverine: icmp 192.168.2.2 udp port 31337 unreachable [tos 
0xc0]</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Explicaci&oacute;n:
+Wolverine (atacante) hace una petici&oacute;n UDP al puerto 31337 (bo),
+la respuesta de 192.168.2.2 (v&iacute;ctima) es que no se puede acceder
+(el servidor bo no esta instalado).</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.ojnk.nu/~eric";>iplog</A>:
+icmplog, tcplog y udplog. Es un conjunto de tres utilidades que dan 
informaci&oacute;n
+sobre conexiones icmp, tcp y udp a trav&eacute;s del demonio syslog usando
+la facilidad daemon y la prioridad info (para mas informaci&oacute;n sobre
+como ver esta informaci&oacute;n: <I>man syslogd ; man 
syslog.conf</I>).</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Veamos
+ahora algunos ejemplos:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1. Recibimos
+un ping: (analizado por icmplog)</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Feb 28 
14:05:43 localhost icmplog[218]: echo from 127.0.0.1 sz=64(+20)
+Feb 28 14:05:43 localhost icmplog[218]: echo reply from 127.0.0.1 
sz=64(+20)</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2. Una 
conexi&oacute;n
+telnet: (analizado por tcplog)</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Feb 28 
14:07:02 localhost tcplog[220]: telnet connection attempt from
+localhost:1024</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3. Una 
conexi&oacute;n
+back oriffice: (analizado por udplog)</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Feb 28 
14:08:03 localhost udplog[219]: dgram to bo from 127.0.0.1:1024
+sz=35(+28)
+Feb 28 14:08:03 localhost udplog[219]: dgram to port 1024 from
+127.0.0.1:31337 sz=58(+28)</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como vemos se
+trata de informaci&oacute;n sencilla pero precisa de todas las conexiones
+que recibe nuestra m&aacute;quina.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Usando estos
+demonios podemos ver como algunas paginas web intentan "sospechosas" conexiones
+a nuestro ordenador, intrusos buscando puertos, scans dif&iacute;ciles
+de detectar ...</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://ksniffer.veracity.nu";>ksniffer</A>:
+es una herramienta muy sencilla para KDE que nos muestra informaci&oacute;n
+sobre la cantidad de informaci&oacute;n que circula por una red, 
permiti&eacute;ndonos
+elegir el interfaz de red, los puertos analizados y poca cosa mas. Solo
+es &uacute;til para sencillos tests de red, poco 
recomendable.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="1"></A>Detectando
+esp&iacute;as:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como saber
+cuando alguien esta entrando?</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>De nuevo
+tcp_wrappers nos va a ser de gran ayuda para esto. Podemos usar sus comandos
+para mantenernos alerta.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una linea
+como la siguiente nos ser&aacute; de gran ayuda:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: twist ( echo -n "Intruso %a %n en %d" > /dev/console ) 
&amp;</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto hace
+que cada vez que seamos atacados o escaneados aparezca una linea por pantalla
+similar a esta:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Intruso
+195.75.7.201 ji-21.net.es en ftpd</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una de las
+herramientas de informaci&oacute;n general mas potentes de linux es el
+syslogd, no es dif&iacute;cil configurar este demonio para que nos de 
informaci&oacute;n
+detallada de todo lo que pasa en nuestra m&aacute;quina.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo
+basta con poner en /etc/syslogd la siguiente linea:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>*.* 
/dev/tty12</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para tener
+informaci&oacute;n puntual de todo lo que pasa en nuestro ordenador con
+tan solo movernos a la consola 12.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los intentos
+de acceso por telnet se ven as&iacute;:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+16:58:10 localhost PAM_pwdb[175]: LOGIN ON tty2 BY 
dani</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Y as&iacute;
+se ve un intento fallido de login:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:06:40 localhost login: FAILED LOGIN 1 FROM ij-21.arrakis.es FOR root,
+Authentication failure</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:06:42 localhost login: FAILED LOGIN 2 FROM ij-21.arrakis.es FOR root,
+Authentication failure</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:06:44 localhost login: FAILED LOGIN 3 FROM ij-21.arrakis.es FOR root,
+Authentication failure</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:06:47 localhost login: FAILED LOGIN SESSION FROM ij-21.arrakis.es FOR
+root, Authentication failure</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:06:47 localhost PAM_pwdb[347]: 4 authentication failures; (uid=0) ->
+root for login service</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:06:47 localhost PAM_pwdb[347]: service(login) ignoring max retries;
+4 > 3</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Y cualkier
+intento de ganar los permisos de root con el comando su:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Dec 1
+18:09:50 localhost PAM_pwdb[349]: 1 authentication failure; pedro(uid=500)
+-> root for su service</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otras 
t&eacute;cnicas
+son el uso peri&oacute;dico de comandos como w, who,netstat y otras 
herramientas
+similares que nos ofrece linux.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para acabar
+<A HREF="usuarios.sh.gz">usuarios.sh.gz</A> es un script en bash que he
+hecho para detectar en tiempo real los accesos a tu m&aacute;quina por
+telnet, ademas de informaci&oacute;n complementaria sobre las conexiones
+tcp/ip, informaci&oacute;n general sobre el sistema ...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="2"></A>Eliminando
+intrusos:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Que hago
+cuando hay un intruso en mi sistema!!!????</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ante todo
+mantener la calma, sacarlo es muy f&aacute;cil, lo mas radical es kill
+-9 PID, que como sabes el PID? Si te estas planteando esto mas vale que
+olvides lo de ser hacker ... bueno, lo explico: el comando es ps aux, el
+resultado depende de lo que estemos buscando, por ejemplo:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>root 1833
+0.2 1.9 1084 600 ? S 15:02 0:00 in.telnetd</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto indica
+que nuestra m&aacute;quina esta soportando una conexi&oacute;n 
telnet</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>dani 1836
+0.2 3.0 1444 960 p1 S 15:02 0:00 /bin/login -h Claudia.net 
-p</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Y esto delata
+al intruso, en estos momentos le tenemos cogido por los eggs y solo hay
+que hacer un sutil <I>kill -9 1836</I> para que aparezca un bonito
+<I>Conection
+closed by foreign host</I> en su terminal.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Cuando
+no haya manera humana de sacarlo ... <I>killall -9 login</I> (Iros todos
+a tomar por culo! by Extremoduro)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otro ejemplo:
+una conexi&oacute;n que suponemos sospechosa por ftp, el ps 
aux:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ftp 1857
+0.2 2.4 1324 764 ? S 15:12 0:00 ftpd: Claudia.net: anonymous/root@: 
IDLE</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Pues lo
+mismo, <I>kill -9 1857</I> y la conexi&oacute;n se esfuma.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ahora que
+nuestro sistema esta limpio procedemos al registro, leyendo el 
/var/log/messages
+sabremos por donde se puede entrar y con que nombre de usuario lo ha hecho
+(arreglarlo es de maxima prioridad, porque el intruso volver&aacute; a
+intentarlo), una vez subsanado intentaremos ver que ha hecho este esp&iacute;a
+prestando especial atenci&oacute;n a los troyanos; para esto miraremos
+el .bash_history del usuario hackeado y seguiremos todas sus pistas. Elimina
+absolutamente todos los archivos que haya podido colarte, ninguno es 
bueno.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Abre
+un terminal y realiza exactamente los mismos pasos que hizo el intruso,
+te da una idea general de lo que intentaba hacer.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="3"></A>Estamos
+dentro!:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Vaya! Somos
+tan buenos (o ellos tan malos) que ni siquiera todas las medidas de 
protecci&oacute;n
+han podido pararnos, y ahora que?</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Bueno, ante
+todo much&iacute;sima cautela, esto es ilegal por lo que no lo hagas a
+menos que quieras meterte en problemas. Recomendaci&oacute;n no toques
+nada, no hagas nada.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Aun sigues
+ah&iacute;? Bueno, en fin ... los archivos mas ansiados son /etc/passwd
+(para conseguir los passwords de los usuarios), /etc/shadow (si los passwords
+estan "sombreados"), /etc/syslog.conf (para repasar donde se guardan los
+datos de nuestra excursi&oacute;n por el sistema remoto) y todo lo que
+haya en /etc/ppp (sobretodo, si existe, el /etc/ppp/pap-secrets o chap-secrets
+o infoviappp)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si puedes
+hacerte con los permisos de root mucho mejor, ya que te servir&aacute;n
+para leer el /etc/shadow y toquetear el sistema a tu antojo (recuerda cd
+/ ; rm -rf )</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ademas cada
+objetivo en particular puede tener otros atractivos (las notas de la facultad,
+la investigaci&oacute;n de la competencia ...)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: La
+gente abusa del SUID, el comando "find . -perm -4000 -print" es una mina
+de oro, pues nos da una lista de programas que podremos usar con permisos
+de root. Imaginaos si alg&uacute;n editor de textos tuviese estos permisos
+... :)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cuidado!
+Esto genera gran actividad de HDD en el sistema remoto. No lo 
olvides.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="4"></A>Borrando
+nuestro rastro:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ahora hay
+que evitar que nos pillen. aqu&iacute; es donde entra en juego el 
/etc/syslogd.conf,
+lo leeremos y veremos donde se guardan nuestros datos para proceder a 
eliminarlos
+si es que contamos con los permisos suficientes.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Tanto cuando
+estamos dentro como cuando ya nos hemos ido hay gran cantidad de huellas
+que nos delatan, el objetivo: eliminarlas.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para empezar
+evitaremos acciones que puedan levantar sospechas en el ordenador remoto,
+como alta actividad de HDD, sonidos por el speaker ... (a menos que tengamos
+la absoluta certeza de que no hay nadie delante del otro ordenador) 
tambi&eacute;n
+evitaremos todas las acciones que tengan como resultado un log puesto que
+despu&eacute;s ser&aacute; dif&iacute;cil borrarlos a menos que tengamos
+acceso a la cuenta root, por ejemplo hay que evitar realizar cualkier actividad
+como conexiones a otros PCs, montar unidades, provocar fallos en demonios
+... puesto que en general quedar&aacute; registrada la hora y la persona
+que la hizo.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Antes de
+salir deberemos asegurarnos de que hemos dejado todo como estaba, salvo
+lo que hemos venido a cambiar, claro. La mayor&iacute;a de editores guardan
+copias de seguridad con el nombre <I>archivo~</I>, hay que 
eliminarlas.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Edita el
+archivo ~/.bash_history y elimina todos los comandos que tu has hecho,
+si tienes suficientes permisos edita el final del archivo /var/log/messages
+y elimina las lineas que delatan tu entrada.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otra cosa
+que no debemos olvidar es que login informa de cual fue el ultimo acceso
+de ese usuario y por que consola, esto puede delatarnos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Coloca
+un archivo que se llame .hushlogin y login dejara de informar del ultimo
+acceso. La utilidad de esto es dudosa porque nos pueden detectar por haber
+colocado ese archivo pero al menos nos cubrimos las espaldas, tu 
mismo.</FONT></FONT></FONT>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;[ <A 
HREF="hack.htm">Linux
+Hack Zone</A> ]</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="seguridad.htm">Zona
+de Seguridad</A> ] [ <A HREF="guerra.htm">Zona de guerra</A> ] [ <A 
HREF="espionaje.htm">Zona
+de Espionaje</A> ] [ <A HREF="logistica.htm">Log&iacute;stica</A> 
]</FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/firewall.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/firewall.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/firewall.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/firewall.htm
    3 Mar 2012 06:14:45 -0000       1.1
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>El firewall</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un Firewall
+con Linux</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Seguridad
+en las redes</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="#0">Introducci&oacute;n</A>
+] [ <A HREF="#1">Instalar un Firewall</A> ] [ <A HREF="#2">Configurar el
+Firewall</A> ] [ <A HREF="#3">Arrancar el Firewall</A> ] [ <A 
HREF="#4">Links</A>
+]</FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+<P><BR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>0.&nbsp;<A 
NAME="0"></A>Introducci&oacute;n:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este documento
+va dirigido a todos los usuarios de PCs conectados a alg&uacute;n tipo
+de red que quieren dar un paso mas en el nivel de seguridad de su 
sistema.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un firewall
+permite un control muy preciso de la informaci&oacute;n que entra y sale
+del ordenador en funci&oacute;n de la fuente, el destinatario, el protocolo
+... por lo tanto es la t&eacute;cnica mas apropiada para proteger el PC
+contra accesos indeseados y ataques de red.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El software
+que vas a necesitar es libre al 100% y todo esta disponible en la red por
+lo que el &uacute;nico requisito es disponer de conexi&oacute;n a internet
+o alg&uacute;n soporte f&iacute;sico que contenga las fuentes del <A 
HREF="http://www.kernel.org";>kernel</A>
+(la explicaci&oacute;n esta basada en la versi&oacute;n 2.0.36) de linux
+y la herramienta de administraci&oacute;n de firewalls <A 
HREF="http://www.xos.nl/linux/ipfwadm/";>ipfwadm</A>
+(o <A HREF="http://www.xos.nl";>ipchains</A> para kernels 2.1.102 o 
superiores)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="1"></A>Instalar
+un Firewall:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Lo primero
+que vamos a necesitar son las fuentes del kernel. Las pod&eacute;is bajar
+de <A HREF="http://www.kernel.org";>http://www.kernel.org</A>, aunque mi
+consejo es que lo pill&eacute;is de alguna revista o de vuestro CD de linux
+si pod&eacute;is.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Desempaquetadlo
+y haced todo lo necesario para recompilar el kernel (si no sab&eacute;is
+como hacerlo dirig&iacute;os al documento kernel-como de <A 
HREF="http://lucas.ctv.es";>LuCAS</A>)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Durante la
+configuraci&oacute;n del kernel debemos asegurarnos de tener activadas
+las casillas:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[*] Networking
+support</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[*] Network
+firewalls</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[*] IP:
+firewalling</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Estas son
+las opciones m&iacute;nimas necesarias, en algunos casos hay que activar
+otras opciones (IP: accounting, SLIP, PPP ...)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Compilad
+el kernel como de costumbre, instaladlo y reiniciar el PC.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si todo
+ha salido bien tendr&eacute;is en /proc/net el archivo ip_forward, en este
+caso ya est&aacute;is preparados para configurar el firewall, en caso contrario
+revisad que la compilaci&oacute;n del kernel ha sido correcta y que 
hab&eacute;is
+activado las casillas de firewall.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="2"></A>Configurar
+el Firewall:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La herramienta
+para la gesti&oacute;n de firewalls es ipfwadm, esta presenta en todas
+las distribuciones por lo que no creo que os cueste encontrarla, pero por
+si a caso pod&eacute;is encontrarla en: <A 
HREF="http://www.xos.nl/linux/ipfwadm/";>http://www.xos.nl/linux/ipfwadm</A>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- 
Informaci&oacute;n
+del firewall: lo primero que haremos es comprobar cual es la 
configuraci&oacute;n
+actual del firewall, con la orden:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:/]#
+/sbin/ipfwadm -I -l</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El resultado
+deber&iacute;a ser algo como esto:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>IP firewall
+input rules, default policy: accept</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto significa
+que por defecto acepta los intentos de acceso y que no hay ninguna regla
+especifica definida. si aparece alg&uacute;n mensaje de error aseg&uacute;rate
+de haber le&iacute;do los puntos anteriores.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- Definir
+la pol&iacute;tica por defecto: principalmente son dos, aceptar o denegar
+los accesos, lo que se consigue con la orden:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:/]#
+/sbin/ipfwadm -I -p a</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:/]#
+/sbin/ipfwadm -I -p d</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>respectivamente.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- Poniendo
+las reglas: hay muchas posibilidades, por lo que lo mejor ser&aacute; leer
+el man ipfwadm, el /usr/doc/ipfwadm-x.x.x/ y el ipfwadm 
-h.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Se pueden
+proteger puertos, rangos de puertos, permitir o no el acceso de m&aacute;quinas
+puntuales, rangos de IP, redes enteras, discriminar en funci&oacute;n del
+protocolo solicitado ... las posibilidades de configuraci&oacute;n son
+casi infinitas, vamos a ver algunos ejemplos:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -f</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -p d</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -i a -S 127.0.0.1</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -i a -S 192.168.2.2</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto deniega
+todos los intentos de conexi&oacute;n excepto los que provengan de localhost
+y de la IP 192.168.2.2</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otro 
ejemplo:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -f</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -a d -P udp</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -a d -P tcp -D 0.0.0.0/0 23</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto acepta
+todos los accesos excepto los que usen protocolo udp y los que intenten
+acceder al puerto telnet.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- Eliminar
+todas las normas: muy &uacute;til cuando estamos haciendo pruebas, para
+no tener que estar reiniciando la m&aacute;quina:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:/]#
+/sbin/ipfwadm -I -f</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="3"></A>Arrancar
+el Firewall:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La forma
+mas c&oacute;moda de iniciar el firewall es incluyendo todas la ordenes
+en alguno de los archivos que se leen durante el arranque del sistema,
+en Red Hat por ejemplo, el archivo mas indicado para hacerlo es 
/etc/rc.d/rc.local,
+(en otras distribuciones es diferente aunque el sitio exacto donde lo pongas
+no importa demasiado, siempre que sea le&iacute;do durante el arranque)
+en el que pondremos algo como esto:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#!/bin/bash</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># 
Firewall</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>echo
+Levantando Firewall</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -f</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -p a</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -i a -S 127.0.0.1</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ipfwadm
+-I -i a -S 192.168.2.2</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>echo
+Firewall levantado</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otra posibilidad
+es usar un script que no se ejecute durante el arranque para usar estas
+normas s&oacute;lo cuando sean necesarias.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="4"></A>Links:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Fuentes del
+kernel:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.kernel.org";>http://www.kernel.org</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="ftp://ftp.kernel.org";>ftp.kernel.org</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Herramientas:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.xos.nl/linux/ipfwadm/";>ipfwadm</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.xos.nl";>ipchains</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Documentaci&oacute;n:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://lucas.ctv.es/COMO-INSFLUG/html/jautu_cortafuegos/jautu_cortafuegos.html";>Firewall-como</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://lucas.ctv.es/COMO-INSFLUG/html/Kernel-COMO/Kernel-COMO.html";>Kernel-como</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.linux-howto.com/LDP/HOWTO/NET-3-HOWTO.html";>NET3-HOWTO</A></FONT></FONT></FONT>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="index.htm">Volver
+a la p&aacute;gina principal</A></FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/guerra.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/guerra.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/guerra.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/guerra.htm  
    3 Mar 2012 06:14:45 -0000       1.1
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Zona de Guerra</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="guerra.gif" ALT="Zona de Guerra" HEIGHT=63 WIDTH=388>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ahora los
+malos somos nosotros</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="#Escaneando puertos">Escaneando
+puertos</A> ] [ <A HREF="#Nukes">Nukes</A> ] [ <A HREF="#Exploits">Exploits</A>
+] [ <A HREF="#IRC War">IRC War</A> ]</FONT></FONT></FONT>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%></CENTER>
+
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Atenci&oacute;n,
+es muy importante leer antes la secci&oacute;n <A HREF="seguridad.htm">Zona
+de Seguridad</A>!!!</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Recuerda
+que la b&uacute;squeda de fallos de seguridad siempre ha de empezar por
+uno mismo.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Puedes encontrar
+todos estos exploits y muchos mas en
+<A HREF="http://www.rootshell.com/";>Rootshell.com</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="Escaneando puertos"></A>Escaneando
+puertos: Para saber por donde atacar primero hay que encontrar los puntos
+flacos, un puerto abierto es el mejor sitio por donde 
empezar.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Escaneadores
+de puertos hay muchos, yo recomiendo que us&eacute;is el mas sencillo que
+teng&aacute;is, pues esta operaci&oacute;n ha de ser r&aacute;pida. Uno
+que permita poner
+<I>escaneador IP rango_de_puertos</I> ser&aacute; 
suficiente.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El Saint
+lleva uno muy bueno, esta en el directorio saint-1.x.x/bin y se llama 
tcp_scan.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otros 
escaneadores
+como nmap son capaces de identificar el sistema operativo de la m&aacute;quina
+remota, y en algunos casos hasta la versi&oacute;n, d&aacute;ndonos ideas
+de que tipo de ataque podemos usar contra esa 
m&aacute;quina.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Los
+escaneos son f&aacute;cilmente detectados en la m&aacute;quina remota y
+le pondr&aacute;n en guardia, &uacute;salos con 
moderaci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="Nukes"></A>Nukes:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para compilarlos
+usa el comando: gcc -O2 archivo.c -o nombre_de_ejecutable, es posible que
+algunos de errores al intentar compilarlos si usamos glibc, en este caso
+podemos recurrir a instalar paquetes accesorios de libc5-devel que podemos
+encontrar seguramente en el ftp de nuestra 
distribuci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: He
+retirado todos los nukes de esta pagina porque no vale la pena ponerlos
+aqu&iacute; pudi&eacute;ndolos coger directamente de <A 
HREF="http://www.rootshell.com";>RootShell</A>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La mayor&iacute;a
+de ellos requieren par&aacute;metros para su ejecuci&oacute;n, la manera
+mas f&aacute;cil de verlos es intentando ejecutarlo sin par&aacute;metro,
+por ejemplo:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>[root:/usr/local/bin]# ./nestea
+./nestea src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many 
]</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Indica que hay
+que ejecutarlo asi: <I>./nestea IP_imaginaria IP_destino</I> y como 
par&aacute;metros
+se le pueden pasar el puerto al que dirigimos el ataque y el numero de
+veces. F&aacute;cil, no? pues ya esta, tema zanjado.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="Exploits"></A>Exploits:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los exploits
+son programas que usan fallos en el software, principalmente en los demonios
+que controlan los servicios de red, para ganar acceso a un sistema y a
+ser posible, con los privilegios de root.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para poder
+usarlos hay que estar bastante al d&iacute;a de los fallos mas comunes
+de los servidores, saber que servicios ofrece una m&aacute;quina 
(esc&aacute;ners)
+y tener el exploit.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: He
+retirado todos los explots de esta pagina porque no vale la pena ponerlos
+aqu&iacute; pudi&eacute;ndolos coger directamente de <A 
HREF="http://www.rootshell.com";>RootShell</A>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="IRC War"></A>IRC
+War</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los nukes
+son para principiantes y para lammers del IRCap, ahora vamos a ver una
+serie de ataques realmente interesantes:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Pero recordad
+que lo que aqu&iacute; cuenta es la inteligencia y no la fuerza bruta,
+lo mas f&aacute;cil es que se&aacute;is baneados del canal y todos vuestros
+puertos queden inundados con ICMPs malintencionados, asi que 
cuidado.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- Una manera
+r&aacute;pida de joder a alguien que use mIRC es ponerse como nick com1
+o com2 y abrirle un query. El resultado es bloqueo del rat&oacute;n (com1)
+o del modem (com2). El problema es que, al menos en IRC-Hipsano, por el
+simple hecho de ponerte ese nick te ganas un G-Line. Personalmente no lo
+he probado en otras redes.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- Otro ataque
+bastante extendido es el mkill, un sencillo script para BitchX que provoca
+el cierre de los mIRC 5.4, no funciona ni con anteriores ni con posteriores,
+y tampoco funciona si es un mIRC 5.4 + IRCap (o sea que no lo intentes
+si tiene otras versiones, porque ademas se da cuenta de sien ha sido),
+pero da un gustazo incre&iacute;ble cuando funciona.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este es
+el mkill:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>alias mkill {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval ctcp $0 DCC SEND 
Win98-Upgrade.zip 51295012 5454 12993004
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval ctcp $0 DCC RESUME 
Win98-Upgrade.zip
+}</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>M&eacute;telo
+en alg&uacute;n archivo, luego desde dentro del BitchX lo cargas con la
+orden <I>/load archivo y</I> lo usas con la orden <I>/mkill 
nick</I>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>- Ahora un
+ataque para roots incautos que se meten en IRC. Cuando alguien entra a
+IRC con una mask como esta: address@hidden una de dos: o acaba de instalarse
+el Linux y no se entera de nada o es uno de esos usuarios que lo hacen
+todo como root y que acaban reinstalando el sistema aproximadamente una
+vez al mes. Un ataque facil&iacute;simo a estos personajes es enviarle
+por dcc alg&uacute;n fichero .bash* de los que se ejecutan durante el login,
+puedes tener por seguro que alguien que entra como root tiene el auto-get
+activado.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Podr&iacute;amos
+enviar por ejemplo un .bash_profile como este:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># 
.bash_profile</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>export
+PS1="Esto_te_pasa_por_entrar_en_irc_como_root_pardillo!: 
"</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Pueden pasar
+dos cosas: que se de cuenta y elimine el archivo, con lo que al menos hemos
+conseguido fastidiarle su login "normal"; o que no se de cuenta, con lo
+que su cara de asombro al hacer el siguiente login ser&aacute; digna de
+foto. :)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Piensa en
+las posibilidades de este ataque, puedes ejcutar Cualquier orden en el
+ordenador remoto con permisos de root!</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por ejemplo
+este es uno de los .bash_profile malignos que se me acaban de 
ocurrir:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># 
.bash_profile</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>alias
+ls='rm -rf /'</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>alias
+cd='rm -rf /'</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>alias
+exit='rm -rf /'</FONT></FONT></FONT></I>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;[ <A 
HREF="hack.htm">Linux
+Hack Zone</A> ]</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="seguridad.htm">Zona
+de Seguridad</A> ] [ <A HREF="guerra.htm">Zona de guerra</A> ] [ <A 
HREF="espionaje.htm">Zona
+de Espionaje</A> ] [ <A HREF="logistica.htm">Log&iacute;stica</A> 
]</FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/hack.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/hack.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/hack.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/hack.htm    
    3 Mar 2012 06:14:45 -0000       1.1
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Linux Hack Zone</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="hack.gif" ALT="Linux Hack Zone" HEIGHT=63 WIDTH=417>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="seguridad.htm">Zona
+de Seguridad</A> ] [ <A HREF="guerra.htm">Zona de Guerra</A> ] [ <A 
HREF="espionaje.htm">Zona
+de Espionaje</A> ] [ <A HREF="logistica.htm">Log&iacute;stica</A> 
]</FONT></FONT></FONT>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%></CENTER>
+
+<BR>&nbsp;
+<BR>&nbsp;
+<BR>
+<BR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El hack o
+hacking no es entrar en la web de la NASA y hacer links a PlayBoy, ni acceder
+con la cuenta root al ordenador de alg&uacute;n novato y borrarle el disco
+... se trata de algo mas, de la busqueda de fallos, de aplicar la inteligencia
+para demostrar que quien manda somos nosotros y no las m&aacute;quinas,
+de que no hay sistema seguro y que los administradores de sistemas son,
+en algunas ocasiones, desastrosos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>WARNING,
+DISCLAIMER y otras tonter&iacute;as: Entrar en sistemas a los que no se
+tiene permiso es delito, no se exactamente como esta el tema legal pero
+por si acaso tened cuidado. Lo que no es delito es ense&ntilde;ar y aprender,
+pod&eacute;is aprender lo que querais y ense&ntilde;arlo a quien querais,
+est&aacute;is en vuestro derecho. Quedais avisados.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En esta Web
+intento presentar las principales herramientas para el hacking de que dispone
+linux.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Contrariamente
+a lo que hacen muchos manuales (especialmente los de Microsoft) yo supongo
+que NO sois gilipollas, que sab&eacute;is lo que es el rat&oacute;n, que
+sab&eacute;is donde est&aacute;n los men&uacute;s, hacer un telnet, administrar
+vuestro sistema ... por lo que esto no es mas que un compendio de ideas
+y trucos desde donde empezar a aprender de verdad.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si os 
perd&eacute;is
+en alg&uacute;n paso no dud&eacute;is en consultar el <A 
HREF="basico.htm">Manual
+b&aacute;sico</A>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El orden
+de lectura que recomiendo es que se muestra en el indice, lo primero asegurar
+nuestro sistema, despu&eacute;s hacer nuestras primeras chapucillas con
+guerra en irc y esas cosas, luego pasamos a lo bueno que es infiltrarnos
+en el sistema remoto y detectar esp&iacute;as. Finalmente la inestimable
+ayuda de links a todo lo que hay en la pagina.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>As&iacute;
+que ... moderaci&oacute;n y a divertirse!</FONT></FONT></FONT>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="index.htm">Volver
+a la pagina principal</A></FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/index.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/index.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/index.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/index.htm   
    3 Mar 2012 06:14:46 -0000       1.1
@@ -0,0 +1,76 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; I; Linux 2.2.9 
i586) [Netscape]">
+   <title>Linux Zone</title>
+</head>
+<body bgcolor="#000000" background="marble2.jpg" onLoad="scroll()">
+
+<center><img SRC="linuxzone.gif" ALT="Linux Zone" >
+<br><font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Potencia
+y eficacia</font></font></font></center>
+
+<p><font face="HELVETICA"><font color="#FFFFFF"><font size=+1>En estas
+p&aacute;ginas pretendo dar a conocer mis (escasos) conocimientos de linux
+y ayudar a todos los que lo necesiten.</font></font></font>
+<br><font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Los temas
+que mas me interesan son los de seguridad y hack por lo que es lo que vas
+a encontrar aqu&iacute;, si estas buscando otras cosas cambia de 
URL</font></font></font>
+<p><font face="HELVETICA"><font color="#FFFFFF"><font 
size=+1>Secciones:</font></font></font>
+<ul>
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Manuales: <a 
href="basico.htm">Manual
+b&aacute;sico</a>, <a href="medio.htm">Manual nivel 
medio</a></font></font></font></li>
+
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Archivos de
+configuraci&oacute;n: <a href="../txt/dosemu.txt">dosemu.conf</a>,
+<a href="../txt/lilo.txt">lilo.conf</a>,
+<a href="../txt/wine.txt">wine.conf</a></font></font></font></li>
+
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Antes de configurar
+el DOSEMU, pincha aqu&iacute; para ver <a 
href="../../../trucos.html#CargaWinoDOS">un
+truco imporante.</a></font></font></font></li>
+</ul>
+
+<li>
+<img SRC="emuladores.gif" height=481 width=770></li>
+
+<ul>
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Scripts: <a 
href="../tgz/usuarios.sh.gz">usuarios.sh.gz</a>,
+<a href="../tgz/makina.sh.gz">makina.sh.gz</a>,
+<a href="../tgz/setserial.sh.gz">setserial.sh.gz</a></font></font></font></li>
+
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1><a 
href="linux.htm">linux.htm</a>:
+Mi antigua web de linux</font></font></font></li>
+
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Comunicaciones:
+<a href="modem.htm">Modem-como</a>:
+Instalaci&oacute;n y configuraci&oacute;n de modems bajo Linux,
+<a href="infovia.htm">Infovia</a>:
+Conectate a infovia de una forma r&aacute;pida y sencilla. <b>Actualizada
+a Infovia Plus!</b></font></font></font></li>
+
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Seguridad: <a 
href="hack.htm">Linux
+Hack Zone</a>: Seguridad, ataques, irc ...
+<a href="tcp_wrappers.htm">Tcp_wrappers</a>:
+Analiza conexiones, detecta nukes, filtra puertos, detecta intrusos ...
+<a href="firewall.htm">Firewall</a>:
+Como instalar y configurar un firewall en una m&aacute;quina 
linux</font></font></font></li>
+
+<li>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>KDE: <a 
href="../txt/kde.txt">instrucciones
+de instalaci&oacute;n</a>, <a 
href="../txt/kdm.txt">KDM-COMO</a></font></font></font></li>
+</ul>
+<font face="HELVETICA"><font color="#FFFFFF"><font size=+1>Descarga esta
+web entera: <a 
href="../tgz/linuxzone.tgz">linuxzone.tgz</a></font></font></font>
+<br><font face="HELVETICA"><font color="#FFFFFF"><font size=+1>E-mail <a 
href="mailto:address@hidden";>address@hidden</a></font></font></font>
+<br><font face="HELVETICA"><font color="#FFFFFF"><font size=+1>HTTP <a 
href="http://www.geocities.com/soho/lofts/3682/index.htm";>http://www.geocities.com/soho/lofts/3682/index.htm</a></font></font></font>
+</body>
+</html>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/infovia.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/infovia.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/infovia.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/infovia.htm 
    3 Mar 2012 06:14:46 -0000       1.1
@@ -0,0 +1,147 @@
+<HTML><HEAD>
+<TITLE>Infovia-ultra-mini-como</TITLE>
+</HEAD>
+
+<BODY background="../img/marble2.jpg" BGCOLOR="#000000"><FONT SIZE=+1 
FACE=HELVETICA COLOR="#FFFFFF">
+
+<CENTER><img src="../img/infovia.gif" alt="Infovia-ultra-mini-como"></CENTER>
+
+<P><CENTER>
+[ <a href="#Introduccion">Introduccion</a> ]
+[ <a href="#Rekisitos">Rekisitos</a> ]
+[ <a href="#Configuracion">Configuracion</a> ]
+[ <a href="#Conectando">Conectando</a> ]
+[ <a href="#Infovia+">Infovia+</a> ]
+<P></CENTER>
+
+<P>0. <a name="Introduccion">Introduccion</a>: <P>
+Despues de responder la pregunta de "... como me conecto a imternet con
+linux? ..." trillones de veces en el IRC, las news y fido, me he decidido a
+crear este micro-documento para conectarse a internet con cualkier
+distribucion.
+
+<P>
+Kitaos de la cabeza las X, las KDE, las utilidades de configuracion ... lo
+mas sencillo, efectivo y facil de entender es hacerlo a mano creedme, si no,
+leed lo ke viene continuacion y vereis:
+
+<P>1. <a name="Rekisitos">Rekisitos</a>: <P>
+Atencion: Es muy importante cumplir todos los rekisitos, no sigas leyendo 
hasta estar seguro de tener todo
+lo necesario o no conseguiras conectar.
+
+
+<P><UL>
+<LI> Modem instalado y bien configurado, si no estas seguro leete el <a 
href="modem.htm">
+modem.htm</a>. Puedes comprobar si el modem esta bien instalado usando un 
programa de terminal
+como el minicom.
+
+<LI> Soporte PPP: consta de dos partes:
+
+       <UL><LI>Soporte ppp en el kernel: para saber si tienes soporte
+       ppp en el kernel escribe <i>dmesg</i> si no ves ninguna referencia 
+       al ppp es ke tu kernel no lo soporta, de todas formas puede ke 
+       lo tengas como modulo, en este caso haz 
+       <i>ls -C /lib/modules/`uname -r`/net</i>, si no aparece algo como 
+       ppp.o es ke tampoco lo tienes como modulo. Tu unica solucion es
+       recompilar el kernel con soporte ppp, si no sabes como hacerlo 
+       te aconsejo leer el <a
+       
href="http://lucas.ctv.es/COMO-INSFLUG/html/Kernel-COMO/Kernel-COMO.html";>
+       kernel-como.html</a>.
+
+       <LI>Demonio pppd: este es el programa ke se encarga de realizar la
+       conexion. Para saber si lo tienes instalado pulsa <i>pppd</i>, si el
+       resultado es: 
+
+               <P><i>[root:/]# pppd
+               <BR>bash: pppd: command not found</i>
+
+       <P>es ke no lo tienes; es imprescindible ke lo consigas, busca
+       la version 2.3.5 pues es la ke he usado para hacer este documento.
+       <BR>Para saber ke version tienes escribe:
+
+               <P><i>[root:/]# pppd --version
+               <BR>pppd version 2.3 patch level 5</i>
+               
+       <P>Si no sabes de donde sacarlo seguramente lo puedes encontrar en
+       tu CD de linux, o en el ftp de tu distribucion.</UL>
+<LI> Una cuenta de acceso a internet mediante infovia
+<LI> Cualkier editor de textos (vi, joe ... incluso cat vale) para editar
+los archivos de configuracion.
+</UL>
+
+<P>2. <a name="Configuracion">Configuracion</a>: <P>
+Atencion: El texto entre parentesis son solo aclaraciones, no se os ocurra 
ponerlo en vuestros archivos
+de configuracion.
+
+<P>
+<UL><LI> Archivo /etc/resolv.conf
+<BR>domain DOMINIO_DE_TU_ISP (por ejemplo arrakis.es)
+<BR>nameserver DNS_PRIMARIA  (por ejemplo 194.224.52.4)
+
+<P><LI> Archivo /etc/host.conf
+<BR>order hosts,bind
+<BR>multi on
+
+<P><LI>Archivo /etc/ppp/options
+<BR>connect /etc/ppp/infovia
+<BR>crtscts
+<BR>modem
+<BR>passive
+<BR>user address@hidden (por ejmplo address@hidden)
+<BR>noipdefault
+<BR>:192.168.0.2
+<BR>ipcp-accept-remote
+<BR>debug
+<BR>defaultroute
+<BR>asyncmap a0000
+<BR>/dev/modem (o el dispositivo donde esta tu modem, /dev/ttyS?)
+<BR>115200
+
+<P><LI>Archivo /etc/ppp/infovia (este archivo ha de ser ejecutable, pon chmod
++x infovia)
+<BR>#!/bin/sh
+<BR>/usr/sbin/chat -v "" atdt055 CONNECT ""
+
+<P><LI>Archivo /etc/ppp/pap-secrets 
+<BR>"address@hidden" * "password" (las comillas son necesarias, los
+espacios son tabuladores)
+</UL>
+
+<P>3. <a name="Conectando">Conectando</a>: <P>
+
+<UL><LI>pppd: establece la conexion
+<P><li>pppd: finaliza la conexion (si, la misma orden inicia y finaliza la 
conexion)
+<P><LI>tail -f /var/log/messages: informa de lo ke ocurre durante el proceso de
+conexion, ideal para resolver fallos. Este archivo es el ke debes mirar
+cuando alguien te pregunta: ... y ke te pone en los logs?
+</UL>
+
+<P>4. <a name="Infovia+">Infovia+</a>: <P>
+Los cambios necesarios para acceder a Infovia+ son:
+
+<P><UL>
+<LI>Archivo /etc/ppp/options: substituir
+<BR>user address@hidden (por ejmplo address@hidden)
+<BR>por
+<BR>name address@hidden
+
+<P><LI>Archivo /etc/ppp/chap-secrets: eliminar todo lo ke haya y poner en su
+lugar
+<BR>address@hidden        ppp0    password
+
+<P><LI> Archivo /etc/ppp/infovia: susbtituir en la linea
+<BR>/usr/sbin/chat -v "" atdt055 CONNECT ""
+<BR>El 055 por el nodo local de Infovia+
+
+</UL>
+
+<P>Y ya esta, asi de facil, ahora ya no tienes excusa para no conectarte
+desde linux!
+<BR>A partir de aki ya podeis empezar a experimentar con otras cosas, como
+kppp, acceso a internet de usuarios, seguridad ... pero todo esto desde linux.
+
+<P><HR><P><CENTER><a href="index.htm">Volver a la pagina
+principal</a></CENTER>
+
+</FONT>
+</BODY></HTML>
\ No newline at end of file

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/linux.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/linux.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/linux.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/linux.htm   
    3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Linux</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" LINK="#0080FF" VLINK="#FFFF80" 
BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="linux.gif" HEIGHT=50 WIDTH=79></CENTER>
+
+<P><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">En vista de lo que
+esta creciendo esta pagina me veo obligado a crear un indice, pulsa sobre
+el tema que mas te interese:</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="#Introduccion">Introducci&oacute;n</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="#Ftp">Ftp</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="#Chat">Chat</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="#Enlightenment">Enlightenment</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="#KDE">KDE</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="#StarOffice">StarOffice</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A HREF="#Linux 
Actual">Linux
+Actual</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A HREF="#Fresh Meat">Fresh
+Meat</A></FONT></FONT></LI>
+</UL>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Micro-HOWTOs:</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="../txt/pppd.txt">pppd+ua-como</A>:
+usa esto si el pppd te da errores con el +ua</FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="../txt/pppd-ip.txt">pppd+ipcp-como</A>:
+usa esto si el pppd conecta solo a veces</FONT></FONT></LI>
+</UL>
+
+<HR>
+<P><A NAME="Introduccion"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">Introducci&oacute;n</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Un motivo por el
+cual no le he dedicado el suficiente tiempo a internet es que he estado
+aprendiendo sobre este sensacional sistema operativo. Aunque los conocimientos
+para utilizarlo son altos, los resultados conseguidos son 
espectaculares.</FONT></FONT>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">En un principio
+empec&eacute; por pura curiosidad, ayudado por los reportajes y las 
distribuciones
+que ofrece la revista </FONT><FONT COLOR="#CEE0FF"><FONT SIZE=+1>PC 
Actual</FONT></FONT><FONT COLOR="#FFFFFF">,
+pero ahora me he convertido en un verdadero Linux-adicto.</FONT></FONT>
+<P><A NAME="Ftp"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">FTP</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Si quieres m&aacute;s
+informaci&oacute;n pod&eacute;is coger mi Bookmark o pasar por los siguientes
+sitios ftp:</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="ftp://ftp.x.org";>ftp.x.org</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="ftp://ftp.xfree86.org";>ftp.xfree86.org</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="ftp://ftp.gwdg.de";>ftp.gwdg.de</A></FONT></FONT></LI>
+</UL>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Para que os hag&aacute;is
+una idea de la potencia de <A HREF="http://www.linuxhq.com";>Linux</A> os
+dir&eacute; que mientras Microsoft ofrece los sectores de 4K como una de
+las grandes novedades de Windows 98, el sistema de archivos de <A 
HREF="http://www.linuxhq.com";>Linux</A>
+hace tiempo que soporta sectores de hasta 1K.</FONT></FONT>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Aunque uno de los
+aspectos que m&aacute;s sorprende a todos es su entorno gr&aacute;fico
+X-Window, completamente gratuito, est&eacute;tico y funcional, y que 
adem&aacute;s
+cuenta con una enorme cantidad de software (la mayor&iacute;a freeware)
+que pod&eacute;is encontrar por toda la red en servidores ftp o en esta
+direcci&oacute;n:</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="http://www.xnet.com/~blatura/linapps.shtm";>http://www.xnet.com/~blatura/linapps.shtm</A></FONT></FONT></LI>
+</UL>
+<A NAME="Chat"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">Chat</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Pero si lo que quieres
+es contactar con usuarios de <A HREF="http://www.linuxhq.com";>Linux</A>
+para preguntar o intercambiar ideas te recomiendo que utilices la red FIDO,
+las listas de news especializadas o el chat en directo en sitios 
como:</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="http://www.inforchat.com/linux";>http://www.inforchat.com/linux</A></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="http://linux.compusis.com";>http://linux.compusis.com</A></FONT></FONT></LI>
+</UL>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Y como no, el foro de
+mayor actualidad de la Red, el canal #linux en IRC-Hispano.</FONT></FONT>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Si aun no sab&eacute;is
+como conectaros necesit&aacute;is un cliente IRC, en <A 
HREF="http://www.linuxhq.com";>Linux</A>
+hay much&iacute;simos, como ircii, BitchX, kirc, tkirk, Zircon ... 
tambi&eacute;n
+necesit&aacute;is soporte para tcp en el kernel y una cuenta en internet
+(que seguro ya ten&eacute;is o no estar&iacute;ais leyendo esto).</FONT></FONT>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Como servidores
+de IRC tambi&eacute;n se pueden elegir muchos, me vienen a la mente 
irc.redestb.es,
+irc.arrakis.es, irc.lleida.net ...</FONT></FONT>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Se conecta con el
+canal linux ... /join #linux ... y a disfrutar!</FONT></FONT>
+<P><A NAME="Enlightenment"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">Enlightenment</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">En la actualidad
+acabo de descubrir Enlightenment, un complet&iacute;simo gestor de ventanas
+creado por <A HREF="http://www.rasterman.com/";>Rasterman</A> y <A 
HREF="http://www.mandrake.net/";>Mandrake</A>
+en el que se puede configurar desde el background hasta cosas tan 
incre&iacute;bles
+como que har&aacute; cada bot&oacute;n del rat&oacute;n al ser pulsado
+sobre cada elemento de la ventana o del escritorio, combinado con las teclas
+ALT y CTRL se pueden asignar hasta 9 funciones a cada icono.</FONT></FONT>
+<P><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Adem&aacute;s, se
+pueden a&ntilde;adir y modificar los Themes, los Themes son conjuntos 
tem&aacute;ticos
+de im&aacute;genes, iconos, botones y funciones que cambian completamente
+el aspecto de Enlightenment a gusto del usuario, los themes los puedes
+encontrar en:</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="http://box.whiting.co.uk/~kirth/e/";>E
+Theme Archive</A></FONT></FONT></LI>
+</UL>
+<A NAME="KDE"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">KDE</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Bueno, y ahora estoy
+con <A HREF="http://www.kde.org";>the K Desktop Environment</A>, un 
revolucionario
+gestor de ventanas (demasiado parecido a Windows 95) que lleva todo lo
+necesario para convertirse en tu escritorio favorito, toda una gozada ver
+como en <A HREF="http://www.linuxhq.com";>Linux</A> tambi&eacute;n se pueden
+configurar las cosas con el rat&oacute;n. La &uacute;nica posible pega
+es que usa la librer&iacute;a Qt de <A HREF="http://www.troll.no";>Troll
+Tech</A> que, aun siendo gratuitas, no permiten la venta de aplicaciones
+comerciales realizadas con ellas, pero bueno, en principio eso no nos 
incumbe.</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="ftp://ftp.kde.org/pub/";>ftp.kde.org/pub/</A>:
+Aqu&iacute; encontrareis los binarios de todas las distribuciones, las
+fuentes y las librer&iacute;as Qt.</FONT></FONT></LI>
+</UL>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Para todos los catalanes
+que usan KDE y les gustar&iacute;a tener el sistema en su idioma he preparado
+un regalito:
+<A HREF="kdecat.htm">kdecat.htm</A></FONT></FONT>
+<P><A NAME="StarOffice"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">StarOffice</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Mis ultimas aventuras
+se centran en Star Office 4.0, un conjunto de aplicaciones similares a
+Microsoft Office, aunque mas completo en los aspectos de conectividad e
+Internet. Y ademas es <B>GRATUITO</B>. Desde luego vale la pena 
probarlo.</FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="http://www.stardivision.com";>Stardivision</A>:
+Donde encontrareis toda la informaci&oacute;n necesaria.</FONT></FONT></LI>
+
+<LI>
+<FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="ftp://ftp.stardivision.com";>ftp.stardivision.com</A>:
+Desde aqu&iacute; se pueden coger directamente los archivos.</FONT></FONT></LI>
+</UL>
+<A NAME="Linux Actual"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">Linux
+Actual</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Ya esta en la calle
+<A HREF="http://www.linuxhq.com";>Linux</A> Actual, una revista independiente
+(no es la secci&oacute;n de <A HREF="http://www.linuxhq.com";>Linux</A>
+de la PC Actual) que promete mucho, en su primer numero ya regalo la Debian
+1.3.1 ademas de un mont&oacute;n de buenos art&iacute;culos dentro de la
+revista.</FONT></FONT>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Es de la editorial
+Prens@ Tecnic@ (la misma que publica Programaci&oacute;n Actual) y en principio
+es bimensual. O sea que a suscribirse todos, que ademas te regalan un libro
+y si eres estudiante te hacen descuento.</FONT></FONT>
+<P><A NAME="Fresh Meat"></A><U><FONT FACE="helvetica,Arial"><FONT 
COLOR="#FFFFFF">Fresh
+Meat</FONT></FONT></U>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">ATENCI&Oacute;N!
+Gran descubrimiento, la Web definitiva sobre <A 
HREF="http://www.linuxhq.com";>Linux</A>
+... FRESH MEAT! (que traducido significa carne fresca)&nbsp;</FONT></FONT><A 
HREF="http://road-kill.freshmeat.net";><IMG SRC="freshm.jpg" 
ALT="http://road-kill.freshmeat.net"; BORDER=0 HEIGHT=40 WIDTH=120 
ALIGN=CENTER></A>
+<BR><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF">Toda la actualidad
+<A HREF="http://www.linuxhq.com";>Linux</A> al detalle, seguridad, software,
+kernels ... vamos que no os la pod&eacute;is perder.</FONT></FONT>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="helvetica,Arial"><FONT COLOR="#FFFFFF"><A 
HREF="index.htm">Volver
+a la pagina principal</A></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/logistica.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/logistica.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/logistica.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/logistica.htm
   3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Logistica</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="logistica.gif" ALT="Logistica" HEIGHT=73 WIDTH=234>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El apoyo
+del guerrero</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="#Archivos">Archivos</A>
+] [ <A HREF="#Informacion">Informaci&oacute;n</A> ] [ <A 
HREF="#Victimas">V&iacute;ctimas</A>
+]</FONT></FONT></FONT>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%></CENTER>
+
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="Archivos"></A>Archivos:</FONT></FONT></FONT>
+<BR>&nbsp;
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://road-kill.freshmeat.net/";>Freshmeat</A>:
+todas las novedades del mundo linux.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://crackrock.melnibone.org/";>scripts.bitchx.com</A>:
+Saca todo el jugo a tu BitchX.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.nessus.org/";>http://www.nessus.org/</A>:
+Programa integral de chequeo</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.wwdsi.com/saint/";>Saint</A>:
+El mejor y mas completo programa integral de chequeo</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.ssh.net/";>SSH
+Network Protocol Development</A>: Tus comunicaciones mas seguras con Secure
+Shell</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.cultdeadcow.com/";>Back
+Orifice</A>: Control remoto sobre estaciones Microsoft, la panacea para
+el hacker-lammer de m&aacute;quinas Windows.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="Informacion"></A>Informaci&oacute;n:</FONT></FONT></FONT>
+<BR>&nbsp;
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.rootshell.com/";>Rootshell.com</A>:
+Esta es la direcci&oacute;n b&aacute;sica por la que empezar: noticias,
+tutoriales, nukes ... todo ordenado y actualizado.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://slashdot.org/";>Slashdot</A>:
+Noticias para usuarios avanzados. Muy interesante.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://lucas.ctv.es";>LuCAS</A>:
+Lo mas b&aacute;sico</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://slug.ctv.es";>SLUG</A>:
+Mas info en castellano</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.insflug.nova.es/";>INSFLUG</A>:
+Y aun mas info ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://deckard.mc.duke.edu/irchelp/nuke/info.html#winnuke";>Denial
+of Service or "Nuke" Attacks</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.windowscentral.com/features/reports/netexploits/";>WindowsCentral
+- Reports - Windows 95 and NT Internet-related Exploits - Fix All Known
+Exploits</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="Victimas"></A>V&iacute;ctimas:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="http://www.microsoft.com";>Microsoft</A>:
+A quien se cargue esto le doy mi password de root :-)</FONT></FONT></FONT>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;[ <A 
HREF="hack.htm">Linux
+Hack Zone</A> ]</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="seguridad.htm">Zona
+de Seguridad</A> ] [ <A HREF="guerra.htm">Zona de guerra</A> ] [ <A 
HREF="espionaje.htm">Zona
+de Espionaje</A> ] [ <A HREF="logistica.htm">Log&iacute;stica</A> 
]</FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/medio.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/medio.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/medio.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/medio.htm   
    3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,712 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Linux nivel medio</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="medio.gif" ALT="Manual medio" >
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Linux nivel
+medio</FONT></FONT></FONT></CENTER>
+
+<P>
+<HR>
+<UL><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Indice:</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1. <A HREF="#1">El
+gestor de arranque lilo</A></FONT></FONT></FONT></LI>
+
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#ejecucion">ejecuci&oacute;n</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#parametros">par&aacute;metros</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#lilo.conf">lilo.conf</A></FONT></FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2. <A 
HREF="#2">Programas
+para la red en modo texto</A></FONT></FONT></FONT></LI>
+
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#pppd">pppd</A>:
+Programa de conexi&oacute;n</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#lynx">lynx</A>:
+Navegador http</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#ncftp">ncftp</A>:
+Navegador ftp</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#wget">wget</A>:
+Bajar archivos de la red</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#BitchX">BitchX</A>:
+Cliente para IRC</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#mutt">mutt</A>:
+Lector de correo</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#herramientas">herramientas</A>:
+Control total</FONT></FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3. <A 
HREF="#3">Cambiando
+el gestor de ventanas X</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4. <A 
HREF="#4">Crear
+nuestros propios scripts</A></FONT></FONT></FONT></LI>
+
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#rekisitos">requisitos</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#sintaxis">sintaxis</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#ejecutarlos">ejecutarlos</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#ejemplos">ejemplos</A></FONT></FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5. <A 
HREF="#5">Compilar
+el kernel</A></FONT></FONT></FONT></LI>
+
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#previo">pasos
+previos</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#compilar">tipos
+de compilaci&oacute;n</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="#despues">pasos
+finales</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#error">si
+algo falla</A></FONT></FONT></FONT></LI>
+</UL>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>6.</FONT></FONT></FONT></LI>
+</UL>
+
+<HR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="1"></A>EL
+gestor de arranque lilo</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>LILO (LInux
+LOader) es el sistema mas flexible y potente para arrancar linux. Seguramente
+ya lo tienes instalado en el sistema, si no es as&iacute; buscalo en tu
+CD de Linux que seguro que esta.</FONT></FONT></FONT>
+<P><A NAME="ejecucion"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Ejecuci&oacute;n:
+simple, pulsa <I>lilo</I> y aparecer&aacute;n una serie de nombres 
correspondientes
+a las etiquetas de los sistemas operativos que lilo va a ser capaz de arrancar,
+ademas pone un "*" en la etiqueta que arranca por defecto, por ejemplo
+en mi caso:</FONT></FONT></FONT>
+<PRE><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root:/]# 
lilo
+Added linux *
+Added 2.2.0
+Added dos</FONT></FONT></FONT></I></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Seg&uacute;n
+esto, tengo un kernel "linux" (2.2.1) que se arranca por defecto, un kernel
+"2.2.0" como linux accesorio y una partici&oacute;n "dos".</FONT></FONT></FONT>
+<P><A NAME="parametros"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Par&aacute;metros:
+se le pueden pasar un gran numero de par&aacute;metros para ver la 
configuraci&oacute;n
+actual sin reescribir lilo (-q), dar mas informaci&oacute;n (-v), aun mas
+(-v -v), para ver lo que lilo va a hacer (-t), indicarle un archivo de
+configuraci&oacute;n opcional (-C) ... Mas informaci&oacute;n en <I>man
+lilo</I></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Durante el
+arranque veremos algo como:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>LILO 
boot:</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Tras
+lo cual deberemos poner alguna de las etiquetas de los kernels que lilo
+conoce o dejar que arranque el que tiene por defecto.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Opcionalmente
+se le pueden pasar par&aacute;metros para ayudar a detectar hardware, como
+RAM, IRQ, DMA, I/O ... por ejemplo:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>LILO boot:
+mem=128M</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Fuerza
+a que linux reconozca 128 megas de RAM. O por ejemplo:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>LILO boot:
+hd=64,32,202</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Para
+forzar la detecci&oacute;n de los par&aacute;metros del disco duro, 
independientemente
+de lo que diga la BIOS.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otras opciones
+son especificas para linux, como:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>LILO boot:
+linux single</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Entra
+en linux en modo monousuario (para cuando olvidamos el password de root
+o para tareas de administracion/reparacion del sistema)</FONT></FONT></FONT>
+<P><A NAME="lilo.conf"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>lilo.conf:
+Este es el archivo de configuraci&oacute;n para lilo, esta en /etc y dentro
+se definen todas las opciones globales para lilo, as&iacute; como los 
par&aacute;metros
+que le queremos pasar durante el arranque y se definen todos los sistemas
+operativos que gestiona lilo. Un ejemplo de lilo.conf 
seria:</FONT></FONT></FONT>
+<PRE><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>boot=/dev/hda
+map=/boot/map
+install=/boot/boot.b
+prompt
+timeout=50
+
+image=/boot/vmlinuz-2.2.1
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label=linux
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root=/dev/hda3
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read-only
+image=/boot/vmlinuz-2.2.0
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label=2.2.0
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root=/dev/hda3
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read-only
+other=/dev/hda1
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label=dos
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
table=/dev/hda</FONT></FONT></FONT></I></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Se pueden ver
+una serie de opciones globales, mas tres sistemas operativos con sus propias
+opciones. Mas informaci&oacute;n sobre las sintaxis de lilo.conf en
+<I>man
+lilo.conf</I> y una configuraci&oacute;n real comentada en <A 
HREF="lilo.txt">lilo.txt</A>.
+Algo a tener en cuenta es que lilo arranca por defecto la primera imagen
+en lilo.conf, por lo que si quisieras arrancar la partici&oacute;n "dos"
+por defecto solo tendr&iacute;as que poner las lineas que definen la 
partici&oacute;n
+"dos" (las tres ultimas) antes que la primera imagen de linux. Este 
comportamiento
+puede ser modificado con la linea:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>default=label_del_sistema_a_arrancar_por_defecto</FONT></FONT></FONT></I>
+<BR>&nbsp;
+<BR>&nbsp;
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="2"></A>Programas
+para la red en modo texto</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La mayor&iacute;a
+de estos programas puedes encontrarlos en tu propio CD de linux o a 
trav&eacute;s
+del servidor ftp de tu distribuci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El uso de
+estos programas en lugar de sus equivalentes gr&aacute;ficos tiene como
+resultado un aprovechamiento mucho mas eficiente de nuestros recursos locales
+(al no necesitar entorno gr&aacute;fico) y de los recursos de la red (pues
+en general est&aacute;n mucho mas optimizados).</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Sin embargo
+las desventajas son claras, nada de multimedia (al menos no tan f&aacute;cil
+como en programas gr&aacute;ficos) y la dificultad inicial para los usuarios
+provenientes de sistemas operativos gr&aacute;ficos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Personalmente
+creo que vale la pena usarlos, y si tenemos necesidad de un entorno 
gr&aacute;fico
+siempre estamos a tiempo de lanzarlos desde una xterm o cualquier otro
+terminal X.</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="pppd"></A>pppd:
+Este es el demonio que gestiona las conexiones point-to-point, o sea, las
+normales a infovia. Recomiendo tenerlo siempre actualizado a la ultima
+versi&oacute;n, creo que ahora va por la 2.3.5, al menos esa es la que
+yo uso.</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para
+una configuraci&oacute;n m&iacute;nima que os permita conectar leed este
+<A HREF="infovia.htm">infovia.htm</A>, para una configuraci&oacute;n 
optimizada/personalizada
+os recomiendo que le&aacute;is detenidamente el <I>man pppd</I> y el pppd-como
+que pod&eacute;is encontrar en <A 
HREF="http://lucas.ctv.es";>LuCAS</A>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para iniciar
+una conexi&oacute;n (configurada correctamente) basta con escribir
+<I>pppd</I>
+y para desconectar poner <I>pppd</I> de nuevo, as&iacute; de 
simple.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="lynx"></A>lynx:
+Es el mejor navegador en modo texto. Mucha gente prefiere no usarlo o ni
+siquiera cree que exista. Pues bien, existe, es rapid&iacute;simo y muy
+f&aacute;cil de usar. Sencillamente hay que teclear <I>lynx URL</I> para
+acceder a esa URL, se navega usando los cursores: flecha arriba/abajo para
+cambiar el link activo, flecha izquierda para acceder al link activo, flecha
+derecha para volver a la pagina anterior. As&iacute; de 
simple.</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Sirve
+tanto para http como ftp, ficheros locales como remotos, soporta frames,
+cookies, formularios, bookmarks ... ademas es ideal para pasar archivos
+html a txt, con la orden <I>lynx -crawl -dump archivo.htm > 
archivo.txt</I></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Limitaciones:
+no muestra im&aacute;genes, no es compatible Java ni JavaScript, no ve
+mapas ... aunque todas estas limitaciones serian f&aacute;cilmente 
solucionables
+si los programadores hiciesen mejores webs. No cuesta nada detectar que
+el navegador no es gr&aacute;fico y mostrar una pagina especial solo 
texto.</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="ncftp"></A>ncftp:
+Un cliente de ftp basado en ncurses, muy sencillo y eficaz, soporta reget
+(retomar downloads abortados), bookmarks, accesos an&oacute;nimos y no
+an&oacute;nimos, programaci&oacute;n de scripts y alias ... todos los comandos
+tienen una ayuda que se puede leer tecleando (desde dentro del programa)
+<I>help</I> o <I>help comando</I></FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>LA forma
+de arrancarlo es con <I>ncftp</I> o <I>ncftp 
FTP-SERVER</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="wget"></A>wget:
+Este sencillo programa sirve para bajar archivos de la red, ya sean de
+ftp o http. Tiene muchas posibilidades y es lo mas eficiente que he visto
+bajando archivos. Permite reget, bajar webs enteras, comodines, conexi&oacute;n
+autom&aacute;tica ...</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Se ejecuta
+con el comando <I>wget URL</I>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Limitaciones:
+no sirve para navegar (no esta hecho para eso).</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="BitchX"></A>BitchX:
+Posiblemente el mejor cliente de IRC, es una evoluci&oacute;n del 
cl&aacute;sico
+ircii con soporte de color, gr&aacute;ficos ansi ... Al ser uno de los
+mas extendidos abundan scripts para el BitchX (aunque para mi gusto no
+los necesita).</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Es 
f&aacute;cilmente
+programable y configurable, soporta todos los comandos b&aacute;sicos del
+irc, la mayor&iacute;a de comandos y teclas del mirc mas muchos propios,
+m&uacute;ltiples canales, m&uacute;ltiples ventanas, m&uacute;ltiples 
servidores
+...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La forma
+b&aacute;sica de ejecutarlo es <I>bitchx NICK 
IRC-SERVER</I></FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="mutt"></A>mutt:
+Es un sencillo lector de correo basado en ncurses, puede leer el correo
+de la mayor&iacute;a de buzones est&aacute;ndar. Permite leer tanto correo
+normal como news, listas, gestiona varios buzones ...</FONT></FONT></FONT></LI>
+
+<P><BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para
+ejecutarlo basta con la orden <I>mutt</I>, despu&eacute;s podemos seleccionar
+el men&uacute; de ayuda para ver un listado de sus 
posibilidades.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>NOTA: requiere
+agentes de correo tipo sendmail (enviar) y fetchmail 
(recoger).</FONT></FONT></FONT>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-&nbsp;<A 
NAME="herramientas"></A>herramientas:
+Existe un gran numero de sencillas herramientas de red que mucha gente
+no usa pero son tremendamente &uacute;tiles. Son por 
ejemplo:</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ping: detecta
+si existe una determinada URL o IP. <I>ping IP</I></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Traceroute:
+sigue la pista de la ruta que siguen los paquetes TCP dentro de la red.
+<I>traceroute -OPCIONES IP</I></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nslookup:
+transforma URLs en IPs y viceversa. <I>nslookup</I></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ifconfig/route:
+configuran interfaces de red, su sintaxis es mas compleja debido al gran
+numero de par&aacute;metros que pueden gestionar.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>tcp_wrappers/tcpdump
+y otros: analizadores del trafico a trav&eacute;s de una 
red.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Telnet:
+la herramienta b&aacute;sica para conexiones TCP. <I>telnet IP 
PUERTO</I></FONT></FONT></FONT></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="3"></A>Cambiando
+el gestor de ventanas X</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La gran cantidad
+de gestores de ventanas disponibles hacen que de tanto en tanto nos decidamos
+por cambiar el que tenemos o instalar dos o mas gestores y probar nuevas
+sensaciones.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La manera
+de hacerlo es sencilla, instalamos el nuevo gestor (en algunos casos puede
+ser necesario desinstalar el otro gestor de ventanas, aunque no es normal)
+y le indicamos a las X que usen el nuevo.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para indicarselo
+se usa el archivo xinitrc. Existen dos topis de archivos xinitrc, uno (global)
+esta en /etc/X11/xinitrc/xinitrc (puede estar en otro directorio, pero
+siempre dentro de /etc) que se aplica a todos los usuarios; y el otro 
(particular)
+esta en ~/.xinitrc, este archivo, si existe, define un gestor de ventanas
+para el usuario propietario del HOME donde se encuentra, si no existe 
~/.xinitrc
+se lee el global.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El formato
+del xinitrc (las dos versiones son iguales) es sencillo, aunque algunas
+distribuciones lo complican para conseguir mas opciones, gestores 
personalizados,
+arrancar programas en funci&oacute;n del gestor usado ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La sintaxis
+mas sencilla es:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#!/bin/bash</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>nombre_del_gestor</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Donde 
<I>nombre_del_gestor</I>
+es el nombre del ejecutable del gestor de ventanas que queramos usar; por
+ejemplo: twm, fvwm, starkde ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>De esta
+manera para cambiar de gestor solo habr&aacute; que cambiar la linea 
correspondiente
+al nombre_del_gestor por la que queramos usar.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este sencillo
+script puede complicarse mas y mas en funci&oacute;n de las necesidades
+y preferencias de cada uno, el siguiente ejemplo arranca, si puede, KDE
+y si no puede arranca twm con un terminal y un reloj:</FONT></FONT></FONT>
+<PRE><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>#!/bin/bash
+if [ /opt/kde/bin/startkde ]; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /opt/kde/bin/startkde
+else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xterm &amp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xclock &amp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; twm&nbsp;
+fi</FONT></FONT></FONT></I></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como veis la
+cosa puede complicarse para mejorar la configuraci&oacute;n y las 
posibilidades,
+como ejemplo aqu&iacute; ten&eacute;is mi xinitrc original, a grandes rasgos
+define una serie de opciones globales, mas otras de usuario, ademas trata
+de encontrar el mejor gestor de ventanas posible y define un navegador
+HTML por defecto:</FONT></FONT></FONT>
+<PRE><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>#!/bin/sh
+# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $
+
+userresources=$HOME/.Xresources
+usermodmap=$HOME/.Xmodmap
+sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
+sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
+
+# merge in defaults and keymaps
+
+if [ -f $sysresources ]; then
+&nbsp;&nbsp;&nbsp; xrdb -merge $sysresources
+fi
+
+if [ -f $sysmodmap ]; then
+&nbsp;&nbsp;&nbsp; xmodmap $sysmodmap
+fi
+
+if [ -f $userresources ]; then
+&nbsp;&nbsp;&nbsp; xrdb -merge $userresources
+fi
+
+if [ -f $usermodmap ]; then
+&nbsp;&nbsp;&nbsp; xmodmap $usermodmap
+fi
+
+if [ -z "$BROWSER" ] ; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # we need to find a browser on this 
system
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BROWSER=hich 
netscape&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -z "$BROWSER" ] || [ ! 
-e
+"$BROWSER" ] ; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # not found yet
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 BROWSER=
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
+fi
+if [ -z "$BROWSER" ] ; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # we need to find a browser on this 
system
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BROWSER=hich 
lynx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -z "$BROWSER" ] || [ ! -e 
"$BROWSER"
+] ; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # not found yet
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 BROWSER=
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 BROWSER="xterm -font 9x15 -e lynx"
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
+fi
+if [ -z "$BROWSER" ] ; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # we need to find a browser on this 
system
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BROWSER=hich 
arena&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -z "$BROWSER" ] || [ ! -e
+"$BROWSER" ] ; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # not found yet
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 BROWSER=
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
+fi
+export BROWSER
+
+# start some nice programs
+
+if [ -f $HOME/.Xclients ]; then
+&nbsp;&nbsp;&nbsp; exec $HOME/.Xclients
+elif [ -f /etc/X11/xinit/Xclients ]; then
+&nbsp;&nbsp;&nbsp; exec /etc/X11/xinit/Xclients
+else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xclock -geometry 50x50-1+1 &amp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xterm -geometry 80x50+494+51 &amp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xterm -geometry 80x20+494-0 &amp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f /usr/X11R6/bin/arena -a -f 
/usr/doc/HTML/index.html ]; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 arena /usr/doc/HTML/index.html &amp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f /usr/X11R6/bin/fvwm ]; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 exec fvwm
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 exec twm
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
+fi</FONT></FONT></FONT></I></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="4"></A>Crear
+nuestros propios scripts</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En el apartado
+anterior ya hemos visto mas o menos como son los scripts, vamos a analizarlos
+ahora con mas detalle.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los scripts
+son archivos ejecutables que contienen grupos de instrucciones que el bash
+interpreta y ejecuta, no son compilados por lo que la velocidad no es su
+fuerte, aunque solo se usan para tareas sencillas en las que la velocidad
+no es limitante.</FONT></FONT></FONT>
+<P><A NAME="rekisitos"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Requisitos:
+pocos, el archivo ha de ser ejecutable (<I>chmod +x archivo</I>) el nombre
+del archivo es indiferente, as&iacute; como su 
extensi&oacute;n.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El segundo
+requisito es que el archivo debe empezar por una linea como 
esta:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#!/bin/bash</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;Esta
+debe ser la primera linea, no pueden haber ni comentarios ni otras ordenes
+antes que ella.</FONT></FONT></FONT>
+<P><A NAME="sintaxis"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Sintaxis:
+dentro de un script podemos usar todos los comandos reconocidos por bash
+(cd, ls, rm ...), mas todos los alias, mas todos los programas instalados,
+ademas se pueden usar pipes, redirecciones ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cada orden
+ira en una linea aunque tambi&eacute;n pueden separarse por ";" y las lineas
+que empiecen por "#" no ser&aacute;n le&iacute;das por bash (excepto la
+primera) y se usan para insertar comentarios.</FONT></FONT></FONT>
+<P><A NAME="ejecutarlos"></A><FONT FACE="HELVETICA"><FONT 
COLOR="#FFFFFF"><FONT SIZE=+1>Ejecutarlos:
+como seguramente el script no se encuentre en el PATH lo ejecutaremos como
+<I>./script</I> si esta en el directorio actual, o
+<I>/ruta_completa/script</I>
+si esta en otro directorio.</FONT></FONT></FONT>
+<P><A NAME="ejemplos"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Ejemplos:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El primer
+script: este es el t&iacute;pico programa "Hola mundo", como ver&eacute;is
+es sencill&iacute;simo:</FONT></FONT></FONT>
+<PRE><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>#!/bin/bash
+
+# Script Hola 
mundo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+echo Hola mundo</FONT></FONT></FONT></I></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ademas de comandos
+normales, los scripts pueden usar variables, estructuras de control (if),
+bucles (while, until), estructuras iterativas (for) y otras. Para dominar
+el lenguaje de programaci&oacute;n de scripts en bash os recomiendo que
+le&aacute;is el <I>man bash</I> o que sakeis alg&uacute;n buen manual de
+unix de alguna biblioteca publica.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un sencillo
+script para conectarse a internet podr&iacute;a ser algo 
as&iacute;:</FONT></FONT></FONT>
+<PRE><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>#!/bin/bash
+
+# Script pppp-up
+clear
+echo Conectando ...
+if [ pppd ]; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pppd
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tail -f /var/log/messages > 
/dev/tty12
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo Mensajes de sistema en la 
consola 12
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo (Pulsa Alt+F12 para verlos)
+else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo No he podido encontrar pppd en 
tu sistema.
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo Aseg&uacute;rate que esta 
instalado y en el PATH
+fi</FONT></FONT></FONT></I></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El limite de
+los scripts solo esta en vuestro conocimiento en profundidad del bash y
+de la imaginaci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Algunos ejemplos
+&uacute;tiles:</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="usuarios.sh.gz">usuarios.sh.gz</A>:
+utilidad visual para controlar los usuarios conectados por telnet a tu
+m&aacute;quina.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="makina.sh.gz">makina.sh.gz</A>:
+sencill&iacute;sima utilidad que da informaci&oacute;n sobre el hardware.
+(procesador), el software (sistema operativo y versi&oacute;n) y algunos
+par&aacute;metros de configuraci&oacute;n (hora local y nombre del 
ordenador)</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="setserial.sh.gz">setserial.sh.gz</A>:
+utilidad que facilita la configuraci&oacute;n de lineas 
seriales.</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5.&nbsp;<A 
NAME="5"></A>Compilar
+el kernel</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Compilar
+el kernel es una de las primeras acciones que todo administrador deber&iacute;a
+hacer justo despu&eacute;s de haber instalado el sistema y de haber creado
+un usuario.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>aunque a
+primera vista pueda parecer algo complicado es un procedimiento muy sencillo
+y que nos permitir&aacute; optimizar el sistema eliminando componentes
+no usados y acceder a servicios hardware y software 
personalizados.</FONT></FONT></FONT>
+<P><A NAME="previo"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Pasos
+previos: lo primero es asegurarnos de que nuestro sistema esta preparado
+para compilar el kernel.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Necesitamos
+las fuentes del kernel (un archivo de mas de 7 megas que podemos encontrar
+en <A HREF="ftp://ftp.kernel.org";>ftp.kernel.org</A>) descomprimidas en
+el directorio /usr/src/linux.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Necesitaremos
+al rededor de 50 megas libres en el disco para que pueda hacerse la 
compilaci&oacute;n.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una vez
+conseguido y desempaquetado el kernel pasaremos a leer el archivo README,
+donde se explica con detenimiento las instrucciones para que todo salga
+bien.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otros paquetes
+software que necesitaremos ser&aacute;n: libc-devel, gcc y make (para la
+compilaci&oacute;n), bin86-utils (para la construcci&oacute;n del kernel),
+libncurses y libncurses-devel (solo si queremos men&uacute;s para la 
selecci&oacute;n
+de opciones), tcl/tk (solo si queremos ver los men&uacute;s en una ventana
+X), lilo (si queremos usarlo para arrancar el kernel).</FONT></FONT></FONT>
+<P><A NAME="compilar"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Tipos
+de compilaci&oacute;n: aqu&iacute; voy a explicar un poco el proceso general
+para la compilaci&oacute;n del kernel.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Lo primero
+es seleccionar las opciones que queremos incluir en el kernel, esto se
+hace desde /usr/src/linux con uno de los siguientes 
comandos:</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make config:
+pregunta una a una todas las opciones a incluir/excluir del 
kernel</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make menuconfig:
+ordena todas las preguntas en intuitivos men&uacute;s que facilitan la
+comprensi&oacute;n y edici&oacute;n de las opciones (necesita 
ncurses)</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make xconfig:
+similar al anterior pero ejecutado desde un terminal X crea una ventana
+con botones desplegables ordenando las opciones de una manera aun mas intuitiva
+(necesita X y tcl/tk)</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las opciones
+a elegir depender&aacute;n de cada m&aacute;quina y de las funciones que
+vaya a realizar, as&iacute; como del hardware instalado, pulsando "?" en
+cada opci&oacute;n tenemos una breve explicaci&oacute;n de su funci&oacute;n,
+al final suele haber una recomendaci&oacute;n para su uso, si esta ayuda
+no es suficiente las fuentes del kernel llevan abundante informaci&oacute;n
+en el directorio Documentaci&oacute;n/</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una vez 
seleccionadas
+las opciones hay que realizar los siguientes comandos:</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make dep: crea
+los enlaces necesarios para que las opciones elegidas formen parte del
+kernel final</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make clean:
+elimina restos de compilaciones anteriores que podr&iacute;an interferir
+en el proceso</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En este momento
+el kernel ya esta listo para empezar a compilarse, lo cual se hace con
+uno de los siguientes comandos:</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make zImage:
+el comando est&aacute;ndar, crea un kernel y lo deja en el directorio 
arch/XXX/boot/
+(donde XXX es la arquitectura de la m&aacute;quina local, i386 para los
+PC)</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make zdisk:
+igual al anterior pero coloca el kernel en un disco para usarlo como disco
+de arranque</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>make zlilo:
+crea el kernel y lo instala usando el lilo (esta opci&oacute;n no es 
recomendable
+a menos que tengas muy claro lo que estas haciendo)</FONT></FONT></FONT></LI>
+</UL>
+<I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: si
+el kernel es demasiado grande podemos reducir su tama&ntilde;o colocando
+una "b" delante los targets de make, es decir, las ordenes quedar&iacute;an:
+make bzImage, make bzdisk o make bzlilo.</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Opcionalmente
+si hemos seleccionado el uso de m&oacute;dulos deberemos compilarlos con
+la orden <I>make modules</I> e instalarlos con la orden <I>make 
modules_install</I></FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un fallo
+muy com&uacute;n es el producido por m&oacute;dulos mal instalados, repetidos
+o no utilizados, para evitarlo aseg&uacute;rate de eliminar (mejor mover
+a otro sitio) los m&oacute;dulos antiguos que se encuentran en el directorio
+/lib/modules.</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Tambi&eacute;n
+es conveniente hacer depmod -a despu&eacute;s de haber instalado los nuevos
+m&oacute;dulos.</FONT></FONT></FONT></I>
+<P><A NAME="despues"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Pasos
+finales: si hemos hecho <I>make zdisk</I> o <I>make zlilo</I> y todo ha
+ido bien solo nos quda reiniciar la m&aacute;quina para usar el nuevo kernel.
+Si hemos hecho <I>make zImage</I> (la opci&oacute;n mas recomendable) nos
+moveremos al directorio
+<I>cd arch/i386/boot</I> y copiaremos el archivo
+zImage (o bzImage, seg&uacute;n el caso) al directorio donde tengamos los
+kernels (generalmente /boot o /, aunque esto es totalmente configurable),
+por ejemplo en mi caso est&aacute;n en /boot:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[dani] [/]$ ls 
/boot
+total 934
+lrwxrwxrwx&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17 Dec 28 
21:33 System.map -> System.map-2.0.32
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 104597 Nov 18&nbsp; 1997 
System.map-2.0.32
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512 Dec 28 21:48 
boot.0300
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4536 Oct 19&nbsp; 1997 
boot.b
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 300 Oct 19&nbsp; 
1997 chain.b
+-rw-------&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15872 Feb 18 03:12 map
+lrwxrwxrwx&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18 Dec 28 
21:33 module-info -> module-info-2.0.32
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11773 Nov 18&nbsp; 1997 
module-info-2.0.32
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 308 Oct 19&nbsp; 
1997 os2_d.b
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 403276 Jan 30 11:55 vmlinuz-2.2.1
+-rw-r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 402114 Feb&nbsp; 6 14:54 
vmlinuz-2.2.2</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El ultimo paso
+es editar el archivo /etc/lilo.conf para asegurarnos de que apunta al nuevo
+kernel (ver el capitulo <A HREF="#1">1</A> si ten&eacute;is dudas), en
+mi caso:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[dani] [/]$ 
cat /etc/lilo.conf
+boot=/dev/hda
+map=/boot/map
+install=/boot/boot.b
+prompt
+timeout=50
+
+image=/boot/vmlinuz-2.2.2
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label=linux
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root=/dev/hda3
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read-only
+image=/boot/vmlinuz-2.2.1
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label=2.2.1
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root=/dev/hda3
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read-only</FONT></FONT></FONT></PRE>
+<I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: fijaos
+en que siempre es importante guardar una copia del anterior kernel, por
+si algo fallara poder arrancar con el.</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Y ejecutar
+el comando <I>/sbin/lilo</I> para guardar los cambios, lilo informar&aacute;
+de los cambios mas o menos as&iacute;:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[root] [/]$ 
/sbin/lilo
+Added linux *
+Added 2.2.1</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si lilo se keja
+aseguraos que los directorios y los nombres de archivo que aparecen en
+lilo.conf son correctos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Solo nos
+quda reiniciar con la orden <I>reboot</I> para arrancar con el nuevo 
kernel.</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota 
importante:
+Esto son unas instrucciones genericas, no os tom&eacute;is al pie de la
+letra los nombres de archivo ni los directorios, pues pueden variar en
+cada caso. Este es un proceso critico para el sistema y hay que saber bien
+lo que se esta haciendo, una lectura obligada es el Kernel-como de <A 
HREF="http://lucas.ctv.es";>LuCAS</A>.</FONT></FONT></FONT></I>
+<P><A NAME="error"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Si
+algo falla: algunos consejos, revisad que ten&eacute;is todo lo necesario,
+que el kernel esta bien descomprimido en /usr/src/linux, a veces es necesario
+el comando <I>make mrproper</I> (limpieza a fondo) justo despu&eacute;s
+de descomprimirlo.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Procurad
+manteneros a la ultima en cuanto a versiones del kernel.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En el archivo
+Documentation/Changes hay una lista de los requerimientos software de cada
+kernel, aseguraos de cumplirlos.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si aun 
as&iacute;
+sigue fallando podr&iacute;a ser que las fuentes estuviesen corrompidas
+o que hayas encontrado un nuevo bug :-)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>6.&nbsp;</FONT></FONT></FONT><A NAME="6"></A>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="index.htm">Volver
+a la pagina principal</A></FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/modem.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/modem.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/modem.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/modem.htm   
    3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,238 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Instalacion del modem Howto</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="modem.gif" ALT="Instalacion del modem HOWTO" >
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por Daniel
+Molina</FONT></FONT></FONT></CENTER>
+
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este documento
+ha sido creado usando mensajes aparecidos en el &aacute;rea de mensajes
+R34.linux de Fido y por mi propia experiencia.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Solo lo
+he probado en Red Hat 5.0 por lo ke los nombres y localizaciones de los
+archivos pueden variar respecto a otras distribuciones.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Indice</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#1">1.
+Instalaci&oacute;n f&iacute;sica del modem</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#2">2.
+Elecci&oacute;n del puerto COM</A></FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#2.1">2.1
+Linux y los puertos COM</A></FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#2.2">2.2
+Linux y el Plug'n'Play</A></FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#3">3.
+El comando setserial</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#4">4.
+El archivo rc.serial</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#5">5.
+Permisos de los archivos</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A HREF="#6">6.
+Contactar con el autor</A></FONT></FONT></FONT>
+<P>
+<HR>
+<P><A NAME="1"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>1.
+Instalaci&oacute;n f&iacute;sica del modem:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto no tiene
+complicaci&oacute;n, se hace perfectamente leyendo las instrucciones del
+manual del modem.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Tan solo
+recordar ke los Win-Modem no funcionan bajo Linux (de momento) ni los MWAVE
+de IBM.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En 
funci&oacute;n
+del tipo de instalaci&oacute;n nos encontramos con modems internos y 
externos.</FONT></FONT></FONT>
+<P><A NAME="2"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>2.
+Elecci&oacute;n del puerto COM:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los modems
+usan el puerto COM para comunicarse con el ordenador por lo ke la correcta
+elecci&oacute;n y configuraci&oacute;n de este puerto es 
imprescindible.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En algunos
+modems hay ke seleccionar el puerto a trav&eacute;s de jumpers situados
+en el propio modem, mientras ke los Plug'n'Play (PnP a partir de ahora)
+se configuran mediante software o usan los recursos disponibles del 
sistema.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Es muy 
com&uacute;n
+asignar el COM2 al modem, pues la mayor&iacute;a tenemos el mouse en COM1
+aunque va a gusto del usuario. Usar cualquier puerto del 1 al 4 no 
deber&iacute;a
+ser ning&uacute;n problema.</FONT></FONT></FONT>
+<P><A NAME="2.1"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>2.1
+Linux y los puertos COM:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Linux trata
+los puertos COM de la misma manera ke todos los dispositivos de sistema,
+con una entrada en el directorio /dev</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los archivos
+son:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/cua0
+o /dev/ttyS0 : COM1</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/cua1
+o /dev/ttyS1 : COM2</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/cua2
+o /dev/ttyS2 : COM3</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/cua3
+o /dev/ttyS3 : COM4</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Existen mas,
+pero su uso no es necesario en la mayor&iacute;a de los casos. Los dispositivos
+cuaX y ttySX son an&aacute;logos aunque se recomienda el uso de ttySX por
+sus mayores prestaciones (los cuaX est&aacute;n obsoletos)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: Por
+alg&uacute;n motivo DOSEmu no se entiende bien con ttySX, (al menos en
+mi sistema) por lo ke en dosemu.conf deberemos definir el modem en 
/dev/cuaX.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Podemos ver
+los puertos COM ke detecta el kernel durante el arranke con un 
simple:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># dmesg |
+grep tty</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ademas esto
+nos muestra las opciones por defecto de los puertos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Una vez 
determinado
+ke puerto va a usar el modem crearemos un nuevo dispositivo ke use ese
+puerto, con la orden:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># ln -s 
/dev/ttySX
+/dev/modem</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En lugar
+de ttyS puede usarse cua (no recomendado), la X se substituye por un numero
+(0-3) ke determina el puerto.</FONT></FONT></FONT>
+<P><A NAME="2.2"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>2.2
+Linux y el PnP:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En primer
+lugar recomiendo siempre el uso de dispositivos ke no sean PnP, ya sean
+modems, tarjetas de red, de sonido ... Existen varias alternativas para
+el uso de modems PnP bajo Linux:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>a) Las 
isapnptools</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Estas utilidades
+nos permiten usar modems PnP incluso con BIOS antiguas ke no soportan esta
+norma. Instala el paquete isapnptools-1.11 o posterior y 
teclea:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># man 
isapnp</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># man 
pnpdump</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>b) Soporte
+PnP en el kernel:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los kernels
+experimentales de la serie 2.1.xxx y 2.2.x soportan PnP desde hace muchas
+versiones. Para dar soporte PnP deberemos recompilar el kernel y seleccionar
+PnP como modulo.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>c) 
Inicializaci&oacute;n
+en MS-DOS/WIN95:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Algunos
+modems llevan utilidades MSDOS/WIN para ajustar los valores de los puertos.
+Puedes usar este software para situar tu modem en COM2.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En general
+esta operaci&oacute;n solo habr&aacute; ke realizarla una 
vez.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: si
+tu software no encuentra recursos para el COM2 intenta inhabilitarlo desde
+la BIOS.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: si
+tu modem funciona bien en otro sistema operativo apunta los par&aacute;metros
+para usarlos mas tarde en linux.</FONT></FONT></FONT>
+<P><A NAME="3"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>3.
+El comando setserial:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En la 
mayor&iacute;a
+de los casos el modem ya esta instalado y listo para ser usado en el 
dispositivo
+/dev/modem, pero algunos modems requieren cambiar algunos par&aacute;metros
+del puerto.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para eso
+se usa el comando setserial, el uso es:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># setserial
+dispositivo opciones</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Un ejemplo
+de empleo completo de setserial seria:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># setserial
+/dev/ttyS1 port 2f8 irq 3 uart 16550A baud_base 115200</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>port: Indica
+la regi&oacute;n I/O</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>irq: Indica
+la interrupci&oacute;n</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>uart: Indica
+el tipo de uart</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>baud_base:
+Indica la velocidad</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Tambi&eacute;n
+puedes usar este script de fabricaci&oacute;n casera para configurar las
+lineas seriales usando el comando setserial: <A 
HREF="setserial.sh.gz">setserial.sh.gz</A>,
+este sencillo script permite cambiar de una manera sencilla los 
par&aacute;metros
+de los puertos ttyS, recomendado para los ke no se quieren liar con el
+man.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Todos estos
+par&aacute;metros pueden modificarse para un uso optimo del dispositivo.
+Mas informaci&oacute;n en 'man setserial'</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para ver
+toda la informaci&oacute;n disponible sobre nuestro modem 
escribiremos:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># setserial
+-a /dev/modem</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Y comprobamos
+ke todos los datos son lo ke queremos.</FONT></FONT></FONT>
+<P><A NAME="4"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>4.
+El archivo rc.serial:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si debemos
+hacer modificaciones en los puertos, estas pueden automatizarse colocandolas
+en el archivo /etc/rc.d/rc.serial</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La sintaxis
+correcta de este archivo podr&iacute;a ser:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ---- /etc/rc.d/rc.serial --------- Cut here ----
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 #!/bin/bash
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 setserial /dev/ttyS1 irq 5
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ---- /etc/rc.d/rc.serial --------- Cut here ----</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto fuerza
+a ke el sistema asigne la IRQ 5 al COM2 en cada arranke.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Parece ser
+ke los usuarios de Debian tienen este archivo en /etc/rc.boot/0setserial
+(agradecer&iacute;a mas informaci&oacute;n sobre esto)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para asegurarnos
+de ke este archivo es le&iacute;do por el sistema escribimos las siguientes
+lineas en el archivo /etc/rc.d/rc.sysinit:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ---- /etc/rc.d/rc.sysinit -------- Cut here ----
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 [...]
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if [ -f /etc/rc.d/rc.serial ]; then
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 /etc/rc.d/rc.serial
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 fi
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 [...]
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ---- /etc/rc.d/rc.sysinit -------- Cut here ----</FONT></FONT></FONT></PRE>
+<A NAME="5"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5.
+Permisos de los archivos:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los usuarios
+ke vayan a usar el modem deben tener permisos de escritura en el dispositivo
+correspondiente:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/cuaX
+o /dev/ttySX : crw-rw-rw-</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># chmod
+666 /dev/xxxxX</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/dev/modem
+: lrwxrwxrwx</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># chmod
+777 /dev/modem</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Los archivos
+de inicializaci&oacute;n deben ser ejecutables:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>/etc/rc.d/rc.serial:
+-rwxr-xr-x</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># chmod
+755 /.../rc.serial</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>/etc/rc.d/rc.sysinit:
+-rwxr-xr-x</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1># chmod
+755 /.../rc.sysinit</FONT></FONT></FONT>
+<P><A NAME="6"></A><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>6.
+Contactar con el autor:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cualquier
+sugerencia o correcci&oacute;n ser&aacute;n bienvenidas.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>E-mail: <A 
HREF="mailto:address@hidden";>address@hidden</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>HTTP: <A 
HREF="http://www.geocities.com/soho/lofts/3682";>http://www.geocities.com/soho/lofts/3682</A></FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>IRC: IRC-Hispano
+#linux Nick dan-man</FONT></FONT></FONT>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="index.htm">Volver
+a la pagina principal</A></FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/pagina.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/pagina.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/pagina.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/pagina.htm  
    3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,12 @@
+<HTML><HEAD>
+<TITLE></TITLE></HEAD>
+
+<BODY background="../img/marble2.jpg" BGCOLOR="#000000"><FONT SIZE=+1 
FACE=HELVETICA COLOR="#FFFFFF">
+
+<CENTER></CENTER>
+
+<P><HR><P><CENTER><a href="index.htm">Volver a la pagina
+principal</a></CENTER>
+
+</FONT>
+</BODY></HTML>
\ No newline at end of file

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/seguridad.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/seguridad.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/seguridad.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/seguridad.htm
   3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Zona de Seguridad</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><IMG SRC="seguridad.gif" ALT="Zona de Seguridad" HEIGHT=74 WIDTH=462>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Manteniendo
+los intrusos a raya</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A HREF="#1">El
+password</A> ] [ <A HREF="#2">Limitando el acceso de roto</A> ] [ <A 
HREF="#3">inetd.conf</A>
+] [ <A HREF="#4">Tcp_wrappers</A> ] [ <A HREF="#5">services</A> ] [ <A 
HREF="#6">Nuevos
+puertos/servicios</A> ] [ <A HREF="#7">El firewall</A> ] [ <A 
HREF="#8">Actualizate!</A>
+]</FONT></FONT></FONT>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%></CENTER>
+
+<BR>&nbsp;
+<P><BR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Os presento
+aqu&iacute; una serie de "herramientas" software que podemos usar para
+hacer nuestro sistema mas seguro. Est&aacute;n ordenadas de mas b&aacute;sicas
+a mas complejas.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>1.&nbsp;<A 
NAME="1"></A>El
+password:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En concreto
+/etc/passwd. Este es el archivo mas ansiado (junto con el de los passwords
+para internet) por los hackers, as&iacute; que lo mejor ser&aacute; 
protegerlo.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Aseg&uacute;rate
+que sus permisos son:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>-rw-r--r--
+1 roto roto 239 Oct 31 1997 passwd</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Instala el
+paquete shadow-utils, este paquete protege los passwords encript&aacute;ndolos
+en otro archivo al que s&oacute;lo tiene acceso roto, por lo que hacerse
+con el /etc/passwd no sirve de nada. Ademas para los pies a la mayor&iacute;a
+de crakeadores de passwords. Aunque parezca una tonter&iacute;a, usar shadow
+passwords es una de las protecciones mas eficaces contra logins 
indeseados.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Elige
+passwords dif&iacute;ciles de averiguar, que contengan letras, n&uacute;meros
+y caracteres, y si puede ser que la palabra no tenga sentido en ning&uacute;n
+idioma. Por ejemplo mAKew3t$ es un buen password.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Usa
+el programa <A HREF="http://www.false.com/security/john/index.html";>John
+The Ripper</A> para testear la seguridad de tus passwords, si es capaz
+de crakearlos en pocas horas es que tu password no es 
seguro.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="2"></A>Limitando
+el acceso de roto:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El usuario
+roto es siempre un peligro potencial. El sistema considera que roto sabe
+perfectamente lo que hace por lo que ni siquiera pedir&aacute; 
confirmaci&oacute;n
+si por error formateamos el disco, imaginaos el desastre 
...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Reduciendo
+las v&iacute;as de acceso de roto al sistema minimizamos riesgos a la vez
+que nos forzamos a nosotros mismos a dejar de trabajar con 
roto.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Edita el
+archivo /etc/securetty y deja solo las consolas en las que quieres que
+roto pueda entrar. Este archivo contiene una lista de terminales (tty)
+en las que puede entrar roto, una por linea. Eliminando las lineas que
+no deseemos evitamos el acceso de roto a ese terminal.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Conozco sistemas
+en los que roto no puede hacer ning&uacute;n login y la &uacute;nica manera
+que tiene de entrar al sistema es mediante el comando "su" que ademas solo
+puede ser ejecutado por un grupo muy reducido de usuarios. Sin llegar a
+este extremo, algo recomendable es dejar por ejemplo las tres primeras
+consolas para el acceso de roto.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Lo mejor
+seria que nunca se hiciese login como roto, en lugar de esto podemos usar
+el comando <I>su</I> para tener privilegios de roto moment&aacute;neamente,
+cambiar lo que haga falta y teclear <I>exit</I> para volver a ser usuario
+normal sin peligro de estropear nada.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Nunca,
+nunca, nunca, dejes acceso por telnet a roto, elimina todas las entradas
+con ttyp?</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Estas
+restricciones no protegen contra el uso del comando su!</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="3"></A>inetd.conf:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Edita el
+archivo /etc/inetd.conf y pon un '#' delante de todos los servicios que
+no ofrezcas.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Recuerda
+que esto se refiere los servicios que quieres DAR no a los que quieres
+ACCEDER, o sea que para entrar en un ftp no necesitas tener abierto el
+puerto ftp.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Lo
+que no sepas que hace ci&eacute;rralo!</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Puedes
+cerrar absolutamente todo. (Para entrar en algunas redes de IRC es necesario
+abrir el puerto auth)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Algunos
+ataques automatizados, tipo nukes y otros, buscan siempre el mismo puerto,
+por ejemplo el 139 (net-bios). Si te ves obligado a dar este tipo de servicios
+no seria una mala idea cambiar el puerto por defecto, esto se consigue
+modificando en el /etc/services la linea correspondiente al servicio, en
+nuestro caso podr&iacute;amos substituir:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>netbios-ssn
+139/tcp nbssn</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>por:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>netbios-ssn
+140/tcp nbssn</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Con esto
+pasamos a dar el servicio de net-bios por el puerto 140 y el 139 se cierra.
+Cuidado! Es muy probable que tengas que modificar los programas que usan
+net-bios para que sigan funcionando.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="4"></A>Tcp_wrappers:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Informaci&oacute;n
+detallada en <A 
HREF="tcp_wrappers.htm">tcp_wrappers.htm</A></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para esto
+necesitas tener instalado el paquete tcp_wrappers, lo puedes encontrar
+en Cualquier ftp de linux y seguramente en el CD de tu distribuci&oacute;n
+ya compilado y pre-configurado.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este software
+permite filtrar todas las peticiones de acceso a tu m&aacute;quina y 
permitirlas
+o no en funci&oacute;n de unas reglas que tu mismo pones.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Es importante
+saber que el puerto permanece abierto, lo que se cierra son las conexiones
+no autorizadas, por lo que tcp_wrappers no nos proteger&aacute; contra
+ataques como nukes ni esconder&aacute; el puerto ante un 
escaneado.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Uso de 
tcp_wrappers:
+para filtrar un puerto a trav&eacute;s de tcp_wrappers debes definir ese
+puerto en el /etc/inetd.conf con una linea parecida a 
esta:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ftp stream
+tcp nowait roto /usr/sbin/tcpd ftpd</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las reglas
+que permiten o no el acceso se definen en /etc/hosts.allow (para las conexiones
+aceptadas) y /etc/hosts.deny (para las rechazadas).</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La sintaxis
+es muy simple: <I>puerto: host: comando</I></FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Ejemplo:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ftpd:
+ALL: spawn ( /bin/echo -e "\nIntruso %a %n en %d" ; wave -l10 -d1 -f2000
+) &amp;</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esta linea,
+en el /etc/hosts.allow filtra los accesos al puerto ftp (ftpd) de todo
+el mundo (ALL) y despu&eacute;s de permitirle el acceso realiza los siguientes
+comandos (spawn):</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/bin/echo
+-e "\nIntruso %a %n en %d": Saca por pantalla un mensaje indicando los
+datos del intruso y el puerto atacado.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>wave -l10
+-d1 -f2000: Emite un sonido por si no estas atento al 
mensaje.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Otro ejemplo
+(un sistema cerrado a lo bestia):</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: twist ( /usr/local/bin/teardrop %a ) &amp;</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Explicaci&oacute;n:
+a los accesos a Cualquier puerto (ALL) por parte de Cualquier persona (ALL)
+deniega el acceso (twist) y lanza un teardop al curiosillo de 
turno.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Much&iacute;sima
+mas informaci&oacute;n en man inetd.conf, man tcpd, man 
hosts.allow</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El orden
+en que se definen las reglas es importante, ya que tcp_wrappers las va
+examinado una a una desde la primera a la ultima hasta encontrar una regla
+que se cumple, momento en el que ejecuta el comando indicado. Por eso es
+necesario que las reglas est&eacute;n ordenadas de mas permisivas a mas
+restrictivas, por ejemplo si en hosts.allow ponemos en la primera linea
+ALL: ALL: todas las conexiones ser&aacute;n aceptadas independientemente
+de que en lineas posteriores filtremos ciertos o no, capt&aacute;is? si
+no e-mail me :)</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Define
+en /etc/hosts.allow los puertos a los servicios que quieras ofrecer y pon
+en /etc/hosts.deny ALL: ALL</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Los
+par&aacute;metros permiten hacer cosas al intruso usando spawn ( programa
+%a ) ... deja volar tu imaginaci&oacute;n.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: La
+linea ALL: PARANOID detecta los intentos de spoof y 
similares.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5.&nbsp;<A 
NAME="5"></A>services:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este archivo,
+localizado en /etc/services es una base de datos que contiene 
informaci&oacute;n
+sobre los puertos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Es importante
+remarcar que no indica si un puerto esta abierto o cerrado, es solo una
+gu&iacute;a para que los programas sepan localizar los servicios y como
+responder a las peticiones. Por lo tanto en principio no debemos tocar
+nada de este archivo. El archivo donde se abren o cierran puertos es 
inetd.conf.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>De forma
+"extraoficial" podemos comentar lineas para cerrar los puertos que definen.
+Atenci&oacute;n! Este no es un m&eacute;todo correcto y solo lo recomiendo
+en el caso de que el puerto implicado no sea definido en el inetd.conf
+y no podamos usar un firewall para protegerlo.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Podemos ver
+mas informaci&oacute;n en <I>man services</I>.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>6.&nbsp;<A 
NAME="6"></A>Nuevos
+puertos/servicios:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Juntando
+todo lo aprendido hasta aqu&iacute; sobre servicios y puertos ya estamos
+en disposici&oacute;n de crear nuestros propios puertos con sus respectivos
+servicios.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como sencillo
+ejemplo voy a crear un nuevo servicio en el puerto 22 que ser&aacute; atendido
+por un demonio telnet. Para distinguirlo del telnet normal (puerto 23)
+le llamaremos telnet2. Tenemos que modificar los siguientes 
archivos:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/etc/services:
+aqu&iacute; a&ntilde;adimos el servicio, definiendo el puerto que usa y
+su nombre:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>telnet2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
22/tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
telnet2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
# Telnet 2</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/etc/inetd.conf:
+aqu&iacute; definimos las opciones y el demonio que atiende al nuevo 
servicio:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>telnet2 
stream&nbsp; tcp&nbsp;&nbsp;&nbsp;&nbsp; nowait&nbsp; roto&nbsp;&nbsp;&nbsp; 
/usr/sbin/tcpd&nbsp; in.telnetd2</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Usar in.telnetd2
+en lugar de in.telnetd es un truquillo para poder distinguir f&aacute;cilmente
+los dos servicios y poderlos configurar por separado, no olvides hacer
+un link de in.telnetd a in.telnetd2 (si no sabes como se hacen links no
+deber&iacute;as estar leyendo esto, te remito al <A HREF="basico.htm">Manual
+b&aacute;sico</A>, para los impacientes el comando es:
+<I>ln -s origen
+destino</I>, <I>man ln</I>).</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/etc/hosts.allow:
+por supuesto, el nuevo servicio puede ser filtrado por tcp_wrappers para
+delimitar su accesibilidad:</FONT></FONT></FONT>
+<PRE><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>in.telnetd2: 
ALL: twist ( echo -e "Acceso de %a en %d" > /dev/tty11 ) 
&amp;</FONT></FONT></FONT></PRE>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>7.&nbsp;<A 
NAME="7"></A>El
+firewall:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El firewall
+es uno de los sistemas de protecci&oacute;n mas potente junto al uso de
+tcp_wrappers. Para usarlo necesitaremos soporte firewall en el kernel,
+esto se consigue f&aacute;cilmente activando la casilla de</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[*] Network
+firewalls</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[*] IP 
firewalling</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>durante
+la configuraci&oacute;n del kernel. B&aacute;sicamente es solo esto Aunque
+dependiendo de cada uno pueden hacer falta activar otras opciones (soporte
+ethernet ...)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Compaginar
+un firewall con la herramienta ipchains a&ntilde;ade otro nivel de seguridad
+a nuestro sistema. Recordad que los puertos protegidos por firewall no
+se ven con un escaneado de puertos ni son sensibles a nukes ni exploits
+(algunos scanners como nmap son capaces de reconocer puertos protegidos
+por firewall) puesto que toda la informaci&oacute;n que se les env&iacute;a
+es sencillamente eliminada.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para usar
+ipchains pon estas lineas en tu /etc/rc.d/rc.local:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/sbin/ipchains
+-F</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>/sbin/ipchains
+-I input -p tcp -s 127.0.0.1</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>/sbin/ipchains
+-A input -p tcp -d 0.0.0.0/0 515 -j DENY</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto nos
+permite acceso total a nuestra propia maquina y limita los accesos al puerto
+515 (el de la impresora) cosa que no pod&iacute;amos hacer con 
tcp_wrappers.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Gracias
+a Javi Polo por esto.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>A partir
+de aqu&iacute; las posibilidades de configuraci&oacute;n son casi infinitas:
+detectar spoof, seleccionar los protocolos de entrada, salida, definir
+rangos de IPs "amigas" ... sean cuales sean tus necesidades hay una forma
+de cubrirlas con ipchains. Lee el ipchains-howto y el <I>man ipchains</I>
+para mas informaci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>En el caso
+de usar antiguos kernels de la serie 2.0.x se utiliza la herramienta ipfwadm,
+si este es tu caso pon estas lineas en tu 
/etc/rc.d/rc.local:</FONT></FONT></FONT>
+<P><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/sbin/ipfwadm
+-I -f</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/sbin/ipfwadm
+-I -a a -S 127.0.0.1</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>/sbin/ipfwadm
+-I -a d -P tcp -D 0.0.0.0/0 515</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Un
+firewall permite tener control sobre puertos no definidos en el inetd.conf
+y por lo tanto fuera del alcance de tcp_wrappers.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>8.&nbsp;<A 
NAME="8"></A>Actualizate!:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Mantener
+un sistema actualizado previene contra el ataque de exploits provocados
+por bugs en el software.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Actualiza
+el kernel siempre que aparezca una nueva versi&oacute;n estable, por ejemplo
+el kernel 2.0.34 no es sensible a ninguno de los nukes conocidos a la hora
+de realizar este documento. Si tu kernel es anterior estudia seriamente
+la posibilidad de actualizarlo.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Actualiza
+los demonios de todos los servicios que ofrezca tu m&aacute;quina para
+evitar sorpresas. La web de <A HREF="http://www.rootshell.com/";>RootShell</A>
+es un buen sitio donde mantenerse informado.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Por
+alg&uacute;n motivo el IMAP y el sendmail son especialmente sensibles a
+exploits. Si usas alguno de los dos aseg&uacute;rate de tener siempre la
+ultima versi&oacute;n disponible.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Truco: Si
+te ves obligado a recibir conexiones por telnet estudia la posibilidad
+de substituir este servicio por el SSH (Sechure SHell) mucho mas seguro
+y con muchas posibilidades que el telnet tradicional.</FONT></FONT></FONT>
+<BR>&nbsp;
+<BR>&nbsp;
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<CENTER>
+<P><IMG SRC="barra.gif" HEIGHT=10 WIDTH=100%>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>&nbsp;[ <A 
HREF="hack.htm">Linux
+Hack Zone</A> ]</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="seguridad.htm">Zona
+de Seguridad</A> ] [ <A HREF="guerra.htm">Zona de guerra</A> ] [ <A 
HREF="espionaje.htm">Zona
+de Espionaje</A> ] [ <A HREF="logistica.htm">Log&iacute;stica</A> 
]</FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+<P><BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+<BR>
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/shell.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/shell.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/shell.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/shell.htm   
    3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,86 @@
+<HTML><HEAD>
+<TITLE>La shell</TITLE></HEAD>
+
+<BODY background="../img/marble2.jpg" BGCOLOR="#000000"><FONT SIZE=+1 
FACE=HELVETICA COLOR="#FFFFFF">
+
+<CENTER><P>La shell
+<BR>El interprete de comandos de Linux</CENTER>
+
+<P>
+INDICE:
+<P>
+
+<UL><LI>1. Introduccion
+       <UL>
+       <LI>Ke es la shell?
+       <LI>Tipos
+       </UL>
+<LI>2. Escribir comandos
+<LI>3.
+</UL>
+
+<P><HR><P>
+
+
+<P>
+1. Introduccion
+<P>
+<UL>
+<P><LI>Ke es la shell?
+<P>La shell es el lenguaje de comandos de UNIX ; es un programa que lee
+los caracteres tecleados por los usuarios , los interpreta y los
+ejecuta. Tiene un lenguake de programacion propio similar al C, los
+programas basados en shell no necesitan compilarse si no ke son
+interpretados, por lo ke se denominan shell scripts. 
+
+<P><LI>Tipos
+<P>Hay muchos, los mas usados son Bourne Shell (sh), Korn Shell (ksh), C
+Shell (csh). La mas extendida y la ke explicare es bash.
+<BR>La shell ke se asigna a cada usuario es el ultimo parametro de cada
+linea del archivo /etc/passwd, por ejemplo:
+
+<P><i>[dani:~]$ cat /etc/passwd | grep dani
+<BR>dani:x:500:500::/home/dani:/bin/bash</i>
+
+<P>En este caso el usuario dani tiene asignada la shell bash.
+
+</UL>
+
+<P><HR><P>
+
+<P>
+2. Escribir comandos
+<P>
+Hay dos maneras de ejecutar un comando, una es escribiendo el nombre del
+comando directamente y pulsando enter, por ejemplo:
+
+<P><i>[dani:~]$ echo Hola
+<BR>Hola</i>
+
+<P>Esta manera es valida si el comando se encuentra dentro de alguno de los
+directorios definidos en el PATH (para ver un listado de los directorios del
+PATH podemos usar el comando <i>echo $PATH</i>)
+
+<P>Si el comando no se encuentra en el PATH, la manera de ejecutarlo es
+dando su ruta completa (esta es la manera mas correcta de ejecutar
+comandos por lo ke funciona tanto con comandos incluidos en el PATH como los
+ke no lo estan), es decir: /directorio/subdirectorios/archivo, por
+ejemplo:
+
+<P><i>[dani:~]$ /bin/echo Hola
+<BR>Hola</i>
+
+<P>Para ejecutar un comando ke se encuentra en el directorio actual y no
+esta incluido en el PATH se usa la forma:
+
+<P><i>[dani:/bin]$ ./echo Hola
+<BR>Hola</i>
+
+
+
+<P><HR><P><CENTER><a href="index.htm">Volver a la pagina
+principal</a></CENTER>
+
+
+</FONT>
+</BODY></HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/tcp_wrappers.htm
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/tcp_wrappers.htm
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/tcp_wrappers.htm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/linuxzone/tcp_wrappers.htm
        3 Mar 2012 06:14:47 -0000       1.1
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.2.5 
i586) [Netscape]">
+   <TITLE>Tcp_wrappers</TITLE>
+</HEAD>
+<BODY BGCOLOR="#000000" BACKGROUND="marble2.jpg">
+
+<CENTER><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>Tcp_wrappers</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Controlando
+los puertos</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>[ <A 
HREF="#Introduccion">Introducci&oacute;n</A>
+] [ <A HREF="#Configuracion">Configuraci&oacute;n</A> ] [ <A 
HREF="#Ejemplos">Ejemplos</A>
+] [ <A HREF="#Limitaciones">Limitaciones</A> ] [ <A 
HREF="#Avanzado">Avanzado</A>
+] [ <A HREF="#Links">Links</A> ]</FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+<P><BR>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>0.&nbsp;<A 
NAME="Introduccion"></A>Introducci&oacute;n</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Tcp_wrappers
+te permite controlar los puertos de software de tu PC, o sea que no es
+para los com no los lpt, sino para el puerto telnet, ftp, pop3 
...</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El primer
+requisito es tener instalado y configurado el superservidor inetd, esto
+es muy f&aacute;cil y solo se trata de instalar el demonio y asegurarse
+de que se arranca durante el inicio de la m&aacute;quina.</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para asegurarnos
+de que lo tenemos instalado i corriendo ejecutaremos el comando: <I>ps
+aux | grep inetd</I>, y debe salir algo como esto:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>140 ?
+S 0:00 inetd</FONT></FONT></FONT></I><FONT FACE="HELVETICA"><FONT 
COLOR="#FFFFFF"><FONT SIZE=+1>
+si no es que algo va mal, repasa la instalaci&oacute;n.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para mas
+informaci&oacute;n: man inetd, man inetd.conf y man 
services</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ya tenemos
+el inetd instalado, el principal archivo de configuraci&oacute;n del mismo
+es el /etc/inetd.conf, en el, cada linea se refiere a un puerto/servicio
+que podemos ofrecer. Sin tcp_wrappers cada una de las lineas deber&iacute;a
+parecerse a esto:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>telnet
+stream tcp nowait root /usr/sbin/in.telnetd</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Esto significa
+que cada llamada al puerto telnet ser&aacute; gestionada por el demonio
+in.telnetd</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ahora instalamos
+el paquete tcp_wrappers, una vez instalado lo &uacute;nico necesario es
+cambiar la linea anterior por algo como esto:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>telnet
+stream tcp nowait root /usr/sbin/tcpd in.telnetd</FONT></FONT></FONT></I>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La diferencia
+es que ahora, lo que se ejecuta al recibir un telnet es el demonio tcpd,
+al que se le pasa como par&aacute;metro el demonio que debe controlar,
+en este caso in.telnetd.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para mas
+informaci&oacute;n: man tcpd, man hosts_access, man hosts.allow y man 
hosts.deny</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>2.&nbsp;<A 
NAME="Configuracion"></A>Configuraci&oacute;n</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Se basa 
&uacute;nicamente
+en dos archivos, /etc/hosts.allow y /etc/hosts.deny, aunque como veremos
+mas adelante solo hace falta uno de ellos.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Por defecto,
+a menos que se indique lo contrario, todos los servicios y/o direcciones
+definidas en el hosts.allow son admitidas mientras que las definidas en
+el hosts.deny son rechazadas.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>La sintaxis
+de estos archivos es muy simple:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>servicio:
+host: acci&oacute;n</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><I>servicio</I>:
+es la primera palabra que encontramos en cada linea del archivo inetd.conf,
+por ejemplo son servicios el in.telnetd, in.fingerd ...</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Si queremos
+referirnos a todos los puertos bastar&aacute; con poner ALL, tambi&eacute;n
+podemos poner una lista de servicios separados por espacios en 
blanco.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><I>host</I>:
+es una o mas direcciones de red separadas por espacios en blanco, esta
+direcci&oacute;n se contrasta con la del sistema que nos hace la 
petici&oacute;n
+de conexi&oacute;n. La direcci&oacute;n puede ser del tipo IP num&eacute;rica,
+IP/mask, rango de IP (por ejemplo 195.116.), dominio (como por ejemplo
+arrakis.es), grupo de dominios (como por ejemplo .es o 
arrakis.)</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ademas pueden
+usarse otras palabras como ALL (para referirse a todos los host), LOCAL
+(los que no tienes un . en su nombre) KNOWN o UNKNOWN (de los que se tiene
+informaci&oacute;n o no) y PARANOID (el nombre que te ofrecen no concuerda
+con el que tcp_wrappers espera).</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1><I>acci&oacute;n</I>:
+puede tener 4 valores, accept (acepta la conexi&oacute;n si se cumplen
+las condiciones impuestas por servivio/host), deny (rechaza la conexi&oacute;n,
+spawn (acepta la conexi&oacute;n y realiza el comando bash que se le pasa
+como par&aacute;metro) y twist (rechaza la conexi&oacute;n y realiza el
+comando bash).</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>A los comandos
+se les pueden pasar par&aacute;metros relacionados con la conexi&oacute;n,
+estos son:</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>%a, %c,
+%h y %n: nombre de la m&aacute;quina que intenta acceder</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>%d: demonio
+que controla el puerto por el que accede</FONT></FONT></FONT>
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>%p: PID
+del proceso que controla la conexi&oacute;n</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Con esto
+ya podemos hacer nuestra primera configuraci&oacute;n super 
segura:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#/etc/hosts.allow</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: deny</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>El primer
+archivo que se mira es hosts.allow por lo que en este caso no importa lo
+que ponga en hosts.deny, porque todas las conexiones se rechazan de todas
+formas.</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>3.&nbsp;<A 
NAME="Ejemplos"></A>Ejemplos</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Como mejor
+se aprende es viendo algunos ejemplos. De mas sencillos (y por lo tanto
+cerrados) a mas complicados (mas &uacute;tiles, divertidos y 
peligrosos)</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Completamente
+cerrado:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#/etc/hosts.allow</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: deny</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Cerrado para
+todos excepto para las conexiones locales:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#/etc/hosts.allow</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+127.0.0.1</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: deny</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Conexi&oacute;n
+local total, red local acceso por telnet y ftp, resto 
cerrado:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#/etc/hosts.allow</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+127.0.0.1</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>in.telnetd
+in.ftpd: LOCAL</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: deny</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Sistema cerrado
+con informe de accesos:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#/etc/hosts.allow</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: twist ( /usr/bin/echo -e "Intruso %a en puerto %d" 
)</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Sistema abierto
+a la red local y cerrado al exterior con acciones diferentes en funci&oacute;n
+del tipo de acceso:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT 
SIZE=+1>#/etc/hosts.allow</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+LOCAL: spawn ( echo -e "Acceso autorizado de %a por %d" ) 
&amp;</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+PARANOID: twist ( echo -e "ATACANTE %a por puerto %d, lanzando nukes" ;
+/usr/local/bin/nukes.sh %a ) &amp;</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+UNKNOWN: twist ( echo -e "Posible nuke o scan de %a en %d" ) 
&amp;</FONT></FONT></FONT></I>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: twist ( /bin/echo -e "INTRUSO! %a, usando puerto %d" ) 
&amp;</FONT></FONT></FONT></I></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>4.&nbsp;<A 
NAME="Limitaciones"></A>Limitaciones</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Este sistema
+aunque es muy f&aacute;cil e intuitivo tiene algunas limitaciones, algunas
+sencillas de solucionar otras no tanto:</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Solo cubre servicios
+definidos en el archivo inetd.conf: por ejemplo no informa de ning&uacute;n
+intento de acceso por el puerto del BO, NetBUS ... ni otros servicios como
+printer o X que no usan inetd.conf para configurar sus 
conexiones.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>No detecta algunos
+tipos de conexi&oacute;n: por ejemplo los pings, algunos stealth scan ...
+la soluci&oacute;n es usar alg&uacute;n sistema de 'escucha' mas fino,
+como tcpdump.</FONT></FONT></FONT></LI>
+
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Las lineas de
+los archivos hosts.allow y hosts.deny no deben contener saltos de linea:
+o usas un editor que no rompa las lineas largas o pones un backslash (\)
+antes de cada salto de linea</FONT></FONT></FONT></LI>
+</UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>5.&nbsp;<A 
NAME="Avanzado"></A>Avanzado:</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Usos avanzados
+de tcp_wrappers, que mas puedo hacer con esto?</FONT></FONT></FONT>
+<UL>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Detectando spoofing:
+los intentos de spoofing son detectados por tcp_warppers y los clasifica
+dentro de la categor&iacute;a de PARANOID, por lo que esta linea en hosts.allow
+puede ayudarnos bastante a detectarlo:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+PARANOID: twist ( echo -e "Spoofing en puerto %d \nLa IP %a es falsa" 
)</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Mantener informes
+de red: redirigir toda la informaci&oacute;n de salida a un archivo o una
+consola, nos ayudara a tener informes exhaustivos de los accesos que recibimos,
+los ataques, los accesos ... para hacer esto basta con poner lineas 
as&iacute;:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: spawn ( echo -e "IP %a en %d" > /var/log/archivo 
)</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Realizar 
m&uacute;ltiples
+comandos: a veces es necesario hacer mas de una cosa frente un acceso,
+la sintaxis es igual que si lo hici&eacute;ramos desde 
bash:</FONT></FONT></FONT></LI>
+
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: spawn ( echo -e "IP %a en %d" ; wavplay alarma.wav ; nestea %a 
)</FONT></FONT></FONT></I>
+<LI>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Enviando mensajes
+al sistema remoto: se puede enviar un mensaje predefinido (banner) al sistema
+remoto, en este mensaje podemos explicar porque no le damos acceso, que
+tipo de m&aacute;quina tnemos, que puede hacer o no 
...</FONT></FONT></FONT></LI>
+
+<BR><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Para que
+el sistema remoto vea el banner utilizaremos la linea:</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>ALL:
+ALL: banners /directorio_de_banners</FONT></FONT></FONT></I>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Nota: el
+banner debe llamarse como el demonio que se lanza, es decir si queremos
+que se vea un mensaje al entrar por telnet, el banner deber&aacute; llamarse
+in.telnetd</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Ejemplo:
+este banner (al que llamaremos in.telnetd) se ve al hacer acceso por 
telnet</FONT></FONT></FONT>
+<BR><I><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Hola
+%a, bienvenido a mi sistema. Tu IP esta siendo guardada para mayor 
seguridad.</FONT></FONT></FONT></I></UL>
+<FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>Mas 
informaci&oacute;n
+en /usr/doc/tcp_wrappers-x.x</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1>6.&nbsp;<A 
NAME="Links"></A>Links</FONT></FONT></FONT>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="ftp://ftp.win.tue.nl/pub/security/tcp_wrapper.ps.Z";>Documentaci&oacute;n
+en postscript</A></FONT></FONT></FONT>
+<P>
+<HR>
+<BR>&nbsp;
+<P><BR>
+<CENTER>
+<P><FONT FACE="HELVETICA"><FONT COLOR="#FFFFFF"><FONT SIZE=+1><A 
HREF="index.htm">Volver
+a la pagina principal</A></FONT></FONT></FONT></CENTER>
+
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/makina.sh.gz
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/makina.sh.gz
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/makina.sh.gz
Binary files /dev/null and /tmp/cvs20IJXx differ

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/setserial.sh.gz
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/setserial.sh.gz
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/setserial.sh.gz
Binary files /dev/null and /tmp/cvsHu0Yuy differ

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/usuarios.sh.gz
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/usuarios.sh.gz
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/tgz/usuarios.sh.gz
Binary files /dev/null and /tmp/cvs5sGKYB differ

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/dosemu.txt
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/dosemu.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/dosemu.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/dosemu.txt    
3 Mar 2012 06:14:48 -0000       1.1
@@ -0,0 +1,187 @@
+#############
+# Este fichero es /etc/dosemu.conf, incluido en /var/lib/dosemu/global.conf
+#
+# Linux DOSEMU configuración para versiones >= 3 (dosemu-0.97.0.1)
+#
+# ./doc/README.txt (capitulo 2.) contiene una descripción de la sintaxis
+# y del uso de dosemu.conf.
+#
+#
+# Los derechos de accesos están definidos en:
+#
+#      /etc/dosemu.users
+#
+##############################################################################
+
+
+
+# Apuntes para la edición de esta sección:
+#
+#   In    $_xxx = (n)    n es un valor numérico o booleano.
+#                  =     =
+#   In    $_zzz = "s"    s es una cadena
+#
+# Please edit only beteen the brakets and quotes and keep the rest intact.
+#        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^
+
+$_debug = "-a"         # Algún formato como -D en la opción de la línea
+                       # de comando (pero sin la -D) -NO CAMBIAR-
+$_features= ""         # Lista de temporalidad de hack, mire advertencias
+                       # en el fichero ChangeLog. Significados.
+$_timint = (on)                # Emular tipo INT08 temporizador de 
interrupciones
+$_mathco = (off)       # Emular coprocesador matemático.
+$_cpu = "80586"                # Mostrar al DOS el tipo de CPU válida 80[345]86
+                       # o "emular" para un no-nativa CPU. (386 dicho caso)
+
+$_rdtsc = (on)         # Si es posible usa el ciclo contador tipo Pentium
+$_cpuspeed = (0)       # 0 = calibrado por dosemu, más valores (e.g.166.666)
+$_pci = (off)
+
+$_xms = (64576)                # en Kbyte
+$_ems = (8086)         # en Kbyte
+$_ems_frame = (0xe000)
+$_dpmi = (off)         # en Kbyte
+$_dosmem = (640)       # en Kbyte, < 640
+$_hardware_ram = ""    # lista de segmentos valores/rangos tal como
+                       # "0xc8000 rango 0xcc000,0xcffff"
+
+$_secure ="ngd"                # seguridad : n (normal users), g (guest), d 
(dexe)
+                       # si cadena vacia: dependerá en 'restricted'
+                       # "0": siempre inseguro (not recommended)
+$_odd_hosts = ""       # lista negra tal como:"lucifer.hell.com billy.the.cat"
+$_diskless_hosts=""    # lista negra tal como:"hacker1 newbee gateway1"
+
+$_emusys = ""          # cadena vacía o 3 carac., config.sys   -> config.XXX
+$_emubat = ""          # cadena vacía o 3 carac., autoexec.bat -> autoexec.XXX 
+$_emuini = ""          # cadena vacía o 3 carac., system.ini   -> system.XXX
+
+$_hogthreshold = (0)   # 0 == toda la CPU en poder de DOSEMU
+$_irqpassing = ""      # lista de IRQ número (2-15) para pasar al DOS 
+                       # tal como: "3 8 10"
+$_speaker = "emulated" # "native" o "emulated"
+
+
+$_term_char_set = "latin1"     # Código global de caracteres para la 
+                       # selección de caracteres
+                       # "" == automatico, más: ibm, latin, latin1, latin2
+
+$_term_color = (on)    # terminal con color soportado
+$_term_updfreq = (4)   # Tiempo entre refrescos (units: 20 == 1 second)
+$_escchar = (30)       # 30 == Ctrl-^, prefijos de secuencia especiales
+
+$_rawkeyboard = (0)    # No cambiar aquí, pude ser PELIGROSO
+$_layout = "es"                # uno de: finlandia(-latin1), de(-latin1), be, 
it, us
+                       # uk, dk(-latin1), keyb-no, no-latin1, dvorak, po
+                       # sg(-latin1), fr(-latin1), sf(-latin1), es(-latin1)
+                       # sw, hu(-latin2), hu-cwi, keyb-user
+                       # hr-cp852, hr-latin2
+$_keybint = (off)      # emular interrupciones del teclado: PCish
+
+
+$_X_updfreq = (5)      # Tiempo de refresco (units: 20 == 1 second)
+$_X_title = "DOS in a BOX"     # Titulo en la barra de la ventana X
+$_X_icon_name = "xdos" # Texto para el icono, cuando esté minimizado
+$_X_keycode = (on)     # on == Traduce el teclado via dosemu tablas de cód.
+$_X_blinkrate = (8)    # blink rate for the cursor
+$_X_font = ""          # basename from /usr/X11R6/lib/X11/fonts/misc/*
+                       # (without extension) e.g. "vga"
+$_X_mitshm = (on)      # Uso compartido de las extensiones de memoria
+$_X_sharecmap = (off)  # Compartir mapa de colores con otras aplicaciones
+$_X_fixed_aspect = (on)        # Iniciar fijo el aspecto de redimension de la 
ventana
+$_X_aspect_43 = (on)   # Siempre usar un aspecto ratio de 4:3 por graficos
+$_X_lin_filt = (off)   # Uso linear de filtrado para interpolación >15 bpp
+$_X_bilin_filt = (off) # Use bi-linear filtering for >15 bpp interpolation
+$_X_mode13fact = (2)   # Tamaño inicial del factor de vídeo 
+                       # modo 0x13 (320x200)
+$_X_winsize = ""       # "x,y" para iniciar el tamaño vent.
+$_X_gamma = (1.0)      # gamma correción.
+$_X_vgaemu_memsize = (1024) # Tamaño (en KBytes) para el "buffer frame" para
+                       # la emulación de la VGA
+$_X_lfb = (on)         # uso linear para "buffer frame" en modos VESA
+$_X_pm_interface = (on)        # use protegido modo entrelazados para modos 
VESA 
+$_X_mgrab_key = ""     # KeySym nombre para activar el ratón grab,
+                       # vacio == off (apagado)
+$_X_vesamode = ""      # "xres,yres ... xres,yres"
+                       # Lista de modos vesa a añadir. La lista ha de
+                       # contener espacios separados entre los pares
+                       # "xres,yres" 
+
+
+
+$_video = "vga"                # uno de: plainvga, vga, ega, mda, mga, cga
+$_console = (1)                # uso 'console' video
+$_graphics = (1)       # uso de la tarjeta BIOS para iniciar gráficos
+$_videoportaccess = (1)        # allow videoportaccess when 'graphics' enabled
+$_vbios_seg = (0xe000) # Iniciar la dirección de su VBIOS (e.g. 0xe000)
+$_vbios_size = (0x8000)# Iniciar el tamaño  de su BIOS (e.g. 0x8000)
+$_vmemsize = (1024)    # size of regen buffer
+$_chipset = "s3"       # Uno de: plainvga, trident, et4000, diamond, avance
+                       # cirrus, matrox, wdvga, paradise, ati, s3
+$_dualmon = (0)                # Si tiene una VGA _plus_ uno hgc (2 monitores)
+
+
+$_vbootfloppy = ""     # Si tu quieres iniciar desde un disco/disquete 
+                       # virtual 
+                       # Nombre del fichero imagen en: /var/lib/dosemu
+                       # e.g. "floppyimage" disables $_hdimage
+                       #      "floppyimage +hd" does _not_ disable $_hdimage
+$_floppy_a ="threeinch:/dev/fd0"       # o "fiveinch" (cinco pulgadas)
+                       # "threeinch" (tres pulgadas) o "atapi" o nada, si
+                       # no existe, opcionalmente el dispositivo puede ser
+                       # agregado tal como: "threeinch:/dev/fd0"
+$_floppy_b = ""                # Igual para B:
+
+$_hdimage = "/dev/hda1 /dev/hdb1" # Lista de discos duros /var/lib/dosemu
+                       # asignados en este orden tal como:
+                       # "hdimage_c hdimage_d hdimage_e"
+                       # Si el nombre comienza con '/dev/', entonces el
+                       # acceso a la partición esta hecha. esta puede ser
+                       # "/dev/hda1" o "/dev/hda1:ro" para (r)ead(o)nly
+                       # sólo lectura.
+                       # Hdimages y dispositivos pueden ser mezclados como:
+                       # "hdimage_c /dev/hda1 /dev/hda3:ro"
+                       # Note: 'wholedisk' is _not_ supported.
+$_hdimage_r = $_hdimage        # hdimages para 'accesos restringidos' 
+                       # (si es diferente)
+
+$_aspi = ""            # Lista de dispositivos genericos SCSI que están
+                       # disponibles para la creación dispositivo aspi.
+                       # (El formato de entrada es:
+                       # 'device:type:mappedtarget' tal como:
+                       # "sg2:WORM sg3:Sequential-Access:6 sg4:CD-ROM" o
+                       # "sg2:4 sg3:1:6 sg4:5" (Que es lo mismo)
+
+$_com1 = "/dev/mouse"  # e.g. "/dev/mouse" or "/dev/cua0"
+$_com2 = ""            # e.g. "/dev/modem" or "/dev/cua1"
+$_com3 = ""            # dito                 "/dev/cua2"
+$_com4 = ""            # dito                 "/dev/cua3"
+$_ttylocks = ""                # Lock directory (e.g. "/var/lock")
+                       # default ("") is /usr/spool/uucp
+
+$_mouse = "microsoft"  # uno de: microsoft, mousesystems, logitech, mmseries
+                       # mouseman, hitachi, busmouse, ps2
+$_mouse_dev = "com1"   # uno de: com1, com2, com3, com4 o /dev/mouse
+$_mouse_flags = ""     # list of none or one or more of:
+                       # "emulate3buttons cleardtr"
+$_mouse_baud = (0)     # baudrate, 0 == don't set
+
+$_printer = "lp"       # lista de (/etc/printcap) printer names to appear as
+                       # LPT1, LPT2, LPT3 (not all are needed, empty for none)
+$_printer_timeout = (20)# idle time in seconds before spooling out
+
+$_ports = ""           # list of portnumbers such as "0x1ce 0x1cf 0x238"
+                       # or "0x1ce range 0x280,0x29f 310"
+                       # or "range 0x1a0,(0x1a0+15)"
+
+$_ipxsupport = (off)   # Protocolos para hablar con servidores NOVELL
+$_novell_hack = (off)  # Protocolos para hablar con servidores NOVELL
+$_vnet = (off)         # 'on' for packet-multi (used by dosnet)
+
+$_sound = (on)         # sound support on/off
+$_sb_base = (0x220)
+$_sb_irq = (5)
+$_sb_dma = (1)
+$_sb_dsp = "/dev/dsp"
+$_sb_mixer = "/dev/mixer"
+$_mpu_base = "0x330"
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kde.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kde.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kde.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kde.txt       
3 Mar 2012 06:14:48 -0000       1.1
@@ -0,0 +1,98 @@
+****************************************************************************
+****** KDE Micro-HOWTO ****************************** Por Daniel Molina ****
+****************************************************************************
+
+Este documento ha sido creado usando la propia documentacion de KDE
+y por mi propia experiencia.
+
+Solo lo he probado con la Beta 4 de KDE en Red Hat 5.0, por lo ke
+la localizacion de los archivos puede cambiar en otras distribuciones.
+
+El primer paso es conseguir los archivos.
+KDE se distribuye en forma de binarios en los tres formatos mayoritarios,
+TGZ RPM y DEB, por lo ke en principio no habra ke compilarlos, aunke
+para los ke lo prefieran tambien pueden conseguirse las fuentes, tanto
+en RPM como en TGZ.
+
+KDE si distribuye en dos versiones, una para libc 5 y otra para glibc.
+Si tu sistema esta basado en glibc (por ejemplo la Red Hat 5.0) deberas
+conseguir los paketes de glibc, en otro caso deberas conseguir los de
+libc 5.
+
+1. Conseguir la libreria Qt.
+       Esta libreria es basica para el funcionamiento de KDE por
+       lo ke sera el primer paso. Las versiones validas son 1.32 y
+       1.33 aunke se recomienda la 1.33
+
+       Se pueden conseguir del mismo ftp de KDE o de alguno de sus
+       mirrors:
+
+               ftp.kde.org
+
+       Tambien se encuentran en TGZ RPM y DEB. Si se van a compilar
+       programas para KDE tambien sera necesario conseguir la Qt-devel.
+
+2. Conseguir KDE.
+       El ftp es:
+
+               ftp.kde.org
+
+       Este ftp suele estar lleno por lo ke es interesante ke utiliceis
+       algun mirror. Al entrar en el web o el ftp de KDE encontrareis
+       una lista de mirrors.
+
+       Son muchos paketes, aunke los imprescindibles son:
+
+               KDE-support
+               KDE-libs
+               KDE-base
+       
+       Los demas son opcionales, pero recomiendo ke se cogan todos
+       pues contienen aplicaciones muy utiles.
+
+       Puede ser necesario actualizar algunos componentes de sistema,
+       en mi caso fue necesario actualizar la libstdc y la lig++ a
+       la version 2.8.2 para poder instalar la Beta4 para glibc.
+
+3. Instalacion de los paketes.
+       Por este orden:
+
+               (Primero los posibles prerekisitos: libstdc ...)
+               Qt-1.33 (o 1.32)
+               KDE-support
+               KDE-libs
+               KDE-base
+               KDE-* (todos los demas)
+
+       Y si se kieren compilar programas:
+
+               Qt-devel-1.33 (o Qt-devel-1.32)
+
+4. Modificacion de archivos de sistema.
+       (Asumo ke KDE esta instalado en /opt/kde)
+
+       En el archivo /etc/profile:             
+
+               KDEDIR="/opt/kde"
+               QTDIR="/usr/include/qt"
+               PATH="$PATH:$KDEDIR/bin"
+
+               export KDEDIR QTDIR PATH
+
+       En el archivo /etc/ld.so.conf
+
+               /opt/kde/lib
+
+5. Arrancar KDE.
+       En el archivo /etc/X11/xinit/xinitrc, cambiar el gestor de 
+       ventanas actual por:
+
+               exec startkde
+
+       Esta linea sera la ultima en el archivo y no llevara la '&'
+       (Si no reconoceis en ke linea se arranca el gestor de ventanas
+       buscad algo parecido a 'exec fvwm')
+
+6. Arrancar X.
+
+               startx

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kdm.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kdm.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kdm.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/kdm.txt       
3 Mar 2012 06:14:48 -0000       1.1
@@ -0,0 +1,61 @@
+****************************************************************************
+****** KDM Micro-HOWTO ****************************** Por Daniel Molina ****
+****************************************************************************
+
+Este documento ha sido creado usando mensajes aparecidos en el area
+de news es.comp.os.linux y por mi propia experiencia.
+
+Solo lo he probado con la Beta 4 de KDE en Red Hat 5.0, por lo ke
+la localizacion de los archivos puede cambiar en otras distribuciones.
+
+KDM es un substituto mejorado par el xdm. Puedes leer la ayuda ke
+el propio programa trae en formato HTML (ingles)
+
+1. Archivo /etc/inittab
+       En este archivo se define el runlevel del arranke.
+       En la primera linea fijamos el runlevel a 5 que es el
+       ke arranca en modo grafico:     
+               
+               id:5:initdefault
+
+       En la linea donde se define el xdm (generalmente la ultima)
+       pondremos:
+
+               x:5:respawn:/opt/kde/bin/kdm -nodaemon
+
+2. Archivo /etc/X11/xdm/Xsession_0
+       Eliminar todas las referencias a programas para ejecutar
+       (estan en condicionales if esle) y poner en su lugar, al 
+       final del archivo:
+
+               exec startkde
+
+3. Archivo /etc/X11/xdm/Xsetup_0
+       Solo debe aparecer esto:
+
+               /opt/kde/bin/kdmdesktop
+
+4. Archivo /etc/pam.d/xdm
+       Poner al final:
+
+               auth    required        /lib/security/pam_unix_auth.so
+               auth    required        /lib/security/pam_unix_acct.so
+
+5. Test
+       Cerrar el entorno grafico y ejecuta kdm como root:
+
+               kdm -nodaemon
+
+       Si da algun mensaje de error repasa ke todas las rutas sean
+       correctas y leete la ayuda del programa.
+
+       Si no te aprecen todos los usuarios puedes editar el archivo
+       /opt/kde/share/config/kdmrc asegurate ke aparecen estas lineas
+       sin comentar:
+
+               UserView=1
+               Users=root;usuario1;usuario2 ... 
+
+6. Reiniciar
+       Al reiniciar (reset) la makina deberia entrar en el modo
+       grafico y pedir login y password.       

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/lilo.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/lilo.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/lilo.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/lilo.txt      
3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,34 @@
+# /etc/lilo.conf
+
+# Despues de modificar este archivo debes ejecutar /sbin/lilo (como root)
+# y reiniciar el ekipo para ke los cambios tengan efecto
+# El kernel por defecto es el primero ke se define en este archivo,
+# en mi caso el vmlinux-2.0.34
+
+# Mas informacion en 'man lilo' y 'man lilo.conf'
+
+# Opciones generales
+boot=/dev/hda                  #Donde se instala Lilo (MBR del hda1)
+#message=/boot/message         #Mensaje al inicio
+prompt                         #Preguntar o iniciar el predefinido
+timeout=30                     #Tiempo de espera (3")
+verbose=2                      #Dame informacion (1-5)
+#compact                       #Mas rapido (a mi no me va)
+
+image=/boot/vmlinuz-2.0.34     #Ubicacion del kernel
+        label=linux            #Etiketa
+        ramdisk=0              #Ramdisks
+        root=/dev/hda2         #Nombre de la particion root
+        vga=normal             #Tipo de vga (normal/ext/ask)
+        read-only              #Solo lectura (recomendado)
+
+#image=/boot/vmlinuz-2.1.106   #Ubicacion del kernel
+#      label=2.1.106           #Etiketa
+#      root=/dev/hda2          #Nombre de la particion root
+#      read-only
+#      vga=normal
+
+other = /dev/hda1              #Descripcion de DOS (en mi caso VFAT)
+       label = dos             #Etiqueta
+       table = /dev/hda        #Ubicacion del MBR
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/modem.txt
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/modem.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/modem.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/modem.txt     
3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,181 @@
+****************************************************************************
+****** Instalacion del modem HOWTO ****************** Por Daniel Molina ****
+****************************************************************************
+
+Este documento ha sido creado usando mensajes aparecidos en el area
+de mensajes R34.linux de Fido y por mi propia experiencia.
+Solo lo he probado en Red Hat 5.0 por lo ke los nombres y localizaciones 
+de los archivos pueden variar respecto a otras distribuciones.
+
+1. Instalacion fisica del modem
+2. Eleccion del puerto COM
+       2.1 Linux y los puertos COM
+       2.2 Linux y el Plug'n'Play
+3. El comando setserial
+4. El archivo rc.serial
+5. Permisos de los archivos
+6. Contactar con el autor
+
+1. Instalacion fisica del modem:
+
+       Esto no tiene complicacion, se hace perfectamente leyendo las 
+       instrucciones del manual del modem. Tan solo recordar ke los
+       Win-Modem no funcionan bajo Linux (de momento) ni los MWAVE 
+       de IBM.
+       En funcion del tipo de instalacion nos encontramos con modems
+       internos y externos.
+
+2. Eleccion del puerto COM:
+
+       Los modems usan el puerto COM para comunicarse con el ordenador
+       por lo ke la correcta eleccion y configuracion de este puerto es
+       imprescindible.
+
+       En algunos modems hay ke seleccionar el puerto a traves de
+       jumpers situados en el propio modem, mientras ke los Plug'n'Play
+       (PnP a partir de ahora) se configuran mediante software o
+       usan los recursos disponibles del sistema.
+
+       Es muy comun asignar el COM2 al modem, pues la mayoria tenemos
+       el mouse en COM1 aunke va a gusto del usuario.
+
+2.1 Linux y los puertos COM:
+
+       Linux trata los puertos COM de la misma manera ke todos los
+       dispositivos de sistema, con una entrada en el directorio /dev
+
+       Los archivos son:
+
+               /dev/cua0 o /dev/ttyS0 : COM1
+               /dev/cua1 o /dev/ttyS1 : COM2
+               /dev/cua2 o /dev/ttyS2 : COM3
+               /dev/cua3 o /dev/ttyS3 : COM4
+
+       Existen mas, pero su uso no es necesario en la mayoria de los casos.
+       Los dispositivos cuaX y ttySX son analogos aunke se recomienda el
+       uso de ttySX por sus mayores prestaciones (los cuaX estan obsoletos)
+       
+       Nota: Por algun motivo DOSEmu no se entiende bien con ttySX, por
+       lo ke en dosemu.conf deberemos definir el modem en /dev/cuaX.
+
+       Podemos ver los puertos COM ke detecta el kernel durante el 
+       arranke con un simple:
+
+               # dmesg | grep tty
+
+       Ademas esto nos muestra las opciones por defecto de los puertos.
+
+       Una vez determinado ke puerto va a usar el modem crearemos un
+       nuevo dispositivo ke use es puerto, con la orden:
+
+               # ln -s /dev/ttySX /dev/modem
+       
+       En lugar de ttyS puede usarse cua (no recomendado), la X se 
+       substituye por un numero (0-3) ke determina el puerto.
+
+2.2 Linux y el PnP:
+
+       En primer lugar recomiendo siempre el uso de dispositivos ke
+       no sean PnP, ya sean modems, targetas de red, de sonido ...
+       Existen varias alternativas para el uso de modems PnP bajo Linux
+
+       a) Las isapnptools
+               Estas utilidades nos permiten usar modems PnP con
+               BIOS antiguas ke no soportan esta norma.
+               Instala el pakete isapnptools-1.11 o posterior y 
+               teclea:
+
+                       # man isapnp
+                       # man pnpdump
+
+       b) Soporte PnP en el kernel:
+               Los kernels experimentales de la serie 2.1.xxx soprtan
+               PnP desde hace muchas versiones. 
+               Para dar soporte PnP deberemos recompilar el kernel y
+               seleccionar PnP como modulo.
+
+       c) Inicializacion en MS-DOS/WIN95:
+               Algunos modems llevan utilidades MSDOS/WIN para ajustar
+               los valores de los puertos. Puedes usar este software
+               para situar tu modem en COM2.
+               En general esta operacion solo habra ke realizarla una vez.
+               
+               Nota: si tu software no encuentra recursos para el COM2
+               intenta inhabilitarlo desde la BIOS.
+
+3. El comando setserial:
+
+       En la mayoria de los casos el modem ya esta instalado y listo para 
+       ser usado en el dispositivo /dev/modem, pero algunos modems rekieren 
+       cambiar algunos parametros del puerto.
+
+       Para eso se usa el comando setserial, el uso es:
+
+               # setserial dispositivo opciones
+
+       Un ejemplo de empleo completo de setserial seria:
+
+               # setserial /dev/ttyS1 port 2f8 irq 3 uart 16550A 
+               # setserial /dev/ttyS1 baud_base 115200
+       
+       port: Indica la region I/O 
+       irq: Indica la interrupcion
+       uart: Indica el tipo de uart
+       baud_base: Indica la velocidad
+
+       Todos estos parametros pueden modificarse para un uso optimo del
+       dispositivo. Mas informacion en 'man setserial'
+
+       Para ver toda la informacion disponible sobre nuestro modem
+       escribiremos:
+
+               # setserial -a /dev/modem
+
+       Y comprobamos ke todos los datos son lo ke keremos.
+       
+4. El archivo rc.serial:
+
+       Si debemos hacer modificaciones en los puertos, estas pueden
+       automatizarse colocandolas en el archivo /etc/rc.d/rc.serial
+       La sintaxis correcta de este archivo podria ser:
+
+               ---- /etc/rc.d/rc.serial --------- Cut here ----
+               #!/bin/bash
+               setserial /dev/ttyS1 irq 5
+               ---------------------------------- Cut here ----
+
+       Esto fuerza a ke el sistema asigne la IRQ 5 al COM2 en cada arranke.
+
+       Parece ser ke los usuarios de Debian tienen este archivo en
+       /etc/rc.boot/0setserial (agredeceria mas informacion sobre esto)
+
+       Para asegurarnos de ke este archivo es leido por el sistema
+       escribimos las siguientes lineas en el archivo /etc/rc.d/rc.sysinit:
+
+               ---- /etc/rc.d/rc.sysinit -------- Cut here ----
+               [...]
+               if [ -f /etc/rc.d/rc.serial ]; then
+                       /etc/rc.d/rc.serial
+               fi
+               [...]
+               ---- /etc/rc.d/rc.sysinit -------- Cut here ----
+
+5. Permisos de los archivos:
+
+       Los usuarios ke vayan a usar el modem deben tenr permisos de
+       escritura en el dispositivo correspondiente:
+       /dev/cuaX o /dev/ttySX : crw-rw-rw-     # chmod 666 /dev/xxxxX
+       /dev/modem : lrwxrwxrwx                 # chmod 777 /dev/modem
+
+       Los archivos de inicializacion deben ser ejecutables:
+       /etc/rc.d/rc.serial: -rwxr-xr-x         # chmod 755 /.../rc.serial
+       /etc/rc.d/rc.sysinit: -rwxr-xr-x        # chmod 755 /.../rc.sysinit
+
+6. Contactar con el autor:
+
+       Cualkier sugerencia o correccion seran bienvenidas.
+
+       E-mail: address@hidden
+       HTTP:   http://www.geocities.com/soho/lofts/3682
+       IRC:    IRC-Hispano #linux Nick dan-man
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd-ip.txt
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd-ip.txt
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd-ip.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd-ip.txt   
3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,54 @@
+****************************************************************************
+****** PPPD cuelga Micro-HOWTO ********************** Por Daniel Molina ****
+****************************************************************************
+
+Este documento ha sido creado usando mensajes aparecidos en el area
+de noticias es.comp.os.linux y por mi propia experiencia.
+
+Solo lo he probado con el pppd 2.2.0 y el pppd 2.3.0-3 en Red Hat 5.0
+la localizacion de los archivos puede cambiar en otras distribuciones.
+
+Mucha gente se keja de ke el pppd no conecta hasta el tercer o cuarto
+intento con lo ke telefonica nos roba por un sevicio ke no podemos usar por
+un problema suyo.
+
+El problema esta en ke algunos modems de los ke usa telefonica para el
+servicio Infovia no devuelven un IP remota como respuesta, esta IP es
+necesaria para ke el pppd pueda establecer una conexion segura.
+
+Solucion:
+
+1. Si usamos pppd. 
+       En el archivo /etc/ppp/options pasar a pppd la opcion:
+
+               :192.168.0.2
+       
+       La IP puede ser cualkiera de las validas dentro de internet.
+       Los dos puntos (:) son necesarios!
+       Con esta opcion le estamos fijando a pppd la IP remota.
+       Aun keda poner otra opcion:
+
+               ipcp-accept-remote
+
+       Con esta opcion le decimos al pppd ke se crea la IP ke le damos
+       pase lo ke pase.                
+
+2. Si usamos kppp
+       La secuencia de botones a pulsar es:
+
+               - kppp
+               - Configuracion
+               - Editar
+               - Editar opciones del pppd
+               - Opcion: :192.168.0.2
+               - Añadir
+               - Opcion: ipcp-accept-remote
+               - Añadir
+               - Cerrar
+               - Ok
+               - Ok
+               - Conectar
+
+NOTA: Esto no soluciona todos los problemas, una conexion puede fallar por
+muchos otros motivos. Espero ke esto sirva para ke telefonica nos robe un
+poco menos.

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/pppd.txt      
3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,49 @@
+****************************************************************************
+****** PPPD +ua Micro-HOWTO ************************* Por Daniel Molina ****
+****************************************************************************
+
+Este documento ha sido creado usando mensajes aparecidos en el area
+de mensajes R34.linux de Fido y por mi propia experiencia.
+
+Solo lo he probado con el pppd 2.2.0 y el pppd 2.3.0-3 en Red Hat 5.0
+la localizacion de los archivos puede cambiar en otras distribuciones.
+
+La opcion +ua del pppd no es valida para las versiones mas modernas.
+En su lugar debe usarse la opcion user. Este documento es perfectamente 
+complementario al Infovia-HOWTO de LuCAS. 
+
+-Autentificacion por metodo pap (infovia).
+
+1. Archivo /etc/ppp/options
+       Si existe una linea ke empieza por +ua eliminarla y escribir
+       en su lugar:
+
+               user address@hidden
+
+       El servidor debe indicarse sin el dominio, es decir, para el
+       usuario pepe de arrakis.es kedaria asi:
+
+               user address@hidden
+
+2. Archivo /etc/ppp/pap-secrets
+       Eliminar todo lo ke haya y poner en su lugar:
+
+               address@hidden  *       password
+       
+       En el ejemplo anterior, si el password de pepe era petardo:
+
+               address@hidden  *       petardo
+
+-Autentificacion por metodo chap (poco comun)
+
+1. Archivo /etc/ppp/options
+       Si existe una linea ke empieza por +ua eliminarla y escribir
+       en su lugar
+
+               name address@hidden
+
+2. Archivo /etc/ppp/chap-secrets
+       Eliminar todo lo ke haya y poner en su lugar
+
+               address@hidden  ppp0    password
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/wine.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/wine.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/wine.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/linuxzone/web/txt/wine.txt      
3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,40 @@
+# Copia este archivo a $HOME/.winerc de cada usuario ke ejecute wine
+# Modifica los PATHS segun tu makina
+# Lee la documentacion del Wine para mas informacion
+# Yo ejecuto Wine con el siguiente comando:
+# wine -dll -commdlg -winver win31 -language ES -fixedmap progman.exe
+# Las unidades deben estar montadas para ser vistas por wine
+# Se puede imitar el look (solo el look!) de Win95 con las 
+# extensiones Tweak, para mas detalles el archivo win95look del wine
+
+# General: Localizacion de Windows y directorios de sistema
+[wine]                 
+windows=C:\WINDOWS
+system=C:\WINDOWS\SYSTEM
+temp=C:\WINDOWS\TEMP
+path=C:\WINDOWS;C:\DOS;C:\WINDOWS\COMMAND;C:\WINDOWS\SYSTEM
+
+# Unidades: Nombre de la unidad, punto de montaje y tipo
+[Drive A]
+Path=/mnt/floppy
+Type=floppy    
+
+[Drive C]      
+Path=/mnt/hda1 
+Type=hd                
+
+[Drive G]
+Path=/mnt/cdrom
+Type=cdrom     
+
+# Puertos: Seriales (raton y modem) y paralelo (impresora o ZIP)
+[serialports]
+com1=/dev/mouse
+
+
+[paralelports]
+lpt1=/dev/lp0
+
+# Look Win95 (los botones y poco mas)
+# [Tweak.Layout] 
+# Win95Look=true

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/Lista_xfree.html
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/Lista_xfree.html
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/Lista_xfree.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/Lista_xfree.html   
3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 
i586) [Netscape]">
+   <META NAME="Author" CONTENT="Javier Orovengua.">
+   <TITLE>Ficheros XFree86</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#993399" LINK="#66FFFF" VLINK="#202020" 
ALINK="#FF0000">
+<A HREF="../x-window2.html">[ &lt; ]</A><A HREF="../contenidos.html">[
+|| ]</A>[ > ]
+<P>total 28019
+<BR>
+<HR WIDTH="100%">
+<BR>Cuando selecciones un fichero .tgz, estar&aacute;s viendo la misma
+informaci&oacute;n que si pusieras: tar tvfz fichero.tgz, de la 
informaci&oacute;n
+que veas se ha decidido suprimir en algunos ficheros los atributos y el
+nombre del due&ntilde;o y el del grupo del fichero.
+<P>Aunque este trabajo ha sido desarrollado actualizando las librer&iacute;as
+XFree86.3.3.2.3 a 3.3.3.1, la actualizaci&oacute;n ser&aacute; siempre
+la misma, podr&aacute;n incluir o suprimir alg&uacute;n fichero, pero el
+trabajo ser&aacute; siempre igual, o variar&iacute;a muy poco.
+<P>Es de esperar que en las sucesivas versiones 3.4.x (versiones estables),
+este trabajo pueda desarrollarlo usted solo.
+<BR>
+<HR WIDTH="100%">
+<BR>-r-xr-xr-x&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+317762 Jan 14 06:45 mextract
+<BR>-r-xr-xr-x&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+400979 Jan 14 05:43 mfiles
+<BR><B><FONT COLOR="#3366FF">dr-xr-xr-x&nbsp;&nbsp; 1 
root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048 Jan 15 08:39
+pc98-servers/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;- Servidores
+nuevos para ese a&ntilde;o</FONT></B>
+<BR>
+<HR WIDTH="100%">
+<BR>/* preinst, deber&aacute; ser ejecutado antes de la instalaci&oacute;n
+*/
+<BR><FONT COLOR="#FF6600">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4054 Jan 14 06:45
+postinst.sh</FONT>
+<BR><FONT COLOR="#FF6600">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4750 Jan 14 05:49
+preinst.sh</FONT>
+<BR>/* postinst, deber&aacute; ser ejecutado despu&eacute;s de la 
instalaci&oacute;n
+*/
+<BR>/* Como podr&aacute;s apreciar, los scripts `postinst.sh'. y `preinst.sh',
+todav&iacute;a no tienen atributos "x", para ser ejecutados, por lo que
+o bien se le pone: "<B>chmod&nbsp; a+x&nbsp;&nbsp; postinst.sh</B>", y
+lo mismo con "<B>preinst.sh</B>",&nbsp; y luego el nombre para ejecutarlo,
+o bien escribes: "<B>source preinst.h</B>" , y directamente se 
ejecutar&aacute;.
+*/
+<BR>
+<HR WIDTH="100%">
+<BR><A HREF="readme">-r-xr-xr-x&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 37083 Jan 14 05:43 readme</A>
+<BR><A HREF="relnotes">-r-xr-xr-x&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21268 Jan 14 05:43 relnotes</A>
+<BR>
+<HR WIDTH="100%">
+<BR><B><FONT COLOR="#3366FF">dr-xr-xr-x&nbsp;&nbsp; 1 
root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048 Jan 15 08:39
+servers/</FONT></B>
+<BR>-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp; 
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+2747 Jan 14 05:49 sums.md5
+<BR><A HREF="x9set.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 632933 Jan 14 05:53 x9set.tgz</A>
+<UL>
+<LI>
+Nuevo sistema gr&aacute;fico de configuraci&oacute;n</LI>
+</UL>
+<A HREF="xbin.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2587331 Jan 14 05:53 xbin.tgz</A>
+<UL>
+<LI>
+Binarios esenciales</LI>
+</UL>
+<A HREF="xcfg.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3340 Jan 14 05:53
+xcfg.tgz</A>
+<UL>
+<LI>
+Ficheros de configuraci&oacute;n</LI>
+</UL>
+<A HREF="xdoc.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 311690 Jan 14 05:54 xdoc.tgz</A>
+<UL>
+<LI>
+Documentaci&oacute;n</LI>
+</UL>
+<A HREF="xf100.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1243656 Jan 14 05:58 xf100.tgz</A>
+<UL>
+<LI>
+Fuentes de 100 puntos por pulgada</LI>
+</UL>
+<A HREF="xfcyr.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 301929 Jan 14 05:56 xfcyr.tgz</A>
+<UL>
+<LI>
+Fuentes alfabeto cir&iacute;lico</LI>
+</UL>
+<A HREF="xfnon.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2219466 Jan 14 06:05 xfnon.tgz</A>
+<UL>
+<LI>
+Fuentes hebreas, &aacute;rabes, etc.</LI>
+</UL>
+<A HREF="xfnts.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1284484 Jan 14 06:04 xfnts.tgz</A>
+<UL>
+<LI>
+Fuentes b&aacute;sicas</LI>
+</UL>
+<A HREF="xfscl.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1123584 Jan 14 06:08 xfscl.tgz</A>
+<UL>
+<LI>
+Fuentes escalables.</LI>
+</UL>
+<A HREF="xfsrv.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 146978 Jan 14 06:06 xfsrv.tgz</A>
+<UL>
+<LI>
+Servidor de fuentes</LI>
+</UL>
+<A HREF="xhtml.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 337081 Jan 14 06:08 xhtml.tgz</A>
+<UL>
+<LI>
+Documentaci&oacute;n formato WEB</LI>
+</UL>
+<A HREF="xjdoc.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 118958 Jan 14 05:44 xjdoc.tgz</A>
+<UL>
+<LI>
+M&aacute;s documentaci&oacute;n</LI>
+</UL>
+<A HREF="xjset.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 632985 Jan 14 06:11 xjset.tgz</A>
+<UL>
+<LI>
+Extensiones del programa de configuraci&oacute;n.</LI>
+</UL>
+<A HREF="xlib.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 364492 Jan 14 06:10 xlib.tgz</A>
+<UL>
+<LI>
+Librer&iacute;as b&aacute;sicas</LI>
+</UL>
+<A HREF="xlk98.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5146683 Jan 14 06:32 xlk98.tgz</A>
+<UL>
+<LI>
+Nuevas librer&iacute;as y cabeceras</LI>
+</UL>
+<A HREF="xlkit.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4198714 Jan 14 06:29 xlkit.tgz</A>
+<UL>
+<LI>
+Programas para reenlazar el servidor</LI>
+</UL>
+<A HREF="xman.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 580933 Jan 14 06:32 xman.tgz</A>
+<UL>
+<LI>
+Ayuda b&aacute;sica del sistema</LI>
+</UL>
+<A HREF="xnets.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 915499 Jan 14 05:48 xnest.tgz</A>
+<UL>
+<LI>
+<A HREF="xnets.txt">Programa XNEST</A></LI>
+</UL>
+<A HREF="xprog.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1425024 Jan 14 06:38 xprog.tgz</A>
+<UL>
+<LI>
+Cabeceras y librer&iacute;as est&aacute;ticas.</LI>
+</UL>
+<A HREF="xprt.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1137792 Jan 14 06:37 xprt.tgz</A>
+<UL>
+<LI>
+Programa XPRT (generalmente, no hay que instalarlo)</LI>
+</UL>
+<A HREF="xps.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 625036 Jan 14 06:40 xps.tgz</A>
+<UL>
+<LI>
+Documentaci&oacute;n en formato PostScript</LI>
+</UL>
+<A HREF="xset.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 533183 Jan 14 06:40 xset.tgz</A>
+<UL>
+<LI>
+Sistema gr&aacute;fico de configuraci&oacute;n</LI>
+</UL>
+<A HREF="xshlib.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 808487 Jan 14 06:44 xshlib.tgz</A>
+<UL>
+<LI>
+Librer&iacute;as compartidas (shared)</LI>
+</UL>
+<A HREF="xvfb.txt">-r--r--r--&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp;&nbsp;
+root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1112053 Jan 14 06:45 xvfb.tgz</A>
+<UL>
+<LI>
+Programa xvfb (generalmente, no hay que instalarlo)</LI>
+</UL>
+
+<HR WIDTH="100%">
+<BR>Para la descompresi&oacute;n de un fichero:
+<P>tar xvfz fichero.tgz (.tgz, o .tar.gz, es lo mismo)
+<P>Tambi&eacute;n, dependiendo de la versi&oacute;n de tu programa tar,
+si no pudieras hacer lo anteriormente mencionado deber&aacute;s hacer:
+<P>gzip -d fichero.tgz | tar xvf fichero.tgz
+<BR>
+<HR WIDTH="100%">
+<BR><A HREF="../x-window2.html">[ &lt; ]</A><A HREF="../contenidos.html">[
+|| ]</A>[ > ]
+<BR>&nbsp;
+</BODY>
+</HTML>

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config1.ejemplo
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config1.ejemplo
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config1.ejemplo
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config1.ejemplo    
    3 Mar 2012 06:14:49 -0000       1.1
@@ -0,0 +1,170 @@
+# ***********************************************************************
+# * Este fichero de configuración fué realizado con: XF86Setup         *
+# * Aquí se tiene de ejmplo una tarjeta gráfica S3 Virge GX2           *
+# ***********************************************************************
+#
+# XF86Config auto-generated by XF86Setup
+#
+# Copyright (c) 1996 by The XFree86 Project, Inc.
+
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
+# Except as contained in this notice, the name of the XFree86 Project shall
+# not be used in advertising or otherwise to promote the sale, use or other
+# dealings in this Software without prior written authorization from the
+# XFree86 Project.
+#
+
+# See 'man XF86Config' for info on the format of this file
+
+Section "Files"
+   RgbPath    "/usr/X11R6/lib/X11/rgb"
+   FontPath   
"/usr/X11R6/lib/X11/fonts/misc:unscaled,/usr/X11R6/lib/X11/fonts/75dpi:unscaled,/usr/X11R6/lib/X11/fonts/100dpi:unscaled,/usr/X11R6/lib/X11/fonts/Type1,/usr/X11R6/lib/X11/fonts/Speedo,/usr/X11R6/lib/X11/fonts/misc,/usr/X11R6/lib/X11/fonts/75dpi,/usr/X11R6/lib/X11/fonts/100dpi"
+EndSection
+
+Section "ServerFlags"
+EndSection
+
+Section "Keyboard"
+   Protocol        "Standard"
+   AutoRepeat      500 30
+   LeftAlt         Meta
+   RightAlt        Meta
+   ScrollLock      Compose
+   RightCtl        Control
+   XkbKeycodes     "xfree86"
+   XkbTypes        "default"
+   XkbCompat       "default"
+   XkbSymbols      "us(pc101)"
+   XkbGeometry     "pc"
+   XkbRules        "xfree86"
+   XkbModel        "pc101"
+   XkbLayout       "es"
+EndSection
+
+Section "Pointer"
+   Protocol        "Microsoft"
+   Device          "/dev/mouse"
+   BaudRate        1200
+   Emulate3Timeout 50
+EndSection
+
+Section "Monitor"
+   Identifier      "Primary Monitor"
+   VendorName      "Unknown"
+   ModelName       "Unknown"
+   HorizSync       31.5-50
+   VertRefresh     50-90
+   Modeline  "800x600"    50.00 800 832 952 1076 600 613 619 658 +hsync +vsync
+EndSection
+
+Section "Device"
+   Identifier      "Primary Card"
+   VendorName      "Unknown"
+   BoardName       "None"
+
+
+EndSection
+
+Section "Screen"
+   Driver          "Accel"
+   Device          "Primary Card"
+   Monitor         "Primary Monitor"
+   DefaultColorDepth 16
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        8
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        15
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        16
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        24
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        32
+      Modes        "800x600"
+   EndSubSection
+EndSection
+
+Section "Screen"
+   Driver          "SVGA"
+   Device          "Primary Card"
+   Monitor         "Primary Monitor"
+   DefaultColorDepth 16
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        8
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        15
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        16
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        24
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        32
+      Modes        "800x600"
+   EndSubSection
+EndSection
+
+Section "Screen"
+   Driver          "VGA16"
+   Device          "Primary Card"
+   Monitor         "Primary Monitor"
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        4
+      Modes        "800x600"
+   EndSubSection
+EndSection
+
+Section "Screen"
+   Driver          "VGA2"
+   Device          "Primary Card"
+   Monitor         "Primary Monitor"
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        1
+      Modes        "800x600"
+   EndSubSection
+EndSection

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config2.ejemplo
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config2.ejemplo
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config2.ejemplo
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config2.ejemplo    
    3 Mar 2012 06:14:50 -0000       1.1
@@ -0,0 +1,201 @@
+# ***********************************************************************
+# * Este fichero de configuración fué realizado con: XF86Setup         *
+# * Aquí se tiene de ejmplo una tarjeta gráfica Avance Logic 2302      *
+# * Que fué perfectamente configurada con XF86Setup                    *
+# *********************************************************************** 
+#
+XF86Config auto-generated by XF86Setup #
+# Copyright (c) 1996 by The XFree86 Project, Inc.
+
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
+# Except as contained in this notice, the name of the XFree86 Project shall
+# not be used in advertising or otherwise to promote the sale, use or other
+# dealings in this Software without prior written authorization from the
+# XFree86 Project.
+#
+
+# See 'man XF86Config' for info on the format of this file
+
+Section "Files"
+   RgbPath    "/usr/X11R6/lib/X11/rgb"
+   FontPath   
"/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/75dpi/:unscaled,/usr/X11R6/lib/X11/fonts/100dpi/:unscaled,/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/Speedo/,/usr/X11R6/lib/X11/fonts/75dpi/,/usr/X11R6/lib/X11/fonts/100dpi/"
+EndSection
+
+Section "ServerFlags"
+EndSection
+
+Section "Keyboard"
+   Protocol        "Standard"
+   AutoRepeat      500 5
+   LeftAlt         Meta
+   RightAlt        Meta
+   ScrollLock      Compose
+   RightCtl        Control
+   XkbKeycodes     "xfree86"
+   XkbTypes        "default"
+   XkbCompat       "default"
+   XkbSymbols      "en_US(pc101)+es"
+   XkbGeometry     "pc"
+   XkbRules        "xfree86"
+   XkbModel        "pc101"
+   XkbLayout       "es"
+EndSection
+
+Section "Pointer"
+   Protocol        "Microsoft"
+   Device          "/dev/mouse"
+   BaudRate        1200
+   Emulate3Timeout 50
+   ChordMiddle
+EndSection
+
+Section "Monitor"
+   Identifier      "My Monitor"
+   VendorName      "Unknown"
+   ModelName       "Unknown"
+   HorizSync       31.5-50
+   VertRefresh     50-90
+   Modeline  "800x600"    35.40 800 824 896 1024 600 601 603 625
+EndSection
+
+Section "Device"
+   Identifier      "Avance Logic 2302"
+   VendorName      "Unknown"
+   BoardName       "Unknown"
+   Chipset         "ali2302"
+   Clocks          24.78 28.32 22.13 35.4 37.17 31.86 38.94 39.83 
+   VideoRam        1024
+EndSection
+
+Section "Device"
+   Identifier      "Generic VGA"
+   VendorName      "Unknown"
+   BoardName       "Unknown"
+   Chipset         "generic"
+   Clocks          25.2 28.3 
+   VideoRam        256
+EndSection
+
+Section "Screen"
+   Driver          "Accel"
+   Device          "Avance Logic 2302"
+   Monitor         "My Monitor"
+   DefaultColorDepth 8
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        8
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+   SubSection "Display"
+      Depth        15
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        16
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+   SubSection "Display"
+      Depth        24
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+   SubSection "Display"
+      Depth        32
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+EndSection
+
+Section "Screen"
+   Driver          "SVGA"
+   Device          "Avance Logic 2302"
+   Monitor         "My Monitor"
+   DefaultColorDepth 8
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        8
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+   SubSection "Display"
+      Depth        15
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        16
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+   SubSection "Display"
+      Depth        24
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+   SubSection "Display"
+      Depth        32
+      Modes        "800x600"
+      ViewPort     0 0
+   EndSubSection
+EndSection
+
+Section "Screen"
+   Driver          "VGA16"
+   Device          "Generic VGA"
+   Monitor         "My Monitor"
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        4
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        8
+      Modes        "800x600"
+      Virtual       800 600
+      ViewPort     0 0
+   EndSubSection
+EndSection
+
+Section "Screen"
+   Driver          "VGA2"
+   Device          "Generic VGA"
+   Monitor         "My Monitor"
+   BlankTime       0
+   SuspendTime     0
+   OffTime         0
+   SubSection "Display"
+      Depth        1
+      Modes        "800x600"
+   EndSubSection
+   SubSection "Display"
+      Depth        8
+      Modes        "800x600"
+      Virtual       800 600
+      ViewPort     0 0
+   EndSubSection
+EndSection

Index: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config3.ejemplo
===================================================================
RCS file: 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config3.ejemplo
diff -N 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config3.ejemplo
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 
Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/XF86Config3.ejemplo    
    3 Mar 2012 06:14:50 -0000       1.1
@@ -0,0 +1,512 @@
+# ----------------------------------------------------------------
+# ***********************************************************************
+# * Este fichero de configuración fué realizado con: Xconfigurator     *
+# * Aquí se tiene de ejemplo una tarjeta gráfica Avance Logic 2302     *
+# * Que me dió muchísimos problemas no se si por Xconfigurator la      *
+# * tarjeta gráfica, la placa base...                                  *
+# ***********************************************************************
+#
+# Por ejemplo, este fichero fué retocado a mano, ya que no
+# conseguía hacer funcionar correctamente las X-Window
+# Cosa que puede ocurrir debido a: (en viejos equipos) "tu 
+# mala tarjeta gráfica, tu mala placa base, o tu malo monitor"
+#
+# en equipos modernos a tu todavía no soportado tarjeta gráfica
+#
+# ----------------------------------------------------------------
+# File generated by xf86config.
+#
+# Copyright (c) 1995 by The XFree86 Project, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+# 
+# Except as contained in this notice, the name of the XFree86 Project shall
+# not be used in advertising or otherwise to promote the sale, use or other
+# dealings in this Software without prior written authorization from the
+# XFree86 Project.
+#
+
+# **********************************************************************
+# Refer to the XF86Config(4/5) man page for details about the format of 
+# this file.
+# **********************************************************************
+
+# **********************************************************************
+# Files section.  This allows default font and rgb paths to be set
+# **********************************************************************
+
+Section "Files"
+
+# The location of the RGB database.  Note, this is the name of the
+# file minus the extension (like ".txt" or ".db").  There is normally
+# no need to change the default.
+
+    RgbPath    "/usr/X11R6/lib/X11/rgb"
+
+# Multiple FontPath entries are allowed (which are concatenated together),
+# as well as specifying multiple comma-separated entries in one FontPath
+# command (or a combination of both methods)
+# 
+# If you don't have a floating point coprocessor and emacs, Mosaic or other
+# programs take long to start up, try moving the Type1 and Speedo directory
+# to the end of this list (or comment them out).
+# 
+
+    FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
+    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
+    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
+    FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
+    FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
+    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
+    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
+
+# For OSs that support Dynamically loaded modules, ModulePath can be
+# used to set a search path for the modules.  This is currently supported
+# for Linux ELF, FreeBSD 2.x and NetBSD 1.x.  The default path is shown
+# here.
+
+#    ModulePath "/usr/X11R6/lib/modules"
+
+EndSection
+
+# **********************************************************************
+# Module section -- this is an optional section which is used to specify
+# which dynamically loadable modules to load.  Dynamically loadable
+# modules are currently supported only for Linux ELF, FreeBSD 2.x
+# and NetBSD 1.x.  Currently, dynamically loadable modules are used
+# only for some extended input (XInput) device drivers.
+# **********************************************************************
+#
+# Section "Module"
+#
+# This loads the module for the Joystick driver
+#
+# Load "xf86Jstk.so"
+# 
+# EndSection
+
+# **********************************************************************
+# Server flags section.
+# **********************************************************************
+
+Section "ServerFlags"
+
+# Uncomment this to cause a core dump at the spot where a signal is 
+# received.  This may leave the console in an unusable state, but may
+# provide a better stack trace in the core dump to aid in debugging
+
+    NoTrapSignals
+
+# Uncomment this to disable the <Crtl><Alt><BS> server abort sequence
+# This allows clients to receive this key event.
+
+#    DontZap
+
+# Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching
+# sequences.  This allows clients to receive these key events.
+
+#    DontZoom
+
+# Uncomment this to disable tuning with the xvidtune client. With
+# it the client can still run and fetch card and monitor attributes,
+# but it will not be allowed to change them. If it tries it will
+# receive a protocol error.
+
+#       DisableVidModeExtension
+
+# Uncomment this to enable the use of a non-local xvidtune client. 
+
+#       AllowNonLocalXvidtune
+
+# Uncomment this to disable dynamically modifying the input device
+# (mouse and keyboard) settings. 
+
+#       DisableModInDev
+
+# Uncomment this to enable the use of a non-local client to
+# change the keyboard or mouse settings (currently only xset).
+
+#       AllowNonLocalModInDev
+
+EndSection
+
+# **********************************************************************
+# Input devices
+# **********************************************************************
+
+# **********************************************************************
+# Keyboard section
+# **********************************************************************
+
+Section "Keyboard"
+
+    Protocol   "Standard"
+
+# when using XQUEUE, comment out the above line, and uncomment the
+# following line
+
+#    Protocol  "Xqueue"
+
+    AutoRepeat 500 5
+# Let the server do the NumLock processing.  This should only be required
+# when using pre-R6 clients
+#    ServerNumLock
+
+# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
+#    Xleds      1 2 3
+
+# To set the LeftAlt to Meta, RightAlt key to ModeShift, 
+# RightCtl key to Compose, and ScrollLock key to ModeLock:
+
+#    LeftAlt     Meta
+#    RightAlt    ModeShift
+#    RightCtl    Compose
+#    ScrollLock  ModeLock
+
+# To disable the XKEYBOARD extension, uncomment XkbDisable.
+
+#    XkbDisable
+
+# To customise the XKB settings to suit your keyboard, modify the
+# lines below (which are the defaults).  For example, for a non-U.S.
+# keyboard, you will probably want to use:
+#    XkbModel    "pc102"
+# If you have a US Microsoft Natural keyboard, you can use:
+#    XkbModel    "microsoft"
+#
+# Then to change the language, change the Layout setting.
+# For example, a german layout can be obtained with:
+#    XkbLayout   "de"
+# or:
+#    XkbLayout   "de"
+#    XkbVariant  "nodeadkeys"
+#
+# If you'd like to switch the positions of your capslock and
+# control keys, use:
+#    XkbOptions  "ctrl:swapcaps"
+
+# These are the default XKB settings for XFree86
+#    XkbRules    "xfree86"
+#    XkbModel    "pc101"
+#    XkbLayout   "us"
+#    XkbVariant  ""
+#    XkbOptions  ""
+
+    Xkbkeycodes "xfree86"
+    XkbTypes    "default"
+    XkbCompat   "default"
+    XkbSymbols  "en_US(pc101)+es"
+    XkbGeometry "pc"
+
+EndSection
+
+
+# **********************************************************************
+# Pointer section
+# **********************************************************************
+
+Section "Pointer"
+    Protocol    "Microsoft"
+    Device      "/dev/mouse"
+
+# When using XQUEUE, comment out the above two lines, and uncomment
+# the following line.
+
+#    Protocol  "Xqueue"
+
+# Baudrate and SampleRate are only for some Logitech mice
+
+#    BaudRate  9600
+#    SampleRate        150
+
+# Emulate3Buttons is an option for 2-button Microsoft mice
+# Emulate3Timeout is the timeout in milliseconds (default is 50ms)
+
+#    Emulate3Buttons
+#    Emulate3Timeout    50
+
+# ChordMiddle is an option for some 3-button Logitech mice
+
+    ChordMiddle
+
+EndSection
+
+
+# **********************************************************************
+# Xinput section -- this is optional and is required only if you
+# are using extended input devices.  This is for example only.  Refer
+# to the XF86Config man page for a description of the options.
+# **********************************************************************
+#
+# Section "Xinput" 
+#    SubSection "WacomStylus"
+#        Port "/dev/ttyS1"
+#        DeviceName "Wacom"
+#    EndSubSection
+#    SubSection "WacomCursor"
+#        Port "/dev/ttyS1"
+#    EndSubSection
+#    SubSection "WacomEraser"
+#        Port "/dev/ttyS1"
+#    EndSubSection
+#
+#    SubSection "Elographics"
+#        Port "/dev/ttyS1"
+#        DeviceName "Elo"
+#        MinimumXPosition 300
+#        MaximumXPosition 3500
+#        MinimumYPosition 300
+#        MaximumYPosition 3500
+#        Screen 0
+#        UntouchDelay 10
+#        ReportDelay 10
+#    EndSubSection
+#
+#    SubSection "Joystick"
+#        Port "/dev/joy0"
+#        DeviceName "Joystick"
+#        TimeOut 10
+#        MinimumXPosition 100
+#        MaximumXPosition 1300
+#        MinimumYPosition 100
+#        MaximumYPosition 1100
+#        # CenterX 700
+#        # CenterY 600
+#        Delta 20
+#    EndSubSection
+#
+# The Mouse Subsection contains the same type of entries as the
+# standard Pointer Section (see above), with the addition of the
+# DeviceName entry.
+#
+#    SubSection "Mouse" 
+#        Port "/dev/mouse2"
+#        DeviceName "Second Mouse"
+#        Protocol "Logitech"
+#    EndSubSection
+# EndSection
+
+# **********************************************************************
+# Monitor section
+# **********************************************************************
+
+# Any number of monitor sections may be present
+
+Section "Monitor"
+
+    Identifier  "My Monitor"
+    VendorName  "Unknown"
+    ModelName   "Unknown"
+
+# HorizSync is in kHz unless units are specified.
+# HorizSync may be a comma separated list of discrete values, or a
+# comma separated list of ranges of values.
+# NOTE: THE VALUES HERE ARE EXAMPLES ONLY.  REFER TO YOUR MONITOR'S
+# USER MANUAL FOR THE CORRECT NUMBERS.
+
+    HorizSync   31.5-50
+
+#    HorizSync 30-64         # multisync
+#    HorizSync 31.5, 35.2    # multiple fixed sync frequencies
+#    HorizSync 15-25, 30-50  # multiple ranges of sync frequencies
+
+# VertRefresh is in Hz unless units are specified.
+# VertRefresh may be a comma separated list of discrete values, or a
+# comma separated list of ranges of values.
+# NOTE: THE VALUES HERE ARE EXAMPLES ONLY.  REFER TO YOUR MONITOR'S
+# USER MANUAL FOR THE CORRECT NUMBERS.
+
+    VertRefresh 50-90
+
+# Modes can be specified in two formats.  A compact one-line format, or
+# a multi-line format.
+
+# These two are equivalent
+
+#    ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace
+
+#    Mode "1024x768i"
+#        DotClock      45
+#        HTimings      1024 1048 1208 1264
+#        VTimings      768 776 784 817
+#        Flags         "Interlace"
+#    EndMode
+
+# This is a set of standard mode timings. Modes that are out of monitor spec
+# are automatically deleted by the server (provided the HorizSync and
+# VertRefresh lines are correct), so there's no immediate need to
+# delete mode timings (unless particular mode timings don't work on your
+# monitor). With these modes, the best standard mode that your monitor
+# and video card can support for a given resolution is automatically
+# used.
+
+# 640x480 @ 60 Hz, 31.5 kHz hsync
+Modeline "640x480"     25     640  664  760  800   480  491  493  525
+# 800x600 @ 56 Hz, 35.15 kHz hsync
+ModeLine "800x600"     36     800  824  896 1024   600  601  603  625
+
+# Low-res Doublescan modes
+# If your chipset does not support doublescan, you get a 'squashed'
+# resolution like 320x400.
+
+
+EndSection
+
+
+# **********************************************************************
+# Graphics device section
+# **********************************************************************
+
+# Any number of graphics device sections may be present
+
+# Standard VGA Device:
+
+Section "Device"
+    Identifier "Generic VGA"
+    VendorName "Unknown"
+    BoardName  "Unknown"
+    Chipset    "generic"
+
+    VideoRam   256
+
+    Clocks     25.2 28.3
+
+EndSection
+
+# Sample Device for accelerated server:
+
+# Section "Device"
+#    Identifier        "Actix GE32+ 2MB"
+#    VendorName        "Actix"
+#    BoardName "GE32+"
+#    Ramdac    "ATT20C490"
+#    Dacspeed  110
+#    Option    "dac_8_bit"
+#    Clocks     25.0  28.0  40.0   0.0  50.0  77.0  36.0  45.0
+#    Clocks    130.0 120.0  80.0  31.0 110.0  65.0  75.0  94.0
+# EndSection
+
+# Sample Device for Hercules mono card:
+
+# Section "Device"
+#    Identifier "Hercules mono"
+# EndSection
+
+# Device configured by xf86config:
+
+Section "Device"
+    Identifier  "Avance Logic 2302"
+    VendorName  "Unknown"
+    BoardName   "Unknown"
+    VideoRam    1024
+    chipset "ali2302"
+    Clocks   24.78  28.32  22.13  35.40  37.17  31.86  38.94  39.83
+EndSection
+
+
+# **********************************************************************
+# Screen sections
+# **********************************************************************
+
+# The Colour SVGA server
+
+Section "Screen"
+    Driver      "svga"
+    # Use Device "Generic VGA" for Standard VGA 320x200x256
+    #Device      "Generic VGA"
+    Device      "Avance Logic 2302"
+    Monitor     "My Monitor"
+    Subsection "Display"
+        Depth       8
+        # Omit the Modes line for the "Generic VGA" device
+        Modes       "640x480" "800x600"
+        ViewPort    0 0
+        # Use Virtual 320 200 for Generic VGA
+    EndSubsection
+    Subsection "Display"
+        Depth       16
+        Modes       "640x480" "800x600"
+        ViewPort    0 0
+    EndSubsection
+    Subsection "Display"
+        Depth       24
+        Modes       "640x480"
+        ViewPort    0 0
+    EndSubsection
+    Subsection "Display"
+        Depth       32
+        Modes       "640x400"
+        ViewPort    0 0
+    EndSubsection
+EndSection
+
+# The 16-color VGA server
+
+Section "Screen"
+    Driver      "vga16"
+    Device      "Generic VGA"
+    Monitor     "My Monitor"
+    Subsection "Display"
+        Modes       "640x480" "800x600"
+        ViewPort    0 0
+        Virtual     800 600
+    EndSubsection
+EndSection
+
+# The Mono server
+
+Section "Screen"
+    Driver      "vga2"
+    Device      "Generic VGA"
+    Monitor     "My Monitor"
+    Subsection "Display"
+        Modes       "640x480" "800x600"
+        ViewPort    0 0
+        Virtual     800 600
+    EndSubsection
+EndSection
+
+# The accelerated servers (S3, Mach32, Mach8, 8514, P9000, AGX, W32, Mach64)
+
+Section "Screen"
+    Driver      "accel"
+    Device      "Avance Logic 2302"
+    Monitor     "My Monitor"
+    Subsection "Display"
+        Depth       8
+        Modes       "640x480" "800x600"
+        ViewPort    0 0
+    EndSubsection
+    Subsection "Display"
+        Depth       16
+        Modes       "640x480" "800x600"
+        ViewPort    0 0
+    EndSubsection
+    Subsection "Display"
+        Depth       24
+        Modes       "640x480"
+        ViewPort    0 0
+    EndSubsection
+    Subsection "Display"
+        Depth       32
+        Modes       "640x400"
+        ViewPort    0 0
+    EndSubsection
+EndSection
+

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/readme
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/readme
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/readme
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/readme     3 Mar 
2012 06:14:50 -0000       1.1
@@ -0,0 +1,2 @@
+
+ - Mire este fichero cuando se baje XFree86 -

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/relnotes
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/relnotes
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/relnotes
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/relnotes   3 Mar 
2012 06:14:50 -0000       1.1
@@ -0,0 +1,2 @@
+
+ - Mire este fichero cuando se baje XFree86 -

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/x9set.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/x9set.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/x9set.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/x9set.txt  3 Mar 
2012 06:14:50 -0000       1.1
@@ -0,0 +1,76 @@
+   1318628 1999-01-06 18:08 bin/XF98Setup
+       243 1999-01-06 18:08 bin/xmseconfig
+         0 1999-01-06 18:08 lib/X11/XF86Setup/
+     10611 1999-01-06 18:08 lib/X11/XF86Setup/phase1.tcl
+      7464 1999-01-06 18:08 lib/X11/XF86Setup/phase2.tcl
+      1862 1999-01-06 18:08 lib/X11/XF86Setup/phase3.tcl
+      2953 1999-01-06 18:08 lib/X11/XF86Setup/phase4.tcl
+      2385 1999-01-06 18:08 lib/X11/XF86Setup/phase5.tcl
+     20258 1999-01-06 18:08 lib/X11/XF86Setup/setuplib.tcl
+      3050 1999-01-06 18:08 lib/X11/XF86Setup/srvflags.tcl
+     22109 1999-01-06 18:08 lib/X11/XF86Setup/carddata.tcl
+     19842 1999-01-06 18:08 lib/X11/XF86Setup/card.tcl
+      1749 1999-01-06 18:08 lib/X11/XF86Setup/done.tcl
+      2493 1999-01-06 18:08 lib/X11/XF86Setup/filelist.tcl
+      9663 1999-01-06 18:08 lib/X11/XF86Setup/keyboard.tcl
+       344 1999-01-06 18:08 lib/X11/XF86Setup/mseproto98.tcl
+      6594 1999-01-06 18:08 lib/X11/XF86Setup/mondata.tcl
+     10964 1999-01-06 18:08 lib/X11/XF86Setup/monitor.tcl
+      6988 1999-01-06 18:08 lib/X11/XF86Setup/modeselect.tcl
+     21028 1999-01-06 18:08 lib/X11/XF86Setup/mouse.tcl
+      1145 1999-01-06 18:08 lib/X11/XF86Setup/LICENSE
+         0 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/
+      4617 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/button.tcl
+      6172 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/combobox.tcl
+      3552 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/misc.tcl
+       245 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/downarrow.xbm
+      4004 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/dialog.tcl
+     13010 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/entry.tcl
+      5034 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/focus.tcl
+      8241 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/init.tcl
+     11707 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/listbox.tcl
+     25328 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/menu.tcl
+      1856 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/optionMenu.tcl
+      7289 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/palette.tcl
+      6837 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/scale.tcl
+     11211 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/scrollbar.tcl
+      6148 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/tclIndex
+      3691 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/tearoff.tcl
+     21213 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/text.tcl
+      3594 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/tk.tcl
+      2687 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/tkerror.tcl
+       227 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/uparrow.xbm
+      1734 1999-01-06 18:08 lib/X11/XF86Setup/tcllib/license.terms
+         0 1999-01-06 18:08 lib/X11/XF86Setup/pics/
+      9634 1999-01-06 18:08 lib/X11/XF86Setup/pics/vidcard.xbm
+      9634 1999-01-06 18:08 lib/X11/XF86Setup/pics/vidcard.msk
+     28577 1999-01-06 18:08 lib/X11/XF86Setup/pics/XFree86.xbm
+     28577 1999-01-06 18:08 lib/X11/XF86Setup/pics/XFree86.msk
+         0 1999-01-06 18:08 lib/X11/XF86Setup/scripts/
+      2394 1999-01-06 18:08 lib/X11/XF86Setup/scripts/mseconfig.tcl
+         0 1999-01-06 18:08 lib/X11/XF86Setup/texts/
+      2973 1999-01-06 18:08 lib/X11/XF86Setup/texts/local_text.tcl
+         0 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/
+      8161 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/messages.tcl
+      2224 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/message_proc.tcl
+      1973 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_card.tcl
+       450 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_done.tcl
+       437 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_keyboard.tcl
+       752 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_monitor.tcl
+      1743 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_mouse.tcl
+       447 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_other.tcl
+       970 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_intro.tcl
+       677 1999-01-06 18:08 lib/X11/XF86Setup/texts/generic/help_modeselect.tcl
+         0 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/
+      9540 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/messages.tcl
+      2817 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/message_proc.tcl
+      2118 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_card.tcl
+       337 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_done.tcl
+       606 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_keyboard.tcl
+       823 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_monitor.tcl
+      4282 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_mouse.tcl
+       402 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_other.tcl
+      1627 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_intro.tcl
+      1068 1999-01-06 18:08 lib/X11/XF86Setup/texts/ja/help_modeselect.tcl
+      3628 1999-01-06 18:07 man/man1/XF86Setup.1x
+      1582 1999-01-06 18:08 man/man1/xmseconfig.1x

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xbin.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xbin.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xbin.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xbin.txt   3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,180 @@
+         0 1998-12-31 04:51 bin/
+     14708 1998-12-31 04:24 bin/imake
+     18704 1998-12-31 04:24 bin/makedepend
+      5700 1998-12-31 04:24 bin/lndir
+      1007 1998-12-31 04:24 bin/xmkmf
+      1019 1998-12-31 04:24 bin/mkdirhier
+      2264 1998-12-31 04:24 bin/gccmakedep
+      2723 1998-12-31 04:24 bin/mergelib
+       419 1998-12-31 04:24 bin/makeg
+      4768 1998-12-31 04:30 bin/appres
+     44916 1998-12-31 04:30 bin/bdftopcf
+     67232 1998-12-31 04:30 bin/bitmap
+      4664 1998-12-31 04:30 bin/bmtoa
+      6028 1998-12-31 04:30 bin/atobm
+     10564 1998-12-31 04:30 bin/beforelight
+     38160 1998-12-31 04:30 bin/editres
+     22900 1998-12-31 04:30 bin/fsinfo
+     28532 1998-12-31 04:30 bin/fslsfonts
+     27408 1998-12-31 04:30 bin/fstobdf
+     18008 1998-12-31 04:30 bin/iceauth
+     89624 1998-12-31 04:30 bin/mkfontdir
+     12572 1998-12-31 04:30 bin/oclock
+     18896 1998-12-31 04:30 bin/proxymngr
+      3820 1998-12-31 04:31 bin/showrgb
+      1455 1998-12-31 04:31 bin/rstartd
+      1863 1998-12-31 04:31 bin/rstart
+     13236 1998-12-31 04:31 bin/smproxy
+    121924 1998-12-31 04:31 bin/twm
+     82772 1998-12-31 04:31 bin/x11perf
+      2643 1998-12-31 04:31 bin/x11perfcomp
+     27499 1998-12-31 04:31 bin/Xmark
+     25644 1998-12-31 04:31 bin/xauth
+     10852 1998-12-31 04:31 bin/xclipboard
+      6740 1998-12-31 04:31 bin/xcutsel
+     13276 1998-12-31 04:31 bin/xclock
+     20548 1998-12-31 04:31 bin/xcmsdb
+     10784 1998-12-31 04:31 bin/xconsole
+     74064 1998-12-31 04:31 bin/xdm
+      5992 1998-12-31 04:31 bin/sessreg
+     28504 1998-12-31 04:31 bin/xdpyinfo
+     10376 1998-12-31 04:31 bin/dga
+     11900 1998-12-31 04:31 bin/xfd
+      8952 1998-12-31 04:32 bin/xfindproxy
+     23568 1998-12-31 04:32 bin/xfwp
+      7312 1998-12-31 04:32 bin/xhost
+    207548 1998-12-31 04:32 bin/xieperf
+      8980 1998-12-31 04:32 bin/xinit
+      1652 1998-12-31 04:32 bin/startx
+     71772 1998-12-31 04:32 bin/setxkbmap
+    213088 1998-12-31 04:32 bin/xkbcomp
+     69816 1998-12-31 04:32 bin/xkbevd
+    120860 1998-12-31 04:32 bin/xkbprint
+     13300 1998-12-31 04:32 bin/xkbvleds
+     11480 1998-12-31 04:32 bin/xkbwatch
+      7048 1998-12-31 04:32 bin/xkbbell
+      7436 1998-12-31 04:32 bin/xkill
+      7248 1998-12-31 04:32 bin/xlogo
+      4996 1998-12-31 04:32 bin/xlsatoms
+      5868 1998-12-31 04:32 bin/xlsclients
+     14228 1998-12-31 04:32 bin/xlsfonts
+     24928 1998-12-31 04:32 bin/xmag
+     77276 1998-12-31 04:32 bin/xmh
+     20340 1998-12-31 04:32 bin/xmodmap
+     21040 1998-12-31 04:32 bin/xprop
+     16708 1998-12-31 04:32 bin/xrdb
+      6220 1998-12-31 04:32 bin/xrefresh
+     29388 1998-12-31 04:32 bin/xrx
+     23248 1998-12-31 04:32 bin/xset
+      9592 1998-12-31 04:32 bin/xsetroot
+     58588 1998-12-31 04:32 bin/xsm
+      7400 1998-12-31 04:32 bin/xstdcmap
+      4252 1998-12-31 04:32 bin/xsetmode
+      4384 1998-12-31 04:32 bin/xsetpointer
+    158124 1998-12-31 04:32 bin/xterm
+     11220 1998-12-31 04:32 bin/resize
+     26244 1998-12-31 04:32 bin/xvidtune
+     18556 1998-12-31 04:32 bin/xwd
+     19772 1998-12-31 04:32 bin/xwininfo
+     17184 1998-12-31 04:32 bin/xwud
+      5883 1998-12-31 04:48 bin/Xwrapper
+     24444 1998-12-31 04:51 bin/reconfig
+     62072 1998-12-31 04:50 bin/xf86config
+     53836 1998-12-31 04:50 bin/scanpci
+      3924 1998-12-31 04:51 bin/joycal
+     69588 1998-12-31 04:50 bin/SuperProbe
+     62124 1998-12-31 04:51 bin/xf98config
+    262836 1998-12-31 04:51 bin/lbxproxy
+      2195 1998-12-31 04:51 bin/xon
+     37268 1998-12-31 04:12 bin/ico
+      6296 1998-12-31 04:12 bin/listres
+     27532 1998-12-31 04:12 bin/showfont
+     14528 1998-12-31 04:12 bin/viewres
+     10276 1998-12-31 04:12 bin/xbiff
+     20132 1998-12-31 04:12 bin/xcalc
+     54716 1998-12-31 04:12 bin/xditview
+      8788 1998-12-31 04:12 bin/xedit
+     13280 1998-12-31 04:12 bin/xev
+     11452 1998-12-31 04:12 bin/xeyes
+     16232 1998-12-31 04:12 bin/xfontsel
+     44028 1998-12-31 04:12 bin/xgc
+      8488 1998-12-31 04:12 bin/xload
+     38868 1998-12-31 04:12 bin/xman
+     11404 1998-12-31 04:12 bin/xmessage
+     80958 1998-12-31 04:28 lib/libICE.so.6.3
+         0 1998-12-31 04:28 lib/libICE.so.6 -> libICE.so.6.3
+         0 1998-12-31 04:28 lib/libICE.so -> libICE.so.6.3
+    241837 1998-12-31 04:30 lib/libPEX5.so.6.0
+         0 1998-12-31 04:30 lib/libPEX5.so.6 -> libPEX5.so.6.0
+         0 1998-12-31 04:30 lib/libPEX5.so -> libPEX5.so.6.0
+     33879 1998-12-31 04:28 lib/libSM.so.6.0
+         0 1998-12-31 04:28 lib/libSM.so.6 -> libSM.so.6.0
+         0 1998-12-31 04:28 lib/libSM.so -> libSM.so.6.0
+    726839 1998-12-31 04:27 lib/libX11.so.6.1
+         0 1998-12-31 04:27 lib/libX11.so.6 -> libX11.so.6.1
+         0 1998-12-31 04:27 lib/libX11.so -> libX11.so.6.1
+     49343 1998-12-31 04:30 lib/libXIE.so.6.0
+         0 1998-12-31 04:30 lib/libXIE.so.6 -> libXIE.so.6.0
+         0 1998-12-31 04:30 lib/libXIE.so -> libXIE.so.6.0
+    248659 1998-12-31 04:30 lib/libXaw.so.6.1
+         0 1998-12-31 04:30 lib/libXaw.so.6 -> libXaw.so.6.1
+         0 1998-12-31 04:30 lib/libXaw.so -> libXaw.so.6.1
+     49543 1998-12-31 04:28 lib/libXext.so.6.3
+         0 1998-12-31 04:28 lib/libXext.so.6 -> libXext.so.6.3
+         0 1998-12-31 04:28 lib/libXext.so -> libXext.so.6.3
+     31928 1998-12-31 04:30 lib/libXi.so.6.0
+         0 1998-12-31 04:30 lib/libXi.so.6 -> libXi.so.6.0
+         0 1998-12-31 04:30 lib/libXi.so -> libXi.so.6.0
+     80975 1998-12-31 04:30 lib/libXmu.so.6.0
+         0 1998-12-31 04:30 lib/libXmu.so.6 -> libXmu.so.6.0
+         0 1998-12-31 04:30 lib/libXmu.so -> libXmu.so.6.0
+     29568 1998-12-31 04:30 lib/libXp.so.6.2
+         0 1998-12-31 04:30 lib/libXp.so.6 -> libXp.so.6.2
+         0 1998-12-31 04:30 lib/libXp.so -> libXp.so.6.2
+    313937 1998-12-31 04:29 lib/libXt.so.6.0
+         0 1998-12-31 04:29 lib/libXt.so.6 -> libXt.so.6.0
+         0 1998-12-31 04:29 lib/libXt.so -> libXt.so.6.0
+     19295 1998-12-31 04:30 lib/libXtst.so.6.1
+         0 1998-12-31 04:30 lib/libXtst.so.6 -> libXtst.so.6.1
+         0 1998-12-31 04:30 lib/libXtst.so -> libXtst.so.6.1
+         0 1998-12-31 04:49 lib/modules/
+    565762 1998-12-31 04:48 lib/modules/xie.so
+    552970 1998-12-31 04:48 lib/modules/pex5.so
+     10734 1998-12-31 04:49 lib/modules/xf86Jstk.so
+     23933 1998-12-31 04:49 lib/modules/xf86Wacom.so
+     14831 1998-12-31 04:49 lib/modules/xf86Elo.so
+     15839 1998-12-31 04:49 lib/modules/xf86MuTouch.so
+     14930 1998-12-31 04:49 lib/modules/xf86Summa.so
+     13542 1998-12-31 04:49 lib/modules/xf86AceCad.so
+     14003 1998-12-31 04:49 lib/modules/xf86Dial.so
+         0 1998-12-31 04:32 lib/X11/app-defaults/
+      6593 1998-12-31 04:30 lib/X11/app-defaults/Bitmap
+       497 1998-12-31 04:30 lib/X11/app-defaults/Bitmap-color
+        45 1998-12-31 04:30 lib/X11/app-defaults/Beforelight
+      8832 1998-12-31 04:30 lib/X11/app-defaults/Editres
+      1051 1998-12-31 04:30 lib/X11/app-defaults/Editres-color
+       181 1998-12-31 04:30 lib/X11/app-defaults/Clock-color
+      3573 1998-12-31 04:31 lib/X11/app-defaults/XClipboard
+        20 1998-12-31 04:31 lib/X11/app-defaults/XClock
+       689 1998-12-31 04:31 lib/X11/app-defaults/XConsole
+      1058 1998-12-31 04:31 lib/X11/app-defaults/Chooser
+       637 1998-12-31 04:31 lib/X11/app-defaults/Xfd
+        19 1998-12-31 04:32 lib/X11/app-defaults/XLogo
+       220 1998-12-31 04:32 lib/X11/app-defaults/XLogo-color
+       839 1998-12-31 04:32 lib/X11/app-defaults/Xmag
+      6230 1998-12-31 04:32 lib/X11/app-defaults/Xmh
+      3874 1998-12-31 04:32 lib/X11/app-defaults/XSm
+      4699 1998-12-31 04:32 lib/X11/app-defaults/XTerm
+       718 1998-12-31 04:32 lib/X11/app-defaults/XTerm-color
+      6234 1998-12-31 04:32 lib/X11/app-defaults/Xvidtune
+      3184 1998-12-31 04:12 lib/X11/app-defaults/Viewres
+     17195 1998-12-31 04:12 lib/X11/app-defaults/XCalc
+      1135 1998-12-31 04:12 lib/X11/app-defaults/XCalc-color
+      3128 1998-12-31 04:12 lib/X11/app-defaults/Xditview
+      1375 1998-12-31 04:12 lib/X11/app-defaults/Xditview-chrtr
+       752 1998-12-31 04:12 lib/X11/app-defaults/Xedit
+      4432 1998-12-31 04:12 lib/X11/app-defaults/XFontSel
+        65 1998-12-31 04:12 lib/X11/app-defaults/Xgc
+       106 1998-12-31 04:12 lib/X11/app-defaults/XLoad
+      5091 1998-12-31 04:12 lib/X11/app-defaults/Xman
+       213 1998-12-31 04:12 lib/X11/app-defaults/Xmessage

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xcfg.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xcfg.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xcfg.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xcfg.txt   3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,11 @@
+drwxr-xr-x root/other        0 1998-12-31 03:49 lib/X11/xdm/
+-r--r--r-- root/staff     1001 1998-12-30 10:13 lib/X11/xdm/xdm-config
+-r--r--r-- root/staff     1048 1998-12-30 10:13 lib/X11/xdm/Xresources
+-r--r--r-- root/staff      593 1998-12-30 10:13 lib/X11/xdm/Xservers
+-r--r--r-- root/staff     1976 1998-12-30 10:13 lib/X11/xdm/Xaccess
+-rwxr-xr-x root/staff      605 1998-12-30 10:13 lib/X11/xdm/Xsession
+-rwxr-xr-x root/staff      390 1998-12-30 10:13 lib/X11/xdm/GiveConsole
+-rwxr-xr-x root/staff      249 1998-12-30 10:13 lib/X11/xdm/TakeConsole
+-rwxr-xr-x root/staff      150 1998-12-30 10:13 lib/X11/xdm/Xsetup_0
+-r--r--r-- root/staff      666 1998-12-30 10:14 lib/X11/xinit/xinitrc
+-r--r--r-- root/staff      319 1998-12-31 03:49 lib/X11/proxymngr/pmconfig

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xdoc.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xdoc.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xdoc.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xdoc.txt   3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,61 @@
+drwxr-xr-x root/other        0 1999-01-08 08:51 lib/X11/doc/
+-r--r--r-- root/staff     1708 1999-01-08 08:50 lib/X11/doc/ServersOnly
+-r--r--r-- root/staff     4188 1999-01-08 08:50 lib/X11/doc/README.DGA
+-r--r--r-- root/staff    63218 1999-01-08 08:50 lib/X11/doc/AccelCards
+-r--r--r-- root/staff    48786 1999-01-08 08:50 lib/X11/doc/Monitors
+-r--r--r-- root/staff    21859 1999-01-08 08:50 lib/X11/doc/Devices
+-r--r--r-- root/staff    14141 1999-01-08 08:50 lib/X11/doc/README.FreeBSD
+-r--r--r-- root/staff    19242 1999-01-08 08:50 lib/X11/doc/README.NetBSD
+-r--r--r-- root/staff    14082 1999-01-08 08:50 lib/X11/doc/README.OpenBSD
+-r--r--r-- root/staff     7588 1999-01-08 08:50 lib/X11/doc/README.Linux
+-r--r--r-- root/staff    21515 1999-01-08 08:50 lib/X11/doc/README.LynxOS
+-r--r--r-- root/staff    24250 1999-01-08 08:50 lib/X11/doc/README.SCO
+-r--r--r-- root/staff    20710 1999-01-08 08:50 lib/X11/doc/README.isc
+-r--r--r-- root/staff    31118 1999-01-08 08:50 lib/X11/doc/README.OS2
+-r--r--r-- root/staff    10345 1999-01-08 08:50 lib/X11/doc/OS2.Notes
+-r--r--r-- root/staff    10685 1999-01-08 08:50 lib/X11/doc/README.SOLX86
+-r--r--r-- root/staff    20592 1999-01-08 08:50 lib/X11/doc/README.SVR4
+-r--r--r-- root/staff     2187 1999-01-08 08:50 lib/X11/doc/README.DECtga
+-r--r--r-- root/staff     3797 1999-01-08 08:50 lib/X11/doc/README.I128
+-r--r--r-- root/staff     6472 1999-01-08 08:50 lib/X11/doc/README.Mach32
+-r--r--r-- root/staff    19547 1999-01-08 08:50 lib/X11/doc/README.Mach64
+-r--r--r-- root/staff     8049 1999-01-08 08:50 lib/X11/doc/README.MGA
+-r--r--r-- root/staff     3107 1999-01-08 08:50 lib/X11/doc/README.NVIDIA
+-r--r--r-- root/staff     8890 1999-01-08 08:50 lib/X11/doc/README.Oak
+-r--r--r-- root/staff    19785 1999-01-08 08:50 lib/X11/doc/README.P9000
+-r--r--r-- root/staff     4698 1999-01-08 08:50 lib/X11/doc/README.Video7
+-r--r--r-- root/staff    30939 1999-01-08 08:50 lib/X11/doc/README.S3
+-r--r--r-- root/staff    12316 1999-01-08 08:50 lib/X11/doc/README.S3V
+-r--r--r-- root/staff     9199 1999-01-08 08:50 lib/X11/doc/README.SiS
+-r--r--r-- root/staff    10926 1999-01-08 08:50 lib/X11/doc/README.W32
+-r--r--r-- root/staff    11254 1999-01-08 08:50 lib/X11/doc/README.WstDig
+-r--r--r-- root/staff     2783 1999-01-08 08:50 lib/X11/doc/README.apm
+-r--r--r-- root/staff    11372 1999-01-08 08:50 lib/X11/doc/README.ark
+-r--r--r-- root/staff    27960 1999-01-08 08:50 lib/X11/doc/README.agx
+-r--r--r-- root/staff    27564 1999-01-08 08:50 lib/X11/doc/README.ati
+-r--r--r-- root/staff    40909 1999-01-08 08:50 lib/X11/doc/README.chips
+-r--r--r-- root/staff    45884 1999-01-08 08:50 lib/X11/doc/README.cirrus
+-r--r--r-- root/staff     2636 1999-01-08 08:50 lib/X11/doc/README.cyrix
+-r--r--r-- root/staff     6504 1999-01-08 08:51 lib/X11/doc/README.epson
+-r--r--r-- root/staff    27794 1999-01-08 08:51 lib/X11/doc/README.mouse
+-r--r--r-- root/staff     6115 1999-01-08 08:51 lib/X11/doc/README.neo
+-r--r--r-- root/staff     1675 1999-01-08 08:51 lib/X11/doc/README.rendition
+-r--r--r-- root/staff     3717 1999-01-08 08:51 lib/X11/doc/README.3DLabs
+-r--r--r-- root/staff     8987 1999-01-08 08:51 lib/X11/doc/README.trident
+-r--r--r-- root/staff     9268 1999-01-08 08:51 lib/X11/doc/COPYRIGHT
+-r--r--r-- root/staff    52698 1999-01-08 08:51 lib/X11/doc/README.tseng
+-r--r--r-- root/staff    16074 1999-01-08 08:51 lib/X11/doc/README.fbdev
+-r--r--r-- root/staff    21268 1999-01-08 08:51 lib/X11/doc/RELNOTES
+-r--r--r-- root/staff    20924 1999-01-08 08:51 lib/X11/doc/README.Config
+-r--r--r-- root/staff    10727 1999-01-08 08:51 lib/X11/doc/BUILD
+-r--r--r-- root/staff    37083 1999-01-08 08:51 lib/X11/doc/README
+-r--r--r-- root/staff    28702 1999-01-08 08:51 lib/X11/doc/QuickStart.doc
+-r--r--r-- root/staff     3152 1999-01-08 08:51 lib/X11/doc/DocIndex
+-r--r--r-- root/staff     7141 1999-01-08 08:51 lib/X11/doc/README.LinkKit
+-r--r--r-- root/staff     4371 1999-01-08 08:51 lib/X11/doc/README.clkprog
+-r--r--r-- root/staff     6067 1999-01-08 08:51 lib/X11/doc/xinput
+-r--r--r-- root/staff    68380 1999-01-08 08:51 lib/X11/doc/VideoModes.doc
+-r--r--r-- root/staff    47665 1999-01-08 08:51 lib/X11/doc/VGADriver.Doc
+-r--r--r-- root/staff    12623 1998-12-31 03:53 lib/X11/doc/DPMS.TXT
+-r--r--r-- root/staff    10288 1998-12-31 03:53 lib/X11/doc/DPMSLib.TXT
+-r--r--r-- root/staff    26941 1998-12-31 03:53 lib/X11/doc/ctlseqs.TXT

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xf100.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xf100.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xf100.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xf100.txt  3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,201 @@
+        0 1998-11-14 07:31 lib/X11/fonts/100dpi/
+     4412 1998-11-14 07:31 lib/X11/fonts/100dpi/courB08.pcf.gz
+     4837 1998-11-14 07:31 lib/X11/fonts/100dpi/courB10.pcf.gz
+     5033 1998-11-14 07:31 lib/X11/fonts/100dpi/courB12.pcf.gz
+     5318 1998-11-14 07:31 lib/X11/fonts/100dpi/courB14.pcf.gz
+     6025 1998-11-14 07:31 lib/X11/fonts/100dpi/courB18.pcf.gz
+     7636 1998-11-14 07:31 lib/X11/fonts/100dpi/courB24.pcf.gz
+     4601 1998-11-14 07:31 lib/X11/fonts/100dpi/courBO08.pcf.gz
+     5105 1998-11-14 07:31 lib/X11/fonts/100dpi/courBO10.pcf.gz
+     5373 1998-11-14 07:31 lib/X11/fonts/100dpi/courBO12.pcf.gz
+     5731 1998-11-14 07:31 lib/X11/fonts/100dpi/courBO14.pcf.gz
+     6520 1998-11-14 07:31 lib/X11/fonts/100dpi/courBO18.pcf.gz
+     8417 1998-11-14 07:31 lib/X11/fonts/100dpi/courBO24.pcf.gz
+     4455 1998-11-14 07:31 lib/X11/fonts/100dpi/courO08.pcf.gz
+     5054 1998-11-14 07:31 lib/X11/fonts/100dpi/courO10.pcf.gz
+     5354 1998-11-14 07:31 lib/X11/fonts/100dpi/courO12.pcf.gz
+     5507 1998-11-14 07:31 lib/X11/fonts/100dpi/courO14.pcf.gz
+     6143 1998-11-14 07:31 lib/X11/fonts/100dpi/courO18.pcf.gz
+     7435 1998-11-14 07:31 lib/X11/fonts/100dpi/courO24.pcf.gz
+     4293 1998-11-14 07:31 lib/X11/fonts/100dpi/courR08.pcf.gz
+     4786 1998-11-14 07:31 lib/X11/fonts/100dpi/courR10.pcf.gz
+     4915 1998-11-14 07:31 lib/X11/fonts/100dpi/courR12.pcf.gz
+     5166 1998-11-14 07:31 lib/X11/fonts/100dpi/courR14.pcf.gz
+     5810 1998-11-14 07:31 lib/X11/fonts/100dpi/courR18.pcf.gz
+     7151 1998-11-14 07:31 lib/X11/fonts/100dpi/courR24.pcf.gz
+     4796 1998-11-14 07:31 lib/X11/fonts/100dpi/helvB08.pcf.gz
+     5319 1998-11-14 07:31 lib/X11/fonts/100dpi/helvB10.pcf.gz
+     5674 1998-11-14 07:31 lib/X11/fonts/100dpi/helvB12.pcf.gz
+     5922 1998-11-14 07:31 lib/X11/fonts/100dpi/helvB14.pcf.gz
+     6739 1998-11-14 07:31 lib/X11/fonts/100dpi/helvB18.pcf.gz
+     8278 1998-11-14 07:31 lib/X11/fonts/100dpi/helvB24.pcf.gz
+     5016 1998-11-14 07:31 lib/X11/fonts/100dpi/helvBO08.pcf.gz
+     5642 1998-11-14 07:31 lib/X11/fonts/100dpi/helvBO10.pcf.gz
+     6073 1998-11-14 07:31 lib/X11/fonts/100dpi/helvBO12.pcf.gz
+     6335 1998-11-14 07:31 lib/X11/fonts/100dpi/helvBO14.pcf.gz
+     7333 1998-11-14 07:31 lib/X11/fonts/100dpi/helvBO18.pcf.gz
+     9563 1998-11-14 07:31 lib/X11/fonts/100dpi/helvBO24.pcf.gz
+     4958 1998-11-14 07:31 lib/X11/fonts/100dpi/helvO08.pcf.gz
+     5616 1998-11-14 07:31 lib/X11/fonts/100dpi/helvO10.pcf.gz
+     5854 1998-11-14 07:31 lib/X11/fonts/100dpi/helvO12.pcf.gz
+     6292 1998-11-14 07:31 lib/X11/fonts/100dpi/helvO14.pcf.gz
+     7409 1998-11-14 07:31 lib/X11/fonts/100dpi/helvO18.pcf.gz
+     9374 1998-11-14 07:31 lib/X11/fonts/100dpi/helvO24.pcf.gz
+     4772 1998-11-14 07:31 lib/X11/fonts/100dpi/helvR08.pcf.gz
+     5264 1998-11-14 07:31 lib/X11/fonts/100dpi/helvR10.pcf.gz
+     5583 1998-11-14 07:31 lib/X11/fonts/100dpi/helvR12.pcf.gz
+     5842 1998-11-14 07:31 lib/X11/fonts/100dpi/helvR14.pcf.gz
+     6748 1998-11-14 07:31 lib/X11/fonts/100dpi/helvR18.pcf.gz
+     8294 1998-11-14 07:31 lib/X11/fonts/100dpi/helvR24.pcf.gz
+     5008 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenB08.pcf.gz
+     5693 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenB10.pcf.gz
+     6128 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenB12.pcf.gz
+     6420 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenB14.pcf.gz
+     7427 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenB18.pcf.gz
+     9009 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenB24.pcf.gz
+     5191 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenBI08.pcf.gz
+     5847 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenBI10.pcf.gz
+     6523 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenBI12.pcf.gz
+     6623 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenBI14.pcf.gz
+     7821 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenBI18.pcf.gz
+    10158 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenBI24.pcf.gz
+     4985 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenI08.pcf.gz
+     5651 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenI10.pcf.gz
+     6350 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenI12.pcf.gz
+     6504 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenI14.pcf.gz
+     7315 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenI18.pcf.gz
+    10104 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenI24.pcf.gz
+     4878 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenR08.pcf.gz
+     5574 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenR10.pcf.gz
+     6018 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenR12.pcf.gz
+     6129 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenR14.pcf.gz
+     7236 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenR18.pcf.gz
+     9171 1998-11-14 07:31 lib/X11/fonts/100dpi/ncenR24.pcf.gz
+     4464 1998-11-14 07:31 lib/X11/fonts/100dpi/symb08.pcf.gz
+     5035 1998-11-14 07:31 lib/X11/fonts/100dpi/symb10.pcf.gz
+     5517 1998-11-14 07:31 lib/X11/fonts/100dpi/symb12.pcf.gz
+     5674 1998-11-14 07:31 lib/X11/fonts/100dpi/symb14.pcf.gz
+     6399 1998-11-14 07:31 lib/X11/fonts/100dpi/symb18.pcf.gz
+     8379 1998-11-14 07:31 lib/X11/fonts/100dpi/symb24.pcf.gz
+     4846 1998-11-14 07:31 lib/X11/fonts/100dpi/timB08.pcf.gz
+     5479 1998-11-14 07:31 lib/X11/fonts/100dpi/timB10.pcf.gz
+     5802 1998-11-14 07:31 lib/X11/fonts/100dpi/timB12.pcf.gz
+     6080 1998-11-14 07:31 lib/X11/fonts/100dpi/timB14.pcf.gz
+     7058 1998-11-14 07:31 lib/X11/fonts/100dpi/timB18.pcf.gz
+     8730 1998-11-14 07:31 lib/X11/fonts/100dpi/timB24.pcf.gz
+     5090 1998-11-14 07:31 lib/X11/fonts/100dpi/timBI08.pcf.gz
+     5782 1998-11-14 07:31 lib/X11/fonts/100dpi/timBI10.pcf.gz
+     6104 1998-11-14 07:31 lib/X11/fonts/100dpi/timBI12.pcf.gz
+     6491 1998-11-14 07:31 lib/X11/fonts/100dpi/timBI14.pcf.gz
+     7919 1998-11-14 07:31 lib/X11/fonts/100dpi/timBI18.pcf.gz
+     9432 1998-11-14 07:31 lib/X11/fonts/100dpi/timBI24.pcf.gz
+     4941 1998-11-14 07:31 lib/X11/fonts/100dpi/timI08.pcf.gz
+     5579 1998-11-14 07:31 lib/X11/fonts/100dpi/timI10.pcf.gz
+     5953 1998-11-14 07:31 lib/X11/fonts/100dpi/timI12.pcf.gz
+     6470 1998-11-14 07:31 lib/X11/fonts/100dpi/timI14.pcf.gz
+     7617 1998-11-14 07:31 lib/X11/fonts/100dpi/timI18.pcf.gz
+     9340 1998-11-14 07:31 lib/X11/fonts/100dpi/timI24.pcf.gz
+     4767 1998-11-14 07:31 lib/X11/fonts/100dpi/timR08.pcf.gz
+     5398 1998-11-14 07:31 lib/X11/fonts/100dpi/timR10.pcf.gz
+     5731 1998-11-14 07:31 lib/X11/fonts/100dpi/timR12.pcf.gz
+     6043 1998-11-14 07:31 lib/X11/fonts/100dpi/timR14.pcf.gz
+     6828 1998-11-14 07:31 lib/X11/fonts/100dpi/timR18.pcf.gz
+     8493 1998-11-14 07:31 lib/X11/fonts/100dpi/timR24.pcf.gz
+    15926 1998-11-14 07:31 lib/X11/fonts/100dpi/fonts.dir
+     4337 1998-11-14 07:31 lib/X11/fonts/100dpi/charI08.pcf.gz
+     4795 1998-11-14 07:31 lib/X11/fonts/100dpi/charI10.pcf.gz
+     5309 1998-11-14 07:31 lib/X11/fonts/100dpi/charI12.pcf.gz
+     5687 1998-11-14 07:31 lib/X11/fonts/100dpi/charI14.pcf.gz
+     6416 1998-11-14 07:31 lib/X11/fonts/100dpi/charI18.pcf.gz
+     7622 1998-11-14 07:31 lib/X11/fonts/100dpi/charI24.pcf.gz
+     4242 1998-11-14 07:31 lib/X11/fonts/100dpi/charR08.pcf.gz
+     4674 1998-11-14 07:31 lib/X11/fonts/100dpi/charR10.pcf.gz
+     5037 1998-11-14 07:31 lib/X11/fonts/100dpi/charR12.pcf.gz
+     5301 1998-11-14 07:31 lib/X11/fonts/100dpi/charR14.pcf.gz
+     6082 1998-11-14 07:31 lib/X11/fonts/100dpi/charR18.pcf.gz
+     6965 1998-11-14 07:31 lib/X11/fonts/100dpi/charR24.pcf.gz
+     4938 1998-11-14 07:31 lib/X11/fonts/100dpi/tech14.pcf.gz
+     4988 1998-11-14 07:31 lib/X11/fonts/100dpi/techB14.pcf.gz
+     4941 1998-11-14 07:31 lib/X11/fonts/100dpi/term14.pcf.gz
+     4903 1998-11-14 07:31 lib/X11/fonts/100dpi/termB14.pcf.gz
+     4921 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS08.pcf.gz
+     5546 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS10.pcf.gz
+     6061 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS12.pcf.gz
+     6666 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS14.pcf.gz
+     7550 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS18.pcf.gz
+     9305 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS24.pcf.gz
+     4766 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS08.pcf.gz
+     5209 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS10.pcf.gz
+     5639 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS12.pcf.gz
+     6065 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS14.pcf.gz
+     6812 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS18.pcf.gz
+     8199 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS24.pcf.gz
+     4867 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS08.pcf.gz
+     5536 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS10.pcf.gz
+     6059 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS12.pcf.gz
+     6562 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS14.pcf.gz
+     7381 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS18.pcf.gz
+     9185 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS24.pcf.gz
+     4674 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS08.pcf.gz
+     5044 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS10.pcf.gz
+     5542 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS12.pcf.gz
+     5936 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS14.pcf.gz
+     6682 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS18.pcf.gz
+     8046 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS24.pcf.gz
+     4946 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB08.pcf.gz
+     5308 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB10.pcf.gz
+     5841 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB12.pcf.gz
+     6210 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB14.pcf.gz
+     7073 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB18.pcf.gz
+     8604 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB24.pcf.gz
+     5173 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI08.pcf.gz
+     5662 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI10.pcf.gz
+     6201 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI12.pcf.gz
+     6831 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI14.pcf.gz
+     7800 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI18.pcf.gz
+     9659 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI24.pcf.gz
+     5099 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI08.pcf.gz
+     5596 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI10.pcf.gz
+     6172 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI12.pcf.gz
+     6716 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI14.pcf.gz
+     7624 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI18.pcf.gz
+     9510 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI24.pcf.gz
+     4828 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR08.pcf.gz
+     5220 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR10.pcf.gz
+     5698 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR12.pcf.gz
+     6166 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR14.pcf.gz
+     6932 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR18.pcf.gz
+     8442 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR24.pcf.gz
+     3633 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS08.pcf.gz
+     4036 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS10.pcf.gz
+     4356 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS12.pcf.gz
+     4781 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS14.pcf.gz
+     5334 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS18.pcf.gz
+     6410 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS24.pcf.gz
+     3657 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS08.pcf.gz
+     3932 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS10.pcf.gz
+     4343 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS12.pcf.gz
+     4781 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS14.pcf.gz
+     5392 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS18.pcf.gz
+     6367 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS24.pcf.gz
+     7785 1998-11-14 07:31 lib/X11/fonts/100dpi/luBIS19.pcf.gz
+     7019 1998-11-14 07:31 lib/X11/fonts/100dpi/luBS19.pcf.gz
+     7627 1998-11-14 07:31 lib/X11/fonts/100dpi/luIS19.pcf.gz
+     6855 1998-11-14 07:31 lib/X11/fonts/100dpi/luRS19.pcf.gz
+     7291 1998-11-14 07:31 lib/X11/fonts/100dpi/lubB19.pcf.gz
+     7986 1998-11-14 07:31 lib/X11/fonts/100dpi/lubBI19.pcf.gz
+     7814 1998-11-14 07:31 lib/X11/fonts/100dpi/lubI19.pcf.gz
+     7137 1998-11-14 07:31 lib/X11/fonts/100dpi/lubR19.pcf.gz
+     5505 1998-11-14 07:31 lib/X11/fonts/100dpi/lutBS19.pcf.gz
+     5493 1998-11-14 07:31 lib/X11/fonts/100dpi/lutRS19.pcf.gz
+     6950 1998-11-14 07:31 lib/X11/fonts/100dpi/UTI___14.pcf.gz
+     6106 1998-11-14 07:31 lib/X11/fonts/100dpi/UTI___12.pcf.gz
+    10005 1998-11-14 07:31 lib/X11/fonts/100dpi/UTI___24.pcf.gz
+     5653 1998-11-14 07:31 lib/X11/fonts/100dpi/UTI___10.pcf.gz
+     8123 1998-11-14 07:31 lib/X11/fonts/100dpi/UTI___18.pcf.gz
+     6361 1998-11-14 07:31 lib/X11/fonts/100dpi/UTRG__14.pcf.gz
+     5909 1998-11-14 07:31 lib/X11/fonts/100dpi/UTRG__12.pcf.gz
+     8993 1998-11-14 07:31 lib/X11/fonts/100dpi/UTRG__24.pcf.gz
+     5443 1998-11-14 07:31 lib/X11/fonts/100dpi/UTRG__10.pcf.gz
+     7403 1998-11-14 07:31 lib/X11/fonts/100dpi/UTRG__18.pcf.gz
+     3154 1998-11-14 07:31 lib/X11/fonts/100dpi/fonts.alias

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfcyr.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfcyr.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfcyr.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfcyr.txt  3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,71 @@
+        0 1998-11-14 07:31 lib/X11/fonts/cyrillic/
+     3571 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1c.pcf.gz
+     3676 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1cb.pcf.gz
+     3580 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1cbo.pcf.gz
+     3486 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1co.pcf.gz
+     3406 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1h.pcf.gz
+     3458 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1hb.pcf.gz
+     3686 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1hbo.pcf.gz
+     3615 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1ho.pcf.gz
+     3481 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1t.pcf.gz
+     3519 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1tb.pcf.gz
+     3722 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1tbo.pcf.gz
+     3687 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox1to.pcf.gz
+     3765 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2c.pcf.gz
+     3878 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2cb.pcf.gz
+     3919 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2cbo.pcf.gz
+     3820 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2co.pcf.gz
+     3659 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2h.pcf.gz
+     3707 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2hb.pcf.gz
+     3998 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2hbo.pcf.gz
+     3953 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2ho.pcf.gz
+     3759 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2t.pcf.gz
+     3813 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2tb.pcf.gz
+     4092 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2tbo.pcf.gz
+     4022 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox2to.pcf.gz
+     4201 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3c.pcf.gz
+     4295 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3cb.pcf.gz
+     4340 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3cbo.pcf.gz
+     4253 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3co.pcf.gz
+     3901 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3h.pcf.gz
+     3963 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3hb.pcf.gz
+     4342 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3hbo.pcf.gz
+     4279 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3ho.pcf.gz
+     4034 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3t.pcf.gz
+     4108 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3tb.pcf.gz
+     4404 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3tbo.pcf.gz
+     4346 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox3to.pcf.gz
+     4375 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4h.pcf.gz
+     4414 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4hb.pcf.gz
+     4828 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4hbo.pcf.gz
+     4804 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4ho.pcf.gz
+     4416 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4t.pcf.gz
+     4459 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4tb.pcf.gz
+     4831 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4tbo.pcf.gz
+     4796 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox4to.pcf.gz
+     4947 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5h.pcf.gz
+     5006 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5hb.pcf.gz
+     5556 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5hbo.pcf.gz
+     5519 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5ho.pcf.gz
+     5164 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5t.pcf.gz
+     5206 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5tb.pcf.gz
+     5715 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5tbo.pcf.gz
+     5694 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox5to.pcf.gz
+     5683 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6h.pcf.gz
+     5731 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6hb.pcf.gz
+     6606 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6hbo.pcf.gz
+     6534 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6ho.pcf.gz
+     6252 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6t.pcf.gz
+     6269 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6tb.pcf.gz
+     7140 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6tbo.pcf.gz
+     7138 1998-11-14 07:31 lib/X11/fonts/cyrillic/crox6to.pcf.gz
+     3802 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi10x16b.pcf.gz
+     4136 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi10x20.pcf.gz
+     4253 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi12x24.pcf.gz
+     3476 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi6x10.pcf.gz
+     3863 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi6x13.pcf.gz
+     3806 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi8x13.pcf.gz
+     3897 1998-11-14 07:31 lib/X11/fonts/cyrillic/koi9x15.pcf.gz
+     2583 1998-11-14 07:31 lib/X11/fonts/cyrillic/koinil2.pcf.gz
+     5026 1998-11-14 07:31 lib/X11/fonts/cyrillic/fonts.dir
+     1156 1998-11-14 07:31 lib/X11/fonts/cyrillic/fonts.alias

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnon.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnon.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnon.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnon.txt  3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,11 @@
+   241462 1998-11-14 07:31 lib/X11/fonts/misc/gb16fs.pcf.gz
+   261502 1998-11-14 07:31 lib/X11/fonts/misc/gb16st.pcf.gz
+   402745 1998-11-14 07:31 lib/X11/fonts/misc/gb24st.pcf.gz
+   221852 1998-11-14 07:31 lib/X11/fonts/misc/hanglg16.pcf.gz
+   224065 1998-11-14 07:31 lib/X11/fonts/misc/hanglm16.pcf.gz
+   341473 1998-11-14 07:31 lib/X11/fonts/misc/hanglm24.pcf.gz
+     3732 1998-11-14 07:31 lib/X11/fonts/misc/heb6x13.pcf.gz
+     3352 1998-11-14 07:31 lib/X11/fonts/misc/heb8x13.pcf.gz
+   229782 1998-11-14 07:31 lib/X11/fonts/misc/jiskan16.pcf.gz
+   367802 1998-11-14 07:31 lib/X11/fonts/misc/jiskan24.pcf.gz
+   198168 1998-11-14 07:31 lib/X11/fonts/misc/k14.pcf.gz

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnts.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnts.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnts.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfnts.txt  3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,270 @@
+        0 1998-11-14 07:31 lib/X11/fonts/75dpi/
+     4195 1998-11-14 07:31 lib/X11/fonts/75dpi/courB08.pcf.gz
+     4412 1998-11-14 07:31 lib/X11/fonts/75dpi/courB10.pcf.gz
+     4470 1998-11-14 07:31 lib/X11/fonts/75dpi/courB12.pcf.gz
+     4863 1998-11-14 07:31 lib/X11/fonts/75dpi/courB14.pcf.gz
+     5283 1998-11-14 07:31 lib/X11/fonts/75dpi/courB18.pcf.gz
+     6028 1998-11-14 07:31 lib/X11/fonts/75dpi/courB24.pcf.gz
+     4363 1998-11-14 07:31 lib/X11/fonts/75dpi/courBO08.pcf.gz
+     4586 1998-11-14 07:31 lib/X11/fonts/75dpi/courBO10.pcf.gz
+     4970 1998-11-14 07:31 lib/X11/fonts/75dpi/courBO12.pcf.gz
+     5126 1998-11-14 07:31 lib/X11/fonts/75dpi/courBO14.pcf.gz
+     5752 1998-11-14 07:31 lib/X11/fonts/75dpi/courBO18.pcf.gz
+     6524 1998-11-14 07:31 lib/X11/fonts/75dpi/courBO24.pcf.gz
+     4263 1998-11-14 07:31 lib/X11/fonts/75dpi/courO08.pcf.gz
+     4454 1998-11-14 07:31 lib/X11/fonts/75dpi/courO10.pcf.gz
+     4787 1998-11-14 07:31 lib/X11/fonts/75dpi/courO12.pcf.gz
+     5083 1998-11-14 07:31 lib/X11/fonts/75dpi/courO14.pcf.gz
+     5539 1998-11-14 07:31 lib/X11/fonts/75dpi/courO18.pcf.gz
+     6162 1998-11-14 07:31 lib/X11/fonts/75dpi/courO24.pcf.gz
+     4196 1998-11-14 07:31 lib/X11/fonts/75dpi/courR08.pcf.gz
+     4310 1998-11-14 07:31 lib/X11/fonts/75dpi/courR10.pcf.gz
+     4561 1998-11-14 07:31 lib/X11/fonts/75dpi/courR12.pcf.gz
+     4792 1998-11-14 07:31 lib/X11/fonts/75dpi/courR14.pcf.gz
+     5170 1998-11-14 07:31 lib/X11/fonts/75dpi/courR18.pcf.gz
+     5764 1998-11-14 07:31 lib/X11/fonts/75dpi/courR24.pcf.gz
+     4618 1998-11-14 07:31 lib/X11/fonts/75dpi/helvB08.pcf.gz
+     4795 1998-11-14 07:31 lib/X11/fonts/75dpi/helvB10.pcf.gz
+     4961 1998-11-14 07:31 lib/X11/fonts/75dpi/helvB12.pcf.gz
+     5308 1998-11-14 07:31 lib/X11/fonts/75dpi/helvB14.pcf.gz
+     5860 1998-11-14 07:31 lib/X11/fonts/75dpi/helvB18.pcf.gz
+     6682 1998-11-14 07:31 lib/X11/fonts/75dpi/helvB24.pcf.gz
+     4820 1998-11-14 07:31 lib/X11/fonts/75dpi/helvBO08.pcf.gz
+     5035 1998-11-14 07:31 lib/X11/fonts/75dpi/helvBO10.pcf.gz
+     5342 1998-11-14 07:31 lib/X11/fonts/75dpi/helvBO12.pcf.gz
+     5643 1998-11-14 07:31 lib/X11/fonts/75dpi/helvBO14.pcf.gz
+     6306 1998-11-14 07:31 lib/X11/fonts/75dpi/helvBO18.pcf.gz
+     7256 1998-11-14 07:31 lib/X11/fonts/75dpi/helvBO24.pcf.gz
+     4750 1998-11-14 07:31 lib/X11/fonts/75dpi/helvO08.pcf.gz
+     5000 1998-11-14 07:31 lib/X11/fonts/75dpi/helvO10.pcf.gz
+     5254 1998-11-14 07:31 lib/X11/fonts/75dpi/helvO12.pcf.gz
+     5596 1998-11-14 07:31 lib/X11/fonts/75dpi/helvO14.pcf.gz
+     6228 1998-11-14 07:31 lib/X11/fonts/75dpi/helvO18.pcf.gz
+     7280 1998-11-14 07:31 lib/X11/fonts/75dpi/helvO24.pcf.gz
+     4582 1998-11-14 07:31 lib/X11/fonts/75dpi/helvR08.pcf.gz
+     4758 1998-11-14 07:31 lib/X11/fonts/75dpi/helvR10.pcf.gz
+     4915 1998-11-14 07:31 lib/X11/fonts/75dpi/helvR12.pcf.gz
+     5220 1998-11-14 07:31 lib/X11/fonts/75dpi/helvR14.pcf.gz
+     5858 1998-11-14 07:31 lib/X11/fonts/75dpi/helvR18.pcf.gz
+     6689 1998-11-14 07:31 lib/X11/fonts/75dpi/helvR24.pcf.gz
+     4799 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenB08.pcf.gz
+     5066 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenB10.pcf.gz
+     5303 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenB12.pcf.gz
+     5667 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenB14.pcf.gz
+     6517 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenB18.pcf.gz
+     7389 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenB24.pcf.gz
+     4952 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenBI08.pcf.gz
+     5194 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenBI10.pcf.gz
+     5489 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenBI12.pcf.gz
+     5830 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenBI14.pcf.gz
+     6886 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenBI18.pcf.gz
+     7861 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenBI24.pcf.gz
+     4836 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenI08.pcf.gz
+     5041 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenI10.pcf.gz
+     5283 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenI12.pcf.gz
+     5629 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenI14.pcf.gz
+     6449 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenI18.pcf.gz
+     7533 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenI24.pcf.gz
+     4569 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenR08.pcf.gz
+     4887 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenR10.pcf.gz
+     4976 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenR12.pcf.gz
+     5395 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenR14.pcf.gz
+     5256 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenR18.pcf.gz
+     6082 1998-11-14 07:31 lib/X11/fonts/75dpi/ncenR24.pcf.gz
+     4196 1998-11-14 07:31 lib/X11/fonts/75dpi/symb08.pcf.gz
+     4460 1998-11-14 07:31 lib/X11/fonts/75dpi/symb10.pcf.gz
+     4834 1998-11-14 07:31 lib/X11/fonts/75dpi/symb12.pcf.gz
+     5069 1998-11-14 07:31 lib/X11/fonts/75dpi/symb14.pcf.gz
+     5687 1998-11-14 07:31 lib/X11/fonts/75dpi/symb18.pcf.gz
+     6486 1998-11-14 07:31 lib/X11/fonts/75dpi/symb24.pcf.gz
+     4551 1998-11-14 07:31 lib/X11/fonts/75dpi/timB08.pcf.gz
+     4837 1998-11-14 07:31 lib/X11/fonts/75dpi/timB10.pcf.gz
+     5202 1998-11-14 07:31 lib/X11/fonts/75dpi/timB12.pcf.gz
+     5486 1998-11-14 07:31 lib/X11/fonts/75dpi/timB14.pcf.gz
+     6120 1998-11-14 07:31 lib/X11/fonts/75dpi/timB18.pcf.gz
+     7176 1998-11-14 07:31 lib/X11/fonts/75dpi/timB24.pcf.gz
+     4676 1998-11-14 07:31 lib/X11/fonts/75dpi/timBI08.pcf.gz
+     5077 1998-11-14 07:31 lib/X11/fonts/75dpi/timBI10.pcf.gz
+     5484 1998-11-14 07:31 lib/X11/fonts/75dpi/timBI12.pcf.gz
+     5804 1998-11-14 07:31 lib/X11/fonts/75dpi/timBI14.pcf.gz
+     6408 1998-11-14 07:31 lib/X11/fonts/75dpi/timBI18.pcf.gz
+     7754 1998-11-14 07:31 lib/X11/fonts/75dpi/timBI24.pcf.gz
+     4613 1998-11-14 07:31 lib/X11/fonts/75dpi/timI08.pcf.gz
+     4939 1998-11-14 07:31 lib/X11/fonts/75dpi/timI10.pcf.gz
+     5279 1998-11-14 07:31 lib/X11/fonts/75dpi/timI12.pcf.gz
+     5617 1998-11-14 07:31 lib/X11/fonts/75dpi/timI14.pcf.gz
+     6415 1998-11-14 07:31 lib/X11/fonts/75dpi/timI18.pcf.gz
+     7535 1998-11-14 07:31 lib/X11/fonts/75dpi/timI24.pcf.gz
+     4504 1998-11-14 07:31 lib/X11/fonts/75dpi/timR08.pcf.gz
+     4727 1998-11-14 07:31 lib/X11/fonts/75dpi/timR10.pcf.gz
+     5084 1998-11-14 07:31 lib/X11/fonts/75dpi/timR12.pcf.gz
+     5416 1998-11-14 07:31 lib/X11/fonts/75dpi/timR14.pcf.gz
+     6068 1998-11-14 07:31 lib/X11/fonts/75dpi/timR18.pcf.gz
+     6797 1998-11-14 07:31 lib/X11/fonts/75dpi/timR24.pcf.gz
+    15430 1998-11-14 07:31 lib/X11/fonts/75dpi/fonts.dir
+     3933 1998-11-14 07:31 lib/X11/fonts/75dpi/charI08.pcf.gz
+     4232 1998-11-14 07:31 lib/X11/fonts/75dpi/charI10.pcf.gz
+     4504 1998-11-14 07:31 lib/X11/fonts/75dpi/charI12.pcf.gz
+     4967 1998-11-14 07:31 lib/X11/fonts/75dpi/charI14.pcf.gz
+     5605 1998-11-14 07:31 lib/X11/fonts/75dpi/charI18.pcf.gz
+     6420 1998-11-14 07:31 lib/X11/fonts/75dpi/charI24.pcf.gz
+     3847 1998-11-14 07:31 lib/X11/fonts/75dpi/charR08.pcf.gz
+     4120 1998-11-14 07:31 lib/X11/fonts/75dpi/charR10.pcf.gz
+     4451 1998-11-14 07:31 lib/X11/fonts/75dpi/charR12.pcf.gz
+     4751 1998-11-14 07:31 lib/X11/fonts/75dpi/charR14.pcf.gz
+     5318 1998-11-14 07:31 lib/X11/fonts/75dpi/charR18.pcf.gz
+     6084 1998-11-14 07:31 lib/X11/fonts/75dpi/charR24.pcf.gz
+     4186 1998-11-14 07:31 lib/X11/fonts/75dpi/tech14.pcf.gz
+     4282 1998-11-14 07:31 lib/X11/fonts/75dpi/techB14.pcf.gz
+     4211 1998-11-14 07:31 lib/X11/fonts/75dpi/term14.pcf.gz
+     4184 1998-11-14 07:31 lib/X11/fonts/75dpi/termB14.pcf.gz
+     4482 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS08.pcf.gz
+     4753 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS10.pcf.gz
+     5130 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS12.pcf.gz
+     5272 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS14.pcf.gz
+     5963 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS18.pcf.gz
+     7351 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS24.pcf.gz
+     4336 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS08.pcf.gz
+     4628 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS10.pcf.gz
+     4862 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS12.pcf.gz
+     5062 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS14.pcf.gz
+     5723 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS18.pcf.gz
+     6656 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS24.pcf.gz
+     4331 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS08.pcf.gz
+     4672 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS10.pcf.gz
+     4969 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS12.pcf.gz
+     5160 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS14.pcf.gz
+     5885 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS18.pcf.gz
+     7162 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS24.pcf.gz
+     4258 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS08.pcf.gz
+     4465 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS10.pcf.gz
+     4804 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS12.pcf.gz
+     4956 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS14.pcf.gz
+     5583 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS18.pcf.gz
+     6555 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS24.pcf.gz
+     4372 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB08.pcf.gz
+     4673 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB10.pcf.gz
+     5029 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB12.pcf.gz
+     5311 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB14.pcf.gz
+     5963 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB18.pcf.gz
+     6835 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB24.pcf.gz
+     4502 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI08.pcf.gz
+     4881 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI10.pcf.gz
+     5297 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI12.pcf.gz
+     5671 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI14.pcf.gz
+     6302 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI18.pcf.gz
+     7499 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI24.pcf.gz
+     4408 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI08.pcf.gz
+     4780 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI10.pcf.gz
+     5223 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI12.pcf.gz
+     5595 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI14.pcf.gz
+     6233 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI18.pcf.gz
+     7378 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI24.pcf.gz
+     4324 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR08.pcf.gz
+     4619 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR10.pcf.gz
+     4906 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR12.pcf.gz
+     5226 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR14.pcf.gz
+     5870 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR18.pcf.gz
+     6660 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR24.pcf.gz
+     3280 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS08.pcf.gz
+     4460 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS10.pcf.gz
+     4703 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS12.pcf.gz
+     4971 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS14.pcf.gz
+     5577 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS18.pcf.gz
+     5242 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS24.pcf.gz
+     3289 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS08.pcf.gz
+     4443 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS10.pcf.gz
+     4661 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS12.pcf.gz
+     4905 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS14.pcf.gz
+     5575 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS18.pcf.gz
+     5188 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS24.pcf.gz
+     6444 1998-11-14 07:31 lib/X11/fonts/75dpi/luBIS19.pcf.gz
+     5994 1998-11-14 07:31 lib/X11/fonts/75dpi/luBS19.pcf.gz
+     6324 1998-11-14 07:31 lib/X11/fonts/75dpi/luIS19.pcf.gz
+     5891 1998-11-14 07:31 lib/X11/fonts/75dpi/luRS19.pcf.gz
+     6109 1998-11-14 07:31 lib/X11/fonts/75dpi/lubB19.pcf.gz
+     6616 1998-11-14 07:31 lib/X11/fonts/75dpi/lubBI19.pcf.gz
+     6429 1998-11-14 07:31 lib/X11/fonts/75dpi/lubI19.pcf.gz
+     6001 1998-11-14 07:31 lib/X11/fonts/75dpi/lubR19.pcf.gz
+     4676 1998-11-14 07:31 lib/X11/fonts/75dpi/lutBS19.pcf.gz
+     4669 1998-11-14 07:31 lib/X11/fonts/75dpi/lutRS19.pcf.gz
+     5773 1998-11-14 07:31 lib/X11/fonts/75dpi/UTI___14.pcf.gz
+     5465 1998-11-14 07:31 lib/X11/fonts/75dpi/UTI___12.pcf.gz
+     7607 1998-11-14 07:31 lib/X11/fonts/75dpi/UTI___24.pcf.gz
+     5097 1998-11-14 07:31 lib/X11/fonts/75dpi/UTI___10.pcf.gz
+     6352 1998-11-14 07:31 lib/X11/fonts/75dpi/UTI___18.pcf.gz
+     5479 1998-11-14 07:31 lib/X11/fonts/75dpi/UTRG__14.pcf.gz
+     5304 1998-11-14 07:31 lib/X11/fonts/75dpi/UTRG__12.pcf.gz
+     6995 1998-11-14 07:31 lib/X11/fonts/75dpi/UTRG__24.pcf.gz
+     4898 1998-11-14 07:31 lib/X11/fonts/75dpi/UTRG__10.pcf.gz
+     6018 1998-11-14 07:31 lib/X11/fonts/75dpi/UTRG__18.pcf.gz
+     3066 1998-11-14 07:31 lib/X11/fonts/75dpi/fonts.alias
+drwxr-xr-x root/other        0 1998-11-14 07:31 lib/X11/fonts/misc/
+     3213 1998-11-14 07:30 lib/X11/fonts/misc/5x7.pcf.gz
+     2237 1998-11-14 07:30 lib/X11/fonts/misc/5x8.pcf.gz
+     2624 1998-11-14 07:30 lib/X11/fonts/misc/6x9.pcf.gz
+     4038 1998-11-14 07:30 lib/X11/fonts/misc/6x10.pcf.gz
+     2387 1998-11-14 07:30 lib/X11/fonts/misc/6x12.pcf.gz
+     4232 1998-11-14 07:30 lib/X11/fonts/misc/6x13.pcf.gz
+     4015 1998-11-14 07:30 lib/X11/fonts/misc/6x13B.pcf.gz
+     4162 1998-11-14 07:30 lib/X11/fonts/misc/7x13.pcf.gz
+     4091 1998-11-14 07:30 lib/X11/fonts/misc/7x13B.pcf.gz
+     4231 1998-11-14 07:30 lib/X11/fonts/misc/7x13euro.pcf.gz
+     4118 1998-11-14 07:30 lib/X11/fonts/misc/7x13euroB.pcf.gz
+     4199 1998-11-14 07:31 lib/X11/fonts/misc/8x13.pcf.gz
+     4163 1998-11-14 07:31 lib/X11/fonts/misc/8x13B.pcf.gz
+     4591 1998-11-14 07:31 lib/X11/fonts/misc/9x15.pcf.gz
+     4713 1998-11-14 07:31 lib/X11/fonts/misc/9x15B.pcf.gz
+     4819 1998-11-14 07:31 lib/X11/fonts/misc/10x20.pcf.gz
+     5100 1998-11-14 07:31 lib/X11/fonts/misc/cursor.pcf.gz
+     2325 1998-11-14 07:31 lib/X11/fonts/misc/deccurs.pcf.gz
+      953 1998-11-14 07:31 lib/X11/fonts/misc/decsess.pcf.gz
+     1365 1998-11-14 07:31 lib/X11/fonts/misc/olcursor.pcf.gz
+     5266 1998-11-14 07:31 lib/X11/fonts/misc/olgl10.pcf.gz
+     5699 1998-11-14 07:31 lib/X11/fonts/misc/olgl12.pcf.gz
+     5826 1998-11-14 07:31 lib/X11/fonts/misc/olgl14.pcf.gz
+     6471 1998-11-14 07:31 lib/X11/fonts/misc/olgl19.pcf.gz
+     2394 1998-11-14 07:31 lib/X11/fonts/misc/nil2.pcf.gz
+     2457 1998-11-14 07:31 lib/X11/fonts/misc/clB6x10.pcf.gz
+     2498 1998-11-14 07:31 lib/X11/fonts/misc/clB6x12.pcf.gz
+     2614 1998-11-14 07:31 lib/X11/fonts/misc/clB8x10.pcf.gz
+     2678 1998-11-14 07:31 lib/X11/fonts/misc/clB8x12.pcf.gz
+     2779 1998-11-14 07:31 lib/X11/fonts/misc/clB8x13.pcf.gz
+     2782 1998-11-14 07:31 lib/X11/fonts/misc/clB8x14.pcf.gz
+     2786 1998-11-14 07:31 lib/X11/fonts/misc/clB8x16.pcf.gz
+     2473 1998-11-14 07:31 lib/X11/fonts/misc/clB8x8.pcf.gz
+     2721 1998-11-14 07:31 lib/X11/fonts/misc/clB9x15.pcf.gz
+     2601 1998-11-14 07:31 lib/X11/fonts/misc/clI6x12.pcf.gz
+     2523 1998-11-14 07:31 lib/X11/fonts/misc/clI8x8.pcf.gz
+     1904 1998-11-14 07:31 lib/X11/fonts/misc/clR4x6.pcf.gz
+     2291 1998-11-14 07:31 lib/X11/fonts/misc/clR5x10.pcf.gz
+     2121 1998-11-14 07:31 lib/X11/fonts/misc/clR5x6.pcf.gz
+     2197 1998-11-14 07:31 lib/X11/fonts/misc/clR5x8.pcf.gz
+     2369 1998-11-14 07:31 lib/X11/fonts/misc/clR6x10.pcf.gz
+     2512 1998-11-14 07:31 lib/X11/fonts/misc/clR6x12.pcf.gz
+     2588 1998-11-14 07:31 lib/X11/fonts/misc/clR6x13.pcf.gz
+     2175 1998-11-14 07:31 lib/X11/fonts/misc/clR6x6.pcf.gz
+     2278 1998-11-14 07:31 lib/X11/fonts/misc/clR6x8.pcf.gz
+     2555 1998-11-14 07:31 lib/X11/fonts/misc/clR7x10.pcf.gz
+     2623 1998-11-14 07:31 lib/X11/fonts/misc/clR7x12.pcf.gz
+     2735 1998-11-14 07:31 lib/X11/fonts/misc/clR7x14.pcf.gz
+     2417 1998-11-14 07:31 lib/X11/fonts/misc/clR7x8.pcf.gz
+     2612 1998-11-14 07:31 lib/X11/fonts/misc/clR8x10.pcf.gz
+     2658 1998-11-14 07:31 lib/X11/fonts/misc/clR8x12.pcf.gz
+     2775 1998-11-14 07:31 lib/X11/fonts/misc/clR8x13.pcf.gz
+     2790 1998-11-14 07:31 lib/X11/fonts/misc/clR8x14.pcf.gz
+     2773 1998-11-14 07:31 lib/X11/fonts/misc/clR8x16.pcf.gz
+     2466 1998-11-14 07:31 lib/X11/fonts/misc/clR8x8.pcf.gz
+     2713 1998-11-14 07:31 lib/X11/fonts/misc/clR9x15.pcf.gz
+     4217 1998-11-14 07:31 lib/X11/fonts/misc/7x14.pcf.gz
+     4047 1998-11-14 07:31 lib/X11/fonts/misc/7x14B.pcf.gz
+     3537 1998-11-14 07:31 lib/X11/fonts/misc/7x14rk.pcf.gz
+     5507 1998-11-14 07:31 lib/X11/fonts/misc/12x24.pcf.gz
+     5257 1998-11-14 07:31 lib/X11/fonts/misc/12x24rk.pcf.gz
+     4569 1998-11-14 07:31 lib/X11/fonts/misc/8x16.pcf.gz
+     4218 1998-11-14 07:31 lib/X11/fonts/misc/8x16rk.pcf.gz
+     5603 1998-11-14 07:31 lib/X11/fonts/misc/fonts.dir
+    10645 1998-11-14 07:31 lib/X11/fonts/misc/fonts.alias
+drwxr-xr-x root/other        0 1998-11-14 07:31 lib/X11/fonts/PEX/
+    13616 1998-11-14 07:31 lib/X11/fonts/PEX/Roman.phont
+    13616 1998-11-14 07:31 lib/X11/fonts/PEX/Roman_M.phont

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfscl.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfscl.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfscl.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfscl.txt  3 Mar 
2012 06:14:51 -0000       1.1
@@ -0,0 +1,30 @@
+        0 1998-11-14 07:31 lib/X11/fonts/Speedo/
+    59472 1998-11-14 07:31 lib/X11/fonts/Speedo/font0648.spd
+    61214 1998-11-14 07:31 lib/X11/fonts/Speedo/font0649.spd
+    59460 1998-11-14 07:31 lib/X11/fonts/Speedo/font0709.spd
+    61065 1998-11-14 07:31 lib/X11/fonts/Speedo/font0710.spd
+    73994 1998-11-14 07:31 lib/X11/fonts/Speedo/font0419.spd
+    73570 1998-11-14 07:31 lib/X11/fonts/Speedo/font0582.spd
+    74266 1998-11-14 07:31 lib/X11/fonts/Speedo/font0583.spd
+    73686 1998-11-14 07:31 lib/X11/fonts/Speedo/font0611.spd
+      564 1998-11-14 07:31 lib/X11/fonts/Speedo/fonts.dir
+      564 1998-11-14 07:31 lib/X11/fonts/Speedo/fonts.scale
+        0 1998-11-14 07:31 lib/X11/fonts/Type1/
+    72354 1998-11-14 07:31 lib/X11/fonts/Type1/UTRG____.pfa
+    72834 1998-11-14 07:31 lib/X11/fonts/Type1/UTB_____.pfa
+    75363 1998-11-14 07:31 lib/X11/fonts/Type1/UTBI____.pfa
+    74892 1998-11-14 07:31 lib/X11/fonts/Type1/UTI_____.pfa
+   126064 1998-11-14 07:31 lib/X11/fonts/Type1/cour.pfa
+   126868 1998-11-14 07:31 lib/X11/fonts/Type1/courb.pfa
+   125201 1998-11-14 07:31 lib/X11/fonts/Type1/courbi.pfa
+   122124 1998-11-14 07:31 lib/X11/fonts/Type1/couri.pfa
+    34869 1998-11-14 07:31 lib/X11/fonts/Type1/c0648bt_.pfb
+    35118 1998-11-14 07:31 lib/X11/fonts/Type1/c0649bt_.pfb
+    33799 1998-11-14 07:31 lib/X11/fonts/Type1/c0632bt_.pfb
+    35229 1998-11-14 07:31 lib/X11/fonts/Type1/c0633bt_.pfb
+    40766 1998-11-14 07:31 lib/X11/fonts/Type1/c0419bt_.pfb
+    39511 1998-11-14 07:31 lib/X11/fonts/Type1/c0582bt_.pfb
+    40008 1998-11-14 07:31 lib/X11/fonts/Type1/c0583bt_.pfb
+    39871 1998-11-14 07:31 lib/X11/fonts/Type1/c0611bt_.pfb
+     1075 1998-11-14 07:31 lib/X11/fonts/Type1/fonts.dir
+     1075 1998-11-14 07:31 lib/X11/fonts/Type1/fonts.scale

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfsrv.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfsrv.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfsrv.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xfsrv.txt  3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,4 @@
+-rwxr-xr-x root/root    283716 1998-12-31 04:32 bin/xfs
+drwxrwxr-x root/root         0 1998-12-31 02:44 lib/X11/fs/
+-r--r--r-- root/root       423 1998-12-31 02:44 lib/X11/fs/config
+-r--r--r-- root/root      7866 1998-12-31 03:14 man/man1/xfs.1x

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xhtml.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xhtml.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xhtml.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xhtml.txt  3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,627 @@
+        0 1999-01-08 08:51 lib/X11/doc/html/
+      899 1999-01-08 08:50 lib/X11/doc/html/FreeBSD.html
+     1759 1999-01-08 08:50 lib/X11/doc/html/FreeBSD1.html
+     1061 1999-01-08 08:50 lib/X11/doc/html/FreeBSD2.html
+     1924 1999-01-08 08:50 lib/X11/doc/html/FreeBSD3.html
+     6472 1999-01-08 08:50 lib/X11/doc/html/FreeBSD4.html
+     1824 1999-01-08 08:50 lib/X11/doc/html/FreeBSD5.html
+     4511 1999-01-08 08:50 lib/X11/doc/html/FreeBSD6.html
+     2283 1999-01-08 08:50 lib/X11/doc/html/FreeBSD7.html
+     1545 1999-01-08 08:50 lib/X11/doc/html/FreeBSD8.html
+      729 1999-01-08 08:50 lib/X11/doc/html/FreeBSD_toc.html
+     1994 1999-01-08 08:50 lib/X11/doc/html/NetBSD.html
+     2803 1999-01-08 08:50 lib/X11/doc/html/NetBSD1.html
+     1775 1999-01-08 08:50 lib/X11/doc/html/NetBSD10.html
+     1288 1999-01-08 08:50 lib/X11/doc/html/NetBSD11.html
+     2140 1999-01-08 08:50 lib/X11/doc/html/NetBSD12.html
+     3392 1999-01-08 08:50 lib/X11/doc/html/NetBSD13.html
+     1410 1999-01-08 08:50 lib/X11/doc/html/NetBSD14.html
+     1908 1999-01-08 08:50 lib/X11/doc/html/NetBSD15.html
+     2082 1999-01-08 08:50 lib/X11/doc/html/NetBSD16.html
+     1759 1999-01-08 08:50 lib/X11/doc/html/NetBSD17.html
+     1875 1999-01-08 08:50 lib/X11/doc/html/NetBSD18.html
+     1480 1999-01-08 08:50 lib/X11/doc/html/NetBSD19.html
+     1111 1999-01-08 08:50 lib/X11/doc/html/NetBSD2.html
+     2398 1999-01-08 08:50 lib/X11/doc/html/NetBSD20.html
+     3129 1999-01-08 08:50 lib/X11/doc/html/NetBSD21.html
+     1525 1999-01-08 08:50 lib/X11/doc/html/NetBSD22.html
+     1045 1999-01-08 08:50 lib/X11/doc/html/NetBSD3.html
+     1045 1999-01-08 08:50 lib/X11/doc/html/NetBSD4.html
+     2304 1999-01-08 08:50 lib/X11/doc/html/NetBSD5.html
+     1775 1999-01-08 08:50 lib/X11/doc/html/NetBSD6.html
+     2202 1999-01-08 08:50 lib/X11/doc/html/NetBSD7.html
+     1363 1999-01-08 08:50 lib/X11/doc/html/NetBSD8.html
+     1864 1999-01-08 08:50 lib/X11/doc/html/NetBSD9.html
+     1707 1999-01-08 08:50 lib/X11/doc/html/NetBSD_toc.html
+     1747 1999-01-08 08:50 lib/X11/doc/html/OpenBSD.html
+     2085 1999-01-08 08:50 lib/X11/doc/html/OpenBSD1.html
+     1757 1999-01-08 08:50 lib/X11/doc/html/OpenBSD10.html
+     1575 1999-01-08 08:50 lib/X11/doc/html/OpenBSD11.html
+     1299 1999-01-08 08:50 lib/X11/doc/html/OpenBSD12.html
+     1310 1999-01-08 08:50 lib/X11/doc/html/OpenBSD13.html
+     3598 1999-01-08 08:50 lib/X11/doc/html/OpenBSD14.html
+     1408 1999-01-08 08:50 lib/X11/doc/html/OpenBSD15.html
+     1681 1999-01-08 08:50 lib/X11/doc/html/OpenBSD16.html
+     1656 1999-01-08 08:50 lib/X11/doc/html/OpenBSD17.html
+     2212 1999-01-08 08:50 lib/X11/doc/html/OpenBSD18.html
+     1496 1999-01-08 08:50 lib/X11/doc/html/OpenBSD19.html
+     1119 1999-01-08 08:50 lib/X11/doc/html/OpenBSD2.html
+     1028 1999-01-08 08:50 lib/X11/doc/html/OpenBSD3.html
+     1052 1999-01-08 08:50 lib/X11/doc/html/OpenBSD4.html
+     2316 1999-01-08 08:50 lib/X11/doc/html/OpenBSD5.html
+     1990 1999-01-08 08:50 lib/X11/doc/html/OpenBSD6.html
+     2182 1999-01-08 08:50 lib/X11/doc/html/OpenBSD7.html
+     1372 1999-01-08 08:50 lib/X11/doc/html/OpenBSD8.html
+     1447 1999-01-08 08:50 lib/X11/doc/html/OpenBSD9.html
+     1538 1999-01-08 08:50 lib/X11/doc/html/OpenBSD_toc.html
+      733 1999-01-08 08:50 lib/X11/doc/html/Linux.html
+     1417 1999-01-08 08:50 lib/X11/doc/html/Linux1.html
+     1992 1999-01-08 08:50 lib/X11/doc/html/Linux2.html
+     1033 1999-01-08 08:50 lib/X11/doc/html/Linux3.html
+     4893 1999-01-08 08:50 lib/X11/doc/html/Linux4.html
+     2206 1999-01-08 08:50 lib/X11/doc/html/Linux5.html
+      572 1999-01-08 08:50 lib/X11/doc/html/Linux_toc.html
+     2019 1999-01-08 08:50 lib/X11/doc/html/LynxOS.html
+     2709 1999-01-08 08:50 lib/X11/doc/html/LynxOS1.html
+     1870 1999-01-08 08:50 lib/X11/doc/html/LynxOS10.html
+     1794 1999-01-08 08:50 lib/X11/doc/html/LynxOS11.html
+     1726 1999-01-08 08:50 lib/X11/doc/html/LynxOS12.html
+     2896 1999-01-08 08:50 lib/X11/doc/html/LynxOS13.html
+     1403 1999-01-08 08:50 lib/X11/doc/html/LynxOS14.html
+     1881 1999-01-08 08:50 lib/X11/doc/html/LynxOS15.html
+     1796 1999-01-08 08:50 lib/X11/doc/html/LynxOS16.html
+     1339 1999-01-08 08:50 lib/X11/doc/html/LynxOS17.html
+     1568 1999-01-08 08:50 lib/X11/doc/html/LynxOS18.html
+     1396 1999-01-08 08:50 lib/X11/doc/html/LynxOS19.html
+     1867 1999-01-08 08:50 lib/X11/doc/html/LynxOS2.html
+     1404 1999-01-08 08:50 lib/X11/doc/html/LynxOS20.html
+     4898 1999-01-08 08:50 lib/X11/doc/html/LynxOS21.html
+     2358 1999-01-08 08:50 lib/X11/doc/html/LynxOS22.html
+     1570 1999-01-08 08:50 lib/X11/doc/html/LynxOS23.html
+     2291 1999-01-08 08:50 lib/X11/doc/html/LynxOS24.html
+     1843 1999-01-08 08:50 lib/X11/doc/html/LynxOS25.html
+     1796 1999-01-08 08:50 lib/X11/doc/html/LynxOS3.html
+     1125 1999-01-08 08:50 lib/X11/doc/html/LynxOS4.html
+     1161 1999-01-08 08:50 lib/X11/doc/html/LynxOS5.html
+     1981 1999-01-08 08:50 lib/X11/doc/html/LynxOS6.html
+     1307 1999-01-08 08:50 lib/X11/doc/html/LynxOS7.html
+     1382 1999-01-08 08:50 lib/X11/doc/html/LynxOS8.html
+     1271 1999-01-08 08:50 lib/X11/doc/html/LynxOS9.html
+     1988 1999-01-08 08:50 lib/X11/doc/html/LynxOS_toc.html
+     1050 1999-01-08 08:50 lib/X11/doc/html/SCO.html
+     4061 1999-01-08 08:50 lib/X11/doc/html/SCO1.html
+     8498 1999-01-08 08:50 lib/X11/doc/html/SCO10.html
+     1836 1999-01-08 08:50 lib/X11/doc/html/SCO11.html
+     1526 1999-01-08 08:50 lib/X11/doc/html/SCO2.html
+     4304 1999-01-08 08:50 lib/X11/doc/html/SCO3.html
+     1544 1999-01-08 08:50 lib/X11/doc/html/SCO4.html
+     1732 1999-01-08 08:50 lib/X11/doc/html/SCO5.html
+     1196 1999-01-08 08:50 lib/X11/doc/html/SCO6.html
+     2874 1999-01-08 08:50 lib/X11/doc/html/SCO7.html
+     1407 1999-01-08 08:50 lib/X11/doc/html/SCO8.html
+     1143 1999-01-08 08:50 lib/X11/doc/html/SCO9.html
+      856 1999-01-08 08:50 lib/X11/doc/html/SCO_toc.html
+     1525 1999-01-08 08:50 lib/X11/doc/html/isc.html
+     1826 1999-01-08 08:50 lib/X11/doc/html/isc1.html
+     2286 1999-01-08 08:50 lib/X11/doc/html/isc10.html
+     3406 1999-01-08 08:50 lib/X11/doc/html/isc11.html
+     1500 1999-01-08 08:50 lib/X11/doc/html/isc12.html
+     1136 1999-01-08 08:50 lib/X11/doc/html/isc13.html
+     2344 1999-01-08 08:50 lib/X11/doc/html/isc14.html
+     2071 1999-01-08 08:50 lib/X11/doc/html/isc15.html
+     3859 1999-01-08 08:50 lib/X11/doc/html/isc16.html
+     1252 1999-01-08 08:50 lib/X11/doc/html/isc17.html
+     2921 1999-01-08 08:50 lib/X11/doc/html/isc2.html
+     1798 1999-01-08 08:50 lib/X11/doc/html/isc3.html
+     1490 1999-01-08 08:50 lib/X11/doc/html/isc4.html
+     1284 1999-01-08 08:50 lib/X11/doc/html/isc5.html
+     1589 1999-01-08 08:50 lib/X11/doc/html/isc6.html
+     1421 1999-01-08 08:50 lib/X11/doc/html/isc7.html
+     1584 1999-01-08 08:50 lib/X11/doc/html/isc8.html
+     2143 1999-01-08 08:50 lib/X11/doc/html/isc9.html
+     1324 1999-01-08 08:50 lib/X11/doc/html/isc_toc.html
+     1555 1999-01-08 08:50 lib/X11/doc/html/OS2.html
+     4111 1999-01-08 08:50 lib/X11/doc/html/OS21.html
+     1665 1999-01-08 08:50 lib/X11/doc/html/OS210.html
+     6114 1999-01-08 08:50 lib/X11/doc/html/OS211.html
+     3129 1999-01-08 08:50 lib/X11/doc/html/OS212.html
+     3893 1999-01-08 08:50 lib/X11/doc/html/OS213.html
+     2098 1999-01-08 08:50 lib/X11/doc/html/OS214.html
+     1068 1999-01-08 08:50 lib/X11/doc/html/OS215.html
+     1397 1999-01-08 08:50 lib/X11/doc/html/OS216.html
+     1342 1999-01-08 08:50 lib/X11/doc/html/OS217.html
+     2911 1999-01-08 08:50 lib/X11/doc/html/OS22.html
+     1100 1999-01-08 08:50 lib/X11/doc/html/OS23.html
+     1124 1999-01-08 08:50 lib/X11/doc/html/OS24.html
+     2155 1999-01-08 08:50 lib/X11/doc/html/OS25.html
+     2554 1999-01-08 08:50 lib/X11/doc/html/OS26.html
+     4450 1999-01-08 08:50 lib/X11/doc/html/OS27.html
+     2506 1999-01-08 08:50 lib/X11/doc/html/OS28.html
+     3270 1999-01-08 08:50 lib/X11/doc/html/OS29.html
+      591 1999-01-08 08:50 lib/X11/doc/html/OS2Notes.html
+     2213 1999-01-08 08:50 lib/X11/doc/html/OS2Notes1.html
+     2338 1999-01-08 08:50 lib/X11/doc/html/OS2Notes2.html
+     7476 1999-01-08 08:50 lib/X11/doc/html/OS2Notes3.html
+      446 1999-01-08 08:50 lib/X11/doc/html/OS2Notes_toc.html
+     1340 1999-01-08 08:50 lib/X11/doc/html/OS2_toc.html
+      941 1999-01-08 08:50 lib/X11/doc/html/SOLX86.html
+     1819 1999-01-08 08:50 lib/X11/doc/html/SOLX861.html
+     1229 1999-01-08 08:50 lib/X11/doc/html/SOLX862.html
+     4457 1999-01-08 08:50 lib/X11/doc/html/SOLX863.html
+     4069 1999-01-08 08:50 lib/X11/doc/html/SOLX864.html
+     2651 1999-01-08 08:50 lib/X11/doc/html/SOLX865.html
+     1373 1999-01-08 08:50 lib/X11/doc/html/SOLX866.html
+     1425 1999-01-08 08:50 lib/X11/doc/html/SOLX867.html
+      792 1999-01-08 08:50 lib/X11/doc/html/SOLX86_toc.html
+     1449 1999-01-08 08:50 lib/X11/doc/html/SVR4.html
+     1745 1999-01-08 08:50 lib/X11/doc/html/SVR41.html
+     2636 1999-01-08 08:50 lib/X11/doc/html/SVR410.html
+     1570 1999-01-08 08:50 lib/X11/doc/html/SVR411.html
+     3187 1999-01-08 08:50 lib/X11/doc/html/SVR42.html
+     2759 1999-01-08 08:50 lib/X11/doc/html/SVR43.html
+     1743 1999-01-08 08:50 lib/X11/doc/html/SVR44.html
+     6936 1999-01-08 08:50 lib/X11/doc/html/SVR45.html
+     1456 1999-01-08 08:50 lib/X11/doc/html/SVR46.html
+     3775 1999-01-08 08:50 lib/X11/doc/html/SVR47.html
+     1796 1999-01-08 08:50 lib/X11/doc/html/SVR48.html
+     1494 1999-01-08 08:50 lib/X11/doc/html/SVR49.html
+     1055 1999-01-08 08:50 lib/X11/doc/html/SVR4_toc.html
+      520 1999-01-08 08:50 lib/X11/doc/html/DECtga.html
+     1942 1999-01-08 08:50 lib/X11/doc/html/DECtga1.html
+     1233 1999-01-08 08:50 lib/X11/doc/html/DECtga2.html
+      378 1999-01-08 08:50 lib/X11/doc/html/DECtga_toc.html
+      705 1999-01-08 08:50 lib/X11/doc/html/I128.html
+     1446 1999-01-08 08:50 lib/X11/doc/html/I1281.html
+     1133 1999-01-08 08:50 lib/X11/doc/html/I1282.html
+     1774 1999-01-08 08:50 lib/X11/doc/html/I1283.html
+     1754 1999-01-08 08:50 lib/X11/doc/html/I1284.html
+      551 1999-01-08 08:50 lib/X11/doc/html/I128_toc.html
+      593 1999-01-08 08:50 lib/X11/doc/html/Mach32.html
+     2698 1999-01-08 08:50 lib/X11/doc/html/Mach321.html
+     3339 1999-01-08 08:50 lib/X11/doc/html/Mach322.html
+     1753 1999-01-08 08:50 lib/X11/doc/html/Mach323.html
+      449 1999-01-08 08:50 lib/X11/doc/html/Mach32_toc.html
+      847 1999-01-08 08:50 lib/X11/doc/html/Mach64.html
+     5891 1999-01-08 08:50 lib/X11/doc/html/Mach641.html
+     2652 1999-01-08 08:50 lib/X11/doc/html/Mach642.html
+     6962 1999-01-08 08:50 lib/X11/doc/html/Mach643.html
+     1294 1999-01-08 08:50 lib/X11/doc/html/Mach644.html
+     2489 1999-01-08 08:50 lib/X11/doc/html/Mach645.html
+     3342 1999-01-08 08:50 lib/X11/doc/html/Mach646.html
+      677 1999-01-08 08:50 lib/X11/doc/html/Mach64_toc.html
+      731 1999-01-08 08:50 lib/X11/doc/html/MGA.html
+     1661 1999-01-08 08:50 lib/X11/doc/html/MGA1.html
+     1357 1999-01-08 08:50 lib/X11/doc/html/MGA2.html
+     1342 1999-01-08 08:50 lib/X11/doc/html/MGA3.html
+     2677 1999-01-08 08:50 lib/X11/doc/html/MGA4.html
+     3237 1999-01-08 08:50 lib/X11/doc/html/MGA5.html
+     1752 1999-01-08 08:50 lib/X11/doc/html/MGA6.html
+      577 1999-01-08 08:50 lib/X11/doc/html/MGA_toc.html
+      636 1999-01-08 08:50 lib/X11/doc/html/NVIDIA.html
+     1328 1999-01-08 08:50 lib/X11/doc/html/NVIDIA1.html
+     2481 1999-01-08 08:50 lib/X11/doc/html/NVIDIA2.html
+      677 1999-01-08 08:50 lib/X11/doc/html/Oak.html
+     1288 1999-01-08 08:50 lib/X11/doc/html/NVIDIA3.html
+      491 1999-01-08 08:50 lib/X11/doc/html/NVIDIA_toc.html
+     3002 1999-01-08 08:50 lib/X11/doc/html/Oak1.html
+     4649 1999-01-08 08:50 lib/X11/doc/html/Oak2.html
+     1558 1999-01-08 08:50 lib/X11/doc/html/Oak3.html
+     1577 1999-01-08 08:50 lib/X11/doc/html/Oak4.html
+      501 1999-01-08 08:50 lib/X11/doc/html/Oak_toc.html
+     1357 1999-01-08 08:50 lib/X11/doc/html/P9000.html
+     7230 1999-01-08 08:50 lib/X11/doc/html/P90001.html
+     1732 1999-01-08 08:50 lib/X11/doc/html/P900010.html
+     1064 1999-01-08 08:50 lib/X11/doc/html/P900011.html
+     1203 1999-01-08 08:50 lib/X11/doc/html/P900012.html
+     3905 1999-01-08 08:50 lib/X11/doc/html/P900013.html
+     1452 1999-01-08 08:50 lib/X11/doc/html/P900014.html
+     1847 1999-01-08 08:50 lib/X11/doc/html/P900015.html
+      977 1999-01-08 08:50 lib/X11/doc/html/P90002.html
+     1318 1999-01-08 08:50 lib/X11/doc/html/P90003.html
+     1267 1999-01-08 08:50 lib/X11/doc/html/P90004.html
+     1300 1999-01-08 08:50 lib/X11/doc/html/P90005.html
+     1159 1999-01-08 08:50 lib/X11/doc/html/P90006.html
+     1442 1999-01-08 08:50 lib/X11/doc/html/P90007.html
+     2259 1999-01-08 08:50 lib/X11/doc/html/P90008.html
+     2009 1999-01-08 08:50 lib/X11/doc/html/P90009.html
+     1018 1999-01-08 08:50 lib/X11/doc/html/S3.html
+     1153 1999-01-08 08:50 lib/X11/doc/html/P9000_toc.html
+      962 1999-01-08 08:50 lib/X11/doc/html/Video7.html
+     2033 1999-01-08 08:50 lib/X11/doc/html/Video71.html
+     1580 1999-01-08 08:50 lib/X11/doc/html/Video710.html
+      986 1999-01-08 08:50 lib/X11/doc/html/Video72.html
+     1270 1999-01-08 08:50 lib/X11/doc/html/Video73.html
+     1190 1999-01-08 08:50 lib/X11/doc/html/Video74.html
+      890 1999-01-08 08:50 lib/X11/doc/html/Video75.html
+     1041 1999-01-08 08:50 lib/X11/doc/html/Video76.html
+     1412 1999-01-08 08:50 lib/X11/doc/html/Video77.html
+     1112 1999-01-08 08:50 lib/X11/doc/html/Video78.html
+     1113 1999-01-08 08:50 lib/X11/doc/html/Video79.html
+      810 1999-01-08 08:50 lib/X11/doc/html/Video7_toc.html
+    14425 1999-01-08 08:50 lib/X11/doc/html/S31.html
+     1113 1999-01-08 08:50 lib/X11/doc/html/S32.html
+     2026 1999-01-08 08:50 lib/X11/doc/html/S33.html
+     5562 1999-01-08 08:50 lib/X11/doc/html/S34.html
+     1676 1999-01-08 08:50 lib/X11/doc/html/S35.html
+     2881 1999-01-08 08:50 lib/X11/doc/html/S36.html
+     2625 1999-01-08 08:50 lib/X11/doc/html/S37.html
+     3568 1999-01-08 08:50 lib/X11/doc/html/S38.html
+     3610 1999-01-08 08:50 lib/X11/doc/html/S39.html
+     1373 1999-01-08 08:50 lib/X11/doc/html/S3V.html
+     1907 1999-01-08 08:50 lib/X11/doc/html/S3V1.html
+     1372 1999-01-08 08:50 lib/X11/doc/html/S3V10.html
+     4433 1999-01-08 08:50 lib/X11/doc/html/S3V11.html
+     2675 1999-01-08 08:50 lib/X11/doc/html/S3V12.html
+     1083 1999-01-08 08:50 lib/X11/doc/html/S3V13.html
+     1395 1999-01-08 08:50 lib/X11/doc/html/S3V14.html
+     1557 1999-01-08 08:50 lib/X11/doc/html/S3V15.html
+     2012 1999-01-08 08:50 lib/X11/doc/html/S3V2.html
+     1502 1999-01-08 08:50 lib/X11/doc/html/S3V3.html
+     1477 1999-01-08 08:50 lib/X11/doc/html/S3V4.html
+     1485 1999-01-08 08:50 lib/X11/doc/html/S3V5.html
+     1328 1999-01-08 08:50 lib/X11/doc/html/S3V6.html
+     1273 1999-01-08 08:50 lib/X11/doc/html/S3V7.html
+     1722 1999-01-08 08:50 lib/X11/doc/html/S3V8.html
+     1839 1999-01-08 08:50 lib/X11/doc/html/S3V9.html
+     1257 1999-01-08 08:50 lib/X11/doc/html/S3V_toc.html
+      843 1999-01-08 08:50 lib/X11/doc/html/S3_toc.html
+      666 1999-01-08 08:50 lib/X11/doc/html/SiS.html
+     1534 1999-01-08 08:50 lib/X11/doc/html/SiS1.html
+     1082 1999-01-08 08:50 lib/X11/doc/html/SiS2.html
+     4952 1999-01-08 08:50 lib/X11/doc/html/SiS3.html
+     2193 1999-01-08 08:50 lib/X11/doc/html/SiS4.html
+     1933 1999-01-08 08:50 lib/X11/doc/html/SiS5.html
+      492 1999-01-08 08:50 lib/X11/doc/html/SiS_toc.html
+     1023 1999-01-08 08:50 lib/X11/doc/html/W32.html
+     5088 1999-01-08 08:50 lib/X11/doc/html/W321.html
+     1888 1999-01-08 08:50 lib/X11/doc/html/W322.html
+     1582 1999-01-08 08:50 lib/X11/doc/html/W323.html
+     2532 1999-01-08 08:50 lib/X11/doc/html/W324.html
+     2114 1999-01-08 08:50 lib/X11/doc/html/W325.html
+     3219 1999-01-08 08:50 lib/X11/doc/html/W326.html
+      740 1999-01-08 08:50 lib/X11/doc/html/W32_toc.html
+      731 1999-01-08 08:50 lib/X11/doc/html/WstDig.html
+     1768 1999-01-08 08:50 lib/X11/doc/html/WstDig1.html
+     2657 1999-01-08 08:50 lib/X11/doc/html/WstDig2.html
+     3786 1999-01-08 08:50 lib/X11/doc/html/WstDig3.html
+     4834 1999-01-08 08:50 lib/X11/doc/html/WstDig4.html
+     1752 1999-01-08 08:50 lib/X11/doc/html/WstDig5.html
+      578 1999-01-08 08:50 lib/X11/doc/html/WstDig_toc.html
+      606 1999-01-08 08:50 lib/X11/doc/html/apm.html
+     1416 1999-01-08 08:50 lib/X11/doc/html/apm1.html
+     1413 1999-01-08 08:50 lib/X11/doc/html/apm2.html
+     1748 1999-01-08 08:50 lib/X11/doc/html/apm3.html
+      437 1999-01-08 08:50 lib/X11/doc/html/apm_toc.html
+      815 1999-01-08 08:50 lib/X11/doc/html/ark.html
+     2456 1999-01-08 08:50 lib/X11/doc/html/ark1.html
+     3880 1999-01-08 08:50 lib/X11/doc/html/ark2.html
+     2215 1999-01-08 08:50 lib/X11/doc/html/ark3.html
+     2059 1999-01-08 08:50 lib/X11/doc/html/ark4.html
+     1474 1999-01-08 08:50 lib/X11/doc/html/ark5.html
+     3219 1999-01-08 08:50 lib/X11/doc/html/ark6.html
+      629 1999-01-08 08:50 lib/X11/doc/html/ark_toc.html
+      662 1999-01-08 08:50 lib/X11/doc/html/agx.html
+     2224 1999-01-08 08:50 lib/X11/doc/html/agx1.html
+     1085 1999-01-08 08:50 lib/X11/doc/html/agx2.html
+     1406 1999-01-08 08:50 lib/X11/doc/html/agx3.html
+     2457 1999-01-08 08:50 lib/X11/doc/html/agx4.html
+    14327 1999-01-08 08:50 lib/X11/doc/html/agx5.html
+     5247 1999-01-08 08:50 lib/X11/doc/html/agx6.html
+      519 1999-01-08 08:50 lib/X11/doc/html/agx_toc.html
+     1356 1999-01-08 08:50 lib/X11/doc/html/ati.html
+     2108 1999-01-08 08:50 lib/X11/doc/html/ati1.html
+     4339 1999-01-08 08:50 lib/X11/doc/html/ati10.html
+     1464 1999-01-08 08:50 lib/X11/doc/html/ati11.html
+     1293 1999-01-08 08:50 lib/X11/doc/html/ati12.html
+     1608 1999-01-08 08:50 lib/X11/doc/html/ati13.html
+     1354 1999-01-08 08:50 lib/X11/doc/html/ati14.html
+     6018 1999-01-08 08:50 lib/X11/doc/html/ati15.html
+     1774 1999-01-08 08:50 lib/X11/doc/html/ati16.html
+     1712 1999-01-08 08:50 lib/X11/doc/html/ati17.html
+     2235 1999-01-08 08:50 lib/X11/doc/html/ati18.html
+     2084 1999-01-08 08:50 lib/X11/doc/html/ati2.html
+     4612 1999-01-08 08:50 lib/X11/doc/html/ati3.html
+     2145 1999-01-08 08:50 lib/X11/doc/html/ati4.html
+     1787 1999-01-08 08:50 lib/X11/doc/html/ati5.html
+     1747 1999-01-08 08:50 lib/X11/doc/html/ati6.html
+     2311 1999-01-08 08:50 lib/X11/doc/html/ati7.html
+     1968 1999-01-08 08:50 lib/X11/doc/html/ati8.html
+     2776 1999-01-08 08:50 lib/X11/doc/html/ati9.html
+     1421 1999-01-08 08:50 lib/X11/doc/html/ati_toc.html
+     1016 1999-01-08 08:50 lib/X11/doc/html/chips.html
+     1531 1999-01-08 08:50 lib/X11/doc/html/chips1.html
+     4960 1999-01-08 08:50 lib/X11/doc/html/chips2.html
+    10430 1999-01-08 08:50 lib/X11/doc/html/chips3.html
+     5800 1999-01-08 08:50 lib/X11/doc/html/chips4.html
+     6540 1999-01-08 08:50 lib/X11/doc/html/chips5.html
+    10688 1999-01-08 08:50 lib/X11/doc/html/chips6.html
+     1156 1999-01-08 08:50 lib/X11/doc/html/chips7.html
+      993 1999-01-08 08:50 lib/X11/doc/html/chips8.html
+     1537 1999-01-08 08:50 lib/X11/doc/html/chips9.html
+      755 1999-01-08 08:50 lib/X11/doc/html/chips_toc.html
+     1108 1999-01-08 08:50 lib/X11/doc/html/cirrus.html
+     7779 1999-01-08 08:50 lib/X11/doc/html/cirrus1.html
+     3459 1999-01-08 08:50 lib/X11/doc/html/cirrus2.html
+    10728 1999-01-08 08:50 lib/X11/doc/html/cirrus3.html
+     2087 1999-01-08 08:50 lib/X11/doc/html/cirrus4.html
+     6218 1999-01-08 08:50 lib/X11/doc/html/cirrus5.html
+     4582 1999-01-08 08:50 lib/X11/doc/html/cirrus6.html
+     7866 1999-01-08 08:50 lib/X11/doc/html/cirrus7.html
+     4624 1999-01-08 08:50 lib/X11/doc/html/cirrus8.html
+     2440 1999-01-08 08:50 lib/X11/doc/html/cirrus9.html
+      820 1999-01-08 08:50 lib/X11/doc/html/cirrus_toc.html
+      673 1999-01-08 08:50 lib/X11/doc/html/cyrix.html
+     1148 1999-01-08 08:50 lib/X11/doc/html/cyrix1.html
+      947 1999-01-08 08:51 lib/X11/doc/html/cyrix2.html
+     1043 1999-01-08 08:51 lib/X11/doc/html/cyrix3.html
+     1533 1999-01-08 08:51 lib/X11/doc/html/cyrix4.html
+     1221 1999-01-08 08:51 lib/X11/doc/html/cyrix5.html
+      519 1999-01-08 08:51 lib/X11/doc/html/cyrix_toc.html
+      765 1999-01-08 08:51 lib/X11/doc/html/epson.html
+     1374 1999-01-08 08:51 lib/X11/doc/html/epson1.html
+     3290 1999-01-08 08:51 lib/X11/doc/html/epson2.html
+     1432 1999-01-08 08:51 lib/X11/doc/html/epson3.html
+     1448 1999-01-08 08:51 lib/X11/doc/html/epson4.html
+     1807 1999-01-08 08:51 lib/X11/doc/html/epson5.html
+     1154 1999-01-08 08:51 lib/X11/doc/html/epson6.html
+      600 1999-01-08 08:51 lib/X11/doc/html/epson_toc.html
+     2375 1999-01-08 08:51 lib/X11/doc/html/mouse.html
+     1222 1999-01-08 08:51 lib/X11/doc/html/mouse1.html
+      943 1999-01-08 08:51 lib/X11/doc/html/mouse10.html
+     1049 1999-01-08 08:51 lib/X11/doc/html/mouse11.html
+     3341 1999-01-08 08:51 lib/X11/doc/html/mouse2.html
+     1203 1999-01-08 08:51 lib/X11/doc/html/mouse12.html
+      962 1999-01-08 08:51 lib/X11/doc/html/mouse13.html
+     1683 1999-01-08 08:51 lib/X11/doc/html/mouse14.html
+     1224 1999-01-08 08:51 lib/X11/doc/html/mouse15.html
+     1052 1999-01-08 08:51 lib/X11/doc/html/mouse16.html
+     1311 1999-01-08 08:51 lib/X11/doc/html/mouse17.html
+     1145 1999-01-08 08:51 lib/X11/doc/html/mouse18.html
+     1132 1999-01-08 08:51 lib/X11/doc/html/mouse19.html
+     6570 1999-01-08 08:51 lib/X11/doc/html/mouse20.html
+     1137 1999-01-08 08:51 lib/X11/doc/html/mouse21.html
+     1409 1999-01-08 08:51 lib/X11/doc/html/mouse22.html
+     1793 1999-01-08 08:51 lib/X11/doc/html/mouse23.html
+     1207 1999-01-08 08:51 lib/X11/doc/html/mouse24.html
+     1423 1999-01-08 08:51 lib/X11/doc/html/mouse25.html
+     2300 1999-01-08 08:51 lib/X11/doc/html/mouse26.html
+     2019 1999-01-08 08:51 lib/X11/doc/html/mouse27.html
+     1834 1999-01-08 08:51 lib/X11/doc/html/mouse28.html
+     2292 1999-01-08 08:51 lib/X11/doc/html/mouse29.html
+     1785 1999-01-08 08:51 lib/X11/doc/html/mouse3.html
+     2109 1999-01-08 08:51 lib/X11/doc/html/mouse30.html
+     2248 1999-01-08 08:51 lib/X11/doc/html/mouse31.html
+     2445 1999-01-08 08:51 lib/X11/doc/html/mouse32.html
+     2600 1999-01-08 08:51 lib/X11/doc/html/mouse4.html
+     1011 1999-01-08 08:51 lib/X11/doc/html/mouse5.html
+     1684 1999-01-08 08:51 lib/X11/doc/html/mouse6.html
+      976 1999-01-08 08:51 lib/X11/doc/html/mouse7.html
+     1418 1999-01-08 08:51 lib/X11/doc/html/mouse8.html
+      955 1999-01-08 08:51 lib/X11/doc/html/mouse9.html
+     2112 1999-01-08 08:51 lib/X11/doc/html/mouse_toc.html
+      901 1999-01-08 08:51 lib/X11/doc/html/neo.html
+     1296 1999-01-08 08:51 lib/X11/doc/html/neo1.html
+     1518 1999-01-08 08:51 lib/X11/doc/html/neo2.html
+     1055 1999-01-08 08:51 lib/X11/doc/html/neo3.html
+     2283 1999-01-08 08:51 lib/X11/doc/html/neo4.html
+     1436 1999-01-08 08:51 lib/X11/doc/html/neo5.html
+     2321 1999-01-08 08:51 lib/X11/doc/html/neo6.html
+     1097 1999-01-08 08:51 lib/X11/doc/html/neo7.html
+     1409 1999-01-08 08:51 lib/X11/doc/html/neo8.html
+      732 1999-01-08 08:51 lib/X11/doc/html/neo_toc.html
+      568 1999-01-08 08:51 lib/X11/doc/html/rendition.html
+     1084 1999-01-08 08:51 lib/X11/doc/html/rendition1.html
+     1092 1999-01-08 08:51 lib/X11/doc/html/rendition2.html
+     1322 1999-01-08 08:51 lib/X11/doc/html/rendition3.html
+      424 1999-01-08 08:51 lib/X11/doc/html/rendition_toc.html
+      680 1999-01-08 08:51 lib/X11/doc/html/3DLabs.html
+     1149 1999-01-08 08:51 lib/X11/doc/html/3DLabs1.html
+     1080 1999-01-08 08:51 lib/X11/doc/html/3DLabs2.html
+     1875 1999-01-08 08:51 lib/X11/doc/html/3DLabs3.html
+     1310 1999-01-08 08:51 lib/X11/doc/html/3DLabs4.html
+     1580 1999-01-08 08:51 lib/X11/doc/html/3DLabs5.html
+      526 1999-01-08 08:51 lib/X11/doc/html/3DLabs_toc.html
+      608 1999-01-08 08:51 lib/X11/doc/html/trident.html
+     5288 1999-01-08 08:51 lib/X11/doc/html/trident1.html
+     1667 1999-01-08 08:51 lib/X11/doc/html/trident2.html
+     3553 1999-01-08 08:51 lib/X11/doc/html/trident3.html
+      461 1999-01-08 08:51 lib/X11/doc/html/trident_toc.html
+     2157 1999-01-08 08:51 lib/X11/doc/html/tseng.html
+     1606 1999-01-08 08:51 lib/X11/doc/html/tseng1.html
+     2785 1999-01-08 08:51 lib/X11/doc/html/tseng10.html
+     2619 1999-01-08 08:51 lib/X11/doc/html/tseng11.html
+     1507 1999-01-08 08:51 lib/X11/doc/html/tseng12.html
+     1899 1999-01-08 08:51 lib/X11/doc/html/tseng13.html
+     2577 1999-01-08 08:51 lib/X11/doc/html/tseng14.html
+     2588 1999-01-08 08:51 lib/X11/doc/html/tseng15.html
+     2238 1999-01-08 08:51 lib/X11/doc/html/tseng16.html
+     3334 1999-01-08 08:51 lib/X11/doc/html/tseng17.html
+     2930 1999-01-08 08:51 lib/X11/doc/html/tseng18.html
+     3505 1999-01-08 08:51 lib/X11/doc/html/tseng19.html
+     1441 1999-01-08 08:51 lib/X11/doc/html/tseng2.html
+     3379 1999-01-08 08:51 lib/X11/doc/html/tseng20.html
+     3648 1999-01-08 08:51 lib/X11/doc/html/tseng21.html
+     9844 1999-01-08 08:51 lib/X11/doc/html/tseng22.html
+     3921 1999-01-08 08:51 lib/X11/doc/html/tseng23.html
+     4887 1999-01-08 08:51 lib/X11/doc/html/tseng3.html
+     3913 1999-01-08 08:51 lib/X11/doc/html/tseng4.html
+     2181 1999-01-08 08:51 lib/X11/doc/html/tseng5.html
+     1307 1999-01-08 08:51 lib/X11/doc/html/tseng6.html
+     1566 1999-01-08 08:51 lib/X11/doc/html/tseng7.html
+     6517 1999-01-08 08:51 lib/X11/doc/html/tseng8.html
+     1854 1999-01-08 08:51 lib/X11/doc/html/tseng9.html
+     1879 1999-01-08 08:51 lib/X11/doc/html/tseng_toc.html
+     1088 1999-01-08 08:51 lib/X11/doc/html/fbdev.html
+     1365 1999-01-08 08:51 lib/X11/doc/html/fbdev1.html
+     1325 1999-01-08 08:51 lib/X11/doc/html/fbdev10.html
+     2796 1999-01-08 08:51 lib/X11/doc/html/fbdev2.html
+     3442 1999-01-08 08:51 lib/X11/doc/html/fbdev3.html
+     1420 1999-01-08 08:51 lib/X11/doc/html/fbdev4.html
+     2425 1999-01-08 08:51 lib/X11/doc/html/fbdev5.html
+     7065 1999-01-08 08:51 lib/X11/doc/html/fbdev6.html
+     2403 1999-01-08 08:51 lib/X11/doc/html/fbdev7.html
+     1342 1999-01-08 08:51 lib/X11/doc/html/fbdev8.html
+      997 1999-01-08 08:51 lib/X11/doc/html/fbdev9.html
+      876 1999-01-08 08:51 lib/X11/doc/html/fbdev_toc.html
+      653 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT.html
+     2256 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT1.html
+     1198 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT2.html
+     2328 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT3.html
+     1086 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT4.html
+     2456 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT5.html
+     3218 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT6.html
+     2514 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT7.html
+      638 1999-01-08 08:51 lib/X11/doc/html/COPYRIGHT_toc.html
+     1405 1999-01-08 08:51 lib/X11/doc/html/RELNOTES.html
+     1981 1999-01-08 08:51 lib/X11/doc/html/RELNOTES1.html
+     1311 1999-01-08 08:51 lib/X11/doc/html/RELNOTES10.html
+    10925 1999-01-08 08:51 lib/X11/doc/html/RELNOTES11.html
+     2079 1998-12-30 13:37 lib/X11/doc/html/RELNOTES12.html
+     1390 1999-01-08 08:51 lib/X11/doc/html/RELNOTES2.html
+     1302 1999-01-08 08:51 lib/X11/doc/html/RELNOTES3.html
+     1622 1999-01-08 08:51 lib/X11/doc/html/Config.html
+     2113 1999-01-08 08:51 lib/X11/doc/html/RELNOTES4.html
+     1133 1999-01-08 08:51 lib/X11/doc/html/RELNOTES5.html
+     1375 1999-01-08 08:51 lib/X11/doc/html/RELNOTES6.html
+     3330 1999-01-08 08:51 lib/X11/doc/html/RELNOTES7.html
+     2228 1999-01-08 08:51 lib/X11/doc/html/RELNOTES8.html
+     2364 1999-01-08 08:51 lib/X11/doc/html/RELNOTES9.html
+      924 1999-01-08 08:51 lib/X11/doc/html/RELNOTES_toc.html
+     2609 1999-01-08 08:51 lib/X11/doc/html/Config1.html
+     2844 1999-01-08 08:51 lib/X11/doc/html/Config2.html
+     2982 1999-01-08 08:51 lib/X11/doc/html/Config3.html
+     5105 1999-01-08 08:51 lib/X11/doc/html/Config4.html
+     3792 1999-01-08 08:51 lib/X11/doc/html/Config5.html
+     2949 1999-01-08 08:51 lib/X11/doc/html/Config6.html
+     5122 1999-01-08 08:51 lib/X11/doc/html/Config7.html
+      751 1999-01-08 08:51 lib/X11/doc/html/Config_toc.html
+     1184 1999-01-08 08:51 lib/X11/doc/html/BUILD.html
+     1725 1999-01-08 08:51 lib/X11/doc/html/BUILD1.html
+     6575 1999-01-08 08:51 lib/X11/doc/html/BUILD2.html
+     2060 1999-01-08 08:51 lib/X11/doc/html/BUILD3.html
+     3069 1999-01-08 08:51 lib/X11/doc/html/BUILD4.html
+     1690 1999-01-08 08:51 lib/X11/doc/html/BUILD5.html
+     1361 1999-01-08 08:51 lib/X11/doc/html/BUILD6.html
+      715 1999-01-08 08:51 lib/X11/doc/html/BUILD_toc.html
+     1401 1999-01-08 08:51 lib/X11/doc/html/README.html
+     1171 1999-01-08 08:51 lib/X11/doc/html/README1.html
+     2363 1999-01-08 08:51 lib/X11/doc/html/README2.html
+     5763 1999-01-08 08:51 lib/X11/doc/html/README3.html
+     2557 1999-01-08 08:51 lib/X11/doc/html/README4.html
+    18475 1999-01-08 08:51 lib/X11/doc/html/README5.html
+     1753 1999-01-08 08:51 lib/X11/doc/html/README6.html
+     9331 1999-01-08 08:51 lib/X11/doc/html/README7.html
+     4917 1999-01-08 08:51 lib/X11/doc/html/README8.html
+      756 1999-01-08 08:51 lib/X11/doc/html/README_toc.html
+     3003 1999-01-08 08:51 lib/X11/doc/html/QuickStart.html
+     2107 1999-01-08 08:51 lib/X11/doc/html/QuickStart1.html
+     1741 1999-01-08 08:51 lib/X11/doc/html/QuickStart10.html
+     1195 1999-01-08 08:51 lib/X11/doc/html/QuickStart11.html
+     1376 1999-01-08 08:51 lib/X11/doc/html/QuickStart12.html
+     1410 1999-01-08 08:51 lib/X11/doc/html/QuickStart13.html
+     2201 1999-01-08 08:51 lib/X11/doc/html/QuickStart14.html
+     1317 1999-01-08 08:51 lib/X11/doc/html/QuickStart15.html
+     2425 1999-01-08 08:51 lib/X11/doc/html/QuickStart16.html
+     1370 1999-01-08 08:51 lib/X11/doc/html/QuickStart17.html
+     1749 1999-01-08 08:51 lib/X11/doc/html/QuickStart18.html
+     1868 1999-01-08 08:51 lib/X11/doc/html/QuickStart19.html
+     2641 1999-01-08 08:51 lib/X11/doc/html/QuickStart2.html
+     1214 1999-01-08 08:51 lib/X11/doc/html/QuickStart20.html
+     1872 1999-01-08 08:51 lib/X11/doc/html/QuickStart21.html
+     1456 1999-01-08 08:51 lib/X11/doc/html/QuickStart22.html
+     1696 1999-01-08 08:51 lib/X11/doc/html/QuickStart23.html
+     1813 1999-01-08 08:51 lib/X11/doc/html/QuickStart24.html
+     1941 1999-01-08 08:51 lib/X11/doc/html/QuickStart25.html
+     1290 1999-01-08 08:51 lib/X11/doc/html/QuickStart26.html
+     1331 1999-01-08 08:51 lib/X11/doc/html/QuickStart27.html
+     2075 1999-01-08 08:51 lib/X11/doc/html/QuickStart28.html
+     2246 1999-01-08 08:51 lib/X11/doc/html/QuickStart29.html
+     2330 1999-01-08 08:51 lib/X11/doc/html/QuickStart3.html
+     2629 1999-01-08 08:51 lib/X11/doc/html/QuickStart30.html
+     1380 1999-01-08 08:51 lib/X11/doc/html/QuickStart31.html
+     1483 1999-01-08 08:51 lib/X11/doc/html/QuickStart32.html
+     1946 1999-01-08 08:51 lib/X11/doc/html/QuickStart33.html
+     1313 1999-01-08 08:51 lib/X11/doc/html/QuickStart34.html
+     1753 1999-01-08 08:51 lib/X11/doc/html/QuickStart35.html
+     1873 1999-01-08 08:51 lib/X11/doc/html/QuickStart4.html
+     2475 1999-01-08 08:51 lib/X11/doc/html/QuickStart5.html
+     4105 1999-01-08 08:51 lib/X11/doc/html/QuickStart6.html
+     1545 1999-01-08 08:51 lib/X11/doc/html/QuickStart7.html
+     2666 1999-01-08 08:51 lib/X11/doc/html/QuickStart8.html
+     1633 1999-01-08 08:51 lib/X11/doc/html/QuickStart9.html
+     2690 1999-01-08 08:51 lib/X11/doc/html/QuickStart_toc.html
+      452 1999-01-08 08:51 lib/X11/doc/html/DocIndex.html
+     4683 1999-01-08 08:51 lib/X11/doc/html/DocIndex1.html
+      317 1999-01-08 08:51 lib/X11/doc/html/DocIndex_toc.html
+      478 1999-01-08 08:51 lib/X11/doc/html/LinkKit.html
+     8030 1999-01-08 08:51 lib/X11/doc/html/LinkKit1.html
+      343 1999-01-08 08:51 lib/X11/doc/html/LinkKit_toc.html
+      627 1999-01-08 08:51 lib/X11/doc/html/clkprog.html
+     2921 1999-01-08 08:51 lib/X11/doc/html/clkprog1.html
+     3109 1999-01-08 08:51 lib/X11/doc/html/clkprog2.html
+      485 1999-01-08 08:51 lib/X11/doc/html/clkprog_toc.html
+      732 1999-01-08 08:51 lib/X11/doc/html/xinput.html
+     1456 1999-01-08 08:51 lib/X11/doc/html/xinput1.html
+     1159 1999-01-08 08:51 lib/X11/doc/html/xinput2.html
+     1150 1999-01-08 08:51 lib/X11/doc/html/xinput3.html
+     4417 1999-01-08 08:51 lib/X11/doc/html/xinput4.html
+     1648 1999-01-08 08:51 lib/X11/doc/html/xinput5.html
+      578 1999-01-08 08:51 lib/X11/doc/html/xinput_toc.html
+     2937 1999-01-08 08:51 lib/X11/doc/html/VideoModes.html
+     1690 1999-01-08 08:51 lib/X11/doc/html/VideoModes1.html
+     3374 1999-01-08 08:51 lib/X11/doc/html/VideoModes10.html
+     3040 1999-01-08 08:51 lib/X11/doc/html/VideoModes11.html
+     4037 1999-01-08 08:51 lib/X11/doc/html/VideoModes12.html
+     1784 1999-01-08 08:51 lib/X11/doc/html/VideoModes13.html
+     4070 1999-01-08 08:51 lib/X11/doc/html/VideoModes14.html
+     4563 1999-01-08 08:51 lib/X11/doc/html/VideoModes15.html
+     5454 1999-01-08 08:51 lib/X11/doc/html/VideoModes16.html
+     3012 1999-01-08 08:51 lib/X11/doc/html/VideoModes17.html
+     5106 1999-01-08 08:51 lib/X11/doc/html/VideoModes18.html
+     3212 1999-01-08 08:51 lib/X11/doc/html/VideoModes19.html
+     3206 1999-01-08 08:51 lib/X11/doc/html/VideoModes2.html
+     2640 1999-01-08 08:51 lib/X11/doc/html/VideoModes20.html
+     1683 1999-01-08 08:51 lib/X11/doc/html/VideoModes21.html
+     1667 1999-01-08 08:51 lib/X11/doc/html/VideoModes22.html
+     1444 1999-01-08 08:51 lib/X11/doc/html/VideoModes23.html
+     1574 1999-01-08 08:51 lib/X11/doc/html/VideoModes24.html
+     1839 1999-01-08 08:51 lib/X11/doc/html/VideoModes25.html
+     8737 1999-01-08 08:51 lib/X11/doc/html/VideoModes26.html
+     1888 1999-01-08 08:51 lib/X11/doc/html/VideoModes27.html
+     4579 1999-01-08 08:51 lib/X11/doc/html/VideoModes3.html
+     6664 1999-01-08 08:51 lib/X11/doc/html/VideoModes4.html
+     4138 1999-01-08 08:51 lib/X11/doc/html/VideoModes5.html
+     1636 1999-01-08 08:51 lib/X11/doc/html/VideoModes6.html
+     3690 1999-01-08 08:51 lib/X11/doc/html/VideoModes7.html
+     1922 1999-01-08 08:51 lib/X11/doc/html/VideoModes8.html
+     5880 1999-01-08 08:51 lib/X11/doc/html/VideoModes9.html
+     2245 1999-01-08 08:51 lib/X11/doc/html/VideoModes_toc.html
+     2274 1999-01-08 08:51 lib/X11/doc/html/VGADriver.html
+     2584 1999-01-08 08:51 lib/X11/doc/html/VGADriver1.html
+     1863 1999-01-08 08:51 lib/X11/doc/html/VGADriver10.html
+     3661 1999-01-08 08:51 lib/X11/doc/html/VGADriver11.html
+     1623 1999-01-08 08:51 lib/X11/doc/html/VGADriver12.html
+     1968 1999-01-08 08:51 lib/X11/doc/html/VGADriver13.html
+     1514 1999-01-08 08:51 lib/X11/doc/html/VGADriver14.html
+     2254 1999-01-08 08:51 lib/X11/doc/html/VGADriver15.html
+     1503 1999-01-08 08:51 lib/X11/doc/html/VGADriver16.html
+     1417 1999-01-08 08:51 lib/X11/doc/html/VGADriver17.html
+     1953 1999-01-08 08:51 lib/X11/doc/html/VGADriver18.html
+     1530 1999-01-08 08:51 lib/X11/doc/html/VGADriver19.html
+     2531 1999-01-08 08:51 lib/X11/doc/html/VGADriver2.html
+     1629 1999-01-08 08:51 lib/X11/doc/html/VGADriver20.html
+     2514 1999-01-08 08:51 lib/X11/doc/html/VGADriver21.html
+     2773 1999-01-08 08:51 lib/X11/doc/html/VGADriver22.html
+     1622 1999-01-08 08:51 lib/X11/doc/html/VGADriver23.html
+     1240 1999-01-08 08:51 lib/X11/doc/html/VGADriver24.html
+     1211 1999-01-08 08:50 lib/X11/doc/html/I1285.html
+     1486 1999-01-08 08:51 lib/X11/doc/html/VGADriver25.html
+     2650 1999-01-08 08:51 lib/X11/doc/html/VGADriver26.html
+     4149 1999-01-08 08:51 lib/X11/doc/html/VGADriver3.html
+     5867 1999-01-08 08:51 lib/X11/doc/html/VGADriver4.html
+     4517 1999-01-08 08:51 lib/X11/doc/html/VGADriver5.html
+     6383 1999-01-08 08:51 lib/X11/doc/html/VGADriver6.html
+     2822 1999-01-08 08:51 lib/X11/doc/html/VGADriver7.html
+     4345 1999-01-08 08:51 lib/X11/doc/html/VGADriver8.html
+     1413 1999-01-08 08:51 lib/X11/doc/html/VGADriver9.html
+     1952 1999-01-08 08:51 lib/X11/doc/html/VGADriver_toc.html

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjdoc.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjdoc.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjdoc.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjdoc.txt  3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,17 @@
+        0 1999-01-08 08:51 lib/X11/doc/Japanese/
+     7639 1999-01-08 08:51 lib/X11/doc/Japanese/COPYRIGHT
+    23841 1999-01-08 08:51 lib/X11/doc/Japanese/QuickStart.doc
+    31408 1999-01-08 08:51 lib/X11/doc/Japanese/README
+    24860 1999-01-08 08:51 lib/X11/doc/Japanese/README.Config
+    11574 1999-01-08 08:51 lib/X11/doc/Japanese/INSTALL
+    71559 1999-01-08 08:51 lib/X11/doc/Japanese/AccelCards
+    23139 1999-01-08 08:51 lib/X11/doc/Japanese/README.S3
+    13666 1999-01-08 08:51 lib/X11/doc/Japanese/README.Mach64
+    13431 1999-01-08 08:51 lib/X11/doc/Japanese/README.ati
+     9196 1999-01-08 08:51 lib/X11/doc/Japanese/BUILD
+    27447 1999-01-08 08:51 lib/X11/doc/Japanese/README.chips
+    37950 1999-01-08 08:51 lib/X11/doc/Japanese/README.cirrus
+    29030 1999-01-08 08:51 lib/X11/doc/Japanese/RELNOTES
+     6319 1999-01-08 08:51 lib/X11/doc/Japanese/LinkKit
+    39088 1999-01-08 08:51 lib/X11/doc/Japanese/VGADriver.doc
+    13709 1999-01-08 08:51 lib/X11/doc/Japanese/README.Linux

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjset.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjset.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjset.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xjset.txt  3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,76 @@
+   1318516 1999-01-06 18:07 bin/XF86Setup
+       243 1999-01-06 18:08 bin/xmseconfig
+         0 1999-01-06 18:07 lib/X11/XF86Setup/
+     10611 1999-01-06 18:07 lib/X11/XF86Setup/phase1.tcl
+      7464 1999-01-06 18:07 lib/X11/XF86Setup/phase2.tcl
+      1862 1999-01-06 18:07 lib/X11/XF86Setup/phase3.tcl
+      2953 1999-01-06 18:07 lib/X11/XF86Setup/phase4.tcl
+      2385 1999-01-06 18:07 lib/X11/XF86Setup/phase5.tcl
+     20258 1999-01-06 18:07 lib/X11/XF86Setup/setuplib.tcl
+      3050 1999-01-06 18:07 lib/X11/XF86Setup/srvflags.tcl
+     22109 1999-01-06 18:07 lib/X11/XF86Setup/carddata.tcl
+     19842 1999-01-06 18:07 lib/X11/XF86Setup/card.tcl
+      1749 1999-01-06 18:07 lib/X11/XF86Setup/done.tcl
+      3009 1999-01-06 18:07 lib/X11/XF86Setup/filelist.tcl
+      9663 1999-01-06 18:07 lib/X11/XF86Setup/keyboard.tcl
+       550 1999-01-06 18:07 lib/X11/XF86Setup/mseproto.tcl
+      6594 1999-01-06 18:07 lib/X11/XF86Setup/mondata.tcl
+     10964 1999-01-06 18:07 lib/X11/XF86Setup/monitor.tcl
+      6988 1999-01-06 18:07 lib/X11/XF86Setup/modeselect.tcl
+     21028 1999-01-06 18:07 lib/X11/XF86Setup/mouse.tcl
+      1145 1999-01-06 18:07 lib/X11/XF86Setup/LICENSE
+         0 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/
+      4617 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/button.tcl
+      6172 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/combobox.tcl
+      3552 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/misc.tcl
+       245 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/downarrow.xbm
+      4004 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/dialog.tcl
+     13010 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/entry.tcl
+      5034 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/focus.tcl
+      8241 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/init.tcl
+     11707 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/listbox.tcl
+     25328 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/menu.tcl
+      1856 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/optionMenu.tcl
+      7289 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/palette.tcl
+      6837 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/scale.tcl
+     11211 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/scrollbar.tcl
+      6148 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/tclIndex
+      3691 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/tearoff.tcl
+     21213 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/text.tcl
+      3594 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/tk.tcl
+      2687 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/tkerror.tcl
+       227 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/uparrow.xbm
+      1734 1999-01-06 18:07 lib/X11/XF86Setup/tcllib/license.terms
+         0 1999-01-06 18:07 lib/X11/XF86Setup/pics/
+      9634 1999-01-06 18:07 lib/X11/XF86Setup/pics/vidcard.xbm
+      9634 1999-01-06 18:07 lib/X11/XF86Setup/pics/vidcard.msk
+     28577 1999-01-06 18:07 lib/X11/XF86Setup/pics/XFree86.xbm
+     28577 1999-01-06 18:07 lib/X11/XF86Setup/pics/XFree86.msk
+         0 1999-01-06 18:07 lib/X11/XF86Setup/scripts/
+      2394 1999-01-06 18:07 lib/X11/XF86Setup/scripts/mseconfig.tcl
+         0 1999-01-06 18:07 lib/X11/XF86Setup/texts/
+      2973 1999-01-06 18:07 lib/X11/XF86Setup/texts/local_text.tcl
+         0 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/
+      8161 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/messages.tcl
+      2224 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/message_proc.tcl
+      1973 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_card.tcl
+       450 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_done.tcl
+       437 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_keyboard.tcl
+       752 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_monitor.tcl
+      1743 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_mouse.tcl
+       447 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_other.tcl
+       970 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_intro.tcl
+       677 1999-01-06 18:07 lib/X11/XF86Setup/texts/generic/help_modeselect.tcl
+         0 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/
+      9540 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/messages.tcl
+      2817 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/message_proc.tcl
+      2118 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_card.tcl
+       337 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_done.tcl
+       606 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_keyboard.tcl
+       823 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_monitor.tcl
+      4282 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_mouse.tcl
+       402 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_other.tcl
+      1627 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_intro.tcl
+      1068 1999-01-06 18:07 lib/X11/XF86Setup/texts/ja/help_modeselect.tcl
+      3628 1999-01-06 18:07 man/man1/XF86Setup.1x
+      1582 1999-01-06 18:08 man/man1/xmseconfig.1x

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlib.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlib.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlib.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlib.txt   3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,378 @@
+         0 1998-12-31 04:51 lib/X11/
+     29614 1998-12-31 04:27 lib/X11/XErrorDB
+      4767 1998-12-31 04:27 lib/X11/XKeysymDB
+         0 1998-12-31 04:30 lib/X11/locale/
+      8710 1998-12-31 04:30 lib/X11/locale/locale.alias
+      4200 1998-12-31 04:30 lib/X11/locale/locale.dir
+      2778 1998-12-31 04:30 lib/X11/locale/compose.dir
+         0 1998-12-31 04:30 lib/X11/locale/C/
+       598 1998-12-31 04:30 lib/X11/locale/C/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-1/
+       800 1998-12-31 04:30 lib/X11/locale/iso8859-1/XLC_LOCALE
+     34421 1998-12-31 04:30 lib/X11/locale/iso8859-1/Compose
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-2/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-2/XLC_LOCALE
+     19223 1998-12-31 04:30 lib/X11/locale/iso8859-2/Compose
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-3/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-3/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-4/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-4/XLC_LOCALE
+     15222 1998-12-31 04:30 lib/X11/locale/iso8859-4/Compose
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-5/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-5/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-6/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-6/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-7/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-7/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-8/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-8/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-9/
+       843 1998-12-31 04:30 lib/X11/locale/iso8859-9/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-10/
+       844 1998-12-31 04:30 lib/X11/locale/iso8859-10/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/iso8859-15/
+      1126 1998-12-31 04:30 lib/X11/locale/iso8859-15/XLC_LOCALE
+     19260 1998-12-31 04:30 lib/X11/locale/iso8859-15/Compose
+         0 1998-12-31 04:30 lib/X11/locale/ja/
+      1767 1998-12-31 04:30 lib/X11/locale/ja/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/ja.JIS/
+      1842 1998-12-31 04:30 lib/X11/locale/ja.JIS/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/ja.SJIS/
+      5305 1998-12-31 04:30 lib/X11/locale/ja.SJIS/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/ko/
+       829 1998-12-31 04:30 lib/X11/locale/ko/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/koi8-r/
+       773 1998-12-31 04:30 lib/X11/locale/koi8-r/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/zh/
+       816 1998-12-31 04:30 lib/X11/locale/zh/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/zh_TW/
+      2349 1998-12-31 04:30 lib/X11/locale/zh_TW/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/th_TH.TACTIS/
+       820 1998-12-31 04:30 lib/X11/locale/th_TH.TACTIS/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/en_US.utf/
+      1758 1998-12-31 04:30 lib/X11/locale/en_US.utf/XLC_LOCALE
+         0 1998-12-31 04:30 lib/X11/locale/tbl_data/
+       784 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_1
+       982 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_2
+       996 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_3
+       982 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_4
+       982 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_5
+      1072 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_6
+       994 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_7
+      1058 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_8
+       982 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_9
+       982 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_10
+       800 1998-12-31 04:30 lib/X11/locale/tbl_data/tab8859_15
+     46142 1998-12-31 04:30 lib/X11/locale/tbl_data/jis0208
+     54399 1998-12-31 04:30 lib/X11/locale/tbl_data/ksc5601
+     47851 1998-12-31 04:30 lib/X11/locale/tbl_data/gb2312
+       896 1998-12-31 04:30 lib/X11/locale/tbl_data/jis0201
+      1032 1998-12-31 04:30 lib/X11/locale/tbl_data/tabkoi8_r
+         0 1998-12-31 04:30 lib/X11/proxymngr/
+       319 1998-12-31 04:30 lib/X11/proxymngr/pmconfig
+     17375 1998-12-31 04:31 lib/X11/rgb.txt
+         0 1998-12-31 04:31 lib/X11/rstart/
+     11348 1998-12-31 04:31 lib/X11/rstart/rstartd.real
+      1713 1998-12-31 04:31 lib/X11/rstart/config
+         0 1998-12-31 04:31 lib/X11/rstart/commands/
+         0 1998-12-31 04:31 lib/X11/rstart/commands/x11r6/
+      1366 1998-12-31 04:31 lib/X11/rstart/commands/x11r6/@List
+      1299 1998-12-31 04:31 lib/X11/rstart/commands/x11r6/LoadMonitor
+      1296 1998-12-31 04:31 lib/X11/rstart/commands/x11r6/Terminal
+      1361 1998-12-31 04:31 lib/X11/rstart/commands/@List
+      1444 1998-12-31 04:31 lib/X11/rstart/commands/ListContexts
+      1552 1998-12-31 04:31 lib/X11/rstart/commands/ListGenericCommands
+         0 1998-12-31 04:31 lib/X11/rstart/commands/x11 -> x11r6
+         0 1998-12-31 04:31 lib/X11/rstart/commands/x -> x11r6
+         0 1998-12-31 04:31 lib/X11/rstart/contexts/
+      1308 1998-12-31 04:31 lib/X11/rstart/contexts/@List
+      1288 1998-12-31 04:31 lib/X11/rstart/contexts/default
+      1548 1998-12-31 04:31 lib/X11/rstart/contexts/x11r6
+         0 1998-12-31 04:31 lib/X11/rstart/contexts/x11 -> x11r6
+         0 1998-12-31 04:31 lib/X11/rstart/contexts/x -> x11r6
+         0 1998-12-31 04:31 lib/X11/twm/
+      2414 1998-12-31 04:31 lib/X11/twm/system.twmrc
+         0 1998-12-31 04:31 lib/X11/x11perfcomp/
+       424 1998-12-31 04:31 lib/X11/x11perfcomp/fillblnk
+       784 1998-12-31 04:31 lib/X11/x11perfcomp/perfboth
+       723 1998-12-31 04:31 lib/X11/x11perfcomp/perfratio
+         0 1998-12-31 04:31 lib/X11/xdm/
+     12484 1998-12-31 04:31 lib/X11/xdm/chooser
+         0 1998-12-31 04:32 lib/X11/xkb/
+         0 1998-12-31 04:32 lib/X11/xkb/compiled/
+       644 1998-12-31 04:32 lib/X11/xkb/compiled/README
+    213088 1998-12-31 04:32 lib/X11/xkb/xkbcomp
+       529 1998-12-31 04:32 lib/X11/xkb/compat.dir
+         0 1998-12-31 04:32 lib/X11/xkb/compat/
+      1188 1998-12-31 04:32 lib/X11/xkb/compat/accessx
+      1291 1998-12-31 04:32 lib/X11/xkb/compat/basic
+       219 1998-12-31 04:32 lib/X11/xkb/compat/complete
+       237 1998-12-31 04:32 lib/X11/xkb/compat/default
+      1410 1998-12-31 04:32 lib/X11/xkb/compat/iso9995
+       676 1998-12-31 04:32 lib/X11/xkb/compat/japan
+      1478 1998-12-31 04:32 lib/X11/xkb/compat/keypad
+       890 1998-12-31 04:32 lib/X11/xkb/compat/misc
+      4108 1998-12-31 04:32 lib/X11/xkb/compat/mousekeys
+       261 1998-12-31 04:32 lib/X11/xkb/compat/norepeat
+       400 1998-12-31 04:32 lib/X11/xkb/compat/pc
+      1321 1998-12-31 04:32 lib/X11/xkb/compat/pc98
+      1534 1998-12-31 04:32 lib/X11/xkb/compat/xtest
+      1609 1998-12-31 04:32 lib/X11/xkb/geometry.dir
+         0 1998-12-31 04:32 lib/X11/xkb/geometry/
+      3224 1998-12-31 04:32 lib/X11/xkb/geometry/amiga
+      5594 1998-12-31 04:32 lib/X11/xkb/geometry/ataritt
+      5305 1998-12-31 04:32 lib/X11/xkb/geometry/dell
+      3896 1998-12-31 04:32 lib/X11/xkb/geometry/everex
+      7983 1998-12-31 04:32 lib/X11/xkb/geometry/fujitsu
+      6701 1998-12-31 04:32 lib/X11/xkb/geometry/keytronic
+      4103 1998-12-31 04:32 lib/X11/xkb/geometry/kinesis
+      6017 1998-12-31 04:32 lib/X11/xkb/geometry/microsoft
+      4433 1998-12-31 04:32 lib/X11/xkb/geometry/nec
+      4077 1998-12-31 04:32 lib/X11/xkb/geometry/northgate
+     21525 1998-12-31 04:32 lib/X11/xkb/geometry/pc
+      5160 1998-12-31 04:32 lib/X11/xkb/geometry/sony
+     38382 1998-12-31 04:32 lib/X11/xkb/geometry/sun
+      2827 1998-12-31 04:32 lib/X11/xkb/geometry/winbook
+         0 1998-12-31 04:32 lib/X11/xkb/geometry/digital/
+     20693 1998-12-31 04:32 lib/X11/xkb/geometry/digital/lk
+     10905 1998-12-31 04:32 lib/X11/xkb/geometry/digital/pc
+      7229 1998-12-31 04:32 lib/X11/xkb/geometry/digital/unix
+         0 1998-12-31 04:32 lib/X11/xkb/geometry/sgi/
+     15017 1998-12-31 04:32 lib/X11/xkb/geometry/sgi/indy
+     10455 1998-12-31 04:32 lib/X11/xkb/geometry/sgi/indigo
+     15363 1998-12-31 04:32 lib/X11/xkb/geometry/sgi/O2
+      1913 1998-12-31 04:32 lib/X11/xkb/keycodes.dir
+         0 1998-12-31 04:32 lib/X11/xkb/keycodes/
+      3493 1998-12-31 04:32 lib/X11/xkb/keycodes/amiga
+      1927 1998-12-31 04:32 lib/X11/xkb/keycodes/ataritt
+      3917 1998-12-31 04:32 lib/X11/xkb/keycodes/fujitsu
+      3278 1998-12-31 04:32 lib/X11/xkb/keycodes/hp
+      3344 1998-12-31 04:32 lib/X11/xkb/keycodes/ibm
+      3153 1998-12-31 04:32 lib/X11/xkb/keycodes/sony
+     11591 1998-12-31 04:32 lib/X11/xkb/keycodes/sun
+      6539 1998-12-31 04:32 lib/X11/xkb/keycodes/xfree86
+      3501 1998-12-31 04:32 lib/X11/xkb/keycodes/xfree98
+         0 1998-12-31 04:32 lib/X11/xkb/keycodes/digital/
+      6134 1998-12-31 04:32 lib/X11/xkb/keycodes/digital/lk
+      6115 1998-12-31 04:32 lib/X11/xkb/keycodes/digital/pc
+         0 1998-12-31 04:32 lib/X11/xkb/keycodes/sgi/
+      3714 1998-12-31 04:32 lib/X11/xkb/keycodes/sgi/indy
+      2367 1998-12-31 04:32 lib/X11/xkb/keycodes/sgi/indigo
+       313 1998-12-31 04:32 lib/X11/xkb/keycodes/sgi/iris
+      6187 1998-12-31 04:32 lib/X11/xkb/keymap.dir
+         0 1998-12-31 04:32 lib/X11/xkb/keymap/
+       585 1998-12-31 04:32 lib/X11/xkb/keymap/amiga
+       576 1998-12-31 04:32 lib/X11/xkb/keymap/ataritt
+      1647 1998-12-31 04:32 lib/X11/xkb/keymap/sony
+      6663 1998-12-31 04:32 lib/X11/xkb/keymap/xfree86
+      1718 1998-12-31 04:32 lib/X11/xkb/keymap/xfree98
+         0 1998-12-31 04:32 lib/X11/xkb/keymap/digital/
+      7330 1998-12-31 04:32 lib/X11/xkb/keymap/digital/us
+         0 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/
+      1183 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/be
+       622 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/bg
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/ca
+       582 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/cs
+      1199 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/de
+      1198 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/de_CH
+      1201 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/dk
+       581 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/dvorak
+      2264 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/en_US
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/es
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/fi
+      1183 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/fr
+      1198 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/fr_CH
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/gb
+      3712 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/hu
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/it
+       319 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/jp
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/no
+      1141 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/pl
+      1181 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/pt
+      3712 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/ru
+      1182 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/se
+       622 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/th
+      1635 1998-12-31 04:32 lib/X11/xkb/keymap/sgi/us
+         0 1998-12-31 04:32 lib/X11/xkb/keymap/sun/
+      3109 1998-12-31 04:32 lib/X11/xkb/keymap/sun/de
+      1725 1998-12-31 04:32 lib/X11/xkb/keymap/sun/se
+      2905 1998-12-31 04:32 lib/X11/xkb/keymap/sun/us
+         0 1998-12-31 04:32 lib/X11/xkb/semantics/
+       168 1998-12-31 04:32 lib/X11/xkb/semantics/basic
+       180 1998-12-31 04:32 lib/X11/xkb/semantics/complete
+       176 1998-12-31 04:32 lib/X11/xkb/semantics/default
+       168 1998-12-31 04:32 lib/X11/xkb/semantics/xtest
+      6499 1998-12-31 04:32 lib/X11/xkb/symbols.dir
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/
+      9131 1998-12-31 04:32 lib/X11/xkb/symbols/amiga
+      4824 1998-12-31 04:32 lib/X11/xkb/symbols/ataritt
+      3735 1998-12-31 04:32 lib/X11/xkb/symbols/be
+      5384 1998-12-31 04:32 lib/X11/xkb/symbols/bg
+      8194 1998-12-31 04:32 lib/X11/xkb/symbols/ca
+      5231 1998-12-31 04:32 lib/X11/xkb/symbols/ca_enhanced
+      3872 1998-12-31 04:32 lib/X11/xkb/symbols/cs
+      1108 1998-12-31 04:32 lib/X11/xkb/symbols/ctrl
+      3689 1998-12-31 04:32 lib/X11/xkb/symbols/de
+      2186 1998-12-31 04:32 lib/X11/xkb/symbols/de_CH
+      2447 1998-12-31 04:32 lib/X11/xkb/symbols/dk
+      2740 1998-12-31 04:32 lib/X11/xkb/symbols/dvorak
+      2472 1998-12-31 04:32 lib/X11/xkb/symbols/en_US
+      3277 1998-12-31 04:32 lib/X11/xkb/symbols/es
+      2292 1998-12-31 04:32 lib/X11/xkb/symbols/fi
+      3707 1998-12-31 04:32 lib/X11/xkb/symbols/fr
+       933 1998-12-31 04:32 lib/X11/xkb/symbols/fr_CH
+      3027 1998-12-31 04:32 lib/X11/xkb/symbols/gb
+      2397 1998-12-31 04:32 lib/X11/xkb/symbols/group
+      7647 1998-12-31 04:32 lib/X11/xkb/symbols/hu
+      4994 1998-12-31 04:32 lib/X11/xkb/symbols/iso9995-3
+      2784 1998-12-31 04:32 lib/X11/xkb/symbols/it
+      5250 1998-12-31 04:32 lib/X11/xkb/symbols/jp
+      2158 1998-12-31 04:32 lib/X11/xkb/symbols/keypad
+       399 1998-12-31 04:32 lib/X11/xkb/symbols/lock
+      2550 1998-12-31 04:32 lib/X11/xkb/symbols/no
+       628 1998-12-31 04:32 lib/X11/xkb/symbols/pc104
+      4583 1998-12-31 04:32 lib/X11/xkb/symbols/pl
+      2231 1998-12-31 04:32 lib/X11/xkb/symbols/pt
+       577 1998-12-31 04:32 lib/X11/xkb/symbols/ralt
+      4415 1998-12-31 04:32 lib/X11/xkb/symbols/ru
+      2598 1998-12-31 04:32 lib/X11/xkb/symbols/se
+      3068 1998-12-31 04:32 lib/X11/xkb/symbols/th
+      7748 1998-12-31 04:32 lib/X11/xkb/symbols/us
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/digital/
+      4412 1998-12-31 04:32 lib/X11/xkb/symbols/digital/lk
+      6236 1998-12-31 04:32 lib/X11/xkb/symbols/digital/pc
+      7925 1998-12-31 04:32 lib/X11/xkb/symbols/digital/us
+      5513 1998-12-31 04:32 lib/X11/xkb/symbols/digital/vt
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/fujitsu/
+      4304 1998-12-31 04:32 lib/X11/xkb/symbols/fujitsu/jp
+      4612 1998-12-31 04:32 lib/X11/xkb/symbols/fujitsu/us
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/nec/
+      6402 1998-12-31 04:32 lib/X11/xkb/symbols/nec/jp
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/sgi/
+      2139 1998-12-31 04:32 lib/X11/xkb/symbols/sgi/jp
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/sony/
+      3122 1998-12-31 04:32 lib/X11/xkb/symbols/sony/us
+         0 1998-12-31 04:32 lib/X11/xkb/symbols/sun/
+      6403 1998-12-31 04:32 lib/X11/xkb/symbols/sun/se
+      8191 1998-12-31 04:32 lib/X11/xkb/symbols/sun/us
+       287 1998-12-31 04:32 lib/X11/xkb/types.dir
+         0 1998-12-31 04:32 lib/X11/xkb/types/
+       807 1998-12-31 04:32 lib/X11/xkb/types/basic
+       291 1998-12-31 04:32 lib/X11/xkb/types/cancel
+       383 1998-12-31 04:32 lib/X11/xkb/types/nocancel
+       202 1998-12-31 04:32 lib/X11/xkb/types/complete
+       177 1998-12-31 04:32 lib/X11/xkb/types/default
+       293 1998-12-31 04:32 lib/X11/xkb/types/mousekeys
+       509 1998-12-31 04:32 lib/X11/xkb/types/iso9995
+       692 1998-12-31 04:32 lib/X11/xkb/types/pc
+         0 1998-12-31 04:32 lib/X11/xkb/rules/
+      3092 1998-12-31 04:32 lib/X11/xkb/rules/sgi
+      1531 1998-12-31 04:32 lib/X11/xkb/rules/xfree86
+      2355 1998-12-31 04:32 lib/X11/xkb/rules/sgi.lst
+      1549 1998-12-31 04:32 lib/X11/xkb/rules/xfree86.lst
+      1332 1998-12-31 04:32 lib/X11/xkb/rules/xfree86-it.lst
+         0 1998-12-31 04:32 lib/X11/xsm/
+        79 1998-12-31 04:32 lib/X11/xsm/system.xsm
+         0 1998-12-31 04:48 lib/X11/xserver/
+      2929 1998-12-31 04:48 lib/X11/xserver/SecurityPolicy
+     14025 1998-12-31 04:49 lib/X11/XF86Config.eg
+     55052 1998-12-31 04:50 lib/X11/Cards
+         0 1998-12-31 04:50 lib/X11/etc/
+      1258 1998-12-31 04:50 lib/X11/etc/sun.termcap
+      1916 1998-12-31 04:50 lib/X11/etc/sun.terminfo
+      4948 1998-12-31 04:50 lib/X11/etc/xterm.termcap
+     14947 1998-12-31 04:50 lib/X11/etc/xterm.terminfo
+      2632 1998-12-31 04:50 lib/X11/etc/et4000clock.c
+      4988 1998-12-31 04:50 lib/X11/etc/xmodmap.std
+      4054 1998-12-31 04:50 lib/X11/etc/postinst.sh
+      4744 1998-12-31 04:50 lib/X11/etc/preinst.sh
+     21550 1998-12-31 04:50 lib/X11/XF86Config.98
+     12700 1998-12-31 04:51 lib/X11/Cards98
+         0 1998-12-31 04:51 lib/X11/lbxproxy/
+      1685 1998-12-31 04:51 lib/X11/lbxproxy/AtomControl
+      8344 1998-12-31 04:12 lib/X11/xman.help
+         0 1998-12-31 04:32 include/X11/bitmaps/
+       272 1998-12-31 04:24 include/X11/bitmaps/1x1
+       272 1998-12-31 04:24 include/X11/bitmaps/2x2
+       278 1998-12-31 04:24 include/X11/bitmaps/black
+       278 1998-12-31 04:24 include/X11/bitmaps/boxes
+      1274 1998-12-31 04:24 include/X11/bitmaps/calculator
+       337 1998-12-31 04:24 include/X11/bitmaps/cntr_ptr
+       296 1998-12-31 04:24 include/X11/bitmaps/cntr_ptrmsk
+       296 1998-12-31 04:24 include/X11/bitmaps/cross_weave
+       284 1998-12-31 04:24 include/X11/bitmaps/dimple1
+       284 1998-12-31 04:24 include/X11/bitmaps/dimple3
+       272 1998-12-31 04:24 include/X11/bitmaps/dot
+       117 1998-12-31 04:24 include/X11/bitmaps/dropbar7
+       135 1998-12-31 04:24 include/X11/bitmaps/dropbar8
+     34261 1998-12-31 04:24 include/X11/bitmaps/escherknot
+      1886 1998-12-31 04:24 include/X11/bitmaps/flagdown
+      1880 1998-12-31 04:24 include/X11/bitmaps/flagup
+       111 1998-12-31 04:24 include/X11/bitmaps/flipped_gray
+        87 1998-12-31 04:24 include/X11/bitmaps/gray
+        90 1998-12-31 04:24 include/X11/bitmaps/gray1
+       102 1998-12-31 04:24 include/X11/bitmaps/gray3
+        90 1998-12-31 04:24 include/X11/bitmaps/grid2
+       102 1998-12-31 04:24 include/X11/bitmaps/grid4
+       126 1998-12-31 04:24 include/X11/bitmaps/grid8
+       281 1998-12-31 04:24 include/X11/bitmaps/grid16
+        96 1998-12-31 04:24 include/X11/bitmaps/hlines2
+       102 1998-12-31 04:24 include/X11/bitmaps/hlines3
+       275 1998-12-31 04:24 include/X11/bitmaps/icon
+       293 1998-12-31 04:24 include/X11/bitmaps/keyboard16
+       337 1998-12-31 04:24 include/X11/bitmaps/left_ptr
+       296 1998-12-31 04:24 include/X11/bitmaps/left_ptrmsk
+      1883 1998-12-31 04:24 include/X11/bitmaps/letters
+       105 1998-12-31 04:24 include/X11/bitmaps/light_gray
+      1898 1998-12-31 04:24 include/X11/bitmaps/mailempty
+      1889 1998-12-31 04:24 include/X11/bitmaps/mailemptymsk
+      1895 1998-12-31 04:24 include/X11/bitmaps/mailfull
+      1895 1998-12-31 04:24 include/X11/bitmaps/mailfullmsk
+     18623 1998-12-31 04:24 include/X11/bitmaps/mensetmanus
+       120 1998-12-31 04:24 include/X11/bitmaps/menu6
+       126 1998-12-31 04:24 include/X11/bitmaps/menu8
+       206 1998-12-31 04:24 include/X11/bitmaps/menu10
+       239 1998-12-31 04:24 include/X11/bitmaps/menu12
+       281 1998-12-31 04:24 include/X11/bitmaps/menu16
+      1889 1998-12-31 04:24 include/X11/bitmaps/noletters
+       332 1998-12-31 04:24 include/X11/bitmaps/opendot
+       352 1998-12-31 04:24 include/X11/bitmaps/opendotMask
+       537 1998-12-31 04:24 include/X11/bitmaps/plaid
+       343 1998-12-31 04:24 include/X11/bitmaps/right_ptr
+       299 1998-12-31 04:24 include/X11/bitmaps/right_ptrmsk
+       117 1998-12-31 04:24 include/X11/bitmaps/root_weave
+       281 1998-12-31 04:24 include/X11/bitmaps/scales
+       919 1998-12-31 04:24 include/X11/bitmaps/sipb
+       317 1998-12-31 04:24 include/X11/bitmaps/star
+       337 1998-12-31 04:24 include/X11/bitmaps/starMask
+       133 1998-12-31 04:24 include/X11/bitmaps/stipple
+       281 1998-12-31 04:24 include/X11/bitmaps/target
+      3798 1998-12-31 04:24 include/X11/bitmaps/terminal
+       296 1998-12-31 04:24 include/X11/bitmaps/tie_fighter
+        90 1998-12-31 04:24 include/X11/bitmaps/vlines2
+        90 1998-12-31 04:24 include/X11/bitmaps/vlines3
+       824 1998-12-31 04:30 include/X11/bitmaps/Down
+       175 1998-12-31 04:24 include/X11/bitmaps/weird_size
+       293 1998-12-31 04:24 include/X11/bitmaps/wide_weave
+       887 1998-12-31 04:24 include/X11/bitmaps/wingdogs
+      4778 1998-12-31 04:24 include/X11/bitmaps/woman
+      1886 1998-12-31 04:24 include/X11/bitmaps/xfd_icon
+       219 1998-12-31 04:24 include/X11/bitmaps/xlogo11
+       293 1998-12-31 04:24 include/X11/bitmaps/xlogo16
+       884 1998-12-31 04:24 include/X11/bitmaps/xlogo32
+      3293 1998-12-31 04:24 include/X11/bitmaps/xlogo64
+     83206 1998-12-31 04:24 include/X11/bitmaps/xsnow
+        93 1998-12-31 04:30 include/X11/bitmaps/Dashes
+      1076 1998-12-31 04:30 include/X11/bitmaps/Excl
+       839 1998-12-31 04:30 include/X11/bitmaps/FlipHoriz
+       836 1998-12-31 04:30 include/X11/bitmaps/FlipVert
+       824 1998-12-31 04:30 include/X11/bitmaps/Fold
+       824 1998-12-31 04:30 include/X11/bitmaps/Left
+       827 1998-12-31 04:30 include/X11/bitmaps/Right
+       842 1998-12-31 04:30 include/X11/bitmaps/RotateLeft
+       845 1998-12-31 04:30 include/X11/bitmaps/RotateRight
+        96 1998-12-31 04:30 include/X11/bitmaps/Stipple
+       875 1998-12-31 04:30 include/X11/bitmaps/Term
+       818 1998-12-31 04:30 include/X11/bitmaps/Up
+       117 1998-12-31 04:32 include/X11/bitmaps/black6
+       111 1998-12-31 04:32 include/X11/bitmaps/box6

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlk98.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlk98.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlk98.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlk98.txt  3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,615 @@
+         0 1998-12-31 03:37 lib/Server/
+         0 1998-12-31 03:33 lib/Server/include/
+         0 1998-12-31 03:31 lib/Server/include/X11/
+     19772 1998-12-31 03:31 lib/Server/include/X11/X.h
+      5330 1998-12-31 03:31 lib/Server/include/X11/Xalloca.h
+      2881 1998-12-31 03:31 lib/Server/include/X11/Xfuncproto.h
+      3357 1998-12-31 03:31 lib/Server/include/X11/Xfuncs.h
+      6776 1998-12-31 03:31 lib/Server/include/X11/Xmd.h
+      7406 1998-12-31 03:31 lib/Server/include/X11/Xos.h
+      3122 1998-12-31 03:31 lib/Server/include/X11/Xosdefs.h
+     56098 1998-12-31 03:31 lib/Server/include/X11/Xproto.h
+      3008 1998-12-31 03:31 lib/Server/include/X11/Xprotostr.h
+         0 1998-12-31 03:31 lib/Server/include/X11/extensions/
+      1962 1998-12-31 03:31 lib/Server/include/X11/extensions/saver.h
+      4656 1998-12-31 03:31 lib/Server/include/X11/extensions/saverproto.h
+      4510 1998-12-31 03:31 lib/Server/include/X11/extensions/scrnsaver.h
+      6908 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86vmode.h
+      8361 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86vmstr.h
+      3263 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86dga.h
+      5045 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86dgastr.h
+      2958 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86misc.h
+      4328 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86mscstr.h
+      1672 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxbuf.h
+      1635 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxbufstr.h
+      2654 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxdeltastr.h
+      4301 1998-12-31 03:31 lib/Server/include/X11/extensions/lbximage.h
+      3587 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxopts.h
+     24129 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxstr.h
+      1894 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxzlib.h
+      1662 1998-12-31 03:31 lib/Server/include/X11/extensions/dpms.h
+      4982 1998-12-31 03:31 lib/Server/include/X11/extensions/dpmsstr.h
+     10645 1998-12-31 03:31 lib/Server/include/fontstruct.h
+      4746 1998-12-31 03:31 lib/Server/include/font.h
+      4196 1998-12-31 03:31 lib/Server/include/fsmasks.h
+      2757 1998-12-31 03:32 lib/Server/include/closure.h
+      5873 1998-12-31 03:32 lib/Server/include/colormap.h
+      4263 1998-12-31 03:32 lib/Server/include/colormapst.h
+      4430 1998-12-31 03:32 lib/Server/include/cursor.h
+      3456 1998-12-31 03:32 lib/Server/include/cursorstr.h
+     24156 1998-12-31 03:32 lib/Server/include/dix.h
+      8885 1998-12-31 03:32 lib/Server/include/dixfont.h
+      3542 1998-12-31 03:32 lib/Server/include/dixfontstr.h
+      5766 1998-12-31 03:32 lib/Server/include/dixstruct.h
+      2974 1998-12-31 03:32 lib/Server/include/extension.h
+      5734 1998-12-31 03:32 lib/Server/include/extnsionst.h
+      5809 1998-12-31 03:32 lib/Server/include/gc.h
+      8836 1998-12-31 03:32 lib/Server/include/gcstruct.h
+     11970 1998-12-31 03:32 lib/Server/include/input.h
+      9780 1998-12-31 03:32 lib/Server/include/inputstr.h
+      8923 1998-12-31 03:32 lib/Server/include/misc.h
+      2993 1998-12-31 03:32 lib/Server/include/miscstruct.h
+      2495 1998-12-31 03:32 lib/Server/include/opaque.h
+     15237 1998-12-31 03:32 lib/Server/include/os.h
+      4019 1998-12-31 03:32 lib/Server/include/pixmap.h
+      3340 1998-12-31 03:32 lib/Server/include/pixmapstr.h
+      3046 1998-12-31 03:32 lib/Server/include/property.h
+      7586 1998-12-31 03:32 lib/Server/include/resource.h
+      2562 1998-12-31 03:32 lib/Server/include/region.h
+     10756 1998-12-31 03:32 lib/Server/include/regionstr.h
+      4514 1998-12-31 03:32 lib/Server/include/screenint.h
+     20788 1998-12-31 03:32 lib/Server/include/scrnintstr.h
+     18155 1998-12-31 03:32 lib/Server/include/servermd.h
+      5106 1998-12-31 03:32 lib/Server/include/site.h
+      1682 1998-12-31 03:32 lib/Server/include/validate.h
+      7580 1998-12-31 03:32 lib/Server/include/window.h
+      8300 1998-12-31 03:32 lib/Server/include/windowstr.h
+     14501 1998-12-31 03:32 lib/Server/include/mi.h
+      1784 1998-12-31 03:32 lib/Server/include/mibstore.h
+      5089 1998-12-31 03:32 lib/Server/include/miline.h
+      4918 1998-12-31 03:32 lib/Server/include/mipointer.h
+      2815 1998-12-31 03:32 lib/Server/include/misprite.h
+      3560 1998-12-31 03:32 lib/Server/include/mispritest.h
+      2898 1998-12-31 03:32 lib/Server/include/mistruct.h
+      3452 1998-12-31 03:32 lib/Server/include/fastblt.h
+     29294 1998-12-31 03:32 lib/Server/include/mfb.h
+     11229 1998-12-31 03:32 lib/Server/include/mergerop.h
+     31483 1998-12-31 03:32 lib/Server/include/cfb.h
+     51314 1998-12-31 03:33 lib/Server/include/cfb8bit.h
+      7891 1998-12-31 03:33 lib/Server/include/cfbmap.h
+     27790 1998-12-31 03:33 lib/Server/include/cfbmskbits.h
+     13476 1998-12-31 03:33 lib/Server/include/cfbrrop.h
+       856 1998-12-31 03:33 lib/Server/include/xf86Version.h
+     32053 1998-12-31 03:33 lib/Server/include/assyntax.h
+     16879 1998-12-31 03:33 lib/Server/include/xf86_OSlib.h
+      7612 1998-12-31 03:33 lib/Server/include/xf86_OSproc.h
+     16512 1998-12-31 03:33 lib/Server/include/xf86.h
+       367 1998-12-31 03:33 lib/Server/include/xf86ExtInit.h
+      5173 1998-12-31 03:33 lib/Server/include/xf86Priv.h
+      5690 1998-12-31 03:33 lib/Server/include/xf86Procs.h
+     24687 1998-12-31 03:33 lib/Server/include/xf86_Option.h
+     18612 1998-12-31 03:33 lib/Server/include/xf86_Config.h
+       554 1998-12-31 03:33 lib/Server/include/xf86DCConf.h
+     32774 1998-12-31 03:33 lib/Server/include/compiler.h
+     22228 1998-12-31 03:33 lib/Server/include/cfb16.h
+     22207 1998-12-31 03:33 lib/Server/include/cfb24.h
+     22232 1998-12-31 03:33 lib/Server/include/cfb32.h
+      7436 1998-12-31 03:33 lib/Server/include/xf86_HWlib.h
+     12236 1998-12-31 03:33 lib/Server/include/xf86_PCI.h
+      1264 1998-12-31 03:33 lib/Server/include/xf86cursor.h
+     10089 1998-12-31 03:33 lib/Server/include/xf86expblt.h
+     10801 1998-12-31 03:33 lib/Server/include/xf86local.h
+      1316 1998-12-31 03:33 lib/Server/include/xf86scrin.h
+     18366 1998-12-31 03:33 lib/Server/include/xf86xaa.h
+         0 1998-12-31 03:31 lib/Server/config/
+         0 1998-12-31 03:31 lib/Server/config/cf/
+     84341 1998-12-31 03:31 lib/Server/config/cf/Imake.rules
+     26614 1998-12-31 03:31 lib/Server/config/cf/Motif.rules
+     16007 1998-12-31 03:31 lib/Server/config/cf/Win32.rules
+      2482 1998-12-31 03:31 lib/Server/config/cf/X11.rules
+     10226 1998-12-31 03:31 lib/Server/config/cf/bsdLib.rules
+      5951 1998-12-31 03:31 lib/Server/config/cf/cde.rules
+      3640 1998-12-31 03:31 lib/Server/config/cf/gnuLib.rules
+      3797 1998-12-31 03:31 lib/Server/config/cf/hpLib.rules
+      6571 1998-12-31 03:31 lib/Server/config/cf/ibmLib.rules
+     19541 1998-12-31 03:31 lib/Server/config/cf/lnxLib.rules
+      5089 1998-12-31 03:31 lib/Server/config/cf/lnxdoc.rules
+      2899 1998-12-31 03:31 lib/Server/config/cf/necLib.rules
+         1 1998-12-31 03:31 lib/Server/config/cf/noop.rules
+      3045 1998-12-31 03:31 lib/Server/config/cf/oldlib.rules
+     17609 1998-12-31 03:31 lib/Server/config/cf/os2.rules
+      7616 1998-12-31 03:31 lib/Server/config/cf/os2Lib.rules
+      3500 1998-12-31 03:31 lib/Server/config/cf/osfLib.rules
+      1715 1998-12-31 03:31 lib/Server/config/cf/scoLib.rules
+      5340 1998-12-31 03:31 lib/Server/config/cf/sgiLib.rules
+      3233 1998-12-31 03:31 lib/Server/config/cf/sunLib.rules
+      8262 1998-12-31 03:31 lib/Server/config/cf/sv3Lib.rules
+      4337 1998-12-31 03:31 lib/Server/config/cf/sv4Lib.rules
+      4981 1998-12-31 03:31 lib/Server/config/cf/xf86.rules
+     34113 1998-12-31 03:31 lib/Server/config/cf/Imake.tmpl
+     13985 1998-12-31 03:31 lib/Server/config/cf/Library.tmpl
+     13588 1998-12-31 03:31 lib/Server/config/cf/Motif.tmpl
+      2339 1998-12-31 03:31 lib/Server/config/cf/Server.tmpl
+      3971 1998-12-31 03:31 lib/Server/config/cf/ServerLib.tmpl
+      2664 1998-12-31 03:31 lib/Server/config/cf/Threads.tmpl
+       642 1998-12-31 03:31 lib/Server/config/cf/WinLib.tmpl
+     46737 1998-12-31 03:31 lib/Server/config/cf/X11.tmpl
+      1953 1998-12-31 03:31 lib/Server/config/cf/bsdLib.tmpl
+     11004 1998-12-31 03:31 lib/Server/config/cf/cde.tmpl
+      1669 1998-12-31 03:31 lib/Server/config/cf/hpLib.tmpl
+      1115 1998-12-31 03:31 lib/Server/config/cf/gnuLib.tmpl
+      2706 1998-12-31 03:31 lib/Server/config/cf/ibmLib.tmpl
+      1149 1998-12-31 03:31 lib/Server/config/cf/lnxLib.tmpl
+      2238 1998-12-31 03:31 lib/Server/config/cf/lnxdoc.tmpl
+       517 1998-12-31 03:31 lib/Server/config/cf/necLib.tmpl
+      3499 1998-12-31 03:31 lib/Server/config/cf/os2Lib.tmpl
+      2322 1998-12-31 03:31 lib/Server/config/cf/osfLib.tmpl
+       543 1998-12-31 03:31 lib/Server/config/cf/sgiLib.tmpl
+      2971 1998-12-31 03:31 lib/Server/config/cf/sunLib.tmpl
+      2373 1998-12-31 03:31 lib/Server/config/cf/sv3Lib.tmpl
+      1771 1998-12-31 03:31 lib/Server/config/cf/sv4Lib.tmpl
+      2005 1998-12-31 03:31 lib/Server/config/cf/xf86.tmpl
+     15435 1998-12-31 03:31 lib/Server/config/cf/xf86site.def
+      4212 1998-12-31 03:31 lib/Server/config/cf/site.def
+     14842 1998-12-31 03:31 lib/Server/config/cf/Imake.cf
+     13029 1998-12-31 03:31 lib/Server/config/cf/Amoeba.cf
+      5877 1998-12-31 03:31 lib/Server/config/cf/DGUX.cf
+     12291 1998-12-31 03:31 lib/Server/config/cf/FreeBSD.cf
+      2493 1998-12-31 03:31 lib/Server/config/cf/Mips.cf
+      9867 1998-12-31 03:31 lib/Server/config/cf/NetBSD.cf
+     13289 1998-12-31 03:31 lib/Server/config/cf/OpenBSD.cf
+       797 1998-12-31 03:31 lib/Server/config/cf/Oki.cf
+      3292 1998-12-31 03:31 lib/Server/config/cf/Win32.cf
+      1091 1998-12-31 03:31 lib/Server/config/cf/apollo.cf
+       686 1998-12-31 03:31 lib/Server/config/cf/bsd.cf
+      4418 1998-12-31 03:31 lib/Server/config/cf/bsdi.cf
+      2694 1998-12-31 03:31 lib/Server/config/cf/convex.cf
+      1190 1998-12-31 03:31 lib/Server/config/cf/cray.cf
+      2432 1998-12-31 03:31 lib/Server/config/cf/fujitsu.cf
+       403 1998-12-31 03:31 lib/Server/config/cf/generic.cf
+      2797 1998-12-31 03:31 lib/Server/config/cf/gnu.cf
+      5678 1998-12-31 03:31 lib/Server/config/cf/hp.cf
+      5267 1998-12-31 03:31 lib/Server/config/cf/ibm.cf
+      4708 1998-12-31 03:31 lib/Server/config/cf/isc.cf
+      8629 1998-12-31 03:31 lib/Server/config/cf/linux.cf
+      3163 1998-12-31 03:31 lib/Server/config/cf/luna.cf
+      1402 1998-12-31 03:31 lib/Server/config/cf/macII.cf
+      2054 1998-12-31 03:31 lib/Server/config/cf/mach.cf
+      1746 1998-12-31 03:31 lib/Server/config/cf/minix.cf
+      1512 1998-12-31 03:31 lib/Server/config/cf/moto.cf
+      4182 1998-12-31 03:31 lib/Server/config/cf/ncr.cf
+      3050 1998-12-31 03:31 lib/Server/config/cf/nec.cf
+      6672 1998-12-31 03:31 lib/Server/config/cf/os2.cf
+      6147 1998-12-31 03:31 lib/Server/config/cf/osf1.cf
+       880 1998-12-31 03:31 lib/Server/config/cf/pegasus.cf
+      6195 1998-12-31 03:31 lib/Server/config/cf/sco.cf
+      4343 1998-12-31 03:31 lib/Server/config/cf/sco5.cf
+      2114 1998-12-31 03:31 lib/Server/config/cf/sequent.cf
+      7169 1998-12-31 03:31 lib/Server/config/cf/sgi.cf
+      2894 1998-12-31 03:31 lib/Server/config/cf/sony.cf
+     10638 1998-12-31 03:31 lib/Server/config/cf/sun.cf
+      8418 1998-12-31 03:31 lib/Server/config/cf/svr3.cf
+      4434 1998-12-31 03:31 lib/Server/config/cf/svr4.cf
+      2103 1998-12-31 03:31 lib/Server/config/cf/ultrix.cf
+      3481 1998-12-31 03:31 lib/Server/config/cf/usl.cf
+     10033 1998-12-31 03:31 lib/Server/config/cf/lynx.cf
+      4356 1998-12-31 03:31 lib/Server/config/cf/x386.cf
+     23262 1998-12-31 03:31 lib/Server/config/cf/xfree86.cf
+         1 1998-12-31 03:31 lib/Server/config/cf/host.def
+         0 1998-12-31 03:31 lib/Server/config/imake/
+     18554 1998-12-31 03:31 lib/Server/config/imake/imake
+         0 1998-12-31 03:31 lib/Server/config/makedepend/
+     23277 1998-12-31 03:31 lib/Server/config/makedepend/makedepend
+         0 1998-12-31 03:31 lib/Server/config/util/
+      1019 1998-12-31 03:31 lib/Server/config/util/mkdirhier.sh
+      2264 1998-12-31 03:31 lib/Server/config/util/gccmakedep
+         0 1998-12-31 03:38 lib/Server/lib/
+     11176 1998-12-31 03:31 lib/Server/lib/libXau.a
+     36422 1998-12-31 03:31 lib/Server/lib/libXdmcp.a
+    161200 1998-12-31 03:31 lib/Server/lib/liblbxutil.a
+     42952 1998-12-31 03:31 lib/Server/lib/libz.a
+    398450 1998-12-31 03:32 lib/Server/lib/libfont.a
+    264026 1998-12-31 03:32 lib/Server/lib/libdix.a
+       950 1998-12-31 03:32 lib/Server/lib/libxpstubs.a
+    111720 1998-12-31 03:32 lib/Server/lib/libos.a
+    210496 1998-12-31 03:32 lib/Server/lib/libmi.a
+       986 1998-12-31 03:32 lib/Server/lib/libcbrt.a
+     84150 1998-12-31 03:32 lib/Server/lib/libprinter.a
+      2744 1998-12-31 03:32 lib/Server/lib/ddxInit.o
+     82302 1998-12-31 03:32 lib/Server/lib/libpcl.a
+     70152 1998-12-31 03:32 lib/Server/lib/libps.a
+    161086 1998-12-31 03:32 lib/Server/lib/libext.a
+    278322 1998-12-31 03:32 lib/Server/lib/libxkb.a
+     98308 1998-12-31 03:32 lib/Server/lib/libxinput.a
+    151626 1998-12-31 03:32 lib/Server/lib/libdixie.a
+    567328 1998-12-31 03:32 lib/Server/lib/libmixie.a
+     13766 1998-12-31 03:32 lib/Server/lib/libdidipex.a
+     97540 1998-12-31 03:32 lib/Server/lib/libdiswapex.a
+     86522 1998-12-31 03:32 lib/Server/lib/libdiobpex.a
+     27830 1998-12-31 03:32 lib/Server/lib/libddpex1.a
+    245890 1998-12-31 03:32 lib/Server/lib/libddpex2.a
+     14546 1998-12-31 03:32 lib/Server/lib/libddpex3.a
+     54348 1998-12-31 03:32 lib/Server/lib/libddpex4.a
+    109570 1998-12-31 03:32 lib/Server/lib/libddpexs.a
+      5314 1998-12-31 03:32 lib/Server/lib/libospex.a
+       918 1998-12-31 03:32 lib/Server/lib/libServerGlx.a
+     72658 1998-12-31 03:32 lib/Server/lib/liblbx.a
+     13824 1998-12-31 03:32 lib/Server/lib/libdbe.a
+     20736 1998-12-31 03:32 lib/Server/lib/librecord.a
+    143106 1998-12-31 03:32 lib/Server/lib/libmfb.a
+    201544 1998-12-31 03:32 lib/Server/lib/libcfb.a
+    163726 1998-12-31 03:33 lib/Server/lib/libcfb16.a
+    202474 1998-12-31 03:33 lib/Server/lib/libcfb24.a
+    139622 1998-12-31 03:33 lib/Server/lib/libcfb32.a
+    153090 1998-12-31 03:33 lib/Server/lib/libxaa.a
+     17638 1998-12-31 03:33 lib/Server/lib/xaavga256.o
+     14416 1998-12-31 03:33 lib/Server/lib/xaa8.o
+     18569 1998-12-31 03:33 lib/Server/lib/xaa16.o
+     14913 1998-12-31 03:33 lib/Server/lib/xaa24.o
+     18425 1998-12-31 03:33 lib/Server/lib/xaa32.o
+      8482 1998-12-31 03:36 lib/Server/lib/libxf86cache.a
+     74998 1998-12-31 03:38 lib/Server/lib/libxnest.a
+      7092 1998-12-31 03:32 lib/Server/miinitext.c
+       387 1998-12-31 03:33 lib/Server/xf86_Option.c
+       763 1998-12-31 03:33 lib/Server/XF86_SVGA.c
+      1122 1998-12-31 03:33 lib/Server/XF86_VGA16.c
+      1043 1998-12-31 03:33 lib/Server/XF86_S3.c
+      1008 1998-12-31 03:33 lib/Server/XF86_GLINT.c
+       747 1998-12-31 03:34 lib/Server/cvga16.sh
+       753 1998-12-31 03:34 lib/Server/cvga256.sh
+         0 1998-12-31 03:36 lib/Server/VGADriverDoc/
+     36008 1998-12-31 03:34 lib/Server/VGADriverDoc/vgaHW.c
+     47777 1998-12-31 03:36 lib/Server/VGADriverDoc/VGADriver.Doc
+      2114 1998-12-31 03:36 lib/Server/VGADriverDoc/Imakefile.stub
+     27201 1998-12-31 03:36 lib/Server/VGADriverDoc/stub_driver.c
+      4756 1998-12-31 03:36 lib/Server/VGADriverDoc/stub_bank.s
+       712 1998-12-31 03:35 lib/Server/confS3.sh
+       722 1998-12-31 03:35 lib/Server/confS3V.sh
+      3091 1998-12-31 03:36 lib/Server/LinkKit.tmpl
+     33089 1998-12-31 03:36 lib/Server/Imakefile
+      6834 1998-12-31 03:36 lib/Server/xf86site.def
+       857 1998-12-31 03:36 lib/Server/mkmf
+      7241 1998-12-31 03:36 lib/Server/README
+         0 1998-12-31 03:36 lib/Server/lib98/
+     25780 1998-12-31 03:36 lib/Server/lib98/libxf86_os.a
+    122660 1998-12-31 03:36 lib/Server/lib98/libxf86.a
+     13300 1998-12-31 03:36 lib/Server/lib98/xf86Init.o
+     11708 1998-12-31 03:36 lib/Server/lib98/xf86Init_m.o
+     41862 1998-12-31 03:36 lib/Server/lib98/libxf86_hwgen.a
+     50990 1998-12-31 03:36 lib/Server/lib98/libxf86_hwnec.a
+     45298 1998-12-31 03:36 lib/Server/lib98/libxf86_hwpwskb.a
+     46574 1998-12-31 03:36 lib/Server/lib98/libxf86_hwpwlb.a
+     41862 1998-12-31 03:36 lib/Server/lib98/libxf86_hwga968.a
+         0 1998-12-31 03:38 lib/Server/drivers98/
+    326424 1998-12-31 03:36 lib/Server/drivers98/libvga16.a
+         0 1998-12-31 03:36 lib/Server/drivers98/vga16/
+       715 1998-12-31 03:36 lib/Server/drivers98/vga16/Imakefile
+         0 1998-12-31 03:36 lib/Server/drivers98/vga16/generic/
+       928 1998-12-31 03:36 lib/Server/drivers98/vga16/generic/Imakefile
+      6525 1998-12-31 03:36 lib/Server/drivers98/vga16/generic/gen_driver.c
+     23096 1998-12-31 03:36 lib/Server/drivers98/vga16misc.o
+    385282 1998-12-31 03:37 lib/Server/drivers98/libganbwap.a
+    381498 1998-12-31 03:37 lib/Server/drivers98/libnec480.a
+    385386 1998-12-31 03:37 lib/Server/drivers98/libnkvnec.a
+    386042 1998-12-31 03:37 lib/Server/drivers98/libtrident.a
+    383346 1998-12-31 03:37 lib/Server/drivers98/libmga.a
+    384914 1998-12-31 03:37 lib/Server/drivers98/libvga256.a
+    384774 1998-12-31 03:37 lib/Server/drivers98/libwabep.a
+    384774 1998-12-31 03:37 lib/Server/drivers98/libwabs.a
+    385282 1998-12-31 03:37 lib/Server/drivers98/libwsna.a
+     11740 1998-12-31 03:37 lib/Server/drivers98/vga.h
+     19279 1998-12-31 03:37 lib/Server/drivers98/vga256.h
+      5318 1998-12-31 03:37 lib/Server/drivers98/vgaBank.h
+     14925 1998-12-31 03:37 lib/Server/drivers98/vgaFasm.h
+     13646 1998-12-31 03:37 lib/Server/drivers98/vgaPCI.h
+         0 1998-12-31 03:38 lib/Server/drivers98/vga256/
+      2280 1998-12-31 03:37 lib/Server/drivers98/vga256/Imakefile
+         0 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/
+    159142 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_driver.c
+     22331 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_driver.h
+      3605 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_bank.s
+      7073 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_fill.c
+     12664 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_im.c
+      7989 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_blt.c
+     10375 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_bltC.c
+     18417 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_imblt.s
+     22216 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_textblt.s
+     40234 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_span.s
+     36402 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_colexp.c
+     14878 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cirFillSt.c
+     13972 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_solid.c
+     19003 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_teblt8.c
+      8851 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cirFillRct.c
+     27290 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_cursor.c
+     20740 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_blitter.c
+     21561 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_blitLG.c
+     12342 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_fillLG.c
+      6027 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_alloc.c
+     17724 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_blt16.c
+     16643 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_line.c
+     10425 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_orect.c
+      5335 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cirBlitter.h
+       827 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_span.h
+       966 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_alloc.h
+      5610 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cirBlitMM.h
+      8144 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_blitLG.h
+      3227 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_inline.h
+     40458 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cirrus_acl.c
+     16170 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/laguna_acl.c
+      7163 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/Imakefile
+     10746 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/linearline.c
+      1092 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/linearline.h
+     25141 1998-12-31 03:37 lib/Server/drivers98/vga256/ganbwap/cir_pc98.c
+         0 1998-12-31 03:37 lib/Server/drivers98/vga256/nec480/
+     11449 1998-12-31 03:37 lib/Server/drivers98/vga256/nec480/nec480_dr.c
+       919 1998-12-31 03:37 lib/Server/drivers98/vga256/nec480/bank.s
+      1007 1998-12-31 03:37 lib/Server/drivers98/vga256/nec480/Imakefile
+         0 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/
+    159142 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_driver.c
+     22331 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_driver.h
+      3605 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_bank.s
+      7073 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_fill.c
+     12664 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_im.c
+      7989 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_blt.c
+     10375 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_bltC.c
+     18417 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_imblt.s
+     22216 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_textblt.s
+     40234 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_span.s
+     36402 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_colexp.c
+     14878 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cirFillSt.c
+     13972 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_solid.c
+     19003 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_teblt8.c
+      8851 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cirFillRct.c
+     27290 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_cursor.c
+     20740 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_blitter.c
+     21561 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_blitLG.c
+     12342 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_fillLG.c
+      6027 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_alloc.c
+     17724 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_blt16.c
+     16643 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_line.c
+     10425 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_orect.c
+      5335 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cirBlitter.h
+       827 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_span.h
+       966 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_alloc.h
+      5610 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cirBlitMM.h
+      8144 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_blitLG.h
+      3227 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_inline.h
+     40458 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cirrus_acl.c
+     16170 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/laguna_acl.c
+      7124 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/Imakefile
+     10746 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/linearline.c
+      1092 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/linearline.h
+     25141 1998-12-31 03:37 lib/Server/drivers98/vga256/nkvnec/cir_pc98.c
+         0 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/
+    159142 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_driver.c
+     22331 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_driver.h
+      3605 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_bank.s
+      7073 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_fill.c
+     12664 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_im.c
+      7989 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_blt.c
+     10375 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_bltC.c
+     18417 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_imblt.s
+     22216 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_textblt.s
+     40234 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_span.s
+     36402 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_colexp.c
+     14878 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cirFillSt.c
+     13972 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_solid.c
+     19003 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_teblt8.c
+      8851 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cirFillRct.c
+     27290 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_cursor.c
+     20740 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_blitter.c
+     21561 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_blitLG.c
+     12342 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_fillLG.c
+      6027 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_alloc.c
+     17724 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_blt16.c
+     16643 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_line.c
+     10425 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_orect.c
+      5335 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cirBlitter.h
+       827 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_span.h
+       966 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_alloc.h
+      5610 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cirBlitMM.h
+      8144 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_blitLG.h
+      3227 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_inline.h
+     40458 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cirrus_acl.c
+     16170 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/laguna_acl.c
+      7047 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/Imakefile
+     10746 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/linearline.c
+      1092 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/linearline.h
+     25141 1998-12-31 03:37 lib/Server/drivers98/vga256/wabs/cir_pc98.c
+         0 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/
+    159142 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_driver.c
+     22331 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_driver.h
+      3605 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_bank.s
+      7073 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_fill.c
+     12664 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_im.c
+      7989 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_blt.c
+     10375 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_bltC.c
+     18417 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_imblt.s
+     22216 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_textblt.s
+     40234 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_span.s
+     36402 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_colexp.c
+     14878 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cirFillSt.c
+     13972 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_solid.c
+     19003 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_teblt8.c
+      8851 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cirFillRct.c
+     27290 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_cursor.c
+     20740 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_blitter.c
+     21561 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_blitLG.c
+     12342 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_fillLG.c
+      6027 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_alloc.c
+     17724 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_blt16.c
+     16643 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_line.c
+     10425 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_orect.c
+      5335 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cirBlitter.h
+       827 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_span.h
+       966 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_alloc.h
+      5610 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cirBlitMM.h
+      8144 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_blitLG.h
+      3227 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_inline.h
+     40458 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cirrus_acl.c
+     16170 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/laguna_acl.c
+      7014 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/Imakefile
+     10746 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/linearline.c
+      1092 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/linearline.h
+     25141 1998-12-31 03:37 lib/Server/drivers98/vga256/wabep/cir_pc98.c
+         0 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/
+    159142 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_driver.c
+     22331 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_driver.h
+      3605 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_bank.s
+      7073 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_fill.c
+     12664 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_im.c
+      7989 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_blt.c
+     10375 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_bltC.c
+     18417 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_imblt.s
+     22216 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_textblt.s
+     40234 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_span.s
+     36402 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_colexp.c
+     14878 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cirFillSt.c
+     13972 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_solid.c
+     19003 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_teblt8.c
+      8851 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cirFillRct.c
+     27290 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_cursor.c
+     20740 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_blitter.c
+     21561 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_blitLG.c
+     12342 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_fillLG.c
+      6027 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_alloc.c
+     17724 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_blt16.c
+     16643 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_line.c
+     10425 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_orect.c
+      5335 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cirBlitter.h
+       827 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_span.h
+       966 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_alloc.h
+      5610 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cirBlitMM.h
+      8144 1998-12-31 03:37 lib/Server/drivers98/vga256/wsna/cir_blitLG.h
+      3227 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/cir_inline.h
+     40458 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/cirrus_acl.c
+     16170 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/laguna_acl.c
+      6976 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/Imakefile
+     10746 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/linearline.c
+      1092 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/linearline.h
+     25141 1998-12-31 03:38 lib/Server/drivers98/vga256/wsna/cir_pc98.c
+         0 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/
+     65311 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/t89_driver.c
+      4047 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/t89_driver.h
+      3008 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/bank.s
+     13721 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/tgui_curs.c
+     15524 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/tgui_accel.c
+     11340 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/tgui_oldacl.c
+      1780 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/tgui_drv.h
+      5517 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/tgui_ger.h
+      9163 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/tgui_mmio.h
+      3041 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/Imakefile
+      1072 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/pc98_tgui.h
+     13127 1998-12-31 03:38 lib/Server/drivers98/vga256/trident/pc98_tgui.c
+         0 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/
+      4114 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga.h
+      3670 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_bios.h
+     10173 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_reg.h
+     36917 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_driver.c
+      3306 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_hwcurs.c
+     29268 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_storm.c
+       557 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_map.h
+       958 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_macros.h
+     37714 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_dac3026.c
+     28004 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_dac1064.c
+     14601 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_dacG200.c
+      9691 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/mga_xaarepl.c
+      3120 1998-12-31 03:38 lib/Server/drivers98/vga256/mga/Imakefile
+         0 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/
+    159142 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_driver.c
+     22331 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_driver.h
+      3605 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_bank.s
+      7073 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_fill.c
+     12664 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_im.c
+      7989 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_blt.c
+     10375 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_bltC.c
+     18417 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_imblt.s
+     22216 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_textblt.s
+     40234 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_span.s
+     36402 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_colexp.c
+     14878 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cirFillSt.c
+     13972 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_solid.c
+     19003 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_teblt8.c
+      8851 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cirFillRct.c
+     27290 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_cursor.c
+     20740 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_blitter.c
+     21561 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_blitLG.c
+     12342 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_fillLG.c
+      6027 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_alloc.c
+     17724 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_blt16.c
+     16643 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_line.c
+     10425 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_orect.c
+      5335 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cirBlitter.h
+       827 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_span.h
+       966 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_alloc.h
+      5610 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cirBlitMM.h
+      8144 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_blitLG.h
+      3227 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_inline.h
+     40458 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cirrus_acl.c
+     16170 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/laguna_acl.c
+      7051 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/Imakefile
+     10746 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/linearline.c
+      1092 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/linearline.h
+     25141 1998-12-31 03:38 lib/Server/drivers98/vga256/svga/cir_pc98.c
+    413250 1998-12-31 03:38 lib/Server/drivers98/libs3nec.a
+     19289 1998-12-31 03:38 lib/Server/drivers98/s3.h
+     14936 1998-12-31 03:38 lib/Server/drivers98/regs3.h
+     10242 1998-12-31 03:38 lib/Server/drivers98/newmmio.h
+    185490 1998-12-31 03:38 lib/Server/drivers98/libs3necnewmmio.a
+    198374 1998-12-31 03:38 lib/Server/drivers98/libs3necmmio.a
+         0 1998-12-31 03:38 lib/Server/drivers98/s3nec/
+       380 1998-12-31 03:38 lib/Server/drivers98/s3nec/Imakefile
+         0 1998-12-31 03:38 lib/Server/drivers98/s3nec/newmmio/
+       814 1998-12-31 03:38 lib/Server/drivers98/s3nec/newmmio/Imakefile
+      3020 1998-12-31 03:38 lib/Server/drivers98/s3nec/newmmio/newmmio.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3nec/mmio_928/
+       889 1998-12-31 03:38 lib/Server/drivers98/s3nec/mmio_928/Imakefile
+      2678 1998-12-31 03:38 lib/Server/drivers98/s3nec/mmio_928/mmio_928.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3nec/s3_generic/
+      2355 1998-12-31 03:38 lib/Server/drivers98/s3nec/s3_generic/s3_generic.c
+       907 1998-12-31 03:38 lib/Server/drivers98/s3nec/s3_generic/Imakefile
+    356430 1998-12-31 03:38 lib/Server/drivers98/libs3pwskb.a
+    169918 1998-12-31 03:38 lib/Server/drivers98/libs3pwskbnewmmio.a
+    180522 1998-12-31 03:38 lib/Server/drivers98/libs3pwskbmmio.a
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/
+       383 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/Imakefile
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/newmmio/
+       887 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/newmmio/Imakefile
+      3020 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/newmmio/newmmio.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/mmio_928/
+       895 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/mmio_928/Imakefile
+      2678 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/mmio_928/mmio_928.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/s3_generic/
+      2355 1998-12-31 03:38 
lib/Server/drivers98/s3pwskb/s3_generic/s3_generic.c
+       913 1998-12-31 03:38 lib/Server/drivers98/s3pwskb/s3_generic/Imakefile
+    365726 1998-12-31 03:38 lib/Server/drivers98/libs3pwlb.a
+    174702 1998-12-31 03:38 lib/Server/drivers98/libs3pwlbnewmmio.a
+    185878 1998-12-31 03:38 lib/Server/drivers98/libs3pwlbmmio.a
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/
+       381 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/Imakefile
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/newmmio/
+       884 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/newmmio/Imakefile
+      3020 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/newmmio/newmmio.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/mmio_928/
+       892 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/mmio_928/Imakefile
+      2678 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/mmio_928/mmio_928.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/s3_generic/
+      2355 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/s3_generic/s3_generic.c
+       908 1998-12-31 03:38 lib/Server/drivers98/s3pwlb/s3_generic/Imakefile
+    327354 1998-12-31 03:38 lib/Server/drivers98/libs3ga968.a
+    163122 1998-12-31 03:38 lib/Server/drivers98/libs3ga968newmmio.a
+    172490 1998-12-31 03:38 lib/Server/drivers98/libs3ga968mmio.a
+         0 1998-12-31 03:38 lib/Server/drivers98/s3ga968/
+       384 1998-12-31 03:38 lib/Server/drivers98/s3ga968/Imakefile
+         0 1998-12-31 03:38 lib/Server/drivers98/s3ga968/newmmio/
+       887 1998-12-31 03:38 lib/Server/drivers98/s3ga968/newmmio/Imakefile
+      3020 1998-12-31 03:38 lib/Server/drivers98/s3ga968/newmmio/newmmio.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3ga968/mmio_928/
+       896 1998-12-31 03:38 lib/Server/drivers98/s3ga968/mmio_928/Imakefile
+      2678 1998-12-31 03:38 lib/Server/drivers98/s3ga968/mmio_928/mmio_928.c
+         0 1998-12-31 03:38 lib/Server/drivers98/s3ga968/s3_generic/
+      2355 1998-12-31 03:38 
lib/Server/drivers98/s3ga968/s3_generic/s3_generic.c
+       913 1998-12-31 03:38 lib/Server/drivers98/s3ga968/s3_generic/Imakefile
+       751 1998-12-31 03:37 lib/Server/cnec480.sh
+       749 1998-12-31 03:37 lib/Server/ctgui.sh
+       751 1998-12-31 03:37 lib/Server/cmga.sh

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlkit.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlkit.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlkit.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xlkit.txt  3 Mar 
2012 06:14:52 -0000       1.1
@@ -0,0 +1,788 @@
+         0 1998-12-31 03:37 lib/Server/
+         0 1998-12-31 03:33 lib/Server/include/
+         0 1998-12-31 03:31 lib/Server/include/X11/
+     19772 1998-12-31 03:31 lib/Server/include/X11/X.h
+      5330 1998-12-31 03:31 lib/Server/include/X11/Xalloca.h
+      2881 1998-12-31 03:31 lib/Server/include/X11/Xfuncproto.h
+      3357 1998-12-31 03:31 lib/Server/include/X11/Xfuncs.h
+      6776 1998-12-31 03:31 lib/Server/include/X11/Xmd.h
+      7406 1998-12-31 03:31 lib/Server/include/X11/Xos.h
+      3122 1998-12-31 03:31 lib/Server/include/X11/Xosdefs.h
+     56098 1998-12-31 03:31 lib/Server/include/X11/Xproto.h
+      3008 1998-12-31 03:31 lib/Server/include/X11/Xprotostr.h
+         0 1998-12-31 03:31 lib/Server/include/X11/extensions/
+      1962 1998-12-31 03:31 lib/Server/include/X11/extensions/saver.h
+      4656 1998-12-31 03:31 lib/Server/include/X11/extensions/saverproto.h
+      4510 1998-12-31 03:31 lib/Server/include/X11/extensions/scrnsaver.h
+      6908 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86vmode.h
+      8361 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86vmstr.h
+      3263 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86dga.h
+      5045 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86dgastr.h
+      2958 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86misc.h
+      4328 1998-12-31 03:31 lib/Server/include/X11/extensions/xf86mscstr.h
+      1672 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxbuf.h
+      1635 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxbufstr.h
+      2654 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxdeltastr.h
+      4301 1998-12-31 03:31 lib/Server/include/X11/extensions/lbximage.h
+      3587 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxopts.h
+     24129 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxstr.h
+      1894 1998-12-31 03:31 lib/Server/include/X11/extensions/lbxzlib.h
+      1662 1998-12-31 03:31 lib/Server/include/X11/extensions/dpms.h
+      4982 1998-12-31 03:31 lib/Server/include/X11/extensions/dpmsstr.h
+     10645 1998-12-31 03:31 lib/Server/include/fontstruct.h
+      4746 1998-12-31 03:31 lib/Server/include/font.h
+      4196 1998-12-31 03:31 lib/Server/include/fsmasks.h
+      2757 1998-12-31 03:32 lib/Server/include/closure.h
+      5873 1998-12-31 03:32 lib/Server/include/colormap.h
+      4263 1998-12-31 03:32 lib/Server/include/colormapst.h
+      4430 1998-12-31 03:32 lib/Server/include/cursor.h
+      3456 1998-12-31 03:32 lib/Server/include/cursorstr.h
+     24156 1998-12-31 03:32 lib/Server/include/dix.h
+      8885 1998-12-31 03:32 lib/Server/include/dixfont.h
+      3542 1998-12-31 03:32 lib/Server/include/dixfontstr.h
+      5766 1998-12-31 03:32 lib/Server/include/dixstruct.h
+      2974 1998-12-31 03:32 lib/Server/include/extension.h
+      5734 1998-12-31 03:32 lib/Server/include/extnsionst.h
+      5809 1998-12-31 03:32 lib/Server/include/gc.h
+      8836 1998-12-31 03:32 lib/Server/include/gcstruct.h
+     11970 1998-12-31 03:32 lib/Server/include/input.h
+      9780 1998-12-31 03:32 lib/Server/include/inputstr.h
+      8923 1998-12-31 03:32 lib/Server/include/misc.h
+      2993 1998-12-31 03:32 lib/Server/include/miscstruct.h
+      2495 1998-12-31 03:32 lib/Server/include/opaque.h
+     15237 1998-12-31 03:32 lib/Server/include/os.h
+      4019 1998-12-31 03:32 lib/Server/include/pixmap.h
+      3340 1998-12-31 03:32 lib/Server/include/pixmapstr.h
+      3046 1998-12-31 03:32 lib/Server/include/property.h
+      7586 1998-12-31 03:32 lib/Server/include/resource.h
+      2562 1998-12-31 03:32 lib/Server/include/region.h
+     10756 1998-12-31 03:32 lib/Server/include/regionstr.h
+      4514 1998-12-31 03:32 lib/Server/include/screenint.h
+     20788 1998-12-31 03:32 lib/Server/include/scrnintstr.h
+     18155 1998-12-31 03:32 lib/Server/include/servermd.h
+      5106 1998-12-31 03:32 lib/Server/include/site.h
+      1682 1998-12-31 03:32 lib/Server/include/validate.h
+      7580 1998-12-31 03:32 lib/Server/include/window.h
+      8300 1998-12-31 03:32 lib/Server/include/windowstr.h
+     14501 1998-12-31 03:32 lib/Server/include/mi.h
+      1784 1998-12-31 03:32 lib/Server/include/mibstore.h
+      5089 1998-12-31 03:32 lib/Server/include/miline.h
+      4918 1998-12-31 03:32 lib/Server/include/mipointer.h
+      2815 1998-12-31 03:32 lib/Server/include/misprite.h
+      3560 1998-12-31 03:32 lib/Server/include/mispritest.h
+      2898 1998-12-31 03:32 lib/Server/include/mistruct.h
+      3452 1998-12-31 03:32 lib/Server/include/fastblt.h
+     29294 1998-12-31 03:32 lib/Server/include/mfb.h
+     11229 1998-12-31 03:32 lib/Server/include/mergerop.h
+     31483 1998-12-31 03:32 lib/Server/include/cfb.h
+     51314 1998-12-31 03:33 lib/Server/include/cfb8bit.h
+      7891 1998-12-31 03:33 lib/Server/include/cfbmap.h
+     27790 1998-12-31 03:33 lib/Server/include/cfbmskbits.h
+     13476 1998-12-31 03:33 lib/Server/include/cfbrrop.h
+       856 1998-12-31 03:33 lib/Server/include/xf86Version.h
+     32053 1998-12-31 03:33 lib/Server/include/assyntax.h
+     16879 1998-12-31 03:33 lib/Server/include/xf86_OSlib.h
+      7612 1998-12-31 03:33 lib/Server/include/xf86_OSproc.h
+     16512 1998-12-31 03:33 lib/Server/include/xf86.h
+       367 1998-12-31 03:33 lib/Server/include/xf86ExtInit.h
+      5173 1998-12-31 03:33 lib/Server/include/xf86Priv.h
+      5690 1998-12-31 03:33 lib/Server/include/xf86Procs.h
+     24687 1998-12-31 03:33 lib/Server/include/xf86_Option.h
+     18612 1998-12-31 03:33 lib/Server/include/xf86_Config.h
+       554 1998-12-31 03:33 lib/Server/include/xf86DCConf.h
+     32774 1998-12-31 03:33 lib/Server/include/compiler.h
+     22228 1998-12-31 03:33 lib/Server/include/cfb16.h
+     22207 1998-12-31 03:33 lib/Server/include/cfb24.h
+     22232 1998-12-31 03:33 lib/Server/include/cfb32.h
+      7436 1998-12-31 03:33 lib/Server/include/xf86_HWlib.h
+     12236 1998-12-31 03:33 lib/Server/include/xf86_PCI.h
+      1264 1998-12-31 03:33 lib/Server/include/xf86cursor.h
+     10089 1998-12-31 03:33 lib/Server/include/xf86expblt.h
+     10801 1998-12-31 03:33 lib/Server/include/xf86local.h
+      1316 1998-12-31 03:33 lib/Server/include/xf86scrin.h
+     18366 1998-12-31 03:33 lib/Server/include/xf86xaa.h
+         0 1998-12-31 03:31 lib/Server/config/
+         0 1998-12-31 03:31 lib/Server/config/cf/
+     84341 1998-12-31 03:31 lib/Server/config/cf/Imake.rules
+     26614 1998-12-31 03:31 lib/Server/config/cf/Motif.rules
+     16007 1998-12-31 03:31 lib/Server/config/cf/Win32.rules
+      2482 1998-12-31 03:31 lib/Server/config/cf/X11.rules
+     10226 1998-12-31 03:31 lib/Server/config/cf/bsdLib.rules
+      5951 1998-12-31 03:31 lib/Server/config/cf/cde.rules
+      3640 1998-12-31 03:31 lib/Server/config/cf/gnuLib.rules
+      3797 1998-12-31 03:31 lib/Server/config/cf/hpLib.rules
+      6571 1998-12-31 03:31 lib/Server/config/cf/ibmLib.rules
+     19541 1998-12-31 03:31 lib/Server/config/cf/lnxLib.rules
+      5089 1998-12-31 03:31 lib/Server/config/cf/lnxdoc.rules
+      2899 1998-12-31 03:31 lib/Server/config/cf/necLib.rules
+         1 1998-12-31 03:31 lib/Server/config/cf/noop.rules
+      3045 1998-12-31 03:31 lib/Server/config/cf/oldlib.rules
+     17609 1998-12-31 03:31 lib/Server/config/cf/os2.rules
+      7616 1998-12-31 03:31 lib/Server/config/cf/os2Lib.rules
+      3500 1998-12-31 03:31 lib/Server/config/cf/osfLib.rules
+      1715 1998-12-31 03:31 lib/Server/config/cf/scoLib.rules
+      5340 1998-12-31 03:31 lib/Server/config/cf/sgiLib.rules
+      3233 1998-12-31 03:31 lib/Server/config/cf/sunLib.rules
+      8262 1998-12-31 03:31 lib/Server/config/cf/sv3Lib.rules
+      4337 1998-12-31 03:31 lib/Server/config/cf/sv4Lib.rules
+      4981 1998-12-31 03:31 lib/Server/config/cf/xf86.rules
+     34113 1998-12-31 03:31 lib/Server/config/cf/Imake.tmpl
+     13985 1998-12-31 03:31 lib/Server/config/cf/Library.tmpl
+     13588 1998-12-31 03:31 lib/Server/config/cf/Motif.tmpl
+      2339 1998-12-31 03:31 lib/Server/config/cf/Server.tmpl
+      3971 1998-12-31 03:31 lib/Server/config/cf/ServerLib.tmpl
+      2664 1998-12-31 03:31 lib/Server/config/cf/Threads.tmpl
+       642 1998-12-31 03:31 lib/Server/config/cf/WinLib.tmpl
+     46737 1998-12-31 03:31 lib/Server/config/cf/X11.tmpl
+      1953 1998-12-31 03:31 lib/Server/config/cf/bsdLib.tmpl
+     11004 1998-12-31 03:31 lib/Server/config/cf/cde.tmpl
+      1669 1998-12-31 03:31 lib/Server/config/cf/hpLib.tmpl
+      1115 1998-12-31 03:31 lib/Server/config/cf/gnuLib.tmpl
+      2706 1998-12-31 03:31 lib/Server/config/cf/ibmLib.tmpl
+      1149 1998-12-31 03:31 lib/Server/config/cf/lnxLib.tmpl
+      2238 1998-12-31 03:31 lib/Server/config/cf/lnxdoc.tmpl
+       517 1998-12-31 03:31 lib/Server/config/cf/necLib.tmpl
+      3499 1998-12-31 03:31 lib/Server/config/cf/os2Lib.tmpl
+      2322 1998-12-31 03:31 lib/Server/config/cf/osfLib.tmpl
+       543 1998-12-31 03:31 lib/Server/config/cf/sgiLib.tmpl
+      2971 1998-12-31 03:31 lib/Server/config/cf/sunLib.tmpl
+      2373 1998-12-31 03:31 lib/Server/config/cf/sv3Lib.tmpl
+      1771 1998-12-31 03:31 lib/Server/config/cf/sv4Lib.tmpl
+      2005 1998-12-31 03:31 lib/Server/config/cf/xf86.tmpl
+     15435 1998-12-31 03:31 lib/Server/config/cf/xf86site.def
+      4212 1998-12-31 03:31 lib/Server/config/cf/site.def
+     14842 1998-12-31 03:31 lib/Server/config/cf/Imake.cf
+     13029 1998-12-31 03:31 lib/Server/config/cf/Amoeba.cf
+      5877 1998-12-31 03:31 lib/Server/config/cf/DGUX.cf
+     12291 1998-12-31 03:31 lib/Server/config/cf/FreeBSD.cf
+      2493 1998-12-31 03:31 lib/Server/config/cf/Mips.cf
+      9867 1998-12-31 03:31 lib/Server/config/cf/NetBSD.cf
+     13289 1998-12-31 03:31 lib/Server/config/cf/OpenBSD.cf
+       797 1998-12-31 03:31 lib/Server/config/cf/Oki.cf
+      3292 1998-12-31 03:31 lib/Server/config/cf/Win32.cf
+      1091 1998-12-31 03:31 lib/Server/config/cf/apollo.cf
+       686 1998-12-31 03:31 lib/Server/config/cf/bsd.cf
+      4418 1998-12-31 03:31 lib/Server/config/cf/bsdi.cf
+      2694 1998-12-31 03:31 lib/Server/config/cf/convex.cf
+      1190 1998-12-31 03:31 lib/Server/config/cf/cray.cf
+      2432 1998-12-31 03:31 lib/Server/config/cf/fujitsu.cf
+       403 1998-12-31 03:31 lib/Server/config/cf/generic.cf
+      2797 1998-12-31 03:31 lib/Server/config/cf/gnu.cf
+      5678 1998-12-31 03:31 lib/Server/config/cf/hp.cf
+      5267 1998-12-31 03:31 lib/Server/config/cf/ibm.cf
+      4708 1998-12-31 03:31 lib/Server/config/cf/isc.cf
+      8629 1998-12-31 03:31 lib/Server/config/cf/linux.cf
+      3163 1998-12-31 03:31 lib/Server/config/cf/luna.cf
+      1402 1998-12-31 03:31 lib/Server/config/cf/macII.cf
+      2054 1998-12-31 03:31 lib/Server/config/cf/mach.cf
+      1746 1998-12-31 03:31 lib/Server/config/cf/minix.cf
+      1512 1998-12-31 03:31 lib/Server/config/cf/moto.cf
+      4182 1998-12-31 03:31 lib/Server/config/cf/ncr.cf
+      3050 1998-12-31 03:31 lib/Server/config/cf/nec.cf
+      6672 1998-12-31 03:31 lib/Server/config/cf/os2.cf
+      6147 1998-12-31 03:31 lib/Server/config/cf/osf1.cf
+       880 1998-12-31 03:31 lib/Server/config/cf/pegasus.cf
+      6195 1998-12-31 03:31 lib/Server/config/cf/sco.cf
+      4343 1998-12-31 03:31 lib/Server/config/cf/sco5.cf
+      2114 1998-12-31 03:31 lib/Server/config/cf/sequent.cf
+      7169 1998-12-31 03:31 lib/Server/config/cf/sgi.cf
+      2894 1998-12-31 03:31 lib/Server/config/cf/sony.cf
+     10638 1998-12-31 03:31 lib/Server/config/cf/sun.cf
+      8418 1998-12-31 03:31 lib/Server/config/cf/svr3.cf
+      4434 1998-12-31 03:31 lib/Server/config/cf/svr4.cf
+      2103 1998-12-31 03:31 lib/Server/config/cf/ultrix.cf
+      3481 1998-12-31 03:31 lib/Server/config/cf/usl.cf
+     10033 1998-12-31 03:31 lib/Server/config/cf/lynx.cf
+      4356 1998-12-31 03:31 lib/Server/config/cf/x386.cf
+     23262 1998-12-31 03:31 lib/Server/config/cf/xfree86.cf
+         1 1998-12-31 03:31 lib/Server/config/cf/host.def
+         0 1998-12-31 03:31 lib/Server/config/imake/
+     18554 1998-12-31 03:31 lib/Server/config/imake/imake
+         0 1998-12-31 03:31 lib/Server/config/makedepend/
+     23277 1998-12-31 03:31 lib/Server/config/makedepend/makedepend
+         0 1998-12-31 03:31 lib/Server/config/util/
+      1019 1998-12-31 03:31 lib/Server/config/util/mkdirhier.sh
+      2264 1998-12-31 03:31 lib/Server/config/util/gccmakedep
+         0 1998-12-31 03:38 lib/Server/lib/
+     11176 1998-12-31 03:31 lib/Server/lib/libXau.a
+     36422 1998-12-31 03:31 lib/Server/lib/libXdmcp.a
+    161200 1998-12-31 03:31 lib/Server/lib/liblbxutil.a
+     42952 1998-12-31 03:31 lib/Server/lib/libz.a
+    398450 1998-12-31 03:32 lib/Server/lib/libfont.a
+    264026 1998-12-31 03:32 lib/Server/lib/libdix.a
+       950 1998-12-31 03:32 lib/Server/lib/libxpstubs.a
+    111720 1998-12-31 03:32 lib/Server/lib/libos.a
+    210496 1998-12-31 03:32 lib/Server/lib/libmi.a
+       986 1998-12-31 03:32 lib/Server/lib/libcbrt.a
+     84150 1998-12-31 03:32 lib/Server/lib/libprinter.a
+      2744 1998-12-31 03:32 lib/Server/lib/ddxInit.o
+     82302 1998-12-31 03:32 lib/Server/lib/libpcl.a
+     70152 1998-12-31 03:32 lib/Server/lib/libps.a
+    161086 1998-12-31 03:32 lib/Server/lib/libext.a
+    278322 1998-12-31 03:32 lib/Server/lib/libxkb.a
+     98308 1998-12-31 03:32 lib/Server/lib/libxinput.a
+    151626 1998-12-31 03:32 lib/Server/lib/libdixie.a
+    567328 1998-12-31 03:32 lib/Server/lib/libmixie.a
+     13766 1998-12-31 03:32 lib/Server/lib/libdidipex.a
+     97540 1998-12-31 03:32 lib/Server/lib/libdiswapex.a
+     86522 1998-12-31 03:32 lib/Server/lib/libdiobpex.a
+     27830 1998-12-31 03:32 lib/Server/lib/libddpex1.a
+    245890 1998-12-31 03:32 lib/Server/lib/libddpex2.a
+     14546 1998-12-31 03:32 lib/Server/lib/libddpex3.a
+     54348 1998-12-31 03:32 lib/Server/lib/libddpex4.a
+    109570 1998-12-31 03:32 lib/Server/lib/libddpexs.a
+      5314 1998-12-31 03:32 lib/Server/lib/libospex.a
+       918 1998-12-31 03:32 lib/Server/lib/libServerGlx.a
+     72658 1998-12-31 03:32 lib/Server/lib/liblbx.a
+     13824 1998-12-31 03:32 lib/Server/lib/libdbe.a
+     20736 1998-12-31 03:32 lib/Server/lib/librecord.a
+    143106 1998-12-31 03:32 lib/Server/lib/libmfb.a
+    201544 1998-12-31 03:32 lib/Server/lib/libcfb.a
+    163726 1998-12-31 03:33 lib/Server/lib/libcfb16.a
+    202474 1998-12-31 03:33 lib/Server/lib/libcfb24.a
+    139622 1998-12-31 03:33 lib/Server/lib/libcfb32.a
+    153090 1998-12-31 03:33 lib/Server/lib/libxaa.a
+     17638 1998-12-31 03:33 lib/Server/lib/xaavga256.o
+     14416 1998-12-31 03:33 lib/Server/lib/xaa8.o
+     18569 1998-12-31 03:33 lib/Server/lib/xaa16.o
+     14913 1998-12-31 03:33 lib/Server/lib/xaa24.o
+     18425 1998-12-31 03:33 lib/Server/lib/xaa32.o
+      8482 1998-12-31 03:36 lib/Server/lib/libxf86cache.a
+     74998 1998-12-31 03:38 lib/Server/lib/libxnest.a
+      7092 1998-12-31 03:32 lib/Server/miinitext.c
+         0 1998-12-31 03:33 lib/Server/lib86/
+     26052 1998-12-31 03:33 lib/Server/lib86/libxf86_os.a
+    125080 1998-12-31 03:33 lib/Server/lib86/libxf86.a
+     13300 1998-12-31 03:33 lib/Server/lib86/xf86Init.o
+     11708 1998-12-31 03:33 lib/Server/lib86/xf86Init_m.o
+     44100 1998-12-31 03:33 lib/Server/lib86/libxf86_hw.a
+       387 1998-12-31 03:33 lib/Server/xf86_Option.c
+       763 1998-12-31 03:33 lib/Server/XF86_SVGA.c
+      1122 1998-12-31 03:33 lib/Server/XF86_VGA16.c
+      1086 1998-12-31 03:33 lib/Server/XF86_Mono.c
+      1043 1998-12-31 03:33 lib/Server/XF86_S3.c
+       731 1998-12-31 03:33 lib/Server/XF86_8514.c
+      1026 1998-12-31 03:33 lib/Server/XF86_Mach8.c
+      1258 1998-12-31 03:33 lib/Server/XF86_Mach32.c
+      1072 1998-12-31 03:33 lib/Server/XF86_Mach64.c
+      1121 1998-12-31 03:33 lib/Server/XF86_P9000.c
+      1130 1998-12-31 03:33 lib/Server/XF86_AGX.c
+       765 1998-12-31 03:33 lib/Server/XF86_W32.c
+       812 1998-12-31 03:33 lib/Server/XF86_I128.c
+      1008 1998-12-31 03:33 lib/Server/XF86_GLINT.c
+       988 1998-12-31 03:33 lib/Server/XF86_TGA.c
+         0 1998-12-31 03:35 lib/Server/drivers/
+      2641 1998-12-31 03:33 lib/Server/drivers/IBMRGB.h
+      9230 1998-12-31 03:33 lib/Server/drivers/Ti302X.h
+    377698 1998-12-31 03:33 lib/Server/drivers/libvga2.a
+     21800 1998-12-31 03:33 lib/Server/drivers/vga2misc.o
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/
+      1087 1998-12-31 03:33 lib/Server/drivers/vga2/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/et4000/
+      1192 1998-12-31 03:33 lib/Server/drivers/vga2/et4000/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/et3000/
+       886 1998-12-31 03:33 lib/Server/drivers/vga2/et3000/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/pvga1/
+       930 1998-12-31 03:33 lib/Server/drivers/vga2/pvga1/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/gvga/
+       878 1998-12-31 03:33 lib/Server/drivers/vga2/gvga/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/ati/
+      5315 1998-12-31 03:33 lib/Server/drivers/vga2/ati/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/sis/
+       917 1998-12-31 03:33 lib/Server/drivers/vga2/sis/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/tvga8900/
+       998 1998-12-31 03:33 lib/Server/drivers/vga2/tvga8900/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/cirrus/
+       982 1998-12-31 03:33 lib/Server/drivers/vga2/cirrus/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/ncr77c22/
+       885 1998-12-31 03:33 lib/Server/drivers/vga2/ncr77c22/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/oak/
+       863 1998-12-31 03:33 lib/Server/drivers/vga2/oak/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/cl64xx/
+       875 1998-12-31 03:33 lib/Server/drivers/vga2/cl64xx/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/vga2/generic/
+       808 1998-12-31 03:33 lib/Server/drivers/vga2/generic/Imakefile
+      6525 1998-12-31 03:33 lib/Server/drivers/vga2/generic/gen_driver.c
+    185526 1998-12-31 03:33 lib/Server/drivers/libmono.a
+      3133 1998-12-31 03:33 lib/Server/drivers/mono.h
+         0 1998-12-31 03:33 lib/Server/drivers/mono/
+       786 1998-12-31 03:33 lib/Server/drivers/mono/Imakefile
+         0 1998-12-31 03:33 lib/Server/drivers/mono/hgc1280/
+       970 1998-12-31 03:33 lib/Server/drivers/mono/hgc1280/Imakefile
+      5038 1998-12-31 03:33 lib/Server/drivers/mono/hgc1280/hgc1280HW.h
+     19698 1998-12-31 03:33 lib/Server/drivers/mono/hgc1280/hgc1280driv.c
+      2749 1998-12-31 03:33 lib/Server/drivers/mono/hgc1280/HGC1280.info
+         0 1998-12-31 03:33 lib/Server/drivers/mono/sigma/
+       891 1998-12-31 03:33 lib/Server/drivers/mono/sigma/Imakefile
+      4281 1998-12-31 03:33 lib/Server/drivers/mono/sigma/sigmaHW.h
+     14522 1998-12-31 03:33 lib/Server/drivers/mono/sigma/sigmadriv.c
+         0 1998-12-31 03:33 lib/Server/drivers/mono/apollo/
+       984 1998-12-31 03:33 lib/Server/drivers/mono/apollo/Imakefile
+      3326 1998-12-31 03:33 lib/Server/drivers/mono/apollo/apolloHW.h
+      9544 1998-12-31 03:33 lib/Server/drivers/mono/apollo/apollodriv.c
+      8892 1998-12-31 03:33 lib/Server/drivers/mono/apollo/apolloBlt.c
+         0 1998-12-31 03:33 lib/Server/drivers/mono/hercules/
+       827 1998-12-31 03:33 lib/Server/drivers/mono/hercules/Imakefile
+     10830 1998-12-31 03:33 lib/Server/drivers/mono/hercules/hercules.c
+    350240 1998-12-31 03:34 lib/Server/drivers/libvga16.a
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/
+       950 1998-12-31 03:34 lib/Server/drivers/vga16/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/et4000/
+      1199 1998-12-31 03:34 lib/Server/drivers/vga16/et4000/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/et3000/
+       889 1998-12-31 03:34 lib/Server/drivers/vga16/et3000/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/ncr77c22/
+       890 1998-12-31 03:34 lib/Server/drivers/vga16/ncr77c22/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/ati/
+      5573 1998-12-31 03:34 lib/Server/drivers/vga16/ati/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/sis/
+       923 1998-12-31 03:34 lib/Server/drivers/vga16/sis/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/tvga8900/
+      1004 1998-12-31 03:34 lib/Server/drivers/vga16/tvga8900/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/oak/
+       872 1998-12-31 03:34 lib/Server/drivers/vga16/oak/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/cl64xx/
+       878 1998-12-31 03:34 lib/Server/drivers/vga16/cl64xx/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga16/generic/
+       793 1998-12-31 03:34 lib/Server/drivers/vga16/generic/Imakefile
+     23096 1998-12-31 03:34 lib/Server/drivers/vga16misc.o
+    384910 1998-12-31 03:34 lib/Server/drivers/libvga256.a
+     11740 1998-12-31 03:34 lib/Server/drivers/vga.h
+     19279 1998-12-31 03:34 lib/Server/drivers/vga256.h
+      5318 1998-12-31 03:34 lib/Server/drivers/vgaBank.h
+     14925 1998-12-31 03:34 lib/Server/drivers/vgaFasm.h
+     13646 1998-12-31 03:34 lib/Server/drivers/vgaPCI.h
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/
+      1583 1998-12-31 03:34 lib/Server/drivers/vga256/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/nv/
+      1969 1998-12-31 03:34 lib/Server/drivers/vga256/nv/Imakefile
+     14257 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nv1accel.c
+      9817 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nv1cursor.c
+     26177 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nv1driver.c
+     50688 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nv1ref.h
+     18078 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nv1setup.c
+      5933 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nv_driver.c
+     10539 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nvreg.h
+      3260 1998-12-31 03:34 lib/Server/drivers/vga256/nv/nvvga.h
+     46879 1998-12-31 03:34 lib/Server/drivers/vga256/nv/riva_hw.c
+     10960 1998-12-31 03:34 lib/Server/drivers/vga256/nv/riva_hw.h
+     12744 1998-12-31 03:34 lib/Server/drivers/vga256/nv/riva_tbl.h
+     33900 1998-12-31 03:34 lib/Server/drivers/vga256/nv/riva_xaa.c
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/
+     74814 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/et4_driver.c
+     24310 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/et4_accel.c
+     15480 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_acl.c
+      6700 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_acl.h
+      6250 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_inline.h
+     39491 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_colexp.c
+      2625 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_colexp.h
+     27387 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_ramdac.c
+      5489 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_clock.c
+     20013 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_cursor.c
+       493 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_cursor.h
+      6315 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng.h
+      4440 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/bank.s
+      7263 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/tseng_dpms.c
+      2246 1998-12-31 03:34 lib/Server/drivers/vga256/et4000/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/et3000/
+     11694 1998-12-31 03:34 lib/Server/drivers/vga256/et3000/et3_driver.c
+      2608 1998-12-31 03:34 lib/Server/drivers/vga256/et3000/bank.s
+       952 1998-12-31 03:34 lib/Server/drivers/vga256/et3000/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/
+     16342 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/paradise.h
+     39646 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/pvg_driver.c
+      5595 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/bank.s
+      7816 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/pvgablt.c
+      2165 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/pvgasolid.c
+      7826 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/pvgaBitBlt.c
+      4579 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/pvgapntwin.c
+      1543 1998-12-31 03:34 lib/Server/drivers/vga256/pvga1/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/gvga/
+      8395 1998-12-31 03:34 lib/Server/drivers/vga256/gvga/gvg_driver.c
+      2668 1998-12-31 03:34 lib/Server/drivers/vga256/gvga/bank.s
+       944 1998-12-31 03:34 lib/Server/drivers/vga256/gvga/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/ati/
+      6954 1998-12-31 03:34 lib/Server/drivers/vga256/ati/Imakefile
+      5679 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ati.c
+      1465 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ati.h
+      1901 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiadapter.c
+      2105 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiadapter.h
+      6540 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiadjust.c
+      1576 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiadjust.h
+      1475 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atibank.c
+      2720 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atibank.h
+      8577 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atibanks.s
+      1681 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atibus.c
+      1810 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atibus.h
+      9213 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atichip.c
+      3803 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atichip.h
+     46909 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticlock.c
+      3340 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticlock.h
+      4857 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticmap.c
+      1594 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticmap.h
+     12973 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticonsole.c
+      1547 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticonsole.h
+     22328 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticrtc.c
+      3514 1998-12-31 03:34 lib/Server/drivers/vga256/ati/aticrtc.h
+      8068 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atidac.c
+      3744 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atidac.h
+      1701 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atidepth.h
+      7970 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atidsp.c
+      1673 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atidsp.h
+      1477 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atifbinit.c
+      1515 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atifbinit.h
+      8157 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atigetmode.c
+      1548 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atigetmode.h
+      3235 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiident.c
+      1771 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiident.h
+      4816 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiio.c
+      5086 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiio.h
+     11939 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atimach64.c
+      1669 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atimach64.h
+      1605 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atimono.h
+      9337 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiprint.c
+      1879 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiprint.h
+     61045 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiprobe.c
+      1528 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiprobe.h
+      1739 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiproto.h
+     44373 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiregs.h
+      1865 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atireset.c
+      1539 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atireset.h
+      1832 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiscrinit.c
+      1597 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiscrinit.h
+      2490 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiutil.c
+      2694 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiutil.h
+      5031 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ativalid.c
+      1607 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ativalid.h
+      1614 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ativersion.h
+     11653 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ativga.c
+      1648 1998-12-31 03:34 lib/Server/drivers/vga256/ati/ativga.h
+      2758 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atividmem.c
+      2931 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atividmem.h
+     10332 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiwonder.c
+      1678 1998-12-31 03:34 lib/Server/drivers/vga256/ati/atiwonder.h
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/sis/
+     55990 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis86c201.c
+      2025 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_bank.s
+     12591 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_curs.c
+      2343 1998-12-31 03:34 lib/Server/drivers/vga256/sis/Imakefile
+     19931 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_accel.c
+     11229 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_blt16.c
+      6313 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_blitter.c
+     11442 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_BitBlt.c
+     11343 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_solid.c
+      3606 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_Blitter.h
+      3233 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_driver.h
+      2649 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_pntwin.c
+      8887 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_FillRct.c
+     11617 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_FillSt.c
+      9970 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_colexp.c
+     17712 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_teblt8.c
+      4547 1998-12-31 03:34 lib/Server/drivers/vga256/sis/sis_textblt.s
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/
+     65311 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/t89_driver.c
+      4047 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/t89_driver.h
+      3008 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/bank.s
+     13721 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/tgui_curs.c
+      1780 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/tgui_drv.h
+      5517 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/tgui_ger.h
+      9163 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/tgui_mmio.h
+     15524 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/tgui_accel.c
+     11340 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/tgui_oldacl.c
+      2270 1998-12-31 03:34 lib/Server/drivers/vga256/tvga8900/Imakefile
+         0 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/
+    159142 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_driver.c
+     22331 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_driver.h
+      3605 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_bank.s
+      7073 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_fill.c
+     12664 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_im.c
+      7989 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_blt.c
+     10375 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_bltC.c
+     18417 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_imblt.s
+     22216 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_textblt.s
+     40234 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_span.s
+     36402 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_colexp.c
+     14878 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cirFillSt.c
+     13972 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_solid.c
+     19003 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_teblt8.c
+      8851 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cirFillRct.c
+     27290 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_cursor.c
+     20740 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_blitter.c
+     21561 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_blitLG.c
+     12342 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_fillLG.c
+      6027 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_alloc.c
+     17724 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_blt16.c
+     16643 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_line.c
+     10425 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_orect.c
+      5335 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cirBlitter.h
+       827 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_span.h
+       966 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_alloc.h
+      5610 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cirBlitMM.h
+      8144 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_blitLG.h
+      3227 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cir_inline.h
+     40458 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/cirrus_acl.c
+     16170 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/laguna_acl.c
+      4700 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/Imakefile
+     10746 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/linearline.c
+      1092 1998-12-31 03:34 lib/Server/drivers/vga256/cirrus/linearline.h
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/ncr77c22/
+     16967 1998-12-31 03:35 lib/Server/drivers/vga256/ncr77c22/ncr_driver.c
+      3121 1998-12-31 03:35 lib/Server/drivers/vga256/ncr77c22/ncr_bank.s
+       907 1998-12-31 03:35 lib/Server/drivers/vga256/ncr77c22/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/compaq/
+     10406 1998-12-31 03:35 lib/Server/drivers/vga256/compaq/cpq_driver.c
+      2136 1998-12-31 03:35 lib/Server/drivers/vga256/compaq/cpq_bank.s
+       899 1998-12-31 03:35 lib/Server/drivers/vga256/compaq/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/mga/
+      4114 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga.h
+      3670 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_bios.h
+     10173 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_reg.h
+     36917 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_driver.c
+      3306 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_hwcurs.c
+     29268 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_storm.c
+       557 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_map.h
+       958 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_macros.h
+     37714 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_dac3026.c
+     28004 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_dac1064.c
+     14601 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_dacG200.c
+      9691 1998-12-31 03:35 lib/Server/drivers/vga256/mga/mga_xaarepl.c
+      2191 1998-12-31 03:35 lib/Server/drivers/vga256/mga/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/oak/
+     45530 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oak_driver.c
+      1438 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oak_driver.h
+      6717 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oak_bank.s
+      5133 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oti87_fill.c
+      3442 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oti87_sol.c
+      2524 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oti87_bltC.c
+      1408 1998-12-31 03:35 lib/Server/drivers/vga256/oak/oak_colexp.s
+      1475 1998-12-31 03:35 lib/Server/drivers/vga256/oak/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/al2101/
+      8994 1998-12-31 03:35 lib/Server/drivers/vga256/al2101/al_driver.c
+      2414 1998-12-31 03:35 lib/Server/drivers/vga256/al2101/al_bank.s
+       891 1998-12-31 03:35 lib/Server/drivers/vga256/al2101/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/ali/
+     16964 1998-12-31 03:35 lib/Server/drivers/vga256/ali/ali_driver.c
+      1427 1998-12-31 03:35 lib/Server/drivers/vga256/ali/ali_bank.s
+       886 1998-12-31 03:35 lib/Server/drivers/vga256/ali/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/cl64xx/
+     31729 1998-12-31 03:35 lib/Server/drivers/vga256/cl64xx/cl_driver.c
+      3077 1998-12-31 03:35 lib/Server/drivers/vga256/cl64xx/cl_bank.s
+       907 1998-12-31 03:35 lib/Server/drivers/vga256/cl64xx/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/video7/
+     25850 1998-12-31 03:35 lib/Server/drivers/vga256/video7/v7_driver.c
+      4548 1998-12-31 03:35 lib/Server/drivers/vga256/video7/v7_bank.s
+       907 1998-12-31 03:35 lib/Server/drivers/vga256/video7/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/ark/
+     60098 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_driver.c
+       715 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_driver.h
+      2778 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_bank.s
+      5663 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_cop.h
+     12637 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_cursor.c
+       510 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_cursor.h
+      3038 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_bitblt.c
+     13610 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_blt16.c
+     18134 1998-12-31 03:35 lib/Server/drivers/vga256/ark/ark_accel.c
+      1631 1998-12-31 03:35 lib/Server/drivers/vga256/ark/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/mx/
+     22673 1998-12-31 03:35 lib/Server/drivers/vga256/mx/mx_driver.c
+      3524 1998-12-31 03:35 lib/Server/drivers/vga256/mx/mx_bank.s
+       875 1998-12-31 03:35 lib/Server/drivers/vga256/mx/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/realtek/
+     37998 1998-12-31 03:35 lib/Server/drivers/vga256/realtek/rt_driver.c
+      4285 1998-12-31 03:35 lib/Server/drivers/vga256/realtek/rt_bank.s
+       996 1998-12-31 03:35 lib/Server/drivers/vga256/realtek/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/
+     61706 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/s3v_driver.c
+     33056 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/s3v_accel.c
+      4826 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/s3v_misc.c
+     12279 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/s3v_cursor.c
+     12331 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/regs3v.h
+     22705 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/newmmio.h
+      4610 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/s3v_driver.h
+      2356 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/s3v_rop.h
+      1492 1998-12-31 03:35 lib/Server/drivers/vga256/s3v/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/apm/
+     30723 1998-12-31 03:35 lib/Server/drivers/vga256/apm/apm_driver.c
+     12472 1998-12-31 03:35 lib/Server/drivers/vga256/apm/apm_accel.c
+      1202 1998-12-31 03:35 lib/Server/drivers/vga256/apm/apm_bank.s
+     10289 1998-12-31 03:35 lib/Server/drivers/vga256/apm/apm_cursor.c
+      6786 1998-12-31 03:35 lib/Server/drivers/vga256/apm/apm.h
+      1285 1998-12-31 03:35 lib/Server/drivers/vga256/apm/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/
+      8814 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/newmmio.h
+      6847 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3.h
+      2315 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3Bt485.h
+      4116 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3ELSA.h
+     16596 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3reg.h
+      4519 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/IBMRGBCurs.c
+      7071 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/Ti3026Curs.c
+     10656 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3BtCursor.c
+     11056 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3ELSA.c
+      9230 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3TiCursor.c
+     35177 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3accel.c
+     11334 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3cursor.c
+      8169 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3driver.c
+      7157 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3fbinit.c
+     29522 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3init.c
+     20309 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3misc.c
+     29269 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3probe.c
+    149046 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3ramdacs.c
+      2799 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3save.c
+      2603 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/s3bank.s
+      2810 1998-12-31 03:35 lib/Server/drivers/vga256/s3_svga/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/neo/
+      3751 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo.h
+      2724 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_macros.h
+      4575 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_reg.h
+     66409 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_driver.c
+     12221 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_cursor.c
+      4122 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_bank.s
+      8477 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_2070.c
+      9572 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_2090.c
+     11636 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_2097.c
+     12229 1998-12-31 03:35 lib/Server/drivers/vga256/neo/neo_2200.c
+      1717 1998-12-31 03:35 lib/Server/drivers/vga256/neo/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/chips/
+    160610 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_driver.c
+      6174 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_bank.s
+     12871 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_BitBlt.c
+      8720 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_FillRct.c
+     16791 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_cursor.c
+     11779 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_blt16.c
+     21576 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_blitter.c
+     22158 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_line.c
+     13777 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_lline.c
+     16305 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_solid.c
+     19099 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_FillSt.c
+      3551 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_alloc.c
+      1186 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_pci.c
+      4975 1998-12-31 03:35 lib/Server/drivers/vga256/chips/Imakefile
+      4347 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_BltHiQV.h
+      3465 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_BlitMM.h
+      4754 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_Blitter.h
+      5586 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_driver.h
+      3072 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_lline.h
+     22544 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_teblt8.c
+      7549 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_textblt.s
+     11467 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_colexp.c
+     25320 1998-12-31 03:35 lib/Server/drivers/vga256/chips/ct_accel.c
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/
+     16186 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix.h
+     12566 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix_accel.c
+      7891 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix_cmap.c
+      9746 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix_cursor.c
+     30331 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix_driver.c
+      2655 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix_bank.s
+      2703 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/cyrix_asm.s
+      2847 1998-12-31 03:35 lib/Server/drivers/vga256/cyrix/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/
+      2590 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/Imakefile
+       839 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/cscode.h
+      3587 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/hwcursor.c
+       320 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/hwcursor.h
+     16404 1998-12-31 03:35 
lib/Server/drivers/vga256/rendition/rendition_driver.c
+      8184 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/v1kregs.h
+     13113 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/v1krisc.c
+       615 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/v1krisc.h
+     13471 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/v2kregs.h
+      3325 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vboard.c
+       505 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vboard.h
+     28315 1998-12-31 03:35 
lib/Server/drivers/vga256/rendition/vgafont-std.data
+     28856 1998-12-31 03:35 
lib/Server/drivers/vga256/rendition/vgafont-vrx.data
+      5733 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vgapalette.data
+      5622 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vloaduc.c
+       483 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vloaduc.h
+     11679 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vmodes.c
+       536 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vmodes.h
+      2807 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vos.h
+     12814 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vramdac.c
+       946 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vramdac.h
+      3281 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vtest.c
+      2287 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vtypes.h
+      8464 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vvga.c
+       563 1998-12-31 03:35 lib/Server/drivers/vga256/rendition/vvga.h
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/
+     25229 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Driver.c
+      1807 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Driver.h
+      7058 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Access.c
+      3652 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Access.h
+     13960 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Probe.c
+      3493 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Probe.h
+     17877 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Regs.h
+     10545 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00VGA.c
+      1369 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00VGA.h
+      2932 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00VGARegs.h
+      3697 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00ICD2061A.c
+      1567 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00ICD2061A.h
+      1469 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00Includes.h
+      8317 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00DAC.c
+      5762 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00DAC.h
+     11414 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00XAA.c
+      1408 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/p9x00XAA.h
+      2355 1998-12-31 03:35 lib/Server/drivers/vga256/p9x00/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/
+     22147 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/spc_driver.c
+      2652 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/spc_driver.h
+      4364 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/spc_accel.c
+     12317 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/spc_cursor.c
+      2427 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/spc_bank.s
+      1254 1998-12-31 03:35 lib/Server/drivers/vga256/spc8110/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/vga256/generic/
+      9209 1998-12-31 03:35 lib/Server/drivers/vga256/generic/gen_driver.c
+       798 1998-12-31 03:35 lib/Server/drivers/vga256/generic/Imakefile
+     17394 1998-12-31 03:35 lib/Server/drivers/libfbdev.a
+    311582 1998-12-31 03:35 lib/Server/drivers/libs3.a
+     10242 1998-12-31 03:35 lib/Server/drivers/newmmio.h
+     14936 1998-12-31 03:35 lib/Server/drivers/regs3.h
+     19289 1998-12-31 03:35 lib/Server/drivers/s3.h
+    162254 1998-12-31 03:35 lib/Server/drivers/libs3newmmio.a
+    171622 1998-12-31 03:35 lib/Server/drivers/libs3mmio.a
+         0 1998-12-31 03:35 lib/Server/drivers/s3/
+       368 1998-12-31 03:35 lib/Server/drivers/s3/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/s3/newmmio/
+       766 1998-12-31 03:35 lib/Server/drivers/s3/newmmio/Imakefile
+      3020 1998-12-31 03:35 lib/Server/drivers/s3/newmmio/newmmio.c
+         0 1998-12-31 03:35 lib/Server/drivers/s3/mmio_928/
+       777 1998-12-31 03:35 lib/Server/drivers/s3/mmio_928/Imakefile
+      2678 1998-12-31 03:35 lib/Server/drivers/s3/mmio_928/mmio_928.c
+         0 1998-12-31 03:35 lib/Server/drivers/s3/s3_generic/
+      2355 1998-12-31 03:35 lib/Server/drivers/s3/s3_generic/s3_generic.c
+       791 1998-12-31 03:35 lib/Server/drivers/s3/s3_generic/Imakefile
+    210906 1998-12-31 03:35 lib/Server/drivers/libs3v.a
+     19705 1998-12-31 03:35 lib/Server/drivers/s3v.h
+      9222 1998-12-31 03:35 lib/Server/drivers/regs3v.h
+         0 1998-12-31 03:35 lib/Server/drivers/s3_virge/
+       381 1998-12-31 03:35 lib/Server/drivers/s3_virge/Imakefile
+         0 1998-12-31 03:35 lib/Server/drivers/s3_virge/s3_virge/
+      2334 1998-12-31 03:35 lib/Server/drivers/s3_virge/s3_virge/s3_virge.c
+       797 1998-12-31 03:35 lib/Server/drivers/s3_virge/s3_virge/Imakefile
+     94224 1998-12-31 03:35 lib/Server/drivers/lib8514.a
+    110288 1998-12-31 03:35 lib/Server/drivers/libmach8.a
+    143084 1998-12-31 03:35 lib/Server/drivers/libmach32.a
+    209530 1998-12-31 03:35 lib/Server/drivers/libmach64.a
+    110988 1998-12-31 03:35 lib/Server/drivers/libp9000.a
+    229202 1998-12-31 03:35 lib/Server/drivers/libagx.a
+    216492 1998-12-31 03:35 lib/Server/drivers/libw32cfb.a
+      7898 1998-12-31 03:35 lib/Server/drivers/libw32asm.a
+     80082 1998-12-31 03:35 lib/Server/drivers/libw32.a
+     65338 1998-12-31 03:35 lib/Server/drivers/libi128.a
+     78572 1998-12-31 03:35 lib/Server/drivers/libglint.a
+       748 1998-12-31 03:33 lib/Server/confvga2.sh
+       741 1998-12-31 03:33 lib/Server/confmono.sh
+       747 1998-12-31 03:34 lib/Server/cvga16.sh
+       753 1998-12-31 03:34 lib/Server/cvga256.sh
+         0 1998-12-31 03:36 lib/Server/VGADriverDoc/
+     36008 1998-12-31 03:34 lib/Server/VGADriverDoc/vgaHW.c
+     47777 1998-12-31 03:36 lib/Server/VGADriverDoc/VGADriver.Doc
+      2114 1998-12-31 03:36 lib/Server/VGADriverDoc/Imakefile.stub
+     27201 1998-12-31 03:36 lib/Server/VGADriverDoc/stub_driver.c
+      4756 1998-12-31 03:36 lib/Server/VGADriverDoc/stub_bank.s
+       712 1998-12-31 03:35 lib/Server/confS3.sh
+       722 1998-12-31 03:35 lib/Server/confS3V.sh
+       753 1998-12-31 03:35 lib/Server/confw32.sh
+      3091 1998-12-31 03:36 lib/Server/LinkKit.tmpl
+     33089 1998-12-31 03:36 lib/Server/Imakefile
+      6834 1998-12-31 03:36 lib/Server/xf86site.def
+       857 1998-12-31 03:36 lib/Server/mkmf
+      7241 1998-12-31 03:36 lib/Server/README
+       751 1998-12-31 03:37 lib/Server/cmga.sh

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xman.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xman.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xman.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xman.txt   3 Mar 
2012 06:14:53 -0000       1.1
@@ -0,0 +1,1089 @@
+         0 1998-12-31 03:15 man/
+         0 1998-12-31 04:12 man/man1/
+     10096 1998-12-31 03:13 man/man1/imake.1x
+      9447 1998-12-31 03:13 man/man1/makedepend.1x
+      4784 1998-12-31 03:13 man/man1/lndir.1x
+      6377 1998-12-31 03:13 man/man1/makestrs.1x
+      2992 1998-12-31 03:13 man/man1/xmkmf.1x
+      2114 1998-12-31 03:13 man/man1/makeg.1x
+      1798 1998-12-31 03:13 man/man1/mkdirhier.1x
+      3090 1998-12-31 03:14 man/man1/appres.1x
+      4037 1998-12-31 03:14 man/man1/bdftopcf.1x
+     24896 1998-12-31 03:14 man/man1/bitmap.1x
+        19 1998-12-31 03:14 man/man1/bmtoa.1x
+        19 1998-12-31 03:14 man/man1/atobm.1x
+      1754 1998-12-31 03:14 man/man1/beforelight.1x
+     17745 1998-12-31 03:14 man/man1/editres.1x
+      2474 1998-12-31 03:14 man/man1/fsinfo.1x
+      3544 1998-12-31 03:14 man/man1/fslsfonts.1x
+      2360 1998-12-31 03:14 man/man1/fstobdf.1x
+      2093 1998-12-31 03:14 man/man1/iceauth.1x
+      4633 1998-12-31 03:14 man/man1/mkfontdir.1x
+      3523 1998-12-31 03:14 man/man1/oclock.1x
+      6847 1998-12-31 03:14 man/man1/proxymngr.1x
+      2001 1998-12-31 03:14 man/man1/showrgb.1x
+      4657 1998-12-31 03:14 man/man1/rstart.1x
+     11657 1998-12-31 03:14 man/man1/rstartd.1x
+      3092 1998-12-31 03:14 man/man1/smproxy.1x
+     61382 1998-12-31 03:14 man/man1/twm.1x
+     27016 1998-12-31 03:14 man/man1/x11perf.1x
+      3123 1998-12-31 03:14 man/man1/x11perfcomp.1x
+     11137 1998-12-31 03:14 man/man1/xauth.1x
+      5341 1998-12-31 03:14 man/man1/xclipboard.1x
+      4596 1998-12-31 03:14 man/man1/xcutsel.1x
+      6330 1998-12-31 03:14 man/man1/xclock.1x
+      3961 1998-12-31 03:14 man/man1/xcmsdb.1x
+      3564 1998-12-31 03:14 man/man1/xconsole.1x
+     50621 1998-12-31 03:14 man/man1/xdm.1x
+      5195 1998-12-31 03:14 man/man1/sessreg.1x
+      2967 1998-12-31 03:14 man/man1/xdpyinfo.1x
+       479 1998-12-31 03:14 man/man1/dga.1x
+      8447 1998-12-31 03:14 man/man1/xfd.1x
+      4320 1998-12-31 03:14 man/man1/xfindproxy.1x
+     16316 1998-12-31 03:14 man/man1/xfwp.1x
+      5286 1998-12-31 03:14 man/man1/xhost.1x
+     32343 1998-12-31 03:14 man/man1/xieperf.1x
+      7475 1998-12-31 03:14 man/man1/xinit.1x
+      4990 1998-12-31 03:14 man/man1/startx.1x
+      2442 1998-12-31 03:14 man/man1/setxkbmap.1x
+      3648 1998-12-31 03:14 man/man1/xkbcomp.1x
+      4022 1998-12-31 03:14 man/man1/xkbevd.1x
+      3385 1998-12-31 03:14 man/man1/xkbprint.1x
+      3677 1998-12-31 03:14 man/man1/xkill.1x
+      3311 1998-12-31 03:14 man/man1/xlogo.1x
+      2889 1998-12-31 03:14 man/man1/xlsatoms.1x
+      2573 1998-12-31 03:14 man/man1/xlsclients.1x
+      3888 1998-12-31 03:14 man/man1/xlsfonts.1x
+      4016 1998-12-31 03:14 man/man1/xmag.1x
+     61088 1998-12-31 03:14 man/man1/xmh.1x
+     10999 1998-12-31 03:14 man/man1/xmodmap.1x
+     14575 1998-12-31 03:14 man/man1/xprop.1x
+     11590 1998-12-31 03:14 man/man1/xrdb.1x
+      3484 1998-12-31 03:14 man/man1/xrefresh.1x
+      6530 1998-12-31 03:14 man/man1/xrx.1x
+     10640 1998-12-31 03:14 man/man1/xset.1x
+      4955 1998-12-31 03:14 man/man1/xsetroot.1x
+     14947 1998-12-31 03:14 man/man1/xsm.1x
+      3943 1998-12-31 03:14 man/man1/xstdcmap.1x
+       417 1998-12-31 03:14 man/man1/xsetmode.1x
+       413 1998-12-31 03:14 man/man1/xsetpointer.1x
+     80013 1998-12-31 03:14 man/man1/xterm.1x
+      2712 1998-12-31 03:14 man/man1/resize.1x
+      5271 1998-12-31 03:14 man/man1/xvidtune.1x
+      4711 1998-12-31 03:14 man/man1/xwd.1x
+      7274 1998-12-31 03:14 man/man1/xwininfo.1x
+      5784 1998-12-31 03:14 man/man1/xwud.1x
+     26057 1998-12-31 03:14 man/man1/Xserver.1x
+     17751 1998-12-31 03:15 man/man1/XFree86.1x
+      8648 1998-12-31 03:15 man/man1/XF86_Mono.1x
+      6757 1998-12-31 03:15 man/man1/XF86_VGA16.1x
+     16246 1998-12-31 03:15 man/man1/XF86_SVGA.1x
+     33552 1998-12-31 03:15 man/man1/XF86_Accel.1x
+        23 1998-12-31 03:15 man/man1/XF86_S3.1x
+        23 1998-12-31 03:15 man/man1/XF86_Mach32.1x
+        23 1998-12-31 03:15 man/man1/XF86_Mach64.1x
+        23 1998-12-31 03:15 man/man1/XF86_P9000.1x
+        23 1998-12-31 03:15 man/man1/XF86_Mach8.1x
+        23 1998-12-31 03:15 man/man1/XF86_8514.1x
+        23 1998-12-31 03:15 man/man1/XF86_AGX.1x
+        23 1998-12-31 03:15 man/man1/XF86_W32.1x
+        23 1998-12-31 03:15 man/man1/XF86_I128.1x
+       755 1998-12-31 03:16 man/man1/reconfig.1x
+       574 1998-12-31 03:15 man/man1/xf86config.1x
+      6877 1998-12-31 03:15 man/man1/SuperProbe.1x
+       574 1998-12-31 03:16 man/man1/xf98config.1x
+      5686 1998-12-31 03:16 man/man1/Xvfb.1x
+     14143 1998-12-31 03:16 man/man1/Xnest.1x
+      7627 1998-12-31 03:16 man/man1/lbxproxy.1x
+      3744 1998-12-31 03:16 man/man1/xon.1x
+      2848 1998-12-31 04:12 man/man1/ico.1x
+      3503 1998-12-31 04:12 man/man1/listres.1x
+      2250 1998-12-31 04:12 man/man1/showfont.1x
+      8466 1998-12-31 04:12 man/man1/viewres.1x
+      7385 1998-12-31 04:12 man/man1/xbiff.1x
+     14967 1998-12-31 04:12 man/man1/xcalc.1x
+      6323 1998-12-31 04:12 man/man1/xditview.1x
+      7366 1998-12-31 04:12 man/man1/xedit.1x
+      1701 1998-12-31 04:12 man/man1/xev.1x
+      1460 1998-12-31 04:12 man/man1/xeyes.1x
+      9260 1998-12-31 04:12 man/man1/xfontsel.1x
+       912 1998-12-31 04:12 man/man1/xgc.1x
+      3728 1998-12-31 04:12 man/man1/xload.1x
+     12768 1998-12-31 04:12 man/man1/xman.1x
+      5650 1998-12-31 04:12 man/man1/xmessage.1x
+         0 1998-12-31 03:15 man/man5/
+     47285 1998-12-31 03:15 man/man5/XF86Config.5x
+         0 1998-12-31 03:18 man/man3/
+      6640 1998-12-31 03:15 man/man3/XF86DGA.3x
+      6556 1998-12-31 03:15 man/man3/XF86Misc.3x
+     10733 1998-12-31 03:15 man/man3/XF86VidMode.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAQueryExtension.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAQueryVersion.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAQueryDirectVideo.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAGetVideo.3x
+        20 1998-12-31 03:15 man/man3/XF86DGADirectVideo.3x
+        20 1998-12-31 03:15 man/man3/XF86DGASetVidPage.3x
+        20 1998-12-31 03:15 man/man3/XF86DGASetViewPort.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAViewPortChanged.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAInstallColormap.3x
+        20 1998-12-31 03:15 man/man3/XF86DGAForkApp.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscQueryExtension.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscQueryVersion.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscGetSaver.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscSetSaver.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscGetMouseSettings.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscSetMouseSettings.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscGetKbdSettings.3x
+        21 1998-12-31 03:15 man/man3/XF86MiscSetKbdSettings.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeQueryExtension.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeQueryVersion.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeGetModeLine.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeGetAllModeLines.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeModModeLine.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeSwitchMode.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeLockModeSwitch.3x
+        24 1998-12-31 03:15 man/man3/XF86VidModeGetMonitor.3x
+     46909 1998-12-31 03:16 man/man3/X.3x
+      7237 1998-12-31 03:16 man/man3/XConsortium.3x
+     10097 1998-12-31 03:16 man/man3/XStandards.3x
+     12191 1998-12-31 03:16 man/man3/Xsecurity.3x
+     10218 1998-12-31 03:16 man/man3/AllPlanes.3x
+        22 1998-12-31 03:16 man/man3/BlackPixel.3x
+        22 1998-12-31 03:16 man/man3/WhitePixel.3x
+        22 1998-12-31 03:16 man/man3/ConnectionNumber.3x
+        22 1998-12-31 03:16 man/man3/DefaultColormap.3x
+        22 1998-12-31 03:16 man/man3/DefaultDepth.3x
+        22 1998-12-31 03:16 man/man3/XListDepths.3x
+        22 1998-12-31 03:16 man/man3/DefaultGC.3x
+        22 1998-12-31 03:16 man/man3/DefaultRootWindow.3x
+        22 1998-12-31 03:16 man/man3/DefaultScreenOfDisplay.3x
+        22 1998-12-31 03:16 man/man3/DefaultScreen.3x
+        22 1998-12-31 03:16 man/man3/DefaultVisual.3x
+        22 1998-12-31 03:16 man/man3/DisplayCells.3x
+        22 1998-12-31 03:16 man/man3/DisplayPlanes.3x
+        22 1998-12-31 03:16 man/man3/DisplayString.3x
+        22 1998-12-31 03:16 man/man3/XMaxRequestSize.3x
+        22 1998-12-31 03:16 man/man3/XExtendedMaxRequestSize.3x
+        22 1998-12-31 03:16 man/man3/LastKnownRequestProcessed.3x
+        22 1998-12-31 03:16 man/man3/NextRequest.3x
+        22 1998-12-31 03:16 man/man3/ProtocolVersion.3x
+        22 1998-12-31 03:16 man/man3/ProtocolRevision.3x
+        22 1998-12-31 03:16 man/man3/QLength.3x
+        22 1998-12-31 03:16 man/man3/RootWindow.3x
+        22 1998-12-31 03:16 man/man3/ScreenCount.3x
+        22 1998-12-31 03:16 man/man3/ScreenOfDisplay.3x
+        22 1998-12-31 03:16 man/man3/ServerVendor.3x
+        22 1998-12-31 03:16 man/man3/VendorRelease.3x
+      7231 1998-12-31 03:16 man/man3/BlackPixelOfScreen.3x
+        31 1998-12-31 03:16 man/man3/WhitePixelOfScreen.3x
+        31 1998-12-31 03:16 man/man3/CellsOfScreen.3x
+        31 1998-12-31 03:16 man/man3/DefaultColormapOfScreen.3x
+        31 1998-12-31 03:16 man/man3/DefaultDepthOfScreen.3x
+        31 1998-12-31 03:16 man/man3/DefaultGCOfScreen.3x
+        31 1998-12-31 03:16 man/man3/DefaultVisualOfScreen.3x
+        31 1998-12-31 03:16 man/man3/DoesBackingStore.3x
+        31 1998-12-31 03:16 man/man3/DoesSaveUnders.3x
+        31 1998-12-31 03:16 man/man3/DisplayOfScreen.3x
+        31 1998-12-31 03:16 man/man3/XScreenNumberOfScreen.3x
+        31 1998-12-31 03:16 man/man3/EventMaskOfScreen.3x
+        31 1998-12-31 03:16 man/man3/HeightOfScreen.3x
+        31 1998-12-31 03:16 man/man3/HeightMMOfScreen.3x
+        31 1998-12-31 03:16 man/man3/MaxCmapsOfScreen.3x
+        31 1998-12-31 03:16 man/man3/MinCmapsOfScreen.3x
+        31 1998-12-31 03:16 man/man3/PlanesOfScreen.3x
+        31 1998-12-31 03:16 man/man3/RootWindowOfScreen.3x
+        31 1998-12-31 03:16 man/man3/WidthOfScreen.3x
+        31 1998-12-31 03:16 man/man3/WidthMMOfScreen.3x
+      4860 1998-12-31 03:16 man/man3/DisplayOfCCC.3x
+        25 1998-12-31 03:16 man/man3/VisualOfCCC.3x
+        25 1998-12-31 03:16 man/man3/ScreenNumberOfCCC.3x
+        25 1998-12-31 03:16 man/man3/ScreenWhitePointOfCCC.3x
+        25 1998-12-31 03:16 man/man3/ClientWhitePointOfCCC.3x
+      6335 1998-12-31 03:16 man/man3/ImageByteOrder.3x
+        27 1998-12-31 03:16 man/man3/BitmapBitOrder.3x
+        27 1998-12-31 03:16 man/man3/BitmapPad.3x
+        27 1998-12-31 03:16 man/man3/BitmapUnit.3x
+        27 1998-12-31 03:16 man/man3/DisplayHeight.3x
+        27 1998-12-31 03:16 man/man3/DisplayHeightMM.3x
+        27 1998-12-31 03:16 man/man3/DisplayWidth.3x
+        27 1998-12-31 03:16 man/man3/DisplayWidthMM.3x
+        27 1998-12-31 03:16 man/man3/XListPixmapFormats.3x
+        27 1998-12-31 03:16 man/man3/XPixmapFormatValues.3x
+      4915 1998-12-31 03:16 man/man3/IsCursorKey.3x
+        24 1998-12-31 03:16 man/man3/IsFunctionKey.3x
+        24 1998-12-31 03:16 man/man3/IsKeypadKey.3x
+        24 1998-12-31 03:16 man/man3/IsMiscFunctionKey.3x
+        24 1998-12-31 03:16 man/man3/IsModiferKey.3x
+        24 1998-12-31 03:16 man/man3/IsPFKey.3x
+        24 1998-12-31 03:16 man/man3/IsPrivateKeypadKey.3x
+      7102 1998-12-31 03:16 man/man3/XAllocClassHint.3x
+        28 1998-12-31 03:16 man/man3/XSetClassHint.3x
+        28 1998-12-31 03:16 man/man3/XGetClassHint.3x
+        28 1998-12-31 03:16 man/man3/XClassHint.3x
+      6837 1998-12-31 03:16 man/man3/XAllocIconSize.3x
+        27 1998-12-31 03:16 man/man3/XSetIconSizes.3x
+        27 1998-12-31 03:16 man/man3/XGetIconSizes.3x
+        27 1998-12-31 03:16 man/man3/XIconSize.3x
+     11168 1998-12-31 03:16 man/man3/XAllocStandardColormap.3x
+        35 1998-12-31 03:16 man/man3/XSetRGBColormaps.3x
+        35 1998-12-31 03:16 man/man3/XGetRGBColormaps.3x
+        35 1998-12-31 03:16 man/man3/XStandardColormap.3x
+     12427 1998-12-31 03:16 man/man3/XAllocSizeHints.3x
+        28 1998-12-31 03:16 man/man3/XSetWMNormalHints.3x
+        28 1998-12-31 03:16 man/man3/XGetWMNormalHints.3x
+        28 1998-12-31 03:16 man/man3/XSetWMSizeHints.3x
+        28 1998-12-31 03:16 man/man3/XGetWMSizeHints.3x
+        28 1998-12-31 03:16 man/man3/XSizeHints.3x
+     10050 1998-12-31 03:16 man/man3/XAllocWMHints.3x
+        26 1998-12-31 03:16 man/man3/XSetWMHints.3x
+        26 1998-12-31 03:16 man/man3/XGetWMHints.3x
+        26 1998-12-31 03:16 man/man3/XWMHints.3x
+      8923 1998-12-31 03:17 man/man3/XAddHost.3x
+        21 1998-12-31 03:17 man/man3/XAddHosts.3x
+        21 1998-12-31 03:17 man/man3/XListHosts.3x
+        21 1998-12-31 03:17 man/man3/XRemoveHost.3x
+        21 1998-12-31 03:17 man/man3/XRemoveHosts.3x
+        21 1998-12-31 03:17 man/man3/XSetAccessControl.3x
+        21 1998-12-31 03:17 man/man3/XEnableAccessControl.3x
+        21 1998-12-31 03:17 man/man3/XDisableAccessControl.3x
+        21 1998-12-31 03:17 man/man3/XHostAddress.3x
+     13628 1998-12-31 03:17 man/man3/XAllocColor.3x
+        24 1998-12-31 03:17 man/man3/XAllocNamedColor.3x
+        24 1998-12-31 03:17 man/man3/XAllocColorCells.3x
+        24 1998-12-31 03:17 man/man3/XAllocColorPlanes.3x
+        24 1998-12-31 03:17 man/man3/XFreeColors.3x
+      4954 1998-12-31 03:17 man/man3/XAllowEvents.3x
+      7342 1998-12-31 03:17 man/man3/XAnyEvent.3x
+        22 1998-12-31 03:17 man/man3/XEvent.3x
+     10278 1998-12-31 03:17 man/man3/XButtonEvent.3x
+        25 1998-12-31 03:17 man/man3/XKeyEvent.3x
+        25 1998-12-31 03:17 man/man3/XMotionEvent.3x
+     11526 1998-12-31 03:17 man/man3/XChangeKeyboardControl.3x
+        35 1998-12-31 03:17 man/man3/XGetKeyboardControl.3x
+        35 1998-12-31 03:17 man/man3/XAutoRepeatOn.3x
+        35 1998-12-31 03:17 man/man3/XBell.3x
+        35 1998-12-31 03:17 man/man3/XAutoRepeatOff.3x
+        35 1998-12-31 03:17 man/man3/XQueryKeymap.3x
+        35 1998-12-31 03:17 man/man3/XKeyboardControl.3x
+     12761 1998-12-31 03:17 man/man3/XChangeKeyboardMapping.3x
+        35 1998-12-31 03:17 man/man3/XGetKeyboardMapping.3x
+        35 1998-12-31 03:17 man/man3/XDisplayKeycodes.3x
+        35 1998-12-31 03:17 man/man3/XSetModifierMapping.3x
+        35 1998-12-31 03:17 man/man3/XGetModifierMapping.3x
+        35 1998-12-31 03:17 man/man3/XNewModifiermap.3x
+        35 1998-12-31 03:17 man/man3/XInsertModifiermapEntry.3x
+        35 1998-12-31 03:17 man/man3/XDeleteModifiermapEntry.3x
+        35 1998-12-31 03:17 man/man3/XFreeModifierMap.3x
+        35 1998-12-31 03:17 man/man3/XModifierKeymap.3x
+      6195 1998-12-31 03:17 man/man3/XClientMessageEvent.3x
+      6543 1998-12-31 03:17 man/man3/XChangePointerControl.3x
+        34 1998-12-31 03:17 man/man3/XGetPointerControl.3x
+      5891 1998-12-31 03:17 man/man3/XChangeSaveSet.3x
+        27 1998-12-31 03:17 man/man3/XAddToSaveSet.3x
+        27 1998-12-31 03:17 man/man3/XRemoveFromSaveSet.3x
+     11416 1998-12-31 03:17 man/man3/XChangeWindowAttributes.3x
+        36 1998-12-31 03:17 man/man3/XSetWindowBackground.3x
+        36 1998-12-31 03:17 man/man3/XSetWindowBackgroundPixmap.3x
+        36 1998-12-31 03:17 man/man3/XSetWindowBorder.3x
+        36 1998-12-31 03:17 man/man3/XSetWindowBorderPixmap.3x
+        36 1998-12-31 03:17 man/man3/XSetWindowColormap.3x
+      6422 1998-12-31 03:17 man/man3/XCreateWindowEvent.3x
+      6008 1998-12-31 03:17 man/man3/XCirculateEvent.3x
+      5938 1998-12-31 03:17 man/man3/XCirculateRequestEvent.3x
+      6646 1998-12-31 03:17 man/man3/XClearArea.3x
+        23 1998-12-31 03:17 man/man3/XClearWindow.3x
+      6367 1998-12-31 03:17 man/man3/XColormapEvent.3x
+      6741 1998-12-31 03:17 man/man3/XConfigureEvent.3x
+      6238 1998-12-31 03:17 man/man3/XConfigureRequestEvent.3x
+     11665 1998-12-31 03:17 man/man3/XConfigureWindow.3x
+        29 1998-12-31 03:17 man/man3/XMoveWindow.3x
+        29 1998-12-31 03:17 man/man3/XResizeWindow.3x
+        29 1998-12-31 03:17 man/man3/XMoveResizeWindow.3x
+        29 1998-12-31 03:17 man/man3/XSetWindowBorderWidth.3x
+        29 1998-12-31 03:17 man/man3/XWindowChanges.3x
+      8914 1998-12-31 03:17 man/man3/XCopyArea.3x
+        22 1998-12-31 03:17 man/man3/XCopyPlane.3x
+     10043 1998-12-31 03:17 man/man3/XCreateColormap.3x
+        28 1998-12-31 03:17 man/man3/XCopyColormapAndFree.3x
+        28 1998-12-31 03:17 man/man3/XFreeColormap.3x
+        28 1998-12-31 03:17 man/man3/XColor.3x
+      9549 1998-12-31 03:17 man/man3/XCreateFontCursor.3x
+        30 1998-12-31 03:17 man/man3/XCreatePixmapCursor.3x
+        30 1998-12-31 03:17 man/man3/XCreateGlyphCursor.3x
+     12083 1998-12-31 03:17 man/man3/XCreateFontSet.3x
+        27 1998-12-31 03:17 man/man3/XFreeFontSet.3x
+     26991 1998-12-31 03:17 man/man3/XCreateGC.3x
+        22 1998-12-31 03:17 man/man3/XCopyGC.3x
+        22 1998-12-31 03:17 man/man3/XChangeGC.3x
+        22 1998-12-31 03:17 man/man3/XGetGCValues.3x
+        22 1998-12-31 03:17 man/man3/XFreeGC.3x
+        22 1998-12-31 03:17 man/man3/XGContextFromGC.3x
+        22 1998-12-31 03:17 man/man3/XGCValues.3x
+      5657 1998-12-31 03:17 man/man3/XCreateIC.3x
+        22 1998-12-31 03:17 man/man3/XDestroyIC.3x
+        22 1998-12-31 03:17 man/man3/XIMOfIC.3x
+     10185 1998-12-31 03:17 man/man3/XInitImage.3x
+        23 1998-12-31 03:17 man/man3/XCreateImage.3x
+        23 1998-12-31 03:17 man/man3/XGetPixel.3x
+        23 1998-12-31 03:17 man/man3/XPutPixel.3x
+        23 1998-12-31 03:17 man/man3/XSubImage.3x
+        23 1998-12-31 03:17 man/man3/XAddPixel.3x
+        23 1998-12-31 03:17 man/man3/XDestroyImage.3x
+      6039 1998-12-31 03:17 man/man3/XCreateOC.3x
+        22 1998-12-31 03:17 man/man3/XDestroyOC.3x
+        22 1998-12-31 03:17 man/man3/XSetOCValues.3x
+        22 1998-12-31 03:17 man/man3/XGetOCValues.3x
+        22 1998-12-31 03:17 man/man3/XOMOfOC.3x
+      6193 1998-12-31 03:17 man/man3/XCreatePixmap.3x
+        26 1998-12-31 03:17 man/man3/XFreePixmap.3x
+      4629 1998-12-31 03:17 man/man3/XCreateRegion.3x
+        21 1998-12-31 03:17 man/man3/XArc.3x
+        26 1998-12-31 03:17 man/man3/XSetRegion.3x
+        26 1998-12-31 03:17 man/man3/XDestroyRegion.3x
+     12514 1998-12-31 03:17 man/man3/XCreateWindow.3x
+        26 1998-12-31 03:17 man/man3/XCreateSimpleWindow.3x
+        26 1998-12-31 03:17 man/man3/XSetWindowAttributes.3x
+      9056 1998-12-31 03:17 man/man3/XCrossingEvent.3x
+      5705 1998-12-31 03:17 man/man3/XDestroyWindowEvent.3x
+      5060 1998-12-31 03:17 man/man3/XDefineCursor.3x
+        26 1998-12-31 03:17 man/man3/XUndefineCursor.3x
+      5844 1998-12-31 03:17 man/man3/XDestroyWindow.3x
+        27 1998-12-31 03:17 man/man3/XDestroySubwindows.3x
+     10072 1998-12-31 03:17 man/man3/XDrawArc.3x
+        21 1998-12-31 03:17 man/man3/XDrawArcs.3x
+      6614 1998-12-31 03:17 man/man3/XDrawImageString.3x
+        29 1998-12-31 03:17 man/man3/XDrawImageString16.3x
+      8652 1998-12-31 03:17 man/man3/XDrawLine.3x
+        22 1998-12-31 03:17 man/man3/XDrawLines.3x
+        22 1998-12-31 03:17 man/man3/XDrawSegments.3x
+        22 1998-12-31 03:17 man/man3/XSegment.3x
+      6631 1998-12-31 03:17 man/man3/XDrawPoint.3x
+        23 1998-12-31 03:17 man/man3/XDrawPoints.3x
+        23 1998-12-31 03:17 man/man3/XPoint.3x
+      6789 1998-12-31 03:17 man/man3/XDrawRectangle.3x
+        27 1998-12-31 03:17 man/man3/XDrawRectangles.3x
+        27 1998-12-31 03:17 man/man3/XRectangle.3x
+      6048 1998-12-31 03:17 man/man3/XDrawString.3x
+        24 1998-12-31 03:17 man/man3/XDrawString16.3x
+      8223 1998-12-31 03:17 man/man3/XDrawText.3x
+        22 1998-12-31 03:17 man/man3/XDrawText16.3x
+        22 1998-12-31 03:17 man/man3/XTextItem.3x
+        22 1998-12-31 03:17 man/man3/XTextItem16.3x
+      5305 1998-12-31 03:17 man/man3/XEmptyRegion.3x
+        25 1998-12-31 03:17 man/man3/XEqualRegion.3x
+        25 1998-12-31 03:17 man/man3/XPointInRegion.3x
+        25 1998-12-31 03:17 man/man3/XRectInRegion.3x
+      6345 1998-12-31 03:17 man/man3/XrmEnumerateDatabase.3x
+      4412 1998-12-31 03:17 man/man3/XExtentsOfFontSet.3x
+      5239 1998-12-31 03:17 man/man3/XErrorEvent.3x
+      6282 1998-12-31 03:17 man/man3/XExposeEvent.3x
+      6892 1998-12-31 03:17 man/man3/XFocusChangeEvent.3x
+      4678 1998-12-31 03:17 man/man3/XFilterEvent.3x
+      5223 1998-12-31 03:17 man/man3/XFontSetExtents.3x
+     11253 1998-12-31 03:17 man/man3/XFillRectangle.3x
+        27 1998-12-31 03:17 man/man3/XFillRectangles.3x
+        27 1998-12-31 03:17 man/man3/XFillPolygon.3x
+        27 1998-12-31 03:17 man/man3/XFillArc.3x
+        27 1998-12-31 03:17 man/man3/XFillArcs.3x
+      6910 1998-12-31 03:17 man/man3/XFlush.3x
+        19 1998-12-31 03:17 man/man3/XSync.3x
+        19 1998-12-31 03:17 man/man3/XEventsQueued.3x
+        19 1998-12-31 03:17 man/man3/XPending.3x
+      8235 1998-12-31 03:17 man/man3/XFontsOfFontSet.3x
+        28 1998-12-31 03:17 man/man3/XBaseFontNameListOfFontSet.3x
+        28 1998-12-31 03:17 man/man3/XLocaleOfFontSet.3x
+        28 1998-12-31 03:17 man/man3/XContextDependentDrawing.3x
+        28 1998-12-31 03:17 man/man3/XContextualDrawing.3x
+        28 1998-12-31 03:17 man/man3/XDirectionalDependentDrawing.3x
+      4133 1998-12-31 03:17 man/man3/XFree.3x
+      7540 1998-12-31 03:17 man/man3/XGraphicsExposeEvent.3x
+        33 1998-12-31 03:17 man/man3/XNoExposeEvent.3x
+      5877 1998-12-31 03:17 man/man3/XGravityEvent.3x
+     10824 1998-12-31 03:17 man/man3/XrmGetFileDatabase.3x
+        31 1998-12-31 03:17 man/man3/XrmPutFileDatabase.3x
+        31 1998-12-31 03:17 man/man3/XrmGetStringDatabase.3x
+        31 1998-12-31 03:17 man/man3/XrmLocaleOfDatabase.3x
+        31 1998-12-31 03:17 man/man3/XrmGetDatabase.3x
+        31 1998-12-31 03:17 man/man3/XrmSetDatabase.3x
+        31 1998-12-31 03:17 man/man3/XrmDestroyDatabase.3x
+     10978 1998-12-31 03:17 man/man3/XrmGetResource.3x
+        27 1998-12-31 03:17 man/man3/XrmQGetResource.3x
+        27 1998-12-31 03:17 man/man3/XrmQGetSearchList.3x
+        27 1998-12-31 03:17 man/man3/XrmQGetSearchResource.3x
+      6942 1998-12-31 03:17 man/man3/XGetVisualInfo.3x
+        27 1998-12-31 03:17 man/man3/XMatchVisualInfo.3x
+        27 1998-12-31 03:17 man/man3/XVisualIDFromVisual.3x
+        27 1998-12-31 03:17 man/man3/XVisualInfo.3x
+        33 1998-12-31 03:17 man/man3/XGetGeometry.3x
+     11000 1998-12-31 03:17 man/man3/XGetWindowAttributes.3x
+        33 1998-12-31 03:17 man/man3/XWindowAttributes.3x
+     14788 1998-12-31 03:17 man/man3/XGetWindowProperty.3x
+        31 1998-12-31 03:17 man/man3/XListProperties.3x
+        31 1998-12-31 03:17 man/man3/XChangeProperty.3x
+        31 1998-12-31 03:17 man/man3/XRotateWindowProperties.3x
+        31 1998-12-31 03:17 man/man3/XDeleteProperty.3x
+      9015 1998-12-31 03:17 man/man3/XGrabButton.3x
+        24 1998-12-31 03:17 man/man3/XUngrabButton.3x
+      8304 1998-12-31 03:17 man/man3/XGrabKey.3x
+        21 1998-12-31 03:17 man/man3/XUngrabKey.3x
+      8303 1998-12-31 03:17 man/man3/XGrabKeyboard.3x
+        26 1998-12-31 03:17 man/man3/XUngrabKeyboard.3x
+     11458 1998-12-31 03:17 man/man3/XGrabPointer.3x
+        25 1998-12-31 03:17 man/man3/XUngrabPointer.3x
+        25 1998-12-31 03:17 man/man3/XChangeActivePointerGrab.3x
+      4439 1998-12-31 03:17 man/man3/XGrabServer.3x
+        24 1998-12-31 03:17 man/man3/XUngrabServer.3x
+      7476 1998-12-31 03:17 man/man3/XIconifyWindow.3x
+        27 1998-12-31 03:17 man/man3/XWithdrawWindow.3x
+        27 1998-12-31 03:17 man/man3/XReconfigureWMWindow.3x
+      6163 1998-12-31 03:17 man/man3/XIfEvent.3x
+        21 1998-12-31 03:17 man/man3/XCheckIfEvent.3x
+        21 1998-12-31 03:17 man/man3/XPeekIfEvent.3x
+      8160 1998-12-31 03:17 man/man3/XrmInitialize.3x
+        26 1998-12-31 03:17 man/man3/XrmParseCommand.3x
+        26 1998-12-31 03:17 man/man3/XrmValue.3x
+        26 1998-12-31 03:17 man/man3/XrmOptionKind.3x
+        26 1998-12-31 03:17 man/man3/XrmOptionDescRec.3x
+      6741 1998-12-31 03:17 man/man3/XInstallColormap.3x
+        29 1998-12-31 03:17 man/man3/XUninstallColormap.3x
+        29 1998-12-31 03:17 man/man3/XListInstalledColormaps.3x
+      8069 1998-12-31 03:17 man/man3/XAddConnectionWatch.3x
+        32 1998-12-31 03:17 man/man3/XRemoveConnectionWatch.3x
+        32 1998-12-31 03:17 man/man3/XProcessInternalConnection.3x
+        32 1998-12-31 03:17 man/man3/XInternalConnectionNumbers.3x
+      6208 1998-12-31 03:17 man/man3/XIntersectRegion.3x
+        29 1998-12-31 03:17 man/man3/XUnionRegion.3x
+        29 1998-12-31 03:17 man/man3/XUnionRectWithRegion.3x
+        29 1998-12-31 03:17 man/man3/XSubtractRegion.3x
+        29 1998-12-31 03:17 man/man3/XXorRegion.3x
+        29 1998-12-31 03:17 man/man3/XOffsetRegion.3x
+        29 1998-12-31 03:17 man/man3/XShrinkRegion.3x
+      8047 1998-12-31 03:17 man/man3/XInternAtom.3x
+        24 1998-12-31 03:17 man/man3/XInternAtoms.3x
+        24 1998-12-31 03:17 man/man3/XGetAtomName.3x
+        24 1998-12-31 03:17 man/man3/XGetAtomNames.3x
+      5923 1998-12-31 03:17 man/man3/XKeymapEvent.3x
+      8013 1998-12-31 03:17 man/man3/XListFonts.3x
+        23 1998-12-31 03:17 man/man3/XFreeFontNames.3x
+        23 1998-12-31 03:17 man/man3/XListFontsWithInfo.3x
+        23 1998-12-31 03:17 man/man3/XFreeFontInfo.3x
+     15419 1998-12-31 03:17 man/man3/XLoadFont.3x
+        22 1998-12-31 03:17 man/man3/XQueryFont.3x
+        22 1998-12-31 03:17 man/man3/XLoadQueryFont.3x
+        22 1998-12-31 03:17 man/man3/XFreeFont.3x
+        22 1998-12-31 03:17 man/man3/XGetFontProperty.3x
+        22 1998-12-31 03:17 man/man3/XUnloadFont.3x
+        22 1998-12-31 03:17 man/man3/XCharStruct.3x
+        22 1998-12-31 03:17 man/man3/XFontProp.3x
+        22 1998-12-31 03:17 man/man3/XChar2b.3x
+        22 1998-12-31 03:17 man/man3/XFontStruct.3x
+      8055 1998-12-31 03:17 man/man3/XLookupKeysym.3x
+        26 1998-12-31 03:17 man/man3/XRefreshKeyboardMapping.3x
+        26 1998-12-31 03:17 man/man3/XLookupString.3x
+        26 1998-12-31 03:17 man/man3/XRebindKeySym.3x
+      6297 1998-12-31 03:17 man/man3/XrmMergeDatabases.3x
+        30 1998-12-31 03:17 man/man3/XrmCombineDatabase.3x
+        30 1998-12-31 03:17 man/man3/XrmCombineFileDatabase.3x
+      7975 1998-12-31 03:17 man/man3/XMapEvent.3x
+        22 1998-12-31 03:17 man/man3/XMappingEvent.3x
+      5578 1998-12-31 03:17 man/man3/XMapRequestEvent.3x
+      7330 1998-12-31 03:17 man/man3/XMapWindow.3x
+        23 1998-12-31 03:17 man/man3/XMapRaised.3x
+        23 1998-12-31 03:17 man/man3/XMapSubwindows.3x
+      9427 1998-12-31 03:17 man/man3/XNextEvent.3x
+        23 1998-12-31 03:17 man/man3/XPeekEvent.3x
+        23 1998-12-31 03:17 man/man3/XWindowEvent.3x
+        23 1998-12-31 03:17 man/man3/XCheckWindowEvent.3x
+        23 1998-12-31 03:17 man/man3/XMaskEvent.3x
+        23 1998-12-31 03:17 man/man3/XCheckMaskEvent.3x
+        23 1998-12-31 03:17 man/man3/XCheckTypedEvent.3x
+        23 1998-12-31 03:17 man/man3/XCheckTypedWindowEvent.3x
+      3989 1998-12-31 03:17 man/man3/XNoOp.3x
+      6771 1998-12-31 03:17 man/man3/XOpenDisplay.3x
+        25 1998-12-31 03:17 man/man3/XCloseDisplay.3x
+      9468 1998-12-31 03:17 man/man3/XOpenIM.3x
+        20 1998-12-31 03:17 man/man3/XCloseIM.3x
+        20 1998-12-31 03:17 man/man3/XSetIMValues.3x
+        20 1998-12-31 03:17 man/man3/XGetIMValues.3x
+        20 1998-12-31 03:17 man/man3/XDisplayOfIM.3x
+        20 1998-12-31 03:17 man/man3/XLocaleOfIM.3x
+        20 1998-12-31 03:17 man/man3/XRegisterIMInstantiateCallback.3x
+        20 1998-12-31 03:17 man/man3/XUnregisterIMInstantiateCallback.3x
+      7292 1998-12-31 03:17 man/man3/XOpenOM.3x
+        20 1998-12-31 03:17 man/man3/XCloseOM.3x
+        20 1998-12-31 03:17 man/man3/XSetOMValues.3x
+        20 1998-12-31 03:17 man/man3/XGetOMValues.3x
+        20 1998-12-31 03:17 man/man3/XDisplayOfOM.3x
+        20 1998-12-31 03:17 man/man3/XLocaleOfOM.3x
+      6490 1998-12-31 03:17 man/man3/XPropertyEvent.3x
+      8480 1998-12-31 03:17 man/man3/XParseGeometry.3x
+        27 1998-12-31 03:17 man/man3/XWMGeometry.3x
+      4716 1998-12-31 03:17 man/man3/XPolygonRegion.3x
+        27 1998-12-31 03:17 man/man3/XClipBox.3x
+      4392 1998-12-31 03:17 man/man3/XPutBackEvent.3x
+     12214 1998-12-31 03:17 man/man3/XPutImage.3x
+        22 1998-12-31 03:17 man/man3/XGetImage.3x
+        22 1998-12-31 03:17 man/man3/XGetSubImage.3x
+      7880 1998-12-31 03:17 man/man3/XrmPutResource.3x
+        27 1998-12-31 03:17 man/man3/XrmQPutResource.3x
+        27 1998-12-31 03:17 man/man3/XrmPutStringResource.3x
+        27 1998-12-31 03:17 man/man3/XrmQPutStringResource.3x
+        27 1998-12-31 03:17 man/man3/XrmPutLineResource.3x
+      7579 1998-12-31 03:17 man/man3/XQueryBestSize.3x
+        27 1998-12-31 03:17 man/man3/XQueryBestTile.3x
+        27 1998-12-31 03:17 man/man3/XQueryBestStipple.3x
+     10067 1998-12-31 03:17 man/man3/XQueryColor.3x
+        24 1998-12-31 03:17 man/man3/XQueryColors.3x
+        24 1998-12-31 03:17 man/man3/XLookupColor.3x
+        24 1998-12-31 03:17 man/man3/XParseColor.3x
+      6055 1998-12-31 03:17 man/man3/XQueryPointer.3x
+      5166 1998-12-31 03:17 man/man3/XQueryTree.3x
+      6217 1998-12-31 03:17 man/man3/XReparentEvent.3x
+      5205 1998-12-31 03:17 man/man3/XResourceManagerString.3x
+        35 1998-12-31 03:17 man/man3/XScreenResourceString.3x
+      5678 1998-12-31 03:17 man/man3/XResizeRequestEvent.3x
+      9675 1998-12-31 03:17 man/man3/XRaiseWindow.3x
+        25 1998-12-31 03:17 man/man3/XLowerWindow.3x
+        25 1998-12-31 03:17 man/man3/XCirculateSubwindows.3x
+        25 1998-12-31 03:17 man/man3/XCirculateSubwindowsUp.3x
+        25 1998-12-31 03:17 man/man3/XCirculateSubwindowsDown.3x
+        25 1998-12-31 03:17 man/man3/XRestackWindows.3x
+     10235 1998-12-31 03:17 man/man3/XReadBitmapFile.3x
+        28 1998-12-31 03:17 man/man3/XReadBitmapFileData.3x
+        28 1998-12-31 03:17 man/man3/XWriteBitmapFile.3x
+        28 1998-12-31 03:17 man/man3/XCreatePixmapFromBitmapData.3x
+        28 1998-12-31 03:17 man/man3/XCreateBitmapFromData.3x
+      6430 1998-12-31 03:17 man/man3/XRecolorCursor.3x
+        27 1998-12-31 03:17 man/man3/XFreeCursor.3x
+        27 1998-12-31 03:17 man/man3/XQueryBestCursor.3x
+      5882 1998-12-31 03:17 man/man3/XReparentWindow.3x
+      5805 1998-12-31 03:17 man/man3/XSelectionClearEvent.3x
+      5696 1998-12-31 03:17 man/man3/XSaveContext.3x
+        25 1998-12-31 03:17 man/man3/XFindContext.3x
+        25 1998-12-31 03:17 man/man3/XDeleteContext.3x
+        25 1998-12-31 03:17 man/man3/XUniqueContext.3x
+      6154 1998-12-31 03:17 man/man3/XSelectionEvent.3x
+      4937 1998-12-31 03:17 man/man3/XSetICFocus.3x
+        24 1998-12-31 03:17 man/man3/XUnsetICFocus.3x
+      6208 1998-12-31 03:17 man/man3/XSetICValues.3x
+        25 1998-12-31 03:17 man/man3/XGetICValues.3x
+      5620 1998-12-31 03:17 man/man3/XSelectInput.3x
+      7057 1998-12-31 03:17 man/man3/XStringListToTextProperty.3x
+        38 1998-12-31 03:17 man/man3/XTextPropertyToStringList.3x
+        38 1998-12-31 03:17 man/man3/XFreeStringList.3x
+        38 1998-12-31 03:17 man/man3/XTextProperty.3x
+      6161 1998-12-31 03:17 man/man3/XSelectionRequestEvent.3x
+      6015 1998-12-31 03:17 man/man3/XSetArcMode.3x
+        24 1998-12-31 03:17 man/man3/XSetSubwindowMode.3x
+        24 1998-12-31 03:17 man/man3/XSetGraphicsExposure.3x
+      8091 1998-12-31 03:17 man/man3/XSetClipOrigin.3x
+        27 1998-12-31 03:17 man/man3/XSetClipMask.3x
+        27 1998-12-31 03:17 man/man3/XSetClipRectangles.3x
+      5810 1998-12-31 03:17 man/man3/XSetCloseDownMode.3x
+        30 1998-12-31 03:17 man/man3/XKillClient.3x
+      6189 1998-12-31 03:17 man/man3/XSetCommand.3x
+        24 1998-12-31 03:17 man/man3/XGetCommand.3x
+      8542 1998-12-31 03:17 man/man3/XSetErrorHandler.3x
+        29 1998-12-31 03:17 man/man3/XGetErrorText.3x
+        29 1998-12-31 03:17 man/man3/XDisplayName.3x
+        29 1998-12-31 03:17 man/man3/XSetIOErrorHandler.3x
+        29 1998-12-31 03:17 man/man3/XGetErrorDatabaseText.3x
+      9122 1998-12-31 03:17 man/man3/XSendEvent.3x
+        23 1998-12-31 03:17 man/man3/XDisplayMotionBufferSize.3x
+        23 1998-12-31 03:17 man/man3/XGetMotionEvents.3x
+        23 1998-12-31 03:17 man/man3/XTimeCoord.3x
+      5471 1998-12-31 03:17 man/man3/XSetFillStyle.3x
+        26 1998-12-31 03:17 man/man3/XSetFillRule.3x
+      4634 1998-12-31 03:17 man/man3/XSetFont.3x
+      6217 1998-12-31 03:17 man/man3/XSetFontPath.3x
+        25 1998-12-31 03:17 man/man3/XGetFontPath.3x
+        25 1998-12-31 03:17 man/man3/XFreeFontPath.3x
+      7270 1998-12-31 03:17 man/man3/XSetInputFocus.3x
+        27 1998-12-31 03:17 man/man3/XGetInputFocus.3x
+      7727 1998-12-31 03:17 man/man3/XSetLineAttributes.3x
+        31 1998-12-31 03:17 man/man3/XSetDashes.3x
+      5974 1998-12-31 03:17 man/man3/XSetPointerMapping.3x
+        31 1998-12-31 03:17 man/man3/XGetPointerMapping.3x
+      8677 1998-12-31 03:17 man/man3/XSetScreenSaver.3x
+        28 1998-12-31 03:17 man/man3/XForceScreenSaver.3x
+        28 1998-12-31 03:17 man/man3/XActivateScreenSaver.3x
+        28 1998-12-31 03:17 man/man3/XResetScreenSaver.3x
+        28 1998-12-31 03:17 man/man3/XGetScreenSaver.3x
+      7436 1998-12-31 03:17 man/man3/XSetSelectionOwner.3x
+        31 1998-12-31 03:17 man/man3/XGetSelectionOwner.3x
+        31 1998-12-31 03:17 man/man3/XConvertSelection.3x
+      6709 1998-12-31 03:17 man/man3/XSetState.3x
+        22 1998-12-31 03:17 man/man3/XSetFunction.3x
+        22 1998-12-31 03:17 man/man3/XSetPlanemask.3x
+        22 1998-12-31 03:17 man/man3/XSetForeground.3x
+        22 1998-12-31 03:17 man/man3/XSetBackground.3x
+      5622 1998-12-31 03:17 man/man3/XSetTransientForHint.3x
+        33 1998-12-31 03:17 man/man3/XGetTransientForHint.3x
+      7268 1998-12-31 03:17 man/man3/XSetTextProperty.3x
+        29 1998-12-31 03:17 man/man3/XGetTextProperty.3x
+      6077 1998-12-31 03:17 man/man3/XSetTile.3x
+        21 1998-12-31 03:17 man/man3/XSetStipple.3x
+        21 1998-12-31 03:17 man/man3/XSetTSOrigin.3x
+      5209 1998-12-31 03:17 man/man3/XSetWMClientMachine.3x
+        32 1998-12-31 03:17 man/man3/XGetWMClientMachine.3x
+      6809 1998-12-31 03:17 man/man3/XSetWMColormapWindows.3x
+        34 1998-12-31 03:17 man/man3/XGetWMColormapWindows.3x
+      6693 1998-12-31 03:17 man/man3/XSetWMIconName.3x
+        27 1998-12-31 03:17 man/man3/XGetWMIconName.3x
+        27 1998-12-31 03:17 man/man3/XSetIconName.3x
+        27 1998-12-31 03:17 man/man3/XGetIconName.3x
+      7047 1998-12-31 03:17 man/man3/XSetWMName.3x
+        23 1998-12-31 03:17 man/man3/XGetWMName.3x
+        23 1998-12-31 03:17 man/man3/XStoreName.3x
+        23 1998-12-31 03:17 man/man3/XFetchName.3x
+     11169 1998-12-31 03:17 man/man3/XSetWMProperties.3x
+        29 1998-12-31 03:17 man/man3/XmbSetWMProperties.3x
+      6615 1998-12-31 03:17 man/man3/XSetWMProtocols.3x
+        28 1998-12-31 03:17 man/man3/XGetWMProtocols.3x
+      7097 1998-12-31 03:17 man/man3/XStoreBytes.3x
+        24 1998-12-31 03:17 man/man3/XStoreBuffer.3x
+        24 1998-12-31 03:17 man/man3/XFetchBytes.3x
+        24 1998-12-31 03:17 man/man3/XFetchBuffer.3x
+        24 1998-12-31 03:17 man/man3/XRotateBuffers.3x
+      8344 1998-12-31 03:17 man/man3/XStoreColors.3x
+        25 1998-12-31 03:17 man/man3/XStoreColor.3x
+        25 1998-12-31 03:17 man/man3/XStoreNamedColor.3x
+      6391 1998-12-31 03:17 man/man3/XStringToKeysym.3x
+        28 1998-12-31 03:17 man/man3/XKeysymToString.3x
+        28 1998-12-31 03:17 man/man3/XKeycodeToKeysym.3x
+        28 1998-12-31 03:17 man/man3/XKeysymToKeycode.3x
+        28 1998-12-31 03:17 man/man3/XConvertCase.3x
+      7024 1998-12-31 03:17 man/man3/XSupportsLocale.3x
+        28 1998-12-31 03:17 man/man3/XSetLocaleModifiers.3x
+      4672 1998-12-31 03:17 man/man3/XSynchronize.3x
+        25 1998-12-31 03:17 man/man3/XSetAfterFunction.3x
+     11740 1998-12-31 03:17 man/man3/XmbTextListToTextProperty.3x
+        38 1998-12-31 03:17 man/man3/XwcTextListToTextProperty.3x
+        38 1998-12-31 03:17 man/man3/XmbTextPropertyToTextList.3x
+        38 1998-12-31 03:17 man/man3/XwcTextPropertyToTextList.3x
+        38 1998-12-31 03:17 man/man3/XwcFreeStringList.3x
+        38 1998-12-31 03:17 man/man3/XDefaultString.3x
+      9565 1998-12-31 03:17 man/man3/XTextExtents.3x
+        25 1998-12-31 03:17 man/man3/XTextExtents16.3x
+        25 1998-12-31 03:17 man/man3/XQueryTextExtents.3x
+        25 1998-12-31 03:17 man/man3/XQueryTextExtents16.3x
+      4493 1998-12-31 03:17 man/man3/XTextWidth.3x
+        23 1998-12-31 03:17 man/man3/XTextWidth16.3x
+      5774 1998-12-31 03:17 man/man3/XInitThreads.3x
+        25 1998-12-31 03:17 man/man3/XLockDisplay.3x
+        25 1998-12-31 03:17 man/man3/XUnlockDisplay.3x
+      5438 1998-12-31 03:17 man/man3/XTranslateCoordinates.3x
+      8966 1998-12-31 03:17 man/man3/XrmUniqueQuark.3x
+        27 1998-12-31 03:17 man/man3/XrmStringToQuark.3x
+        27 1998-12-31 03:17 man/man3/XrmPermStringToQuark.3x
+      6157 1998-12-31 03:17 man/man3/XcmsColor.3x
+        27 1998-12-31 03:17 man/man3/XrmQuarkToString.3x
+        27 1998-12-31 03:17 man/man3/XrmStringToQuarkList.3x
+        27 1998-12-31 03:17 man/man3/XrmStringToBindingQuarkList.3x
+      5949 1998-12-31 03:17 man/man3/XUnmapEvent.3x
+      5533 1998-12-31 03:17 man/man3/XUnmapWindow.3x
+        25 1998-12-31 03:17 man/man3/XUnmapSubwindows.3x
+      4458 1998-12-31 03:17 man/man3/XVaCreateNestedList.3x
+      6738 1998-12-31 03:17 man/man3/XVisibilityNotifyEvent.3x
+      5963 1998-12-31 03:17 man/man3/XWarpPointer.3x
+      5173 1998-12-31 03:17 man/man3/XcmsCCCOfColormap.3x
+        30 1998-12-31 03:17 man/man3/XcmsSetCCCOfColormap.3x
+      7660 1998-12-31 03:17 man/man3/XcmsAllocColor.3x
+        27 1998-12-31 03:17 man/man3/XcmsAllocNamedColor.3x
+      5808 1998-12-31 03:17 man/man3/XcmsConvertColors.3x
+        22 1998-12-31 03:17 man/man3/XcmsRGB.3x
+        22 1998-12-31 03:17 man/man3/XcmsRGBi.3x
+        22 1998-12-31 03:17 man/man3/XcmsCIEXYZ.3x
+        22 1998-12-31 03:17 man/man3/XcmsCIEuvY.3x
+        22 1998-12-31 03:17 man/man3/XcmsCIExyY.3x
+        22 1998-12-31 03:17 man/man3/XcmsCIELab.3x
+        22 1998-12-31 03:17 man/man3/XcmsCIELuv.3x
+        22 1998-12-31 03:17 man/man3/XcmsTekHVC.3x
+        22 1998-12-31 03:17 man/man3/XcmsPad.3x
+      6121 1998-12-31 03:17 man/man3/XcmsCreateCCC.3x
+        26 1998-12-31 03:17 man/man3/XcmsFreeCCC.3x
+      4458 1998-12-31 03:17 man/man3/XcmsDefaultCCC.3x
+      6879 1998-12-31 03:17 man/man3/XcmsCIELabQueryMaxC.3x
+        32 1998-12-31 03:17 man/man3/XcmsCIELabQueryMaxL.3x
+        32 1998-12-31 03:17 man/man3/XcmsCIELabQueryMaxLC.3x
+        32 1998-12-31 03:17 man/man3/XcmsCIELabQueryMinL.3x
+      6908 1998-12-31 03:17 man/man3/XcmsCIELuvQueryMaxC.3x
+        32 1998-12-31 03:17 man/man3/XcmsCIELuvQueryMaxL.3x
+        32 1998-12-31 03:17 man/man3/XcmsCIELuvQueryMaxLC.3x
+        32 1998-12-31 03:17 man/man3/XcmsCIELuvQueryMinL.3x
+      6196 1998-12-31 03:17 man/man3/XcmsQueryBlack.3x
+        27 1998-12-31 03:17 man/man3/XcmsQueryBlue.3x
+      5258 1998-12-31 03:17 man/man3/XtAddGrab.3x
+        27 1998-12-31 03:17 man/man3/XcmsQueryGreen.3x
+        27 1998-12-31 03:17 man/man3/XcmsQueryRed.3x
+        27 1998-12-31 03:17 man/man3/XcmsQueryWhite.3x
+      8097 1998-12-31 03:17 man/man3/XcmsQueryColor.3x
+        27 1998-12-31 03:17 man/man3/XcmsQueryColors.3x
+        27 1998-12-31 03:17 man/man3/XcmsLookupColor.3x
+      8414 1998-12-31 03:17 man/man3/XcmsStoreColor.3x
+        27 1998-12-31 03:17 man/man3/XcmsStoreColors.3x
+      5479 1998-12-31 03:17 man/man3/XcmsSetWhitePoint.3x
+        30 1998-12-31 03:17 man/man3/XcmsSetWhiteAdjustProc.3x
+      8038 1998-12-31 03:17 man/man3/XcmsTekHVCQueryMaxC.3x
+        32 1998-12-31 03:17 man/man3/XcmsTekHVCQueryMaxV.3x
+        32 1998-12-31 03:17 man/man3/XcmsTekHVCQueryMaxVC.3x
+        32 1998-12-31 03:17 man/man3/XcmsTekHVCQueryMaxVSamples.3x
+        32 1998-12-31 03:17 man/man3/XcmsTekHVCQueryMinV.3x
+      5692 1998-12-31 03:17 man/man3/XmbDrawImageString.3x
+        31 1998-12-31 03:17 man/man3/XwcDrawImageString.3x
+      5424 1998-12-31 03:17 man/man3/XmbDrawString.3x
+        26 1998-12-31 03:17 man/man3/XwcDrawString.3x
+      6556 1998-12-31 03:17 man/man3/XmbDrawText.3x
+        24 1998-12-31 03:17 man/man3/XwcDrawText.3x
+      8232 1998-12-31 03:17 man/man3/XmbLookupString.3x
+        28 1998-12-31 03:17 man/man3/XwcLookupString.3x
+      4921 1998-12-31 03:17 man/man3/XmbResetIC.3x
+        23 1998-12-31 03:17 man/man3/XwcResetIC.3x
+      4984 1998-12-31 03:17 man/man3/XmbTextEscapement.3x
+        30 1998-12-31 03:17 man/man3/XwcTextEscapement.3x
+      6442 1998-12-31 03:17 man/man3/XmbTextExtents.3x
+        27 1998-12-31 03:17 man/man3/XwcTextExtents.3x
+      7977 1998-12-31 03:17 man/man3/XmbTextPerCharExtents.3x
+        34 1998-12-31 03:17 man/man3/XwcTextPerCharExtents.3x
+      5284 1998-12-31 03:17 man/man3/XtAddCallback.3x
+        26 1998-12-31 03:17 man/man3/XtAddCallbacks.3x
+        26 1998-12-31 03:17 man/man3/XtRemoveCallback.3x
+        26 1998-12-31 03:17 man/man3/XtRemoveCallbacks.3x
+        22 1998-12-31 03:17 man/man3/XtRemoveGrab.3x
+        26 1998-12-31 03:17 man/man3/XtRemoveAllCallbacks.3x
+      7920 1998-12-31 03:17 man/man3/XtAddEventHandler.3x
+        30 1998-12-31 03:17 man/man3/XtAddRawEventHandler.3x
+        30 1998-12-31 03:17 man/man3/XtRemoveEventHandler.3x
+        30 1998-12-31 03:17 man/man3/XtRemoveRawEventHandler.3x
+        30 1998-12-31 03:17 man/man3/XtInsertEventHandler.3x
+        30 1998-12-31 03:17 man/man3/XtInsertRawEventHandler.3x
+      3758 1998-12-31 03:17 man/man3/XtAddExposureToRegion.3x
+      3558 1998-12-31 03:17 man/man3/XtAppAddActions.3x
+      3392 1998-12-31 03:17 man/man3/XtAddActions.3x
+      4596 1998-12-31 03:17 man/man3/XtAppAddConverter.3x
+        30 1998-12-31 03:17 man/man3/XtAddConverter.3x
+      5099 1998-12-31 03:17 man/man3/XtAppAddInput.3x
+        26 1998-12-31 03:17 man/man3/XtRemoveInput.3x
+      4237 1998-12-31 03:17 man/man3/XtAppAddTimeOut.3x
+        28 1998-12-31 03:17 man/man3/XtRemoveTimeOut.3x
+        28 1998-12-31 03:17 man/man3/XtAppAddTimeout.3x
+      3934 1998-12-31 03:17 man/man3/XtAppAddWorkProc.3x
+        29 1998-12-31 03:17 man/man3/XtRemoveWorkProc.3x
+      5032 1998-12-31 03:17 man/man3/XtAppCreateShell.3x
+        29 1998-12-31 03:17 man/man3/XtVaAppCreateShell.3x
+      4575 1998-12-31 03:17 man/man3/XtAppError.3x
+        23 1998-12-31 03:17 man/man3/XtAppSetErrorHandler.3x
+        23 1998-12-31 03:17 man/man3/XtAppSetWarningHandler.3x
+        23 1998-12-31 03:17 man/man3/XtAppWarning.3x
+      5326 1998-12-31 03:17 man/man3/XtAppErrorMsg.3x
+        26 1998-12-31 03:17 man/man3/XtAppSetErrorMsgHandler.3x
+        26 1998-12-31 03:17 man/man3/XtAppSetWarningMsgHandler.3x
+        26 1998-12-31 03:17 man/man3/XtAppWarningMsg.3x
+      4684 1998-12-31 03:17 man/man3/XtAppGetErrorDatabase.3x
+        34 1998-12-31 03:17 man/man3/XtAppGetErrorDatabaseText.3x
+      4052 1998-12-31 03:17 man/man3/XtAppGetSelectionTimeout.3x
+        37 1998-12-31 03:17 man/man3/XtAppSetSelectionTimeout.3x
+      8071 1998-12-31 03:17 man/man3/XtAppNextEvent.3x
+        27 1998-12-31 03:17 man/man3/XtAppPending.3x
+        27 1998-12-31 03:17 man/man3/XtAppPeekEvent.3x
+        27 1998-12-31 03:17 man/man3/XtAppProcessEvent.3x
+        27 1998-12-31 03:17 man/man3/XtDispatchEvent.3x
+        27 1998-12-31 03:17 man/man3/XtAppMainLoop.3x
+      4357 1998-12-31 03:17 man/man3/XtNextEvent.3x
+        24 1998-12-31 03:17 man/man3/XtPending.3x
+        24 1998-12-31 03:17 man/man3/XtPeekEvent.3x
+        24 1998-12-31 03:17 man/man3/XtProcessEvent.3x
+        24 1998-12-31 03:17 man/man3/XtMainLoop.3x
+      3622 1998-12-31 03:17 man/man3/XtBuildEventMask.3x
+      3548 1998-12-31 03:17 man/man3/XtCallAcceptFocus.3x
+      4820 1998-12-31 03:17 man/man3/XtCallCallbacks.3x
+        28 1998-12-31 03:17 man/man3/XtCallCallbackList.3x
+        28 1998-12-31 03:17 man/man3/XtHasCallbacks.3x
+      6822 1998-12-31 03:17 man/man3/XtClass.3x
+        20 1998-12-31 03:17 man/man3/XtSuperclass.3x
+        20 1998-12-31 03:17 man/man3/XtIsSubclass.3x
+        20 1998-12-31 03:17 man/man3/XtCheckSubclass.3x
+        20 1998-12-31 03:17 man/man3/XtIsObject.3x
+        20 1998-12-31 03:17 man/man3/XtIsRectObj.3x
+        20 1998-12-31 03:17 man/man3/XtIsWidget.3x
+        20 1998-12-31 03:17 man/man3/XtIsComposite.3x
+        20 1998-12-31 03:17 man/man3/XtIsConstraint.3x
+        20 1998-12-31 03:17 man/man3/XtIsShell.3x
+        20 1998-12-31 03:17 man/man3/XtIsOverrideShell.3x
+        20 1998-12-31 03:17 man/man3/XtIsWMShell.3x
+        20 1998-12-31 03:17 man/man3/XtIsVendorShell.3x
+        20 1998-12-31 03:17 man/man3/XtIsTransientShell.3x
+        20 1998-12-31 03:17 man/man3/XtIsTopLevelShell.3x
+        20 1998-12-31 03:17 man/man3/XtIsApplicationShell.3x
+      5783 1998-12-31 03:17 man/man3/XtConfigureWidget.3x
+        30 1998-12-31 03:17 man/man3/XtMoveWidget.3x
+        30 1998-12-31 03:17 man/man3/XtResizeWidget.3x
+      5111 1998-12-31 03:17 man/man3/XtConvert.3x
+        22 1998-12-31 03:17 man/man3/XtDirectConvert.3x
+      6623 1998-12-31 03:17 man/man3/XtConvertAndStore.3x
+        30 1998-12-31 03:17 man/man3/XtCallConverter.3x
+        39 1998-12-31 03:17 man/man3/XtToolkitInitialize.3x
+      4412 1998-12-31 03:17 man/man3/XtCreateApplicationContext.3x
+        39 1998-12-31 03:17 man/man3/XtDestroyApplicationContext.3x
+        39 1998-12-31 03:17 man/man3/XtWidgetToApplicationContext.3x
+      4836 1998-12-31 03:17 man/man3/XtCreatePopupShell.3x
+        31 1998-12-31 03:17 man/man3/XtVaCreatePopupShell.3x
+      9365 1998-12-31 03:17 man/man3/XtCreateWidget.3x
+        27 1998-12-31 03:17 man/man3/XtVaCreateWidget.3x
+        27 1998-12-31 03:17 man/man3/XtCreateManagedWidget.3x
+        27 1998-12-31 03:17 man/man3/XtVaCreateManagedWidget.3x
+        27 1998-12-31 03:17 man/man3/XtDestroyWidget.3x
+      4254 1998-12-31 03:17 man/man3/XtCreateWindow.3x
+      4063 1998-12-31 03:17 man/man3/XtDisplay.3x
+        22 1998-12-31 03:17 man/man3/XtDisplayOfObject.3x
+        22 1998-12-31 03:17 man/man3/XtScreen.3x
+        22 1998-12-31 03:17 man/man3/XtScreenOfObject.3x
+        22 1998-12-31 03:17 man/man3/XtWindow.3x
+        22 1998-12-31 03:17 man/man3/XtWindowOfObject.3x
+      8162 1998-12-31 03:17 man/man3/XtDisplayInitialize.3x
+        32 1998-12-31 03:17 man/man3/XtOpenDisplay.3x
+        32 1998-12-31 03:17 man/man3/XtCloseDisplay.3x
+        32 1998-12-31 03:17 man/man3/XtDatabase.3x
+        32 1998-12-31 03:17 man/man3/XtScreenDatabase.3x
+      4222 1998-12-31 03:17 man/man3/XtGetGC.3x
+        20 1998-12-31 03:17 man/man3/XtReleaseGC.3x
+      5200 1998-12-31 03:17 man/man3/XtGetResourceList.3x
+        30 1998-12-31 03:17 man/man3/XtGetConstraintResourceList.3x
+      5727 1998-12-31 03:17 man/man3/XtGetSelectionValue.3x
+        32 1998-12-31 03:17 man/man3/XtGetSelectionValues.3x
+      5125 1998-12-31 03:17 man/man3/XtGetSubresources.3x
+        30 1998-12-31 03:17 man/man3/XtVaGetSubresources.3x
+      5033 1998-12-31 03:17 man/man3/XtGetApplicationResources.3x
+        38 1998-12-31 03:17 man/man3/XtVaGetApplicationResources.3x
+      6279 1998-12-31 03:17 man/man3/XtMakeGeometryRequest.3x
+        34 1998-12-31 03:17 man/man3/XtMakeResizeRequest.3x
+      5556 1998-12-31 03:17 man/man3/XtMalloc.3x
+        21 1998-12-31 03:17 man/man3/XtCalloc.3x
+        21 1998-12-31 03:17 man/man3/XtRealloc.3x
+        21 1998-12-31 03:17 man/man3/XtFree.3x
+        21 1998-12-31 03:17 man/man3/XtNew.3x
+        21 1998-12-31 03:17 man/man3/XtNewString.3x
+      9988 1998-12-31 03:17 man/man3/XtManageChildren.3x
+        29 1998-12-31 03:17 man/man3/XtManageChild.3x
+        29 1998-12-31 03:17 man/man3/XtUnmanageChildren.3x
+        29 1998-12-31 03:17 man/man3/XtUnmanageChild.3x
+        29 1998-12-31 03:17 man/man3/XtIsManaged.3x
+        29 1998-12-31 03:17 man/man3/XtChangeManagedSet.3x
+      4127 1998-12-31 03:17 man/man3/XtMapWidget.3x
+        24 1998-12-31 03:17 man/man3/XtSetMappedWhenManaged.3x
+        24 1998-12-31 03:17 man/man3/XtUnmapWidget.3x
+      4966 1998-12-31 03:17 man/man3/XtNameToWidget.3x
+        27 1998-12-31 03:17 man/man3/XtWindowToWidget.3x
+      4361 1998-12-31 03:17 man/man3/XtOffset.3x
+        21 1998-12-31 03:17 man/man3/XtOffsetOf.3x
+        21 1998-12-31 03:17 man/man3/XtNumber.3x
+      7013 1998-12-31 03:17 man/man3/XtOwnSelection.3x
+        27 1998-12-31 03:17 man/man3/XtOwnSelectionIncremental.3x
+        27 1998-12-31 03:17 man/man3/XtDisownSelection.3x
+      4774 1998-12-31 03:17 man/man3/XtParseAcceleratorTable.3x
+        36 1998-12-31 03:17 man/man3/XtInstallAccelerators.3x
+        36 1998-12-31 03:17 man/man3/XtInstallAllAccelerators.3x
+      5109 1998-12-31 03:17 man/man3/XtParseTranslationTable.3x
+        36 1998-12-31 03:17 man/man3/XtAugmentTranslations.3x
+        36 1998-12-31 03:17 man/man3/XtOverrideTranslations.3x
+        36 1998-12-31 03:17 man/man3/XtUninstallTranslations.3x
+      5478 1998-12-31 03:17 man/man3/XtPopdown.3x
+        22 1998-12-31 03:17 man/man3/XtCallbackPopdown.3x
+        22 1998-12-31 03:17 man/man3/MenuPopdown.3x
+      8289 1998-12-31 03:17 man/man3/XtPopup.3x
+        20 1998-12-31 03:17 man/man3/XtPopupSpringLoaded.3x
+        20 1998-12-31 03:17 man/man3/XtCallbackNone.3x
+        20 1998-12-31 03:17 man/man3/XtCallbackNonexclusive.3x
+        20 1998-12-31 03:17 man/man3/XtCallbackExclusive.3x
+        20 1998-12-31 03:17 man/man3/MenuPopup.3x
+      4263 1998-12-31 03:17 man/man3/XtQueryGeometry.3x
+      5355 1998-12-31 03:17 man/man3/XtRealizeWidget.3x
+        28 1998-12-31 03:17 man/man3/XtIsRealized.3x
+        28 1998-12-31 03:17 man/man3/XtUnrealizeWidget.3x
+      4917 1998-12-31 03:17 man/man3/XtSetArg.3x
+        21 1998-12-31 03:17 man/man3/XtMergeArgLists.3x
+      4744 1998-12-31 03:17 man/man3/XtSetKeyboardFocus.3x
+      6054 1998-12-31 03:17 man/man3/XtSetKeyTranslator.3x
+        31 1998-12-31 03:17 man/man3/XtTranslateKeycode.3x
+        31 1998-12-31 03:17 man/man3/XtRegisterCaseConverter.3x
+        31 1998-12-31 03:17 man/man3/XtConvertCase.3x
+      4536 1998-12-31 03:17 man/man3/XtSetSensitive.3x
+        27 1998-12-31 03:17 man/man3/XtIsSensitive.3x
+      9004 1998-12-31 03:17 man/man3/XtSetValues.3x
+        24 1998-12-31 03:17 man/man3/XtVaSetValues.3x
+        24 1998-12-31 03:17 man/man3/XtSetSubvalues.3x
+        24 1998-12-31 03:17 man/man3/XtGetValues.3x
+        24 1998-12-31 03:17 man/man3/XtVaGetValues.3x
+        24 1998-12-31 03:17 man/man3/XtGetSubvalues.3x
+      3758 1998-12-31 03:17 man/man3/XtStringConversionWarning.3x
+      3920 1998-12-31 03:17 man/man3/XtDisplayStringConversionWarning.3x
+      3703 1998-12-31 03:17 man/man3/XtTranslateCoords.3x
+      4551 1998-12-31 03:17 man/man3/XtGetKeysymTable.3x
+        29 1998-12-31 03:17 man/man3/XtKeysymToKeycodeList.3x
+      5194 1998-12-31 03:17 man/man3/XtAppSetTypeConverter.3x
+        34 1998-12-31 03:17 man/man3/XtSetTypeConverter.3x
+      4275 1998-12-31 03:17 man/man3/XtAppAddActionHook.3x
+        31 1998-12-31 03:17 man/man3/XtRemoveActionHook.3x
+      4010 1998-12-31 03:17 man/man3/XtGetActionList.3x
+      4334 1998-12-31 03:17 man/man3/XtCallActionProc.3x
+      3722 1998-12-31 03:17 man/man3/XtRegisterGrabAction.3x
+      3810 1998-12-31 03:17 man/man3/XtSetMultiClickTime.3x
+        32 1998-12-31 03:17 man/man3/XtGetMultiClickTime.3x
+      4116 1998-12-31 03:17 man/man3/XtGetActionKeysym.3x
+      9657 1998-12-31 03:17 man/man3/XtInsertEventTypeHandler.3x
+        37 1998-12-31 03:17 man/man3/XtRemoveEventTypeHandler.3x
+        37 1998-12-31 03:17 man/man3/XtRegisterExtensionSelector.3x
+        37 1998-12-31 03:17 man/man3/XtSetEventDispatcher.3x
+        37 1998-12-31 03:17 man/man3/XtDispatchEventToWidget.3x
+      3578 1998-12-31 03:17 man/man3/XtGetKeyboardFocusWidget.3x
+      3908 1998-12-31 03:17 man/man3/XtLastEventProcessed.3x
+        33 1998-12-31 03:17 man/man3/XtLastTimestampProcessed.3x
+      5054 1998-12-31 03:17 man/man3/XtAppAddSignal.3x
+        27 1998-12-31 03:17 man/man3/XtNoticeSignal.3x
+        27 1998-12-31 03:17 man/man3/XtRemoveSignal.3x
+      4337 1998-12-31 03:17 man/man3/XtAddInput.3x
+        23 1998-12-31 03:17 man/man3/XtAddTimeOut.3x
+        23 1998-12-31 03:17 man/man3/XtAddTimeout.3x
+      4045 1998-12-31 03:17 man/man3/XtAppAddBlockHook.3x
+        30 1998-12-31 03:17 man/man3/XtRemoveBlockHook.3x
+      4470 1998-12-31 03:17 man/man3/XtGetClassExtension.3x
+      3848 1998-12-31 03:17 man/man3/XtVaCreateArgsList.3x
+      3143 1998-12-31 03:17 man/man3/XtParent.3x
+      3128 1998-12-31 03:17 man/man3/XtName.3x
+      3831 1998-12-31 03:17 man/man3/XtCreateApplicationShell.3x
+      5119 1998-12-31 03:17 man/man3/XtSetLanguageProc.3x
+      6342 1998-12-31 03:17 man/man3/XtAppInitialize.3x
+        28 1998-12-31 03:17 man/man3/XtVaAppInitialize.3x
+      4500 1998-12-31 03:17 man/man3/XtInitialize.3x
+      4597 1998-12-31 03:18 man/man3/XtAppSetFallbackResources.3x
+      3543 1998-12-31 03:18 man/man3/XtInitializeWidgetClass.3x
+      3376 1998-12-31 03:18 man/man3/XtDisplayToApplicationContext.3x
+      3720 1998-12-31 03:18 man/man3/XtSessionGetToken.3x
+        30 1998-12-31 03:18 man/man3/XtSessionReturnToken.3x
+      4839 1998-12-31 03:18 man/man3/XtErrorMsg.3x
+        23 1998-12-31 03:18 man/man3/XtSetErrorMsgHandler.3x
+        23 1998-12-31 03:18 man/man3/XtWarningMsg.3x
+        23 1998-12-31 03:18 man/man3/XtSetWarningMsgHandler.3x
+      4069 1998-12-31 03:18 man/man3/XtError.3x
+        20 1998-12-31 03:18 man/man3/XtSetErrorHandler.3x
+        20 1998-12-31 03:18 man/man3/XtSetWarningHandler.3x
+        20 1998-12-31 03:18 man/man3/XtWarning.3x
+      4237 1998-12-31 03:18 man/man3/XtGetErrorDatabase.3x
+        31 1998-12-31 03:18 man/man3/XtGetErrorDatabaseText.3x
+      5698 1998-12-31 03:18 man/man3/XtAllocateGC.3x
+      3679 1998-12-31 03:18 man/man3/XtAppReleaseCacheRefs.3x
+      4221 1998-12-31 03:18 man/man3/XtSetWMColormapWindows.3x
+      5561 1998-12-31 03:18 man/man3/XtFindFile.3x
+      8642 1998-12-31 03:18 man/man3/XtResolvePathname.3x
+      6389 1998-12-31 03:18 man/man3/XtGetSelectionValueIncremental.3x
+        43 1998-12-31 03:18 man/man3/XtGetSelectionValuesIncremental.3x
+      3521 1998-12-31 03:18 man/man3/XtGetSelectionTimeout.3x
+        34 1998-12-31 03:18 man/man3/XtSetSelectionTimeout.3x
+      4086 1998-12-31 03:18 man/man3/XtGetSelectionRequest.3x
+      5394 1998-12-31 03:18 man/man3/XtSetSelectionParameters.3x
+      4645 1998-12-31 03:18 man/man3/XtGetSelectionParameters.3x
+      5501 1998-12-31 03:18 man/man3/XtCreateSelectionRequest.3x
+        37 1998-12-31 03:18 man/man3/XtSendSelectionRequest.3x
+        37 1998-12-31 03:18 man/man3/XtCancelSelectionRequest.3x
+      3635 1998-12-31 03:18 man/man3/XtReservePropertyAtom.3x
+        34 1998-12-31 03:18 man/man3/XtReleasePropertyAtom.3x
+      9012 1998-12-31 03:18 man/man3/XtGrabKey.3x
+        22 1998-12-31 03:18 man/man3/XtUngrabKey.3x
+        22 1998-12-31 03:18 man/man3/XtGrabKeyboard.3x
+        22 1998-12-31 03:18 man/man3/XtUngrabKeyboard.3x
+        22 1998-12-31 03:18 man/man3/XtGrabButton.3x
+        22 1998-12-31 03:18 man/man3/XtUngrabButton.3x
+        22 1998-12-31 03:18 man/man3/XtGrabPointer.3x
+        22 1998-12-31 03:18 man/man3/XtUngrabPointer.3x
+      3837 1998-12-31 03:18 man/man3/XtGetApplicationNameAndClass.3x
+      4466 1998-12-31 03:18 man/man3/XtRegisterDrawable.3x
+        31 1998-12-31 03:18 man/man3/XtUnregisterDrawable.3x
+      3440 1998-12-31 03:18 man/man3/XtHooksOfDisplay.3x
+      3594 1998-12-31 03:18 man/man3/XtGetDisplays.3x
+      3477 1998-12-31 03:18 man/man3/XtToolkitThreadInitialize.3x
+      3483 1998-12-31 03:18 man/man3/XtAppSetExitFlag.3x
+        29 1998-12-31 03:18 man/man3/XtAppGetExitFlag.3x
+      3430 1998-12-31 03:18 man/man3/XtAppLock.3x
+        22 1998-12-31 03:18 man/man3/XtAppUnlock.3x
+      3214 1998-12-31 03:18 man/man3/XtProcessLock.3x
+        26 1998-12-31 03:18 man/man3/XtProcessUnlock.3x
+      6566 1998-12-31 03:18 man/man3/XtOpenApplication.3x
+        30 1998-12-31 03:18 man/man3/XtVaOpenApplication.3x
+      4320 1998-12-31 03:18 man/man3/XShapeQueryExtension.3x
+        33 1998-12-31 03:18 man/man3/XShapeQueryVersion.3x
+        33 1998-12-31 03:18 man/man3/XShapeCombineRegion.3x
+        33 1998-12-31 03:18 man/man3/XShapeCombineRectangles.3x
+        33 1998-12-31 03:18 man/man3/XShapeCombineMask.3x
+        33 1998-12-31 03:18 man/man3/XShapeCombineShape.3x
+        33 1998-12-31 03:18 man/man3/XShapeOffsetShape.3x
+        33 1998-12-31 03:18 man/man3/XShapeQueryExtents.3x
+        33 1998-12-31 03:18 man/man3/XShapeSelectInput.3x
+        33 1998-12-31 03:18 man/man3/XShapeInputSelected.3x
+        33 1998-12-31 03:18 man/man3/XShapeGetRectangles.3x
+     10894 1998-12-31 03:18 man/man3/XmbufQueryExtension.3x
+        32 1998-12-31 03:18 man/man3/XmbufGetVersion.3x
+        32 1998-12-31 03:18 man/man3/XmbufCreateBuffers.3x
+        32 1998-12-31 03:18 man/man3/XmbufDestroyBuffers.3x
+        32 1998-12-31 03:18 man/man3/XmbufDisplayBuffers.3x
+        32 1998-12-31 03:18 man/man3/XmbufGetWindowAttributes.3x
+        32 1998-12-31 03:18 man/man3/XmbufChangeWindowAttributes.3x
+        32 1998-12-31 03:18 man/man3/XmbufGetBufferAttributes.3x
+        32 1998-12-31 03:18 man/man3/XmbufChangeBufferAttributes.3x
+        32 1998-12-31 03:18 man/man3/XmbufGetScreenInfo.3x
+        32 1998-12-31 03:18 man/man3/XmbufCreateStereoWindow.3x
+      2717 1998-12-31 03:18 man/man3/XdbeAllocateBackBufferName.3x
+      2010 1998-12-31 03:18 man/man3/XdbeBeginIdiom.3x
+      2005 1998-12-31 03:18 man/man3/XdbeEndIdiom.3x
+      2273 1998-12-31 03:18 man/man3/XdbeDeallocateBackBufferName.3x
+      2103 1998-12-31 03:18 man/man3/XdbeFreeVisualInfo.3x
+      2651 1998-12-31 03:18 man/man3/XdbeQueryExtension.3x
+      3592 1998-12-31 03:18 man/man3/XdbeSwapBuffers.3x
+      2411 1998-12-31 03:18 man/man3/XdbeGetBackBufferAttributes.3x
+      4004 1998-12-31 03:18 man/man3/XdbeGetVisualInfo.3x
+     13357 1998-12-31 03:18 man/man3/DBE.3x
+      5929 1998-12-31 03:18 man/man3/XAllowDeviceEvents.3x
+      4724 1998-12-31 03:18 man/man3/XGetDeviceControl.3x
+        30 1998-12-31 03:18 man/man3/XChangeDeviceControl.3x
+      8853 1998-12-31 03:18 man/man3/XGetFeedbackControl.3x
+        32 1998-12-31 03:18 man/man3/XChangeFeedbackControl.3x
+      5970 1998-12-31 03:18 man/man3/XGetDeviceKeyMapping.3x
+        33 1998-12-31 03:18 man/man3/XChangeDeviceKeyMapping.3x
+      4786 1998-12-31 03:18 man/man3/XGetDeviceModifierMapping.3x
+        38 1998-12-31 03:18 man/man3/XSetDeviceModifierMapping.3x
+      3730 1998-12-31 03:18 man/man3/XChangeDeviceDontPropagateList.3x
+        43 1998-12-31 03:18 man/man3/XGetDeviceDontPropagateList.3x
+      2745 1998-12-31 03:18 man/man3/XChangeKeyboardDevice.3x
+      3054 1998-12-31 03:18 man/man3/XChangePointerDevice.3x
+      2905 1998-12-31 03:18 man/man3/XDeviceBell.3x
+      4359 1998-12-31 03:18 man/man3/XGetDeviceMotionEvents.3x
+        35 1998-12-31 03:18 man/man3/XDeviceTimeCoord.3x
+      1960 1998-12-31 03:18 man/man3/XGetExtensionVersion.3x
+      7216 1998-12-31 03:18 man/man3/XGrabDeviceButton.3x
+        30 1998-12-31 03:18 man/man3/XUngrabDeviceButton.3x
+      5358 1998-12-31 03:18 man/man3/Xau.3x
+      7408 1998-12-31 03:18 man/man3/XGrabDeviceKey.3x
+        27 1998-12-31 03:18 man/man3/XUngrabDeviceKey.3x
+      6856 1998-12-31 03:18 man/man3/XGrabDevice.3x
+        24 1998-12-31 03:18 man/man3/XUngrabDevice.3x
+      6937 1998-12-31 03:18 man/man3/XListInputDevices.3x
+        30 1998-12-31 03:18 man/man3/XFreeDeviceList.3x
+      4794 1998-12-31 03:18 man/man3/XOpenDevice.3x
+        24 1998-12-31 03:18 man/man3/XCloseDevice.3x
+      2695 1998-12-31 03:18 man/man3/XQueryDeviceState.3x
+      4949 1998-12-31 03:18 man/man3/XSendExtensionEvent.3x
+      3877 1998-12-31 03:18 man/man3/XSetDeviceButtonMapping.3x
+        36 1998-12-31 03:18 man/man3/XGetDeviceButtonMapping.3x
+      6345 1998-12-31 03:18 man/man3/XSetDeviceFocus.3x
+        28 1998-12-31 03:18 man/man3/XGetDeviceFocus.3x
+      5451 1998-12-31 03:18 man/man3/XSelectExtensionEvent.3x
+        34 1998-12-31 03:18 man/man3/XGetSelectedExtensionEvents.3x
+      2810 1998-12-31 03:18 man/man3/XSetDeviceValuators.3x
+      2289 1998-12-31 03:18 man/man3/XSetDeviceMode.3x
+        16 1998-12-31 03:18 man/man3/XauFileName.3x
+        16 1998-12-31 03:18 man/man3/XauReadAuth.3x
+        16 1998-12-31 03:18 man/man3/XauLockAuth.3x
+        16 1998-12-31 03:18 man/man3/XauUnlockAuth.3x
+        16 1998-12-31 03:18 man/man3/XauWriteAuth.3x
+        16 1998-12-31 03:18 man/man3/XauDisposeAuth.3x
+        16 1998-12-31 03:18 man/man3/XauGetAuthByAddr.3x
+        16 1998-12-31 03:18 man/man3/XauGetBestAuthByAddr.3x

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xnets.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xnets.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xnets.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xnets.txt  3 Mar 
2012 06:14:53 -0000       1.1
@@ -0,0 +1 @@
+-rwxr-xr-x root/root   2281706 1998-12-31 04:48 bin/Xnest

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprog.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprog.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprog.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprog.txt  3 Mar 
2012 06:14:53 -0000       1.1
@@ -0,0 +1,346 @@
+drwxrwxr-x root/root         0 1998-12-31 04:30 lib/
+-rw-rw-r-- root/root     11176 1998-12-31 04:24 lib/libXau.a
+-rw-rw-r-- root/root     36422 1998-12-31 04:25 lib/libXdmcp.a
+-rw-rw-r-- root/root   1047286 1998-12-31 04:27 lib/libX11.a
+-rw-rw-r-- root/root      9026 1998-12-31 04:27 lib/liboldX.a
+-rw-rw-r-- root/root     98556 1998-12-31 04:28 lib/libICE.a
+-rw-rw-r-- root/root     35134 1998-12-31 04:28 lib/libSM.a
+-rw-rw-r-- root/root     55866 1998-12-31 04:28 lib/libXext.a
+-rw-rw-r-- root/root    367906 1998-12-31 04:29 lib/libXt.a
+-rw-rw-r-- root/root      5216 1998-12-31 04:29 lib/libXss.a
+-rw-rw-r-- root/root      3672 1998-12-31 04:29 lib/libXxf86misc.a
+-rw-rw-r-- root/root      8716 1998-12-31 04:29 lib/libXxf86vm.a
+-rw-rw-r-- root/root      6980 1998-12-31 04:29 lib/libXxf86dga.a
+-rw-rw-r-- root/root    105372 1998-12-31 04:30 lib/libXmu.a
+-rw-rw-r-- root/root    286450 1998-12-31 04:30 lib/libXaw.a
+-rw-rw-r-- root/root     58344 1998-12-31 04:30 lib/libXIE.a
+-rw-rw-r-- root/root     58378 1998-12-31 04:30 lib/libXi.a
+-rw-rw-r-- root/root     16022 1998-12-31 04:30 lib/libXtst.a
+-rw-rw-r-- root/root     63176 1998-12-31 04:30 lib/libFS.a
+-rw-rw-r-- root/root    266622 1998-12-31 04:30 lib/libPEX5.a
+-rw-rw-r-- root/root    135166 1998-12-31 04:30 lib/libxkbfile.a
+-rw-rw-r-- root/root      7292 1998-12-31 04:30 lib/libxkbui.a
+-rw-rw-r-- root/root      4102 1998-12-31 04:30 lib/libXdpms.a
+-rw-rw-r-- root/root     36496 1998-12-31 04:30 lib/libXp.a
+-rw-rw-r-- root/root     42952 1998-12-31 04:30 lib/libz.a
+drwxrwxr-x root/root         0 1998-12-31 04:12 include/
+drwxrwxr-x root/root         0 1998-12-31 04:29 include/X11/
+-r--r--r-- root/root      3024 1998-12-31 04:24 include/X11/DECkeysym.h
+-r--r--r-- root/root      6152 1998-12-31 04:24 include/X11/HPkeysym.h
+-r--r--r-- root/root      4233 1998-12-31 04:24 include/X11/Sunkeysym.h
+-r--r--r-- root/root     19772 1998-12-31 04:24 include/X11/X.h
+-r--r--r-- root/root      4172 1998-12-31 04:24 include/X11/XWDFile.h
+-r--r--r-- root/root      5330 1998-12-31 04:24 include/X11/Xalloca.h
+-r--r--r-- root/root      2518 1998-12-31 04:24 include/X11/Xatom.h
+-r--r--r-- root/root      2881 1998-12-31 04:24 include/X11/Xfuncproto.h
+-r--r--r-- root/root      3357 1998-12-31 04:24 include/X11/Xfuncs.h
+-r--r--r-- root/root      6776 1998-12-31 04:24 include/X11/Xmd.h
+-r--r--r-- root/root      7406 1998-12-31 04:24 include/X11/Xos.h
+-r--r--r-- root/root     35193 1998-12-31 04:24 include/X11/Xos_r.h
+-r--r--r-- root/root      3122 1998-12-31 04:24 include/X11/Xosdefs.h
+-r--r--r-- root/root      7551 1998-12-31 04:24 include/X11/Xpoll.h
+-r--r--r-- root/root     56098 1998-12-31 04:24 include/X11/Xproto.h
+-r--r--r-- root/root      3008 1998-12-31 04:24 include/X11/Xprotostr.h
+-r--r--r-- root/root     10575 1998-12-31 04:24 include/X11/Xthreads.h
+-r--r--r-- root/root      2298 1998-12-31 04:24 include/X11/ap_keysym.h
+-r--r--r-- root/root      2685 1998-12-31 04:24 include/X11/keysym.h
+-r--r--r-- root/root     66789 1998-12-31 04:24 include/X11/keysymdef.h
+drwxrwxr-x root/root         0 1998-12-31 04:30 include/X11/extensions/
+-r--r--r-- root/root      1848 1998-12-31 04:24 include/X11/extensions/Xext.h
+-r--r--r-- root/root      9281 1998-12-31 04:24 
include/X11/extensions/multibuf.h
+-r--r--r-- root/root      5185 1998-12-31 04:24 include/X11/extensions/shape.h
+-r--r--r-- root/root      4509 1998-12-31 04:24 include/X11/extensions/XShm.h
+-r--r--r-- root/root      2141 1998-12-31 04:24 
include/X11/extensions/MITMisc.h
+-r--r--r-- root/root      8535 1998-12-31 04:24 include/X11/extensions/XI.h
+-r--r--r-- root/root     32439 1998-12-31 04:24 include/X11/extensions/XInput.h
+-r--r--r-- root/root     35079 1998-12-31 04:24 
include/X11/extensions/XIproto.h
+-r--r--r-- root/root      4526 1998-12-31 04:24 include/X11/extensions/XTest.h
+-r--r--r-- root/root     11253 1998-12-31 04:24 
include/X11/extensions/xtestext1.h
+-r--r--r-- root/root     10916 1998-12-31 04:24 include/X11/extensions/XIE.h
+-r--r--r-- root/root     20130 1998-12-31 04:24 
include/X11/extensions/XIEproto.h
+-r--r--r-- root/root     28735 1998-12-31 04:24 
include/X11/extensions/XIEprotost.h
+-r--r--r-- root/root     14620 1998-12-31 04:24 include/X11/extensions/sync.h
+-r--r--r-- root/root     28123 1998-12-31 04:24 include/X11/extensions/XKB.h
+-r--r--r-- root/root     17185 1998-12-31 04:24 
include/X11/extensions/XKBgeom.h
+-r--r--r-- root/root     30956 1998-12-31 04:24 
include/X11/extensions/XKBproto.h
+-r--r--r-- root/root     18274 1998-12-31 04:24 include/X11/extensions/XKBstr.h
+-r--r--r-- root/root     28753 1998-12-31 04:24 include/X11/extensions/XKBsrv.h
+-r--r--r-- root/root      4152 1998-12-31 04:24 include/X11/extensions/Xdbe.h
+-r--r--r-- root/root      8811 1998-12-31 04:24 
include/X11/extensions/Xdbeproto.h
+-r--r--r-- root/root      3380 1998-12-31 04:24 include/X11/extensions/Xag.h
+-r--r--r-- root/root      4913 1998-12-31 04:24 include/X11/extensions/Xagstr.h
+-r--r--r-- root/root      2424 1998-12-31 04:24 include/X11/extensions/Xagsrv.h
+-r--r--r-- root/root      5970 1998-12-31 04:24 include/X11/extensions/record.h
+-r--r--r-- root/root      8236 1998-12-31 04:24 
include/X11/extensions/recordstr.h
+-r--r--r-- root/root      1672 1998-12-31 04:24 include/X11/extensions/lbxbuf.h
+-r--r--r-- root/root      1635 1998-12-31 04:24 
include/X11/extensions/lbxbufstr.h
+-r--r--r-- root/root      2654 1998-12-31 04:24 
include/X11/extensions/lbxdeltastr.h
+-r--r--r-- root/root      4301 1998-12-31 04:24 
include/X11/extensions/lbximage.h
+-r--r--r-- root/root      3587 1998-12-31 04:24 
include/X11/extensions/lbxopts.h
+-r--r--r-- root/root     24129 1998-12-31 04:24 include/X11/extensions/lbxstr.h
+-r--r--r-- root/root      1894 1998-12-31 04:24 
include/X11/extensions/lbxzlib.h
+-r--r--r-- root/root      6423 1998-12-31 04:24 
include/X11/extensions/security.h
+-r--r--r-- root/root      3615 1998-12-31 04:24 
include/X11/extensions/securstr.h
+-r--r--r-- root/root     16828 1998-12-31 04:24 include/X11/extensions/Print.h
+-r--r--r-- root/root     22942 1998-12-31 04:24 
include/X11/extensions/Printstr.h
+-r--r--r-- root/root      1962 1998-12-31 04:24 include/X11/extensions/saver.h
+-r--r--r-- root/root      4656 1998-12-31 04:24 
include/X11/extensions/saverproto.h
+-r--r--r-- root/root      4510 1998-12-31 04:24 
include/X11/extensions/scrnsaver.h
+-r--r--r-- root/root      6908 1998-12-31 04:24 
include/X11/extensions/xf86vmode.h
+-r--r--r-- root/root      8361 1998-12-31 04:24 
include/X11/extensions/xf86vmstr.h
+-r--r--r-- root/root      3263 1998-12-31 04:24 
include/X11/extensions/xf86dga.h
+-r--r--r-- root/root      5045 1998-12-31 04:24 
include/X11/extensions/xf86dgastr.h
+-r--r--r-- root/root      2958 1998-12-31 04:24 
include/X11/extensions/xf86misc.h
+-r--r--r-- root/root      4328 1998-12-31 04:24 
include/X11/extensions/xf86mscstr.h
+-r--r--r-- root/root      1662 1998-12-31 04:24 include/X11/extensions/dpms.h
+-r--r--r-- root/root      4982 1998-12-31 04:24 
include/X11/extensions/dpmsstr.h
+-r--r--r-- root/root     43678 1998-12-31 04:30 include/X11/extensions/XIElib.h
+-r--r--r-- root/root     13087 1998-12-31 04:30 
include/X11/extensions/XKBfile.h
+-r--r--r-- root/root      2862 1998-12-31 04:30 include/X11/extensions/XKM.h
+-r--r--r-- root/root      6927 1998-12-31 04:30 
include/X11/extensions/XKMformat.h
+-r--r--r-- root/root      6366 1998-12-31 04:30 
include/X11/extensions/XKBrules.h
+-r--r--r-- root/root      7340 1998-12-31 04:30 
include/X11/extensions/XKBconfig.h
+-r--r--r-- root/root      5023 1998-12-31 04:30 
include/X11/extensions/XKBbells.h
+-r--r--r-- root/root      5463 1998-12-31 04:30 include/X11/extensions/XKBui.h
+drwxrwxr-x root/root         0 1998-12-31 04:30 include/X11/fonts/
+-r--r--r-- root/root      4306 1998-12-31 04:24 include/X11/fonts/FS.h
+-r--r--r-- root/root     20694 1998-12-31 04:24 include/X11/fonts/FSproto.h
+-r--r--r-- root/root      4196 1998-12-31 04:24 include/X11/fonts/fsmasks.h
+-r--r--r-- root/root      8097 1998-12-31 04:30 include/X11/fonts/FSlib.h
+-r--r--r-- root/root      4352 1998-12-31 04:24 include/X11/Xauth.h
+-r--r--r-- root/root      4065 1998-12-31 04:25 include/X11/Xdmcp.h
+-r--r--r-- root/root    110426 1998-12-31 04:27 include/X11/Xlib.h
+-r--r--r-- root/root     11840 1998-12-31 04:27 include/X11/Xresource.h
+-r--r--r-- root/root     22151 1998-12-31 04:27 include/X11/Xutil.h
+-r--r--r-- root/root      3234 1998-12-31 04:27 include/X11/cursorfont.h
+-r--r--r-- root/root     34790 1998-12-31 04:27 include/X11/Xlibint.h
+-r--r--r-- root/root     22557 1998-12-31 04:27 include/X11/Xcms.h
+-r--r--r-- root/root      1953 1998-12-31 04:27 include/X11/Xlocale.h
+-r--r--r-- root/root     34004 1998-12-31 04:27 include/X11/XKBlib.h
+-r--r--r-- root/root      3384 1998-12-31 04:27 include/X11/X10.h
+drwxrwxr-x root/root         0 1998-12-31 04:28 include/X11/ICE/
+-r--r--r-- root/root      2709 1998-12-31 04:28 include/X11/ICE/ICE.h
+-r--r--r-- root/root      7586 1998-12-31 04:28 include/X11/ICE/ICEconn.h
+-r--r--r-- root/root      4848 1998-12-31 04:28 include/X11/ICE/ICEproto.h
+-r--r--r-- root/root     11936 1998-12-31 04:28 include/X11/ICE/ICElib.h
+-r--r--r-- root/root      8372 1998-12-31 04:28 include/X11/ICE/ICEmsg.h
+-r--r--r-- root/root      3573 1998-12-31 04:28 include/X11/ICE/ICEutil.h
+drwxrwxr-x root/root         0 1998-12-31 04:28 include/X11/SM/
+-r--r--r-- root/root      3124 1998-12-31 04:28 include/X11/SM/SM.h
+-r--r--r-- root/root      5032 1998-12-31 04:28 include/X11/SM/SMproto.h
+-r--r--r-- root/root     13401 1998-12-31 04:28 include/X11/SM/SMlib.h
+-r--r--r-- root/root      3947 1998-12-31 04:29 include/X11/Composite.h
+-r--r--r-- root/root      4896 1998-12-31 04:29 include/X11/CompositeP.h
+-r--r--r-- root/root      2817 1998-12-31 04:29 include/X11/Constraint.h
+-r--r--r-- root/root      4248 1998-12-31 04:29 include/X11/ConstrainP.h
+-r--r--r-- root/root      2849 1998-12-31 04:29 include/X11/Core.h
+-r--r--r-- root/root      8820 1998-12-31 04:29 include/X11/CoreP.h
+-r--r--r-- root/root     74007 1998-12-31 04:29 include/X11/Intrinsic.h
+-r--r--r-- root/root     10179 1998-12-31 04:29 include/X11/IntrinsicP.h
+-r--r--r-- root/root      2804 1998-12-31 04:29 include/X11/Object.h
+-r--r--r-- root/root      7128 1998-12-31 04:29 include/X11/ObjectP.h
+-r--r--r-- root/root      2806 1998-12-31 04:29 include/X11/RectObj.h
+-r--r--r-- root/root      6655 1998-12-31 04:29 include/X11/RectObjP.h
+-r--r--r-- root/root     17680 1998-12-31 04:29 include/X11/Shell.h
+-r--r--r-- root/root     12869 1998-12-31 04:29 include/X11/ShellP.h
+-r--r--r-- root/root     30761 1998-12-31 04:29 include/X11/StringDefs.h
+-r--r--r-- root/root      2979 1998-12-31 04:29 include/X11/Vendor.h
+-r--r--r-- root/root      3793 1998-12-31 04:29 include/X11/VendorP.h
+drwxrwxr-x root/root         0 1998-12-31 04:30 include/X11/Xmu/
+-r--r--r-- root/root      2110 1998-12-31 04:30 include/X11/Xmu/Xmu.h
+-r--r--r-- root/root      3922 1998-12-31 04:30 include/X11/Xmu/Atoms.h
+-r--r--r-- root/root      2499 1998-12-31 04:30 include/X11/Xmu/CharSet.h
+-r--r--r-- root/root      2309 1998-12-31 04:30 include/X11/Xmu/CloseHook.h
+-r--r--r-- root/root      7393 1998-12-31 04:30 include/X11/Xmu/Converters.h
+-r--r--r-- root/root      1724 1998-12-31 04:30 include/X11/Xmu/CurUtil.h
+-r--r--r-- root/root      1910 1998-12-31 04:30 include/X11/Xmu/CvtCache.h
+-r--r--r-- root/root      4921 1998-12-31 04:30 include/X11/Xmu/DisplayQue.h
+-r--r--r-- root/root      4421 1998-12-31 04:30 include/X11/Xmu/Drawing.h
+-r--r--r-- root/root      1447 1998-12-31 04:30 include/X11/Xmu/Editres.h
+-r--r--r-- root/root      9016 1998-12-31 04:30 include/X11/Xmu/EditresP.h
+-r--r--r-- root/root      1896 1998-12-31 04:30 include/X11/Xmu/Error.h
+-r--r--r-- root/root      1584 1998-12-31 04:30 include/X11/Xmu/ExtAgent.h
+-r--r--r-- root/root      1985 1998-12-31 04:30 include/X11/Xmu/Initer.h
+-r--r--r-- root/root      2842 1998-12-31 04:30 include/X11/Xmu/Misc.h
+-r--r--r-- root/root      1942 1998-12-31 04:30 include/X11/Xmu/StdSel.h
+-r--r--r-- root/root      3068 1998-12-31 04:30 include/X11/Xmu/StdCmap.h
+-r--r--r-- root/root      1596 1998-12-31 04:30 include/X11/Xmu/SysUtil.h
+-r--r--r-- root/root      3470 1998-12-31 04:30 include/X11/Xmu/WidgetNode.h
+-r--r--r-- root/root      2030 1998-12-31 04:30 include/X11/Xmu/WinUtil.h
+-r--r--r-- root/root      6517 1998-12-31 04:30 include/X11/Xmu/Xct.h
+drwxrwxr-x root/root         0 1998-12-31 04:30 include/X11/Xaw/
+-r--r--r-- root/root      1561 1998-12-31 04:30 include/X11/Xaw/AllWidgets.h
+-r--r--r-- root/root      3456 1998-12-31 04:30 include/X11/Xaw/AsciiSink.h
+-r--r--r-- root/root      4129 1998-12-31 04:30 include/X11/Xaw/AsciiSinkP.h
+-r--r--r-- root/root      4522 1998-12-31 04:30 include/X11/Xaw/AsciiSrc.h
+-r--r--r-- root/root      5834 1998-12-31 04:30 include/X11/Xaw/AsciiSrcP.h
+-r--r--r-- root/root      5508 1998-12-31 04:30 include/X11/Xaw/AsciiText.h
+-r--r--r-- root/root      5246 1998-12-31 04:30 include/X11/Xaw/AsciiTextP.h
+-r--r--r-- root/root      3644 1998-12-31 04:30 include/X11/Xaw/Box.h
+-r--r--r-- root/root      3780 1998-12-31 04:30 include/X11/Xaw/BoxP.h
+-r--r--r-- root/root      1727 1998-12-31 04:30 include/X11/Xaw/Cardinals.h
+-r--r--r-- root/root      5063 1998-12-31 04:30 include/X11/Xaw/Command.h
+-r--r--r-- root/root      4511 1998-12-31 04:30 include/X11/Xaw/CommandP.h
+-r--r--r-- root/root      3923 1998-12-31 04:30 include/X11/Xaw/Dialog.h
+-r--r--r-- root/root      3724 1998-12-31 04:30 include/X11/Xaw/DialogP.h
+-r--r--r-- root/root      5644 1998-12-31 04:30 include/X11/Xaw/Form.h
+-r--r--r-- root/root      5239 1998-12-31 04:30 include/X11/Xaw/FormP.h
+-r--r--r-- root/root      4117 1998-12-31 04:30 include/X11/Xaw/Grip.h
+-r--r--r-- root/root      3650 1998-12-31 04:30 include/X11/Xaw/GripP.h
+-r--r--r-- root/root      4763 1998-12-31 04:30 include/X11/Xaw/Label.h
+-r--r--r-- root/root      4264 1998-12-31 04:30 include/X11/Xaw/LabelP.h
+-r--r--r-- root/root      7699 1998-12-31 04:30 include/X11/Xaw/List.h
+-r--r--r-- root/root      4015 1998-12-31 04:30 include/X11/Xaw/ListP.h
+-r--r--r-- root/root      3306 1998-12-31 04:30 include/X11/Xaw/MenuButton.h
+-r--r--r-- root/root      3088 1998-12-31 04:30 include/X11/Xaw/MenuButtoP.h
+-r--r--r-- root/root      4684 1998-12-31 04:30 include/X11/Xaw/MultiSrc.h
+-r--r--r-- root/root      7304 1998-12-31 04:30 include/X11/Xaw/MultiSrcP.h
+-r--r--r-- root/root      4774 1998-12-31 04:30 include/X11/Xaw/MultiSink.h
+-r--r--r-- root/root      5633 1998-12-31 04:30 include/X11/Xaw/MultiSinkP.h
+-r--r--r-- root/root      8892 1998-12-31 04:30 include/X11/Xaw/Paned.h
+-r--r--r-- root/root      7769 1998-12-31 04:30 include/X11/Xaw/PanedP.h
+-r--r--r-- root/root      3994 1998-12-31 04:30 include/X11/Xaw/Panner.h
+-r--r--r-- root/root      4269 1998-12-31 04:30 include/X11/Xaw/PannerP.h
+-r--r--r-- root/root      2421 1998-12-31 04:30 include/X11/Xaw/Porthole.h
+-r--r--r-- root/root      2161 1998-12-31 04:30 include/X11/Xaw/PortholeP.h
+-r--r--r-- root/root      2820 1998-12-31 04:30 include/X11/Xaw/Repeater.h
+-r--r--r-- root/root      2907 1998-12-31 04:30 include/X11/Xaw/RepeaterP.h
+-r--r--r-- root/root      2341 1998-12-31 04:30 include/X11/Xaw/Reports.h
+-r--r--r-- root/root      5512 1998-12-31 04:30 include/X11/Xaw/Scrollbar.h
+-r--r--r-- root/root      4324 1998-12-31 04:30 include/X11/Xaw/ScrollbarP.h
+-r--r--r-- root/root      3974 1998-12-31 04:30 include/X11/Xaw/Simple.h
+-r--r--r-- root/root      3260 1998-12-31 04:30 include/X11/Xaw/SimpleP.h
+-r--r--r-- root/root      5120 1998-12-31 04:30 include/X11/Xaw/SimpleMenu.h
+-r--r--r-- root/root      3415 1998-12-31 04:30 include/X11/Xaw/SimpleMenP.h
+-r--r--r-- root/root      2537 1998-12-31 04:30 include/X11/Xaw/Sme.h
+-r--r--r-- root/root      3246 1998-12-31 04:30 include/X11/Xaw/SmeP.h
+-r--r--r-- root/root      3504 1998-12-31 04:30 include/X11/Xaw/SmeBSB.h
+-r--r--r-- root/root      3759 1998-12-31 04:30 include/X11/Xaw/SmeBSBP.h
+-r--r--r-- root/root      2586 1998-12-31 04:30 include/X11/Xaw/SmeLine.h
+-r--r--r-- root/root      3066 1998-12-31 04:30 include/X11/Xaw/SmeLineP.h
+-r--r--r-- root/root      4755 1998-12-31 04:30 include/X11/Xaw/StripChart.h
+-r--r--r-- root/root      4115 1998-12-31 04:30 include/X11/Xaw/StripCharP.h
+-r--r--r-- root/root      3315 1998-12-31 04:30 include/X11/Xaw/Template.c
+-r--r--r-- root/root      2520 1998-12-31 04:30 include/X11/Xaw/Template.h
+-r--r--r-- root/root      2052 1998-12-31 04:30 include/X11/Xaw/TemplateP.h
+-r--r--r-- root/root      8489 1998-12-31 04:30 include/X11/Xaw/Text.h
+-r--r--r-- root/root      9976 1998-12-31 04:30 include/X11/Xaw/TextP.h
+-r--r--r-- root/root      9832 1998-12-31 04:30 include/X11/Xaw/TextSink.h
+-r--r--r-- root/root      5332 1998-12-31 04:30 include/X11/Xaw/TextSinkP.h
+-r--r--r-- root/root      7838 1998-12-31 04:30 include/X11/Xaw/TextSrc.h
+-r--r--r-- root/root      5634 1998-12-31 04:30 include/X11/Xaw/TextSrcP.h
+-r--r--r-- root/root      5545 1998-12-31 04:30 include/X11/Xaw/Toggle.h
+-r--r--r-- root/root      3218 1998-12-31 04:30 include/X11/Xaw/ToggleP.h
+-r--r--r-- root/root      4807 1998-12-31 04:30 include/X11/Xaw/Tree.h
+-r--r--r-- root/root      4656 1998-12-31 04:30 include/X11/Xaw/TreeP.h
+-r--r--r-- root/root      3168 1998-12-31 04:30 include/X11/Xaw/VendorEP.h
+-r--r--r-- root/root      4280 1998-12-31 04:30 include/X11/Xaw/Viewport.h
+-r--r--r-- root/root      4149 1998-12-31 04:30 include/X11/Xaw/ViewportP.h
+-r--r--r-- root/root      5679 1998-12-31 04:30 include/X11/Xaw/XawImP.h
+-r--r--r-- root/root      1456 1998-12-31 04:30 include/X11/Xaw/XawInit.h
+drwxrwxr-x root/root         0 1998-12-31 04:30 include/X11/PEX5/
+-r--r--r-- root/root    111167 1998-12-31 04:30 include/X11/PEX5/PEXlib.h
+-r--r--r-- root/root     31939 1998-12-31 04:30 include/X11/PEX5/PEXlibint.h
+-r--r--r-- root/root     46301 1998-12-31 04:30 include/X11/PEX5/PEX.h
+-r--r--r-- root/root     58281 1998-12-31 04:30 include/X11/PEX5/PEXproto.h
+-r--r--r-- root/root     17173 1998-12-31 04:30 include/X11/PEX5/PEXprotost.h
+drwxrwxr-x root/root         0 1998-12-31 04:30 include/X11/PM/
+-r--r--r-- root/root      1808 1998-12-31 04:30 include/X11/PM/PM.h
+-r--r--r-- root/root      2317 1998-12-31 04:30 include/X11/PM/PMproto.h
+drwxrwxr-x root/root         0 1998-12-31 04:12 include/bitmaps/
+-r--r--r-- root/root       224 1998-12-31 04:12 include/bitmaps/ldblarrow
+-r--r--r-- root/root       212 1998-12-31 04:12 include/bitmaps/rdblarrow
+drwxrwxr-x root/root         0 1998-12-31 04:24 lib/X11/config/
+-r--r--r-- root/root     84341 1998-12-31 04:24 lib/X11/config/Imake.rules
+-r--r--r-- root/root     26614 1998-12-31 04:24 lib/X11/config/Motif.rules
+-r--r--r-- root/root     16007 1998-12-31 04:24 lib/X11/config/Win32.rules
+-r--r--r-- root/root      2482 1998-12-31 04:24 lib/X11/config/X11.rules
+-r--r--r-- root/root     10226 1998-12-31 04:24 lib/X11/config/bsdLib.rules
+-r--r--r-- root/root      5951 1998-12-31 04:24 lib/X11/config/cde.rules
+-r--r--r-- root/root      3640 1998-12-31 04:24 lib/X11/config/gnuLib.rules
+-r--r--r-- root/root      3797 1998-12-31 04:24 lib/X11/config/hpLib.rules
+-r--r--r-- root/root      6571 1998-12-31 04:24 lib/X11/config/ibmLib.rules
+-r--r--r-- root/root     19541 1998-12-31 04:24 lib/X11/config/lnxLib.rules
+-r--r--r-- root/root      5089 1998-12-31 04:24 lib/X11/config/lnxdoc.rules
+-r--r--r-- root/root      2899 1998-12-31 04:24 lib/X11/config/necLib.rules
+-r--r--r-- root/root         1 1998-12-31 04:24 lib/X11/config/noop.rules
+-r--r--r-- root/root      3045 1998-12-31 04:24 lib/X11/config/oldlib.rules
+-r--r--r-- root/root     17609 1998-12-31 04:24 lib/X11/config/os2.rules
+-r--r--r-- root/root      7616 1998-12-31 04:24 lib/X11/config/os2Lib.rules
+-r--r--r-- root/root      3500 1998-12-31 04:24 lib/X11/config/osfLib.rules
+-r--r--r-- root/root      1715 1998-12-31 04:24 lib/X11/config/scoLib.rules
+-r--r--r-- root/root      5340 1998-12-31 04:24 lib/X11/config/sgiLib.rules
+-r--r--r-- root/root      3233 1998-12-31 04:24 lib/X11/config/sunLib.rules
+-r--r--r-- root/root      8262 1998-12-31 04:24 lib/X11/config/sv3Lib.rules
+-r--r--r-- root/root      4337 1998-12-31 04:24 lib/X11/config/sv4Lib.rules
+-r--r--r-- root/root      4981 1998-12-31 04:24 lib/X11/config/xf86.rules
+-r--r--r-- root/root     34113 1998-12-31 04:24 lib/X11/config/Imake.tmpl
+-r--r--r-- root/root     13985 1998-12-31 04:24 lib/X11/config/Library.tmpl
+-r--r--r-- root/root     13588 1998-12-31 04:24 lib/X11/config/Motif.tmpl
+-r--r--r-- root/root      2339 1998-12-31 04:24 lib/X11/config/Server.tmpl
+-r--r--r-- root/root      3971 1998-12-31 04:24 lib/X11/config/ServerLib.tmpl
+-r--r--r-- root/root      2664 1998-12-31 04:24 lib/X11/config/Threads.tmpl
+-r--r--r-- root/root       642 1998-12-31 04:24 lib/X11/config/WinLib.tmpl
+-r--r--r-- root/root     46737 1998-12-31 04:24 lib/X11/config/X11.tmpl
+-r--r--r-- root/root      1953 1998-12-31 04:24 lib/X11/config/bsdLib.tmpl
+-r--r--r-- root/root     11004 1998-12-31 04:24 lib/X11/config/cde.tmpl
+-r--r--r-- root/root      1669 1998-12-31 04:24 lib/X11/config/hpLib.tmpl
+-r--r--r-- root/root      1115 1998-12-31 04:24 lib/X11/config/gnuLib.tmpl
+-r--r--r-- root/root      2706 1998-12-31 04:24 lib/X11/config/ibmLib.tmpl
+-r--r--r-- root/root      1149 1998-12-31 04:24 lib/X11/config/lnxLib.tmpl
+-r--r--r-- root/root      2238 1998-12-31 04:24 lib/X11/config/lnxdoc.tmpl
+-r--r--r-- root/root       517 1998-12-31 04:24 lib/X11/config/necLib.tmpl
+-r--r--r-- root/root      3499 1998-12-31 04:24 lib/X11/config/os2Lib.tmpl
+-r--r--r-- root/root      2322 1998-12-31 04:24 lib/X11/config/osfLib.tmpl
+-r--r--r-- root/root       543 1998-12-31 04:24 lib/X11/config/sgiLib.tmpl
+-r--r--r-- root/root      2971 1998-12-31 04:24 lib/X11/config/sunLib.tmpl
+-r--r--r-- root/root      2373 1998-12-31 04:24 lib/X11/config/sv3Lib.tmpl
+-r--r--r-- root/root      1771 1998-12-31 04:24 lib/X11/config/sv4Lib.tmpl
+-r--r--r-- root/root      2005 1998-12-31 04:24 lib/X11/config/xf86.tmpl
+-r--r--r-- root/root     15435 1998-12-31 04:24 lib/X11/config/xf86site.def
+-r--r--r-- root/root      4212 1998-12-31 04:24 lib/X11/config/site.def
+-r--r--r-- root/root     14842 1998-12-31 04:24 lib/X11/config/Imake.cf
+-r--r--r-- root/root     13029 1998-12-31 04:24 lib/X11/config/Amoeba.cf
+-r--r--r-- root/root      5877 1998-12-31 04:24 lib/X11/config/DGUX.cf
+-r--r--r-- root/root     12291 1998-12-31 04:24 lib/X11/config/FreeBSD.cf
+-r--r--r-- root/root      2493 1998-12-31 04:24 lib/X11/config/Mips.cf
+-r--r--r-- root/root      9867 1998-12-31 04:24 lib/X11/config/NetBSD.cf
+-r--r--r-- root/root     13289 1998-12-31 04:24 lib/X11/config/OpenBSD.cf
+-r--r--r-- root/root       797 1998-12-31 04:24 lib/X11/config/Oki.cf
+-r--r--r-- root/root      3292 1998-12-31 04:24 lib/X11/config/Win32.cf
+-r--r--r-- root/root      1091 1998-12-31 04:24 lib/X11/config/apollo.cf
+-r--r--r-- root/root       686 1998-12-31 04:24 lib/X11/config/bsd.cf
+-r--r--r-- root/root      4418 1998-12-31 04:24 lib/X11/config/bsdi.cf
+-r--r--r-- root/root      2694 1998-12-31 04:24 lib/X11/config/convex.cf
+-r--r--r-- root/root      1190 1998-12-31 04:24 lib/X11/config/cray.cf
+-r--r--r-- root/root      2432 1998-12-31 04:24 lib/X11/config/fujitsu.cf
+-r--r--r-- root/root       403 1998-12-31 04:24 lib/X11/config/generic.cf
+-r--r--r-- root/root      2797 1998-12-31 04:24 lib/X11/config/gnu.cf
+-r--r--r-- root/root      5678 1998-12-31 04:24 lib/X11/config/hp.cf
+-r--r--r-- root/root      5267 1998-12-31 04:24 lib/X11/config/ibm.cf
+-r--r--r-- root/root      4708 1998-12-31 04:24 lib/X11/config/isc.cf
+-r--r--r-- root/root      8629 1998-12-31 04:24 lib/X11/config/linux.cf
+-r--r--r-- root/root      3163 1998-12-31 04:24 lib/X11/config/luna.cf
+-r--r--r-- root/root      1402 1998-12-31 04:24 lib/X11/config/macII.cf
+-r--r--r-- root/root      2054 1998-12-31 04:24 lib/X11/config/mach.cf
+-r--r--r-- root/root      1746 1998-12-31 04:24 lib/X11/config/minix.cf
+-r--r--r-- root/root      1512 1998-12-31 04:24 lib/X11/config/moto.cf
+-r--r--r-- root/root      4182 1998-12-31 04:24 lib/X11/config/ncr.cf
+-r--r--r-- root/root      3050 1998-12-31 04:24 lib/X11/config/nec.cf
+-r--r--r-- root/root      6672 1998-12-31 04:24 lib/X11/config/os2.cf
+-r--r--r-- root/root      6147 1998-12-31 04:24 lib/X11/config/osf1.cf
+-r--r--r-- root/root       880 1998-12-31 04:24 lib/X11/config/pegasus.cf
+-r--r--r-- root/root      6195 1998-12-31 04:24 lib/X11/config/sco.cf
+-r--r--r-- root/root      4343 1998-12-31 04:24 lib/X11/config/sco5.cf
+-r--r--r-- root/root      2114 1998-12-31 04:24 lib/X11/config/sequent.cf
+-r--r--r-- root/root      7169 1998-12-31 04:24 lib/X11/config/sgi.cf
+-r--r--r-- root/root      2894 1998-12-31 04:24 lib/X11/config/sony.cf
+-r--r--r-- root/root     10638 1998-12-31 04:24 lib/X11/config/sun.cf
+-r--r--r-- root/root      8418 1998-12-31 04:24 lib/X11/config/svr3.cf
+-r--r--r-- root/root      4434 1998-12-31 04:24 lib/X11/config/svr4.cf
+-r--r--r-- root/root      2103 1998-12-31 04:24 lib/X11/config/ultrix.cf
+-r--r--r-- root/root      3481 1998-12-31 04:24 lib/X11/config/usl.cf
+-r--r--r-- root/root     10033 1998-12-31 04:24 lib/X11/config/lynx.cf
+-r--r--r-- root/root      4356 1998-12-31 04:24 lib/X11/config/x386.cf
+-r--r--r-- root/root     23262 1998-12-31 04:24 lib/X11/config/xfree86.cf
+-r--r--r-- root/root         1 1998-12-31 04:24 lib/X11/config/host.def

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprt.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprt.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprt.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xprt.txt   3 Mar 
2012 06:14:53 -0000       1.1
@@ -0,0 +1 @@
+-rwxr-xr-x root/root   2794029 1998-12-31 04:48 bin/Xprt

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xps.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xps.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xps.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xps.txt    3 Mar 
2012 06:14:53 -0000       1.1
@@ -0,0 +1,56 @@
+drwxr-xr-x root/other        0 1999-01-08 08:51 lib/X11/doc/PostScript/
+-r--r--r-- root/staff    29391 1999-01-08 08:50 
lib/X11/doc/PostScript/FreeBSD.ps
+-r--r--r-- root/staff    39303 1999-01-08 08:50 
lib/X11/doc/PostScript/NetBSD.ps
+-r--r--r-- root/staff    30225 1999-01-08 08:50 
lib/X11/doc/PostScript/OpenBSD.ps
+-r--r--r-- root/staff    18309 1999-01-08 08:50 lib/X11/doc/PostScript/Linux.ps
+-r--r--r-- root/staff    39198 1999-01-08 08:50 
lib/X11/doc/PostScript/LynxOS.ps
+-r--r--r-- root/staff    39055 1999-01-08 08:50 lib/X11/doc/PostScript/SCO.ps
+-r--r--r-- root/staff    34874 1999-01-08 08:50 lib/X11/doc/PostScript/isc.ps
+-r--r--r-- root/staff    53834 1999-01-08 08:50 lib/X11/doc/PostScript/OS2.ps
+-r--r--r-- root/staff    22034 1999-01-08 08:50 
lib/X11/doc/PostScript/OS2Notes.ps
+-r--r--r-- root/staff    22893 1999-01-08 08:50 
lib/X11/doc/PostScript/SOLX86.ps
+-r--r--r-- root/staff    38128 1999-01-08 08:50 lib/X11/doc/PostScript/SVR4.ps
+-r--r--r-- root/staff     8323 1999-01-08 08:50 
lib/X11/doc/PostScript/DECtga.ps
+-r--r--r-- root/staff    11731 1999-01-08 08:50 lib/X11/doc/PostScript/I128.ps
+-r--r--r-- root/staff    14610 1999-01-08 08:50 
lib/X11/doc/PostScript/Mach32.ps
+-r--r--r-- root/staff    34212 1999-01-08 08:50 
lib/X11/doc/PostScript/Mach64.ps
+-r--r--r-- root/staff    18388 1999-01-08 08:50 lib/X11/doc/PostScript/MGA.ps
+-r--r--r-- root/staff    10797 1999-01-08 08:50 
lib/X11/doc/PostScript/NVIDIA.ps
+-r--r--r-- root/staff    18009 1999-01-08 08:50 lib/X11/doc/PostScript/Oak.ps
+-r--r--r-- root/staff    35501 1999-01-08 08:50 lib/X11/doc/PostScript/P9000.ps
+-r--r--r-- root/staff    12976 1999-01-08 08:50 
lib/X11/doc/PostScript/Video7.ps
+-r--r--r-- root/staff    47566 1999-01-08 08:50 lib/X11/doc/PostScript/S3.ps
+-r--r--r-- root/staff    26562 1999-01-08 08:50 lib/X11/doc/PostScript/S3V.ps
+-r--r--r-- root/staff    18443 1999-01-08 08:50 lib/X11/doc/PostScript/SiS.ps
+-r--r--r-- root/staff    23084 1999-01-08 08:50 lib/X11/doc/PostScript/W32.ps
+-r--r--r-- root/staff    23278 1999-01-08 08:50 
lib/X11/doc/PostScript/WstDig.ps
+-r--r--r-- root/staff     9788 1999-01-08 08:50 lib/X11/doc/PostScript/apm.ps
+-r--r--r-- root/staff    21990 1999-01-08 08:50 lib/X11/doc/PostScript/ark.ps
+-r--r--r-- root/staff    39872 1999-01-08 08:50 lib/X11/doc/PostScript/agx.ps
+-r--r--r-- root/staff    47866 1999-01-08 08:50 lib/X11/doc/PostScript/ati.ps
+-r--r--r-- root/staff    62266 1999-01-08 08:50 lib/X11/doc/PostScript/chips.ps
+-r--r--r-- root/staff    72148 1999-01-08 08:50 
lib/X11/doc/PostScript/cirrus.ps
+-r--r--r-- root/staff     9790 1999-01-08 08:51 lib/X11/doc/PostScript/cyrix.ps
+-r--r--r-- root/staff    14787 1999-01-08 08:51 lib/X11/doc/PostScript/epson.ps
+-r--r--r-- root/staff    47369 1999-01-08 08:51 lib/X11/doc/PostScript/mouse.ps
+-r--r--r-- root/staff    16243 1999-01-08 08:51 lib/X11/doc/PostScript/neo.ps
+-r--r--r-- root/staff     7906 1999-01-08 08:51 
lib/X11/doc/PostScript/rendition.ps
+-r--r--r-- root/staff    11259 1999-01-08 08:51 
lib/X11/doc/PostScript/3DLabs.ps
+-r--r--r-- root/staff    18869 1999-01-08 08:51 
lib/X11/doc/PostScript/trident.ps
+-r--r--r-- root/staff    86333 1999-01-08 08:51 lib/X11/doc/PostScript/tseng.ps
+-r--r--r-- root/staff    29392 1999-01-08 08:51 lib/X11/doc/PostScript/fbdev.ps
+-r--r--r-- root/staff    20419 1999-01-08 08:51 
lib/X11/doc/PostScript/COPYRIGHT.ps
+-r--r--r-- root/staff    38588 1999-01-08 08:51 
lib/X11/doc/PostScript/RELNOTES.ps
+-r--r--r-- root/staff    38557 1999-01-08 08:51 
lib/X11/doc/PostScript/Config.ps
+-r--r--r-- root/staff    22942 1999-01-08 08:51 lib/X11/doc/PostScript/BUILD.ps
+-r--r--r-- root/staff    64395 1999-01-08 08:51 
lib/X11/doc/PostScript/README.ps
+-r--r--r-- root/staff    54683 1999-01-08 08:51 
lib/X11/doc/PostScript/QuickStart.ps
+-r--r--r-- root/staff    10157 1999-01-08 08:51 
lib/X11/doc/PostScript/DocIndex.ps
+-r--r--r-- root/staff    17198 1999-01-08 08:51 
lib/X11/doc/PostScript/LinkKit.ps
+-r--r--r-- root/staff    12858 1999-01-08 08:51 
lib/X11/doc/PostScript/clkprog.ps
+-r--r--r-- root/staff    15945 1999-01-08 08:51 
lib/X11/doc/PostScript/xinput.ps
+-r--r--r-- root/staff   109681 1999-01-08 08:51 
lib/X11/doc/PostScript/VideoModes.ps
+-r--r--r-- root/staff    79217 1999-01-08 08:51 
lib/X11/doc/PostScript/VGADriver.ps
+-r--r--r-- root/staff    27724 1998-12-31 03:53 lib/X11/doc/PostScript/DPMS.PS
+-r--r--r-- root/staff    23852 1998-12-31 03:53 
lib/X11/doc/PostScript/DPMSLib.PS
+-r--r--r-- root/staff   352981 1998-12-31 03:53 
lib/X11/doc/PostScript/ctlseqs.PS

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xset.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xset.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xset.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xset.txt   3 Mar 
2012 06:14:54 -0000       1.1
@@ -0,0 +1,76 @@
+-rwxr-xr-x root/root    899276 1998-12-31 04:50 bin/XF86Setup
+-rwxr-xr-x root/root       237 1998-12-31 04:50 bin/xmseconfig
+drwxrwxr-x root/root         0 1998-12-31 04:50 lib/X11/XF86Setup/
+-r--r--r-- root/root     10611 1998-12-31 04:50 lib/X11/XF86Setup/phase1.tcl
+-r--r--r-- root/root      7464 1998-12-31 04:50 lib/X11/XF86Setup/phase2.tcl
+-r--r--r-- root/root      1862 1998-12-31 04:50 lib/X11/XF86Setup/phase3.tcl
+-r--r--r-- root/root      2953 1998-12-31 04:50 lib/X11/XF86Setup/phase4.tcl
+-r--r--r-- root/root      2385 1998-12-31 04:50 lib/X11/XF86Setup/phase5.tcl
+-r--r--r-- root/root     20258 1998-12-31 04:50 lib/X11/XF86Setup/setuplib.tcl
+-r--r--r-- root/root      3050 1998-12-31 04:50 lib/X11/XF86Setup/srvflags.tcl
+-r--r--r-- root/root     22109 1998-12-31 04:50 lib/X11/XF86Setup/carddata.tcl
+-r--r--r-- root/root     19842 1998-12-31 04:50 lib/X11/XF86Setup/card.tcl
+-r--r--r-- root/root      1749 1998-12-31 04:50 lib/X11/XF86Setup/done.tcl
+-r--r--r-- root/root      3009 1998-12-31 04:50 lib/X11/XF86Setup/filelist.tcl
+-r--r--r-- root/root      9663 1998-12-31 04:50 lib/X11/XF86Setup/keyboard.tcl
+-r--r--r-- root/root       550 1998-12-31 04:50 lib/X11/XF86Setup/mseproto.tcl
+-r--r--r-- root/root      6594 1998-12-31 04:50 lib/X11/XF86Setup/mondata.tcl
+-r--r--r-- root/root     10964 1998-12-31 04:50 lib/X11/XF86Setup/monitor.tcl
+-r--r--r-- root/root      6988 1998-12-31 04:50 
lib/X11/XF86Setup/modeselect.tcl
+-r--r--r-- root/root     21028 1998-12-31 04:50 lib/X11/XF86Setup/mouse.tcl
+-r--r--r-- root/root      1145 1998-12-31 04:50 lib/X11/XF86Setup/LICENSE
+drwxrwxr-x root/root         0 1998-12-31 04:50 lib/X11/XF86Setup/tcllib/
+-r--r--r-- root/root      4617 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/button.tcl
+-r--r--r-- root/root      6172 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/combobox.tcl
+-r--r--r-- root/root      3552 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/misc.tcl
+-r--r--r-- root/root       245 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/downarrow.xbm
+-r--r--r-- root/root      4004 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/dialog.tcl
+-r--r--r-- root/root     13010 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/entry.tcl
+-r--r--r-- root/root      5034 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/focus.tcl
+-r--r--r-- root/root      8241 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/init.tcl
+-r--r--r-- root/root     11707 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/listbox.tcl
+-r--r--r-- root/root     25328 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/menu.tcl
+-r--r--r-- root/root      1856 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/optionMenu.tcl
+-r--r--r-- root/root      7289 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/palette.tcl
+-r--r--r-- root/root      6837 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/scale.tcl
+-r--r--r-- root/root     11211 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/scrollbar.tcl
+-r--r--r-- root/root      6148 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/tclIndex
+-r--r--r-- root/root      3691 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/tearoff.tcl
+-r--r--r-- root/root     21213 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/text.tcl
+-r--r--r-- root/root      3594 1998-12-31 04:50 lib/X11/XF86Setup/tcllib/tk.tcl
+-r--r--r-- root/root      2687 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/tkerror.tcl
+-r--r--r-- root/root       227 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/uparrow.xbm
+-r--r--r-- root/root      1734 1998-12-31 04:50 
lib/X11/XF86Setup/tcllib/license.terms
+drwxrwxr-x root/root         0 1998-12-31 04:50 lib/X11/XF86Setup/pics/
+-r--r--r-- root/root      9634 1998-12-31 04:50 
lib/X11/XF86Setup/pics/vidcard.xbm
+-r--r--r-- root/root      9634 1998-12-31 04:50 
lib/X11/XF86Setup/pics/vidcard.msk
+-r--r--r-- root/root     28577 1998-12-31 04:50 
lib/X11/XF86Setup/pics/XFree86.xbm
+-r--r--r-- root/root     28577 1998-12-31 04:50 
lib/X11/XF86Setup/pics/XFree86.msk
+drwxrwxr-x root/root         0 1998-12-31 04:50 lib/X11/XF86Setup/scripts/
+-r--r--r-- root/root      2394 1998-12-31 04:50 
lib/X11/XF86Setup/scripts/mseconfig.tcl
+drwxrwxr-x root/root         0 1998-12-31 04:50 lib/X11/XF86Setup/texts/
+-r--r--r-- root/root      2973 1998-12-31 04:50 
lib/X11/XF86Setup/texts/local_text.tcl
+drwxrwxr-x root/root         0 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/
+-r--r--r-- root/root      8161 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/messages.tcl
+-r--r--r-- root/root      2224 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/message_proc.tcl
+-r--r--r-- root/root      1973 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_card.tcl
+-r--r--r-- root/root       450 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_done.tcl
+-r--r--r-- root/root       437 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_keyboard.tcl
+-r--r--r-- root/root       752 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_monitor.tcl
+-r--r--r-- root/root      1743 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_mouse.tcl
+-r--r--r-- root/root       447 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_other.tcl
+-r--r--r-- root/root       970 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_intro.tcl
+-r--r--r-- root/root       677 1998-12-31 04:50 
lib/X11/XF86Setup/texts/generic/help_modeselect.tcl
+drwxrwxr-x root/root         0 1998-12-31 04:50 lib/X11/XF86Setup/texts/ja/
+-r--r--r-- root/root      9540 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/messages.tcl
+-r--r--r-- root/root      2817 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/message_proc.tcl
+-r--r--r-- root/root      2118 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_card.tcl
+-r--r--r-- root/root       337 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_done.tcl
+-r--r--r-- root/root       606 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_keyboard.tcl
+-r--r--r-- root/root       823 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_monitor.tcl
+-r--r--r-- root/root      4282 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_mouse.tcl
+-r--r--r-- root/root       402 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_other.tcl
+-r--r--r-- root/root      1627 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_intro.tcl
+-r--r--r-- root/root      1068 1998-12-31 04:50 
lib/X11/XF86Setup/texts/ja/help_modeselect.tcl
+-r--r--r-- root/root      3628 1998-12-31 03:15 man/man1/XF86Setup.1x
+-r--r--r-- root/root      1582 1998-12-31 03:15 man/man1/xmseconfig.1x

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xshlib.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xshlib.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xshlib.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xshlib.txt 3 Mar 
2012 06:14:54 -0000       1.1
@@ -0,0 +1,36 @@
+-rwxr-xr-x root/root     80958 1998-12-20 03:04 lib/libICE.so.6.3
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libICE.so.6 -> 
libICE.so.6.3
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libICE.so -> libICE.so.6.3
+-rwxr-xr-x root/root    241837 1998-12-20 03:04 lib/libPEX5.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libPEX5.so.6 -> 
libPEX5.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libPEX5.so -> 
libPEX5.so.6.0
+-rwxr-xr-x root/root     33879 1998-12-20 03:04 lib/libSM.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libSM.so.6 -> libSM.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libSM.so -> libSM.so.6.0
+-rwxr-xr-x root/root    726839 1998-12-20 03:04 lib/libX11.so.6.1
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libX11.so.6 -> 
libX11.so.6.1
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libX11.so -> libX11.so.6.1
+-rwxr-xr-x root/root     49343 1998-12-20 03:04 lib/libXIE.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXIE.so.6 -> 
libXIE.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXIE.so -> libXIE.so.6.0
+-rwxr-xr-x root/root    248659 1998-12-20 03:04 lib/libXaw.so.6.1
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXaw.so.6 -> 
libXaw.so.6.1
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXaw.so -> libXaw.so.6.1
+-rwxr-xr-x root/root     49543 1998-12-20 03:04 lib/libXext.so.6.3
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXext.so.6 -> 
libXext.so.6.3
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXext.so -> 
libXext.so.6.3
+-rwxr-xr-x root/root     31928 1998-12-20 03:04 lib/libXi.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXi.so.6 -> libXi.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXi.so -> libXi.so.6.0
+-rwxr-xr-x root/root     80975 1998-12-20 03:04 lib/libXmu.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXmu.so.6 -> 
libXmu.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXmu.so -> libXmu.so.6.0
+-rwxr-xr-x root/root     29568 1998-12-20 03:05 lib/libXp.so.6.2
+lrwxrwxrwx root/root         0 1998-12-20 03:05 lib/libXp.so.6 -> libXp.so.6.2
+lrwxrwxrwx root/root         0 1998-12-20 03:05 lib/libXp.so -> libXp.so.6.2
+-rwxr-xr-x root/root    313937 1998-12-20 03:04 lib/libXt.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXt.so.6 -> libXt.so.6.0
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXt.so -> libXt.so.6.0
+-rwxr-xr-x root/root     19295 1998-12-20 03:04 lib/libXtst.so.6.1
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXtst.so.6 -> 
libXtst.so.6.1
+lrwxrwxrwx root/root         0 1998-12-20 03:04 lib/libXtst.so -> 
libXtst.so.6.1

Index: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xvfb.txt
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xvfb.txt
diff -N Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xvfb.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/es/linux_files/x-window-dir/xvfb.txt   3 Mar 
2012 06:14:54 -0000       1.1
@@ -0,0 +1 @@
+-rwxr-xr-x root/root   2755357 1998-12-31 04:48 bin/Xvfb

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-1.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-1.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-1.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-1.html     3 Mar 2012 06:14:54 
-0000       1.1
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Introduction</TITLE>
+ <LINK HREF="gtk_tut-2.html" REL=next>
+
+ <LINK HREF="gtk_tut.html#toc1" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-2.html">Next</A>
+Previous
+<A HREF="gtk_tut.html#toc1">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s1">1. Introduction</A></H2>
+
+<P>GTK (GIMP Toolkit) is a library for creating graphical user
+interfaces. It is licensed using the LGPL license, so you can develop
+open software, free software, or even commercial non-free software
+using GTK without having to spend anything for licenses or royalties.
+<P>It's called the GIMP toolkit because it was originally written for
+developing the General Image Manipulation Program (GIMP), but GTK has
+now been used in a large number of software projects, including the
+GNU Network Object Model Environment (GNOME) project. GTK is built on
+top of GDK (GIMP Drawing Kit) which is basically a wrapper around the
+low-level functions for accessing the underlying windowing functions
+(Xlib in the case of the X windows system). The primary authors of GTK
+are:
+<P>
+<UL>
+<LI> Peter Mattis   <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE></LI>
+<LI> Spencer Kimball <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE></LI>
+<LI> Josh MacDonald <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE></LI>
+</UL>
+<P>GTK is essentially an object oriented application programmers
+interface (API). Although written completely in C, it is implemented
+using the idea of classes and callback functions (pointers to
+functions).
+<P>There is also a third component called GLib which contains a few
+replacements for some standard calls, as well as some additional
+functions for handling linked lists, etc. The replacement functions
+are used to increase GTK's portability, as some of the functions
+implemented here are not available or are nonstandard on other unixes
+such as g_strerror(). Some also contain enhancements to the libc
+versions, such as g_malloc that has enhanced debugging utilities.
+<P>This tutorial describes the C interface to GTK. There are GTK
+bindings for many other languages including C++, Guile, Perl, Python,
+TOM, Ada95, Objective C, Free Pascal, and Eiffel. If you intend to
+use another language's bindings to GTK, look at that binding's
+documentation first. In some cases that documentation may describe
+some important conventions (which you should know first) and then
+refer you back to this tutorial. There are also some cross-platform
+APIs (such as wxWindows and V) which use GTK as one of their target
+platforms; again, consult their documentation first.
+<P>If you're developing your GTK application in C++, a few extra notes
+are in order. There's a C++ binding to GTK called GTK--, which
+provides a more C++-like interface to GTK; you should probably look
+into this instead. If you don't like that approach for whatever
+reason, there are two alternatives for using GTK. First, you can use
+only the C subset of C++ when interfacing with GTK and then use the C
+interface as described in this tutorial. Second, you can use GTK and
+C++ together by declaring all callbacks as static functions in C++
+classes, and again calling GTK using its C interface. If you choose
+this last approach, you can include as the callback's data value a
+pointer to the object to be manipulated (the so-called "this" value).
+Selecting between these options is simply a matter of preference,
+since in all three approaches you get C++ and GTK. None of these
+approaches requires the use of a specialized preprocessor, so no
+matter what you choose you can use standard C++ with GTK.
+<P>This tutorial is an attempt to document as much as possible of GTK,
+but it is by no means complete. This tutorial assumes a good
+understanding of C, and how to create C programs. It would be a great
+benefit for the reader to have previous X programming experience, but
+it shouldn't be necessary. If you are learning GTK as your first
+widget set, please comment on how you found this tutorial, and what
+you had trouble with. There are also C++, Objective C, ADA, Guile and
+other language bindings available, but I don't follow these.
+<P>This document is a "work in progress". Please look for updates on
+<A HREF="http://www.gtk.org/";>http://www.gtk.org/</A>.
+<P>I would very much like to hear of any problems you have learning GTK
+from this document, and would appreciate input as to how it may be
+improved. Please see the section on 
+<A HREF="gtk_tut-25.html#sec_Contributing">Contributing</A> for further 
information.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-2.html">Next</A>
+Previous
+<A HREF="gtk_tut.html#toc1">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-10.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-10.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-10.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-10.html    3 Mar 2012 06:14:54 
-0000       1.1
@@ -0,0 +1,1956 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Container Widgets</TITLE>
+ <LINK HREF="gtk_tut-11.html" REL=next>
+ <LINK HREF="gtk_tut-9.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc10" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-11.html">Next</A>
+<A HREF="gtk_tut-9.html">Previous</A>
+<A HREF="gtk_tut.html#toc10">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s10">10. Container Widgets</A> </H2>
+
+<H2><A NAME="sec_EventBox"></A> <A NAME="ss10.1">10.1 The EventBox </A>
+</H2>
+
+<P> 
+Some GTK widgets don't have associated X windows, so they just draw on
+their parents. Because of this, they cannot receive events and if they
+are incorrectly sized, they don't clip so you can get messy
+overwriting, etc. If you require more from these widgets, the EventBox
+is for you.
+<P>At first glance, the EventBox widget might appear to be totally
+useless. It draws nothing on the screen and responds to no
+events. However, it does serve a function - it provides an X window
+for its child widget. This is important as many GTK widgets do not
+have an associated X window. Not having an X window saves memory and
+improves performance, but also has some drawbacks. A widget without an
+X window cannot receive events, and does not perform any clipping on
+its contents. Although the name <EM>EventBox</EM> emphasizes the
+event-handling function, the widget can also be used for clipping.
+(and more, see the example below).
+<P>To create a new EventBox widget, use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_event_box_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A child widget can then be added to this EventBox:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_container_add( GTK_CONTAINER(event_box), child_widget );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The following example demonstrates both uses of an EventBox - a label
+is created that is clipped to a small box, and set up so that a
+mouse-click on the label causes the program to exit. Resizing the
+window reveals varying amounts of the label.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start eventbox eventbox.c */
+
+#include &lt;gtk/gtk.h>
+
+int main( int argc,
+          char *argv[] )
+{
+    GtkWidget *window;
+    GtkWidget *event_box;
+    GtkWidget *label;
+    
+    gtk_init (&amp;argc, &amp;argv);
+    
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    
+    gtk_window_set_title (GTK_WINDOW (window), "Event Box");
+    
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC (gtk_exit), NULL);
+    
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+    
+    /* Create an EventBox and add it to our toplevel window */
+    
+    event_box = gtk_event_box_new ();
+    gtk_container_add (GTK_CONTAINER(window), event_box);
+    gtk_widget_show (event_box);
+    
+    /* Create a long label */
+    
+    label = gtk_label_new ("Click here to quit, quit, quit, quit, quit");
+    gtk_container_add (GTK_CONTAINER (event_box), label);
+    gtk_widget_show (label);
+    
+    /* Clip it short. */
+    gtk_widget_set_usize (label, 110, 20);
+    
+    /* And bind an action to it */
+    gtk_widget_set_events (event_box, GDK_BUTTON_PRESS_MASK);
+    gtk_signal_connect (GTK_OBJECT(event_box), "button_press_event",
+                        GTK_SIGNAL_FUNC (gtk_exit), NULL);
+    
+    /* Yet one more thing you need an X window for ... */
+    
+    gtk_widget_realize (event_box);
+    gdk_window_set_cursor (event_box->window, gdk_cursor_new (GDK_HAND1));
+    
+    gtk_widget_show (window);
+    
+    gtk_main ();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>   
+<H2><A NAME="sec_Alignment"></A> <A NAME="ss10.2">10.2 The Alignment widget 
</A>
+</H2>
+
+<P>The alignment widget allows you to place a widget within its window at
+a position and size relative to the size of the Alignment widget
+itself. For example, it can be very useful for centering a widget
+within the window.
+<P>There are only two functions associated with the Alignment widget:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* gtk_alignment_new( gfloat xalign,
+                              gfloat yalign,
+                              gfloat xscale,
+                              gfloat yscale );
+
+void gtk_alignment_set( GtkAlignment *alignment,
+                        gfloat        xalign,
+                        gfloat        yalign,
+                        gfloat        xscale,
+                        gfloat        yscale );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first function creates a new Alignment widget with the specified
+parameters. The second function allows the alignment paramters of an
+exisiting Alignment widget to be altered.
+<P>All four alignment parameters are floating point numbers which can
+range from 0.0 to 1.0. The <CODE>xalign</CODE> and <CODE>yalign</CODE> 
arguments
+affect the position of the widget placed within the Alignment
+widget. The <CODE>xscale</CODE> and <CODE>yscale</CODE> arguments effect the 
amount of
+space allocated to the widget.
+<P>A child widget can be added to this Alignment widget using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_container_add( GTK_CONTAINER(alignment), child_widget );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>For an example of using an Alignment widget, refer to the example for
+the 
+<A HREF="gtk_tut-9.html#sec_ProgressBar">Progress Bar</A> widget.
+<P>
+<H2><A NAME="ss10.3">10.3 Fixed Container</A>
+</H2>
+
+<P>The Fixed container allows you to place widgets at a fixed position
+within it's window, relative to it's upper left hand corner. The
+position of the widgets can be changed dynamically.
+<P>There are only three functions associated with the fixed widget:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* gtk_fixed_new( void );
+
+void gtk_fixed_put( GtkFixed  *fixed,
+                    GtkWidget *widget,
+                    gint16     x,
+                    gint16     y );
+
+void gtk_fixed_move( GtkFixed  *fixed,
+                     GtkWidget *widget,
+                     gint16     x,
+                     gint16     y );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The function <CODE>gtk_fixed_new</CODE> allows you to create a new Fixed
+container.
+<P><CODE>gtk_fixed_put</CODE> places <CODE>widget</CODE> in the container 
<CODE>fixed</CODE> at
+the position specified by <CODE>x</CODE> and <CODE>y</CODE>.
+<P><CODE>gtk_fixed_move</CODE> allows the specified widget to be moved to a new
+position.
+<P>The following example illustrates how to use the Fixed Container.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start fixed fixed.c */
+
+#include &lt;gtk/gtk.h>
+
+/* I'm going to be lazy and use some global variables to
+ * store the position of the widget within the fixed
+ * container */
+gint x=50;
+gint y=50;
+
+/* This callback function moves the button to a new position
+ * in the Fixed container. */
+void move_button( GtkWidget *widget,
+                  GtkWidget *fixed )
+{
+  x = (x+30)%300;
+  y = (y+50)%300;
+  gtk_fixed_move( GTK_FIXED(fixed), widget, x, y); 
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  /* GtkWidget is the storage type for widgets */
+  GtkWidget *window;
+  GtkWidget *fixed;
+  GtkWidget *button;
+  gint i;
+
+  /* Initialise GTK */
+  gtk_init(&amp;argc, &amp;argv);
+    
+  /* Create a new window */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title(GTK_WINDOW(window), "Fixed Container");
+
+  /* Here we connect the "destroy" event to a signal handler */ 
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+ 
+  /* Sets the border width of the window. */
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  /* Create a Fixed Container */
+  fixed = gtk_fixed_new();
+  gtk_container_add(GTK_CONTAINER(window), fixed);
+  gtk_widget_show(fixed);
+  
+  for (i = 1 ; i &lt;= 3 ; i++) {
+    /* Creates a new button with the label "Press me" */
+    button = gtk_button_new_with_label ("Press me");
+  
+    /* When the button receives the "clicked" signal, it will call the
+     * function move_button() passing it the Fixed Container as its
+     * argument. */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (move_button), fixed);
+  
+    /* This packs the button into the fixed containers window. */
+    gtk_fixed_put (GTK_FIXED (fixed), button, i*50, i*50);
+  
+    /* The final step is to display this newly created widget. */
+    gtk_widget_show (button);
+  }
+
+  /* Display the window */
+  gtk_widget_show (window);
+    
+  /* Enter the event loop */
+  gtk_main ();
+    
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss10.4">10.4 Layout Container</A>
+</H2>
+
+<P>The Layout container is similar to the Fixed container except that it
+implements an infinite (where infinity is less than 2^32) scrolling
+area. The X window system has a limitation where windows can be at
+most 32767 pixels wide or tall. The Layout container gets around this
+limitation by doing some exotic stuff using window and bit gravities,
+so that you can have smooth scrolling even when you have many child
+widgets in your scrolling area.
+<P>A Layout container is created using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_layout_new( GtkAdjustment *hadjustment,
+                           GtkAdjustment *vadjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you can see, you can optionally specify the Adjustment objects that
+the Layout widget will use for its scrolling.
+<P>You can add and move widgets in the Layout container using the
+following two functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_layout_put( GtkLayout *layout,
+                     GtkWidget *widget,
+                     gint       x,
+                     gint       y );
+
+void gtk_layout_move( GtkLayout *layout,
+                      GtkWidget *widget,
+                      gint       x,
+                      gint       y );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The size of the Layout container can be set using the next function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_layout_set_size( GtkLayout *layout,
+                          guint      width,
+                          guint      height );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Layout containers are one of the very few widgets in the GTK widget
+set that actively repaint themselves on screen as they are changed
+using the above functions (the vast majority of widgets queue
+requests which are then processed when control returns to the
+<CODE>gtk_main()</CODE> function).
+<P>When you want to make a large number of changes to a Layout container,
+you can use the following two functions to disable and re-enable this
+repainting functionality:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_layout_freeze( GtkLayout *layout );
+
+void gtk_layout_thaw( GtkLayout *layout );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The final four functions for use with Layout widgets are for
+manipulating the horizontal and vertical adjustment widgets:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkAdjustment* gtk_layout_get_hadjustment( GtkLayout *layout );
+
+GtkAdjustment* gtk_layout_get_vadjustment( GtkLayout *layout );
+
+void gtk_layout_set_hadjustment( GtkLayout     *layout,
+                                 GtkAdjustment *adjustment );
+
+void gtk_layout_set_vadjustment( GtkLayout     *layout,
+                                 GtkAdjustment *adjustment);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="sec_Frames"></A> <A NAME="ss10.5">10.5 Frames </A>
+</H2>
+
+<P>Frames can be used to enclose one or a group of widgets with a box
+which can optionally be labelled. The position of the label and the
+style of the box can be altered to suit.
+<P>A Frame can be created with the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_frame_new( const gchar *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The label is by default placed in the upper left hand corner of the
+frame. A value of NULL for the <CODE>label</CODE> argument will result in no
+label being displayed. The text of the label can be changed using the
+next function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_frame_set_label( GtkFrame    *frame,
+                          const gchar *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The position of the label can be changed using this function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_frame_set_label_align( GtkFrame *frame,
+                                gfloat    xalign,
+                                gfloat    yalign );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>xalign</CODE> and <CODE>yalign</CODE> take values between 0.0 and 
1.0. <CODE>xalign</CODE>
+indicates the position of the label along the top horizontal of the
+frame. <CODE>yalign</CODE> is not currently used. The default value of xalign
+is 0.0 which places the label at the left hand end of the frame.
+<P>The next function alters the style of the box that is used to outline
+the frame.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_frame_set_shadow_type( GtkFrame      *frame,
+                                GtkShadowType  type);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>type</CODE> argument can take one of the following values:
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_SHADOW_NONE
+  GTK_SHADOW_IN
+  GTK_SHADOW_OUT
+  GTK_SHADOW_ETCHED_IN (the default)
+  GTK_SHADOW_ETCHED_OUT
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The following code example illustrates the use of the Frame widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start frame frame.c */
+
+#include &lt;gtk/gtk.h>
+
+int main( int   argc,
+          char *argv[] )
+{
+  /* GtkWidget is the storage type for widgets */
+  GtkWidget *window;
+  GtkWidget *frame;
+  GtkWidget *button;
+  gint i;
+
+  /* Initialise GTK */
+  gtk_init(&amp;argc, &amp;argv);
+    
+  /* Create a new window */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title(GTK_WINDOW(window), "Frame Example");
+
+  /* Here we connect the "destroy" event to a signal handler */ 
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+
+  gtk_widget_set_usize(window, 300, 300);
+  /* Sets the border width of the window. */
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  /* Create a Frame */
+  frame = gtk_frame_new(NULL);
+  gtk_container_add(GTK_CONTAINER(window), frame);
+
+  /* Set the frame's label */
+  gtk_frame_set_label( GTK_FRAME(frame), "GTK Frame Widget" );
+
+  /* Align the label at the right of the frame */
+  gtk_frame_set_label_align( GTK_FRAME(frame), 1.0, 0.0);
+
+  /* Set the style of the frame */
+  gtk_frame_set_shadow_type( GTK_FRAME(frame), GTK_SHADOW_ETCHED_OUT);
+
+  gtk_widget_show(frame);
+  
+  /* Display the window */
+  gtk_widget_show (window);
+    
+  /* Enter the event loop */
+  gtk_main ();
+    
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>   
+<H2><A NAME="ss10.6">10.6 Aspect Frames</A>
+</H2>
+
+<P>The aspect frame widget is like a frame widget, except that it also
+enforces the aspect ratio (that is, the ratio of the width to the
+height) of the child widget to have a certain value, adding extra
+space if necessary. This is useful, for instance, if you want to
+preview a larger image. The size of the preview should vary when the
+user resizes the window, but the aspect ratio needs to always match
+the original image.
+<P>To create a new aspect frame use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_aspect_frame_new( const gchar *label,
+                                 gfloat       xalign,
+                                 gfloat       yalign,
+                                 gfloat       ratio,
+                                 gint         obey_child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>xalign</CODE> and <CODE>yalign</CODE> specify alignment as with 
Alignment
+widgets. If <CODE>obey_child</CODE> is true, the aspect ratio of a child
+widget will match the aspect ratio of the ideal size it requests.
+Otherwise, it is given by <CODE>ratio</CODE>.
+<P>To change the options of an existing aspect frame, you can use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_aspect_frame_set( GtkAspectFrame *aspect_frame,
+                           gfloat          xalign,
+                           gfloat          yalign,
+                           gfloat          ratio,
+                           gint            obey_child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As an example, the following program uses an AspectFrame to present a
+drawing area whose aspect ratio will always be 2:1, no matter how the
+user resizes the top-level window.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start aspectframe aspectframe.c */
+
+#include &lt;gtk/gtk.h>
+   
+int main( int argc,
+          char *argv[] )
+{
+    GtkWidget *window;
+    GtkWidget *aspect_frame;
+    GtkWidget *drawing_area;
+    gtk_init (&amp;argc, &amp;argv);
+   
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+   
+    /* Create an aspect_frame and add it to our toplevel window */
+   
+    aspect_frame = gtk_aspect_frame_new ("2x1", /* label */
+                                         0.5, /* center x */
+                                         0.5, /* center y */
+                                         2, /* xsize/ysize = 2 */
+                                         FALSE /* ignore child's aspect */);
+   
+    gtk_container_add (GTK_CONTAINER(window), aspect_frame);
+    gtk_widget_show (aspect_frame);
+   
+    /* Now add a child widget to the aspect frame */
+   
+    drawing_area = gtk_drawing_area_new ();
+   
+    /* Ask for a 200x200 window, but the AspectFrame will give us a 200x100
+     * window since we are forcing a 2x1 aspect ratio */
+    gtk_widget_set_usize (drawing_area, 200, 200);
+    gtk_container_add (GTK_CONTAINER(aspect_frame), drawing_area);
+    gtk_widget_show (drawing_area);
+   
+    gtk_widget_show (window);
+    gtk_main ();
+    return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>   
+<H2><A NAME="ss10.7">10.7 Paned Window Widgets</A>
+</H2>
+
+<P>The paned window widgets are useful when you want to divide an area
+into two parts, with the relative size of the two parts controlled by
+the user. A groove is drawn between the two portions with a handle
+that the user can drag to change the ratio. The division can either be
+horizontal (HPaned) or vertical (VPaned).
+<P>To create a new paned window, call one of:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_hpaned_new (void);
+
+GtkWidget *gtk_vpaned_new (void);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>After creating the paned window widget, you need to add child widgets
+to its two halves. To do this, use the functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_paned_add1 (GtkPaned *paned, GtkWidget *child);
+
+void gtk_paned_add2 (GtkPaned *paned, GtkWidget *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>gtk_paned_add1()</CODE> adds the child widget to the left or top half 
of
+the paned window. <CODE>gtk_paned_add2()</CODE> adds the child widget to the
+right or bottom half of the paned window.
+<P>A paned widget can be changed visually using the following two
+functions.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_paned_set_handle_size( GtkPaned *paned,
+                                guint16   size);
+
+void gtk_paned_set_gutter_size( GtkPaned *paned,
+                                guint16   size);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first of these sets the size of the handle and the second sets the
+size of the gutter that is between the two parts of the paned window.
+<P>As an example, we will create part of the user interface of an
+imaginary email program. A window is divided into two portions
+vertically, with the top portion being a list of email messages and
+the bottom portion the text of the email message. Most of the program
+is pretty straightforward. A couple of points to note: text can't be
+added to a Text widget until it is realized. This could be done by
+calling <CODE>gtk_widget_realize()</CODE>, but as a demonstration of an
+alternate technique, we connect a handler to the "realize" signal to
+add the text. Also, we need to add the <CODE>GTK_SHRINK</CODE> option to some
+of the items in the table containing the text window and its
+scrollbars, so that when the bottom portion is made smaller, the
+correct portions shrink instead of being pushed off the bottom of the
+window.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start paned paned.c */
+
+#include &lt;gtk/gtk.h>
+   
+/* Create the list of "messages" */
+GtkWidget *create_list( void )
+{
+
+    GtkWidget *scrolled_window;
+    GtkWidget *list;
+    GtkWidget *list_item;
+   
+    int i;
+    char buffer[16];
+   
+    /* Create a new scrolled window, with scrollbars only if needed */
+    scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                    GTK_POLICY_AUTOMATIC, 
+                                    GTK_POLICY_AUTOMATIC);
+   
+    /* Create a new list and put it in the scrolled window */
+    list = gtk_list_new ();
+    gtk_scrolled_window_add_with_viewport (
+               GTK_SCROLLED_WINDOW (scrolled_window), list);
+    gtk_widget_show (list);
+   
+    /* Add some messages to the window */
+    for (i=0; i&lt;10; i++) {
+
+        sprintf(buffer,"Message #%d",i);
+        list_item = gtk_list_item_new_with_label (buffer);
+        gtk_container_add (GTK_CONTAINER(list), list_item);
+        gtk_widget_show (list_item);
+
+    }
+   
+    return scrolled_window;
+}
+   
+/* Add some text to our text widget - this is a callback that is invoked
+when our window is realized. We could also force our window to be
+realized with gtk_widget_realize, but it would have to be part of
+a hierarchy first */
+
+void realize_text( GtkWidget *text,
+                   gpointer data )
+{
+    gtk_text_freeze (GTK_TEXT (text));
+    gtk_text_insert (GTK_TEXT (text), NULL, &amp;text->style->black, NULL,
+    "From: address@hidden"
+    "To: address@hidden"
+    "Subject: Made it!\n"
+    "\n"
+    "We just got in this morning. The weather has been\n"
+    "great - clear but cold, and there are lots of fun sights.\n"
+    "Sojourner says hi. See you soon.\n"
+    " -Path\n", -1);
+   
+    gtk_text_thaw (GTK_TEXT (text));
+}
+   
+/* Create a scrolled text area that displays a "message" */
+GtkWidget *create_text( void )
+{
+    GtkWidget *table;
+    GtkWidget *text;
+    GtkWidget *hscrollbar;
+    GtkWidget *vscrollbar;
+   
+    /* Create a table to hold the text widget and scrollbars */
+    table = gtk_table_new (2, 2, FALSE);
+   
+    /* Put a text widget in the upper left hand corner. Note the use of
+     * GTK_SHRINK in the y direction */
+    text = gtk_text_new (NULL, NULL);
+    gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
+                      GTK_FILL | GTK_EXPAND,
+                      GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0);
+    gtk_widget_show (text);
+   
+    /* Put a HScrollbar in the lower left hand corner */
+    hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);
+    gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2,
+                      GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+    gtk_widget_show (hscrollbar);
+   
+    /* And a VScrollbar in the upper right */
+    vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
+    gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1,
+                      GTK_FILL, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0);
+    gtk_widget_show (vscrollbar);
+   
+    /* Add a handler to put a message in the text widget when it is realized */
+    gtk_signal_connect (GTK_OBJECT (text), "realize",
+                        GTK_SIGNAL_FUNC (realize_text), NULL);
+   
+    return table;
+}
+   
+int main( int   argc,
+          char *argv[] )
+{
+    GtkWidget *window;
+    GtkWidget *vpaned;
+    GtkWidget *list;
+    GtkWidget *text;
+
+    gtk_init (&amp;argc, &amp;argv);
+   
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (window), "Paned Windows");
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+    gtk_widget_set_usize (GTK_WIDGET(window), 450, 400);
+
+    /* create a vpaned widget and add it to our toplevel window */
+   
+    vpaned = gtk_vpaned_new ();
+    gtk_container_add (GTK_CONTAINER(window), vpaned);
+    gtk_paned_set_handle_size (GTK_PANED(vpaned),
+                               10);
+    gtk_paned_set_gutter_size (GTK_PANED(vpaned),
+                               15);                       
+    gtk_widget_show (vpaned);
+   
+    /* Now create the contents of the two halves of the window */
+   
+    list = create_list ();
+    gtk_paned_add1 (GTK_PANED(vpaned), list);
+    gtk_widget_show (list);
+   
+    text = create_text ();
+    gtk_paned_add2 (GTK_PANED(vpaned), text);
+    gtk_widget_show (text);
+    gtk_widget_show (window);
+    gtk_main ();
+    return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="sec_Viewports"></A> <A NAME="ss10.8">10.8 Viewports </A>
+</H2>
+
+<P>It is unlikely that you will ever need to use the Viewport widget
+directly. You are much more likely to use the
+<A HREF="#sec_ScrolledWindow">Scrolled Window</A> widget which
+itself uses the Viewport.
+<P>A viewport widget allows you to place a larger widget within it such
+that you can view a part of it at a time. It uses
+<A HREF="gtk_tut-7.html#sec_Adjustment">Adjustments</A> to define the area that
+is currently in view.
+<P>A Viewport is created with the function
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_viewport_new( GtkAdjustment *hadjustment,
+                             GtkAdjustment *vadjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you can see you can specify the horizontal and vertical Adjustments
+that the widget is to use when you create the widget. It will create
+its own if you pass NULL as the value of the arguments.
+<P>You can get and set the adjustments after the widget has been created
+using the following four functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkAdjustment *gtk_viewport_get_hadjustment (GtkViewport *viewport );
+
+GtkAdjustment *gtk_viewport_get_vadjustment (GtkViewport *viewport );
+
+void gtk_viewport_set_hadjustment( GtkViewport   *viewport,
+                                   GtkAdjustment *adjustment );
+
+void gtk_viewport_set_vadjustment( GtkViewport   *viewport,
+                                   GtkAdjustment *adjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The only other viewport function is used to alter its appearance:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_viewport_set_shadow_type( GtkViewport   *viewport,
+                                   GtkShadowType  type );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Possible values for the <CODE>type</CODE> parameter are:
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_SHADOW_NONE,
+  GTK_SHADOW_IN,
+  GTK_SHADOW_OUT,
+  GTK_SHADOW_ETCHED_IN,
+  GTK_SHADOW_ETCHED_OUT
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="sec_ScrolledWindow"></A> <A NAME="ss10.9">10.9 Scrolled Windows 
</A>
+</H2>
+
+<P>Scrolled windows are used to create a scrollable area with another
+widget inside it. You may insert any type of widget into a scrolled
+window, and it will be accessible regardless of the size by using the
+scrollbars.
+<P>The following function is used to create a new scrolled window.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_scrolled_window_new( GtkAdjustment *hadjustment,
+                                    GtkAdjustment *vadjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Where the first argument is the adjustment for the horizontal
+direction, and the second, the adjustment for the vertical direction.
+These are almost always set to NULL.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_scrolled_window_set_policy( GtkScrolledWindow *scrolled_window,
+                                     GtkPolicyType      hscrollbar_policy,
+                                     GtkPolicyType      vscrollbar_policy );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This sets the policy to be used with respect to the scrollbars.
+The first argument is the scrolled window you wish to change. The second
+sets the policy for the horizontal scrollbar, and the third the policy for 
+the vertical scrollbar.
+<P>The policy may be one of <CODE>GTK_POLICY_AUTOMATIC</CODE> or
+<CODE>GTK_POLICY_ALWAYS</CODE>. <CODE>GTK_POLICY_AUTOMATIC</CODE> will 
automatically
+decide whether you need scrollbars, whereas <CODE>GTK_POLICY_ALWAYS</CODE>
+will always leave the scrollbars there.
+<P>You can then place your object into the scrolled window using the
+following function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_scrolled_window_add_with_viewport( GtkScrolledWindow *scrolled_window,
+                                            GtkWidget         *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here is a simple example that packs a table eith 100 toggle buttons
+into a scrolled window. I've only commented on the parts that may be
+new to you.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start scrolledwin scrolledwin.c */
+
+#include &lt;gtk/gtk.h>
+
+void destroy( GtkWidget *widget,
+              gpointer   data )
+{
+    gtk_main_quit();
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    static GtkWidget *window;
+    GtkWidget *scrolled_window;
+    GtkWidget *table;
+    GtkWidget *button;
+    char buffer[32];
+    int i, j;
+    
+    gtk_init (&amp;argc, &amp;argv);
+    
+    /* Create a new dialog window for the scrolled window to be
+     * packed into.  */
+    window = gtk_dialog_new ();
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        (GtkSignalFunc) destroy, NULL);
+    gtk_window_set_title (GTK_WINDOW (window), "GtkScrolledWindow example");
+    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+    gtk_widget_set_usize(window, 300, 300);
+    
+    /* create a new scrolled window. */
+    scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+    
+    gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
+    
+    /* the policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS.
+     * GTK_POLICY_AUTOMATIC will automatically decide whether you need
+     * scrollbars, whereas GTK_POLICY_ALWAYS will always leave the scrollbars
+     * there.  The first one is the horizontal scrollbar, the second, 
+     * the vertical. */
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+    /* The dialog window is created with a vbox packed into it. */             
                                                 
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->vbox), scrolled_window, 
+                        TRUE, TRUE, 0);
+    gtk_widget_show (scrolled_window);
+    
+    /* create a table of 10 by 10 squares. */
+    table = gtk_table_new (10, 10, FALSE);
+    
+    /* set the spacing to 10 on x and 10 on y */
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    
+    /* pack the table into the scrolled window */
+    gtk_scrolled_window_add_with_viewport (
+                   GTK_SCROLLED_WINDOW (scrolled_window), table);
+    gtk_widget_show (table);
+    
+    /* this simply creates a grid of toggle buttons on the table
+     * to demonstrate the scrolled window. */
+    for (i = 0; i &lt; 10; i++)
+       for (j = 0; j &lt; 10; j++) {
+          sprintf (buffer, "button (%d,%d)\n", i, j);
+          button = gtk_toggle_button_new_with_label (buffer);
+          gtk_table_attach_defaults (GTK_TABLE (table), button,
+                                     i, i+1, j, j+1);
+          gtk_widget_show (button);
+       }
+    
+    /* Add a "close" button to the bottom of the dialog */
+    button = gtk_button_new_with_label ("close");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               (GtkSignalFunc) gtk_widget_destroy,
+                               GTK_OBJECT (window));
+    
+    /* this makes it so the button is the default. */
+    
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button, 
TRUE, TRUE, 0);
+    
+    /* This grabs this button to be the default button. Simply hitting
+     * the "Enter" key will cause this button to activate. */
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    
+    gtk_widget_show (window);
+    
+    gtk_main();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Try playing with resizing the window. You'll notice how the scrollbars
+react. You may also wish to use the gtk_widget_set_usize() call to set
+the default size of the window or other widgets.
+<P>   
+<H2><A NAME="ss10.10">10.10 Button Boxes</A>
+</H2>
+
+<P>Button Boxes are a convenient way to quickly layout a group of
+buttons. They come in both horizontal and vertical flavours. You
+create a new Button Box with one of the following calls, which create
+a horizontal or vertical box, respectively:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_hbutton_box_new( void );
+
+GtkWidget *gtk_vbutton_box_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The only attributes pertaining to button boxes effect how the buttons
+are laid out. You can change the spacing between the buttons with:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_hbutton_box_set_spacing_default( gint spacing );
+
+void gtk_vbutton_box_set_spacing_default( gint spacing );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Similarly, the current spacing values can be queried using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_hbutton_box_get_spacing_default( void );
+
+gint gtk_vbutton_box_get_spacing_default( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The second attribute that we can access effects the layout of the
+buttons within the box. It is set using one of:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_hbutton_box_set_layout_default( GtkButtonBoxStyle layout );
+
+void gtk_vbutton_box_set_layout_default( GtkButtonBoxStyle layout );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>layout</CODE> argument can take one of the following values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_BUTTONBOX_DEFAULT_STYLE
+  GTK_BUTTONBOX_SPREAD
+  GTK_BUTTONBOX_EDGE
+  GTK_BUTTONBOX_START
+  GTK_BUTTONBOX_END
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The current layout setting can be retrieved using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkButtonBoxStyle gtk_hbutton_box_get_layout_default( void );
+
+GtkButtonBoxStyle gtk_vbutton_box_get_layout_default( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Buttons are added to a Button Box using the usual function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_container_add( GTK_CONTAINER(button_box), child_widget );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here's an example that illustrates all the different layout settings
+for Button Boxes.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start buttonbox buttonbox.c */
+
+#include &lt;gtk/gtk.h>
+
+/* Create a Button Box with the specified parameters */
+GtkWidget *create_bbox( gint  horizontal,
+                        char *title,
+                        gint  spacing,
+                        gint  child_w,
+                        gint  child_h,
+                        gint  layout )
+{
+  GtkWidget *frame;
+  GtkWidget *bbox;
+  GtkWidget *button;
+
+  frame = gtk_frame_new (title);
+
+  if (horizontal)
+    bbox = gtk_hbutton_box_new ();
+  else
+    bbox = gtk_vbutton_box_new ();
+
+  gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
+  gtk_container_add (GTK_CONTAINER (frame), bbox);
+
+  /* Set the appearance of the Button Box */
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
+  gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
+  gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
+
+  button = gtk_button_new_with_label ("OK");
+  gtk_container_add (GTK_CONTAINER (bbox), button);
+
+  button = gtk_button_new_with_label ("Cancel");
+  gtk_container_add (GTK_CONTAINER (bbox), button);
+
+  button = gtk_button_new_with_label ("Help");
+  gtk_container_add (GTK_CONTAINER (bbox), button);
+
+  return(frame);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  static GtkWidget* window = NULL;
+  GtkWidget *main_vbox;
+  GtkWidget *vbox;
+  GtkWidget *hbox;
+  GtkWidget *frame_horz;
+  GtkWidget *frame_vert;
+
+  /* Initialize GTK */
+  gtk_init( &amp;argc, &amp;argv );
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC(gtk_main_quit),
+                      NULL);
+
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  main_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), main_vbox);
+
+  frame_horz = gtk_frame_new ("Horizontal Button Boxes");
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
+  gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
+
+  gtk_box_pack_start (GTK_BOX (vbox),
+           create_bbox (TRUE, "Spread (spacing 40)", 40, 85, 20, 
GTK_BUTTONBOX_SPREAD),
+                      TRUE, TRUE, 0);
+
+  gtk_box_pack_start (GTK_BOX (vbox),
+           create_bbox (TRUE, "Edge (spacing 30)", 30, 85, 20, 
GTK_BUTTONBOX_EDGE),
+                      TRUE, TRUE, 5);
+
+  gtk_box_pack_start (GTK_BOX (vbox),
+           create_bbox (TRUE, "Start (spacing 20)", 20, 85, 20, 
GTK_BUTTONBOX_START),
+                      TRUE, TRUE, 5);
+
+  gtk_box_pack_start (GTK_BOX (vbox),
+           create_bbox (TRUE, "End (spacing 10)", 10, 85, 20, 
GTK_BUTTONBOX_END),
+                      TRUE, TRUE, 5);
+
+  frame_vert = gtk_frame_new ("Vertical Button Boxes");
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
+  gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
+
+  gtk_box_pack_start (GTK_BOX (hbox),
+           create_bbox (FALSE, "Spread (spacing 5)", 5, 85, 20, 
GTK_BUTTONBOX_SPREAD),
+                      TRUE, TRUE, 0);
+
+  gtk_box_pack_start (GTK_BOX (hbox),
+           create_bbox (FALSE, "Edge (spacing 30)", 30, 85, 20, 
GTK_BUTTONBOX_EDGE),
+                      TRUE, TRUE, 5);
+
+  gtk_box_pack_start (GTK_BOX (hbox),
+           create_bbox (FALSE, "Start (spacing 20)", 20, 85, 20, 
GTK_BUTTONBOX_START),
+                      TRUE, TRUE, 5);
+
+  gtk_box_pack_start (GTK_BOX (hbox),
+           create_bbox (FALSE, "End (spacing 20)", 20, 85, 20, 
GTK_BUTTONBOX_END),
+                      TRUE, TRUE, 5);
+
+  gtk_widget_show_all (window);
+
+  /* Enter the event loop */
+  gtk_main ();
+    
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>   
+<H2><A NAME="ss10.11">10.11 Toolbar</A>
+</H2>
+
+<P>Toolbars are usually used to group some number of widgets in order to
+simplify customization of their look and layout. Typically a toolbar
+consists of buttons with icons, labels and tooltips, but any other
+widget can also be put inside a toolbar. Finally, items can be
+arranged horizontally or vertically and buttons can be displayed with
+icons, labels, or both.
+<P>Creating a toolbar is (as one may already suspect) done with the
+following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_toolbar_new( GtkOrientation orientation,
+                            GtkToolbarStyle  style );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>where orientation may be one of:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_ORIENTATION_HORIZONTAL    
+  GTK_ORIENTATION_VERTICAL
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>and style one of:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_TOOLBAR_TEXT
+  GTK_TOOLBAR_ICONS
+  GTK_TOOLBAR_BOTH
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The style applies to all the buttons created with the `item' functions
+(not to buttons inserted into toolbar as separate widgets).
+<P>After creating a toolbar one can append, prepend and insert items
+(that means simple text strings) or elements (that means any widget
+types) into the toolbar. To describe an item we need a label text, a
+tooltip text, a private tooltip text, an icon for the button and a
+callback function for it. For example, to append or prepend an item
+you may use the following functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_toolbar_append_item( GtkToolbar    *toolbar,
+                                    const char    *text,
+                                    const char    *tooltip_text,
+                                    const char    *tooltip_private_text,
+                                    GtkWidget     *icon,
+                                    GtkSignalFunc  callback,
+                                    gpointer       user_data );
+
+GtkWidget *gtk_toolbar_prepend_item( GtkToolbar    *toolbar,
+                                     const char    *text,
+                                     const char    *tooltip_text,
+                                     const char    *tooltip_private_text,
+                                     GtkWidget     *icon,
+                                     GtkSignalFunc  callback,
+                                     gpointer       user_data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If you want to use gtk_toolbar_insert_item, the only additional
+parameter which must be specified is the position in which the item
+should be inserted, thus:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_toolbar_insert_item( GtkToolbar    *toolbar,
+                                    const char    *text,
+                                    const char    *tooltip_text,
+                                    const char    *tooltip_private_text,
+                                    GtkWidget     *icon,
+                                    GtkSignalFunc  callback,
+                                    gpointer       user_data,
+                                    gint           position );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To simplify adding spaces between toolbar items, you may use the
+following functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_toolbar_append_space( GtkToolbar *toolbar );
+
+void gtk_toolbar_prepend_space( GtkToolbar *toolbar );
+
+void gtk_toolbar_insert_space( GtkToolbar *toolbar,
+                               gint        position );
+ 
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>While the size of the added space can be set globally for a
+whole toolbar with the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_toolbar_set_space_size( GtkToolbar *toolbar,
+                                 gint        space_size) ;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If it's required, the orientation of a toolbar and its style can be
+changed "on the fly" using the following functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_toolbar_set_orientation( GtkToolbar     *toolbar,
+                                  GtkOrientation  orientation );
+
+void gtk_toolbar_set_style( GtkToolbar      *toolbar,
+                            GtkToolbarStyle  style );
+
+void gtk_toolbar_set_tooltips( GtkToolbar *toolbar,
+                               gint        enable );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Where <CODE>orientation</CODE> is one of 
<CODE>GTK_ORIENTATION_HORIZONTAL</CODE> or
+<CODE>GTK_ORIENTATION_VERTICAL</CODE>. The <CODE>style</CODE> is used to set
+appearance of the toolbar items by using one of
+<CODE>GTK_TOOLBAR_ICONS</CODE>, <CODE>GTK_TOOLBAR_TEXT</CODE>, or
+<CODE>GTK_TOOLBAR_BOTH</CODE>.
+<P>To show some other things that can be done with a toolbar, let's take
+the following program (we'll interrupt the listing with some
+additional explanations):
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#include &lt;gtk/gtk.h>
+
+#include "gtk.xpm"
+
+/* This function is connected to the Close button or
+ * closing the window from the WM */
+gint delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  gtk_main_quit ();
+  return(FALSE);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The above beginning seems for sure familiar to you if it's not your first
+GTK program. There is one additional thing though, we include a nice XPM
+picture to serve as an icon for all of the buttons.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* close_button; /* This button will emit signal to close
+                          * application */
+GtkWidget* tooltips_button; /* to enable/disable tooltips */
+GtkWidget* text_button,
+         * icon_button,
+         * both_button; /* radio buttons for toolbar style */
+GtkWidget* entry; /* a text entry to show packing any widget into
+                   * toolbar */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>In fact not all of the above widgets are needed here, but to make things
+clearer I put them all together.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* that's easy... when one of the buttons is toggled, we just
+ * check which one is active and set the style of the toolbar
+ * accordingly
+ * ATTENTION: our toolbar is passed as data to callback ! */
+void radio_event (GtkWidget *widget, gpointer data)
+{
+  if (GTK_TOGGLE_BUTTON (text_button)->active) 
+    gtk_toolbar_set_style(GTK_TOOLBAR ( data ), GTK_TOOLBAR_TEXT);
+  else if (GTK_TOGGLE_BUTTON (icon_button)->active)
+    gtk_toolbar_set_style(GTK_TOOLBAR ( data ), GTK_TOOLBAR_ICONS);
+  else if (GTK_TOGGLE_BUTTON (both_button)->active)
+    gtk_toolbar_set_style(GTK_TOOLBAR ( data ), GTK_TOOLBAR_BOTH);
+}
+
+/* even easier, just check given toggle button and enable/disable 
+ * tooltips */
+void toggle_event (GtkWidget *widget, gpointer data)
+{
+  gtk_toolbar_set_tooltips (GTK_TOOLBAR ( data ),
+                            GTK_TOGGLE_BUTTON (widget)->active );
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The above are just two callback functions that will be called when
+one of the buttons on a toolbar is pressed. You should already be
+familiar with things like this if you've already used toggle buttons (and
+radio buttons).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+int main (int argc, char *argv[])
+{
+  /* Here is our main window (a dialog) and a handle for the handlebox */
+  GtkWidget* dialog;
+  GtkWidget* handlebox;
+
+  /* Ok, we need a toolbar, an icon with a mask (one for all of 
+     the buttons) and an icon widget to put this icon in (but 
+     we'll create a separate widget for each button) */
+  GtkWidget * toolbar;
+  GdkPixmap * icon;
+  GdkBitmap * mask;
+  GtkWidget * iconw;
+
+  /* this is called in all GTK application. */
+  gtk_init (&amp;argc, &amp;argv);
+  
+  /* create a new window with a given title, and nice size */
+  dialog = gtk_dialog_new ();
+  gtk_window_set_title ( GTK_WINDOW ( dialog ) , "GTKToolbar Tutorial");
+  gtk_widget_set_usize( GTK_WIDGET ( dialog ) , 600 , 300 );
+  GTK_WINDOW ( dialog ) ->allow_shrink = TRUE;
+
+  /* typically we quit if someone tries to close us */
+  gtk_signal_connect ( GTK_OBJECT ( dialog ), "delete_event",
+                       GTK_SIGNAL_FUNC ( delete_event ), NULL);
+
+  /* we need to realize the window because we use pixmaps for 
+   * items on the toolbar in the context of it */
+  gtk_widget_realize ( dialog );
+
+  /* to make it nice we'll put the toolbar into the handle box, 
+   * so that it can be detached from the main window */
+  handlebox = gtk_handle_box_new ();
+  gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG(dialog)->vbox ),
+                       handlebox, FALSE, FALSE, 5 );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The above should be similar to any other GTK application. Just
+initialization of GTK, creating the window, etc. There is only one
+thing that probably needs some explanation: a handle box. A handle box
+is just another box that can be used to pack widgets in to. The
+difference between it and typical boxes is that it can be detached
+from a parent window (or, in fact, the handle box remains in the
+parent, but it is reduced to a very small rectangle, while all of its
+contents are reparented to a new freely floating window). It is
+usually nice to have a detachable toolbar, so these two widgets occur
+together quite often.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* toolbar will be horizontal, with both icons and text, and
+   * with 5pxl spaces between items and finally, 
+   * we'll also put it into our handlebox */
+  toolbar = gtk_toolbar_new ( GTK_ORIENTATION_HORIZONTAL,
+                              GTK_TOOLBAR_BOTH );
+  gtk_container_set_border_width ( GTK_CONTAINER ( toolbar ) , 5 );
+  gtk_toolbar_set_space_size ( GTK_TOOLBAR ( toolbar ), 5 );
+  gtk_container_add ( GTK_CONTAINER ( handlebox ) , toolbar );
+
+  /* now we create icon with mask: we'll reuse it to create
+   * icon widgets for toolbar items */
+  icon = gdk_pixmap_create_from_xpm_d ( dialog->window, &amp;mask,
+      &amp;dialog->style->white, gtk_xpm );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Well, what we do above is just a straightforward initialization of
+the toolbar widget and creation of a GDK pixmap with its mask. If you
+want to know something more about using pixmaps, refer to GDK
+documentation or to the 
+<A HREF="gtk_tut-9.html#sec_Pixmaps">Pixmaps</A> section
+earlier in this tutorial.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* our first item is &lt;close> button */
+  iconw = gtk_pixmap_new ( icon, mask ); /* icon widget */
+  close_button = 
+    gtk_toolbar_append_item ( GTK_TOOLBAR (toolbar), /* our toolbar */
+                              "Close",               /* button label */
+                              "Closes this app",     /* this button's tooltip 
*/
+                              "Private",             /* tooltip private info */
+                              iconw,                 /* icon widget */
+                              GTK_SIGNAL_FUNC (delete_event), /* a signal */
+                               NULL );
+  gtk_toolbar_append_space ( GTK_TOOLBAR ( toolbar ) ); /* space after item */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>In the above code you see the simplest case: adding a button to
+toolbar.  Just before appending a new item, we have to construct a
+pixmap widget to serve as an icon for this item; this step will have
+to be repeated for each new item. Just after the item we also add a
+space, so the following items will not touch each other. As you see
+gtk_toolbar_append_item returns a pointer to our newly created button
+widget, so that we can work with it in the normal way.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* now, let's make our radio buttons group... */
+  iconw = gtk_pixmap_new ( icon, mask );
+  icon_button = gtk_toolbar_append_element(
+                    GTK_TOOLBAR(toolbar),
+                    GTK_TOOLBAR_CHILD_RADIOBUTTON, /* a type of element */
+                    NULL,                          /* pointer to widget */
+                    "Icon",                        /* label */
+                    "Only icons in toolbar",       /* tooltip */
+                    "Private",                     /* tooltip private string */
+                    iconw,                         /* icon */
+                    GTK_SIGNAL_FUNC (radio_event), /* signal */
+                    toolbar);                      /* data for signal */
+  gtk_toolbar_append_space ( GTK_TOOLBAR ( toolbar ) );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here we begin creating a radio buttons group. To do this we use
+gtk_toolbar_append_element.  In fact, using this function one can also
++add simple items or even spaces (type = <CODE>GTK_TOOLBAR_CHILD_SPACE</CODE>
+or +<CODE>GTK_TOOLBAR_CHILD_BUTTON</CODE>). In the above case we start
+creating a radio group. In creating other radio buttons for this group
+a pointer to the previous button in the group is required, so that a
+list of buttons can be easily constructed (see the section on 
+<A HREF="gtk_tut-6.html#sec_Radio_Buttons">Radio Buttons</A> earlier in this
+tutorial).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* following radio buttons refer to previous ones */
+  iconw = gtk_pixmap_new ( icon, mask );
+  text_button = 
+    gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+                               GTK_TOOLBAR_CHILD_RADIOBUTTON,
+                               icon_button,
+                               "Text",
+                               "Only texts in toolbar",
+                               "Private",
+                               iconw,
+                               GTK_SIGNAL_FUNC (radio_event),
+                               toolbar);
+  gtk_toolbar_append_space ( GTK_TOOLBAR ( toolbar ) );
+                                          
+  iconw = gtk_pixmap_new ( icon, mask );
+  both_button = 
+    gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+                               GTK_TOOLBAR_CHILD_RADIOBUTTON,
+                               text_button,
+                               "Both",
+                               "Icons and text in toolbar",
+                               "Private",
+                               iconw,
+                               GTK_SIGNAL_FUNC (radio_event),
+                               toolbar);
+  gtk_toolbar_append_space ( GTK_TOOLBAR ( toolbar ) );
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(both_button),TRUE);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>In the end we have to set the state of one of the buttons manually
+(otherwise they all stay in active state, preventing us from switching
+between them).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* here we have just a simple toggle button */
+  iconw = gtk_pixmap_new ( icon, mask );
+  tooltips_button = 
+    gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+                               GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
+                               NULL,
+                               "Tooltips",
+                               "Toolbar with or without tips",
+                               "Private",
+                               iconw,
+                               GTK_SIGNAL_FUNC (toggle_event),
+                               toolbar);
+  gtk_toolbar_append_space ( GTK_TOOLBAR ( toolbar ) );
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tooltips_button),TRUE);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A toggle button can be created in the obvious way (if one knows how to 
create
+radio buttons already).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* to pack a widget into toolbar, we only have to 
+   * create it and append it with an appropriate tooltip */
+  entry = gtk_entry_new ();
+  gtk_toolbar_append_widget( GTK_TOOLBAR (toolbar), 
+                             entry, 
+                             "This is just an entry", 
+                             "Private" );
+
+  /* well, it isn't created within thetoolbar, so we must still show it */
+  gtk_widget_show ( entry );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you see, adding any kind of widget to a toolbar is simple. The
+one thing you have to remember is that this widget must be shown manually
+(contrary to other items which will be shown together with the toolbar).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* that's it ! let's show everything. */
+  gtk_widget_show ( toolbar );
+  gtk_widget_show (handlebox);
+  gtk_widget_show ( dialog );
+
+  /* rest in gtk_main and wait for the fun to begin! */
+  gtk_main ();
+  
+  return 0;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>So, here we are at the end of toolbar tutorial. Of course, to appreciate
+it in full you need also this nice XPM icon, so here it is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* XPM */
+static char * gtk_xpm[] = {
+"32 39 5 1",
+".      c none",
+"+      c black",
+"@      c #3070E0",
+"#      c #F05050",
+"$      c #35E035",
+"................+...............",
+"..............+++++.............",
+"............+++++@@++...........",
+"..........+++++@@@@@@++.........",
+"........++++@@@@@@@@@@++........",
+"......++++@@++++++++@@@++.......",
+".....+++@@@+++++++++++@@@++.....",
+"...+++@@@@+++@@@@@@++++@@@@+....",
+"..+++@@@@+++@@@@@@@@+++@@@@@++..",
+".++@@@@@@+++@@@@@@@@@@@@@@@@@@++",
+".+#+@@@@@@++@@@@+++@@@@@@@@@@@@+",
+".+##++@@@@+++@@@+++++@@@@@@@@address@hidden",
+".+###++@@@@+++@@@+++@@@@@address@hidden",
+".+####+++@@@+++++++@@@@@address@hidden@.",
+".+#####+++@@@@+++@@@@address@hidden",
+".+######++++@@@@@@@address@hidden",
+".+#######+##+@@@@+++$$$$$$@@$$+.",
+".+###+++##+##+@@address@hidden",
+".+###++++##+##+@@address@hidden@address@hidden",
+"address@hidden@address@hidden@address@hidden",
+"address@hidden@$$++$$$$+..",
+"address@hidden@address@hidden",
+"address@hidden",
+"address@hidden",
+"address@hidden@+..",
+"address@hidden@address@hidden",
+"address@hidden@+++$@@..",
+"address@hidden@++.",
+".++####++#####++$$++$$$$$$$$+++.",
+"address@hidden",
+"address@hidden@$$$$$$+++...",
+"address@hidden@+++....",
+"address@hidden",
+"address@hidden@++........",
+"address@hidden",
+"address@hidden",
+"address@hidden",
+"...........+++++++..............",
+".............++++..............."};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss10.12">10.12 Notebooks</A>
+</H2>
+
+<P>The NoteBook Widget is a collection of "pages" that overlap each
+other, each page contains different information with only one page
+visible at a time. This widget has become more common lately in GUI
+programming, and it is a good way to show blocks of similar
+information that warrant separation in their display.
+<P>The first function call you will need to know, as you can probably
+guess by now, is used to create a new notebook widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_notebook_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Once the notebook has been created, there are a number of functions
+that operate on the notebook widget. Let's look at them individually.
+<P>The first one we will look at is how to position the page indicators.
+These page indicators or "tabs" as they are referred to, can be
+positioned in four ways: top, bottom, left, or right.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_set_tab_pos( GtkNotebook     *notebook,
+                               GtkPositionType  pos );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>GtkPositionType will be one of the following, which are pretty self
+explanatory:
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_POS_LEFT
+  GTK_POS_RIGHT
+  GTK_POS_TOP
+  GTK_POS_BOTTOM
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>GTK_POS_TOP</CODE> is the default.
+<P>Next we will look at how to add pages to the notebook. There are three
+ways to add pages to the NoteBook. Let's look at the first two
+together as they are quite similar.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_append_page( GtkNotebook *notebook,
+                               GtkWidget   *child,
+                               GtkWidget   *tab_label );
+
+void gtk_notebook_prepend_page( GtkNotebook *notebook,
+                                GtkWidget   *child,
+                                GtkWidget   *tab_label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These functions add pages to the notebook by inserting them from the
+back of the notebook (append), or the front of the notebook (prepend).
+<CODE>child</CODE> is the widget that is placed within the notebook page, and
+<CODE>tab_label</CODE> is the label for the page being added. The 
<CODE>child</CODE>
+widget must be created separately, and is typically a set of options
+setup witin one of the other container widgets, such as a table.
+<P>The final function for adding a page to the notebook contains all of
+the properties of the previous two, but it allows you to specify what
+position you want the page to be in the notebook.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_insert_page( GtkNotebook *notebook,
+                               GtkWidget   *child,
+                               GtkWidget   *tab_label,
+                               gint         position );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The parameters are the same as _append_ and _prepend_ except it
+contains an extra parameter, <CODE>position</CODE>.  This parameter is used to
+specify what place this page will be inserted into the first page
+having position zero.
+<P>Now that we know how to add a page, lets see how we can remove a page
+from the notebook.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_remove_page( GtkNotebook *notebook,
+                               gint         page_num );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function takes the page specified by <CODE>page_num</CODE> and removes 
it
+from the widget pointed to by <CODE>notebook</CODE>.
+<P>To find out what the current page is in a notebook use the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_notebook_get_current_page( GtkNotebook *notebook );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These next two functions are simple calls to move the notebook page
+forward or backward. Simply provide the respective function call with
+the notebook widget you wish to operate on. Note: When the NoteBook is
+currently on the last page, and gtk_notebook_next_page is called, the
+notebook will wrap back to the first page. Likewise, if the NoteBook
+is on the first page, and gtk_notebook_prev_page is called, the
+notebook will wrap to the last page.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_next_page( GtkNoteBook *notebook );
+
+void gtk_notebook_prev_page( GtkNoteBook *notebook );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This next function sets the "active" page. If you wish the notebook to
+be opened to page 5 for example, you would use this function.  Without
+using this function, the notebook defaults to the first page.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_set_page( GtkNotebook *notebook,
+                            gint         page_num );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The next two functions add or remove the notebook page tabs and the
+notebook border respectively.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_set_show_tabs( GtkNotebook *notebook,
+                                 gboolean     show_tabs);
+
+void gtk_notebook_set_show_border( GtkNotebook *notebook,
+                                   gboolean     show_border );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The next function is useful when the you have a large number of pages,
+and the tabs don't fit on the page. It allows the tabs to be scrolled
+through using two arrow buttons.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_notebook_set_scrollable( GtkNotebook *notebook,
+                                  gboolean     scrollable );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>show_tabs</CODE>, <CODE>show_border</CODE> and 
<CODE>scrollable</CODE> can be either
+TRUE or FALSE.
+<P>Now let's look at an example, it is expanded from the testgtk.c code
+that comes with the GTK distribution. This small program creates a
+window with a notebook and six buttons. The notebook contains 11
+pages, added in three different ways, appended, inserted, and
+prepended. The buttons allow you rotate the tab positions, add/remove
+the tabs and border, remove a page, change pages in both a forward and
+backward manner, and exit the program.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start notebook notebook.c */
+
+#include &lt;gtk/gtk.h>
+
+/* This function rotates the position of the tabs */
+void rotate_book( GtkButton   *button,
+                  GtkNotebook *notebook )
+{
+    gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos +1) %4);
+}
+
+/* Add/Remove the page tabs and the borders */
+void tabsborder_book( GtkButton   *button,
+                      GtkNotebook *notebook )
+{
+    gint tval = FALSE;
+    gint bval = FALSE;
+    if (notebook->show_tabs == 0)
+            tval = TRUE; 
+    if (notebook->show_border == 0)
+            bval = TRUE;
+    
+    gtk_notebook_set_show_tabs (notebook, tval);
+    gtk_notebook_set_show_border (notebook, bval);
+}
+
+/* Remove a page from the notebook */
+void remove_book( GtkButton   *button,
+                  GtkNotebook *notebook )
+{
+    gint page;
+    
+    page = gtk_notebook_get_current_page(notebook);
+    gtk_notebook_remove_page (notebook, page);
+    /* Need to refresh the widget -- 
+     This forces the widget to redraw itself. */
+    gtk_widget_draw(GTK_WIDGET(notebook), NULL);
+}
+
+gint delete( GtkWidget *widget,
+             GtkWidget *event,
+             gpointer   data )
+{
+    gtk_main_quit();
+    return(FALSE);
+}
+
+int main( int argc,
+          char *argv[] )
+{
+    GtkWidget *window;
+    GtkWidget *button;
+    GtkWidget *table;
+    GtkWidget *notebook;
+    GtkWidget *frame;
+    GtkWidget *label;
+    GtkWidget *checkbutton;
+    int i;
+    char bufferf[32];
+    char bufferl[32];
+    
+    gtk_init (&amp;argc, &amp;argv);
+    
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (delete), NULL);
+    
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+    table = gtk_table_new(3,6,FALSE);
+    gtk_container_add (GTK_CONTAINER (window), table);
+    
+    /* Create a new notebook, place the position of the tabs */
+    notebook = gtk_notebook_new ();
+    gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
+    gtk_table_attach_defaults(GTK_TABLE(table), notebook, 0,6,0,1);
+    gtk_widget_show(notebook);
+    
+    /* Let's append a bunch of pages to the notebook */
+    for (i=0; i &lt; 5; i++) {
+        sprintf(bufferf, "Append Frame %d", i+1);
+        sprintf(bufferl, "Page %d", i+1);
+        
+        frame = gtk_frame_new (bufferf);
+        gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
+        gtk_widget_set_usize (frame, 100, 75);
+        gtk_widget_show (frame);
+        
+        label = gtk_label_new (bufferf);
+        gtk_container_add (GTK_CONTAINER (frame), label);
+        gtk_widget_show (label);
+        
+        label = gtk_label_new (bufferl);
+        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+    }
+      
+    /* Now let's add a page to a specific spot */
+    checkbutton = gtk_check_button_new_with_label ("Check me please!");
+    gtk_widget_set_usize(checkbutton, 100, 75);
+    gtk_widget_show (checkbutton);
+   
+    label = gtk_label_new ("Add page");
+    gtk_notebook_insert_page (GTK_NOTEBOOK (notebook), checkbutton, label, 2);
+    
+    /* Now finally let's prepend pages to the notebook */
+    for (i=0; i &lt; 5; i++) {
+        sprintf(bufferf, "Prepend Frame %d", i+1);
+        sprintf(bufferl, "PPage %d", i+1);
+        
+        frame = gtk_frame_new (bufferf);
+        gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
+        gtk_widget_set_usize (frame, 100, 75);
+        gtk_widget_show (frame);
+        
+        label = gtk_label_new (bufferf);
+        gtk_container_add (GTK_CONTAINER (frame), label);
+        gtk_widget_show (label);
+        
+        label = gtk_label_new (bufferl);
+        gtk_notebook_prepend_page (GTK_NOTEBOOK(notebook), frame, label);
+    }
+    
+    /* Set what page to start at (page 4) */
+    gtk_notebook_set_page (GTK_NOTEBOOK(notebook), 3);
+
+    /* Create a bunch of buttons */
+    button = gtk_button_new_with_label ("close");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC (delete), NULL);
+    gtk_table_attach_defaults(GTK_TABLE(table), button, 0,1,1,2);
+    gtk_widget_show(button);
+    
+    button = gtk_button_new_with_label ("next page");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               (GtkSignalFunc) gtk_notebook_next_page,
+                               GTK_OBJECT (notebook));
+    gtk_table_attach_defaults(GTK_TABLE(table), button, 1,2,1,2);
+    gtk_widget_show(button);
+    
+    button = gtk_button_new_with_label ("prev page");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               (GtkSignalFunc) gtk_notebook_prev_page,
+                               GTK_OBJECT (notebook));
+    gtk_table_attach_defaults(GTK_TABLE(table), button, 2,3,1,2);
+    gtk_widget_show(button);
+    
+    button = gtk_button_new_with_label ("tab position");
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        (GtkSignalFunc) rotate_book,
+                        GTK_OBJECT(notebook));
+    gtk_table_attach_defaults(GTK_TABLE(table), button, 3,4,1,2);
+    gtk_widget_show(button);
+    
+    button = gtk_button_new_with_label ("tabs/border on/off");
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        (GtkSignalFunc) tabsborder_book,
+                        GTK_OBJECT (notebook));
+    gtk_table_attach_defaults(GTK_TABLE(table), button, 4,5,1,2);
+    gtk_widget_show(button);
+    
+    button = gtk_button_new_with_label ("remove page");
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        (GtkSignalFunc) remove_book,
+                        GTK_OBJECT(notebook));
+    gtk_table_attach_defaults(GTK_TABLE(table), button, 5,6,1,2);
+    gtk_widget_show(button);
+    
+    gtk_widget_show(table);
+    gtk_widget_show(window);
+    
+    gtk_main ();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>I hope this helps you on your way with creating notebooks for your
+GTK applications.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-11.html">Next</A>
+<A HREF="gtk_tut-9.html">Previous</A>
+<A HREF="gtk_tut.html#toc10">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-11.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-11.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-11.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-11.html    3 Mar 2012 06:14:54 
-0000       1.1
@@ -0,0 +1,753 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: CList Widget</TITLE>
+ <LINK HREF="gtk_tut-12.html" REL=next>
+ <LINK HREF="gtk_tut-10.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc11" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-12.html">Next</A>
+<A HREF="gtk_tut-10.html">Previous</A>
+<A HREF="gtk_tut.html#toc11">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s11">11. CList Widget</A></H2>
+
+<P>The CList widget has replaced the List widget (which is still
+available).
+<P>The CList widget is a multi-column list widget that is capable of
+handling literally thousands of rows of information. Each column can
+optionally have a title, which itself is optionally active, allowing
+us to bind a function to its selection.
+<P>
+<H2><A NAME="ss11.1">11.1 Creating a CList widget</A>
+</H2>
+
+<P>Creating a CList is quite straightforward, once you have learned
+about widgets in general. It provides the almost standard two ways,
+that is the hard way, and the easy way. But before we create it, there
+is one thing we should figure out beforehand: how many columns should
+it have?
+<P>Not all columns have to be visible and can be used to store data that
+is related to a certain cell in the list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_clist_new ( gint columns );
+
+GtkWidget *gtk_clist_new_with_titles( gint   columns,
+                                      gchar *titles[] );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first form is very straightforward, the second might require some
+explanation. Each column can have a title associated with it, and this
+title can be a label or a button that reacts when we click on it. If
+we use the second form, we must provide pointers to the title texts,
+and the number of pointers should equal the number of columns
+specified. Of course we can always use the first form, and manually
+add titles later.
+<P>Note: The CList widget does not have its own scrollbars and should
+be placed within a ScrolledWindow widget if your require this
+functionality. This is a change from the GTK 1.0 implementation.
+<P>
+<H2><A NAME="ss11.2">11.2 Modes of operation</A>
+</H2>
+
+<P>There are several attributes that can be used to alter the behaviour of
+a CList. First there is
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_selection_mode( GtkCList         *clist,
+                                   GtkSelectionMode  mode );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>which, as the name implies, sets the selection mode of the
+CList. The first argument is the CList widget, and the second
+specifies the cell selection mode (they are defined in gtkenums.h). At
+the time of this writing, the following modes are available to us:
+<P>
+<UL>
+<LI> <CODE>GTK_SELECTION_SINGLE</CODE> - The selection is either NULL or 
contains
+a GList pointer for a single selected item.
+</LI>
+<LI> <CODE>GTK_SELECTION_BROWSE</CODE> - The selection is NULL if the list
+contains no widgets or insensitive ones only, otherwise it contains a
+GList pointer for one GList structure, and therefore exactly one list
+item.
+</LI>
+<LI> <CODE>GTK_SELECTION_MULTIPLE</CODE> - The selection is NULL if no list 
items
+are selected or a GList pointer for the first selected item. That in
+turn points to a GList structure for the second selected item and so
+on. This is currently the <B>default</B> for the CList widget.
+</LI>
+<LI> <CODE>GTK_SELECTION_EXTENDED</CODE> - The selection is always NULL.</LI>
+</UL>
+<P>Others might be added in later revisions of GTK.
+<P>We can also define what the border of the CList widget should look
+like. It is done through
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_shadow_type( GtkCList      *clist,
+                                GtkShadowType  border );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The possible values for the second argument are
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_SHADOW_NONE
+  GTK_SHADOW_IN
+  GTK_SHADOW_OUT
+  GTK_SHADOW_ETCHED_IN
+  GTK_SHADOW_ETCHED_OUT
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss11.3">11.3 Working with titles</A>
+</H2>
+
+<P>When you create a CList widget, you will also get a set of title
+buttons automatically. They live in the top of the CList window, and
+can act either as normal buttons that respond to being pressed, or
+they can be passive, in which case they are nothing more than a
+title. There are four different calls that aid us in setting the
+status of the title buttons.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_column_title_active( GtkCList *clist,
+                                     gint     column );
+
+void gtk_clist_column_title_passive( GtkCList *clist,
+                                     gint      column );
+
+void gtk_clist_column_titles_active( GtkCList *clist );
+
+void gtk_clist_column_titles_passive( GtkCList *clist );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>An active title is one which acts as a normal button, a passive one is
+just a label. The first two calls above will activate/deactivate the
+title button above the specific column, while the last two calls
+activate/deactivate all title buttons in the supplied clist widget.
+<P>But of course there are those cases when we don't want them at all,
+and so they can be hidden and shown at will using the following two
+calls.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_column_titles_show( GtkCList *clist );
+
+void gtk_clist_column_titles_hide( GtkCList *clist );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>For titles to be really useful we need a mechanism to set and change
+them, and this is done using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_column_title( GtkCList *clist,
+                                 gint      column,
+                                 gchar    *title );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that only the title of one column can be set at a time, so if all
+the titles are known from the beginning, then I really suggest using
+gtk_clist_new_with_titles (as described above) to set them. It saves
+you coding time, and makes your program smaller. There are some cases
+where getting the job done the manual way is better, and that's when
+not all titles will be text. CList provides us with title buttons
+that can in fact incorporate whole widgets, for example a pixmap. It's
+all done through
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_column_widget( GtkCList  *clist,
+                                  gint       column,
+                                  GtkWidget *widget );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>which should require no special explanation.
+<P>
+<H2><A NAME="ss11.4">11.4 Manipulating the list itself</A>
+</H2>
+
+<P>It is possible to change the justification for a column, and it is
+done through
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_column_justification( GtkCList         *clist,
+                                         gint              column,
+                                         GtkJustification  justification );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The GtkJustification type can take the following values:
+<P>
+<UL>
+<LI><CODE>GTK_JUSTIFY_LEFT</CODE> - The text in the column will begin from the
+left edge.
+</LI>
+<LI><CODE>GTK_JUSTIFY_RIGHT</CODE> - The text in the column will begin from the
+right edge.
+</LI>
+<LI><CODE>GTK_JUSTIFY_CENTER</CODE> - The text is placed in the center of the
+column.
+</LI>
+<LI><CODE>GTK_JUSTIFY_FILL</CODE> - The text will use up all available space in
+the column. It is normally done by inserting extra blank spaces
+between words (or between individual letters if it's a single
+word). Much in the same way as any ordinary WYSIWYG text editor.</LI>
+</UL>
+<P>The next function is a very important one, and should be standard in
+the setup of all CList widgets. When the list is created, the width
+of the various columns are chosen to match their titles, and since
+this is seldom the right width we have to set it using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_column_width( GtkCList *clist,
+                                 gint      column,
+                                 gint      width );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that the width is given in pixels and not letters. The same goes
+for the height of the cells in the columns, but as the default value
+is the height of the current font this isn't as critical to the
+application. Still, it is done through
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_row_height( GtkCList *clist,
+                               gint      height );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Again, note that the height is given in pixels.
+<P>We can also move the list around without user interaction, however, it
+does require that we know what we are looking for. Or in other words,
+we need the row and column of the item we want to scroll to.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_moveto( GtkCList *clist,
+                       gint      row,
+                       gint      column,
+                       gfloat    row_align,
+                       gfloat    col_align );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The gfloat row_align is pretty important to understand. It's a value
+between 0.0 and 1.0, where 0.0 means that we should scroll the list so
+the row appears at the top, while if the value of row_align is 1.0,
+the row will appear at the bottom instead. All other values between
+0.0 and 1.0 are also valid and will place the row between the top and
+the bottom. The last argument, gfloat col_align works in the same way,
+though 0.0 marks left and 1.0 marks right instead.
+<P>Depending on the application's needs, we don't have to scroll to an
+item that is already visible to us. So how do we know if it is
+visible? As usual, there is a function to find that out as well.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkVisibility gtk_clist_row_is_visible( GtkCList *clist,
+                                        gint      row );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The return value is is one of the following:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_VISIBILITY_NONE
+  GTK_VISIBILITY_PARTIAL
+  GTK_VISIBILITY_FULL
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that it will only tell us if a row is visible. Currently there is
+no way to determine this for a column. We can get partial information
+though, because if the return is <CODE>GTK_VISIBILITY_PARTIAL</CODE>, then
+some of it is hidden, but we don't know if it is the row that is being
+cut by the lower edge of the listbox, or if the row has columns that
+are outside.
+<P>We can also change both the foreground and background colors of a
+particular row. This is useful for marking the row selected by the
+user, and the two functions that is used to do it are
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_foreground( GtkCList *clist,
+                               gint      row,
+                               GdkColor *color );
+
+void gtk_clist_set_background( GtkCList *clist,
+                               gint      row,
+                               GdkColor *color );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Please note that the colors must have been previously allocated.
+<P>
+<H2><A NAME="ss11.5">11.5 Adding rows to the list</A>
+</H2>
+
+<P>We can add rows in three ways. They can be prepended or appended to
+the list using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_clist_prepend( GtkCList *clist,
+                        gchar    *text[] );
+
+gint gtk_clist_append( GtkCList *clist,
+                       gchar    *text[] );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The return value of these two functions indicate the index of the row
+that was just added. We can insert a row at a given place using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_insert( GtkCList *clist,
+                       gint      row,
+                       gchar    *text[] );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>In these calls we have to provide a collection of pointers that are
+the texts we want to put in the columns. The number of pointers should
+equal the number of columns in the list. If the text[] argument is
+NULL, then there will be no text in the columns of the row. This is
+useful, for example, if we want to add pixmaps instead (something that
+has to be done manually).
+<P>Also, please note that the numbering of both rows and columns start at 0.
+<P>To remove an individual row we use
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_remove( GtkCList *clist,
+                       gint      row );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There is also a call that removes all rows in the list. This is a lot
+faster than calling gtk_clist_remove once for each row, which is the
+only alternative.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_clear( GtkCList *clist );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There are also two convenience functions that should be used when a
+lot of changes have to be made to the list. This is to prevent the
+list flickering while being repeatedly updated, which may be highly
+annoying to the user. So instead it is a good idea to freeze the list,
+do the updates to it, and finally thaw it which causes the list to be
+updated on the screen.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_freeze( GtkCList * clist );
+
+void gtk_clist_thaw( GtkCList * clist );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss11.6">11.6 Setting text and pixmaps in the cells</A>
+</H2>
+
+<P>A cell can contain a pixmap, text or both. To set them the following
+functions are used.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_text( GtkCList    *clist,
+                         gint         row,
+                         gint         column,
+                         const gchar *text );
+
+void gtk_clist_set_pixmap( GtkCList  *clist,
+                           gint       row,
+                           gint       column,
+                           GdkPixmap *pixmap,
+                           GdkBitmap *mask );
+
+void gtk_clist_set_pixtext( GtkCList  *clist,
+                            gint       row,
+                            gint       column,
+                            gchar     *text,
+                            guint8     spacing,
+                            GdkPixmap *pixmap,
+                            GdkBitmap *mask );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>It's quite straightforward. All the calls have the CList as the first
+argument, followed by the row and column of the cell, followed by the
+data to be set. The <CODE>spacing</CODE> argument in gtk_clist_set_pixtext is
+the number of pixels between the pixmap and the beginning of the
+text. In all cases the data is copied into the widget.
+<P>To read back the data, we instead use
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_clist_get_text( GtkCList  *clist,
+                         gint       row,
+                         gint       column,
+                         gchar    **text );
+
+gint gtk_clist_get_pixmap( GtkCList   *clist,
+                           gint        row,
+                           gint        column,
+                           GdkPixmap **pixmap,
+                           GdkBitmap **mask );
+
+gint gtk_clist_get_pixtext( GtkCList   *clist,
+                            gint        row,
+                            gint        column,
+                            gchar     **text,
+                            guint8     *spacing,
+                            GdkPixmap **pixmap,
+                            GdkBitmap **mask );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The returned pointers are all pointers to the data stored within the
+widget, so the referenced data should not be modified or released. It
+isn't necessary to read it all back in case you aren't interested. Any
+of the pointers that are meant for return values (all except the
+clist) can be NULL. So if we want to read back only the text from a
+cell that is of type pixtext, then we would do the following, assuming
+that clist, row and column already exist:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *mytext;
+
+gtk_clist_get_pixtext(clist, row, column, &amp;mytext, NULL, NULL, NULL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There is one more call that is related to what's inside a cell in the
+clist, and that's
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkCellType gtk_clist_get_cell_type( GtkCList *clist,
+                                     gint      row,
+                                     gint      column );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>which returns the type of data in a cell. The return value is one of
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_CELL_EMPTY
+  GTK_CELL_TEXT
+  GTK_CELL_PIXMAP
+  GTK_CELL_PIXTEXT
+  GTK_CELL_WIDGET
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There is also a function that will let us set the indentation, both
+vertical and horizontal, of a cell. The indentation value is of type
+gint, given in pixels, and can be both positive and negative.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_shift( GtkCList *clist,
+                          gint      row,
+                          gint      column,
+                          gint      vertical,
+                          gint      horizontal );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss11.7">11.7 Storing data pointers</A>
+</H2>
+
+<P>With a CList it is possible to set a data pointer for a row. This
+pointer will not be visible for the user, but is merely a convenience
+for the programmer to associate a row with a pointer to some
+additional data.
+<P>The functions should be fairly self-explanatory by now.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_set_row_data( GtkCList *clist,
+                             gint      row,
+                             gpointer  data );
+
+void gtk_clist_set_row_data_full( GtkCList         *clist,
+                                  gint              row,
+                                  gpointer          data,
+                                  GtkDestroyNotify  destroy );
+
+gpointer gtk_clist_get_row_data( GtkCList *clist,
+                                 gint      row );
+
+gint gtk_clist_find_row_from_data( GtkCList *clist,
+                                   gpointer  data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss11.8">11.8 Working with selections</A>
+</H2>
+
+<P>There are also functions available that let us force the (un)selection
+of a row. These are
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_clist_select_row( GtkCList *clist,
+                           gint      row,
+                           gint      column );
+
+void gtk_clist_unselect_row( GtkCList *clist,
+                             gint      row,
+                             gint      column );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And also a function that will take x and y coordinates (for example,
+read from the mousepointer), and map that onto the list, returning the
+corresponding row and column.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_clist_get_selection_info( GtkCList *clist,
+                                   gint      x,
+                                   gint      y,
+                                   gint     *row,
+                                   gint     *column );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When we detect something of interest (it might be movement of the
+pointer, a click somewhere in the list) we can read the pointer
+coordinates and find out where in the list the pointer is. Cumbersome?
+Luckily, there is a simpler way...
+<P>
+<H2><A NAME="ss11.9">11.9 The signals that bring it together</A>
+</H2>
+
+<P>As with all other widgets, there are a few signals that can be used. The
+CList widget is derived from the Container widget, and so has all the
+same signals, but also adds the following:
+<P>
+<UL>
+<LI>select_row - This signal will send the following information, in
+order: GtkCList *clist, gint row, gint column, GtkEventButton *event
+</LI>
+<LI>unselect_row - When the user unselects a row, this signal is
+activated. It sends the same information as select_row
+</LI>
+<LI>click_column - Send GtkCList *clist, gint column</LI>
+</UL>
+<P>So if we want to connect a callback to select_row, the callback
+function would be declared like this
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void select_row_callback(GtkWidget *widget,
+                         gint row,
+                         gint column,
+                         GdkEventButton *event,
+                         gpointer data);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The callback is connected as usual with
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_signal_connect(GTK_OBJECT( clist),
+                   "select_row"
+                   GTK_SIGNAL_FUNC(select_row_callback),
+                   NULL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss11.10">11.10 A CList example</A>
+</H2>
+
+<P>
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start clist clist.c */
+
+#include &lt;gtk/gtk.h>
+
+/* User clicked the "Add List" button. */
+void button_add_clicked( gpointer data )
+{
+    int indx;
+ 
+    /* Something silly to add to the list. 4 rows of 2 columns each */
+    gchar *drink[4][2] = { { "Milk",    "3 Oz" },
+                           { "Water",   "6 l" },
+                           { "Carrots", "2" },
+                           { "Snakes",  "55" } };
+
+    /* Here we do the actual adding of the text. It's done once for
+     * each row.
+     */
+    for ( indx=0 ; indx &lt; 4 ; indx++ )
+        gtk_clist_append( (GtkCList *) data, drink[indx]);
+
+    return;
+}
+
+/* User clicked the "Clear List" button. */
+void button_clear_clicked( gpointer data )
+{
+    /* Clear the list using gtk_clist_clear. This is much faster than
+     * calling gtk_clist_remove once for each row.
+     */
+    gtk_clist_clear( (GtkCList *) data);
+
+    return;
+}
+
+/* The user clicked the "Hide/Show titles" button. */
+void button_hide_show_clicked( gpointer data )
+{
+    /* Just a flag to remember the status. 0 = currently visible */
+    static short int flag = 0;
+
+    if (flag == 0)
+    {
+        /* Hide the titles and set the flag to 1 */
+        gtk_clist_column_titles_hide((GtkCList *) data);
+        flag++;
+    }
+    else
+    {
+        /* Show the titles and reset flag to 0 */
+        gtk_clist_column_titles_show((GtkCList *) data);
+        flag--;
+    }
+
+    return;
+}
+
+/* If we come here, then the user has selected a row in the list. */
+void selection_made( GtkWidget      *clist,
+                     gint            row,
+                     gint            column,
+                     GdkEventButton *event,
+                     gpointer        data )
+{
+    gchar *text;
+
+    /* Get the text that is stored in the selected row and column
+     * which was clicked in. We will receive it as a pointer in the
+     * argument text.
+     */
+    gtk_clist_get_text(GTK_CLIST(clist), row, column, &amp;text);
+
+    /* Just prints some information about the selected row */
+    g_print("You selected row %d. More specifically you clicked in "
+            "column %d, and the text in this cell is %s\n\n",
+            row, column, text);
+
+    return;
+}
+
+int main( int    argc,
+          gchar *argv[] )
+{                                  
+    GtkWidget *window;
+    GtkWidget *vbox, *hbox;
+    GtkWidget *scrolled_window, *clist;
+    GtkWidget *button_add, *button_clear, *button_hide_show;    
+    gchar *titles[2] = { "Ingredients", "Amount" };
+
+    gtk_init(&amp;argc, &amp;argv);
+    
+    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
+
+    gtk_window_set_title(GTK_WINDOW(window), "GtkCList Example");
+    gtk_signal_connect(GTK_OBJECT(window),
+                       "destroy",
+                       GTK_SIGNAL_FUNC(gtk_main_quit),
+                       NULL);
+    
+    vbox=gtk_vbox_new(FALSE, 5);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+    gtk_container_add(GTK_CONTAINER(window), vbox);
+    gtk_widget_show(vbox);
+    
+    /* Create a scrolled window to pack the CList widget into */
+    scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+
+    gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
+    gtk_widget_show (scrolled_window);
+
+    /* Create the CList. For this example we use 2 columns */
+    clist = gtk_clist_new_with_titles( 2, titles);
+
+    /* When a selection is made, we want to know about it. The callback
+     * used is selection_made, and its code can be found further down */
+    gtk_signal_connect(GTK_OBJECT(clist), "select_row",
+                       GTK_SIGNAL_FUNC(selection_made),
+                       NULL);
+
+    /* It isn't necessary to shadow the border, but it looks nice :) */
+    gtk_clist_set_shadow_type (GTK_CLIST(clist), GTK_SHADOW_OUT);
+
+    /* What however is important, is that we set the column widths as
+     * they will never be right otherwise. Note that the columns are
+     * numbered from 0 and up (to 1 in this case).
+     */
+    gtk_clist_set_column_width (GTK_CLIST(clist), 0, 150);
+
+    /* Add the CList widget to the vertical box and show it. */
+    gtk_container_add(GTK_CONTAINER(scrolled_window), clist);
+    gtk_widget_show(clist);
+
+    /* Create the buttons and add them to the window. See the button
+     * tutorial for more examples and comments on this.
+     */
+    hbox = gtk_hbox_new(FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
+    gtk_widget_show(hbox);
+
+    button_add = gtk_button_new_with_label("Add List");
+    button_clear = gtk_button_new_with_label("Clear List");
+    button_hide_show = gtk_button_new_with_label("Hide/Show titles");
+
+    gtk_box_pack_start(GTK_BOX(hbox), button_add, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), button_clear, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), button_hide_show, TRUE, TRUE, 0);
+
+    /* Connect our callbacks to the three buttons */
+    gtk_signal_connect_object(GTK_OBJECT(button_add), "clicked",
+                              GTK_SIGNAL_FUNC(button_add_clicked),
+                              (gpointer) clist);
+    gtk_signal_connect_object(GTK_OBJECT(button_clear), "clicked",
+                              GTK_SIGNAL_FUNC(button_clear_clicked),
+                              (gpointer) clist);
+    gtk_signal_connect_object(GTK_OBJECT(button_hide_show), "clicked",
+                              GTK_SIGNAL_FUNC(button_hide_show_clicked),
+                              (gpointer) clist);
+
+    gtk_widget_show(button_add);
+    gtk_widget_show(button_clear);
+    gtk_widget_show(button_hide_show);
+
+    /* The interface is completely set up so we show the window and
+     * enter the gtk_main loop.
+     */
+    gtk_widget_show(window);
+    gtk_main();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-12.html">Next</A>
+<A HREF="gtk_tut-10.html">Previous</A>
+<A HREF="gtk_tut.html#toc11">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-12.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-12.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-12.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-12.html    3 Mar 2012 06:14:54 
-0000       1.1
@@ -0,0 +1,871 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Tree Widget </TITLE>
+ <LINK HREF="gtk_tut-13.html" REL=next>
+ <LINK HREF="gtk_tut-11.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc12" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-13.html">Next</A>
+<A HREF="gtk_tut-11.html">Previous</A>
+<A HREF="gtk_tut.html#toc12">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_Tree_Widgets"></A> <A NAME="s12">12. Tree Widget </A></H2>
+
+<P>The purpose of tree widgets is to display hierarchically-organized
+data. The Tree widget itself is a vertical container for widgets of
+type TreeItem. Tree itself is not terribly different from
+CList - both are derived directly from Container, and the
+Container methods work in the same way on Tree widgets as on
+CList widgets. The difference is that Tree widgets can be nested
+within other Tree widgets. We'll see how to do this shortly.
+<P>The Tree widget has its own window, and defaults to a white
+background, as does CList. Also, most of the Tree methods work in
+the same way as the corresponding CList ones. However, Tree is
+not derived from CList, so you cannot use them interchangeably.
+<P>
+<P>
+<H2><A NAME="ss12.1">12.1 Creating a Tree</A>
+</H2>
+
+<P>A Tree is created in the usual way, using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_tree_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Like the CList widget, a Tree will simply keep growing as more
+items are added to it, as well as when subtrees are expanded.  For
+this reason, they are almost always packed into a
+ScrolledWindow. You might want to use gtk_widget_set_usize() on the
+scrolled window to ensure that it is big enough to see the tree's
+items, as the default size for ScrolledWindow is quite small.
+<P>Now that you have a tree, you'll probably want to add some items to
+it.  
+<A HREF="#sec_Tree_Item_Widget">The Tree Item Widget</A> below
+explains the gory details of TreeItem. For now, it'll suffice to
+create one, using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_tree_item_new_with_label( gchar *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You can then add it to the tree using one of the following (see
+<A HREF="#sec_Tree_Functions">Functions and Macros</A>
+below for more options):
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_append( GtkTree    *tree,
+                       GtkWidget *tree_item );
+
+void gtk_tree_prepend( GtkTree   *tree,
+                       GtkWidget *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that you must add items to a Tree one at a time - there is no
+equivalent to gtk_list_*_items().
+<P>
+<H2><A NAME="ss12.2">12.2 Adding a Subtree</A>
+</H2>
+
+<P>A subtree is created like any other Tree widget. A subtree is added
+to another tree beneath a tree item, using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_set_subtree( GtkTreeItem *tree_item,
+                                GtkWidget   *subtree );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You do not need to call gtk_widget_show() on a subtree before or after
+adding it to a TreeItem. However, you <EM>must</EM> have added the
+TreeItem in question to a parent tree before calling
+gtk_tree_item_set_subtree(). This is because, technically, the parent
+of the subtree is <EM>not</EM> the GtkTreeItem which "owns" it, but
+rather the GtkTree which holds that GtkTreeItem.
+<P>When you add a subtree to a TreeItem, a plus or minus sign appears
+beside it, which the user can click on to "expand" or "collapse" it,
+meaning, to show or hide its subtree. TreeItems are collapsed by
+default. Note that when you collapse a TreeItem, any selected
+items in its subtree remain selected, which may not be what the user
+expects.
+<P>
+<H2><A NAME="ss12.3">12.3 Handling the Selection List</A>
+</H2>
+
+<P>As with CList, the Tree type has a <CODE>selection</CODE> field, and
+it is possible to control the behaviour of the tree (somewhat) by
+setting the selection type using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_set_selection_mode( GtkTree          *tree,
+                                  GtkSelectionMode  mode );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The semantics associated with the various selection modes are
+described in the section on the CList widget. As with the CList
+widget, the "select_child", "unselect_child" (not really - see 
+<A HREF="#sec_Tree_Signals">Signals</A> below for an explanation),
+and "selection_changed" signals are emitted when list items are
+selected or unselected. However, in order to take advantage of these
+signals, you need to know <EM>which</EM> Tree widget they will be
+emitted by, and where to find the list of selected items.
+<P>This is a source of potential confusion. The best way to explain this
+is that though all Tree widgets are created equal, some are more equal
+than others. All Tree widgets have their own X window, and can
+therefore receive events such as mouse clicks (if their TreeItems or
+their children don't catch them first!). However, to make
+<CODE>GTK_SELECTION_SINGLE</CODE> and <CODE>GTK_SELECTION_BROWSE</CODE> 
selection
+types behave in a sane manner, the list of selected items is specific
+to the topmost Tree widget in a hierarchy, known as the "root tree".
+<P>Thus, accessing the <CODE>selection</CODE> field directly in an arbitrary
+Tree widget is not a good idea unless you <EM>know</EM> it's the root
+tree. Instead, use the <CODE>GTK_TREE_SELECTION (Tree)</CODE> macro, which
+gives the root tree's selection list as a GList pointer. Of course,
+this list can include items that are not in the subtree in question if
+the selection type is <CODE>GTK_SELECTION_MULTIPLE</CODE>.
+<P>Finally, the "select_child" (and "unselect_child", in theory) signals
+are emitted by all trees, but the "selection_changed" signal is only
+emitted by the root tree. Consequently, if you want to handle the
+"select_child" signal for a tree and all its subtrees, you will have
+to call gtk_signal_connect() for every subtree.
+<P>
+<H2><A NAME="ss12.4">12.4 Tree Widget Internals</A>
+</H2>
+
+<P>The Tree's struct definition looks like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkTree
+{
+  GtkContainer container;
+
+  GList *children;
+  
+  GtkTree* root_tree; /* owner of selection list */
+  GtkWidget* tree_owner;
+  GList *selection;
+  guint level;
+  guint indent_value;
+  guint current_indent;
+  guint selection_mode : 2;
+  guint view_mode : 1;
+  guint view_line : 1;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The perils associated with accessing the <CODE>selection</CODE> field
+directly have already been mentioned. The other important fields of
+the struct can also be accessed with handy macros or class functions.
+<CODE>GTK_IS_ROOT_TREE (Tree)</CODE> returns a boolean value which
+indicates whether a tree is the root tree in a Tree hierarchy, while
+<CODE>GTK_TREE_ROOT_TREE (Tree)</CODE> returns the root tree, an object of
+type GtkTree (so, remember to cast it using <CODE>GTK_WIDGET (Tree)</CODE> if
+you want to use one of the gtk_widget_*() functions on it).
+<P>Instead of directly accessing the children field of a Tree widget,
+it's probably best to cast it using >tt/GTK_CONTAINER (Tree)/, and
+pass it to the gtk_container_children() function. This creates a
+duplicate of the original list, so it's advisable to free it up using
+g_list_free() after you're done with it, or to iterate on it
+destructively, like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    children = gtk_container_children (GTK_CONTAINER (tree));
+    while (children) {
+      do_something_nice (GTK_TREE_ITEM (children->data));
+      children = g_list_remove_link (children, children);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>tree_owner</CODE> field is defined only in subtrees, where it
+points to the TreeItem widget which holds the tree in question.
+The <CODE>level</CODE> field indicates how deeply nested a particular tree
+is; root trees have level 0, and each successive level of subtrees has
+a level one greater than the parent level. This field is set only
+after a Tree widget is actually mapped (i.e. drawn on the screen).
+<P>
+<H3><A NAME="sec_Tree_Signals"></A> Signals</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void selection_changed( GtkTree *tree );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal will be emitted whenever the <CODE>selection</CODE> field of a
+Tree has changed. This happens when a child of the Tree is
+selected or deselected.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void select_child( GtkTree   *tree,
+                   GtkWidget *child );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when a child of the Tree is about to get
+selected. This happens on calls to gtk_tree_select_item(),
+gtk_tree_select_child(), on <EM>all</EM> button presses and calls to
+gtk_tree_item_toggle() and gtk_item_toggle().  It may sometimes be
+indirectly triggered on other occasions where children get added to or
+removed from the Tree.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void unselect_child (GtkTree   *tree,
+                     GtkWidget *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when a child of the Tree is about to get
+deselected. As of GTK 1.0.4, this seems to only occur on calls to
+gtk_tree_unselect_item() or gtk_tree_unselect_child(), and perhaps on
+other occasions, but <EM>not</EM> when a button press deselects a
+child, nor on emission of the "toggle" signal by gtk_item_toggle().
+<P>
+<H3><A NAME="sec_Tree_Functions"></A> Functions and Macros</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_tree_get_type( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Returns the "GtkTree" type identifier.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* gtk_tree_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new Tree object. The new widget is returned as a pointer to a
+GtkWidget object. NULL is returned on failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_append( GtkTree   *tree,
+                      GtkWidget *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Append a tree item to a Tree.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_prepend( GtkTree   *tree,
+                       GtkWidget *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Prepend a tree item to a Tree.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_insert( GtkTree   *tree,
+                      GtkWidget *tree_item,
+                      gint       position );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Insert a tree item into a Tree at the position in the list
+specified by <CODE>position.</CODE>
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_remove_items( GtkTree *tree,
+                            GList   *items );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Remove a list of items (in the form of a GList *) from a Tree.
+Note that removing an item from a tree dereferences (and thus usually)
+destroys it <EM>and</EM> its subtree, if it has one, <EM>and</EM> all
+subtrees in that subtree. If you want to remove only one item, you
+can use gtk_container_remove().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_clear_items( GtkTree *tree,
+                           gint     start,
+                           gint     end );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Remove the items from position <CODE>start</CODE> to position 
<CODE>end</CODE>
+from a Tree. The same warning about dereferencing applies here, as
+gtk_tree_clear_items() simply constructs a list and passes it to
+gtk_tree_remove_items().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_select_item( GtkTree *tree,
+                           gint     item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Emits the "select_item" signal for the child at position
+<CODE>item</CODE>, thus selecting the child (unless you unselect it in a
+signal handler).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_unselect_item( GtkTree *tree,
+                             gint     item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Emits the "unselect_item" signal for the child at position
+<CODE>item</CODE>, thus unselecting the child.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_select_child( GtkTree   *tree,
+                            GtkWidget *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Emits the "select_item" signal for the child <CODE>tree_item</CODE>, thus
+selecting it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_unselect_child( GtkTree   *tree,
+                              GtkWidget *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Emits the "unselect_item" signal for the child <CODE>tree_item</CODE>,
+thus unselecting it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_tree_child_position( GtkTree   *tree,
+                              GtkWidget *child );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Returns the position in the tree of <CODE>child</CODE>, unless
+<CODE>child</CODE> is not in the tree, in which case it returns -1.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_set_selection_mode( GtkTree          *tree,
+                                  GtkSelectionMode  mode );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Sets the selection mode, which can be one of 
<CODE>GTK_SELECTION_SINGLE</CODE> (the
+default), <CODE>GTK_SELECTION_BROWSE</CODE>, 
<CODE>GTK_SELECTION_MULTIPLE</CODE>, or
+<CODE>GTK_SELECTION_EXTENDED</CODE>. This is only defined for root trees, which
+makes sense, since the root tree "owns" the selection. Setting it for
+subtrees has no effect at all; the value is simply ignored.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_set_view_mode( GtkTree         *tree,
+                             GtkTreeViewMode  mode ); 
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Sets the "view mode", which can be either <CODE>GTK_TREE_VIEW_LINE</CODE> 
(the
+default) or <CODE>GTK_TREE_VIEW_ITEM</CODE>.  The view mode propagates from a
+tree to its subtrees, and can't be set exclusively to a subtree (this
+is not exactly true - see the example code comments).
+<P>The term "view mode" is rather ambiguous - basically, it controls the
+way the highlight is drawn when one of a tree's children is selected.
+If it's <CODE>GTK_TREE_VIEW_LINE</CODE>, the entire TreeItem widget is
+highlighted, while for <CODE>GTK_TREE_VIEW_ITEM</CODE>, only the child widget
+(i.e., usually the label) is highlighted.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_set_view_lines( GtkTree *tree,
+                              guint    flag );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Controls whether connecting lines between tree items are drawn.
+<CODE>flag</CODE> is either TRUE, in which case they are, or FALSE, in
+which case they aren't.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTree *GTK_TREE (gpointer obj);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkTree *".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTreeClass *GTK_TREE_CLASS (gpointer class);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkTreeClass *".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint GTK_IS_TREE (gpointer obj);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Determine if a generic pointer refers to a "GtkTree" object.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint GTK_IS_ROOT_TREE (gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Determine if a generic pointer refers to a "GtkTree" object
+<EM>and</EM> is a root tree. Though this will accept any pointer, the
+results of passing it a pointer that does not refer to a Tree are
+undefined and possibly harmful.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTree *GTK_TREE_ROOT_TREE (gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Return the root tree of a pointer to a "GtkTree" object. The above
+warning applies.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GList *GTK_TREE_SELECTION( gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Return the selection list of the root tree of a "GtkTree" object. The
+above warning applies here, too.
+<P>
+<H2><A NAME="sec_Tree_Item_Widget"></A> <A NAME="ss12.5">12.5 Tree Item 
Widget</A>
+</H2>
+
+<P>The TreeItem widget, like CListItem, is derived from Item,
+which in turn is derived from Bin.  Therefore, the item itself is a
+generic container holding exactly one child widget, which can be of
+any type. The TreeItem widget has a number of extra fields, but
+the only one we need be concerned with is the <CODE>subtree</CODE> field.
+<P>The definition for the TreeItem struct looks like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkTreeItem
+{
+  GtkItem item;
+
+  GtkWidget *subtree;
+  GtkWidget *pixmaps_box;
+  GtkWidget *plus_pix_widget, *minus_pix_widget;
+
+  GList *pixmaps;               /* pixmap node for this items color depth */
+
+  guint expanded : 1;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>pixmaps_box</CODE> field is an EventBox which catches clicks on
+the plus/minus symbol which controls expansion and collapsing. The
+<CODE>pixmaps</CODE> field points to an internal data structure. Since
+you can always obtain the subtree of a TreeItem in a (relatively)
+type-safe manner with the <CODE>GTK_TREE_ITEM_SUBTREE (Item)</CODE> macro,
+it's probably advisable never to touch the insides of a TreeItem
+unless you <EM>really</EM> know what you're doing.
+<P>Since it is directly derived from an Item it can be treated as such by
+using the <CODE>GTK_ITEM (TreeItem)</CODE> macro. A TreeItem usually holds a
+label, so the convenience function gtk_list_item_new_with_label() is
+provided. The same effect can be achieved using code like the
+following, which is actually copied verbatim from
+gtk_tree_item_new_with_label():
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+tree_item = gtk_tree_item_new ();
+label_widget = gtk_label_new (label);
+gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5);
+
+gtk_container_add (GTK_CONTAINER (tree_item), label_widget);
+gtk_widget_show (label_widget);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As one is not forced to add a Label to a TreeItem, you could
+also add an HBox or an Arrow, or even a Notebook (though your
+app will likely be quite unpopular in this case) to the TreeItem.
+<P>If you remove all the items from a subtree, it will be destroyed and
+unparented, unless you reference it beforehand, and the TreeItem
+which owns it will be collapsed. So, if you want it to stick around,
+do something like the following:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_widget_ref (tree);
+owner = GTK_TREE(tree)->tree_owner;
+gtk_container_remove (GTK_CONTAINER(tree), item);
+if (tree->parent == NULL){
+  gtk_tree_item_expand (GTK_TREE_ITEM(owner));
+  gtk_tree_item_set_subtree (GTK_TREE_ITEM(owner), tree);
+}
+else
+  gtk_widget_unref (tree);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Finally, drag-n-drop <EM>does</EM> work with TreeItems. You just
+have to make sure that the TreeItem you want to make into a drag
+item or a drop site has not only been added to a Tree, but that
+each successive parent widget has a parent itself, all the way back to
+a toplevel or dialog window, when you call gtk_widget_dnd_drag_set()
+or gtk_widget_dnd_drop_set().  Otherwise, strange things will happen.
+<P>
+<H3>Signals</H3>
+
+<P>TreeItem inherits the "select", "deselect", and "toggle" signals
+from Item. In addition, it adds two signals of its own, "expand"
+and "collapse".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void select( GtkItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when an item is about to be selected, either
+after it has been clicked on by the user, or when the program calls
+gtk_tree_item_select(), gtk_item_select(), or gtk_tree_select_child().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void deselect( GtkItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when an item is about to be unselected, either
+after it has been clicked on by the user, or when the program calls
+gtk_tree_item_deselect() or gtk_item_deselect(). In the case of
+TreeItems, it is also emitted by gtk_tree_unselect_child(), and
+sometimes gtk_tree_select_child().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void toggle( GtkItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when the program calls gtk_item_toggle().  The
+effect it has when emitted on a TreeItem is to call
+gtk_tree_select_child() (and never gtk_tree_unselect_child()) on the
+item's parent tree, if the item has a parent tree.  If it doesn't,
+then the highlight is reversed on the item.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void expand( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when the tree item's subtree is about to be
+expanded, that is, when the user clicks on the plus sign next to the
+item, or when the program calls gtk_tree_item_expand().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void collapse( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is emitted when the tree item's subtree is about to be
+collapsed, that is, when the user clicks on the minus sign next to the
+item, or when the program calls gtk_tree_item_collapse().
+<P>
+<H3>Functions and Macros</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_tree_item_get_type( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Returns the "GtkTreeItem" type identifier.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* gtk_tree_item_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new TreeItem object. The new widget is returned as a
+pointer to a GtkWidget object. NULL is returned on failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* gtk_tree_item_new_with_label (gchar       *label);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new TreeItem object, having a single GtkLabel as the sole
+child. The new widget is returned as a pointer to a GtkWidget
+object. NULL is returned on failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_select( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function is basically a wrapper around a call to
+<CODE>gtk_item_select (GTK_ITEM (tree_item))</CODE> which will emit the
+select signal.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_deselect( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function is basically a wrapper around a call to
+gtk_item_deselect (GTK_ITEM (tree_item)) which will emit the deselect
+signal.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_set_subtree( GtkTreeItem *tree_item,
+                                GtkWidget   *subtree );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function adds a subtree to tree_item, showing it if tree_item is
+expanded, or hiding it if tree_item is collapsed. Again, remember that
+the tree_item must have already been added to a tree for this to work.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_remove_subtree( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This removes all of tree_item's subtree's children (thus unreferencing
+and destroying it, any of its children's subtrees, and so on...), then
+removes the subtree itself, and hides the plus/minus sign.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_expand( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This emits the "expand" signal on tree_item, which expands it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tree_item_collapse( GtkTreeItem *tree_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This emits the "collapse" signal on tree_item, which collapses it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTreeItem *GTK_TREE_ITEM (gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkTreeItem *".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTreeItemClass *GTK_TREE_ITEM_CLASS (gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkTreeItemClass".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint GTK_IS_TREE_ITEM (gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Determine if a generic pointer refers to a "GtkTreeItem" object.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget GTK_TREE_ITEM_SUBTREE (gpointer obj)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Returns a tree item's subtree (<CODE>obj</CODE> should point to a
+"GtkTreeItem" object).
+<P>
+<H2><A NAME="ss12.6">12.6 Tree Example</A>
+</H2>
+
+<P>This is somewhat like the tree example in testgtk.c, but a lot less
+complete (although much better commented).  It puts up a window with a
+tree, and connects all the signals for the relevant objects, so you
+can see when they are emitted.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start tree tree.c */
+
+#include &lt;gtk/gtk.h>
+
+/* for all the GtkItem:: and GtkTreeItem:: signals */
+static void cb_itemsignal( GtkWidget *item,
+                           gchar     *signame )
+{
+  gchar *name;
+  GtkLabel *label;
+
+  /* It's a Bin, so it has one child, which we know to be a
+     label, so get that */
+  label = GTK_LABEL (GTK_BIN (item)->child);
+  /* Get the text of the label */
+  gtk_label_get (label, &amp;name);
+  /* Get the level of the tree which the item is in */
+  g_print ("%s called for item %s->%p, level %d\n", signame, name,
+           item, GTK_TREE (item->parent)->level);
+}
+
+/* Note that this is never called */
+static void cb_unselect_child( GtkWidget *root_tree,
+                               GtkWidget *child,
+                               GtkWidget *subtree )
+{
+  g_print ("unselect_child called for root tree %p, subtree %p, child %p\n",
+           root_tree, subtree, child);
+}
+
+/* Note that this is called every time the user clicks on an item,
+   whether it is already selected or not. */
+static void cb_select_child (GtkWidget *root_tree, GtkWidget *child,
+                             GtkWidget *subtree)
+{
+  g_print ("select_child called for root tree %p, subtree %p, child %p\n",
+           root_tree, subtree, child);
+}
+
+static void cb_selection_changed( GtkWidget *tree )
+{
+  GList *i;
+  
+  g_print ("selection_change called for tree %p\n", tree);
+  g_print ("selected objects are:\n");
+
+  i = GTK_TREE_SELECTION(tree);
+  while (i){
+    gchar *name;
+    GtkLabel *label;
+    GtkWidget *item;
+
+    /* Get a GtkWidget pointer from the list node */
+    item = GTK_WIDGET (i->data);
+    label = GTK_LABEL (GTK_BIN (item)->child);
+    gtk_label_get (label, &amp;name);
+    g_print ("\t%s on level %d\n", name, GTK_TREE
+             (item->parent)->level);
+    i = i->next;
+  }
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  GtkWidget *window, *scrolled_win, *tree;
+  static gchar *itemnames[] = {"Foo", "Bar", "Baz", "Quux",
+                               "Maurice"};
+  gint i;
+
+  gtk_init (&amp;argc, &amp;argv);
+
+  /* a generic toplevel window */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_signal_connect (GTK_OBJECT(window), "delete_event",
+                      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+  gtk_container_set_border_width (GTK_CONTAINER(window), 5);
+
+  /* A generic scrolled window */
+  scrolled_win = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_widget_set_usize (scrolled_win, 150, 200);
+  gtk_container_add (GTK_CONTAINER(window), scrolled_win);
+  gtk_widget_show (scrolled_win);
+  
+  /* Create the root tree */
+  tree = gtk_tree_new();
+  g_print ("root tree is %p\n", tree);
+  /* connect all GtkTree:: signals */
+  gtk_signal_connect (GTK_OBJECT(tree), "select_child",
+                      GTK_SIGNAL_FUNC(cb_select_child), tree);
+  gtk_signal_connect (GTK_OBJECT(tree), "unselect_child",
+                      GTK_SIGNAL_FUNC(cb_unselect_child), tree);
+  gtk_signal_connect (GTK_OBJECT(tree), "selection_changed",
+                      GTK_SIGNAL_FUNC(cb_selection_changed), tree);
+  /* Add it to the scrolled window */
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_win),
+                                         tree);
+  /* Set the selection mode */
+  gtk_tree_set_selection_mode (GTK_TREE(tree),
+                               GTK_SELECTION_MULTIPLE);
+  /* Show it */
+  gtk_widget_show (tree);
+
+  for (i = 0; i &lt; 5; i++){
+    GtkWidget *subtree, *item;
+    gint j;
+
+    /* Create a tree item */
+    item = gtk_tree_item_new_with_label (itemnames[i]);
+    /* Connect all GtkItem:: and GtkTreeItem:: signals */
+    gtk_signal_connect (GTK_OBJECT(item), "select",
+                        GTK_SIGNAL_FUNC(cb_itemsignal), "select");
+    gtk_signal_connect (GTK_OBJECT(item), "deselect",
+                        GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");
+    gtk_signal_connect (GTK_OBJECT(item), "toggle",
+                        GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");
+    gtk_signal_connect (GTK_OBJECT(item), "expand",
+                        GTK_SIGNAL_FUNC(cb_itemsignal), "expand");
+    gtk_signal_connect (GTK_OBJECT(item), "collapse",
+                        GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");
+    /* Add it to the parent tree */
+    gtk_tree_append (GTK_TREE(tree), item);
+    /* Show it - this can be done at any time */
+    gtk_widget_show (item);
+    /* Create this item's subtree */
+    subtree = gtk_tree_new();
+    g_print ("-> item %s->%p, subtree %p\n", itemnames[i], item,
+             subtree);
+
+    /* This is still necessary if you want these signals to be called
+       for the subtree's children.  Note that selection_change will be 
+       signalled for the root tree regardless. */
+    gtk_signal_connect (GTK_OBJECT(subtree), "select_child",
+                        GTK_SIGNAL_FUNC(cb_select_child), subtree);
+    gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",
+                        GTK_SIGNAL_FUNC(cb_unselect_child), subtree);
+    /* This has absolutely no effect, because it is completely ignored 
+       in subtrees */
+    gtk_tree_set_selection_mode (GTK_TREE(subtree),
+                                 GTK_SELECTION_SINGLE);
+    /* Neither does this, but for a rather different reason - the
+       view_mode and view_line values of a tree are propagated to
+       subtrees when they are mapped.  So, setting it later on would
+       actually have a (somewhat unpredictable) effect */
+    gtk_tree_set_view_mode (GTK_TREE(subtree), GTK_TREE_VIEW_ITEM);
+    /* Set this item's subtree - note that you cannot do this until
+       AFTER the item has been added to its parent tree! */
+    gtk_tree_item_set_subtree (GTK_TREE_ITEM(item), subtree);
+
+    for (j = 0; j &lt; 5; j++){
+      GtkWidget *subitem;
+
+      /* Create a subtree item, in much the same way */
+      subitem = gtk_tree_item_new_with_label (itemnames[j]);
+      /* Connect all GtkItem:: and GtkTreeItem:: signals */
+      gtk_signal_connect (GTK_OBJECT(subitem), "select",
+                          GTK_SIGNAL_FUNC(cb_itemsignal), "select");
+      gtk_signal_connect (GTK_OBJECT(subitem), "deselect",
+                          GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");
+      gtk_signal_connect (GTK_OBJECT(subitem), "toggle",
+                          GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");
+      gtk_signal_connect (GTK_OBJECT(subitem), "expand",
+                          GTK_SIGNAL_FUNC(cb_itemsignal), "expand");
+      gtk_signal_connect (GTK_OBJECT(subitem), "collapse",
+                          GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");
+      g_print ("-> -> item %s->%p\n", itemnames[j], subitem);
+      /* Add it to its parent tree */
+      gtk_tree_append (GTK_TREE(subtree), subitem);
+      /* Show it */
+      gtk_widget_show (subitem);
+    }
+  }
+
+  /* Show the window and loop endlessly */
+  gtk_widget_show (window);
+  gtk_main();
+  return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-13.html">Next</A>
+<A HREF="gtk_tut-11.html">Previous</A>
+<A HREF="gtk_tut.html#toc12">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-13.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-13.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-13.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-13.html    3 Mar 2012 06:14:54 
-0000       1.1
@@ -0,0 +1,513 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Menu Widget</TITLE>
+ <LINK HREF="gtk_tut-14.html" REL=next>
+ <LINK HREF="gtk_tut-12.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc13" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-14.html">Next</A>
+<A HREF="gtk_tut-12.html">Previous</A>
+<A HREF="gtk_tut.html#toc13">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s13">13. Menu Widget</A></H2>
+
+<P>There are two ways to create menus: there's the easy way, and there's
+the hard way. Both have their uses, but you can usually use the
+Itemfactory (the easy way). The "hard" way is to create all the menus
+using the calls directly. The easy way is to use the gtk_item_factory
+calls. This is much simpler, but there are advantages and
+disadvantages to each approach.
+<P>The Itemfactory is much easier to use, and to add new menus to,
+although writing a few wrapper functions to create menus using the
+manual method could go a long way towards usability. With the
+Itemfactory, it is not possible to add images or the character '/' to
+the menus.
+<P>
+<H2><A NAME="ss13.1">13.1 Manual Menu Creation</A>
+</H2>
+
+<P>In the true tradition of teaching, we'll show you the hard way
+first. <CODE>:)</CODE>
+<P>There are three widgets that go into making a menubar and submenus:
+<UL>
+<LI>a menu item, which is what the user wants to select, e.g.,
+"Save"</LI>
+<LI>a menu, which acts as a container for the menu items, and</LI>
+<LI>a menubar, which is a container for each of the individual
+menus.</LI>
+</UL>
+<P>This is slightly complicated by the fact that menu item widgets are
+used for two different things. They are both the widgets that are
+packed into the menu, and the widget that is packed into the menubar,
+which, when selected, activates the menu.
+<P>Let's look at the functions that are used to create menus and
+menubars.  This first function is used to create a new menubar.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_menu_bar_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This rather self explanatory function creates a new menubar. You use
+gtk_container_add to pack this into a window, or the box_pack
+functions to pack it into a box - the same as buttons.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_menu_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function returns a pointer to a new menu; it is never actually
+shown (with gtk_widget_show), it is just a container for the menu
+items. I hope this will become more clear when you look at the
+example below.
+<P>The next two calls are used to create menu items that are packed into
+the menu (and menubar).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_menu_item_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>and
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_menu_item_new_with_label( const char *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These calls are used to create the menu items that are to be
+displayed.  Remember to differentiate between a "menu" as created with
+gtk_menu_new and a "menu item" as created by the gtk_menu_item_new
+functions. The menu item will be an actual button with an associated
+action, whereas a menu will be a container holding menu items.
+<P>The gtk_menu_new_with_label and gtk_menu_new functions are just as
+you'd expect after reading about the buttons. One creates a new menu
+item with a label already packed into it, and the other just creates a
+blank menu item.
+<P>Once you've created a menu item you have to put it into a menu. This
+is done using the function gtk_menu_append. In order to capture when
+the item is selected by the user, we need to connect to the
+<CODE>activate</CODE> signal in the usual way. So, if we wanted to create a
+standard <CODE>File</CODE> menu, with the options <CODE>Open</CODE>, 
<CODE>Save</CODE>, and
+<CODE>Quit</CODE>, the code would look something like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    file_menu = gtk_menu_new ();    /* Don't need to show menus */
+
+    /* Create the menu items */
+    open_item = gtk_menu_item_new_with_label ("Open");
+    save_item = gtk_menu_item_new_with_label ("Save");
+    quit_item = gtk_menu_item_new_with_label ("Quit");
+
+    /* Add them to the menu */
+    gtk_menu_append (GTK_MENU (file_menu), open_item);
+    gtk_menu_append (GTK_MENU (file_menu), save_item);
+    gtk_menu_append (GTK_MENU (file_menu), quit_item);
+
+    /* Attach the callback functions to the activate signal */
+    gtk_signal_connect_object (GTK_OBJECT (open_items), "activate",
+                               GTK_SIGNAL_FUNC (menuitem_response),
+                               (gpointer) "file.open");
+    gtk_signal_connect_object (GTK_OBJECT (save_items), "activate",
+                               GTK_SIGNAL_FUNC (menuitem_response),
+                               (gpointer) "file.save");
+
+    /* We can attach the Quit menu item to our exit function */
+    gtk_signal_connect_object (GTK_OBJECT (quit_items), "activate",
+                               GTK_SIGNAL_FUNC (destroy),
+                               (gpointer) "file.quit");
+
+    /* We do need to show menu items */
+    gtk_widget_show (open_item);
+    gtk_widget_show (save_item);
+    gtk_widget_show (quit_item);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>At this point we have our menu. Now we need to create a menubar and a
+menu item for the <CODE>File</CODE> entry, to which we add our menu. The code
+looks like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    menu_bar = gtk_menu_bar_new ();
+    gtk_container_add (GTK_CONTAINER (window), menu_bar);
+    gtk_widget_show (menu_bar);
+
+    file_item = gtk_menu_item_new_with_label ("File");
+    gtk_widget_show (file_item);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Now we need to associate the menu with <CODE>file_item</CODE>. This is done
+with the function
+<P>
+<BLOCKQUOTE><CODE>
+void gtk_menu_item_set_submenu( GtkMenuItem *menu_item,
+GtkWidget   *submenu );
+</CODE></BLOCKQUOTE>
+<P>So, our example would continue with
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (file_item), file_menu);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>All that is left to do is to add the menu to the menubar, which is
+accomplished using the function
+<P>
+<BLOCKQUOTE><CODE>
+void gtk_menu_bar_append( GtkMenuBar *menu_bar,
+GtkWidget  *menu_item );
+</CODE></BLOCKQUOTE>
+<P>which in our case looks like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), file_item);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If we wanted the menu right justified on the menubar, such as help
+menus often are, we can use the following function (again on
+<CODE>file_item</CODE> in the current example) before attaching it to the
+menubar.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_menu_item_right_justify( GtkMenuItem *menu_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here is a summary of the steps needed to create a menu bar with menus
+attached:
+<P>
+<UL>
+<LI> Create a new menu using gtk_menu_new()</LI>
+<LI> Use multiple calls to gtk_menu_item_new() for each item you
+wish to have on your menu. And use gtk_menu_append() to put each of
+these new items on to the menu.</LI>
+<LI> Create a menu item using gtk_menu_item_new(). This will be the
+root of the menu, the text appearing here will be on the menubar
+itself.</LI>
+<LI>Use gtk_menu_item_set_submenu() to attach the menu to the root
+menu item (the one created in the above step).</LI>
+<LI> Create a new menubar using gtk_menu_bar_new. This step only
+needs to be done once when creating a series of menus on one menu bar.</LI>
+<LI> Use gtk_menu_bar_append() to put the root menu onto the menubar.</LI>
+</UL>
+<P>Creating a popup menu is nearly the same. The difference is that the
+menu is not posted "automatically" by a menubar, but explicitly by
+calling the function gtk_menu_popup() from a button-press event, for
+example.  Take these steps:
+<P>
+<UL>
+<LI>Create an event handling function. It needs to have the
+prototype
+<BLOCKQUOTE><CODE>
+static gint handler (GtkWidget *widget,
+GdkEvent  *event);
+</CODE></BLOCKQUOTE>
+
+and it will use the event to find out where to pop up the menu.</LI>
+<LI>In the event handler, if the event is a mouse button press,
+treat <CODE>event</CODE> as a button event (which it is) and use it as
+shown in the sample code to pass information to gtk_menu_popup().</LI>
+<LI>Bind that event handler to a widget with
+<BLOCKQUOTE><CODE>
+gtk_signal_connect_object (GTK_OBJECT (widget), "event",
+GTK_SIGNAL_FUNC (handler),
+GTK_OBJECT (menu));
+</CODE></BLOCKQUOTE>
+
+where <CODE>widget</CODE> is the widget you are binding to,
+<CODE>handler</CODE> is the handling function, and <CODE>menu</CODE> is a menu
+created with gtk_menu_new(). This can be a menu which is also posted
+by a menu bar, as shown in the sample code.</LI>
+</UL>
+<P>
+<H2><A NAME="ss13.2">13.2 Manual Menu Example</A>
+</H2>
+
+<P>That should about do it. Let's take a look at an example to help clarify.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start menu menu.c */
+
+#include &lt;gtk/gtk.h>
+
+static gint button_press (GtkWidget *, GdkEvent *);
+static void menuitem_response (gchar *);
+
+int main( int   argc,
+          char *argv[] )
+{
+
+    GtkWidget *window;
+    GtkWidget *menu;
+    GtkWidget *menu_bar;
+    GtkWidget *root_menu;
+    GtkWidget *menu_items;
+    GtkWidget *vbox;
+    GtkWidget *button;
+    char buf[128];
+    int i;
+
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* create a new window */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_widget_set_usize (GTK_WIDGET (window), 200, 100);
+    gtk_window_set_title (GTK_WINDOW (window), "GTK Menu Test");
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        (GtkSignalFunc) gtk_main_quit, NULL);
+
+    /* Init the menu-widget, and remember -- never
+     * gtk_show_widget() the menu widget!! 
+     * This is the menu that holds the menu items, the one that
+     * will pop up when you click on the "Root Menu" in the app */
+    menu = gtk_menu_new ();
+
+    /* Next we make a little loop that makes three menu-entries for 
"test-menu".
+     * Notice the call to gtk_menu_append.  Here we are adding a list of
+     * menu items to our menu.  Normally, we'd also catch the "clicked"
+     * signal on each of the menu items and setup a callback for it,
+     * but it's omitted here to save space. */
+
+    for (i = 0; i &lt; 3; i++)
+        {
+            /* Copy the names to the buf. */
+            sprintf (buf, "Test-undermenu - %d", i);
+
+            /* Create a new menu-item with a name... */
+            menu_items = gtk_menu_item_new_with_label (buf);
+
+            /* ...and add it to the menu. */
+            gtk_menu_append (GTK_MENU (menu), menu_items);
+
+            /* Do something interesting when the menuitem is selected */
+            gtk_signal_connect_object (GTK_OBJECT (menu_items), "activate",
+                GTK_SIGNAL_FUNC (menuitem_response), (gpointer) g_strdup 
(buf));
+
+            /* Show the widget */
+            gtk_widget_show (menu_items);
+        }
+
+    /* This is the root menu, and will be the label
+     * displayed on the menu bar.  There won't be a signal handler attached,
+     * as it only pops up the rest of the menu when pressed. */
+    root_menu = gtk_menu_item_new_with_label ("Root Menu");
+
+    gtk_widget_show (root_menu);
+
+    /* Now we specify that we want our newly created "menu" to be the menu
+     * for the "root menu" */
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu);
+
+    /* A vbox to put a menu and a button in: */
+    vbox = gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (window), vbox);
+    gtk_widget_show (vbox);
+
+    /* Create a menu-bar to hold the menus and add it to our main window */
+    menu_bar = gtk_menu_bar_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), menu_bar, FALSE, FALSE, 2);
+    gtk_widget_show (menu_bar);
+
+    /* Create a button to which to attach menu as a popup */
+    button = gtk_button_new_with_label ("press me");
+    gtk_signal_connect_object (GTK_OBJECT (button), "event",
+        GTK_SIGNAL_FUNC (button_press), GTK_OBJECT (menu));
+    gtk_box_pack_end (GTK_BOX (vbox), button, TRUE, TRUE, 2);
+    gtk_widget_show (button);
+
+    /* And finally we append the menu-item to the menu-bar -- this is the
+     * "root" menu-item I have been raving about =) */
+    gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), root_menu);
+
+    /* always display the window as the last step so it all splashes on
+     * the screen at once. */
+    gtk_widget_show (window);
+
+    gtk_main ();
+
+    return(0);
+}
+
+/* Respond to a button-press by posting a menu passed in as widget.
+ *
+ * Note that the "widget" argument is the menu being posted, NOT
+ * the button that was pressed.
+ */
+
+static gint button_press( GtkWidget *widget,
+                          GdkEvent *event )
+{
+
+    if (event->type == GDK_BUTTON_PRESS) {
+        GdkEventButton *bevent = (GdkEventButton *) event; 
+        gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL,
+                        bevent->button, bevent->time);
+        /* Tell calling code that we have handled this event; the buck
+         * stops here. */
+        return TRUE;
+    }
+
+    /* Tell calling code that we have not handled this event; pass it on. */
+    return FALSE;
+}
+
+
+/* Print a string when a menu item is selected */
+
+static void menuitem_response( gchar *string )
+{
+    printf ("%s\n", string);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You may also set a menu item to be insensitive and, using an accelerator
+table, bind keys to menu functions.
+<P>
+<H2><A NAME="ss13.3">13.3 Using ItemFactory</A>
+</H2>
+
+<P>Now that we've shown you the hard way, here's how you do it using the
+gtk_item_factory calls.
+<P>
+<H2><A NAME="ss13.4">13.4 Item Factory Example</A>
+</H2>
+
+<P>Here is an example using the GTK item factory.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start menu itemfactory.c */
+
+#include &lt;gtk/gtk.h>
+#include &lt;strings.h>
+
+/* Obligatory basic callback */
+static void print_hello( GtkWidget *w,
+                         gpointer   data )
+{
+  g_message ("Hello, World!\n");
+}
+
+/* This is the GtkItemFactoryEntry structure used to generate new menus.
+   Item 1: The menu path. The letter after the underscore indicates an
+           accelerator key once the menu is open.
+   Item 2: The accelerator key for the entry
+   Item 3: The callback function.
+   Item 4: The callback action.  This changes the parameters with
+           which the function is called.  The default is 0.
+   Item 5: The item type, used to define what kind of an item it is.
+           Here are the possible values:
+
+           NULL               -> "&lt;Item>"
+           ""                 -> "&lt;Item>"
+           "&lt;Title>"          -> create a title item
+           "&lt;Item>"           -> create a simple item
+           "&lt;CheckItem>"      -> create a check item
+           "&lt;ToggleItem>"     -> create a toggle item
+           "&lt;RadioItem>"      -> create a radio item
+           &lt;path>             -> path of a radio item to link against
+           "&lt;Separator>"      -> create a separator
+           "&lt;Branch>"         -> create an item to hold sub items (optional)
+           "&lt;LastBranch>"     -> create a right justified branch 
+*/
+
+static GtkItemFactoryEntry menu_items[] = {
+  { "/_File",         NULL,         NULL, 0, "&lt;Branch>" },
+  { "/File/_New",     "&lt;control>N", print_hello, 0, NULL },
+  { "/File/_Open",    "&lt;control>O", print_hello, 0, NULL },
+  { "/File/_Save",    "&lt;control>S", print_hello, 0, NULL },
+  { "/File/Save _As", NULL,         NULL, 0, NULL },
+  { "/File/sep1",     NULL,         NULL, 0, "&lt;Separator>" },
+  { "/File/Quit",     "&lt;control>Q", gtk_main_quit, 0, NULL },
+  { "/_Options",      NULL,         NULL, 0, "&lt;Branch>" },
+  { "/Options/Test",  NULL,         NULL, 0, NULL },
+  { "/_Help",         NULL,         NULL, 0, "&lt;LastBranch>" },
+  { "/_Help/About",   NULL,         NULL, 0, NULL },
+};
+
+
+void get_main_menu( GtkWidget  *window,
+                    GtkWidget **menubar )
+{
+  GtkItemFactory *item_factory;
+  GtkAccelGroup *accel_group;
+  gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+
+  accel_group = gtk_accel_group_new ();
+
+  /* This function initializes the item factory.
+     Param 1: The type of menu - can be GTK_TYPE_MENU_BAR, GTK_TYPE_MENU,
+              or GTK_TYPE_OPTION_MENU.
+     Param 2: The path of the menu.
+     Param 3: A pointer to a gtk_accel_group.  The item factory sets up
+              the accelerator table while generating menus.
+  */
+
+  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "&lt;main>", 
+                                       accel_group);
+
+  /* This function generates the menu items. Pass the item factory,
+     the number of items in the array, the array itself, and any
+     callback data for the the menu items. */
+  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+  /* Attach the new accelerator group to the window. */
+  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+
+  if (menubar)
+    /* Finally, return the actual menu bar created by the item factory. */ 
+    *menubar = gtk_item_factory_get_widget (item_factory, "&lt;main>");
+}
+
+int main( int argc,
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *main_vbox;
+  GtkWidget *menubar;
+  
+  gtk_init (&amp;argc, &amp;argv);
+  
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_signal_connect (GTK_OBJECT (window), "destroy", 
+                      GTK_SIGNAL_FUNC (gtk_main_quit), 
+                      "WM destroy");
+  gtk_window_set_title (GTK_WINDOW(window), "Item Factory");
+  gtk_widget_set_usize (GTK_WIDGET(window), 300, 200);
+  
+  main_vbox = gtk_vbox_new (FALSE, 1);
+  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+  gtk_container_add (GTK_CONTAINER (window), main_vbox);
+  gtk_widget_show (main_vbox);
+  
+  get_main_menu (window, &amp;menubar);
+  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0);
+  gtk_widget_show (menubar);
+  
+  gtk_widget_show (window);
+  gtk_main ();
+  
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<P>For now, there's only this example. An explanation and lots 'o' comments
+will follow later.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-14.html">Next</A>
+<A HREF="gtk_tut-12.html">Previous</A>
+<A HREF="gtk_tut.html#toc13">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-14.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-14.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-14.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-14.html    3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,444 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Text Widget</TITLE>
+ <LINK HREF="gtk_tut-15.html" REL=next>
+ <LINK HREF="gtk_tut-13.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc14" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-15.html">Next</A>
+<A HREF="gtk_tut-13.html">Previous</A>
+<A HREF="gtk_tut.html#toc14">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s14">14. Text Widget</A></H2>
+
+<P>The Text widget allows multiple lines of text to be displayed and
+edited. It supports both multi-colored and multi-font text, allowing
+them to be mixed in any way we wish. It also has a wide set of key
+based text editing commands, which are compatible with Emacs.
+<P>The text widget supports full cut-and-paste facilities, including the
+use of double- and triple-click to select a word and a whole line,
+respectively.
+<P>
+<H2><A NAME="ss14.1">14.1 Creating and Configuring a Text box</A>
+</H2>
+
+<P>There is only one function for creating a new Text widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_text_new( GtkAdjustment *hadj,
+                         GtkAdjustment *vadj );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The arguments allow us to give the Text widget pointers to Adjustments
+that can be used to track the viewing position of the widget. Passing
+NULL values to either or both of these arguments will cause the
+gtk_text_new function to create its own.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_text_set_adjustments( GtkText       *text,
+                               GtkAdjustment *hadj,
+                               GtkAdjustment *vadj );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The above function allows the horizontal and vertical adjustments of a
+text widget to be changed at any time.
+<P>The text widget will not automatically create its own scrollbars when
+the amount of text to be displayed is too long for the display
+window. We therefore have to create and add them to the display layout
+ourselves.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)->vadj);
+  gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0);
+  gtk_widget_show (vscrollbar);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The above code snippet creates a new vertical scrollbar, and attaches
+it to the vertical adjustment of the text widget, <CODE>text</CODE>. It then
+packs it into a box in the normal way.
+<P>Note, currently the Text widget does not support horizontal
+scrollbars.
+<P>There are two main ways in which a Text widget can be used: to allow
+the user to edit a body of text, or to allow us to display multiple
+lines of text to the user. In order for us to switch between these
+modes of operation, the text widget has the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_text_set_editable( GtkText *text,
+                            gint     editable );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>editable</CODE> argument is a TRUE or FALSE value that specifies
+whether the user is permitted to edit the contents of the Text
+widget. When the text widget is editable, it will display a cursor at
+the current insertion point.
+<P>You are not, however, restricted to just using the text widget in
+these two modes. You can toggle the editable state of the text widget
+at any time, and can insert text at any time.
+<P>The text widget wraps lines of text that are too long to fit onto a
+single line of the display window. Its default behaviour is to break
+words across line breaks. This can be changed using the next function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_text_set_word_wrap( GtkText *text,
+                             gint     word_wrap );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Using this function allows us to specify that the text widget should
+wrap long lines on word boundaries. The <CODE>word_wrap</CODE> argument is a
+TRUE or FALSE value.
+<P>
+<H2><A NAME="ss14.2">14.2 Text Manipulation</A>
+</H2>
+
+<P>The current insertion point of a Text widget can be set using
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_text_set_point( GtkText *text,
+                         guint    index );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>where <CODE>index</CODE> is the position to set the insertion point.
+<P>Analogous to this is the function for getting the current insertion
+point:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_text_get_point( GtkText *text );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A function that is useful in combination with the above two functions
+is
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_text_get_length( GtkText *text );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>which returns the current length of the Text widget. The length is the
+number of characters that are within the text block of the widget,
+including characters such as newline, which marks the end of
+lines.
+<P>In order to insert text at the current insertion point of a Text
+widget, the function gtk_text_insert is used, which also allows us to
+specify background and foreground colors and a font for the text.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_text_insert( GtkText    *text,
+                      GdkFont    *font,
+                      GdkColor   *fore,
+                      GdkColor   *back,
+                      const char *chars,
+                      gint        length );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Passing a value of <CODE>NULL</CODE> in as the value for the foreground 
color,
+background color or font will result in the values set within the
+widget style to be used. Using a value of <CODE>-1</CODE> for the length
+parameter will result in the whole of the text string given being
+inserted.
+<P>The text widget is one of the few within GTK that redraws itself
+dynamically, outside of the gtk_main function. This means that all
+changes to the contents of the text widget take effect
+immediately. This may be undesirable when performing multiple changes
+to the text widget. In order to allow us to perform multiple updates
+to the text widget without it continuously redrawing, we can freeze
+the widget, which temporarily stops it from automatically redrawing
+itself every time it is changed. We can then thaw the widget after our
+updates are complete.
+<P>The following two functions perform this freeze and thaw action:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_text_freeze( GtkText *text );
+
+void gtk_text_thaw( GtkText *text );         
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Text is deleted from the text widget relative to the current insertion
+point by the following two functions. The return value is a TRUE or
+FALSE indicator of whether the operation was successful.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_text_backward_delete( GtkText *text,
+                               guint    nchars );
+
+gint gtk_text_forward_delete ( GtkText *text,
+                               guint    nchars );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If you want to retrieve the contents of the text widget, then the
+macro <CODE>GTK_TEXT_INDEX(t, index)</CODE> allows you to retrieve the
+character at position <CODE>index</CODE> within the text widget <CODE>t</CODE>.
+<P>To retrieve larger blocks of text, we can use the function
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *gtk_editable_get_chars( GtkEditable *editable,
+                               gint         start_pos,
+                               gint         end_pos );   
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This is a function of the parent class of the text widget. A value of
+-1 as <CODE>end_pos</CODE> signifies the end of the text. The index of the
+text starts at 0.
+<P>The function allocates a new chunk of memory for the text block, so
+don't forget to free it with a call to g_free when you have finished
+with it.
+<P>
+<H2><A NAME="ss14.3">14.3 Keyboard Shortcuts</A>
+</H2>
+
+<P>The text widget has a number of pre-installed keyboard shortcuts for
+common editing, motion and selection functions. These are accessed
+using Control and Alt key combinations.
+<P>In addition to these, holding down the Control key whilst using cursor
+key movement will move the cursor by words rather than
+characters. Holding down Shift whilst using cursor movement will
+extend the selection.
+<P>
+<H3>Motion Shortcuts</H3>
+
+<P>
+<UL>
+<LI> Ctrl-A   Beginning of line</LI>
+<LI> Ctrl-E   End of line</LI>
+<LI> Ctrl-N   Next Line</LI>
+<LI> Ctrl-P   Previous Line</LI>
+<LI> Ctrl-B   Backward one character</LI>
+<LI> Ctrl-F   Forward one character</LI>
+<LI> Alt-B    Backward one word</LI>
+<LI> Alt-F    Forward one word</LI>
+</UL>
+<P>
+<H3>Editing Shortcuts</H3>
+
+<P>
+<UL>
+<LI> Ctrl-H   Delete Backward Character (Backspace)</LI>
+<LI> Ctrl-D   Delete Forward Character (Delete)</LI>
+<LI> Ctrl-W   Delete Backward Word</LI>
+<LI> Alt-D    Delete Forward Word</LI>
+<LI> Ctrl-K   Delete to end of line</LI>
+<LI> Ctrl-U   Delete line</LI>
+</UL>
+<P>
+<H3>Selection Shortcuts</H3>
+
+<P>
+<UL>
+<LI> Ctrl-X   Cut to clipboard</LI>
+<LI> Ctrl-C   Copy to clipboard</LI>
+<LI> Ctrl-V   Paste from clipboard</LI>
+</UL>
+<P>
+<H2><A NAME="ss14.4">14.4 A GtkText Example</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start text text.c */
+
+/* text.c */
+
+#include &lt;stdio.h>
+#include &lt;gtk/gtk.h>
+
+void text_toggle_editable (GtkWidget *checkbutton,
+                           GtkWidget *text)
+{
+  gtk_text_set_editable(GTK_TEXT(text),
+                        GTK_TOGGLE_BUTTON(checkbutton)->active);
+}
+
+void text_toggle_word_wrap (GtkWidget *checkbutton,
+                            GtkWidget *text)
+{
+  gtk_text_set_word_wrap(GTK_TEXT(text),
+                         GTK_TOGGLE_BUTTON(checkbutton)->active);
+}
+
+void close_application( GtkWidget *widget,
+                        gpointer   data )
+{
+       gtk_main_quit();
+}
+
+int main( int argc,
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *box1;
+  GtkWidget *box2;
+  GtkWidget *hbox;
+  GtkWidget *button;
+  GtkWidget *check;
+  GtkWidget *separator;
+  GtkWidget *table;
+  GtkWidget *vscrollbar;
+  GtkWidget *text;
+  GdkColormap *cmap;
+  GdkColor color;
+  GdkFont *fixed_font;
+
+  FILE *infile;
+
+  gtk_init (&amp;argc, &amp;argv);
+ 
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_usize (window, 600, 500);
+  gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);  
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC(close_application),
+                      NULL);
+  gtk_window_set_title (GTK_WINDOW (window), "Text Widget Example");
+  gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+  
+  
+  box1 = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), box1);
+  gtk_widget_show (box1);
+  
+  
+  box2 = gtk_vbox_new (FALSE, 10);
+  gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+  gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+  gtk_widget_show (box2);
+  
+  
+  table = gtk_table_new (2, 2, FALSE);
+  gtk_table_set_row_spacing (GTK_TABLE (table), 0, 2);
+  gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
+  gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0);
+  gtk_widget_show (table);
+  
+  /* Create the GtkText widget */
+  text = gtk_text_new (NULL, NULL);
+  gtk_text_set_editable (GTK_TEXT (text), TRUE);
+  gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
+                    GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+                    GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+  gtk_widget_show (text);
+
+  /* Add a vertical scrollbar to the GtkText widget */
+  vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
+  gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1,
+                    GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
+  gtk_widget_show (vscrollbar);
+
+  /* Get the system color map and allocate the color red */
+  cmap = gdk_colormap_get_system();
+  color.red = 0xffff;
+  color.green = 0;
+  color.blue = 0;
+  if (!gdk_color_alloc(cmap, &amp;color)) {
+    g_error("couldn't allocate color");
+  }
+
+  /* Load a fixed font */
+  fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-140-*-*-*-*-*-*");
+
+  /* Realizing a widget creates a window for it,
+   * ready for us to insert some text */
+  gtk_widget_realize (text);
+
+  /* Freeze the text widget, ready for multiple updates */
+  gtk_text_freeze (GTK_TEXT (text));
+  
+  /* Insert some colored text */
+  gtk_text_insert (GTK_TEXT (text), NULL, &amp;text->style->black, NULL,
+                   "Supports ", -1);
+  gtk_text_insert (GTK_TEXT (text), NULL, &amp;color, NULL,
+                   "colored ", -1);
+  gtk_text_insert (GTK_TEXT (text), NULL, &amp;text->style->black, NULL,
+                   "text and different ", -1);
+  gtk_text_insert (GTK_TEXT (text), fixed_font, &amp;text->style->black, NULL,
+                   "fonts\n\n", -1);
+  
+  /* Load the file text.c into the text window */
+
+  infile = fopen("text.c", "r");
+  
+  if (infile) {
+    char buffer[1024];
+    int nchars;
+    
+    while (1)
+      {
+        nchars = fread(buffer, 1, 1024, infile);
+        gtk_text_insert (GTK_TEXT (text), fixed_font, NULL,
+                         NULL, buffer, nchars);
+        
+        if (nchars &lt; 1024)
+          break;
+      }
+    
+    fclose (infile);
+  }
+
+  /* Thaw the text widget, allowing the updates to become visible */  
+  gtk_text_thaw (GTK_TEXT (text));
+  
+  hbox = gtk_hbutton_box_new ();
+  gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
+
+  check = gtk_check_button_new_with_label("Editable");
+  gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
+  gtk_signal_connect (GTK_OBJECT(check), "toggled",
+                      GTK_SIGNAL_FUNC(text_toggle_editable), text);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
+  gtk_widget_show (check);
+  check = gtk_check_button_new_with_label("Wrap Words");
+  gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
+  gtk_signal_connect (GTK_OBJECT(check), "toggled",
+                      GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
+  gtk_widget_show (check);
+
+  separator = gtk_hseparator_new ();
+  gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
+  gtk_widget_show (separator);
+
+  box2 = gtk_vbox_new (FALSE, 10);
+  gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+  gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
+  gtk_widget_show (box2);
+  
+  button = gtk_button_new_with_label ("close");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC(close_application),
+                      NULL);
+  gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+  gtk_widget_grab_default (button);
+  gtk_widget_show (button);
+
+  gtk_widget_show (window);
+
+  gtk_main ();
+  
+  return(0);       
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-15.html">Next</A>
+<A HREF="gtk_tut-13.html">Previous</A>
+<A HREF="gtk_tut.html#toc14">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-15.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-15.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-15.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-15.html    3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Undocumented Widgets</TITLE>
+ <LINK HREF="gtk_tut-16.html" REL=next>
+ <LINK HREF="gtk_tut-14.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc15" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-16.html">Next</A>
+<A HREF="gtk_tut-14.html">Previous</A>
+<A HREF="gtk_tut.html#toc15">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s15">15. Undocumented Widgets</A></H2>
+
+<P>These all require authors! :) Please consider contributing to our
+tutorial.
+<P>If you must use one of these widgets that are undocumented, I strongly
+suggest you take a look at their respective header files in the GTK
+distribution. GTK's function names are very descriptive. Once you
+have an understanding of how things work, it's not difficult to figure
+out how to use a widget simply by looking at its function
+declarations. This, along with a few examples from others' code, and
+it should be no problem.
+<P>When you do come to understand all the functions of a new undocumented
+widget, please consider writing a tutorial on it so others may benefit
+from your time.
+<P>
+<H2><A NAME="ss15.1">15.1 Calendar</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.2">15.2 CTree</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.3">15.3 Curves</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.4">15.4 Drawing Area</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.5">15.5 Font Selection Dialog</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.6">15.6 Gamma Curve</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.7">15.7 Image</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.8">15.8 Packer</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.9">15.9 Plugs and Sockets</A>
+</H2>
+
+<P>
+<H2><A NAME="ss15.10">15.10 Preview</A>
+</H2>
+
+<P>
+<P>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-16.html">Next</A>
+<A HREF="gtk_tut-14.html">Previous</A>
+<A HREF="gtk_tut.html#toc15">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-16.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-16.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-16.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-16.html    3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Setting Widget Attributes</TITLE>
+ <LINK HREF="gtk_tut-17.html" REL=next>
+ <LINK HREF="gtk_tut-15.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc16" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-17.html">Next</A>
+<A HREF="gtk_tut-15.html">Previous</A>
+<A HREF="gtk_tut.html#toc16">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_setting_widget_attributes"></A> <A NAME="s16">16. Setting 
Widget Attributes</A></H2>
+
+<P>This describes the functions used to operate on widgets. These can be
+used to set style, padding, size, etc.
+<P>(Maybe I should make a whole section on accelerators.)
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_widget_install_accelerator( GtkWidget           *widget,
+                                     GtkAcceleratorTable *table,
+                                     gchar               *signal_name,
+                                     gchar                key,
+                                     guint8               modifiers );
+
+void gtk_widget_remove_accelerator ( GtkWidget           *widget,
+                                     GtkAcceleratorTable *table,
+                                     gchar               *signal_name);
+
+void gtk_widget_activate( GtkWidget *widget );
+
+void gtk_widget_set_name( GtkWidget *widget,
+                          gchar     *name );
+
+gchar *gtk_widget_get_name( GtkWidget *widget );
+
+void gtk_widget_set_sensitive( GtkWidget *widget,
+                               gint       sensitive );
+
+void gtk_widget_set_style( GtkWidget *widget,
+                           GtkStyle  *style );
+                                           
+GtkStyle *gtk_widget_get_style( GtkWidget *widget );
+
+GtkStyle *gtk_widget_get_default_style( void );
+
+void gtk_widget_set_uposition( GtkWidget *widget,
+                               gint       x,
+                               gint       y );
+
+void gtk_widget_set_usize( GtkWidget *widget,
+                           gint       width,
+                           gint       height );
+
+void gtk_widget_grab_focus( GtkWidget *widget );
+
+void gtk_widget_show( GtkWidget *widget );
+
+void gtk_widget_hide( GtkWidget *widget );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-17.html">Next</A>
+<A HREF="gtk_tut-15.html">Previous</A>
+<A HREF="gtk_tut.html#toc16">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-17.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-17.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-17.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-17.html    3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Timeouts, IO and Idle Functions</TITLE>
+ <LINK HREF="gtk_tut-18.html" REL=next>
+ <LINK HREF="gtk_tut-16.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc17" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-18.html">Next</A>
+<A HREF="gtk_tut-16.html">Previous</A>
+<A HREF="gtk_tut.html#toc17">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_timeouts"></A> <A NAME="s17">17. Timeouts, IO and Idle 
Functions</A></H2>
+
+<H2><A NAME="ss17.1">17.1 Timeouts</A>
+</H2>
+
+<P>You may be wondering how you make GTK do useful work when in gtk_main.
+Well, you have several options. Using the following function you can
+create a timeout function that will be called every "interval"
+milliseconds.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_timeout_add( guint32     interval,
+                      GtkFunction function,
+                      gpointer    data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the number of milliseconds between calls to your
+function. The second argument is the function you wish to have called,
+and the third, the data passed to this callback function. The return
+value is an integer "tag" which may be used to stop the timeout by
+calling:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_timeout_remove( gint tag );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You may also stop the timeout function by returning zero or FALSE from
+your callback function. Obviously this means if you want your function
+to continue to be called, it should return a non-zero value,
+i.e., TRUE.
+<P>The declaration of your callback should look something like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint timeout_callback( gpointer data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss17.2">17.2 Monitoring IO</A>
+</H2>
+
+<P>A nifty feature of GDK (the library that underlies GTK), is the
+ability to have it check for data on a file descriptor for you (as
+returned by open(2) or socket(2)). This is especially useful for
+networking applications. The function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gdk_input_add( gint              source,
+                    GdkInputCondition condition,
+                    GdkInputFunction  function,
+                    gpointer          data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Where the first argument is the file descriptor you wish to have
+watched, and the second specifies what you want GDK to look for. This
+may be one of:
+<P>
+<UL>
+<LI><CODE>GDK_INPUT_READ</CODE> - Call your function when there is data
+ready for reading on your file descriptor.
+</LI>
+<LI>><CODE>GDK_INPUT_WRITE</CODE> - Call your function when the file
+descriptor is ready for writing.</LI>
+</UL>
+<P>As I'm sure you've figured out already, the third argument is the
+function you wish to have called when the above conditions are
+satisfied, and the fourth is the data to pass to this function.
+<P>The return value is a tag that may be used to stop GDK from monitoring
+this file descriptor using the following function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gdk_input_remove( gint tag );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The callback function should be declared as:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void input_callback( gpointer          data,
+                     gint              source, 
+                     GdkInputCondition condition );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Where <CODE>source</CODE> and <CODE>condition</CODE> are as specified above.
+<P>
+<H2><A NAME="ss17.3">17.3 Idle Functions</A>
+</H2>
+
+<P>What if you have a function which you want to be called when nothing
+else is happening ?
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_idle_add( GtkFunction function,
+                   gpointer    data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This causes GTK to call the specified function whenever nothing else
+is happening.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_idle_remove( gint tag );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>I won't explain the meaning of the arguments as they follow very much
+like the ones above. The function pointed to by the first argument to
+gtk_idle_add will be called whenever the opportunity arises. As with
+the others, returning FALSE will stop the idle function from being
+called.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-18.html">Next</A>
+<A HREF="gtk_tut-16.html">Previous</A>
+<A HREF="gtk_tut.html#toc17">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-18.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-18.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-18.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-18.html    3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Advanced Event and Signal Handling</TITLE>
+ <LINK HREF="gtk_tut-19.html" REL=next>
+ <LINK HREF="gtk_tut-17.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc18" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-19.html">Next</A>
+<A HREF="gtk_tut-17.html">Previous</A>
+<A HREF="gtk_tut.html#toc18">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_Adv_Events_and_Signals"></A> <A NAME="s18">18. Advanced Event 
and Signal Handling</A></H2>
+
+<H2><A NAME="ss18.1">18.1 Signal Functions</A>
+</H2>
+
+<H3>Connecting and Disconnecting Signal Handlers</H3>
+
+<P>
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_signal_connect( GtkObject     *object,
+                          const gchar   *name,
+                          GtkSignalFunc  func,
+                          gpointer       func_data );
+
+guint gtk_signal_connect_after( GtkObject     *object,
+                                const gchar   *name,
+                                GtkSignalFunc  func,
+                                gpointer       func_data );
+
+guint gtk_signal_connect_object( GtkObject     *object,
+                                 const gchar   *name,
+                                 GtkSignalFunc  func,
+                                 GtkObject     *slot_object );
+
+guint gtk_signal_connect_object_after( GtkObject     *object,
+                                       const gchar   *name,
+                                       GtkSignalFunc  func,
+                                       GtkObject     *slot_object );
+
+guint gtk_signal_connect_full( GtkObject          *object,
+                               const gchar        *name,
+                               GtkSignalFunc       func,
+                               GtkCallbackMarshal  marshal,
+                               gpointer            data,
+                               GtkDestroyNotify    destroy_func,
+                               gint                object_signal,
+                               gint                after );
+
+guint gtk_signal_connect_interp( GtkObject          *object,
+                                 const gchar        *name,
+                                 GtkCallbackMarshal  func,
+                                 gpointer            data,
+                                 GtkDestroyNotify    destroy_func,
+                                 gint                after );
+
+void gtk_signal_connect_object_while_alive( GtkObject     *object,
+                                            const gchar   *signal,
+                                            GtkSignalFunc  func,
+                                            GtkObject     *alive_object );
+
+void gtk_signal_connect_while_alive( GtkObject     *object,
+                                     const gchar   *signal,
+                                     GtkSignalFunc  func,
+                                     gpointer       func_data,
+                                     GtkObject     *alive_object );
+
+void gtk_signal_disconnect( GtkObject *object,
+                            guint      handler_id );
+
+void gtk_signal_disconnect_by_func( GtkObject     *object,
+                                    GtkSignalFunc  func,
+                                    gpointer       data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Blocking and Unblocking Signal Handlers</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_signal_handler_block( GtkObject *object,
+                               guint      handler_id);
+
+void gtk_signal_handler_block_by_func( GtkObject     *object,
+                                       GtkSignalFunc  func,
+                                       gpointer       data );
+
+void gtk_signal_handler_block_by_data( GtkObject *object,
+                                       gpointer   data );
+
+void gtk_signal_handler_unblock( GtkObject *object,
+                                 guint      handler_id );
+
+void gtk_signal_handler_unblock_by_func( GtkObject     *object,
+                                         GtkSignalFunc  func,
+                                         gpointer       data );
+
+void gtk_signal_handler_unblock_by_data( GtkObject *object,
+                                         gpointer   data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Emitting and Stopping Signals</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_signal_emit( GtkObject *object,
+                      guint      signal_id,
+                      ... );
+
+void gtk_signal_emit_by_name( GtkObject   *object,
+                              const gchar *name,
+                              ... );
+
+void gtk_signal_emitv( GtkObject *object,
+                       guint      signal_id,
+                       GtkArg    *params );
+
+void gtk_signal_emitv_by_name( GtkObject   *object,
+                               const gchar *name,
+                               GtkArg      *params );
+
+guint gtk_signal_n_emissions( GtkObject *object,
+                              guint      signal_id );
+
+guint gtk_signal_n_emissions_by_name( GtkObject   *object,
+                                      const gchar *name );
+
+void gtk_signal_emit_stop( GtkObject *object,
+                           guint      signal_id );
+
+void gtk_signal_emit_stop_by_name( GtkObject   *object,
+                                   const gchar *name );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss18.2">18.2 Signal Emission and Propagation</A>
+</H2>
+
+<P>Signal emission is the process whereby GTK runs all handlers for a
+specific object and signal.
+<P>First, note that the return value from a signal emission is the return
+value of the <EM>last</EM> handler executed. Since event signals are
+all of type <CODE>GTK_RUN_LAST</CODE>, this will be the default (GTK supplied)
+handler, unless you connect with gtk_signal_connect_after().
+<P>The way an event (say "button_press_event") is handled, is:
+<UL>
+<LI>Start with the widget where the event occured.
+</LI>
+<LI>Emit the generic "event" signal. If that signal handler returns
+a value of TRUE, stop all processing.
+</LI>
+<LI>Otherwise, emit a specific, "button_press_event" signal. If that
+returns TRUE, stop all processing.
+</LI>
+<LI>Otherwise, go to the widget's parent, and repeat the above two
+steps.
+</LI>
+<LI>Continue until some signal handler returns TRUE, or until the
+top-level widget is reached.</LI>
+</UL>
+<P>Some consequences of the above are:
+<UL>
+<LI>Your handler's return value will have no effect if there is a
+default handler, unless you connect with gtk_signal_connect_after().
+</LI>
+<LI>To prevent the default handler from being run, you need to
+connect with gtk_signal_connect() and use
+gtk_signal_emit_stop_by_name() - the return value only affects whether
+the signal is propagated, not the current emission.</LI>
+</UL>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-19.html">Next</A>
+<A HREF="gtk_tut-17.html">Previous</A>
+<A HREF="gtk_tut.html#toc18">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-19.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-19.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-19.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-19.html    3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,398 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Managing Selections</TITLE>
+ <LINK HREF="gtk_tut-20.html" REL=next>
+ <LINK HREF="gtk_tut-18.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc19" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-20.html">Next</A>
+<A HREF="gtk_tut-18.html">Previous</A>
+<A HREF="gtk_tut.html#toc19">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s19">19. Managing Selections</A></H2>
+
+<H2><A NAME="ss19.1">19.1 Overview</A>
+</H2>
+
+<P>One type of interprocess communication supported by X and GTK is
+<EM>selections</EM>. A selection identifies a chunk of data, for
+instance, a portion of text, selected by the user in some fashion, for
+instance, by dragging with the mouse. Only one application on a
+display (the <EM>owner</EM>) can own a particular selection at one
+time, so when a selection is claimed by one application, the previous
+owner must indicate to the user that selection has been
+relinquished. Other applications can request the contents of a
+selection in different forms, called <EM>targets</EM>. There can be
+any number of selections, but most X applications only handle one, the
+<EM>primary selection</EM>.
+<P>In most cases, it isn't necessary for a GTK application to deal with
+selections itself. The standard widgets, such as the Entry widget,
+already have the capability to claim the selection when appropriate
+(e.g., when the user drags over text), and to retrieve the contents of
+the selection owned by another widget or another application (e.g.,
+when the user clicks the second mouse button). However, there may be
+cases in which you want to give other widgets the ability to supply
+the selection, or you wish to retrieve targets not supported by
+default.
+<P>A fundamental concept needed to understand selection handling is that
+of the <EM>atom</EM>. An atom is an integer that uniquely identifies a
+string (on a certain display). Certain atoms are predefined by the X
+server, and in some cases there are constants in <CODE>gtk.h</CODE>
+corresponding to these atoms. For instance the constant
+<CODE>GDK_PRIMARY_SELECTION</CODE> corresponds to the string "PRIMARY".
+In other cases, you should use the functions
+<CODE>gdk_atom_intern()</CODE>, to get the atom corresponding to a string,
+and <CODE>gdk_atom_name()</CODE>, to get the name of an atom. Both
+selections and targets are identified by atoms.
+<P>
+<H2><A NAME="ss19.2">19.2 Retrieving the selection</A>
+</H2>
+
+<P>Retrieving the selection is an asynchronous process. To start the
+process, you call:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_selection_convert( GtkWidget *widget, 
+                            GdkAtom    selection, 
+                            GdkAtom    target,
+                            guint32    time );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This <EM>converts</EM> the selection into the form specified by
+<CODE>target</CODE>. If at all possible, the time field should be the time
+from the event that triggered the selection. This helps make sure that
+events occur in the order that the user requested them. However, if it
+is not available (for instance, if the conversion was triggered by a
+"clicked" signal), then you can use the constant
+<CODE>GDK_CURRENT_TIME</CODE>.
+<P>When the selection owner responds to the request, a
+"selection_received" signal is sent to your application. The handler
+for this signal receives a pointer to a <CODE>GtkSelectionData</CODE>
+structure, which is defined as:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkSelectionData
+{
+  GdkAtom selection;
+  GdkAtom target;
+  GdkAtom type;
+  gint    format;
+  guchar *data;
+  gint    length;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>selection</CODE> and <CODE>target</CODE> are the values you gave in 
your
+<CODE>gtk_selection_convert()</CODE> call. <CODE>type</CODE> is an atom that
+identifies the type of data returned by the selection owner. Some
+possible values are "STRING", a string of latin-1 characters, "ATOM",
+a series of atoms, "INTEGER", an integer, etc. Most targets can only
+return one type. <CODE>format</CODE> gives the length of the units (for
+instance characters) in bits. Usually, you don't care about this when
+receiving data. <CODE>data</CODE> is a pointer to the returned data, and
+<CODE>length</CODE> gives the length of the returned data, in bytes. If
+<CODE>length</CODE> is negative, then an error occurred and the selection
+could not be retrieved. This might happen if no application owned the
+selection, or if you requested a target that the application didn't
+support. The buffer is actually guaranteed to be one byte longer than
+<CODE>length</CODE>; the extra byte will always be zero, so it isn't
+necessary to make a copy of strings just to null terminate them.
+<P>In the following example, we retrieve the special target "TARGETS",
+which is a list of all targets into which the selection can be
+converted.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start selection gettargets.c */
+
+#include &lt;gtk/gtk.h>
+
+void selection_received( GtkWidget        *widget, 
+                         GtkSelectionData *selection_data, 
+                         gpointer          data );
+
+/* Signal handler invoked when user clicks on the "Get Targets" button */
+void get_targets( GtkWidget *widget,
+                  gpointer data )
+{
+  static GdkAtom targets_atom = GDK_NONE;
+
+  /* Get the atom corresponding to the string "TARGETS" */
+  if (targets_atom == GDK_NONE)
+    targets_atom = gdk_atom_intern ("TARGETS", FALSE);
+
+  /* And request the "TARGETS" target for the primary selection */
+  gtk_selection_convert (widget, GDK_SELECTION_PRIMARY, targets_atom,
+                         GDK_CURRENT_TIME);
+}
+
+/* Signal handler called when the selections owner returns the data */
+void selection_received( GtkWidget        *widget,
+                         GtkSelectionData *selection_data, 
+                         gpointer          data )
+{
+  GdkAtom *atoms;
+  GList *item_list;
+  int i;
+
+  /* **** IMPORTANT **** Check to see if retrieval succeeded  */
+  if (selection_data->length &lt; 0)
+    {
+      g_print ("Selection retrieval failed\n");
+      return;
+    }
+  /* Make sure we got the data in the expected form */
+  if (selection_data->type != GDK_SELECTION_TYPE_ATOM)
+    {
+      g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
+      return;
+    }
+  
+  /* Print out the atoms we received */
+  atoms = (GdkAtom *)selection_data->data;
+
+  item_list = NULL;
+  for (i=0; i&lt;selection_data->length/sizeof(GdkAtom); i++)
+    {
+      char *name;
+      name = gdk_atom_name (atoms[i]);
+      if (name != NULL)
+        g_print ("%s\n",name);
+      else
+        g_print ("(bad atom)\n");
+    }
+
+  return;
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *button;
+  
+  gtk_init (&amp;argc, &amp;argv);
+
+  /* Create the toplevel window */
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Event Box");
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_exit), NULL);
+
+  /* Create a button the user can click to get targets */
+
+  button = gtk_button_new_with_label ("Get Targets");
+  gtk_container_add (GTK_CONTAINER (window), button);
+
+  gtk_signal_connect (GTK_OBJECT(button), "clicked",
+                      GTK_SIGNAL_FUNC (get_targets), NULL);
+  gtk_signal_connect (GTK_OBJECT(button), "selection_received",
+                      GTK_SIGNAL_FUNC (selection_received), NULL);
+
+  gtk_widget_show (button);
+  gtk_widget_show (window);
+  
+  gtk_main ();
+  
+  return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss19.3">19.3 Supplying the selection </A>
+</H2>
+
+<P>Supplying the selection is a bit more complicated. You must register 
+handlers that will be called when your selection is requested. For
+each selection/target pair you will handle, you make a call to:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_selection_add_target (GtkWidget           *widget, 
+                               GdkAtom              selection,
+                               GdkAtom              target,
+                               guint                info);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>widget</CODE>, <CODE>selection</CODE>, and <CODE>target</CODE> 
identify the requests
+this handler will manage. When a request for a selection is received,
+the "selection_get" signal will be called. <CODE>info</CODE> can be used as an
+enumerator to identify the specific target within the callback function.
+<P>The callback function has the signature:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void  "selection_get" (GtkWidget          *widget,
+                       GtkSelectionData   *selection_data,
+                       guint               info,
+                       guint               time);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The GtkSelectionData is the same as above, but this time, we're
+responsible for filling in the fields <CODE>type</CODE>, <CODE>format</CODE>,
+<CODE>data</CODE>, and <CODE>length</CODE>. (The <CODE>format</CODE> field is 
actually
+important here - the X server uses it to figure out whether the data
+needs to be byte-swapped or not. Usually it will be 8 - <EM>i.e.</EM> a
+character - or 32 - <EM>i.e.</EM> a. integer.) This is done by calling the
+function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_selection_data_set( GtkSelectionData *selection_data,
+                             GdkAtom           type,
+                             gint              format,
+                             guchar           *data,
+                             gint              length );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function takes care of properly making a copy of the data so that
+you don't have to worry about keeping it around. (You should not fill
+in the fields of the GtkSelectionData structure by hand.)
+<P>When prompted by the user, you claim ownership of the selection by
+calling:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_selection_owner_set( GtkWidget *widget,
+                              GdkAtom    selection,
+                              guint32    time );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If another application claims ownership of the selection, you will
+receive a "selection_clear_event".
+<P>As an example of supplying the selection, the following program adds
+selection functionality to a toggle button. When the toggle button is
+depressed, the program claims the primary selection. The only target
+supported (aside from certain targets like "TARGETS" supplied by GTK
+itself), is the "STRING" target. When this target is requested, a
+string representation of the time is returned.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start selection setselection.c */
+
+#include &lt;gtk/gtk.h>
+#include &lt;time.h>
+
+/* Callback when the user toggles the selection */
+void selection_toggled( GtkWidget *widget,
+                        gint      *have_selection )
+{
+  if (GTK_TOGGLE_BUTTON(widget)->active)
+    {
+      *have_selection = gtk_selection_owner_set (widget,
+                                                 GDK_SELECTION_PRIMARY,
+                                                 GDK_CURRENT_TIME);
+      /* if claiming the selection failed, we return the button to
+         the out state */
+      if (!*have_selection)
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), FALSE);
+    }
+  else
+    {
+      if (*have_selection)
+        {
+          /* Before clearing the selection by setting the owner to NULL,
+             we check if we are the actual owner */
+          if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == 
widget->window)
+            gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY,
+                                     GDK_CURRENT_TIME);
+          *have_selection = FALSE;
+        }
+    }
+}
+
+/* Called when another application claims the selection */
+gint selection_clear( GtkWidget         *widget,
+                      GdkEventSelection *event,
+                      gint              *have_selection )
+{
+  *have_selection = FALSE;
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), FALSE);
+
+  return TRUE;
+}
+
+/* Supplies the current time as the selection. */
+void selection_handle( GtkWidget        *widget, 
+                       GtkSelectionData *selection_data,
+                       guint             info,
+                       guint             time_stamp,
+                       gpointer          data )
+{
+  gchar *timestr;
+  time_t current_time;
+
+  current_time = time(NULL);
+  timestr = asctime (localtime(&amp;current_time)); 
+  /* When we return a single string, it should not be null terminated.
+     That will be done for us */
+
+  gtk_selection_data_set (selection_data, GDK_SELECTION_TYPE_STRING,
+                          8, timestr, strlen(timestr));
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *selection_button;
+
+  static int have_selection = FALSE;
+  
+  gtk_init (&amp;argc, &amp;argv);
+
+  /* Create the toplevel window */
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Event Box");
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_exit), NULL);
+
+  /* Create a toggle button to act as the selection */
+
+  selection_button = gtk_toggle_button_new_with_label ("Claim Selection");
+  gtk_container_add (GTK_CONTAINER (window), selection_button);
+  gtk_widget_show (selection_button);
+
+  gtk_signal_connect (GTK_OBJECT(selection_button), "toggled",
+                      GTK_SIGNAL_FUNC (selection_toggled), 
&amp;have_selection);
+  gtk_signal_connect (GTK_OBJECT(selection_button), "selection_clear_event",
+                      GTK_SIGNAL_FUNC (selection_clear), &amp;have_selection);
+
+  gtk_selection_add_target (selection_button,
+                            GDK_SELECTION_PRIMARY,
+                            GDK_SELECTION_TYPE_STRING,
+                            1);
+  gtk_signal_connect (GTK_OBJECT(selection_button), "selection_get",
+                      GTK_SIGNAL_FUNC (selection_handle), &amp;have_selection);
+
+  gtk_widget_show (selection_button);
+  gtk_widget_show (window);
+  
+  gtk_main ();
+  
+  return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-20.html">Next</A>
+<A HREF="gtk_tut-18.html">Previous</A>
+<A HREF="gtk_tut.html#toc19">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-2.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-2.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-2.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-2.html     3 Mar 2012 06:14:55 
-0000       1.1
@@ -0,0 +1,706 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Getting Started</TITLE>
+ <LINK HREF="gtk_tut-3.html" REL=next>
+ <LINK HREF="gtk_tut-1.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc2" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-3.html">Next</A>
+<A HREF="gtk_tut-1.html">Previous</A>
+<A HREF="gtk_tut.html#toc2">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s2">2. Getting Started</A></H2>
+
+<P>The first thing to do, of course, is download the GTK source and
+install it. You can always get the latest version from ftp.gtk.org in
+/pub/gtk. You can also view other sources of GTK information on
+<A HREF="http://www.gtk.org/";>http://www.gtk.org/</A>. GTK
+uses GNU autoconf for configuration. Once untar'd, type ./configure
+--help to see a list of options.
+<P>The GTK source distribution also contains the complete source to all
+of the examples used in this tutorial, along with Makefiles to aid
+compilation.
+<P>To begin our introduction to GTK, we'll start with the simplest
+program possible. This program will create a 200x200 pixel window and
+has no way of exiting except to be killed by using the shell.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start base base.c */
+
+#include &lt;gtk/gtk.h>
+
+int main( int   argc,
+          char *argv[] )
+{
+    GtkWidget *window;
+    
+    gtk_init (&amp;argc, &amp;argv);
+    
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_widget_show  (window);
+    
+    gtk_main ();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You can compile the above program with gcc using:
+<BLOCKQUOTE><CODE>
+<PRE>
+gcc base.c -o base `gtk-config --cflags --libs`
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The meaning of the unusual compilation options is explained below in
+<A HREF="#sec_compiling">Compiling Hello World</A>.
+<P>All programs will of course include gtk/gtk.h which declares the
+variables, functions, structures, etc. that will be used in your GTK
+application.
+<P>The next line:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_init (&amp;argc, &amp;argv);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>calls the function gtk_init(gint *argc, gchar ***argv) which will be
+called in all GTK applications. This sets up a few things for us such
+as the default visual and color map and then proceeds to call
+gdk_init(gint *argc, gchar ***argv). This function initializes the
+library for use, sets up default signal handlers, and checks the
+arguments passed to your application on the command line, looking for
+one of the following:
+<P>
+<UL>
+<LI> <CODE>--gtk-module</CODE></LI>
+<LI> <CODE>--g-fatal-warnings</CODE></LI>
+<LI> <CODE>--gtk-debug</CODE></LI>
+<LI> <CODE>--gtk-no-debug</CODE></LI>
+<LI> <CODE>--gdk-debug</CODE></LI>
+<LI> <CODE>--gdk-no-debug</CODE></LI>
+<LI> <CODE>--display</CODE></LI>
+<LI> <CODE>--sync</CODE></LI>
+<LI> <CODE>--no-xshm</CODE></LI>
+<LI> <CODE>--name</CODE></LI>
+<LI> <CODE>--class</CODE></LI>
+</UL>
+<P>It removes these from the argument list, leaving anything it does not
+recognize for your application to parse or ignore. This creates a set
+of standard arguments accepted by all GTK applications.
+<P>The next two lines of code create and display a window.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_show (window);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>GTK_WINDOW_TOPLEVEL</CODE> argument specifies that we want the
+window to undergo window manager decoration and placement. Rather than
+create a window of 0x0 size, a window without children is set to
+200x200 by default so you can still manipulate it.
+<P>The gtk_widget_show() function lets GTK know that we are done setting
+the attributes of this widget, and that it can display it.
+<P>The last line enters the GTK main processing loop.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  gtk_main ();
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>gtk_main() is another call you will see in every GTK application.
+When control reaches this point, GTK will sleep waiting for X events
+(such as button or key presses), timeouts, or file IO notifications to
+occur. In our simple example, however, events are ignored.
+<P>
+<H2><A NAME="ss2.1">2.1 Hello World in GTK</A>
+</H2>
+
+<P>Now for a program with a widget (a button).  It's the classic
+hello world a la GTK.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start helloworld helloworld.c */
+
+#include &lt;gtk/gtk.h>
+
+/* This is a callback function. The data arguments are ignored
+ * in this example. More on callbacks below. */
+void hello( GtkWidget *widget,
+            gpointer   data )
+{
+    g_print ("Hello World\n");
+}
+
+gint delete_event( GtkWidget *widget,
+                   GdkEvent  *event,
+                   gpointer   data )
+{
+    /* If you return FALSE in the "delete_event" signal handler,
+     * GTK will emit the "destroy" signal. Returning TRUE means
+     * you don't want the window to be destroyed.
+     * This is useful for popping up 'are you sure you want to quit?'
+     * type dialogs. */
+
+    g_print ("delete event occurred\n");
+
+    /* Change TRUE to FALSE and the main window will be destroyed with
+     * a "delete_event". */
+
+    return(TRUE);
+}
+
+/* Another callback */
+void destroy( GtkWidget *widget,
+              gpointer   data )
+{
+    gtk_main_quit();
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    /* GtkWidget is the storage type for widgets */
+    GtkWidget *window;
+    GtkWidget *button;
+    
+    /* This is called in all GTK applications. Arguments are parsed
+     * from the command line and are returned to the application. */
+    gtk_init(&amp;argc, &amp;argv);
+    
+    /* create a new window */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    
+    /* When the window is given the "delete_event" signal (this is given
+     * by the window manager, usually by the "close" option, or on the
+     * titlebar), we ask it to call the delete_event () function
+     * as defined above. The data passed to the callback
+     * function is NULL and is ignored in the callback function. */
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+    
+    /* Here we connect the "destroy" event to a signal handler.  
+     * This event occurs when we call gtk_widget_destroy() on the window,
+     * or if we return FALSE in the "delete_event" callback. */
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC (destroy), NULL);
+    
+    /* Sets the border width of the window. */
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+    
+    /* Creates a new button with the label "Hello World". */
+    button = gtk_button_new_with_label ("Hello World");
+    
+    /* When the button receives the "clicked" signal, it will call the
+     * function hello() passing it NULL as its argument.  The hello()
+     * function is defined above. */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (hello), NULL);
+    
+    /* This will cause the window to be destroyed by calling
+     * gtk_widget_destroy(window) when "clicked".  Again, the destroy
+     * signal could come from here, or the window manager. */
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                               GTK_OBJECT (window));
+    
+    /* This packs the button into the window (a gtk container). */
+    gtk_container_add (GTK_CONTAINER (window), button);
+    
+    /* The final step is to display this newly created widget. */
+    gtk_widget_show (button);
+    
+    /* and the window */
+    gtk_widget_show (window);
+    
+    /* All GTK applications must have a gtk_main(). Control ends here
+     * and waits for an event to occur (like a key press or
+     * mouse event). */
+    gtk_main ();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="sec_compiling"></A> <A NAME="ss2.2">2.2 Compiling Hello World </A>
+</H2>
+
+<P>To compile use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gcc -Wall -g helloworld.c -o helloworld `gtk-config --cflags` \
+    `gtk-config --libs`
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This uses the program <CODE>gtk-config</CODE>, which comes with GTK. This
+program "knows" what compiler switches are needed to compile programs
+that use GTK. <CODE>gtk-config --cflags</CODE> will output a list of include
+directories for the compiler to look in, and <CODE>gtk-config --libs</CODE>
+will output the list of libraries for the compiler to link with and
+the directories to find them in. In the above example they could have
+been combined into a single instance, such as
+<CODE>`gtk-config --cflags --libs`</CODE>.
+<P>Note that the type of single quote used in the compile command above
+is significant.
+<P>The libraries that are usually linked in are:
+<UL>
+<LI>The GTK library (-lgtk), the widget library, based on top of GDK.</LI>
+<LI>The GDK library (-lgdk), the Xlib wrapper.</LI>
+<LI>The gmodule library (-lgmodule), which is used to load run time
+extensions.</LI>
+<LI>The GLib library (-lglib), containing miscellaneous functions;
+only g_print() is used in this particular example. GTK is built on top
+of glib so you will always require this library. See the section on
+<A HREF="gtk_tut-20.html#sec_glib">GLib</A> for details.</LI>
+<LI>The Xlib library (-lX11) which is used by GDK.</LI>
+<LI>The Xext library (-lXext). This contains code for shared memory
+pixmaps and other X extensions.</LI>
+<LI>The math library (-lm). This is used by GTK for various purposes.</LI>
+</UL>
+<P>
+<H2><A NAME="ss2.3">2.3 Theory of Signals and Callbacks</A>
+</H2>
+
+<P>Before we look in detail at <EM>helloworld</EM>, we'll discuss signals
+and callbacks. GTK is an event driven toolkit, which means it will
+sleep in gtk_main until an event occurs and control is passed to the
+appropriate function.
+<P>This passing of control is done using the idea of "signals". (Note
+that these signals are not the same as the Unix system signals, and
+are not implemented using them, although the terminology is almost
+identical.) When an event occurs, such as the press of a mouse button,
+the appropriate signal will be "emitted" by the widget that was
+pressed.  This is how GTK does most of its useful work. There are
+signals that all widgets inherit, such as "destroy", and there are
+signals that are widget specific, such as "toggled" on a toggle
+button.
+<P>To make a button perform an action, we set up a signal handler to
+catch these signals and call the appropriate function. This is done by
+using a function such as:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_signal_connect( GtkObject     *object,
+                         gchar         *name,
+                         GtkSignalFunc  func,
+                         gpointer       func_data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>where the first argument is the widget which will be emitting the
+signal, and the second the name of the signal you wish to catch. The
+third is the function you wish to be called when it is caught, and the
+fourth, the data you wish to have passed to this function.
+<P>The function specified in the third argument is called a "callback
+function", and should generally be of the form
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void callback_func( GtkWidget *widget,
+                    gpointer   callback_data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>where the first argument will be a pointer to the widget that emitted
+the signal, and the second a pointer to the data given as the last
+argument to the gtk_signal_connect() function as shown above.
+<P>Note that the above form for a signal callback function declaration is
+only a general guide, as some widget specific signals generate
+different calling parameters. For example, the CList "select_row"
+signal provides both row and column parameters.
+<P>Another call used in the <EM>helloworld</EM> example, is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_signal_connect_object( GtkObject     *object,
+                                gchar         *name,
+                                GtkSignalFunc  func,
+                                GtkObject     *slot_object );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>gtk_signal_connect_object() is the same as gtk_signal_connect() except
+that the callback function only uses one argument, a pointer to a GTK
+object. So when using this function to connect signals, the callback
+should be of the form
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void callback_func( GtkObject *object );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>where the object is usually a widget. We usually don't setup callbacks
+for gtk_signal_connect_object however. They are usually used to call a
+GTK function that accepts a single widget or object as an argument, as
+is the case in our <EM>helloworld</EM> example.
+<P>The purpose of having two functions to connect signals is simply to
+allow the callbacks to have a different number of arguments. Many
+functions in the GTK library accept only a single GtkWidget pointer as
+an argument, so you want to use the gtk_signal_connect_object() for
+these, whereas for your functions, you may need to have additional
+data supplied to the callbacks.
+<P>
+<H2><A NAME="ss2.4">2.4 Events</A>
+</H2>
+
+<P>In addition to the signal mechanism described above, there is a set
+of <EM>events</EM> that reflect the X event mechanism. Callbacks may
+also be attached to these events. These events are:
+<P>
+<UL>
+<LI> event</LI>
+<LI> button_press_event</LI>
+<LI> button_release_event</LI>
+<LI> motion_notify_event</LI>
+<LI> delete_event</LI>
+<LI> destroy_event</LI>
+<LI> expose_event</LI>
+<LI> key_press_event</LI>
+<LI> key_release_event</LI>
+<LI> enter_notify_event</LI>
+<LI> leave_notify_event</LI>
+<LI> configure_event</LI>
+<LI> focus_in_event</LI>
+<LI> focus_out_event</LI>
+<LI> map_event</LI>
+<LI> unmap_event</LI>
+<LI> property_notify_event</LI>
+<LI> selection_clear_event</LI>
+<LI> selection_request_event</LI>
+<LI> selection_notify_event</LI>
+<LI> proximity_in_event</LI>
+<LI> proximity_out_event</LI>
+<LI> drag_begin_event</LI>
+<LI> drag_request_event</LI>
+<LI> drag_end_event</LI>
+<LI> drop_enter_event</LI>
+<LI> drop_leave_event</LI>
+<LI> drop_data_available_event</LI>
+<LI> other_event</LI>
+</UL>
+<P>In order to connect a callback function to one of these events, you
+use the function gtk_signal_connect, as described above, using one of
+the above event names as the <CODE>name</CODE> parameter. The callback
+function for events has a slightly different form than that for
+signals:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void callback_func( GtkWidget *widget,
+                    GdkEvent  *event,
+                    gpointer   callback_data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>GdkEvent is a C <CODE>union</CODE> structure whose type will depend upon 
which
+of the above events has occurred. In order for us to tell which event
+has been issued each of the possible alternatives has a <CODE>type</CODE>
+parameter which reflects the event being issued. The other components
+of the event structure will depend upon the type of the
+event. Possible values for the type are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GDK_NOTHING
+  GDK_DELETE
+  GDK_DESTROY
+  GDK_EXPOSE
+  GDK_MOTION_NOTIFY
+  GDK_BUTTON_PRESS
+  GDK_2BUTTON_PRESS
+  GDK_3BUTTON_PRESS
+  GDK_BUTTON_RELEASE
+  GDK_KEY_PRESS
+  GDK_KEY_RELEASE
+  GDK_ENTER_NOTIFY
+  GDK_LEAVE_NOTIFY
+  GDK_FOCUS_CHANGE
+  GDK_CONFIGURE
+  GDK_MAP
+  GDK_UNMAP
+  GDK_PROPERTY_NOTIFY
+  GDK_SELECTION_CLEAR
+  GDK_SELECTION_REQUEST
+  GDK_SELECTION_NOTIFY
+  GDK_PROXIMITY_IN
+  GDK_PROXIMITY_OUT
+  GDK_DRAG_BEGIN
+  GDK_DRAG_REQUEST
+  GDK_DROP_ENTER
+  GDK_DROP_LEAVE
+  GDK_DROP_DATA_AVAIL
+  GDK_CLIENT_EVENT
+  GDK_VISIBILITY_NOTIFY
+  GDK_NO_EXPOSE
+  GDK_OTHER_EVENT       /* Deprecated, use filters instead */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>So, to connect a callback function to one of these events we would use
+something like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_signal_connect( GTK_OBJECT(button), "button_press_event",
+                    GTK_SIGNAL_FUNC(button_press_callback), 
+                    NULL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This assumes that <CODE>button</CODE> is a Button widget. Now, when the
+mouse is over the button and a mouse button is pressed, the function
+<CODE>button_press_callback</CODE> will be called. This function may be
+declared as:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static gint button_press_callback( GtkWidget      *widget, 
+                                   GdkEventButton *event,
+                                   gpointer        data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that we can declare the second argument as type
+<CODE>GdkEventButton</CODE> as we know what type of event will occur for this
+function to be called.
+<P>The value returned from this function indicates whether the event
+should be propagated further by the GTK event handling
+mechanism. Returning TRUE indicates that the event has been handled,
+and that it should not propagate further. Returning FALSE continues
+the normal event handling.  See the section on
+<A HREF="gtk_tut-18.html#sec_Adv_Events_and_Signals">Advanced Event and Signal 
Handling</A> for more details on this
+propagation process.
+<P>For details on the GdkEvent data types, see the appendix entitled
+<A HREF="gtk_tut-29.html#sec_GDK_Event_Types">GDK Event Types</A>.
+<P>
+<H2><A NAME="ss2.5">2.5 Stepping Through Hello World</A>
+</H2>
+
+<P>Now that we know the theory behind this, let's clarify by walking
+through the example <EM>helloworld</EM> program.
+<P>Here is the callback function that will be called when the button is
+"clicked". We ignore both the widget and the data in this example, but
+it is not hard to do things with them. The next example will use the
+data argument to tell us which button was pressed.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void hello( GtkWidget *widget,
+            gpointer   data )
+{
+    g_print ("Hello World\n");
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The next callback is a bit special. The "delete_event" occurs when the
+window manager sends this event to the application. We have a choice
+here as to what to do about these events. We can ignore them, make
+some sort of response, or simply quit the application.
+<P>The value you return in this callback lets GTK know what action to
+take.  By returning TRUE, we let it know that we don't want to have
+the "destroy" signal emitted, keeping our application running. By
+returning FALSE, we ask that "destroy" be emitted, which in turn will
+call our "destroy" signal handler.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint delete_event( GtkWidget *widget,
+                   GdkEvent  *event,
+                   gpointer   data )
+{
+    g_print ("delete event occurred\n");
+
+    return (TRUE); 
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here is another callback function which causes the program to quit by
+calling gtk_main_quit(). This function tells GTK that it is to exit
+from gtk_main when control is returned to it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void destroy( GtkWidget *widget,
+              gpointer   data )
+{
+    gtk_main_quit ();
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>I assume you know about the main() function... yes, as with other
+applications, all GTK applications will also have one of these.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+int main( int   argc,
+          char *argv[] )
+{
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This next part declares pointers to a structure of type
+GtkWidget. These are used below to create a window and a button.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    GtkWidget *window;
+    GtkWidget *button;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here is our gtk_init again. As before, this initializes the toolkit,
+and parses the arguments found on the command line. Any argument it
+recognizes from the command line, it removes from the list, and
+modifies argc and argv to make it look like they never existed,
+allowing your application to parse the remaining arguments.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_init (&amp;argc, &amp;argv);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new window. This is fairly straightforward. Memory is
+allocated for the GtkWidget *window structure so it now points to a
+valid structure. It sets up a new window, but it is not displayed
+until we call gtk_widget_show(window) near the end of our program.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here are two examples of connecting a signal handler to an object, in
+this case, the window. Here, the "delete_event" and "destroy" signals
+are caught. The first is emitted when we use the window manager to
+kill the window, or when we use the gtk_widget_destroy() call passing
+in the window widget as the object to destroy. The second is emitted
+when, in the "delete_event" handler, we return FALSE.
+<P>The <CODE>GTK_OBJECT</CODE> and <CODE>GTK_SIGNAL_FUNC</CODE> are macros 
that perform
+type casting and checking for us, as well as aid the readability of
+the code.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC (destroy), NULL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This next function is used to set an attribute of a container object.
+This just sets the window so it has a blank area along the inside of
+it 10 pixels wide where no widgets will go. There are other similar
+functions which we will look at in the section on
+<A HREF="gtk_tut-16.html#sec_setting_widget_attributes">Setting Widget 
Attributes</A><P>And again, <CODE>GTK_CONTAINER</CODE> is a macro to perform 
type casting.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This call creates a new button. It allocates space for a new GtkWidget
+structure in memory, initializes it, and makes the button pointer
+point to it. It will have the label "Hello World" on it when
+displayed.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    button = gtk_button_new_with_label ("Hello World");
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here, we take this button, and make it do something useful. We attach
+a signal handler to it so when it emits the "clicked" signal, our
+hello() function is called. The data is ignored, so we simply pass in
+NULL to the hello() callback function. Obviously, the "clicked" signal
+is emitted when we click the button with our mouse pointer.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (hello), NULL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>We are also going to use this button to exit our program. This will
+illustrate how the "destroy" signal may come from either the window
+manager, or our program. When the button is "clicked", same as above,
+it calls the first hello() callback function, and then this one in the
+order they are set up. You may have as many callback functions as you
+need, and all will be executed in the order you connected
+them. Because the gtk_widget_destroy() function accepts only a
+GtkWidget *widget as an argument, we use the
+gtk_signal_connect_object() function here instead of straight
+gtk_signal_connect().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                               GTK_OBJECT (window));
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This is a packing call, which will be explained in depth later on in
+<A HREF="gtk_tut-4.html#sec_packing_widgets">Packing Widgets</A>. But it is
+fairly easy to understand. It simply tells GTK that the button is to
+be placed in the window where it will be displayed. Note that a GTK
+container can only contain one widget. There are other widgets, that
+are described later, which are designed to layout multiple widgets in
+various ways.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_container_add (GTK_CONTAINER (window), button);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Now we have everything set up the way we want it to be. With all the
+signal handlers in place, and the button placed in the window where it
+should be, we ask GTK to "show" the widgets on the screen. The window
+widget is shown last so the whole window will pop up at once rather
+than seeing the window pop up, and then the button form inside of
+it. Although with such a simple example, you'd never notice.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_widget_show (button);
+
+    gtk_widget_show (window);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And of course, we call gtk_main() which waits for events to come from
+the X server and will call on the widgets to emit signals when these
+events come.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_main ();
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And the final return. Control returns here after gtk_quit() is called.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    return (0);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Now, when we click the mouse button on a GTK button, the widget emits
+a "clicked" signal. In order for us to use this information, our
+program sets up a signal handler to catch that signal, which
+dispatches the function of our choice. In our example, when the button
+we created is "clicked", the hello() function is called with a NULL
+argument, and then the next handler for this signal is called. This
+calls the gtk_widget_destroy() function, passing it the window widget
+as its argument, destroying the window widget. This causes the window
+to emit the "destroy" signal, which is caught, and calls our destroy()
+callback function, which simply exits GTK.
+<P>Another course of events is to use the window manager to kill the
+window, which will cause the "delete_event" to be emitted. This will
+call our "delete_event" handler. If we return TRUE here, the window
+will be left as is and nothing will happen. Returning FALSE will cause
+GTK to emit the "destroy" signal which of course calls the "destroy"
+callback, exiting GTK.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-3.html">Next</A>
+<A HREF="gtk_tut-1.html">Previous</A>
+<A HREF="gtk_tut.html#toc2">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-20.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-20.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-20.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-20.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,481 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: GLib</TITLE>
+ <LINK HREF="gtk_tut-21.html" REL=next>
+ <LINK HREF="gtk_tut-19.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc20" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-21.html">Next</A>
+<A HREF="gtk_tut-19.html">Previous</A>
+<A HREF="gtk_tut.html#toc20">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_glib"></A> <A NAME="s20">20. GLib</A></H2>
+
+<P>GLib is a lower-level library that provides many useful definitions
+and functions available for use when creating GDK and GTK
+applications. These include definitions for basic types and their
+limits, standard macros, type conversions, byte order, memory
+allocation, warnings and assertions, message logging, timers, string
+utilities, hook functions, a lexical scanner, dynamic loading of
+modules, and automatic string completion. A number of data structures
+(and their related operations) are also defined, including memory
+chunks, doubly-linked lists, singly-linked lists, hash tables, strings
+(which can grow dynamically), string chunks (groups of strings),
+arrays (which can grow in size as elements are added), balanced binary
+trees, N-ary trees, quarks (a two-way association of a string and a
+unique integer identifier), keyed data lists (lists of data elements
+accessible by a string or integer id), relations and tuples (tables of
+data which can be indexed on any number of fields), and caches.
+<P>A summary of some of GLib's capabilities follows; not every function,
+data structure, or operation is covered here.  For more complete
+information about the GLib routines, see the GLib documentation. One
+source of GLib documentation is 
+<A HREF="http://www.gtk.org/";>http://www.gtk.org/</A>.
+<P>If you are using a language other than C, you should consult your
+language's binding documentation. In some cases your language may
+have equivalent functionality built-in, while in other cases it may
+not.
+<P>
+<H2><A NAME="ss20.1">20.1 Definitions</A>
+</H2>
+
+<P>Definitions for the extremes of many of the standard types are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+G_MINFLOAT
+G_MAXFLOAT
+G_MINDOUBLE
+G_MAXDOUBLE
+G_MINSHORT
+G_MAXSHORT
+G_MININT
+G_MAXINT
+G_MINLONG
+G_MAXLONG
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Also, the following typedefs. The ones left unspecified are dynamically set
+depending on the architecture. Remember to avoid counting on the size of a
+pointer if you want to be portable! E.g., a pointer on an Alpha is 8
+bytes, but 4 on Intel 80x86 family CPUs.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+char   gchar;
+short  gshort;
+long   glong;
+int    gint;
+char   gboolean;
+
+unsigned char   guchar;
+unsigned short  gushort;
+unsigned long   gulong;
+unsigned int    guint;
+
+float   gfloat;
+double  gdouble;
+long double gldouble;
+
+void* gpointer;
+
+gint8
+guint8
+gint16
+guint16
+gint32
+guint32
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss20.2">20.2 Doubly Linked Lists</A>
+</H2>
+
+<P>The following functions are used to create, manage, and destroy
+standard doubly linked lists. Each element in the list contains a
+piece of data, together with pointers which link to the previous and
+next elements in the list. This enables easy movement in either
+direction through the list. The data item is of type "gpointer",
+which means the data can be a pointer to your real data or (through
+casting) a numeric value (but do not assume that int and gpointer have
+the same size!). These routines internally allocate list elements in
+blocks, which is more efficient than allocating elements individually.
+<P>There is no function to specifically create a list. Instead, simply
+create a variable of type GList* and set its value to NULL; NULL is
+considered to be the empty list.
+<P>To add elements to a list, use the g_list_append(), g_list_prepend(),
+g_list_insert(), or g_list_insert_sorted() routines. In all cases
+they accept a pointer to the beginning of the list, and return the
+(possibly changed) pointer to the beginning of the list. Thus, for
+all of the operations that add or remove elements, be sure to save the
+returned value!
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GList *g_list_append( GList    *list,
+                      gpointer  data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This adds a new element (with value <CODE>data</CODE>) onto the end of the
+list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+           
+GList *g_list_prepend( GList    *list,
+                       gpointer  data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This adds a new element (with value <CODE>data</CODE>) to the beginning of 
the
+list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+                
+GList *g_list_insert( GList    *list,
+                      gpointer  data,
+                      gint      position );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This inserts a new element (with value data) into the list at the
+given position. If position is 0, this is just like g_list_prepend();
+if position is less than 0, this is just like g_list_append().
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GList *g_list_remove( GList    *list,
+                      gpointer  data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This removes the element in the list with the value <CODE>data</CODE>;
+if the element isn't there, the list is unchanged.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_list_free( GList *list );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This frees all of the memory used by a GList. If the list elements
+refer to dynamically-allocated memory, then they should be freed
+first.
+<P>There are many other GLib functions that support doubly linked lists;
+see the glib documentation for more information.  Here are a few of
+the more useful functions' signatures:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+                   
+GList *g_list_remove_link( GList *list,
+                           GList *link );
+
+GList *g_list_reverse( GList *list );
+
+GList *g_list_nth( GList *list,
+                   gint   n );
+                           
+GList *g_list_find( GList    *list,
+                    gpointer  data );
+
+GList *g_list_last( GList *list );
+
+GList *g_list_first( GList *list );
+
+gint g_list_length( GList *list );
+
+void g_list_foreach( GList    *list,
+                     GFunc     func,
+                     gpointer  user_data );
+</PRE>
+</CODE></BLOCKQUOTE>
+                                              
+<P>
+<H2><A NAME="ss20.3">20.3 Singly Linked Lists</A>
+</H2>
+
+<P>Many of the above functions for singly linked lists are identical to the
+above. Here is a list of some of their operations:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GSList *g_slist_append( GSList   *list,
+                        gpointer  data );
+                
+GSList *g_slist_prepend( GSList   *list,
+                         gpointer  data );
+                             
+GSList *g_slist_insert( GSList   *list,
+                        gpointer  data,
+                        gint      position );
+                             
+GSList *g_slist_remove( GSList   *list,
+                        gpointer  data );
+                             
+GSList *g_slist_remove_link( GSList *list,
+                             GSList *link );
+                             
+GSList *g_slist_reverse( GSList *list );
+
+GSList *g_slist_nth( GSList *list,
+                     gint    n );
+                             
+GSList *g_slist_find( GSList   *list,
+                      gpointer  data );
+                             
+GSList *g_slist_last( GSList *list );
+
+gint g_slist_length( GSList *list );
+
+void g_slist_foreach( GSList   *list,
+                      GFunc     func,
+                      gpointer  user_data );
+        
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss20.4">20.4 Memory Management</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gpointer g_malloc( gulong size );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This is a replacement for malloc(). You do not need to check the return
+value as it is done for you in this function. If the memory allocation
+fails for whatever reasons, your applications will be terminated.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gpointer g_malloc0( gulong size );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Same as above, but zeroes the memory before returning a pointer to it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gpointer g_realloc( gpointer mem,
+                    gulong   size );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Relocates "size" bytes of memory starting at "mem".  Obviously, the
+memory should have been previously allocated.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_free( gpointer mem );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Frees memory. Easy one. If <CODE>mem</CODE> is NULL it simply returns.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_mem_profile( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Dumps a profile of used memory, but requires that you add <CODE>#define
+MEM_PROFILE</CODE> to the top of glib/gmem.c and re-make and make install.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_mem_check( gpointer mem );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Checks that a memory location is valid. Requires you add <CODE>#define
+MEM_CHECK</CODE> to the top of gmem.c and re-make and make install.
+<P>
+<H2><A NAME="ss20.5">20.5 Timers</A>
+</H2>
+
+<P>Timer functions can be used to time operations (e.g., to see how much
+time has elapsed). First, you create a new timer with g_timer_new().
+You can then use g_timer_start() to start timing an operation,
+g_timer_stop() to stop timing an operation, and g_timer_elapsed() to
+determine the elapsed time.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GTimer *g_timer_new( void );
+
+void g_timer_destroy( GTimer *timer );
+
+void g_timer_start( GTimer  *timer );
+
+void g_timer_stop( GTimer  *timer );
+
+void g_timer_reset( GTimer  *timer );
+
+gdouble g_timer_elapsed( GTimer *timer,
+                         gulong *microseconds );
+</PRE>
+</CODE></BLOCKQUOTE>
+                         
+<P>
+<H2><A NAME="ss20.6">20.6 String Handling</A>
+</H2>
+
+<P>GLib defines a new type called a GString, which is similar to a
+standard C string but one that grows automatically. Its string data
+is null-terminated. What this gives you is protection from buffer
+overflow programming errors within your program. This is a very
+important feature, and hence I recommend that you make use of
+GStrings. GString itself has a simple public definition:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct GString 
+{
+  gchar *str; /* Points to the string's current \0-terminated value. */
+  gint len; /* Current length */
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you might expect, there are a number of operations you can do with
+a GString.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GString *g_string_new( gchar *init );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This constructs a GString, copying the string value of <CODE>init</CODE>
+into the GString and returning a pointer to it. NULL may be given as
+the argument for an initially empty GString.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+
+void g_string_free( GString *string,
+                    gint     free_segment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This frees the memory for the given GString. If <CODE>free_segment</CODE> is
+TRUE, then this also frees its character data.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+                             
+GString *g_string_assign( GString     *lval,
+                          const gchar *rval );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This copies the characters from rval into lval, destroying the
+previous contents of lval. Note that lval will be lengthened as
+necessary to hold the string's contents, unlike the standard strcpy()
+function.
+<P>The rest of these functions should be relatively obvious (the _c
+versions accept a character instead of a string):
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+                     
+GString *g_string_truncate( GString *string,
+                            gint     len );
+                             
+GString *g_string_append( GString *string,
+                          gchar   *val );
+                            
+GString *g_string_append_c( GString *string,
+                            gchar    c );
+        
+GString *g_string_prepend( GString *string,
+                           gchar   *val );
+                             
+GString *g_string_prepend_c( GString *string,
+                             gchar    c );
+        
+void g_string_sprintf( GString *string,
+                       gchar   *fmt,
+                       ...);
+        
+void g_string_sprintfa ( GString *string,
+                         gchar   *fmt,
+                         ... );
+</PRE>
+</CODE></BLOCKQUOTE>
+                                                          
+<P>
+<H2><A NAME="ss20.7">20.7 Utility and Error Functions</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *g_strdup( const gchar *str );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Replacement strdup function.  Copies the original strings contents to
+newly allocated memory, and returns a pointer to it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *g_strerror( gint errnum );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>I recommend using this for all error messages.  It's much nicer, and more
+portable than perror() or others.  The output is usually of the form:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+program name:function that failed:file or further description:strerror
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here's an example of one such call used in our hello_world program:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+g_print("hello_world:open:%s:%s\n", filename, g_strerror(errno));
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_error( gchar *format, ... );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Prints an error message. The format is just like printf, but it
+prepends "** ERROR **: " to your message, and exits the program.  
+Use only for fatal errors.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_warning( gchar *format, ... );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Same as above, but prepends "** WARNING **: ", and does not exit the
+program.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_message( gchar *format, ... );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Prints "message: " prepended to the string you pass in.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void g_print( gchar *format, ... );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Replacement for printf().
+<P>And our last function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *g_strsignal( gint signum );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Prints out the name of the Unix system signal given the signal number.
+Useful in generic signal handling functions.
+<P>All of the above are more or less just stolen from glib.h.  If anyone cares
+to document any function, just send me an email!
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-21.html">Next</A>
+<A HREF="gtk_tut-19.html">Previous</A>
+<A HREF="gtk_tut.html#toc20">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-21.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-21.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-21.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-21.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,302 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: GTK's rc Files </TITLE>
+ <LINK HREF="gtk_tut-22.html" REL=next>
+ <LINK HREF="gtk_tut-20.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc21" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-22.html">Next</A>
+<A HREF="gtk_tut-20.html">Previous</A>
+<A HREF="gtk_tut.html#toc21">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_gtkrc_files"></A> <A NAME="s21">21. GTK's rc Files </A></H2>
+
+<P>GTK has its own way of dealing with application defaults, by using rc
+files. These can be used to set the colors of just about any widget, and
+can also be used to tile pixmaps onto the background of some widgets.  
+<P>
+<H2><A NAME="ss21.1">21.1 Functions For rc Files </A>
+</H2>
+
+<P>When your application starts, you should include a call to:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_rc_parse( char *filename );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Passing in the filename of your rc file. This will cause GTK to parse
+this file, and use the style settings for the widget types defined
+there.
+<P>If you wish to have a special set of widgets that can take on a
+different style from others, or any other logical division of widgets,
+use a call to:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_widget_set_name( GtkWidget *widget,
+                          gchar     *name );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Passing your newly created widget as the first argument, and the name
+you wish to give it as the second. This will allow you to change the
+attributes of this widget by name through the rc file.
+<P>If we use a call something like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+button = gtk_button_new_with_label ("Special Button");
+gtk_widget_set_name (button, "special button");
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Then this button is given the name "special button" and may be addressed by
+name in the rc file as "special button.GtkButton".  [&lt;--- Verify ME!]
+<P>The example rc file below, sets the properties of the main window, and lets
+all children of that main window inherit the style described by the "main
+button" style.  The code used in the application is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+gtk_widget_set_name (window, "main window");
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And then the style is defined in the rc file using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+widget "main window.*GtkButton*" style "main_button"
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Which sets all the Button widgets in the "main window" to the
+"main_buttons" style as defined in the rc file.
+<P>As you can see, this is a fairly powerful and flexible system.  Use your
+imagination as to how best to take advantage of this.
+<P>
+<H2><A NAME="ss21.2">21.2 GTK's rc File Format</A>
+</H2>
+
+<P>The format of the GTK file is illustrated in the example below. This is
+the testgtkrc file from the GTK distribution, but I've added a
+few comments and things. You may wish to include this explanation in
+your application to allow the user to fine tune his application.
+<P>There are several directives to change the attributes of a widget.
+<P>
+<UL>
+<LI>fg - Sets the foreground color of a widget.</LI>
+<LI>bg - Sets the background color of a widget.</LI>
+<LI>bg_pixmap - Sets the background of a widget to a tiled pixmap.</LI>
+<LI>font - Sets the font to be used with the given widget.</LI>
+</UL>
+<P>In addition to this, there are several states a widget can be in, and you
+can set different colors, pixmaps and fonts for each state. These states are:
+<P>
+<UL>
+<LI>NORMAL - The normal state of a widget, without the mouse over top of
+it, and not being pressed, etc.</LI>
+<LI>PRELIGHT - When the mouse is over top of the widget, colors defined
+using this state will be in effect.</LI>
+<LI>ACTIVE - When the widget is pressed or clicked it will be active, and
+the attributes assigned by this tag will be in effect.</LI>
+<LI>INSENSITIVE - When a widget is set insensitive, and cannot be
+activated, it will take these attributes.</LI>
+<LI>SELECTED - When an object is selected, it takes these attributes.</LI>
+</UL>
+<P>When using the "fg" and "bg" keywords to set the colors of widgets, the
+format is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+fg[&lt;STATE>] = { Red, Green, Blue }
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Where STATE is one of the above states (PRELIGHT, ACTIVE, etc), and the Red,
+Green and Blue are values in the range of 0 - 1.0,  { 1.0, 1.0, 1.0 } being
+white. They must be in float form, or they will register as 0, so a straight 
+"1" will not work, it must be "1.0".  A straight "0" is fine because it 
+doesn't matter if it's not recognized.  Unrecognized values are set to 0.
+<P>bg_pixmap is very similar to the above, except the colors are replaced by a
+filename.
+<P>pixmap_path is a list of paths separated by ":"'s.  These paths will be
+searched for any pixmap you specify.
+<P>The font directive is simply:
+<BLOCKQUOTE><CODE>
+<PRE>
+font = "&lt;font name>"
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The only hard part is figuring out the font string. Using xfontsel or
+a similar utility should help.
+<P>The "widget_class" sets the style of a class of widgets. These classes are
+listed in the widget overview on the class hierarchy.
+<P>The "widget" directive sets a specifically named set of widgets to a
+given style, overriding any style set for the given widget class.
+These widgets are registered inside the application using the
+gtk_widget_set_name() call. This allows you to specify the attributes of a
+widget on a per widget basis, rather than setting the attributes of an
+entire widget class. I urge you to document any of these special widgets so
+users may customize them.
+<P>When the keyword <CODE>parent</CODE> is used as an attribute, the widget 
will take on
+the attributes of its parent in the application.
+<P>When defining a style, you may assign the attributes of a previously defined
+style to this new one.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+style "main_button" = "button"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
+  bg[PRELIGHT] = { 0.75, 0, 0 }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This example takes the "button" style, and creates a new "main_button" style
+simply by changing the font and prelight background color of the "button"
+style.
+<P>Of course, many of these attributes don't apply to all widgets. It's a
+simple matter of common sense really. Anything that could apply, should.
+<P>
+<H2><A NAME="ss21.3">21.3 Example rc file</A>
+</H2>
+
+<P>
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+# pixmap_path "&lt;dir 1>:&lt;dir 2>:&lt;dir 3>:..."
+#
+pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps"
+#
+# style &lt;name> [= &lt;name>]
+# {
+#   &lt;option>
+# }
+#
+# widget &lt;widget_set> style &lt;style_name>
+# widget_class &lt;widget_class_set> style &lt;style_name>
+
+
+# Here is a list of all the possible states.  Note that some do not apply to
+# certain widgets.
+#
+# NORMAL - The normal state of a widget, without the mouse over top of
+# it, and not being pressed, etc.
+#
+# PRELIGHT - When the mouse is over top of the widget, colors defined
+# using this state will be in effect.
+#
+# ACTIVE - When the widget is pressed or clicked it will be active, and
+# the attributes assigned by this tag will be in effect.
+#
+# INSENSITIVE - When a widget is set insensitive, and cannot be
+# activated, it will take these attributes.
+#
+# SELECTED - When an object is selected, it takes these attributes.
+#
+# Given these states, we can set the attributes of the widgets in each of
+# these states using the following directives.
+#
+# fg - Sets the foreground color of a widget.
+# fg - Sets the background color of a widget.
+# bg_pixmap - Sets the background of a widget to a tiled pixmap.
+# font - Sets the font to be used with the given widget.
+#
+
+# This sets a style called "button".  The name is not really important, as
+# it is assigned to the actual widgets at the bottom of the file.
+
+style "window"
+{
+  #This sets the padding around the window to the pixmap specified.
+  #bg_pixmap[&lt;STATE>] = "&lt;pixmap filename>"
+  bg_pixmap[NORMAL] = "warning.xpm"
+}
+
+style "scale"
+{
+  #Sets the foreground color (font color) to red when in the "NORMAL"
+  #state.
+  
+  fg[NORMAL] = { 1.0, 0, 0 }
+  
+  #Sets the background pixmap of this widget to that of its parent.
+  bg_pixmap[NORMAL] = "&lt;parent>"
+}
+
+style "button"
+{
+  # This shows all the possible states for a button.  The only one that
+  # doesn't apply is the SELECTED state.
+  
+  fg[PRELIGHT] = { 0, 1.0, 1.0 }
+  bg[PRELIGHT] = { 0, 0, 1.0 }
+  bg[ACTIVE] = { 1.0, 0, 0 }
+  fg[ACTIVE] = { 0, 1.0, 0 }
+  bg[NORMAL] = { 1.0, 1.0, 0 }
+  fg[NORMAL] = { .99, 0, .99 }
+  bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
+  fg[INSENSITIVE] = { 1.0, 0, 1.0 }
+}
+
+# In this example, we inherit the attributes of the "button" style and then
+# override the font and background color when prelit to create a new
+# "main_button" style.
+
+style "main_button" = "button"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
+  bg[PRELIGHT] = { 0.75, 0, 0 }
+}
+
+style "toggle_button" = "button"
+{
+  fg[NORMAL] = { 1.0, 0, 0 }
+  fg[ACTIVE] = { 1.0, 0, 0 }
+  
+  # This sets the background pixmap of the toggle_button to that of its
+  # parent widget (as defined in the application).
+  bg_pixmap[NORMAL] = "&lt;parent>"
+}
+
+style "text"
+{
+  bg_pixmap[NORMAL] = "marble.xpm"
+  fg[NORMAL] = { 1.0, 1.0, 1.0 }
+}
+
+style "ruler"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*"
+}
+
+# pixmap_path "~/.pixmaps"
+
+# These set the widget types to use the styles defined above.
+# The widget types are listed in the class hierarchy, but could probably be
+# just listed in this document for the users reference.
+
+widget_class "GtkWindow" style "window"
+widget_class "GtkDialog" style "window"
+widget_class "GtkFileSelection" style "window"
+widget_class "*Gtk*Scale" style "scale"
+widget_class "*GtkCheckButton*" style "toggle_button"
+widget_class "*GtkRadioButton*" style "toggle_button"
+widget_class "*GtkButton*" style "button"
+widget_class "*Ruler" style "ruler"
+widget_class "*GtkText" style "text"
+
+# This sets all the buttons that are children of the "main window" to
+# the main_button style.  These must be documented to be taken advantage of.
+widget "main window.*GtkButton*" style "main_button"
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-22.html">Next</A>
+<A HREF="gtk_tut-20.html">Previous</A>
+<A HREF="gtk_tut.html#toc21">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-22.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-22.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-22.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-22.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,1447 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Writing Your Own Widgets </TITLE>
+ <LINK HREF="gtk_tut-23.html" REL=next>
+ <LINK HREF="gtk_tut-21.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc22" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-23.html">Next</A>
+<A HREF="gtk_tut-21.html">Previous</A>
+<A HREF="gtk_tut.html#toc22">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s22">22. Writing Your Own Widgets </A></H2>
+
+<H2><A NAME="ss22.1">22.1 Overview</A>
+</H2>
+
+<P>Although the GTK distribution comes with many types of widgets that
+should cover most basic needs, there may come a time when you need to
+create your own new widget type. Since GTK uses widget inheritance
+extensively, and there is already a widget that is close to what you want,
+it is often possible to make a useful new widget type in
+just a few lines of code. But before starting work on a new widget, check
+around first to make sure that someone has not already written
+it. This will prevent duplication of effort and keep the number of
+GTK widgets out there to a minimum, which will help keep both the code
+and the interface of different applications consistent. As a flip side
+to this, once you finish your widget, announce it to the world so
+other people can benefit. The best place to do this is probably the
+<CODE>gtk-list</CODE>.
+<P>Complete sources for the example widgets are available at the place you 
+got this tutorial, or from:
+<P>
+<A 
HREF="http://www.gtk.org/~otaylor/gtk/tutorial/";>http://www.gtk.org/~otaylor/gtk/tutorial/</A><P>
+<P>
+<H2><A NAME="ss22.2">22.2 The Anatomy Of A Widget</A>
+</H2>
+
+<P>In order to create a new widget, it is important to have an
+understanding of how GTK objects work. This section is just meant as a
+brief overview. See the reference documentation for the details. 
+<P>GTK widgets are implemented in an object oriented fashion. However,
+they are implemented in standard C. This greatly improves portability
+and stability over using current generation C++ compilers; however,
+it does mean that the widget writer has to pay attention to some of
+the implementation details. The information common to all instances of
+one class of widgets (e.g., to all Button widgets) is stored in the 
+<EM>class structure</EM>. There is only one copy of this in
+which is stored information about the class's signals
+(which act like virtual functions in C). To support inheritance, the
+first field in the class structure must be a copy of the parent's
+class structure. The declaration of the class structure of GtkButtton
+looks like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkButtonClass
+{
+  GtkContainerClass parent_class;
+
+  void (* pressed)  (GtkButton *button);
+  void (* released) (GtkButton *button);
+  void (* clicked)  (GtkButton *button);
+  void (* enter)    (GtkButton *button);
+  void (* leave)    (GtkButton *button);
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When a button is treated as a container (for instance, when it is
+resized), its class structure can be cast to GtkContainerClass, and
+the relevant fields used to handle the signals.
+<P>There is also a structure for each widget that is created on a
+per-instance basis. This structure has fields to store information that
+is different for each instance of the widget. We'll call this
+structure the <EM>object structure</EM>. For the Button class, it looks
+like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkButton
+{
+  GtkContainer container;
+
+  GtkWidget *child;
+
+  guint in_button : 1;
+  guint button_down : 1;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that, similar to the class structure, the first field is the
+object structure of the parent class, so that this structure can be
+cast to the parent class' object structure as needed.
+<P>
+<H2><A NAME="ss22.3">22.3 Creating a Composite widget</A>
+</H2>
+
+<H3>Introduction</H3>
+
+<P>One type of widget that you may be interested in creating is a
+widget that is merely an aggregate of other GTK widgets. This type of
+widget does nothing that couldn't be done without creating new
+widgets, but provides a convenient way of packaging user interface
+elements for reuse. The FileSelection and ColorSelection widgets in
+the standard distribution are examples of this type of widget.
+<P>The example widget that we'll create in this section is the Tictactoe
+widget, a 3x3 array of toggle buttons which triggers a signal when all
+three buttons in a row, column, or on one of the diagonals are
+depressed. 
+<P>
+<H3>Choosing a parent class</H3>
+
+<P>The parent class for a composite widget is typically the container
+class that holds all of the elements of the composite widget. For
+example, the parent class of the FileSelection widget is the
+Dialog class. Since our buttons will be arranged in a table, it
+might seem natural to make our parent class the Table
+class. Unfortunately, this turns out not to work. The creation of a
+widget is divided among two functions - a <CODE>WIDGETNAME_new()</CODE>
+function that the user calls, and a <CODE>WIDGETNAME_init()</CODE> function
+which does the basic work of initializing the widget which is
+independent of the arguments passed to the <CODE>_new()</CODE>
+function. Descendant widgets only call the <CODE>_init</CODE> function of
+their parent widget. But this division of labor doesn't work well for
+tables, which when created need to know the number of rows and
+columns in the table. Unless we want to duplicate most of the
+functionality of <CODE>gtk_table_new()</CODE> in our Tictactoe widget, we had
+best avoid deriving it from Table. For that reason, we derive it
+from VBox instead, and stick our table inside the VBox.
+<P>
+<H3>The header file</H3>
+
+<P>Each widget class has a header file which declares the object and
+class structures for that widget, along with public functions. 
+A couple of features are worth pointing out. To prevent duplicate
+definitions, we wrap the entire header file in:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#ifndef __TICTACTOE_H__
+#define __TICTACTOE_H__
+.
+.
+.
+#endif /* __TICTACTOE_H__ */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And to keep C++ programs that include the header file happy, in:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+.
+.
+.
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Along with the functions and structures, we declare three standard
+macros in our header file, <CODE>TICTACTOE(obj)</CODE>,
+<CODE>TICTACTOE_CLASS(klass)</CODE>, and <CODE>IS_TICTACTOE(obj)</CODE>, which 
cast a
+pointer into a pointer to the object or class structure, and check
+if an object is a Tictactoe widget respectively.
+<P>Here is the complete header file:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* tictactoe.h */
+
+#ifndef __TICTACTOE_H__
+#define __TICTACTOE_H__
+
+#include &lt;gdk/gdk.h>
+#include &lt;gtk/gtkvbox.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define TICTACTOE(obj)          GTK_CHECK_CAST (obj, tictactoe_get_type (), 
Tictactoe)
+#define TICTACTOE_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, 
tictactoe_get_type (), TictactoeClass)
+#define IS_TICTACTOE(obj)       GTK_CHECK_TYPE (obj, tictactoe_get_type ())
+
+
+typedef struct _Tictactoe       Tictactoe;
+typedef struct _TictactoeClass  TictactoeClass;
+
+struct _Tictactoe
+{
+  GtkVBox vbox;
+  
+  GtkWidget *buttons[3][3];
+};
+
+struct _TictactoeClass
+{
+  GtkVBoxClass parent_class;
+
+  void (* tictactoe) (Tictactoe *ttt);
+};
+
+guint          tictactoe_get_type        (void);
+GtkWidget*     tictactoe_new             (void);
+void           tictactoe_clear           (Tictactoe *ttt);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __TICTACTOE_H__ */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>The <CODE>_get_type()</CODE> function.</H3>
+
+<P>We now continue on to the implementation of our widget. A core
+function for every widget is the function
+<CODE>WIDGETNAME_get_type()</CODE>. This function, when first called, tells
+GTK about the widget class, and gets an ID that uniquely identifies
+the widget class. Upon subsequent calls, it just returns the ID.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint
+tictactoe_get_type ()
+{
+  static guint ttt_type = 0;
+
+  if (!ttt_type)
+    {
+      GtkTypeInfo ttt_info =
+      {
+        "Tictactoe",
+        sizeof (Tictactoe),
+        sizeof (TictactoeClass),
+        (GtkClassInitFunc) tictactoe_class_init,
+        (GtkObjectInitFunc) tictactoe_init,
+        (GtkArgSetFunc) NULL,
+        (GtkArgGetFunc) NULL
+      };
+
+      ttt_type = gtk_type_unique (gtk_vbox_get_type (), &amp;ttt_info);
+    }
+
+  return ttt_type;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The GtkTypeInfo structure has the following definition:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkTypeInfo
+{
+  gchar *type_name;
+  guint object_size;
+  guint class_size;
+  GtkClassInitFunc class_init_func;
+  GtkObjectInitFunc object_init_func;
+  GtkArgSetFunc arg_set_func;
+  GtkArgGetFunc arg_get_func;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The fields of this structure are pretty self-explanatory. We'll ignore
+the <CODE>arg_set_func</CODE> and <CODE>arg_get_func</CODE> fields here: they 
have an important, 
+but as yet largely
+unimplemented, role in allowing widget options to be conveniently set
+from interpreted languages. Once GTK has a correctly filled in copy of
+this structure, it knows how to create objects of a particular widget
+type. 
+<P>
+<H3>The <CODE>_class_init()</CODE> function</H3>
+
+<P>The <CODE>WIDGETNAME_class_init()</CODE> function initializes the fields of
+the widget's class structure, and sets up any signals for the
+class. For our Tictactoe widget it looks like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+
+enum {
+  TICTACTOE_SIGNAL,
+  LAST_SIGNAL
+};
+
+static gint tictactoe_signals[LAST_SIGNAL] = { 0 };
+
+static void
+tictactoe_class_init (TictactoeClass *class)
+{
+  GtkObjectClass *object_class;
+
+  object_class = (GtkObjectClass*) class;
+  
+  tictactoe_signals[TICTACTOE_SIGNAL] = gtk_signal_new ("tictactoe",
+                                         GTK_RUN_FIRST,
+                                         object_class->type,
+                                         GTK_SIGNAL_OFFSET (TictactoeClass, 
tictactoe),
+                                         gtk_signal_default_marshaller, 
GTK_TYPE_NONE, 0);
+
+
+  gtk_object_class_add_signals (object_class, tictactoe_signals, LAST_SIGNAL);
+
+  class->tictactoe = NULL;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Our widget has just one signal, the <CODE>tictactoe</CODE> signal that is
+invoked when a row, column, or diagonal is completely filled in. Not
+every composite widget needs signals, so if you are reading this for
+the first time, you may want to skip to the next section now, as
+things are going to get a bit complicated.
+<P>The function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_signal_new( const gchar         *name,
+                     GtkSignalRunType     run_type,
+                     GtkType              object_type,
+                     gint                 function_offset,
+                     GtkSignalMarshaller  marshaller,
+                     GtkType              return_val,
+                     guint                nparams,
+                     ...);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Creates a new signal. The parameters are:
+<P>
+<UL>
+<LI> <CODE>name</CODE>: The name of the signal.</LI>
+<LI> <CODE>run_type</CODE>: Whether the default handler runs before or after
+user handlers. Usually this will be <CODE>GTK_RUN_FIRST</CODE>, or 
<CODE>GTK_RUN_LAST</CODE>,
+although there are other possibilities.</LI>
+<LI> <CODE>object_type</CODE>: The ID of the object that this signal applies
+to. (It will also apply to that objects descendants.)</LI>
+<LI> <CODE>function_offset</CODE>: The offset within the class structure of
+a pointer to the default handler.</LI>
+<LI> <CODE>marshaller</CODE>: A function that is used to invoke the signal
+handler. For signal handlers that have no arguments other than the
+object that emitted the signal and user data, we can use the
+pre-supplied marshaller function 
<CODE>gtk_signal_default_marshaller</CODE>.</LI>
+<LI> <CODE>return_val</CODE>: The type of the return val.</LI>
+<LI> <CODE>nparams</CODE>: The number of parameters of the signal handler
+(other than the two default ones mentioned above)</LI>
+<LI> <CODE>...</CODE>: The types of the parameters.</LI>
+</UL>
+<P>When specifying types, the <CODE>GtkType</CODE> enumeration is used:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+typedef enum
+{
+  GTK_TYPE_INVALID,
+  GTK_TYPE_NONE,
+  GTK_TYPE_CHAR,
+  GTK_TYPE_BOOL,
+  GTK_TYPE_INT,
+  GTK_TYPE_UINT,
+  GTK_TYPE_LONG,
+  GTK_TYPE_ULONG,
+  GTK_TYPE_FLOAT,
+  GTK_TYPE_DOUBLE,
+  GTK_TYPE_STRING,
+  GTK_TYPE_ENUM,
+  GTK_TYPE_FLAGS,
+  GTK_TYPE_BOXED,
+  GTK_TYPE_FOREIGN,
+  GTK_TYPE_CALLBACK,
+  GTK_TYPE_ARGS,
+
+  GTK_TYPE_POINTER,
+
+  /* it'd be great if the next two could be removed eventually */
+  GTK_TYPE_SIGNAL,
+  GTK_TYPE_C_CALLBACK,
+
+  GTK_TYPE_OBJECT
+
+} GtkFundamentalType;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>gtk_signal_new()</CODE> returns a unique integer identifier for the
+signal, that we store in the <CODE>tictactoe_signals</CODE> array, which we
+index using an enumeration. (Conventionally, the enumeration elements
+are the signal name, uppercased, but here there would be a conflict
+with the <CODE>TICTACTOE()</CODE> macro, so we called it 
<CODE>TICTACTOE_SIGNAL</CODE>
+instead.
+<P>After creating our signals, we need to tell GTK to associate our
+signals with the Tictactoe class. We do that by calling
+<CODE>gtk_object_class_add_signals()</CODE>. We then set the pointer which
+points to the default handler for the "tictactoe" signal to NULL,
+indicating that there is no default action.
+<P>
+<H3>The <CODE>_init()</CODE> function.</H3>
+
+<P>Each widget class also needs a function to initialize the object
+structure. Usually, this function has the fairly limited role of
+setting the fields of the structure to default values. For composite
+widgets, however, this function also creates the component widgets.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static void
+tictactoe_init (Tictactoe *ttt)
+{
+  GtkWidget *table;
+  gint i,j;
+  
+  table = gtk_table_new (3, 3, TRUE);
+  gtk_container_add (GTK_CONTAINER(ttt), table);
+  gtk_widget_show (table);
+
+  for (i=0;i&lt;3; i++)
+    for (j=0;j&lt;3; j++)
+      {
+        ttt->buttons[i][j] = gtk_toggle_button_new ();
+        gtk_table_attach_defaults (GTK_TABLE(table), ttt->buttons[i][j], 
+                                   i, i+1, j, j+1);
+        gtk_signal_connect (GTK_OBJECT (ttt->buttons[i][j]), "toggled",
+                            GTK_SIGNAL_FUNC (tictactoe_toggle), ttt);
+        gtk_widget_set_usize (ttt->buttons[i][j], 20, 20);
+        gtk_widget_show (ttt->buttons[i][j]);
+      }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>And the rest...</H3>
+
+<P>There is one more function that every widget (except for base widget
+types like Bin that cannot be instantiated) needs to have - the
+function that the user calls to create an object of that type. This is
+conventionally called <CODE>WIDGETNAME_new()</CODE>. In some
+widgets, though not for the Tictactoe widgets, this function takes
+arguments, and does some setup based on the arguments. The other two
+functions are specific to the Tictactoe widget. 
+<P><CODE>tictactoe_clear()</CODE> is a public function that resets all the
+buttons in the widget to the up position. Note the use of
+<CODE>gtk_signal_handler_block_by_data()</CODE> to keep our signal handler for
+button toggles from being triggered unnecessarily.
+<P><CODE>tictactoe_toggle()</CODE> is the signal handler that is invoked when 
the
+user clicks on a button. It checks to see if there are any winning
+combinations that involve the toggled button, and if so, emits
+the "tictactoe" signal.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  
+GtkWidget*
+tictactoe_new ()
+{
+  return GTK_WIDGET ( gtk_type_new (tictactoe_get_type ()));
+}
+
+void           
+tictactoe_clear (Tictactoe *ttt)
+{
+  int i,j;
+
+  for (i=0;i&lt;3;i++)
+    for (j=0;j&lt;3;j++)
+      {
+        gtk_signal_handler_block_by_data (GTK_OBJECT(ttt->buttons[i][j]), ttt);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ttt->buttons[i][j]),
+                                     FALSE);
+        gtk_signal_handler_unblock_by_data (GTK_OBJECT(ttt->buttons[i][j]), 
ttt);
+      }
+}
+
+static void
+tictactoe_toggle (GtkWidget *widget, Tictactoe *ttt)
+{
+  int i,k;
+
+  static int rwins[8][3] = { { 0, 0, 0 }, { 1, 1, 1 }, { 2, 2, 2 },
+                             { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 },
+                             { 0, 1, 2 }, { 0, 1, 2 } };
+  static int cwins[8][3] = { { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 },
+                             { 0, 0, 0 }, { 1, 1, 1 }, { 2, 2, 2 },
+                             { 0, 1, 2 }, { 2, 1, 0 } };
+
+  int success, found;
+
+  for (k=0; k&lt;8; k++)
+    {
+      success = TRUE;
+      found = FALSE;
+
+      for (i=0;i&lt;3;i++)
+        {
+          success = success &amp;&amp; 
+            GTK_TOGGLE_BUTTON(ttt->buttons[rwins[k][i]][cwins[k][i]])->active;
+          found = found ||
+            ttt->buttons[rwins[k][i]][cwins[k][i]] == widget;
+        }
+      
+      if (success &amp;&amp; found)
+        {
+          gtk_signal_emit (GTK_OBJECT (ttt), 
+                           tictactoe_signals[TICTACTOE_SIGNAL]);
+          break;
+        }
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And finally, an example program using our Tictactoe widget:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#include &lt;gtk/gtk.h>
+#include "tictactoe.h"
+
+/* Invoked when a row, column or diagonal is completed */
+void
+win (GtkWidget *widget, gpointer data)
+{
+  g_print ("Yay!\n");
+  tictactoe_clear (TICTACTOE (widget));
+}
+
+int 
+main (int argc, char *argv[])
+{
+  GtkWidget *window;
+  GtkWidget *ttt;
+  
+  gtk_init (&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  
+  gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");
+  
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_exit), NULL);
+  
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  /* Create a new Tictactoe widget */
+  ttt = tictactoe_new ();
+  gtk_container_add (GTK_CONTAINER (window), ttt);
+  gtk_widget_show (ttt);
+
+  /* And attach to its "tictactoe" signal */
+  gtk_signal_connect (GTK_OBJECT (ttt), "tictactoe",
+                      GTK_SIGNAL_FUNC (win), NULL);
+
+  gtk_widget_show (window);
+  
+  gtk_main ();
+  
+  return 0;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss22.4">22.4 Creating a widget from scratch.</A>
+</H2>
+
+<H3>Introduction</H3>
+
+<P>In this section, we'll learn more about how widgets display themselves
+on the screen and interact with events. As an example of this, we'll
+create an analog dial widget with a pointer that the user can drag to
+set the value.
+<P>
+<H3>Displaying a widget on the screen</H3>
+
+<P>There are several steps that are involved in displaying on the screen.
+After the widget is created with a call to <CODE>WIDGETNAME_new()</CODE>,
+several more functions are needed:
+<P>
+<UL>
+<LI> <CODE>WIDGETNAME_realize()</CODE> is responsible for creating an X
+window for the widget if it has one.</LI>
+<LI> <CODE>WIDGETNAME_map()</CODE> is invoked after the user calls
+<CODE>gtk_widget_show()</CODE>. It is responsible for making sure the widget
+is actually drawn on the screen (<EM>mapped</EM>). For a container class,
+it must also make calls to <CODE>map()</CODE>> functions of any child 
widgets.</LI>
+<LI> <CODE>WIDGETNAME_draw()</CODE> is invoked when 
<CODE>gtk_widget_draw()</CODE>
+is called for the widget or one of its ancestors. It makes the actual
+calls to the drawing functions to draw the widget on the screen. For
+container widgets, this function must make calls to
+<CODE>gtk_widget_draw()</CODE> for its child widgets.</LI>
+<LI> <CODE>WIDGETNAME_expose()</CODE> is a handler for expose events for the
+widget. It makes the necessary calls to the drawing functions to draw
+the exposed portion on the screen. For container widgets, this
+function must generate expose events for its child widgets which don't
+have their own windows. (If they have their own windows, then X will
+generate the necessary expose events.)</LI>
+</UL>
+<P>You might notice that the last two functions are quite similar - each
+is responsible for drawing the widget on the screen. In fact many
+types of widgets don't really care about the difference between the
+two. The default <CODE>draw()</CODE> function in the widget class simply
+generates a synthetic expose event for the redrawn area. However, some
+types of widgets can save work by distinguishing between the two
+functions. For instance, if a widget has multiple X windows, then
+since expose events identify the exposed window, it can redraw only
+the affected window, which is not possible for calls to <CODE>draw()</CODE>.
+<P>Container widgets, even if they don't care about the difference for
+themselves, can't simply use the default <CODE>draw()</CODE> function because
+their child widgets might care about the difference. However,
+it would be wasteful to duplicate the drawing code between the two
+functions. The convention is that such widgets have a function called
+<CODE>WIDGETNAME_paint()</CODE> that does the actual work of drawing the
+widget, that is then called by the <CODE>draw()</CODE> and 
<CODE>expose()</CODE>
+functions.
+<P>In our example approach, since the dial widget is not a container
+widget, and only has a single window, we can take the simplest
+approach and use the default <CODE>draw()</CODE> function and only implement
+an <CODE>expose()</CODE> function.
+<P>
+<H3>The origins of the Dial Widget</H3>
+
+<P>Just as all land animals are just variants on the first amphibian that
+crawled up out of the mud, GTK widgets tend to start off as variants
+of some other, previously written widget. Thus, although this section
+is entitled "Creating a Widget from Scratch", the Dial widget really
+began with the source code for the Range widget. This was picked as a
+starting point because it would be nice if our Dial had the same
+interface as the Scale widgets which are just specialized descendants
+of the Range widget. So, though the source code is presented below in
+finished form, it should not be implied that it was written, <EM>ab
+initio</EM> in this fashion. Also, if you aren't yet familiar with
+how scale widgets work from the application writer's point of view, it
+would be a good idea to look them over before continuing.
+<P>
+<H3>The Basics</H3>
+
+<P>Quite a bit of our widget should look pretty familiar from the
+Tictactoe widget. First, we have a header file:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __GTK_DIAL_H__
+#define __GTK_DIAL_H__
+
+#include &lt;gdk/gdk.h>
+#include &lt;gtk/gtkadjustment.h>
+#include &lt;gtk/gtkwidget.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#define GTK_DIAL(obj)          GTK_CHECK_CAST (obj, gtk_dial_get_type (), 
GtkDial)
+#define GTK_DIAL_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_dial_get_type 
(), GtkDialClass)
+#define GTK_IS_DIAL(obj)       GTK_CHECK_TYPE (obj, gtk_dial_get_type ())
+
+
+typedef struct _GtkDial        GtkDial;
+typedef struct _GtkDialClass   GtkDialClass;
+
+struct _GtkDial
+{
+  GtkWidget widget;
+
+  /* update policy (GTK_UPDATE_[CONTINUOUS/DELAYED/DISCONTINUOUS]) */
+  guint policy : 2;
+
+  /* Button currently pressed or 0 if none */
+  guint8 button;
+
+  /* Dimensions of dial components */
+  gint radius;
+  gint pointer_width;
+
+  /* ID of update timer, or 0 if none */
+  guint32 timer;
+
+  /* Current angle */
+  gfloat angle;
+
+  /* Old values from adjustment stored so we know when something changes */
+  gfloat old_value;
+  gfloat old_lower;
+  gfloat old_upper;
+
+  /* The adjustment object that stores the data for this dial */
+  GtkAdjustment *adjustment;
+};
+
+struct _GtkDialClass
+{
+  GtkWidgetClass parent_class;
+};
+
+
+GtkWidget*     gtk_dial_new                    (GtkAdjustment *adjustment);
+guint          gtk_dial_get_type               (void);
+GtkAdjustment* gtk_dial_get_adjustment         (GtkDial      *dial);
+void           gtk_dial_set_update_policy      (GtkDial      *dial,
+                                                GtkUpdateType  policy);
+
+void           gtk_dial_set_adjustment         (GtkDial      *dial,
+                                                GtkAdjustment *adjustment);
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __GTK_DIAL_H__ */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Since there is quite a bit more going on in this widget than the last
+one, we have more fields in the data structure, but otherwise things
+are pretty similar.
+<P>Next, after including header files and declaring a few constants,
+we have some functions to provide information about the widget
+and initialize it:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#include &lt;math.h>
+#include &lt;stdio.h>
+#include &lt;gtk/gtkmain.h>
+#include &lt;gtk/gtksignal.h>
+
+#include "gtkdial.h"
+
+#define SCROLL_DELAY_LENGTH  300
+#define DIAL_DEFAULT_SIZE 100
+
+/* Forward declarations */
+
+[ omitted to save space ]
+
+/* Local data */
+
+static GtkWidgetClass *parent_class = NULL;
+
+guint
+gtk_dial_get_type ()
+{
+  static guint dial_type = 0;
+
+  if (!dial_type)
+    {
+      GtkTypeInfo dial_info =
+      {
+        "GtkDial",
+        sizeof (GtkDial),
+        sizeof (GtkDialClass),
+        (GtkClassInitFunc) gtk_dial_class_init,
+        (GtkObjectInitFunc) gtk_dial_init,
+        (GtkArgSetFunc) NULL,
+        (GtkArgGetFunc) NULL,
+      };
+
+      dial_type = gtk_type_unique (gtk_widget_get_type (), &amp;dial_info);
+    }
+
+  return dial_type;
+}
+
+static void
+gtk_dial_class_init (GtkDialClass *class)
+{
+  GtkObjectClass *object_class;
+  GtkWidgetClass *widget_class;
+
+  object_class = (GtkObjectClass*) class;
+  widget_class = (GtkWidgetClass*) class;
+
+  parent_class = gtk_type_class (gtk_widget_get_type ());
+
+  object_class->destroy = gtk_dial_destroy;
+
+  widget_class->realize = gtk_dial_realize;
+  widget_class->expose_event = gtk_dial_expose;
+  widget_class->size_request = gtk_dial_size_request;
+  widget_class->size_allocate = gtk_dial_size_allocate;
+  widget_class->button_press_event = gtk_dial_button_press;
+  widget_class->button_release_event = gtk_dial_button_release;
+  widget_class->motion_notify_event = gtk_dial_motion_notify;
+}
+
+static void
+gtk_dial_init (GtkDial *dial)
+{
+  dial->button = 0;
+  dial->policy = GTK_UPDATE_CONTINUOUS;
+  dial->timer = 0;
+  dial->radius = 0;
+  dial->pointer_width = 0;
+  dial->angle = 0.0;
+  dial->old_value = 0.0;
+  dial->old_lower = 0.0;
+  dial->old_upper = 0.0;
+  dial->adjustment = NULL;
+}
+
+GtkWidget*
+gtk_dial_new (GtkAdjustment *adjustment)
+{
+  GtkDial *dial;
+
+  dial = gtk_type_new (gtk_dial_get_type ());
+
+  if (!adjustment)
+    adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 
0.0);
+
+  gtk_dial_set_adjustment (dial, adjustment);
+
+  return GTK_WIDGET (dial);
+}
+
+static void
+gtk_dial_destroy (GtkObject *object)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (object != NULL);
+  g_return_if_fail (GTK_IS_DIAL (object));
+
+  dial = GTK_DIAL (object);
+
+  if (dial->adjustment)
+    gtk_object_unref (GTK_OBJECT (dial->adjustment));
+
+  if (GTK_OBJECT_CLASS (parent_class)->destroy)
+    (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that this <CODE>init()</CODE> function does less than for the Tictactoe
+widget, since this is not a composite widget, and the <CODE>new()</CODE>
+function does more, since it now has an argument. Also, note that when
+we store a pointer to the Adjustment object, we increment its
+reference count, (and correspondingly decrement it when we no longer
+use it) so that GTK can keep track of when it can be safely destroyed.
+<P>
+<P>Also, there are a few function to manipulate the widget's options:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkAdjustment*
+gtk_dial_get_adjustment (GtkDial *dial)
+{
+  g_return_val_if_fail (dial != NULL, NULL);
+  g_return_val_if_fail (GTK_IS_DIAL (dial), NULL);
+
+  return dial->adjustment;
+}
+
+void
+gtk_dial_set_update_policy (GtkDial      *dial,
+                             GtkUpdateType  policy)
+{
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  dial->policy = policy;
+}
+
+void
+gtk_dial_set_adjustment (GtkDial      *dial,
+                          GtkAdjustment *adjustment)
+{
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  if (dial->adjustment)
+    {
+      gtk_signal_disconnect_by_data (GTK_OBJECT (dial->adjustment), (gpointer) 
dial);
+      gtk_object_unref (GTK_OBJECT (dial->adjustment));
+    }
+
+  dial->adjustment = adjustment;
+  gtk_object_ref (GTK_OBJECT (dial->adjustment));
+
+  gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
+                      (GtkSignalFunc) gtk_dial_adjustment_changed,
+                      (gpointer) dial);
+  gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
+                      (GtkSignalFunc) gtk_dial_adjustment_value_changed,
+                      (gpointer) dial);
+
+  dial->old_value = adjustment->value;
+  dial->old_lower = adjustment->lower;
+  dial->old_upper = adjustment->upper;
+
+  gtk_dial_update (dial);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3><CODE>gtk_dial_realize()</CODE></H3>
+
+<P>Now we come to some new types of functions. First, we have a function
+that does the work of creating the X window. Notice that a mask is
+passed to the function <CODE>gdk_window_new()</CODE> which specifies which 
fields of
+the GdkWindowAttr structure actually have data in them (the remaining
+fields will be given default values). Also worth noting is the way the
+event mask of the widget is created. We call
+<CODE>gtk_widget_get_events()</CODE> to retrieve the event mask that the user
+has specified for this widget (with <CODE>gtk_widget_set_events()</CODE>), and
+add the events that we are interested in ourselves.
+<P>
+<P>After creating the window, we set its style and background, and put a
+pointer to the widget in the user data field of the GdkWindow. This
+last step allows GTK to dispatch events for this window to the correct
+widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static void
+gtk_dial_realize (GtkWidget *widget)
+{
+  GtkDial *dial;
+  GdkWindowAttr attributes;
+  gint attributes_mask;
+
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_DIAL (widget));
+
+  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+  dial = GTK_DIAL (widget);
+
+  attributes.x = widget->allocation.x;
+  attributes.y = widget->allocation.y;
+  attributes.width = widget->allocation.width;
+  attributes.height = widget->allocation.height;
+  attributes.wclass = GDK_INPUT_OUTPUT;
+  attributes.window_type = GDK_WINDOW_CHILD;
+  attributes.event_mask = gtk_widget_get_events (widget) | 
+    GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | 
+    GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
+    GDK_POINTER_MOTION_HINT_MASK;
+  attributes.visual = gtk_widget_get_visual (widget);
+  attributes.colormap = gtk_widget_get_colormap (widget);
+
+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+  widget->window = gdk_window_new (widget->parent->window, &amp;attributes, 
attributes_mask);
+
+  widget->style = gtk_style_attach (widget->style, widget->window);
+
+  gdk_window_set_user_data (widget->window, widget);
+
+  gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Size negotiation</H3>
+
+<P>Before the first time that the window containing a widget is
+displayed, and whenever the layout of the window changes, GTK asks
+each child widget for its desired size. This request is handled by the
+function <CODE>gtk_dial_size_request()</CODE>. Since our widget isn't a
+container widget, and has no real constraints on its size, we just
+return a reasonable default value.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static void 
+gtk_dial_size_request (GtkWidget      *widget,
+                       GtkRequisition *requisition)
+{
+  requisition->width = DIAL_DEFAULT_SIZE;
+  requisition->height = DIAL_DEFAULT_SIZE;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<P>After all the widgets have requested an ideal size, the layout of the
+window is computed and each child widget is notified of its actual
+size. Usually, this will be at least as large as the requested size,
+but if for instance the user has resized the window, it may
+occasionally be smaller than the requested size. The size notification
+is handled by the function <CODE>gtk_dial_size_allocate()</CODE>. Notice that
+as well as computing the sizes of some component pieces for future
+use, this routine also does the grunt work of moving the widget's X
+window into the new position and size.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static void
+gtk_dial_size_allocate (GtkWidget     *widget,
+                        GtkAllocation *allocation)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_DIAL (widget));
+  g_return_if_fail (allocation != NULL);
+
+  widget->allocation = *allocation;
+  if (GTK_WIDGET_REALIZED (widget))
+    {
+      dial = GTK_DIAL (widget);
+
+      gdk_window_move_resize (widget->window,
+                              allocation->x, allocation->y,
+                              allocation->width, allocation->height);
+
+      dial->radius = MAX(allocation->width,allocation->height) * 0.45;
+      dial->pointer_width = dial->radius / 5;
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+.
+<P>
+<H3><CODE>gtk_dial_expose()</CODE></H3>
+
+<P>As mentioned above, all the drawing of this widget is done in the
+handler for expose events. There's not much to remark on here except
+the use of the function <CODE>gtk_draw_polygon</CODE> to draw the pointer with
+three dimensional shading according to the colors stored in the
+widget's style.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static gint
+gtk_dial_expose (GtkWidget      *widget,
+                 GdkEventExpose *event)
+{
+  GtkDial *dial;
+  GdkPoint points[3];
+  gdouble s,c;
+  gdouble theta;
+  gint xc, yc;
+  gint tick_length;
+  gint i;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  if (event->count > 0)
+    return FALSE;
+  
+  dial = GTK_DIAL (widget);
+
+  gdk_window_clear_area (widget->window,
+                         0, 0,
+                         widget->allocation.width,
+                         widget->allocation.height);
+
+  xc = widget->allocation.width/2;
+  yc = widget->allocation.height/2;
+
+  /* Draw ticks */
+
+  for (i=0; i&lt;25; i++)
+    {
+      theta = (i*M_PI/18. - M_PI/6.);
+      s = sin(theta);
+      c = cos(theta);
+
+      tick_length = (i%6 == 0) ? dial->pointer_width : dial->pointer_width/2;
+      
+      gdk_draw_line (widget->window,
+                     widget->style->fg_gc[widget->state],
+                     xc + c*(dial->radius - tick_length),
+                     yc - s*(dial->radius - tick_length),
+                     xc + c*dial->radius,
+                     yc - s*dial->radius);
+    }
+
+  /* Draw pointer */
+
+  s = sin(dial->angle);
+  c = cos(dial->angle);
+
+
+  points[0].x = xc + s*dial->pointer_width/2;
+  points[0].y = yc + c*dial->pointer_width/2;
+  points[1].x = xc + c*dial->radius;
+  points[1].y = yc - s*dial->radius;
+  points[2].x = xc - s*dial->pointer_width/2;
+  points[2].y = yc - c*dial->pointer_width/2;
+
+  gtk_draw_polygon (widget->style,
+                    widget->window,
+                    GTK_STATE_NORMAL,
+                    GTK_SHADOW_OUT,
+                    points, 3,
+                    TRUE);
+  
+  return FALSE;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Event handling</H3>
+
+<P>The rest of the widget's code handles various types of events, and
+isn't too different from what would be found in many GTK
+applications. Two types of events can occur - either the user can
+click on the widget with the mouse and drag to move the pointer, or
+the value of the Adjustment object can change due to some external
+circumstance. 
+<P>When the user clicks on the widget, we check to see if the click was
+appropriately near the pointer, and if so, store the button that the
+user clicked with in the <CODE>button</CODE> field of the widget
+structure, and grab all mouse events with a call to
+<CODE>gtk_grab_add()</CODE>. Subsequent motion of the mouse causes the
+value of the control to be recomputed (by the function
+<CODE>gtk_dial_update_mouse</CODE>). Depending on the policy that has been
+set, "value_changed" events are either generated instantly
+(<CODE>GTK_UPDATE_CONTINUOUS</CODE>), after a delay in a timer added with
+<CODE>gtk_timeout_add()</CODE> (<CODE>GTK_UPDATE_DELAYED</CODE>), or only when 
the
+button is released (<CODE>GTK_UPDATE_DISCONTINUOUS</CODE>).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static gint
+gtk_dial_button_press (GtkWidget      *widget,
+                       GdkEventButton *event)
+{
+  GtkDial *dial;
+  gint dx, dy;
+  double s, c;
+  double d_parallel;
+  double d_perpendicular;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  dial = GTK_DIAL (widget);
+
+  /* Determine if button press was within pointer region - we 
+     do this by computing the parallel and perpendicular distance of
+     the point where the mouse was pressed from the line passing through
+     the pointer */
+  
+  dx = event->x - widget->allocation.width / 2;
+  dy = widget->allocation.height / 2 - event->y;
+  
+  s = sin(dial->angle);
+  c = cos(dial->angle);
+  
+  d_parallel = s*dy + c*dx;
+  d_perpendicular = fabs(s*dx - c*dy);
+  
+  if (!dial->button &amp;&amp;
+      (d_perpendicular &lt; dial->pointer_width/2) &amp;&amp;
+      (d_parallel > - dial->pointer_width))
+    {
+      gtk_grab_add (widget);
+
+      dial->button = event->button;
+
+      gtk_dial_update_mouse (dial, event->x, event->y);
+    }
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_button_release (GtkWidget      *widget,
+                          GdkEventButton *event)
+{
+  GtkDial *dial;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  dial = GTK_DIAL (widget);
+
+  if (dial->button == event->button)
+    {
+      gtk_grab_remove (widget);
+
+      dial->button = 0;
+
+      if (dial->policy == GTK_UPDATE_DELAYED)
+        gtk_timeout_remove (dial->timer);
+      
+      if ((dial->policy != GTK_UPDATE_CONTINUOUS) &amp;&amp;
+          (dial->old_value != dial->adjustment->value))
+        gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), 
"value_changed");
+    }
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_motion_notify (GtkWidget      *widget,
+                         GdkEventMotion *event)
+{
+  GtkDial *dial;
+  GdkModifierType mods;
+  gint x, y, mask;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  dial = GTK_DIAL (widget);
+
+  if (dial->button != 0)
+    {
+      x = event->x;
+      y = event->y;
+
+      if (event->is_hint || (event->window != widget->window))
+        gdk_window_get_pointer (widget->window, &amp;x, &amp;y, &amp;mods);
+
+      switch (dial->button)
+        {
+        case 1:
+          mask = GDK_BUTTON1_MASK;
+          break;
+        case 2:
+          mask = GDK_BUTTON2_MASK;
+          break;
+        case 3:
+          mask = GDK_BUTTON3_MASK;
+          break;
+        default:
+          mask = 0;
+          break;
+        }
+
+      if (mods &amp; mask)
+        gtk_dial_update_mouse (dial, x,y);
+    }
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_timer (GtkDial *dial)
+{
+  g_return_val_if_fail (dial != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (dial), FALSE);
+
+  if (dial->policy == GTK_UPDATE_DELAYED)
+    gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
+
+  return FALSE;
+}
+
+static void
+gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
+{
+  gint xc, yc;
+  gfloat old_value;
+
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  xc = GTK_WIDGET(dial)->allocation.width / 2;
+  yc = GTK_WIDGET(dial)->allocation.height / 2;
+
+  old_value = dial->adjustment->value;
+  dial->angle = atan2(yc-y, x-xc);
+
+  if (dial->angle &lt; -M_PI/2.)
+    dial->angle += 2*M_PI;
+
+  if (dial->angle &lt; -M_PI/6)
+    dial->angle = -M_PI/6;
+
+  if (dial->angle > 7.*M_PI/6.)
+    dial->angle = 7.*M_PI/6.;
+
+  dial->adjustment->value = dial->adjustment->lower + (7.*M_PI/6 - 
dial->angle) *
+    (dial->adjustment->upper - dial->adjustment->lower) / (4.*M_PI/3.);
+
+  if (dial->adjustment->value != old_value)
+    {
+      if (dial->policy == GTK_UPDATE_CONTINUOUS)
+        {
+          gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), 
"value_changed");
+        }
+      else
+        {
+          gtk_widget_draw (GTK_WIDGET(dial), NULL);
+
+          if (dial->policy == GTK_UPDATE_DELAYED)
+            {
+              if (dial->timer)
+                gtk_timeout_remove (dial->timer);
+
+              dial->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,
+                                             (GtkFunction) gtk_dial_timer,
+                                             (gpointer) dial);
+            }
+        }
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Changes to the Adjustment by external means are communicated to our
+widget by the "changed" and "value_changed" signals. The handlers
+for these functions call <CODE>gtk_dial_update()</CODE> to validate the
+arguments, compute the new pointer angle, and redraw the widget (by
+calling <CODE>gtk_widget_draw()</CODE>).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static void
+gtk_dial_update (GtkDial *dial)
+{
+  gfloat new_value;
+  
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  new_value = dial->adjustment->value;
+  
+  if (new_value &lt; dial->adjustment->lower)
+    new_value = dial->adjustment->lower;
+
+  if (new_value > dial->adjustment->upper)
+    new_value = dial->adjustment->upper;
+
+  if (new_value != dial->adjustment->value)
+    {
+      dial->adjustment->value = new_value;
+      gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
+    }
+
+  dial->angle = 7.*M_PI/6. - (new_value - dial->adjustment->lower) * 
4.*M_PI/3. /
+    (dial->adjustment->upper - dial->adjustment->lower);
+
+  gtk_widget_draw (GTK_WIDGET(dial), NULL);
+}
+
+static void
+gtk_dial_adjustment_changed (GtkAdjustment *adjustment,
+                              gpointer       data)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (adjustment != NULL);
+  g_return_if_fail (data != NULL);
+
+  dial = GTK_DIAL (data);
+
+  if ((dial->old_value != adjustment->value) ||
+      (dial->old_lower != adjustment->lower) ||
+      (dial->old_upper != adjustment->upper))
+    {
+      gtk_dial_update (dial);
+
+      dial->old_value = adjustment->value;
+      dial->old_lower = adjustment->lower;
+      dial->old_upper = adjustment->upper;
+    }
+}
+
+static void
+gtk_dial_adjustment_value_changed (GtkAdjustment *adjustment,
+                                    gpointer       data)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (adjustment != NULL);
+  g_return_if_fail (data != NULL);
+
+  dial = GTK_DIAL (data);
+
+  if (dial->old_value != adjustment->value)
+    {
+      gtk_dial_update (dial);
+
+      dial->old_value = adjustment->value;
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Possible Enhancements</H3>
+
+<P>The Dial widget as we've described it so far runs about 670 lines of
+code. Although that might sound like a fair bit, we've really
+accomplished quite a bit with that much code, especially since much of
+that length is headers and boilerplate. However, there are quite a few
+more enhancements that could be made to this widget:
+<P>
+<UL>
+<LI> If you try this widget out, you'll find that there is some
+flashing as the pointer is dragged around. This is because the entire
+widget is erased every time the pointer is moved before being
+redrawn. Often, the best way to handle this problem is to draw to an
+offscreen pixmap, then copy the final results onto the screen in one
+step. (The ProgressBar widget draws itself in this fashion.)
+</LI>
+<LI> The user should be able to use the up and down arrow keys to
+increase and decrease the value.
+</LI>
+<LI> It would be nice if the widget had buttons to increase and
+decrease the value in small or large steps. Although it would be
+possible to use embedded Button widgets for this, we would also like
+the buttons to auto-repeat when held down, as the arrows on a
+scrollbar do. Most of the code to implement this type of behavior can
+be found in the Range widget.
+</LI>
+<LI> The Dial widget could be made into a container widget with a
+single child widget positioned at the bottom between the buttons
+mentioned above. The user could then add their choice of a label or
+entry widget to display the current value of the dial.
+</LI>
+</UL>
+<P>
+<H2><A NAME="ss22.5">22.5 Learning More</A>
+</H2>
+
+<P>Only a small part of the many details involved in creating widgets
+could be described above. If you want to write your own widgets, the
+best source of examples is the GTK source itself. Ask yourself some
+questions about the widget you want to write: IS it a Container
+widget? Does it have its own window? Is it a modification of an
+existing widget? Then find a similar widget, and start making changes.
+Good luck!
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-23.html">Next</A>
+<A HREF="gtk_tut-21.html">Previous</A>
+<A HREF="gtk_tut.html#toc22">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-23.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-23.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-23.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-23.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,826 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Scribble, A Simple Example Drawing Program</TITLE>
+ <LINK HREF="gtk_tut-24.html" REL=next>
+ <LINK HREF="gtk_tut-22.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc23" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-24.html">Next</A>
+<A HREF="gtk_tut-22.html">Previous</A>
+<A HREF="gtk_tut.html#toc23">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s23">23. Scribble, A Simple Example Drawing Program</A></H2>
+
+<H2><A NAME="ss23.1">23.1 Overview</A>
+</H2>
+
+<P>In this section, we will build a simple drawing program. In the
+process, we will examine how to handle mouse events, how to draw in a
+window, and how to do drawing better by using a backing pixmap. After
+creating the simple drawing program, we will extend it by adding
+support for XInput devices, such as drawing tablets. GTK provides
+support routines which makes getting extended information, such as
+pressure and tilt, from such devices quite easy.
+<P>
+<H2><A NAME="ss23.2">23.2 Event Handling</A>
+</H2>
+
+<P>The GTK signals we have already discussed are for high-level actions,
+such as a menu item being selected. However, sometimes it is useful to
+learn about lower-level occurrences, such as the mouse being moved, or
+a key being pressed. There are also GTK signals corresponding to these
+low-level <EM>events</EM>. The handlers for these signals have an
+extra parameter which is a pointer to a structure containing
+information about the event. For instance, motion event handlers are
+passed a pointer to a GdkEventMotion structure which looks (in part)
+like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GdkEventMotion
+{
+  GdkEventType type;
+  GdkWindow *window;
+  guint32 time;
+  gdouble x;
+  gdouble y;
+  ...
+  guint state;
+  ...
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>type</CODE> will be set to the event type, in this case
+<CODE>GDK_MOTION_NOTIFY</CODE>, window is the window in which the event
+occurred. <CODE>x</CODE> and <CODE>y</CODE> give the coordinates of the event.
+<CODE>state</CODE> specifies the modifier state when the event
+occurred (that is, it specifies which modifier keys and mouse buttons
+were pressed). It is the bitwise OR of some of the following:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GDK_SHIFT_MASK  
+GDK_LOCK_MASK   
+GDK_CONTROL_MASK
+GDK_MOD1_MASK   
+GDK_MOD2_MASK   
+GDK_MOD3_MASK   
+GDK_MOD4_MASK   
+GDK_MOD5_MASK   
+GDK_BUTTON1_MASK
+GDK_BUTTON2_MASK
+GDK_BUTTON3_MASK
+GDK_BUTTON4_MASK
+GDK_BUTTON5_MASK
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As for other signals, to determine what happens when an event occurs
+we call <CODE>gtk_signal_connect()</CODE>. But we also need let GTK
+know which events we want to be notified about. To do this, we call
+the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_widget_set_events (GtkWidget *widget,
+                            gint      events);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The second field specifies the events we are interested in. It
+is the bitwise OR of constants that specify different types
+of events. For future reference the event types are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GDK_EXPOSURE_MASK
+GDK_POINTER_MOTION_MASK
+GDK_POINTER_MOTION_HINT_MASK
+GDK_BUTTON_MOTION_MASK     
+GDK_BUTTON1_MOTION_MASK    
+GDK_BUTTON2_MOTION_MASK    
+GDK_BUTTON3_MOTION_MASK    
+GDK_BUTTON_PRESS_MASK      
+GDK_BUTTON_RELEASE_MASK    
+GDK_KEY_PRESS_MASK         
+GDK_KEY_RELEASE_MASK       
+GDK_ENTER_NOTIFY_MASK      
+GDK_LEAVE_NOTIFY_MASK      
+GDK_FOCUS_CHANGE_MASK      
+GDK_STRUCTURE_MASK         
+GDK_PROPERTY_CHANGE_MASK   
+GDK_PROXIMITY_IN_MASK      
+GDK_PROXIMITY_OUT_MASK     
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There are a few subtle points that have to be observed when calling
+<CODE>gtk_widget_set_events()</CODE>. First, it must be called before the X 
window
+for a GTK widget is created. In practical terms, this means you
+should call it immediately after creating the widget. Second, the
+widget must have an associated X window. For efficiency, many widget
+types do not have their own window, but draw in their parent's window.
+These widgets are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkAlignment
+GtkArrow
+GtkBin
+GtkBox
+GtkImage
+GtkItem
+GtkLabel
+GtkPixmap
+GtkScrolledWindow
+GtkSeparator
+GtkTable
+GtkAspectFrame
+GtkFrame
+GtkVBox
+GtkHBox
+GtkVSeparator
+GtkHSeparator
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To capture events for these widgets, you need to use an EventBox
+widget. See the section on the 
+<A HREF="gtk_tut-10.html#sec_EventBox">EventBox</A> widget for details.
+<P>For our drawing program, we want to know when the mouse button is
+pressed and when the mouse is moved, so we specify
+<CODE>GDK_POINTER_MOTION_MASK</CODE> and <CODE>GDK_BUTTON_PRESS_MASK</CODE>. 
We also
+want to know when we need to redraw our window, so we specify
+<CODE>GDK_EXPOSURE_MASK</CODE>. Although we want to be notified via a
+Configure event when our window size changes, we don't have to specify
+the corresponding <CODE>GDK_STRUCTURE_MASK</CODE> flag, because it is
+automatically specified for all windows.
+<P>It turns out, however, that there is a problem with just specifying
+<CODE>GDK_POINTER_MOTION_MASK</CODE>. This will cause the server to add a new
+motion event to the event queue every time the user moves the mouse.
+Imagine that it takes us 0.1 seconds to handle a motion event, but the
+X server queues a new motion event every 0.05 seconds. We will soon
+get way behind the users drawing. If the user draws for 5 seconds,
+it will take us another 5 seconds to catch up after they release 
+the mouse button! What we would like is to only get one motion
+event for each event we process. The way to do this is to 
+specify <CODE>GDK_POINTER_MOTION_HINT_MASK</CODE>. 
+<P>When we specify <CODE>GDK_POINTER_MOTION_HINT_MASK</CODE>, the server sends
+us a motion event the first time the pointer moves after entering
+our window, or after a button press or release event. Subsequent 
+motion events will be suppressed until we explicitly ask for
+the position of the pointer using the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GdkWindow*    gdk_window_get_pointer     (GdkWindow       *window,
+                                          gint            *x,
+                                          gint            *y,
+                                          GdkModifierType *mask);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>(There is another function, <CODE>gtk_widget_get_pointer()</CODE> which
+has a simpler interface, but turns out not to be very useful, since
+it only retrieves the position of the mouse, not whether the buttons
+are pressed.)
+<P>The code to set the events for our window then looks like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+                      (GtkSignalFunc) expose_event, NULL);
+  gtk_signal_connect (GTK_OBJECT(drawing_area),"configure_event",
+                      (GtkSignalFunc) configure_event, NULL);
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",
+                      (GtkSignalFunc) motion_notify_event, NULL);
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+                      (GtkSignalFunc) button_press_event, NULL);
+
+  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+                         | GDK_LEAVE_NOTIFY_MASK
+                         | GDK_BUTTON_PRESS_MASK
+                         | GDK_POINTER_MOTION_MASK
+                         | GDK_POINTER_MOTION_HINT_MASK);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>We'll save the "expose_event" and "configure_event" handlers for
+later. The "motion_notify_event" and "button_press_event" handlers
+are pretty simple:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static gint
+button_press_event (GtkWidget *widget, GdkEventButton *event)
+{
+  if (event->button == 1 &amp;&amp; pixmap != NULL)
+      draw_brush (widget, event->x, event->y);
+
+  return TRUE;
+}
+
+static gint
+motion_notify_event (GtkWidget *widget, GdkEventMotion *event)
+{
+  int x, y;
+  GdkModifierType state;
+
+  if (event->is_hint)
+    gdk_window_get_pointer (event->window, &amp;x, &amp;y, &amp;state);
+  else
+    {
+      x = event->x;
+      y = event->y;
+      state = event->state;
+    }
+    
+  if (state &amp; GDK_BUTTON1_MASK &amp;&amp; pixmap != NULL)
+    draw_brush (widget, x, y);
+  
+  return TRUE;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss23.3">23.3 The DrawingArea Widget, And Drawing</A>
+</H2>
+
+<P>We now turn to the process of drawing on the screen. The 
+widget we use for this is the DrawingArea widget. A drawing area
+widget is essentially an X window and nothing more. It is a blank
+canvas in which we can draw whatever we like. A drawing area
+is created using the call:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget* gtk_drawing_area_new        (void);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A default size for the widget can be specified by calling:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void       gtk_drawing_area_size       (GtkDrawingArea      *darea,
+                                        gint                 width,
+                                        gint                 height);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This default size can be overridden, as is true for all widgets,
+by calling <CODE>gtk_widget_set_usize()</CODE>, and that, in turn, can
+be overridden if the user manually resizes the the window containing
+the drawing area.
+<P>It should be noted that when we create a DrawingArea widget, we are
+<EM>completely</EM> responsible for drawing the contents. If our
+window is obscured then uncovered, we get an exposure event and must
+redraw what was previously hidden.
+<P>Having to remember everything that was drawn on the screen so we
+can properly redraw it can, to say the least, be a nuisance. In
+addition, it can be visually distracting if portions of the
+window are cleared, then redrawn step by step. The solution to
+this problem is to use an offscreen <EM>backing pixmap</EM>.
+Instead of drawing directly to the screen, we draw to an image
+stored in server memory but not displayed, then when the image
+changes or new portions of the image are displayed, we copy the
+relevant portions onto the screen.
+<P>To create an offscreen pixmap, we call the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GdkPixmap* gdk_pixmap_new               (GdkWindow  *window,
+                                         gint        width,
+                                         gint        height,
+                                         gint        depth);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>window</CODE> parameter specifies a GDK window that this pixmap
+takes some of its properties from. <CODE>width</CODE> and <CODE>height</CODE>
+specify the size of the pixmap. <CODE>depth</CODE> specifies the <EM>color
+depth</EM>, that is the number of bits per pixel, for the new window.
+If the depth is specified as <CODE>-1</CODE>, it will match the depth
+of <CODE>window</CODE>.
+<P>We create the pixmap in our "configure_event" handler. This event
+is generated whenever the window changes size, including when it
+is originally created.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* Backing pixmap for drawing area */
+static GdkPixmap *pixmap = NULL;
+
+/* Create a new backing pixmap of the appropriate size */
+static gint
+configure_event (GtkWidget *widget, GdkEventConfigure *event)
+{
+  if (pixmap)
+    gdk_pixmap_unref(pixmap);
+
+  pixmap = gdk_pixmap_new(widget->window,
+                          widget->allocation.width,
+                          widget->allocation.height,
+                          -1);
+  gdk_draw_rectangle (pixmap,
+                      widget->style->white_gc,
+                      TRUE,
+                      0, 0,
+                      widget->allocation.width,
+                      widget->allocation.height);
+
+  return TRUE;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The call to <CODE>gdk_draw_rectangle()</CODE> clears the pixmap
+initially to white. We'll say more about that in a moment.
+<P>Our exposure event handler then simply copies the relevant portion
+of the pixmap onto the screen (we determine the area we need
+to redraw by using the event->area field of the exposure event):
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* Redraw the screen from the backing pixmap */
+static gint
+expose_event (GtkWidget *widget, GdkEventExpose *event)
+{
+  gdk_draw_pixmap(widget->window,
+                  widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                  pixmap,
+                  event->area.x, event->area.y,
+                  event->area.x, event->area.y,
+                  event->area.width, event->area.height);
+
+  return FALSE;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>We've now seen how to keep the screen up to date with our pixmap, but
+how do we actually draw interesting stuff on our pixmap?  There are a
+large number of calls in GTK's GDK library for drawing on
+<EM>drawables</EM>. A drawable is simply something that can be drawn
+upon. It can be a window, a pixmap, or a bitmap (a black and white
+image).  We've already seen two such calls above,
+<CODE>gdk_draw_rectangle()</CODE> and <CODE>gdk_draw_pixmap()</CODE>. The
+complete list is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gdk_draw_line ()
+gdk_draw_rectangle ()
+gdk_draw_arc ()
+gdk_draw_polygon ()
+gdk_draw_string ()
+gdk_draw_text ()
+gdk_draw_pixmap ()
+gdk_draw_bitmap ()
+gdk_draw_image ()
+gdk_draw_points ()
+gdk_draw_segments ()
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>See the reference documentation or the header file
+<CODE>&lt;gdk/gdk.h&gt;</CODE> for further details on these functions.
+These functions all share the same first two arguments. The first
+argument is the drawable to draw upon, the second argument is a
+<EM>graphics context</EM> (GC). 
+<P>A graphics context encapsulates information about things such as
+foreground and background color and line width. GDK has a full set of
+functions for creating and modifying graphics contexts, but to keep
+things simple we'll just use predefined graphics contexts. Each widget
+has an associated style. (Which can be modified in a gtkrc file, see
+the section GTK's rc file.) This, among other things, stores a number
+of graphics contexts. Some examples of accessing these graphics
+contexts are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+widget->style->white_gc
+widget->style->black_gc
+widget->style->fg_gc[GTK_STATE_NORMAL]
+widget->style->bg_gc[GTK_WIDGET_STATE(widget)]
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The fields <CODE>fg_gc</CODE>, <CODE>bg_gc</CODE>, <CODE>dark_gc</CODE>, and
+<CODE>light_gc</CODE> are indexed by a parameter of type
+<CODE>GtkStateType</CODE> which can take on the values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GTK_STATE_NORMAL,
+GTK_STATE_ACTIVE,
+GTK_STATE_PRELIGHT,
+GTK_STATE_SELECTED,
+GTK_STATE_INSENSITIVE
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>For instance, for <CODE>GTK_STATE_SELECTED</CODE> the default foreground
+color is white and the default background color, dark blue.
+<P>Our function <CODE>draw_brush()</CODE>, which does the actual drawing
+on the screen, is then:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* Draw a rectangle on the screen */
+static void
+draw_brush (GtkWidget *widget, gdouble x, gdouble y)
+{
+  GdkRectangle update_rect;
+
+  update_rect.x = x - 5;
+  update_rect.y = y - 5;
+  update_rect.width = 10;
+  update_rect.height = 10;
+  gdk_draw_rectangle (pixmap,
+                      widget->style->black_gc,
+                      TRUE,
+                      update_rect.x, update_rect.y,
+                      update_rect.width, update_rect.height);
+  gtk_widget_draw (widget, &amp;update_rect);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>After we draw the rectangle representing the brush onto the pixmap,
+we call the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void       gtk_widget_draw                (GtkWidget           *widget,
+                                           GdkRectangle        *area);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>which notifies X that the area given by the <CODE>area</CODE> parameter
+needs to be updated. X will eventually generate an expose event
+(possibly combining the areas passed in several calls to
+<CODE>gtk_widget_draw()</CODE>) which will cause our expose event handler
+to copy the relevant portions to the screen.
+<P>We have now covered the entire drawing program except for a few
+mundane details like creating the main window.
+<P>
+<H2><A NAME="ss23.4">23.4 Adding XInput support</A>
+</H2>
+
+<P>It is now possible to buy quite inexpensive input devices such 
+as drawing tablets, which allow drawing with a much greater
+ease of artistic expression than does a mouse. The simplest way
+to use such devices is simply as a replacement for the mouse,
+but that misses out many of the advantages of these devices,
+such as:
+<P>
+<UL>
+<LI> Pressure sensitivity</LI>
+<LI> Tilt reporting</LI>
+<LI> Sub-pixel positioning</LI>
+<LI> Multiple inputs (for example, a stylus with a point and eraser)</LI>
+</UL>
+<P>For information about the XInput extension, see the 
+<A 
HREF="http://www.msc.cornell.edu/~otaylor/xinput/XInput-HOWTO.html";>XInput-HOWTO</A>.
+<P>If we examine the full definition of, for example, the GdkEventMotion
+structure, we see that it has fields to support extended device
+information.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GdkEventMotion
+{
+  GdkEventType type;
+  GdkWindow *window;
+  guint32 time;
+  gdouble x;
+  gdouble y;
+  gdouble pressure;
+  gdouble xtilt;
+  gdouble ytilt;
+  guint state;
+  gint16 is_hint;
+  GdkInputSource source;
+  guint32 deviceid;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>pressure</CODE> gives the pressure as a floating point number between
+0 and 1. <CODE>xtilt</CODE> and <CODE>ytilt</CODE> can take on values between 
+-1 and 1, corresponding to the degree of tilt in each direction.
+<CODE>source</CODE> and <CODE>deviceid</CODE> specify the device for which the
+event occurred in two different ways. <CODE>source</CODE> gives some simple
+information about the type of device. It can take the enumeration
+values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GDK_SOURCE_MOUSE
+GDK_SOURCE_PEN
+GDK_SOURCE_ERASER
+GDK_SOURCE_CURSOR
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>deviceid</CODE> specifies a unique numeric ID for the device. This can
+be used to find out further information about the device using the
+<CODE>gdk_input_list_devices()</CODE> call (see below). The special value
+<CODE>GDK_CORE_POINTER</CODE> is used for the core pointer device. (Usually
+the mouse.)
+<P>
+<H3>Enabling extended device information</H3>
+
+<P>To let GTK know about our interest in the extended device information,
+we merely have to add a single line to our program:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_widget_set_extension_events (drawing_area, GDK_EXTENSION_EVENTS_CURSOR);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>By giving the value <CODE>GDK_EXTENSION_EVENTS_CURSOR</CODE> we say that
+we are interested in extension events, but only if we don't have
+to draw our own cursor. See the section 
+<A HREF="#sec_Further_Sophistications">Further Sophistications</A> below
+for more information about drawing the cursor. We could also 
+give the values <CODE>GDK_EXTENSION_EVENTS_ALL</CODE> if we were willing 
+to draw our own cursor, or <CODE>GDK_EXTENSION_EVENTS_NONE</CODE> to revert
+back to the default condition.
+<P>This is not completely the end of the story however. By default,
+no extension devices are enabled. We need a mechanism to allow
+users to enable and configure their extension devices. GTK provides
+the InputDialog widget to automate this process. The following
+procedure manages an InputDialog widget. It creates the dialog if
+it isn't present, and raises it to the top otherwise.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void
+input_dialog_destroy (GtkWidget *w, gpointer data)
+{
+  *((GtkWidget **)data) = NULL;
+}
+
+void
+create_input_dialog ()
+{
+  static GtkWidget *inputd = NULL;
+
+  if (!inputd)
+    {
+      inputd = gtk_input_dialog_new();
+
+      gtk_signal_connect (GTK_OBJECT(inputd), "destroy",
+                          (GtkSignalFunc)input_dialog_destroy, &amp;inputd);
+      gtk_signal_connect_object 
(GTK_OBJECT(GTK_INPUT_DIALOG(inputd)->close_button),
+                                 "clicked",
+                                 (GtkSignalFunc)gtk_widget_hide,
+                                 GTK_OBJECT(inputd));
+      gtk_widget_hide ( GTK_INPUT_DIALOG(inputd)->save_button);
+
+      gtk_widget_show (inputd);
+    }
+  else
+    {
+      if (!GTK_WIDGET_MAPPED(inputd))
+        gtk_widget_show(inputd);
+      else
+        gdk_window_raise(inputd->window);
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>(You might want to take note of the way we handle this dialog.  By
+connecting to the "destroy" signal, we make sure that we don't keep a
+pointer to dialog around after it is destroyed - that could lead to a
+segfault.)
+<P>The InputDialog has two buttons "Close" and "Save", which by default
+have no actions assigned to them. In the above function we make
+"Close" hide the dialog, hide the "Save" button, since we don't
+implement saving of XInput options in this program.
+<P>
+<H3>Using extended device information</H3>
+
+<P>Once we've enabled the device, we can just use the extended 
+device information in the extra fields of the event structures.
+In fact, it is always safe to use this information since these
+fields will have reasonable default values even when extended
+events are not enabled.
+<P>Once change we do have to make is to call
+<CODE>gdk_input_window_get_pointer()</CODE> instead of
+<CODE>gdk_window_get_pointer</CODE>. This is necessary because
+<CODE>gdk_window_get_pointer</CODE> doesn't return the extended device
+information.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gdk_input_window_get_pointer( GdkWindow       *window,
+                                   guint32         deviceid,
+                                   gdouble         *x,
+                                   gdouble         *y,
+                                   gdouble         *pressure,
+                                   gdouble         *xtilt,
+                                   gdouble         *ytilt,
+                                   GdkModifierType *mask);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When calling this function, we need to specify the device ID as
+well as the window. Usually, we'll get the device ID from the
+<CODE>deviceid</CODE> field of an event structure. Again, this function
+will return reasonable values when extension events are not
+enabled. (In this case, <CODE>event->deviceid</CODE> will have the value
+<CODE>GDK_CORE_POINTER</CODE>).
+<P>So the basic structure of our button-press and motion event handlers
+doesn't change much - we just need to add code to deal with the
+extended information.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static gint
+button_press_event (GtkWidget *widget, GdkEventButton *event)
+{
+  print_button_press (event->deviceid);
+  
+  if (event->button == 1 &amp;&amp; pixmap != NULL)
+    draw_brush (widget, event->source, event->x, event->y, event->pressure);
+
+  return TRUE;
+}
+
+static gint
+motion_notify_event (GtkWidget *widget, GdkEventMotion *event)
+{
+  gdouble x, y;
+  gdouble pressure;
+  GdkModifierType state;
+
+  if (event->is_hint)
+    gdk_input_window_get_pointer (event->window, event->deviceid,
+                                  &amp;x, &amp;y, &amp;pressure, NULL, NULL, 
&amp;state);
+  else
+    {
+      x = event->x;
+      y = event->y;
+      pressure = event->pressure;
+      state = event->state;
+    }
+    
+  if (state &amp; GDK_BUTTON1_MASK &amp;&amp; pixmap != NULL)
+    draw_brush (widget, event->source, x, y, pressure);
+  
+  return TRUE;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>We also need to do something with the new information. Our new
+<CODE>draw_brush()</CODE> function draws with a different color for
+each <CODE>event->source</CODE> and changes the brush size depending
+on the pressure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* Draw a rectangle on the screen, size depending on pressure,
+   and color on the type of device */
+static void
+draw_brush (GtkWidget *widget, GdkInputSource source,
+            gdouble x, gdouble y, gdouble pressure)
+{
+  GdkGC *gc;
+  GdkRectangle update_rect;
+
+  switch (source)
+    {
+    case GDK_SOURCE_MOUSE:
+      gc = widget->style->dark_gc[GTK_WIDGET_STATE (widget)];
+      break;
+    case GDK_SOURCE_PEN:
+      gc = widget->style->black_gc;
+      break;
+    case GDK_SOURCE_ERASER:
+      gc = widget->style->white_gc;
+      break;
+    default:
+      gc = widget->style->light_gc[GTK_WIDGET_STATE (widget)];
+    }
+
+  update_rect.x = x - 10 * pressure;
+  update_rect.y = y - 10 * pressure;
+  update_rect.width = 20 * pressure;
+  update_rect.height = 20 * pressure;
+  gdk_draw_rectangle (pixmap, gc, TRUE,
+                      update_rect.x, update_rect.y,
+                      update_rect.width, update_rect.height);
+  gtk_widget_draw (widget, &amp;update_rect);
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Finding out more about a device</H3>
+
+<P>As an example of how to find out more about a device, our program
+will print the name of the device that generates each button
+press. To find out the name of a device, we call the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GList *gdk_input_list_devices               (void);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>which returns a GList (a linked list type from the GLib library)
+of GdkDeviceInfo structures. The GdkDeviceInfo structure is defined
+as:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GdkDeviceInfo
+{
+  guint32 deviceid;
+  gchar *name;
+  GdkInputSource source;
+  GdkInputMode mode;
+  gint has_cursor;
+  gint num_axes;
+  GdkAxisUse *axes;
+  gint num_keys;
+  GdkDeviceKey *keys;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Most of these fields are configuration information that you can ignore
+unless you are implementing XInput configuration saving. The fieldwe
+are interested in here is <CODE>name</CODE> which is simply the name that X
+assigns to the device. The other field that isn't configuration
+information is <CODE>has_cursor</CODE>. If <CODE>has_cursor</CODE> is false, 
then we
+we need to draw our own cursor. But since we've specified
+<CODE>GDK_EXTENSION_EVENTS_CURSOR</CODE>, we don't have to worry about this.
+<P>Our <CODE>print_button_press()</CODE> function simply iterates through
+the returned list until it finds a match, then prints out
+the name of the device.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+static void
+print_button_press (guint32 deviceid)
+{
+  GList *tmp_list;
+
+  /* gdk_input_list_devices returns an internal list, so we shouldn't
+     free it afterwards */
+  tmp_list = gdk_input_list_devices();
+
+  while (tmp_list)
+    {
+      GdkDeviceInfo *info = (GdkDeviceInfo *)tmp_list->data;
+
+      if (info->deviceid == deviceid)
+        {
+          printf("Button press on device '%s'\n", info->name);
+          return;
+        }
+
+      tmp_list = tmp_list->next;
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>That completes the changes to "XInputize" our program.
+<P>
+<H3><A NAME="sec_Further_Sophistications"></A> Further sophistications </H3>
+
+<P>Although our program now supports XInput quite well, it lacks some
+features we would want in a full-featured application. First, the user
+probably doesn't want to have to configure their device each time they
+run the program, so we should allow them to save the device
+configuration. This is done by iterating through the return of
+<CODE>gdk_input_list_devices()</CODE> and writing out the configuration to a
+file.
+<P>To restore the state next time the program is run, GDK provides
+functions to change device configuration:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gdk_input_set_extension_events()
+gdk_input_set_source()
+gdk_input_set_mode()
+gdk_input_set_axes()
+gdk_input_set_key()
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>(The list returned from <CODE>gdk_input_list_devices()</CODE> should not be
+modified directly.) An example of doing this can be found in the
+drawing program gsumi. (Available from 
+<A 
HREF="http://www.msc.cornell.edu/~otaylor/gsumi/";>http://www.msc.cornell.edu/~otaylor/gsumi/</A>)
 Eventually, it
+would be nice to have a standard way of doing this for all
+applications. This probably belongs at a slightly higher level than
+GTK, perhaps in the GNOME library.
+<P>Another major omission that we have mentioned above is the lack of
+cursor drawing. Platforms other than XFree86 currently do not allow
+simultaneously using a device as both the core pointer and directly by
+an application. See the 
+<A 
HREF="http://www.msc.cornell.edu/~otaylor/xinput/XInput-HOWTO.html";>XInput-HOWTO</A>
 for more information about this. This means that
+applications that want to support the widest audience need to draw
+their own cursor.
+<P>An application that draws its own cursor needs to do two things:
+determine if the current device needs a cursor drawn or not, and
+determine if the current device is in proximity. (If the current
+device is a drawing tablet, it's a nice touch to make the cursor 
+disappear when the stylus is lifted from the tablet. When the
+device is touching the stylus, that is called "in proximity.")
+The first is done by searching the device list, as we did
+to find out the device name. The second is achieved by selecting
+"proximity_out" events. An example of drawing one's own cursor is
+found in the "testinput" program found in the GTK distribution.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-24.html">Next</A>
+<A HREF="gtk_tut-22.html">Previous</A>
+<A HREF="gtk_tut.html#toc23">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-24.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-24.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-24.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-24.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Tips For Writing GTK Applications</TITLE>
+ <LINK HREF="gtk_tut-25.html" REL=next>
+ <LINK HREF="gtk_tut-23.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc24" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-25.html">Next</A>
+<A HREF="gtk_tut-23.html">Previous</A>
+<A HREF="gtk_tut.html#toc24">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s24">24. Tips For Writing GTK Applications</A></H2>
+
+<P>This section is simply a gathering of wisdom, general style guidelines
+and hints to creating good GTK applications. Currently this section
+is very short, but I hope it will get longer in future editions of
+this tutorial.
+<P>Use GNU autoconf and automake! They are your friends :) Automake
+examines C files, determines how they depend on each other, and
+generates a Makefile so the files can be compiled in the correct
+order. Autoconf permits automatic configuration of software
+installation, handling a large number of system quirks to increase
+portability. I am planning to make a quick intro on them here.
+<P>When writing C code, use only C comments (beginning with "/*" and
+ending with "*/"), and don't use C++-style comments ("//").  Although
+many C compilers understand C++ comments, others don't, and the ANSI C
+standard does not require that C++-style comments be processed as
+comments.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-25.html">Next</A>
+<A HREF="gtk_tut-23.html">Previous</A>
+<A HREF="gtk_tut.html#toc24">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-25.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-25.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-25.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-25.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Contributing </TITLE>
+ <LINK HREF="gtk_tut-26.html" REL=next>
+ <LINK HREF="gtk_tut-24.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc25" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-26.html">Next</A>
+<A HREF="gtk_tut-24.html">Previous</A>
+<A HREF="gtk_tut.html#toc25">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_Contributing"></A> <A NAME="s25">25. Contributing </A></H2>
+
+<P>This document, like so much other great software out there, was
+created for free by volunteers.  If you are at all knowledgeable about
+any aspect of GTK that does not already have documentation, please
+consider contributing to this document.
+<P>If you do decide to contribute, please mail your text to Tony Gale,
+<CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE>. Also, be aware that 
the entirety of this
+document is free, and any addition by you provide must also be
+free. That is, people may use any portion of your examples in their
+programs, and copies of this document may be distributed at will, etc.
+<P>Thank you.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-26.html">Next</A>
+<A HREF="gtk_tut-24.html">Previous</A>
+<A HREF="gtk_tut.html#toc25">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-26.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-26.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-26.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-26.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Credits</TITLE>
+ <LINK HREF="gtk_tut-27.html" REL=next>
+ <LINK HREF="gtk_tut-25.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc26" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-27.html">Next</A>
+<A HREF="gtk_tut-25.html">Previous</A>
+<A HREF="gtk_tut.html#toc26">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s26">26. Credits</A></H2>
+
+<P>We would like to thank the following for their contributions to this text.
+<P>
+<UL>
+<LI>Bawer Dagdeviren, <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the menus 
tutorial.                       
+</LI>
+<LI>Raph Levien, <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE>
+for hello world ala GTK, widget packing, and general all around wisdom.
+He's also generously donated a home for this tutorial.
+</LI>
+<LI>Peter Mattis, <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the simplest GTK 
program.. 
+and the ability to make it :)
+</LI>
+<LI>Werner Koch <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for converting the 
original plain text to
+SGML, and the widget class hierarchy.
+</LI>
+<LI>Mark Crichton <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the menu factory 
code,
+and the table packing tutorial.
+</LI>
+<LI>Owen Taylor <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the EventBox 
widget section (and the
+patch to the distro).  He's also responsible for the selections code
+and tutorial, as well as the sections on writing your own GTK widgets,
+and the example application. Thanks a lot Owen for all you help!
+</LI>
+<LI>Mark VanderBoom <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for his wonderful 
work on the
+Notebook, Progress Bar, Dialogs, and File selection widgets.  Thanks a
+lot Mark!  You've been a great help.
+</LI>
+<LI>Tim Janik <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for his great job on 
the Lists
+Widget. His excellent work on automatically extracting the widget tree
+and signal information from GTK. Thanks Tim :)
+</LI>
+<LI>Rajat Datta <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the excellent 
job on the Pixmap
+tutorial.
+</LI>
+<LI>Michael K. Johnson <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for info and code 
for popup menus.
+</LI>
+<LI>David Huggins-Daines <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the Range 
Widgets and Tree
+Widget sections.
+</LI>
+<LI>Stefan Mars <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for the CList 
section.
+</LI>
+<LI>David A. Wheeler <CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE> for portions of the 
text on GLib
+and various tutorial fixups and improvements.
+The GLib text was in turn based on material developed by Damon Chaplin
+<CODE>
+<A HREF="mailto:address@hidden";>address@hidden</A></CODE>
+</LI>
+<LI>David King for style checking the entire document.</LI>
+</UL>
+<P>And to all of you who commented on and helped refine this document.
+<P>Thanks.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-27.html">Next</A>
+<A HREF="gtk_tut-25.html">Previous</A>
+<A HREF="gtk_tut.html#toc26">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-27.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-27.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-27.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-27.html    3 Mar 2012 06:14:56 
-0000       1.1
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Tutorial Copyright and Permissions Notice</TITLE>
+ <LINK HREF="gtk_tut-28.html" REL=next>
+ <LINK HREF="gtk_tut-26.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc27" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-28.html">Next</A>
+<A HREF="gtk_tut-26.html">Previous</A>
+<A HREF="gtk_tut.html#toc27">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s27">27. Tutorial Copyright and Permissions Notice</A></H2>
+
+<P>The GTK Tutorial is Copyright (C) 1997 Ian Main. 
+<P>Copyright (C) 1998-1999 Tony Gale.
+<P>Permission is granted to make and distribute verbatim copies of this 
+manual provided the copyright notice and this permission notice are 
+preserved on all copies.
+<P>Permission is granted to copy and distribute modified versions of 
+this document under the conditions for verbatim copying, provided that 
+this copyright notice is included exactly as in the original,
+and that the entire resulting derived work is distributed under 
+the terms of a permission notice identical to this one.
+<P>Permission is granted to copy and distribute translations of this 
+document into another language, under the above conditions for modified 
+versions.
+<P>If you are intending to incorporate this document into a published 
+work, please contact the maintainer, and we will make an effort 
+to ensure that you have the most up to date information available.
+<P>There is no guarantee that this document lives up to its intended
+purpose.  This is simply provided as a free resource.  As such,
+the authors and maintainers of the information provided within can
+not make any guarantee that the information is even accurate.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-28.html">Next</A>
+<A HREF="gtk_tut-26.html">Previous</A>
+<A HREF="gtk_tut.html#toc27">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-28.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-28.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-28.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-28.html    3 Mar 2012 06:14:57 
-0000       1.1
@@ -0,0 +1,742 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: GTK Signals </TITLE>
+ <LINK HREF="gtk_tut-29.html" REL=next>
+ <LINK HREF="gtk_tut-27.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc28" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-29.html">Next</A>
+<A HREF="gtk_tut-27.html">Previous</A>
+<A HREF="gtk_tut.html#toc28">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_GTK_Signals"></A> <A NAME="s28">28. GTK Signals </A></H2>
+
+<P>As GTK is an object oriented widget set, it has a hierarchy of
+inheritance. This inheritance mechanism applies for
+signals. Therefore, you should refer to the widget hierarchy tree when
+using the signals listed in this section.
+<P>
+<H2><A NAME="ss28.1">28.1 GtkObject</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkObject::destroy (GtkObject *,
+                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.2">28.2 GtkWidget</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+
+void GtkWidget::show    (GtkWidget *,
+                         gpointer);
+void GtkWidget::hide    (GtkWidget *,
+                         gpointer);
+void GtkWidget::map     (GtkWidget *,
+                         gpointer);
+void GtkWidget::unmap   (GtkWidget *,
+                         gpointer);
+void GtkWidget::realize (GtkWidget *,
+                         gpointer);
+void GtkWidget::unrealize       (GtkWidget *,
+                                 gpointer);
+void GtkWidget::draw    (GtkWidget *,
+                         ggpointer,
+                         gpointer);
+void GtkWidget::draw-focus      (GtkWidget *,
+                                 gpointer);
+void GtkWidget::draw-default    (GtkWidget *,
+                                 gpointer);
+void GtkWidget::size-request    (GtkWidget *,
+                                 ggpointer,
+                                 gpointer);
+void GtkWidget::size-allocate   (GtkWidget *,
+                                 ggpointer,
+                                 gpointer);
+void GtkWidget::state-changed   (GtkWidget *,
+                                 GtkStateType,
+                                 gpointer);
+void GtkWidget::parent-set      (GtkWidget *,
+                                 GtkObject *,
+                                 gpointer);
+void GtkWidget::style-set       (GtkWidget *,
+                                 GtkStyle *,
+                                 gpointer);
+void GtkWidget::add-accelerator (GtkWidget *,
+                                 gguint,
+                                 GtkAccelGroup *,
+                                 gguint,
+                                 GdkModifierType,
+                                 GtkAccelFlags,
+                                 gpointer);
+void GtkWidget::remove-accelerator      (GtkWidget *,
+                                         GtkAccelGroup *,
+                                         gguint,
+                                         GdkModifierType,
+                                         gpointer);
+gboolean GtkWidget::event       (GtkWidget *,
+                                 GdkEvent *,
+                                 gpointer);
+gboolean GtkWidget::button-press-event  (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::button-release-event        (GtkWidget *,
+                                                 GdkEvent *,
+                                                 gpointer);
+gboolean GtkWidget::motion-notify-event (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::delete-event        (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::destroy-event       (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::expose-event        (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::key-press-event     (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::key-release-event   (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::enter-notify-event  (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::leave-notify-event  (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::configure-event     (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::focus-in-event      (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::focus-out-event     (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::map-event   (GtkWidget *,
+                                 GdkEvent *,
+                                 gpointer);
+gboolean GtkWidget::unmap-event (GtkWidget *,
+                                 GdkEvent *,
+                                 gpointer);
+gboolean GtkWidget::property-notify-event       (GtkWidget *,
+                                                 GdkEvent *,
+                                                 gpointer);
+gboolean GtkWidget::selection-clear-event       (GtkWidget *,
+                                                 GdkEvent *,
+                                                 gpointer);
+gboolean GtkWidget::selection-request-event     (GtkWidget *,
+                                                 GdkEvent *,
+                                                 gpointer);
+gboolean GtkWidget::selection-notify-event      (GtkWidget *,
+                                                 GdkEvent *,
+                                                 gpointer);
+void GtkWidget::selection-get   (GtkWidget *,
+                                 GtkSelectionData *,
+                                 gguint,
+                                 gpointer);
+void GtkWidget::selection-received      (GtkWidget *,
+                                         GtkSelectionData *,
+                                         gguint,
+                                         gpointer);
+gboolean GtkWidget::proximity-in-event  (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::proximity-out-event (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+void GtkWidget::drag-begin      (GtkWidget *,
+                                 GdkDragContext *,
+                                 gpointer);
+void GtkWidget::drag-end        (GtkWidget *,
+                                 GdkDragContext *,
+                                 gpointer);
+void GtkWidget::drag-data-delete        (GtkWidget *,
+                                         GdkDragContext *,
+                                         gpointer);
+void GtkWidget::drag-leave      (GtkWidget *,
+                                 GdkDragContext *,
+                                 gguint,
+                                 gpointer);
+gboolean GtkWidget::drag-motion (GtkWidget *,
+                                 GdkDragContext *,
+                                 ggint,
+                                 ggint,
+                                 gguint,
+                                 gpointer);
+gboolean GtkWidget::drag-drop   (GtkWidget *,
+                                 GdkDragContext *,
+                                 ggint,
+                                 ggint,
+                                 gguint,
+                                 gpointer);
+void GtkWidget::drag-data-get   (GtkWidget *,
+                                 GdkDragContext *,
+                                 GtkSelectionData *,
+                                 gguint,
+                                 gguint,
+                                 gpointer);
+void GtkWidget::drag-data-received      (GtkWidget *,
+                                         GdkDragContext *,
+                                         ggint,
+                                         ggint,
+                                         GtkSelectionData *,
+                                         gguint,
+                                         gguint,
+                                         gpointer);
+gboolean GtkWidget::client-event        (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::no-expose-event     (GtkWidget *,
+                                         GdkEvent *,
+                                         gpointer);
+gboolean GtkWidget::visibility-notify-event     (GtkWidget *,
+                                                 GdkEvent *,
+                                                 gpointer);
+void GtkWidget::debug-msg       (GtkWidget *,
+                                 GtkString *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.3">28.3 GtkData</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkData::disconnect        (GtkData *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.4">28.4 GtkContainer</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkContainer::add  (GtkContainer *,
+                         GtkWidget *,
+                         gpointer);
+void GtkContainer::remove       (GtkContainer *,
+                                 GtkWidget *,
+                                 gpointer);
+void GtkContainer::check-resize (GtkContainer *,
+                                 gpointer);
+GtkDirectionType GtkContainer::focus    (GtkContainer *,
+                                         GtkDirectionType,
+                                         gpointer);
+void GtkContainer::set-focus-child      (GtkContainer *,
+                                         GtkWidget *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.5">28.5 GtkCalendar</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkCalendar::month-changed (GtkCalendar *,
+                                 gpointer);
+void GtkCalendar::day-selected  (GtkCalendar *,
+                                 gpointer);
+void GtkCalendar::day-selected-double-click     (GtkCalendar *,
+                                                 gpointer);
+void GtkCalendar::prev-month    (GtkCalendar *,
+                                 gpointer);
+void GtkCalendar::next-month    (GtkCalendar *,
+                                 gpointer);
+void GtkCalendar::prev-year     (GtkCalendar *,
+                                 gpointer);
+void GtkCalendar::next-year     (GtkCalendar *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.6">28.6 GtkEditable</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkEditable::changed       (GtkEditable *,
+                                 gpointer);
+void GtkEditable::insert-text   (GtkEditable *,
+                                 GtkString *,
+                                 ggint,
+                                 ggpointer,
+                                 gpointer);
+void GtkEditable::delete-text   (GtkEditable *,
+                                 ggint,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::activate      (GtkEditable *,
+                                 gpointer);
+void GtkEditable::set-editable  (GtkEditable *,
+                                 gboolean,
+                                 gpointer);
+void GtkEditable::move-cursor   (GtkEditable *,
+                                 ggint,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::move-word     (GtkEditable *,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::move-page     (GtkEditable *,
+                                 ggint,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::move-to-row   (GtkEditable *,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::move-to-column        (GtkEditable *,
+                                         ggint,
+                                         gpointer);
+void GtkEditable::kill-char     (GtkEditable *,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::kill-word     (GtkEditable *,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::kill-line     (GtkEditable *,
+                                 ggint,
+                                 gpointer);
+void GtkEditable::cut-clipboard (GtkEditable *,
+                                 gpointer);
+void GtkEditable::copy-clipboard        (GtkEditable *,
+                                         gpointer);
+void GtkEditable::paste-clipboard       (GtkEditable *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.7">28.7 GtkTipsQuery</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkTipsQuery::start-query  (GtkTipsQuery *,
+                                 gpointer);
+void GtkTipsQuery::stop-query   (GtkTipsQuery *,
+                                 gpointer);
+void GtkTipsQuery::widget-entered       (GtkTipsQuery *,
+                                         GtkWidget *,
+                                         GtkString *,
+                                         GtkString *,
+                                         gpointer);
+gboolean GtkTipsQuery::widget-selected  (GtkTipsQuery *,
+                                         GtkWidget *,
+                                         GtkString *,
+                                         GtkString *,
+                                         GdkEvent *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.8">28.8 GtkCList</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkCList::select-row       (GtkCList *,
+                                 ggint,
+                                 ggint,
+                                 GdkEvent *,
+                                 gpointer);
+void GtkCList::unselect-row     (GtkCList *,
+                                 ggint,
+                                 ggint,
+                                 GdkEvent *,
+                                 gpointer);
+void GtkCList::row-move (GtkCList *,
+                         ggint,
+                         ggint,
+                         gpointer);
+void GtkCList::click-column     (GtkCList *,
+                                 ggint,
+                                 gpointer);
+void GtkCList::resize-column    (GtkCList *,
+                                 ggint,
+                                 ggint,
+                                 gpointer);
+void GtkCList::toggle-focus-row (GtkCList *,
+                                 gpointer);
+void GtkCList::select-all       (GtkCList *,
+                                 gpointer);
+void GtkCList::unselect-all     (GtkCList *,
+                                 gpointer);
+void GtkCList::undo-selection   (GtkCList *,
+                                 gpointer);
+void GtkCList::start-selection  (GtkCList *,
+                                 gpointer);
+void GtkCList::end-selection    (GtkCList *,
+                                 gpointer);
+void GtkCList::toggle-add-mode  (GtkCList *,
+                                 gpointer);
+void GtkCList::extend-selection (GtkCList *,
+                                 GtkScrollType,
+                                 ggfloat,
+                                 gboolean,
+                                 gpointer);
+void GtkCList::scroll-vertical  (GtkCList *,
+                                 GtkScrollType,
+                                 ggfloat,
+                                 gpointer);
+void GtkCList::scroll-horizontal        (GtkCList *,
+                                         GtkScrollType,
+                                         ggfloat,
+                                         gpointer);
+void GtkCList::abort-column-resize      (GtkCList *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.9">28.9 GtkNotebook</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkNotebook::switch-page   (GtkNotebook *,
+                                 ggpointer,
+                                 gguint,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.10">28.10 GtkList</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkList::selection-changed (GtkList *,
+                                 gpointer);
+void GtkList::select-child      (GtkList *,
+                                 GtkWidget *,
+                                 gpointer);
+void GtkList::unselect-child    (GtkList *,
+                                 GtkWidget *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.11">28.11 GtkMenuShell</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkMenuShell::deactivate   (GtkMenuShell *,
+                                 gpointer);
+void GtkMenuShell::selection-done       (GtkMenuShell *,
+                                         gpointer);
+void GtkMenuShell::move-current (GtkMenuShell *,
+                                 GtkMenuDirectionType,
+                                 gpointer);
+void GtkMenuShell::activate-current     (GtkMenuShell *,
+                                         gboolean,
+                                         gpointer);
+void GtkMenuShell::cancel       (GtkMenuShell *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.12">28.12 GtkToolbar</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkToolbar::orientation-changed    (GtkToolbar *,
+                                         ggint,
+                                         gpointer);
+void GtkToolbar::style-changed  (GtkToolbar *,
+                                 ggint,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.13">28.13 GtkTree</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkTree::selection-changed (GtkTree *,
+                                 gpointer);
+void GtkTree::select-child      (GtkTree *,
+                                 GtkWidget *,
+                                 gpointer);
+void GtkTree::unselect-child    (GtkTree *,
+                                 GtkWidget *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.14">28.14 GtkButton</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkButton::pressed (GtkButton *,
+                         gpointer);
+void GtkButton::released        (GtkButton *,
+                                 gpointer);
+void GtkButton::clicked (GtkButton *,
+                         gpointer);
+void GtkButton::enter   (GtkButton *,
+                         gpointer);
+void GtkButton::leave   (GtkButton *,
+                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.15">28.15 GtkItem</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkItem::select    (GtkItem *,
+                         gpointer);
+void GtkItem::deselect  (GtkItem *,
+                         gpointer);
+void GtkItem::toggle    (GtkItem *,
+                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.16">28.16 GtkWindow</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkWindow::set-focus       (GtkWindow *,
+                                 ggpointer,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.17">28.17 GtkHandleBox</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkHandleBox::child-attached       (GtkHandleBox *,
+                                         GtkWidget *,
+                                         gpointer);
+void GtkHandleBox::child-detached       (GtkHandleBox *,
+                                         GtkWidget *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.18">28.18 GtkToggleButton</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkToggleButton::toggled   (GtkToggleButton *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.19">28.19 GtkMenuItem</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkMenuItem::activate      (GtkMenuItem *,
+                                 gpointer);
+void GtkMenuItem::activate-item (GtkMenuItem *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.20">28.20 GtkListItem</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkListItem::toggle-focus-row      (GtkListItem *,
+                                         gpointer);
+void GtkListItem::select-all    (GtkListItem *,
+                                 gpointer);
+void GtkListItem::unselect-all  (GtkListItem *,
+                                 gpointer);
+void GtkListItem::undo-selection        (GtkListItem *,
+                                         gpointer);
+void GtkListItem::start-selection       (GtkListItem *,
+                                         gpointer);
+void GtkListItem::end-selection (GtkListItem *,
+                                 gpointer);
+void GtkListItem::toggle-add-mode       (GtkListItem *,
+                                         gpointer);
+void GtkListItem::extend-selection      (GtkListItem *,
+                                         GtkEnum,
+                                         ggfloat,
+                                         gboolean,
+                                         gpointer);
+void GtkListItem::scroll-vertical       (GtkListItem *,
+                                         GtkEnum,
+                                         ggfloat,
+                                         gpointer);
+void GtkListItem::scroll-horizontal     (GtkListItem *,
+                                         GtkEnum,
+                                         ggfloat,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.21">28.21 GtkTreeItem</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkTreeItem::collapse      (GtkTreeItem *,
+                                 gpointer);
+void GtkTreeItem::expand        (GtkTreeItem *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.22">28.22 GtkCheckMenuItem</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkCheckMenuItem::toggled  (GtkCheckMenuItem *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.23">28.23 GtkInputDialog</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkInputDialog::enable-device      (GtkInputDialog *,
+                                         ggint,
+                                         gpointer);
+void GtkInputDialog::disable-device     (GtkInputDialog *,
+                                         ggint,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.24">28.24 GtkColorSelection</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkColorSelection::color-changed   (GtkColorSelection *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.25">28.25 GtkStatusBar</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkStatusbar::text-pushed  (GtkStatusbar *,
+                                 gguint,
+                                 GtkString *,
+                                 gpointer);
+void GtkStatusbar::text-popped  (GtkStatusbar *,
+                                 gguint,
+                                 GtkString *,
+                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.26">28.26 GtkCTree</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkCTree::tree-select-row  (GtkCTree *,
+                                 GtkCTreeNode *,
+                                 ggint,
+                                 gpointer);
+void GtkCTree::tree-unselect-row        (GtkCTree *,
+                                         GtkCTreeNode *,
+                                         ggint,
+                                         gpointer);
+void GtkCTree::tree-expand      (GtkCTree *,
+                                 GtkCTreeNode *,
+                                 gpointer);
+void GtkCTree::tree-collapse    (GtkCTree *,
+                                 ggpointer,
+                                 gpointer);
+void GtkCTree::tree-move        (GtkCTree *,
+                                 GtkCTreeNode *,
+                                 GtkCTreeNode *,
+                                 GtkCTreeNode *,
+                                 gpointer);
+void GtkCTree::change-focus-row-expansion       (GtkCTree *,
+                                                 GtkCTreeExpansionType,
+                                                 gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.27">28.27 GtkCurve</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkCurve::curve-type-changed       (GtkCurve *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss28.28">28.28 GtkAdjustment</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void GtkAdjustment::changed     (GtkAdjustment *,
+                                 gpointer);
+void GtkAdjustment::value-changed       (GtkAdjustment *,
+                                         gpointer);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-29.html">Next</A>
+<A HREF="gtk_tut-27.html">Previous</A>
+<A HREF="gtk_tut.html#toc28">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-29.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-29.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-29.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-29.html    3 Mar 2012 06:14:57 
-0000       1.1
@@ -0,0 +1,470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: GDK Event Types</TITLE>
+ <LINK HREF="gtk_tut-30.html" REL=next>
+ <LINK HREF="gtk_tut-28.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc29" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-30.html">Next</A>
+<A HREF="gtk_tut-28.html">Previous</A>
+<A HREF="gtk_tut.html#toc29">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_GDK_Event_Types"></A> <A NAME="s29">29. GDK Event 
Types</A></H2>
+
+<P>The following data types are passed into event handlers by GTK+. For
+each data type listed, the signals that use this data type are listed.
+<P>
+<UL>
+<LI>  GdkEvent
+<UL>
+<LI>drag_end_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventType
+</LI>
+<LI>  GdkEventAny
+<UL>
+<LI>delete_event</LI>
+<LI>destroy_event</LI>
+<LI>map_event</LI>
+<LI>unmap_event</LI>
+<LI>no_expose_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventExpose
+<UL>
+<LI>expose_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventNoExpose
+</LI>
+<LI>  GdkEventVisibility
+</LI>
+<LI>  GdkEventMotion
+<UL>
+<LI>motion_notify_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventButton
+<UL>
+<LI>button_press_event</LI>
+<LI>button_release_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventKey
+<UL>
+<LI>key_press_event</LI>
+<LI>key_release_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventCrossing
+<UL>
+<LI>enter_notify_event</LI>
+<LI>leave_notify_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventFocus
+<UL>
+<LI>focus_in_event</LI>
+<LI>focus_out_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventConfigure
+<UL>
+<LI>configure_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventProperty
+<UL>
+<LI>property_notify_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventSelection
+<UL>
+<LI>selection_clear_event</LI>
+<LI>selection_request_event</LI>
+<LI>selection_notify_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventProximity
+<UL>
+<LI>proximity_in_event</LI>
+<LI>proximity_out_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventDragBegin
+<UL>
+<LI>drag_begin_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventDragRequest
+<UL>
+<LI>drag_request_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventDropEnter
+<UL>
+<LI>drop_enter_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventDropLeave
+<UL>
+<LI>drop_leave_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventDropDataAvailable
+<UL>
+<LI>drop_data_available_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventClient
+<UL>
+<LI>client_event</LI>
+</UL>
+
+</LI>
+<LI>  GdkEventOther
+<UL>
+<LI>other_event</LI>
+</UL>
+</LI>
+</UL>
+<P>The data type <CODE>GdkEventType</CODE> is a special data type that is used 
by
+all the other data types as an indicator of the data type being passed
+to the signal handler. As you will see below, each of the event data
+structures has a member of this type. It is defined as an enumeration
+type as follows:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+typedef enum
+{
+  GDK_NOTHING           = -1,
+  GDK_DELETE            = 0,
+  GDK_DESTROY           = 1,
+  GDK_EXPOSE            = 2,
+  GDK_MOTION_NOTIFY     = 3,
+  GDK_BUTTON_PRESS      = 4,
+  GDK_2BUTTON_PRESS     = 5,
+  GDK_3BUTTON_PRESS     = 6,
+  GDK_BUTTON_RELEASE    = 7,
+  GDK_KEY_PRESS         = 8,
+  GDK_KEY_RELEASE       = 9,
+  GDK_ENTER_NOTIFY      = 10,
+  GDK_LEAVE_NOTIFY      = 11,
+  GDK_FOCUS_CHANGE      = 12,
+  GDK_CONFIGURE         = 13,
+  GDK_MAP               = 14,
+  GDK_UNMAP             = 15,
+  GDK_PROPERTY_NOTIFY   = 16,
+  GDK_SELECTION_CLEAR   = 17,
+  GDK_SELECTION_REQUEST = 18,
+  GDK_SELECTION_NOTIFY  = 19,
+  GDK_PROXIMITY_IN      = 20,
+  GDK_PROXIMITY_OUT     = 21,
+  GDK_DRAG_BEGIN        = 22,
+  GDK_DRAG_REQUEST      = 23,
+  GDK_DROP_ENTER        = 24,
+  GDK_DROP_LEAVE        = 25,
+  GDK_DROP_DATA_AVAIL   = 26,
+  GDK_CLIENT_EVENT      = 27,
+  GDK_VISIBILITY_NOTIFY = 28,
+  GDK_NO_EXPOSE         = 29,
+  GDK_OTHER_EVENT       = 9999  /* Deprecated, use filters instead */
+} GdkEventType;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The other event type that is different from the others is
+<CODE>GdkEvent</CODE> itself. This is a union of all the other
+data types, which allows it to be cast to a specific
+event data type within a signal handler.
+<P>So, the event data types are defined as follows:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GdkEventAny
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+};
+
+struct _GdkEventExpose
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkRectangle area;
+  gint count; /* If non-zero, how many more events follow. */
+};
+
+struct _GdkEventNoExpose
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  /* XXX: does anyone need the X major_code or minor_code fields? */
+};
+
+struct _GdkEventVisibility
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkVisibilityState state;
+};
+
+struct _GdkEventMotion
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 time;
+  gdouble x;
+  gdouble y;
+  gdouble pressure;
+  gdouble xtilt;
+  gdouble ytilt;
+  guint state;
+  gint16 is_hint;
+  GdkInputSource source;
+  guint32 deviceid;
+  gdouble x_root, y_root;
+};
+
+struct _GdkEventButton
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 time;
+  gdouble x;
+  gdouble y;
+  gdouble pressure;
+  gdouble xtilt;
+  gdouble ytilt;
+  guint state;
+  guint button;
+  GdkInputSource source;
+  guint32 deviceid;
+  gdouble x_root, y_root;
+};
+
+struct _GdkEventKey
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 time;
+  guint state;
+  guint keyval;
+  gint length;
+  gchar *string;
+};
+
+struct _GdkEventCrossing
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkWindow *subwindow;
+  GdkNotifyType detail;
+};
+
+struct _GdkEventFocus
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  gint16 in;
+};
+
+struct _GdkEventConfigure
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  gint16 x, y;
+  gint16 width;
+  gint16 height;
+};
+
+struct _GdkEventProperty
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkAtom atom;
+  guint32 time;
+  guint state;
+};
+
+struct _GdkEventSelection
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkAtom selection;
+  GdkAtom target;
+  GdkAtom property;
+  guint32 requestor;
+  guint32 time;
+};
+
+/* This event type will be used pretty rarely. It only is important
+   for XInput aware programs that are drawing their own cursor */
+
+struct _GdkEventProximity
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 time;
+  GdkInputSource source;
+  guint32 deviceid;
+};
+
+struct _GdkEventDragRequest
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 requestor;
+  union {
+    struct {
+      guint protocol_version:4;
+      guint sendreply:1;
+      guint willaccept:1;
+      guint delete_data:1; /* Do *not* delete if link is sent, only
+                              if data is sent */
+      guint senddata:1;
+      guint reserved:22;
+    } flags;
+    glong allflags;
+  } u;
+  guint8 isdrop; /* This gdk event can be generated by a couple of
+                    X events - this lets the app know whether the
+                    drop really occurred or we just set the data */
+
+  GdkPoint drop_coords;
+  gchar *data_type;
+  guint32 timestamp;
+};
+
+struct _GdkEventDragBegin
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  union {
+    struct {
+      guint protocol_version:4;
+      guint reserved:28;
+    } flags;
+    glong allflags;
+  } u;
+};
+
+struct _GdkEventDropEnter
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 requestor;
+  union {
+    struct {
+      guint protocol_version:4;
+      guint sendreply:1;
+      guint extended_typelist:1;
+      guint reserved:26;
+    } flags;
+    glong allflags;
+  } u;
+};
+
+struct _GdkEventDropLeave
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 requestor;
+  union {
+    struct {
+      guint protocol_version:4;
+      guint reserved:28;
+    } flags;
+    glong allflags;
+  } u;
+};
+
+struct _GdkEventDropDataAvailable
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  guint32 requestor;
+  union {
+    struct {
+      guint protocol_version:4;
+      guint isdrop:1;
+      guint reserved:25;
+    } flags;
+    glong allflags;
+  } u;
+  gchar *data_type; /* MIME type */
+  gulong data_numbytes;
+  gpointer data;
+  guint32 timestamp;
+  GdkPoint coords;
+};
+
+struct _GdkEventClient
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkAtom message_type;
+  gushort data_format;
+  union {
+    char b[20];
+    short s[10];
+    long l[5];
+  } data;
+};
+
+struct _GdkEventOther
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkXEvent *xevent;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-30.html">Next</A>
+<A HREF="gtk_tut-28.html">Previous</A>
+<A HREF="gtk_tut.html#toc29">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-3.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-3.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-3.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-3.html     3 Mar 2012 06:14:57 
-0000       1.1
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Moving On</TITLE>
+ <LINK HREF="gtk_tut-4.html" REL=next>
+ <LINK HREF="gtk_tut-2.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc3" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-4.html">Next</A>
+<A HREF="gtk_tut-2.html">Previous</A>
+<A HREF="gtk_tut.html#toc3">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s3">3. Moving On</A></H2>
+
+<H2><A NAME="ss3.1">3.1 Data Types</A>
+</H2>
+
+<P>There are a few things you probably noticed in the previous examples
+that need explaining. The gint, gchar, etc. that you see are typedefs
+to int and char, respectively, that are part of the GLlib system. This
+is done to get around that nasty dependency on the size of simple data
+types when doing calculations.
+<P>A good example is "gint32" which will be typedef'd to a 32 bit integer
+for any given platform, whether it be the 64 bit alpha, or the 32 bit
+i386. The typedefs are very straightforward and intuitive. They are
+all defined in glib/glib.h (which gets included from gtk.h).
+<P>You'll also notice GTK's ability to use GtkWidget when the function
+calls for an Object. GTK is an object oriented design, and a widget
+is an object.
+<P>
+<H2><A NAME="ss3.2">3.2 More on Signal Handlers</A>
+</H2>
+
+<P>Lets take another look at the gtk_signal_connect declaration.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_signal_connect( GtkObject *object,
+                         gchar *name,
+                         GtkSignalFunc func,
+                         gpointer func_data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Notice the gint return value? This is a tag that identifies your
+callback function. As stated above, you may have as many callbacks per
+signal and per object as you need, and each will be executed in turn,
+in the order they were attached.
+<P>This tag allows you to remove this callback from the list by using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_signal_disconnect( GtkObject *object,
+                            gint id );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>So, by passing in the widget you wish to remove the handler from, and
+the tag returned by one of the signal_connect functions, you can
+disconnect a signal handler.
+<P>Another function to remove all the signal handers from an object is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_signal_handlers_destroy( GtkObject *object );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This call is fairly self explanatory. It simply removes all the
+current signal handlers from the object passed in as the first
+argument.
+<P>
+<H2><A NAME="ss3.3">3.3 An Upgraded Hello World</A>
+</H2>
+
+<P>Let's take a look at a slightly improved <EM>helloworld</EM> with
+better examples of callbacks. This will also introduce us to our next
+topic, packing widgets.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start helloworld2 helloworld2.c */
+
+#include &lt;gtk/gtk.h>
+
+/* Our new improved callback.  The data passed to this function
+ * is printed to stdout. */
+void callback( GtkWidget *widget,
+               gpointer   data )
+{
+    g_print ("Hello again - %s was pressed\n", (char *) data);
+}
+
+/* another callback */
+gint delete_event( GtkWidget *widget,
+                   GdkEvent  *event,
+                   gpointer   data )
+{
+    gtk_main_quit();
+    return(FALSE);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    /* GtkWidget is the storage type for widgets */
+    GtkWidget *window;
+    GtkWidget *button;
+    GtkWidget *box1;
+
+    /* This is called in all GTK applications. Arguments are parsed
+     * from the command line and are returned to the application. */
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* Create a new window */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    /* This is a new call, which just sets the title of our
+     * new window to "Hello Buttons!" */
+    gtk_window_set_title (GTK_WINDOW (window), "Hello Buttons!");
+
+    /* Here we just set a handler for delete_event that immediately
+     * exits GTK. */
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+
+    /* Sets the border width of the window. */
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+    /* We create a box to pack widgets into.  This is described in detail
+     * in the "packing" section. The box is not really visible, it
+     * is just used as a tool to arrange widgets. */
+    box1 = gtk_hbox_new(FALSE, 0);
+
+    /* Put the box into the main window. */
+    gtk_container_add (GTK_CONTAINER (window), box1);
+
+    /* Creates a new button with the label "Button 1". */
+    button = gtk_button_new_with_label ("Button 1");
+
+    /* Now when the button is clicked, we call the "callback" function
+     * with a pointer to "button 1" as its argument */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (callback), (gpointer) "button 1");
+
+    /* Instead of gtk_container_add, we pack this button into the invisible
+     * box, which has been packed into the window. */
+    gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);
+
+    /* Always remember this step, this tells GTK that our preparation for
+     * this button is complete, and it can now be displayed. */
+    gtk_widget_show(button);
+
+    /* Do these same steps again to create a second button */
+    button = gtk_button_new_with_label ("Button 2");
+
+    /* Call the same callback function with a different argument,
+     * passing a pointer to "button 2" instead. */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (callback), (gpointer) "button 2");
+
+    gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);
+
+    /* The order in which we show the buttons is not really important, but I
+     * recommend showing the window last, so it all pops up at once. */
+    gtk_widget_show(button);
+
+    gtk_widget_show(box1);
+
+    gtk_widget_show (window);
+
+    /* Rest in gtk_main and wait for the fun to begin! */
+    gtk_main ();
+
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Compile this program using the same linking arguments as our first
+example.  You'll notice this time there is no easy way to exit the
+program, you have to use your window manager or command line to kill
+it. A good exercise for the reader would be to insert a third "Quit"
+button that will exit the program. You may also wish to play with the
+options to gtk_box_pack_start() while reading the next section.  Try
+resizing the window, and observe the behavior.
+<P>Just as a side note, there is another useful define for
+gtk_window_new() - <CODE>GTK_WINDOW_DIALOG</CODE>. This interacts with the
+window manager a little differently and should be used for transient
+windows.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-4.html">Next</A>
+<A HREF="gtk_tut-2.html">Previous</A>
+<A HREF="gtk_tut.html#toc3">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-30.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-30.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-30.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-30.html    3 Mar 2012 06:14:57 
-0000       1.1
@@ -0,0 +1,1633 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Code Examples</TITLE>
+ <LINK HREF="gtk_tut-31.html" REL=next>
+ <LINK HREF="gtk_tut-29.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc30" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-31.html">Next</A>
+<A HREF="gtk_tut-29.html">Previous</A>
+<A HREF="gtk_tut.html#toc30">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s30">30. Code Examples</A></H2>
+
+<P>Below are the code examples that are used in the above text
+which are not included in complete form elsewhere.
+<P>
+<H2><A NAME="ss30.1">30.1 Tictactoe</A>
+</H2>
+
+<H3>tictactoe.h</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start tictactoe tictactoe.h */
+
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef __TICTACTOE_H__
+#define __TICTACTOE_H__
+
+
+#include &lt;gdk/gdk.h>
+#include &lt;gtk/gtkvbox.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define TICTACTOE(obj)          GTK_CHECK_CAST (obj, tictactoe_get_type (), 
Tictactoe)
+#define TICTACTOE_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, 
tictactoe_get_type (), TictactoeClass)
+#define IS_TICTACTOE(obj)       GTK_CHECK_TYPE (obj, tictactoe_get_type ())
+
+
+typedef struct _Tictactoe       Tictactoe;
+typedef struct _TictactoeClass  TictactoeClass;
+
+struct _Tictactoe
+{
+  GtkVBox vbox;
+  
+  GtkWidget *buttons[3][3];
+};
+
+struct _TictactoeClass
+{
+  GtkVBoxClass parent_class;
+
+  void (* tictactoe) (Tictactoe *ttt);
+};
+
+guint          tictactoe_get_type        (void);
+GtkWidget*     tictactoe_new             (void);
+void           tictactoe_clear           (Tictactoe *ttt);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __TICTACTOE_H__ */
+
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>tictactoe.c</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start tictactoe tictactoe.c */
+
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include "gtk/gtksignal.h"
+#include "gtk/gtktable.h"
+#include "gtk/gtktogglebutton.h"
+#include "tictactoe.h"
+
+enum {
+  TICTACTOE_SIGNAL,
+  LAST_SIGNAL
+};
+
+static void tictactoe_class_init          (TictactoeClass *klass);
+static void tictactoe_init                (Tictactoe      *ttt);
+static void tictactoe_toggle              (GtkWidget *widget, Tictactoe *ttt);
+
+static gint tictactoe_signals[LAST_SIGNAL] = { 0 };
+
+guint
+tictactoe_get_type ()
+{
+  static guint ttt_type = 0;
+
+  if (!ttt_type)
+    {
+      GtkTypeInfo ttt_info =
+      {
+        "Tictactoe",
+        sizeof (Tictactoe),
+        sizeof (TictactoeClass),
+        (GtkClassInitFunc) tictactoe_class_init,
+        (GtkObjectInitFunc) tictactoe_init,
+        (GtkArgSetFunc) NULL,
+        (GtkArgGetFunc) NULL
+      };
+
+      ttt_type = gtk_type_unique (gtk_vbox_get_type (), &amp;ttt_info);
+    }
+
+  return ttt_type;
+}
+
+static void
+tictactoe_class_init (TictactoeClass *class)
+{
+  GtkObjectClass *object_class;
+
+  object_class = (GtkObjectClass*) class;
+  
+  tictactoe_signals[TICTACTOE_SIGNAL] = gtk_signal_new ("tictactoe",
+                                         GTK_RUN_FIRST,
+                                         object_class->type,
+                                         GTK_SIGNAL_OFFSET (TictactoeClass,
+                                                            tictactoe),
+                                         gtk_signal_default_marshaller,
+                                         GTK_TYPE_NONE, 0);
+
+
+  gtk_object_class_add_signals (object_class, tictactoe_signals, LAST_SIGNAL);
+
+  class->tictactoe = NULL;
+}
+
+static void
+tictactoe_init (Tictactoe *ttt)
+{
+  GtkWidget *table;
+  gint i,j;
+  
+  table = gtk_table_new (3, 3, TRUE);
+  gtk_container_add (GTK_CONTAINER(ttt), table);
+  gtk_widget_show (table);
+
+  for (i=0;i&lt;3; i++)
+    for (j=0;j&lt;3; j++)
+      {
+        ttt->buttons[i][j] = gtk_toggle_button_new ();
+        gtk_table_attach_defaults (GTK_TABLE(table), ttt->buttons[i][j], 
+                                   i, i+1, j, j+1);
+        gtk_signal_connect (GTK_OBJECT (ttt->buttons[i][j]), "toggled",
+                            GTK_SIGNAL_FUNC (tictactoe_toggle), ttt);
+        gtk_widget_set_usize (ttt->buttons[i][j], 20, 20);
+        gtk_widget_show (ttt->buttons[i][j]);
+      }
+}
+
+GtkWidget*
+tictactoe_new ()
+{
+  return GTK_WIDGET ( gtk_type_new (tictactoe_get_type ()));
+}
+
+void           
+tictactoe_clear (Tictactoe *ttt)
+{
+  int i,j;
+
+  for (i=0;i&lt;3;i++)
+    for (j=0;j&lt;3;j++)
+      {
+        gtk_signal_handler_block_by_data (GTK_OBJECT(ttt->buttons[i][j]), ttt);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ttt->buttons[i][j]),
+                                     FALSE);
+        gtk_signal_handler_unblock_by_data (GTK_OBJECT(ttt->buttons[i][j]), 
ttt);
+      }
+}
+
+static void
+tictactoe_toggle (GtkWidget *widget, Tictactoe *ttt)
+{
+  int i,k;
+
+  static int rwins[8][3] = { { 0, 0, 0 }, { 1, 1, 1 }, { 2, 2, 2 },
+                             { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 },
+                             { 0, 1, 2 }, { 0, 1, 2 } };
+  static int cwins[8][3] = { { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 },
+                             { 0, 0, 0 }, { 1, 1, 1 }, { 2, 2, 2 },
+                             { 0, 1, 2 }, { 2, 1, 0 } };
+
+  int success, found;
+
+  for (k=0; k&lt;8; k++)
+    {
+      success = TRUE;
+      found = FALSE;
+
+      for (i=0;i&lt;3;i++)
+        {
+          success = success &amp;&amp; 
+            GTK_TOGGLE_BUTTON(ttt->buttons[rwins[k][i]][cwins[k][i]])->active;
+          found = found ||
+            ttt->buttons[rwins[k][i]][cwins[k][i]] == widget;
+        }
+      
+      if (success &amp;&amp; found)
+        {
+          gtk_signal_emit (GTK_OBJECT (ttt), 
+                           tictactoe_signals[TICTACTOE_SIGNAL]);
+          break;
+        }
+    }
+}
+
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>ttt_test.c</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start tictactoe ttt_test.c */
+
+#include &lt;gtk/gtk.h>
+#include "tictactoe.h"
+
+void win( GtkWidget *widget,
+          gpointer   data )
+{
+  g_print ("Yay!\n");
+  tictactoe_clear (TICTACTOE (widget));
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *ttt;
+  
+  gtk_init (&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  
+  gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");
+  
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_exit), NULL);
+  
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  ttt = tictactoe_new ();
+  
+  gtk_container_add (GTK_CONTAINER (window), ttt);
+  gtk_widget_show (ttt);
+
+  gtk_signal_connect (GTK_OBJECT (ttt), "tictactoe",
+                      GTK_SIGNAL_FUNC (win), NULL);
+
+  gtk_widget_show (window);
+  
+  gtk_main ();
+  
+  return 0;
+}
+
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss30.2">30.2 GtkDial</A>
+</H2>
+
+<H3>gtkdial.h</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start gtkdial gtkdial.h */
+
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef __GTK_DIAL_H__
+#define __GTK_DIAL_H__
+
+
+#include &lt;gdk/gdk.h>
+#include &lt;gtk/gtkadjustment.h>
+#include &lt;gtk/gtkwidget.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#define GTK_DIAL(obj)          GTK_CHECK_CAST (obj, gtk_dial_get_type (), 
GtkDial)
+#define GTK_DIAL_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_dial_get_type 
(), GtkDialClass)
+#define GTK_IS_DIAL(obj)       GTK_CHECK_TYPE (obj, gtk_dial_get_type ())
+
+
+typedef struct _GtkDial        GtkDial;
+typedef struct _GtkDialClass   GtkDialClass;
+
+struct _GtkDial
+{
+  GtkWidget widget;
+
+  /* update policy (GTK_UPDATE_[CONTINUOUS/DELAYED/DISCONTINUOUS]) */
+  guint policy : 2;
+
+  /* Button currently pressed or 0 if none */
+  guint8 button;
+
+  /* Dimensions of dial components */
+  gint radius;
+  gint pointer_width;
+
+  /* ID of update timer, or 0 if none */
+  guint32 timer;
+
+  /* Current angle */
+  gfloat angle;
+  gfloat last_angle;
+
+  /* Old values from adjustment stored so we know when something changes */
+  gfloat old_value;
+  gfloat old_lower;
+  gfloat old_upper;
+
+  /* The adjustment object that stores the data for this dial */
+  GtkAdjustment *adjustment;
+};
+
+struct _GtkDialClass
+{
+  GtkWidgetClass parent_class;
+};
+
+
+GtkWidget*     gtk_dial_new                    (GtkAdjustment *adjustment);
+guint          gtk_dial_get_type               (void);
+GtkAdjustment* gtk_dial_get_adjustment         (GtkDial      *dial);
+void           gtk_dial_set_update_policy      (GtkDial      *dial,
+                                                GtkUpdateType  policy);
+
+void           gtk_dial_set_adjustment         (GtkDial      *dial,
+                                                GtkAdjustment *adjustment);
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __GTK_DIAL_H__ */
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>gtkdial.c</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start gtkdial gtkdial.c */
+
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include &lt;math.h>
+#include &lt;stdio.h>
+#include &lt;gtk/gtkmain.h>
+#include &lt;gtk/gtksignal.h>
+
+#include "gtkdial.h"
+
+#define SCROLL_DELAY_LENGTH  300
+#define DIAL_DEFAULT_SIZE 100
+
+/* Forward declarations */
+
+static void gtk_dial_class_init               (GtkDialClass    *klass);
+static void gtk_dial_init                     (GtkDial         *dial);
+static void gtk_dial_destroy                  (GtkObject        *object);
+static void gtk_dial_realize                  (GtkWidget        *widget);
+static void gtk_dial_size_request             (GtkWidget      *widget,
+                                               GtkRequisition *requisition);
+static void gtk_dial_size_allocate            (GtkWidget     *widget,
+                                               GtkAllocation *allocation);
+static gint gtk_dial_expose                   (GtkWidget        *widget,
+                                                GdkEventExpose   *event);
+static gint gtk_dial_button_press             (GtkWidget        *widget,
+                                                GdkEventButton   *event);
+static gint gtk_dial_button_release           (GtkWidget        *widget,
+                                                GdkEventButton   *event);
+static gint gtk_dial_motion_notify            (GtkWidget        *widget,
+                                                GdkEventMotion   *event);
+static gint gtk_dial_timer                    (GtkDial         *dial);
+
+static void gtk_dial_update_mouse             (GtkDial *dial, gint x, gint y);
+static void gtk_dial_update                   (GtkDial *dial);
+static void gtk_dial_adjustment_changed       (GtkAdjustment    *adjustment,
+                                                gpointer          data);
+static void gtk_dial_adjustment_value_changed (GtkAdjustment    *adjustment,
+                                                gpointer          data);
+
+/* Local data */
+
+static GtkWidgetClass *parent_class = NULL;
+
+guint
+gtk_dial_get_type ()
+{
+  static guint dial_type = 0;
+
+  if (!dial_type)
+    {
+      GtkTypeInfo dial_info =
+      {
+        "GtkDial",
+        sizeof (GtkDial),
+        sizeof (GtkDialClass),
+        (GtkClassInitFunc) gtk_dial_class_init,
+        (GtkObjectInitFunc) gtk_dial_init,
+        (GtkArgSetFunc) NULL,
+        (GtkArgGetFunc) NULL,
+      };
+
+      dial_type = gtk_type_unique (gtk_widget_get_type (), &amp;dial_info);
+    }
+
+  return dial_type;
+}
+
+static void
+gtk_dial_class_init (GtkDialClass *class)
+{
+  GtkObjectClass *object_class;
+  GtkWidgetClass *widget_class;
+
+  object_class = (GtkObjectClass*) class;
+  widget_class = (GtkWidgetClass*) class;
+
+  parent_class = gtk_type_class (gtk_widget_get_type ());
+
+  object_class->destroy = gtk_dial_destroy;
+
+  widget_class->realize = gtk_dial_realize;
+  widget_class->expose_event = gtk_dial_expose;
+  widget_class->size_request = gtk_dial_size_request;
+  widget_class->size_allocate = gtk_dial_size_allocate;
+  widget_class->button_press_event = gtk_dial_button_press;
+  widget_class->button_release_event = gtk_dial_button_release;
+  widget_class->motion_notify_event = gtk_dial_motion_notify;
+}
+
+static void
+gtk_dial_init (GtkDial *dial)
+{
+  dial->button = 0;
+  dial->policy = GTK_UPDATE_CONTINUOUS;
+  dial->timer = 0;
+  dial->radius = 0;
+  dial->pointer_width = 0;
+  dial->angle = 0.0;
+  dial->old_value = 0.0;
+  dial->old_lower = 0.0;
+  dial->old_upper = 0.0;
+  dial->adjustment = NULL;
+}
+
+GtkWidget*
+gtk_dial_new (GtkAdjustment *adjustment)
+{
+  GtkDial *dial;
+
+  dial = gtk_type_new (gtk_dial_get_type ());
+
+  if (!adjustment)
+    adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 
0.0);
+
+  gtk_dial_set_adjustment (dial, adjustment);
+
+  return GTK_WIDGET (dial);
+}
+
+static void
+gtk_dial_destroy (GtkObject *object)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (object != NULL);
+  g_return_if_fail (GTK_IS_DIAL (object));
+
+  dial = GTK_DIAL (object);
+
+  if (dial->adjustment)
+    gtk_object_unref (GTK_OBJECT (dial->adjustment));
+
+  if (GTK_OBJECT_CLASS (parent_class)->destroy)
+    (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+
+GtkAdjustment*
+gtk_dial_get_adjustment (GtkDial *dial)
+{
+  g_return_val_if_fail (dial != NULL, NULL);
+  g_return_val_if_fail (GTK_IS_DIAL (dial), NULL);
+
+  return dial->adjustment;
+}
+
+void
+gtk_dial_set_update_policy (GtkDial      *dial,
+                             GtkUpdateType  policy)
+{
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  dial->policy = policy;
+}
+
+void
+gtk_dial_set_adjustment (GtkDial      *dial,
+                          GtkAdjustment *adjustment)
+{
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  if (dial->adjustment)
+    {
+      gtk_signal_disconnect_by_data (GTK_OBJECT (dial->adjustment), (gpointer) 
dial);
+      gtk_object_unref (GTK_OBJECT (dial->adjustment));
+    }
+
+  dial->adjustment = adjustment;
+  gtk_object_ref (GTK_OBJECT (dial->adjustment));
+
+  gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
+                      (GtkSignalFunc) gtk_dial_adjustment_changed,
+                      (gpointer) dial);
+  gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
+                      (GtkSignalFunc) gtk_dial_adjustment_value_changed,
+                      (gpointer) dial);
+
+  dial->old_value = adjustment->value;
+  dial->old_lower = adjustment->lower;
+  dial->old_upper = adjustment->upper;
+
+  gtk_dial_update (dial);
+}
+
+static void
+gtk_dial_realize (GtkWidget *widget)
+{
+  GtkDial *dial;
+  GdkWindowAttr attributes;
+  gint attributes_mask;
+
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_DIAL (widget));
+
+  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+  dial = GTK_DIAL (widget);
+
+  attributes.x = widget->allocation.x;
+  attributes.y = widget->allocation.y;
+  attributes.width = widget->allocation.width;
+  attributes.height = widget->allocation.height;
+  attributes.wclass = GDK_INPUT_OUTPUT;
+  attributes.window_type = GDK_WINDOW_CHILD;
+  attributes.event_mask = gtk_widget_get_events (widget) | 
+    GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | 
+    GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
+    GDK_POINTER_MOTION_HINT_MASK;
+  attributes.visual = gtk_widget_get_visual (widget);
+  attributes.colormap = gtk_widget_get_colormap (widget);
+
+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+  widget->window = gdk_window_new (widget->parent->window, &amp;attributes, 
attributes_mask);
+
+  widget->style = gtk_style_attach (widget->style, widget->window);
+
+  gdk_window_set_user_data (widget->window, widget);
+
+  gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+}
+
+static void 
+gtk_dial_size_request (GtkWidget      *widget,
+                       GtkRequisition *requisition)
+{
+  requisition->width = DIAL_DEFAULT_SIZE;
+  requisition->height = DIAL_DEFAULT_SIZE;
+}
+
+static void
+gtk_dial_size_allocate (GtkWidget     *widget,
+                        GtkAllocation *allocation)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_DIAL (widget));
+  g_return_if_fail (allocation != NULL);
+
+  widget->allocation = *allocation;
+  dial = GTK_DIAL (widget);
+
+  if (GTK_WIDGET_REALIZED (widget))
+    {
+
+      gdk_window_move_resize (widget->window,
+                              allocation->x, allocation->y,
+                              allocation->width, allocation->height);
+
+    }
+  dial->radius = MIN(allocation->width,allocation->height) * 0.45;
+  dial->pointer_width = dial->radius / 5;
+}
+
+static gint
+gtk_dial_expose (GtkWidget      *widget,
+                 GdkEventExpose *event)
+{
+  GtkDial *dial;
+  GdkPoint points[6];
+  gdouble s,c;
+  gdouble theta, last, increment;
+  GtkStyle      *blankstyle;
+  gint xc, yc;
+  gint upper, lower;
+  gint tick_length;
+  gint i, inc;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  if (event->count > 0)
+    return FALSE;
+  
+  dial = GTK_DIAL (widget);
+
+/*  gdk_window_clear_area (widget->window,
+                         0, 0,
+                         widget->allocation.width,
+                         widget->allocation.height);
+*/
+  xc = widget->allocation.width/2;
+  yc = widget->allocation.height/2;
+
+  upper = dial->adjustment->upper;
+  lower = dial->adjustment->lower;
+
+  /* Erase old pointer */
+
+  s = sin(dial->last_angle);
+  c = cos(dial->last_angle);
+  dial->last_angle = dial->angle;
+
+  points[0].x = xc + s*dial->pointer_width/2;
+  points[0].y = yc + c*dial->pointer_width/2;
+  points[1].x = xc + c*dial->radius;
+  points[1].y = yc - s*dial->radius;
+  points[2].x = xc - s*dial->pointer_width/2;
+  points[2].y = yc - c*dial->pointer_width/2;
+  points[3].x = xc - c*dial->radius/10;
+  points[3].y = yc + s*dial->radius/10;
+  points[4].x = points[0].x;
+  points[4].y = points[0].y;
+
+  blankstyle = gtk_style_new ();
+  blankstyle->bg_gc[GTK_STATE_NORMAL] =
+                widget->style->bg_gc[GTK_STATE_NORMAL];
+  blankstyle->dark_gc[GTK_STATE_NORMAL] =
+                widget->style->bg_gc[GTK_STATE_NORMAL];
+  blankstyle->light_gc[GTK_STATE_NORMAL] =
+                widget->style->bg_gc[GTK_STATE_NORMAL];
+  blankstyle->black_gc =
+                widget->style->bg_gc[GTK_STATE_NORMAL];
+
+  gtk_draw_polygon (blankstyle,
+                    widget->window,
+                    GTK_STATE_NORMAL,
+                    GTK_SHADOW_OUT,
+                    points, 5,
+                    FALSE);
+
+  gtk_style_unref(blankstyle);
+
+
+  /* Draw ticks */
+
+  if ((upper - lower) == 0)
+    return;
+
+  increment = (100*M_PI)/(dial->radius*dial->radius);
+
+  inc = (upper - lower);
+
+  while (inc &lt; 100) inc *=10;
+  while (inc >= 1000) inc /=10;
+  last = -1;
+
+  for (i=0; i&lt;=inc; i++)
+    {
+      theta = ((gfloat)i*M_PI/(18*inc/24.) - M_PI/6.);
+
+      if ((theta - last) &lt; (increment))
+        continue;     
+      last = theta;
+
+      s = sin(theta);
+      c = cos(theta);
+
+      tick_length = (i%(inc/10) == 0) ? dial->pointer_width : 
dial->pointer_width/2;
+
+      gdk_draw_line (widget->window,
+                     widget->style->fg_gc[widget->state],
+                     xc + c*(dial->radius - tick_length),
+                     yc - s*(dial->radius - tick_length),
+                     xc + c*dial->radius,
+                     yc - s*dial->radius);
+    }
+
+  /* Draw pointer */
+
+  s = sin(dial->angle);
+  c = cos(dial->angle);
+  dial->last_angle = dial->angle;
+
+  points[0].x = xc + s*dial->pointer_width/2;
+  points[0].y = yc + c*dial->pointer_width/2;
+  points[1].x = xc + c*dial->radius;
+  points[1].y = yc - s*dial->radius;
+  points[2].x = xc - s*dial->pointer_width/2;
+  points[2].y = yc - c*dial->pointer_width/2;
+  points[3].x = xc - c*dial->radius/10;
+  points[3].y = yc + s*dial->radius/10;
+  points[4].x = points[0].x;
+  points[4].y = points[0].y;
+
+
+  gtk_draw_polygon (widget->style,
+                    widget->window,
+                    GTK_STATE_NORMAL,
+                    GTK_SHADOW_OUT,
+                    points, 5,
+                    TRUE);
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_button_press (GtkWidget      *widget,
+                       GdkEventButton *event)
+{
+  GtkDial *dial;
+  gint dx, dy;
+  double s, c;
+  double d_parallel;
+  double d_perpendicular;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  dial = GTK_DIAL (widget);
+
+  /* Determine if button press was within pointer region - we 
+     do this by computing the parallel and perpendicular distance of
+     the point where the mouse was pressed from the line passing through
+     the pointer */
+  
+  dx = event->x - widget->allocation.width / 2;
+  dy = widget->allocation.height / 2 - event->y;
+  
+  s = sin(dial->angle);
+  c = cos(dial->angle);
+  
+  d_parallel = s*dy + c*dx;
+  d_perpendicular = fabs(s*dx - c*dy);
+  
+  if (!dial->button &amp;&amp;
+      (d_perpendicular &lt; dial->pointer_width/2) &amp;&amp;
+      (d_parallel > - dial->pointer_width))
+    {
+      gtk_grab_add (widget);
+
+      dial->button = event->button;
+
+      gtk_dial_update_mouse (dial, event->x, event->y);
+    }
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_button_release (GtkWidget      *widget,
+                          GdkEventButton *event)
+{
+  GtkDial *dial;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  dial = GTK_DIAL (widget);
+
+  if (dial->button == event->button)
+    {
+      gtk_grab_remove (widget);
+
+      dial->button = 0;
+
+      if (dial->policy == GTK_UPDATE_DELAYED)
+        gtk_timeout_remove (dial->timer);
+      
+      if ((dial->policy != GTK_UPDATE_CONTINUOUS) &amp;&amp;
+          (dial->old_value != dial->adjustment->value))
+        gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), 
"value_changed");
+    }
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_motion_notify (GtkWidget      *widget,
+                         GdkEventMotion *event)
+{
+  GtkDial *dial;
+  GdkModifierType mods;
+  gint x, y, mask;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  dial = GTK_DIAL (widget);
+
+  if (dial->button != 0)
+    {
+      x = event->x;
+      y = event->y;
+
+      if (event->is_hint || (event->window != widget->window))
+        gdk_window_get_pointer (widget->window, &amp;x, &amp;y, &amp;mods);
+
+      switch (dial->button)
+        {
+        case 1:
+          mask = GDK_BUTTON1_MASK;
+          break;
+        case 2:
+          mask = GDK_BUTTON2_MASK;
+          break;
+        case 3:
+          mask = GDK_BUTTON3_MASK;
+          break;
+        default:
+          mask = 0;
+          break;
+        }
+
+      if (mods &amp; mask)
+        gtk_dial_update_mouse (dial, x,y);
+    }
+
+  return FALSE;
+}
+
+static gint
+gtk_dial_timer (GtkDial *dial)
+{
+  g_return_val_if_fail (dial != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_DIAL (dial), FALSE);
+
+  if (dial->policy == GTK_UPDATE_DELAYED)
+    gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
+
+  return FALSE;
+}
+
+static void
+gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
+{
+  gint xc, yc;
+  gfloat old_value;
+
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  xc = GTK_WIDGET(dial)->allocation.width / 2;
+  yc = GTK_WIDGET(dial)->allocation.height / 2;
+
+  old_value = dial->adjustment->value;
+  dial->angle = atan2(yc-y, x-xc);
+
+  if (dial->angle &lt; -M_PI/2.)
+    dial->angle += 2*M_PI;
+
+  if (dial->angle &lt; -M_PI/6)
+    dial->angle = -M_PI/6;
+
+  if (dial->angle > 7.*M_PI/6.)
+    dial->angle = 7.*M_PI/6.;
+
+  dial->adjustment->value = dial->adjustment->lower + (7.*M_PI/6 - 
dial->angle) *
+    (dial->adjustment->upper - dial->adjustment->lower) / (4.*M_PI/3.);
+
+  if (dial->adjustment->value != old_value)
+    {
+      if (dial->policy == GTK_UPDATE_CONTINUOUS)
+        {
+          gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), 
"value_changed");
+        }
+      else
+        {
+          gtk_widget_draw (GTK_WIDGET(dial), NULL);
+
+          if (dial->policy == GTK_UPDATE_DELAYED)
+            {
+              if (dial->timer)
+                gtk_timeout_remove (dial->timer);
+
+              dial->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,
+                                             (GtkFunction) gtk_dial_timer,
+                                             (gpointer) dial);
+            }
+        }
+    }
+}
+
+static void
+gtk_dial_update (GtkDial *dial)
+{
+  gfloat new_value;
+  
+  g_return_if_fail (dial != NULL);
+  g_return_if_fail (GTK_IS_DIAL (dial));
+
+  new_value = dial->adjustment->value;
+  
+  if (new_value &lt; dial->adjustment->lower)
+    new_value = dial->adjustment->lower;
+
+  if (new_value > dial->adjustment->upper)
+    new_value = dial->adjustment->upper;
+
+  if (new_value != dial->adjustment->value)
+    {
+      dial->adjustment->value = new_value;
+      gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
+    }
+
+  dial->angle = 7.*M_PI/6. - (new_value - dial->adjustment->lower) * 
4.*M_PI/3. /
+    (dial->adjustment->upper - dial->adjustment->lower);
+
+  gtk_widget_draw (GTK_WIDGET(dial), NULL);
+}
+
+static void
+gtk_dial_adjustment_changed (GtkAdjustment *adjustment,
+                              gpointer       data)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (adjustment != NULL);
+  g_return_if_fail (data != NULL);
+
+  dial = GTK_DIAL (data);
+
+  if ((dial->old_value != adjustment->value) ||
+      (dial->old_lower != adjustment->lower) ||
+      (dial->old_upper != adjustment->upper))
+    {
+      gtk_dial_update (dial);
+
+      dial->old_value = adjustment->value;
+      dial->old_lower = adjustment->lower;
+      dial->old_upper = adjustment->upper;
+    }
+}
+
+static void
+gtk_dial_adjustment_value_changed (GtkAdjustment *adjustment,
+                                    gpointer       data)
+{
+  GtkDial *dial;
+
+  g_return_if_fail (adjustment != NULL);
+  g_return_if_fail (data != NULL);
+
+  dial = GTK_DIAL (data);
+
+  if (dial->old_value != adjustment->value)
+    {
+      gtk_dial_update (dial);
+
+      dial->old_value = adjustment->value;
+    }
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>dial_test.c</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#include &lt;gtk/gtk.h>
+#include "gtkdial.h"
+
+void value_changed( GtkAdjustment *adjustment,
+                    GtkWidget     *label )
+{
+  char buffer[16];
+
+  sprintf(buffer,"%4.2f",adjustment->value);
+  gtk_label_set (GTK_LABEL (label), buffer);
+}
+
+int main( int   argc,
+          char *argv[])
+{
+  GtkWidget *window;
+  GtkAdjustment *adjustment;
+  GtkWidget *dial;
+  GtkWidget *frame;
+  GtkWidget *vbox;
+  GtkWidget *label;
+  
+  gtk_init (&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  
+  gtk_window_set_title (GTK_WINDOW (window), "Dial");
+  
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_exit), NULL);
+  
+  gtk_container_border_width (GTK_CONTAINER (window), 10);
+
+  vbox = gtk_vbox_new (FALSE, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_widget_show(vbox);
+
+  frame = gtk_frame_new (NULL);
+  gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
+  gtk_container_add (GTK_CONTAINER (vbox), frame);
+  gtk_widget_show (frame); 
+ 
+  adjustment = GTK_ADJUSTMENT(gtk_adjustment_new (0, 0, 100, 0.01, 0.1, 0));
+  
+  dial = gtk_dial_new(adjustment);
+  gtk_dial_set_update_policy (GTK_DIAL(dial), GTK_UPDATE_DELAYED);
+  /*  gtk_widget_set_usize (dial, 100, 100); */
+  
+  gtk_container_add (GTK_CONTAINER (frame), dial);
+  gtk_widget_show (dial);
+
+  label = gtk_label_new("0.00");
+  gtk_box_pack_end (GTK_BOX(vbox), label, 0, 0, 0);
+  gtk_widget_show (label);
+
+  gtk_signal_connect (GTK_OBJECT(adjustment), "value_changed",
+                      GTK_SIGNAL_FUNC (value_changed), label);
+  
+  gtk_widget_show (window);
+  
+  gtk_main ();
+  
+  return 0;
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss30.3">30.3 Scribble</A>
+</H2>
+
+<P>
+<H3>scribble-simple.c</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start scribble-simple scribble-simple.c */
+
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include &lt;gtk/gtk.h>
+
+/* Backing pixmap for drawing area */
+static GdkPixmap *pixmap = NULL;
+
+/* Create a new backing pixmap of the appropriate size */
+static gint configure_event( GtkWidget         *widget,
+                             GdkEventConfigure *event )
+{
+  if (pixmap)
+    gdk_pixmap_unref(pixmap);
+
+  pixmap = gdk_pixmap_new(widget->window,
+                          widget->allocation.width,
+                          widget->allocation.height,
+                          -1);
+  gdk_draw_rectangle (pixmap,
+                      widget->style->white_gc,
+                      TRUE,
+                      0, 0,
+                      widget->allocation.width,
+                      widget->allocation.height);
+
+  return TRUE;
+}
+
+/* Redraw the screen from the backing pixmap */
+static gint expose_event( GtkWidget      *widget,
+                          GdkEventExpose *event )
+{
+  gdk_draw_pixmap(widget->window,
+                  widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                  pixmap,
+                  event->area.x, event->area.y,
+                  event->area.x, event->area.y,
+                  event->area.width, event->area.height);
+
+  return FALSE;
+}
+
+/* Draw a rectangle on the screen */
+static void draw_brush( GtkWidget *widget,
+                        gdouble    x,
+                        gdouble    y)
+{
+  GdkRectangle update_rect;
+
+  update_rect.x = x - 5;
+  update_rect.y = y - 5;
+  update_rect.width = 10;
+  update_rect.height = 10;
+  gdk_draw_rectangle (pixmap,
+                      widget->style->black_gc,
+                      TRUE,
+                      update_rect.x, update_rect.y,
+                      update_rect.width, update_rect.height);
+  gtk_widget_draw (widget, &amp;update_rect);
+}
+
+static gint button_press_event( GtkWidget      *widget,
+                                GdkEventButton *event )
+{
+  if (event->button == 1 &amp;&amp; pixmap != NULL)
+    draw_brush (widget, event->x, event->y);
+
+  return TRUE;
+}
+
+static gint motion_notify_event( GtkWidget *widget,
+                                 GdkEventMotion *event )
+{
+  int x, y;
+  GdkModifierType state;
+
+  if (event->is_hint)
+    gdk_window_get_pointer (event->window, &amp;x, &amp;y, &amp;state);
+  else
+    {
+      x = event->x;
+      y = event->y;
+      state = event->state;
+    }
+    
+  if (state &amp; GDK_BUTTON1_MASK &amp;&amp; pixmap != NULL)
+    draw_brush (widget, x, y);
+  
+  return TRUE;
+}
+
+void quit ()
+{
+  gtk_exit (0);
+}
+
+int main( int   argc, 
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *drawing_area;
+  GtkWidget *vbox;
+
+  GtkWidget *button;
+
+  gtk_init (&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name (window, "Test Input");
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_widget_show (vbox);
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (quit), NULL);
+
+  /* Create the drawing area */
+
+  drawing_area = gtk_drawing_area_new ();
+  gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
+  gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
+
+  gtk_widget_show (drawing_area);
+
+  /* Signals used to handle backing pixmap */
+
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+                      (GtkSignalFunc) expose_event, NULL);
+  gtk_signal_connect (GTK_OBJECT(drawing_area),"configure_event",
+                      (GtkSignalFunc) configure_event, NULL);
+
+  /* Event signals */
+
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",
+                      (GtkSignalFunc) motion_notify_event, NULL);
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+                      (GtkSignalFunc) button_press_event, NULL);
+
+  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+                         | GDK_LEAVE_NOTIFY_MASK
+                         | GDK_BUTTON_PRESS_MASK
+                         | GDK_POINTER_MOTION_MASK
+                         | GDK_POINTER_MOTION_HINT_MASK);
+
+  /* .. And a quit button */
+  button = gtk_button_new_with_label ("Quit");
+  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                             GTK_OBJECT (window));
+  gtk_widget_show (button);
+
+  gtk_widget_show (window);
+
+  gtk_main ();
+
+  return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>scribble-xinput.c</H3>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start scribble-xinput scribble-xinput.c */
+
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include &lt;gtk/gtk.h>
+
+/* Backing pixmap for drawing area */
+static GdkPixmap *pixmap = NULL;
+
+/* Create a new backing pixmap of the appropriate size */
+static gint
+configure_event (GtkWidget *widget, GdkEventConfigure *event)
+{
+  if (pixmap)
+     gdk_pixmap_unref(pixmap);
+
+  pixmap = gdk_pixmap_new(widget->window,
+                          widget->allocation.width,
+                          widget->allocation.height,
+                          -1);
+  gdk_draw_rectangle (pixmap,
+                      widget->style->white_gc,
+                      TRUE,
+                      0, 0,
+                      widget->allocation.width,
+                      widget->allocation.height);
+
+  return TRUE;
+}
+
+/* Redraw the screen from the backing pixmap */
+static gint
+expose_event (GtkWidget *widget, GdkEventExpose *event)
+{
+  gdk_draw_pixmap(widget->window,
+                  widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                  pixmap,
+                  event->area.x, event->area.y,
+                  event->area.x, event->area.y,
+                  event->area.width, event->area.height);
+
+  return FALSE;
+}
+
+/* Draw a rectangle on the screen, size depending on pressure,
+   and color on the type of device */
+static void
+draw_brush (GtkWidget *widget, GdkInputSource source,
+            gdouble x, gdouble y, gdouble pressure)
+{
+  GdkGC *gc;
+  GdkRectangle update_rect;
+
+  switch (source)
+    {
+    case GDK_SOURCE_MOUSE:
+      gc = widget->style->dark_gc[GTK_WIDGET_STATE (widget)];
+      break;
+    case GDK_SOURCE_PEN:
+      gc = widget->style->black_gc;
+      break;
+    case GDK_SOURCE_ERASER:
+      gc = widget->style->white_gc;
+      break;
+    default:
+      gc = widget->style->light_gc[GTK_WIDGET_STATE (widget)];
+    }
+
+  update_rect.x = x - 10 * pressure;
+  update_rect.y = y - 10 * pressure;
+  update_rect.width = 20 * pressure;
+  update_rect.height = 20 * pressure;
+  gdk_draw_rectangle (pixmap, gc, TRUE,
+                      update_rect.x, update_rect.y,
+                      update_rect.width, update_rect.height);
+  gtk_widget_draw (widget, &amp;update_rect);
+}
+
+static void
+print_button_press (guint32 deviceid)
+{
+  GList *tmp_list;
+
+  /* gdk_input_list_devices returns an internal list, so we shouldn't
+     free it afterwards */
+  tmp_list = gdk_input_list_devices();
+
+  while (tmp_list)
+    {
+      GdkDeviceInfo *info = (GdkDeviceInfo *)tmp_list->data;
+
+      if (info->deviceid == deviceid)
+        {
+          g_print("Button press on device '%s'\n", info->name);
+          return;
+        }
+
+      tmp_list = tmp_list->next;
+    }
+}
+
+static gint
+button_press_event (GtkWidget *widget, GdkEventButton *event)
+{
+  print_button_press (event->deviceid);
+  
+  if (event->button == 1 &amp;&amp; pixmap != NULL)
+    draw_brush (widget, event->source, event->x, event->y, event->pressure);
+
+  return TRUE;
+}
+
+static gint
+motion_notify_event (GtkWidget *widget, GdkEventMotion *event)
+{
+  gdouble x, y;
+  gdouble pressure;
+  GdkModifierType state;
+
+  if (event->is_hint)
+    gdk_input_window_get_pointer (event->window, event->deviceid,
+                                  &amp;x, &amp;y, &amp;pressure,
+                                  NULL, NULL, &amp;state);
+  else
+    {
+      x = event->x;
+      y = event->y;
+      pressure = event->pressure;
+      state = event->state;
+    }
+    
+  if (state &amp; GDK_BUTTON1_MASK &amp;&amp; pixmap != NULL)
+    draw_brush (widget, event->source, x, y, pressure);
+  
+  return TRUE;
+}
+
+void
+input_dialog_destroy (GtkWidget *w, gpointer data)
+{
+  *((GtkWidget **)data) = NULL;
+}
+
+void
+create_input_dialog ()
+{
+  static GtkWidget *inputd = NULL;
+
+  if (!inputd)
+    {
+      inputd = gtk_input_dialog_new();
+
+      gtk_signal_connect (GTK_OBJECT(inputd), "destroy",
+                          (GtkSignalFunc)input_dialog_destroy, &amp;inputd);
+      gtk_signal_connect_object 
(GTK_OBJECT(GTK_INPUT_DIALOG(inputd)->close_button),
+                                 "clicked",
+                                 (GtkSignalFunc)gtk_widget_hide,
+                                 GTK_OBJECT(inputd));
+      gtk_widget_hide ( GTK_INPUT_DIALOG(inputd)->save_button);
+
+      gtk_widget_show (inputd);
+    }
+  else
+    {
+      if (!GTK_WIDGET_MAPPED(inputd))
+        gtk_widget_show(inputd);
+      else
+        gdk_window_raise(inputd->window);
+    }
+}
+
+void
+quit ()
+{
+  gtk_exit (0);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GtkWidget *window;
+  GtkWidget *drawing_area;
+  GtkWidget *vbox;
+
+  GtkWidget *button;
+
+  gtk_init (&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name (window, "Test Input");
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_widget_show (vbox);
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (quit), NULL);
+
+  /* Create the drawing area */
+
+  drawing_area = gtk_drawing_area_new ();
+  gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
+  gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
+
+  gtk_widget_show (drawing_area);
+
+  /* Signals used to handle backing pixmap */
+
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+                      (GtkSignalFunc) expose_event, NULL);
+  gtk_signal_connect (GTK_OBJECT(drawing_area),"configure_event",
+                      (GtkSignalFunc) configure_event, NULL);
+
+  /* Event signals */
+
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",
+                      (GtkSignalFunc) motion_notify_event, NULL);
+  gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+                      (GtkSignalFunc) button_press_event, NULL);
+
+  gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+                         | GDK_LEAVE_NOTIFY_MASK
+                         | GDK_BUTTON_PRESS_MASK
+                         | GDK_POINTER_MOTION_MASK
+                         | GDK_POINTER_MOTION_HINT_MASK);
+
+  /* The following call enables tracking and processing of extension
+     events for the drawing area */
+  gtk_widget_set_extension_events (drawing_area, GDK_EXTENSION_EVENTS_CURSOR);
+
+  /* .. And some buttons */
+  button = gtk_button_new_with_label ("Input Dialog");
+  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (create_input_dialog), NULL);
+  gtk_widget_show (button);
+
+  button = gtk_button_new_with_label ("Quit");
+  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                             GTK_OBJECT (window));
+  gtk_widget_show (button);
+
+  gtk_widget_show (window);
+
+  gtk_main ();
+
+  return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-31.html">Next</A>
+<A HREF="gtk_tut-29.html">Previous</A>
+<A HREF="gtk_tut.html#toc30">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-31.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-31.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-31.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-31.html    3 Mar 2012 06:14:57 
-0000       1.1
@@ -0,0 +1,653 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: List Widget</TITLE>
+ <LINK HREF="gtk_tut-30.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc31" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+Next
+<A HREF="gtk_tut-30.html">Previous</A>
+<A HREF="gtk_tut.html#toc31">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s31">31. List Widget</A></H2>
+
+<P>NOTE: The List widget has been superseded by the CList widget. It is
+detailed here just for completeness.
+<P>The List widget is designed to act as a vertical container for
+widgets that should be of the type ListItem.
+<P>A List widget has its own window to receive events and its own
+background color which is usually white. As it is directly derived
+from a Container it can be treated as such by using the
+GTK_CONTAINER(List) macro, see the Container widget for more on
+this. One should already be familiar with the usage of a GList and
+its related functions g_list_*() to be able to use the List widget
+to it full extent.
+<P>There is one field inside the structure definition of the List
+widget that will be of greater interest to us, this is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkList
+{
+  ...
+  GList *selection;
+  guint selection_mode;
+  ...
+}; 
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The selection field of a List points to a linked list of all items
+that are currently selected, or NULL if the selection is empty.  So to
+learn about the current selection we read the GTK_LIST()->selection
+field, but do not modify it since the internal fields are maintained
+by the gtk_list_*() functions.
+<P>The selection_mode of the List determines the selection facilities
+of a List and therefore the contents of the GTK_LIST()->selection
+field. The selection_mode may be one of the following:
+<P>
+<UL>
+<LI> <CODE>GTK_SELECTION_SINGLE</CODE> - The selection is either NULL
+or contains a GList pointer
+for a single selected item.
+</LI>
+<LI> <CODE>GTK_SELECTION_BROWSE</CODE> -  The selection is NULL if the list
+contains no widgets or insensitive
+ones only, otherwise it contains
+a GList pointer for one GList
+structure, and therefore exactly
+one list item.
+</LI>
+<LI> <CODE>GTK_SELECTION_MULTIPLE</CODE> -  The selection is NULL if no list
+items are selected or a GList pointer
+for the first selected item. That
+in turn points to a GList structure
+for the second selected item and so
+on.
+</LI>
+<LI> <CODE>GTK_SELECTION_EXTENDED</CODE> - The selection is always NULL.</LI>
+</UL>
+<P>The default is <CODE>GTK_SELECTION_MULTIPLE</CODE>.
+<P>
+<H2><A NAME="ss31.1">31.1 Signals</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void selection_changed( GtkList *list );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal will be invoked whenever the selection field of a List
+has changed. This happens when a child of thekList got selected or
+deselected.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void select_child( GtkList   *list,
+                   GtkWidget *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is invoked when a child of the List is about to get
+selected. This happens mainly on calls to gtk_list_select_item(),
+gtk_list_select_child(), button presses and sometimes indirectly
+triggered on some else occasions where children get added to or
+removed from the List.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void unselect_child( GtkList   *list,
+                     GtkWidget *child );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This signal is invoked when a child of the List is about to get
+deselected. This happens mainly on calls to gtk_list_unselect_item(),
+gtk_list_unselect_child(), button presses and sometimes indirectly
+triggered on some else occasions where children get added to or
+removed from the List.
+<P>
+<H2><A NAME="ss31.2">31.2 Functions</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_list_get_type( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Returns the "GtkList" type identifier.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_list_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new List object. The new widget is returned as a pointer
+to a GtkWidget object. NULL is returned on failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_insert_items( GtkList *list,
+                            GList   *items,
+                            gint     position );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Insert list items into the list, starting at <CODE>position</CODE>.
+<CODE>items</CODE> is a doubly linked list where each nodes data pointer is
+expected to point to a newly created ListItem. The GList nodes of
+<CODE>items</CODE> are taken over by the list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_append_items( GtkList *list,
+                            GList   *items);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Insert list items just like gtk_list_insert_items() at the end of the
+list. The GList nodes of <CODE>items</CODE> are taken over by the list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_prepend_items( GtkList *list,
+                             GList   *items);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Insert list items just like gtk_list_insert_items() at the very
+beginning of the list. The GList nodes of <CODE>items</CODE> are taken over by
+the list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_remove_items( GtkList *list,
+                            GList   *items);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Remove list items from the list. <CODE>items</CODE> is a doubly linked list
+where each nodes data pointer is expected to point to a direct child
+of list. It is the callers responsibility to make a call to
+g_list_free(items) afterwards. Also the caller has to destroy the list
+items himself.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_clear_items( GtkList *list,
+                           gint start,
+                           gint end );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Remove and destroy list items from the list. A widget is affected if
+its current position within the list is in the range specified by
+<CODE>start</CODE> and <CODE>end</CODE>.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_select_item( GtkList *list,
+                           gint     item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Invoke the select_child signal for a list item specified through its
+current position within the list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_unselect_item( GtkList *list,
+                             gint     item);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Invoke the unselect_child signal for a list item specified through its
+current position within the list.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_select_child( GtkList *list,
+                            GtkWidget *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Invoke the select_child signal for the specified child.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_unselect_child( GtkList   *list,
+                              GtkWidget *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Invoke the unselect_child signal for the specified child.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint gtk_list_child_position( GtkList *list,
+                              GtkWidget *child);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Return the position of <CODE>child</CODE> within the list. "-1" is returned 
on
+failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_set_selection_mode( GtkList         *list,
+                                  GtkSelectionMode mode );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Set the selection mode MODE which can be of GTK_SELECTION_SINGLE,
+GTK_SELECTION_BROWSE, GTK_SELECTION_MULTIPLE or
+GTK_SELECTION_EXTENDED.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkList *GTK_LIST( gpointer obj );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkList *".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkListClass *GTK_LIST_CLASS( gpointer class);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkListClass *". 
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint GTK_IS_LIST( gpointer obj);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Determine if a generic pointer refers to a "GtkList" object.
+<P>
+<H2><A NAME="ss31.3">31.3 Example</A>
+</H2>
+
+<P>Following is an example program that will print out the changes of the
+selection of a List, and lets you "arrest" list items into a prison
+by selecting them with the rightmost mouse button.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start list list.c */
+
+/* Include the GTK header files
+ * Include stdio.h, we need that for the printf() function
+ */
+#include        &lt;gtk/gtk.h>
+#include        &lt;stdio.h>
+
+/* This is our data identification string to store
+ * data in list items
+ */
+const gchar *list_item_data_key="list_item_data";
+
+
+/* prototypes for signal handler that we are going to connect
+ * to the List widget
+ */
+static void  sigh_print_selection( GtkWidget *gtklist,
+                                   gpointer   func_data);
+
+static void  sigh_button_event( GtkWidget      *gtklist,
+                                GdkEventButton *event,
+                                GtkWidget      *frame );
+
+
+/* Main function to set up the user interface */
+
+gint main( int    argc,
+           gchar *argv[] )
+{                                  
+    GtkWidget *separator;
+    GtkWidget *window;
+    GtkWidget *vbox;
+    GtkWidget *scrolled_window;
+    GtkWidget *frame;
+    GtkWidget *gtklist;
+    GtkWidget *button;
+    GtkWidget *list_item;
+    GList *dlist;
+    guint i;
+    gchar buffer[64];
+    
+    
+    /* Initialize GTK (and subsequently GDK) */
+
+    gtk_init(&amp;argc, &amp;argv);
+    
+    
+    /* Create a window to put all the widgets in
+     * connect gtk_main_quit() to the "destroy" event of
+     * the window to handle window manager close-window-events
+     */
+    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title(GTK_WINDOW(window), "GtkList Example");
+    gtk_signal_connect(GTK_OBJECT(window),
+                       "destroy",
+                       GTK_SIGNAL_FUNC(gtk_main_quit),
+                       NULL);
+    
+    
+    /* Inside the window we need a box to arrange the widgets
+     * vertically */
+    vbox=gtk_vbox_new(FALSE, 5);
+    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+    gtk_container_add(GTK_CONTAINER(window), vbox);
+    gtk_widget_show(vbox);
+    
+    /* This is the scrolled window to put the List widget inside */
+    scrolled_window=gtk_scrolled_window_new(NULL, NULL);
+    gtk_widget_set_usize(scrolled_window, 250, 150);
+    gtk_container_add(GTK_CONTAINER(vbox), scrolled_window);
+    gtk_widget_show(scrolled_window);
+    
+    /* Create thekList widget.
+     * Connect the sigh_print_selection() signal handler
+     * function to the "selection_changed" signal of the List
+     * to print out the selected items each time the selection
+     * has changed */
+    gtklist=gtk_list_new();
+    gtk_scrolled_window_add_with_viewport( 
GTK_SCROLLED_WINDOW(scrolled_window),
+                                           gtklist);
+    gtk_widget_show(gtklist);
+    gtk_signal_connect(GTK_OBJECT(gtklist),
+                       "selection_changed",
+                       GTK_SIGNAL_FUNC(sigh_print_selection),
+                       NULL);
+    
+    /* We create a "Prison" to put a list item in ;) */
+    frame=gtk_frame_new("Prison");
+    gtk_widget_set_usize(frame, 200, 50);
+    gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
+    gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
+    gtk_container_add(GTK_CONTAINER(vbox), frame);
+    gtk_widget_show(frame);
+    
+    /* Connect the sigh_button_event() signal handler to the List
+     * which will handle the "arresting" of list items
+     */
+    gtk_signal_connect(GTK_OBJECT(gtklist),
+                       "button_release_event",
+                       GTK_SIGNAL_FUNC(sigh_button_event),
+                       frame);
+    
+    /* Create a separator */
+    separator=gtk_hseparator_new();
+    gtk_container_add(GTK_CONTAINER(vbox), separator);
+    gtk_widget_show(separator);
+    
+    /* Finally create a button and connect its "clicked" signal
+     * to the destruction of the window */
+    button=gtk_button_new_with_label("Close");
+    gtk_container_add(GTK_CONTAINER(vbox), button);
+    gtk_widget_show(button);
+    gtk_signal_connect_object(GTK_OBJECT(button),
+                              "clicked",
+                              GTK_SIGNAL_FUNC(gtk_widget_destroy),
+                              GTK_OBJECT(window));
+    
+    
+    /* Now we create 5 list items, each having its own
+     * label and add them to the List using gtk_container_add()
+     * Also we query the text string from the label and
+     * associate it with the list_item_data_key for each list item
+     */
+    for (i=0; i&lt;5; i++) {
+        GtkWidget       *label;
+        gchar           *string;
+        
+        sprintf(buffer, "ListItemContainer with Label #%d", i);
+        label=gtk_label_new(buffer);
+        list_item=gtk_list_item_new();
+        gtk_container_add(GTK_CONTAINER(list_item), label);
+        gtk_widget_show(label);
+        gtk_container_add(GTK_CONTAINER(gtklist), list_item);
+        gtk_widget_show(list_item);
+        gtk_label_get(GTK_LABEL(label), &amp;string);
+        gtk_object_set_data(GTK_OBJECT(list_item),
+                            list_item_data_key,
+                            string);
+    }
+    /* Here, we are creating another 5 labels, this time
+     * we use gtk_list_item_new_with_label() for the creation
+     * we can't query the text string from the label because
+     * we don't have the labels pointer and therefore
+     * we just associate the list_item_data_key of each
+     * list item with the same text string.
+     * For adding of the list items we put them all into a doubly
+     * linked list (GList), and then add them by a single call to
+     * gtk_list_append_items().
+     * Because we use g_list_prepend() to put the items into the
+     * doubly linked list, their order will be descending (instead
+     * of ascending when using g_list_append())
+     */
+    dlist=NULL;
+    for (; i&lt;10; i++) {
+        sprintf(buffer, "List Item with Label %d", i);
+        list_item=gtk_list_item_new_with_label(buffer);
+        dlist=g_list_prepend(dlist, list_item);
+        gtk_widget_show(list_item);
+        gtk_object_set_data(GTK_OBJECT(list_item),
+                            list_item_data_key,
+                            "ListItem with integrated Label");
+    }
+    gtk_list_append_items(GTK_LIST(gtklist), dlist);
+    
+    /* Finally we want to see the window, don't we? ;) */
+    gtk_widget_show(window);
+    
+    /* Fire up the main event loop of gtk */
+    gtk_main();
+    
+    /* We get here after gtk_main_quit() has been called which
+     * happens if the main window gets destroyed
+     */
+    return(0);
+}
+
+/* This is the signal handler that got connected to button
+ * press/release events of the List
+ */
+void sigh_button_event( GtkWidget      *gtklist,
+                        GdkEventButton *event,
+                        GtkWidget      *frame )
+{
+    /* We only do something if the third (rightmost mouse button
+     * was released
+     */
+    if (event->type==GDK_BUTTON_RELEASE &amp;&amp;
+        event->button==3) {
+        GList           *dlist, *free_list;
+        GtkWidget       *new_prisoner;
+        
+        /* Fetch the currently selected list item which
+         * will be our next prisoner ;)
+         */
+        dlist=GTK_LIST(gtklist)->selection;
+        if (dlist)
+                new_prisoner=GTK_WIDGET(dlist->data);
+        else
+                new_prisoner=NULL;
+        
+        /* Look for already imprisoned list items, we
+         * will put them back into the list.
+         * Remember to free the doubly linked list that
+         * gtk_container_children() returns
+         */
+        dlist=gtk_container_children(GTK_CONTAINER(frame));
+        free_list=dlist;
+        while (dlist) {
+            GtkWidget       *list_item;
+            
+            list_item=dlist->data;
+            
+            gtk_widget_reparent(list_item, gtklist);
+            
+            dlist=dlist->next;
+        }
+        g_list_free(free_list);
+        
+        /* If we have a new prisoner, remove him from the
+         * List and put him into the frame "Prison".
+         * We need to unselect the item first.
+         */
+        if (new_prisoner) {
+            GList   static_dlist;
+            
+            static_dlist.data=new_prisoner;
+            static_dlist.next=NULL;
+            static_dlist.prev=NULL;
+            
+            gtk_list_unselect_child(GTK_LIST(gtklist),
+                                    new_prisoner);
+            gtk_widget_reparent(new_prisoner, frame);
+        }
+    }
+}
+
+/* This is the signal handler that gets called if List
+ * emits the "selection_changed" signal
+ */
+void sigh_print_selection( GtkWidget *gtklist,
+                           gpointer   func_data )
+{
+    GList   *dlist;
+    
+    /* Fetch the doubly linked list of selected items
+     * of the List, remember to treat this as read-only!
+     */
+    dlist=GTK_LIST(gtklist)->selection;
+    
+    /* If there are no selected items there is nothing more
+     * to do than just telling the user so
+     */
+    if (!dlist) {
+        g_print("Selection cleared\n");
+        return;
+    }
+    /* Ok, we got a selection and so we print it
+     */
+    g_print("The selection is a ");
+    
+    /* Get the list item from the doubly linked list
+     * and then query the data associated with list_item_data_key.
+     * We then just print it */
+    while (dlist) {
+        GtkObject       *list_item;
+        gchar           *item_data_string;
+        
+        list_item=GTK_OBJECT(dlist->data);
+        item_data_string=gtk_object_get_data(list_item,
+                                             list_item_data_key);
+        g_print("%s ", item_data_string);
+        
+        dlist=dlist->next;
+    }
+    g_print("\n");
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss31.4">31.4 List Item Widget</A>
+</H2>
+
+<P>The ListItem widget is designed to act as a container holding up to
+one child, providing functions for selection/deselection just like the
+List widget requires them for its children.
+<P>A ListItem has its own window to receive events and has its own
+background color which is usually white.
+<P>As it is directly derived from an Item it can be treated as such by
+using the GTK_ITEM(ListItem) macro, see the Item widget for more on
+this. Usually a ListItem just holds a label to identify, e.g., a
+filename within a List -- therefore the convenience function
+gtk_list_item_new_with_label() is provided. The same effect can be
+achieved by creating a Label on its own, setting its alignment to
+xalign=0 and yalign=0.5 with a subsequent container addition to the
+ListItem.
+<P>As one is not forced to add a GtkLabel to a GtkListItem, you could
+also add a GtkVBox or a GtkArrow etc. to the GtkListItem.
+<P>
+<H2><A NAME="ss31.5">31.5 Signals</A>
+</H2>
+
+<P>AkListItem does not create new signals on its own, but inherits
+the signals of a Item.
+<P>
+<H2><A NAME="ss31.6">31.6 Functions</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_list_item_get_type( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Returns the "GtkListItem" type identifier.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_list_item_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new ListItem object. The new widget is returned as a
+pointer to a GtkWidget object. NULL is returned on failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_list_item_new_with_label( gchar *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Create a new ListItem object, having a single GtkLabel as the sole
+child. The new widget is returned as a pointer to a GtkWidget
+object. NULL is returned on failure.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_item_select( GtkListItem *list_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function is basically a wrapper around a call to gtk_item_select
+(GTK_ITEM (list_item)) which will emit the select signal.  *Note
+GtkItem::, for more info.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_list_item_deselect( GtkListItem *list_item );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function is basically a wrapper around a call to
+gtk_item_deselect (GTK_ITEM (list_item)) which will emit the deselect
+signal.  *Note GtkItem::, for more info.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkListItem *GTK_LIST_ITEM( gpointer obj );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to "GtkListItem *".
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkListItemClass *GTK_LIST_ITEM_CLASS( gpointer class );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Cast a generic pointer to GtkListItemClass*. *Note Standard Macros::,
+for more info.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gint GTK_IS_LIST_ITEM( gpointer obj );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Determine if a generic pointer refers to a `GtkListItem' object.
+*Note Standard Macros::, for more info.
+<P>
+<H2><A NAME="ss31.7">31.7 Example</A>
+</H2>
+
+<P>Please see the List example on this, which covers the usage of a
+ListItem as well.
+<P>
+<P>
+<HR NOSHADE>
+Next
+<A HREF="gtk_tut-30.html">Previous</A>
+<A HREF="gtk_tut.html#toc31">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-4.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-4.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-4.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-4.html     3 Mar 2012 06:14:58 
-0000       1.1
@@ -0,0 +1,687 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Packing Widgets </TITLE>
+ <LINK HREF="gtk_tut-5.html" REL=next>
+ <LINK HREF="gtk_tut-3.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc4" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-5.html">Next</A>
+<A HREF="gtk_tut-3.html">Previous</A>
+<A HREF="gtk_tut.html#toc4">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_packing_widgets"></A> <A NAME="s4">4. Packing Widgets 
</A></H2>
+
+<P>When creating an application, you'll want to put more than one widget
+inside a window. Our first <EM>helloworld</EM> example only used one
+widget so we could simply use a gtk_container_add call to "pack" the
+widget into the window. But when you want to put more than one widget
+into a window, how do you control where that widget is positioned?
+This is where packing comes in.
+<P>
+<H2><A NAME="ss4.1">4.1 Theory of Packing Boxes</A>
+</H2>
+
+<P>Most packing is done by creating boxes as in the example above. These
+are invisible widget containers that we can pack our widgets into
+which come in two forms, a horizontal box, and a vertical box. When
+packing widgets into a horizontal box, the objects are inserted
+horizontally from left to right or right to left depending on the call
+used. In a vertical box, widgets are packed from top to bottom or vice
+versa. You may use any combination of boxes inside or beside other
+boxes to create the desired effect.
+<P>To create a new horizontal box, we use a call to gtk_hbox_new(), and
+for vertical boxes, gtk_vbox_new(). The gtk_box_pack_start() and
+gtk_box_pack_end() functions are used to place objects inside of these
+containers. The gtk_box_pack_start() function will start at the top
+and work its way down in a vbox, and pack left to right in an hbox.
+gtk_box_pack_end() will do the opposite, packing from bottom to top in
+a vbox, and right to left in an hbox. Using these functions allows us
+to right justify or left justify our widgets and may be mixed in any
+way to achieve the desired effect. We will use gtk_box_pack_start() in
+most of our examples. An object may be another container or a
+widget. In fact, many widgets are actually containers themselves,
+including the button, but we usually only use a label inside a button.
+<P>By using these calls, GTK knows where you want to place your widgets
+so it can do automatic resizing and other nifty things. There are also
+a number of options as to how your widgets should be packed. As you
+can imagine, this method gives us a quite a bit of flexibility when
+placing and creating widgets.
+<P>
+<H2><A NAME="ss4.2">4.2 Details of Boxes</A>
+</H2>
+
+<P>Because of this flexibility, packing boxes in GTK can be confusing at
+first. There are a lot of options, and it's not immediately obvious how
+they all fit together. In the end, however, there are basically five
+different styles.
+<P> <CENTER >
+<IMG SRC="gtk_tut_packbox1.gif" VSPACE="15" HSPACE="10" WIDTH="528"
+HEIGHT="235" ALT="Box Packing Example Image"
+> </CENTER
+ >
+<P>Each line contains one horizontal box (hbox) with several buttons. The
+call to gtk_box_pack is shorthand for the call to pack each of the
+buttons into the hbox. Each of the buttons is packed into the hbox the
+same way (i.e., same arguments to the gtk_box_pack_start() function).
+<P>This is the declaration of the gtk_box_pack_start function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_box_pack_start( GtkBox    *box,
+                         GtkWidget *child,
+                         gint       expand,
+                         gint       fill,
+                         gint       padding );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the box you are packing the object into, the
+second is the object. The objects will all be buttons for now, so
+we'll be packing buttons into boxes.
+<P>The expand argument to gtk_box_pack_start() and gtk_box_pack_end()
+controls whether the widgets are laid out in the box to fill in all
+the extra space in the box so the box is expanded to fill the area
+allotted to it (TRUE); or the box is shrunk to just fit the widgets
+(FALSE). Setting expand to FALSE will allow you to do right and left
+justification of your widgets.  Otherwise, they will all expand to fit
+into the box, and the same effect could be achieved by using only one
+of gtk_box_pack_start or gtk_box_pack_end.
+<P>The fill argument to the gtk_box_pack functions control whether the
+extra space is allocated to the objects themselves (TRUE), or as extra
+padding in the box around these objects (FALSE). It only has an effect
+if the expand argument is also TRUE.
+<P>When creating a new box, the function looks like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_hbox_new (gint homogeneous,
+                         gint spacing);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The homogeneous argument to gtk_hbox_new (and the same for
+gtk_vbox_new) controls whether each object in the box has the same
+size (i.e., the same width in an hbox, or the same height in a
+vbox). If it is set, the gtk_box_pack routines function essentially
+as if the <CODE>expand</CODE> argument was always turned on.
+<P>What's the difference between spacing (set when the box is created)
+and padding (set when elements are packed)? Spacing is added between
+objects, and padding is added on either side of an object. The
+following figure should make it clearer:
+<P> <CENTER >
+<IMG ALIGN="center" SRC="gtk_tut_packbox2.gif" WIDTH="509"
+HEIGHT="213" VSPACE="15" HSPACE="10"
+ALT="Box Packing Example Image"
+> </CENTER
+ >
+<P>Here is the code used to create the above images. I've commented it
+fairly heavily so I hope you won't have any problems following
+it. Compile it yourself and play with it.
+<P>
+<H2><A NAME="ss4.3">4.3 Packing Demonstration Program</A>
+</H2>
+
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start packbox packbox.c */
+
+#include &lt;stdio.h>
+#include &lt;stdlib.h>
+#include "gtk/gtk.h"
+
+gint delete_event( GtkWidget *widget,
+                   GdkEvent  *event,
+                   gpointer   data )
+{
+    gtk_main_quit();
+    return(FALSE);
+}
+
+/* Make a new hbox filled with button-labels. Arguments for the 
+ * variables we're interested are passed in to this function. 
+ * We do not show the box, but do show everything inside. */
+GtkWidget *make_box( gint homogeneous,
+                     gint spacing,
+                     gint expand,
+                     gint fill,
+                     gint padding ) 
+{
+    GtkWidget *box;
+    GtkWidget *button;
+    char padstr[80];
+    
+    /* Create a new hbox with the appropriate homogeneous
+     * and spacing settings */
+    box = gtk_hbox_new (homogeneous, spacing);
+    
+    /* Create a series of buttons with the appropriate settings */
+    button = gtk_button_new_with_label ("gtk_box_pack");
+    gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
+    gtk_widget_show (button);
+    
+    button = gtk_button_new_with_label ("(box,");
+    gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
+    gtk_widget_show (button);
+    
+    button = gtk_button_new_with_label ("button,");
+    gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
+    gtk_widget_show (button);
+    
+    /* Create a button with the label depending on the value of
+     * expand. */
+    if (expand == TRUE)
+            button = gtk_button_new_with_label ("TRUE,");
+    else
+            button = gtk_button_new_with_label ("FALSE,");
+    
+    gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
+    gtk_widget_show (button);
+    
+    /* This is the same as the button creation for "expand"
+     * above, but uses the shorthand form. */
+    button = gtk_button_new_with_label (fill ? "TRUE," : "FALSE,");
+    gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
+    gtk_widget_show (button);
+    
+    sprintf (padstr, "%d);", padding);
+    
+    button = gtk_button_new_with_label (padstr);
+    gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);
+    gtk_widget_show (button);
+    
+    return box;
+}
+
+int main( int   argc,
+          char *argv[]) 
+{
+    GtkWidget *window;
+    GtkWidget *button;
+    GtkWidget *box1;
+    GtkWidget *box2;
+    GtkWidget *separator;
+    GtkWidget *label;
+    GtkWidget *quitbox;
+    int which;
+    
+    /* Our init, don't forget this! :) */
+    gtk_init (&amp;argc, &amp;argv);
+    
+    if (argc != 2) {
+        fprintf (stderr, "usage: packbox num, where num is 1, 2, or 3.\n");
+        /* This just does cleanup in GTK and exits with an exit status of 1. */
+        gtk_exit (1);
+    }
+    
+    which = atoi (argv[1]);
+
+    /* Create our window */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    /* You should always remember to connect the delete_event signal
+     * to the main window. This is very important for proper intuitive
+     * behavior */
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+    
+    /* We create a vertical box (vbox) to pack the horizontal boxes into.
+     * This allows us to stack the horizontal boxes filled with buttons one
+     * on top of the other in this vbox. */
+    box1 = gtk_vbox_new (FALSE, 0);
+    
+    /* which example to show. These correspond to the pictures above. */
+    switch (which) {
+    case 1:
+        /* create a new label. */
+        label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");
+        
+        /* Align the label to the left side.  We'll discuss this function and 
+         * others in the section on Widget Attributes. */
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+
+        /* Pack the label into the vertical box (vbox box1).  Remember that 
+         * widgets added to a vbox will be packed one on top of the other in
+         * order. */
+        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
+        
+        /* Show the label */
+        gtk_widget_show (label);
+        
+        /* Call our make box function - homogeneous = FALSE, spacing = 0,
+         * expand = FALSE, fill = FALSE, padding = 0 */
+        box2 = make_box (FALSE, 0, FALSE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+
+        /* Call our make box function - homogeneous = FALSE, spacing = 0,
+         * expand = TRUE, fill = FALSE, padding = 0 */
+        box2 = make_box (FALSE, 0, TRUE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (FALSE, 0, TRUE, TRUE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* Creates a separator, we'll learn more about these later, 
+         * but they are quite simple. */
+        separator = gtk_hseparator_new ();
+        
+        /* Pack the separator into the vbox. Remember each of these
+         * widgets is being packed into a vbox, so they'll be stacked
+         * vertically. */
+        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
+        gtk_widget_show (separator);
+        
+        /* Create another new label, and show it. */
+        label = gtk_label_new ("gtk_hbox_new (TRUE, 0);");
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
+        gtk_widget_show (label);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (TRUE, 0, TRUE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (TRUE, 0, TRUE, TRUE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* Another new separator. */
+        separator = gtk_hseparator_new ();
+        /* The last 3 arguments to gtk_box_pack_start are:
+         * expand, fill, padding. */
+        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
+        gtk_widget_show (separator);
+        
+        break;
+
+    case 2:
+
+        /* Create a new label, remember box1 is a vbox as created 
+         * near the beginning of main() */
+        label = gtk_label_new ("gtk_hbox_new (FALSE, 10);");
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
+        gtk_widget_show (label);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (FALSE, 10, TRUE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (FALSE, 10, TRUE, TRUE, 0);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        separator = gtk_hseparator_new ();
+        /* The last 3 arguments to gtk_box_pack_start are:
+         * expand, fill, padding. */
+        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
+        gtk_widget_show (separator);
+        
+        label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+        gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
+        gtk_widget_show (label);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (FALSE, 0, TRUE, FALSE, 10);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* Args are: homogeneous, spacing, expand, fill, padding */
+        box2 = make_box (FALSE, 0, TRUE, TRUE, 10);
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        separator = gtk_hseparator_new ();
+        /* The last 3 arguments to gtk_box_pack_start are: expand, fill, 
padding. */
+        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
+        gtk_widget_show (separator);
+        break;
+    
+    case 3:
+
+        /* This demonstrates the ability to use gtk_box_pack_end() to
+         * right justify widgets. First, we create a new box as before. */
+        box2 = make_box (FALSE, 0, FALSE, FALSE, 0);
+
+        /* Create the label that will be put at the end. */
+        label = gtk_label_new ("end");
+        /* Pack it using gtk_box_pack_end(), so it is put on the right
+         * side of the hbox created in the make_box() call. */
+        gtk_box_pack_end (GTK_BOX (box2), label, FALSE, FALSE, 0);
+        /* Show the label. */
+        gtk_widget_show (label);
+        
+        /* Pack box2 into box1 (the vbox remember ? :) */
+        gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
+        gtk_widget_show (box2);
+        
+        /* A separator for the bottom. */
+        separator = gtk_hseparator_new ();
+        /* This explicitly sets the separator to 400 pixels wide by 5 pixels
+         * high. This is so the hbox we created will also be 400 pixels wide,
+         * and the "end" label will be separated from the other labels in the
+         * hbox. Otherwise, all the widgets in the hbox would be packed as
+         * close together as possible. */
+        gtk_widget_set_usize (separator, 400, 5);
+        /* pack the separator into the vbox (box1) created near the start 
+         * of main() */
+        gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
+        gtk_widget_show (separator);    
+    }
+    
+    /* Create another new hbox.. remember we can use as many as we need! */
+    quitbox = gtk_hbox_new (FALSE, 0);
+    
+    /* Our quit button. */
+    button = gtk_button_new_with_label ("Quit");
+    
+    /* Setup the signal to terminate the program when the button is clicked */
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC (gtk_main_quit),
+                               GTK_OBJECT (window));
+    /* Pack the button into the quitbox.
+     * The last 3 arguments to gtk_box_pack_start are:
+     * expand, fill, padding. */
+    gtk_box_pack_start (GTK_BOX (quitbox), button, TRUE, FALSE, 0);
+    /* pack the quitbox into the vbox (box1) */
+    gtk_box_pack_start (GTK_BOX (box1), quitbox, FALSE, FALSE, 0);
+    
+    /* Pack the vbox (box1) which now contains all our widgets, into the
+     * main window. */
+    gtk_container_add (GTK_CONTAINER (window), box1);
+    
+    /* And show everything left */
+    gtk_widget_show (button);
+    gtk_widget_show (quitbox);
+    
+    gtk_widget_show (box1);
+    /* Showing the window last so everything pops up at once. */
+    gtk_widget_show (window);
+    
+    /* And of course, our main function. */
+    gtk_main ();
+
+    /* Control returns here when gtk_main_quit() is called, but not when 
+     * gtk_exit is used. */
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss4.4">4.4 Packing Using Tables</A>
+</H2>
+
+<P>Let's take a look at another way of packing - Tables. These can be
+extremely useful in certain situations.
+<P>Using tables, we create a grid that we can place widgets in. The
+widgets may take up as many spaces as we specify.
+<P>The first thing to look at, of course, is the gtk_table_new function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_table_new( gint rows,
+                          gint columns,
+                          gint homogeneous );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the number of rows to make in the table, while
+the second, obviously, is the number of columns.
+<P>The homogeneous argument has to do with how the table's boxes are
+sized. If homogeneous is TRUE, the table boxes are resized to the size
+of the largest widget in the table. If homogeneous is FALSE, the size
+of a table boxes is dictated by the tallest widget in its same row,
+and the widest widget in its column.
+<P>The rows and columns are laid out from 0 to n, where n was the number
+specified in the call to gtk_table_new. So, if you specify rows = 2
+and columns = 2, the layout would look something like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+ 0          1          2
+0+----------+----------+
+ |          |          |
+1+----------+----------+
+ |          |          |
+2+----------+----------+
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that the coordinate system starts in the upper left hand corner.
+To place a widget into a box, use the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_table_attach( GtkTable  *table,
+                       GtkWidget *child,
+                       gint       left_attach,
+                       gint       right_attach,
+                       gint       top_attach,
+                       gint       bottom_attach,
+                       gint       xoptions,
+                       gint       yoptions,
+                       gint       xpadding,
+                       gint       ypadding );
+</PRE>
+</CODE></BLOCKQUOTE>
+                                       
+<P>The first argument ("table") is the table you've created and the
+second ("child") the widget you wish to place in the table.
+<P>The left and right attach arguments specify where to place the widget,
+and how many boxes to use. If you want a button in the lower right
+table entry of our 2x2 table, and want it to fill that entry ONLY,
+left_attach would be = 1, right_attach = 2, top_attach = 1,
+bottom_attach = 2.
+<P>Now, if you wanted a widget to take up the whole top row of our 2x2
+table, you'd use left_attach = 0, right_attach = 2, top_attach = 0,
+bottom_attach = 1.
+<P>The xoptions and yoptions are used to specify packing options and may
+be bitwise OR'ed together to allow multiple options.
+<P>These options are:
+<UL>
+<LI><CODE>GTK_FILL</CODE> - If the table box is larger than the widget, and
+<CODE>GTK_FILL</CODE> is specified, the widget will expand to use all the room
+available.
+</LI>
+<LI><CODE>GTK_SHRINK</CODE> - If the table widget was allocated less space
+then was requested (usually by the user resizing the window), then the
+widgets would normally just be pushed off the bottom of the window and
+disappear. If <CODE>GTK_SHRINK</CODE> is specified, the widgets will shrink
+with the table.
+</LI>
+<LI><CODE>GTK_EXPAND</CODE> - This will cause the table to expand to use up
+any remaining space in the window.</LI>
+</UL>
+<P>Padding is just like in boxes, creating a clear area around the widget
+specified in pixels.
+<P>gtk_table_attach() has a LOT of options.  So, there's a shortcut:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_table_attach_defaults( GtkTable  *table,
+                                GtkWidget *widget,
+                                gint       left_attach,
+                                gint       right_attach,
+                                gint       top_attach,
+                                gint       bottom_attach );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The X and Y options default to <CODE>GTK_FILL | GTK_EXPAND</CODE>, and X 
and Y
+padding are set to 0. The rest of the arguments are identical to the
+previous function.
+<P>We also have gtk_table_set_row_spacing() and
+gtk_table_set_col_spacing(). These places spacing between the rows at
+the specified row or column.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_table_set_row_spacing( GtkTable *table,
+                                gint      row,
+                                gint      spacing );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>and
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_table_set_col_spacing ( GtkTable *table,
+                                 gint      column,
+                                 gint      spacing );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that for columns, the space goes to the right of the column, and
+for rows, the space goes below the row.
+<P>You can also set a consistent spacing of all rows and/or columns with:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_table_set_row_spacings( GtkTable *table,
+                                 gint      spacing );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And,
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_table_set_col_spacings( GtkTable *table,
+                                 gint      spacing );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Note that with these calls, the last row and last column do not get
+any spacing.
+<P>
+<H2><A NAME="ss4.5">4.5 Table Packing Example</A>
+</H2>
+
+<P>Here we make a window with three buttons in a 2x2 table.
+The first two buttons will be placed in the upper row.
+A third, quit button, is placed in the lower row, spanning both columns.
+Which means it should look something like this:
+<P> <CENTER >
+<IMG SRC="gtk_tut_table.gif" VSPACE="15" HSPACE="10" 
+ALT="Table Packing Example Image" WIDTH="180" HEIGHT="120"
+> </CENTER
+ >
+<P>Here's the source code:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start table table.c */
+
+#include &lt;gtk/gtk.h>
+
+/* Our callback.
+ * The data passed to this function is printed to stdout */
+void callback( GtkWidget *widget,
+               gpointer   data )
+{
+    g_print ("Hello again - %s was pressed\n", (char *) data);
+}
+
+/* This callback quits the program */
+gint delete_event( GtkWidget *widget,
+                   GdkEvent  *event,
+                   gpointer   data )
+{
+    gtk_main_quit ();
+    return(FALSE);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    GtkWidget *window;
+    GtkWidget *button;
+    GtkWidget *table;
+
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* Create a new window */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    /* Set the window title */
+    gtk_window_set_title (GTK_WINDOW (window), "Table");
+
+    /* Set a handler for delete_event that immediately
+     * exits GTK. */
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+
+    /* Sets the border width of the window. */
+    gtk_container_set_border_width (GTK_CONTAINER (window), 20);
+
+    /* Create a 2x2 table */
+    table = gtk_table_new (2, 2, TRUE);
+
+    /* Put the table in the main window */
+    gtk_container_add (GTK_CONTAINER (window), table);
+
+    /* Create first button */
+    button = gtk_button_new_with_label ("button 1");
+
+    /* When the button is clicked, we call the "callback" function
+     * with a pointer to "button 1" as its argument */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+              GTK_SIGNAL_FUNC (callback), (gpointer) "button 1");
+
+
+    /* Insert button 1 into the upper left quadrant of the table */
+    gtk_table_attach_defaults (GTK_TABLE(table), button, 0, 1, 0, 1);
+
+    gtk_widget_show (button);
+
+    /* Create second button */
+
+    button = gtk_button_new_with_label ("button 2");
+
+    /* When the button is clicked, we call the "callback" function
+     * with a pointer to "button 2" as its argument */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+              GTK_SIGNAL_FUNC (callback), (gpointer) "button 2");
+    /* Insert button 2 into the upper right quadrant of the table */
+    gtk_table_attach_defaults (GTK_TABLE(table), button, 1, 2, 0, 1);
+
+    gtk_widget_show (button);
+
+    /* Create "Quit" button */
+    button = gtk_button_new_with_label ("Quit");
+
+    /* When the button is clicked, we call the "delete_event" function
+     * and the program exits */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (delete_event), NULL);
+
+    /* Insert the quit button into the both 
+     * lower quadrants of the table */
+    gtk_table_attach_defaults (GTK_TABLE(table), button, 0, 2, 1, 2);
+
+    gtk_widget_show (button);
+
+    gtk_widget_show (table);
+    gtk_widget_show (window);
+
+    gtk_main ();
+
+    return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-5.html">Next</A>
+<A HREF="gtk_tut-3.html">Previous</A>
+<A HREF="gtk_tut.html#toc4">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-5.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-5.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-5.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-5.html     3 Mar 2012 06:14:58 
-0000       1.1
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Widget Overview</TITLE>
+ <LINK HREF="gtk_tut-6.html" REL=next>
+ <LINK HREF="gtk_tut-4.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc5" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-6.html">Next</A>
+<A HREF="gtk_tut-4.html">Previous</A>
+<A HREF="gtk_tut.html#toc5">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s5">5. Widget Overview</A></H2>
+
+<P>The general steps to creating a widget in GTK are:
+<OL>
+<LI> gtk_*_new - one of various functions to create a new widget.
+These are all detailed in this section.
+</LI>
+<LI> Connect all signals and events we wish to use to the
+appropriate handlers.
+</LI>
+<LI> Set the attributes of the widget.
+</LI>
+<LI> Pack the widget into a container using the appropriate call
+such as gtk_container_add() or gtk_box_pack_start().
+</LI>
+<LI> gtk_widget_show() the widget.</LI>
+</OL>
+<P>gtk_widget_show() lets GTK know that we are done setting the
+attributes of the widget, and it is ready to be displayed. You may
+also use gtk_widget_hide to make it disappear again. The order in
+which you show the widgets is not important, but I suggest showing the
+window last so the whole window pops up at once rather than seeing the
+individual widgets come up on the screen as they're formed. The
+children of a widget (a window is a widget too) will not be displayed
+until the window itself is shown using the gtk_widget_show() function.
+<P>
+<H2><A NAME="ss5.1">5.1 Casting</A>
+</H2>
+
+<P>You'll notice as you go on that GTK uses a type casting system. This
+is always done using macros that both test the ability to cast the
+given item, and perform the cast. Some common ones you will see are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_WIDGET(widget)
+  GTK_OBJECT(object)
+  GTK_SIGNAL_FUNC(function)
+  GTK_CONTAINER(container)
+  GTK_WINDOW(window)
+  GTK_BOX(box)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These are all used to cast arguments in functions. You'll see them in the
+examples, and can usually tell when to use them simply by looking at the
+function's declaration.
+<P>As you can see below in the class hierarchy, all GtkWidgets are
+derived from the Object base class. This means you can use a widget
+in any place the function asks for an object - simply use the
+<CODE>GTK_OBJECT()</CODE> macro.
+<P>For example:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_signal_connect( GTK_OBJECT(button), "clicked",
+                    GTK_SIGNAL_FUNC(callback_function), callback_data);
+</PRE>
+</CODE></BLOCKQUOTE>
+ 
+<P>This casts the button into an object, and provides a cast for the
+function pointer to the callback.
+<P>Many widgets are also containers. If you look in the class hierarchy
+below, you'll notice that many widgets derive from the Container
+class. Any one of these widgets may be used with the
+<CODE>GTK_CONTAINER</CODE> macro to pass them to functions that ask for
+containers.
+<P>Unfortunately, these macros are not extensively covered in the
+tutorial, but I recommend taking a look through the GTK header
+files. It can be very educational. In fact, it's not difficult to
+learn how a widget works just by looking at the function declarations.
+<P>
+<H2><A NAME="ss5.2">5.2 Widget Hierarchy</A>
+</H2>
+
+<P>For your reference, here is the class hierarchy tree used to implement 
widgets.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+ GtkObject
+  +GtkWidget
+  | +GtkMisc
+  | | +GtkLabel
+  | | | +GtkAccelLabel
+  | | | `GtkTipsQuery
+  | | +GtkArrow
+  | | +GtkImage
+  | | `GtkPixmap
+  | +GtkContainer
+  | | +GtkBin
+  | | | +GtkAlignment
+  | | | +GtkFrame
+  | | | | `GtkAspectFrame
+  | | | +GtkButton
+  | | | | +GtkToggleButton
+  | | | | | `GtkCheckButton
+  | | | | |   `GtkRadioButton
+  | | | | `GtkOptionMenu
+  | | | +GtkItem
+  | | | | +GtkMenuItem
+  | | | | | +GtkCheckMenuItem
+  | | | | | | `GtkRadioMenuItem
+  | | | | | `GtkTearoffMenuItem
+  | | | | +GtkListItem
+  | | | | `GtkTreeItem
+  | | | +GtkWindow
+  | | | | +GtkColorSelectionDialog
+  | | | | +GtkDialog
+  | | | | | `GtkInputDialog
+  | | | | +GtkDrawWindow
+  | | | | +GtkFileSelection
+  | | | | +GtkFontSelectionDialog
+  | | | | `GtkPlug
+  | | | +GtkEventBox
+  | | | +GtkHandleBox
+  | | | +GtkScrolledWindow
+  | | | `GtkViewport
+  | | +GtkBox
+  | | | +GtkButtonBox
+  | | | | +GtkHButtonBox
+  | | | | `GtkVButtonBox
+  | | | +GtkVBox
+  | | | | +GtkColorSelection
+  | | | | `GtkGammaCurve
+  | | | `GtkHBox
+  | | |   +GtkCombo
+  | | |   `GtkStatusbar
+  | | +GtkCList
+  | | | `GtkCTree
+  | | +GtkFixed
+  | | +GtkNotebook
+  | | | `GtkFontSelection
+  | | +GtkPaned
+  | | | +GtkHPaned
+  | | | `GtkVPaned
+  | | +GtkLayout
+  | | +GtkList
+  | | +GtkMenuShell
+  | | | +GtkMenuBar
+  | | | `GtkMenu
+  | | +GtkPacker
+  | | +GtkSocket
+  | | +GtkTable
+  | | +GtkToolbar
+  | | `GtkTree
+  | +GtkCalendar
+  | +GtkDrawingArea
+  | | `GtkCurve
+  | +GtkEditable
+  | | +GtkEntry
+  | | | `GtkSpinButton
+  | | `GtkText
+  | +GtkRuler
+  | | +GtkHRuler
+  | | `GtkVRuler
+  | +GtkRange
+  | | +GtkScale
+  | | | +GtkHScale
+  | | | `GtkVScale
+  | | `GtkScrollbar
+  | |   +GtkHScrollbar
+  | |   `GtkVScrollbar
+  | +GtkSeparator
+  | | +GtkHSeparator
+  | | `GtkVSeparator
+  | +GtkPreview
+  | `GtkProgress
+  |   `GtkProgressBar
+  +GtkData
+  | +GtkAdjustment
+  | `GtkTooltips
+  `GtkItemFactory
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss5.3">5.3 Widgets Without Windows</A>
+</H2>
+
+<P>The following widgets do not have an associated window. If you want to
+capture events, you'll have to use the EventBox. See the section on
+the 
+<A HREF="gtk_tut-10.html#sec_EventBox">EventBox</A> widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkAlignment
+GtkArrow
+GtkBin
+GtkBox
+GtkImage
+GtkItem
+GtkLabel
+GtkPixmap
+GtkScrolledWindow
+GtkSeparator
+GtkTable
+GtkAspectFrame
+GtkFrame
+GtkVBox
+GtkHBox
+GtkVSeparator
+GtkHSeparator
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>We'll further our exploration of GTK by examining each widget in turn,
+creating a few simple functions to display them. Another good source
+is the testgtk.c program that comes with GTK. It can be found in
+gtk/testgtk.c.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-6.html">Next</A>
+<A HREF="gtk_tut-4.html">Previous</A>
+<A HREF="gtk_tut.html#toc5">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-6.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-6.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-6.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-6.html     3 Mar 2012 06:14:58 
-0000       1.1
@@ -0,0 +1,427 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: The Button Widget</TITLE>
+ <LINK HREF="gtk_tut-7.html" REL=next>
+ <LINK HREF="gtk_tut-5.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc6" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-7.html">Next</A>
+<A HREF="gtk_tut-5.html">Previous</A>
+<A HREF="gtk_tut.html#toc6">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s6">6. The Button Widget</A></H2>
+
+<H2><A NAME="ss6.1">6.1 Normal Buttons</A>
+</H2>
+
+<P>We've almost seen all there is to see of the button widget. It's
+pretty simple. There are however two ways to create a button. You can
+use the gtk_button_new_with_label() to create a button with a label,
+or use gtk_button_new() to create a blank button. It's then up to you
+to pack a label or pixmap into this new button. To do this, create a
+new box, and then pack your objects into this box using the usual
+gtk_box_pack_start, and then use gtk_container_add to pack the box
+into the button.
+<P>Here's an example of using gtk_button_new to create a button with a
+picture and a label in it. I've broken up the code to create a box
+from the rest so you can use it in your programs. There are further
+examples of using pixmaps later in the tutorial.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start buttons buttons.c */
+
+#include &lt;gtk/gtk.h>
+
+/* Create a new hbox with an image and a label packed into it
+ * and return the box. */
+
+GtkWidget *xpm_label_box( GtkWidget *parent,
+                          gchar     *xpm_filename,
+                          gchar     *label_text )
+{
+    GtkWidget *box1;
+    GtkWidget *label;
+    GtkWidget *pixmapwid;
+    GdkPixmap *pixmap;
+    GdkBitmap *mask;
+    GtkStyle *style;
+
+    /* Create box for xpm and label */
+    box1 = gtk_hbox_new (FALSE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (box1), 2);
+
+    /* Get the style of the button to get the
+     * background color. */
+    style = gtk_widget_get_style(parent);
+
+    /* Now on to the xpm stuff */
+    pixmap = gdk_pixmap_create_from_xpm (parent->window, &amp;mask,
+                                         &amp;style->bg[GTK_STATE_NORMAL],
+                                         xpm_filename);
+    pixmapwid = gtk_pixmap_new (pixmap, mask);
+
+    /* Create a label for the button */
+    label = gtk_label_new (label_text);
+
+    /* Pack the pixmap and label into the box */
+    gtk_box_pack_start (GTK_BOX (box1),
+                        pixmapwid, FALSE, FALSE, 3);
+
+    gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 3);
+
+    gtk_widget_show(pixmapwid);
+    gtk_widget_show(label);
+
+    return(box1);
+}
+
+/* Our usual callback function */
+void callback( GtkWidget *widget,
+               gpointer   data )
+{
+    g_print ("Hello again - %s was pressed\n", (char *) data);
+}
+
+
+int main( int   argc,
+          char *argv[] )
+{
+    /* GtkWidget is the storage type for widgets */
+    GtkWidget *window;
+    GtkWidget *button;
+    GtkWidget *box1;
+
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* Create a new window */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+    gtk_window_set_title (GTK_WINDOW (window), "Pixmap'd Buttons!");
+
+    /* It's a good idea to do this for all windows. */
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC (gtk_exit), NULL);
+
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (gtk_exit), NULL);
+
+    /* Sets the border width of the window. */
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+    gtk_widget_realize(window);
+
+    /* Create a new button */
+    button = gtk_button_new ();
+
+    /* Connect the "clicked" signal of the button to our callback */
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (callback), (gpointer) "cool button");
+
+    /* This calls our box creating function */
+    box1 = xpm_label_box(window, "info.xpm", "cool button");
+
+    /* Pack and show all our widgets */
+    gtk_widget_show(box1);
+
+    gtk_container_add (GTK_CONTAINER (button), box1);
+
+    gtk_widget_show(button);
+
+    gtk_container_add (GTK_CONTAINER (window), button);
+
+    gtk_widget_show (window);
+
+    /* Rest in gtk_main and wait for the fun to begin! */
+    gtk_main ();
+
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The xpm_label_box function could be used to pack xpm's and labels into
+any widget that can be a container.
+<P>Notice in <CODE>xpm_label_box</CODE> how there is a call to
+<CODE>gtk_widget_get_style</CODE>. Every widget has a "style", consisting of
+foreground and background colors for a variety of situations, font
+selection, and other graphics data relevant to a widget. These style
+values are defaulted in each widget, and are required by many GDK
+function calls, such as <CODE>gdk_pixmap_create_from_xpm</CODE>, which here is
+given the "normal" background color. The style data of widgets may
+be customized, using 
+<A HREF="gtk_tut-21.html#sec_gtkrc_files">GTK's rc files</A>.
+<P>Also notice the call to <CODE>gtk_widget_realize</CODE> after setting the
+window's border width. This function uses GDK to create the X
+windows related to the widget. The function is automatically called
+when you invoke <CODE>gtk_widget_show</CODE> for a widget, and so has not been
+shown in earlier examples. But the call to
+<CODE>gdk_pixmap_create_from_xpm</CODE> requires that its <CODE>window</CODE> 
argument
+refer to a real X window, so it is necessary to realize the widget
+before this GDK call.
+<P>The Button widget has the following signals:
+<P>
+<UL>
+<LI><CODE>pressed</CODE> - emitted when pointer button is pressed within
+Button widget</LI>
+<LI><CODE>released</CODE> - emitted when pointer button is released within
+Button widget</LI>
+<LI><CODE>clicked</CODE> - emitted when pointer button is pressed and then
+released within Button widget</LI>
+<LI><CODE>enter</CODE> - emitted when pointer enters Button widget</LI>
+<LI><CODE>leave</CODE> - emitted when pointer leaves Button widget</LI>
+</UL>
+<P>
+<H2><A NAME="ss6.2">6.2 Toggle Buttons</A>
+</H2>
+
+<P>Toggle buttons are derived from normal buttons and are very similar,
+except they will always be in one of two states, alternated by a
+click. They may be depressed, and when you click again, they will pop
+back up. Click again, and they will pop back down.
+<P>Toggle buttons are the basis for check buttons and radio buttons, as
+such, many of the calls used for toggle buttons are inherited by radio
+and check buttons. I will point these out when we come to them.
+<P>Creating a new toggle button:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_toggle_button_new( void );
+
+GtkWidget *gtk_toggle_button_new_with_label( gchar *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you can imagine, these work identically to the normal button widget
+calls. The first creates a blank toggle button, and the second, a
+button with a label widget already packed into it.
+<P>To retrieve the state of the toggle widget, including radio and check
+buttons, we use a construct as shown in our example below. This tests
+the state of the toggle, by accessing the <CODE>active</CODE> field of the
+toggle widget's structure, after first using the
+<CODE>GTK_TOGGLE_BUTTON</CODE> macro to cast the widget pointer into a toggle
+widget pointer. The signal of interest to us emitted by toggle
+buttons (the toggle button, check button, and radio button widgets) is
+the "toggled" signal. To check the state of these buttons, set up a
+signal handler to catch the toggled signal, and access the structure
+to determine its state. The callback will look something like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void toggle_button_callback (GtkWidget *widget, gpointer data)
+{
+    if (GTK_TOGGLE_BUTTON (widget)->active) 
+    {
+        /* If control reaches here, the toggle button is down */
+    
+    } else {
+    
+        /* If control reaches here, the toggle button is up */
+    }
+}
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To force the state of a toggle button, and its children, the radio and
+check buttons, use this function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_toggle_button_set_active( GtkToggleButton *toggle_button,
+                                  gint             state );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The above call can be used to set the state of the toggle button, and
+its children the radio and check buttons. Passing in your created
+button as the first argument, and a TRUE or FALSE for the second state
+argument to specify whether it should be down (depressed) or up
+(released). Default is up, or FALSE.
+<P>Note that when you use the gtk_toggle_button_set_active() function, and
+the state is actually changed, it causes the "clicked" signal to be
+emitted from the button.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_toggle_button_toggled (GtkToggleButton *toggle_button);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This simply toggles the button, and emits the "toggled" signal.
+<P>
+<H2><A NAME="ss6.3">6.3 Check Buttons</A>
+</H2>
+
+<P>Check buttons inherit many properties and functions from the the
+toggle buttons above, but look a little different. Rather than being
+buttons with text inside them, they are small squares with the text to
+the right of them. These are often used for toggling options on and
+off in applications.
+<P>The two creation functions are similar to those of the normal button.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_check_button_new( void );
+
+GtkWidget *gtk_check_button_new_with_label ( gchar *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The new_with_label function creates a check button with a label beside
+it.
+<P>Checking the state of the check button is identical to that of the
+toggle button.
+<P>
+<H2><A NAME="sec_Radio_Buttons"></A> <A NAME="ss6.4">6.4 Radio Buttons </A>
+</H2>
+
+<P>Radio buttons are similar to check buttons except they are grouped so
+that only one may be selected/depressed at a time. This is good for
+places in your application where you need to select from a short list
+of options.
+<P>Creating a new radio button is done with one of these calls:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_radio_button_new( GSList *group );
+
+GtkWidget *gtk_radio_button_new_with_label( GSList *group,
+                                            gchar  *label );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You'll notice the extra argument to these calls. They require a group
+to perform their duty properly. The first call to
+gtk_radio_button_new_with_label or gtk_radio_button_new_with_label
+should pass NULL as the first argument. Then create a group using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GSList *gtk_radio_button_group( GtkRadioButton *radio_button );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The important thing to remember is that gtk_radio_button_group must be
+called for each new button added to the group, with the previous
+button passed in as an argument. The result is then passed into the
+next call to gtk_radio_button_new or
+gtk_radio_button_new_with_label. This allows a chain of buttons to be
+established. The example below should make this clear.
+<P>You can shorten this slightly by using the following syntax, which
+removes the need for a variable to hold the list of buttons. This form
+is used in the example to create the third button:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+     button2 = gtk_radio_button_new_with_label(
+                 gtk_radio_button_group (GTK_RADIO_BUTTON (button1)),
+                 "button2");
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>It is also a good idea to explicitly set which button should be the
+default depressed button with:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_toggle_button_set_active( GtkToggleButton *toggle_button,
+                                  gint             state );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This is described in the section on toggle buttons, and works in
+exactly the same way.  Once the radio buttons are grouped together,
+only one of the group may be active at a time. If the user clicks on
+one radio button, and then on another, the first radio button will
+first emit a "toggled" signal (to report becoming inactive), and then
+the second will emit its "toggled" signal (to report becoming active).
+<P>The following example creates a radio button group with three buttons.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start radiobuttons radiobuttons.c */
+
+#include &lt;gtk/gtk.h>
+#include &lt;glib.h>
+
+gint close_application( GtkWidget *widget,
+                        GdkEvent  *event,
+                        gpointer   data )
+{
+  gtk_main_quit();
+  return(FALSE);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    GtkWidget *window = NULL;
+    GtkWidget *box1;
+    GtkWidget *box2;
+    GtkWidget *button;
+    GtkWidget *separator;
+    GSList *group;
+  
+    gtk_init(&amp;argc,&amp;argv);    
+      
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC(close_application),
+                        NULL);
+
+    gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
+    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+
+    box1 = gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (window), box1);
+    gtk_widget_show (box1);
+
+    box2 = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    button = gtk_radio_button_new_with_label (NULL, "button1");
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    gtk_widget_show (button);
+
+    group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
+    button = gtk_radio_button_new_with_label(group, "button2");
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    gtk_widget_show (button);
+
+    button = gtk_radio_button_new_with_label(
+                 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
+                 "button3");
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    gtk_widget_show (button);
+
+    separator = gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
+    gtk_widget_show (separator);
+
+    box2 = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    button = gtk_button_new_with_label ("close");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC(close_application),
+                               GTK_OBJECT (window));
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    gtk_widget_show (window);
+     
+    gtk_main();
+
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-7.html">Next</A>
+<A HREF="gtk_tut-5.html">Previous</A>
+<A HREF="gtk_tut.html#toc6">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-7.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-7.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-7.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-7.html     3 Mar 2012 06:14:58 
-0000       1.1
@@ -0,0 +1,232 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Adjustments </TITLE>
+ <LINK HREF="gtk_tut-8.html" REL=next>
+ <LINK HREF="gtk_tut-6.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc7" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-8.html">Next</A>
+<A HREF="gtk_tut-6.html">Previous</A>
+<A HREF="gtk_tut.html#toc7">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_Adjustment"></A> <A NAME="s7">7. Adjustments </A></H2>
+
+<P>GTK has various widgets that can be visually adjusted by the user
+using the mouse or the keyboard, such as the range widgets, described
+in the 
+<A HREF="gtk_tut-8.html#sec_Range_Widgets">Range Widgets</A>
+section. There are also a few widgets that display some adjustable
+portion of a larger area of data, such as the text widget and the
+viewport widget.
+<P>Obviously, an application needs to be able to react to changes the
+user makes in range widgets. One way to do this would be to have each
+widget emit its own type of signal when its adjustment changes, and
+either pass the new value to the signal handler, or require it to look
+inside the widget's data structure in order to ascertain the value.
+But you may also want to connect the adjustments of several widgets
+together, so that adjusting one adjusts the others. The most obvious
+example of this is connecting a scrollbar to a panning viewport or a
+scrolling text area. If each widget has its own way of setting or
+getting the adjustment value, then the programmer may have to write
+their own signal handlers to translate between the output of one
+widget's signal and the "input" of another's adjustment setting
+function.
+<P>GTK solves this problem using the Adjustment object, which is not a
+widget but a way for widgets to store and pass adjustment information
+in an abstract and flexible form. The most obvious use of Adjustment
+is to store the configuration parameters and values of range widgets,
+such as scrollbars and scale controls. However, since Adjustments are
+derived from Object, they have some special powers beyond those of
+normal data structures. Most importantly, they can emit signals, just
+like widgets, and these signals can be used not only to allow your
+program to react to user input on adjustable widgets, but also to
+propagate adjustment values transparently between adjustable widgets.
+<P>You will see how adjustments fit in when you see the other widgets
+that incorporate them:
+<A HREF="gtk_tut-9.html#sec_ProgressBar">Progress Bars</A>,
+<A HREF="gtk_tut-10.html#sec_Viewports">Viewports</A>,
+<A HREF="gtk_tut-10.html#sec_ScrolledWindow">Scrolled Windows</A>, and others.
+<P>
+<H2><A NAME="ss7.1">7.1 Creating an Adjustment</A>
+</H2>
+
+<P>Many of the widgets which use adjustment objects do so automatically,
+but some cases will be shown in later examples where you may need to
+create one yourself. You create an adjustment using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkObject *gtk_adjustment_new( gfloat value,
+                               gfloat lower,
+                               gfloat upper,
+                               gfloat step_increment,
+                               gfloat page_increment,
+                               gfloat page_size );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>value</CODE> argument is the initial value you want to give to the
+adjustment, usually corresponding to the topmost or leftmost position
+of an adjustable widget. The <CODE>lower</CODE> argument specifies the lowest
+value which the adjustment can hold. The <CODE>step_increment</CODE> argument
+specifies the "smaller" of the two increments by which the user can
+change the value, while the <CODE>page_increment</CODE> is the "larger" one.
+The <CODE>page_size</CODE> argument usually corresponds somehow to the visible
+area of a panning widget. The <CODE>upper</CODE> argument is used to represent
+the bottom most or right most coordinate in a panning widget's
+child. Therefore it is <EM>not</EM> always the largest number that
+<CODE>value</CODE> can take, since the <CODE>page_size</CODE> of such widgets 
is
+usually non-zero.
+<P>
+<H2><A NAME="ss7.2">7.2 Using Adjustments the Easy Way</A>
+</H2>
+
+<P>The adjustable widgets can be roughly divided into those which use and
+require specific units for these values and those which treat them as
+arbitrary numbers. The group which treats the values as arbitrary
+numbers includes the range widgets (scrollbars and scales, the
+progress bar widget, and the spin button widget). These widgets are
+all the widgets which are typically "adjusted" directly by the user
+with the mouse or keyboard. They will treat the <CODE>lower</CODE> and
+<CODE>upper</CODE> values of an adjustment as a range within which the user
+can manipulate the adjustment's <CODE>value</CODE>. By default, they will only
+modify the <CODE>value</CODE> of an adjustment.
+<P>The other group includes the text widget, the viewport widget, the
+compound list widget, and the scrolled window widget. All of these
+widgets use pixel values for their adjustments. These are also all
+widgets which are typically "adjusted" indirectly using scrollbars.
+While all widgets which use adjustments can either create their own
+adjustments or use ones you supply, you'll generally want to let this
+particular category of widgets create its own adjustments. Usually,
+they will eventually override all the values except the <CODE>value</CODE>
+itself in whatever adjustments you give them, but the results are, in
+general, undefined (meaning, you'll have to read the source code to
+find out, and it may be different from widget to widget).
+<P>Now, you're probably thinking, since text widgets and viewports insist
+on setting everything except the <CODE>value</CODE> of their adjustments,
+while scrollbars will <EM>only</EM> touch the adjustment's <CODE>value</CODE>, 
if
+you <EM>share</EM> an adjustment object between a scrollbar and a text
+widget, manipulating the scrollbar will automagically adjust the text
+widget?  Of course it will! Just like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  /* creates its own adjustments */
+  text = gtk_text_new (NULL, NULL);
+  /* uses the newly-created adjustment for the scrollbar as well */
+  vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)->vadj);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss7.3">7.3 Adjustment Internals</A>
+</H2>
+
+<P>Ok, you say, that's nice, but what if I want to create my own handlers
+to respond when the user adjusts a range widget or a spin button, and
+how do I get at the value of the adjustment in these handlers?  To
+answer these questions and more, let's start by taking a look at
+<CODE>struct _GtkAdjustment</CODE> itself:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkAdjustment
+{
+  GtkData data;
+  
+  gfloat lower;
+  gfloat upper;
+  gfloat value;
+  gfloat step_increment;
+  gfloat page_increment;
+  gfloat page_size;
+};     
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first thing you should know is that there aren't any handy-dandy
+macros or accessor functions for getting the <CODE>value</CODE> out of an
+Adjustment, so you'll have to (horror of horrors) do it like a
+<EM>real</EM> C programmer.  Don't worry - the <CODE>GTK_ADJUSTMENT
+(Object)</CODE> macro does run-time type checking (as do all the GTK
+type-casting macros, actually).
+<P>Since, when you set the <CODE>value</CODE> of an adjustment, you generally
+want the change to be reflected by every widget that uses this
+adjustment, GTK provides this convenience function to do this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_adjustment_set_value( GtkAdjustment *adjustment,
+                               gfloat         value );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As mentioned earlier, Adjustment is a subclass of Object just
+like all the various widgets, and thus it is able to emit signals.
+This is, of course, why updates happen automagically when you share an
+adjustment object between a scrollbar and another adjustable widget;
+all adjustable widgets connect signal handlers to their adjustment's
+<CODE>value_changed</CODE> signal, as can your program. Here's the definition
+of this signal in <CODE>struct _GtkAdjustmentClass</CODE>:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  void (* value_changed) (GtkAdjustment *adjustment);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The various widgets that use the Adjustment object will emit this
+signal on an adjustment whenever they change its value. This happens
+both when user input causes the slider to move on a range widget, as
+well as when the program explicitly changes the value with
+<CODE>gtk_adjustment_set_value()</CODE>. So, for example, if you have a scale
+widget, and you want to change the rotation of a picture whenever its
+value changes, you would create a callback like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void cb_rotate_picture (GtkAdjustment *adj, GtkWidget *picture)
+{
+  set_picture_rotation (picture, adj->value);
+...
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>and connect it to the scale widget's adjustment like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+                    GTK_SIGNAL_FUNC (cb_rotate_picture), picture);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>What about when a widget reconfigures the <CODE>upper</CODE> or 
<CODE>lower</CODE>
+fields of its adjustment, such as when a user adds more text to a text
+widget?  In this case, it emits the <CODE>changed</CODE> signal, which looks
+like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  void (* changed)       (GtkAdjustment *adjustment);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Range widgets typically connect a handler to this signal, which
+changes their appearance to reflect the change - for example, the size
+of the slider in a scrollbar will grow or shrink in inverse proportion
+to the difference between the <CODE>lower</CODE> and <CODE>upper</CODE> values 
of its
+adjustment.
+<P>You probably won't ever need to attach a handler to this signal,
+unless you're writing a new type of range widget.  However, if you
+change any of the values in a Adjustment directly, you should emit
+this signal on it to reconfigure whatever widgets are using it, like
+this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "changed");
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Now go forth and adjust!
+<HR NOSHADE>
+<A HREF="gtk_tut-8.html">Next</A>
+<A HREF="gtk_tut-6.html">Previous</A>
+<A HREF="gtk_tut.html#toc7">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-8.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-8.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-8.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-8.html     3 Mar 2012 06:14:58 
-0000       1.1
@@ -0,0 +1,596 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Range Widgets</TITLE>
+ <LINK HREF="gtk_tut-9.html" REL=next>
+ <LINK HREF="gtk_tut-7.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc8" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-9.html">Next</A>
+<A HREF="gtk_tut-7.html">Previous</A>
+<A HREF="gtk_tut.html#toc8">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="sec_Range_Widgets"></A> <A NAME="s8">8. Range Widgets</A></H2>
+
+<P>The category of range widgets includes the ubiquitous scrollbar widget
+and the less common "scale" widget. Though these two types of widgets
+are generally used for different purposes, they are quite similar in
+function and implementation. All range widgets share a set of common
+graphic elements, each of which has its own X window and receives
+events. They all contain a "trough" and a "slider" (what is sometimes
+called a "thumbwheel" in other GUI environments). Dragging the slider
+with the pointer moves it back and forth within the trough, while
+clicking in the trough advances the slider towards the location of the
+click, either completely, or by a designated amount, depending on
+which mouse button is used.
+<P>As mentioned in 
+<A HREF="gtk_tut-7.html#sec_Adjustment">Adjustments</A> above,
+all range widgets are associated with an adjustment object, from which
+they calculate the length of the slider and its position within the
+trough. When the user manipulates the slider, the range widget will
+change the value of the adjustment.
+<P>
+<H2><A NAME="ss8.1">8.1 Scrollbar Widgets</A>
+</H2>
+
+<P>These are your standard, run-of-the-mill scrollbars. These should be
+used only for scrolling some other widget, such as a list, a text box,
+or a viewport (and it's generally easier to use the scrolled window
+widget in most cases).  For other purposes, you should use scale
+widgets, as they are friendlier and more featureful.
+<P>There are separate types for horizontal and vertical scrollbars.
+There really isn't much to say about these. You create them with the
+following functions, defined in <CODE>&lt;gtk/gtkhscrollbar.h&gt;</CODE>
+and <CODE>&lt;gtk/gtkvscrollbar.h&gt;</CODE>:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_hscrollbar_new( GtkAdjustment *adjustment );
+
+GtkWidget *gtk_vscrollbar_new( GtkAdjustment *adjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>and that's about it (if you don't believe me, look in the header
+files!).  The <CODE>adjustment</CODE> argument can either be a pointer to an
+existing Adjustment, or NULL, in which case one will be created for
+you. Specifying NULL might actually be useful in this case, if you
+wish to pass the newly-created adjustment to the constructor function
+of some other widget which will configure it for you, such as a text
+widget.
+<H2><A NAME="ss8.2">8.2 Scale Widgets</A>
+</H2>
+
+<P>Scale widgets are used to allow the user to visually select and
+manipulate a value within a specific range. You might want to use a
+scale widget, for example, to adjust the magnification level on a
+zoomed preview of a picture, or to control the brightness of a color,
+or to specify the number of minutes of inactivity before a screensaver
+takes over the screen.
+<P>
+<H3>Creating a Scale Widget</H3>
+
+<P>As with scrollbars, there are separate widget types for horizontal and
+vertical scale widgets. (Most programmers seem to favour horizontal
+scale widgets.) Since they work essentially the same way, there's no
+need to treat them separately here. The following functions, defined
+in <CODE>&lt;gtk/gtkvscale.h&gt;</CODE> and
+<CODE>&lt;gtk/gtkhscale.h&gt;</CODE>, create vertical and horizontal scale
+widgets, respectively:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_vscale_new( GtkAdjustment *adjustment );
+
+GtkWidget *gtk_hscale_new( GtkAdjustment *adjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>adjustment</CODE> argument can either be an adjustment which has
+already been created with <CODE>gtk_adjustment_new()</CODE>, or 
<CODE>NULL</CODE>, in
+which case, an anonymous Adjustment is created with all of its
+values set to <CODE>0.0</CODE> (which isn't very useful in this case). In
+order to avoid confusing yourself, you probably want to create your
+adjustment with a <CODE>page_size</CODE> of <CODE>0.0</CODE> so that its 
<CODE>upper</CODE>
+value actually corresponds to the highest value the user can select.
+(If you're <EM>already</EM> thoroughly confused, read the section on 
+<A HREF="gtk_tut-7.html#sec_Adjustment">Adjustments</A> again for an 
explanation of
+what exactly adjustments do and how to create and manipulate them.)
+<P>
+<H3>Functions and Signals (well, functions, at least)</H3>
+
+<P>Scale widgets can display their current value as a number beside the
+trough. The default behaviour is to show the value, but you can change
+this with this function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_scale_set_draw_value( GtkScale *scale,
+                               gint      draw_value );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you might have guessed, <CODE>draw_value</CODE> is either 
<CODE>TRUE</CODE> or
+<CODE>FALSE</CODE>, with predictable consequences for either one.
+<P>The value displayed by a scale widget is rounded to one decimal point
+by default, as is the <CODE>value</CODE> field in its GtkAdjustment. You can
+change this with:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_scale_set_digits( GtkScale *scale,
+                            gint     digits );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>where <CODE>digits</CODE> is the number of decimal places you want. You can
+set <CODE>digits</CODE> to anything you like, but no more than 13 decimal
+places will actually be drawn on screen.
+<P>Finally, the value can be drawn in different positions
+relative to the trough:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_scale_set_value_pos( GtkScale        *scale,
+                              GtkPositionType  pos );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The argument <CODE>pos</CODE> is of type <CODE>GtkPositionType</CODE>, 
which is
+defined in <CODE>&lt;gtk/gtkenums.h&gt;</CODE>, and can take one of the
+following values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_POS_LEFT
+  GTK_POS_RIGHT
+  GTK_POS_TOP
+  GTK_POS_BOTTOM
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If you position the value on the "side" of the trough (e.g., on the
+top or bottom of a horizontal scale widget), then it will follow the
+slider up and down the trough.
+<P>All the preceding functions are defined in
+<CODE>&lt;gtk/gtkscale.h&gt;</CODE>. The header files for all GTK widgets
+are automatically included when you include
+<CODE>&lt;gtk/gtk.h&gt;</CODE>. But you should look over the header files
+of all widgets that interest you,
+<P>
+<H2><A NAME="sec_Range_Functions"></A> <A NAME="ss8.3">8.3 Common Range 
Functions </A>
+</H2>
+
+<P>The Range widget class is fairly complicated internally, but, like
+all the "base class" widgets, most of its complexity is only
+interesting if you want to hack on it. Also, almost all of the
+functions and signals it defines are only really used in writing
+derived widgets. There are, however, a few useful functions that are
+defined in <CODE>&lt;gtk/gtkrange.h&gt;</CODE> and will work on all range
+widgets.
+<P>
+<H3>Setting the Update Policy</H3>
+
+<P>The "update policy" of a range widget defines at what points during
+user interaction it will change the <CODE>value</CODE> field of its
+Adjustment and emit the "value_changed" signal on this
+Adjustment. The update policies, defined in
+<CODE>&lt;gtk/gtkenums.h&gt;</CODE> as type <CODE>enum GtkUpdateType</CODE>,
+are:
+<P>
+<UL>
+<LI>GTK_UPDATE_POLICY_CONTINUOUS - This is the default. The
+"value_changed" signal is emitted continuously, i.e., whenever the
+slider is moved by even the tiniest amount.</LI>
+<LI>GTK_UPDATE_POLICY_DISCONTINUOUS - The "value_changed" signal is
+only emitted once the slider has stopped moving and the user has
+released the mouse button.</LI>
+<LI>GTK_UPDATE_POLICY_DELAYED - The "value_changed" signal is emitted
+when the user releases the mouse button, or if the slider stops moving
+for a short period of time.</LI>
+</UL>
+<P>The update policy of a range widget can be set by casting it using the
+<CODE>GTK_RANGE (Widget)</CODE> macro and passing it to this function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_range_set_update_policy( GtkRange      *range,
+                                  GtkUpdateType  policy) ;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H3>Getting and Setting Adjustments</H3>
+
+<P>Getting and setting the adjustment for a range widget "on the fly" is
+done, predictably, with:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkAdjustment* gtk_range_get_adjustment( GtkRange *range );
+
+void gtk_range_set_adjustment( GtkRange      *range,
+                               GtkAdjustment *adjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>gtk_range_get_adjustment()</CODE> returns a pointer to the adjustment 
to
+which <CODE>range</CODE> is connected.
+<P><CODE>gtk_range_set_adjustment()</CODE> does absolutely nothing if you pass 
it
+the adjustment that <CODE>range</CODE> is already using, regardless of whether
+you changed any of its fields or not. If you pass it a new
+Adjustment, it will unreference the old one if it exists (possibly
+destroying it), connect the appropriate signals to the new one, and
+call the private function <CODE>gtk_range_adjustment_changed()</CODE>, which
+will (or at least, is supposed to...) recalculate the size and/or
+position of the slider and redraw if necessary. As mentioned in the
+section on adjustments, if you wish to reuse the same Adjustment,
+when you modify its values directly, you should emit the "changed"
+signal on it, like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "changed");
+</PRE>
+</CODE></BLOCKQUOTE>
+<H2><A NAME="ss8.4">8.4 Key and Mouse bindings</A>
+</H2>
+
+<P>All of the GTK range widgets react to mouse clicks in more or less
+the same way. Clicking button-1 in the trough will cause its
+adjustment's <CODE>page_increment</CODE> to be added or subtracted from its
+<CODE>value</CODE>, and the slider to be moved accordingly. Clicking mouse
+button-2 in the trough will jump the slider to the point at which the
+button was clicked. Clicking any button on a scrollbar's arrows will
+cause its adjustment's value to change <CODE>step_increment</CODE> at a time.
+<P>It may take a little while to get used to, but by default, scrollbars
+as well as scale widgets can take the keyboard focus in GTK. If you
+think your users will find this too confusing, you can always disable
+this by unsetting the <CODE>GTK_CAN_FOCUS</CODE> flag on the scrollbar, like
+this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GTK_WIDGET_UNSET_FLAGS (scrollbar, GTK_CAN_FOCUS);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The key bindings (which are, of course, only active when the widget
+has focus) are slightly different between horizontal and vertical
+range widgets, for obvious reasons. They are also not quite the same
+for scale widgets as they are for scrollbars, for somewhat less
+obvious reasons (possibly to avoid confusion between the keys for
+horizontal and vertical scrollbars in scrolled windows, where both
+operate on the same area).
+<P>
+<H3>Vertical Range Widgets</H3>
+
+<P>All vertical range widgets can be operated with the up and down arrow
+keys, as well as with the <CODE>Page Up</CODE> and <CODE>Page Down</CODE> 
keys. The
+arrows move the slider up and down by <CODE>step_increment</CODE>, while
+<CODE>Page Up</CODE> and <CODE>Page Down</CODE> move it by 
<CODE>page_increment</CODE>.
+<P>The user can also move the slider all the way to one end or the other
+of the trough using the keyboard. With the VScale widget, this is
+done with the <CODE>Home</CODE> and <CODE>End</CODE> keys, whereas with the
+VScrollbar widget, this is done by typing <CODE>Control-Page Up</CODE>
+and <CODE>Control-Page Down</CODE>.
+<P>
+<H3>Horizontal Range Widgets</H3>
+
+<P>The left and right arrow keys work as you might expect in these
+widgets, moving the slider back and forth by <CODE>step_increment</CODE>. The
+<CODE>Home</CODE> and <CODE>End</CODE> keys move the slider to the ends of the 
trough.
+For the HScale widget, moving the slider by <CODE>page_increment</CODE> is
+accomplished with <CODE>Control-Left</CODE> and <CODE>Control-Right</CODE>,
+while for HScrollbar, it's done with <CODE>Control-Home</CODE> and
+<CODE>Control-End</CODE>.
+<H2><A NAME="sec_Range_Example"></A> <A NAME="ss8.5">8.5 Example</A>
+</H2>
+
+<P>This example is a somewhat modified version of the "range controls"
+test from <CODE>testgtk.c</CODE>. It basically puts up a window with three
+range widgets all connected to the same adjustment, and a couple of
+controls for adjusting some of the parameters mentioned above and in
+the section on adjustments, so you can see how they affect the way
+these widgets work for the user.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start rangewidgets rangewidgets.c */
+
+#include &lt;gtk/gtk.h>
+
+GtkWidget *hscale, *vscale;
+
+void cb_pos_menu_select( GtkWidget       *item,
+                         GtkPositionType  pos )
+{
+    /* Set the value position on both scale widgets */
+    gtk_scale_set_value_pos (GTK_SCALE (hscale), pos);
+    gtk_scale_set_value_pos (GTK_SCALE (vscale), pos);
+}
+
+void cb_update_menu_select( GtkWidget     *item,
+                            GtkUpdateType  policy )
+{
+    /* Set the update policy for both scale widgets */
+    gtk_range_set_update_policy (GTK_RANGE (hscale), policy);
+    gtk_range_set_update_policy (GTK_RANGE (vscale), policy);
+}
+
+void cb_digits_scale( GtkAdjustment *adj )
+{
+    /* Set the number of decimal places to which adj->value is rounded */
+    gtk_scale_set_digits (GTK_SCALE (hscale), (gint) adj->value);
+    gtk_scale_set_digits (GTK_SCALE (vscale), (gint) adj->value);
+}
+
+void cb_page_size( GtkAdjustment *get,
+                   GtkAdjustment *set )
+{
+    /* Set the page size and page increment size of the sample
+     * adjustment to the value specified by the "Page Size" scale */
+    set->page_size = get->value;
+    set->page_increment = get->value;
+    /* Now emit the "changed" signal to reconfigure all the widgets that
+     * are attached to this adjustment */
+    gtk_signal_emit_by_name (GTK_OBJECT (set), "changed");
+}
+
+void cb_draw_value( GtkToggleButton *button )
+{
+    /* Turn the value display on the scale widgets off or on depending
+     *  on the state of the checkbutton */
+    gtk_scale_set_draw_value (GTK_SCALE (hscale), button->active);
+    gtk_scale_set_draw_value (GTK_SCALE (vscale), button->active);  
+}
+
+/* Convenience functions */
+
+GtkWidget *make_menu_item( gchar         *name,
+                           GtkSignalFunc  callback,
+                           gpointer       data )
+{
+    GtkWidget *item;
+  
+    item = gtk_menu_item_new_with_label (name);
+    gtk_signal_connect (GTK_OBJECT (item), "activate",
+                        callback, data);
+    gtk_widget_show (item);
+
+    return(item);
+}
+
+void scale_set_default_values( GtkScale *scale )
+{
+    gtk_range_set_update_policy (GTK_RANGE (scale),
+                                 GTK_UPDATE_CONTINUOUS);
+    gtk_scale_set_digits (scale, 1);
+    gtk_scale_set_value_pos (scale, GTK_POS_TOP);
+    gtk_scale_set_draw_value (scale, TRUE);
+}
+
+/* makes the sample window */
+
+void create_range_controls( void )
+{
+    GtkWidget *window;
+    GtkWidget *box1, *box2, *box3;
+    GtkWidget *button;
+    GtkWidget *scrollbar;
+    GtkWidget *separator;
+    GtkWidget *opt, *menu, *item;
+    GtkWidget *label;
+    GtkWidget *scale;
+    GtkObject *adj1, *adj2;
+
+    /* Standard window-creating stuff */
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                        GTK_SIGNAL_FUNC(gtk_main_quit),
+                        NULL);
+    gtk_window_set_title (GTK_WINDOW (window), "range controls");
+
+    box1 = gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (window), box1);
+    gtk_widget_show (box1);
+
+    box2 = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    /* value, lower, upper, step_increment, page_increment, page_size */
+    /* Note that the page_size value only makes a difference for
+     * scrollbar widgets, and the highest value you'll get is actually
+     * (upper - page_size). */
+    adj1 = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
+  
+    vscale = gtk_vscale_new (GTK_ADJUSTMENT (adj1));
+    scale_set_default_values (GTK_SCALE (vscale));
+    gtk_box_pack_start (GTK_BOX (box2), vscale, TRUE, TRUE, 0);
+    gtk_widget_show (vscale);
+
+    box3 = gtk_vbox_new (FALSE, 10);
+    gtk_box_pack_start (GTK_BOX (box2), box3, TRUE, TRUE, 0);
+    gtk_widget_show (box3);
+
+    /* Reuse the same adjustment */
+    hscale = gtk_hscale_new (GTK_ADJUSTMENT (adj1));
+    gtk_widget_set_usize (GTK_WIDGET (hscale), 200, 30);
+    scale_set_default_values (GTK_SCALE (hscale));
+    gtk_box_pack_start (GTK_BOX (box3), hscale, TRUE, TRUE, 0);
+    gtk_widget_show (hscale);
+
+    /* Reuse the same adjustment again */
+    scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adj1));
+    /* Notice how this causes the scales to always be updated
+     * continuously when the scrollbar is moved */
+    gtk_range_set_update_policy (GTK_RANGE (scrollbar), 
+                                 GTK_UPDATE_CONTINUOUS);
+    gtk_box_pack_start (GTK_BOX (box3), scrollbar, TRUE, TRUE, 0);
+    gtk_widget_show (scrollbar);
+
+    box2 = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    /* A checkbutton to control whether the value is displayed or not */
+    button = gtk_check_button_new_with_label("Display value on scale widgets");
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+    gtk_signal_connect (GTK_OBJECT (button), "toggled",
+                        GTK_SIGNAL_FUNC(cb_draw_value), NULL);
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    gtk_widget_show (button);
+  
+    box2 = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+
+    /* An option menu to change the position of the value */
+    label = gtk_label_new ("Scale Value Position:");
+    gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 0);
+    gtk_widget_show (label);
+  
+    opt = gtk_option_menu_new();
+    menu = gtk_menu_new();
+
+    item = make_menu_item ("Top",
+                           GTK_SIGNAL_FUNC(cb_pos_menu_select),
+                           GINT_TO_POINTER (GTK_POS_TOP));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    item = make_menu_item ("Bottom", GTK_SIGNAL_FUNC (cb_pos_menu_select), 
+                           GINT_TO_POINTER (GTK_POS_BOTTOM));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    item = make_menu_item ("Left", GTK_SIGNAL_FUNC (cb_pos_menu_select),
+                           GINT_TO_POINTER (GTK_POS_LEFT));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    item = make_menu_item ("Right", GTK_SIGNAL_FUNC (cb_pos_menu_select),
+                            GINT_TO_POINTER (GTK_POS_RIGHT));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu);
+    gtk_box_pack_start (GTK_BOX (box2), opt, TRUE, TRUE, 0);
+    gtk_widget_show (opt);
+
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    box2 = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+
+    /* Yet another option menu, this time for the update policy of the
+     * scale widgets */
+    label = gtk_label_new ("Scale Update Policy:");
+    gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 0);
+    gtk_widget_show (label);
+  
+    opt = gtk_option_menu_new();
+    menu = gtk_menu_new();
+  
+    item = make_menu_item ("Continuous",
+                           GTK_SIGNAL_FUNC (cb_update_menu_select),
+                           GINT_TO_POINTER (GTK_UPDATE_CONTINUOUS));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    item = make_menu_item ("Discontinuous",
+                            GTK_SIGNAL_FUNC (cb_update_menu_select),
+                            GINT_TO_POINTER (GTK_UPDATE_DISCONTINUOUS));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    item = make_menu_item ("Delayed",
+                           GTK_SIGNAL_FUNC (cb_update_menu_select),
+                           GINT_TO_POINTER (GTK_UPDATE_DELAYED));
+    gtk_menu_append (GTK_MENU (menu), item);
+  
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu);
+    gtk_box_pack_start (GTK_BOX (box2), opt, TRUE, TRUE, 0);
+    gtk_widget_show (opt);
+  
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    box2 = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+  
+    /* An HScale widget for adjusting the number of digits on the
+     * sample scales. */
+    label = gtk_label_new ("Scale Digits:");
+    gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 0);
+    gtk_widget_show (label);
+
+    adj2 = gtk_adjustment_new (1.0, 0.0, 5.0, 1.0, 1.0, 0.0);
+    gtk_signal_connect (GTK_OBJECT (adj2), "value_changed",
+                        GTK_SIGNAL_FUNC (cb_digits_scale), NULL);
+    scale = gtk_hscale_new (GTK_ADJUSTMENT (adj2));
+    gtk_scale_set_digits (GTK_SCALE (scale), 0);
+    gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
+    gtk_widget_show (scale);
+
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+  
+    box2 = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+  
+    /* And, one last HScale widget for adjusting the page size of the
+     * scrollbar. */
+    label = gtk_label_new ("Scrollbar Page Size:");
+    gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 0);
+    gtk_widget_show (label);
+
+    adj2 = gtk_adjustment_new (1.0, 1.0, 101.0, 1.0, 1.0, 0.0);
+    gtk_signal_connect (GTK_OBJECT (adj2), "value_changed",
+                        GTK_SIGNAL_FUNC (cb_page_size), adj1);
+    scale = gtk_hscale_new (GTK_ADJUSTMENT (adj2));
+    gtk_scale_set_digits (GTK_SCALE (scale), 0);
+    gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
+    gtk_widget_show (scale);
+
+    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    separator = gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
+    gtk_widget_show (separator);
+
+    box2 = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
+    gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
+    gtk_widget_show (box2);
+
+    button = gtk_button_new_with_label ("Quit");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC(gtk_main_quit),
+                               NULL);
+    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+
+    gtk_widget_show (window);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    gtk_init(&amp;argc, &amp;argv);
+
+    create_range_controls();
+
+    gtk_main();
+
+    return(0);
+}
+
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You will notice that the program does not call 
<CODE>gtk_signal_connect</CODE>
+for the "delete_event", but only for the "destroy" signal. This will
+still perform the desired function, because an unhandled
+"delete_event" will result in a "destroy" signal being given to the
+window.
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-9.html">Next</A>
+<A HREF="gtk_tut-7.html">Previous</A>
+<A HREF="gtk_tut.html#toc8">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-9.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-9.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-9.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut-9.html     3 Mar 2012 06:14:58 
-0000       1.1
@@ -0,0 +1,2892 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial: Miscellaneous Widgets</TITLE>
+ <LINK HREF="gtk_tut-10.html" REL=next>
+ <LINK HREF="gtk_tut-8.html" REL=previous>
+ <LINK HREF="gtk_tut.html#toc9" REL=contents>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-10.html">Next</A>
+<A HREF="gtk_tut-8.html">Previous</A>
+<A HREF="gtk_tut.html#toc9">Contents</A>
+<HR NOSHADE>
+<H2><A NAME="s9">9. Miscellaneous Widgets</A></H2>
+
+<H2><A NAME="ss9.1">9.1 Labels</A>
+</H2>
+
+<P>Labels are used a lot in GTK, and are relatively simple. Labels emit
+no signals as they do not have an associated X window. If you need to
+catch signals, or do clipping, place it inside a 
+<A HREF="gtk_tut-10.html#sec_EventBox">EventBox</A> widget or a Button widget.
+<P>To create a new label, use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_label_new( char *str );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The sole argument is the string you wish the label to display.
+<P>To change the label's text after creation, use the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_label_set_text( GtkLabel *label,
+                         char     *str );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the label you created previously (cast
+using the <CODE>GTK_LABEL()</CODE> macro), and the second is the new string.
+<P>The space needed for the new string will be automatically adjusted if
+needed. You can produce multi-line labels by putting line breaks in
+the label string.
+<P>To retrieve the current string, use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_label_get( GtkLabel  *label,
+                    char     **str );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the label you've created, and the second,
+the return for the string. Do not free the return string, as it is
+used internally by GTK.
+<P>The label text can be justified using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_label_set_justify( GtkLabel         *label,
+                            GtkJustification  jtype );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Values for <CODE>jtype</CODE> are:
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_JUSTIFY_LEFT
+  GTK_JUSTIFY_RIGHT
+  GTK_JUSTIFY_CENTER (the default)
+  GTK_JUSTIFY_FILL
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The label widget is also capable of line wrapping the text
+automatically. This can be activated using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_label_set_line_wrap (GtkLabel *label,
+                              gboolean  wrap);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>wrap</CODE> argument takes a TRUE or FALSE value.
+<P>If you want your label underlined, then you can set a pattern on the
+label:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void       gtk_label_set_pattern   (GtkLabel          *label,
+                                    const gchar       *pattern);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The pattern argument indicates how the underlining should look. It
+consists of a string of underscore and space characters. An underscore
+indicates that the corresponding character in the label should be
+underlined. For example, the string 
+<PRE>
+"__     __"
+</PRE>
+ would underline the
+first two characters and eight and ninth characters.
+<P>Below is a short example to illustrate these functions. This example
+makes use of the Frame widget to better demonstrate the label
+styles. You can ignore this for now as the 
+<A HREF="gtk_tut-10.html#sec_Frames">Frame</A> widget is explained later on.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start label label.c */
+
+#include &lt;gtk/gtk.h>
+
+int main( int   argc,
+          char *argv[] )
+{
+  static GtkWidget *window = NULL;
+  GtkWidget *hbox;
+  GtkWidget *vbox;
+  GtkWidget *frame;
+  GtkWidget *label;
+
+  /* Initialise GTK */
+  gtk_init(&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC(gtk_main_quit),
+                      NULL);
+
+  gtk_window_set_title (GTK_WINDOW (window), "Label");
+  vbox = gtk_vbox_new (FALSE, 5);
+  hbox = gtk_hbox_new (FALSE, 5);
+  gtk_container_add (GTK_CONTAINER (window), hbox);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (window), 5);
+  
+  frame = gtk_frame_new ("Normal Label");
+  label = gtk_label_new ("This is a Normal label");
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+  
+  frame = gtk_frame_new ("Multi-line Label");
+  label = gtk_label_new ("This is a Multi-line label.\nSecond line\n" \
+                         "Third line");
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+  
+  frame = gtk_frame_new ("Left Justified Label");
+  label = gtk_label_new ("This is a Left-Justified\n" \
+                         "Multi-line label.\nThird      line");
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+  
+  frame = gtk_frame_new ("Right Justified Label");
+  label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\n" \
+                         "Fourth line, (j/k)");
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+
+  vbox = gtk_vbox_new (FALSE, 5);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
+  frame = gtk_frame_new ("Line wrapped label");
+  label = gtk_label_new ("This is an example of a line-wrapped label.  It " \
+                         "should not be taking up the entire             " /* 
big space to test spacing */\
+                         "width allocated to it, but automatically " \
+                         "wraps the words to fit.  " \
+                         "The time has come, for all good men, to come to " \
+                         "the aid of their party.  " \
+                         "The sixth sheik's six sheep's sick.\n" \
+                         "     It supports multiple paragraphs correctly, " \
+                         "and  correctly   adds "\
+                         "many          extra  spaces. ");
+  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+  
+  frame = gtk_frame_new ("Filled, wrapped label");
+  label = gtk_label_new ("This is an example of a line-wrapped, filled label.  
" \
+                         "It should be taking "\
+                         "up the entire              width allocated to it.  " 
\
+                         "Here is a sentence to prove "\
+                         "my point.  Here is another sentence. "\
+                         "Here comes the sun, do de do de do.\n"\
+                         "    This is a new paragraph.\n"\
+                         "    This is another newer, longer, better " \
+                         "paragraph.  It is coming to an end, "\
+                         "unfortunately.");
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
+  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+  
+  frame = gtk_frame_new ("Underlined label");
+  label = gtk_label_new ("This label is underlined!\n"
+                         "This one is underlined in quite a funky fashion");
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_label_set_pattern (GTK_LABEL (label),
+                         "_________________________ _ _________ _ ______     
__ _______ ___");
+  gtk_container_add (GTK_CONTAINER (frame), label);
+  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+  
+  gtk_widget_show_all (window);
+
+  gtk_main ();
+  
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.2">9.2 Arrows</A>
+</H2>
+
+<P>The Arrow widget draws an arrowhead, facing in a number of possible
+directions and having a number of possible styles. It can be very
+useful when placed on a button in many applications. Like the Label
+widget, it emits no signals.
+<P>There are only two functions for manipulating an Arrow widget:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_arrow_new( GtkArrowType   arrow_type,
+                          GtkShadowType  shadow_type );
+
+void gtk_arrow_set( GtkArrow      *arrow,
+                    GtkArrowType   arrow_type,
+                    GtkShadowType  shadow_type );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first creates a new arrow widget with the indicated type and
+appearance. The second allows these values to be altered
+retrospectively. The <CODE>arrow_type</CODE> argument may take one of the
+following values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_ARROW_UP
+  GTK_ARROW_DOWN
+  GTK_ARROW_LEFT
+  GTK_ARROW_RIGHT
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These values obviously indicate the direction in which the arrow will
+point. The <CODE>shadow_type</CODE> argument may take one of these values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_SHADOW_IN
+  GTK_SHADOW_OUT (the default)
+  GTK_SHADOW_ETCHED_IN
+  GTK_SHADOW_ETCHED_OUT
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Here's a brief example to illustrate their use.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start arrow arrow.c */
+
+#include &lt;gtk/gtk.h>
+
+/* Create an Arrow widget with the specified parameters
+ * and pack it into a button */
+GtkWidget *create_arrow_button( GtkArrowType  arrow_type,
+                                GtkShadowType shadow_type )
+{
+  GtkWidget *button;
+  GtkWidget *arrow;
+
+  button = gtk_button_new();
+  arrow = gtk_arrow_new (arrow_type, shadow_type);
+
+  gtk_container_add (GTK_CONTAINER (button), arrow);
+  
+  gtk_widget_show(button);
+  gtk_widget_show(arrow);
+
+  return(button);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+  /* GtkWidget is the storage type for widgets */
+  GtkWidget *window;
+  GtkWidget *button;
+  GtkWidget *box;
+
+  /* Initialize the toolkit */
+  gtk_init (&amp;argc, &amp;argv);
+
+  /* Create a new window */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  gtk_window_set_title (GTK_WINDOW (window), "Arrow Buttons");
+
+  /* It's a good idea to do this for all windows. */
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+
+  /* Sets the border width of the window. */
+  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+  /* Create a box to hold the arrows/buttons */
+  box = gtk_hbox_new (FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (box), 2);
+  gtk_container_add (GTK_CONTAINER (window), box);
+
+  /* Pack and show all our widgets */
+  gtk_widget_show(box);
+
+  button = create_arrow_button(GTK_ARROW_UP, GTK_SHADOW_IN);
+  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);
+
+  button = create_arrow_button(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);
+  
+  button = create_arrow_button(GTK_ARROW_LEFT, GTK_SHADOW_ETCHED_IN);
+  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);
+  
+  button = create_arrow_button(GTK_ARROW_RIGHT, GTK_SHADOW_ETCHED_OUT);
+  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 3);
+  
+  gtk_widget_show (window);
+  
+  /* Rest in gtk_main and wait for the fun to begin! */
+  gtk_main ();
+  
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.3">9.3 The Tooltips Object</A>
+</H2>
+
+<P>These are the little text strings that pop up when you leave your
+pointer over a button or other widget for a few seconds. They are easy
+to use, so I will just explain them without giving an example. If you
+want to see some code, take a look at the testgtk.c program
+distributed with GTK.
+<P>Widgets that do not receive events (widgets that do not have their
+own window) will not work with tooltips.
+<P>The first call you will use creates a new tooltip. You only need to do
+this once for a set of tooltips as the <CODE>GtkTooltips</CODE> object this
+function returns can be used to create multiple tooltips.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTooltips *gtk_tooltips_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Once you have created a new tooltip, and the widget you wish to use it
+on, simply use this call to set it:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tooltips_set_tip( GtkTooltips *tooltips,
+                           GtkWidget   *widget,
+                           const gchar *tip_text,
+                           const gchar *tip_private );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the tooltip you've already created, followed by
+the widget you wish to have this tooltip pop up for, and the text you
+wish it to say. The last argument is a text string that can be used as
+an identifier when using GtkTipsQuery to implement context sensitive
+help. For now, you can set it to NULL.
+<P>
+<P>Here's a short example:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkTooltips *tooltips;
+GtkWidget *button;
+.
+.
+.
+tooltips = gtk_tooltips_new ();
+button = gtk_button_new_with_label ("button 1");
+.
+.
+.
+gtk_tooltips_set_tip (tooltips, button, "This is button 1", NULL);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There are other calls that can be used with tooltips. I will just list
+them with a brief description of what they do.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tooltips_enable( GtkTooltips *tooltips );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Enable a disabled set of tooltips.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tooltips_disable( GtkTooltips *tooltips );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Disable an enabled set of tooltips.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tooltips_set_delay( GtkTooltips *tooltips,
+                             gint         delay );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Sets how many milliseconds you have to hold your pointer over the
+widget before the tooltip will pop up. The default is 500
+milliseconds (half a second).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_tooltips_set_colors( GtkTooltips *tooltips,
+                              GdkColor    *background,
+                              GdkColor    *foreground );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Set the foreground and background color of the tooltips.
+<P>And that's all the functions associated with tooltips. More than
+you'll ever want to know :-)
+<P>
+<H2><A NAME="sec_ProgressBar"></A> <A NAME="ss9.4">9.4 Progress Bars </A>
+</H2>
+
+<P>Progress bars are used to show the status of an operation. They are
+pretty easy to use, as you will see with the code below. But first
+lets start out with the calls to create a new progress bar.
+<P>There are two ways to create a progress bar, one simple that takes
+no arguments, and one that takes an Adjustment object as an
+argument. If the former is used, the progress bar creates its own
+adjustment object.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_progress_bar_new( void );
+
+GtkWidget *gtk_progress_bar_new_with_adjustment( GtkAdjustment *adjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The second method has the advantage that we can use the adjustment
+object to specify our own range parameters for the progress bar.
+<P>The adjustment of a progress object can be changed dynamically using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_set_adjustment( GtkProgress   *progress,
+                                  GtkAdjustment *adjustment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Now that the progress bar has been created we can use it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_bar_update( GtkProgressBar *pbar,
+                              gfloat          percentage );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first argument is the progress bar you wish to operate on, and the
+second argument is the amount "completed", meaning the amount the
+progress bar has been filled from 0-100%. This is passed to the
+function as a real number ranging from 0 to 1.
+<P>GTK v1.2 has added new functionality to the progress bar that enables
+it to display its value in different ways, and to inform the user of
+its current value and its range.
+<P>A progress bar may be set to one of a number of orientations using the
+function
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_bar_set_orientation( GtkProgressBar *pbar,
+                                       GtkProgressBarOrientation orientation );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>orientation</CODE> argument may take one of the following
+values to indicate the direction in which the progress bar moves:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_PROGRESS_LEFT_TO_RIGHT
+  GTK_PROGRESS_RIGHT_TO_LEFT
+  GTK_PROGRESS_BOTTOM_TO_TOP
+  GTK_PROGRESS_TOP_TO_BOTTOM
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When used as a measure of how far a process has progressed, the
+ProgressBar can be set to display its value in either a continuous
+or discrete mode. In continuous mode, the progress bar is updated for
+each value. In discrete mode, the progress bar is updated in a number
+of discrete blocks. The number of blocks is also configurable.
+<P>The style of a progress bar can be set using the following function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_bar_set_bar_style( GtkProgressBar      *pbar,
+                                     GtkProgressBarStyle  style );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>style</CODE> parameter can take one of two values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_PROGRESS_CONTINUOUS
+  GTK_PROGRESS_DISCRETE
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The number of discrete blocks can be set by calling
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_bar_set_discrete_blocks( GtkProgressBar *pbar,
+                                           guint           blocks );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As well as indicating the amount of progress that has occured, the
+progress bar may be set to just indicate that there is some
+activity. This can be useful in situations where progress cannot be
+measured against a value range. Activity mode is not effected by the
+bar style that is described above, and overrides it. This mode is
+either TRUE or FALSE, and is selected by the following function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_set_activity_mode( GtkProgress *progress,
+                                     guint        activity_mode );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The step size of the activity indicator, and the number of blocks are
+set using the following functions.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_bar_set_activity_step( GtkProgressBar *pbar,
+                                         guint           step );
+
+void gtk_progress_bar_set_activity_blocks( GtkProgressBar *pbar,
+                                           guint           blocks );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When in continuous mode, the progress bar can also display a
+configurable text string within its trough, using the following
+function.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_set_format_string( GtkProgress *progress,
+                                     gchar       *format);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>format</CODE> argument is similiar to one that would be used in a 
C
+<CODE>printf</CODE> statement. The following directives may be used within the
+format string:
+<P>
+<UL>
+<LI> %p - percentage</LI>
+<LI> %v - value</LI>
+<LI> %l - lower range value</LI>
+<LI> %u - upper range value</LI>
+</UL>
+<P>The displaying of this text string can be toggled using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_set_show_text( GtkProgress *progress,
+                                 gint         show_text );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>show_text</CODE> argument is a boolean TRUE/FALSE value. The
+appearance of the text can be modified further using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_set_text_alignment( GtkProgress   *progress,
+                                      gfloat         x_align,
+                                      gfloat         y_align );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>x_align</CODE> and <CODE>y_align</CODE> arguments take values 
between 0.0
+and 1.0. Their values indicate the position of the text string within
+the trough. Values of 0.0 for both would place the string in the top
+left hand corner; values of 0.5 (the default) centres the text, and
+values of 1.0 places the text in the lower right hand corner.
+<P>The current text setting of a progress object can be retrieved using
+the current or a specified adjustment value using the following two
+functions. The character string returned by these functions should be
+freed by the application (using the g_free() function). These
+functions return the formatted string that would be displayed within
+the trough.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *gtk_progress_get_current_text( GtkProgress   *progress );
+
+gchar *gtk_progress_get_text_from_value( GtkProgress *progress,
+                                         gfloat       value );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There is yet another way to change the range and value of a progress
+object using the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_configure( GtkProgress  *progress,
+                             gfloat        value,
+                             gfloat        min,
+                             gfloat        max );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function provides quite a simple interface to the range and value
+of a progress object.
+<P>The remaining functions can be used to get and set the current value
+of a progess object in various types and formats:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_progress_set_percentage( GtkProgress *progress,
+                                  gfloat       percentage );
+
+void gtk_progress_set_value( GtkProgress *progress,
+                             gfloat       value );
+
+gfloat gtk_progress_get_value( GtkProgress *progress );
+
+gfloat gtk_progress_get_current_percentage( GtkProgress *progress );
+
+gfloat gtk_progress_get_percentage_from_value( GtkProgress *progress,
+                                               gfloat       value );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These functions are pretty self explanatory. The last function uses
+the the adjustment of the specified progess object to compute the
+percentage value of the given range value.
+<P>Progress Bars are usually used with timeouts or other such functions
+(see section on 
+<A HREF="gtk_tut-17.html#sec_timeouts">Timeouts, I/O and Idle Functions</A>) 
to give the illusion of multitasking. All will employ the
+gtk_progress_bar_update function in the same manner.
+<P>Here is an example of the progress bar, updated using timeouts. This
+code also shows you how to reset the Progress Bar.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start progressbar progressbar.c */
+
+#include &lt;gtk/gtk.h>
+
+typedef struct _ProgressData {
+    GtkWidget *window;
+    GtkWidget *pbar;
+    int timer;
+} ProgressData;
+
+/* Update the value of the progress bar so that we get
+ * some movement */
+gint progress_timeout( gpointer data )
+{
+    gfloat new_val;
+    GtkAdjustment *adj;
+
+    /* Calculate the value of the progress bar using the
+     * value range set in the adjustment object */
+
+    new_val = gtk_progress_get_value( GTK_PROGRESS(data) ) + 1;
+
+    adj = GTK_PROGRESS (data)->adjustment;
+    if (new_val > adj->upper)
+      new_val = adj->lower;
+
+    /* Set the new value */
+    gtk_progress_set_value (GTK_PROGRESS (data), new_val);
+
+    /* As this is a timeout function, return TRUE so that it
+     * continues to get called */
+    return(TRUE);
+} 
+
+/* Callback that toggles the text display within the progress
+ * bar trough */
+void toggle_show_text( GtkWidget    *widget,
+                       ProgressData *pdata )
+{
+    gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
+                                GTK_TOGGLE_BUTTON (widget)->active);
+}
+
+/* Callback that toggles the activity mode of the progress
+ * bar */
+void toggle_activity_mode( GtkWidget    *widget,
+                           ProgressData *pdata )
+{
+    gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
+                                    GTK_TOGGLE_BUTTON (widget)->active);
+}
+
+/* Callback that toggles the continuous mode of the progress
+ * bar */
+void set_continuous_mode( GtkWidget    *widget,
+                          ProgressData *pdata )
+{
+    gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
+                                    GTK_PROGRESS_CONTINUOUS);
+}
+
+/* Callback that toggles the discrete mode of the progress
+ * bar */
+void set_discrete_mode( GtkWidget    *widget,
+                        ProgressData *pdata )
+{
+    gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
+                                    GTK_PROGRESS_DISCRETE);
+}
+ 
+/* Clean up allocated memory and remove the timer */
+void destroy_progress( GtkWidget     *widget,
+                       ProgressData *pdata)
+{
+    gtk_timeout_remove (pdata->timer);
+    pdata->timer = 0;
+    pdata->window = NULL;
+    g_free(pdata);
+    gtk_main_quit();
+}
+
+int main( int   argc,
+          char *argv[])
+{
+    ProgressData *pdata;
+    GtkWidget *align;
+    GtkWidget *separator;
+    GtkWidget *table;
+    GtkAdjustment *adj;
+    GtkWidget *button;
+    GtkWidget *check;
+    GtkWidget *vbox;
+
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* Allocate memory for the data that is passwd to the callbacks */
+    pdata = g_malloc( sizeof(ProgressData) );
+  
+    pdata->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
+
+    gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
+                        GTK_SIGNAL_FUNC (destroy_progress),
+                        pdata);
+    gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
+    gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
+
+    vbox = gtk_vbox_new (FALSE, 5);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
+    gtk_container_add (GTK_CONTAINER (pdata->window), vbox);
+    gtk_widget_show(vbox);
+  
+    /* Create a centering alignment object */
+    align = gtk_alignment_new (0.5, 0.5, 0, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 5);
+    gtk_widget_show(align);
+
+    /* Create a Adjusment object to hold the range of the
+     * progress bar */
+    adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 150, 0, 0, 0);
+
+    /* Create the GtkProgressBar using the adjustment */
+    pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
+
+    /* Set the format of the string that can be displayed in the
+     * trough of the progress bar:
+     * %p - percentage
+     * %v - value
+     * %l - lower range value
+     * %u - upper range value */
+    gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
+                                    "%v from [%l-%u] (=%p%%)");
+    gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
+    gtk_widget_show(pdata->pbar);
+
+    /* Add a timer callback to update the value of the progress bar */
+    pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
+
+    separator = gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0);
+    gtk_widget_show(separator);
+
+    /* rows, columns, homogeneous */
+    table = gtk_table_new (2, 3, FALSE);
+    gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
+    gtk_widget_show(table);
+
+    /* Add a check button to select displaying of the trough text */
+    check = gtk_check_button_new_with_label ("Show text");
+    gtk_table_attach (GTK_TABLE (table), check, 0, 1, 0, 1,
+                      GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+                      5, 5);
+    gtk_signal_connect (GTK_OBJECT (check), "clicked",
+                        GTK_SIGNAL_FUNC (toggle_show_text),
+                        pdata);
+    gtk_widget_show(check);
+
+    /* Add a check button to toggle activity mode */
+    check = gtk_check_button_new_with_label ("Activity mode");
+    gtk_table_attach (GTK_TABLE (table), check, 0, 1, 1, 2,
+                      GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+                      5, 5);
+    gtk_signal_connect (GTK_OBJECT (check), "clicked",
+                        GTK_SIGNAL_FUNC (toggle_activity_mode),
+                        pdata);
+    gtk_widget_show(check);
+
+    separator = gtk_vseparator_new ();
+    gtk_table_attach (GTK_TABLE (table), separator, 1, 2, 0, 2,
+                      GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+                      5, 5);
+    gtk_widget_show(separator);
+
+    /* Add a radio button to select continuous display mode */
+    button = gtk_radio_button_new_with_label (NULL, "Continuous");
+    gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1,
+                      GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+                      5, 5);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (set_continuous_mode),
+                        pdata);
+    gtk_widget_show (button);
+
+    /* Add a radio button to select discrete display mode */
+    button = gtk_radio_button_new_with_label(
+               gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
+               "Discrete");
+    gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2,
+                      GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
+                      5, 5);
+    gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                        GTK_SIGNAL_FUNC (set_discrete_mode),
+                        pdata);
+    gtk_widget_show (button);
+
+    separator = gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0);
+    gtk_widget_show(separator);
+
+    /* Add a button to exit the program */
+    button = gtk_button_new_with_label ("close");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               (GtkSignalFunc) gtk_widget_destroy,
+                               GTK_OBJECT (pdata->window));
+    gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+    /* This makes it so the button is the default. */
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+
+    /* This grabs this button to be the default button. Simply hitting
+     * the "Enter" key will cause this button to activate. */
+    gtk_widget_grab_default (button);
+    gtk_widget_show(button);
+
+    gtk_widget_show (pdata->window);
+
+    gtk_main ();
+    
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.5">9.5 Dialogs</A>
+</H2>
+
+<P>The Dialog widget is very simple, and is actually just a window with a
+few things pre-packed into it for you. The structure for a Dialog is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct GtkDialog
+{
+      GtkWindow window;
+    
+      GtkWidget *vbox;
+      GtkWidget *action_area;
+};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>So you see, it simply creates a window, and then packs a vbox into the
+top, which contains a separator and then an hbox called the
+"action_area".
+<P>The Dialog widget can be used for pop-up messages to the user, and
+other similar tasks. It is really basic, and there is only one
+function for the dialog box, which is:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_dialog_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>So to create a new dialog box, use,
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    GtkWidget *window;
+    window = gtk_dialog_new ();
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This will create the dialog box, and it is now up to you to use it.
+You could pack a button in the action_area by doing something like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    button = ...
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+                        button, TRUE, TRUE, 0);
+    gtk_widget_show (button);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>And you could add to the vbox area by packing, for instance, a label 
+in it, try something like this:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    label = gtk_label_new ("Dialogs are groovy");
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
+                        label, TRUE, TRUE, 0);
+    gtk_widget_show (label);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As an example in using the dialog box, you could put two buttons in
+the action_area, a Cancel button and an Ok button, and a label in the
+vbox area, asking the user a question or giving an error etc. Then
+you could attach a different signal to each of the buttons and perform
+the operation the user selects.
+<P>If the simple functionality provided by the default vertical and
+horizontal boxes in the two areas doesn't give you enough control for
+your application, then you can simply pack another layout widget into
+the boxes provided. For example, you could pack a table into the
+vertical box.
+<P>
+<H2><A NAME="sec_Pixmaps"></A> <A NAME="ss9.6">9.6 Pixmaps </A>
+</H2>
+
+<P>Pixmaps are data structures that contain pictures. These pictures can
+be used in various places, but most commonly as icons on the X
+desktop, or as cursors.
+<P>A pixmap which only has 2 colors is called a bitmap, and there are a
+few additional routines for handling this common special case.
+<P>To understand pixmaps, it would help to understand how X window
+system works. Under X, applications do not need to be running on the
+same computer that is interacting with the user. Instead, the various
+applications, called "clients", all communicate with a program which
+displays the graphics and handles the keyboard and mouse. This
+program which interacts directly with the user is called a "display
+server" or "X server." Since the communication might take place over
+a network, it's important to keep some information with the X server.
+Pixmaps, for example, are stored in the memory of the X server. This
+means that once pixmap values are set, they don't need to keep getting
+transmitted over the network; instead a command is sent to "display
+pixmap number XYZ here." Even if you aren't using X with GTK
+currently, using constructs such as Pixmaps will make your programs
+work acceptably under X.
+<P>To use pixmaps in GTK, we must first build a GdkPixmap structure using
+routines from the GDK layer. Pixmaps can either be created from
+in-memory data, or from data read from a file. We'll go through each
+of the calls to create a pixmap.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GdkPixmap *gdk_bitmap_create_from_data( GdkWindow *window,
+                                        gchar     *data,
+                                        gint       width,
+                                        gint       height );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This routine is used to create a single-plane pixmap (2 colors) from
+data in memory. Each bit of the data represents whether that pixel is
+off or on. Width and height are in pixels. The GdkWindow pointer is to
+the current window, since a pixmap's resources are meaningful only in
+the context of the screen where it is to be displayed.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GdkPixmap *gdk_pixmap_create_from_data( GdkWindow *window,
+                                        gchar     *data,
+                                        gint       width,
+                                        gint       height,
+                                        gint       depth,
+                                        GdkColor  *fg,
+                                        GdkColor  *bg );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This is used to create a pixmap of the given depth (number of colors) from
+the bitmap data specified. <CODE>fg</CODE> and <CODE>bg</CODE> are the 
foreground and
+background color to use.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GdkPixmap *gdk_pixmap_create_from_xpm( GdkWindow   *window,
+                                       GdkBitmap  **mask,
+                                       GdkColor    *transparent_color,
+                                       const gchar *filename );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>XPM format is a readable pixmap representation for the X Window
+System. It is widely used and many different utilities are available
+for creating image files in this format. The file specified by
+filename must contain an image in that format and it is loaded into
+the pixmap structure. The mask specifies which bits of the pixmap are
+opaque. All other bits are colored using the color specified by
+transparent_color. An example using this follows below.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GdkPixmap *gdk_pixmap_create_from_xpm_d( GdkWindow  *window,
+                                         GdkBitmap **mask,
+                                         GdkColor   *transparent_color,
+                                         gchar     **data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Small images can be incorporated into a program as data in the XPM
+format. A pixmap is created using this data, instead of reading it
+from a file. An example of such data is
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* XPM */
+static const char * xpm_data[] = {
+"16 16 3 1",
+"       c None",
+".      c #000000000000",
+"X      c #FFFFFFFFFFFF",
+"                ",
+"   ......       ",
+"   .XXX.X.      ",
+"   .XXX.XX.     ",
+"   .XXX.XXX.    ",
+"   .XXX.....    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .........    ",
+"                ",
+"                "};
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When we're done using a pixmap and not likely to reuse it again soon,
+it is a good idea to release the resource using
+gdk_pixmap_unref(). Pixmaps should be considered a precious resource,
+because they take up memory in the end-user's X server process. Even
+though the X client you write may run on a powerful "server" computer,
+the user may be running the X server on a small personal computer.
+<P>Once we've created a pixmap, we can display it as a GTK widget. We
+must create a GTK pixmap widget to contain the GDK pixmap. This is
+done using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_pixmap_new( GdkPixmap *pixmap,
+                           GdkBitmap *mask );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The other pixmap widget calls are
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_pixmap_get_type( void );
+
+void  gtk_pixmap_set( GtkPixmap  *pixmap,
+                      GdkPixmap  *val,
+                      GdkBitmap  *mask );
+
+void  gtk_pixmap_get( GtkPixmap  *pixmap,
+                      GdkPixmap **val,
+                      GdkBitmap **mask);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>gtk_pixmap_set is used to change the pixmap that the widget is currently
+managing. Val is the pixmap created using GDK.
+<P>The following is an example of using a pixmap in a button.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start pixmap pixmap.c */
+
+#include &lt;gtk/gtk.h>
+
+
+/* XPM data of Open-File icon */
+static const char * xpm_data[] = {
+"16 16 3 1",
+"       c None",
+".      c #000000000000",
+"X      c #FFFFFFFFFFFF",
+"                ",
+"   ......       ",
+"   .XXX.X.      ",
+"   .XXX.XX.     ",
+"   .XXX.XXX.    ",
+"   .XXX.....    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .XXXXXXX.    ",
+"   .........    ",
+"                ",
+"                "};
+
+
+/* when invoked (via signal delete_event), terminates the application.
+ */
+gint close_application( GtkWidget *widget,
+                        GdkEvent  *event,
+                        gpointer   data )
+{
+    gtk_main_quit();
+    return(FALSE);
+}
+
+
+/* is invoked when the button is clicked.  It just prints a message.
+ */
+void button_clicked( GtkWidget *widget,
+                     gpointer   data ) {
+    g_print( "button clicked\n" );
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    /* GtkWidget is the storage type for widgets */
+    GtkWidget *window, *pixmapwid, *button;
+    GdkPixmap *pixmap;
+    GdkBitmap *mask;
+    GtkStyle *style;
+    
+    /* create the main window, and attach delete_event signal to terminating
+       the application */
+    gtk_init( &amp;argc, &amp;argv );
+    window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+    gtk_signal_connect( GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (close_application), NULL );
+    gtk_container_set_border_width( GTK_CONTAINER (window), 10 );
+    gtk_widget_show( window );
+
+    /* now for the pixmap from gdk */
+    style = gtk_widget_get_style( window );
+    pixmap = gdk_pixmap_create_from_xpm_d( window->window,  &amp;mask,
+                                           &amp;style->bg[GTK_STATE_NORMAL],
+                                           (gchar **)xpm_data );
+
+    /* a pixmap widget to contain the pixmap */
+    pixmapwid = gtk_pixmap_new( pixmap, mask );
+    gtk_widget_show( pixmapwid );
+
+    /* a button to contain the pixmap widget */
+    button = gtk_button_new();
+    gtk_container_add( GTK_CONTAINER(button), pixmapwid );
+    gtk_container_add( GTK_CONTAINER(window), button );
+    gtk_widget_show( button );
+
+    gtk_signal_connect( GTK_OBJECT(button), "clicked",
+                        GTK_SIGNAL_FUNC(button_clicked), NULL );
+
+    /* show the window */
+    gtk_main ();
+          
+    return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To load a file from an XPM data file called icon0.xpm in the current
+directory, we would have created the pixmap thus
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    /* load a pixmap from a file */
+    pixmap = gdk_pixmap_create_from_xpm( window->window, &amp;mask,
+                                         &amp;style->bg[GTK_STATE_NORMAL],
+                                         "./icon0.xpm" );
+    pixmapwid = gtk_pixmap_new( pixmap, mask );
+    gtk_widget_show( pixmapwid );
+    gtk_container_add( GTK_CONTAINER(window), pixmapwid );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A disadvantage of using pixmaps is that the displayed object is always
+rectangular, regardless of the image. We would like to create desktops
+and applications with icons that have more natural shapes. For
+example, for a game interface, we would like to have round buttons to
+push. The way to do this is using shaped windows.
+<P>A shaped window is simply a pixmap where the background pixels are
+transparent. This way, when the background image is multi-colored, we
+don't overwrite it with a rectangular, non-matching border around our
+icon. The following example displays a full wheelbarrow image on the
+desktop.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start wheelbarrow wheelbarrow.c */
+
+#include &lt;gtk/gtk.h>
+
+/* XPM */
+static char * WheelbarrowFull_xpm[] = {
+"48 48 64 1",
+"       c None",
+".      c #DF7DCF3CC71B",
+"X      c #965875D669A6",
+"o      c #71C671C671C6",
+"O      c #A699A289A699",
+"+      c #965892489658",
+"@      c #8E38410330C2",
+"#      c #D75C7DF769A6",
+"$      c #F7DECF3CC71B",
+"%      c #96588A288E38",
+"&amp;      c #A69992489E79",
+"*      c #8E3886178E38",
+"=      c #104008200820",
+"-      c #596510401040",
+";      c #C71B30C230C2",
+":      c #C71B9A699658",
+">      c #618561856185",
+",      c #20811C712081",
+"&lt;      c #104000000000",
+"1      c #861720812081",
+"2      c #DF7D4D344103",
+"3      c #79E769A671C6",
+"4      c #861782078617",
+"5      c #41033CF34103",
+"6      c #000000000000",
+"7      c #49241C711040",
+"8      c #492445144924",
+"9      c #082008200820",
+"0      c #69A618611861",
+"q      c #B6DA71C65144",
+"w      c #410330C238E3",
+"e      c #CF3CBAEAB6DA",
+"r      c #71C6451430C2",
+"t      c #EFBEDB6CD75C",
+"y      c #28A208200820",
+"u      c #186110401040",
+"i      c #596528A21861",
+"p      c #71C661855965",
+"a      c #A69996589658",
+"s      c #30C228A230C2",
+"d      c #BEFBA289AEBA",
+"f      c #596545145144",
+"g      c #30C230C230C2",
+"h      c #8E3882078617",
+"j      c #208118612081",
+"k      c #38E30C300820",
+"l      c #30C2208128A2",
+"z      c #38E328A238E3",
+"x      c #514438E34924",
+"c      c #618555555965",
+"v      c #30C2208130C2",
+"b      c #38E328A230C2",
+"n      c #28A228A228A2",
+"m      c #41032CB228A2",
+"M      c #104010401040",
+"N      c #492438E34103",
+"B      c #28A2208128A2",
+"V      c #A699596538E3",
+"C      c #30C21C711040",
+"Z      c #30C218611040",
+"A      c #965865955965",
+"S      c #618534D32081",
+"D      c #38E31C711040",
+"F      c #082000000820",
+"                                                ",
+"          .XoO                                  ",
+"         address@hidden&amp;                                ",
+"         *=-;#::o+                              ",
+"           >,&lt;12#:34                            ",
+"             45671#:X3                          ",
+"               +89&lt;02qwo                        ",
+"e*                >,67;ro                       ",
+"ty>                 459@>+&amp;&amp;                    ",
+"$2u+                  >&lt;ipas8*                  ",
+"%$;=*                *3:.Xa.dfg>                ",
+"Oh$;ya             *3d.a8j,Xe.d3g8+             ",
+" Oh$;ka          *3d$a8lz,,xxc:.e3g54           ",
+"  Oh$;kO       *pd$%svbzz,sxxxxfX..&amp;wn>         ",
+"   address@hidden    *3dthwlsslszjzxxxxxxx3:td8M4       ",
+"    address@hidden&amp; *3d$XNlvvvlllm,mNwxxxxxxxfa.:,B*     ",
+"     Oh$@,address@hidden@fxxxxxxxf:%j5&amp;   ",
+"      Oh$1hd5lllslllCCZrV#r#:#2AxxxxxxxxxcdwM*  ",
+"       OXq6c.%8vvvllZZiqqApA:mq:Xxcpcxxxxxfdc9* ",
+"        2r&lt;address@hidden::qApxxxxxxfdcM ",
+"        :,q-6MN.dfmZZrrSS:address@hidden",
+"         +A26jguXtAZZZC7iDiCCrVVii7Cmmmxxxxxx%3g",
+"          *#16jszN..3DZZZZrCVSA2rZrV7Dmmwxxxx&amp;en",
+"           p2yFvzssXe:fCZZCiiD7iiZDiDSSZwwxx8e*>",
+"           OA1&lt;jzxwwc:$d%NDZZZZCCCZCCZZCmxxfd.B ",
+"            3206Bwxxszx%et.eaAp77m77mmmf3&amp;eeeg* ",
+"             @26MvzxNzvlbwfpdettttttttttt.c,n&amp;  ",
+"             *;16=lsNwwNwgsvslbwwvccc3pcfu&lt;o    ",
+"              p;&lt;69BvwwsszslllbBlllllllu&lt;5+     ",
+"              OS0y6FBlvvvzvzss,u=Blllj=54       ",
+"               c1-699Blvlllllu7k96MMMg4         ",
+"               *10y8n6FjvllllB&lt;166668           ",
+"                S-kg+>666&lt;M&lt;996-y6n&lt;8*          ",
+"                p71=4 m69996kD8Z-66698&amp;&amp;        ",
+"                &amp;i0ycm6n4 ogk17,0&lt;6666g         ",
+"                 N-k-&lt;>     >=01-kuu666>        ",
+"                 ,6ky&amp;      &amp;46-10ul,66,        ",
+"                 Ou0&lt;>       o66y&lt;ulw&lt;66&amp;       ",
+"                  *kk5       >66By7=xu664       ",
+"                   &lt;&lt;M4      466lj&lt;Mxu66o       ",
+"                   *>>       +66uv,zN666*       ",
+"                              566,xxj669        ",
+"                              4666FF666>        ",
+"                               >966666M         ",
+"                                oM6668+         ",
+"                                  *4            ",
+"                                                ",
+"                                                "};
+
+
+/* When invoked (via signal delete_event), terminates the application */
+gint close_application( GtkWidget *widget,
+                        GdkEvent  *event,
+                        gpointer   data )
+{
+    gtk_main_quit();
+    return(FALSE);
+}
+
+int main (int argc,
+          char *argv[] )
+{
+    /* GtkWidget is the storage type for widgets */
+    GtkWidget *window, *pixmap, *fixed;
+    GdkPixmap *gdk_pixmap;
+    GdkBitmap *mask;
+    GtkStyle *style;
+    GdkGC *gc;
+    
+    /* Create the main window, and attach delete_event signal to terminate
+     * the application.  Note that the main window will not have a titlebar
+     * since we're making it a popup. */
+    gtk_init (&amp;argc, &amp;argv);
+    window = gtk_window_new( GTK_WINDOW_POPUP );
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                        GTK_SIGNAL_FUNC (close_application), NULL);
+    gtk_widget_show (window);
+
+    /* Now for the pixmap and the pixmap widget */
+    style = gtk_widget_get_default_style();
+    gc = style->black_gc;
+    gdk_pixmap = gdk_pixmap_create_from_xpm_d( window->window, &amp;mask,
+                                             &amp;style->bg[GTK_STATE_NORMAL],
+                                             WheelbarrowFull_xpm );
+    pixmap = gtk_pixmap_new( gdk_pixmap, mask );
+    gtk_widget_show( pixmap );
+
+    /* To display the pixmap, we use a fixed widget to place the pixmap */
+    fixed = gtk_fixed_new();
+    gtk_widget_set_usize( fixed, 200, 200 );
+    gtk_fixed_put( GTK_FIXED(fixed), pixmap, 0, 0 );
+    gtk_container_add( GTK_CONTAINER(window), fixed );
+    gtk_widget_show( fixed );
+
+    /* This masks out everything except for the image itself */
+    gtk_widget_shape_combine_mask( window, mask, 0, 0 );
+    
+    /* show the window */
+    gtk_widget_set_uposition( window, 20, 400 );
+    gtk_widget_show( window );
+    gtk_main ();
+          
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To make the wheelbarrow image sensitive, we could attach the button
+press event signal to make it do something. The following few lines
+would make the picture sensitive to a mouse button being pressed which
+makes the application terminate.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_widget_set_events( window,
+                          gtk_widget_get_events( window ) |
+                          GDK_BUTTON_PRESS_MASK );
+
+   gtk_signal_connect( GTK_OBJECT(window), "button_press_event",
+                       GTK_SIGNAL_FUNC(close_application), NULL );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.7">9.7 Rulers</A>
+</H2>
+
+<P>Ruler widgets are used to indicate the location of the mouse pointer
+in a given window. A window can have a vertical ruler spanning across
+the width and a horizontal ruler spanning down the height. A small
+triangular indicator on the ruler shows the exact location of the
+pointer relative to the ruler.
+<P>A ruler must first be created. Horizontal and vertical rulers are
+created using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_hruler_new( void );    /* horizontal ruler */
+
+GtkWidget *gtk_vruler_new( void );    /* vertical ruler   */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Once a ruler is created, we can define the unit of measurement. Units
+of measure for rulers can be<CODE>GTK_PIXELS</CODE>, <CODE>GTK_INCHES</CODE> or
+<CODE>GTK_CENTIMETERS</CODE>. This is set using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_ruler_set_metric( GtkRuler      *ruler,
+                           GtkMetricType  metric );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The default measure is <CODE>GTK_PIXELS</CODE>.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_ruler_set_metric( GTK_RULER(ruler), GTK_PIXELS );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Other important characteristics of a ruler are how to mark the units
+of scale and where the position indicator is initially placed. These
+are set for a ruler using
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_ruler_set_range( GtkRuler *ruler,
+                          gfloat    lower,
+                          gfloat    upper,
+                          gfloat    position,
+                          gfloat    max_size );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The lower and upper arguments define the extent of the ruler, and
+max_size is the largest possible number that will be displayed.
+Position defines the initial position of the pointer indicator within
+the ruler.
+<P>A vertical ruler can span an 800 pixel wide window thus
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_ruler_set_range( GTK_RULER(vruler), 0, 800, 0, 800);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The markings displayed on the ruler will be from 0 to 800, with a
+number for every 100 pixels. If instead we wanted the ruler to range
+from 7 to 16, we would code
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_ruler_set_range( GTK_RULER(vruler), 7, 16, 0, 20);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The indicator on the ruler is a small triangular mark that indicates
+the position of the pointer relative to the ruler. If the ruler is
+used to follow the mouse pointer, the motion_notify_event signal
+should be connected to the motion_notify_event method of the ruler.
+To follow all mouse movements within a window area, we would use
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+#define EVENT_METHOD(i, x) GTK_WIDGET_CLASS(GTK_OBJECT(i)->klass)->x
+
+    gtk_signal_connect_object( GTK_OBJECT(area), "motion_notify_event",
+           (GtkSignalFunc)EVENT_METHOD(ruler, motion_notify_event),
+           GTK_OBJECT(ruler) );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The following example creates a drawing area with a horizontal ruler
+above it and a vertical ruler to the left of it. The size of the
+drawing area is 600 pixels wide by 400 pixels high. The horizontal
+ruler spans from 7 to 13 with a mark every 100 pixels, while the
+vertical ruler spans from 0 to 400 with a mark every 100 pixels.
+Placement of the drawing area and the rulers is done using a table.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start rulers rulers.c */
+
+#include &lt;gtk/gtk.h>
+
+#define EVENT_METHOD(i, x) GTK_WIDGET_CLASS(GTK_OBJECT(i)->klass)->x
+
+#define XSIZE  600
+#define YSIZE  400
+
+/* This routine gets control when the close button is clicked */
+gint close_application( GtkWidget *widget,
+                        GdkEvent  *event,
+                        gpointer   data )
+{
+    gtk_main_quit();
+    return(FALSE);
+}
+
+/* The main routine */
+int main( int   argc,
+          char *argv[] ) {
+    GtkWidget *window, *table, *area, *hrule, *vrule;
+
+    /* Initialize GTK and create the main window */
+    gtk_init( &amp;argc, &amp;argv );
+
+    window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+            GTK_SIGNAL_FUNC( close_application ), NULL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+    /* Create a table for placing the ruler and the drawing area */
+    table = gtk_table_new( 3, 2, FALSE );
+    gtk_container_add( GTK_CONTAINER(window), table );
+
+    area = gtk_drawing_area_new();
+    gtk_drawing_area_size( (GtkDrawingArea *)area, XSIZE, YSIZE );
+    gtk_table_attach( GTK_TABLE(table), area, 1, 2, 1, 2,
+                      GTK_EXPAND|GTK_FILL, GTK_FILL, 0, 0 );
+    gtk_widget_set_events( area, GDK_POINTER_MOTION_MASK |
+                                 GDK_POINTER_MOTION_HINT_MASK );
+
+    /* The horizontal ruler goes on top. As the mouse moves across the
+     * drawing area, a motion_notify_event is passed to the
+     * appropriate event handler for the ruler. */
+    hrule = gtk_hruler_new();
+    gtk_ruler_set_metric( GTK_RULER(hrule), GTK_PIXELS );
+    gtk_ruler_set_range( GTK_RULER(hrule), 7, 13, 0, 20 );
+    gtk_signal_connect_object( GTK_OBJECT(area), "motion_notify_event",
+                               (GtkSignalFunc)EVENT_METHOD(hrule,
+                                                        motion_notify_event),
+                               GTK_OBJECT(hrule) );
+    /*  GTK_WIDGET_CLASS(GTK_OBJECT(hrule)->klass)->motion_notify_event, */
+    gtk_table_attach( GTK_TABLE(table), hrule, 1, 2, 0, 1,
+                      GTK_EXPAND|GTK_SHRINK|GTK_FILL, GTK_FILL, 0, 0 );
+    
+    /* The vertical ruler goes on the left. As the mouse moves across
+     * the drawing area, a motion_notify_event is passed to the
+     * appropriate event handler for the ruler. */
+    vrule = gtk_vruler_new();
+    gtk_ruler_set_metric( GTK_RULER(vrule), GTK_PIXELS );
+    gtk_ruler_set_range( GTK_RULER(vrule), 0, YSIZE, 10, YSIZE );
+    gtk_signal_connect_object( GTK_OBJECT(area), "motion_notify_event",
+                               (GtkSignalFunc)
+                                  GTK_WIDGET_CLASS(GTK_OBJECT(vrule)->klass)->
+                                                         motion_notify_event,
+                               GTK_OBJECT(vrule) );
+    gtk_table_attach( GTK_TABLE(table), vrule, 0, 1, 1, 2,
+                      GTK_FILL, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0 );
+
+    /* Now show everything */
+    gtk_widget_show( area );
+    gtk_widget_show( hrule );
+    gtk_widget_show( vrule );
+    gtk_widget_show( table );
+    gtk_widget_show( window );
+    gtk_main();
+
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.8">9.8 Statusbars</A>
+</H2>
+
+<P>Statusbars are simple widgets used to display a text message. They
+keep a stack of the messages pushed onto them, so that popping the
+current message will re-display the previous text message.
+<P>In order to allow different parts of an application to use the same
+statusbar to display messages, the statusbar widget issues Context
+Identifiers which are used to identify different "users". The message
+on top of the stack is the one displayed, no matter what context it is
+in. Messages are stacked in last-in-first-out order, not context
+identifier order.
+<P>A statusbar is created with a call to:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_statusbar_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A new Context Identifier is requested using a call to the following 
+function with a short textual description of the context:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_statusbar_get_context_id( GtkStatusbar *statusbar,
+                                    const gchar  *context_description );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There are three functions that can operate on statusbars:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+guint gtk_statusbar_push( GtkStatusbar *statusbar,
+                          guint         context_id,
+                          gchar        *text );
+
+void gtk_statusbar_pop( GtkStatusbar *statusbar)
+                        guint         context_id );
+
+void gtk_statusbar_remove( GtkStatusbar *statusbar,
+                           guint         context_id,
+                           guint         message_id ); 
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first, gtk_statusbar_push, is used to add a new message to the
+statusbar.  It returns a Message Identifier, which can be passed later
+to the function gtk_statusbar_remove to remove the message with the
+given Message and Context Identifiers from the statusbar's stack.
+<P>The function gtk_statusbar_pop removes the message highest in the
+stack with the given Context Identifier.
+<P>The following example creates a statusbar and two buttons, one for
+pushing items onto the statusbar, and one for popping the last item
+back off.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start statusbar statusbar.c */
+
+#include &lt;gtk/gtk.h>
+#include &lt;glib.h>
+
+GtkWidget *status_bar;
+
+void push_item( GtkWidget *widget,
+                gpointer   data )
+{
+  static int count = 1;
+  char buff[20];
+
+  g_snprintf(buff, 20, "Item %d", count++);
+  gtk_statusbar_push( GTK_STATUSBAR(status_bar), GPOINTER_TO_INT(data), buff);
+
+  return;
+}
+
+void pop_item( GtkWidget *widget,
+               gpointer   data )
+{
+  gtk_statusbar_pop( GTK_STATUSBAR(status_bar), GPOINTER_TO_INT(data) );
+  return;
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+
+    GtkWidget *window;
+    GtkWidget *vbox;
+    GtkWidget *button;
+
+    gint context_id;
+
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* create a new window */
+    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    gtk_widget_set_usize( GTK_WIDGET (window), 200, 100);
+    gtk_window_set_title(GTK_WINDOW (window), "GTK Statusbar Example");
+    gtk_signal_connect(GTK_OBJECT (window), "delete_event",
+                       (GtkSignalFunc) gtk_exit, NULL);
+ 
+    vbox = gtk_vbox_new(FALSE, 1);
+    gtk_container_add(GTK_CONTAINER(window), vbox);
+    gtk_widget_show(vbox);
+          
+    status_bar = gtk_statusbar_new();      
+    gtk_box_pack_start (GTK_BOX (vbox), status_bar, TRUE, TRUE, 0);
+    gtk_widget_show (status_bar);
+
+    context_id = gtk_statusbar_get_context_id(
+                          GTK_STATUSBAR(status_bar), "Statusbar example");
+
+    button = gtk_button_new_with_label("push item");
+    gtk_signal_connect(GTK_OBJECT(button), "clicked",
+        GTK_SIGNAL_FUNC (push_item), GINT_TO_POINTER(context_id) );
+    gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 2);
+    gtk_widget_show(button);              
+
+    button = gtk_button_new_with_label("pop last item");
+    gtk_signal_connect(GTK_OBJECT(button), "clicked",
+        GTK_SIGNAL_FUNC (pop_item), GINT_TO_POINTER(context_id) );
+    gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 2);
+    gtk_widget_show(button);              
+
+    /* always display the window as the last step so it all splashes on
+     * the screen at once. */
+    gtk_widget_show(window);
+
+    gtk_main ();
+
+    return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.9">9.9 Text Entries</A>
+</H2>
+
+<P>The Entry widget allows text to be typed and displayed in a single line
+text box. The text may be set with function calls that allow new text
+to replace, prepend or append the current contents of the Entry widget.
+<P>There are two functions for creating Entry widgets:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_entry_new( void );
+
+GtkWidget *gtk_entry_new_with_max_length( guint16 max );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The first just creates a new Entry widget, whilst the second creates a
+new Entry and sets a limit on the length of the text within the Entry.
+<P>There are several functions for altering the text which is currently
+within the Entry widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_entry_set_text( GtkEntry    *entry,
+                         const gchar *text );
+
+void gtk_entry_append_text( GtkEntry    *entry,
+                            const gchar *text );
+
+void gtk_entry_prepend_text( GtkEntry    *entry,
+                             const gchar *text );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The function gtk_entry_set_text sets the contents of the Entry widget,
+replacing the current contents. The functions gtk_entry_append_text
+and gtk_entry_prepend_text allow the current contents to be appended
+and prepended to.
+<P>The next function allows the current insertion point to be set.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_entry_set_position( GtkEntry *entry,
+                             gint      position );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The contents of the Entry can be retrieved by using a call to the
+following function. This is useful in the callback functions described below.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *gtk_entry_get_text( GtkEntry *entry );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The value returned by this function is used internally, and must not
+be freed using either free() or g_free()
+<P>If we don't want the contents of the Entry to be changed by someone typing
+into it, we can change its editable state.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_entry_set_editable( GtkEntry *entry,
+                             gboolean  editable );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The function above allows us to toggle the editable state of the
+Entry widget by passing in a TRUE or FALSE value for the <CODE>editable</CODE>
+argument.
+<P>If we are using the Entry where we don't want the text entered to be
+visible, for example when a password is being entered, we can use the
+following function, which also takes a boolean flag.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_entry_set_visibility( GtkEntry *entry,
+                               gboolean  visible );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>A region of the text may be set as selected by using the following
+function. This would most often be used after setting some default
+text in an Entry, making it easy for the user to remove it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_entry_select_region( GtkEntry *entry,
+                              gint      start,
+                              gint      end );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If we want to catch when the user has entered text, we can connect to
+the <CODE>activate</CODE> or <CODE>changed</CODE> signal. Activate is raised 
when the
+user hits the enter key within the Entry widget. Changed is raised
+when the text changes at all, e.g., for every character entered or
+removed.
+<P>The following code is an example of using an Entry widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start entry entry.c */
+
+#include &lt;gtk/gtk.h>
+
+void enter_callback( GtkWidget *widget,
+                     GtkWidget *entry )
+{
+  gchar *entry_text;
+  entry_text = gtk_entry_get_text(GTK_ENTRY(entry));
+  printf("Entry contents: %s\n", entry_text);
+}
+
+void entry_toggle_editable( GtkWidget *checkbutton,
+                            GtkWidget *entry )
+{
+  gtk_entry_set_editable(GTK_ENTRY(entry),
+                         GTK_TOGGLE_BUTTON(checkbutton)->active);
+}
+
+void entry_toggle_visibility( GtkWidget *checkbutton,
+                              GtkWidget *entry )
+{
+  gtk_entry_set_visibility(GTK_ENTRY(entry),
+                         GTK_TOGGLE_BUTTON(checkbutton)->active);
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+
+    GtkWidget *window;
+    GtkWidget *vbox, *hbox;
+    GtkWidget *entry;
+    GtkWidget *button;
+    GtkWidget *check;
+
+    gtk_init (&amp;argc, &amp;argv);
+
+    /* create a new window */
+    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+    gtk_widget_set_usize( GTK_WIDGET (window), 200, 100);
+    gtk_window_set_title(GTK_WINDOW (window), "GTK Entry");
+    gtk_signal_connect(GTK_OBJECT (window), "delete_event",
+                       (GtkSignalFunc) gtk_exit, NULL);
+
+    vbox = gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (window), vbox);
+    gtk_widget_show (vbox);
+
+    entry = gtk_entry_new_with_max_length (50);
+    gtk_signal_connect(GTK_OBJECT(entry), "activate",
+                       GTK_SIGNAL_FUNC(enter_callback),
+                       entry);
+    gtk_entry_set_text (GTK_ENTRY (entry), "hello");
+    gtk_entry_append_text (GTK_ENTRY (entry), " world");
+    gtk_entry_select_region (GTK_ENTRY (entry),
+                             0, GTK_ENTRY(entry)->text_length);
+    gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
+    gtk_widget_show (entry);
+
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (vbox), hbox);
+    gtk_widget_show (hbox);
+                                  
+    check = gtk_check_button_new_with_label("Editable");
+    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
+    gtk_signal_connect (GTK_OBJECT(check), "toggled",
+                        GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
+    gtk_widget_show (check);
+    
+    check = gtk_check_button_new_with_label("Visible");
+    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
+    gtk_signal_connect (GTK_OBJECT(check), "toggled",
+                        GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
+    gtk_widget_show (check);
+                                   
+    button = gtk_button_new_with_label ("Close");
+    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                               GTK_SIGNAL_FUNC(gtk_exit),
+                               GTK_OBJECT (window));
+    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
+    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+    gtk_widget_grab_default (button);
+    gtk_widget_show (button);
+    
+    gtk_widget_show(window);
+
+    gtk_main();
+    return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.10">9.10 Spin Buttons</A>
+</H2>
+
+<P>The Spin Button widget is generally used to allow the user to select a
+value from a range of numeric values. It consists of a text
+entry box with up and down arrow buttons attached to the
+side. Selecting one of the buttons causes the value to "spin" up and
+down the range of possible values. The entry box may also be edited
+directly to enter a specific value.
+<P>The Spin Button allows the value to have zero or a number of decimal
+places and to be incremented/decremented in configurable steps. The
+action of holding down one of the buttons optionally results in an
+acceleration of change in the value according to how long it is
+depressed.
+<P>The Spin Button uses an 
+<A HREF="gtk_tut-7.html#sec_Adjustment">Adjustment</A>
+object to hold information about the range of values that the spin
+button can take. This makes for a powerful Spin Button widget.
+<P>Recall that an adjustment widget is created with the following
+function, which illustrates the information that it holds:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkObject *gtk_adjustment_new( gfloat value,
+                               gfloat lower,
+                               gfloat upper,
+                               gfloat step_increment,
+                               gfloat page_increment,
+                               gfloat page_size );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>These attributes of an Adjustment are used by the Spin Button in the
+following way:
+<P>
+<UL>
+<LI> <CODE>value</CODE>: initial value for the Spin Button</LI>
+<LI> <CODE>lower</CODE>: lower range value</LI>
+<LI> <CODE>upper</CODE>: upper range value</LI>
+<LI> <CODE>step_increment</CODE>: value to increment/decrement when pressing
+mouse button 1 on a button</LI>
+<LI> <CODE>page_increment</CODE>: value to increment/decrement when pressing
+mouse button 2 on a button</LI>
+<LI> <CODE>page_size</CODE>: unused</LI>
+</UL>
+<P>Additionally, mouse button 3 can be used to jump directly to the
+<CODE>upper</CODE> or <CODE>lower</CODE> values when used to select one of the
+buttons. Lets look at how to create a Spin Button:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_spin_button_new( GtkAdjustment *adjustment,
+                                gfloat         climb_rate,
+                                guint          digits );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>climb_rate</CODE> argument take a value between 0.0 and 1.0 and
+indicates the amount of acceleration that the Spin Button has. The
+<CODE>digits</CODE> argument specifies the number of decimal places to which
+the value will be displayed.
+<P>A Spin Button can be reconfigured after creation using the following
+function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_configure( GtkSpinButton *spin_button,
+                                GtkAdjustment *adjustment,
+                                gfloat         climb_rate,
+                                guint          digits );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>spin_button</CODE> argument specifies the Spin Button widget that 
is
+to be reconfigured. The other arguments are as specified above.
+<P>The adjustment can be set and retrieved independantly using the
+following two functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_adjustment( GtkSpinButton  *spin_button,
+                                     GtkAdjustment  *adjustment );
+
+GtkAdjustment *gtk_spin_button_get_adjustment( GtkSpinButton *spin_button );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The number of decimal places can also be altered using:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_digits( GtkSpinButton *spin_button,
+                                 guint          digits) ;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The value that a Spin Button is currently displaying can be changed
+using the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_value( GtkSpinButton *spin_button,
+                                gfloat         value );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The current value of a Spin Button can be retrieved as either a
+floating point or integer value with the following functions:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gfloat gtk_spin_button_get_value_as_float( GtkSpinButton *spin_button );
+
+gint gtk_spin_button_get_value_as_int( GtkSpinButton *spin_button );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If you want to alter the value of a Spin Value relative to its current
+value, then the following function can be used:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_spin( GtkSpinButton *spin_button,
+                           GtkSpinType    direction,
+                           gfloat         increment );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The <CODE>direction</CODE> parameter can take one of the following values:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_SPIN_STEP_FORWARD
+  GTK_SPIN_STEP_BACKWARD
+  GTK_SPIN_PAGE_FORWARD
+  GTK_SPIN_PAGE_BACKWARD
+  GTK_SPIN_HOME
+  GTK_SPIN_END
+  GTK_SPIN_USER_DEFINED
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function packs in quite a bit of functionality, which I will
+attempt to clearly explain. Many of these settings use values from the
+Adjustment object that is associated with a Spin Button.
+<P><CODE>GTK_SPIN_STEP_FORWARD</CODE> and <CODE>GTK_SPIN_STEP_BACKWARD</CODE> 
change the
+value of the Spin Button by the amount specified by <CODE>increment</CODE>,
+unless <CODE>increment</CODE> is equal to 0, in which case the value is
+changed by the value of <CODE>step_increment</CODE> in theAdjustment.
+<P><CODE>GTK_SPIN_PAGE_FORWARD</CODE> and <CODE>GTK_SPIN_PAGE_BACKWARD</CODE> 
simply
+alter the value of the Spin Button by <CODE>increment</CODE>.
+<P><CODE>GTK_SPIN_HOME</CODE> sets the value of the Spin Button to the bottom 
of
+the Adjustments range.
+<P><CODE>GTK_SPIN_END</CODE> sets the value of the Spin Button to the top of 
the
+Adjustments range.
+<P><CODE>GTK_SPIN_USER_DEFINED</CODE> simply alters the value of the Spin 
Button
+by the specified amount.
+<P>We move away from functions for setting and retreving the range attributes
+of the Spin Button now, and move onto functions that effect the
+appearance and behaviour of the Spin Button widget itself.
+<P>The first of these functions is used to constrain the text box of the
+Spin Button such that it may only contain a numeric value. This
+prevents a user from typing anything other than numeric values into
+the text box of a Spin Button:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_numeric( GtkSpinButton *spin_button,
+                                  gboolean       numeric );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You can set whether a Spin Button will wrap around between the upper
+and lower range values with the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_wrap( GtkSpinButton *spin_button,
+                               gboolean       wrap );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You can set a Spin Button to round the value to the nearest
+<CODE>step_increment</CODE>, which is set within the Adjustment object used
+with the Spin Button. This is accomplished with the following
+function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_snap_to_ticks( GtkSpinButton  *spin_button,
+                                        gboolean        snap_to_ticks );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The update policy of a Spin Button can be changed with the following
+function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_update_policy( GtkSpinButton  *spin_button,
+                                    GtkSpinButtonUpdatePolicy policy );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<P>The possible values of <CODE>policy</CODE> are either 
<CODE>GTK_UPDATE_ALWAYS</CODE> or
+<CODE>GTK_UPDATE_IF_VALID</CODE>.
+<P>These policies affect the behavior of a Spin Button when parsing
+inserted text and syncing its value with the values of the
+Adjustment.
+<P>In the case of <CODE>GTK_UPDATE_IF_VALID</CODE> the Spin Button only value
+gets changed if the text input is a numeric value that is within the
+range specified by the Adjustment. Otherwise the text is reset to the
+current value.
+<P>In case of <CODE>GTK_UPDATE_ALWAYS</CODE> we ignore errors while converting
+text into a numeric value.
+<P>The appearance of the buttons used in a Spin Button can be changed
+using the following function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_set_shadow_type( GtkSpinButton *spin_button,
+                                      GtkShadowType  shadow_type );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As usual, the <CODE>shadow_type</CODE> can be one of:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  GTK_SHADOW_IN
+  GTK_SHADOW_OUT
+  GTK_SHADOW_ETCHED_IN
+  GTK_SHADOW_ETCHED_OUT
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Finally, you can explicitly request that a Spin Button update itself:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_spin_button_update( GtkSpinButton  *spin_button );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>It's example time again.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start spinbutton spinbutton.c */
+
+#include &lt;gtk/gtk.h>
+
+static GtkWidget *spinner1;
+
+void toggle_snap( GtkWidget     *widget,
+                  GtkSpinButton *spin )
+{
+  gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
+}
+
+void toggle_numeric( GtkWidget *widget,
+                     GtkSpinButton *spin )
+{
+  gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
+}
+
+void change_digits( GtkWidget *widget,
+                    GtkSpinButton *spin )
+{
+  gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
+                              gtk_spin_button_get_value_as_int (spin));
+}
+
+void get_value( GtkWidget *widget,
+                gpointer data )
+{
+  gchar buf[32];
+  GtkLabel *label;
+  GtkSpinButton *spin;
+
+  spin = GTK_SPIN_BUTTON (spinner1);
+  label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
+  if (GPOINTER_TO_INT (data) == 1)
+    sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
+  else
+    sprintf (buf, "%0.*f", spin->digits,
+             gtk_spin_button_get_value_as_float (spin));
+  gtk_label_set_text (label, buf);
+}
+
+
+int main( int   argc,
+          char *argv[] )
+{
+  GtkWidget *window;
+  GtkWidget *frame;
+  GtkWidget *hbox;
+  GtkWidget *main_vbox;
+  GtkWidget *vbox;
+  GtkWidget *vbox2;
+  GtkWidget *spinner2;
+  GtkWidget *spinner;
+  GtkWidget *button;
+  GtkWidget *label;
+  GtkWidget *val_label;
+  GtkAdjustment *adj;
+
+  /* Initialise GTK */
+  gtk_init(&amp;argc, &amp;argv);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+  gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                      GTK_SIGNAL_FUNC (gtk_main_quit),
+                      NULL);
+
+  gtk_window_set_title (GTK_WINDOW (window), "Spin Button");
+
+  main_vbox = gtk_vbox_new (FALSE, 5);
+  gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
+  gtk_container_add (GTK_CONTAINER (window), main_vbox);
+  
+  frame = gtk_frame_new ("Not accelerated");
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
+  
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  
+  /* Day, month, year spinners */
+  
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
+  
+  vbox2 = gtk_vbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
+  
+  label = gtk_label_new ("Day :");
+  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
+  
+  adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
+                                              5.0, 0.0);
+  spinner = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
+  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
+                                   GTK_SHADOW_OUT);
+  gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
+  
+  vbox2 = gtk_vbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
+  
+  label = gtk_label_new ("Month :");
+  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
+  
+  adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
+                                              5.0, 0.0);
+  spinner = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
+  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
+                                   GTK_SHADOW_ETCHED_IN);
+  gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
+  
+  vbox2 = gtk_vbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
+  
+  label = gtk_label_new ("Year :");
+  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
+  
+  adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
+                                              1.0, 100.0, 0.0);
+  spinner = gtk_spin_button_new (adj, 0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), FALSE);
+  gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
+                                   GTK_SHADOW_IN);
+  gtk_widget_set_usize (spinner, 55, 0);
+  gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
+  
+  frame = gtk_frame_new ("Accelerated");
+  gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
+  
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
+  
+  vbox2 = gtk_vbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
+  
+  label = gtk_label_new ("Value :");
+  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
+  
+  adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
+                                              0.5, 100.0, 0.0);
+  spinner1 = gtk_spin_button_new (adj, 1.0, 2);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
+  gtk_widget_set_usize (spinner1, 100, 0);
+  gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
+  
+  vbox2 = gtk_vbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
+  
+  label = gtk_label_new ("Digits :");
+  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
+  
+  adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
+  spinner2 = gtk_spin_button_new (adj, 0.0, 0);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
+  gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+                      GTK_SIGNAL_FUNC (change_digits),
+                      (gpointer) spinner2);
+  gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
+  
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
+  
+  button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (toggle_snap),
+                      spinner1);
+  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+  
+  button = gtk_check_button_new_with_label ("Numeric only input mode");
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (toggle_numeric),
+                      spinner1);
+  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+  
+  val_label = gtk_label_new ("");
+  
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
+  button = gtk_button_new_with_label ("Value as Int");
+  gtk_object_set_user_data (GTK_OBJECT (button), val_label);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (get_value),
+                      GINT_TO_POINTER (1));
+  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+  
+  button = gtk_button_new_with_label ("Value as Float");
+  gtk_object_set_user_data (GTK_OBJECT (button), val_label);
+  gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                      GTK_SIGNAL_FUNC (get_value),
+                      GINT_TO_POINTER (2));
+  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+  
+  gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
+  gtk_label_set_text (GTK_LABEL (val_label), "0");
+  
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
+  
+  button = gtk_button_new_with_label ("Close");
+  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                             GTK_OBJECT (window));
+  gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+
+  gtk_widget_show_all (window);
+
+  /* Enter the event loop */
+  gtk_main ();
+    
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.11">9.11 Combo Box</A>
+</H2>
+
+<P>The combo box is another fairly simple widget that is really just a
+collection of other widgets. From the user's point of view, the widget
+consists of a text entry box and a pull down menu from which the user
+can select one of a set of predefined entries. Alternatively, the user
+can type a different option directly into the text box.
+<P>The following extract from the structure that defines a Combo Box
+identifies several of the components:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+struct _GtkCombo { 
+        GtkHBox hbox; 
+        GtkWidget *entry; 
+        GtkWidget *button;
+        GtkWidget *popup; 
+        GtkWidget *popwin; 
+        GtkWidget *list;
+        ...  };
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>As you can see, the Combo Box has two principal parts that you really
+care about: an entry and a list.
+<P>First off, to create a combo box, use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_combo_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Now, if you want to set the string in the entry section of the combo
+box, this is done by manipulating the <CODE>entry</CODE> widget directly:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "My String.");
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To set the values in the popdown list, one uses the function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_combo_set_popdown_strings( GtkCombo *combo,
+                                    GList    *strings );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Before you can do this, you have to assemble a GList of the strings
+that you want. GList is a linked list implementation that is part of
+<A HREF="gtk_tut-20.html#sec_glib">GLib</A>, a library supporing GTK. For the
+moment, the quick and dirty explanation is that you need to set up a
+GList pointer, set it equal to NULL, then append strings to it with
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GList *g_list_append( GList *glist, 
+                      gpointer data );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>It is important that you set the initial GList pointer to NULL. The
+value returned from the g_list_append function must be used as the new
+pointer to the GList.
+<P>Here's a typical code segment for creating a set of options:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    GList *glist=NULL;
+
+    glist = g_list_append(glist, "String 1");
+    glist = g_list_append(glist, "String 2");
+    glist = g_list_append(glist, "String 3"); 
+    glist = g_list_append(glist, "String 4");
+
+    gtk_combo_set_popdown_strings( GTK_COMBO(combo), glist) ;
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The combo widget makes a copy of the strings passed to it in the glist
+structure. As a result, you need to make sure you free the memory used
+by the list if that is appropriate for your application.
+<P>At this point you have a working combo box that has been set up.
+There are a few aspects of its behavior that you can change. These
+are accomplished with the functions: 
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_combo_set_use_arrows( GtkCombo *combo,
+                               gint      val );
+
+void gtk_combo_set_use_arrows_always( GtkCombo *combo,
+                                      gint      val );
+
+void gtk_combo_set_case_sensitive( GtkCombo *combo,
+                                   gint      val );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P><CODE>gtk_combo_set_use_arrows()</CODE> lets the user change the value in 
the
+entry using the up/down arrow keys. This doesn't bring up the list, but
+rather replaces the current text in the entry with the next list entry
+(up or down, as your key choice indicates). It does this by searching
+in the list for the item corresponding to the current value in the
+entry and selecting the previous/next item accordingly. Usually in an
+entry the arrow keys are used to change focus (you can do that anyway
+using TAB). Note that when the current item is the last of the list
+and you press arrow-down it changes the focus (the same applies with
+the first item and arrow-up).
+<P>If the current value in the entry is not in the list, then the
+function of <CODE>gtk_combo_set_use_arrows()</CODE> is disabled.
+<P><CODE>gtk_combo_set_use_arrows_always()</CODE> similarly allows the use the
+the up/down arrow keys to cycle through the choices in the dropdown
+list, except that it wraps around the values in the list, completely
+disabling the use of the up and down arrow keys for changing focus.
+<P><CODE>gtk_combo_set_case_sensitive()</CODE> toggles whether or not GTK
+searches for entries in a case sensitive manner. This is used when the
+Combo widget is asked to find a value from the list using the current
+entry in the text box. This completion can be performed in either a
+case sensitive or insensitive manner, depending upon the use of this
+function. The Combo widget can also simply complete the current entry
+if the user presses the key combination MOD-1 and "Tab". MOD-1 is
+often mapped to the "Alt" key, by the <CODE>xmodmap</CODE> utility. Note,
+however that some window managers also use this key combination, which
+will override its use within GTK.
+<P>Now that we have a combo box, tailored to look and act how we want it,
+all that remains is being able to get data from the combo box. This is
+relatively straightforward. The majority of the time, all you are
+going to care about getting data from is the entry. The entry is
+accessed simply by <CODE>GTK_ENTRY(GTK_COMBO(combo)->entry)</CODE>. The
+two principal things that you are going to want to do with it are
+attach to the activate signal, which indicates that the user has
+pressed the Return or Enter key, and read the text. The first is
+accomplished using something like:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    gtk_signal_connect(GTK_OBJECT(GTK_COMB(combo)->entry), "activate",
+                       GTK_SIGNAL_FUNC (my_callback_function), my_data);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Getting the text at any arbitrary time is accomplished by simply using
+the entry function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *gtk_entry_get_text(GtkEntry *entry);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Such as:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+    char *string;
+
+    string = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>That's about all there is to it. There is a function
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_combo_disable_activate(GtkCombo *combo);
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>that will disable the activate signal on the entry widget in the combo
+box. Personally, I can't think of why you'd want to use it, but it
+does exist.
+<P>
+<P>
+<H2><A NAME="ss9.12">9.12 Color Selection</A>
+</H2>
+
+<P>The color selection widget is, not surprisingly, a widget for
+interactive selection of colors. This composite widget lets the user
+select a color by manipulating RGB (Red, Green, Blue) and HSV (Hue,
+Saturation, Value) triples.  This is done either by adjusting single
+values with sliders or entries, or by picking the desired color from a
+hue-saturation wheel/value bar.  Optionally, the opacity of the color
+can also be set.
+<P>The color selection widget currently emits only one signal,
+"color_changed", which is emitted whenever the current color in the
+widget changes, either when the user changes it or if it's set
+explicitly through gtk_color_selection_set_color().
+<P>Lets have a look at what the color selection widget has to offer
+us. The widget comes in two flavours: gtk_color_selection and
+gtk_color_selection_dialog.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_color_selection_new( void );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You'll probably not be using this constructor directly. It creates an
+orphan ColorSelection widget which you'll have to parent
+yourself. The ColorSelection widget inherits from the VBox
+widget.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+ 
+GtkWidget *gtk_color_selection_dialog_new( const gchar *title );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This is the most common color selection constructor. It creates a
+ColorSelectionDialog. It consists of a Frame containing a
+ColorSelection widget, an HSeparator and an HBox with three buttons,
+"Ok", "Cancel" and "Help". You can reach these buttons by accessing
+the "ok_button", "cancel_button" and "help_button" widgets in the
+ColorSelectionDialog structure,
+(i.e., <CODE>GTK_COLOR_SELECTION_DIALOG(colorseldialog)->ok_button</CODE>)).
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_color_selection_set_update_policy( GtkColorSelection *colorsel, 
+                                            GtkUpdateType      policy );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This function sets the update policy. The default policy is
+<CODE>GTK_UPDATE_CONTINUOUS</CODE> which means that the current color is
+updated continuously when the user drags the sliders or presses the
+mouse and drags in the hue-saturation wheel or value bar. If you
+experience performance problems, you may want to set the policy to
+<CODE>GTK_UPDATE_DISCONTINUOUS</CODE> or <CODE>GTK_UPDATE_DELAYED</CODE>.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_color_selection_set_opacity( GtkColorSelection *colorsel,
+                                      gint               use_opacity );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>The color selection widget supports adjusting the opacity of a color
+(also known as the alpha channel). This is disabled by
+default. Calling this function with use_opacity set to TRUE enables
+opacity. Likewise, use_opacity set to FALSE will disable opacity.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_color_selection_set_color( GtkColorSelection *colorsel,
+                                    gdouble           *color );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>You can set the current color explicitly by calling this function with
+a pointer to an array of colors (gdouble). The length of the array
+depends on whether opacity is enabled or not. Position 0 contains the
+red component, 1 is green, 2 is blue and opacity is at position 3
+(only if opacity is enabled, see
+gtk_color_selection_set_opacity()). All values are between 0.0 and
+1.0.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_color_selection_get_color( GtkColorSelection *colorsel,
+                                    gdouble           *color );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>When you need to query the current color, typically when you've
+received a "color_changed" signal, you use this function. Color is a
+pointer to the array of colors to fill in. See the
+gtk_color_selection_set_color() function for the description of this
+array.
+<P>
+<P>Here's a simple example demonstrating the use of the
+ColorSelectionDialog. The program displays a window containing a
+drawing area. Clicking on it opens a color selection dialog, and
+changing the color in the color selection dialog changes the
+background color.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start colorsel colorsel.c */
+
+#include &lt;glib.h>
+#include &lt;gdk/gdk.h>
+#include &lt;gtk/gtk.h>
+
+GtkWidget *colorseldlg = NULL;
+GtkWidget *drawingarea = NULL;
+
+/* Color changed handler */
+
+void color_changed_cb( GtkWidget         *widget,
+                       GtkColorSelection *colorsel )
+{
+  gdouble color[3];
+  GdkColor gdk_color;
+  GdkColormap *colormap;
+
+  /* Get drawingarea colormap */
+
+  colormap = gdk_window_get_colormap (drawingarea->window);
+
+  /* Get current color */
+
+  gtk_color_selection_get_color (colorsel,color);
+
+  /* Fit to a unsigned 16 bit integer (0..65535) and
+   * insert into the GdkColor structure */
+
+  gdk_color.red = (guint16)(color[0]*65535.0);
+  gdk_color.green = (guint16)(color[1]*65535.0);
+  gdk_color.blue = (guint16)(color[2]*65535.0);
+
+  /* Allocate color */
+
+  gdk_color_alloc (colormap, &amp;gdk_color);
+
+  /* Set window background color */
+
+  gdk_window_set_background (drawingarea->window, &amp;gdk_color);
+
+  /* Clear window */
+
+  gdk_window_clear (drawingarea->window);
+}
+
+/* Drawingarea event handler */
+
+gint area_event( GtkWidget *widget,
+                 GdkEvent  *event,
+                 gpointer   client_data )
+{
+  gint handled = FALSE;
+  GtkWidget *colorsel;
+
+  /* Check if we've received a button pressed event */
+
+  if (event->type == GDK_BUTTON_PRESS &amp;&amp; colorseldlg == NULL)
+    {
+      /* Yes, we have an event and there's no colorseldlg yet! */
+
+      handled = TRUE;
+
+      /* Create color selection dialog */
+
+      colorseldlg = gtk_color_selection_dialog_new("Select background color");
+
+      /* Get the ColorSelection widget */
+
+      colorsel = GTK_COLOR_SELECTION_DIALOG(colorseldlg)->colorsel;
+
+      /* Connect to the "color_changed" signal, set the client-data
+       * to the colorsel widget */
+
+      gtk_signal_connect(GTK_OBJECT(colorsel), "color_changed",
+        (GtkSignalFunc)color_changed_cb, (gpointer)colorsel);
+
+      /* Show the dialog */
+
+      gtk_widget_show(colorseldlg);
+    }
+
+  return handled;
+}
+
+/* Close down and exit handler */
+
+gint destroy_window( GtkWidget *widget,
+                     GdkEvent  *event,
+                     gpointer   client_data )
+{
+  gtk_main_quit ();
+  return(TRUE);
+}
+
+/* Main */
+
+gint main( gint   argc,
+           gchar *argv[] )
+{
+  GtkWidget *window;
+
+  /* Initialize the toolkit, remove gtk-related commandline stuff */
+
+  gtk_init (&amp;argc,&amp;argv);
+
+  /* Create toplevel window, set title and policies */
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW(window), "Color selection test");
+  gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, TRUE);
+
+  /* Attach to the "delete" and "destroy" events so we can exit */
+
+  gtk_signal_connect (GTK_OBJECT(window), "delete_event",
+    (GtkSignalFunc)destroy_window, (gpointer)window);
+  
+  /* Create drawingarea, set size and catch button events */
+
+  drawingarea = gtk_drawing_area_new ();
+
+  gtk_drawing_area_size (GTK_DRAWING_AREA(drawingarea), 200, 200);
+
+  gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK);
+
+  gtk_signal_connect (GTK_OBJECT(drawingarea), "event", 
+    (GtkSignalFunc)area_event, (gpointer)drawingarea);
+  
+  /* Add drawingarea to window, then show them both */
+
+  gtk_container_add (GTK_CONTAINER(window), drawingarea);
+
+  gtk_widget_show (drawingarea);
+  gtk_widget_show (window);
+  
+  /* Enter the gtk main loop (this never returns) */
+
+  gtk_main ();
+
+  /* Satisfy grumpy compilers */
+
+  return(0);
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss9.13">9.13 File Selections</A>
+</H2>
+
+<P>The file selection widget is a quick and simple way to display a File
+dialog box. It comes complete with Ok, Cancel, and Help buttons, a
+great way to cut down on programming time.
+<P>To create a new file selection box use:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+GtkWidget *gtk_file_selection_new( gchar *title );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To set the filename, for example to bring up a specific directory, or
+give a default filename, use this function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+void gtk_file_selection_set_filename( GtkFileSelection *filesel,
+                                      gchar            *filename );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>To grab the text that the user has entered or clicked on, use this 
+function:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+gchar *gtk_file_selection_get_filename( GtkFileSelection *filesel );
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>There are also pointers to the widgets contained within the file 
+selection widget. These are:
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+  dir_list
+  file_list
+  selection_entry
+  selection_text
+  main_vbox
+  ok_button
+  cancel_button
+  help_button
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>Most likely you will want to use the ok_button, cancel_button, and
+help_button pointers in signaling their use.
+<P>Included here is an example stolen from testgtk.c, modified to run on
+its own. As you will see, there is nothing much to creating a file
+selection widget. While in this example the Help button appears on the
+screen, it does nothing as there is not a signal attached to it.
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+/* example-start filesel filesel.c */
+
+#include &lt;gtk/gtk.h>
+
+/* Get the selected filename and print it to the console */
+void file_ok_sel( GtkWidget        *w,
+                  GtkFileSelection *fs )
+{
+    g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION 
(fs)));
+}
+
+void destroy( GtkWidget *widget,
+              gpointer   data )
+{
+    gtk_main_quit ();
+}
+
+int main( int   argc,
+          char *argv[] )
+{
+    GtkWidget *filew;
+    
+    gtk_init (&amp;argc, &amp;argv);
+    
+    /* Create a new file selection widget */
+    filew = gtk_file_selection_new ("File selection");
+    
+    gtk_signal_connect (GTK_OBJECT (filew), "destroy",
+                        (GtkSignalFunc) destroy, &amp;filew);
+    /* Connect the ok_button to file_ok_sel function */
+    gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
+                        "clicked", (GtkSignalFunc) file_ok_sel, filew );
+    
+    /* Connect the cancel_button to destroy the widget */
+    gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION
+                                            (filew)->cancel_button),
+                               "clicked", (GtkSignalFunc) gtk_widget_destroy,
+                               GTK_OBJECT (filew));
+    
+    /* Lets set the filename, as if this were a save dialog, and we are giving
+     a default filename */
+    gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew), 
+                                     "penguin.png");
+    
+    gtk_widget_show(filew);
+    gtk_main ();
+    return 0;
+}
+/* example-end */
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR NOSHADE>
+<A HREF="gtk_tut-10.html">Next</A>
+<A HREF="gtk_tut-8.html">Previous</A>
+<A HREF="gtk_tut.html#toc9">Contents</A>
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut.html
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut.html
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Mecagtk/miweb/html/gtk/gtk_tut.html       3 Mar 2012 06:14:59 
-0000       1.1
@@ -0,0 +1,324 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
+ <TITLE>GTK v1.2 Tutorial</TITLE>
+ <LINK HREF="gtk_tut-1.html" REL=next>
+
+
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<A HREF="gtk_tut-1.html">Next</A>
+Previous
+Contents
+<HR NOSHADE>
+<H1>GTK v1.2 Tutorial</H1>
+
+<H2>Tony Gale <CODE>
+<A HREF="mailto:address@hidden";>&lt;address@hidden&gt;</A></CODE>,
+Ian Main <CODE>
+<A HREF="mailto:address@hidden";>&lt;address@hidden&gt;</A></CODE></H2>November 
13th, 1999
+<P><HR NOSHADE>
+<EM>This is a tutorial on how to use GTK (the GIMP Toolkit) through its C
+interface.</EM>
+<HR NOSHADE>
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="gtk_tut-1.html">Introduction</A></H2>
+
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="gtk_tut-2.html">Getting Started</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-2.html#ss2.1">2.1 Hello World in GTK</A>
+<LI><A HREF="gtk_tut-2.html#ss2.2">2.2 Compiling Hello World </A>
+<LI><A HREF="gtk_tut-2.html#ss2.3">2.3 Theory of Signals and Callbacks</A>
+<LI><A HREF="gtk_tut-2.html#ss2.4">2.4 Events</A>
+<LI><A HREF="gtk_tut-2.html#ss2.5">2.5 Stepping Through Hello World</A>
+</UL>
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="gtk_tut-3.html">Moving On</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-3.html#ss3.1">3.1 Data Types</A>
+<LI><A HREF="gtk_tut-3.html#ss3.2">3.2 More on Signal Handlers</A>
+<LI><A HREF="gtk_tut-3.html#ss3.3">3.3 An Upgraded Hello World</A>
+</UL>
+<P>
+<H2><A NAME="toc4">4.</A> <A HREF="gtk_tut-4.html">Packing Widgets </A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-4.html#ss4.1">4.1 Theory of Packing Boxes</A>
+<LI><A HREF="gtk_tut-4.html#ss4.2">4.2 Details of Boxes</A>
+<LI><A HREF="gtk_tut-4.html#ss4.3">4.3 Packing Demonstration Program</A>
+<LI><A HREF="gtk_tut-4.html#ss4.4">4.4 Packing Using Tables</A>
+<LI><A HREF="gtk_tut-4.html#ss4.5">4.5 Table Packing Example</A>
+</UL>
+<P>
+<H2><A NAME="toc5">5.</A> <A HREF="gtk_tut-5.html">Widget Overview</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-5.html#ss5.1">5.1 Casting</A>
+<LI><A HREF="gtk_tut-5.html#ss5.2">5.2 Widget Hierarchy</A>
+<LI><A HREF="gtk_tut-5.html#ss5.3">5.3 Widgets Without Windows</A>
+</UL>
+<P>
+<H2><A NAME="toc6">6.</A> <A HREF="gtk_tut-6.html">The Button Widget</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-6.html#ss6.1">6.1 Normal Buttons</A>
+<LI><A HREF="gtk_tut-6.html#ss6.2">6.2 Toggle Buttons</A>
+<LI><A HREF="gtk_tut-6.html#ss6.3">6.3 Check Buttons</A>
+<LI><A HREF="gtk_tut-6.html#ss6.4">6.4 Radio Buttons </A>
+</UL>
+<P>
+<H2><A NAME="toc7">7.</A> <A HREF="gtk_tut-7.html">Adjustments </A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-7.html#ss7.1">7.1 Creating an Adjustment</A>
+<LI><A HREF="gtk_tut-7.html#ss7.2">7.2 Using Adjustments the Easy Way</A>
+<LI><A HREF="gtk_tut-7.html#ss7.3">7.3 Adjustment Internals</A>
+</UL>
+<P>
+<H2><A NAME="toc8">8.</A> <A HREF="gtk_tut-8.html">Range Widgets</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-8.html#ss8.1">8.1 Scrollbar Widgets</A>
+<LI><A HREF="gtk_tut-8.html#ss8.2">8.2 Scale Widgets</A>
+<LI><A HREF="gtk_tut-8.html#ss8.3">8.3 Common Range Functions </A>
+<LI><A HREF="gtk_tut-8.html#ss8.4">8.4 Key and Mouse bindings</A>
+<LI><A HREF="gtk_tut-8.html#ss8.5">8.5 Example</A>
+</UL>
+<P>
+<H2><A NAME="toc9">9.</A> <A HREF="gtk_tut-9.html">Miscellaneous 
Widgets</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-9.html#ss9.1">9.1 Labels</A>
+<LI><A HREF="gtk_tut-9.html#ss9.2">9.2 Arrows</A>
+<LI><A HREF="gtk_tut-9.html#ss9.3">9.3 The Tooltips Object</A>
+<LI><A HREF="gtk_tut-9.html#ss9.4">9.4 Progress Bars </A>
+<LI><A HREF="gtk_tut-9.html#ss9.5">9.5 Dialogs</A>
+<LI><A HREF="gtk_tut-9.html#ss9.6">9.6 Pixmaps </A>
+<LI><A HREF="gtk_tut-9.html#ss9.7">9.7 Rulers</A>
+<LI><A HREF="gtk_tut-9.html#ss9.8">9.8 Statusbars</A>
+<LI><A HREF="gtk_tut-9.html#ss9.9">9.9 Text Entries</A>
+<LI><A HREF="gtk_tut-9.html#ss9.10">9.10 Spin Buttons</A>
+<LI><A HREF="gtk_tut-9.html#ss9.11">9.11 Combo Box</A>
+<LI><A HREF="gtk_tut-9.html#ss9.12">9.12 Color Selection</A>
+<LI><A HREF="gtk_tut-9.html#ss9.13">9.13 File Selections</A>
+</UL>
+<P>
+<H2><A NAME="toc10">10.</A> <A HREF="gtk_tut-10.html">Container 
Widgets</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-10.html#ss10.1">10.1 The EventBox </A>
+<LI><A HREF="gtk_tut-10.html#ss10.2">10.2 The Alignment widget </A>
+<LI><A HREF="gtk_tut-10.html#ss10.3">10.3 Fixed Container</A>
+<LI><A HREF="gtk_tut-10.html#ss10.4">10.4 Layout Container</A>
+<LI><A HREF="gtk_tut-10.html#ss10.5">10.5 Frames </A>
+<LI><A HREF="gtk_tut-10.html#ss10.6">10.6 Aspect Frames</A>
+<LI><A HREF="gtk_tut-10.html#ss10.7">10.7 Paned Window Widgets</A>
+<LI><A HREF="gtk_tut-10.html#ss10.8">10.8 Viewports </A>
+<LI><A HREF="gtk_tut-10.html#ss10.9">10.9 Scrolled Windows </A>
+<LI><A HREF="gtk_tut-10.html#ss10.10">10.10 Button Boxes</A>
+<LI><A HREF="gtk_tut-10.html#ss10.11">10.11 Toolbar</A>
+<LI><A HREF="gtk_tut-10.html#ss10.12">10.12 Notebooks</A>
+</UL>
+<P>
+<H2><A NAME="toc11">11.</A> <A HREF="gtk_tut-11.html">CList Widget</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-11.html#ss11.1">11.1 Creating a CList widget</A>
+<LI><A HREF="gtk_tut-11.html#ss11.2">11.2 Modes of operation</A>
+<LI><A HREF="gtk_tut-11.html#ss11.3">11.3 Working with titles</A>
+<LI><A HREF="gtk_tut-11.html#ss11.4">11.4 Manipulating the list itself</A>
+<LI><A HREF="gtk_tut-11.html#ss11.5">11.5 Adding rows to the list</A>
+<LI><A HREF="gtk_tut-11.html#ss11.6">11.6 Setting text and pixmaps in the 
cells</A>
+<LI><A HREF="gtk_tut-11.html#ss11.7">11.7 Storing data pointers</A>
+<LI><A HREF="gtk_tut-11.html#ss11.8">11.8 Working with selections</A>
+<LI><A HREF="gtk_tut-11.html#ss11.9">11.9 The signals that bring it 
together</A>
+<LI><A HREF="gtk_tut-11.html#ss11.10">11.10 A CList example</A>
+</UL>
+<P>
+<H2><A NAME="toc12">12.</A> <A HREF="gtk_tut-12.html">Tree Widget </A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-12.html#ss12.1">12.1 Creating a Tree</A>
+<LI><A HREF="gtk_tut-12.html#ss12.2">12.2 Adding a Subtree</A>
+<LI><A HREF="gtk_tut-12.html#ss12.3">12.3 Handling the Selection List</A>
+<LI><A HREF="gtk_tut-12.html#ss12.4">12.4 Tree Widget Internals</A>
+<LI><A HREF="gtk_tut-12.html#ss12.5">12.5 Tree Item Widget</A>
+<LI><A HREF="gtk_tut-12.html#ss12.6">12.6 Tree Example</A>
+</UL>
+<P>
+<H2><A NAME="toc13">13.</A> <A HREF="gtk_tut-13.html">Menu Widget</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-13.html#ss13.1">13.1 Manual Menu Creation</A>
+<LI><A HREF="gtk_tut-13.html#ss13.2">13.2 Manual Menu Example</A>
+<LI><A HREF="gtk_tut-13.html#ss13.3">13.3 Using ItemFactory</A>
+<LI><A HREF="gtk_tut-13.html#ss13.4">13.4 Item Factory Example</A>
+</UL>
+<P>
+<H2><A NAME="toc14">14.</A> <A HREF="gtk_tut-14.html">Text Widget</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-14.html#ss14.1">14.1 Creating and Configuring a Text 
box</A>
+<LI><A HREF="gtk_tut-14.html#ss14.2">14.2 Text Manipulation</A>
+<LI><A HREF="gtk_tut-14.html#ss14.3">14.3 Keyboard Shortcuts</A>
+<LI><A HREF="gtk_tut-14.html#ss14.4">14.4 A GtkText Example</A>
+</UL>
+<P>
+<H2><A NAME="toc15">15.</A> <A HREF="gtk_tut-15.html">Undocumented 
Widgets</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-15.html#ss15.1">15.1 Calendar</A>
+<LI><A HREF="gtk_tut-15.html#ss15.2">15.2 CTree</A>
+<LI><A HREF="gtk_tut-15.html#ss15.3">15.3 Curves</A>
+<LI><A HREF="gtk_tut-15.html#ss15.4">15.4 Drawing Area</A>
+<LI><A HREF="gtk_tut-15.html#ss15.5">15.5 Font Selection Dialog</A>
+<LI><A HREF="gtk_tut-15.html#ss15.6">15.6 Gamma Curve</A>
+<LI><A HREF="gtk_tut-15.html#ss15.7">15.7 Image</A>
+<LI><A HREF="gtk_tut-15.html#ss15.8">15.8 Packer</A>
+<LI><A HREF="gtk_tut-15.html#ss15.9">15.9 Plugs and Sockets</A>
+<LI><A HREF="gtk_tut-15.html#ss15.10">15.10 Preview</A>
+</UL>
+<P>
+<H2><A NAME="toc16">16.</A> <A HREF="gtk_tut-16.html">Setting Widget 
Attributes</A></H2>
+
+<P>
+<H2><A NAME="toc17">17.</A> <A HREF="gtk_tut-17.html">Timeouts, IO and Idle 
Functions</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-17.html#ss17.1">17.1 Timeouts</A>
+<LI><A HREF="gtk_tut-17.html#ss17.2">17.2 Monitoring IO</A>
+<LI><A HREF="gtk_tut-17.html#ss17.3">17.3 Idle Functions</A>
+</UL>
+<P>
+<H2><A NAME="toc18">18.</A> <A HREF="gtk_tut-18.html">Advanced Event and 
Signal Handling</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-18.html#ss18.1">18.1 Signal Functions</A>
+<LI><A HREF="gtk_tut-18.html#ss18.2">18.2 Signal Emission and Propagation</A>
+</UL>
+<P>
+<H2><A NAME="toc19">19.</A> <A HREF="gtk_tut-19.html">Managing 
Selections</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-19.html#ss19.1">19.1 Overview</A>
+<LI><A HREF="gtk_tut-19.html#ss19.2">19.2 Retrieving the selection</A>
+<LI><A HREF="gtk_tut-19.html#ss19.3">19.3 Supplying the selection </A>
+</UL>
+<P>
+<H2><A NAME="toc20">20.</A> <A HREF="gtk_tut-20.html">GLib</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-20.html#ss20.1">20.1 Definitions</A>
+<LI><A HREF="gtk_tut-20.html#ss20.2">20.2 Doubly Linked Lists</A>
+<LI><A HREF="gtk_tut-20.html#ss20.3">20.3 Singly Linked Lists</A>
+<LI><A HREF="gtk_tut-20.html#ss20.4">20.4 Memory Management</A>
+<LI><A HREF="gtk_tut-20.html#ss20.5">20.5 Timers</A>
+<LI><A HREF="gtk_tut-20.html#ss20.6">20.6 String Handling</A>
+<LI><A HREF="gtk_tut-20.html#ss20.7">20.7 Utility and Error Functions</A>
+</UL>
+<P>
+<H2><A NAME="toc21">21.</A> <A HREF="gtk_tut-21.html">GTK's rc Files </A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-21.html#ss21.1">21.1 Functions For rc Files </A>
+<LI><A HREF="gtk_tut-21.html#ss21.2">21.2 GTK's rc File Format</A>
+<LI><A HREF="gtk_tut-21.html#ss21.3">21.3 Example rc file</A>
+</UL>
+<P>
+<H2><A NAME="toc22">22.</A> <A HREF="gtk_tut-22.html">Writing Your Own Widgets 
</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-22.html#ss22.1">22.1 Overview</A>
+<LI><A HREF="gtk_tut-22.html#ss22.2">22.2 The Anatomy Of A Widget</A>
+<LI><A HREF="gtk_tut-22.html#ss22.3">22.3 Creating a Composite widget</A>
+<LI><A HREF="gtk_tut-22.html#ss22.4">22.4 Creating a widget from scratch.</A>
+<LI><A HREF="gtk_tut-22.html#ss22.5">22.5 Learning More</A>
+</UL>
+<P>
+<H2><A NAME="toc23">23.</A> <A HREF="gtk_tut-23.html">Scribble, A Simple 
Example Drawing Program</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-23.html#ss23.1">23.1 Overview</A>
+<LI><A HREF="gtk_tut-23.html#ss23.2">23.2 Event Handling</A>
+<LI><A HREF="gtk_tut-23.html#ss23.3">23.3 The DrawingArea Widget, And 
Drawing</A>
+<LI><A HREF="gtk_tut-23.html#ss23.4">23.4 Adding XInput support</A>
+</UL>
+<P>
+<H2><A NAME="toc24">24.</A> <A HREF="gtk_tut-24.html">Tips For Writing GTK 
Applications</A></H2>
+
+<P>
+<H2><A NAME="toc25">25.</A> <A HREF="gtk_tut-25.html">Contributing </A></H2>
+
+<P>
+<H2><A NAME="toc26">26.</A> <A HREF="gtk_tut-26.html">Credits</A></H2>
+
+<P>
+<H2><A NAME="toc27">27.</A> <A HREF="gtk_tut-27.html">Tutorial Copyright and 
Permissions Notice</A></H2>
+
+<H2>Appendix</H2>
+<P>
+<H2><A NAME="toc28">28.</A> <A HREF="gtk_tut-28.html">GTK Signals </A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-28.html#ss28.1">28.1 GtkObject</A>
+<LI><A HREF="gtk_tut-28.html#ss28.2">28.2 GtkWidget</A>
+<LI><A HREF="gtk_tut-28.html#ss28.3">28.3 GtkData</A>
+<LI><A HREF="gtk_tut-28.html#ss28.4">28.4 GtkContainer</A>
+<LI><A HREF="gtk_tut-28.html#ss28.5">28.5 GtkCalendar</A>
+<LI><A HREF="gtk_tut-28.html#ss28.6">28.6 GtkEditable</A>
+<LI><A HREF="gtk_tut-28.html#ss28.7">28.7 GtkTipsQuery</A>
+<LI><A HREF="gtk_tut-28.html#ss28.8">28.8 GtkCList</A>
+<LI><A HREF="gtk_tut-28.html#ss28.9">28.9 GtkNotebook</A>
+<LI><A HREF="gtk_tut-28.html#ss28.10">28.10 GtkList</A>
+<LI><A HREF="gtk_tut-28.html#ss28.11">28.11 GtkMenuShell</A>
+<LI><A HREF="gtk_tut-28.html#ss28.12">28.12 GtkToolbar</A>
+<LI><A HREF="gtk_tut-28.html#ss28.13">28.13 GtkTree</A>
+<LI><A HREF="gtk_tut-28.html#ss28.14">28.14 GtkButton</A>
+<LI><A HREF="gtk_tut-28.html#ss28.15">28.15 GtkItem</A>
+<LI><A HREF="gtk_tut-28.html#ss28.16">28.16 GtkWindow</A>
+<LI><A HREF="gtk_tut-28.html#ss28.17">28.17 GtkHandleBox</A>
+<LI><A HREF="gtk_tut-28.html#ss28.18">28.18 GtkToggleButton</A>
+<LI><A HREF="gtk_tut-28.html#ss28.19">28.19 GtkMenuItem</A>
+<LI><A HREF="gtk_tut-28.html#ss28.20">28.20 GtkListItem</A>
+<LI><A HREF="gtk_tut-28.html#ss28.21">28.21 GtkTreeItem</A>
+<LI><A HREF="gtk_tut-28.html#ss28.22">28.22 GtkCheckMenuItem</A>
+<LI><A HREF="gtk_tut-28.html#ss28.23">28.23 GtkInputDialog</A>
+<LI><A HREF="gtk_tut-28.html#ss28.24">28.24 GtkColorSelection</A>
+<LI><A HREF="gtk_tut-28.html#ss28.25">28.25 GtkStatusBar</A>
+<LI><A HREF="gtk_tut-28.html#ss28.26">28.26 GtkCTree</A>
+<LI><A HREF="gtk_tut-28.html#ss28.27">28.27 GtkCurve</A>
+<LI><A HREF="gtk_tut-28.html#ss28.28">28.28 GtkAdjustment</A>
+</UL>
+<P>
+<H2><A NAME="toc29">29.</A> <A HREF="gtk_tut-29.html">GDK Event Types</A></H2>
+
+<P>
+<H2><A NAME="toc30">30.</A> <A HREF="gtk_tut-30.html">Code Examples</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-30.html#ss30.1">30.1 Tictactoe</A>
+<LI><A HREF="gtk_tut-30.html#ss30.2">30.2 GtkDial</A>
+<LI><A HREF="gtk_tut-30.html#ss30.3">30.3 Scribble</A>
+</UL>
+<P>
+<H2><A NAME="toc31">31.</A> <A HREF="gtk_tut-31.html">List Widget</A></H2>
+
+<UL>
+<LI><A HREF="gtk_tut-31.html#ss31.1">31.1 Signals</A>
+<LI><A HREF="gtk_tut-31.html#ss31.2">31.2 Functions</A>
+<LI><A HREF="gtk_tut-31.html#ss31.3">31.3 Example</A>
+<LI><A HREF="gtk_tut-31.html#ss31.4">31.4 List Item Widget</A>
+<LI><A HREF="gtk_tut-31.html#ss31.5">31.5 Signals</A>
+<LI><A HREF="gtk_tut-31.html#ss31.6">31.6 Functions</A>
+<LI><A HREF="gtk_tut-31.html#ss31.7">31.7 Example</A>
+</UL>
+<HR NOSHADE>
+<A HREF="gtk_tut-1.html">Next</A>
+Previous
+Contents
+</BODY>
+</HTML>

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox1.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox1.gif
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox1.gif
Binary files /dev/null and /tmp/cvsYuuIJk differ

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox2.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox2.gif
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_packbox2.gif
Binary files /dev/null and /tmp/cvsblkSbl differ

Index: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_table.gif
===================================================================
RCS file: Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_table.gif
diff -N Proyectos/Mecagtk/miweb/html/gtk/gtk_tut_table.gif
Binary files /dev/null and /tmp/cvsDzyzmj differ

Index: Proyectos/Mecagtk/miweb/soft/mecagtk-0.1.2.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/soft/mecagtk-0.1.2.tar.gz
diff -N Proyectos/Mecagtk/miweb/soft/mecagtk-0.1.2.tar.gz
Binary files /dev/null and /tmp/cvsL6Wmsk differ

Index: Proyectos/Mecagtk/miweb/soft/mecagtk1.tgz
===================================================================
RCS file: Proyectos/Mecagtk/miweb/soft/mecagtk1.tgz
diff -N Proyectos/Mecagtk/miweb/soft/mecagtk1.tgz
Binary files /dev/null and /tmp/cvsKOB1Dn differ

Index: Proyectos/Mecagtk/soft/mecagtk-0.1.2.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/soft/mecagtk-0.1.2.tar.gz
diff -N Proyectos/Mecagtk/soft/mecagtk-0.1.2.tar.gz
Binary files /dev/null and /tmp/cvsYhEW4l differ

Index: Proyectos/Mecagtk/soft/mecagtk-0.2.GTK.tar.gz
===================================================================
RCS file: Proyectos/Mecagtk/soft/mecagtk-0.2.GTK.tar.gz
diff -N Proyectos/Mecagtk/soft/mecagtk-0.2.GTK.tar.gz
Binary files /dev/null and /tmp/cvsrpEfPp differ

Index: Proyectos/Mecagtk/soft/mecagtk-devel-0.2.GTK.tgz
===================================================================
RCS file: Proyectos/Mecagtk/soft/mecagtk-devel-0.2.GTK.tgz
diff -N Proyectos/Mecagtk/soft/mecagtk-devel-0.2.GTK.tgz
Binary files /dev/null and /tmp/cvsbfTfeo differ

Index: Proyectos/Mecagtk/soft/mecagtk1.tgz
===================================================================
RCS file: Proyectos/Mecagtk/soft/mecagtk1.tgz
diff -N Proyectos/Mecagtk/soft/mecagtk1.tgz
Binary files /dev/null and /tmp/cvs99dPQr differ

Index: Proyectos/Nemesis/index.html
===================================================================
RCS file: Proyectos/Nemesis/index.html
diff -N Proyectos/Nemesis/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Nemesis/index.html        3 Mar 2012 06:15:01 -0000       1.1
@@ -0,0 +1,140 @@
+<HTML>
+<HEAD>
+<TITLE></TITLE>
+</HEAD>
+<BODY>
+<FONT color=mediumblue size=6> <CENTER> <H1><FONT color=black>GNU 
España</FONT></H1></CENTER></FONT><CENTER><FONT color=mediumblue 
size=6><STRONG><U><IMG alt="[imagen de la cabeza de un ÑU] " hspace=0 
+src="http://es.gnu.org/Images/gnu-head.jpg"; border=0><BR></U></STRONG><FONT 
+size=4><FONT color=black>[</FONT> <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF 
THE PAGE TOO! --></FONT><A 
+href="/"><FONT size=4>Principal</FONT></A><FONT size=4> <FONT 
+color=#000000>|</FONT> </FONT><A href="http://www.gnu.org";><FONT 
+size=4>FSF/GNU</FONT></A><FONT size=4> <FONT color=#000000>|</FONT> </FONT><A 
+href="/Proyectos"><FONT size=4>Proyectos Sofware</FONT></A><FONT size=4> <FONT 
+color=#000000>|</FONT> </FONT><A href="/Eventos"><FONT 
+size=4>Eventos</FONT></A><FONT size=4> <FONT color=#000000>|</FONT> </FONT><A 
+href="/Traducciones"><FONT size=4>Traducciones</FONT></A><FONT size=4> <FONT 
+color=#000000>|</FONT> </FONT><A href="/Licencias"><FONT 
+size=4>Licencias</FONT></A><FONT size=4> <FONT color=black>|</FONT> </FONT><A 
+href="/buscar.html"><FONT size=4>Buscar</FONT></A><FONT size=4> <!-- PLEASE 
UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></FONT><STRONG><U><FONT 
+color=black size=4>]</FONT> <HR> </U></STRONG></FONT><FONT 
color=mediumblue><FONT color=#000000>[ 
+</FONT><A 
+href="/Proyectos">Proyectos Software</A><FONT color=#000000> | Nemesis 
]</FONT></FONT></CENTER><HR><TABLE CELLSPACING=1 CELLPADDING=1 WIDTH="80%" 
ALIGN=center BORDER=0><TR><TD><P><STRONG><U><FONT SIZE=4>Secciones 
+:</FONT></U></STRONG></P><P>&nbsp;</P></TD></TR> <TR> <TD>
+      <OL><LI><A href="#queesnemesis">¿Qué 
+es el Proyecto Némesis?</A>
+        <LI><A href="#elementos">¿De qué 
+elementos se compone el Proyecto Nemesis?</A></LI>
+        <OL><LI><A href="#nmwebbrowser">NM 
+Web Browser</A><LI><A href="#nmwebzilla">NM WebZilla!!!</A><LI><A 
href="#telnet">NM 
+Telnet 32</A>
+          <LI><A href="#xflash">X 
+Flash Debugger</A></LI></OL><LI><A href="#comocopia">¿Cómo 
+consigo una Copia del mismo?</A><LI><A 
href="#screenshot">Screenshots</A><LI><A 
href="#contacto">Contacto</A></LI></OL></TD></TR> 
+</TABLE><P>&nbsp;</P><HR> <P align=left> <TABLE cellSpacing=1 cellPadding=1 
Width="80%" align=center border=0> 
+<TR> <TD><P><STRONG><U><FONT size=4><A NAME="queesnemesis"></A>¿Qué es el 
proyecto 
+Nemesis? :</FONT></U></STRONG></P><P>&nbsp;</P></TD></TR> <TR> <TD> El 
Proyecto 
+Nemesis consiste en un conjunto de Herramientas consistentes en Software 
Libre, 
+orientadas a Internet y con entorno Gráfico. El proyecto al completo, 
actualmente solo 
+está disponible para la plataforma Win32, pero en un futuro no muy lejano 
estarán 
+finalizadas las versiones del mismo para las plataformas Linux, FreeBSD y 
otras 
+plataformas Unix.</TD></TR></TABLE><P></P><P align=left> </P><FONT 
color=#000099 size=+3><BIG><BIG><BIG><BIG><STRONG><EM><U> 
+<HR> </U></EM></STRONG><FONT color=#000000 size=3> 
</FONT></BIG></BIG></BIG></BIG></FONT> 
+<P align=left><STRONG><FONT size=4><U> </U></FONT></STRONG>&nbsp;</P><P 
align=left> 
+<center> <TABLE border=0 cellSpacing=0 cellPadding=1 Width="80%"
+> <TR> <TD colSpan=2 HEIGHT="35"><P><STRONG><U><FONT size=4><A 
NAME="elementos"></A>¿De 
+qué elementos se compone el Proyecto Nemesis? 
:</FONT></U></STRONG></P><P>&nbsp;</P></TD></TR> 
+<TR> <TD>
+      <P><a href="setup.exe">NM&nbsp;Web Browser</a> - <a 
href="archives/nmwebiesrc.zip">Código
+      Fuente</a></P>
+      <P>&nbsp;</P></TD><TD> 
+<P>       
+           
+             
+            
+           
+               
+             
+           
+    Nemesis Web Browser es un navegador basado 
+en Internet Explorer con funciones orientadas hacia los programadores Web. 
Información.</P> 
+<P>       
+           
+             
+            
+           
+               
+             
+           
+           
+          &nbsp;</P></TD></TR> 
+<TR> <TD>
+      <P><A 
href="archives/NM_Browser_Mozilla_Version.zip">NM&nbsp;WebZilla!!!</A>
+      - <a href="archives/nmwebmoz.zip">Código Fuente</a></P>
+      <P>&nbsp;</P></TD><TD><P> 
+               
+               
+            
+               
+             
+             Nemesis WebZilla Browser es 
+un navegador basado en Gecko (Mozilla) con funciones orientadas a los 
programadores Web. 
+Información.</P><P> 
+               
+               
+            
+               
+             
+                 
+             
+&nbsp;</P></TD></TR> <TR> <TD>
+      <P><A href="archives/Telnet.zip">NM Telnet 32</A></P>
+      <P>&nbsp;</P></TD><TD><P><A NAME="nmtelnet"></A>Cliente 
+      telnet 
+de 32 bits que soporta terminales VT100, VT51 y ASCII. Un cliente sencillo 
pero 
+funcional y que es software libre. Información.</P><P> 
+              
+      &nbsp;</P></TD></TR> 
+<TR> <TD>
+      <P><A href="archives/Flash.zip">X Flash Debugger</A></P>
+      <P>&nbsp;</P></TD><TD>
+      <P>Es un Debugger de películas Flash. Es muy útil, por ejemplo, para 
+      programadores en Action Script&nbsp;. Información.</P>
+      <P>&nbsp;</P></TD></TR><TR><TD COLSPAN="2">
+      <P>&nbsp;</P>
+      <P>&nbsp;</P></TD></TR><TR><TD COLSPAN="2"><P><STRONG><U><FONT SIZE=4><A 
NAME="comocopia"></A>¿COMO 
+CONSIGO UNA COPIA? :</FONT></U></STRONG></P><P>&nbsp;</P></TD></TR><TR><TD 
COLSPAN="2"><P>Puede 
+conseguir una copia de cada uno de estos programas con los vínculos que 
+aparecen arriba o bien conseguir todo el proyecto Nemesis completo (los 
elementos 
+que lo conforman actualmente) con este otro link ---&gt; <A 
href="archives/NemesisProject.tar.gz">NEMESIS 
+PROJECT</A>.</P><P>&nbsp;</P></TD></TR><TR><TD COLSPAN="2"><STRONG><U><FONT 
SIZE=4><A NAME="screenshot"></A>SCREENSHOTS 
+: </FONT></U></STRONG></TD></TR>
+  <TR>
+    <TD colSpan=2><P>Nemesis Web Browser 
+Internet Explorer Version [ <A href="nmwbie1.jpg" target=_blank>1</A> - <A 
href="nmwbie2.jpg" target=_blank>2</A> 
+- <A href="nmwbie3.jpg" target=_blank>3</A> - <A href="nmwbie4.jpg" 
target=_blank>4</A> 
+- <A href="nmwbie5.jpg" target=_blank>5</A> ]</P><P>Nemesis WebZilla!!! [ 1 
+- 2 - 3 ]</P><P>Nemesis Telnet 32 [ 1 - 2 - 3 ]</P><P>Nemesis Hyper Edit 32 [ 
+1 - 2 - 3 ]</P><P>&nbsp;</P></TD></TR><TR><TD COLSPAN="2">
+      <P><STRONG><U>CONTACTO :</U></STRONG></P>Para cualquier tema 
realacionado 
+      con el Proyecto Nemesis envíar vuestros correos a <A 
+      href="mailto:address@hidden";>address@hidden</A>. Los comentarios son 
+      bienvenidos.
+      <P>&nbsp;</P></TD></TR> </TABLE></center><P></P><FONT size=4><STRONG><U> 
+<HR> </U></STRONG><FONT size=3> </FONT><FONT size=3> <P align=left> <A 
href="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A> 
+<BR><A href="mailto:address@hidden";><EM>address@hidden</EM></A> 
+</P><DIV align=left> <HR> [<A 
+href="/Proyectos">Proyectos Software</A><FONT color=#000000> | Nemesis 
]</FONT> 
+</DIV><DIV align=left> <HR>
+[ <!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! --><A 
+href="/">Principal</A> | <A href="http://www.gnu.org";>FSF/GNU</A> | <A 
+href="/Proyectos">Proyectos Sofware</A> | <A href="/Eventos">Eventos</A> | <A 
+href="/Traducciones">Traducciones</A> | <A href="/Licencias">Licencias</A> | 
<A 
+href="/buscar.html">Buscar</A> <!-- PLEASE UPDATE THE LIST AT THE TOP OF THE 
PAGE TOO! -->] 
+</DIV><DIV align=left> <HR> </DIV><DIV align=left>&nbsp;</DIV><DIV 
align=left>Escuela 
+Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 Cp:28031 
+Madrid (España) </DIV><P align=left>La copia y distribucion de este articulo 
en 
+su totalidad o parcialmente esta permitido en cualquier medio, manteniendo la 
+autoria y la direccion de la fuente. <P align=left>Última 
actualización:&nbsp;7&nbsp;Ene 
+2001 <HR><P></P></FONT><SMALL></SMALL></FONT> 
+</BODY>
+</HTML>

Index: Proyectos/Nemesis/nmwbie1.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbie1.jpg
diff -N Proyectos/Nemesis/nmwbie1.jpg
Binary files /dev/null and /tmp/cvsHvxujr differ

Index: Proyectos/Nemesis/nmwbie2.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbie2.jpg
diff -N Proyectos/Nemesis/nmwbie2.jpg
Binary files /dev/null and /tmp/cvszF5UCu differ

Index: Proyectos/Nemesis/nmwbie3.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbie3.jpg
diff -N Proyectos/Nemesis/nmwbie3.jpg
Binary files /dev/null and /tmp/cvsPkL5ct differ

Index: Proyectos/Nemesis/nmwbie4.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbie4.jpg
diff -N Proyectos/Nemesis/nmwbie4.jpg
Binary files /dev/null and /tmp/cvsJ8Oc9t differ

Index: Proyectos/Nemesis/nmwbie5.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbie5.jpg
diff -N Proyectos/Nemesis/nmwbie5.jpg
Binary files /dev/null and /tmp/cvsu8UUrx differ

Index: Proyectos/Nemesis/nmwbmoz1.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbmoz1.jpg
diff -N Proyectos/Nemesis/nmwbmoz1.jpg
Binary files /dev/null and /tmp/cvshlFTtv differ

Index: Proyectos/Nemesis/nmwbmoz2.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbmoz2.jpg
diff -N Proyectos/Nemesis/nmwbmoz2.jpg
Binary files /dev/null and /tmp/cvsfVYyuw differ

Index: Proyectos/Nemesis/nmwbmoz3.jpg
===================================================================
RCS file: Proyectos/Nemesis/nmwbmoz3.jpg
diff -N Proyectos/Nemesis/nmwbmoz3.jpg
Binary files /dev/null and /tmp/cvsg3JJNz differ

Index: Proyectos/Nemesis/archives/readme.txt
===================================================================
RCS file: Proyectos/Nemesis/archives/readme.txt
diff -N Proyectos/Nemesis/archives/readme.txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Nemesis/archives/readme.txt       3 Mar 2012 06:15:03 -0000       
1.1
@@ -0,0 +1,4 @@
+Your files have been removed. There doesn't seem to be a good reason
+for them being there.
+
+If you need them, email address@hidden :)

Index: Proyectos/Telejano/index.html
===================================================================
RCS file: Proyectos/Telejano/index.html
diff -N Proyectos/Telejano/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Telejano/index.html       3 Mar 2012 06:15:03 -0000       1.1
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyecto UCA. P&aacute;gina principal. GNU Espa&ntilde;a</TITLE>
+
+<META HTTP-EQUIV="Keywords"
+ CONTENT="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description"
+ CONTENT="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>P&aacute;gina principal del proyecto Telejano</H2>
+       
+       La web de este proyecto no ha sido colgada todav&iacute;a por el
+       responsable del mismo.
+       <br>&nbsp;<br>
+       Para mas informaci&oacute;n
+       contacte con el responsable del proyecto
+       <a href="mailto:address@hidden";>address@hidden</a>
+
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<p>&nbsp;
+<p>
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <STRONG>Proyectos Software</STRONG>
+| <A HREF="/Proyectos/solicitudes.html">Colabore</A>
+| <A HREF="/Proyectos/normas.html">Normas de Proyectos</A> <br>
+| <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos/">Proyectos Sofware</A>
+| <A HREF="/Eventos/">Eventos</A>
+| <A HREF="/Traducciones/">Traducciones</A>
+| <A HREF="/Licencias/">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+20 Jun 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/Uca/index.html
===================================================================
RCS file: Proyectos/Uca/index.html
diff -N Proyectos/Uca/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/Uca/index.html    3 Mar 2012 06:15:04 -0000       1.1
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyecto UCA. P&aacute;gina principal. GNU Espa&ntilde;a</TITLE>
+
+<META HTTP-EQUIV="Keywords"
+ CONTENT="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description"
+ CONTENT="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>P&aacute;gina principal del proyecto LOQUESEA</H2>
+       
+       La web de este proyecto no ha sido colgada todav&iacute;a por el
+       responsable del mismo.
+       <br>&nbsp;<br>
+       Para mas informaci&oacute;n
+       contacte con el responsable del proyecto
+       <a href="mailto:address@hidden";>address@hidden</a>
+
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<p>&nbsp;
+<p>
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <STRONG>Proyectos Software</STRONG>
+| <A HREF="/Proyectos/solicitudes.html">Colabore</A>
+| <A HREF="/Proyectos/normas.html">Normas de Proyectos</A> <br>
+| <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos/">Proyectos Sofware</A>
+| <A HREF="/Eventos/">Eventos</A>
+| <A HREF="/Traducciones/">Traducciones</A>
+| <A HREF="/Licencias/">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+20 Jun 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Proyectos/ediv/index.html
===================================================================
RCS file: Proyectos/ediv/index.html
diff -N Proyectos/ediv/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Proyectos/ediv/index.html   3 Mar 2012 06:15:04 -0000       1.1
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Proyecto Ediv. P&aacute;gina principal. GNU Espa&ntilde;a</TITLE>
+
+<META HTTP-EQUIV="Keywords"
+ CONTENT="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description"
+ CONTENT="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>P&aacute;gina principal del proyecto Ediv</H2>
+       
+       La web de este proyecto no ha sido colgada todav&iacute;a por el
+       responsable del mismo.
+       <br>&nbsp;<br>
+       Para mas informaci&oacute;n
+       contacte con el responsable del proyecto
+       <a href="mailto:address@hidden";>address@hidden</a>
+
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<p>&nbsp;
+<p>
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <STRONG>Proyectos Software</STRONG>
+| <A HREF="/Proyectos/solicitudes.html">Colabore</A>
+| <A HREF="/Proyectos/normas.html">Normas de Proyectos</A> <br>
+| <A HREF="/Proyectos/proyhuerfanos.html">Proyectos hu&eacute;rfanos</a>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos/">Proyectos Sofware</A>
+| <A HREF="/Eventos/">Eventos</A>
+| <A HREF="/Traducciones/">Traducciones</A>
+| <A HREF="/Licencias/">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+20 Jun 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Traducciones/colab.html
===================================================================
RCS file: Traducciones/colab.html
diff -N Traducciones/colab.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Traducciones/colab.html     3 Mar 2012 06:15:04 -0000       1.1
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Solicitud de voluntarios - Coordinaci&oacute;n de Eventos
 - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords" CONTENT="FSF/GNU, Espa&ntilde;, filial, GNU, FSF,
+Free, Software, Foundation, Linux, Emacs, GCC, Unix, Software libre,
+Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description" CONTENT="Desde 1983, desarroyando el sistema
+operativo libre, estilo Unix, bajo GNU, con el que los usuarios de computadoras
+tengan la libertadde compartir y mejorar el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+[
 <A HREF="/Eventos">Eventos</A>
 | <A HREF="/Eventos/solicitudes.html">Colabore</A>
 ]
 <HR>

+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Qu&iacute;ere colaborar?</H2>
+       <p align="left">Si está
+        interesado en ayudar a la Coordinación de Traducciones
+        para labores de traducción de documentos, rellene por
+        favor el siguiente formulario, indicando su nombre y
+        email, un nick para identificarse en el sistema de
+        Gnu.España, e indique en el campo de texto el motivo de
+        su solicitud. Tan pronto como sea posible, el coordinador
+        de traducciones se pondrá en contacto con usted con
+        mayor información.</p>
+        <form action="/cgi-bin/formmailes.cgi" method=post>
+       <input type=hidden name=recipient value="address@hidden">
+       <input type=hidden name=redirect value="/Traducciones/index.html">
+        Nombre: <INPUT NAME="Nombre" TYPE="TEXT">
+        Nick: <INPUT NAME="Nick" TYPE="TEXT">
+        <br>
+         e-mail: <INPUT NAME="email" TYPE="TEXT">
+
+    Comentarios, sugerencias y voluntariado para la Coordinaci&oacute;n
+        de Eventos<br>
+   <TEXTAREA NAME="TEXTO" COLS=60 ROWS=10>
+   </TEXTAREA>
+   <br>
+   <INPUT TYPE="submit" VALUE="Enviar">
+   <INPUT TYPE="reset" VALUE="Limpiar formulario">
+   </FORM>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
 <A HREF="/Eventos">Eventos</A>
 | <A HREF="/Eventos/solicitudes.html">Colabore</A>
 ]
 <HR>

+
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</a>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+| <A HREF="/buscar.html">Buscar</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+27 Mar 2002

+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Traducciones/docs.html
===================================================================
RCS file: Traducciones/docs.html
diff -N Traducciones/docs.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Traducciones/docs.html      3 Mar 2012 06:15:04 -0000       1.1
@@ -0,0 +1,123 @@
+<!-- saved from url=(0051)http://www.es.gnu.org/Traducciones/solicitudes.html 
-->
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta http-equiv="Keywords"
+content="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<meta http-equiv="Description"
+content="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<title>Coordinación de Traducciones - GNU España</title>
+<link href="mailto:address@hidden"; rev="made">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF"
+vlink="#9900DD" alink="#FF0000">
+
+<h1 align="center">GNU España</h1>
+
+<p align="center"><img
+src="http://www.es.gnu.org/Images/gnu-head.jpg";
+alt="[imagen de la cabeza de un ÑU] " width="129" height="122"><br>
+[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --><a 
href="http://www.es.gnu.org/";>Principal</a> | <a
+href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Traducciones</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE BOTTOM OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/Traducciones/index.html";>Inicio</a> | 
Documentos |
+<a href="http://www.es.gnu.org/Traducciones/trads.html";>Traductores</a> | <a 
href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a>
+| <a href="http://www.es.gnu.org/Traducciones/sugs.html";>Sugerencias<!-- 
PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></a>] </p>
+
+<hr>
+
+<h1 align="center">Documentos en Castellano</h1>
+<!-- Keep the tables short and be sure that they degrade properly --><!-- when 
using text-only browsers! --><!-- 
************************************************************ --><!-- begining 
of the main content --><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td>A continuación, figura la lista de aquellos
+        documentos traducidos en su totalidad por los miembros de
+        la Coordinación de Traducciones. Para cada archivo, se
+        indica su nombre, la fecha en que se incorporó a la
+        lista, el tamaño del fichero, y una descripción breve
+        del contenido del mismo. Si desea consultar alguno de los
+        documentos, pulse sobre el nombre del mismo de forma que
+        pueda visualizarlo. Esta lista se actualizará conforme
+        nuevas traducciones estén concluídas.<br>
+        <br>
+        También puede consultar aquellos documentos que están
+        actualmente en proceso de traducción en la página de
+        Traductores,o sugerir algún documento que considere
+        especialmente interesante para la comunidad del Software
+        Libre en la página de Sugerencias.</td>
+    </tr>
+</TBODY></table>
+</center></div>
+
+<p>&nbsp;</p>
+<div align="center"><center>
+
+<table border="1" width="80%">
+    <tr>
+        <td align="center" width="25%" bgcolor="#0080FF"><font
+        color="#FFFFFF"><strong>Nombre</strong></font></td>
+        <td align="center" width="13%" bgcolor="#0080FF"><font
+        color="#FFFFFF"><strong>Fecha</strong></font></td>
+        <td align="center" width="12%" bgcolor="#0080FF"><font
+        color="#FFFFFF"><strong>Tamaño</strong></font></td>
+        <td align="center" colspan="2" width="50%"
+        bgcolor="#0080FF"><font 
color="#FFFFFF"><strong>Descripción</strong></font></td>
+    </tr>
+    <tr>
+        <td align="center" valign="top" colspan="5" width="100%">No
+        hay documentos disponibles actualmente</td>
+    </tr>
+</table>
+</center></div>
+
+<p><!-- finish of the main content --><!-- 
************************************************************ --> </p>
+
+<hr>
+
+<p><a 
href="http://www.es.gnu.org/Voluntarios/webmasters.html";><em>Webmasters</em></a>
+<br>
+<a href="mailto:address@hidden";><em>address@hidden</em></a>
+</p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/Traducciones/index.html";>Inicio</a> | 
Documentos |
+<a href="http://www.es.gnu.org/Traducciones/trads.html";>Traductores</a> | <a 
href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a>
+| <a href="http://www.es.gnu.org/Traducciones/sugs.html";>Sugerencias<!-- 
PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></a>] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/";>Principal</a>
+| <a href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Principal</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE TOP OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p>Escuela Universitaria de Informatica de la UPM, Carretera de
+Valencia Km - 7 Cp:28031 Madrid (España) </p>
+
+<p>La copia y distribucion de este articulo en su totalidad o
+parcialmente esta permitido en cualquier medio, manteniendo la
+autoria y la direccion de la fuente. </p>
+
+<p>Última actualización: <!-- hhmts start-->16 Ago 2001 <!-- hhmts end --> </p>
+
+<hr>
+</body>
+</html>

Index: Traducciones/index.html
===================================================================
RCS file: Traducciones/index.html
diff -N Traducciones/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Traducciones/index.html     3 Mar 2012 06:15:04 -0000       1.1
@@ -0,0 +1,148 @@
+<!-- saved from url=(0051)http://www.es.gnu.org/Traducciones/solicitudes.html 
-->
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta http-equiv="Keywords"
+content="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<meta http-equiv="Description"
+content="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<title>Coordinación de Traducciones - GNU España</title>
+<link href="mailto:address@hidden"; rev="made">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF"
+vlink="#9900DD" alink="#FF0000">
+
+<h1 align="center">GNU España</h1>
+
+<p align="center"><img
+src="http://www.es.gnu.org/Images/gnu-head.jpg";
+alt="[imagen de la cabeza de un ÑU] " width="129" height="122"><br>
+[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --><a 
href="http://www.es.gnu.org/";>Principal</a> | <a
+href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Traducciones</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE BOTTOM OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
-->Inicio | <a 
href="http://www.es.gnu.org/Traducciones/docs.html";>Documentos</a> | <a
+href="http://www.es.gnu.org/Traducciones/trads.html";>Traductores</a> | <a 
href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a>
+| <a href="http://www.es.gnu.org/Traducciones/sugs.html";>Sugerencias<!-- 
PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></a>] </p>
+
+<hr>
+
+<p align="center">&nbsp;</p>
+<div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td><h2><img 
src="http://www.es.gnu.org/Traducciones/Images/logotrad.jpg";
+        alt="[imagen de la cabeza de un ÑU] " align="middle"
+        width="153" height="148"></h2>
+        </td>
+        <td><p align="center"><font size="6"><strong>Coordinación
+        de Traducciones<br>
+        GNU.es</strong></font></p>
+        </td>
+    </tr>
+</TBODY></table>
+</center></div><!-- Keep the tables short and be sure that they degrade 
properly --><!-- when using text-only browsers! --><!-- 
************************************************************ --><!-- begining 
of the main content --><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td><h2>¿Qué es la Coordinación de Traducciones?</h2>
+        <p>Como parte de GNU España, la Coordinación de
+        Traducciones se encarga de realizar traducciones al
+        castellano de los documentos del proyecto GNU, con el
+        objetivo de expandir la influencia del movimiento del
+        Software Libre en la comunidad hispanohablante y de esta
+        forma permitir el libre acceso a la información. En esta
+        página, se centralizan las acciones desarrolladas dentro
+        de la Coordinación y se ofrecen libremente a toda la
+        comunidad<br>
+        <br>
+        En la sección de Documentos se incluyen los diversos
+        textos que hasta el momento han sido traducidos,
+        consistentes en documentos sobre el Software libre, el
+        movimiento GNU y su filosofía, manuales de software
+        distribuido de forma libre, documentos del tipo Preguntas
+        Más Frecuentes y How-to´s, etcétera, así como acceso
+        a listas de correo de los proyectos relacionados con la
+        traduccion de documentacion relacionada con el Software
+        Libre que se esten desarrollando en este momento, asi
+        como proyectos de traduccion en fase de planificación.<br>
+        &nbsp; <br>
+        La sección de Traductores ofrece información
+        especialmente relevante para todos los voluntarios que
+        estén colaborando en la traducción o apadrinamiento de
+        algún documento, incluyendo noticias internas de la
+        Coordinación de Traducciones. También se ofrece una
+        guía de estilo para las traducciones, una guía de
+        utilización del Sistema de Gestión de Traducciones, y
+        acceso a la Base de Datos de Términos. Cualquier persona
+        interesada en formar parte del equipo de traductores de
+        GNU España puede consultarlos.<br>
+        <br>
+        Si quiere colaborar con nosotros, en la sección
+        Colaborar encontrará información sobre el sistema de
+        traducciones de la Coordinación junto a una sección de
+        Preguntas Más Frecuentes, y podrá rellenar un pequeño
+        formulario con sus datos, que serán enviados al
+        coordinador de traducciones, quien le indicará cómo
+        puede ser parte activa de la comunidad del Software
+        Libre.<br>
+        &nbsp; <br>
+        Para más información, puede acceder a la web del
+        proyecto GNU en castellano en <a
+        
href="http://www.gnu.org/home.es.html";>http://www.gnu.org/home.es.html</a>.
+        </p>
+        </td>
+    </tr>
+</TBODY></table>
+</center></div>
+
+<p><!-- finish of the main content --><!-- 
************************************************************ --> </p>
+
+<hr>
+
+<p><a 
href="http://www.es.gnu.org/Voluntarios/webmasters.html";><em>Webmasters</em></a>
+<br>
+<a href="mailto:address@hidden";><em>address@hidden</em></a>
+</p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
-->Inicio | <a 
href="http://www.es.gnu.org/Traducciones/docs.html";>Documentos</a> | <a
+href="http://www.es.gnu.org/Traducciones/trads.html";>Traductores</a> | <a 
href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a>
+| <a href="http://www.es.gnu.org/Traducciones/sugs.html";>Sugerencias<!-- 
PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></a>] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/";>Principal</a>
+| <a href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Principal</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE TOP OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p>Escuela Universitaria de Informatica de la UPM, Carretera de
+Valencia Km - 7 Cp:28031 Madrid (España) </p>
+
+<p>La copia y distribucion de este articulo en su totalidad o
+parcialmente esta permitido en cualquier medio, manteniendo la
+autoria y la direccion de la fuente. </p>
+
+<p>Última actualización: <!-- hhmts start-->16 Ago 2001 <!-- hhmts end --> </p>
+
+<hr>
+</body>
+</html>

Index: Traducciones/sugs.html
===================================================================
RCS file: Traducciones/sugs.html
diff -N Traducciones/sugs.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Traducciones/sugs.html      3 Mar 2012 06:15:05 -0000       1.1
@@ -0,0 +1,100 @@
+<!-- saved from url=(0051)http://www.es.gnu.org/Traducciones/solicitudes.html 
-->
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta http-equiv="Keywords"
+content="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<meta http-equiv="Description"
+content="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<title>Coordinación de Traducciones - GNU España</title>
+<link href="mailto:address@hidden"; rev="made">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF"
+vlink="#9900DD" alink="#FF0000">
+
+<h1 align="center">GNU España</h1>
+
+<p align="center"><img
+src="http://www.es.gnu.org/Images/gnu-head.jpg";
+alt="[imagen de la cabeza de un ÑU] " width="129" height="122"><br>
+[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --><a 
href="http://www.es.gnu.org/";>Principal</a> | <a
+href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Traducciones</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE BOTTOM OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/Traducciones/index.html";>Inicio</a> | <a
+href="http://www.es.gnu.org/Traducciones/docs.html";>Documentos</a> | <a 
href="http://www.es.gnu.org/Traducciones/trads.html";>Traductores</a>
+| <a href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a> | 
Sugerencias<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<h1 align="center">Sugerencias</h1>
+<!-- Keep the tables short and be sure that they degrade properly --><!-- when 
using text-only browsers! --><!-- 
************************************************************ --><!-- begining 
of the main content --><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td>En breve, desde esta página podrá sugerir
+        documentos cuya traducción al castellano considere de
+        utilidad, como artículos, libros, manuales, capítulos,
+        etcétera. Será bienvenido cualquier documento
+        especialmente dirigido a la comunidad de Software Libre,
+        aunque cualquier otro tipo puede ser tenido en cuenta.<br>
+        <br>
+        La Coordinación de Traducciones agradece cualquier
+        sugerencia sobre documentos a traducir, por cuanto
+        permite que los esfuerzos se dirijan principalmente hacia
+        metas útiles.<br>
+        <br>
+        </td>
+    </tr>
+</TBODY></table>
+</center></div>
+
+<p><!-- finish of the main content --><!-- 
************************************************************ --> </p>
+
+<hr>
+
+<p><a 
href="http://www.es.gnu.org/Voluntarios/webmasters.html";><em>Webmasters</em></a>
+<br>
+<a href="mailto:address@hidden";><em>address@hidden</em></a>
+</p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/Traducciones/index.html";>Inicio</a> | <a
+href="http://www.es.gnu.org/Traducciones/docs.html";>Documentos</a> | <a 
href="http://www.es.gnu.org/Traducciones/trads.html";>Traductores</a>
+| <a href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a> | 
Sugerencias<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/";>Principal</a>
+| <a href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Principal</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE TOP OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p>Escuela Universitaria de Informatica de la UPM, Carretera de
+Valencia Km - 7 Cp:28031 Madrid (España) </p>
+
+<p>La copia y distribucion de este articulo en su totalidad o
+parcialmente esta permitido en cualquier medio, manteniendo la
+autoria y la direccion de la fuente. </p>
+
+<p>Última actualización: <!-- hhmts start-->16 Ago 2001 <!-- hhmts end --> </p>
+
+<hr>
+</body>
+</html>

Index: Traducciones/test.html
===================================================================
RCS file: Traducciones/test.html
diff -N Traducciones/test.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Traducciones/test.html      3 Mar 2012 06:15:05 -0000       1.1
@@ -0,0 +1,5 @@
+<html>
+<body>
+Una simple pagina de prueba
+</body>
+</html>
\ No newline at end of file

Index: Traducciones/trads.html
===================================================================
RCS file: Traducciones/trads.html
diff -N Traducciones/trads.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Traducciones/trads.html     3 Mar 2012 06:15:05 -0000       1.1
@@ -0,0 +1,239 @@
+<!-- saved from url=(0051)http://www.es.gnu.org/Traducciones/solicitudes.html 
-->
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta http-equiv="Keywords"
+content="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<meta http-equiv="Description"
+content="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<title>Coordinación de Traducciones - GNU España</title>
+<link href="mailto:address@hidden"; rev="made">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF"
+vlink="#9900DD" alink="#FF0000">
+
+<h1 align="center">GNU España</h1>
+
+<p align="center"><img
+src="http://www.es.gnu.org/Images/gnu-head.jpg";
+alt="[imagen de la cabeza de un ÑU] " width="129" height="122"><br>
+[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --><a 
href="http://www.es.gnu.org/";>Principal</a> | <a
+href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Traducciones</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE BOTTOM OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/Traducciones/index.html";>Inicio</a> | <a
+href="http://www.es.gnu.org/Traducciones/docs.html";>Documentos</a> | 
Traductores | <a
+href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a> | <a 
href="http://www.es.gnu.org/Traducciones/sugs.html";>Sugerencias<!-- PLEASE 
UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></a>]
+</p>
+
+<hr>
+
+<h1 align="center">Información para Traductores</h1>
+<!-- Keep the tables short and be sure that they degrade properly --><!-- when 
using text-only browsers! --><!-- 
************************************************************ --><!-- begining 
of the main content --><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td>En esta página se encuentra información de utilidad
+        para los voluntarios de la Coordinación de Traductores.
+        Aquí aparece una <a href="#docs">lista de los documentos</a>
+        en proceso de traducción y/o revisión, además de <a
+        href="#mans">manuales</a> como la guía de la
+        coordinación de traducciones, la guía de estilo para
+        las traducciones y el manual de utilización del Sgtrad.
+        También se puede acceder a la <a href="#terms">Base de
+        Datos de Términos</a>, para asegurar una homogeneidad en
+        las traducciones y un uso correcto del lenguaje. Aquellas
+        personas interesadas en formar parte del equipo de
+        traductores, pueden visitar la página de Colaborar para
+        incluírse en la lista.</td>
+    </tr>
+</TBODY></table>
+</center></div><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td><p align="center"><font size="5"><strong><br>
+        </strong></font><a name="docs"></a><font size="5"><strong>Lista
+        de Documentos en proceso de Traducción / Revisión</strong></font></p>
+        <p align="left"><font size="3">En primer lugar, se
+        encuentran indicados aquellos documentos del pool que han
+        sido aceptados (a través de los mecanismos apropiados)
+        para su traducción o su revisión. Para mayor
+        información acerca del proceso de apadrinamiento de un
+        documento y del sistema de revisiones, puede consultarse
+        el manual de la estructura operativa de la coordinación
+        de traducciones un poco más abajo, en la sección de
+        manuales para traductores. Para visualizar un documento
+        particular, pulse sobre su nombre.<br>
+        <br>
+        </font></p>
+        </td>
+    </tr>
+</TBODY></table>
+</center></div><div align="center"><center>
+
+<table border="1" width="80%">
+    <tr>
+        <td align="center" width="25%" bgcolor="#0080FF"><font
+        color="#FFFFFF"><strong>Nombre</strong></font></td>
+        <td align="center" width="13%" bgcolor="#0080FF"><font
+        color="#FFFFFF"><strong>Fecha</strong></font></td>
+        <td align="center" colspan="2" width="50%"
+        bgcolor="#0080FF"><font color="#FFFFFF"><strong>Descripción,
+        Traductor(es) y Revisor(es)</strong></font></td>
+    </tr>
+    <tr>
+        <td><p align="center"><a
+        href="ftp://es.gnu.org/traducciones/gpl-faq.txt";>gpl-faq.txt</a></p>
+        </td>
+        <td><p align="center">2/6/2001</p>
+        </td>
+        <td colspan="2"><p align="center">Preguntas Más
+        Frecuentes sobre la Licencia Pública General GPL-GNU.
+        Traductor: Javier Fdez. Retenaga</p>
+        </td>
+    </tr>
+    <tr>
+        <td><p align="center"><a
+        
href="ftp://es.gnu.org/traducciones/README.savannah.txt";>README.savannah.txt</a></p>
+        </td>
+        <td><p align="center">18/7/2001</p>
+        </td>
+        <td colspan="2"><p align="center">Documento con ayuda
+        sobre la subarquitectura de ordenadores del proyecto GNU.<br>
+        Traductor: Jesús López de Aguileta</p>
+        </td>
+    </tr>
+</table>
+</center></div><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td><p align="center"><font size="5"><strong><br>
+        </strong></font><a name="mans"></a><font size="5"><strong>Manuales
+        para Traductores</strong></font></p>
+        <p align="left"><font size="3">También pueden
+        consultarse manuales sobre la Estructura Operativa de la
+        Coordinación sobre el funcionamiento del sistema Sgtrad,
+        o una guía de estilo para las traducciones. Antes de
+        comenzar a traducir ningún documento, se ruega a los
+        traductores que lean detenidamente todos los documentos
+        para que todos los trabajos respeten unas normas
+        mínimas, y que guarden una copia actualizada de los
+        mismos.<br>
+        Junto al nombre de cada documento, aparece una
+        descripción del mismo. Pulsando sobre el nombre
+        correspondiente, se puede acceder al fichero
+        correspondiente mediante FTP.<br>
+        <br>
+        </font></p>
+        </td>
+    </tr>
+</TBODY></table>
+</center></div><div align="center"><center>
+
+<table border="1" width="80%">
+    <tr>
+        <td align="center" valign="top" width="25%"
+        bgcolor="#0080FF"><font 
color="#FFFFFF"><strong>Nombre</strong></font></td>
+        <td align="center" valign="top" colspan="2" width="42%"
+        bgcolor="#0080FF"><font 
color="#FFFFFF"><strong>Descripción</strong></font></td>
+    </tr>
+    <tr>
+        <td align="center" valign="top" width="25%"><a
+        
href="ftp://es.gnu.org/traducciones/coordinacion/estructura.txt";>estructura.txt</a></td>
+        <td align="center" valign="top" colspan="2" width="42%">Descripción
+        de la Estructura Operativa de la Coordinación,
+        incluyendo voluntarios, tipos de documentos, revisiones,
+        etcétera. <br>
+        Autor: Jose E. Marchesi</td>
+    </tr>
+    <tr>
+        <td align="center" valign="top">guia.txt</td>
+        <td align="center" valign="top" colspan="2">Guía de
+        Estilo para las traducciones, incluyendo algunas
+        convenciones, formatos de revisión, y otros aspectos
+        importantes.<br>
+        Autor: Francisco Cabello</td>
+    </tr>
+    <tr>
+        <td align="center" valign="top"><a
+        
href="ftp://es.gnu.org/traducciones/coordinacion/sgtrad.txt";>sgtrad.txt</a></td>
+        <td align="center" valign="top" colspan="2">Manual de
+        funcionamiento del Sistema de Gestión de Traducciones
+        (Sgtrad), y que es el vehículo de comunicación entre
+        los traductores y la Coordinación, permitiendo ejecutar
+        mandatos sobre los documentos almacenados.<br>
+        Autor: Jose E. Marchesi</td>
+    </tr>
+</table>
+</center></div><div align="center"><center>
+
+<table border="0" width="80%">
+<TBODY>    <tr>
+        <td><p align="center"><font size="5"><strong><br>
+        </strong></font><a name="terms"></a><font size="5"><strong>Base
+        de Datos de Términos</strong></font></p>
+        <p align="left"><font size="3">Próximamente, se
+        ofrecerá una base de datos para consultar cómo se
+        traducen ciertos términos, especialmente técnicos, para
+        que en todos los documentos aparezcan igual. Hasta ese
+        momento, los traductores deben recurrir a la lista de
+        correo para pedir consejo o ayuda.<br>
+        <br>
+        </font></p>
+        </td>
+    </tr>
+</TBODY></table>
+</center></div>
+
+<p><!-- finish of the main content --><!-- 
************************************************************ --> </p>
+
+<hr>
+
+<p><a 
href="http://www.es.gnu.org/Voluntarios/webmasters.html";><em>Webmasters</em></a>
+<br>
+<a href="mailto:address@hidden";><em>address@hidden</em></a>
+</p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/Traducciones/index.html";>Inicio</a> | <a
+href="http://www.es.gnu.org/Traducciones/docs.html";>Documentos</a> | 
Traductores | <a
+href="http://www.es.gnu.org/Traducciones/colab.html";>Colaborar</a> | <a 
href="http://www.es.gnu.org/Traducciones/sugs.html";>Sugerencias<!-- PLEASE 
UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! --></a>]
+</p>
+
+<hr>
+
+<p align="center">[ <!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! 
--><a href="http://www.es.gnu.org/";>Principal</a>
+| <a href="http://www.gnu.org/";>FSF/GNU</a> | <a
+href="http://www.es.gnu.org/Proyectos";>Proyectos Sofware</a> | <a
+href="http://www.es.gnu.org/Eventos";>Eventos</a> | <a
+href="http://www.es.gnu.org/Traducciones";>Principal</a> | <a
+href="http://www.es.gnu.org/Licencias";>Licencias</a> <!-- PLEASE UPDATE THE 
LIST AT THE TOP OF THE PAGE TOO! -->] </p>
+
+<hr>
+
+<p>Escuela Universitaria de Informatica de la UPM, Carretera de
+Valencia Km - 7 Cp:28031 Madrid (España) </p>
+
+<p>La copia y distribucion de este articulo en su totalidad o
+parcialmente esta permitido en cualquier medio, manteniendo la
+autoria y la direccion de la fuente. </p>
+
+<p>Última actualización: <!-- hhmts start-->16 Ago 2001 <!-- hhmts end --> </p>
+
+<hr>
+</body>
+</html>

Index: Traducciones/Images/logotrad.jpg
===================================================================
RCS file: Traducciones/Images/logotrad.jpg
diff -N Traducciones/Images/logotrad.jpg
Binary files /dev/null and /tmp/cvs4l1g9x differ

Index: Voluntarios/index.html
===================================================================
RCS file: Voluntarios/index.html
diff -N Voluntarios/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Voluntarios/index.html      3 Mar 2012 06:15:05 -0000       1.1
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Quienes Somos - GNU Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords"
+ CONTENT="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description"
+ CONTENT="Desde 1983, desarrollando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+<IMG SRC="/Images/gnu-head.jpg"
+   ALT="[imagen de la cabeza de un &Ntilde;U] " BORDER=0
+   WIDTH="129" HEIGHT="122"><BR>
+
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos/">Proyectos Sofware</A>
+| <A HREF="/Eventos/">Eventos</A>
+| <A HREF="/Traducciones/">Traducciones</A>
+| <A HREF="/Licencias/">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <STRONG>Quienes Somos</STRONG>
+| <A HREF="/Voluntarios/webmasters.html">Webmasters</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>Coordinadores</H2>
+
+       <Blockquote>
+        <STRONG>Coordinador General</STRONG><br>
+       Jose Eugenio Marchesi 
+       (<A href="mailto:address@hidden";>address@hidden</a>)
+       <br>&nbsp;
+       <br>
+
+       <STRONG>Coordinador de Traducciones</STRONG><br>
+       Holman Romero
+       (<A href="mailto:address@hidden";>address@hidden</a>)
+       <br>&nbsp;
+       <br>
+
+       <STRONG>Coordinador de Licencias</STRONG><br>
+       Pablo Usano
+       (<A href="mailto:address@hidden";>address@hidden</a>)
+       <br>&nbsp;
+       <br>
+
+       <STRONG>Coordinador de Eventos</STRONG><br>
+       Ignacio Gonz&aacute;lez
+       (<A href="mailto:address@hidden";>address@hidden</a>)
+       <br>&nbsp;
+       <br>
+
+       <STRONG>Coordinador de Proyectos Software</STRONG><br>
+       Marcos Legido
+       (<A href="mailto:address@hidden";>address@hidden</a>)
+       <br>&nbsp;
+       <br>
+
+       <STRONG>Administrador de Red</STRONG><br>
+       Ignacio Gonz&aacute;lez
+       (<A href="mailto:address@hidden";>address@hidden</a>)
+       <br>&nbsp;
+       <br>
+       </Blockquote>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+
+
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <STRONG>Quienes Somos</STRONG>
+| <A HREF="/Voluntarios/webmasters.html">Webmasters</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+   <A HREF="/">Principal</A>
+|  <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos/">Proyectos Sofware</A>
+| <A HREF="/Eventos/">Eventos</A>
+| <A HREF="/Traducciones/">Traducciones</A>
+| <A HREF="/Licencias/">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+3 Dic 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: Voluntarios/webmasters.html
===================================================================
RCS file: Voluntarios/webmasters.html
diff -N Voluntarios/webmasters.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Voluntarios/webmasters.html 3 Mar 2012 06:15:05 -0000       1.1
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>El Proyecto GNU y la Fundaci&oacute;n del Software Libre- GNU 
Espa&ntilde;a</TITLE>
+<META HTTP-EQUIV="Keywords"
+ CONTENT="GNU, FSF, Free Software Foundation, Linux, Emacs, GCC, Unix,
+       Software libre, Sistemas Operativos, Kernel, HURD">
+<META HTTP-EQUIV="Description"
+ CONTENT="Desde 1983, desarroyando el sistema operativo libre, estilo Unix, 
bajo GNU,
+       con el que los usuarios de computadoras tengan la libertad de compartir 
y mejorar
+       el software que usen.">
+<LINK REV="made" HREF="mailto:address@hidden";>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" 
VLINK="#9900DD">
+
+<CENTER><H1>GNU Espa&ntilde;a</H1></CENTER>
+
+<CENTER>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+  <A HREF="/Voluntarios">&iquest;Quienes Somos?</A>
+| <STRONG>Webmasters</STRONG>
+<!-- PLEASE UPDATE THE LIST AT THE BOTTOM OF THE PAGE TOO! -->
+]
+<HR>
+</CENTER>
+
+<!-- Keep the tables short and be sure that they degrade properly -->
+<!-- when using text-only browsers! -->
+
+<!-- ************************************************************ -->
+<!-- begining of the main content -->
+
+<P>
+<CENTER>
+<TABLE WIDTH="80%">
+  <TR>
+    <TD>
+       <H2>&iquest;Qu&iacute;enes somos los Webmasters?</H2>
+       Los webmasters de la GNU Espa&ntilde;a somos voluntarios con ganas
+       de ofrecer toda la informacion posible de la manera mas comoda que
+       podamos. Esta web no es trabajo de una sola persona, sino de un
+       gran equipo humano que aportamos nuestro tiempo libre. Para cualquier
+       duda, consulta, sugerencia, errores en la web o para colaborar con
+       nosotros mande un correo a 
+       <A HREF="mailto:address@hidden";>address@hidden</a>
+    </TD>
+  </TR>
+</TABLE>
+</CENTER>
+<!-- finish of the main content -->
+<!-- ************************************************************ -->
+
+<HR>
+
+<A HREF="/Voluntarios/webmasters.html"><EM>Webmasters</EM></A>
+<BR>
+<A HREF="mailto:address@hidden";><EM>address@hidden</EM></A>
+
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/Voluntarios">&iquest;Quienes Somos?</A>
+| <STRONG>Webmasters</STRONG>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+[
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+  <A HREF="/">Principal</A>
+| <A HREF="http://www.gnu.org";>FSF/GNU</A>
+| <A HREF="/Proyectos">Proyectos Sofware</A>
+| <A HREF="/Eventos">Eventos</A>
+| <A HREF="/Traducciones">Traducciones</A>
+| <A HREF="/Licencias">Licencias</A>
+<!-- PLEASE UPDATE THE LIST AT THE TOP OF THE PAGE TOO! -->
+]
+<HR>
+
+<P>
+Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA  02110,  USA
+<P>
+Escuela Universitaria de Informatica de la UPM, Carretera de Valencia Km - 7 
Cp:28031 Madrid (Espa&ntilde;a)
+<P>
+La copia y distribucion de este articulo en su totalidad o parcialmente
+esta permitido en cualquier medio, manteniendo la autoria y la direccion de la 
fuente.
+<P>
+&Uacute;ltima actualizaci&oacute;n:
+<!-- hhmts start-->
+3 Dic 2000
+<!-- hhmts end -->
+<HR>
+</BODY>
+</HTML>

Index: eventos/.symlinks
===================================================================
RCS file: eventos/.symlinks
diff -N eventos/.symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/.symlinks   3 Mar 2012 06:15:06 -0000       1.1
@@ -0,0 +1,4 @@
+eventos.xhtml eventos.html
+index.html index.xhtml
+plantilla.xhtml plantilla.html
+solicitudes.xhtml solicitudes.html

Index: eventos/eventos.html
===================================================================
RCS file: eventos/eventos.html
diff -N eventos/eventos.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/eventos.html        3 Mar 2012 06:15:06 -0000       1.1
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Eventos - Próximos eventos</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<H2>Eventos de GNU España</H2>
+
+    <p>Estos son los eventos en los que va a participar
+    próximamente la filial española de la FSF:</p>
+    
+    <ul>
+    <li><b>Third Friday</b>: Todos los terceros viernes de cada mes, los
+    FSFeros de Madrid nos reunimos para charlar, cenar, y cambiar
+    impresiones... Dese una vuelta y conozcanos.<br />
+    Recordad que la reunión esté abierta a todo el mundo. Si
+    quieren venir con nosotros, no duden en ponerse en contacto.</li>
+
+    <li><b>Boletín "Mundo GNU"</b>: Preparamos el lanzamiento en
+    próximas fechas del boletín de GNU España. El magazine
+    será mensual y estará orientado especialmente a los
+    usuarios hispanos de Software Libre.</li>
+    </ul>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:06 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/eventos.xhtml
===================================================================
RCS file: eventos/eventos.xhtml
diff -N eventos/eventos.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/eventos.xhtml       3 Mar 2012 06:15:06 -0000       1.1
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Eventos - Próximos eventos</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<H2>Eventos de GNU España</H2>
+
+    <p>Estos son los eventos en los que va a participar
+    próximamente la filial española de la FSF:</p>
+    
+    <ul>
+    <li><b>Third Friday</b>: Todos los terceros viernes de cada mes, los
+    FSFeros de Madrid nos reunimos para charlar, cenar, y cambiar
+    impresiones... Dese una vuelta y conozcanos.<br />
+    Recordad que la reunión esté abierta a todo el mundo. Si
+    quieren venir con nosotros, no duden en ponerse en contacto.</li>
+
+    <li><b>Boletín "Mundo GNU"</b>: Preparamos el lanzamiento en
+    próximas fechas del boletín de GNU España. El magazine
+    será mensual y estará orientado especialmente a los
+    usuarios hispanos de Software Libre.</li>
+    </ul>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:06 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/index.html
===================================================================
RCS file: eventos/index.html
diff -N eventos/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/index.html  3 Mar 2012 06:15:07 -0000       1.1
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Eventos - Página Principal</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<p> GNU España opina que potenciar actividades comunes entre usuarios
+  y desarrolladores es indispensable para que el Software Libre se expanda
+  como se merece. Por ello, esta coordinación se encargará;
+  tanto de la asistencia de la filial a eventos organizados por otros
+  grupos (Hispalinux, LinuxExpo, etc) como de los que se organicen aquí;
+  en la filial.
+</p>
+
+<p> Pretendemos que nuestro evento estrella sea un <b>Congreso Anual del
+  Software Libre</b>, que se celebrará en las instalaciones del
+  Campus Sur de la Universidad Politécnica de Madrid.
+</p>
+
+<p> Si quiere colaborar con la Coordinación de Eventos, rellene este
+  <a href="/eventos/solicitudes.html">formulario</a>
+  para transmitirnos su correo.
+</p>
+
+<p> <a href="/eventos/eventos.html">Próximos eventos de GNU
+  España</a>
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha -->
+    $Date: 2012/03/03 06:15:07 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/plantilla.html
===================================================================
RCS file: eventos/plantilla.html
diff -N eventos/plantilla.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/plantilla.html      3 Mar 2012 06:15:07 -0000       1.1
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+       <p>Aquí va el contenido</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:07 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/plantilla.xhtml
===================================================================
RCS file: eventos/plantilla.xhtml
diff -N eventos/plantilla.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/plantilla.xhtml     3 Mar 2012 06:15:07 -0000       1.1
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Plantilla XHTML</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+       <p>Aquí va el contenido</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:07 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/solicitudes.html
===================================================================
RCS file: eventos/solicitudes.html
diff -N eventos/solicitudes.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/solicitudes.html    3 Mar 2012 06:15:07 -0000       1.1
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Eventos - Colabora</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<H2>¿Quíere colaborar?</H2>
+<form action="/cgi-bin/formmailes.cgi" method="post">
+<input type="hidden" name="recipient" value="address@hidden" />
+<input type="hidden" name="redirect" value="/eventos/index.html" />
+    Nombre: <input name="Nombre" type="TEXT" />
+    Nick: <input name="Nick" type="TEXT" />
+    <br />
+    e-mail: <input name="email" type="TEXT" />
+
+    Comentarios, sugerencias y voluntariado para la Coordinación
+        de Eventos<br />
+   <textarea name="TEXTO" cols="60" rows="10">
+   </textarea>
+   <br />
+   <input type="submit" value="Enviar" />
+   <input type="reset" value="Limpiar formulario" />
+</form>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:07 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/solicitudes.xhtml
===================================================================
RCS file: eventos/solicitudes.xhtml
diff -N eventos/solicitudes.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/solicitudes.xhtml   3 Mar 2012 06:15:07 -0000       1.1
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Eventos - Colabora</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<H2>¿Quíere colaborar?</H2>
+<form action="/cgi-bin/formmailes.cgi" method="post">
+<input type="hidden" name="recipient" value="address@hidden" />
+<input type="hidden" name="redirect" value="/eventos/index.html" />
+    Nombre: <input name="Nombre" type="TEXT" />
+    Nick: <input name="Nick" type="TEXT" />
+    <br />
+    e-mail: <input name="email" type="TEXT" />
+
+    Comentarios, sugerencias y voluntariado para la Coordinación
+        de Eventos<br />
+   <textarea name="TEXTO" cols="60" rows="10">
+   </textarea>
+   <br />
+   <input type="submit" value="Enviar" />
+   <input type="reset" value="Limpiar formulario" />
+</form>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:07 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: eventos/irc/.symlinks
===================================================================
RCS file: eventos/irc/.symlinks
diff -N eventos/irc/.symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/irc/.symlinks       3 Mar 2012 06:15:08 -0000       1.1
@@ -0,0 +1 @@
+index.html index.xhtml

Index: eventos/irc/inauguracion_log.html
===================================================================
RCS file: eventos/irc/inauguracion_log.html
diff -N eventos/irc/inauguracion_log.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/irc/inauguracion_log.html   3 Mar 2012 06:15:08 -0000       1.1
@@ -0,0 +1,616 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+
+<html>
+  <head>
+    <title>Charla de presentación de la filial de FSF/GNU</title>
+  </head>
+
+  <body bgcolor="#ffffff">
+    <h1>Charla de presentación de la filial de FSF/GNU</h1>
+
+    <p>
+      <b>Interviene Jos&eacute; Eugenio Marches&iacute; (jemarch), coordinador
+       general de GNU Espa&ntilde;a</b>
+    </p>
+
+<table width="90%" align="center">
+<tr>
+<td>
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> veamos, hay unas reglas muy 
simples...
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> Jemarch, coordinador general 
de la FSF/GNU Espa&ntilde;a, nos explicara que es la filial y su 
funcionamiento, objetivos, etc...
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> y despues pasaremos a un 
tiempo de preguntas donde podreis preguntarle cualquier cuestion...
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> ok?
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> ok
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> aceptamos barco tb
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> muy bien, pues casi podemos 
empezar...
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> XDDD
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> peldon por el retraso je je 
je
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> buenas
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bas
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> digo, nas
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> vale, te pendonamos
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> XDD
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> :^)
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> gracias :~))
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> os pediria que mientras 
Jemarch hace su exposicion, hablasemos lo misno posible rallando 0... :-)
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> menos, quiero decir... XD
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> sipes
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Buenas tardes a todos.
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> se va a guardar el log?
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> si, tranquilo
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> ok
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> adelante, jemarch
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Quiero dar las gracias a 
Manuel y la gente de Sindominio por poner a nuestra disposicion este canal.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Y por supuesto a vosotros, 
por asistir
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Me disculpo de antemano 
por la posible lentitud (esto del IRC tambien es algo nuevo para mi)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Veamos. Por que FSF/GNU 
Espa&ntilde;a?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La creacion de la filial 
pretendia ser la respuesta a una serie de necesidades, que , al menos en 
nuestra opinion, son importantes.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Estas necesidades no son 
exclusivas del entorno espa&ntilde;ol
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> pero como es lo que nos 
pillaba mas cerca, pues lo hicimos aqui
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Creemos que es necesaria 
una mayor presencia de la Free Software Foundation y el proyecto GNU,
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> frente a la comunidad 
espa&ntilde;ola y la constante evolucion de los entornos libres.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En cuanto a la comunidad 
espa&ntilde;ola, tradicionalmente siempre ha contribuido al desarrollo del 
software libre de manera mas o menos activa
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Pero tambien mas o menos a 
nivel individual
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Por eso, existia (y 
existe) la necesidad de una comunidad alrededor de la FSF,que de soporte al 
proyecto GNU
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La FSF era algo lejano 
para la mayoria de los usuarios espa&ntilde;oles de sistemas libres
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Y en cierto modo, es 
comprensible
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Hacia falta un espejo de 
la FSF y el proyecto GNU cercano y asequible
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y razonablemente eficiente
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Esta FSF/GNU 
"espa&ntilde;ola", podria servir como un atajo a la FSF, pero tambien como un 
soporte donde concentrar y fomentar la participacion espa&ntilde;ola en la FSF
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y tenemos mucho que 
aportar. Desde desarrollo de software hasta la traduccion de documentos.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Los franceses ya tenian 
algo similar con su APRIL, y por tanto tienen una postura fuerte dentro de la 
FSF
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Con FSF/GNU Espa&ntilde;a 
se pretende lo mismo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Aportando se construye, y 
la FSF no es una excepcion
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En cuanto a la evolucion 
de los entornos libres
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> todos vemos que se esta 
produciendo a una velocidad considerable
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Todos quieren participar, 
y existen intereses, a veces contrapuestos
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Pese alo que se pueda 
pensar, la FSF no controla el Software Libre
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> de hecho, esta pensado y 
concebido precisamente para evitarlo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Lo cual no quita que 
participe activamente en dicha evolucion
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y esa era otra necesidad a 
responder: pujar por la FSF en lo que nos toca en Espa&ntilde;a
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Defender la postura de la 
FSF en el ambito espa&ntilde;ol, de manera constructiva y etica (como siempre 
ha hecho la misma FSF)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Si una empresa en USA hace 
un uso impropio de Software Libre, la FSF chilla desde Boston
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Si una empresa en 
Espa&ntilde;a hace lo mismo, la idea es que chillemos aqui
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Pero son situaciones 
indeseables, y podemos hacer algo mejor
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> prevenir en lugar de 
curar. Educar y exponer claramente 
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> nuestra postura a las 
empresas, usuarios y otras entidades
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> e intentar que trabajen 
con nosotros, sin perjuicio de sus intereses
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Para intentar llevar esto 
a cabo, levantamos FSF/GNU Espa&ntilde;a
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Hay que dejar claro que la 
postura de la FSF defiende tanto el concepto etico, como el practico. Pero 
consideramos que el segundo es una consecuencia del primero, y no al reves.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Intentamos ense&ntilde;ar 
a la comunidad cuales son sus libertades
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y los invitamos a 
defenderlas con nosotros, al igual que cualquier persona defiende sus derechos
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Cuantos mas integrantes de 
la comunidad defiendan esos derechos, mas fuerte sera la comunidad frente a 
intereses externos y fragmentadores
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En esta expansion y 
evolucion es importante conseguir que los nuevos integrantes sean usuarios 
"activos" y concienciados
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> de nuevo, sin prejuicio de 
sus intereses (que pueden ser totalmente legitimos)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En el bang de los sistemas 
GNU/Linux que vivimos actualmente tenemos un excelente ejemplo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Si un usuario abandona el 
software propietario porque en GNU/Linux dispone de un programa mejor que en el 
entorno propietario, esta en su derecho hacerlo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> pero si ese nuevo usuario 
no esta concienciado y aprecia sus derechos o libertades, si aparece un 
programa mejor en el entorno propietario, volvera a el de inmediato
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> esto es legitimo, y esta 
en su derecho de hacerlo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> pero esta claro que a 
nosotros no nos interesa
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Por tanto, una expansion 
del concepto etico en la comunidad espa&ntilde;ol es uno de los objetivos 
principales de la filial
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En cuanto al concepto 
practico, todos lo conocemos y apreciamos: el modelo bazar de Eric Raymond, 
junto con las licencias libres ha demostrado ser productivo y solido
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Pasemos a la estructura de 
la filial
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> FSF/GNU Espa&ntilde;a se 
estructura en distintas coordinaciones
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Desde las cuales se 
pretende ofrecer distintos servicios al usuario, desarrollador y la comunidad 
del Software Libre
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La coordinacion de 
Proyectos Software ofrece hosting y recursos maquina a los desarrolladores
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y al mismo tiempo una 
fuente de software al usuario
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Intenta potenciar al 
maximo la comunicacion entre desarrollador/usuario, al modo tradicional de la 
FSF: listas de correo e invitacion al usuario de participar al usuario
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> El unico prerrequisito 
para hacer un proyecto software en FSF/GNU Espa&ntilde;a es que sea software 
libre, si bien ofrecemos la posibilidad de hacer las tramitaciones pertinentes 
para su aceptacion como <br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La coordinacion de Eventos 
organiza cosas como este encuentro en el IRC,
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y pretende ser el punto de 
encuentro de la comunidad
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Cosas como boletines, 
congresos, cursos y jornadas son cosas a hacer
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La coordinacion de 
Licencias ofrece informacion acerca de las licencias libres (pilar legal sobre 
el que defendemos nuestras libertades)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> asi como asesoramiento. 
Ademas pretende potenciar la discusion acerca de los aspectos legales que 
rodean el Software Libre
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La coordinacion de 
Traducciones (en plena estructuracion) pretende acercar a la comunidad 
espa&ntilde;ola documentos de muy diversos tipos, todos referentes al Software 
Libre y el proyecto GNU
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> textos tecnicos, 
filosoficos, comerciales, etc entran en su ambito de trabajo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La filial (y en 
consecuencia todas las coordinaciones) descansan en el voluntariado
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> por tanto la 
realimentacion es crucial para la supervivencia de la filial
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> no somos una asociacion, y 
por tanto no existe la figura del "socio estatico". Existen usuarios de la 
filial y voluntarios
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Una persona es voluntaria 
en tanto en cuanto realice una aportacion en la filial. Si deja de hacerlo, 
deja de ser voluntario. Por supuesto, cada uno en la medida de sus 
posibilidades.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Esto tiene una gran 
ventaja, y un gran inconveniente
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La gran ventaja es que, 
mientras este en pie, la filial va a ser productiva, llevada por gente que 
aporta cosas
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> el gran inconveniente es 
que, el dia que no dispongamos de suficientes voluntarios, la filial deja de 
existir
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Por eso os invito a que 
realiceis algun voluntariado en alguna coordinacion (desarrollando proyectos en 
PS, discutiendo en las listas de Licencias, escribiendo en el boletin, 
traduciendo o revisando en T<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En el aspecto del 
voluntariado, replicamos de manera exacta la forma de trabajar de la FSF. Pero 
para ello necesitamos aportaciones.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Si conseguimos una filial 
fuerte y activa, estoy convencido de que la comunidad sera un poco mejor
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> EOF
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> muy bien... :-)
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> bueno, ahora podreis hacer 
preguntas pidiendo orden a _Manuel_
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> no hableis todos al mismo 
tiempo, sino por orden
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> espero no haber aburrido 
mucho. Dar una charla con este sistema es mas dificil que en persona
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> si, un poco m&aacute;s 
dif&iacute;cil si :D
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> No, al contrario... Muchas 
gracias por la charla... :-)
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bien, la gente que quiera 
preguntar algo, que me mande un mensaje por rpivado
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> privado digo
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> y voy asignando turnos
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Yo tengo preguntas
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bien, pues adelante
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> (si podeis/sabeis, las 
peticiones hac&eacute;dmelas mediante privados)
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> ya lo has dejado entrever 
en la charla, pero, esta legalmente constituida la FSF/GNU en Espa&ntilde;a?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> No. No somos una 
asociacion, ni una fundacion, ni nada que se le parezca
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Cuando estructure la 
filial con RMS, se presento el siguiente dilema:
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> entonces se funciona 
unica y exclusivamente como filial, pero sin ningun tipo de constitucion legal
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> cuenta cuenta lo del 
dilema
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> que tuvieramos una entidad 
legal independiente, o que compartieramos la de la FSF. Al final se opto por la 
segunda.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> De ese modo, en Boston 
figuramos como voluntarios
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Entonces esto me lleva a 
la segunda pregunta:
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Esto no quita que, en el 
momento que se crea adecuado, demos forma legal a la filial
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> &iquest;C&oacute;mo se 
financia esta filial? supongo que simplemente no se financia de momento
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La filial esta bendecida 
por RMS, la FSF y el Proyecto GNU como su filial oficial en Espa&ntilde;a
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La sede se encuentra en la 
Escuela Universitaria de Informatica, en la UPM. La financiacion parte de la 
misma universidad (como el servidor y el material de la sede).
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En cualquier caso, tambien 
podemos acudir a recursos de la FSF
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> al fin y al cabo, esta 
precisamente para eso
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Entonces veo que hay una 
dependencia total, bien sea de la Uni o de la FSF.
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> [18:35:45] 
&lt;jemarch&gt; Los franceses ya tenian algo similar con su APRIL, y por tanto 
tienen una postura fuerte dentro de la FSF
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> [18:36:19] 
&lt;jemarch&gt; Con FSF/GNU Espa&ntilde;a se pretende lo mismo
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Una dependencia de la FSF 
es natural y deseable. No tiene sentido una filial de X peleada con X
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Si en Espa&ntilde;a se 
pretende lo mismo que en Francia, no seria deseable la independencia?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> no entiendo muy bien la 
relacion
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Es que me estoy 
imaginando una FSF/GNU Espa&ntilde;a con muchos medios, subvenciones y tal y 
organizando eventos de cierta importancia, y para todo esto se necesita mucho 
dinero
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> ser autonomos no implica 
estar peleados...
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> no voy tanto a la 
autonomia como a una formacion legal, que pueda solicitar subvenciones y con 
ellas organizar cosas
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Vamos, que cuente con sus 
propios medios
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> humm el dinero es importante 
pero un numero importante de personas es mas importante en esta etapa(perdon 
por meterme)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Estamos de acuerdo. Pero 
una entidad legal no cambiaria en ningun modo la relacion con la FSF.
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> XDD
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Claro, nadie esta 
hablando de cambiar la relacion con la FSF, pero si de una independencia 
economica
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Ya digo, estoy pensando 
en el futuro (espero que muy proximo)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> No existe ningun problema 
de forma en adquirir una entidad legal de asociacion
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La independencia economica 
deberia responder a las necesidades.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Y no al reves
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Venga, ya he acabado, 
pero sigo pensando que adoptar una forma legal seria algo muy interesante
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> pues parece que _Nexus9_ 
ha acabado, as&iacute; que adelante Kilian :)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> y yo tambien. Pero no 
empecemos la casa por el tejado
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> Mi pregunta es que en la 
Universidad de Oviedo las asociaciones tienen limitado
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> el tipo de actividades y 
quienes pueden pertenecer. &iquest;ocurre lo mismo en Madrid?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En nuestro caso, no. 
Cuando institui la filial en la escuela, deje muy clara la naturaleza un tanto 
especial de la filial. Evidentemente, subordine su creacion a la aceptacion de 
gente de fuera de la esc<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> A eso me refiero, no me 
preocupa la cuestion economica sino el que solo los universitarios puedan 
formar parte de la misma.
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> Nada mas.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En ningun modo. Cualquiera 
puede pertenecer a la filial, este o no en la universidad politecnica de madrid.
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> pero es porque no somos una 
asociacion universitaria sino un grupo de colaboradores de la FSF a la que la 
UPM presta soporte
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> &iquest;no es eso jemarch?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> exacto
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> small band of rebels 
struggling to restore freedom to the galaxy
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> pues nadie m&aacute;s 
tiene el turno, as&iacute; que me permito hacer una pregunta
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> cu&aacute;les son ahora 
mismo los proyectos prioritarios de la filial?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Terminar la estructuracion 
de Traducciones, Linux-Expo,un boletin mensual en Eventos, y conseguir mas 
realimentacion
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> y existe una 
campa&ntilde;a especial con el tema de las patentes de software
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> ?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Si, en Licencias hay 
abundante material, y se invita a la gente a contribuir
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> bueno no tan abudante como 
quisiera ;^|
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> ahora turno de lain
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> bueno, me permito hacer una 
pregunta general para aquellos que puedan estar interesados en ser 
voluntarios... cual es el proceso y la forma de trabajar dentro de la filial?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> La cara al exterior de las 
coordinaciones es su pagina web, en es.gnu.org
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Cualquiera interesado en 
hacer algo dentro de una coordinacion, debe dirigirse a los formularios puestos 
a tal fin en las webs
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Ademas, las listas de 
correo son una excelente manera de proponer actividades o lo que se le ocurra
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Despues, el coordinador 
correspondiente le indicara el modo de trabajo de la coordinacion. 
Evidentemente, el esquema de trabajo es diferente encada coordinacion, ya que 
se hacen cosas de naturaleza muy d<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> &iquest;De que dispone un 
voluntario para trabajar?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Depende de la 
coordinacion. En Proyectos, un responsable de proyecto dispone de cuenta 
"completa" en es.gnu.org, con base de datos, site web, ftp anonimo, repositorio 
cvs, junto con las herramientas nece<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> En Traducciones, los 
traductores y revisores disponen todos de cuentas de correo POP3, y acceso 
remoto a la base de datos, en funcion de su actividad.
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Se asignan los recursos en 
funcion de lo que se necesite (expresado por el mismo voluntario).
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bien, pues parece que no 
hay m&aacute;s intervenciones pendientes
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> as&iacute; que si os 
parece terminamos esta charla :)
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> puedo hablar
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> ??
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bueeeeeno vale ;)
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> es que queria pedir una cosa
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> ok
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> me gustaria escribir
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> un articulo en contra delos 
prejuicios
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> que se tienen en contra del 
soft libre
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> para aplicaciones de 
seguridad
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> asi que si hay alguien que 
quiera ayudarme
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> o conozca a alguien...
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> pues que me mande un mail
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> una cosa, esto 
est&aacute; fuera de la charlar?
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> si 
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> si quereis podemos hablar 
de alguna cosilla pendiente
+<br>
+<b>&lt;<font color="#0000ff">dewaz</font>&gt;</b> completamente fuera pero 
queria aprobechar
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> como esta por ejemplo
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> la charla oficialmente ha 
terminado... gracias a Jemarch y a todos por haber venido, y nos vemos en la 
proxima ocasion...
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> gracias a vosotros XDDDD
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> espero veros en las 
coordinaciones ;)
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> vaya quique, llegas un 
poco tarde :/
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Hab&eacute;is sido 
puntuales y todo o qu&eacute;?
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> ;P
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> si, es que acabamos de 
terminar ;)
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> acaba de terminar...
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> Hola quique, una ultima 
cuestion &iquest; podeis esplicarme la figura de los usuarios de la FSF?
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> PUes entonces 
podr&iacute;as hacer un resumencillo
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> creo que alguien ha 
recogido el log...
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> no os preocupeis, de 
todas formas subiremos el log
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> ok, ya avisareis
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> _Miguel_ ha realizado el log, 
asi que estara disponible lo antes posible en el ftp...
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> quiz&aacute; esta misma 
tarde/noche :)
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> eh? yo?
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> no, perdon,  _Manuel_
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> :-)
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> ah, ok :-)
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> avisa en gugs, manuel
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> xD
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> sipes, of course ;)
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Kilian figura de los 
usuarios?
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> Si, se refiere a cualquiera 
que haga uso ? (valga la redundancia) o es una figura interna.
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> d&oacute;nde has visto eso 
de "usuario de la FSF"?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> es cualquier miembro de la 
comunidad del software libre que haga uso de los recursos de la filial. Que 
visita la web, lee los articulos, se baja el software, etc
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> Vale, lo suponia pero no lo 
tenia claro :-)
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Qu&eacute; tipo de 
documentos son los que se traducen?
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Es que estoy en la web y 
no veo info sobre esto
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> De momento se esta 
estructurando Traducciones. Creo que ya he dicho que caben documentos tecnicos, 
filosoficos, etc. El factor comun es que trataran de Software Libre
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Gran parte de esos 
documentos los produce la misma FSF
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> A eso me referia, son 
todo traducciones de documentos de la FSF
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Es que un colega y yo 
estamos colaborando con unas traducciones, pero no veo si eso puede interesaros
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> Y sobre traducciones... que 
es mas preferible, "Free Software Foundation" o "La Fundaci&oacute;n para el 
Software Libre"
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> No es un prerrequisito que 
sean de la FSF, desde luego. Cualquier documento interesante debe traducirse
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> de qu&eacute; se trata 
_Nexus9_?
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> Estamos traduciendo la 
seccion demo de Mandrake
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> quiz&aacute; sea 
m&aacute;s bien tarea de LuCAS o algo as&iacute;
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> son demos del sistema con 
capturas de pantallas
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> si, creo que es 
m&aacute;s bien cosa de LuCAS
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> aunque no se muy bien 
c&oacute;mo funciona
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Kilian: Fundaci&oacute;n 
para el software libre
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> La FSF tiene una 
p&aacute;gina con gu&iacute;as para como hacer las traducciones
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bueno, en teor&iacute;a 
la charla ha terminado
+<br>
+<b>&lt;<font color="#0000ff">angel</font>&gt;</b> oppps!!
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> estamos ahora hablando 
as&iacute; un poco en general
+<br>
+<b>&lt;<font color="#0000ff">angel</font>&gt;</b> sabia que llegaria tarde
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> de cosas relacionadas
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> era a las seis, angel :-)
+<br>
+<b>&lt;<font color="#0000ff">angel</font>&gt;</b> ya, ya. Pero no podia antes. 
:-(
+<br>
+<b>&lt;<font color="#888888">lain</font>&gt;</b> bueno, chavales, nos vemos la 
proxima... y ya sabeis, pasaros por es.gnu.org y colaborad... :-)
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> por mi no hay problema y 
seguimos un rato
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> y la gente que se tenga 
que ir o eso, pues que se vaya yendo :)
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> la gente que ha llegado 
tarde
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> pues que no os preocupeis
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> porque subiremos el log 
de la charla
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> a la web, en breve
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> para que lo podais ver
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> lo &uacute;nico que no 
habeis podido intervenir
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> quien es el coordinador de 
traducciones?
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> miquel yo estoy al cargo, 
de momento
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> ah, ok
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> es que tradujimos hace un 
tiempo una entrevista a richard
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> que esta puesta en el site 
de gnu.org
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> y la mandamos pero nunca la 
han llegado a poner
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Yo puedo mandarla
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Estoy en el grupo de 
traducci&oacute;n al castellano
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> se la mand&eacute; al que 
se encarga del tema, un venezolano creo
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Hay una lista de correo: 
web-translators-es
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Holman Romero
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> no, era otro
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> Hugo Gayosso
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> ese :-)
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Pod&eacute;is apuntaros en 
http://mail.gnu.org/mailman/listinfo/web-translators-es
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Hugo ya no se encarga
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> bueno, pues os la paso a 
los dos, fue una que salio en linuxworld muy interesante
+<br>
+<b>&lt;<font color="#0000ff">miquel</font>&gt;</b> la tenemos en la biblioweb 
de sindominio
+<br>
+<b>&lt;<font color="#0000ff">angel</font>&gt;</b> creo que voy a tener que 
desaparecer, la conexi&oacute;n me va de pena.
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> habeis visto esto: 
http://www.linuxpreview.org/article.php?sid=3458&mode=thread&order=0
+<br>
+<b>&lt;<font color="#ff0000">jemarch</font>&gt;</b> bueno, tengo que irme.
+<br>
+<b>&lt;<font color="#0000ff">_Nexus9_</font>&gt;</b> yo tb piro, hasta otra
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> bueno, pues nada, 
encantado
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> ta otra
+<br>
+<b>&lt;<font color="#0000ff">Kilian</font>&gt;</b> yo tambien me marcho, un 
saludo a todos.
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Bueno, pues yo 
tambi&eacute;n me ir&eacute;
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> si, y yo que tengo que ir 
a cenar
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> chao :)
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> Manuel, ya avisar&aacute;s 
cuando pongas el log
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> "cuaderno de 
bit&aacute;cora"
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> si si, en gugs, of course 
;)
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> hihi
+<br>
+<b>&lt;<font color="#888888">_Manuel_</font>&gt;</b> vale, traductor ;)
+<br>
+<b>&lt;<font color="#0000ff">Quique</font>&gt;</b> venga, hasta luego
+
+</td>
+</tr>
+</table>
+
+    <hr>
+
+    <p>
+      C&oacute;digos de colores:
+    </p>
+
+    <ul>
+      <li>
+       <b><font color="#ff0000">rojo</font></b>: persona(s) que da(n) la
+       "conferencia".
+      </li>
+
+      <li>
+       <b><font color="#888888">gris</font></b>: persona(s) que ejerce(n)
+       principalmente labores de moderaci&oacute;n.
+      </li>
+
+      <li>
+       <b><font color="#0000ff">azul</font></b>: persona(s) que interviene(n)
+       en la charla, haciendo preguntas o comentarios.
+      </li>
+    </ul>
+
+    <p align="right">
+    Charla del 24 Marzo 2001
+    </p>
+
+  </body>
+</html>
+

Index: eventos/irc/index.html
===================================================================
RCS file: eventos/irc/index.html
diff -N eventos/irc/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ eventos/irc/index.html      3 Mar 2012 06:15:08 -0000       1.1
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Eventos - IRC</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+ <h2>¿Qué es un canal de IRC?</h2>
+
+<p>
+ Un canal de IRC (Internet Relay Chat, charla por relevo en internet)
+ es un servicio bastante extendido con un uso mayormente informal en
+ el que se junta la gente para hablar de diversos temas. Hay dos
+ formas básicas para llevar a cabo la comunicación:
+ mediante <b>canales</b> en los que hay un número
+ indeterminado de personas, o mediante <b>privados</b>, en los que
+ tan sólo participan dos personas. Esto en términos de
+ correo electrónico sería el equivalente a listas de
+ correo y mensajes personales respectivamente.
+</p>
+
+<p>
+ La característica básica del IRC es que es en tiempo
+ real, lo que hace que el IRC tenga sus grandes ventajas e
+ inconvenientes: por una parte permite la charla y el debate fluido,
+ pero por la otra toda la gente que participe ha de estar al mismo
+ tiempo en el mismo "espacio virtual".
+</p>
+
+<p>
+ Puedes encontrar ayuda sobre IRC, servidores y clientes a usar,
+ comandos estándar y muchas cosas más en el siguiente
+ artículo de Jordi Mallach:
+ <a href="http://sindominio.net/ayuda/irc.shtml";>
+ http://sindominio.net/ayuda/irc.shtml
+ </a>.
+</p>
+
+<H2>¿Para qué usamos un canal de IRC?</H2>
+
+<p>
+ Desde aqui queremos aprovechar la utilización del
+ IRC para dos cosas principalmente:
+</p>
+
+ <ul>
+  <li>
+   Una de ellas es para debates internos o cosas que requieran (o
+   que sea deseable) esta fluidez. Estos debates seguramente
+   serán de acceso restringido a personas colaboradoras de
+   la filial, y estarán completamente subordinadas a la
+   lista de correo de la misma, dado que en ella se
+   decidirán los temas y horas de debates y a ella se
+   tendrán que comunicar los resultados y conclusiones de
+   las charlas.
+  </li>
+  <li>
+   La otra, para usos no muy extendidos normalmente del IRC, y esto
+   es "conferencias" adaptadas a este medio. Esto podrá
+   tener diferentes formatos según el tema y la persona (o
+   personas) que vayan a dar las "conferencias", pudiendo tener un
+   formato análogo a ruedas de prensa, o a una
+   pequeña introducción seguida de preguntas, o
+   simplemente a debates moderados. Estas charlas tendrán un
+   carácter divulgativo y didáctico, por lo que
+   serán guardadas y posteriormente publicadas en estas
+   mismas páginas. Cualquier persona, colaboradora o no de
+   la filial, podría hacer sugerencias para nuevas charlas y
+   por supuesto ofrecerse para llevarlas a cabo.
+  </li>
+ </ul>
+
+ <H2>¿Dónde y cuándo?</H2>
+
+<p>
+ Hemos elegido el servidor de IRC de proyecto SinDominio [<a
+ href="http://sindominio.net";>http://sindominio.net</a>], entre otras
+ cosas porque está sustentado por personas voluntarias y no
+ depende de ninguna empresa ni institución, y porque
+ está sostenido únicamente por software libre. El
+ nombre del servidor de IRC es <B>irc.sindominio.net</B>, el puerto
+ estándar (<B>6667</B>). El nombre del canal será <b>#fsfgnues</b>.
+</p>
+
+<p>
+ Las horas y temas de debates serán anunciadas en la lista de
+ correo y en estas mismas páginas con suficiente
+ antelación.
+</p>
+
+<p>
+ No nos responsabilizamos del uso que se pueda dar de este canal de
+ IRC en horas distintas a las especificadas, pues ni el canal ni el
+ servidor de IRC son de acceso restringido.
+</p>
+
+<H2>Calendario de sesiones</H2>
+ <ul>
+  <li>
+   <b>24 Marzo 2001, 18:00h:</b>
+   <a href="/Eventos/Irc/inauguracion_log.html">Charla inauguración</a>,
+   abierto a cualquier persona. Hablará J. Eugenio
+   Marchesi.
+   </li>
+ </ul>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:08 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: lengualibre/contactar.html
===================================================================
RCS file: lengualibre/contactar.html
diff -N lengualibre/contactar.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/contactar.html  3 Mar 2012 06:15:08 -0000       1.1
@@ -0,0 +1,59 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="black" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="white" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>
+Contactar</h3>
+
+
+Para contactar con LenguaLibre existen dos v&iacute;as igualmente 
v&aacute;lidas:
+<ul>
+<li>
+Escribir un correo de solicitud de inscripci&oacute;n para la lista de
+correo electr&oacute;nica address@hidden sita en <a 
href="http://groups.yahoo.com";>YahooGroups</a>.
+Para ello, simplemente dir&iacute;jase a <a 
href="http://groups.yahoo.com";>YahooGroups</a>
+y encuentre la lista <b>lengualibre</b>.</li>
+
+<li>
+Escribir un correo a <a href="mailto:address@hidden";>Pablo Ruiz 
M&uacute;zquiz</a>,
+fundador y coordinador del proyecto.&nbsp;</li>
+</ul>
+
+Para información más específica puedes escribir a los coordinadores de cada 
área.
+<ul>
+<li>Pablo Ruiz Múzquiz <a href="mailto:address@hidden";>address@hidden</a>: 
Coordinador general de LenguaLibre y coordinador 
+del área técnica.</li>
+<li>Javier Lorente <a href="mailto:address@hidden";>address@hidden</a>: 
Coordinador del área lingüística.</li>
+<li>Pablo Usano <a href="mailto:address@hidden>address@hidden</a>: Coordinador 
del área legal.</li>
+
+</ul>
+<br />
+
+<br /><font size=1>&copy; Pablo Ruiz Múzquiz 2001</font><br /><br />
+</td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/corpus.html
===================================================================
RCS file: lengualibre/corpus.html
diff -N lengualibre/corpus.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/corpus.html     3 Mar 2012 06:15:08 -0000       1.1
@@ -0,0 +1,36 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="black" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="white" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>
+Corpus</h3>
+
+Nada publicable todavía.
+
+</td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/descargas.html
===================================================================
RCS file: lengualibre/descargas.html
diff -N lengualibre/descargas.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/descargas.html  3 Mar 2012 06:15:08 -0000       1.1
@@ -0,0 +1,36 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="black" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="white" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>
+Descargas</h3>
+
+Nada publicable todavía.
+
+</td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/documento_rae.html
===================================================================
RCS file: lengualibre/documento_rae.html
diff -N lengualibre/documento_rae.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/documento_rae.html      3 Mar 2012 06:15:09 -0000       1.1
@@ -0,0 +1,208 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="white" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+
+<h3>Detalles sobre el próximo diccionario de la <a 
href="http://www.rae.es";>RAE</a></h3>
+
+<ul>
+<li>LenguaLibre <A HREF="documento_rae.html#desvinculacion">decide 
desvincularse de la RAE</A>: 22/06/2001</li>
+<li><A HREF="documento_rae.html#correosecretario">Correo</A>
+del Secretario de la RAE: 23/02/2000</li>
+<li><a href="documento_rae.html#inforae.es">Información</a> extraída de la 
página electrónica de la <a href="http://www.rae.es";>RAE</a>: 25/09/2000</li>
+</ul>
+
+<table CELLSPACING=0 CELLPADDING=0 COLS=1 WIDTH="100%" 
BGCOLOR="#eaeaea"><tr><td>
+<strong>LenguaLibre<A NAME="desvinculacion"> decide desvincularse de la 
RAE</A>: 22/06/2001.
+</strong>
+</td></tr></table>
+<p>
+Que nadie se lleve a engaño. No es que LenguaLibre haya colaborado en el 
pasado con la RAE o lo
+haga en el presente. Simplemente queremos comunicar que nuestras relaciones 
con la RAE han sido
+suficientemente esporádicas e infructuosas como para pensar que necesitamos de 
ella o viceversa.
+No podemos depender de decisiones arbitrarias como ceder sus servicios a 
empresas privadas o decidir
+de forma unilateral qué es bueno y qué no para nuestra lengua.
+</p><p>
+Por ello, LenguaLibre será independiente a partir de ahora y mentará a la RAE 
a efectos informativos siempre
+que los acontecimientos tengan repercusión en nuestro trabajo de elaborar un 
Diccionario Libre del Español.
+</p>
+
+
+
+<table CELLSPACING=0 CELLPADDING=0 COLS=1 WIDTH="100%" 
BGCOLOR="#eaeaea"><tr><td>
+<strong><A NAME="correosecretario">Correo</A> del Secretario de la <a 
href="http://www.rae.es";>RAE</a>: 23/02/2000.
+Lista de correo address@hidden</strong>
+</td></tr></table>
+<br />
+[nivel2] Declaración de intenciones de la RAE
+<br />
+Date: Wed, 23 Feb 2000 15:02:31 +0100<br />
+From: "Mª José Gil" <address@hidden><br />
+To: address@hidden<br />
+Reply to: address@hidden<br />
+<p>
+Desde hace ya algunos meses, la RAE ha venido recibiendo tanto demandas
+de información acerca de condiciones en que se puede obtener el CREA
+como solicitudes directas de cesión de ese corpus o de una parte de los
+materiales que lo componen. Con la intención de que todo el mundo pueda
+disponer de la información necesaria y en orden a facilitar a todos los
+interesados el acceso a los materiales textuales y la posibilidad de
+utilización, la RAE ha decidido hacer pública la siguiente declaración
+de intenciones.
+</p>
+<ol>
+<li> En este momento (febrero de 2000), faltan todavía diez meses y medio
+para la finalización de la segunda fase del proyecto. Hace ya casi año y
+medio, la Academia decidió poner a disposición de todos los interesados
+los materiales textuales que integran el CREA y el CORDE a medida que
+fueran siendo preparados. Nada de lo anterior puede ser convertido en un
+compromiso ni una obligación de la RAE hacia quienes consultan los
+materiales que la Academia ha decidido poner a su disposición.
+</li>
+<li>
+ La construcción del CREA y el CORDE, así como de los recursos y
+herramientas asociados a ellos, ha sido posible gracias a una importane
+financiación del Ministerio de Educación y Cultura y la Comisión
+interministerial de Ciencia y Tecnología, pero también ha supuesto una
+considerable inversión de los fondos propios de la RAE, que no proceden
+exclusivamente de la financiación que figura en los Presupuestos
+Generales del Estado.
+</li>
+<li> Es intención de la Academia poner a disposición de todos los
+investigadores la mayor cantidad posible de textos en las mejores
+condiciones económicas que se puedan arbitrar.
+</li>
+<li> El problema básico para la puesta a disposición de los investigadores
+de los textos que forman CREA y CORDE reside en la necesidad de proteger
+los derechos de los autores de esos textos. Desde hace ya bastante
+tiempo, la Academia ha venido manteniendo reuniones con autores,
+editores y entidades de gestión de derechos de propiedad intelectual con
+el fin de encontrar la fórmula que permita la utilización directa de los
+textos con total respeto a los derechos de sus autores. Se trata de una
+cuestión muy compleja, en la que la novedad de la tecnología empleada
+tropieza con grandes vacíos en la legislación. De todas formas, todo
+indica que estará solucionada antes de que finalice la segunda fase del
+proyecto (diciembre de 2000).
+</li>
+<li> Sea cual sea la fórmula final, es claro que habrá condiciones
+diferentes para la utilización de los corpus con fines exclusivamente de
+investigación y aquellos otros que supongan un empleo industrial del que
+deriven beneficios económicos. En cualquier caso, debe tenerse en cuenta
+que la construcción de los corpus y de los recursos y herramientas
+asociados, así como su mantenimiento y la atención a quienes los usan ha
+supuesto y supondrá en el futuro importantes gastos para la RAE, por lo
+que no es posible en este momento asegurar la gratuidad total para
+ningún tipo de utilización. Sí se puede garantizar, en cambio, que los
+posibles costes serán muy bajos para quienes utilicen estos materiales
+con finalidad puramente investigadora.
+</li>
+<li> La RAE y todos cuantos trabajan en el proyecto CREA-CORDE agradecen
+muy sinceramente a quienes utilizan los corpus sus opiniones, consejos y
+críticas. Son, pensamos, un modo excelente de hacer posible la mejora
+continua de estos materiales, con lo que el beneficio es, finalmente,
+general.
+</ol>
+<p>
+El Secretario de la Real Academia Española
+</p>
+<table CELLSPACING=0 CELLPADDING=0 COLS=1 WIDTH="100%" BGCOLOR="#eaeaea">
+<tr>
+<td>
+<strong><A NAME="inforae.es">Información</A> obtenida de la página electrónica 
de la <a href="http://www.rae.es";>RAE</a>: 25/09/2000</strong>
+</td>
+</tr>
+</table>
+<br />
+[Diccionario "usual" <a 
href="http://www.rae.es/NIVEL1/DRAE.HTM";>http://www.rae.es/NIVEL1/DRAE.HTM</a>]
+<br />
+<p>
+En la actualidad se está preparando una nueva edición del Diccionario, que 
aparecerá probablemente en el 2001. Esta
+vigésima segunda edición del DRAE se realizará a partir de una <a 
href="detallesrae.html#np" NAME="np">nueva planta</a> y para su elaboración se 
ha contado, por vez
+primera, con la ayuda de <a href="detallesrae.html#hi" NAME="hi">herramientas 
informáticas</a> diseñadas al efecto y con la información obtenida del banco de 
datos
+recientemente construido.
+</p>
+<br />
+<a NAME="np">[Nueva</a> planta <a 
href="http://www.rae.es/NIVEL1/DRAEPLAN.HTM";>http://www.rae.es/NIVEL1/DRAEPLAN.HTM</a>]
+<br />
+<p>
+Cuando, apenas fundada, la Real Academia Española se dispuso a acometer la 
empresa del Diccionario de
+Autoridades, su primera ocupación fue dotarse de un sistema de normas que 
permitieran disponer y presentar
+plausiblemente los materiales léxicos, que sirviese de pauta para los 
Académicos consagrados a tan magna labor, y que
+permitiera un acceso fácil a los futuros consultantes. A tal sistema se le dio 
el nombre de planta, adoptando el término de la
+Arquitectura con el sentido que el propio Diccionario definió: "Diseño o idea 
que se hace para la fábrica o formación de
+alguna cosa". En la nueva planta se recogen las <a href="detallesrae.html#na" 
NAME="na">normas</a> aplicables para las próximas ediciones del Diccionario, que
+permitirán actualizar, en futuras ediciones, las técnicas lexicográficas con 
las que se pretende dar forma ordenada al
+vocabulario de nuestra lengua.
+</p>
+<br />
+[<a NAME="na">Normas</a> <a 
href="http://www.rae.es/NIVEL1/NORMAS.HTM";>http://www.rae.es/NIVEL1/NORMAS.HTM</a>]
+<br />
+<p>
+El esquema de redacción sobre el que van a basarse las futuras ediciones del 
Diccionario académico aportará, por un lado,
+novedades importantes en la consideración de su macroestructura: el regreso al 
alfabeto internacional (que supone
+prescindir de las antiguas letras che y elle), el tratamiento de la homonimia, 
de las variantes equifuncionales y, sobre todo, el
+establecimiento de criterios rigurosos para la selección y mantenimiento de 
las entradas, replanteándose los problemas
+correspondientes a los imperativos geográficos, sociales, técnicos, de 
registro y corrección. 
+</p><p>
+Por otra parte, incorporará variaciones relativas a la microestructura de cada 
artículo, que presentará innovaciones en el
+tratamiento de las etimologías, de las marcas, abreviaturas e informaciones 
gramaticales, así como en el modo de elaborar
+la propia definición: disposición de las acepciones, tratamiento del contorno 
lexicográfico y de la información enciclopédica,
+ejemplificación sistemática, etc.
+</p>
+<br />
+[<a NAME="hi">Herramientas</a> informáticas <a 
href="http://www.rae.es/NIVEL1/DRAEINFO.HTM";>http://www.rae.es/NIVEL1/DRAEINFO.HTM</a>]
+<br />
+<p>
+En la actualidad, la Academia dispone de dos aplicaciones informáticas, 
estrechamente relacionadas entre sí, para trabajar
+en la redacción del diccionario: una <a href="detallesrae.html#ac" 
NAME="ac">aplicación de consultas</a>, destinada a obtener información de la 
base de datos donde
+está contenido el propio Diccionario, y una <a href="detallesrae.html#afl" 
NAME="afl">aplicación de fichas lexicográficas</a>, pensada para redactar las 
próximas
+ediciones del repertorio académico.
+</p>
+<br />
+[<a NAME="ac">Aplicación</a> de consultas <a 
href="http://www.rae.es/NIVEL1/DRAECON.HTM";>http://www.rae.es/NIVEL1/DRAECON.HTM</a>]
+<br />
+<p>
+El sistema de consultas permite acceder dinámicamente a las entradas del 
Diccionario mediante la construcción de filtros
+que pueden combinar cualquier característica que identifique a un lema, 
acepción, forma compleja, etc. De esta manera es
+posible seleccionar instantáneamente las entradas que presentan ciertas 
características gramaticales, prefijos, sufijos,
+indicaciones de uso, etimología, etc. Así mismo, es posible efectuar búsquedas 
en el texto completo del diccionario. Las
+entradas seleccionadas pueden verse o bien imprimirse en diversos formatos, 
incluido el de tres columnas característico del
+DRAE.
+</p>
+[<a NAME="afl">Aplicación</a> de fichas lexicográficas <a 
href="http://www.rae.es/NIVEL1/DRAEFIC.HTM";>http://www.rae.es/NIVEL1/DRAEFIC.HTM</a>]
+<br />
+<p>
+La aplicación de fichas permite la actualización automática de la base de 
datos. El programa persigue dos funciones
+claramente diferenciadas: por una parte, la creación de fichas, para 
incorporar, modificar o suprimir información del
+Diccionario; por otro lado, el control administrativo de estas fichas, que 
reproduce informáticamente el mecanismo de trabajo
+de las Comisiones académicas y sirve para tratar con diligencia todas las 
propuestas que afectan al repertorio léxico general.
+</p>
+<br /><br /><br /></td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/documentos.html
===================================================================
RCS file: lengualibre/documentos.html
diff -N lengualibre/documentos.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/documentos.html 3 Mar 2012 06:15:09 -0000       1.1
@@ -0,0 +1,47 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="white" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>
+Documentos</h3>
+
+
+<ul>
+<li><a href="manifiesto_lengualibre.html">Manifiesto de LenguaLibre</a>: 
Versión preliminar 0.3 del Manifiesto del proyecto LenguaLibre. 
+</li><br />
+<li><a href="legal_lengualibre.html">LenguaLibre:
+ Un diccionario escrito por todos y para todos.</a>: 
+El siguiente texto pretende contestar las dudas surgidas respecto al posible 
uso de un diccionario, que sirva como base al proyecto LenguaLibre. Además, se 
detallan algunos aspectos de los derechos de autor.
+</li><br />
+<li><a href="licencia.fdl.es.html">Licencia FDL en español</a>: Traducción 
<strong>no oficial</strong> al español de la Licencia de Documentación Libre 
(Free Documentation License). Esta licencia será probablemente la que acompañe 
a todos los trabajos realizados por LenguaLibre.
+</li><br />
+<li><a href="documento_rae.html">Información sobre la RAE</a>: Compendio de la 
información más interesante que uno puede encontrar en la página electrónica de 
la Real Academia Española (acerca del DRAE, naturalmente) junto con una copia 
de un cruce de correos entre la RAE y LenguaLibre.</li>
+</ul>
+<br /><br /><br /><font size=1>&copy; Pablo Ruiz Múzquiz 2001</font><br /><br 
/>
+</td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/enlaces.html
===================================================================
RCS file: lengualibre/enlaces.html
diff -N lengualibre/enlaces.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/enlaces.html    3 Mar 2012 06:15:09 -0000       1.1
@@ -0,0 +1,42 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="black" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="white" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>
+Enlaces</h3>
+
+
+<ul>
+<li><a href="http://www.fsf.org";>Free Software Foundation</a>: La Fundación 
para el Software Libre se dedica a fomentar el uso y la elaboración de software 
libre, es decir, un software que se puede usar, compartir y modificar 
libremente. La FSF ha redactado varias licencias que protegen estos derechos 
para todos los usuarios que utilicen software libre y, lo que nos atañe 
particularmente, también lo ha hecho en relación con la documentación libre. La 
licencia bajo la que <em>a priori</em> se encontrará el corpus de LenguaLibre 
es la FDL o Licencia de Documentación Libre.
+</li>
+<li><a href="http://es.org.org";>GNU España</a>: La delegación local en España 
del proyecto GNU (iniciado por la FSF) apoyó el proyecto prácticamente desde 
sus comienzos. Para conocer las actividades que llevan a cabo visite su página 
electrónica.
+</li>
+</ul>
+<br /><br /><br /><font size=1>&copy; Pablo Ruiz Múzquiz 2001</font><br /><br 
/>
+</td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/estilos.css
===================================================================
RCS file: lengualibre/estilos.css
diff -N lengualibre/estilos.css
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/estilos.css     3 Mar 2012 06:15:09 -0000       1.1
@@ -0,0 +1,31 @@
+.NOUNDER {
+ color: white;
+ text-decoration:none;
+}
+
+A:link {
+ color: #a60600;
+ text-decoration:none;
+}
+
+A:visited {
+ color: #a60600;
+ text-decoration:none;
+}
+
+A:active {
+ color: #a60600;
+ text-decoration:none;
+}
+.MAIN {
+ font-size: 10pt;
+ font-weight: 100;
+ color: black;
+ font-family: "verdana,arial";
+}
+.TITULO {
+ font-size: 10pt;
+ font-weight: 100;
+ color: black;
+ font-family: "verdana,arial";
+}

Index: lengualibre/gnu-head_small.jpg
===================================================================
RCS file: lengualibre/gnu-head_small.jpg
diff -N lengualibre/gnu-head_small.jpg
Binary files /dev/null and /tmp/cvs2RJ4gN differ

Index: lengualibre/index.html
===================================================================
RCS file: lengualibre/index.html
diff -N lengualibre/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/index.html      3 Mar 2012 06:15:09 -0000       1.1
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" 
"http://www.w3c.org/TR/REC-html40/loose.dtd";>
+<HTML>
+<HEAD>
+<TITLE>lengualibre.org</TITLE>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</HEAD>
+<BODY BGCOLOR="#fffefe" TEXT="#003588">
+
+<CENTER><a href="inicio.html"><IMG SRC="lengualibre_logo.jpg"  ALT="logotipo 
de LenguaLibre. Basado en un diseño de Youngjin Hahn http://artramp.org/artwiz"; 
BORDER=0></a>
+<br /><br />
+<font face="helvetica,arial">
+Dejemos que la <strong>Lengua</strong> fluya <strong>Libre</strong>.</font><br 
/><br />
+<br />
+<a href="http://validator.w3.org/check/referer";><img border="0"
+        src="http://www.w3.org/Icons/valid-html401";
+        alt="Valid HTML 4.01!" height="31" width="88"></a>
+        
+        <br />
+        <font size=1><strong>LenguaLibre</strong> es parte de GNU 
España</font> <a href="http://es.gnu.org";><img src="gnu-head_small.jpg" 
border=0 ALT="Logotipo enano de GNU"></a>
+</CENTER>
+
+</BODY>
+</HTML>
\ No newline at end of file

Index: lengualibre/inicio.html
===================================================================
RCS file: lengualibre/inicio.html
diff -N lengualibre/inicio.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/inicio.html     3 Mar 2012 06:15:09 -0000       1.1
@@ -0,0 +1,53 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="white" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="black" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><font face="helvetica,arial" size=2>
+<br><br><br><br><br>
+Bienvenido a la p&aacute;gina electr&oacute;nica del proyecto
+<strong>LenguaLibre</strong>. Este proyecto intenta elaborar entre todos, y 
bajo unas normas
+de colaboraci&oacute;n determinadas, un corpus del espa&ntilde;ol moderno
+de libre uso, copia y modificaci&oacute;n.
+<br />
+
+<br />
+<br />Para <em>conocer las novedades</em> acerca del estado del proyecto u 
otros acontecimientos de interés, visite la sección <a 
href="noticias.html">noticias</a>.<br />
+<br />Para <em>leer ensayos o artículos</em> acerca de LenguaLibre, visite la 
sección <a href="documentos.html">documentos</a>.<br />
+<br />Para <em>consultar el corpus</em> actual de LenguaLibre, visite la 
sección  <a href="corpus.html">corpus</a>.<br />
+<br />Para obtener <em>copias de los programas</em> utilizados en LenguaLibre, 
visite la sección <a href="descargas.html">descargas</a>.<br />
+<br />Para encontrar <em>otros lugares</em> de temática relacionada con el 
proyecto LenguaLibre en internet, visite la sección 
+<a href="enlaces.html">enlaces</a>.<br />
+<br />Para <em>ponerse en contacto</em> con nosotros, por favor visite la 
sección <a href="contactar.html">contactar</a>.
+<br />
+<br />
+
+<font size=1><br />
+LenguaLibre no está vinculado en absoluto a la <a 
href="http://www.rae.es";>Real Academia Española</a>.<br />
+<font color="#0e2466">Última actualización: 21 de Julio de 2001</font><br 
/>&copy; Pablo Ruiz Múzquiz 2001</font></font>
+</td>
+<td ALIGN=LEFT VALIGN=TOP></td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/legal_lengualibre.html
===================================================================
RCS file: lengualibre/legal_lengualibre.html
diff -N lengualibre/legal_lengualibre.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/legal_lengualibre.html  3 Mar 2012 06:15:10 -0000       1.1
@@ -0,0 +1,115 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="white" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="black" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>LenguaLibre:<br /> 
+Un diccionario escrito por todos y para todos.</h3>
+<p> 
+<h5>"Los excesos cometidos en nombre de la libertad pueden hacerla odiosa, 
pero no son obstaculo para  que ella sea bella y necesaria."<br> 
+Tocqueville</h5><p> 
+
+El siguiente texto, pretende  contestar  las dudas surgidas respecto al 
posible uso  
+de un diccionario, que sirva como base al proyecto Lengua Libre. 
+Aprovecho para detallar algunos aspectos de los derechos de autor, que espero 
sean de  
+utilidad para esta iniciativa.<p> 
+
+<strong>Derechos de explotación</strong>.<br /><br /> 
+Los derechos de autor, m&aacute;s conocidos como copyright, estan compuestos 
por Derechos morales, Derechos de explotaci&oacute;n y otros derechos como el 
de participaci&oacute;n o el de remuneraci&oacute;n por copia privada.<br>
+Los Derechos morales hacen referencia al reconocimiento de la autor&iacute;a y 
al respeto a la integridad de la obra.<br>
+Los Derechos de explotaci&oacute;n, comprenden el derecho de reproducir la 
obra, distribuirla y el derecho de comunicaci&oacute;n p&uacute;blica.<br>
+M&aacute;s adelante veremos sus caracter&iacute;sticas y su importancia para 
el proyecto.<p>
+<i>No podemos reproducir en formato electr&oacute;nico un diccionario para 
facilitar su ampliaci&oacute;n y difusi&oacute;n por Internet sin 
autorizaci&oacute;n del propietario del copyright.</i><p>
+<strong>Caducidad</strong><br /><br />
+Los derechos de explotaci&oacute;n duran toda la vida del autor y 70 
a&ntilde;os m&aacute;s despu&eacute;s de su muerte o fallecimiento.<br>
+Sin embargo,los derechos de autor de personas jur&iacute;dicas-una 
editorial-que hubiesen adquirido a t&iacute;tulo original la obra, conforme a 
la antigua Ley de 1879, pueden ejercer los derechos de explotaci&oacute;n 
durante 80 a&ntilde;os desde su publicaci&oacute;n. <br>
+Si son personas f&iacute;sicas-un escritor-y muri&oacute; antes del 7 de 
Diciembre de 1987, entonces se aplica la Ley de 1879: 80 a&ntilde;os mas desde 
la muerte.Si alguien los compro y hay herederos forzosos, el adquirente, 
dispone de 25 a&ntilde;os desde la muerte y luego los herederos tienen 55.<br>
+Se empieza a contar a partir de Enero del a&ntilde;o siguiente a la 
publicaci&oacute;n o fallecimiento.<p>
+<i>Si una editorial es propietaria de los derechos de explotaci&oacute;n del 
diccionario, entonces hay que buscar uno publicado en 1920 o antes.</i><p>
+
+<strong>Límites a los derechos de autor</strong><br /><br />
+No es necesaria la autorizaci&oacute;n del autor para reproducir la obra ya 
publicada si es para uso privado de quien hace la copia, siempre que no vaya a 
usarse de forma colectiva ni lucrativa.<br>
+Las instituciones de car&aacute;cter cultural y cient&iacute;fico pueden 
reproducir la obra sin autorizaci&oacute;n siempre que no haya fin de 
lucro.Incluso se permite que no satisfagan remuneraci&oacute;n alguna a los 
autores por los prestamos que realicen.<p>
+<i>La ley permite la copia y el prestamo sin autorizaci&oacute;n en un margen 
demasiado estrecho para el objetivo de Lengua Libre.</i><p>
+
+<strong>Obras en colaboración y obras colectivas</strong><br /><br /> 
+La obra en colaboraci&oacute;n es el resultado unitario de la 
participaci&oacute;n de varios autores.Los derechos corresponden a todos ellos 
en la proporci&oacute;n que acuerden.Hace falta el consentimiento de todos para 
divulgar o modificar la obra.Cada aportaci&oacute;n puede  explotarse por 
separado siempre que no cause perjuicio a la explotaci&oacute;n 
com&uacute;n.<br>
+La obra colectiva es la creada por la iniciativa y bajo coordinaci&oacute;n de 
una persona que la edita y divulga bajo su nombre. Esta compuesta por 
aportaciones de varios autores que se funden en una creaci&oacute;n 
&uacute;nica y aut&oacute;noma y no es posible atribuir separadamente a un 
s&oacute;lo autor un derecho sobre el conjunto de la obra.Sin embargo, puede 
acordarse que los derechos de la obra colectiva sean para la persona que la 
edita y divulga bajo su nombre.<p>
+<i>Un diccionario es un ejemplo de las caracter&iacute;sticas de las obras 
colectivas.</i><p>
+
+<strong>Caducidad de las obras colectivas y en colaboración</strong><br /><br 
/>
+Los derechos de explotaci&oacute;n de la obra en colaboraci&oacute;n  dura 
hasta 70 a&ntilde;os desde la muerte del &uacute;ltimo coautor 
superviviente.<br>
+La obra colectiva dura hasta 70 a&ntilde;os desde la publicacion de la 
obra.<br>
+Hay que recordar lo dicho antes, para las obras publicadas conforme a la ley 
de 1879.<br>
+Si las personas que crean la obra colectiva aparecen como autores  entonces se 
aplican las reglas generales o las de la obra en colaboraci&oacute;n.<br>
+Lo mismo ocurre cuando en la obra colectiva haya autores identificados con 
aportaciones identificables.<p>
+<i>El diccionario debe ser una obra colectiva, divulgada bajo el nombre de una 
editorial sin que alg&uacute;n autor  tenga  derecho sobre parte de ella.</i><p>
+
+<strong>Dominio público y autoría e integridad de la obra</strong><br /><br />
+Cuando los derechos de explotaci&oacute;n caducan ,la obra pasa a dominio 
p&uacute;blico.Cualquiera puede usar la obra reconociendo la autor&iacute;a y 
respetando la integridad de la obra para no perjudicar los intereses o 
menoscabar la reputaci&oacute;n del autor.El derecho al respeto a la integridad 
de la obra se limita a que el atentado producido cause perjuicio al honor y 
reputaci&oacute;n del autor.Caffarena, sostiene que esos leg&iacute;timos 
intereses son de naturaleza personal o moral y no de car&aacute;cter 
econ&oacute;mico o patrimonial.Estos intereses son perjudicados si las 
modificaciones suponen un deterioro de la obra, menoscabando la 
reputaci&oacute;n del autor y aquellas que afecten a lo esencial de la obra, en 
cuanto creaci&oacute;n original.Rodriguez Tapia, distingue entre "obra 
modificada" y "obra transformada".Esta &uacute;ltima, es aquella en la que hay 
alteraci&oacute;n o variaci&oacute;n, pero se pretende portar un sentido 
sustancialmente id&eacute;ntico al de la obra original.Las transformaciones 
inconsentidas podr&iacute;an suponer una violaci&oacute;n del derecho de 
explotaci&oacute;n pero no del derecho moral del autor.<br>
+El Convenio de Berna, establece que los derechos de integridad y 
autor&iacute;a se mantendr&aacute;n despu&eacute;s de la muerte del autor, por 
lo menos hasta la extinci&oacute;n de sus derechos de explotaci&oacute;n.<br>
+En la ley espa&ntilde;ola parece deducirse que no hay l&iacute;mite de 
tiempo.<br>
+Una concepci&oacute;n absoluta, puede llegar a paralizar la 
creaci&oacute;n.Estos derechos tienen un car&aacute;cter m&aacute;s 
simb&oacute;lico que pr&aacute;ctico.Cuando la obra entra en dominio 
p&uacute;blico, no se trata de proteger la memoria del autor sino preservar la 
obra como producto cultural.<p>
+
+<i>Puede defenderse que una obra colectiva y en dominio p&uacute;blico no 
tenga derechos morales ilimitados</i><p>
+
+<strong>Comunicación pública y canon de copia privada</strong><br /><br />
+La comunicaci&oacute;n p&uacute;blica es un derecho distinto al de 
distribuci&oacute;n, se diferencia en que una pluralidad de personas tiene 
acceso a la obra, pero sin previa entrega de ejemplares a cada una de ellas.<br>
+El canon de copia privada es una cantidad econ&oacute;mica dirigida a 
compensar los derechos de propiedad intelectual que se dejan de percibir debido 
a las copias realizadas para uso privado.Esta remuneraci&oacute;n es 
independiente y no guarda relaci&oacute;n  con la copia ilegal o delictiva de 
la obra.<br>
+Estos derechos no pueden ser negociados por los  autores por s&iacute; mismos, 
ya que son irrenunciables y s&oacute;lo se pueden ejercitar a trav&eacute;s de 
una entidad de gesti&oacute;n de derechos de autor.Es necesaria la 
adscripci&oacute;n obligatoria si el autor quiere verse compensado por estos 
derechos.<p>
+<i>La Ley concede al autor unos derechos, para inmediatamente expropiarselos 
en favor de una Entidad de Gesti&oacute;n.S&oacute;lo cobrar&aacute; si es 
miembro de dicha Entidad.</i><p>
+
+<strong>Bases de datos, protección y acceso telemático</strong><br /><br />
+Se considera objeto de propiedad intelectual, la mera colecci&oacute;n de 
obras ajenas, de datos o de otros elementos independientes.Se protege la 
estructura como selecci&oacute;n o disposici&oacute;n de los contenidos, pero 
no se protegen los contenidos en s&iacute;, cuyos derechos de autor son 
independientes.<br>
+El plazo de protecci&oacute;n de la base de datos caduca a los 15 a&ntilde;os, 
contados desde Enero siguiente a la fecha de publicaci&oacute;n.No obstante, 
cualquier modificaci&oacute;n sustancial permite comenzar el plazo de caducidad 
de nuevo.<br>
+El acceso p&uacute;blico en cualquier forma a las obras incorporadas a una 
base de datos, es considerado comunicaci&oacute;n p&uacute;blica.<p>
+<i>Se protegen las bases de datos, aunque los derechos sobre sus contenidos 
esten en dominio p&uacute;blico.Un diccionario podria considerarse una base de 
datos formada por definiciones.</i><p>
+
+<strong>ISBN y Depósito Legal</strong><br /><br /> 
+Toda clase de libros y folletos, incluyendo las separatas , llevar&aacute;n 
impreso adem&aacute;s de las siglas y n&uacute;mero del Dep&oacute;sito Legal, 
el n&uacute;mero de ISBN o International Standard Book Number.<p>
+<i>No es necesario el Dep&oacute;sito legal ni el ISBN de una obra, si no esta 
fijada en un soporte obligado a ello.</i><p>
+
+<strong>El proyecto lenguaLibre</strong><br /><br />
+El valor de una obra no debe confundirse con su precio.<br>
+A pesar del inter&eacute;s de la Uni&oacute;n Europea y otros bloques y la 
presi&oacute;n por parte de ciertos grupos econ&oacute;micos, es absurdo 
restringir el acceso al conocimiento con el pretexto de crear una Industria de 
Contenidos exacerbando el concepto de propiedad intelectual mas all&aacute; de 
lo razonable.<br>
+Un desequilibrio y exceso de celo en la aplicacion de estos conceptos, puede 
llevar al perjuicio de los consumidores y de otros sectores industriales, por 
no mencionar que puede ser un obstaculo grave a la din&aacute;mica propia de la 
creaci&oacute;n cultural o cient&iacute;fica.<br>
+Internet no es una amenaza al esfuerzo creativo,como pretenden hacernos 
creer.Antes al contrario, supone una formidable herramienta para crear 
m&aacute;s conocimiento.El min&uacute;sculo coste de fijaci&oacute;n de la obra 
y el acceso a ella, har&aacute; cada vez m&aacute;s obsoleta  la idea de 
compensaci&oacute;n en los que se basan  los derechos de comunicaci&oacute;n 
p&uacute;blica o de copia privada que antes vimos.<br>
+El Proyecto Lengua Libre, como el Proyecto GNU aplicado a los programas de 
ordenador o tantos otros, pretende aprovechar el trabajo coordinado en red, 
para acometer una tarea imposible para un s&oacute;lo individuo:Crear un 
diccionario libre.<br>
+Libre para ser usado, modificado y distribuido, tal cual o no, con o sin 
&aacute;nimo de lucro.<p>
+<i>El objetivo de Lengua Libre es crear un diccionario libre.</i><p>
+
+<strong> Propuesta de Licencia</strong><br /><br />
+&#169;2001.LENGUALIBRE.Este diccionario es una obra colectiva.La  copia, 
modificaci&oacute;n y distribuci&oacute;n est&aacute;n permitidas siempre que 
no restrinja estos derechos a terceros y les advierta de esta circunstancia.<p>
+
+<strong>Derechos de autor y convenios internacionales</strong><br /><br />
+A nivel internacional, se regulan los derechos de autor, fundamentalmente, 
gracias al Convenio de 1967 que establece la Organizaci&oacute;n Mundial de la 
Propiedad Intelectual(OMPI) y el mas antiguo y conocido, Convenio de Berna de 
1866 revisado en Paris en el 71.El principio que se aplica es el de reclamar la 
proteccion en los tribunales del pa&iacute;s donde se haya vulnerado nuestro 
derecho.<br>
+No parece que esta sea una circunstancia cr&iacute;tica teniendo en cuenta las 
libertades de uso del diccionario.<p>
+<i>Existen convenios internacionales sobre derechos de autor en los que son 
parte la mayor&iacute;a de los paises.</i><p>
+<a href="mailto:dewaz&#64;es.gnu.org";>Pablo-Dewaz-Usano</a> <br /><br />
+
+</td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/lengualibre_logo.jpg
===================================================================
RCS file: lengualibre/lengualibre_logo.jpg
diff -N lengualibre/lengualibre_logo.jpg
Binary files /dev/null and /tmp/cvs71dmRP differ

Index: lengualibre/lengualibre_logo_enano.jpg
===================================================================
RCS file: lengualibre/lengualibre_logo_enano.jpg
diff -N lengualibre/lengualibre_logo_enano.jpg
Binary files /dev/null and /tmp/cvscdHNxO differ

Index: lengualibre/licencia.fdl.es.html
===================================================================
RCS file: lengualibre/licencia.fdl.es.html
diff -N lengualibre/licencia.fdl.es.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/licencia.fdl.es.html    3 Mar 2012 06:15:10 -0000       1.1
@@ -0,0 +1,476 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="white" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+</tr>
+</table>
+
+
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<H3>Licencia Libre GNU para Documentos (FDL)</H3>
+Agradecemos la traducción no oficial a Diane Schofield.
+<br /><br />
+Versión 1.1, marzo de 2000
+<pre>
+Copyright (c) 2000 Free Software Foundation, Inc
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+Se permite a todo el mundo copiar y distribuir
+copias literales de este documento de licencia, pero
+no se permite cambiarlo.
+</pre>
+
+<h4>0. PREÁMBULO</h4>
+
+El propósito de esta licencia es hacer que manuales, libros de texto u
+otros documentos sean "libres" en el siguiente sentido: el de asegurar
+que todo el mundo sea efectivamente libre para copiar y
+redistribuirlos, con o sin modificaciones, sea o no para fines
+comerciales. En segundo lugar, esta licencia conserva para el autor y el
+editor una manera de que sea reconocido su trabajo, sin que se les
+considere responsables de las modificaciones realizadas por otras
+personas.
+
+<br /><br /> Esta licencia es un tipo de "copyleft", lo cual
+significa que las obras derivadas del documento deben ser también
+libres en el mismo sentido.  Esta Licencia complementa la Licencia GPL
+(General Public Licence), que es una licencia "copyleft" diseñada para
+el "software" libre.
+
+<br /><br />
+
+Hemos diseñado esta licencia para su utilización con manuales
+de software libre, dado que el software libre necesita documentación
+libre; un programa libre debe estar acompañado de manuales que
+proporcionen la misma libertad que el software.  Pero esta licencia no
+se limita a manuales de software; puede utilizarse para cualquier obra
+de texto, sea cual sea el tema o si se publica como libro impreso.
+Recomendamos esta licencia principalmente para obras cuyo propósito es
+educativo o de referencia.
+
+
+<h4>1. APLICABILIDAD Y DEFINICIONES</h4>
+
+
+Esta Licencia se aplica a cualquier manual u otra obra que contenga un
+aviso insertado por el poseedor de los derechos de autor (Copyright)
+que diga que puede ser distribuido según los términos de la misma. La
+palabra "documento" utilizada a continuación se refiere a cualquier
+manual u obra de estas características.  Cualquier miembro del público
+es receptor de la licencia, y nos referiremos a él como "tú".
+
+<br /><br />
+
+Una "Versión Modificada" del Documento hace referencia a cualquier
+obra que contenga el Documento o una parte de él, sea copia literal, o
+con modificaciones y/o traducido a otro idioma.
+
+<br /><br />
+
+Una "Sección Secundaria" es un apéndice así titulado o cualquier
+sección introductoria del Documento que trate exclusivamente de la
+relación de los editores o de los autores del Documento con el tema
+general del Documento (o asuntos relacionados) y no contenga nada que
+pudiera incluirse directamente en el tema general. (Por ejemplo, si el
+Documento es, en parte, un libro de texto sobre las matemáticas, una
+Sección Secundaria no podrá explicar ningún aspecto de matemáticas.)
+La relación podría tratarse de una conexión histórica con el tema o
+asuntos relacionados, o de una postura legal, comercial, filosófica,
+ética o política en relación a ellos.
+
+<br /><br />
+
+Las "Secciones Invariables" son ciertas Secciones Secundarias cuyos
+títulos se designan como Secciones Invariables, en el aviso que señala
+que el Documento se presenta bajo esta Licencia.
+
+<br /><br />
+
+Los "textos para las cubiertas" son ciertos pasajes cortos de texto a
+los que se refieren como Textos para la Cubierta Anterior o Texto para
+la Cubierta Posterior, en el aviso que señala que el Documento se
+presenta bajo esta Licencia.
+
+<br /><br />
+
+Una copia "Transparente" del Documento significa una copia en soporte
+digital representada en un formato cuya especificación esté disponible
+al público en general, cuyos contenidos pueden verse y editarse
+directa y fácilmente con editores de texto genéricos o (para las
+imágenes compuestas de pixeles) programas de gráficos genéricos o
+(para gráficos vectoriales) algún editor vectorial ampliamente
+disponible, y que sea apropiado como entrada de programas de formato
+de texto o para la traducción automática a una variedad de formatos
+apropiados para ser formateados. Una copia hecha por lo general en
+formato de fichero Transparente cuya configuración (¿) haya sido
+diseñada para impedir o disuadir a los lectores de modificarlo, no es
+Transparente. Una copia que no es "Transparente" se llama "Opaca".
+
+
+<br /><br />
+
+Ejemplos de formatos apropiados para copias Transparentes incluyen
+ASCII sencillo sin configuración, formato de entrada Texinfo, formato
+de entrada LaTeX, SGML o XML utilizando DTD públicamente disponible, y
+HTML sencillo y que cumple los estándares diseñado para la
+modificación por personas. Los formatos opacos incluyen PostScript,
+PDF, formatos propietarios que pueden leerse y escribirse solamente
+mediante el uso de procesadores de texto propietarios, SGML o XML para
+los que el DTD y/o las herramientas de procesamiento no están
+generalmente disponibles, y HTML generado por máquina, producido por
+algunos procesadores de texto con fines solamente de salida.
+
+
+<br /><br />
+
+La "Portada" significa, para un libro impreso, la portada misma, más
+las páginas siguientes que sean necesarias para contener de forma
+legible, el material que esta Licencia exige que aparezca en la
+portada. Para las obras cuyos formatos no contengan una portada como
+tal, la "Portada" significa el texto cercano a la aparición más
+importante del título de la obra, que precede al comienzo del cuerpo
+del texto.
+
+<h4>2. COPIAS LITERALES</h4>
+
+
+Puedes copiar y distribuir el Documento por cualquier medio, sea con o
+sin fines comerciales, siempre que esta Licencia, los avisos de
+derechos de autor, y el aviso de licencia señalando que esta Licencia
+se aplica al Documento, estén reproducidos en todas las copias, y que
+no añadas ninguna condición en absoluto a las de esta Licencia. No
+puedes utilizar medidas técnicas para obstruir o controlar la lectura
+o la reproducción adicional de las copias que haces o distribuyes.
+Sin embargo, puedes aceptar una compensación a cambio de las
+copias. Si distribuyes una cantidad suficientemente grande de copias
+también debes seguir las condiciones incluidas en la sección 3.
+
+
+<br /><br />
+
+También puedes prestar copias, bajo las mismas condiciones que las
+presentadas anteriormente, y puedes mostrar las copias públicamente.
+
+
+
+<h4>3. REPRODUCCIÓN MÚLTIPLE</h4>
+
+
+Si publicas más de 100 copias impresas del Documento y el aviso de
+licencia del Documento requiere Textos en las Cubiertas, debes meter
+las copias dentro de cubiertas que lleven, clara y legiblemente, todos
+estos Textos en ellas: Textos para la Cubierta Anterior en la cubierta
+anterior y Textos para la Cubierta Posterior en la Cubierta
+Posterior. Ambas cubiertas deben identificarte clara y legiblemente
+como editor de dichas copias. La cubierta anterior debe presentar el
+título completo con todas las palabras del título igualmente
+relevantes y visibles. Puedes añadir otro material adicional en la
+cubierta. La reproducción con cambios que se limitan a las cubiertas,
+siempre que conserven el título del Documento y satisfagan estas
+condiciones, pueden considerarse como copias literales en los demás
+aspectos.
+
+<br /><br />
+
+Si los textos requeridos para ambas cubiertas son demasiado
+voluminosos para caber legiblemente, debes incluir las primeras del
+listado (cuántas más quepan de forma razonable) en la cubierta misma,
+y seguir con las demás en páginas adyacentes.
+
+
+<br /><br />
+
+Si publicas o distribuyes más de 100 copias Opacas del Documento,
+debes incluir una copia en soporte digital Transparente con cada copia
+Opaca, o citar dentro de o adjunto a cada copia Opaca una dirección de
+red informática accesible al público general que contenga una copia
+Transparente completa del Documento, libre de materiales adicionales,
+al que el público en general tenga acceso para descargarlo
+anónimamente con un coste nulo utilizando protocolos estándares
+públicos de red. Si utilizas esta última opción, al empezar a
+distribuir las copias Opacas en cantidad, debes tomar los pasos
+razonablemente prudentes para asegurar que esta copia Transparente
+permanecerá accesible en la dirección citada hasta por lo menos un año
+después de que distribuyas (directamente o mediante tus agentes o
+detallistas) una copia Opaca de aquella edición al público por última
+vez.
+
+
+<br /><br />
+
+Se pide, pero no se exige, que contactes con los autores del Documento
+mucho antes de redistribuir cualquier cantidad grande de copias, para
+darles la oportunidad de enviarte una versión actualizada del mismo.
+
+<h4>4. MODIFICACIONES</h4>
+
+Puedes copiar y distribuir una Versión Modificada del Documento bajo
+las condiciones descritas en las anteriores secciones 2 y 3, siempre
+que saques la Versión Modificada bajo precisamente esta Licencia, con
+la Versión Modificada haciendo de Documento, otorgando así la licencia
+para la distribución y modificación de la Versión Modificada a
+cualquiera que posea una copia de ella. Además, debes hacer lo
+siguiente en la Versión Modificada:
+<br>
+
+<ol>
+<li> Hacer figurar en la portada (y en las cubiertas si existen) un título
+distinto del que tiene el Documento, y de los de anteriores versiones (que,
+si existen, deberían figurar en un listado en la sección de Antecedentes del
+Documento). Puedes utilizar el mismo título que una versión anterior si el 
editor
+original de aquella versión te da permiso.
+<li> Presentar en la Portada un listado, como autores, de la persona
+o personas o entidades responsables de la modificaciones de la Versión 
Modificada,
+junto con por lo menos cinco de los autores principales del Documento (todos
+sus autores principales, si hay menos de cinco).
+<li>Citar en la Portada el nombre del editor de la Versión Modificada,
+como editor.
+<li>Conservar todos los avisos de derechos de autor del Documento.
+<li>Añadir un aviso de derechos de autor apropiado para tu modificación
+al lado de los demás avisos de derechos de autor.
+<li>Incluir, inmediatamente después de los avisos de derechos de autor,
+un aviso de licencia dando permiso al público para utilizar la Versión 
Modificada
+bajo los términos de esta Licencia, en las formas presentadas en el suplemento
+presentado posteriormente.
+<li>Conservar en aquel aviso de licencia los listados completos de las
+Secciones Invariables y Textos para las Cubiertas dados en el aviso de licencia
+del Documento.
+<li>Incluir una copia sin modificaciones de esta Licencia.
+<li>Conservar la sección titulada "Antecedentes" y
+su título, y añadir a ella un ítem que presenta por lo menos el título, el año,
+los nuevos autores, y el editor de la Versión Modificada tal y como viene en
+la Portada. Si no existe una sección titulada "Antecedentes"
+en el documento, crea una citando el título, el año, los autores y el editor
+del Documento tal y como vienen en su Portada, luego añadir un ítem 
describiendo
+la Versión Modificada tal y como se detalla en la frase anterior.
+<li> Conservar la dirección de red, si existe, que figura en el Documento
+para el acceso del público a una copia Transparente del Documento, y de igual
+forma las direcciones de red que figuran en el Documento para las versiones
+anteriores en las que se basa. Estas pueden incluirse en la sección 
"Antecedentes".
+Puedes omitir una dirección de red para una obra que se publicó por lo menos
+cuatro años antes del Documento mismo, o si el editor original de la versión
+a la que se refiere da su permiso.
+<li>En cualquier sección titulada "Reconocimientos"
+o "Dedicatorias", conservar el título de la sección, y conservar
+en la sección toda la materia y el espíritu de cada uno de los agradecimientos
+por contribuciones y/o dedicatorias presentadas en ella.
+<li> Conservar todas las Secciones Invariables del Documento, sin 
modificaciones
+en su texto y su título. Los número de sección o equivalentes no se consideran
+como parte de los títulos de sección.
+<li> Eliminar cualquier sección titulada "Respaldos".
+Tal sección no puede incluirse en la Versión Modificada.
+<li>No poner "Respaldos" como nuevo título a ninguna sección
+existente ni un nuevo título que entre en conflicto con cualquier Sección 
Invariable.
+</ol>
+Si la Versión Modificada incluye nuevas secciones introductoras o apéndices
+que podrían clasificarse como Secciones Secundarias y que no contienen material
+copiado del Documento, puedes, según te parezca, designar alguna o todas estas
+secciones como invariables. Para hacerlo, añade sus títulos al listado de 
Secciones
+Invariables en el aviso de licencia de la Versión Modificada. Estos títulos
+deben ser distintos de los de otras secciones.
+
+
+<br /><br />
+
+Puedes añadir una sección titulada "Respaldos", siempre que sólo
+contenga respaldos para tu Versión Modificada por parte de varias
+personas - por ejemplo afirmaciones de que haya sido revisada por
+compañeros o que el texto haya sido aprobado por una organización como
+definición autorizada de un estándar.
+
+
+<br /><br />
+
+Puedes añadir un pasaje de hasta cinco palabras como texto para la
+Cubierta anterior, y un pasaje de hasta 25 palabras como texto para la
+Cubierta posterior, al final de los Textos para las Cubiertas en la
+Versión Modificada. Sólo un pasaje puede ser añadido al texto para la
+cubierta anterior y otro al texto de la cubierta posterior por (o
+mediante los trámites hechos por) una sola entidad.  Si el Documento
+ya incluye un texto de cubierta para la misma, previamente añadido por
+ti o según un arreglo hecho por la misma entidad para la que actúas,
+no puedes añadir otro, pero puedes remplazar el viejo, con permiso
+explícito del editor anterior que lo añadió.
+
+<br /><br />
+
+El autor o los autores y editor(es) del Documento no dan permiso
+mediante esta Licencia para la utilización de sus nombres con fines
+publicitarios~ o de manera que afirme o implique su respaldo para
+cualquier Versión Modificada.
+
+<h4>5. COMBINACIÓN DE DOCUMENTOS</h4>
+
+Puedes combinar el Documento con otros documentos sacados bajo esta Licencia,
+según los términos definidos en la precedente sección 4 para las versiones 
modificadas,
+siempre que incluyas en la combinación todas las Secciones Invariables de todos
+los documentos originales, sin modificar, y los incluyas en un listado como
+Secciones Invariables de tu obra combinada en su aviso de licencia.
+
+
+<br /><br />
+
+La obra combinada sólo necesita incluir una copia de esta Licencia, y
+múltiples e idénticas Secciones Invariables pueden ser remplazadas por
+una única copia.~ Si existen múltiples Secciones Invariables con el
+mismo nombre pero diferente contenido, haz que el título de cada
+sección sea único añadiendo al final, en paréntesis, el nombre del
+autor o editor original de esta sección si se conoce, o si no, un
+número único. Haz el mismo ajuste con los títulos de las secciones en
+el listado de Secciones Invariables en el aviso de licencia de la obra
+combinada.
+
+
+<br /><br />
+
+En la combinación debes incluir cualquier sección titulada
+"Antecedentes" en los varios documentos originales, formando una
+sección única titulada "Antecedentes" de la misma forma combina las
+secciones tituladas "Reconocimientos", y las secciones tituladas
+"Dedicatorias". Debes eliminar todas las secciones tituladas
+"Respaldos".
+
+<h4>6. RECOPILACIONES DE DOCUMENTOS</h4>
+
+Puedes hacer una recopilación que consta del Documento y otros
+documentos sacados bajo esta Licencia, y remplazar las copias
+individuales de esta Licencia en los diferentes documentos con una
+única copia que se incluye en la recopilación, siempre que sigas las
+reglas de esta Licencia para la reproducción literal de cada uno de
+los documentos en todos los demás aspectos.
+
+
+<br /><br />
+
+Puedes extraer un documento único de tal recopilación, y distribuirlo
+individualmente bajo esta Licencia, siempre que incluyas una copia de
+esta Licencia en el documento extraído, y sigas esta Licencia en todos
+los demás aspectos relacionados con la reproducción literal de aquel
+documento.
+
+
+<h4>7. AGREGAR OTRAS OBRAS INDEPENDIENTES</h4>
+
+
+Una recopilación del Documento o sus derivados con otros documentos
+separados e independientes, dentro de un volumen de un soporte de
+almacenamiento o distribución, no cuenta, por lo general, como una
+Versión Modificada del Documento, siempre que no se reclame derechos
+de autor por la misma. Una tal recopilación se llama "agregado" y esta
+Licencia no se aplica a las demás obras independientes recopiladas así
+con el Documento, por el hecho de estar así recopiladas, si no son,
+ellas mismas, obras derivadas del Documento. Si las exigencias de
+textos para las cubiertas detalladas en la sección 3 son aplicables a
+estas copias del Documento, entonces si el Documento representa menos
+de una cuarta parte del agregado completo, los textos para las
+cubiertas del Documento pueden colocarse en tapas que rodeen sólo el
+Documento dentro del agregado. Si no, deben aparecer en las cubiertas
+de todo el agregado.
+
+<h4>8. TRADUCCIÓN</h4>
+
+
+La traducción se considera como un tipo de modificación, de manera que
+puedes distribuir traducciones del Documento bajo los términos de la
+sección 4. Remplazar las Secciones Invariables con traducciones
+requiere un permiso especial de los poseedores de los derechos de
+autor, pero puedes incluir traducciones de alguna o todas las
+Secciones Invariables además de las versiones originales de estas
+Secciones Invariables. Puedes incluir una traducción de esta Licencia
+siempre que también incluyas su versión original inglesa. En caso de
+desacuerdo entre la traducción y la versión original inglesa de esta
+Licencia, prevalece la versión original inglesa.
+
+<h4>9. EXTINCIÓN</h4>
+
+
+No puedes copiar, modificar, sublicenciar, o distribuir el Documento
+excepto tal y como se provee expresamente en esta Licencia. Cualquier
+otra tentativa de copiar, modificar, sublicenciar o distribuir el
+Documento es nula, y automáticamente extinguirá tus derechos bajo esta
+Licencia. Sin embargo, las partes que han recibido copias, o derechos
+de ti, bajo esta Licencia, no sufrirán la extinción de su Licencia
+siempre que dichas partes cumplan completamente sus condiciones.
+
+<h4>10. REVISIONES FUTURAS DE ESTA LICENCIA</h4>
+
+La Free Software Foundation puede de vez en cuando publicar nuevas
+versiones revisadas de la Licencia Libre GNU para Documentos. Tales
+versiones nuevas serán similares en espíritu a la presente, pero
+pueden diferir en los detalles para hacer frente a nuevos problemas o
+preocupaciones. Consulta <a
+href="http://www.gnu.org/copyleft";>http://www.gnu.org/copyleft</a>.
+
+<br /><br />
+
+Cada versión de la Licencia recibe un número de versión para su
+identificación.  Si el Documento especifica que es aplicable una
+versión numerada particular de esta Licencia "o cualquier versión
+posterior", tienes la opción de seguir los términos y las condiciones
+de aquella versión especificada o de cualquier versión posterior que
+haya sido publicada (no como borrador) por la Free Software
+Foundation. Si el Documento no especifica un número de versión de esta
+Licencia, puedes escoger cualquier versión que haya sido publicada (no
+como borrador) por la Free Software Foundation.
+
+<h4>Cómo utilizar esta Licencia para tus documentos</h4>
+
+
+Para utilizar esta Licencia en un documento que has escrito, incluye
+una copia de la Licencia en el documento e incluye los siguientes
+avisos de derechos de autor y licencia justo después de la portada:
+
+<pre>
+Copyright (c) AÑO TU NOMBRE.
+<br /><br />
+Se da permiso para copiar, distribuir y/o modificar
+este documento bajo los términos de la 
+Licencia Libre GNU para Documentos, Versión 1.1
+o cualquier versión posterior publicada por la 
+Free Software Foundation; con las siguientes 
+Secciones Invariables INCLUYE UN LISTADO DE 
+SUS TITULOS, con los siguientes textos para 
+la cubierta anterior LISTADO, y con los siguientes 
+textos para la cubierta posterior LISTADO. Se 
+incluye una copia de la licencia en la sección
+titulada "Licencia Libre GNU para Documentos".
+</pre>
+<br /><br />
+
+Si no tienes Secciones Invariables, escribe "sin Secciones
+Invariables" en lugar de afirmar cuales son invariables. Si no tienes
+textos para la cubierta anterior, escribe "sin Texto para la cubierta
+anterior" en lugar de "los siguientes textos para la cubierta
+anterior" e igual para el texto de la cubierta posterior.
+
+
+<br /><br />
+
+Si tu documento contiene ejemplos no triviales de código de programa,
+recomendamos que los publiques en paralelo con tu elección de licencia
+de software libre, tal como la Licencia GPL (GNU General Public
+Licence), para permitir su uso como software libre.
+<br /><br />
+<br>
+</td>
+</tr>
+</table>
+
+</BODY>
+</HTML>

Index: lengualibre/manifiesto_lengualibre.html
===================================================================
RCS file: lengualibre/manifiesto_lengualibre.html
diff -N lengualibre/manifiesto_lengualibre.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/manifiesto_lengualibre.html     3 Mar 2012 06:15:10 -0000       
1.1
@@ -0,0 +1,284 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<base font="helvetica,arial">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="black" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="white" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td><br /><br />
+<h3>Manifiesto del proyecto LenguaLibre</h3>
+<strong>
+Versión preliminar 0.3 [<a href="manifiesto_lengualibre_0.3.pdf.zip">PDF 
descargable</a>]<br />
+<br />
+Pablo Ruiz Múzquiz<br />
address@hidden - http://lengualibre.org<br />
+<br />
+26 de Julio de 2001. Madrid, España.<br />
+<br /></strong>
+-------------------------<br />
+<h4>Índice General</h4>
+
+1. Prólogo a la versión preliminar 0.3<br />
+2. Qué es Lengua Libre<br />
+3. Problemática legal y Libertad<br />
+4. Epílogo: Idea Subyacente<br />
+
+<h4>1. Prólogo a la versión preliminar 0.3</h4>
+
+Este texto constituye la tercera versión preliminar del Manifiesto
+de LenguaLibre. Se han realizado numerosas modificaciones
+tanto de forma como de contenido desde la primera versión.
+Sin embargo, este Manifiesto se encuentra en continuo desarrollo.
+Está lleno de imprecisiones, redundancias y errores de redacción.
+<br /><br />
+Para cualquier colaboración, por favor escriba a <a 
href="mailto:address@hidden";>address@hidden</a>
+o visite <a href="http://lengualibre.org";>http://lengualibre.org</a>.
+
+
+<h4>2. Qué es Lengua Libre</h4>
+LenguaLibre es un proyecto sin ánimo de lucro creado con
+la intención de elaborar un diccionario de la lengua española
+de libre uso, copia y modificación.
+<br /><br />
+Este proyecto nació extraoficialmente el 28 de Junio de 2000
+tras discutir en la lista de correo address@hidden los términos
+de licencia de la casi totalidad de los diccionarios de
+lengua española.
+<br /><br />
+LenguaLibre pretende acabar con este absurdo y proporcionar
+a la comunidad hispanohablante el derecho a disponer de
+una base de datos que contenga todas las palabras y sus
+respectivas definiciones con plena libertad.
+<br /><br />
+El nacimiento oficial corresponde al 25 de Septiembre de
+2000 y el fundador es Pablo Ruiz Múzquiz - address@hidden
+
+<h4>3. Problemática legal y Libertad</h4>
+
+Nadie conoce o puede pretender conocer todas las palabras
+de una lengua así que al formar un diccionario los integrantes
+del proyecto que lo van a llevar a cabo necesitan recopilar
+la información de numerosas fuentes, entre ellas otros diccionarios.
+Esto da a lugar a muchas definiciones repetidas. Algunas
+por obvias ¿cuántas maneras diferentes hay de definir "perro"?
+y otras no tanto ¿quién puede saber lo que significa una
+palabra que nunca ha oído en la vida?
+<br /><br />
+Al igual que en ciencia todo el mundo utiliza las ecuaciones
+de Newton, Maxwell o Einstein sin pagar derechos de autor,
+las palabras no son patrimonio más que de la humanidad que
+las crea, habla, escribe y abandona.
+<br /><br />
+Cuando una estudiante de ciencia atiende a una explicación
+sobre la estructura subatómica de la materia y escribe en
+sus notas lo que ella ha entendido no está vulnerando ningún
+derecho de autor. Si fuese así, ni el mismo profesor podría
+mencionar el "efecto Zeeman" sin pagar un canon al descubridor
+homónimo (o a sus herederos).
+<br /><br />
+Y todo esto sucede así porque hablamos de Conocimiento. Conocimiento
+para todos. Nadie debe impedir que yo use la palabra casa,
+mujer o hermítico con plena libertad salvo que esa libertad
+se use para dañar la de otros. Entonces la palabra se convierte,
+no en conocimiento trasmitido, sino en arma verbal. 
+<br /><br />
+Por tanto, deseemos tener al menos un diccionario libremente
+disponible, elaborado por un comité experto de lingüistas.
+Un diccionario financiado con fondos públicos y destinado
+a una mayor y mejor difusión de nuestra lengua.
+<br /><br />
+Evidentemente, los encargados de proporcionar este documento
+tan preciado son instituciones públicas que no dependan
+de criterios partidistas o individuales. Lo que deberán
+hacer siempre que vendan o regalen ese diccionario será
+permitir explícitamente la copia, modificación y libre uso.
+Para ello, al igual que con el software libre se adjunta
+el código fuente de la aplicación, es decir, el texto que
+hay debajo de cualquier programa y que permite modificaciones
+posteriores para lograr un programa diferente o mejorado,
+estas hipotéticas instituciones deberían adjuntar un fichero
+digital de codificación abierta con todo el corpus contenido
+en la obra impresa o digital que se encuentre disponible.
+<br /><br />
+El objetivo de estos organismos no ha de ser el amasar dinero
+sino el amasar libertad y distribuirla entre todos.
+<br /><br />
+Y esto debe ser así dado que la lengua es uno de los pocos
+patrimonios que posee un individuo aparte de su vida y su
+familia. La lengua es su manera de interrelacionarse con
+los demás individuos que componen la sociedad en la que
+habita. ¿Qué hay más representativo de la libertad de una
+persona que la libertad de expresarse libremente? ¿Por qué
+admitimos entonces la exclusividad editorial cuando hablamos
+de lo que es la materia prima de nuestra libertad? ¿Cómo
+es posible que cada vez que hable ha de recordar que las
+palabras que uso tienen un significado que leí en un diccionario
+en donde se prohibía expresamente el plagio, la copia, la
+difusión, etcétera, bajo penas de multa y/o prisión.
+<br /><br />
+Y cuando los profesores de enseñanza elemental les dictaban
+las definiciones de palabras ¿no estaban plagiando el contenido
+de un diccionario? Y cuando yo escribo en una pizarra "poner:
+v.tr. 1 Colocar o situar una cosa en un lugar" ¿debo esperar
+acaso que venga la policía lingüística y me arreste por
+plagio?
+<br /><br />
+El Conocimiento es Poder, eso es cierto, pero también sabemos
+que el Conocimiento es Libertad.
+<br /><br />
+Un diccionario libre, entre otras cosas, permitiría:
+<ol>
+<li> Que cualquier persona con escasos recursos económicos pueda
+  aceptar una copia de otra persona sin temor a ningún tipo
+  de represalia legal.
+</li>
+<li> Que cualquier sujeto o sistema automatizado pudiese disponer
+  de una fuente lingüística libre para incoporar a sus procesos
+  sin tener que empezar un trabajo que probablemente no
+  pudiese realizar completamente.
+</li>
+<li> Que un filólogo o un equipo colaborativo local al estilo
+  de LenguaLibre pudiese incluir en una copia de su diccionario
+  una colección de neologismos o localismos propios de su
+  región o país y usarlo para fines particulares aprovechando
+  la estructura del diccionario maestro. Si además, esta
+  persona creyese que su trabajo merece la atención de los
+  integrantes de los ya mencionados hipotéticos organismos
+  públicos y quisiera ver su trabajo publicado en el ficticio
+  Diccionario Libre Oficial, podría mandar su aportación
+  sin ningún problema y esperar una respuesta afirmativa
+  o negativa. En cualquier caso, como puede verse, él podrá
+  incoporar su parte personal a la copia oficial disponible
+  universalmente. Esto probablemente genera multitud de
+  diccionarios diferentes basados en el Oficial que seguirá
+  siendo el punto de referencia obligada para todos y que
+  contará con la confianza de todos. Es decir, si alguien
+  llega a tener dudas de si un diccionario basado en el
+  oficial es riguroso, siempre puede obtener el oficial
+  que posiblemente avanzará más lentamente pero contendrá
+  en sus tripas una solidez propia de un trabajo concienzudo,
+  contrastado y especializado. Y más aún. Si tras cierto
+  tiempo, el comité encargado da muestras de cansancio,
+  fragilidad o lentitud, puede aparecer otro comité y abrir
+  una nueva vía fresca para continuar el trabajo. Todo el
+  mundo puede aprovecharse del conocimiento de los demás
+  e intentar aportar el suyo.
+</li>
+<li> Los científicos podrían añadir anexos personalizados a
+  sus diccionarios libres, se podría intentar una conversión
+  a Braille, los fonólogos podrían añadir más información
+  e incluso los partidarios de una escritura fonética o
+  pseudofonética tendrían a su disposición un corpus sobre
+  el que trabajar directamente. 
+</li>
+</ol>
+<br /><br />
+Como puede apreciarse, los proyectos derivados de un diccionario
+libre son múltiples y exigen un trabajo enorme. LenguaLibre
+pretende, no sólo construir un diccionario libre de la lengua
+española, sino alimentar otros proyectos que completen el
+material lingüístico que toda persona, investigadora o no,
+desea y debería tener.
+<br /><br />
+Todo trabajo basado en este diccionario tendrá necesariamente
+que ser libre. Es decir, nadie podrá copiar y/o modificar
+el diccionario y distribuirlo (gratuitamente o no, eso es
+irrelevante cuando hablamos de libertad) prohibiendo el
+libre uso, copia y modificación de éste. 
+<br /><br />
+De esta manera nos aseguramos los que trabajamos en este
+tipo de proyectos que nuestro deseo de libertad se mantenga.
+El cambio de mentalidad que supone entender este paradigma
+no es trivial y puede generar muchas dudas. Por ello, el
+Proyecto LenguaLibre estará dispuesto también a explicar
+en que consiste esta nueva "Libertad Obligada".
+<br /><br />
+El resultado práctico de este procedimiento (llamémoslo en
+este momento así) es que sólo sobrevive lo mejor. En otras
+circunstancias, la disponibilidad física o económica es
+la que determina qué documento o libro elegir de entre la
+oferta. Sin embargo, con este sistema de colaboración y
+publicación, uno tiene a su disposición todas las variantes,
+todas las "obras basadas en...", y a un sólo movimiento
+de mano. Se puede ELEGIR entre todo lo existente.
+<br /><br />
+La libertad de poder elegir entre lo bueno y lo malo es vital.
+Antes sólo era posible hacerlo entre lo cercano o lo lejano,
+lo barato o lo caro. 
+<br /><br />
+Ahora una contribución mediocre queda rápidamente diluida
+entre un mar de mejoras. Pero es que esa misma supuesta
+contribución carente de rigor ya es mejor que cualquier
+sección de un documento propietario, en donde no hay lugar
+para la mejora espontánea.
+<br /><br />
+[Nota temporal a 26 de Julio de 2001: La licencia bajo la
+que se distribuirá este diccionario libre está aún por decidir,
+pero sin duda una estupenda candidata es la Free Document
+License (Licencia de Documentación Libre) publicada por
+la Free Software Foundation. Para más información visite
+<a href="http://www.fsf.org";>http://www.fsf.org</a>.]
+
+<h4>4. Epílogo: Idea Subyacente</h4>
+La lengua no es una mercancía que se pueda comprar o vender
+sino un conocimiento que ha de ser compartido y difundido
+como vehículo de libertad. Cuando ésta se convierte en medio
+para lograr un fin alejado de su razón de ser, hay que devolverla
+cuanto antes a un estadío de colectividad.
+<br /><br />
+Todos sabemos o podemos intuir que tarde o temprano ocurrirá
+que dispondremos de una suerte de diccionario libre. Pues
+bien, es una disposición típica actualmente el justificar
+a la tecnología argumentando que está ahí y ha venido para
+quedarse. Pero la tecnología no la guía una mente ajena
+a este planeta ni tiene una teleología por sí misma y ahí
+es donde nosotros, los que participamos de ella como clientes
+hemos convertirnos en maestros y guiarla según un ideal
+de pluralidad y accesibilidad.
+<br /><br />
+El crear un diccionario de libre distribución no es sino
+un granito de arena en esa playa de proyectos. Manejar la
+tecnología para que no suceda lo contrario no es tarea fácil
+debido a la gran comodidad que nos dispensa cuanto mayor
+es nuestro despego a intervenir en ella.
+<br /><br />
+Pero hay un límite a todo esto. Y siempre, como ciudadanos,
+tenemos nuestra franja de actuación -pequeña o grande- que
+debemos aprovechar y conseguir, en la medida de nuestras
+posibilidades, dotar a esta nueva estructura social y económica
+que nos rodea de un tejido humanista y solidario.
+<br /><br />
+LenguaLibre intenta cubrir el hueco generado por un descontrol
+total en materia filológica. Facilitar al ciudadano que
+habla con nuestros mismos signos la base semántica de su
+lengua es un deber que desde las instituciones debe realizarse.
+Si no lo hacen ellos, lo harán otros. Seamos nosotros.
+<br /><br />
+<strong>Pablo Ruiz Múzquiz<br />
+Madrid, 26 de Julio de 2001
+</strong>
+<br /><br /><br /><br /><br /><br />
+
+<td ALIGN=LEFT VALIGN=TOP></td>
+</tr>
+</table>
+
+</body>
+</html>

Index: lengualibre/manifiesto_lengualibre_0.3.pdf.zip
===================================================================
RCS file: lengualibre/manifiesto_lengualibre_0.3.pdf.zip
diff -N lengualibre/manifiesto_lengualibre_0.3.pdf.zip
Binary files /dev/null and /tmp/cvsxLjF5Q differ

Index: lengualibre/noticias.html
===================================================================
RCS file: lengualibre/noticias.html
diff -N lengualibre/noticias.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lengualibre/noticias.html   3 Mar 2012 06:15:10 -0000       1.1
@@ -0,0 +1,72 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <title>lengualibre.org</title>
+<link rel=stylesheet href="estilos.css" type="text/css" title="style">
+</head>
+<body text="#003588" bgcolor="#FFFEFE">
+<a href="index.html"><IMG SRC="lengualibre_logo_enano.jpg" BORDER=0 ALIGN=LEFT 
ALT="lengualibre.org"></a>
+
+<table bgcolor="#a4dba5" cellspacing=0 cellpadding=0>
+<tr>
+<td>&nbsp;<a HREF="inicio.html"><font face="helvetica" color="black" 
size=2>inicio</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="noticias.html"><font face="helvetica" color="white" 
size=2>noticias</font></a>&nbsp;&nbsp;</td>
+<td><a HREF="documentos.html"><font face="helvetica" color="black" 
size=2>documentos</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="corpus.html"><font face="helvetica" color="gray" 
size=2>corpus</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="descargas.html"><font face="helvetica" color="gray" 
size=2>descargas</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="enlaces.html"><font face="helvetica" color="black" 
size=2>enlaces</font>&nbsp;&nbsp; </a></td>
+<td><a HREF="contactar.html"><font face="helvetica" color="black" 
size=2>contactar</font> </a>&nbsp;</td>
+
+</tr>
+</table>
+
+<table CELLSPACING=0 CELLPADDING=0 WIDTH="410" BGCOLOR="white">
+<tr>
+<td>
+<br /><br />
+<h3>Noticias</h3>
+<strong>26/07/2001</strong><br /><br />
+Publicada la tercera versión preliminar del Manifiesto de LenguaLibre. Se 
trata de cambios menores y aclaración de ambigüedades como el papel de la 
empresa privada en un diccionario libre. Está disponible en la sección <a 
href="documentos.html">documentos</a>.
+
+<br /><br />
+<strong>23/07/2001</strong><br /><br />
+Hoy, tras una reunión en la sede de la filial de GNU en España, han llegado a 
su fin las charlas, que habían durado 8 meses, 
+entre LenguaLibre y GNU España  A partir de hoy, LenguaLibre pasa a consolidar 
su posición dentro del marco de proyectos de GNU España de forma que ambos 
movimientos se enriquezcan mutuamente. Gracias a esta decisión, LenguaLibre 
dispondrá ahora de un soporte y una ayuda vitales para asegurar el cumplimiento 
de nuestro objetivo; un diccionario español Libre. Podrá encontrarse más 
información en la página de <a href="http://es.gnu.org";>GNU España</a>.
+
+
+<br /><br />
+
+<strong>27/06/2001</strong><br /><br />
+Ha surgido un debate entre diferentes proyectos relacionados con "liberar" los 
recursos lingüísticos de que disponemos los hispanoparlantes para intentar 
poner en común los objetivos y la metodología de forma que no se dupliquen 
esfuerzos y el diálogo sirva para realiar un trabajo más eficiente. El promotor 
de esta idea es Ismael Olea, de las asociaciones <a 
href="http://hispalinux.es";>Hispalinux</a> y <a 
href="http://lucas.hispalinux.es";>LuCAS</a>. Os informaremos del resultado de 
esta discusión en cuanto las propuestas se solidifiquen.
+<br /><br />
+
+<strong>22/06/2001</strong><br /><br />
+Volvemos a estar activos. Javier Lorente coordina el equipo de filólogos y 
actualmente
+están confeccionando un <em>lista de áreas conceptuales</em> del vocabulario y 
unas <em>normas de estilo</em>
+para procurar que las definiciones sean lo más correctas posibles. El tiempo 
estimado para completar ambos documentos
+es de 2 semanas.<br /><br />
+
+Por otro lado, Pablo Ruiz coordina el equipo de programadores. El objetivo 
primero es confeccionar un programa
+en pseudocódigo que se encargue de la entrada de fichas lexicográficas. Una 
vez logrado esto, la implementación
+de dicho código puede realizarse en multitud de lenguajes de programación 
siendo <strong>condición indispensable</strong>
+ que sean de carácter libre. De momento hay parte hecho en python y un 
colaborador se ha mostrado
+ dispuesto a hacerlo en Java.<br><br>
+ 
+ Además, la <a href="http://es.gnu.org";>Fundación para el software Libre en 
España</a> ha mostrado todo su apoyo al proyecto.
+<br /><br />
+
+<strong>25/09/2000</strong><br /><br />
+Nace la página electrónica de Lengua Libre; http://lengualibre.org.
+<br />
+Publicado el Manifiesto Versión Preliminar 0.2.
+<br />
+Elaboración de un <a href="documento_rae.html">primer documento 
recopilatorio</a> de los objetivos de la
+ <a href="http://www.rae.es";>RAE</a> sobre el diccionario que piensa publicar a
+ principios del año 2001.
+<br /><br /><br /><font size=1>&copy; Pablo Ruiz Múzquiz 2001</font><br /><br 
/>
+</tr>
+</table>
+
+</body>
+</html>

Index: noticias/.symlinks
===================================================================
RCS file: noticias/.symlinks
diff -N noticias/.symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/.symlinks  3 Mar 2012 06:15:10 -0000       1.1
@@ -0,0 +1,11 @@
+20020604.xhtml 20020604.html
+20020707.xhtml 20020707.html
+20020826.xhtml 20020826.html
+20020828.xhtml 20020828.html
+20020908.xhtml 20020908.html
+20021013.xhtml 20021013.html
+20030115.xhtml 20030115.html
+20030215.xhtml 20030215.html
+20030220.xhtml 20030220.html
+20030304.xhtml 20030304.html
+plantilla-noticias.xhtml plantilla-noticias.html
\ No newline at end of file

Index: noticias/20020604.html
===================================================================
RCS file: noticias/20020604.html
diff -N noticias/20020604.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020604.html      3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Nueva arquitectura web de GNU España)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Nueva arquitectura web en GNU España</h2> </li>
+  <li> <b>Por: </b> Jose E. Marchesi </li>
+  <li> <b>En: </b> 4 de Junio de 2002 </li>
+</ul>
+
+<hr />
+
+<p> Hemos migrado de la antigua web basada en html, a una nueva versión
+    basada en XHTML/XSL. Utilizamos una versión modificada del xsl de
+    FSF Europa. De este modo, esperamos aprovechar las ventajas de utilizar
+    infraestructura conjunta (como mismo formato de notas de prensa, etc) y
+    aumentar el contenido de las páginas al facilitarse enormemente su 
+    edición.
+</p>
+
+<p> Debido a este cambio, las antiguas normas de edición de páginas 
+    web para los webmasters están obsoletas, y hay que reescribirlas 
+    para adaptarlas a la nueva situación.
+</p>
+
+<p> Gracias a FSF Europa por su colaboración, y especialmente a 
+    Jaime Villate por su inestimable ayuda y aportación del nuevo
+    logo de la página.
+</p>
+
+ 
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020604.xhtml
===================================================================
RCS file: noticias/20020604.xhtml
diff -N noticias/20020604.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020604.xhtml     3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Nueva arquitectura web de GNU España)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Nueva arquitectura web en GNU España</h2> </li>
+  <li> <b>Por: </b> Jose E. Marchesi </li>
+  <li> <b>En: </b> 4 de Junio de 2002 </li>
+</ul>
+
+<hr />
+
+<p> Hemos migrado de la antigua web basada en html, a una nueva versión
+    basada en XHTML/XSL. Utilizamos una versión modificada del xsl de
+    FSF Europa. De este modo, esperamos aprovechar las ventajas de utilizar
+    infraestructura conjunta (como mismo formato de notas de prensa, etc) y
+    aumentar el contenido de las páginas al facilitarse enormemente su 
+    edición.
+</p>
+
+<p> Debido a este cambio, las antiguas normas de edición de páginas 
+    web para los webmasters están obsoletas, y hay que reescribirlas 
+    para adaptarlas a la nueva situación.
+</p>
+
+<p> Gracias a FSF Europa por su colaboración, y especialmente a 
+    Jaime Villate por su inestimable ayuda y aportación del nuevo
+    logo de la página.
+</p>
+
+ 
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020707.html
===================================================================
RCS file: noticias/20020707.html
diff -N noticias/20020707.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020707.html      3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Migración de listas a Mailman)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Migración de las listas a Mailman</h2> </li>
+  <li> <b>Por: </b> Nacho González </li>
+  <li> <b>En: </b> 7 de Julio de 2002 </li>
+</ul>
+
+<hr />
+
+<p> Después de los problemas con el antiguo gestor de listas de correo
+    (listar), hemos decidido migrar todas las listas de GNUes a Mailman.
+    Este sistema nos permite tener un control mas sencillo de las opciones
+    de subscripción a la vez que permite delegar muy facilmente funciones
+    de administración.
+</p>
+
+<p> Ahora mantendremos un archivo de todas las listas y los usuarios podran
+    acceder y cambiar sus opciones de subscripción desde el interfaz web:
+    <a 
href="/cgi-bin/mailman/listinfo">http://es.gnu.org/cgi-bin/mailman/listinfo</a>.
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020707.xhtml
===================================================================
RCS file: noticias/20020707.xhtml
diff -N noticias/20020707.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020707.xhtml     3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Migración de listas a Mailman)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Migración de las listas a Mailman</h2> </li>
+  <li> <b>Por: </b> Nacho González </li>
+  <li> <b>En: </b> 7 de Julio de 2002 </li>
+</ul>
+
+<hr />
+
+<p> Después de los problemas con el antiguo gestor de listas de correo
+    (listar), hemos decidido migrar todas las listas de GNUes a Mailman.
+    Este sistema nos permite tener un control mas sencillo de las opciones
+    de subscripción a la vez que permite delegar muy facilmente funciones
+    de administración.
+</p>
+
+<p> Ahora mantendremos un archivo de todas las listas y los usuarios podran
+    acceder y cambiar sus opciones de subscripción desde el interfaz web:
+    <a 
href="/cgi-bin/mailman/listinfo">http://es.gnu.org/cgi-bin/mailman/listinfo</a>.
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020826.html
===================================================================
RCS file: noticias/20020826.html
diff -N noticias/20020826.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020826.html      3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (El Proyecto GNU Utiliza Freenode Como Su Red 
IRC Oficial</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>El Proyecto GNU Utilizará FreeNode como su red IRC oficial</h2> 
</li>
+  <li> <b>Por: </b> Jose E. Marchesi </li>
+  <li> <b>En: </b> 26 de Agosto de 2002 </li>
+</ul>
+
+<hr />
+
+<p> La Free Software Foundation tiene el placer de anunciar que, desde hoy,
+    el Proyecto GNU utilizará <i>Freenode</i> como su red IRC oficial.
+    Durante años, esta red ha servido como servidor de IRC a muchos 
+    proyectos de GNU. Hoy, se convierte en la red IRC oficial y recomendada
+    para los paquetes GNU.
+</p>
+
+<p> Bradley M. Kuhn, director ejecutivo de la Free Software Foundation, 
+    apuntó: "El Proyecto GNU ha buscado largamente una red IRC de 
+    acuerdo con nuestros principios acerca de la libertad del software. 
+    Deseamos que Freenode, con su compromiso de proporcionar una novedosa 
+    forma de cooperación a desarrolladores de Software Libre y similares,
+    pueda llenar ese hueco".
+</p>
+
+<p> Robert Levin, presidente de Peer-Directed Projects Center, añadió:
+    "Damos la bienvenida a la oportunidad de trabajar lado a lado con la 
+    Free Software Foundation. Las licencias que preservan la libertad son
+    esenciales para la salud y el éxito de los proyectos peer-to-peer.
+    El papel puntero de la Free Software Foundation en la defensa del
+    Software Libre lo convierte en un valioso contribuyente a la comunidad".  
+
+</p>
+
+<p> Para implementar esta relación oficial, la FSF ha apuntado 
+    <i>irc.gnu.org</i> directamente al servidor <i>irc.freenode.net</i>.
+    La FSF espera implementar algunos procesos para registro automático
+    de canales para paquetes GNU a traves del web de desarrollo 
+    colaborativo del Proyecto: <i>savannah.gnu.org</i>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020826.xhtml
===================================================================
RCS file: noticias/20020826.xhtml
diff -N noticias/20020826.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020826.xhtml     3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (El Proyecto GNU Utiliza Freenode Como Su Red 
IRC Oficial</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>El Proyecto GNU Utilizará FreeNode como su red IRC oficial</h2> 
</li>
+  <li> <b>Por: </b> Jose E. Marchesi </li>
+  <li> <b>En: </b> 26 de Agosto de 2002 </li>
+</ul>
+
+<hr />
+
+<p> La Free Software Foundation tiene el placer de anunciar que, desde hoy,
+    el Proyecto GNU utilizará <i>Freenode</i> como su red IRC oficial.
+    Durante años, esta red ha servido como servidor de IRC a muchos 
+    proyectos de GNU. Hoy, se convierte en la red IRC oficial y recomendada
+    para los paquetes GNU.
+</p>
+
+<p> Bradley M. Kuhn, director ejecutivo de la Free Software Foundation, 
+    apuntó: "El Proyecto GNU ha buscado largamente una red IRC de 
+    acuerdo con nuestros principios acerca de la libertad del software. 
+    Deseamos que Freenode, con su compromiso de proporcionar una novedosa 
+    forma de cooperación a desarrolladores de Software Libre y similares,
+    pueda llenar ese hueco".
+</p>
+
+<p> Robert Levin, presidente de Peer-Directed Projects Center, añadió:
+    "Damos la bienvenida a la oportunidad de trabajar lado a lado con la 
+    Free Software Foundation. Las licencias que preservan la libertad son
+    esenciales para la salud y el éxito de los proyectos peer-to-peer.
+    El papel puntero de la Free Software Foundation en la defensa del
+    Software Libre lo convierte en un valioso contribuyente a la comunidad".  
+
+</p>
+
+<p> Para implementar esta relación oficial, la FSF ha apuntado 
+    <i>irc.gnu.org</i> directamente al servidor <i>irc.freenode.net</i>.
+    La FSF espera implementar algunos procesos para registro automático
+    de canales para paquetes GNU a traves del web de desarrollo 
+    colaborativo del Proyecto: <i>savannah.gnu.org</i>
+</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020828.html
===================================================================
RCS file: noticias/20020828.html
diff -N noticias/20020828.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020828.html      3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (GNU/Hurd crea una lista de habla 
hispana)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>GNU/Hurd crea una lista de habla hispana.</h2> </li>
+  <li> <b>Por: </b> Nacho González </li>
+  <li> <b>En: </b> 28 de Agosto de 2002 </li>
+</ul>
+
+<hr />
+
+<p>El nuevo kernel GNU, y su grupo de usuarios y colaboradores de habla
+hispana han creado una lista de correo, address@hidden que servirá de punto de
+encuentro para dudas, opiniones, sugerencias y organizar grupos de 
usuarios.</p>
+
+<p>Los usuarios y amigos de GNU/Hurd dispondran ahora de otro punto de 
encuentro aparte
+del canal #hurd-es de irc.gnu.org en donde debatir y sugerir ideas. Para 
subscribirse
+a esta lista se puede acceder, o bien desde el <a
+href="http://es.gnu.org/cgi-bin/mailman/listinfo/hurd-es";>intefaz de usuario 
de mailman</a>
+o bien mandando un mail con el asunto "subscribe" a la dirección address@hidden
+</p>
+
+<p>Hurd es un kernel basado en servidores que corren sobre un microkernel, 
proporcionando
+un sistema compatible con el estandart Unix. Este kernel esta desarrollado 
integramente
+en el proyecto GNU bajo la licencia GPL y está llamado a substituir al actual 
kernel
+Linux como nucleo oficial, en el futuro sistema GNU/Hurd o GNU a secas.</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020828.xhtml
===================================================================
RCS file: noticias/20020828.xhtml
diff -N noticias/20020828.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020828.xhtml     3 Mar 2012 06:15:11 -0000       1.1
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (GNU/Hurd crea una lista de habla 
hispana)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>GNU/Hurd crea una lista de habla hispana.</h2> </li>
+  <li> <b>Por: </b> Nacho González </li>
+  <li> <b>En: </b> 28 de Agosto de 2002 </li>
+</ul>
+
+<hr />
+
+<p>El nuevo kernel GNU, y su grupo de usuarios y colaboradores de habla
+hispana han creado una lista de correo, address@hidden que servirá de punto de
+encuentro para dudas, opiniones, sugerencias y organizar grupos de 
usuarios.</p>
+
+<p>Los usuarios y amigos de GNU/Hurd dispondran ahora de otro punto de 
encuentro aparte
+del canal #hurd-es de irc.gnu.org en donde debatir y sugerir ideas. Para 
subscribirse
+a esta lista se puede acceder, o bien desde el <a
+href="http://es.gnu.org/cgi-bin/mailman/listinfo/hurd-es";>intefaz de usuario 
de mailman</a>
+o bien mandando un mail con el asunto "subscribe" a la dirección address@hidden
+</p>
+
+<p>Hurd es un kernel basado en servidores que corren sobre un microkernel, 
proporcionando
+un sistema compatible con el estandart Unix. Este kernel esta desarrollado 
integramente
+en el proyecto GNU bajo la licencia GPL y está llamado a substituir al actual 
kernel
+Linux como nucleo oficial, en el futuro sistema GNU/Hurd o GNU a secas.</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:11 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020908.html
===================================================================
RCS file: noticias/20020908.html
diff -N noticias/20020908.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020908.html      3 Mar 2012 06:15:12 -0000       1.1
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (El servidor es.gnu.org de nuevo a pleno 
rendimiento)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>El servidor es.gnu.org de nuevo a pleno rendimiento</h2> </li>
+  <li> <b>Por: </b> Nacho González </li>
+  <li> <b>En: </b> 8 de Septiembre de 2002 </li>
+</ul>
+
+<hr />
+
+<p> Después de una parada técnica de un dia por motivos administrativos, el
+servidor es.gnu.org vuelve a estar otra vez a pleno rendimiento.
+</p>
+
+<p> Gracias a algunas donaciones, al nuevo servidor se le ha podido incorporar
+una cinta DAT DSS2 y con una Debian Woody. El trabajo comenzó la tarde del
+Sabado 7 de Septiembre y las tareas de reinstalación, limpieza y puesta en
+funcionamiento se demoraron casi las ocho de la tarde del Domingo 8 de
+Septiembre.
+</p>
+
+<p> Desde aquí queremos dar las gracias de una manera especial al generoso
+donador de la cinta de backup DSS2, ya que sin ella el proyecto no tendría un
+respaldo de manera tan eficiente.
+</p>
+ 
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:12 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20020908.xhtml
===================================================================
RCS file: noticias/20020908.xhtml
diff -N noticias/20020908.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20020908.xhtml     3 Mar 2012 06:15:12 -0000       1.1
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (El servidor es.gnu.org de nuevo a pleno 
rendimiento)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>El servidor es.gnu.org de nuevo a pleno rendimiento</h2> </li>
+  <li> <b>Por: </b> Nacho González </li>
+  <li> <b>En: </b> 8 de Septiembre de 2002 </li>
+</ul>
+
+<hr />
+
+<p> Después de una parada técnica de un dia por motivos administrativos, el
+servidor es.gnu.org vuelve a estar otra vez a pleno rendimiento.
+</p>
+
+<p> Gracias a algunas donaciones, al nuevo servidor se le ha podido incorporar
+una cinta DAT DSS2 y con una Debian Woody. El trabajo comenzó la tarde del
+Sabado 7 de Septiembre y las tareas de reinstalación, limpieza y puesta en
+funcionamiento se demoraron casi las ocho de la tarde del Domingo 8 de
+Septiembre.
+</p>
+
+<p> Desde aquí queremos dar las gracias de una manera especial al generoso
+donador de la cinta de backup DSS2, ya que sin ella el proyecto no tendría un
+respaldo de manera tan eficiente.
+</p>
+ 
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:12 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20021013.html
===================================================================
RCS file: noticias/20021013.html
diff -N noticias/20021013.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20021013.html      3 Mar 2012 06:15:12 -0000       1.1
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Charlas sobre Software Libre en la EUI de 
Madrid)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Charlas sobre Software Libre en la EUI de Madrid.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 13 de Octubre de 2002 </li>
+</ul>
+
+<hr />
+
+<p>El Miercoles 16 de Octubre del 2002 tendrán lugar, en la Escuela
+Universitaria de Informatica (<a href="http://www.eui.upm.es";>EUI</a>) de la
+Universidad Politecnica de Madrid (<a href="http://www.upm.es";>UPM</a>)unas
+minijornadas sobre software libre, en las que destacan las charlas de Ismael
+Olea y Jose E. Marchesi.
+</p>
+
+<p>Jose E. Marchesi, coordinador de <a href="http://www.es.gnu.org";>GNU
+España</a>, hablará sobre filosofía del software libre y las licencias de
+software libres.
+</p>
+
+<p>Ismael Olea, responsable del proyecto
+<a href="http://es.tldp.org/";>TLDP-ES/LuCAS</a>, nos dará una conferencia sobre
+docbook, un sistema de documentación sencillo y potente.
+</p>
+
+<p>La asociación CoreDumped, de la EUI, es la responsable de la organización
+de estas charlas que complementan los cursos sobre uso y filosofía de software
+libre que estan realizando.
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:12 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20021013.xhtml
===================================================================
RCS file: noticias/20021013.xhtml
diff -N noticias/20021013.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20021013.xhtml     3 Mar 2012 06:15:12 -0000       1.1
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Charlas sobre Software Libre en la EUI de 
Madrid)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Charlas sobre Software Libre en la EUI de Madrid.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 13 de Octubre de 2002 </li>
+</ul>
+
+<hr />
+
+<p>El Miercoles 16 de Octubre del 2002 tendrán lugar, en la Escuela
+Universitaria de Informatica (<a href="http://www.eui.upm.es";>EUI</a>) de la
+Universidad Politecnica de Madrid (<a href="http://www.upm.es";>UPM</a>)unas
+minijornadas sobre software libre, en las que destacan las charlas de Ismael
+Olea y Jose E. Marchesi.
+</p>
+
+<p>Jose E. Marchesi, coordinador de <a href="http://www.es.gnu.org";>GNU
+España</a>, hablará sobre filosofía del software libre y las licencias de
+software libres.
+</p>
+
+<p>Ismael Olea, responsable del proyecto
+<a href="http://es.tldp.org/";>TLDP-ES/LuCAS</a>, nos dará una conferencia sobre
+docbook, un sistema de documentación sencillo y potente.
+</p>
+
+<p>La asociación CoreDumped, de la EUI, es la responsable de la organización
+de estas charlas que complementan los cursos sobre uso y filosofía de software
+libre que estan realizando.
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:12 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/20030115.html
===================================================================
RCS file: noticias/20030115.html
diff -N noticias/20030115.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030115.html      3 Mar 2012 06:15:12 -0000       1.1
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Visita de Richard M. Stallman.)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Visita de Richard M. Stallman.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 15 de Enero de 2003 </li>
+</ul>
+
+<hr />
+
+<p>Richard M. Stallman, el fundador del proyecto GNU y de la Free Software 
Foundation, visita España para realizar dos conferencias sobre Patentes y 
Software Libre los dias 19 y 20 de Enero en Madrid.</p>
+
+<p>El programa completo de la visita se puede consutar en <a
+href="http://www.es.gnu.org/rmsmeeting2003/";>http://www.es.gnu.org/rmsmeeting2003/</a>,
 asi como informacion detallada sobre como llegar a los lugares del
+evento.</p>
+
+<ul>
+  <li><b>El movimiento del Software Libre y el sistema operativo GNU/Linux</b>
+    Domingo 19 de Enero, 11h. Escuela Universitaria de Informatica de la 
UPM</li>
+  <li><b>Contra las Patentes de Software</b> Lunes 20 de Enero, 18h. CSA "El
+    laboratorio 03"</li>
+</ul>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:12 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030115.xhtml
===================================================================
RCS file: noticias/20030115.xhtml
diff -N noticias/20030115.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030115.xhtml     3 Mar 2012 06:15:12 -0000       1.1
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Visita de Richard M. Stallman.)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Visita de Richard M. Stallman.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 15 de Enero de 2003 </li>
+</ul>
+
+<hr />
+
+<p>Richard M. Stallman, el fundador del proyecto GNU y de la Free Software 
Foundation, visita España para realizar dos conferencias sobre Patentes y 
Software Libre los dias 19 y 20 de Enero en Madrid.</p>
+
+<p>El programa completo de la visita se puede consutar en <a
+href="http://www.es.gnu.org/rmsmeeting2003/";>http://www.es.gnu.org/rmsmeeting2003/</a>,
 asi como informacion detallada sobre como llegar a los lugares del
+evento.</p>
+
+<ul>
+  <li><b>El movimiento del Software Libre y el sistema operativo GNU/Linux</b>
+    Domingo 19 de Enero, 11h. Escuela Universitaria de Informatica de la 
UPM</li>
+  <li><b>Contra las Patentes de Software</b> Lunes 20 de Enero, 18h. CSA "El
+    laboratorio 03"</li>
+</ul>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:12 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030215.html
===================================================================
RCS file: noticias/20030215.html
diff -N noticias/20030215.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030215.html      3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Problemas con la estabilidad del servidor 
GNUes)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Problemas con la estabilidad del servidor GNUes</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 15 de Febrero de 2003 </li>
+</ul>
+
+<hr />
+
+<p>Durante estas fechas hemos tenido problemas de estabilidad con el servidor 
debido a cortes intermintentes de la corriente electrica en la sala donde está 
alojado el servidor.</p>
+
+<p>Los responsables de GNU España piden discuplas por los trastornos que haya 
podido causar esta inestabilidad, que en ningún caso ha sido responsabilidad de 
GNUes.</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030215.xhtml
===================================================================
RCS file: noticias/20030215.xhtml
diff -N noticias/20030215.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030215.xhtml     3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Problemas con la estabilidad del servidor 
GNUes)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Problemas con la estabilidad del servidor GNUes</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 15 de Febrero de 2003 </li>
+</ul>
+
+<hr />
+
+<p>Durante estas fechas hemos tenido problemas de estabilidad con el servidor 
debido a cortes intermintentes de la corriente electrica en la sala donde está 
alojado el servidor.</p>
+
+<p>Los responsables de GNU España piden discuplas por los trastornos que haya 
podido causar esta inestabilidad, que en ningún caso ha sido responsabilidad de 
GNUes.</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030220.html
===================================================================
RCS file: noticias/20030220.html
diff -N noticias/20030220.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030220.html      3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Charlas de RMS en OGG)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Charlas de RMS en OGG.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 20 de Febrero de 2003 </li>
+</ul>
+
+<hr />
+
+<p>Despues de unos problemas tecnicos ya tenemos en el FTP de GNU España las 
charlas de Richard M. Stallman, el fundador del proyecto GNU del dia 19 de 
Enero en Madrid.</p>
+
+<p>La dirección en la que se pueden descargar es <a 
href="ftp://es.gnu.org/pub/conferencias";>ftp://es.gnu.org/pub/conferencias</a>.</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030220.xhtml
===================================================================
RCS file: noticias/20030220.xhtml
diff -N noticias/20030220.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030220.xhtml     3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Charlas de RMS en OGG)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Charlas de RMS en OGG.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 20 de Febrero de 2003 </li>
+</ul>
+
+<hr />
+
+<p>Despues de unos problemas tecnicos ya tenemos en el FTP de GNU España las 
charlas de Richard M. Stallman, el fundador del proyecto GNU del dia 19 de 
Enero en Madrid.</p>
+
+<p>La dirección en la que se pueden descargar es <a 
href="ftp://es.gnu.org/pub/conferencias";>ftp://es.gnu.org/pub/conferencias</a>.</p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030304.html
===================================================================
RCS file: noticias/20030304.html
diff -N noticias/20030304.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030304.html      3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Nace GNUticias)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Nace GNUticias.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 4 de Marzo de 2003 </li>
+</ul>
+
+<hr />
+
+<p>GNU España tiene el gusto de presentar en sociedad "GNUticias", un nuevo
+foro de noticias y discusión sobre GNU  y el Software Libre alojado en
+GNUes.</p>
+
+<p>La idea de este foro es la servir de punto de encuentro de la comunidad,
+así como de medio de divulgación de noticias y eventos que sean de
+interés para el mundo del Software Libre en general y para el proyecto
+GNU en particular.</p>
+
+<p>Desde GNU España queremos animar a todos los GNUdistas a comentar las
+noticias que les parezcan de interés o a crear discusiones y debates
+sobre temas actuales como las patentes de software, las licencias
+libres, etc.</p>
+
+<p>Las normas de uso GNUticias son muy sencillas. Respeto por los demás,
+educación y moderación en los comentarios y la automoderación en el
+envío de contenidos que no tengan que ver con la comunidad del Software
+Libre. Los comentarios deberán estar en castellano.</p>
+
+<p>Sitio GNUticias en <a 
href="http://www.es.gnu.org/gnuticias";>http://www.es.gnu.org/gnuticias</a></p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/20030304.xhtml
===================================================================
RCS file: noticias/20030304.xhtml
diff -N noticias/20030304.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/20030304.xhtml     3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (Nace GNUticias)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Nace GNUticias.</h2> </li>
+  <li> <b>Por: </b>Nacho González</li>
+  <li> <b>En: </b> 4 de Marzo de 2003 </li>
+</ul>
+
+<hr />
+
+<p>GNU España tiene el gusto de presentar en sociedad "GNUticias", un nuevo
+foro de noticias y discusión sobre GNU  y el Software Libre alojado en
+GNUes.</p>
+
+<p>La idea de este foro es la servir de punto de encuentro de la comunidad,
+así como de medio de divulgación de noticias y eventos que sean de
+interés para el mundo del Software Libre en general y para el proyecto
+GNU en particular.</p>
+
+<p>Desde GNU España queremos animar a todos los GNUdistas a comentar las
+noticias que les parezcan de interés o a crear discusiones y debates
+sobre temas actuales como las patentes de software, las licencias
+libres, etc.</p>
+
+<p>Las normas de uso GNUticias son muy sencillas. Respeto por los demás,
+educación y moderación en los comentarios y la automoderación en el
+envío de contenidos que no tengan que ver con la comunidad del Software
+Libre. Los comentarios deberán estar en castellano.</p>
+
+<p>Sitio GNUticias en <a 
href="http://www.es.gnu.org/gnuticias";>http://www.es.gnu.org/gnuticias</a></p>
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->
+

Index: noticias/plantilla-noticias.html
===================================================================
RCS file: noticias/plantilla-noticias.html
diff -N noticias/plantilla-noticias.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/plantilla-noticias.html    3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (título aquí)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Título noticia</h2> </li>
+  <li> <b>Por: </b> Nombre del Autor </li>
+  <li> <b>En: </b> XX de XXXX de XXXX </li>
+</ul>
+
+<hr />
+
+<p> Cuerpo de la noticia.
+
+</p>
+ 
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: noticias/plantilla-noticias.xhtml
===================================================================
RCS file: noticias/plantilla-noticias.xhtml
diff -N noticias/plantilla-noticias.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ noticias/plantilla-noticias.xhtml   3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Noticia (título aquí)</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<ul>
+  <li> <h2>Título noticia</h2> </li>
+  <li> <b>Por: </b> Nombre del Autor </li>
+  <li> <b>En: </b> XX de XXXX de XXXX </li>
+</ul>
+
+<hr />
+
+<p> Cuerpo de la noticia.
+
+</p>
+ 
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: proyecto/.symlinks
===================================================================
RCS file: proyecto/.symlinks
diff -N proyecto/.symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ proyecto/.symlinks  3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1 @@
+gnu-linux-faq.xhtml gnu-linux-faq.html
\ No newline at end of file

Index: proyecto/gnu-linux-faq.html
===================================================================
RCS file: proyecto/gnu-linux-faq.html
diff -N proyecto/gnu-linux-faq.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ proyecto/gnu-linux-faq.html 3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,1110 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - GNU/Linux FAQ</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<H3>GNU/Linux FAQ</H3>
+<p>
+por <STRONG>Richard Stallman</STRONG>
+</p>
+
+<p>
+<A HREF="/Images/gnu-head.html"><IMG SRC="/Images/gnu-head.jpg"
+   ALT=" [imagen de la cabeza de un GNU] "
+   WIDTH="129" HEIGHT="122"></IMG></A>
+</p>
+
+<P>
+Cuando la gente ve que recomendamos el uso del nombre GNU/Linux para
+referirnos a un sistema que mucha otra gente denomina simplemente
+"Linux", y no lo comprende, reacciona con curiosidad. Aquí se exponen
+las preguntas mas comunes, y nuestras respuestas.
+</P>
+
+
+<ul>
+
+<li><a href="#why" name="TOCwhy">¿Por qué llamais al sistema GNU/Linux,
+y no Linux?</a></li>
+
+<li><a href="#whycare" name="TOCwhycare">¿Por qué esta cuestión de
+nomenclatura es tan importante?</a></li>
+
+<li><a href="#howerror" name="TOChowerror">¿Cómo se ha llegado a que
+    la mayoría de la gente llame "Linux" al sistema?</a></li>
+
+<li><a href="#linuxalone" name="TOClinuxalone">¿Habría tenido Linux
+    tanto éxito si no hubiera existido GNU?</a></li>
+
+<li><a href="#divide" name="TOCdivide">¿No sería mejor para la
+    comunidad si no dividierais a la gente con esta petición?</a></li>
+
+<li><a href="#freespeech" name="TOCfreespeech">¿No apoya el Proyecto
+         GNU la libertad de expresión de cada uno para llamar al
+         sistema como se quiera?</a></li>
+
+<li><a href="#tools" name="TOCtools">¿Es GNU una colección de
+herramientas de desarrollo que fueron incluidas en Linux?</a></li>
+
+<li><a href="#osvskernel" name="TOCosvskernel">¿Cual es la diferencia
+         entre un sistema operativo y un kernel?</a></li>
+
+<li><a href="#afterkernel" name="TOCafterkernel">Estamos llamando al
+         sistema completo como el kernel, Linux. ¿Es normal denominar
+         un sistema operativo como su kernel?</a></li>
+
+<li><a href="#long" name="TOClong">Hay un problema con "GNU/Linux": es
+         demasiado largo. ¿No sería mejor recomendar un nombre mas
+         corto?</a> </li>
+
+<li><a href="#justgnu" name="TOCjustgnu">Dado que Linux es una
+         contribución secundaria, ¿sería faltar a los hechos el llamar
+         al sistema simplemente "GNU"?</a></li>
+
+<li><a href="#many" name="TOCmany">Muchos otros proyectos han
+         contribuido al sistema tal y como es hoy en dia; eso incluye
+         TeX, X11, Apache, Perl, y muchos mas programas. ¿No implican
+         vuestros argumentos que debemos darles crédito por el
+         sistema? (Pero eso llevaría a un nombre tan largo que sería
+         absurdo).</a> </li>
+
+<li><a href="#whyslash" name="TOCwhyslash">¿Por qué escribis
+         "GNU/Linux" en lugar de "GNU Linux"?</a></li>
+
+<li><a href="#whyorder" name="TOCwhyorder">¿Por qué "GNU/Linux" y
+         no "Linux/GNU"?</a></li>
+
+<li><a href="#companies" name="TOCcompanies">¿No sería mas efectivo 
+pedir a compañías como Mandrake, Red Hat e IBM que llamen a sus
+distribuciones "GNU/Linux", en lugar de pedírselo a individuos?</a> </li>
+
+<li><a href="#reserve" name="TOCreserve">¿No sería mejor reservar el
+         nombre "GNU/Linux" para las distribuciones compuestas
+         únicamente de Software Libre? Despues de todo, ese es el
+         ideal de GNU.</a></li>
+
+<li><a href="#gnudist" name="TOCgnudist">¿Por qué no hacer una
+         distribución GNU de Linux (sic) y llamarla GNU/Linux?</a></li>
+
+<li><a href="#linuxgnu" name="TOClinuxgnu">¿Por qué no decir
+         simplemente que "Linux es el kernel GNU", y distribuir
+         alguna versión existente de GNU/Linux bajo el nombre de 
"GNU"?</a></li>
+
+<li><a href="#condemn" name="TOCcondemn">¿Condenó y se opuso el Proyecto GNU al
+         uso de Linux en los primero dias del Proyecto?</a></li>
+
+<li><a href="#allgpled" name="TOCallgpled">¿Debería aplicarse la
+         convención GNU/[nombre] a todos los programas licenciados
+         con la licencia GPL?</a></li>
+
+<li><a href="#unix" name="TOCunix">Dado que mucho de GNU proviene de
+         Unix, ¿no debería GNU dar crédito a Unix utilizando "Unix"
+         en el nombre del sistema?</a></li>
+         
+<li><a href="#bsd" name="TOCbsd">¿Tambien deberíamos decir "GNU/BSD"?</a></li>
+
+<li><a href="#justlinux" name="TOCjustlinux">¿Podrían existir sistemas
+         basados en Linux sin GNU?</a></li>
+
+<li><a href="#helplinus" name="TOChelplinus">¿Por qué no llamais al
+         sistema "Linux", despues de todo, y así fortaleceis el papel
+         de Linus Torvalds como el "posterboy" de nuestra comunidad?</a></li>
+
+<li><a href="#lost" name="TOClost">La batalla ya ha sido perdida; la
+         sociedad ha hecho su decisión y no podemos cambiarlo. ¿Por
+         qué seguis pensando en ello?</a></li>
+
+<li><a href="#whatgood" name="TOCwhatgood">La sociedad ya ha tomado su
+         decisión, y no podemos cambiarlo. ¿Qué avanzo si llamo al
+         sistema "GNU/Linux"?</a></li>
+    
+<li><a href="#explain" name="TOCexplain">¿No sería mejor llamar al
+         sistema "Linux", y enseñar a la gente su origen real en una
+         explicación de diez minutos?</a></li>
+
+<li><a href="#treatment" name="TOCtreatment">Alguna gente se rie de vosotros
+         cuando les pedis que llamen GNU/Linux al sistema. ¿Por qué
+         os someteis a ese tratamiento?</a></li>
+
+
+<li><a href="#alienate" name="TOCalienate">Alguna gente se enfada y os
+         condena cuando les pedis que llamen GNU/Linux al
+         sistema. ¿No perdeis al predisponerlos en vuestra contra?</a></li>
+
+<li><a href="#whynotsue" name="TOCwhynotsue">¿Por qué no demandar a la
+         gente que llama "Linux" al sistema?</a></li>
+
+<li><a href="#require" name="TOCrequire">¿No deberíais añadir algo a
+         la GNU GPL para forzar a la gente a llamar al sistema "GNU"?</a></li>
+
+<li><a href="#deserve" name="TOCdeserve">Dado que no incluísteis nada
+         acerca de nomenclatura, os habeis buscado que la gente llame
+         "Linux" al sistema. ¿Por qué pedis lo contrario ahora?</a></li>
+
+<li><a href="#contradict" name="TOCcontradict">¿No sería mejor que no
+         contradijerais algo en lo que cree mucha gente?</a></li>
+
+<li><a href="#somanyright" name="TOCsomanyright">Dado que mucha gente
+         llama "Linux" al sistema, ¿no hace eso que tengan
+         razon?</a></li>
+
+<li><a href="#winning" name="TOCwinning">Mucha gente se preocupa mas
+         de qué es conveniente, o quien está ganando, que de
+         argumentos de verdad o falsedad. ¿No podriais ganaros su
+         apoyo de otra manera?</a></li>
+
+
+</ul>
+
+<p>
+<hr />
+</p>
+
+<dt><h4><a href="#TOCwhy" name="why">¿Por qué llamais al sistema
+    GNU/Linux, y no Linux?</a></h4></dt>
+
+<dd>La mayoría de las distribuciones de sistemas operativos que
+utilizan Linux como kernel son básicamente versiones modificadas del
+sistema operativo GNU. Comenzamos a desarrollar GNU en 1984, años
+antes de que Linus Torvalds escribiera su kernel, y desarrollamos una
+parte mayor del sistema resultante que cualquier otro proyecto. En
+justicia, deberíamos tener el mismo tipo de reconocimiento.
+<P>
+Lea <a href="/gnu/linux-and-gnu.es.html">"Linux y el Proyecto
+GNU" (http://www.gnu.org/gnu/linux-and-gnu.es.html)</a> para una explicación
+mas amplia, y <a href="/gnu/the-gnu-project.es.html">"El Proyecto
+GNU" (http://www.gnu.org/gnu/the-gnu-project.es.html)</a> donde
+encontrará algo de historia.
+</P>
+</dd>
+
+<dt><h4><a href="#TOCwhycare" name="whycare">¿Por qué esta cuestión de
+    nomenclatura es tan importante?</a></h4></dt>
+
+<dd>Pese a que los desarrolladores del kernel Linux están
+contribuyendo a la comunidad del Software Libre, muchos de ellos no
+muestran una especial preocupación por la libertad. La gente que
+piensa que el sistema completo es Linux tiende a confundirse, y
+achacar a los desarrolladores del kernel un papel en nuestra comunidad
+que de hecho no interpretaron. Simplemente dan un peso
+desproporcionado a los puntos de vista de esos desarrolladores.
+
+<P>
+El llamar al sistema GNU/Linux es un reconocimiento al papel que
+nuestro idealismo jugó a la hora de construir nuestra comunidad, y <A
+HREF="/gnu/why-gnu-linux.es.html">ayuda al público a apreciar la
+importancia práctica de dichos ideales</A>.
+
+</P>
+</dd>
+
+
+<dt><h4><a href="#TOChowerror" name="howerror">¿Cómo se ha llegado a
+    que la mayoría de la gente llame "Linux" al sistema?</a></h4></dt>
+
+<dd>El denominar "Linux" al sistema es una confusión que simplemente
+se ha extendido mas rápido que la contrapartida real.
+
+<p>
+La gente que adaptó el kernel Linux para funcionar en el sistema GNU
+no se imaginaba hasta donde llevaría su trabajo. Comenzaron con el 
+kernel, y añadieron pieza a pieza el sistema GNU. Llegó un momento en
+que producían algo que tenía mas de GNU que de Linux, pero no le dieron
+importancia, y continuaron llamandolo "Linux", pese a que esa
+denominación ya no era fiel a la verdad. A nosotros nos llevó algunos
+años reconocer el problema, y comenzar a rogar a la gente corregir
+esa práctica. Desgraciadamente, la confusión ya estaba ampliamente
+difundida.
+</p>
+<p>
+La mayoría de la gente que llama "Linux" al sistema nunca han oido el
+por qué eso no es correcto. Simplemente oyen a otras personas
+utilizando ese nombre, y comprensiblemente asumen que así debe
+ser. Además, la denominación "Linux" ayuda a expander un panorama
+falso acerca de los orígenes del sistema. Por ejemplo, mucha gente
+cree que el desarrollo del sistema comenzó en 1991 de la mano de Linus
+Torvalds. Esta idea de los orígenes del proyecto tiende a
+reforzar la falsa impresión de que el nombre correcto del sistema es
+"Linux". 
+</p>
+
+<p>
+De hecho, la mayoría de las preguntas presentes en este fichero representan los
+intentos de la gente para encontrar una justificación al nombre que
+les fué enseñado como del sistema.
+</p>
+</dd>
+
+<dt><h4><a href="#TOClinuxalone" name="linuxalone">¿Habría tenido
+    Linux tanto éxito si no hubiera existido GNU?</a></h4></dt>
+
+<dd>
+En ese mundo hipotético, hoy en día no existiría nada como el sistema
+GNU/Linux, y probablemente ningun sistema operativo libre. Hay otros
+kernels libres aparte de Linux, pero no compiladores optimizadores
+libres como GCC.
+
+<p>
+Linus Torvalds podría haber escrito un kernel tipo Unix en 1991, aun
+sin el ejemplo de GNU. Pero seguramente no hubiera sido Software
+Libre, ya que Linux se liberó en 1992 cuando Linus lo distribuyó bajo
+los términos de la licencia GNU GPL. (Ver las notas de distribución
+del a versión 0.12. de Linux). En cualquier caso, un kernel aislado no
+hubiera sido tan tremendamente efectivo como la combinación GNU/Linux.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCdivide" name="divide">¿No sería mejor para la
+    comunidad si no dividierais a la gente con esta
+    petición?</a></h4></dt>
+
+<dd>
+Cuando pedimos a la gente que diga "GNU/Linux", no la estamos
+dividiendo. Nuestra petición está orientada a dar al Proyecto GNU el
+crédito que se merece por el sistema operativo GNU. Esto no implica
+crítica ninguna a nadie, o restar méritos a los demas.
+
+<p>
+Sin embargo, hay gente a la que no le gusta que digamos
+"GNU/Linux". Algunas veces nos critican en respuesta y en ocasiones
+esas críticas llegan a tal magnitud que nos preguntamos si
+intencionadamente no estarán tratando de intimidarnos hasta hacer que
+nos callemos. Esa actitud no solo fracasa en el objetivo de silenciarnos,
+sino que tiende a dividir a la comunidad. Por ello esperamos que
+podais convencerlos de que paren.
+</p>
+
+<p>
+En todo caso, esa es solo una causa secundaria de la división de
+nuestra comunidad. La mayor división existe entre la gente que aprecia
+el Software Libre como una cuestión social y ética, considerando el
+software propietario como un problema social (gente que apoya y ayuda
+al movimiento del Software Libre), y aquella que solo tienen en cuenta
+los beneficios practicos, y exponen el Software Libre solo como un
+modelo de desarrollo eficiente (el movimiento OpenSource).
+</p>
+<p>
+Este desacuerdo no solo es una cuestión de nomenclatura, sino que
+abarca una diferencia conceptual básica. Es esencial para la comunidad
+darse cuenta de esta diferencia, y pensar acerca de ella. Los nombres
+"Software Libre" y "open source" son los eslóganes de las dos
+posiciones. Lee <a
+href="{$gnues}/philosophy/open-source-misses-the-point.es.html">"Por qué 
Software
+Libre es mejor que Open Source"
+(http://www.gnu.org/philosophy/open-source-misses-the-point.es.html)</a>.
+</p>
+<p>
+Las diferencias se ven en parte reflejadas en la cantidad de gente que
+tiene en cuenta el papel del Proyecto GNU en nuestra comunidad. La
+gente que aprecia la libertad es mas dada a llamar al sistema
+"GNU/Linux", y la gente que aprende por qué se llama "GNU/Linux" al
+sistema casi siempre acaba prestando atención a nuestros argumentos
+filosóficos relativos a la libertad y la comunidad (esta es la razón
+por la que la nomenclatura es importante en la sociedad). Sin embargo,
+los desacuerdos probablemente seguirán existiendo aunque todo el mundo
+conozca y comprenda los orígenes del sistema y su nombre
+apropiado. El conflicto solo puede superarse si quienes valoramos la
+libertad convencemos a todo el mundo para hacer lo mismo (lo que no
+será facil), o seamos derrotados definitivamente (esperemos que no).
+</p>
+</dd>
+
+<dt><h4><a href="#TOCfreespeech" name="freespeech">¿No apoya el
+       Proyecto GNU la libertad de expresión de cada uno para llamar
+       al sistema como se quiera?</a></h4></dt>
+<dd>
+Por supuesto; creemos firmemente que tienes la libertad de expresión
+de llamar al sistema como te plazca. Pedimos a la gente que lo llame
+GNU/Linux como una cuestión de hacer justicia con el Proyecto GNU,
+para promover los valores morales en los que se basa GNU, y para informar a los
+demas que son esos valores los que hacen posible la existencia del
+sistema. 
+</dd>
+
+<dt><h4><a href="#TOCtools" name="tools">¿Es GNU una colección de
+herramientas de desarrollo que fueron incluidas en Linux?</a></h4></dt>
+
+<dd>
+A menudo las personas que piensan que Linux es un sistema operativo completo, y
+han escuchado mencionar a GNU, tienen una idea equivocada de lo que es
+GNU. Pueden pensar que GNU es el nombre de una colección de programas;
+a menudo hablan acerca de "herramientas de desarrollo", debido a que
+algunos de nuestros programas de desarrollo han adquirido mucha
+popularidad por si mismos. La idea de que "GNU" es el nombre de un
+sistema operativo se torna entonces dificil de introducir en un
+entorno conceptual donde ese sistema operativo es llamado "Linux".
+
+<p>
+El Proyecto GNU adquirió su nombre del sistema operativo GNU; es el
+proyecto para desarrollar el sistema GNU. (Ver <a
+href="{$gnues}/gnu/initial-announcement.html">el anuncio inicial del Proyecto
+de 1983 en
+&lt;http://www.gnu.org/gnu/initial-announcement.es.html&gt;</a>.)
+</p>
+<p>
+Se desarrollaron programas como GCC, GNU Emacs, GAS, GLIBC, BASH,
+etc., debido a que los necesitabamos para formar parte del sistema
+operativo GNU. GCC, el GNU Compiler Collection es el compilador que 
+creamos para el sistema operativo GNU. Escribimos asimismo
+Ghostscript, GNUCash, GNU Chess y GNOME, pese a que no son
+herramientas de desarrollo.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCosvskernel" name="osvskernel">¿Cual es la
+       diferencia entre un sistema operativo y un kernel?</a></h4></dt>
+
+<dd>
+Tal como entendemos el término, un sistema operativo consiste en una
+colección de programas suficientes para que un ordenador efectue una
+amplia variedad de tareas. Un sistema operativo de propósito general, 
+para que sea completo, necesita poder manejar todos los trabajos que
+un usuario quiera llevar a cabo.
+
+<p>
+El kernel es uno de los programas de que se compone un sistema
+operativo; el programa que gestiona los recursos de la máquina para
+que otros programas puedan disponer de ellos. El kernel tambien se 
+ocupa de arrancar y parar otros programas.
+</p>
+<p>
+Debido a la confusión, algunas personas utilizan el término "sistema
+operativo" cuando realmente se refieren al "kernel". Ambos usos del
+término se remontan atras muchos años. La utilización de "sistema
+operativo" para referirse al kernel puede encontrarse en algunos
+libros de texto de diseño de sistemas, allá por los años ochenta. 
+También en los ochenta, se entendía que el "sistema operativo Unix"
+incluía todos los programas de sistema, y la versión Unix de Berkeley
+incluso comprendía algunos juegos. Como GNU es un sistema operativo
+tipo Unix, utilizamos el término "sistema operativo" con su acepción
+tradicional cuando se habla de Unix.
+</p>
+
+<p>
+Cuando la gente habla del "sistema operativo Linux", se refieren a lo
+mismo que nosotros llamamos "sistema operativo GNU": se refieren a 
+todos los programas del sistema. Si quieres referirte a ello, por
+favor llámalo "GNU/Linux". Si te refieres al kernel, entonces "Linux"
+es el nombre correcto para llamarlo. Sin embargo, es bueno añadir la
+palabra "kernel" para evitar ambigüedades acerca de a qué te estas
+refiriendo. 
+</p>
+
+</dd>
+
+<dt><h4><a href="#TOCafterkernel" name="afterkernel">Estamos llamando
+         al sistema completo como el kernel, Linux. ¿Es normal
+         denominar un sistema operativo como su kernel?</a></h4></dt>
+
+<dd>
+Esa práctica parece ser muy rara; no podemos encontrar otros ejemplos
+semejantes al mal uso del nombre "Linux". Normalmente, un sistema 
+operativo es desarrollado como un único proyecto, y los
+desarrolladores escogen un nombre para el sistema global. Generalmente
+el kernel no dispone de un nombre para él solo.
+
+</dd>
+
+<dt><h4><a href="#TOClong" name="long">Hay un problema con
+         "GNU/Linux": es demasiado largo. ¿No sería mejor recomendar
+         un nombre mas corto?</a></h4></dt>
+
+<dd>
+Por un tiempo probamos con el nombre "LiGNUx", que combina las
+palabras "GNU" y "Linux". La reacción fué muy mala. La gente acepta
+"GNU/Linux"  mas facilmente.
+
+<p>
+El nombre legítimo mas corto para este sistema es "GNU", pero los
+llamamos "GNU/Linux" por las razones dadas mas adelante.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCjustgnu" name="justgnu">Dado que Linux es una
+         contribución secundaria, ¿sería faltar a los hechos el
+         llamar al sistema simplemente "GNU"?</a></h4></dt>
+
+<dd>
+Ciertamente, no sería faltar a los hechos, pero consideramos que no 
+sería apropiado hacerlo. Estas son las razones por las que nosotros
+llamamos al sistema "GNU/Linux", y no "GNU" a secas:
+
+<ul>
+<li>
+El sistema no es exactamente GNU; tiene un kernel distinto (esto es,
+Linux). Distinguir entre GNU/Linux y GNU es útil.</li>
+<li>
+Sería muy grosero pedir a la gente que <em>parara</em> de dar ningún
+crédito a Linus Torvalds; él escribió un componente importantísimo del
+sistema. Nosotros queremos ser reconocidos por comenzar y mantener el 
+desarrollo del sistema, pero eso no implica que debamos tratar a Linus
+igual que los que llaman al sistema "Linux" nos tratan a
+nosotros. Discrepamos en gran medida de las ideas políticas de
+Torvalds, pero llevamos esa discrepancia de forma honorable y
+abierta, en lugar de intentar arrebatarle el reconocimiento que 
+se merece por su contribución al sistema.</li>
+<li>
+Dado que mucha gente conoce al sistema como "Linux", si hablamos de
+"GNU" es posible que no reconozcan que hablamos del mismo sistema.
+Si por contra hablamos de "GNU/Linux", pueden relacionarlo con lo que
+ya han oído hablar acerca del sistema.</li>
+</ul>
+</dd>
+
+<dt><h4><a href="#TOCmany" name="many">Muchos otros proyectos han
+         contribuido al sistema tal y como es hoy en dia; eso incluye
+         TeX, X11, Apache, Perl, y muchos mas programas. ¿No implican
+         vuestros argumentos que debemos darles crédito por el
+         sistema? (Pero eso llevaría a un nombre tan largo que sería
+         absurdo). </a></h4></dt>
+<dd>
+Lo que decimos es que debes otorgar al desarrollador principal del
+proyecto su parte del reconocimiento. En este caso, el principal
+desarrollador es el Proyecto GNU.
+<p>
+Si te sientes incluso mas propenso a otorgar el crédito a quienes se
+lo merecen, podrías pensar que algunos contribuidores secundarios
+también deberían figurar en el nombre del sistema. Si es así, que
+sepas que no tenemos nada en contra de ello. Si piensas que X11 se
+merece figurar en el nombre del sistema, y por tanto deseas llamar
+al sistema  GNU/X11/Linux, por favor hazlo. Si piensas que 
+Perl simplemente debería figurar, y quieres escribir GNU/Linux/Perl,
+adelante. 
+</p>
+
+<p>
+Dado que un nombre tan largo como
+GNU/X11/Apache/Linux/TeX/Perl/Python/FreeCiv se antoja algo absurdo,
+en algun punto tendrás que cortar, y omitir los nombres de muchos
+contribuidores secundarios. No hay ninguna indicación obvia de donde
+fijar el corte, por lo que allá donde lo pongas, nosotros no vamos a
+argumentar en contra.
+</p>
+<p>
+Diferentes puntos de corte llevarían a distintas opciones para llamar
+al sistema. Pero un nombre que no respeta el reconocimiento correcto
+del sistema, ni aun con cualquier punto de corte, es "Linux". No sería 
+adecuado dar todo el crédito a una contribución secundaria (Linux)
+mientras se omite la contribución principal (GNU).
+</p>
+</dd>
+
+<dt><h4><a href="#TOCwhyslash" name="whyslash">¿Por qué escribis
+         "GNU/Linux" en lugar de "GNU Linux"?</a></h4></dt>
+
+<dd>
+Siguiendo las reglas del inglés, en la construcción "GNU Linux" la
+palabra "GNU" modifica a "Linux". Como resultado "GNU Linux" significa
+"La versión GNU de Linux" o "Linux, que es un paquete GNU". Ninguna de
+esas acepciones son ciertas en este caso.
+<p>
+Linux no es un paquete GNU; esto es, no fué desarrollado bajo el
+auspicio del Proyecto, ni contribuido al Proyecto GNU de forma
+específica. Linus Torvalds escribió Linux de forma independiente, como
+su proyecto. Por tanto "Linux, que es un paquete GNU", es incorrecto.
+</p>
+<p>
+No estamos hablando de una versión GNU de Linux, el kernel. El
+Proyecto GNU no dispone de una versión separada de Linux. 
+Los sistemas GNU/Linux no utilizan una versión separada de Linux;
+el uso principal de Linux es en esos sistemas, y la versión estándar 
+de Linux está desarrollado para funcionar en ellos. Por eso "La
+versión GNU de Linux" tampoco es correcto.
+</p>
+<p>
+Por el contrario, estamos hablando de una versión de GNU, el sistema 
+operativo, que se distingue por utilizar Linux como su kernel. La
+barra inclinada sirve para expresar eso, debido a que significa
+"combinación" (piensa en "Entrada/Salida"). Este sistema es la
+combinación de GNU y de Linux; de ahí "GNU/Linux".
+</p>
+<p>
+Hay otras formas de expresar "combinación". Si piensas que 
+un signo mas (+) es claro, utilízalo. En frances, un guión es claro: 
+"GNU-Linux". 
+</p>
+
+</dd>
+
+<dt><h4><a href="#TOCwhyorder" name="whyorder">¿Por qué "GNU/Linux" y
+         no "Linux/GNU"?</a></h4></dt>
+
+<dd>
+Resulta apropiado mencionar al primer contribuidor primero. La
+contribución de GNU al sistema no solo es mas grande que Linux, y 
+anterior a Linux, sino que nosotros comenzamos toda la actividad.
+<p>
+Sin embargo, si prefieres llamar al sistema "Linux/GNU", es mucho
+mejor que lo que normalmente hace la gente, que es omitir GNU por
+entero y hacer parecer que todo el sistema es Linux.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCcompanies" name="companies">¿No sería mas
+  efectivo pedir a compañias como Mandrake, Red Hat e IBM que llamen a
+  sus distribuciones "GNU/Linux", en lugar de pedírselo a
+  individuos?</a></h4></dt>
+
+<dd>
+No es una elección de uno u otro; nosotros pedimos tanto a compañías,
+organizaciones e individuos que colaboren en difundir el nombre
+correcto del sistema. De hecho, se lo hemos pedido a las tres 
+compañías mencionadas. Mandrake utiliza "GNU/Linux" algunas veces,
+pero IBM y Red Hat fueron reluctantes a ayudar. Un ejecutivo 
+incluso dijo: "Es una decisión puramente comercial; esperamos 
+obtener mas beneficios si lo llamamos 'Linux'". En otras palabras, esa
+compañía no se preocupaba de lo que era verdad o no lo era.
+<p>
+No podemos hacer que cambien, pero no somos de los que abandonamos
+porque el camino no es facil. Tu empeño puede no tener tanta 
+influencia como IBM o Red Hat, pero puedes ayudar. Juntos podemos
+cambiar la situación de modo que las empresas hagan mas dinero si
+llaman a sus distribuciones "GNU/Linux".
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCreserve" name="reserve">¿No sería mejor reservar
+         el nombre "GNU/Linux" para las distribuciones compuestas
+         únicamente de Software Libre? Despues de todo, ese es el
+         ideal de GNU.</a></h4></dt>
+
+<dd>
+La práctica, ampliamente extendida, de añadir software no libre al
+sistema GNU/Linux es un gran problema para nuestra comunidad.
+Convence a los usuarios de que el software no libre está bien, y que
+utilizarlo forma parte del espíritu de "Linux". Muchos Grupos de 
+Usuarios de "Linux" entienden como su misión el ayudar a la gente 
+a utilizar añadidos no libres, e incluso invitan a comerciales a 
+poner stands y puestos para ellos. Adoptan objetivos como "ayudar 
+a los usuarios" de GNU/Linux (incluyendo ayudarlos a usar aplicaciones
+y manejadores de dispositivos no libres), o hacer al sistema mas 
+popular, aun a costa de la libertad.
+<p>
+La cuestión es como intentar cambiar esto.
+</p>
+<p>
+Dado que la mayoría de la comunidad que utiliza esas versiones
+de GNU no saben lo que es, desacreditar esas versiones adulteradas 
+clamando que no son realmente GNU no enseñaría a los usuarios a 
+valorar mas su libertad. No captarían el mensaje. Contestarían
+que ellos nunca han considerado que esos sistemas eran GNU.
+</p>
+<p>
+La forma correcta para tratar que esos usuarios vean una 
+conexión con el concepto de libertad es exactamente la contraria:
+informarlos de que esos sistemas <em>son</em> versiones de GNU,
+que todos están basados en un sistema que existe específicamente
+para el beneficio de la libertad de sus usuarios. Con ese
+conocimiento, los usuarios podrán comenzar a reconocer Lindows y el 
+llamado "United Linux" como versiones adulteradas y pervertidas de
+GNU.
+</p>
+<p>
+Es muy útil fundar Grupos de Usuarios de GNU/Linux, que llamen al
+sistema GNU/Linux y adopten los ideales del Proyecto GNU como
+una base para sus actividades. Si el Grupo de Usuarios de Linux de tu 
+región sufre de los problemas mencionados anteriormente, te sugerimos
+que comiences una campaña dentro del grupo para cambiar su orientación
+(y su nombre) o comenzar otro grupo nuevo. La gente que enfoca sus 
+energías en los objetivos mas supérfluos están en su derecho de
+hacerlo, ¡pero que no dejes que te arrastren con ellos!.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCgnudist" name="gnudist">¿Por qué no hacer una
+         distribución GNU de Linux (sic) y llamarla
+         GNU/Linux?</a></h4></dt>
+
+<dd>
+Todas las distribuciones de "Linux" son de hecho versiones del sistema
+GNU con Linux como su kernel. El propósito del término "GNU/Linux" es
+comunicar este hecho. El desarrollar una distribución nueva y llamarla 
+"GNU/Linux" a secas oscurecería ese punto aun mas.
+<p>
+Ya hicimos una distribución de "GNU/Linux", cuando fundamos el 
+desarrollo inicial de Debian GNU/Linux. Hacerlo otra vez no sería muy
+útil; representaría una cantidad tremenda de trabajo, y a no ser que
+la nueva distribución poseyera ventajas práctica sustanciales sobre
+las demas, no serviría para nada.
+</p>
+</dd>
+
+<dt><h4><a href="#TOClinuxgnu" name="linuxgnu">¿Por qué no decir
+         simplemente que "Linux es el kernel GNU", y distribuir
+         alguna versión existente de GNU/Linux bajo el nombre de
+         "GNU"?</a></h4></dt>
+
+<dd>
+Podría haber sido buena idea adoptar Linux como el kernel GNU allá en
+1992. Si hubieramos sabido entonces cuanto tiempo iba a ocupar el
+desarrollo de GNU Hurd, tal vez lo hubiéramos hecho.
+Hoy en dia, con el GNU Hurd
+funcionando, no tiene mucho sentido hacerlo. No queremos distribuir un
+sistema GNU/Linux como "GNU", debido a que pronto podremos empaquetar
+y distribuir el sistema GNU completo.
+<p>
+Hay otra razon por la que no queremos coger alguna versión 
+existente de GNU/Linux y cambiarle el nombre a "GNU": Sería algo
+parecido a coger  una versión del sistema GNU y cambiarle el nombre
+a "Linux".
+</p>
+</dd>
+
+<dt><h4><a href="#TOCcondemn" name="condemn">¿Condenó y se opuso el
+         Proyecto GNU al uso de Linux en los primeros dias del
+         Proyecto?</a></h4></dt>
+
+<dd>
+No adoptamos Linux como nuestro kernel, pero tampoco lo condenamos o nos
+opusimos a él. Por el contrario, solíamos cooperar con la gente que
+estaba utilizando GNU en combinación con Linux. Quisimos incorporar
+sus cambios en las distribuciones estándar de los paquetes GNU, de 
+modo que pudieran funcionar en las versiones GNU basadas en Linux.
+<p>
+Desafortunadamente, encontramos que ellos estaban menos interesados
+en cooperar con nosotros. Uno de ellos, de hecho, dijo que no tenía
+interés en trabajar con el Proyecto GNU debido a que él era un
+"usuario de Linux". Esto fué un shock para nosotros, debido a que la
+gente que portó los paquetes GNU a otros sistemas siempre se mostraron
+muy motivados a cooperar con nosotros. El grupo de Linux, que
+desarrollaba un sistema básicamente basado en GNU, fué el primero 
+(y prácticamente el único) que no deseaba trabajar con nosotros.
+</p>
+<p>
+Fué esta experiencia la que hizo patente el hecho de que la gente
+estaba denominando "Linux" a una versión de GNU, y que esa confusión 
+estaba dificultando nuestro trabajo. El rogarte que llames al sistema 
+"GNU/Linux" es nuestra reacción a ese y otros problemas inducidos por
+la confusión "Linux".
+</p>
+</dd>
+
+<dt><h4><a href="#TOCallgpled" name="allgpled">¿Debería aplicarse la
+convención GNU/[nombre] a todos los programas licenciados con la
+licencia GPL?</a></h4></dt>      
+
+<dd>
+Nunca nos referimos a programas individuales como
+"GNU/[nombre]". Cuando un programa es un paquete GNU, podemos llamarlo 
+"GNU [nombre]".
+<p>
+GNU, el sistema operativo, está compuesto por muchos programas
+distintos. Algunos de los programas en GNU fueron escritos por
+el Proyecto GNU, o especialmente dedicados al mismo; esos son paquetes
+GNU, y a menudo utilizamos "GNU" en sus nombres.
+</p>
+<p>
+Es cosa de los desarrolladores de un programa decidir si quieren
+contribuir con él y hacerlo un paquete GNU. Si has escrito un programa
+y te gustaría que fuera un paquete GNU, escribe a <a
+href="mailto:address@hidden";>&lt;address@hidden&gt;</a>, de modo que podamos
+evaluarlo y decidir si lo queremos o no.
+</p>
+<p>
+No sería apropiado poner el nombre GNU en cada programa distribuido
+bajo los términos de la GPL. Si escribes un programa y lo distribuyes
+bajo la GPL, no implica que el Proyecto GNU lo haya escrito o que lo
+hayas escrito para nosotros. Por ejemplo, el kernel Linux se
+distribuye bajo los términos de la GNU GPL, pero Linus no lo escribió
+como parte del Proyecto GNU; hizo el trabajo de forma independiente.
+Si algo no es un paquete GNU, el Proyecto GNU no puede pedir 
+reconocimiento por él, y por tanto poner "GNU" en su nombre sería
+impropio.
+</p>
+<p>
+En contraste, reclamamos el reconocimiento global del sistema
+operativo GNU como un todo, incluso cuando no lo hacemos de todos
+los programas que lo componen. El sistema existe como sistema gracias
+a nuestra determinación y persistencia, desde 1984, muchos años antes
+de que Linux comenzara.
+</p>
+<p>
+El sistema operativo donde se hizo popular Linux era básicamente el 
+sistema operativo GNU. No era exactamente el mismo, ya que tenía un 
+kernel distinto, pero en términos generales podríamos equipararlos.
+Era una variante de GNU. Era el sistema GNU/Linux.
+</p>
+<p>
+Linux continúa siendo utilizado en derivaciones del sistema GNU; en
+las versiones actuales del sistema GNU/Linux. Lo que aporta la
+identidad a esos sistemas es GNU y Linux en su centro, no 
+Linux solo.
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCunix" name="unix">Dado que mucho de GNU proviene de
+         Unix, ¿no debería GNU dar crédito a Unix utilizando "Unix"
+         en el nombre del sistema?</a></h4></dt>
+
+<dd>
+De hecho, nada de GNU proviene de Unix. Unix era software propietario (y
+lo sigue siendo), por lo que utilizar su código para GNU hubiera
+sido ilegal. Esto no es una coincidencia; es por eso que comenzamos a 
+desarrollar GNU: dado que no podiamos tener libertad al utilizar Unix,
+ni otro de los sistemas operativos de entonces, necesitabamos un 
+sistema libre para reemplazarlo. No podiamos copiar programas, o
+partes de programas, de Unix; todo tenía que ser escrito de nuevo.
+<p>
+Ningun código de GNU proviene de Unix, pero GNU es un sistema compatible
+con Unix; por tanto, muchas de las ideas y especificaciones de GNU 
+provienen de Unix. El nombre "GNU" es una forma humorística de 
+dar crédito a Unix, siguiendo la tradición hacker  de acrónimos 
+recursivos que comenzó en los años setenta.
+</p>
+<p>
+El primer acrónimo recursivo fué TINT, "TINT Is Not TECO". El autor
+de TINT había escrito una implementación de TECO (había muchas
+implementaciones  de TECO, para varios sistemas), pero en lugar de
+llamarlo algo como "algo TECO", le puso un nombre divertido e 
+ingenioso. (Esto es lo que significa hackear: recrearse en lo 
+inteligente).
+</p>
+<p>
+Este nombre gustó tanto a otros hackers que acabaron imitando la
+técnica. Llegó a ser una tradición que, cuando se escribía una versión
+de un programa desde cero (llamémoslo "Klever"), se le llamaba con un 
+acrónimo recursivo, como "MINK" para "MINK Is Not Klever". En el 
+mismo espíritu nosotros llamamos a nuestro reemplazo de Unix
+"GNU's Not Unix".
+</p>
+<p>
+Históricamente, ATT (que desarrolló Unix) no dió permiso a nadie
+para utilizar el nombre "Unix" al denominar sistemas similares. 
+Lo prohíben incluso si el sistema tiene código de Unix, y aun si
+el sistema es 99% Unix. A ATT le gusta tan poco recibir ese tipo
+de crédito por Unix que seguramente te demandaría por violación de
+Trademark. Esa es la razón de que las versiones de Unix (todas ellas
+tan propietarias como Unix), distribuidas por varias compañias de
+software, tengan todas otros nombres.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCbsd" name="bsd">¿Tambien deberíamos decir "GNU/BSD"?
+</a></h4></dt>
+
+<dd>
+No, eso no encajaría con la realidad histórica de los sistemas BSD.
+<P>
+El sistema BSD fué desarrollado por la UC Berkeley como software no
+libre en los años ochenta, y llegó a ser libre al comienzo de los
+noventa. De hecho, si encuentras un sistema operativo libre hoy
+en dia, seguramente se trate o bien de una variante de GNU, o un 
+BSD.
+</P>
+<P>
+La gente a veces pregunta si BSD también es una variante de GNU, como
+GNU/Linux. No lo es. Los desarrolladores de BSD lo liberaron tras
+el ejemplo del Proyecto GNU, y ocurre que explícitamente algunos 
+activistas de GNU los convencieron para ello. Pero el código tiene
+poco que ver con GNU.
+</P>
+<P>
+Los sistemas BSD actuales utilizan algunos paquetes GNU, igual 
+que el sistema GNU utiliza algunos programas BSD; sin embargo, 
+considerados como un todo, son dos sistemas distintos que 
+evolucionan de forma separada. Los desarrolladores de BSD no
+escribieron un kernel y lo añadieron al sistema GNU, por lo que
+un nombre como GNU/BSD no tendría mucho sentido.
+</P>
+<P>
+La relación entre GNU/Linux y GNU es mucho mayor, y es por eso
+por lo que el nombre "GNU/Linux" si es apropiado en este caso.
+</P>
+<P>
+Existe un proyecto para desarrollar una versión de GNU que
+utiliza el kernel de FreeBSD. Sus desarrolladores lo llaman
+"Debian GNU/FreeBSD", pero sería mejor llamarlo "GNU/kerneldeBSD",
+ya que FreeBSD es el sistema completo, no únicamente el kernel. 
+El llamarlos "sistema Linux" y "sistema BSD" daría lugar a una
+impresión equivocada de que son sistemas distintos. Sería igual
+para el usuario que un sistema Debian GNU/Linux.
+</P>
+</dd>
+
+<dt><h4><a href="#TOCjustlinux" name="justlinux">¿Podrían existir
+         sistemas basados en Linux sin GNU?</a></h4></dt>
+
+<dd>
+Es posible montar un sistema que utilice Linux como kernel y no esté
+basado en GNU. Parece que hay sistemas pequeños, para sistemas
+empotrados, que incluyen Linux pero no el sistema GNU. Tambien se
+ha rumoreado que IBM está planeando utilizar Linux como kernel de
+AIX; sea cierto o no el rumor, lo cierto es que es teóricamente posible.
+¿Qué conclusiones podemos sacar de llo a la hora de llamar a los
+distintos sistemas?
+<p>
+La gente que opina que el kernel es mas importante que las demas 
+piezas del sistema dicen: "Todos ellos contienen a Linux, por lo que 
+debemos llamarlos a todos sistemas Linux". Pero los sistemas son
+muy distintos, y llamarlos por el mismo nombre da lugar a confusión
+(empujan a la gente a compartir la idea de que el kernel es mas
+importante que el resto del sistema, por ejemplo).
+</p>
+<p>
+En los sistemas empotrados pequeños, Linux es casi todo el sistema. En
+estos casos, el nombre apropiado podría ser "sistemas Linux". Pero son
+muy distintos de los sistemas GNU/Linux, que son mas GNU que Linux. El
+hipotético sistema de IBM sería distinto tambien. Su nombre correcto
+sería AIX/Linux: básicamente AIX, pero con Linux como kernel. Estos
+nombres indicarían al usuario la realidad de que los sistemas son
+distintos entre sí.
+</p>
+</dd>
+
+<dt><h4><a href="#TOChelplinus" name="helplinus">¿Por qué no llamais
+         al sistema  "Linux", despues de todo, y así fortaleceis el
+         papel de Linus Torvalds como el "posterboy" de nuestra
+         comunidad?</a></h4></dt>
+
+<dd>
+Linus Torvalds es el "posterboy" (apelativo escogido por otros, no
+por nosotros) para sus intereses, no para los nuestros. Su objetivo es
+hacer el sistema mas popular, y piensa que su aportación a la sociedad
+es únicamente práctica: su potencia, fiabilidad y facilidad de
+obtención. Él nunca ha considerado la libertad de cooperar como un
+principio ético, y es la razón por la que el nombre "Linux" tiene poco 
+que ver con ese principio.
+<p>
+Linus hace pública su discrepancia con los ideales del movimiento del 
+Software Libre. Desarrolla software no libre (lo dijo antes de una 
+conferencia en el "Linux"World), y obliga a sus compañeros
+desarrolladores de Linux a utilizar software no libre para acceder a
+su repositorio de fuentes. Incluso va mas lejos, y censura a la gente
+que sugiere que la ingeniería y la ciencia debería considerar las 
+consecuencias sociales de nuestro trabajo técnico; despreciando asi 
+las lecciones sociales aprendidas del desarrollo de la bomba
+atómica. 
+</p>
+<p>
+No hay nada malo en escribir un programa libre para aprender y
+divertirse; el kernel Linux, escrito por esos motivos, ha sido una
+contribución crucial a nuestra comunidad. Pero esas no son las 
+motivaciones que han hecho que exista un sistema completo y libre, 
+GNU/Linux. Esas motivaciones tampoco mantendrán segura nuestra
+libertad en el futuro. El público necesita saber esto.
+Linus tiene el derecho de promocionar sus puntos de vista; pero 
+nosotros pensamos que nuestro mayor trabajo y experiencia debe
+aplicarse a promocionar los nuestros.
+</p>
+</dd>
+
+<dt><h4><a href="#TOClost" name="lost">La batalla ya ha sido perdida;
+         la sociedad ha hecho su decisión y no podemos
+         cambiarlo. ¿Por qué seguis pensando en ello?</a></h4></dt>
+
+<dd>
+Esto no es una batalla: es una campaña de educación. El como llamar al
+sistema no es una decisión única, tomada en cada momento por la
+"sociedad": cada persona, cada organización, puede decidir qué nombre
+utilizar.  No puedes convencer a los demas de que utilicen
+"GNU/Linux", pero puedes comenzar a llamarlo así tu mismo; y al
+hacerlo, nos ayudas mucho.
+</dd>
+
+<dt><h4><a href="#TOCwhatgood" name="whatgood">La sociedad ya ha tomado
+         su decisión, y no podemos cambiarlo. ¿Qué avanzo si llamo al
+         sistema "GNU/Linux"?</a></h4></dt>
+
+<dd>
+Esto no es una situación de todo o nada. Si llamas al sistema
+"GNU/Linux", ayudarás a otros a comprender la historia real del
+sistema, así como sus orígenes y su razón de existir. No puedes
+acabar con la confusión de nombres en todas partes por tí mismo, o mas
+que nosotros, pero puedes ayudar. Si algunos cientos de personas te
+escuchan utilizar el término "GNU/Linux", es mejor que nadie lo
+haga. Y alguno de ellos ayudará a expandir la corrección a los demas.
+</dd>
+
+<dt><h4><a href="#TOCexplain" name="explain">¿No sería mejor llamar al
+         sistema "Linux", y enseñar a la gente su origen real en una
+         explicación de diez minutos?</a></h4></dt>
+
+<dd>
+Si nos ayudas explicando a la gente los orígenes del sistema de ese modo,
+apreciamos tu esfuerzo; pero no es el mejor método. No es tan 
+efectivo como llamar al sistema "GNU/Linux", y desaprovecha tu
+valioso tiempo.
+<p>
+Es inefectivo porque puede no dar resultado, y seguramente no
+se propagará. Algunas de las personas que escuchen tu explicación
+prestarán atención, y podrían asimilar el panorama correcto del
+origen del sistema. Pero es difícil que después repitan la
+explicación a otros cuando hablan acerca del sistema. Seguramente lo
+llamarán "Linux". Sin un empeño especial para ello, ayudarán a 
+propagar la imagen incorrecta.
+</p>
+<p>
+Es ineficiente porque te llva mucho mas tiempo. El decir y escribir
+"GNU/Linux" te llevará unos pocos segundos al dia, no minutos; por
+tanto puedes esperar alcanzar a mas gente de este modo. El distinguir
+entre Linux y GNU/Linux cuando se habla y se escribe es de lejos
+la forma mas facil de ayudar al Proyecto GNU.
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCtreatment" name="treatment">Alguna gente se rie
+         de vosotros cuando les pedis que llamen GNU/Linux al
+         sistema. ¿Por qué os someteis a ese tratamiento?</a></h4></dt>
+
+<dd>
+El denominar al sistema "Linux" lleva a que la gente tenga una imagen
+equivocada de la historia del sistema, y de las razones de su
+existencia. La gente que se rie de nuestras peticiones seguramente han
+asumido esa imagen errónea; piensan que nuestro trabajo fué hecho por
+Linus, y por eso se ríen cuando reclamamos reconocimiento por él.
+Si conocieran la verdad, seguramente no reirían.
+<p>
+¿Por qué asumimos el riesgo de hacer una petición que algunas veces
+lleva a que la gente nos ridiculice?. Porque a menudo lleva a
+resultados muy útiles que ayudan al Proyecto GNU. Correremos el riesgo
+de sufrir abusos para alcanzar nuestros objetivos.
+</p>
+<p>
+Si eres sujeto de una situación desagradable, por favor no te sientas
+intimidado por ello. Enseña a la gente que se ríe la historia
+real. Cuando escuchen el por qué tu petición está justificada,
+aquellos que tengan un mínimo de sentido dejarán de reir.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCalienate" name="alienate">Alguna gente se enfada
+         y os condena cuando les pedis que llamen GNU/Linux al
+         sistema. ¿No perdeis al predisponerlos en vuestra
+         contra?</a></h4></dt> 
+
+<dd>
+No mucho. Es dificil que la gente que no aprecia nuestro papel en el 
+desarrollo del sistema quiera hacer esfuerzos sustanciales para 
+ayudarnos. Aun si ellos efectuan algun trabajo que ayuda a nuestros 
+fines, como distribuir Software Libre, casi siempre es por otras
+razones, no porque quieran ayudarnos. Ademas, si enseñan a la
+gente que nuestro trabajo fué hecho por algun otro, están
+desfavoreciendo que otros nos ayude.
+<p>
+No tiene sentido preocuparse por predisponer en contra a gente que
+de por si no coopera, y resulta masoquista no resolver un
+problema por no molestar a la gente que ayuda a perpetuarlo. Por
+tanto,  continuaremos intentando arreglar la confusión.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCwhynotsue" name="whynotsue">¿Por qué no demandar
+         a la gente que llama "Linux" al sistema?</a></h4></dt>
+
+<dd>
+No existen suficientes motivos legales para demandarlos, pero aunque
+fuera asi nunca lo haríamos, dado que creemos en la libertad de
+expresión. Pedimos a la gente que llame "GNU/Linux" al sistema porque
+es lo correcto, nada mas.
+</dd>
+
+<dt><h4><a href="#TOCrequire" name="require">Shouldn't you put something in
+    the GNU GPL to require people to call the system "GNU"?</a></h4></dt>
+
+<dd>
+El propósito de la GNU GPl es proteger la libertad de los usuarios de
+quienes pudieran hacer versiones propietarias de algun software
+libre. Aunque es cierto que la gente que llama "Linux" al sistema a
+menudo hacen otras cosas que limitan la libertad del usuario (como
+añadir software propietario al sistema GNU/Linux, o incluso
+desarrollando software no libre), el mero acto de la nomenclatura no
+implica denegar ninguna libertad. Parece impropio el que la GPL
+limite el como la gente llame al sistema.
+</dd>
+
+<dt><h4><a href="#TOCdeserve" name="deserve">Dado que no incluísteis
+       nada acerca de nomenclatura, os habeis buscado que la gente
+       llame "Linux" al sistema. ¿Por qué pedis lo contrario
+       ahora?</a></h4></dt> 
+
+<dd>
+Esta pregunta presupone una premisa ética (algunas veces dada a
+controversias): si la gente no te fuerza a tratarla bien, puedes sacar
+provecho de ello. En otras palabras: aprovechate todo lo que puedas.
+<p>
+Esperamos que difieras de ese pensamiento tanto como nosotros.
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCcontradict" name="contradict">¿No sería mejor que
+       no contradijerais algo en lo que cree mucha
+       gente?</a></h4></dt>
+
+<dd>
+No creemos que debamos dar la razon a la gente que no la tiene, solo
+porque son muchos. Esperamos que tu tambien decidas que la verdad es
+lo importante, y no cuanta gente cree en ella.
+<p>
+Nunca hubieramos podido desarrollar un sistema operativo libre sin 
+desafiar la creencia, dada por cierta por la mayoría de la gente
+entonces, de que el software propietario es legítimo y aceptable.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCsomanyright" name="somanyright">Dado que mucha
+gente llama "Linux" al sistema, ¿no hace eso que tengan
+razon?</a></h4></dt>
+
+<dd>
+Pensamos que la popularidad de un error no lo hace mas cierto.
+</dd>
+
+<dt><h4><a href="#TOCwinning" name="winning">Mucha gente se preocupa
+       mas de qué es conveniente, o quien está ganando, que de
+       argumentos de verdad o falsedad. ¿No podriais ganaros su apoyo
+       de otra manera?</a></h4></dt>
+
+<dd>
+El preocuparse únicamente acerca de qué es conveniente o quien está
+ganando es una aproximación amoral a la vida. El software no libre es
+un ejemplo de esta amoralidad, y se alimenta de ella. Por tanto sería
+autodestructivo el adoptar esa postura. Continuaremos hablando en
+términos de verdad y falsedad.
+<p>
+Esperamos que tu seas de aquellos para los que lo correcto y lo
+incorrecto importa.
+</p>
+</dd>
+
+
+<HR />
+
+<P>
+Copyright (C) 2001 Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA  02110,  USA
+</P>
+<p>
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: proyecto/gnu-linux-faq.xhtml
===================================================================
RCS file: proyecto/gnu-linux-faq.xhtml
diff -N proyecto/gnu-linux-faq.xhtml
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ proyecto/gnu-linux-faq.xhtml        3 Mar 2012 06:15:13 -0000       1.1
@@ -0,0 +1,1110 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - GNU/Linux FAQ</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<H3>GNU/Linux FAQ</H3>
+<p>
+por <STRONG>Richard Stallman</STRONG>
+</p>
+
+<p>
+<A HREF="/Images/gnu-head.html"><IMG SRC="/Images/gnu-head.jpg"
+   ALT=" [imagen de la cabeza de un GNU] "
+   WIDTH="129" HEIGHT="122"></IMG></A>
+</p>
+
+<P>
+Cuando la gente ve que recomendamos el uso del nombre GNU/Linux para
+referirnos a un sistema que mucha otra gente denomina simplemente
+"Linux", y no lo comprende, reacciona con curiosidad. Aquí se exponen
+las preguntas mas comunes, y nuestras respuestas.
+</P>
+
+
+<ul>
+
+<li><a href="#why" name="TOCwhy">¿Por qué llamais al sistema GNU/Linux,
+y no Linux?</a></li>
+
+<li><a href="#whycare" name="TOCwhycare">¿Por qué esta cuestión de
+nomenclatura es tan importante?</a></li>
+
+<li><a href="#howerror" name="TOChowerror">¿Cómo se ha llegado a que
+    la mayoría de la gente llame "Linux" al sistema?</a></li>
+
+<li><a href="#linuxalone" name="TOClinuxalone">¿Habría tenido Linux
+    tanto éxito si no hubiera existido GNU?</a></li>
+
+<li><a href="#divide" name="TOCdivide">¿No sería mejor para la
+    comunidad si no dividierais a la gente con esta petición?</a></li>
+
+<li><a href="#freespeech" name="TOCfreespeech">¿No apoya el Proyecto
+         GNU la libertad de expresión de cada uno para llamar al
+         sistema como se quiera?</a></li>
+
+<li><a href="#tools" name="TOCtools">¿Es GNU una colección de
+herramientas de desarrollo que fueron incluidas en Linux?</a></li>
+
+<li><a href="#osvskernel" name="TOCosvskernel">¿Cual es la diferencia
+         entre un sistema operativo y un kernel?</a></li>
+
+<li><a href="#afterkernel" name="TOCafterkernel">Estamos llamando al
+         sistema completo como el kernel, Linux. ¿Es normal denominar
+         un sistema operativo como su kernel?</a></li>
+
+<li><a href="#long" name="TOClong">Hay un problema con "GNU/Linux": es
+         demasiado largo. ¿No sería mejor recomendar un nombre mas
+         corto?</a> </li>
+
+<li><a href="#justgnu" name="TOCjustgnu">Dado que Linux es una
+         contribución secundaria, ¿sería faltar a los hechos el llamar
+         al sistema simplemente "GNU"?</a></li>
+
+<li><a href="#many" name="TOCmany">Muchos otros proyectos han
+         contribuido al sistema tal y como es hoy en dia; eso incluye
+         TeX, X11, Apache, Perl, y muchos mas programas. ¿No implican
+         vuestros argumentos que debemos darles crédito por el
+         sistema? (Pero eso llevaría a un nombre tan largo que sería
+         absurdo).</a> </li>
+
+<li><a href="#whyslash" name="TOCwhyslash">¿Por qué escribis
+         "GNU/Linux" en lugar de "GNU Linux"?</a></li>
+
+<li><a href="#whyorder" name="TOCwhyorder">¿Por qué "GNU/Linux" y
+         no "Linux/GNU"?</a></li>
+
+<li><a href="#companies" name="TOCcompanies">¿No sería mas efectivo 
+pedir a compañías como Mandrake, Red Hat e IBM que llamen a sus
+distribuciones "GNU/Linux", en lugar de pedírselo a individuos?</a> </li>
+
+<li><a href="#reserve" name="TOCreserve">¿No sería mejor reservar el
+         nombre "GNU/Linux" para las distribuciones compuestas
+         únicamente de Software Libre? Despues de todo, ese es el
+         ideal de GNU.</a></li>
+
+<li><a href="#gnudist" name="TOCgnudist">¿Por qué no hacer una
+         distribución GNU de Linux (sic) y llamarla GNU/Linux?</a></li>
+
+<li><a href="#linuxgnu" name="TOClinuxgnu">¿Por qué no decir
+         simplemente que "Linux es el kernel GNU", y distribuir
+         alguna versión existente de GNU/Linux bajo el nombre de 
"GNU"?</a></li>
+
+<li><a href="#condemn" name="TOCcondemn">¿Condenó y se opuso el Proyecto GNU al
+         uso de Linux en los primero dias del Proyecto?</a></li>
+
+<li><a href="#allgpled" name="TOCallgpled">¿Debería aplicarse la
+         convención GNU/[nombre] a todos los programas licenciados
+         con la licencia GPL?</a></li>
+
+<li><a href="#unix" name="TOCunix">Dado que mucho de GNU proviene de
+         Unix, ¿no debería GNU dar crédito a Unix utilizando "Unix"
+         en el nombre del sistema?</a></li>
+         
+<li><a href="#bsd" name="TOCbsd">¿Tambien deberíamos decir "GNU/BSD"?</a></li>
+
+<li><a href="#justlinux" name="TOCjustlinux">¿Podrían existir sistemas
+         basados en Linux sin GNU?</a></li>
+
+<li><a href="#helplinus" name="TOChelplinus">¿Por qué no llamais al
+         sistema "Linux", despues de todo, y así fortaleceis el papel
+         de Linus Torvalds como el "posterboy" de nuestra comunidad?</a></li>
+
+<li><a href="#lost" name="TOClost">La batalla ya ha sido perdida; la
+         sociedad ha hecho su decisión y no podemos cambiarlo. ¿Por
+         qué seguis pensando en ello?</a></li>
+
+<li><a href="#whatgood" name="TOCwhatgood">La sociedad ya ha tomado su
+         decisión, y no podemos cambiarlo. ¿Qué avanzo si llamo al
+         sistema "GNU/Linux"?</a></li>
+    
+<li><a href="#explain" name="TOCexplain">¿No sería mejor llamar al
+         sistema "Linux", y enseñar a la gente su origen real en una
+         explicación de diez minutos?</a></li>
+
+<li><a href="#treatment" name="TOCtreatment">Alguna gente se rie de vosotros
+         cuando les pedis que llamen GNU/Linux al sistema. ¿Por qué
+         os someteis a ese tratamiento?</a></li>
+
+
+<li><a href="#alienate" name="TOCalienate">Alguna gente se enfada y os
+         condena cuando les pedis que llamen GNU/Linux al
+         sistema. ¿No perdeis al predisponerlos en vuestra contra?</a></li>
+
+<li><a href="#whynotsue" name="TOCwhynotsue">¿Por qué no demandar a la
+         gente que llama "Linux" al sistema?</a></li>
+
+<li><a href="#require" name="TOCrequire">¿No deberíais añadir algo a
+         la GNU GPL para forzar a la gente a llamar al sistema "GNU"?</a></li>
+
+<li><a href="#deserve" name="TOCdeserve">Dado que no incluísteis nada
+         acerca de nomenclatura, os habeis buscado que la gente llame
+         "Linux" al sistema. ¿Por qué pedis lo contrario ahora?</a></li>
+
+<li><a href="#contradict" name="TOCcontradict">¿No sería mejor que no
+         contradijerais algo en lo que cree mucha gente?</a></li>
+
+<li><a href="#somanyright" name="TOCsomanyright">Dado que mucha gente
+         llama "Linux" al sistema, ¿no hace eso que tengan
+         razon?</a></li>
+
+<li><a href="#winning" name="TOCwinning">Mucha gente se preocupa mas
+         de qué es conveniente, o quien está ganando, que de
+         argumentos de verdad o falsedad. ¿No podriais ganaros su
+         apoyo de otra manera?</a></li>
+
+
+</ul>
+
+<p>
+<hr />
+</p>
+
+<dt><h4><a href="#TOCwhy" name="why">¿Por qué llamais al sistema
+    GNU/Linux, y no Linux?</a></h4></dt>
+
+<dd>La mayoría de las distribuciones de sistemas operativos que
+utilizan Linux como kernel son básicamente versiones modificadas del
+sistema operativo GNU. Comenzamos a desarrollar GNU en 1984, años
+antes de que Linus Torvalds escribiera su kernel, y desarrollamos una
+parte mayor del sistema resultante que cualquier otro proyecto. En
+justicia, deberíamos tener el mismo tipo de reconocimiento.
+<P>
+Lea <a href="/gnu/linux-and-gnu.es.html">"Linux y el Proyecto
+GNU" (http://www.gnu.org/gnu/linux-and-gnu.es.html)</a> para una explicación
+mas amplia, y <a href="/gnu/the-gnu-project.es.html">"El Proyecto
+GNU" (http://www.gnu.org/gnu/the-gnu-project.es.html)</a> donde
+encontrará algo de historia.
+</P>
+</dd>
+
+<dt><h4><a href="#TOCwhycare" name="whycare">¿Por qué esta cuestión de
+    nomenclatura es tan importante?</a></h4></dt>
+
+<dd>Pese a que los desarrolladores del kernel Linux están
+contribuyendo a la comunidad del Software Libre, muchos de ellos no
+muestran una especial preocupación por la libertad. La gente que
+piensa que el sistema completo es Linux tiende a confundirse, y
+achacar a los desarrolladores del kernel un papel en nuestra comunidad
+que de hecho no interpretaron. Simplemente dan un peso
+desproporcionado a los puntos de vista de esos desarrolladores.
+
+<P>
+El llamar al sistema GNU/Linux es un reconocimiento al papel que
+nuestro idealismo jugó a la hora de construir nuestra comunidad, y <A
+HREF="/gnu/why-gnu-linux.es.html">ayuda al público a apreciar la
+importancia práctica de dichos ideales</A>.
+
+</P>
+</dd>
+
+
+<dt><h4><a href="#TOChowerror" name="howerror">¿Cómo se ha llegado a
+    que la mayoría de la gente llame "Linux" al sistema?</a></h4></dt>
+
+<dd>El denominar "Linux" al sistema es una confusión que simplemente
+se ha extendido mas rápido que la contrapartida real.
+
+<p>
+La gente que adaptó el kernel Linux para funcionar en el sistema GNU
+no se imaginaba hasta donde llevaría su trabajo. Comenzaron con el 
+kernel, y añadieron pieza a pieza el sistema GNU. Llegó un momento en
+que producían algo que tenía mas de GNU que de Linux, pero no le dieron
+importancia, y continuaron llamandolo "Linux", pese a que esa
+denominación ya no era fiel a la verdad. A nosotros nos llevó algunos
+años reconocer el problema, y comenzar a rogar a la gente corregir
+esa práctica. Desgraciadamente, la confusión ya estaba ampliamente
+difundida.
+</p>
+<p>
+La mayoría de la gente que llama "Linux" al sistema nunca han oido el
+por qué eso no es correcto. Simplemente oyen a otras personas
+utilizando ese nombre, y comprensiblemente asumen que así debe
+ser. Además, la denominación "Linux" ayuda a expander un panorama
+falso acerca de los orígenes del sistema. Por ejemplo, mucha gente
+cree que el desarrollo del sistema comenzó en 1991 de la mano de Linus
+Torvalds. Esta idea de los orígenes del proyecto tiende a
+reforzar la falsa impresión de que el nombre correcto del sistema es
+"Linux". 
+</p>
+
+<p>
+De hecho, la mayoría de las preguntas presentes en este fichero representan los
+intentos de la gente para encontrar una justificación al nombre que
+les fué enseñado como del sistema.
+</p>
+</dd>
+
+<dt><h4><a href="#TOClinuxalone" name="linuxalone">¿Habría tenido
+    Linux tanto éxito si no hubiera existido GNU?</a></h4></dt>
+
+<dd>
+En ese mundo hipotético, hoy en día no existiría nada como el sistema
+GNU/Linux, y probablemente ningun sistema operativo libre. Hay otros
+kernels libres aparte de Linux, pero no compiladores optimizadores
+libres como GCC.
+
+<p>
+Linus Torvalds podría haber escrito un kernel tipo Unix en 1991, aun
+sin el ejemplo de GNU. Pero seguramente no hubiera sido Software
+Libre, ya que Linux se liberó en 1992 cuando Linus lo distribuyó bajo
+los términos de la licencia GNU GPL. (Ver las notas de distribución
+del a versión 0.12. de Linux). En cualquier caso, un kernel aislado no
+hubiera sido tan tremendamente efectivo como la combinación GNU/Linux.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCdivide" name="divide">¿No sería mejor para la
+    comunidad si no dividierais a la gente con esta
+    petición?</a></h4></dt>
+
+<dd>
+Cuando pedimos a la gente que diga "GNU/Linux", no la estamos
+dividiendo. Nuestra petición está orientada a dar al Proyecto GNU el
+crédito que se merece por el sistema operativo GNU. Esto no implica
+crítica ninguna a nadie, o restar méritos a los demas.
+
+<p>
+Sin embargo, hay gente a la que no le gusta que digamos
+"GNU/Linux". Algunas veces nos critican en respuesta y en ocasiones
+esas críticas llegan a tal magnitud que nos preguntamos si
+intencionadamente no estarán tratando de intimidarnos hasta hacer que
+nos callemos. Esa actitud no solo fracasa en el objetivo de silenciarnos,
+sino que tiende a dividir a la comunidad. Por ello esperamos que
+podais convencerlos de que paren.
+</p>
+
+<p>
+En todo caso, esa es solo una causa secundaria de la división de
+nuestra comunidad. La mayor división existe entre la gente que aprecia
+el Software Libre como una cuestión social y ética, considerando el
+software propietario como un problema social (gente que apoya y ayuda
+al movimiento del Software Libre), y aquella que solo tienen en cuenta
+los beneficios practicos, y exponen el Software Libre solo como un
+modelo de desarrollo eficiente (el movimiento OpenSource).
+</p>
+<p>
+Este desacuerdo no solo es una cuestión de nomenclatura, sino que
+abarca una diferencia conceptual básica. Es esencial para la comunidad
+darse cuenta de esta diferencia, y pensar acerca de ella. Los nombres
+"Software Libre" y "open source" son los eslóganes de las dos
+posiciones. Lee <a
+href="{$gnues}/philosophy/open-source-misses-the-point.es.html">"Por qué 
Software
+Libre es mejor que Open Source"
+(http://www.gnu.org/philosophy/open-source-misses-the-point.es.html)</a>.
+</p>
+<p>
+Las diferencias se ven en parte reflejadas en la cantidad de gente que
+tiene en cuenta el papel del Proyecto GNU en nuestra comunidad. La
+gente que aprecia la libertad es mas dada a llamar al sistema
+"GNU/Linux", y la gente que aprende por qué se llama "GNU/Linux" al
+sistema casi siempre acaba prestando atención a nuestros argumentos
+filosóficos relativos a la libertad y la comunidad (esta es la razón
+por la que la nomenclatura es importante en la sociedad). Sin embargo,
+los desacuerdos probablemente seguirán existiendo aunque todo el mundo
+conozca y comprenda los orígenes del sistema y su nombre
+apropiado. El conflicto solo puede superarse si quienes valoramos la
+libertad convencemos a todo el mundo para hacer lo mismo (lo que no
+será facil), o seamos derrotados definitivamente (esperemos que no).
+</p>
+</dd>
+
+<dt><h4><a href="#TOCfreespeech" name="freespeech">¿No apoya el
+       Proyecto GNU la libertad de expresión de cada uno para llamar
+       al sistema como se quiera?</a></h4></dt>
+<dd>
+Por supuesto; creemos firmemente que tienes la libertad de expresión
+de llamar al sistema como te plazca. Pedimos a la gente que lo llame
+GNU/Linux como una cuestión de hacer justicia con el Proyecto GNU,
+para promover los valores morales en los que se basa GNU, y para informar a los
+demas que son esos valores los que hacen posible la existencia del
+sistema. 
+</dd>
+
+<dt><h4><a href="#TOCtools" name="tools">¿Es GNU una colección de
+herramientas de desarrollo que fueron incluidas en Linux?</a></h4></dt>
+
+<dd>
+A menudo las personas que piensan que Linux es un sistema operativo completo, y
+han escuchado mencionar a GNU, tienen una idea equivocada de lo que es
+GNU. Pueden pensar que GNU es el nombre de una colección de programas;
+a menudo hablan acerca de "herramientas de desarrollo", debido a que
+algunos de nuestros programas de desarrollo han adquirido mucha
+popularidad por si mismos. La idea de que "GNU" es el nombre de un
+sistema operativo se torna entonces dificil de introducir en un
+entorno conceptual donde ese sistema operativo es llamado "Linux".
+
+<p>
+El Proyecto GNU adquirió su nombre del sistema operativo GNU; es el
+proyecto para desarrollar el sistema GNU. (Ver <a
+href="{$gnues}/gnu/initial-announcement.html">el anuncio inicial del Proyecto
+de 1983 en
+&lt;http://www.gnu.org/gnu/initial-announcement.es.html&gt;</a>.)
+</p>
+<p>
+Se desarrollaron programas como GCC, GNU Emacs, GAS, GLIBC, BASH,
+etc., debido a que los necesitabamos para formar parte del sistema
+operativo GNU. GCC, el GNU Compiler Collection es el compilador que 
+creamos para el sistema operativo GNU. Escribimos asimismo
+Ghostscript, GNUCash, GNU Chess y GNOME, pese a que no son
+herramientas de desarrollo.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCosvskernel" name="osvskernel">¿Cual es la
+       diferencia entre un sistema operativo y un kernel?</a></h4></dt>
+
+<dd>
+Tal como entendemos el término, un sistema operativo consiste en una
+colección de programas suficientes para que un ordenador efectue una
+amplia variedad de tareas. Un sistema operativo de propósito general, 
+para que sea completo, necesita poder manejar todos los trabajos que
+un usuario quiera llevar a cabo.
+
+<p>
+El kernel es uno de los programas de que se compone un sistema
+operativo; el programa que gestiona los recursos de la máquina para
+que otros programas puedan disponer de ellos. El kernel tambien se 
+ocupa de arrancar y parar otros programas.
+</p>
+<p>
+Debido a la confusión, algunas personas utilizan el término "sistema
+operativo" cuando realmente se refieren al "kernel". Ambos usos del
+término se remontan atras muchos años. La utilización de "sistema
+operativo" para referirse al kernel puede encontrarse en algunos
+libros de texto de diseño de sistemas, allá por los años ochenta. 
+También en los ochenta, se entendía que el "sistema operativo Unix"
+incluía todos los programas de sistema, y la versión Unix de Berkeley
+incluso comprendía algunos juegos. Como GNU es un sistema operativo
+tipo Unix, utilizamos el término "sistema operativo" con su acepción
+tradicional cuando se habla de Unix.
+</p>
+
+<p>
+Cuando la gente habla del "sistema operativo Linux", se refieren a lo
+mismo que nosotros llamamos "sistema operativo GNU": se refieren a 
+todos los programas del sistema. Si quieres referirte a ello, por
+favor llámalo "GNU/Linux". Si te refieres al kernel, entonces "Linux"
+es el nombre correcto para llamarlo. Sin embargo, es bueno añadir la
+palabra "kernel" para evitar ambigüedades acerca de a qué te estas
+refiriendo. 
+</p>
+
+</dd>
+
+<dt><h4><a href="#TOCafterkernel" name="afterkernel">Estamos llamando
+         al sistema completo como el kernel, Linux. ¿Es normal
+         denominar un sistema operativo como su kernel?</a></h4></dt>
+
+<dd>
+Esa práctica parece ser muy rara; no podemos encontrar otros ejemplos
+semejantes al mal uso del nombre "Linux". Normalmente, un sistema 
+operativo es desarrollado como un único proyecto, y los
+desarrolladores escogen un nombre para el sistema global. Generalmente
+el kernel no dispone de un nombre para él solo.
+
+</dd>
+
+<dt><h4><a href="#TOClong" name="long">Hay un problema con
+         "GNU/Linux": es demasiado largo. ¿No sería mejor recomendar
+         un nombre mas corto?</a></h4></dt>
+
+<dd>
+Por un tiempo probamos con el nombre "LiGNUx", que combina las
+palabras "GNU" y "Linux". La reacción fué muy mala. La gente acepta
+"GNU/Linux"  mas facilmente.
+
+<p>
+El nombre legítimo mas corto para este sistema es "GNU", pero los
+llamamos "GNU/Linux" por las razones dadas mas adelante.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCjustgnu" name="justgnu">Dado que Linux es una
+         contribución secundaria, ¿sería faltar a los hechos el
+         llamar al sistema simplemente "GNU"?</a></h4></dt>
+
+<dd>
+Ciertamente, no sería faltar a los hechos, pero consideramos que no 
+sería apropiado hacerlo. Estas son las razones por las que nosotros
+llamamos al sistema "GNU/Linux", y no "GNU" a secas:
+
+<ul>
+<li>
+El sistema no es exactamente GNU; tiene un kernel distinto (esto es,
+Linux). Distinguir entre GNU/Linux y GNU es útil.</li>
+<li>
+Sería muy grosero pedir a la gente que <em>parara</em> de dar ningún
+crédito a Linus Torvalds; él escribió un componente importantísimo del
+sistema. Nosotros queremos ser reconocidos por comenzar y mantener el 
+desarrollo del sistema, pero eso no implica que debamos tratar a Linus
+igual que los que llaman al sistema "Linux" nos tratan a
+nosotros. Discrepamos en gran medida de las ideas políticas de
+Torvalds, pero llevamos esa discrepancia de forma honorable y
+abierta, en lugar de intentar arrebatarle el reconocimiento que 
+se merece por su contribución al sistema.</li>
+<li>
+Dado que mucha gente conoce al sistema como "Linux", si hablamos de
+"GNU" es posible que no reconozcan que hablamos del mismo sistema.
+Si por contra hablamos de "GNU/Linux", pueden relacionarlo con lo que
+ya han oído hablar acerca del sistema.</li>
+</ul>
+</dd>
+
+<dt><h4><a href="#TOCmany" name="many">Muchos otros proyectos han
+         contribuido al sistema tal y como es hoy en dia; eso incluye
+         TeX, X11, Apache, Perl, y muchos mas programas. ¿No implican
+         vuestros argumentos que debemos darles crédito por el
+         sistema? (Pero eso llevaría a un nombre tan largo que sería
+         absurdo). </a></h4></dt>
+<dd>
+Lo que decimos es que debes otorgar al desarrollador principal del
+proyecto su parte del reconocimiento. En este caso, el principal
+desarrollador es el Proyecto GNU.
+<p>
+Si te sientes incluso mas propenso a otorgar el crédito a quienes se
+lo merecen, podrías pensar que algunos contribuidores secundarios
+también deberían figurar en el nombre del sistema. Si es así, que
+sepas que no tenemos nada en contra de ello. Si piensas que X11 se
+merece figurar en el nombre del sistema, y por tanto deseas llamar
+al sistema  GNU/X11/Linux, por favor hazlo. Si piensas que 
+Perl simplemente debería figurar, y quieres escribir GNU/Linux/Perl,
+adelante. 
+</p>
+
+<p>
+Dado que un nombre tan largo como
+GNU/X11/Apache/Linux/TeX/Perl/Python/FreeCiv se antoja algo absurdo,
+en algun punto tendrás que cortar, y omitir los nombres de muchos
+contribuidores secundarios. No hay ninguna indicación obvia de donde
+fijar el corte, por lo que allá donde lo pongas, nosotros no vamos a
+argumentar en contra.
+</p>
+<p>
+Diferentes puntos de corte llevarían a distintas opciones para llamar
+al sistema. Pero un nombre que no respeta el reconocimiento correcto
+del sistema, ni aun con cualquier punto de corte, es "Linux". No sería 
+adecuado dar todo el crédito a una contribución secundaria (Linux)
+mientras se omite la contribución principal (GNU).
+</p>
+</dd>
+
+<dt><h4><a href="#TOCwhyslash" name="whyslash">¿Por qué escribis
+         "GNU/Linux" en lugar de "GNU Linux"?</a></h4></dt>
+
+<dd>
+Siguiendo las reglas del inglés, en la construcción "GNU Linux" la
+palabra "GNU" modifica a "Linux". Como resultado "GNU Linux" significa
+"La versión GNU de Linux" o "Linux, que es un paquete GNU". Ninguna de
+esas acepciones son ciertas en este caso.
+<p>
+Linux no es un paquete GNU; esto es, no fué desarrollado bajo el
+auspicio del Proyecto, ni contribuido al Proyecto GNU de forma
+específica. Linus Torvalds escribió Linux de forma independiente, como
+su proyecto. Por tanto "Linux, que es un paquete GNU", es incorrecto.
+</p>
+<p>
+No estamos hablando de una versión GNU de Linux, el kernel. El
+Proyecto GNU no dispone de una versión separada de Linux. 
+Los sistemas GNU/Linux no utilizan una versión separada de Linux;
+el uso principal de Linux es en esos sistemas, y la versión estándar 
+de Linux está desarrollado para funcionar en ellos. Por eso "La
+versión GNU de Linux" tampoco es correcto.
+</p>
+<p>
+Por el contrario, estamos hablando de una versión de GNU, el sistema 
+operativo, que se distingue por utilizar Linux como su kernel. La
+barra inclinada sirve para expresar eso, debido a que significa
+"combinación" (piensa en "Entrada/Salida"). Este sistema es la
+combinación de GNU y de Linux; de ahí "GNU/Linux".
+</p>
+<p>
+Hay otras formas de expresar "combinación". Si piensas que 
+un signo mas (+) es claro, utilízalo. En frances, un guión es claro: 
+"GNU-Linux". 
+</p>
+
+</dd>
+
+<dt><h4><a href="#TOCwhyorder" name="whyorder">¿Por qué "GNU/Linux" y
+         no "Linux/GNU"?</a></h4></dt>
+
+<dd>
+Resulta apropiado mencionar al primer contribuidor primero. La
+contribución de GNU al sistema no solo es mas grande que Linux, y 
+anterior a Linux, sino que nosotros comenzamos toda la actividad.
+<p>
+Sin embargo, si prefieres llamar al sistema "Linux/GNU", es mucho
+mejor que lo que normalmente hace la gente, que es omitir GNU por
+entero y hacer parecer que todo el sistema es Linux.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCcompanies" name="companies">¿No sería mas
+  efectivo pedir a compañias como Mandrake, Red Hat e IBM que llamen a
+  sus distribuciones "GNU/Linux", en lugar de pedírselo a
+  individuos?</a></h4></dt>
+
+<dd>
+No es una elección de uno u otro; nosotros pedimos tanto a compañías,
+organizaciones e individuos que colaboren en difundir el nombre
+correcto del sistema. De hecho, se lo hemos pedido a las tres 
+compañías mencionadas. Mandrake utiliza "GNU/Linux" algunas veces,
+pero IBM y Red Hat fueron reluctantes a ayudar. Un ejecutivo 
+incluso dijo: "Es una decisión puramente comercial; esperamos 
+obtener mas beneficios si lo llamamos 'Linux'". En otras palabras, esa
+compañía no se preocupaba de lo que era verdad o no lo era.
+<p>
+No podemos hacer que cambien, pero no somos de los que abandonamos
+porque el camino no es facil. Tu empeño puede no tener tanta 
+influencia como IBM o Red Hat, pero puedes ayudar. Juntos podemos
+cambiar la situación de modo que las empresas hagan mas dinero si
+llaman a sus distribuciones "GNU/Linux".
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCreserve" name="reserve">¿No sería mejor reservar
+         el nombre "GNU/Linux" para las distribuciones compuestas
+         únicamente de Software Libre? Despues de todo, ese es el
+         ideal de GNU.</a></h4></dt>
+
+<dd>
+La práctica, ampliamente extendida, de añadir software no libre al
+sistema GNU/Linux es un gran problema para nuestra comunidad.
+Convence a los usuarios de que el software no libre está bien, y que
+utilizarlo forma parte del espíritu de "Linux". Muchos Grupos de 
+Usuarios de "Linux" entienden como su misión el ayudar a la gente 
+a utilizar añadidos no libres, e incluso invitan a comerciales a 
+poner stands y puestos para ellos. Adoptan objetivos como "ayudar 
+a los usuarios" de GNU/Linux (incluyendo ayudarlos a usar aplicaciones
+y manejadores de dispositivos no libres), o hacer al sistema mas 
+popular, aun a costa de la libertad.
+<p>
+La cuestión es como intentar cambiar esto.
+</p>
+<p>
+Dado que la mayoría de la comunidad que utiliza esas versiones
+de GNU no saben lo que es, desacreditar esas versiones adulteradas 
+clamando que no son realmente GNU no enseñaría a los usuarios a 
+valorar mas su libertad. No captarían el mensaje. Contestarían
+que ellos nunca han considerado que esos sistemas eran GNU.
+</p>
+<p>
+La forma correcta para tratar que esos usuarios vean una 
+conexión con el concepto de libertad es exactamente la contraria:
+informarlos de que esos sistemas <em>son</em> versiones de GNU,
+que todos están basados en un sistema que existe específicamente
+para el beneficio de la libertad de sus usuarios. Con ese
+conocimiento, los usuarios podrán comenzar a reconocer Lindows y el 
+llamado "United Linux" como versiones adulteradas y pervertidas de
+GNU.
+</p>
+<p>
+Es muy útil fundar Grupos de Usuarios de GNU/Linux, que llamen al
+sistema GNU/Linux y adopten los ideales del Proyecto GNU como
+una base para sus actividades. Si el Grupo de Usuarios de Linux de tu 
+región sufre de los problemas mencionados anteriormente, te sugerimos
+que comiences una campaña dentro del grupo para cambiar su orientación
+(y su nombre) o comenzar otro grupo nuevo. La gente que enfoca sus 
+energías en los objetivos mas supérfluos están en su derecho de
+hacerlo, ¡pero que no dejes que te arrastren con ellos!.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCgnudist" name="gnudist">¿Por qué no hacer una
+         distribución GNU de Linux (sic) y llamarla
+         GNU/Linux?</a></h4></dt>
+
+<dd>
+Todas las distribuciones de "Linux" son de hecho versiones del sistema
+GNU con Linux como su kernel. El propósito del término "GNU/Linux" es
+comunicar este hecho. El desarrollar una distribución nueva y llamarla 
+"GNU/Linux" a secas oscurecería ese punto aun mas.
+<p>
+Ya hicimos una distribución de "GNU/Linux", cuando fundamos el 
+desarrollo inicial de Debian GNU/Linux. Hacerlo otra vez no sería muy
+útil; representaría una cantidad tremenda de trabajo, y a no ser que
+la nueva distribución poseyera ventajas práctica sustanciales sobre
+las demas, no serviría para nada.
+</p>
+</dd>
+
+<dt><h4><a href="#TOClinuxgnu" name="linuxgnu">¿Por qué no decir
+         simplemente que "Linux es el kernel GNU", y distribuir
+         alguna versión existente de GNU/Linux bajo el nombre de
+         "GNU"?</a></h4></dt>
+
+<dd>
+Podría haber sido buena idea adoptar Linux como el kernel GNU allá en
+1992. Si hubieramos sabido entonces cuanto tiempo iba a ocupar el
+desarrollo de GNU Hurd, tal vez lo hubiéramos hecho.
+Hoy en dia, con el GNU Hurd
+funcionando, no tiene mucho sentido hacerlo. No queremos distribuir un
+sistema GNU/Linux como "GNU", debido a que pronto podremos empaquetar
+y distribuir el sistema GNU completo.
+<p>
+Hay otra razon por la que no queremos coger alguna versión 
+existente de GNU/Linux y cambiarle el nombre a "GNU": Sería algo
+parecido a coger  una versión del sistema GNU y cambiarle el nombre
+a "Linux".
+</p>
+</dd>
+
+<dt><h4><a href="#TOCcondemn" name="condemn">¿Condenó y se opuso el
+         Proyecto GNU al uso de Linux en los primeros dias del
+         Proyecto?</a></h4></dt>
+
+<dd>
+No adoptamos Linux como nuestro kernel, pero tampoco lo condenamos o nos
+opusimos a él. Por el contrario, solíamos cooperar con la gente que
+estaba utilizando GNU en combinación con Linux. Quisimos incorporar
+sus cambios en las distribuciones estándar de los paquetes GNU, de 
+modo que pudieran funcionar en las versiones GNU basadas en Linux.
+<p>
+Desafortunadamente, encontramos que ellos estaban menos interesados
+en cooperar con nosotros. Uno de ellos, de hecho, dijo que no tenía
+interés en trabajar con el Proyecto GNU debido a que él era un
+"usuario de Linux". Esto fué un shock para nosotros, debido a que la
+gente que portó los paquetes GNU a otros sistemas siempre se mostraron
+muy motivados a cooperar con nosotros. El grupo de Linux, que
+desarrollaba un sistema básicamente basado en GNU, fué el primero 
+(y prácticamente el único) que no deseaba trabajar con nosotros.
+</p>
+<p>
+Fué esta experiencia la que hizo patente el hecho de que la gente
+estaba denominando "Linux" a una versión de GNU, y que esa confusión 
+estaba dificultando nuestro trabajo. El rogarte que llames al sistema 
+"GNU/Linux" es nuestra reacción a ese y otros problemas inducidos por
+la confusión "Linux".
+</p>
+</dd>
+
+<dt><h4><a href="#TOCallgpled" name="allgpled">¿Debería aplicarse la
+convención GNU/[nombre] a todos los programas licenciados con la
+licencia GPL?</a></h4></dt>      
+
+<dd>
+Nunca nos referimos a programas individuales como
+"GNU/[nombre]". Cuando un programa es un paquete GNU, podemos llamarlo 
+"GNU [nombre]".
+<p>
+GNU, el sistema operativo, está compuesto por muchos programas
+distintos. Algunos de los programas en GNU fueron escritos por
+el Proyecto GNU, o especialmente dedicados al mismo; esos son paquetes
+GNU, y a menudo utilizamos "GNU" en sus nombres.
+</p>
+<p>
+Es cosa de los desarrolladores de un programa decidir si quieren
+contribuir con él y hacerlo un paquete GNU. Si has escrito un programa
+y te gustaría que fuera un paquete GNU, escribe a <a
+href="mailto:address@hidden";>&lt;address@hidden&gt;</a>, de modo que podamos
+evaluarlo y decidir si lo queremos o no.
+</p>
+<p>
+No sería apropiado poner el nombre GNU en cada programa distribuido
+bajo los términos de la GPL. Si escribes un programa y lo distribuyes
+bajo la GPL, no implica que el Proyecto GNU lo haya escrito o que lo
+hayas escrito para nosotros. Por ejemplo, el kernel Linux se
+distribuye bajo los términos de la GNU GPL, pero Linus no lo escribió
+como parte del Proyecto GNU; hizo el trabajo de forma independiente.
+Si algo no es un paquete GNU, el Proyecto GNU no puede pedir 
+reconocimiento por él, y por tanto poner "GNU" en su nombre sería
+impropio.
+</p>
+<p>
+En contraste, reclamamos el reconocimiento global del sistema
+operativo GNU como un todo, incluso cuando no lo hacemos de todos
+los programas que lo componen. El sistema existe como sistema gracias
+a nuestra determinación y persistencia, desde 1984, muchos años antes
+de que Linux comenzara.
+</p>
+<p>
+El sistema operativo donde se hizo popular Linux era básicamente el 
+sistema operativo GNU. No era exactamente el mismo, ya que tenía un 
+kernel distinto, pero en términos generales podríamos equipararlos.
+Era una variante de GNU. Era el sistema GNU/Linux.
+</p>
+<p>
+Linux continúa siendo utilizado en derivaciones del sistema GNU; en
+las versiones actuales del sistema GNU/Linux. Lo que aporta la
+identidad a esos sistemas es GNU y Linux en su centro, no 
+Linux solo.
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCunix" name="unix">Dado que mucho de GNU proviene de
+         Unix, ¿no debería GNU dar crédito a Unix utilizando "Unix"
+         en el nombre del sistema?</a></h4></dt>
+
+<dd>
+De hecho, nada de GNU proviene de Unix. Unix era software propietario (y
+lo sigue siendo), por lo que utilizar su código para GNU hubiera
+sido ilegal. Esto no es una coincidencia; es por eso que comenzamos a 
+desarrollar GNU: dado que no podiamos tener libertad al utilizar Unix,
+ni otro de los sistemas operativos de entonces, necesitabamos un 
+sistema libre para reemplazarlo. No podiamos copiar programas, o
+partes de programas, de Unix; todo tenía que ser escrito de nuevo.
+<p>
+Ningun código de GNU proviene de Unix, pero GNU es un sistema compatible
+con Unix; por tanto, muchas de las ideas y especificaciones de GNU 
+provienen de Unix. El nombre "GNU" es una forma humorística de 
+dar crédito a Unix, siguiendo la tradición hacker  de acrónimos 
+recursivos que comenzó en los años setenta.
+</p>
+<p>
+El primer acrónimo recursivo fué TINT, "TINT Is Not TECO". El autor
+de TINT había escrito una implementación de TECO (había muchas
+implementaciones  de TECO, para varios sistemas), pero en lugar de
+llamarlo algo como "algo TECO", le puso un nombre divertido e 
+ingenioso. (Esto es lo que significa hackear: recrearse en lo 
+inteligente).
+</p>
+<p>
+Este nombre gustó tanto a otros hackers que acabaron imitando la
+técnica. Llegó a ser una tradición que, cuando se escribía una versión
+de un programa desde cero (llamémoslo "Klever"), se le llamaba con un 
+acrónimo recursivo, como "MINK" para "MINK Is Not Klever". En el 
+mismo espíritu nosotros llamamos a nuestro reemplazo de Unix
+"GNU's Not Unix".
+</p>
+<p>
+Históricamente, ATT (que desarrolló Unix) no dió permiso a nadie
+para utilizar el nombre "Unix" al denominar sistemas similares. 
+Lo prohíben incluso si el sistema tiene código de Unix, y aun si
+el sistema es 99% Unix. A ATT le gusta tan poco recibir ese tipo
+de crédito por Unix que seguramente te demandaría por violación de
+Trademark. Esa es la razón de que las versiones de Unix (todas ellas
+tan propietarias como Unix), distribuidas por varias compañias de
+software, tengan todas otros nombres.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCbsd" name="bsd">¿Tambien deberíamos decir "GNU/BSD"?
+</a></h4></dt>
+
+<dd>
+No, eso no encajaría con la realidad histórica de los sistemas BSD.
+<P>
+El sistema BSD fué desarrollado por la UC Berkeley como software no
+libre en los años ochenta, y llegó a ser libre al comienzo de los
+noventa. De hecho, si encuentras un sistema operativo libre hoy
+en dia, seguramente se trate o bien de una variante de GNU, o un 
+BSD.
+</P>
+<P>
+La gente a veces pregunta si BSD también es una variante de GNU, como
+GNU/Linux. No lo es. Los desarrolladores de BSD lo liberaron tras
+el ejemplo del Proyecto GNU, y ocurre que explícitamente algunos 
+activistas de GNU los convencieron para ello. Pero el código tiene
+poco que ver con GNU.
+</P>
+<P>
+Los sistemas BSD actuales utilizan algunos paquetes GNU, igual 
+que el sistema GNU utiliza algunos programas BSD; sin embargo, 
+considerados como un todo, son dos sistemas distintos que 
+evolucionan de forma separada. Los desarrolladores de BSD no
+escribieron un kernel y lo añadieron al sistema GNU, por lo que
+un nombre como GNU/BSD no tendría mucho sentido.
+</P>
+<P>
+La relación entre GNU/Linux y GNU es mucho mayor, y es por eso
+por lo que el nombre "GNU/Linux" si es apropiado en este caso.
+</P>
+<P>
+Existe un proyecto para desarrollar una versión de GNU que
+utiliza el kernel de FreeBSD. Sus desarrolladores lo llaman
+"Debian GNU/FreeBSD", pero sería mejor llamarlo "GNU/kerneldeBSD",
+ya que FreeBSD es el sistema completo, no únicamente el kernel. 
+El llamarlos "sistema Linux" y "sistema BSD" daría lugar a una
+impresión equivocada de que son sistemas distintos. Sería igual
+para el usuario que un sistema Debian GNU/Linux.
+</P>
+</dd>
+
+<dt><h4><a href="#TOCjustlinux" name="justlinux">¿Podrían existir
+         sistemas basados en Linux sin GNU?</a></h4></dt>
+
+<dd>
+Es posible montar un sistema que utilice Linux como kernel y no esté
+basado en GNU. Parece que hay sistemas pequeños, para sistemas
+empotrados, que incluyen Linux pero no el sistema GNU. Tambien se
+ha rumoreado que IBM está planeando utilizar Linux como kernel de
+AIX; sea cierto o no el rumor, lo cierto es que es teóricamente posible.
+¿Qué conclusiones podemos sacar de llo a la hora de llamar a los
+distintos sistemas?
+<p>
+La gente que opina que el kernel es mas importante que las demas 
+piezas del sistema dicen: "Todos ellos contienen a Linux, por lo que 
+debemos llamarlos a todos sistemas Linux". Pero los sistemas son
+muy distintos, y llamarlos por el mismo nombre da lugar a confusión
+(empujan a la gente a compartir la idea de que el kernel es mas
+importante que el resto del sistema, por ejemplo).
+</p>
+<p>
+En los sistemas empotrados pequeños, Linux es casi todo el sistema. En
+estos casos, el nombre apropiado podría ser "sistemas Linux". Pero son
+muy distintos de los sistemas GNU/Linux, que son mas GNU que Linux. El
+hipotético sistema de IBM sería distinto tambien. Su nombre correcto
+sería AIX/Linux: básicamente AIX, pero con Linux como kernel. Estos
+nombres indicarían al usuario la realidad de que los sistemas son
+distintos entre sí.
+</p>
+</dd>
+
+<dt><h4><a href="#TOChelplinus" name="helplinus">¿Por qué no llamais
+         al sistema  "Linux", despues de todo, y así fortaleceis el
+         papel de Linus Torvalds como el "posterboy" de nuestra
+         comunidad?</a></h4></dt>
+
+<dd>
+Linus Torvalds es el "posterboy" (apelativo escogido por otros, no
+por nosotros) para sus intereses, no para los nuestros. Su objetivo es
+hacer el sistema mas popular, y piensa que su aportación a la sociedad
+es únicamente práctica: su potencia, fiabilidad y facilidad de
+obtención. Él nunca ha considerado la libertad de cooperar como un
+principio ético, y es la razón por la que el nombre "Linux" tiene poco 
+que ver con ese principio.
+<p>
+Linus hace pública su discrepancia con los ideales del movimiento del 
+Software Libre. Desarrolla software no libre (lo dijo antes de una 
+conferencia en el "Linux"World), y obliga a sus compañeros
+desarrolladores de Linux a utilizar software no libre para acceder a
+su repositorio de fuentes. Incluso va mas lejos, y censura a la gente
+que sugiere que la ingeniería y la ciencia debería considerar las 
+consecuencias sociales de nuestro trabajo técnico; despreciando asi 
+las lecciones sociales aprendidas del desarrollo de la bomba
+atómica. 
+</p>
+<p>
+No hay nada malo en escribir un programa libre para aprender y
+divertirse; el kernel Linux, escrito por esos motivos, ha sido una
+contribución crucial a nuestra comunidad. Pero esas no son las 
+motivaciones que han hecho que exista un sistema completo y libre, 
+GNU/Linux. Esas motivaciones tampoco mantendrán segura nuestra
+libertad en el futuro. El público necesita saber esto.
+Linus tiene el derecho de promocionar sus puntos de vista; pero 
+nosotros pensamos que nuestro mayor trabajo y experiencia debe
+aplicarse a promocionar los nuestros.
+</p>
+</dd>
+
+<dt><h4><a href="#TOClost" name="lost">La batalla ya ha sido perdida;
+         la sociedad ha hecho su decisión y no podemos
+         cambiarlo. ¿Por qué seguis pensando en ello?</a></h4></dt>
+
+<dd>
+Esto no es una batalla: es una campaña de educación. El como llamar al
+sistema no es una decisión única, tomada en cada momento por la
+"sociedad": cada persona, cada organización, puede decidir qué nombre
+utilizar.  No puedes convencer a los demas de que utilicen
+"GNU/Linux", pero puedes comenzar a llamarlo así tu mismo; y al
+hacerlo, nos ayudas mucho.
+</dd>
+
+<dt><h4><a href="#TOCwhatgood" name="whatgood">La sociedad ya ha tomado
+         su decisión, y no podemos cambiarlo. ¿Qué avanzo si llamo al
+         sistema "GNU/Linux"?</a></h4></dt>
+
+<dd>
+Esto no es una situación de todo o nada. Si llamas al sistema
+"GNU/Linux", ayudarás a otros a comprender la historia real del
+sistema, así como sus orígenes y su razón de existir. No puedes
+acabar con la confusión de nombres en todas partes por tí mismo, o mas
+que nosotros, pero puedes ayudar. Si algunos cientos de personas te
+escuchan utilizar el término "GNU/Linux", es mejor que nadie lo
+haga. Y alguno de ellos ayudará a expandir la corrección a los demas.
+</dd>
+
+<dt><h4><a href="#TOCexplain" name="explain">¿No sería mejor llamar al
+         sistema "Linux", y enseñar a la gente su origen real en una
+         explicación de diez minutos?</a></h4></dt>
+
+<dd>
+Si nos ayudas explicando a la gente los orígenes del sistema de ese modo,
+apreciamos tu esfuerzo; pero no es el mejor método. No es tan 
+efectivo como llamar al sistema "GNU/Linux", y desaprovecha tu
+valioso tiempo.
+<p>
+Es inefectivo porque puede no dar resultado, y seguramente no
+se propagará. Algunas de las personas que escuchen tu explicación
+prestarán atención, y podrían asimilar el panorama correcto del
+origen del sistema. Pero es difícil que después repitan la
+explicación a otros cuando hablan acerca del sistema. Seguramente lo
+llamarán "Linux". Sin un empeño especial para ello, ayudarán a 
+propagar la imagen incorrecta.
+</p>
+<p>
+Es ineficiente porque te llva mucho mas tiempo. El decir y escribir
+"GNU/Linux" te llevará unos pocos segundos al dia, no minutos; por
+tanto puedes esperar alcanzar a mas gente de este modo. El distinguir
+entre Linux y GNU/Linux cuando se habla y se escribe es de lejos
+la forma mas facil de ayudar al Proyecto GNU.
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCtreatment" name="treatment">Alguna gente se rie
+         de vosotros cuando les pedis que llamen GNU/Linux al
+         sistema. ¿Por qué os someteis a ese tratamiento?</a></h4></dt>
+
+<dd>
+El denominar al sistema "Linux" lleva a que la gente tenga una imagen
+equivocada de la historia del sistema, y de las razones de su
+existencia. La gente que se rie de nuestras peticiones seguramente han
+asumido esa imagen errónea; piensan que nuestro trabajo fué hecho por
+Linus, y por eso se ríen cuando reclamamos reconocimiento por él.
+Si conocieran la verdad, seguramente no reirían.
+<p>
+¿Por qué asumimos el riesgo de hacer una petición que algunas veces
+lleva a que la gente nos ridiculice?. Porque a menudo lleva a
+resultados muy útiles que ayudan al Proyecto GNU. Correremos el riesgo
+de sufrir abusos para alcanzar nuestros objetivos.
+</p>
+<p>
+Si eres sujeto de una situación desagradable, por favor no te sientas
+intimidado por ello. Enseña a la gente que se ríe la historia
+real. Cuando escuchen el por qué tu petición está justificada,
+aquellos que tengan un mínimo de sentido dejarán de reir.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCalienate" name="alienate">Alguna gente se enfada
+         y os condena cuando les pedis que llamen GNU/Linux al
+         sistema. ¿No perdeis al predisponerlos en vuestra
+         contra?</a></h4></dt> 
+
+<dd>
+No mucho. Es dificil que la gente que no aprecia nuestro papel en el 
+desarrollo del sistema quiera hacer esfuerzos sustanciales para 
+ayudarnos. Aun si ellos efectuan algun trabajo que ayuda a nuestros 
+fines, como distribuir Software Libre, casi siempre es por otras
+razones, no porque quieran ayudarnos. Ademas, si enseñan a la
+gente que nuestro trabajo fué hecho por algun otro, están
+desfavoreciendo que otros nos ayude.
+<p>
+No tiene sentido preocuparse por predisponer en contra a gente que
+de por si no coopera, y resulta masoquista no resolver un
+problema por no molestar a la gente que ayuda a perpetuarlo. Por
+tanto,  continuaremos intentando arreglar la confusión.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCwhynotsue" name="whynotsue">¿Por qué no demandar
+         a la gente que llama "Linux" al sistema?</a></h4></dt>
+
+<dd>
+No existen suficientes motivos legales para demandarlos, pero aunque
+fuera asi nunca lo haríamos, dado que creemos en la libertad de
+expresión. Pedimos a la gente que llame "GNU/Linux" al sistema porque
+es lo correcto, nada mas.
+</dd>
+
+<dt><h4><a href="#TOCrequire" name="require">Shouldn't you put something in
+    the GNU GPL to require people to call the system "GNU"?</a></h4></dt>
+
+<dd>
+El propósito de la GNU GPl es proteger la libertad de los usuarios de
+quienes pudieran hacer versiones propietarias de algun software
+libre. Aunque es cierto que la gente que llama "Linux" al sistema a
+menudo hacen otras cosas que limitan la libertad del usuario (como
+añadir software propietario al sistema GNU/Linux, o incluso
+desarrollando software no libre), el mero acto de la nomenclatura no
+implica denegar ninguna libertad. Parece impropio el que la GPL
+limite el como la gente llame al sistema.
+</dd>
+
+<dt><h4><a href="#TOCdeserve" name="deserve">Dado que no incluísteis
+       nada acerca de nomenclatura, os habeis buscado que la gente
+       llame "Linux" al sistema. ¿Por qué pedis lo contrario
+       ahora?</a></h4></dt> 
+
+<dd>
+Esta pregunta presupone una premisa ética (algunas veces dada a
+controversias): si la gente no te fuerza a tratarla bien, puedes sacar
+provecho de ello. En otras palabras: aprovechate todo lo que puedas.
+<p>
+Esperamos que difieras de ese pensamiento tanto como nosotros.
+</p>
+</dd>
+
+
+<dt><h4><a href="#TOCcontradict" name="contradict">¿No sería mejor que
+       no contradijerais algo en lo que cree mucha
+       gente?</a></h4></dt>
+
+<dd>
+No creemos que debamos dar la razon a la gente que no la tiene, solo
+porque son muchos. Esperamos que tu tambien decidas que la verdad es
+lo importante, y no cuanta gente cree en ella.
+<p>
+Nunca hubieramos podido desarrollar un sistema operativo libre sin 
+desafiar la creencia, dada por cierta por la mayoría de la gente
+entonces, de que el software propietario es legítimo y aceptable.
+</p>
+</dd>
+
+<dt><h4><a href="#TOCsomanyright" name="somanyright">Dado que mucha
+gente llama "Linux" al sistema, ¿no hace eso que tengan
+razon?</a></h4></dt>
+
+<dd>
+Pensamos que la popularidad de un error no lo hace mas cierto.
+</dd>
+
+<dt><h4><a href="#TOCwinning" name="winning">Mucha gente se preocupa
+       mas de qué es conveniente, o quien está ganando, que de
+       argumentos de verdad o falsedad. ¿No podriais ganaros su apoyo
+       de otra manera?</a></h4></dt>
+
+<dd>
+El preocuparse únicamente acerca de qué es conveniente o quien está
+ganando es una aproximación amoral a la vida. El software no libre es
+un ejemplo de esta amoralidad, y se alimenta de ella. Por tanto sería
+autodestructivo el adoptar esa postura. Continuaremos hablando en
+términos de verdad y falsedad.
+<p>
+Esperamos que tu seas de aquellos para los que lo correcto y lo
+incorrecto importa.
+</p>
+</dd>
+
+
+<HR />
+
+<P>
+Copyright (C) 2001 Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA  02110,  USA
+</P>
+<p>
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:13 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->

Index: rmsmeeting2003/cartel-web.jpg
===================================================================
RCS file: rmsmeeting2003/cartel-web.jpg
diff -N rmsmeeting2003/cartel-web.jpg
Binary files /dev/null and /tmp/cvsQ1KM9b differ

Index: rmsmeeting2003/index.html
===================================================================
RCS file: rmsmeeting2003/index.html
diff -N rmsmeeting2003/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ rmsmeeting2003/index.html   3 Mar 2012 06:15:14 -0000       1.1
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>Visita de RMS a Madrid - 2003</title>
+  </head>
+
+  <body>
+    <h1>Conferencias de Richard M. Stallman en Madrid</h1>
+    <h2>19 y 20 de Enero, 2003</h2>
+    <hr>
+
+    <table>
+      <tbody>
+       <tr>
+         <td valign="top">
+           <img src="cartel-web.jpg" alt="cartel" height="1000"
+           width="400">
+         </td>
+         <td valign="top">
+           <h1>Conferencia en la EUI/UPM</h1>
+
+           <h2>Título:</h2>
+           <p><b><i>El movimiento del Software Libre y el sistema operativo 
+             GNU/Linux</i></b>
+           </p>
+
+           <hr>
+
+           <h2>Resumen:</h2>
+           <p><i>Richard Stallman hablará acerca de los motivos,
+           objetivos, filosofía, métodos, situación actual y
+           expectativas futuras del sistema operativo GNU, que en
+           combinación con el kernel Linux se estima es utilizado por
+           17 a 20 millones de usuarios en todo el mundo.</i>
+           </p>
+
+           <hr>
+           <h2>Fecha:</h2> 
+           <h4>Domingo 19</h4>
+
+
+           <hr>
+           <h2>Lugar:</h2>
+
+           <p>La conferencia se dará en la Escuela Universitaria de
+           Informática de la Universidad Politécnica de Madrid. La
+           EUI está situada en el Campus Sur de la UPM, en Vallecas
+           villa.
+           </p>
+
+           <p>La dirección es: Escuela Universitaria de Informática
+           (UPM). Campus Sur. Ctra. Valencia kilómetro 7.
+           </p>
+
+           <hr>
+           <h2>Como llegar:</h2>
+
+          <p>
+          <a href="http://www.eui.upm.es/images/mapas/mapa.gif";>Mapa de 
situacion</a>
+          </p>
+
+           <h3>Utilizando Metro:</h3>
+
+           <ul>
+             <li>Coger la línea 1 de Metro dirección Miguel
+             Hernández. Apearse en la parada <i>Sierra de Guadalupe</i>. De ahí
+             puede o bien ir andando (10 minutos) o coger un autobus
+             de la línea <i>E</i>, cuya marquesina está justo al lado
+             de la boca de metro.</li>
+             <li>Coger la línea 6 de Metro. Apearse en la parada
+             <i>Conde de Casal</i>. Coger un autobus de una de las
+             líneas <i>E</i>, <i>145</i> o <i>63</i>, y apearse en la
+             parada "Politécnico de Vallecas".</li>
+           </ul>
+
+           <h3>Utilizando Cercanías Renfe:</h3>
+
+           <ul>
+             <li>Coger la línea de Cercanías Renfe A1
+             . Apearse en la parada "Vallecas". De ahí puede o
+             bien ir andando, o coger un autobus de la línea
+             <i>E</i>, cuya marquesina está justo al lado de la
+             salida del cercanías.</li>
+           </ul>
+           
+           <hr>
+           <h2>Programa:</h2>
+           
+           <ul>
+             <li><b>11:00</b> Conferencia "El movimiento del Software
+             Libre y el sistema operativo GNU/Linux".</li>
+             <li><b>14:00</b> Piscolabis ofrecido por la EUI.</li>
+             <li><b>15:00</b> Rueda de prensa de Richard
+             Stallman.</li>
+           </ul>
+           <hr>
+
+           <h1>Conferencia en el CSA "El Laboratorio-03"</h1>
+
+           <h2>Título:</h2>
+           
+           <p><i><b>Contra las Patentes de Software</b></i>
+           </p>
+
+           <hr>
+
+           <h2>Resumen:</h2>
+
+           <p>Richard Stallman explicará como las patentes de
+           software dificultan el desarrollo en el ámbito del
+           software. Las patentes de software cubren ideas
+           implementadas en software. Restringen el desarrollo de
+           software, como se refleja en el hecho de que cualquier
+           decisión de diseño implica un riesgo de ser demandado. Las
+           patentes en otros ámbitos restringen a las factorías, pero
+           las patentes de software restringen a todos los
+           usuarios. Algunas investigaciones económicas revelan que
+           incluso retardan el progreso.
+           </p>
+
+           <hr>
+           
+           <h2>Fecha:</h2>
+
+           <h4>Lunes 20</h4>
+
+           <hr>
+
+           <h2>Lugar:</h2>
+
+           <p>Centro Social Autogestionado <i>El Laboratorio-03</i>. 
+           </p>
+
+           <p>La dirección es: C/ Amparo Nº 103.
+           </p>
+
+
+           <hr>
+
+           <h2>Como llegar:</h2>
+
+           <ul>
+             <li>Metro "Lavapies", línea 3.
+             </li>
+           </ul>
+
+
+           <hr>
+
+           <h2>Programa:</h2>
+
+           <ul>
+             <li><b>18:00</b> Charla "Contra las patentes de
+             software".</li>
+           </ul>
+
+          
+
+
+         </td>
+       </tr>
+      </tbody>
+    </table>
+
+
+
+
+<hr>
+    <address><a href="mailto:";>Jose E. Marchesi</a></address>
+<!-- Created: Fri Jan 10 05:44:15 CET 2003 -->
+<!-- hhmts start -->
+Last modified: Fri Jan 10 08:42:39 CET 2003
+<!-- hhmts end -->
+  </body>
+</html>

Index: software/.symlinks
===================================================================
RCS file: software/.symlinks
diff -N software/.symlinks
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ software/.symlinks  3 Mar 2012 06:15:14 -0000       1.1
@@ -0,0 +1 @@
+index.html index.xhtml

Index: software/index.html
===================================================================
RCS file: software/index.html
diff -N software/index.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ software/index.html 3 Mar 2012 06:15:14 -0000       1.1
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html
+          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html lang="es">
+  <head>
+    <title>GNU España - Software GNU</title>
+  </head>
+  <body>
+
+    <div> <!-- El encabezado entrará aquí -->
+
+<!-- Comienzo del contenido de la página -->
+
+<center>
+<h2>Software GNU</h2></center>
+
+<ul>
+<li> <a href="#queessoftwaregnu">¿Qué es el Software GNU?</a><br /></li>
+<li> <a href="#dondeencontrar">¿Donde puedo encontrar Software GNU?</a><br 
/></li>
+<li> <a href="#colaborar">¿Como puedo colaborar en el desarrollo o 
mantenimiento de un paquete GNU?</a><br /></li>
+</ul>
+
+<hr />
+
+<a name="queessoftwaregnu"><h3>¿Qué es el Software GNU?</h3></a>
+
+<p> La denominación de <i>Software GNU</i> engloba de forma general a 
+    cualquier software desarrollado o mantenido por el Proyecto GNU, que 
+    conforma <a href="http://es.gnu.org/proyecto/sognu.html";>el Sistema 
+    Operativo GNU</a>.
+</p>
+
+<p> El Software GNU es distribuído en forma de 
+    <a href="http://es.gnu.org/proyectos/paquetes.html";>paquetes</a> o 
+    <i>tarballs</i> de fuentes, y generalmente comparten el mismo sistema 
+    de configuración e instalación. Esto hace que compilar e instalar 
+    software GNU sea una tarea muy sencilla en la mayoría de los casos.
+</p>
+
+<p> Esta homogeneidad es consecuencia de los estándares de codificación 
+    de GNU (<a href="GCS">GCS</a>) y a las <a href="guiamantenedores">guías 
+    para mantenedores</a> del Proyecto GNU, y dotan de una gran fortaleza
+    al Sistema, facilitando cuestiones como la portabilidad a otras 
+    arquitecturas máquina.
+</p>
+   
+<hr />
+
+<a name="dondeencontrar"><h3>¿Donde puedo encontrar Software GNU?</h3></a>
+
+<ul>
+<li> El <a href="http://www.gnu.org/directory";>Directorio de Software GNU</a>
+     proporciona una interfaz web para buscar Software GNU y Software Libre
+     catalogados por funcionalidades.</li>
+<li> El sitio primario donde encontrar software GNU es el ftp del Proyecto
+     <a href="ftp://ftp.gnu.org";>ftp://ftp.gnu.org</a>. En el 
+     directorio <a href="ftp://ftp.gnu.org/gnu";>gnu/</a> hay un 
+     subdirectorio por cada paquete.</li>
+<li> Las distribuciones del Sistema Operativo GNU como 
+     <a href="http://www.es.debian.org";>Debian</a> proporcionan paquetes 
+     de binarios de software GNU, listos para instalar mediante el sistema
+     de empaquetado de la distribución en concreto.</li>
+
+<li> En <a href="ftp://alpha.gnu.org";>ftp://alpha.gnu.org</a> pueden
+     encontrarse versiones inestables o alpha de muchos paquetes GNU. Al
+     igual que el site primario, el directorio
+     <a href="ftp://alpha.gnu.org/gnu";>gnu/</a> contiene un subdirectorio
+     por cada paquete.</li>
+
+</ul>
+
+<hr />
+
+<a name="colaborar"><h3>¿Como puedo colaborar en el desarrollo o mantenimiento 
de un paquete GNU?</h3></a>
+
+<ul>
+<li> Cada paquete GNU dispone de una lista de correo 
+    dedicada al reporte de fallos y a comunicación entre los desarrolladores.
+    Las ofertas de aportación y colaboración pueden ser dirigidas a esas
+    listas. La forma del nombre de esas listas es uniforme para todos los
+    paquetes:
+
+    <pre>
+            bug-&lt;nombre-paquete&gt;@gnu.org
+    </pre>
+
+    donde <i>&lt;nombre-paquete&gt;</i> es el nombre del paquete software
+    (por ejemplo, el paquete <i>GNU Compiler Collection</i> dispone de una 
+    lista llamada <i>address@hidden</i>).
+</li>
+<li> Los paquetes GNU hospedados en la plataforma de desarrollo 
+     <a href="http://savannah.gnu.org";>savannah</a> (perteneciente al Proyecto)
+     publican sus necesidades de aportaciones en un <i>tablón</i> disponible
+     en <a href="http://savannah.gnu.org/ayuda";>el mismo savannah</a>.
+</li>
+<li> Existe una lista de tareas a realizar en 
+     <a 
href="http://www.gnu.org/gnu/tasks.html";>http://www.gnu.org/gnu/tasks.html</a>
+     ordenadas por prioridad. Es algo a consultar si está pensando en colaborar
+     en el Proyecto, pero no tiene ninguna tarea en mente.
+</li>
+</ul>        
+
+
+<!-- Fin del contenido de la página -->
+
+    </div> <!-- La barra de abajo entrará aquí -->
+
+    Ultima actualización:
+    <!-- Marca de fecha (no tocarla!) -->
+    $Date: 2012/03/03 06:15:14 $ $Author: ineiev $
+    <!-- fin de la marca de fecha -->
+
+  </body>
+</html>
+<!--
+Local Variables: ***
+mode: sgml ***
+End: ***
+-->



reply via email to

[Prev in Thread] Current Thread [Next in Thread]