home *** CD-ROM | disk | FTP | other *** search
/ Freelog 9 / Freelog009.iso / BAS / Systeme / ShellUnix / Bookmarks.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  1998-08-18  |  13KB  |  482 lines

  1. #!/bin/sh
  2. #---------------------------------------------------------------------- 
  3. # NOM                                        
  4. #    Bookmarks = Construit des pages HTML a partir d'un Bookmarks.
  5. # SYNTAXE                                    
  6. #    Bookmarks -h|H          (aide)   
  7. #    Bookmarks [-b rgb] [-B image] [-s suffixe] [-T titre] 
  8. #                 bookmarks_netscape
  9. #---------------------------------------------------------------------- 
  10. # VERSION
  11. #    1.0
  12. # DESCRIPTION
  13. #    Contruit a partir un d'un fichier de bookmarks (html) issues de
  14. #   Netscape des pages HTML avec utilisation de FRAME verticale.
  15. #   La premiere concerne la table des Bookmarks (table des matieres). La
  16. #   seconde la liste des references HTTP.
  17. #    La table des Bookmarks utilise les Folder principaux comme "tete de
  18. #   chapitre". Les separateurs et l'arborescence sont conserves.
  19. # OPTIONS
  20. #    -h|H        aide courte ou longue.        
  21. #                                            
  22. #    -b rgb      Pour fixer une couleur RGB en fond des Frames.
  23. #                                            
  24. #    -B image    Pour fixer une image en fond des Frames.
  25. #                                            
  26. #    -s suffixe  Donne un suffixe particulier au fichier, par defaut
  27. #                le suffixe .htm est utilise.
  28. #                                            
  29. #    -T titre    Precise un titre inscrit sur la page des bookmarks,
  30. #                par defaut le titre du fichier passe en argument est
  31. #                utilise.
  32. #                                            
  33. # EXEMPLE(S)
  34. #    * Lancement de l'application avec affichage de l'aide longue:
  35. #        $ Bookmarks -H
  36. #    * Construit de nouvelles pages suffixees par html. Un fond blanc
  37. #    est applique au FRAME avec un titre :
  38. #        $ Bookmarks -T "Mes Marks" -s html -b "#FFFFFF" book.html
  39. # REMARQUE(S)
  40. #    * Procedure distribuee en Freeware/Gratuiciel.
  41. #                                            
  42. # AUTEUR
  43. #   Copyright (c) 1998 Bertrand LE QUELLEC, All Rigths Reserved.
  44. #                                            
  45. # CONTACT
  46. #   eMail : blq@mygale.org ou blq@wanadoo.fr
  47. #   Url   : http://www.mygale.org/09/blq/ ou http://perso.wanadoo.fr/blq/
  48. #
  49. # Cree : 01/07/98
  50. #---------------------------------------------------------------------- 
  51. # Permission to use, copy, modify, distribute, and sell this software
  52. # and its documentation for any purpose is hereby granted without fee,
  53. # provided that the above copyright notice appear in all copies and
  54. # that both that copyright notice and this permission notice appear in
  55. # supporting documentation, and that the name of Bertrand LE QUELLEC    
  56. # not be used in advertising or publicity pertaining to distribution 
  57. # of the software without specific, written prior permission. 
  58. # Bertrand LE QUELLEC makes no representations about the suitability
  59. # of this software for any purpose. It is provided "as is" without
  60. # express or implied warranty.
  61. # THIS SOFTWARE IS PROVIDED BY Bertrand LE QUELLEC `AS IS' AND ANY
  62. # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  64. # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Bertrand LE QUELLEC BE
  65. # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  66. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  67. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  68. # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  69. # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  70. # OR OTHERWISE)     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  71. # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  72. #---------------------------------------------------------------------- 
  73.  
  74. # ------------------------------------------ 
  75. # ZONE DE DEFINITION DES VARIABLES GLOBALES:
  76. # ------------------------------------------
  77. NOM_PROCEDURE=`basename $0`
  78. LA_PROCEDURE=$0
  79. CD=`pwd`
  80. AWK=`[ -f /usr/bin/nawk ] && echo "nawk" || echo "awk" `
  81.  
  82.  
  83. ##
  84. ## Variables particulieres:
  85. ##
  86. DATE=`date "+%d/%m/%y"`
  87. MODE_COULEUR=0
  88. VISU_HTML=netscape
  89.  
  90. USE_PIPE=0
  91. PIPE=/tmp/pipe$$
  92.  
  93.  
  94. ##
  95. ## Les variables concernant l'utilisateur:
  96. ##
  97. DEFAUT_AUTEUR=`whoami`
  98. DEFAUT_EDITEUR=${EDITOR}:-vi
  99. DEFAUT_SHELL=${SHELL}:-/bin/sh
  100.  
  101.  
  102. #---------------------------------------------------------------------- 
  103. # ----------------------------------------- 
  104. # ZONE DE DEFINITION DES FONCTIONS LOCALES:
  105. # -----------------------------------------
  106. # La fonction doit etre precedee d'un commentaire avec en debut de ligne
  107. # le caractere # (diese) repete deux fois.
  108.  
  109. ##
  110. ## Affiche un message en rouge si l'on se trouve dans une fenetre hpterm
  111. ## et se met en attente de 2 secondes.
  112. ## Il est possible de recuperer le code retour de la fonction.
  113. ##
  114. Erreur()
  115. {
  116.     [ $# -eq 0 ] && return -1
  117.  
  118.     echo "\n\t${ROUGE}$*${NORMAL}"
  119.     echo "\n Appuyez sur la touche Entree (Enter) pour continuer \c"
  120.     read choix
  121.  
  122.     return 0
  123. }
  124.  
  125.  
  126. ##
  127. ## En cas d'une interruption la fonction suivante est executee.
  128. ## Les interruptions sont des signaux envoyes au processus du script,
  129. ## par la commande Unix: kill(1). La "capture" de ces signaux est
  130. ## identifiee par la commande Shell: trap definie apres la zone des
  131. ## options.
  132. ##
  133. TrapInterrup()
  134. {
  135.     # Vous pouvez executer des instructions avant une sortie 
  136.     # par signal (ou brutale!).
  137.     exit 1
  138. }
  139.  
  140.  
  141. ##
  142. ## Renvoie le PATH et nom d'un ou plusieurs executables.
  143. ## Si le ou les executables sont introuvables la fonction ne renvoie rien.
  144. ## Dans le cas d'un alias la fonction ne renvoie rien, car le PATH n'est
  145. ## pas recuperable.
  146. ##
  147. Type()
  148. {
  149.     [ $# -ne 0 ] && type $* | ${AWK} '$2=="is" && $4!="alias" {print $NF}'
  150. }
  151.  
  152.  
  153. ##
  154. ## Affiche l'aide indiquee en en-tete du script shell.
  155. ## Ne pas supprimer car cette fonction est utilisee a l'appel de la
  156. ## procedure avec les options -H ou -H
  157. ##
  158. AideProc()
  159. {
  160.     fichier=$1
  161.     niveau=$2
  162.  
  163.     [ -z "$fichier" ] && {
  164.         Erreur "AideProc(): nombre d'argument incorect."
  165.         return 0
  166.     }
  167.  
  168.     [ ! -f "$fichier" ] && {
  169.         [ -f "`basename $fichier`" ] && fichier=`basename $fichier` || {
  170.             Erreur "AideProc(): impossible d'atteindre le fichier $fichier."
  171.             return 0
  172.         }
  173.     }
  174.  
  175.     [ ${niveau:=2} = 2 ] && {
  176.         ${AWK} 'BEGIN {i=2}
  177.             /^#[-]+/{
  178.                 if(--i<=0)exit
  179.                 next
  180.             }
  181.             /^#[     ]*[A-Z]*[     ]*$/{
  182.                 next
  183.             }
  184.             /^#[^!]/{
  185.                 print substr($0,1,80)
  186.             }
  187.             /^#[ \t]*$/{
  188.                 print ""
  189.             }
  190.         ' $fichier | sed -e 's/^#[     ]*//'
  191.     } || {
  192.         ${AWK} '\
  193.             /^#[-]+/{
  194.                 if(--i<=0) exit
  195.                 next
  196.             }
  197.             /^#[^!]/{
  198.                 print substr($0,2,80)
  199.             }
  200.             /^#[ \t]*$/{
  201.                 print ""
  202.             }
  203.         ' i=$niveau $fichier | pg -e
  204.     }
  205. }
  206.  
  207.  
  208. ##
  209. ## Renvoie le type de la machine ou l'on se trouve et surtout le
  210. ## systeme d'exploitation en cours. La fonction renvoie un des numero
  211. ## suivant en reponse:
  212. ##
  213. ##    inconue            0
  214. ##
  215. ##    SunOs              1
  216. ##    Sun Solaris        2
  217. ##    HP s700            3
  218. ##    HP s800            4
  219. ##    HP s300            5
  220. ##    Silicon Graphic    6
  221. ##    IBM AIX            7
  222. ##
  223. ## Pour recuperer le code retour de la fonction, utilisez la variable $?
  224. ##
  225. Machine()
  226. {
  227.     os=`uname`
  228.  
  229.     [ "$os" = "Solaris" ] && return 2
  230.  
  231.     [ "$os" = "SunOS" ] && {
  232.         [ -f /vmunix ] && return 1 || return 2
  233.     }
  234.     
  235.     [ "$os" = "HP-UX" ] && {
  236.         if uname -a | grep "PA-RISC" 1> /dev/null
  237.         then
  238.             return 3
  239.         elif uname -a | grep "HP-PA" 1> /dev/null
  240.             return 4
  241.         then
  242.             return 5
  243.         fi
  244.     }
  245.  
  246.     [ "$os" = "IRIX" ] && return 6
  247.  
  248.     [ "$os" = "AIX" ] && return 7
  249.  
  250.     return 0
  251. }
  252.  
  253.  
  254. ##
  255. ## Permet de visualiser un fichier HTML avec le bon executable:
  256. ##    netscape ou mosaic
  257. ##
  258. VoirHTML ()
  259. {
  260.     fichier="$*"
  261.  
  262.     [ -z "$VISU_HTML" ] && VISU_HTML=mosaic
  263.  
  264.     chemin=`Type $VISU_HTML`
  265.     [ -z "$chemin" ] && VISU_HTML=netscape
  266.  
  267.     chemin=`Type $VISU_HTML`
  268.     [ -z "$chemin" ] && {
  269.         Erreur "Executable du visualiseur HTML non accessible !"
  270.         return 0
  271.     }
  272.  
  273.     $VISU_HTML $fichier &
  274.     return 1
  275. }
  276.  
  277.  
  278. #---------------------------------------------------------------------- 
  279. # ---------------------------------------------- 
  280. # DEFENITION DES VARIABLES LOCALES AU PROGRAMME:
  281. # ----------------------------------------------
  282.  
  283.  
  284. #---------------------------------------------------------------------- 
  285. # ---------------------------------------------- 
  286. # DEFENITION DES FONCTIONS LOCALES AU PROGRAMME:
  287. # ----------------------------------------------
  288.  
  289. LISTE_FICHIERS=""
  290.  
  291. BackCOLOR=""
  292. BackIMAGE=""
  293. Titre=""
  294.  
  295. Suffixe="htm"
  296.  
  297.  
  298. #---------------------------------------------------------------------- 
  299. # ------------------------- 
  300. # RECUPERATION DES OPTIONS:
  301. # -------------------------
  302. set -- `getopt hHxb:B:T:s: $*`                
  303. for opt in $*                                            
  304. do                                                             
  305.     case $opt in                                           
  306.         -h) AideProc $LA_PROCEDURE    ; exit 0 ;;
  307.         -H) AideProc $LA_PROCEDURE 3  ; exit 0 ;;
  308.  
  309.         -x) set -x ; shift ;;
  310.  
  311.         -b) BackCOLOR=" bgcolor=\"$2\"" ; shift ; shift ;;
  312.         -B) BackIMAGE=" background=\"$2\"" ; shift ; shift ;;
  313.         -T) Titre="\"$2\"" ; shift ; shift ;;
  314.  
  315.         -s) Suffixe="$2" ; shift ; shift ;;
  316.  
  317.         -)  cat - > $PIPE
  318.             USE_PIPE=1
  319.             exec <&- ; shift ;;
  320.  
  321.         --) shift ; break ;;
  322.     esac                                                        
  323. done                                                          
  324.  
  325. LISTE_FICHIERS="$*"
  326.  
  327. HTML_TABLE="BookTable.${Suffixe}"
  328. HTML_DISPLAY="BookDisplay.${Suffixe}"
  329. HTML_INDEX="bookmarks.${Suffixe}"
  330.  
  331.  
  332. #----------------------------------------------------------------------
  333. # AUTRES DEFINITIONS:
  334. # -------------------
  335. trap TrapInterrup 3 2 15    # Recuperation des interruptions 3, 2 et 15
  336.  
  337. #----------------------------------------------------------------------
  338. # DEBUT ZONE DU PROGRAMME:
  339. # ------------------------
  340.  
  341. [ -z "$LISTE_FICHIERS" ] && exit 0
  342.  
  343.  
  344. # ------------------------------------------
  345. # --- INDEX.HTM
  346. echo "\n Creation en cours $HTML_INDEX ..."
  347.  
  348. echo "<HTML>
  349. <HEAD><TITLE>` [ -z \"$Titre\" ] && echo \"Liste de Bookmarks\" || echo $Titre`</TITLE></HEAD>
  350. <FRAMESET COLS=\"30%,75%\" NAME=\"bookmarks\" BORDER=1 FRAMEBORDER=\"YES\" FRAMESPACING=0 SCOLLING=\"auto\">
  351. <FRAME SRC=$HTML_TABLE NAME=\"table\">
  352. <FRAME SRC=$HTML_DISPLAY NAME=\"display\">
  353. </FRAMESET>
  354. </HTML> " > $HTML_INDEX
  355.  
  356.  
  357. # ------------------------------------------
  358. # --- TABLE.HTM
  359. echo " Creation en cours $HTML_TABLE ..."
  360.  
  361. echo "<HTML>
  362. <HEAD><TITLE>Table des Bookmarks</TITLE></HEAD>
  363. <BODY${BackCOLOR}${BackIMAGE}>
  364. <CENTER><H3>Table des Bookmarks</H3></CENTER>
  365. " > $HTML_TABLE
  366.  
  367. for file in $LISTE_FICHIERS
  368. do
  369.     echo "\tTraitement ${AWK} $file ..."
  370.     $AWK -F ">" ' BEGIN { flag=0 }
  371.         /<DL><p>/ {
  372.             if ( flag == 1 )
  373.                 print "<UL>"
  374.  
  375.             flag=flag+1
  376.             next
  377.         }
  378.         /<\/DL><p>/ {
  379.             flag=flag-1
  380.  
  381.             if ( flag == 1 )
  382.                 print "</UL>"
  383.  
  384.             next
  385.         }
  386.         /<HR/ {
  387.             print "<HR SIZE=6><BR>"
  388.             next
  389.         }
  390.         /<DT><H3 FOLDED ADD_DATE/ {
  391.             gsub(/Θ/, "\é", $0)
  392.             pos1=index($3, "<")
  393.  
  394.             if ( pos1 )
  395.                 if ( flag == 1 )
  396.                     printf("<A HREF=\"%s#%s\" TARGET=\"display\"><B>%s</B></A><BR>\n", disp_html, substr($3, 1, pos1-1), substr($3, 1, pos1-1))
  397.                 else
  398.                     printf("<LI>%s<BR>\n", substr($3, 1, pos1-1))
  399.             else
  400.                 printf("%s\n", $3)
  401.         }' disp_html=$HTML_DISPLAY $file >> $HTML_TABLE
  402. done
  403.  
  404. echo "</BODY></HTML>" >> $HTML_TABLE
  405.  
  406.  
  407. # ------------------------------------------
  408. # --- DISPLAY.HTM
  409. echo " Creation en cours $HTML_DISPLAY ..."
  410.  
  411. echo "<HTML>
  412. <HEAD><TITLE>Affichage des Bookmarks</TITLE></HEAD>
  413. <BODY $BackCOLOR>
  414. " > $HTML_DISPLAY
  415.  
  416. for file in $LISTE_FICHIERS
  417. do
  418.     echo "\tTraitement $file ..."
  419.     sed -e 's%^\(.*\) ADD_DATE\(.*\)">\(.*\)$%\1>\3%' $file | $AWK -F ">" '
  420.         BEGIN { dtFlag=0 ; flag=0 }
  421.         /<H1>/ {
  422.             gsub(/Θ/, "\é", $0)
  423.             if (length(leT))
  424.                 print "<CENTER><H1>", leT, "</H1></CENTER>"
  425.             else
  426.                 print "<CENTER>", $0, "</CENTER>"
  427.  
  428.             next
  429.         }
  430.         /<DL><p>/ {
  431.             if ( dtFlag == 1 )
  432.                 print "<UL>"
  433.  
  434.             dtFlag=dtFlag+1
  435.             next
  436.         }
  437.         /<\/DL><p>/ {
  438.             dtFlag=dtFlag-1
  439.  
  440.             if ( dtFlag == 1 )
  441.                 print "</UL>"
  442.  
  443.             next
  444.         }
  445.         /<DT><H3 FOLDED/ {
  446.             flag=1
  447.             gsub(/Θ/, "\é", $0)
  448.             pos1=index($3, "<")
  449.  
  450.             printf("<A NAME=\"%s\">\n", substr($3, 1, pos1-1))
  451.             gsub(/ FOLDED/, "", $0)
  452.  
  453.             if ( dtFlag == 1 )
  454.                 print "<P>", $0
  455.             else
  456.                 print "sub_h3", $0
  457.  
  458.             next
  459.         }
  460.         // {
  461.             if (flag == 1 )
  462.             {
  463.                 gsub(/Θ/, "\é", $0)
  464.                 print $0
  465.             }
  466.         }' leT=$Titre | sed -e 's%sub_h3\(.*\)<H3>\(.*\)</H3>%<DT><H4><I>\2</I></H4>%' >> $HTML_DISPLAY
  467. done
  468.  
  469. echo "</BODY></HTML>" >> $HTML_DISPLAY
  470.  
  471.