#! /bin/sh
############################################################################
#  fotolist2html - Bourne Shell Skript to create an HTML index page for    #
#                  picture files                                           #
#                                                                          #
#  Copyright (C) 1998-2005 Peter J. Weyers                                 #
#                                                                          #
#  This program is free software; you can redistribute it and/or modify    #
#  it under the terms of the GNU General Public License version 2 as       #
#  published by the Free Software Foundation.                              #
#                                                                          #
#  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.                            #
############################################################################

# Setting some defaults:
HTMLFILE=index.html
DOCTITLE="Picture List"
PAGETITLE="Picture List"
PRG_NAME="fotolist2html"
ICON_SUFFIX="_i.jpg"
ORIG_SUFFIX=".orig"
ICONLENGTH="140"
TABCOLS="4"
PICFILES=""
DOS=""
TEXTMODE=""
TEXT_ASK="yes"
COPYRIGHT="dEFAULT"

while [ "$1" ]
do
 case "$1" in
  -file)      HTMLFILE="$2"
              shift 2
              ;;
  -names)     echo "Generating Name files"
              eval `/hb/www/bin/listhand /hb/www/lists/memberlist \
                    -search -picture . -mask "name picture" \
              |sed -e "s/\([^ .][^ .]*\.[^ .][^ .]*\)/>\1.txt/g" \
                   -e "s/^\(.*\)$/echo \1;/g"`
	      shift
              ;;
  -title)     DOCTITLE="$2"
              PAGETITLE="$2"
              shift 2
              ;;
  -cols)      TABCOLS="$2"
	      shift 2
              ;;
  -iconsize)  ICONLENGTH="$2"
              shift 2
              echo -n "$PRG_NAME: Warning: Already existing pictures " >&2
              echo    "won't be remade!" >&2
              ;;
  -imgwidth)  IMGWIDTH="$2"
              shift 2
              echo -n "$PRG_NAME: Warning: Already existing pictures " >&2
              echo    "won't be remade!" >&2
              ;;
  -imgheight) IMGHEIGHT="$2"
              shift 2
              echo -n "$PRG_NAME: Warning: Already existing pictures " >&2
              echo    "won't be remade!" >&2
              ;;
  -dos)       DOS="yes"
              shift 1
              ;;
  -dontask)   TEXT_ASK="no"
              shift 1
              ;;
  -filesize)  TEXTMODE=filesize
              shift 1
              ;;
  -dummytext) DUMMYTEXT="$2"
              shift 2
              ;;
  -quality)   quality="-quality $2"
              shift 2
	      ;;
  -border)    border='BORDER="'"$2"'"'
              shift 2
              ;;
  -nocopyright) COPYRIGHT="nONE"
              shift 1
              ;;
  -copyright) COPYRIGHT="$2"
              shift 2
              ;;
  -y)         YES="yes" 
              shift
              ;;
  *$ICON_SUFFIX) echo "$PRG_NAME: skipping $1"
              shift
              ;;
  -?|-h|-help)echo "Usage: ${0##*/} [<options>] file1 [file2 [file3 ...]]"
              echo "available options:"
              echo " -file  <string>       Filename of HTML Document"
              echo " -title <string>       Title of HTML Document"
              echo " -cols  <number>       Number of columns of HTML table"
              echo " -iconsize <number>    Width (or height) of thumbnail pictures"
              echo " -imgwidth <number>    Resize picture to that width (at max.)"
              echo " -imgheight <number>   Resize picture to that height (at max.)"
              echo " -border <width>       Value for border element of HTML img tag" 
              echo " -names                Create .txt files out of memberlist"
	      echo " -dos                  Use ********.*** names for icons"
              echo " -dontask              Don't ask for text. Use existing"
              echo "                       *.txt files only" 
              echo " -dummytext <text>     Use <text> instead of filename"
              echo " -y                    Implicitly answer yes (e.g to overwrite HTML file)"
              echo " -filesize             Use filesize instead of filename"
              echo " -nocopyright          Donīt include a copyright notice"
              echo " -copyright <text>     Add <text> as copyright notice"
	      echo 
              exit
              ;;
  -*)         echo "$PRG_NAME: unknown option: $1" >&2
	      exit
              ;;
  *)          PICFILES="$PICFILES $1"
              shift
              ;;
 esac
done

counter=0

if [ -s "$HTMLFILE" ] 
then

 echo $PRG_NAME': File "'$HTMLFILE'" exists!'
 if [ foo"yes" == foo"$YES" ]
 then
  mv "$HTMLFILE" "$HTMLFILE"~
 else
  rm -i "$HTMLFILE"
 fi
fi

if [ -s "$HTMLFILE" ] 
then

 echo $PRG_NAME': File "'$HTMLFILE'" not changed!!!!'

else

 echo '<HTML>' >> $HTMLFILE
 echo '<HEAD>' >> $HTMLFILE
 echo '<TITLE>' $DOCTITLE '</TITLE>' >> $HTMLFILE
 echo '<!-- Generated with '$PRG_NAME' on '`date +"%b-%e-%y %I:%M %p"`' by '$USER' -->' >> $HTMLFILE
 echo '</HEAD>' >> $HTMLFILE
 echo '<BODY BGCOLOR="fffff0">' >> $HTMLFILE

 if [ -n "$PAGETITLE" ] ; then 
  echo '<CENTER><H1>' $PAGETITLE '</H1></CENTER>' >> $HTMLFILE
  echo '<HR>' >> $HTMLFILE
 fi

# echo '<UL>' >> $HTMLFILE

 echo '<TABLE WIDTH="100%">' >> $HTMLFILE
 
 column=0
 FILES_CREATED=" "
 TEXTLINE="<TR ALIGN=CENTER>"

 for PICFILE in $PICFILES
 do
  case ${PICFILE} in
  *.txt)
    if [ "$column" != 0 ]
    then
      TEXTLINE=$TEXTLINE'</TR>'
      echo '</TR>' >> $HTMLFILE
      echo $TEXTLINE >> $HTMLFILE
      TEXTLINE=""
      let column=0
    fi
    echo inserting Textfile $PICFILE
    echo  "<TR ALIGN=CENTER><TD COLSPAN="$TABCOLS">" >> $HTMLFILE
    cat ${PICFILE} >> $HTMLFILE
    echo  "</TD></TR>" >> $HTMLFILE
    ;;    
  *)
    if [ "$column" = 0 ]
    then 
     echo "<TR ALIGN=CENTER>" >> $HTMLFILE
    fi
    let column=column+1
    if [ fo"${DOS}" = fo"yes" ]
    then
      ICONFILE=`echo ${PICFILE}|\
    		sed -e "s:\.:_:g" -e "s:^\(......\).*$:\1:g"`${ICON_SUFFIX}
      while [ 1 ]
      do
       case "$FILES_CREATED" in
       *" ${ICONFILE} "*)
         let counter=counter+1
         ICONFILE=`echo "${PICFILE}00${counter}"|\
           sed -e "s:\.:_:g" -e "s:^\(....\).*\(..\)$:\1\2:g"`${ICON_SUFFIX}
         ;;
       *) break;;
       esac
      done
    else
      ICONFILE=`echo "$PICFILE"|\
    		sed -e 's:\(.*\)\.\([^.]*\):\1_\2:g'`"$ICON_SUFFIX"
      if [ -n "$IMGWIDTH" -a -n "$IMGHEIGHT" ]
      then
        if [ ! -f "${PICFILE}${ORIG_SUFFIX}"  ]
        then
          if mv -iv "${PICFILE}" "${PICFILE}${ORIG_SUFFIX}" 
          then
            eval `identify "${PICFILE}${ORIG_SUFFIX}" | \
             sed -e "s:^.* \([0-9]*\)x\([0-9]*\).*$:origwidth=\1;origheight=\2:g"`
            if [ `expr $origheight \* $IMGWIDTH` -lt `expr $origwidth \* $IMGHEIGHT`  ]
            then
             convert $quality -geometry "$IMGWIDTH"  "${PICFILE}${ORIG_SUFFIX}" "$PICFILE"
            else
             convert $quality -geometry x"$IMGHEIGHT" "${PICFILE}${ORIG_SUFFIX}" "$PICFILE"
            fi   
            # remove all unnecessary headers etc.:
            jhead -purejpg "$PICFILE"
          else
             echo "Moving ${PICFILE} to ${PICFILE}${ORIG_SUFFIX} failed - skipping resizing" >&2
          fi
        else
          echo "$PRG_NAME: ${PICFILE}${ORIG_SUFFIX} exists - no resizing"
        fi
      fi 
    fi
    FILES_CREATED="${FILES_CREATED}${ICONFILE} "
    if [ -f "$PICFILE" ]
    then
     if [ ! -r "$ICONFILE" ] ; then
      echo $PRG_NAME': Creating "'$ICONFILE'"'
      eval `identify "$PICFILE" | \
       sed -e "s:^.* \([0-9]*\)x\([0-9]*\).*$:origwidth=\1;origheight=\2:g"`
      if [ "$origheight" -lt "$origwidth" ]
      then
       convert -geometry "$ICONLENGTH" "$PICFILE" "$ICONFILE"
      else
       convert -geometry x"$ICONLENGTH" "$PICFILE" "$ICONFILE"
      fi
      # remove all unnecessary headers etc.:
      jhead -purejpg "$ICONFILE" 
      if [ -s "$ICONFILE".0 ]
      then
       echo $PRG_NAME': Linking "'$ICONFILE'" to "'$ICONFILE'.0"'
       ln -s "$PWD"/"$ICONFILE".0 "$ICONFILE"
      fi
     else
      echo $PRG_NAME': Using old "'$ICONFILE'"'
     fi
     if [ ! -r "$ICONFILE" ] ; then
      echo $PRG_NAME': Creating dummy file "'$ICONFILE'"'
      touch "$ICONFILE"
     fi

     PICLINK="` echo  $PICFILE | sed -e 's/\?/%3F/g'`"
     ICONLINK="`echo $ICONFILE | sed -e 's/\?/%3F/g'`"

     if [ -s "$ICONFILE" ] ; then
       eval `identify "$ICONFILE" | \
        sed -e "s:^.* \([0-9]*\)x\([0-9]*\).*$:iconwidth=\1;iconheight=\2:g"`

#      echo '<A HREF="'$PICLINK'"><IMG SRC="'$ICONLINK'" ALIGN=MIDDLE>'\
       echo '<TD><A HREF="'$PICLINK'"><IMG SRC="'$ICONLINK'" WIDTH="'$iconwidth'" HEIGHT='$iconheight' '$border'"></A></TD>'\
    				   >> $HTMLFILE
     else
      echo $PRG_NAME':No thumbnail image for "'$PICFILE'" produced'
      echo '<TD><A HREF="'$PICLINK'">'   >> $HTMLFILE
      echo $PICFILE'</A></TD> '          >> $HTMLFILE
     fi
     if [ -s "$PICFILE.txt" ]
     then
       pictext=`cat $PICFILE.txt`
     else
       answer=""
       if [  "yes" = "${TEXT_ASK}" ]
       then
         echo "Text for $PICFILE:"
         read answer
       fi
       if [ -z "$answer" ]
       then 
         if [ "filesize" = "${TEXTMODE}" ]
         then
           pictext=`ls -lh "$PICFILE"| awk '{print $5}'`"B"
         elif set | grep "^DUMMYTEXT" > /dev/null
         then
           pictext="${DUMMYTEXT}"
         else 
    	   pictext="$PICFILE"
         fi
       else
    	 pictext="$answer"
       fi
     fi
     if [ -n "${pictext}" -a "${pictext}" != "${PICFILE}" ] 
     then
       echo "$pictext" > $PICFILE.txt
     fi 
     TEXTLINE=$TEXTLINE'<TD>'"${pictext}"'</TD>'
    fi
    if [ "$column" = "$TABCOLS" ]
    then
      TEXTLINE=$TEXTLINE'</TR>'
      echo '</TR>' >> $HTMLFILE
      echo $TEXTLINE >> $HTMLFILE
      TEXTLINE="<TR ALIGN=CENTER>"
      let column=0
    fi
    ;;
   esac
 done

 if [ "$column" != "$TABCOLS" ]
 then
   TEXTLINE=$TEXTLINE'</TR>'
   echo '</TR>' >> $HTMLFILE
   echo $TEXTLINE >> $HTMLFILE
   TEXTLINE=""
   let column=0
 fi

 echo '</TABLE>' >> $HTMLFILE
# echo '</UL>' >> $HTMLFILE
 case "${COPYRIGHT}" in 
   "nONE") ;;
   "dEFAULT") 
     echo '<DIV ALIGN="right"><SMALL>' >> $HTMLFILE
     echo 'Indexpage created by <I><A HREF="http://www.usr-local.de/scripts">fotolist2html</A></I> &copy; 1998-2005 Peter J. Weyers' >> $HTMLFILE
     echo '<BR>using <I>ImageMagick</I>' >> $HTMLFILE
     echo '&copy; 1998 E. I. du Pont de Nemours and Company' >> $HTMLFILE
     echo '</SMALL></DIV>' >> $HTMLFILE
     ;;
   "lINE") 
     echo '<SMALL>' >> $HTMLFILE
     echo 'Indexpage created by <I><A HREF="http://www.usr-local.de/scripts">fotolist2html</A></I> &copy; 1998-2005 Peter J. Weyers' >> $HTMLFILE
     echo 'using <I>ImageMagick</I>' >> $HTMLFILE
     echo '&copy; 1998 E. I. du Pont de Nemours and Company' >> $HTMLFILE
     echo '</SMALL>' >> $HTMLFILE
     ;;
   *)
     echo '<SMALL>' >> $HTMLFILE
     echo '&copy; '"$COPYRIGHT" >> $HTMLFILE
     echo '</SMALL>' >> $HTMLFILE
     ;;
 esac

 echo '<HR>' >> $HTMLFILE
 echo '<ADDRESS>' >> $HTMLFILE
 
 date +"%e-%b-%y" >> $HTMLFILE
 
 if [ -r $HOME/.2html_name ] ; then
   cat $HOME/.2html_name >> $HTMLFILE
 else
   echo $USER@`hostname` >> $HTMLFILE
 fi

 echo '</ADDRESS>' >> $HTMLFILE
 echo '</BODY>' >> $HTMLFILE
 echo $PRG_NAME': File "'$HTMLFILE'" created.'
fi

# $Id: fotolist2html,v 1.1 2026/04/19 16:45:52 peter Exp $
