#!/usr/local/bin/bash ## ############################################################# ## Fixing postscript files that are corrupted ## ## Usage: ## ofixps [switches] arg ## ## Frozen Versions: 1.0 ## 1.1 ## 1.2 ## 1.3 ## 1.5 ## ## Relies on: (see help description) ## ## ############################################################# ## @FILE: ofixps ## @PLACE: Israfil Notebook ## @FORMAT: Bash Script ## @AUTHOR: M. Oliver M'o'ller ## @BEGUN: Tue Dec 12 20:48:27 2000 ## @VERSION: V1.6 Thu Oct 10 14:04:10 2002 ## ############################################################# ## SHELL=/usr/local/bin/bash ## -- elementaries -------------------------------------------------------- ## ## Shell settings QUIET=false; FILES=""; OUTFILE=""; NPAGES=""; VERBOSE=false; LANDSCAPE_OUTPUT=false; PRESERVE_INTERMEDIATE=false; ROTATE_DEGREE="0"; SCALE="1.0"; X_OFFSET="0"; Y_OFFSET="0"; EVEN_OFFSET="0mm"; YEVEN_OFFSET="0mm"; ASSUME_YES=false; PORTRAIT_OFFSET="110mm"; LANDSCAPE_OFFSET="60mm"; FLIPPAGE_OFFSET="00mm"; WORKING_DIR="/tmp"; REVERSE_ORDER=false; FILTER_THROUGH_PDF=false; PS2PDF_COMMAND="ps2pdf"; PDF2PS_COMMAND="pdf2ps"; FLIP_EVEN_PAGES=false; PRINT_COMMAND=""; PRINT_MEDIA="a4"; ADJUST_A4=false; BOUNDING_BOX=""; BOUNDING_BOX_COUNT=0; ## -- verbose output ---------------------------------- VERBOSE_OUTPUT="1"; ## -- fattening --------------------------------------- PS_TO_BMP_SWITCHES=""; FATTEN_FACTOR=""; FATTEN_GRANULARITY="2.0"; ONLY_VERTICAL=false; ## ---------------------------------------------------- BACKSLASH="\\"; VERSION_NUMBER="V1.6 "; VERSION_DATE="Thu Oct 10 14:04:10 2002" ; VERSION="${VERSION_NUMBER} ${VERSION_DATE}"; ## -- workarounds ---------------------------------------------------------- if [ "${LOCATION}" == "uu" ]; then BACKSLASH="\\\\"; fi; if [ "${LOCATION}" == "sri" ]; then PORTRAIT_OFFSET=83.5mm; # was: 79mm FLIPPAGE_OFFSET=8mm; # was: 18mm PRINT_MEDIA="letter"; fi; ## -- conversion constants ------------------------------------------------- export ONE_POINT=0.3514598; #mm export ONE_INCH=25.4 ; #mm ## -- convertion functions ------------------------------------------------- function point_to_mm { echo "0$1 * ${ONE_POINT}" |bc -l } function mm_to_point { echo "0$1 / ${ONE_POINT}" |bc -l } function inch_to_mm { echo "0$1 * ${ONE_INCH}" |bc -l } function mm_to_inch { echo "0$1 / ${ONE_INCH}" |bc -l } function point_to_inch { echo $(mm_to_inch $(point_to_mm $1)); } function inch_to_point { echo $(mm_to_point $(inch_to_mm $1)); } function convert_to_point { # only bare number case $1 in *[0-9-]mm ) echo $(mm_to_point ${1:0:$((${#1}-2))});; *[0-9-]cm ) echo $(mm_to_point $(echo "10 * ${1:0:$((${#1}-2))}"|bc -l));; *[0-9-]dm ) echo $(mm_to_point $(echo "100 * ${1:0:$((${#1}-2))}"|bc -l));; *[0-9-]m ) echo $(mm_to_point $(echo "1000 * ${1:0:$((${#1}-1))}"|bc -l));; *[0-9-]i ) echo $(inch_to_point ${1:0:$((${#1}-1))});; *[0-9-]in ) echo $(inch_to_point ${1:0:$((${#1}-2))});; *[0-9-]inch ) echo $(inch_to_point ${1:0:$((${#1}-4))});; *[0-9-]pt ) echo ${1:0:$((${#1}-2))};; *[0-9-] ) echo $1;; * ) abort "Illegal length: $1";; ## error esac } function convert_to_mm { # only bare number case $1 in *[0-9-]mm ) echo ${1:0:$((${#1}-2))};; *[0-9-]cm ) echo 10.0*${1:0:$((${#1}-2))}|bc -l;; *[0-9-]dm ) echo 100.0*${1:0:$((${#1}-2))}|bc -l;; *[0-9-]m ) echo 1000.0*${1:0:$((${#1}-1))}|bc -l;; *[0-9-]i ) echo $(inch_to_mm ${1:0:$((${#1}-1))});; *[0-9-]in ) echo $(inch_to_mm ${1:0:$((${#1}-2))});; *[0-9-]inch ) echo $(inch_to_mm ${1:0:$((${#1}-4))});; *[0-9-]pt ) echo $(point_to_mm ${1:0:$((${#1}-2))});; *[0-9-] ) echo $(point_to_mm $1);; * ) abort "Illegal length: $1";; ## error esac } ## -- functions ------------------------------------------------------------ function print_usage() { echo "ofixps (${VERSION})" 1>&2 ; echo "" 1>&2 ; echo "usage: ofixps [ahlptvR] [-r DEGREES] [-s FACTOR] [-w DIR] [-x X_OFFSET] [-y Y_OFFSET] [-e EVEN_OFFSET] [INFILE]+ OUTFILE" 1>&2 ; echo " -h : print help" 1>&2 ; echo " -a : adjust from a4 paper (only if output is letter)" 1>&2 ; echo " -a4 : use explicit A4-bounding box [0 0 595 842]" 1>&2 ; echo " -l : output in landscape" 1>&2 ; echo " -p : preserve intermediate files" 1>&2 ; echo " -pdf : filter through pdf (with ps2pdf/pdf2ps) first" 1>&2 ; echo " -ps2pdf PROG : use PROG for ps -> pdf convertion" 1>&2 ; echo " -P COMMAND -- : pipe output to command, e.g. -P lpr -d $DUPLEX_PRINTER --" 1>&2 ; echo " -R : reverse order of pages" 1>&2 ; echo " -Y : assume \"yes\" to all queries" 1>&2 ; echo " -n PAGES : set number of pages explicitly" 1>&2 ; echo " -r DEGREES : rotate counter-clock-wise DEGREES" 1>&2 ; echo " -s FACTOR : scale by FACTOR" 1>&2 ; echo " -B BOUNDINGBOX : set bounding box, e.g. 0 0 612 792 for letter" 1>&2 ; echo " -w DIR : change working dir to DIR (default: $WORKING_DIR)" 1>&2 ; echo " -x X_OFFSET : move picture X_OFFSET to the right (before scaling)" 1>&2 ; echo " -Y Y_OFFSET : move picture Y_OFFSET up (before scaling)" 1>&2 ; echo " -e EVEN_OFFSET : additional x offset for *even* pages (e.g. -15mm)" 1>&2 ; echo " -E EVEN_OFFSET : additional y offset for *even* pages (e.g. -15mm)" 1>&2 ; echo " -F FACTOR : apply fattening (FACTOR=1,2,3,4,5)" 1>&2 ; echo " -G GRANULARITY : pixel granularity for fattening (default: $FATTEN_GRANULARITY)" 1>&2 ; echo " -V : only vertical fattening" 1>&2 ; echo " -v : verbose on" 1>&2 ; echo " -vE : verbose on, set output to stderr" 1>&2 ; echo " -t : flip odd pages (tumble)" 1>&2 ; echo " --version : print version" 1>&2 ; } function print_help() { print_usage echo "description:"; echo " fixes corrupted postscript files brute-force by extracting "; echo " them page per page, including them in a fresh "; echo " LaTeX document, compiling it and generating new postscript."; echo " If more then one input file is given, they are appended (the last"; echo " filename is always assumed to be the output file; if only one file)." echo " is given, a default suffix for the output file is provided."; echo " If OUTFILE is \"-\", then output goes to stdout."; echo " INFILE/OUTFILE is required, except in the case where -P ... -- is set."; echo " With the -n switch, the number of pages to be processed can be set"; echo " explicity. In case of multiple input files, this can be used"; echo " repeatedly. E.g. \"-n 10 -n - -n 12\" means, that the first 10 pages"; echo " from the first input file are taken, all from the second one and"; echo " the first ten pages from the third one." ; echo " The temporary files will created in a working directory "; echo " (default is $WORKING_DIR), and are deleted on success by default,"; echo " the switch -p prevents deletion."; echo " The switch -pdf is very expensive (in terms of file sizes), but sometimes"; echo " the easiest way to fix missing page numbers."; echo " The switch ps2pdf has to name an executable that can be called like:"; echo " $ PROG INPUT-PS-FILE"; echo " and is required to create [INPUT-PS-FILE - suffix and path].pdf"; echo " The switch -F (and -G, -V) allows to fatten up your picture. This is"; echo " a very crude hack, calling ps2bmp. See there for details."; echo " The lengths given for offsets can be point ([]/pt), mm, cm, or inch."; echo " "; echo " "; echo "note: "; echo " The psselect mechanism can only work properly, if page numbers are"; echo " present. If they are missing (e.g. while using ghostview), this"; echo " can often be fixed by manually removing the lines BEFORE "; echo " %%!PS-ADOBE (VERSION) "; echo " in the input file (if there should be any)."; echo " "; echo "relies on: grep bc psselect latex [fancybox pstricks graphicx] dvips"; echo " ps2bmp [Version 2.5 or higher]"; echo ""; echo "author: M. Oliver M'o'ller omoeller@verify-it.de"; exit 1; } function abort { ## -- clear the temp files -- echo "$0: ERROR: $1" 1>&2; echo "** ofixps aborted." 1>&2; echo "** remember: rm ${WORKING_DIR}/${OUT_NAME}.*" 1>&2; exit 1; } function confirm() { if ${ASSUME_YES}; then echo "$1 --> Yes by DEFAULT." 1>&2; else echo -n "$1 (y/N)? " 1>&2; read CONFIRM_QUERY_ANSWER case $CONFIRM_QUERY_ANSWER in y ) true;; Y ) true;; yes ) true;; YES ) true;; * ) false;; esac fi; } function get_version_number_of_script { ## 0.00: nonexistent! PROG=$(which $1 2>/dev/null); if [ ! -z $PROG ] && [ -x $PROG ]; then $PROG --version 2>/dev/null |sed -e "s/@//g" |sed -e "s/\\./@/1" | sed -e "s/[^0123456789@]//g" | sed -e "s/@/./g" ; else echo "0.00"; fi } function compute_minus { ## minus, scaled (used for comparison of floats) echo "10000000.0*(($1)-($2))" | bc -l | cut -d'.' -f 1; } function set_noswitch_arguments { FILES="$FILES $1"; } ## -- other aux functions: function first_element { # -- get the first element in a list echo $@ | cut -d' ' -f 1 } function all_but_first_element { # -- get list without first element RESULT=""; first=true; for name in $@; do if $first; then first=false; else RESULT="${RESULT} ${name}"; fi; done; echo $RESULT; } function all_but_lastelement { # -- get list without last element RESULT=""; PREV=""; for name in $@; do RESULT="${RESULT} ${PREV}"; PREV=$name; done; echo $RESULT; } function lastelement { # -- get the last element in a list for name in $@; do RESULT=$name; done; echo $RESULT; } function stripoffsuffix { ## remove last suffix (if present) if [ -z "$(echo $1 |grep "\\.")" ]; then echo $1; else POS=${#1}; while [ "${1:${POS}:1}" != "." ]; do POS=$((${POS}-1)); done; echo ${1:0:${POS}}; fi; } function stripoffpath { ## remove path if present if [ -z "$(echo $1 |grep "/")" ]; then echo $1; else POS=${#1}; while [ "${1:${POS}:1}" != "/" ]; do POS=$((${POS}-1)); done; echo ${1:$((${POS}+1)):${#1}}; fi; } ## -- reading options ------------------------------------------------------ AWAIT=""; for switch in $@; do case $AWAIT in -n ) AWAIT=""; NPAGES="$NPAGES $switch";; -r ) AWAIT=""; ROTATE_DEGREE=$switch;; -s ) AWAIT=""; SCALE=$switch;; -w ) AWAIT=""; WORKING_DIR=$switch;; -x ) X_OFFSET=$(convert_to_point $switch);AWAIT="";; -y ) Y_OFFSET=$(convert_to_point $switch);AWAIT="";; -e ) EVEN_OFFSET="$(convert_to_mm $switch)mm";AWAIT="";; -E ) YEVEN_OFFSET="$(convert_to_mm $switch)mm";AWAIT="";; -P ) if [ "$switch" == "--" ]; then AWAIT=""; else PRINT_COMMAND="$PRINT_COMMAND $switch"; fi;; -F ) FATTEN_FACTOR="$switch";AWAIT="";; -G ) FATTEN_GRANULARITY="$switch";AWAIT="";; -B ) if [ $BOUNDING_BOX_COUNT -lt 3 ]; then BOUNDING_BOX="$BOUNDING_BOX ${switch}";BOUNDING_BOX_COUNT=$(($BOUNDING_BOX_COUNT+1)); else BOUNDING_BOX="[bb=$BOUNDING_BOX ${switch}]";AWAIT=""; fi;; -ps2pdf ) PS2PDF_COMMAND="$switch";AWAIT="";; * ) case $switch in --help ) print_help;; -help ) print_help;; -h ) print_help;; -a4 ) BOUNDING_BOX="[bb=0 0 595 842]";; -a ) ADJUST_A4=true;; -n ) AWAIT="-n";; -r ) AWAIT="-r";; -s ) AWAIT="-s";; -w ) AWAIT="-w";; -x ) AWAIT="-x";; -e ) AWAIT="-e";; -E ) AWAIT="-E";; -y ) AWAIT="-y";; -l ) LANDSCAPE_OUTPUT=true;; -p ) PRESERVE_INTERMEDIATE=true;; -v ) VERBOSE=true;; -vE ) VERBOSE_OUTPUT=2;VERBOSE=true;; -t ) FLIP_EVEN_PAGES=true;; -q ) QUIET=true;; -P ) AWAIT="-P";; -R ) REVERSE_ORDER=true;; -Y ) ASSUME_YES=true;; -F ) AWAIT="-F";; -G ) AWAIT="-G";; -B ) AWAIT="-B";; -V ) ONLY_VERTICAL=true;; -pdf ) FILTER_THROUGH_PDF=true;; -ps2pdf ) AWAIT="-ps2pdf";; --version ) echo "Version: $VERSION";exit 1;; "-[^ ]*" ) echo "Unknown switch: $switch";print_help;; * ) set_noswitch_arguments $switch;; esac esac done; ## -- propagate ------------------------------------------------------------ if [ -z "$FILES" ] && [ -z "$PRINT_COMMAND" ]; then echo "ofixps: no input files."; print_usage; exit 1; fi; ## -- ## adjust for letter booklet -------------------- if $ADJUST_A4 && [ "00mm" != "${FLIPPAGE_OFFSET}" ]; then PORTRAIT_OFFSET=91mm; # was: 91mm, 83.5, 79mm FLIPPAGE_OFFSET=-4mm; # was: -8mm, 8, 18mm fi;## ------------------------------------------------- if [ -z "$PRINT_COMMAND" ]; then PRINT_COMMAND="cat -"; INFILES=$(all_but_lastelement $FILES); OUTFILE=$(lastelement $FILES); else INFILES="$FILES"; if [ -z "$INFILES" ]; then INFILES="-"; fi; OUTFILE="-"; fi; ## --- OUT_NAME="tmp.$(stripoffpath $(stripoffsuffix $OUTFILE)).$$"; INSTREAM_DUMMY_FILE=${WORKING_DIR}/${OUT_NAME}.was.input.stream.ps ## -- option-depending function -------------------------------------------- function make_tex_file { echo "" > ${WORKING_DIR}/${TEX_FILE}; if $LANDSCAPE_OUTPUT; then echo "\\documentclass[landscape,$PRINT_MEDIA]{article}" >> ${WORKING_DIR}/${TEX_FILE}; else echo "\\documentclass[$PRINT_MEDIA]{article}" >> ${WORKING_DIR}/${TEX_FILE}; fi; echo "\\usepackage{fancybox}" >> ${WORKING_DIR}/${TEX_FILE}; echo "\\usepackage{pstricks}" >> ${WORKING_DIR}/${TEX_FILE}; echo "%\\usepackage{a4}" >> ${WORKING_DIR}/${TEX_FILE}; echo "%\\usepackage{fullpage}" >> ${WORKING_DIR}/${TEX_FILE}; echo "%\\usepackage[a4paper,hmargin=0cm,vmargin=0cm]{geometry} " >> ${WORKING_DIR}/${TEX_FILE}; echo "\\usepackage[dvips]{graphicx}" >> ${WORKING_DIR}/${TEX_FILE}; echo "\\pagestyle{empty}" >> ${WORKING_DIR}/${TEX_FILE}; echo "\\setlength{\\parindent}{0mm}" >> ${WORKING_DIR}/${TEX_FILE}; echo "%\\listfiles{} " >> ${WORKING_DIR}/${TEX_FILE}; echo "${BACKSLASH}begin{document} " >> ${WORKING_DIR}/${TEX_FILE}; echo "${BACKSLASH}begin{center} " >> ${WORKING_DIR}/${TEX_FILE}; EVEN_PAGE=false; TMP="$NPAGES"; for infile in ${INFILES}; do ## -- instream exception -------------------------- if [ "-" == "$infile" ]; then infile="$INSTREAM_DUMMY_FILE"; fi; ## ------------------------------------------------ THIS_NPAGES=$(first_element $TMP); TMP=$(all_but_lastelement $TMP); if ${REVERSE_ORDER}; then I=${THIS_NPAGES}; else I=1; fi while [ ${I} -gt 0 ] &&[ "${I}" -le "${THIS_NPAGES}" ]; do if $LANDSCAPE_OUTPUT; then echo "${BACKSLASH}vspace*{${LANDSCAPE_OFFSET}}% " >> ${WORKING_DIR}/${TEX_FILE}; else echo "${BACKSLASH}vspace*{${PORTRAIT_OFFSET}}% " >> ${WORKING_DIR}/${TEX_FILE}; fi; ## y-offset (negative) echo "${BACKSLASH}vspace*{$(convert_to_mm $(echo -1*$(convert_to_point ${Y_OFFSET})|bc -l))mm}% " >> ${WORKING_DIR}/${TEX_FILE}; if $EVEN_PAGE; then echo "${BACKSLASH}vspace*{$(convert_to_mm $(echo -1*$(convert_to_point ${YEVEN_OFFSET})|bc -l))mm}% " >> ${WORKING_DIR}/${TEX_FILE}; if $FLIP_EVEN_PAGES; then echo "${BACKSLASH}vspace*{${FLIPPAGE_OFFSET}}% " >> ${WORKING_DIR}/${TEX_FILE}; fi; if ${FLIP_EVEN_PAGES}; then THISPAGE_OFFSET_FRONT=$(echo "-1.0*$(convert_to_mm ${EVEN_OFFSET})"|bc -l)mm; THISPAGE_OFFSET_BACK="${EVEN_OFFSET}"; else THISPAGE_OFFSET_FRONT="${EVEN_OFFSET}"; THISPAGE_OFFSET_BACK=$(echo "-1.0*$(convert_to_mm ${EVEN_OFFSET})"|bc -l)mm; fi; ## -------------------------------------------- EVEN_PAGE=false; else THISPAGE_OFFSET_FRONT="0mm"; THISPAGE_OFFSET_BACK="0mm"; EVEN_PAGE=true; fi; echo "${BACKSLASH}boxput{\\hspace*{$(convert_to_mm ${X_OFFSET})mm}\\hspace*{${THISPAGE_OFFSET_FRONT}}${BACKSLASH}rotatebox{${ROTATE_DEGREE}}{\\includegraphics${BOUNDING_BOX}{${OUT_NAME}.$(stripoffpath $infile).page.${I}.ps}{}}}{}\\hspace*{$(convert_to_mm $(echo -1*$(convert_to_point ${X_OFFSET})|bc -l))mm}\\hspace*{${THISPAGE_OFFSET_BACK}}%" >> ${WORKING_DIR}/${TEX_FILE}; ## -- recovering from y-offset ------------------ echo "${BACKSLASH}vspace*{$(convert_to_mm ${Y_OFFSET})mm}\\hspace*{1mm}${BACKSLASH}newpage " >> ${WORKING_DIR}/${TEX_FILE}; ## ---------------------------------------------- if ${REVERSE_ORDER}; then I=$(($I-1)); else I=$(($I+1)); fi; if ${FLIP_EVEN_PAGES}; then ROTATE_DEGREE=$(echo "$ROTATE_DEGREE + 180.0" |bc ); fi; done; done; ## -- all infiles processed ------------------- echo "${BACKSLASH}end{center} " >> ${WORKING_DIR}/${TEX_FILE}; echo "${BACKSLASH}end{document} " >> ${WORKING_DIR}/${TEX_FILE}; } ## ------------------------------------------------------------------------- for file in ${INFILES}; do if [ "$file" == "-" ]; then if ! $(cat - > $INSTREAM_DUMMY_FILE); then abort "did not manage instream - properly"; fi; else if [ ! -e ${file} ]; then abort "Input file $file does not exist."; fi; fi; done; if [ "$OUTFILE" == "$FILES" ]; then OUTFILE=${FILE}-ofixps-fixed.ps fi; if [ -e ${OUTFILE} ]; then if $(confirm "** output file ${OUTFILE} exists. Overwrite"); then : else abort "refuese to overwrite ${OUTFILE}."; fi; fi; if [ -z "$(which ${PS2PDF_COMMAND})" ]; then abort "the program >>${PS2PDF_COMMAND}<< not found in PATH or is not executable."; fi; ## ---------------------------------------------------- if $LANDSCAPE_OUTPUT; then ROTATE_DEGREE=$(($ROTATE_DEGREE+180)); fi; if [ "$OUTFILE" == "-" ]; then QUIET=true; fi; ## -- fatten ------------------------------------------ if ! [ -z "$FATTEN_FACTOR" ]; then PS_TO_BMP_VERSION=$(get_version_number_of_script ps2bmp); if [ $(compute_minus 0$PS_TO_BMP_VERSION 2.5) -lt 0 ]; then echo "$0: Need ps2bmp 2.5 or higher. " 1>&2; echo "Sorry. " 1>&2; exit 1; fi; ## ---------------------------------------------- PS_TO_BMP_SWITCHES="-F ${FATTEN_FACTOR} -G ${FATTEN_GRANULARITY}"; if $ONLY_VERTICAL; then PS_TO_BMP_SWITCHES="${PS_TO_BMP_SWITCHES} -V"; fi; if $VERBOSE; then PS_TO_BMP_SWITCHES="${PS_TO_BMP_SWITCHES} -v"; fi; if $QUIET; then PS_TO_BMP_SWITCHES="${PS_TO_BMP_SWITCHES} -q"; fi; fi; ## -- spam ----------------------------------------------------------------- if $VERBOSE && ( ! $QUIET || [ "2" == ${VERBOSE_OUTPUT} ]) ; then echo "INFILES: $INFILES" 1>&${VERBOSE_OUTPUT}; echo "OUTFILE: $OUTFILE" 1>&${VERBOSE_OUTPUT}; echo "WORKING_DIR: $WORKING_DIR" 1>&${VERBOSE_OUTPUT}; echo "OUT_NAME: $OUT_NAME" 1>&${VERBOSE_OUTPUT}; echo "ADJUST_A4: $ADJUST_A4" 1>&${VERBOSE_OUTPUT}; echo "LANDSCAPE_OUTPUT: $LANDSCAPE_OUTPUT" 1>&${VERBOSE_OUTPUT}; echo "PRESERVE_INTERMEDIATE : $PRESERVE_INTERMEDIATE" 1>&${VERBOSE_OUTPUT}; echo "ROTATE_DEGREE: $ROTATE_DEGREE" 1>&${VERBOSE_OUTPUT}; echo "OUTFILE: $OUTFILE" 1>&${VERBOSE_OUTPUT}; echo "PRINT_COMMAND: $PRINT_COMMAND" 1>&${VERBOSE_OUTPUT}; echo "NPAGES: $NPAGES" 1>&${VERBOSE_OUTPUT}; echo "QUIET: $QUIET" 1>&${VERBOSE_OUTPUT}; echo "REVERSE_ORDER: $REVERSE_ORDER" 1>&${VERBOSE_OUTPUT}; echo "VERBOSE: $VERBOSE" 1>&${VERBOSE_OUTPUT}; echo "VERBOSE_OUTPUT: $VERBOSE_OUTPUT" 1>&${VERBOSE_OUTPUT}; echo "X_OFFSET: $X_OFFSET" 1>&${VERBOSE_OUTPUT}; echo "Y_OFFSET: $Y_OFFSET" 1>&${VERBOSE_OUTPUT}; echo "FILTER_THROUGH_PDF $FILTER_THROUGH_PDF" 1>&${VERBOSE_OUTPUT}; echo "PS2PDF_COMMAND $PS2PDF_COMMAND" 1>&${VERBOSE_OUTPUT}; echo "PDF2PS_COMMAND $PDF2PS_COMMAND" 1>&${VERBOSE_OUTPUT}; echo "FATTEN_FACTOR: $FATTEN_FACTOR" 1>&${VERBOSE_OUTPUT}; echo "FATTEN_GRANULARITY: $FATTEN_GRANULARITY" 1>&${VERBOSE_OUTPUT}; echo "BOUNDING_BOX: $BOUNDING_BOX" 1>&${VERBOSE_OUTPUT}; echo "ONLY_VERTICAL: $ONLY_VERTICAL" 1>&${VERBOSE_OUTPUT}; echo "PS_TO_BMP_SWITCHES: $PS_TO_BMP_SWITCHES" 1>&${VERBOSE_OUTPUT}; echo "VERSION: $VERSION" 1>&${VERBOSE_OUTPUT}; fi; ## -- START ---------------------------------------------------------------- TEX_FILE=${OUT_NAME}.tex; if ! $QUIET || [ "2" == ${VERBOSE_OUTPUT} ] ; then echo "** created latex file $WORKING_DIR/$TEX_FILE" 1>&${VERBOSE_OUTPUT}; fi; ## -- possibly filter through PDF ------------------------------------------ if $FILTER_THROUGH_PDF; then NEW_INFILES=""; TMP_PDF_FILE=${WORKING_DIR}/${OUT_NAME}.file.pdf for infile in $INFILES; do ## -- instream exception -------------------------- if [ "-" == "$infile" ]; then infile="$INSTREAM_DUMMY_FILE"; fi; ## ------------------------------------------------ ACCESS=""; echo ">>>>>>>>>>>>>>>>${infile}<<<<<<<<<<<<<<<<<<<<" 1>&${VERBOSE_OUTPUT}; case $infile in *.Z ) ACCESS="uncompress -c";; *.gz ) ACCESS="gzip -d -c";; *.bz ) ACCESS="bzip -d -c";; *.bz2 ) ACCESS="bzip2 -d -c";; * ) ACCESS="cat";; esac; if [ "$ACCESS" == "cat" ]; then TMP_PS_FILE=$infile; else TMP_PS_FILE=${WORKING_DIR}/${OUT_NAME}.file.input.ps ${ACCESS} > ${TMP_PS_FILE}; fi; DEFAULT_OUTPUT_FILE=$(stripoffsuffix $(stripoffpath $infile)).pdf; ## -- fix bad bad pstill ------------------------------------ if [ "$(stripoffpath ${PS2PDF_COMMAND})" == "pstill" ]; then DEFAULT_OUTPUT_FILE="out.pdf"; fi; ## -- done with fix ----------------------------------------- if [ -e ${DEFAULT_OUTPUT_FILE} ]; then abort "will not destroy existing file >>${DEFAULT_OUTPUT_FILE}<<."; fi; NEW_TMP_FILE=${WORKING_DIR}/${OUT_NAME}.filtered.$(stripoffpath $infile); if (! $QUIET) || [ "2" == ${VERBOSE_OUTPUT} ]; then echo ".. converting to pdf [using ${PS2PDF_COMMAND}]: $infile" 1>&${VERBOSE_OUTPUT}; fi; ${PS2PDF_COMMAND} ${TMP_PS_FILE}; mv ${DEFAULT_OUTPUT_FILE} ${TMP_PDF_FILE}; if (! $QUIET) || [ "2" == ${VERBOSE_OUTPUT} ]; then echo ".. converting back to ps [using ${PDF2PS_COMMAND}]: $infile" 1>&${VERBOSE_OUTPUT}; fi; ${PDF2PS_COMMAND} ${TMP_PDF_FILE} ${NEW_TMP_FILE}; rm ${TMP_PDF_FILE}; NEW_INFILES="$NEW_INFILES $NEW_TMP_FILE"; done; INFILES=$NEW_INFILES; fi; ## -- extract all pages and update NPAGES ----------------------- TMP="${NPAGES}"; NPAGES=""; for infile in $INFILES; do ## -- instream exception -------------------------- if [ "-" == "$infile" ]; then infile="$INSTREAM_DUMMY_FILE"; fi; ## ------------------------------------------------ THIS_NPAGES=$(first_element $TMP); TMP=$(all_but_lastelement $TMP); THIS_INFILE="$infile"; ACCESS=""; if ! $QUIET; then echo ">>>>>>>>>>>>>>>>$infile<<<<<<<<<<<<<<<<<<<<" 1>&${VERBOSE_OUTPUT}; fi; case $infile in *.Z ) ACCESS="uncompress -c";; *.gz ) ACCESS="gzip -d -c";; *.bz ) ACCESS="bzip -d -c";; *.bz2 ) ACCESS="bzip2 -d -c";; * ) ACCESS="cat";; esac if [ "${ACCESS}" != "cat" ]; then THIS_INFILE=${WORKING_DIR}/${OUT_NAME}.tmp; ${ACCESS} $infile > ${THIS_INFILE}; fi; if [ "${THIS_NPAGES}" == "-" ] || [ -z "${THIS_NPAGES}" ]; then ## -- first try ----------------------------------- THIS_NPAGES=$(first_element $(${ACCESS} $infile | grep "^\\%\\%Pages: [0123456789]" |cut -d' ' -f 2 )); ## -- second try ---------------------------------- if [ -z "$THIS_NPAGES" ]; then THIS_NPAGES=$(${ACCESS} $infile | grep -c "^\\%\\%Page: [0123456789]"); fi; fi; NPAGES="$NPAGES ${THIS_NPAGES}"; ## -- NOW PROCESS ALL PAGES ----------------------------------- I=1; while [ ${I} -le "${THIS_NPAGES}" ]; do PAGE_FILE="$WORKING_DIR/${OUT_NAME}.$(stripoffpath $infile).page.$I.ps"; if ${QUIET}; then if ! psselect -q -p$I ${THIS_INFILE} ${PAGE_FILE} >/dev/null; then abort "\nfailed to extract page $I from $infile"; fi; else if ! psselect -q -p$I ${THIS_INFILE} ${PAGE_FILE}; then abort "\nfailed to extract page $I from $infile"; fi; fi; ## -- NOW: possibly FATTEN ---------------------------------- if ! [ -z "${FATTEN_FACTOR}" ]; then NEW_TMP_PAGEFILE=${WORKING_DIR}/${OUT_NAME}.tmp.pagefile.$I.ps; mv ${PAGE_FILE} ${NEW_TMP_PAGEFILE}; if ! ps2bmp ${PS_TO_BMP_SWITCHES} ${NEW_TMP_PAGEFILE} ${PAGE_FILE}; then abort "ps2bmp failed."; fi; fi; ## ---------------------------------------------------------- I=$(($I+1)); done; if (! $QUIET) || [ "2" == ${VERBOSE_OUTPUT} ]; then echo "** extracted [${THIS_NPAGES}] postscript pages from $infile" 1>&${VERBOSE_OUTPUT}; fi; done; ## -- finished page extraction ------------------ make_tex_file; ## ---------------------------------------------------- pushd $WORKING_DIR >/dev/null 2>/dev/null; if ! $QUIET; then TEX_OUTPUT=1 else if [ "2" == ${VERBOSE_OUTPUT} ]; then TEX_OUTPUT=2 else TEX_OUTPUT=/dev/null fi; fi; ## ---------------------------------------------------- if latex $TEX_FILE 1>&$TEX_OUTPUT; then echo "** dvi file generated successfully." 1>&$TEX_OUTPUT; else abort "latex compilation failed. Missing package?"; fi; ## -------------------- ##echo $PRINT_COMMAND ## OUTDATED: pstops -p${PRINT_MEDIA} "1:0@1(${X_OFFSET},${Y_OFFSET})" TMP_PS_FILE=${WORKING_DIR}/${OUT_NAME}.tmp_outfile.ps; if $LANDSCAPE_OUTPUT; then dvips -o${TMP_PS_FILE} -t "landscape" ${OUT_NAME}.dvi 2>/dev/null; DVIPS_LANDSCAPE="-t \"landscape\""; LANDSCAPE_FLAG="-l"; else DVIPS_LANDSCAPE=""; LANDSCAPE_FLAG=""; fi;## ------------------------------------------------- if [ ${OUTFILE} == "-" ]; then if ! dvips -f ${DVIPS_LANDSCAPE} ${OUT_NAME}.dvi 2>/dev/null| \ psnup -p${PRINT_MEDIA} ${LANDSCAPE_FLAG} -s${SCALE} | \ ${PRINT_COMMAND} 2>/dev/null; then abort "trouble piping dvips output"; fi; popd >/dev/null 2>/dev/null; else ## -- real outfile ----------------------------------------- TMP_OUTFILE=${WORKING_DIR}/${OUT_NAME}.$$.$$.ps; if ! dvips -f ${DVIPS_LANDSCAPE} ${OUT_NAME}.dvi | psnup -p${PRINT_MEDIA} ${LANDSCAPE_FLAG} -s${SCALE} > ${TMP_OUTFILE} 2>/dev/null; then abort "trouble piping dvips output"; fi; popd >/dev/null 2>/dev/null; mv ${TMP_OUTFILE} ${OUTFILE} if (! $QUIET) || [ "2" == ${VERBOSE_OUTPUT} ]; then if $LANDSCAPE_OUTPUT; then echo "** LANDSCAPE postscript:" 1>&${VERBOSE_OUTPUT}; fi; ls -l $(stripoffpath ${OUTFILE}); echo "** --------------------" 1>&${VERBOSE_OUTPUT}; fi fi; ## ------------------------------------------------------------------------- if $PRESERVE_INTERMEDIATE; then if (! $QUIET) || [ "2" == ${VERBOSE_OUTPUT} ]; then echo "remember: rm ${WORKING_DIR}/${OUT_NAME}.*" 1>&${VERBOSE_OUTPUT}; fi; else rm ${WORKING_DIR}/${OUT_NAME}.*; fi; if (! $QUIET) || [ "2" == ${VERBOSE_OUTPUT} ]; then echo "** $0: done." 1>&${VERBOSE_OUTPUT}; fi; exit 0; ## --- OK ------------------------------ ### Local Variables: *** ### mode: lisp *** ### eval: (defun update-global-date () (let ((pos (point-marker))) (goto-char (point-min)) (if (search-forward-regexp "^VERSION_DATE=" (point-max) t) (progn (kill-line) (insert (format "\"%s\" ;" (current-time-string))) (basic-save-buffer) (message "** Version Date Updated."))) (goto-char pos))) *** ### eval: (defun new-global-hh-insert-disclaimer () (interactive) (insert-disclaimer) (update-global-date) (ksh-mode)(font-lock-mode) (local-set-key [f4] #'new-global-hh-insert-disclaimer)) *** ### eval: (progn (ksh-mode)(font-lock-mode) (local-set-key [f4] #'new-global-hh-insert-disclaimer)) *** ### comment-column:0 *** ### comment-start: "### " *** ### comment-end:"***" *** ### End: ***