#!/bin/sh

# PTFLG - small filelist generator
# uses protick.cfg, supports files.lng and writes ifcico-reqmap
# written by Sascha Silbe <Sascha.Silbe@ldknet.org>
# License: GNU General Public License (GPL)

#
# configuration 
#

PROGNAME=PTFLG
PROGVERSION=1.1

# path and filename of protick.cfg
PROTICKCFG=/husky/cfg/protick.cfg
# path and filename of filelist to be written
FILELIST=/husky/files/24350424.all
# path and filename of temporary filelist
TEMPFILELIST=/husky/work/24350424.all.tmp
# path and filename of compressed (pkzip) filelist
FILELISTZIP=/husky/files/24350424.zip
# path and filename of temporary directory list
DIRLIST=/husky/work/filearea.lst
# fileareas basepath, will be stripped from areanames
BASEPATH=/husky/files
# filelist header
HEADERFILE=/husky/cfg/filelist.head
# this file is prepended to OKFILE
MAGICFILE=/husky/cfg/magic.cfg
# ifcico request-map
REQMAP=/husky/cfg/reqmap
# temporary reqmap
TEMPREQMAP=/husky/work/reqmap.tmp
# binkley okfile
OKFILE=/husky/cfg/okfile.lst
# temporary okfile
TEMPOKFILE=/husky/cfg/okfile.lst.tmp

echo $PROGNAME V$PROGVERSION

#
# generate list of directories
#

echo generating dirlist
cat ${PROTICKCFG} \
| sed -e "/^\;/d" \
| awk '
  BEGIN { 
    area="" 
  } 
  /^[Aa][Rr][Ee][Aa]=/ { 
    area=$0 
    sub(/[Aa][Rr][Ee][Aa]=/, "", area) 
    next 
  } 
  /^[Pp][Aa][Tt][Hh]=/ { 
    if (match(tolower(area), /^autocreate:[0-9]+$/) == 0) { 
      sub(/[Pp][Aa][Tt][Hh]=/, "", $0) 
      print $0 
    } 
  } 
  {
    next 
  }
' \
| sort \
> ${DIRLIST}

#
# generate filelist
#

echo generating temporary reqmap, filelist and okfile

# init files
echo > ${TEMPREQMAP}
echo @FILES $FILELISTZIP > $TEMPOKFILE
cat $MAGICFILE >> $TEMPOKFILE

# copy static header to filelist
cp ${HEADERFILE} ${TEMPFILELIST}

# process areas
for f in `cat ${DIRLIST}` ; do 
 f1=${f##${BASEPATH}/} 

# add entry to okfile
 echo $f/\* >> $TEMPOKFILE

# print areaname
 echo
 echo ------------------------------------------------------------------------------
 echo Area $f1 
 echo ------------------------------------------------------------------------------
 echo
 if [ -f $f/files.bbs ] ; then 
  cat $f/files.bbs \
  | awk '/[ +*]/ { print $0 }
    { if (system("test -f '$f'/" $1) == 0) { print $1 " " "'$f'/" $1 >> "'${TEMPREQMAP}'" } }' 2> /dev/null 
 fi
 if [ -f $f/files.lng ] ; then
  cat $f/files.lng \
  | awk '{ print $2 " '$f'/" $1 }' \
  >> ${TEMPREQMAP}
 fi 

# empty line after each area
 echo
 done \
|sed "/^Area /s#/#.#g" \
>> ${TEMPFILELIST}

# write variable footer
echo >> ${TEMPFILELIST}
echo >> ${TEMPFILELIST}
echo >> ${TEMPFILELIST}
echo ============================================================================== >> ${TEMPFILELIST}
echo >> ${TEMPFILELIST}
echo Filelist generated on `date +%d.%m.%Y` by ${PROGNAME} ${PROGVERSION} >> ${TEMPFILELIST}
echo >> ${TEMPFILELIST}
echo ============================================================================== >> ${TEMPFILELIST}
echo >> ${TEMPFILELIST}

echo copying temporary files to final ones
cp $TEMPFILELIST $FILELIST
cp $TEMPREQMAP $REQMAP
cp $TEMPOKFILE $OKFILE

echo removing temporary files
rm $TEMPFILELIST $TEMPREQMAP $TEMPOKFILE $DIRLIST

echo compressing filelist
zip -9j ${FILELISTZIP} ${FILELIST}

echo finished
