home *** CD-ROM | disk | FTP | other *** search
/ Freelog 9 / Freelog009.iso / BAS / Systeme / ShellUnix / MAN2HTML.SH < prev    next >
Linux/UNIX/POSIX Shell Script  |  1998-07-09  |  16KB  |  762 lines

  1. #!/bin/sh
  2. #---------------------------------------------------------------------- 
  3. # NOM                                        
  4. #    man2html = Transforme un fichier de type Man au format HTML.
  5. # SYNTAXE                                    
  6. #    man2html -h|H|M          (aide)   
  7. #    man2html fichier_format_man > fichier_html
  8. #---------------------------------------------------------------------- 
  9. # VERSION
  10. #    1.2
  11. # DESCRIPTION
  12. #    * Cette procedure permet de convertir un fichier au format
  13. #    "man" (nroff), en un fichier au format HTML visualisable par
  14. #    mosaic. Dans le cas ou des references de type "See ..." sont
  15. #    inscrites dans le fichier man, la procedure genere une ancre
  16. #    HTML, et permet l'accession au chapitre mentionne.
  17. #    Il se peut que des references ne fonctionnent pas (ex. xv: See
  18. #    "Appendix..."), car elles se referent a des documents papier !
  19. #    Il n'y a pas encore de controle sur les ancres, mais cela se
  20. #    fera certainement dans un proche avenir...
  21. #    * La procedure fonctionne tres bien avec des fichiers de taille
  22. #    non importante. L'utilisation d'une telle procedure sur les
  23. #    manuels Unix (ls, cp, etc.), n'est pas garantie.
  24. #    * La procedure test si le fichier passe en argument est compresse
  25. #    ou non, et se charge d'une decompression le cas echeant.
  26. # OPTIONS
  27. #    -h|H    aide courte ou longue.        
  28. #                                            
  29. #    -M    affiche l'aide dans une fenetre Mosaic.
  30. #                                            
  31. # EXEMPLE(S)
  32. #    * Lancement de l'application avec affichage de l'aide longue:
  33. #        $ man2html -H
  34. #    * Affichage de l'aide longue au format Mosaic:
  35. #        $ man2html -W
  36. #    * Genere un fichier html du fichier "man" de la commande Unix ls:
  37. #        $ man2html xv.1 > ls.html 
  38. # DEPENDANCE(S)
  39. #    awk, vi.
  40. #                                            
  41. # REMARQUE(S)
  42. #    * Il est vrai qu'il existe deja des procedures dans le domaine
  43. #    public qui normalement s'occupe de transformer du man en html
  44. #    j'en ai essaye quelques une en perl (elles ne fonctionnaient pas),
  45. #    je n'ai malheureuse pas reussi a les faire fonctionner correctment,
  46. #    nul n'est parfait, mais c'est promis des que je peux j'apprends le
  47. #    perl !
  48. #    Et je suis encore moins parfait, dans la mesure ou cette procedure
  49. #    ne fonctionne pas sur tout les fichiers Man, car la procedure ne fait
  50. #    pas d'interpretation a la mode nroff. Elle se contente juste de
  51. #    remplacer les balises nroff par des balises html, du moins elle
  52. #    essaye... Car il est fort possible que certaines balises ne soient
  53. #    pas reconnues. Si cela arrive envoyez moi un courrier pour que je
  54. #    puisse rectifier la procedure.
  55. #    * Procedure distribuee en Freeware/Gratuiciel.
  56. #                                            
  57. #                                            
  58. # AUTEUR
  59. #    Bertrand LE QUELLEC
  60. #                                            
  61. # E-MAIL
  62. #     Copyright (c) 1998 Bertrand LE QUELLEC, All Rigths Reserved.
  63. # CONTACT
  64. #   eMail : blq@mygale.org ou blq@wanadoo.fr
  65. #   Url   : http://www.mygale.org/09/blq/ ou http://perso.wanadoo.fr/blq/
  66. #                                            
  67. # Cree : 04/04/95 - Modifie le 17/03/98
  68. #---------------------------------------------------------------------- 
  69. # Permission to use, copy, modify, distribute, and sell this software
  70. # and its documentation for any purpose is hereby granted without fee,
  71. # provided that the above copyright notice appear in all copies and
  72. # that both that copyright notice and this permission notice appear in
  73. # supporting documentation, and that the name of Bertrand LE QUELLEC    
  74. # not be used in advertising or publicity pertaining to distribution 
  75. # of the software without specific, written prior permission. Bertrand 
  76. # LE QUELLEC makes no representations about the suitability of
  77. # this software for any purpose. It is provided "as is" without
  78. # express or implied warranty.
  79. #
  80. # THIS SOFTWARE IS PROVIDED BY Bertrand LE QUELLEC `AS IS' AND ANY
  81. # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  82. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  83. # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Bertrand LE QUELLEC BE
  84. # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  85. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  86. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  87. # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  88. # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  89. # OR OTHERWISE)     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  90. # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  91. #---------------------------------------------------------------------- 
  92.  
  93. # ------------------------------------------
  94. # ZONE DE DEFINITION DES VARIABLES GLOBALES:
  95. # ------------------------------------------
  96. NOM_PROCEDURE=`basename $0`
  97. LA_PROCEDURE=$0
  98. CD=`pwd`
  99. RM=0
  100. AWK=`[ -f /usr/bin/nawk ] && echo "nawk" || echo "awk" `
  101.  
  102.  
  103. ##
  104. ## Variables particulieres:
  105. ##
  106. DATE=`date "+%d/%m/%y"`
  107. MODE_COULEUR=0
  108.  
  109.  
  110. ##
  111. ## Les variables concernant l'utilisateur:
  112. ##
  113. DEFAUT_AUTEUR=`whoami`
  114. DEFAUT_EDITEUR=${EDITOR}
  115. DEFAUT_SHELL=${SHELL}
  116.  
  117.  
  118. #---------------------------------------------------------------------- 
  119. # ZONE DE DEFINITION DES FONCTIONS LOCALES:
  120. # -----------------------------------------
  121. # La fonction doit etre precedee d'un commentaire avec en debut de ligne
  122. # le caractere # (diese) repete deux fois.
  123.  
  124. ##
  125. ## En cas d'une interruption la fonction suivante est executee.
  126. ## Les interruptions sont des signaux envoyes au processus du script,
  127. ## par la commande Unix: kill(1). La "capture" de ces signaux est
  128. ## identifiee par la commande Shell: trap definie apres la zone des
  129. ## options.
  130. ##
  131. TrapInterrup()
  132. {
  133.     # Vous pouvez executer des instructions avant une sortie 
  134.     # par signal (ou brutale!).
  135.     exit 1
  136. }
  137.  
  138.  
  139. ##
  140. ## Renvoie le PATH et nom d'un ou plusieurs executables.
  141. ## Si le ou les executables sont introuvables la fonction ne renvoie rien.
  142. ## Dans le cas d'un alias la fonction ne renvoie rien, car le PATH n'est
  143. ## pas recuperable.
  144. ##
  145. Type()
  146. {
  147.     [ $# -ne 0 ] && type $* | $AWK '$2=="is" && $4!="alias" {print $NF}'
  148. }
  149.  
  150.  
  151. ##
  152. ## Affiche l'aide indiquee en en-tete du script shell.
  153. ## Ne pas supprimer car cette fonction est utilisee a l'appel de la
  154. ## procedure avec les options -H ou -H
  155. ##
  156. AideProc()
  157. {
  158.     fichier=$1
  159.     niveau=$2
  160.  
  161.     [ -z "$fichier" ] && {
  162.         Erreur "Aide(): nombre d'argument incorect."
  163.         return 0
  164.         }
  165.  
  166.     [ ! -f "$fichier" ] && {
  167.         Erreur "Aide(): impossible d'atteindre le fichier $fichier."
  168.         return 0
  169.     }
  170.  
  171.     [ ${niveau:=2} = 2 ] && {
  172.         $AWK 'BEGIN {i=2}
  173.             /^#(#+|-+|÷+|\*+|\\+|\++|=+|\.+|\/+)+ *$/{
  174.                 if(--i<=0)exit
  175.                 next
  176.             }
  177.             /^#[     ]*[A-Z]*[     ]*$/{
  178.                 next
  179.             }
  180.             /^#[^!]/{
  181.                 print substr($0,1,80)
  182.             }
  183.         ' $fichier | sed -e 's/^#[     ]*//'
  184.     } || {
  185.         $AWK '\
  186.             /^#(#+|-+|÷+|\*+|\\+|\++|=+|\.+|\/+)+ *$/{
  187.                 if(--i<=0) exit
  188.                 next
  189.             }
  190.             /^#[^!]/{
  191.                 print substr($0,2,80)
  192.             }
  193.         ' i=$niveau $fichier | pg -e
  194.     }
  195. }
  196.  
  197. ##
  198. ## Renvoie le type de la machine ou l'on se trouve et surtout le
  199. ## systeme d'exploitation en cours. La fonction renvoie un des numero
  200. ## suivant en reponse:
  201. ##
  202. ##    inconue            0
  203. ##
  204. ##    SunOs            1
  205. ##    Sun Solaris        2
  206. ##    HP s700            3
  207. ##    HP s800            4
  208. ##    HP s300            5
  209. ##    Silicon Graphic 6
  210. ##    IBM AIX            7
  211. ##
  212. ## Pour recuperer le code retour de la fonction, utilisez la variable $?
  213. ##
  214. Machine()
  215. {
  216.     os=`uname`
  217.  
  218.     [ "$os" = "SunOS" ] && return 1
  219.     
  220.     [ "$os" = "HP-UX" ] && {
  221.         if uname -a | grep "PA-RISC" 1> /dev/null
  222.         then
  223.             return 3
  224.         elif uname -a | grep "HP-PA" 1> /dev/null
  225.             return 4
  226.         then
  227.             return 5
  228.         fi
  229.     }
  230.  
  231.     [ "$os" = "IRIX" ] && return 6
  232.  
  233.     [ "$os" = "AIX" ] && return 7
  234.  
  235.     return 0
  236. }
  237.  
  238.  
  239. ##
  240. ## Affiche un message en rouge si l'on se trouve dans une fenetre hpterm
  241. ## et se met en attente de 2 secondes.
  242. ## Il est possible de recuperer le code retour de la fonction.
  243. ##
  244. Erreur()
  245. {
  246.     [ $# -eq 0 ] && return -1
  247.  
  248.     echo "\n\t${ROUGE}$*${NORMAL}"
  249.     sleep 2
  250.  
  251.     return 0
  252. }
  253.  
  254.  
  255. #---------------------------------------------------------------------- 
  256. # DEFENITION DES FONCTIONS LOCALES AU PROGRAMME:
  257. # ----------------------------------------------
  258.  
  259.  
  260. #---------------------------------------------------------------------- 
  261. # RECUPERATION DES OPTIONS:
  262. # -------------------------
  263. set -- `getopt hHx $*`                
  264. for opt in $*                                            
  265. do                                                             
  266.     case $opt in                                           
  267.         -h) AideProc $LA_PROCEDURE    ; exit 0 ;;
  268.         -H) AideProc $LA_PROCEDURE 3  ; exit 0 ;;
  269.  
  270.         -x) set -x ; shift ;;
  271.  
  272.         --)    shift ; break ;;
  273.     esac                                                        
  274. done                                                          
  275.  
  276.  
  277. #----------------------------------------------------------------------
  278. # AUTRES DEFINITIONS:
  279. # -------------------
  280. trap TrapInterrup 3 2 15    # Recuperation des interruptions 3, 2 et 15
  281.  
  282. #----------------------------------------------------------------------
  283. # DEBUT ZONE DU PROGRAMME:
  284. # ------------------------
  285.  
  286. [ ! -f "$1" ] && {
  287.     Erreur "Il maque le fichier en entree."
  288.     AideProc $LA_PROCEDURE
  289.     
  290.     exit 0
  291. }
  292.  
  293. fichier=$1
  294. [ `file $fichier | grep -c compress` -gt 1 ] && {
  295.     cp $fichier /tmp/$fichier.Z
  296.     uncompress /tmp/$fichier.Z
  297.     $fichier=/tmp/$fichier
  298.     RM=1
  299. }
  300.  
  301. name=`basename $fichier`
  302. cp $fichier /tmp/${NOM_PROCEDURE}.$$
  303.  
  304. vi /tmp/${NOM_PROCEDURE}.$$ << ETIQ > /dev/null 2>&1
  305. :1,\$s%\\\\s[-+][0-9]\([^\]*\)\\\\s[-+][0-9]%\1%g
  306. :1,\$s%\\\\fB\([^\]*\)\\\\fP%<B>\1</B>%g
  307. :1,\$s%\\\\fB\([^\]*\)\\\\fR%<B>\1</B>%g
  308. :1,\$s%\\\\fB\([^\]*\)\\\\fI\([^\]*\)\\\\fR%<B>\1</B><I>\2</I>%g
  309. :1,\$s%\\\\fI\([^\]*\)\\\\fP%<I>\1</I>%g
  310. :1,\$s%\\\\fI\([^\]*\)\\\\fR%<I>\1</I>%g
  311. :1,\$s%\\\\fI\([^\]*\)\\\\fB\([^\]*\)\\\\fR%<I>\1</I><B>\2</B>%g
  312. :1,\$s%\.BI\(.*\) \(.*\)$%<B>\1</B> <I>\2</I>%g
  313. :1,\$s%\.B[IR] \(.*\)%<B>\1</B>%g
  314. :1,\$s%\.B\(.*\)%<B>\1</B>%g
  315. :1,\$s%\.IP \(.*\) [0-9]i%\.IP \1%g
  316. :1,\$s%\.I[^P] \(.*\)%<I>\1</I>%g
  317. :1,\$s%\.I\(.*\)\\\\fP%<I>\1</I>%g
  318. :1,\$s%\.I\(.*\)%<I>\1</I>%g
  319. :1,\$s%\\\\-\(.*\)%-\1%g
  320. :1,\$s%[sS]ee \"\(.*\)\"%See \"<A HREF\=\"$name.html#\1\">\1</A>\"%g
  321. :1,\$s%[sS]ee \(.*\) \"\(.*\)\"%See \1 \"<A HREF\=\"$name.html#\2\">\2</A>\"%g
  322. :1,\$s%\\\\0\\\\0\\\\(rh\\\\0\\\\0%  =>  %g
  323. :1,\$s%\\\\&%%g
  324. :wq
  325. ETIQ
  326.  
  327. echo "
  328. <HTML><HEAD>
  329. <TITLE>Manuel de la commande: `echo $name|cut -d. -f1`</TITLE>
  330. </HEAD><BODY>
  331. "
  332.  
  333. $AWK '
  334.     BEGIN {
  335.         chapitre=0
  336.         section=0
  337.         sous_chapitre=0
  338.  
  339.         premier=1
  340.         marque=0
  341.         gras=0
  342.         italique=0
  343.         ip=0
  344.         sh=0
  345.         last=0
  346.         tab=0
  347.         see=0
  348.         ul=0
  349.     }
  350.  
  351.     /^\.ad/{
  352.         next
  353.     }
  354.  
  355.     /^\.ns/{
  356.         next
  357.     }
  358.  
  359.     /^\.de/{
  360.         next
  361.     }
  362.  
  363.     /^\.\\"/{
  364.         next
  365.     }
  366.  
  367.     /^\.UC/{
  368.         next
  369.     }
  370.  
  371.     /^\.sp[ \t]*$/{
  372.         print "<BR><BR>"
  373.         next
  374.     }
  375.  
  376.     /^\.ev/{
  377.         next
  378.     }
  379.  
  380.     /^\.t[ia] /{
  381.         next
  382.     }
  383.  
  384.     /^\.nf/{
  385.         if(ul) print "</UL>"
  386.  
  387.         ul=1
  388.         print "<UL>"
  389.         next
  390.     }
  391.  
  392.     /^\.fi/{
  393.         if(ul)    print "</UL>"
  394.         ul=0
  395.         next
  396.     }
  397.  
  398.     /^\.i[nf] /{
  399.         next
  400.     }
  401.  
  402.     /^\.d[es] /{
  403.         next
  404.     }
  405.  
  406.     /^\.n[hfs][ \t]*$/{
  407.         next
  408.     }
  409.  
  410.     /^\.na[ \t]*$/{
  411.         print "<BR>"
  412.         next
  413.     }
  414.  
  415.     /^\.ft/{
  416.         next
  417.     }
  418.  
  419.     /^\.R[ES][ \t]*/{
  420.         next
  421.     }
  422.  
  423.     /^\.TH/{
  424.         if(marque) marque=0
  425.         if(tab) tab=0
  426.         if(ip == 1) print "</UL>"
  427.         if(ul) print "</UL>"
  428.  
  429.         sub(/\.TH/, "", $0)
  430.  
  431.         print "<BR>"
  432.         printf("<H1> <A HREF=%s.html>", nom_appli)
  433.         printf("%s", $1) | "dd conv=ucase 2> /dev/null | cat"
  434.         close("dd conv=ucase 2> /dev/null | cat")
  435.         printf("(%s)", $2)
  436.         print "</A></H1>"
  437.  
  438.         ip=0
  439.         sh=0
  440.         see=0
  441.         ul=0
  442.  
  443.         next
  444.     }
  445.  
  446.     /^\.SH /{
  447.         see=0
  448.  
  449.         if(ip == 1) print "</UL>"
  450.         if(ul) print "</UL>"
  451.         if(sous_chapitre) print "</UL>"
  452.         if(section) print "</UL>"
  453.         if(chapitre) print "</P></DD></DT>"
  454.  
  455.         see=index($0, "SEE ALSO")
  456.  
  457.         sub(/\.SH /, "", $0)
  458.         gsub(/\t/, " ", $0)
  459.  
  460.         if(premier == 0) print "<HR SIZE=5>"
  461.  
  462.         printf("<H2><A NAME=\"%s\">%s</H2>\n", $0, $0)
  463.         print "<DT><DD><P>"
  464.  
  465.         chapitre=1
  466.         sous_chapitre=0
  467.         section=0
  468.         last=2
  469.         marque=0
  470.         tab=0
  471.         ip=0
  472.         premier=0
  473.         sh=1
  474.         ul=0
  475.  
  476.         next
  477.     }
  478.  
  479.     /^\.SS /{
  480.         if(ip == 1) print "</UL>"
  481.         if(ul) print "</UL>"
  482.         if(sous_chapitre) print "</UL>"
  483.         if(section) print "</UL>"
  484.  
  485.         sub(/\.SS /, "", $0)
  486.         gsub(/\t/, " ", $0)
  487.         printf("<H3><A NAME=\"%s\"> <IMG SRC=ball.gif> %s</H3>\n", $0, $0)
  488.         print "<UL>"
  489.  
  490.         section=1
  491.         last=2
  492.         ip=0
  493.         sh=0
  494.         sous_chapitre=0
  495.         marque=0
  496.         tab=0
  497.         see=0
  498.         ul=0
  499.  
  500.         next
  501.     }
  502.  
  503.     /^\.TP [0-9]*[\.]?[0-9]*/{
  504.         if(ip == 1) print "</UL>"
  505.         if(ul) print "</UL>"
  506.         if(last == 0) print "<BR>"
  507.  
  508.         marque=1
  509.         tab=1
  510.         ip=0
  511.         sh=0
  512.         see=0
  513.         ul=0
  514.  
  515.         next
  516.     }
  517.  
  518.     /^\.[HT]P[ \t]*$/ {
  519.         if(ip == 1) print "</UL>"
  520.         if(ul) print "</UL>"
  521.         if(last == 0) print "<BR>"
  522.  
  523.         marque=1
  524.         tab=1
  525.         ip=0
  526.         sh=0
  527.         see=0
  528.  
  529.         next
  530.     }
  531.  
  532.     /\\\(bu/{
  533.         if(ip == 1) print "</UL>"
  534.  
  535.         ip=0
  536.         sh=0
  537.         last=0
  538.         see=0
  539.         ul=0
  540.  
  541.         next
  542.     }
  543.  
  544.     /^\.P[PD][ \t]*[0-9]*/{
  545.         ip=0
  546.         sh=0
  547.         see=0
  548.  
  549.         next
  550.     }
  551.  
  552.     /^\.IP[ \t]*$/{
  553.         if(ip == 1) print "</UL>"
  554.         if(ul) print "</UL>"
  555.         if(last == 0) print "<BR>"
  556.  
  557.         print "<BR><UL>"
  558.  
  559.         ip=1
  560.         marque=0
  561.         tab=0
  562.         sh=0
  563.         last=0
  564.         see=0
  565.         ul=0
  566.  
  567.         next
  568.     }
  569.  
  570.     /^\.IP [ \t]*"[0-9]+\." [0-9]*[ \t]*$/{
  571.         if(ip == 1) print "</UL>"
  572.         if(ul) print "</UL>"
  573.  
  574.         gsub(/\.IP [ \t]*/, "", $0)
  575.         gsub(/"/, "", $0)
  576.         gsub(/ [0-9]*[ \t]*$/, "", $0)
  577.  
  578.         printf("<UL><LI>%s ", $0)
  579.         getline
  580.         print $0
  581.  
  582.         ip=1
  583.         marque=0
  584.         tab=0
  585.         sh=0
  586.         last=0
  587.         see=0
  588.         ul=0
  589.  
  590.         next
  591.     }
  592.  
  593.     /^\.IP/{
  594.         if(ip == 1) print "</UL>"
  595.         if(ul) print "</UL>"
  596.  
  597.         gsub(/\.IP/, "", $0)
  598.         gsub(/"/, "", $0)
  599.  
  600.         if(length($0) > 2) printf("<H3><IMG SRC=ball.gif> %s</H3>\n", $0)
  601.  
  602.         print "<UL><LI>"
  603.  
  604.         ip=1
  605.         sh=0
  606.         marque=0
  607.         tab=0
  608.         last=0
  609.         see=0
  610.         ul=0
  611.  
  612.         next
  613.     }
  614.  
  615.     /^\.LP/{
  616.  
  617.         next
  618.     }
  619.  
  620.     /^$/{
  621.         if(last != 2)
  622.         {
  623.             print "<BR><BR>"
  624.             last=1
  625.         }
  626.  
  627.         next
  628.     }
  629.  
  630.     /\\fB/ {
  631.         if(gras) gsub(/\\fP/, "</B>", $0)
  632.  
  633.         gsub(/\\fB/, "<B>", $0)
  634.         gras=1
  635.     }
  636.  
  637.     /\\fI/ {
  638.         if(italique) gsub(/\\fP/, "", $0)
  639.  
  640.         gsub(/\\fI/, "", $0)
  641.         italique=1
  642.     }
  643.  
  644.     /\\fP/ {
  645.         if(gras)
  646.         {
  647.             gras=0
  648.             gsub(/\\fP/, "</B>", $0)
  649.         }
  650.  
  651.         if(italique)
  652.         {
  653.             italique=0
  654.             gsub(/\\fP/, "", $0)
  655.         }
  656.  
  657.         gsub(/\\fP/, "", $0)
  658.     }
  659.  
  660.     /\.br/ {
  661.         if(marque || last == 1)
  662.             sub(/\.br/, "", $0)
  663.         else
  664.             sub(/\.br/, "<BR>", $0)
  665.  
  666.         print $0
  667.  
  668.         next
  669.     }
  670.  
  671.     /[sS]ee / {
  672.         pos1=index($0, ".html#")
  673.         pos2=index($0, "\">")
  674.         pos1=pos1+length(".html#")
  675.         pos2=pos2+length("\">")
  676.  
  677.         if(pos2 > 0)
  678.         {
  679.             printf("%s", substr($0, 0, pos1-1))
  680.             print substr($0, pos1, pos2-pos1) | "dd conv=ucase 2> /dev/null | cat"
  681.             close("dd conv=ucase 2> /dev/null | cat")
  682.             print substr($0, pos2, length($0)-pos2)
  683.  
  684.             next
  685.         }    
  686.     }
  687.     {
  688.         if(marque)
  689.         {
  690.             marque=0
  691.             if(last == 1)
  692.                 printf("<IMG SRC=ball.gif> %s\n", $0)
  693.             else
  694.                 printf("<BR><IMG SRC=ball.gif> %s\n", $0)
  695.         }
  696.         else
  697.         {
  698.             if(ul)
  699.                 print $0, "<BR>"
  700.             else
  701.             {
  702.                 if (see)
  703.                 {
  704.                     for(i=1; i <= NF; i++)
  705.                     {
  706.                         if(index($i, "<"))
  707.                         {
  708.                             printf("%s ", $i)
  709.                             continue
  710.                         }
  711.  
  712.                         lefichier=$i
  713.                         par=index($i, "(")
  714.  
  715.                         if (par)
  716.                             lefichier=substr($i, 0, par-1)
  717.  
  718.                         rep_fichier=lefichier
  719.                         if (system("ls " rep_fichier " 1> /dev/null 2> /dev/null && exit 1 || exit 0"))
  720.                             printf(" <A HREF=%s.html>%s</A>", lefichier, $i)
  721.                         else
  722.                             printf("%s ", $i)
  723.                     }
  724.  
  725.                     print ""
  726.                 }
  727.                 else
  728.                     print $0
  729.             }
  730.         }
  731.  
  732.         sh=0
  733.         last=0
  734.     }
  735.  
  736.     END {
  737.         if(ip == 2) print "</UL>"
  738.         if(ul) print "</UL>"
  739.         if(sous_chapitre) print "</UL>"
  740.         if(section) print "</P></DD></DT>"
  741.         if(chapitre) print "</P></DD></DT>"
  742.  
  743.         print "</BODY></HTML>"
  744.     }' file=$name nom_appli=`echo $name | cut -d. -f1` /tmp/${NOM_PROCEDURE}.$$
  745.  
  746. rm -f /tmp/${NOM_PROCEDURE}.$$
  747. [ $RM -eq 1 ] && rm -f $fichier
  748.  
  749.