Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on PostScript and PDF.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/ps.e>
#           or at <http://angg.twu.net/e/ps.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######




# «.ps-mode.el»			(to "ps-mode.el")
# «.gv»				(to "gv")
# «.gv-big-window»		(to "gv-big-window")
# «.gv-very-spartan»		(to "gv-very-spartan")
# «.gv-cvs»			(to "gv-cvs")
# «.gv-deb-src»			(to "gv-deb-src")
# «.ghostscript-deb-src»	(to "ghostscript-deb-src")
# «.gs-dj610c»			(to "gs-dj610c")
# «.gs_primitives»		(to "gs_primitives")
# «.gs_interactively»		(to "gs_interactively")
# «.gv_psheaders»		(to "gv_psheaders")
# «.pstotext»			(to "pstotext")
# «.gs_read_file»		(to "gs_read_file")
# «.eps_crop_to_jpg»		(to "eps_crop_to_jpg")
# «.gsfonts»  			(to "gsfonts")
# «.encrypted_pdfs»		(to "encrypted_pdfs")
# «.gv-starting-page»		(to "gv-starting-page")
# «.eemp»			(to "eemp")
# «.xpdftools»			(to "xpdftools")
#
# «.glue-pages»			(to "glue-pages")
# «.gv-version»			(to "gv-version")
# «.xpdf»			(to "xpdf")
# «.xpdf-deb-src»		(to "xpdf-deb-src")
# «.xpdf-touchpad-scroll»	(to "xpdf-touchpad-scroll")
# «.xpdf-ubuntu»		(to "xpdf-ubuntu")
# «.djvulibre-deb-src»		(to "djvulibre-deb-src")
# «.gv-lpr»			(to "gv-lpr")
# «.eepitch-gs»			(to "eepitch-gs")
# «.ps-intro»			(to "ps-intro")
# «.books»			(to "books")
# «.gs-examples»		(to "gs-examples")
# «.run»			(to "run")
# «.tex.pro»			(to "tex.pro")
# «.psutils»			(to "psutils")
# «.pdfpages»			(to "pdfpages")
# «.pdfjam»			(to "pdfjam")
# «.pdfnup»			(to "pdfnup")
# «.default-pdf-viewer»		(to "default-pdf-viewer")
# «.see»			(to "see")
# «.pdftk»			(to "pdftk")
# «.qpdf»			(to "qpdf")
# «.qpdf-merge»			(to "qpdf-merge")
# «.djvu-to-pdf»		(to "djvu-to-pdf")
# «.djview»			(to "djview")
# «.other-djvu-viewers»		(to "other-djvu-viewers")
# «.evince»			(to "evince")
# «.pdftotext»			(to "pdftotext")
# «.pdftotext-for-windows»	(to "pdftotext-for-windows")
# «.pdftotext-spurious-ffs»	(to "pdftotext-spurious-ffs")
# «.page-labels»		(to "page-labels")
# «.reduce-pdf-file-size»	(to "reduce-pdf-file-size")
# «.zathura»			(to "zathura")
# «.mupdf»			(to "mupdf")
# «.epdfview»			(to "epdfview")
# «.okular»			(to "okular")
# «.paps»			(to "paps")
# «.pypdf»			(to "pypdf")
# «.pdf2djvu»			(to "pdf2djvu")




# (find-zsh "installeddebs | sort | grep pdf")
# (find-zsh "availabledebs | sort | grep pdf")




#####
#
# ps-mode.el
#
#####

# «ps-mode.el»  (to ".ps-mode.el")
# http://odur.let.rug.nl/~kleiweg/postscript/
# (find-efile "progmodes/ps-mode.el")
# (find-efunction 'ps-mode)
# (find-evariable 'ps-run-x)

(setq ps-run-x '("gs" "-r36" "-sPAPERSIZE=a4"))
(require 'ps-mode)
(progn (ps-mode) (ps-run-start))
(ps-run-quit)

%*
% (eeb-psrun)
% (eeb-invoke 'ps-run-region ee-delimiter-percent)
%
/dx 120 def
/dy 120 def
/x0 60 def
/y0 60 def
/myp {dy mul y0 add exch dx mul x0 add exch} def
/defp {myp 2 array astore cvx def} def
  /p7 0 3 defp  /p8 1 3 defp  /p9 2 3 defp
  /p4 0 2 defp  /p5 1 2 defp  /p6 2 2 defp
  /p1 0 1 defp  /p2 1 1 defp  /p3 2 1 defp
/foo { newpath p3 moveto p4 lineto p9 lineto closepath } def
foo gsave 1 1 0 setrgbcolor fill grestore
    gsave 8 setlinewidth stroke grestore

%*
% (eeb-psrun)
/Times-Roman findfont
100 scalefont setfont
72 200 moveto
(typography) show

%*



#####
#
# gv
# 2000dec17
#
#####

# (find-status "gv")
# (find-vldifile "gv.list")
# (find-fline "/usr/doc/gv/")

gv /usr/doc/gv/gv.ps.gz

# (find-w3 "/usr/doc/gv/gv.html")
# (find-w3 "/usr/doc/gv/gv-3.html" "-page")




#####
#
# gv
# 2005oct12
#
#####

# «gv»  (to ".gv")
# http://www.gnu.org/software/gv/
# http://savannah.gnu.org/projects/gv/

# About a bug that I reported:
# Bug #14319 overview: <pgup> and <pgdn> don't scroll the pages window
# http://savannah.gnu.org/bugs/?func=detailitem&item_id=14319
# (find-fline "/tmp/gv-pagewindow-scroll-fix.patch")

# «gv-big-window»  (to ".gv-big-window")
# (find-angg ".zshrc" "regv-beamer")
# About running gv in fullscreen mode by making it open a big window:
# (find-angg ".Xdefaults")
# (find-fline "/usr/lib/gv/gv_class.ad" "GV*background:")
# (find-man "X" "GEOMETRY SPECIFICATIONS")
# (find-node "(gv)Resources of gv" "*maximumWidth, maximumHeight*")
# (find-sh0 "echo 'GV*background: black' > ~/.gv")
# (find-sh0 "rm -v ~/.gv")
# (find-sh0 "gv --spartan --scale=3 -geometry 1135x785+916+737 $EEV/slides/slides.ps.gz")

# «gv-very-spartan»  (to ".gv-very-spartan")
# About running gv in fullscreen mode "the right way":

# (find-node "(dvips)Option summary")
# (find-man "1 gv")
# (find-node "(gv)Key Bindings")
# (find-node "(gv)How can I make even more room for the image?")
# (find-sh "gv --help")
# (find-fline "/usr/lib/gv/gv_spartan.dat")

# (find-fline "/usr/lib/gv/gv_spartan.dat")
# (find-fline "/tmp/veryspartan.dat")
# (find-angg ".zshrc" "regv-beamer")

#*
cat > /tmp/veryspartan.dat <<'%%%'
!##### Layouts
GV.control.MButton.font: -*-Helvetica-Medium-R-Normal--*-120-*-*-P-*-ISO8859-1
GV*orientationButton*forcedWidth:	72
GV*upsidedown.Label:			Up-Down
GV.?.processButton.label:		\ working

!##### Main Layout
!##### (find-file "/usr/lib/gv/gv_spartan.dat")
GV*control.layout: |v{ viewFrame<+[2]-100%*+9999-100%> }
%%%

* (eechannel-xterm "A")
gv --ad=/tmp/veryspartan.dat $EEV/slides/slides.ps &

(defun foo () (interactive)
  (eech "gv --ad=/tmp/veryspartan.dat $EEV/slides/slides.ps &\r"))




#####
#
# gv from cvs
# 2005oct12
#
#####

# «gv-cvs»  (to ".gv-cvs")
# http://www.gnu.org/software/gv/
# http://savannah.gnu.org/projects/gv/
#*
# Update gv-cvs.tar.gz
rm -Rv ~/usrc/gv/
cd     ~/usrc/
tar -C ~/usrc/ -xvzf ~/tmp/gv-cvs.tar.gz
cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gv co gv
tar -C ~/usrc/ -cvzf ~/tmp/gv-cvs.tar.gz gv/
cd     ~/usrc/gv/

#*
# Download the patch "gv-pagewindow-scroll-fix.patch", by
# Markus Steinborn <msteinbo@uni-paderborn.de>, from:
# http://savannah.gnu.org/bugs/?func=detailitem&item_id=14319
# http://savannah.gnu.org/bugs/download.php?item_id=14319&item_file_id=3019
wget -O /tmp/gv-pagewindow-scroll-fix.patch \
 'http://savannah.gnu.org/bugs/download.php?item_id=14319&item_file_id=3019'

# (find-fline "/tmp/gv-pagewindow-scroll-fix.patch")

#*
# Unpack and apply the patch.
# This is independent from the "download the patch" step above.
rm -Rv ~/usrc/gv/
tar -C ~/usrc/ -xvzf ~/tmp/gv-cvs.tar.gz
cd     ~/usrc/gv/

{
patch -p0 <<'%%%'
--- src/misc.c.orig
+++ src/misc.c
@@ -323,12 +323,15 @@
 	ny = (int)newtocClip->core.height - ((int)newtoc->core.y + yl + 14);
         if (y>ny) b = True;
       }
-      if (event && b) {
+      if (b) {
 	INFIMESSAGE(jumping to,ny)
 	ClipWidgetSetCoordinates(newtocClip,x,ny);
-	entry = VlistEntryOfPosition(newtoc,(int)event->xbutton.y+(y-ny));
-	if (entry != VlistHighlighted(newtoc) && check_toc)
+	if (event)
+	{
+	   entry = VlistEntryOfPosition(newtoc,(int)event->xbutton.y+(y-ny));
+	   if (entry != VlistHighlighted(newtoc) && check_toc)
 		VlistChangeHighlighted(newtoc,entry,XawVlistSet);
+        }
       }
     }
   }
%%%
} |& tee op

#*
cd ~/usrc/gv/
autoreconf -i   |& tee oai
./bootstrap     |& tee ob
./configure     |& tee oc
make            |& tee om

#*





#####
#
# gv (from the debian sources; solves the bug above)
# 2007sep16
#
#####

# «gv-deb-src»  (to ".gv-deb-src")
# http://ftp.de.debian.org/debian/pool/main/g/gv/
# http://ftp.de.debian.org/debian/pool/main/g/gv/gv_3.6.3dfsg-2.dsc
# http://ftp.de.debian.org/debian/pool/main/g/gv/gv_3.6.3dfsg-2.diff.gz
# http://ftp.de.debian.org/debian/pool/main/g/gv/gv_3.6.3dfsg.orig.tar.gz
#*
rm -Rv ~/usrc/gv/
mkdir  ~/usrc/gv/
cd $S/http/ftp.de.debian.org/debian/pool/main/g/gv/
cp -v gv_3.6.3dfsg* ~/usrc/gv/
cd     ~/usrc/gv/
dpkg-source -sn -x gv_3.6.3dfsg-2.dsc
cd     ~/usrc/gv/gv-3.6.3dfsg/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/gv/")
* (eepitch-shell)
cd ~/usrc/gv/
sudo dpkg -i *.deb

#*
# (code-c-d "gv" "~/usrc/gv/gv-3.6.3dfsg/")
# (find-gvfile "")

# http://ftp.de.debian.org/debian/pool/main/g/gv/
# http://ftp.de.debian.org/debian/pool/main/g/gv/gv_3.6.5.91-1.dsc
# http://ftp.de.debian.org/debian/pool/main/g/gv/gv_3.6.5.91-1.diff.gz
# http://ftp.de.debian.org/debian/pool/main/g/gv/gv_3.6.5.91.orig.tar.gz
#*
rm -Rv ~/usrc/gv/
mkdir  ~/usrc/gv/
cd $S/http/ftp.de.debian.org/debian/pool/main/g/gv/
cp -v gv_3.6.5.91* ~/usrc/gv/
cd     ~/usrc/gv/
dpkg-source -sn -x gv_3.6.5.91-1.dsc
cd     ~/usrc/gv/gv-3.6.5.91/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/gv/")
* (eepitch-shell)
cd ~/usrc/gv/
sudo dpkg -i *.deb

#*
# (code-c-d "gv" "~/usrc/gv/gv-3.6.5.91/")
# (find-gvfile "")





#####
#
# ghostscript (from the debian sources)
# 2010nov07
#
#####

# «ghostscript-deb-src»  (to ".ghostscript-deb-src")
# http://ftp.debian.org/debian/pool/main/g/ghostscript/
# http://ftp.debian.org/debian/pool/main/g/ghostscript/ghostscript_9.00~dfsg-1.dsc
# http://ftp.debian.org/debian/pool/main/g/ghostscript/ghostscript_9.00~dfsg-1.diff.gz
# http://ftp.debian.org/debian/pool/main/g/ghostscript/ghostscript_9.00~dfsg.debian.tar.gz

#*
rm -Rv ~/bigsrc/ghostscript/
mkdir  ~/bigsrc/ghostscript/
cd $S/http/ftp.debian.org/debian/pool/main/g/ghostscript/
cp -v ghostscript_9.00\~dfsg* ~/bigsrc/ghostscript/
cd     ~/bigsrc/ghostscript/
dpkg-source -sn -x ghostscript_9.00\~dfsg-1.dsc
cd     ~/bigsrc/ghostscript/ghostscript-9.00\~dfsg/

find .* * -type f                | sort > .files
find .* * -type f -name '*.[ch]' | sort > .files.ch
etags $(cat .files.ch)

# dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/bigsrc/ghostscript/")
* (eepitch-shell)
cd ~/bigsrc/ghostscript/
sudo dpkg -i *.deb

#*
# (code-c-d "ghostscript" "~/bigsrc/ghostscript/ghostscript-9.00~dfsg/")
# (find-ghostscriptfile ".files")
# (find-ghostscriptfile "")
# (find-ghostscriptfile "psi/")
# (find-ghostscriptfile "psi/zdict.c")
# (find-ghostscriptfile "psi/opdef.h")

# (find-ghostscriptgrep "grep -nrH -e param_write *")
# (find-ghostscriptgrep "grep -nrH -e param_begin *")
# (find-ghostscriptgrep "grep -nH -e 'const op_def' $(cat .files.ch)")
# (find-ghostscriptgrep "grep -nriH -e prompt $(cat .files)")
# (find-ghostscriptfile "base/gsdparam.c" "/* Standard parameters */")


# (find-ghostscriptfile "doc/")
# (find-ghostscriptw3m "doc/Readme.htm#Develop")
# (find-ghostscriptw3m "doc/Source.htm")
# (find-ghostscriptw3m "doc/Language.htm")
# (find-ghostscriptw3m "doc/Language.htm#Dictionary")
# (find-ghostscriptw3m "doc/Lib.htm")







#####
#
# gs source (potato)
# 2000sep19
#
#####

# (find-status "gs")
# (find-vldifile "gs.list")
# (find-fline "/usr/doc/gs/")
#*
pdsc $SDEBIAN/dists/potato/main/source/text/gs_5.10-9.1.dsc
cd /usr/src/gs-5.10/

cd /usr/src/gs-5.10/
# (find-node "(gawk)Ranges")
for i in $(agrep -l BEGIN_OP_DEFS *.c); do
  echo "\n$i:"
  awk '/BEGIN_OP_DEFS/, /END_OP_DEFS/' < $i
done > .OPDEFS

etags *.[ch]
#*
# (code-c-d "gs5" "/usr/src/gs-5.10/")
# (find-gs5file ".OPDEFS")
# (find-gs5file "opdef.h" "Each operator file")

# «gs-dj610c»  (to ".gs-dj610c")
# (find-htetfile "Printing-HOWTO.txt.gz" "DeskJet 610C")
# (find-gs5file "contrib/hp8xxs13/devs.mak" "use -r600 for DJ 600")
# (eeman "gs-hpdj")

# «gs_primitives»  (to ".gs_primitives")
# (find-fline "/o/home/root/ICON/gsops.icn")
# (find-gs5file "opdef.h" "BEGIN_OP_DEFS")
# agrep -l BEGIN_OP_DEFS *.[ch]





#####
#
# running gs interactively using eeg
# 2000jan13
#
#####

# «gs_interactively»  (to ".gs_interactively")
# (find-gs5file "gs_init.ps" "pstack")
# (find-gs5file "gs_init.ps" "/== {")
# (find-gs5file "gs_init.ps" "(gs_fonts.ps) runlibfile")
# (find-gs5file "gs_fonts.ps")

# (find-gs5file ".OPDEFS")
#*
cat > $EEG <<'---'
10 22 (foo) pstack
== ==
pop

/square {dup mul} pstack
bind pstack
def
/square load ==

[10 20] ==
[10 20 ppstack
] pop

/dx 120 def
/dy 120 def
/x0 60 def
/y0 60 def
/myp {dy mul y0 add exch dx mul x0 add exch} def
/defp {myp 2 array astore cvx def} def

  % /p7 {0 3 myp} def
/p7 0 3 defp  /p8 1 3 defp  /p9 2 3 defp
/p4 0 2 defp  /p5 1 2 defp  /p6 2 2 defp
/p1 0 1 defp  /p2 1 1 defp  /p3 2 1 defp
      /p0 1.5 0 defp

/foo { newpath p3 moveto p4 lineto p9 lineto closepath } def
foo gsave 1 1 0 setrgbcolor fill grestore
    gsave 8 setlinewidth stroke grestore
---
eeg gs
#*

# (find-gssharefile "uninfo.ps" "\"printing\" PostScript items")





#####
#
# making gs read files
# 2000may02
#
#####

# «gs_read_file»  (to ".gs_read_file")
# (find-status "gs")
# (find-vldifile "gs.list")
# (find-fline "/usr/doc/gs/")
# (eeman "gs" "run")
#*
cd /usr/share/doc/gs/examples/
gzip -cd tiger.ps.gz > /tmp/tiger.ps

cd /tmp/
cat > $EEG <<'---'
(tiger.ps) run
quit
---
eeg gs

#*




#####
#
# gv-3.5.8 (slink)
# 99oct08
#
#####

# «gv_psheaders»  (to ".gv_psheaders")

pdsc /big/slinks2/dists/slink/main/source/text/gv_3.5.8-9.dsc
cd /usr/src/gv-3.5.8

# On how the headers of a gv-able PS must be:
# (find-gvfile "source/ps.c" "Header section:")

# (find-fline "/usr/doc/gv/comments.doc.gz")




#####
#
# Some old notes on gs5.10
#
#####

cd /usr/src/gs5.10/
etags $(cat of.used.here of.used.there)
glimpseindex -H . $(cat of.used.here; ls *.ps; cat of.used.there)
~/ICON/gsops $(cat of.used.here) |& tee .OPS
#
# (find-gs5file "opdef.h" "Each operator file")
# (find-gs5file ".OPS")
# (find-gs5file "gs_init.ps" "pstack")
# (find-gs5file "gs_init.ps" "/== {")
# (find-gs5tag "zbind")
# (find-gs5file "deskjet.dev")
# (find-gs5file "djet500.dev")
# (find-gs5file "gdevdjet.c")
#
dvips -D 300 -p 1 -l 1 -o blank.ps blank.dvi
gs -sDEVICE=djet500 -sOutputFile=/dev/lp1 -dNOPAUSE -dBATCH blank.ps

# (find-gs5file "gs_init.ps" 80)

# Mais antigos:

# (find-gvtag "main")
# (find-gvfile "source/main.c" "int main(")
# (find-gvfile "source/main.c" 903)
# (find-gvtag "render_page")
# (find-gvtag "GhostviewEnableInterpreter")
# (find-gvtag "StartInterpreter")

# (find-gs5tag "gdev_x_open")






#####
#
# gslab
#
#####

(emacs-lisp-mode)
(find-fline "~/CRIM/gslab.el")

(progn
  (load-library "~/CRIM/gslab")
  (setq gs-window-shrink-amount 12)  ; Gives gs 23-12 lines on 50-line VCs.
  (gs-initialize)
)

# (find-gs5file ".OPS" "setrgbcolor")
# (find-gs5file "gs_init.ps")





#####
#
# Fixing a FrameMaker ps
#
#####

# (find-hamm "psutils")
# (find-fline "/usr/doc/psutils/README.gz" "framemaker")
# (find-fline "/usr/bin/fixfmps")

# (find-gvfile "source/ps.c" "%!")
# (find-fline "~/LATEX/lcp1.ps")

# (find-fline "/usr/info/")

# (find-fline "/snarf/http/www.cica.indiana.edu/cica/faq/tcl/")
# (find-fline "/snarf/http/www.cica.indiana.edu/cica/faq/tcl/book.p1.ps")
# %!PS-Adobe-2.0

# (find-fline "/usr/src/psutils-1.17/psnup.c")
# (find-fline "/usr/src/psutils-1.17/psnup.c" "'s'")
# (find-fline "/usr/src/psutils-1.17/psutil.c" "a4")
# (find-node "(a2ps)Your Media")

# (find-fline "/usr/src/psutils-1.17/pstops.c")


cd /snarf/http/www.cica.indiana.edu/cica/faq/tcl/
# S=0.5; H0=24; H1=297; V0=434; V2=50
S=0.55; H0=-16; H1=257; V0=434; V2=50
cat book.p1.ps |
  pstops -d 4:0@$S($H0,$V0)+1@$S($H1,$V0)+2@$S($H0,$V2)+3@$S($H1,$V2) > p1.ps
cat book.p2.ps |
  pstops -d 4:0@$S($H0,$V0)+1@$S($H1,$V0)+2@$S($H0,$V2)+3@$S($H1,$V2) > p2.ps
cat book.p3.ps |
  pstops -d 4:0@$S($H0,$V0)+1@$S($H1,$V0)+2@$S($H0,$V2)+3@$S($H1,$V2) > p3.ps
cat book.p4.ps |
  pstops -d 4:0@$S($H0,$V0)+1@$S($H1,$V0)+2@$S($H0,$V2)+3@$S($H1,$V2) > p4.ps

cd /snarf/http/www.cica.indiana.edu/cica/faq/tcl/
gv -media a4 -scale -2 p1.ps
gv -media a4 -scale -2 p2.ps
gv -media a4 -scale -2 p3.ps
gv -media a4 -scale -2 p4.ps

cd /snarf/http/www.cica.indiana.edu/cica/faq/tcl/
tar -cvzf ~/tb.tgz p?.ps
zip ~/tb.zip p?.ps

gs -sDEVICE=djet500 -r300 -sOutputFile=o.p%02d -dNOPAUSE -dBATCH /snarf/http/www.cica.indiana.edu/cica/faq/tcl/p3.ps
rm o.zip; zip o.zip o.p0?
laf o.zip


# psnup -1 -d -Pletter -pletter |


# (find-hamm "tk8.0-dev")
man 3tk pack

# (find-tkfile "")

cd /snarf/http/www.cica.indiana.edu/cica/faq/tcl/
psnup -nup 4 -s0.5 -Pletter -pa4 -d -m-8 < book.p3.ps > p3.ps
gv -media a3 p3.ps

# -m100 qdz que overwrite bastante.
# -m-100 qdz que separa bastante as folhinhas.

# psnup -nup 4 -s0.4 -Pletter -pa4 -d -b78 < book.p3.ps > p3.ps


debsource /debian/main/source/text psutils 1.17 -2
debsource /debian/main/source/text a2ps 4.10.2 -4

debsource /debian/main/source/libs tk8.0 8.0p2 -4




#####
#
# pgs
#
#####

dmissingp perl-tk

# (find-fline "/usr/bin/pgs")
# (find-pl5file "Tk/Ghostview.pm")
# (find-pl5file "Tk/Ghostscript.pm")
# (find-pl5file "Tk/Pretty.pm")
# (find-pl5file "Tk/DSC.pm")

# (find-fline "/usr/lib/perl5/Tk/Ghostview.pm")
# (find-fline "/usr/lib/perl5/Tk/Ghostscript.pm")
# (find-fline "/usr/lib/perl5/Tk/Pretty.pm")




#####
#
# pstotext
# 99oct09
#
#####

# «pstotext»  (to ".pstotext")

apti pstotext
# (find-vldifile "pstotext.list")
# (find-fline "/usr/doc/pstotext/")
# (eeman "pstotext")

pstotext /tmp/bdf.PS
pstotext /tmp/bdf.PS | tr ยก -			| tee ~/o
pstotext /tmp/bdf.PS | tr $(echo "\0255") -

# Why does it stop in the middle of the pic manual?
# (find-es "tex" "pic_manual")

pstotext $S/http/cm.bell-labs.com/cm/cs/cstr/116.ps > ~/o
(pstotext -debug $S/http/cm.bell-labs.com/cm/cs/cstr/116.ps > ~/o) |& tee ~/o2
# (find-fline "~/o")
# (find-fline "~/o2")
# (find-fline "$S/http/cm.bell-labs.com/cm/cs/cstr/116.ps" "guess is wrong")


pdsc /big/slinks2/dists/slink/main/source/text/pstotext_1.7-3.dsc
debian/rules binary	|& tee odrb

# (code-c-d "ptt" "/usr/src/pstotext-1.7/")
# (find-pttfile "odrb")

# (find-pttfile "main.c")
# (find-pttfile "bundle.c")
# (find-pttfile "ptotdll.c")
# (find-pttfile "ocr.ps")




#####
#
# .eps->.jpg, with cropping
# 2000may30
#
#####

# «eps_crop_to_jpg»  (to ".eps_crop_to_jpg")
# (find-es "music" "ps_to_png")
#*
cat ~/LATEX/eps/histmat1.eps \
  | gs -q -sDEVICE=ppmraw -sOutputFile="-" -r150 \
      -dNOPAUSE - -c quit \
  | pnmcrop \
  > /tmp/histmat1.ppm
convert /tmp/histmat1.ppm /tmp/histmat1.jpg

cat ~/LATEX/eps/histmat2.eps \
  | gs -q -sDEVICE=ppmraw -sOutputFile="-" -r150 \
      -dNOPAUSE - -c quit \
  | pnmcrop \
  > /tmp/histmat2.ppm
convert /tmp/histmat2.ppm /tmp/histmat2.jpg

ls -lAF /tmp
#*



#####
#
# my own crude a2ps (aborted...)
# 2000jun29
#
#####

# (find-node "(a2ps)Top")

# (find-status "a2ps")
# (find-vldifile "a2ps.list")
# (find-fline "/usr/doc/a2ps/")

# (find-fline "/usr/lib/xemacs/site-lisp/" "a2ps")
# (find-fline "/usr/share/ogonkify/")
# (find-fline "/usr/share/a2ps/ps/")

ls | a2ps -o /tmp/o.ps

# (find-fline "/tmp/o.ps")




#####
#
# gsfonts
# 2000oct30
#
#####

# «gsfonts»  (to ".gsfonts")
# (find-status "gsfonts")
# (find-vldifile "gsfonts.list")
# (find-fline "/usr/doc/gsfonts/")

# (find-fline "/usr/lib/ghostscript/fonts/")
cd /usr/lib/ghostscript/fonts/




#####
#
# making gv redisplay a file
# 2001mar27
#
#####

# (find-man "1 gv" "-watch, -nowatch")
# (find-angg ".zshrc" "rexdvi")
# (find-angg ".zshrc" "regv")




#####
#
# making gs display encrypted PDFs
# 2001dec10
#
#####

# «encrypted_pdfs»  (to ".encrypted_pdfs")
# (find-shttpw3 "members.ozemail.com.au/~geoffk/pdfencrypt/")
# (find-shttpfile "members.ozemail.com.au/~geoffk/pdfencrypt/pdf_sec.ps")
# (find-fline "/usr/lib/ghostscript/5.10/pdf_sec.ps")
# (find-fline "/usr/lib/ghostscript/5.10/pdf_sec.ps.orig")
#*
cd /usr/lib/ghostscript/5.10/
if [ ! -e pdf_sec.ps.orig ]; then cp -v pdf_sec.ps pdf_sec.ps.orig; fi
cp -v $S/http/members.ozemail.com.au/~geoffk/pdfencrypt/pdf_sec.ps .

#*
cd /usr/lib/ghostscript/5.10/
mv -v pdf_sec.ps.orig pdf_sec.ps

#*
cd $S/http/www.ville.montreal.qc.ca/mtlcarte/anglais/pdf/

#*
# Woody:
# (find-status "gs")
# (find-vldifile "gs.list")
# (find-fline "/usr/doc/gs/")
# (find-fline "/usr/share/gs/6.53/")
# (find-fline "/usr/share/gs/6.53/pdf_sec.ps" "geoffk/pdfencrypt/")




#*
pdsc $S/http/ftp.debian.org/debian/pool/main/g/gs/gs_5.50-8.dsc
debian/rules binary	|& tee odrb
#*
# (code-c-d "gs" "/usr/src/gs-5.50/")
# (find-gsfile "debian/jpeg")

psnedeb <<'---'
  1977288 pool/main/g/gs/gs_6.51-5.diff.gz
      685 pool/main/g/gs/gs_6.51-5.dsc
  4375426 pool/main/g/gs/gs_6.51.orig.tar.gz
---




#####
#
# specifying a starting page for gv
# 2002nov12
#
#####

# «gv-starting-page»  (to ".gv-starting-page")
# (find-man "1 gv" "-page=LABEL")
# (find-angg ".emacs" "find-xxxpage")

# A problem: dvips generates "ps"s whose pages can be labeled, say,
# 1 2 3 4 1 2 3 4 5 6 7 8 9... - and I still don't know how to jump to
# the "second page 3" in these cases.




#####
#
# flipping the even pages for two-sided printing
# 2003feb13
#
#####

# (find-man "pstops")
#*
dvips -o /tmp/test.ps ~/LATEX/2002cms.dvi
#*
cd /tmp/
cat test.ps | pstops '2:0+1U(21.5cm,31.5cm)' > test2.ps  && gv test2.ps
#*
dvired -o /tmp/test.ps $S/ftp/ftp.math.mcgill.ca/pub/barr/tt.dvi
#*
cd /tmp/
cat test.ps | pstops '2:0+1U(23.5cm,29.4cm)' > test2.ps  && gv test2.ps
#*
dvired -o /tmp/test.ps ~/LATEX/2002cms.dvi
#*
cd /tmp/
cat test.ps | pstops '2:0+1U(22.1cm,29.4cm)' > test2.ps  && gv -seascape test2.ps
#*

# (* 40 (/ 1.0 72.0) 2.54)



#####
#
# metapost
# 2004apr13
#
#####

rm -Rv /tmp/mpdoc/
mkdir  /tmp/mpdoc/

# (find-status "tetex-bin")
# (find-vldifile "tetex-bin.list")
# (find-fline "/usr/doc/tetex-bin/")

# (find-fline "/usr/share/doc/texmf/metapost/base/")
# (code-ps "mpman"   "/usr/share/doc/texmf/metapost/base/mpman.ps.gz")
# (code-ps "mpintro" "/usr/share/doc/texmf/metapost/base/mpintro.ps.gz")
# (find-mpmanpage   1)
# (find-mpintropage 1)

#*
cd /tmp/
cat > tmp.mp <<'%%%'
beginfig(0);
input ee.mp;
endfig;
end
%%%

cat > ee.mp <<'%%%'
pickup pencircle scaled 4pt;
draw (20,20)--(0,0)--(0,40)--(30,0)--(0,0);
%%%

mpost tmp.mp
awk '{if (NR==1) {print "%!PS-Adobe-2.0 EPSF-1.2"} else print}' \
  < tmp.0 > tmp.0.eps

regv tmp.0.eps -scale 10 &

#*
;; «eemp»  (to ".eemp")
;; (find-eevfile "tmp.mp")

(progn

(defvar ee-file-mp        "~/eev-current/ee.mp")
(defvar eemp-eevscript "cd ~/eev-current/
  mpost tmp.mp
  awk '{if (NR==1) {print \"%!PS-Adobe-2.0 EPSF-1.2\"} else print}' \\
    < tmp.0 > tmp.0.eps
  regv tmp.0.eps -scale 10")

(defun eemp (s &optional e)
  (interactive "r")
  (ee-write s e "" "" ee-file-mp)
  (eev eemp-eevscript nil)
  (format "eemp: wrote %s and %s" ee-file-mp ee-file))

(ee-define-bounded eemp   eemp-bounded   ee-delimiter-percent)

)

%*
% (ee-once (eeb-mp))
pickup pencircle scaled 4pt;
draw (20,20)--(0,0)--(0,30)--(30,0)--(0,0);

%*
% (eemp-bounded 'once)
numeric u; u=1cm;
draw (2u,2u)--(0,0)--(0,3u)--(3u,0)--(0,0);
pickup pencircle scaled 4pt;
for i=0 upto 2:
  for j=0 upto 2:
    draw (i*u,j*u);
  endfor
endfor

%*
endfig;




#####
#
# gs source
# 2004apr22
#
#####

/hda7/pandahome/edrx/snarf/http/ftp.debian.org/debian/pool/main/g/gs/
/hda7/pandahome/edrx/snarf/http/ftp.debian.org/debian/pool/main/g/gs/

# (code-c-d "gs" "/usr/src/gs-6.53/")
# (find-gsfile "")
# (find-gsfile "src/gsfunc4.c")
# (find-gsfile "src/gstype1.h" "\"closepath\"")
# (find-gsfile "src/zpath.c")

# (find-gsfile "src/opdef.h" "limited to 16 entries")
# (find-gsfile "src/zcontrol.c" "const op_def zcontrol1_op_defs[] =")

cd /usr/src/gs-6.53/src/
grep 'const op_def' *.[ch] |& l -S

#*
cd /usr/src/gs-6.53/src/
egrep -l '^const op_def ' *.c | tee .files.opdef
echo -n > OPDEFS
for i in $(<.files.opdef); do
  echo "/* (find-fline \"$i\" \"\\\\nconst op_def \")"
  echo " */"
  awk '
    /^const op_def / {interesting=1}
    interesting==1   {print}
    /^}/             {interesting=0}
  ' $i
  echo
  echo
done > OPDEFS
# (find-gsfile "src/OPDEFS")

#*
# (find-gsfile "lib/")
# (find-gsfile "lib/gs_init.ps")
# (find-gsfile "lib/gs_init.ps" "/pstack")
# (find-gsfile "lib/gs_init.ps" "/ppstack")


#*
cat > $EEG <<'---'
1 2
==
==
1 2 3 pstack
== == ==
quit
---
eeg gs -sDEVICE=nullpage

#*
cat > $EEG <<'---'
/square {dup mul} def
5 square
==
quit
---
eeg gs -sDEVICE=nullpage

#*
% (eeg-
/Times-Roman findfont ==


(defun eegs-simple ()
  (eev "eeg gs -sDEVICE=nullpage")
  (eeg 


eegs

eev

# (find-efunctionpp 'eeg-bounded)
# (find-efunctionpp (key-binding [f3]))
# (find-efunction 'describe-function)
# (find-efunction 'describe-key)
# (find-efunction 'find-efunctionpp)





(find-ekeypp [f3])
(find-ekeypp "\r")
(find-ekeypp "\n")
(find-ekeypp "\M-P")
(find-efunctionpp ee-bounded-function)







(defvar ee-s0 nil)
(defvar ee-s1 nil)
(defvar ee-e  nil)

(defmacro with-ee-l1-percent (&rest body)
  `(let* ((ee-s0 (ee-search-backward ee-delimiter-percent))
	  (ee-s1 (save-excursion (goto-char ee-s0)
				 (next-line 1) (beginning-of-line) (point)))
	  (ee-e (1+ (ee-search-forward ee-delimiter-percent))))
     . ,body))

(defun eegs (gsargs pre post s &optional e)
  (eev (concat "eeg gs " (or gsargs "-sDEVICE=nullpage")))
  (eeg (concat (or pre "")
	       (ee-se-to-string s e)
	       (or post "")))
  (format "eegs: wrote %s and %s" ee-file-generic ee-file))
  
(defun eegs-l1 (gsargs pre post)
  (with-ee-l1-percent (eegs gsargs pre post ee-s1 ee-e)))

(defun eegs-simple ()
  (eegs-l1 nil nil "quit"))



(defun eeM-e (s &optional e)
  (interactive "r")
  (save-excursion (goto-char s) (ee-eval-sexp-eol ee-arg)))

(ee-define-bounded eeM-e eeM-e-percent-bounded ee-delimiter-percent)

(defalias 'eemep-bounded 'eeM-e-percent-bounded)


%*
% (eegs-simple)
1 2
==
==
1 2 3 pstack
== == ==

%*
% (eegs-simple)
/square {dup mul} def
5 square
==
{dup mul} 0 get ==        %-> dup
{dup mul} 1 get ==        %-> mul
(a string) type ==        %-> stringtype
[2 3]      type ==        %-> arraytype
{dup mul}  type ==        %-> arraytype
/square    type ==        %-> nametype
1          type ==        %-> integertype
1.2        type ==        %-> realtype
444 type   type ==        %-> nametype

%*
% (eegs-simple)
[10 20 30] 0 get ==       %-> 10
[10 20 30] 2 get ==       %-> 30
/a [10 20 30] def
a 2 33 put
a ==                      %-> [10 20 33]

%*
% (eegs-simple)
/square {dup mul} def
/a 3 def  /b 4 def
a square b square add sqrt
dup ==
dup round ==
dup floor ==
dup truncate ==
dup truncate cvi ==

%*
% (eegs-simple)
% (find-psfirstgw3m "escapes.html")
(This is a \
string \
that has no \
newlines)                 %-> (This is a string that has no newlines)
==

%*
% (eegs-simple)





/Times-Roman findfont ==


# (code-c-d "psfirstg" "/hda6/snarf/http/www.cs.indiana.edu/docproject/programming/postscript/")
# (code-c-d "psimation" "/hda6/snarf/http/ips.imation.com/techsupport/resources/web/psweb/")
# (find-psfirstgfile "")
# (find-psfirstgw3m "escapes.html")

# (find-psimationfile "")
# (find-psimationw3m "PSL2gh.html#get")
# (find-psimationw3m "PSL2e.html#exec")

# (find-psimationw3m "REF2.html")

  [L http://www.cs.indiana.edu/docproject/programming/postscript/postscript.html
    A First Guide to PostScript]
  [L http://www.tinaja.com/post01.html
    Guru's Lair: Don Lancaster's PostScript Library]
  [L http://www.cs.washington.edu/homes/dylan/pshacks.html
    Dylan's PostScript Page]
  [L http://ips.imation.com/techsupport/resources/PS/PSindex.html
    Imation - Index To Postscript Pages]
  [L http://ips.imation.com/techsupport/resources/web/psweb/REF.html
    ref]
  [L http://www.iftech.com/oltc/ps/ps0.stm
    pstut]



/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx




# (find-gsfile "src/OPDEFS")
# (find-gsfile "src/OPDEFS" "truncate")

#*
# (find-gsfile "lib/")
# (find-gsfile "lib/gs_init.ps")
# (find-gsfile "lib/gs_init.ps" "/pstack")
# (find-gsfile "lib/gs_init.ps" "/ppstack")


(eegs-hyped " -sDEVICE=nullpage" "quit")



#####
#
# ps-mode and comint
# 2004may02
#
#####

# (find-efile "")
# (find-efile "progmodes/ps-mode.el")

(require 'ps-mode)
(ps-run-start)

(find-fline 


 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
 1 setlinecap 1 setlinejoin 10 setmiterlimit
newpath 56.6929 56.6929 moveto
0 0 lineto
0 85.03935 lineto
85.03935 0 lineto
0 0 lineto stroke
 0 3.98505 dtransform truncate idtransform setlinewidth pop
newpath 0 0 moveto 0 0 rlineto stroke
newpath 0 28.34645 moveto 0 0 rlineto stroke
newpath 0 56.6929 moveto 0 0 rlineto stroke
newpath 28.34645 0 moveto 0 0 rlineto stroke
newpath 28.34645 28.34645 moveto 0 0 rlineto stroke
newpath 28.34645 56.6929 moveto 0 0 rlineto stroke
newpath 56.6929 0 moveto 0 0 rlineto stroke
newpath 56.6929 28.34645 moveto 0 0 rlineto stroke
newpath 56.6929 56.6929 moveto 0 0 rlineto stroke
showpage






# (find-gsfile "src/opdef.h" "Each operator file")
# (find-gs5file ".OPS")
# (find-gs5file "gs_init.ps" "pstack")
# (find-gs5file "gs_init.ps" "/== {")




# (find-gsfile "debian/control" "Build-Depends:")
apti libpaperg-dev libpng2-dev zlib1g-dev xlibs-dev debhelper html2text
apti libglib1.2-dev libgimpprint-dev

pdsc $SDEBIAN/pool/main/g/gs/gs_6.53-3.dsc
cd /usr/src/gs-6.53/
debian/rules build	|& tee odrb

(find-gsfile "")
(find-gsfile "odrb")




# (find-status "tetex-base")
# (find-vldifile "tetex-base.list")
# (find-fline "/usr/doc/tetex-base/")



# (find-man "1 gv" "-style gv_spartan.dat")
# (find-fline "/usr/X11R6/lib/X11/gv/")




#####
#
# gv --version
# 2007jun07
#
#####

# «gv-version»  (to ".gv-version")
# http://ftp.debian.org/debian/pool/main/g/gv/
# http://ftp.debian.org/debian/pool/main/g/gv/gv_3.6.2-4.dsc
apti debhelper quilt xaw3dg-dev texinfo

# http://ftp.gnu.org/gnu/gv/gv-3.5.8.tar.gz
# http://ftp.gnu.org/gnu/gv/gv-3.6.0.tar.gz
# http://ftp.gnu.org/gnu/gv/gv-3.6.1.tar.gz
# http://ftp.gnu.org/gnu/gv/gv-3.6.2.tar.gz
#*
rm -Rv ~/usrc/gv-3.5.8/
tar -C ~/usrc/ -xvzf $S/http/ftp.gnu.org/gnu/gv/gv-3.5.8.tar.gz
cd     ~/usrc/gv-3.5.8/
xmkmf          |& tee oxmkmf
make Makefiles |& tee omM
make           |& tee om

# (code-c-d "gv358" "~/usrc/gv-3.5.8/")
# (find-gv358file "")
# (find-gv358file "om")
# (find-gv358file "source/Aaa.c" 49)
# (find-gv358file "source/Aaa_intern.h" 44 "INC_X11(Xlib.h)")

#*
rm -Rv ~/usrc/gv-3.6.0/
mkdir  ~/usrc/gv-3.6.0/
tar -C ~/usrc/gv-3.6.0/ -xvzf $S/http/ftp.gnu.org/gnu/gv/gv-3.6.0.tar.gz
cd     ~/usrc/gv-3.6.0/gv/
./configure |& tee oc
make        |& tee om
# (code-c-d "gv360" "~/usrc/gv-3.6.0/gv/")
# (find-gv360file "")
# (find-gv360sh "src/gv --version")

#*
rm -Rv ~/usrc/gv-3.6.1/
tar -C ~/usrc/ -xvzf $S/http/ftp.gnu.org/gnu/gv/gv-3.6.1.tar.gz
cd     ~/usrc/gv-3.6.1/
./configure |& tee oc
make        |& tee om
# (code-c-d "gv361" "~/usrc/gv-3.6.1/")
# (find-gv361file "")
# (find-gv361sh "src/gv --version")

#*
rm -Rv ~/usrc/gv-3.6.2/
tar -C ~/usrc/ -xvzf $S/http/ftp.gnu.org/gnu/gv/gv-3.6.2.tar.gz
cd     ~/usrc/gv-3.6.2/
./configure |& tee oc
make        |& tee om
# (code-c-d "gv362" "~/usrc/gv-3.6.2/")
# (find-gv362file "")
# (find-gv362sh "src/gv --version")

#*



;; Note: according to jemarch (gv's maintainer),
;; gv 3.5.8 (and earlier versions) accept short arguments only,
;; gv 3.6.0 and gv 3.6.1 accept long arguments only,
;; gv 3.6.2 (and later versions) accept both long and short arguments.
;; To select a starting page in a "short arguments" version we have to
;; use "-page 42" instead of "--page=42".

# (find-eevfile "eev.el" "jemarch")





#####
#
# xpdftools
# 2006jul17
#
#####

# «xpdftools»  (to ".xpdftools")
# (find-angg ".emacs" "find-pdfpage-pdftotext")
# pdftops (from xpdftools) is better than pdf2ps (from ghostscript):
# http://www.codecomments.com/archive276-2005-8-561854.html
# (find-status   "xpdf-utils")
# (find-vldifile "xpdf-utils.list")
# (find-udfile   "xpdf-utils/")

cd ~/tmp/
pdftotext -layout cvs.pdf
# (find-fline "~/tmp/cvs.txt")
# (find-man "pdftotext")





#####
#
# Ways to glue several PDFs or several imagess into a single PDF
# 2024oct15
#
#####

# «glue-pages»  (to ".glue-pages")
# (find-angg "MAXIMA/mkanim1.sh" "functions" "qpdf")
# (find-angg ".emacs.templates" "find-jpgstopdf-links")
# (find-angg "LUA/QPDFMerge.lua")
# (to "qpdf-merge")




#####
#
# xpdf (from the debian sources)
# 2008aug17 / 2019oct18
#
#####

# «xpdf» (to ".xpdf")
# «xpdf-deb-src»  (to ".xpdf-deb-src")
# (find-angg ".Xdefaults")
# The version in etch cannot switch between normal
# and fullscreen mode, but this version can...
# http://ftp.debian.org/debian/pool/main/x/xpdf/
# http://ftp.debian.org/debian/pool/main/x/xpdf/xpdf_3.02-1.3.dsc
# http://ftp.debian.org/debian/pool/main/x/xpdf/xpdf_3.02-1.3.diff.gz
# http://ftp.debian.org/debian/pool/main/x/xpdf/xpdf_3.02.orig.tar.gz
# (find-man "1 xpdf")
# (find-man "1 xpdf" "-mattecolor")
# (find-man "1 xpdf" "-fullscreen")
# (find-man "1 xpdf" "Toggle full-screen mode.")

# (find-man "1 xpdf" "toggleFullScreenMode")
# (find-man "1 xpdf" "alt-f")

# (code-c-d "xpdf" "~/usrc/xpdf/xpdf-3.02/")
# (find-xpdfgrep "grep -nH -e fullscreen $(find *)")
# (find-xpdfgrep "grep -nH -e fullScreen $(find *)")
# (find-xpdffile "xpdf/xpdf.cc" "-fullscreen")
# (find-xpdffile "")




#####
#
# xpdf: disabling the touchpad scroll (that works as PgUp and PgDn)
# 2019oct23
#
#####

# «xpdf-touchpad-scroll» (to ".xpdf-touchpad-scroll")
# (find-es "emacsconf2019" "short")
# (find-man "1 xpdf")
# (find-man "1 xpdf" "bind mousePress4" "scrollUpPrevPage(16)")
# (find-apt-get-source-links "xpdf")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/d/
mkdir  /tmp/d/
cd     /tmp/d/
sudo apt-get build-dep -y   xpdf
     apt-get source         xpdf   2>&1 | tee osource
     apt-get source --build xpdf   2>&1 | tee osourceb

ls -lAF      xpdf_*.deb
sudo dpkg -i xpdf_*.deb

# (find-fline "/tmp/d/")
# (find-fline "/tmp/d/xpdf-3.04/")
# (code-c-d "xpdf" "/tmp/d/xpdf-3.04/")
# (find-xpdffile "")
# (find-xpdfsh "find * | sort")
# (find-xpdfgrep "grep --color -nRH -e mousePress4 *")
# (find-xpdfgrep "grep --color -nRH -e scrollUpPrevPage *")
# (find-xpdffile "xpdf/GlobalParams.cc" "xpdfKeyCodeMousePress4")



#####
#
# xpdf is being deprecated on Ubuntu
# 2020oct15
#
#####

# «xpdf-ubuntu»  (to ".xpdf-ubuntu")
# https://askubuntu.com/questions/1245518/how-to-install-xpdf-on-ubuntu-20-04





#####
#
# djvulibre (from the debian sources)
# 2008nov20
#
#####

# «djvulibre-deb-src»  (to ".djvulibre-deb-src")
# http://djvu.sourceforge.net/
# http://ftp.debian.org/debian/pool/main/d/djvulibre/
# http://ftp.debian.org/debian/pool/main/d/djvulibre/djvulibre_3.5.21-1.dsc
# http://ftp.debian.org/debian/pool/main/d/djvulibre/djvulibre_3.5.21-1.diff.gz
# http://ftp.debian.org/debian/pool/main/d/djvulibre/djvulibre_3.5.21.orig.tar.gz
#*
rm -Rv ~/usrc/djvulibre/
mkdir  ~/usrc/djvulibre/
cd $S/http/ftp.debian.org/debian/pool/main/d/djvulibre/
cp -v djvulibre_3.5.21* ~/usrc/djvulibre/
cd     ~/usrc/djvulibre/
dpkg-source -sn -x djvulibre_3.5.21-1.dsc
cd     ~/usrc/djvulibre/djvulibre-3.5.21/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/djvulibre/")
* (eepitch-shell)
cd ~/usrc/djvulibre/
sudo dpkg -i *.deb

#*
# (code-c-d "djvulibre" "~/usrc/djvulibre/djvulibre-3.5.21/")
# (find-djvulibrefile "")
# (find-djvulibrefile "gui/djview/")




#####
#
# Changing the "lpr" in gv to "~/bin/lpr"
# 2009jan11
#
#####

# «gv-lpr»  (to ".gv-lpr")
# (find-angg "bin/lpdj-tmp")

Print Marked Pages
Print command:




#####
#
# eepitch-gs
# 2009jul26
#
#####

# «eepitch-gs»  (to ".eepitch-gs")
# (find-man "1 gs")

(defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r60"))
(defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r45"))

* (eepitch-gs)
* (eepitch-kill)
* (eepitch-gs)

1 2
==
==
1 2 3 pstack
== == ==

/square {dup mul} def
5 square
==
{dup mul} 0 get ==        %-> dup
{dup mul} 1 get ==        %-> mul
(a string) type ==        %-> stringtype
[2 3]      type ==        %-> arraytype
{dup mul}  type ==        %-> arraytype
/square    type ==        %-> nametype
1          type ==        %-> integertype
1.2        type ==        %-> realtype
444 type   type ==        %-> nametype

[10 20 30] 0 get ==       %-> 10
[10 20 30] 2 get ==       %-> 30
/a [10 20 30] def
a 2 33 put
a ==                      %-> [10 20 33]

/square {dup mul} def
/a 3 def  /b 4 def
a square b square add sqrt
dup ==
dup round ==
dup floor ==
dup truncate ==
dup truncate cvi ==

% (find-psfirstgw3m "escapes.html")
% This is problematic. By default gs has ""
% as its PS2, so comint gets stuck here...
% We can be careful and use S-F8.
(This is a \
string \
that has no \
newlines)                 %-> (This is a string that has no newlines)
==



* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
gs -r60
quit

/Courier findfont
20 scalefont
setfont
72 500 moveto
(Hello world!) show
showpage


/Times-Roman findfont ==



#####
#
# ps-intro
# 2010oct07
#
#####

# «ps-intro»  (to ".ps-intro")
# Like this,  (find-es "lua-intro" "quick-presentation")
# but I am learning PostScript as I write it...
# (find-angg ".emacs" "gs")

* (eepitch-gs)
* (eepitch-kill)
* (eepitch-gs)
/Times-Roman findfont
100 scalefont setfont
72 200 moveto
(typography) show
%
/PNW {100 500} def  /PN {300 500} def
                                     /PSE {500 100} def
/mypath {newpath PNW moveto PN lineto PSE lineto closepath} def
 mypath gsave 1 1 0 setrgbcolor fill grestore
        gsave 8 setlinewidth stroke grestore
erasepage
 mypath gsave 1 0 0 setrgbcolor fill grestore


* (eepitch-gs)
* (eepitch-kill)
* (eepitch-gs)
(foo)      type ==    % stringtype
[10 20]    type ==    % arraytype
{dup mul}  type ==    % arraytype
/dup       type ==    % nametype
10         type ==    % integertype
10.0       type ==    % realtype
systemdict type ==    % dicttype
10 type    type ==    % nametype

/Times-Roman findfont type == % dicttype

% Arrays
[10 20 30]         == % [10 20 30]
[10 20 30] 0 get   == % 10
{10 20 30} 2 get   == % 30
[10 20 30] length  == % 3
% [10 20 30] 4 get == % Error: /rangecheck in --execute--

% Arrays: the executable bit, def, and execute
[10 20 30] cvx     == % {10 20 30}
/coords [10 20] def  coords ==     % [10 20]
/coords {10 20} def  coords == ==  % 10 20
        {10 20}     execute == ==  % 10 20

% Arrays: bind
{dup mul} 0 get           == % dup
{dup mul} 0 get type      == % nametype
{dup mul} bind            == % {--dup-- --mul--}
{dup mul} bind 0 get      == %  --dup--
{dup mul} bind 0 get type == % operatortype

% How do I convert /dup to dup?
% How do I obtain systemdict[dup]?

/5mul {5 mul} def
12     5mul           ==     % 60
12    {5 mul} execute ==
12    /5mul   execute == ==  % oops! /5mul 60


* (eepitch-gs)
* (eepitch-kill)
* (eepitch-gs)
% (find-psbluepage (+  4  48) "100 200 translate")
/mytri { 0 0 moveto 50 0 lineto 0 100 lineto closepath fill } def
mytri
100 200 translate
mytri
90 rotate
mytri

* (eepitch-gs)
* (eepitch-kill)
* (eepitch-gs)
gsave 72 2.54 div dup scale
% newpath 2 2 moveto 4 2 lineto 2 6 lineto closepath stroke
  newpath 2 2 moveto 4 2 lineto 2 6 lineto closepath fill
grestore
newpath 50 50 moveto 200 50 lineto closepath stroke

matrix ==

% (find-angg "PS/psbluebookops.txt")


% (find-psbluepage (+  4  61) "7. Loops and Conditionals")
% (find-psbluepage (+  4  77) "8. Arrays")
% (find-psbluepage (+  4  87) "9. More Fonts")
% (find-psbluepage (+  4 101) "10. Clipping and Line Details")
% (find-psbluepage (+  4 111) "11. Images")
% (find-psbluepage (+  3 119) "12. Postscript Printers")
% (find-psbluepage (+ -4 233) "Operator Summary")
% (find-psbluepage (+ -4 241) "Index")
% (find-psbluetext)




       countexecstack array execstack dup length 2 sub 0 exch getinterval
       $error /estack 3 -1 roll
       countdictstack array dictstack $error /dstack 3 -1 roll






#####
#
# Books on PostScript
# 2009jul26
#
#####

# «books»  (to ".books")
# (find-angg ".emacs.papers" "postscript")
# http://en.wikipedia.org/wiki/PostScript
# http://partners.adobe.com/public/developer/en/ps/PLRM.pdf
# http://partners.adobe.com/public/developer/en/ps/sdk/sample/BlueBook.zip
# http://partners.adobe.com/public/developer/en/ps/sdk/sample/GreenBook.zip
# http://www.rightbrain.com/download/books/ThinkingInPostScript.pdf
# http://www.adobe.com/devnet/postscript/
# http://www.adobe.com/devnet/postscript/pdfs/PLRM.pdf
# http://www.adobe.com/devnet/postscript/pdfs/PSerrata.txt
# http://www.adobe.com/devnet/postscript/pdfs/PS3010and3011.Supplement.pdf
# http://www.adobe.com/devnet/postscript/pdfs/5001.DSC_Spec.pdf
#*
rm -Rv ~/usrc/BlueBook/
rm -Rv ~/usrc/GreenBook/
unzip -d ~/usrc/ $S/http/partners.adobe.com/public/developer/en/ps/sdk/sample/BlueBook.zip
unzip -d ~/usrc/ $S/http/partners.adobe.com/public/developer/en/ps/sdk/sample/GreenBook.zip

for i in ~/usrc/BlueBook/CODE/*.PS; do
  tr -d \\r < $i > $i.txt; mv -v $i.txt $i
done

#*
# (find-fline "~/usrc/BlueBook/CODE/")
# (find-fline "~/usrc/GreenBook/CODE/")

% (find-psbluepage         3  "Contents")
% (find-psbluepage (+  8   1) "1. Introduction")
% (find-psbluepage (+  7   7) "2. Stack and Arithmetic")
% (find-psbluepage (+  6  17) "3. Beginning Graphics")
% (find-psbluepage (+  4  35) "5. Printing Text")
% (find-psbluepage (+  4  47) "6. More Graphics")
% (find-psbluepage (+  4  61) "7. Loops and Conditionals")
% (find-psbluepage (+  4  77) "8. Arrays")
% (find-psbluepage (+  4  87) "9. More Fonts")
% (find-psbluepage (+  4 101) "10. Clipping and Line Details")
% (find-psbluepage (+  4 111) "11. Images")
% (find-psbluepage (+  3 119) "12. Postscript Printers")
% (find-psbluepage (+ -4 233) "Operator Summary")
% (find-psbluepage (+ -4 241) "Index")
% (find-psbluetext)
% (find-psbluefile "")

% (find-psbluefile "PROG_03.PS" "/ellipse")
% (find-psbluepage (+  0 139) "Elliptical arcs")

% (find-psgreenpage        2  "Contents")
% (find-psgreenpage (+ 11  1) "1. The Postscript Language: Overview")
% (find-psgreenpage (+ 10 11) "2. The Execution Model")
% (find-psgreenpage (+ 10 21)   "The bind operator")
% (find-psgreenpage (+ 9  37) "3. The Imaging Model")
% (find-psgreenpage (+ 9  41)   "Here are the element of the graphics state:")
% (find-psgreenpage (+ 9  57) "4. Emulators and Translators")
% (find-psgreenpage (+ 9  69)   "72 72 scale")
% (find-psgreenpage (+ 8  77) "5. Designing the Page and the Program")
% (find-psgreenpage (+ 8  87) "6. Program Structure")
% (find-psgreenpage (+ 7  99) "7. The Mechanics of Setting Text")
% (find-psgreenpage (+ 6 123) "8. Scanned Images and Halftones")
% (find-psgreenpage (+ 6 137) "9. Complex Graphic Problem-Solving")
% (find-psgreenpage (+ 6 157) "10. File Interchange Standards")
% (find-psgreenpage (+ 6 167) "11. Merging Files from Different Sources")
% (find-psgreenpage (+ 6 173) "12. Writing a Print Spooler")
% (find-psgreenpage (+ 5 185) "13. Memory and File Resource Management")
% (find-psgreenpage (+ 4 197) "14. Error Handling")
% (find-psgreenpage (+ 4 207) "15. Debugging Techniques")
% (find-psgreenpage (+ 4 217) "A. Error Handler")
% (find-psgreenpage (+ 3 221) "Index")
% (find-psgreentext)
% (find-psgreenfile "")




#####
#
# gs-examples
# 2010aug24
#
#####

# «gs-examples»  (to ".gs-examples")
# (find-status   "ghostscript")
# (find-vldifile "ghostscript.list")
# (find-udfile   "ghostscript/")
# (find-status   "ghostscript-x")
# (find-vldifile "ghostscript-x.list")
# (find-udfile   "ghostscript-x/")
# (find-udfile   "gs-common/")
# (find-udfile   "gs-common/NEWS.Debian.gz" "renamed to ghostscript")
# (find-status   "ghostscript-doc")
# (find-vldifile "ghostscript-doc.list")
# (find-udfile   "ghostscript-doc/")
# (find-udfile   "ghostscript/examples/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/gs-examples/
cp -Rv /usr/share/doc/ghostscript/examples/ /tmp/gs-examples/
gunzip -rv /tmp/gs-examples/

# (find-fline "/tmp/gs-examples/")

locate tiger
dmissing tiger.ps
dmissing tiger
dmissing ghostscript | grep examp





#####
#
# run (a ghostcript command to load files)
# 2010aug24
#
#####

# «run»  (to ".run")
# http://www.ugrad.math.ubc.ca/Flat/ps-toc.html
# http://www.ugrad.math.ubc.ca/Flat/files.html





#####
#
# tex.pro
# 2010oct07
#
#####

# «tex.pro»  (to ".tex.pro")
% (find-fline "/usr/share/texmf-texlive/dvips/base/tex.pro")
% (find-fline "/usr/share/texmf-texlive/dvips/base/")
% (find-LATEXfile "2009-2-MD-prova-1.ps" "%%BeginProcSet: tex.pro")
% (find-LATEXfile "2009-2-MD-prova-1.ps" "%%BeginProcSet: special.pro")

/TeXDict 300 dict def
TeXDict begin
  /N{def}def
  /B{bind def}N
  /S{exch}N
  /X{S N}B
  /A{dup}B
  /TR{translate}N
  /isls false N
  /vsize 11 72 mul N
  /hsize 8.5 72 mul N
  /landplus90{false}def
  /@rigin{isls
          {[0 landplus90 {1 -1} {-1 1} ifelse 0 0 0] concat} if
          72 Resolution div 72 VResolution div neg scale isls
          {landplus90 {VResolution 72 div vsize mul 0 exch}
                      {Resolution -72 div hsize mul 0} ifelse TR} if
          Resolution VResolution vsize -72 div 1 add mul TR
          [matrix currentmatrix
           {A A round sub abs 0.00001 lt {round} if} forall round
           exch round exch]setmatrix}N
  /@landscape{/isls true N}B
  /@manualfeed{statusdict/manualfeed true put}B
  /@copies{/#copies X}B
  /FMat[1 0 0 -1 0 0]N
  /FBB[0 0 0 0]N
  /nn 0 N
  /IEn 0 N
  /ctr 0 N
  /df-tail{/nn 8 dict N nn begin
           /FontType 3 N
	   /FontMatrix fntrx N
	   /FontBBox FBB N string
	   /base X array
           /BitMaps X/BuildChar{CharBuilder}N
	   /Encoding IEn N end A
	   {/foo setfont}2 array copy cvx N
	   load 0 nn put
	   /ctr 0 N[}B
   /sf 0 N
   /df{/sf 1 N
       /fntrx FMat N
       df-tail}B
   /dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B
   /E{pop nn A definefont setfont}B
   /Cw{Cd A length 5 sub get}B
   /Ch{Cd A length 4 sub get}B
   /Cx{128 Cd A length 3 sub get sub}B
   /Cy{Cd A length 2 sub get 127 sub}B
   /Cdx{Cd A length 1 sub get}B
   /Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B
   /CharBuilder{save 3 1 roll S A/base get 2 index get S
       /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
       setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
       restore}B
   /D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
      /BitMaps get S ctr S sf 1 ne
      {A A length 1 sub A 2 index S get sf div put}if
      put/ctr ctr 1 add N}B
   /I{cc 1 add D}B
   /bop{userdict/bop-hook known{bop-hook}if
        /SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
        mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N
   /eop{SI restore userdict/eop-hook known{eop-hook}if showpage}N
   /@start{userdict/start-hook known{start-hook}if pop/VResolution X/Resolution
           X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255
	   {IEn S A 360 add 36 4 index cvrs cvn put}for
	   pop 65781.76 div/vsize X 65781.76 div/hsize X}N
   /p{show}N
   /RMat[1 0 0 -1 0 0]N
   /BDot 260 string N
   /Rx 0 N
   /Ry 0 N
   /V{}B
   /RV/v{/Ry X/Rx X V}B
   statusdict begin
     /product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]
                    {A length product length le
		     {A length product exch 0 exch getinterval eq
		      {pop true exit}if
		     }{pop}ifelse
		    }forall
                   }{false}ifelse
     end
   {{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}
   {{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}imagemask grestore}}
   ifelse B
   /QV{gsave newpath transform round exch round
       exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
       fill grestore}B
   /a{moveto}B
   /delta 0 N
   /tail{A/delta X 0 rmoveto}B
   /M{S p delta add tail}B
   /b{S p tail}B
   /c{-4 M}B
   /d{-3 M}B
   /e{-2 M}B
   /f{-1 M}B
   /g{0 M}B
   /h{1 M}B
   /i{2 M}B
   /j{3 M}B
   /k{4 M}B
   /w{0 rmoveto}B
   /l{p -4 w}B
   /m{p -3 w}B
   /n{p -2 w}B
   /o{p -1 w}B
   /q{p 1 w}B
   /r{p 2 w}B
   /s{p 3 w}B
   /t{p 4 w}B
   /x{0 S rmoveto}B
   /y{3 2 roll p a}B
   /bos{/SS save N}B
   /eos{SS restore}B
   end



#####
#
# psutils
# 2011apr28
#
#####

# «psutils»  (to ".psutils")
# (find-status   "psutils")
# (find-vldifile "psutils.list")
# (find-udfile   "psutils/")
# (find-status   "xpdf-utils")
# (find-vldifile "xpdf-utils.list")
# (find-udfile   "xpdf-utils/")
# (find-status   "poppler-utils")
# (find-vldifile "poppler-utils.list")
# (find-udfile   "poppler-utils/")

http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

# A simple script to reduce pdf file size:
# http://www.alfredklomp.com/programming/shrinkpdf/

# http://icking-music-archive.org/scores/franck/
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd $S/http/icking-music-archive.org/scores/franck/
cp -v Franck-Lento-fuge-op.18.pdf /tmp/fugue.pdf
cd /tmp/
cp -v fugue.pdf fugue2.pdf
# (find-man "mogrify")
mogrify -scale '90%' fugue2.pdf

# (find-fline "$S/http/www.cs.cmu.edu/~joshuad/pdfrescale")
bash $S/http/www.cs.cmu.edu/~joshuad/pdfrescale fugue 0.9

# (find-zsh "dmissing pdfpages")



#####
#
# pdfpages (for resizing a pdf)
# 2011apr28
#
#####

# «pdfpages»  (to ".pdfpages")
# (find-es "tex" "pdfpages")
# (code-c-d "pdfpagesdoc" "/usr/share/doc/texlive-latex-recommended-doc/latex/pdfpages/")
# (find-pdfpagesdocfile "")

# http://www.cs.cmu.edu/~joshuad/pdfrescale
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
cat > fugue2.tex <<'%%%'
  \documentclass[twoside]{article}
  \usepackage{pdfpages}
  \begin{document}
  \includepdf[pages=-,scale=0.9,landscape=true]{fugue.pdf}
  \end{document}
%%%
pdflatex fugue2.tex

# (find-pdf-page "/tmp/fugue2.pdf")

(code-pdf-page  "pdfpages" "/usr/share/doc/texlive-latex-recommended-doc/latex/pdfpages/pdfpages.pdf")
(code-pdf-text  "pdfpages" "/usr/share/doc/texlive-latex-recommended-doc/latex/pdfpages/pdfpages.pdf")
;; (find-pdfpagespage      1  "Contents")
;; (find-pdfpagestext "")




#####
#
# pdfjam (for pdfnup)
# 2011jun20
#
#####

# «pdfjam»  (to ".pdfjam")
# «pdfnup»  (to ".pdfnup")
# (find-status   "pdfjam")
# (find-vldifile "pdfjam.list")
# (find-udfile   "pdfjam/")
# (find-udw3m    "pdfjam/PDFjam-README.html" "select")
# http://www.warwick.ac.uk/go/pdfjam
# (find-sh "pdfjam --help")

# (find-man "1 pdfjoin")
# (find-man "1 pdfbook")
# (find-man "1 pdfjam-pocketmod")
# (find-man "1 pdf270")
# (find-man "1 pdfpun")
# (find-man "1 pdf180")
# (find-man "1 pdf90")
# (find-man "1 pdfnup")
# (find-man "1 pdfjam")
# (find-man "1 pdfjam-slides3up")
# (find-man "1 pdfjam-slides6up")
# (find-man "1 pdfflip")

# (find-sh "pdfnup --help")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
pdfnup -o /tmp/monep-8-2up.pdf /tmp/monep-8.pdf
# (find-pdf-page "/tmp/monep-8-2up.pdf")




#####
#
# default PDF viewer
# 2013sep04
#
#####

# «default-pdf-viewer» (to ".default-pdf-viewer")
# «see» (to ".see")
# (find-es "debian" "mailcap")




#####
#
# pdftk
# 2015dec10 / 2021feb10
#
#####

# «pdftk» (to ".pdftk")
# http://askubuntu.com/questions/221962/how-can-i-extract-a-page-range-a-part-of-a-pdf
# http://linuxcommando.blogspot.com.br/2013/02/splitting-up-is-easy-for-pdf-file.html
# http://williamjturkel.net/2013/08/24/working-with-pdfs-using-command-line-tools-in-linux/
# http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
# https://gitlab.com/pdftk-java/pdftk
# https://www.pdflabs.com/docs/pdftk-cli-examples/
# (find-status   "pdftk")
# (find-vldifile "pdftk.list")
# (find-udfile   "pdftk/")
# (find-status   "pdftk-java")
# (find-vldifile "pdftk-java.list")
# (find-udfile   "pdftk-java/")
# (find-man "1 pdftk")

cd /tmp/
pdftk pagliapscap01.pdf cat 1 output 01.pdf





#####
#
# qpdf
# 2021feb10
#
#####

# «qpdf»  (to ".qpdf")
# (find-status   "qpdf")
# (find-vldifile "qpdf.list")
# (find-udfile   "qpdf/")
# (find-status   "libqpdf21")
# (find-vldifile "libqpdf21.list")
# (find-udfile   "libqpdf21/")
# (find-man "1 fix-qdf")
# (find-man "1 qpdf")
# (find-man "1 zlib-flate")
# (find-sh "qpdf --help")

/usr/share/doc/qpdf/qpdf-manual.html
/usr/share/doc/qpdf/qpdf-manual.pdf

# (code-pdf-page "qpdfmanual" "/usr/share/doc/qpdf/qpdf-manual.pdf")
# (code-pdf-text "qpdfmanual" "/usr/share/doc/qpdf/qpdf-manual.pdf")
# (find-qpdfmanualpage)
# (find-qpdfmanualtext)
# (find-qpdfmanualpage 5 "structural, content-preserving transformations")
# (find-qpdfmanualtext 5 "structural, content-preserving transformations")


# https://unix.stackexchange.com/questions/394065/command-line-how-do-you-rotate-a-pdf-file-90-degrees
# (c2m221vsbp 4 "questoes-2-e-3")
# (c2m221vsba   "questoes-2-e-3")
# (find-sh0 "cp -v  ~/LATEX/2022-1-C2-VSB.pdf /tmp/")
# (find-sh0 "cp -v  ~/LATEX/2022-1-C2-VSB.pdf /tmp/in.pdf")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v  ~/LATEX/2022-1-C2-VSB.pdf /tmp/
cp -v  ~/LATEX/2022-1-C3-VSB.pdf /tmp/
cd /tmp/
qpdf 2022-1-C2-VSB.pdf 2022-1-C2-VSB-rodado.pdf --rotate=+90
qpdf 2022-1-C3-VSB.pdf 2022-1-C3-VSB-rodado.pdf --rotate=+90

# (find-fline "/tmp/")




#####
#
# qpdf-merge
# 2023jul01
#
#####

# «qpdf-merge»  (to ".qpdf-merge")
# https://github.com/qpdf/qpdf/issues/11
# (find-angg     "LUA/QPDFMerge.lua")
# (find-anggfile "LUA/QPDFMerge.lua" "qpdf --empty --pages")
# (find-pdfanim-links "/tmp/qdraw/" "a_" "all")
# (find-efunction 'find-pdfanim-links)
# (to "glue-pages")
# (find-angg "MAXIMA/topdfanim1.sh")





#####
#
# converting djvu to pdf
# 2017jun14
#
#####

# «djvu-to-pdf» (to ".djvu-to-pdf")
# (find-zsh "apt-file search djvu | grep pdf")
# (find-angg "SCANS/Makefile" "pdf")
# (find-es "scan" "djvu2pdf")




#####
#
# djview
# 2017jul28
#
#####

# «djview» (to ".djview")
# (find-es "scan" "djview")
# (find-es "scan" "djview-page")
# (find-es "scan" "djview-default-page")




#####
#
# Other djvu viewers
# 2017ago01
#
#####

# «other-djvu-viewers» (to ".other-djvu-viewers")
# (find-status "djview4")
# (find-status "djview4" "djvu-viewer")
# (find-status "evince")





#####
#
# evince
# 2017ago01
#
#####

# «evince» (to ".evince")
# (find-es "mate" "atril")
# (find-status   "evince")
# (find-status   "evince" "Conflicts: evince-gtk")
# (find-vldifile "evince.list")
# (find-udfile   "evince/")
# (find-man "1 evince")
# (find-man "1 evince" "-i, --page-index=NUMBER")
# (find-man "1 evince" "-f, --fullscreen")
# (find-man "1 evince" "-s, --presentation")
# http://www.gnome.org/projects/evince/
# https://wiki.gnome.org/Apps/Evince

# (find-fline "~/books/__cats/")
# (find-books "__cats/__cats.el" "johnstone-elephant")
# (setenv "DJVU" (ee-expand "~/books/__cats/johnstone__sketches_of_an_elephant_2vols.djvu"))

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
evince --help
evince --page-index=2 $DJVU
evince -f --page-index=99 $DJVU
evince -s --page-index=99 $DJVU
evince -w --page-index=99 $DJVU

evince -f -i $[17+99] $DJVU
evince -s -i $[17+99] $DJVU

evince -geometry +0+0 -s --page-index=99 $DJVU
 



#####
#
# pdftotext
# 2017ago01
#
####

# «pdftotext» (to ".pdftotext")
# (find-es "charsets" "pdftotext")
# https://poppler.freedesktop.org/
# (find-status   "poppler-utils")
# (find-vldifile "poppler-utils.list")
# (find-udfile   "poppler-utils/")
# (find-man "1 pdftotext")
# (find-efunction 'find-pdf-text)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-sh "apt-cache show    poppler-utils")
# (find-sh "apt-cache showsrc poppler")
rm -Rv /tmp/d/
mkdir  /tmp/d/
cd     /tmp/d/
sudo apt-get build-dep -y   poppler
     apt-get source         poppler   |& tee osource
     apt-get source --build poppler   |& tee osourceb

# (find-fline "/tmp/d/")
# (find-fline "/tmp/d/poppler-0.41.0/utils/pdftotext.cc")




#####
#
# pdftotext-for-windows
# 2021oct21
#
#####

# «pdftotext-for-windows»  (to ".pdftotext-for-windows")
# https://en.wikipedia.org/wiki/Xpdf
# https://www.xpdfreader.com/download.html
# https://dl.xpdfreader.com/xpdf-tools-win-4.03.zip

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "/tmp/xpdf-tools-win-4.03/")
# (find-fline "/tmp/xpdf-tools-win-4.03/README")
# (find-fline "/tmp/xpdf-tools-win-4.03/bin64/" "pdftotext.exe")

rm -Rv /tmp/xpdf-tools-win-4.03/
mkdir  /tmp/xpdf-tools-win-4.03/
cd     /tmp/
unzip $S/https/dl.xpdfreader.com/xpdf-tools-win-4.03.zip
cd     /tmp/xpdf-tools-win-4.03/

cp -v  /tmp/xpdf-tools-win-4.03/bin64/pdftotext.exe ~/2021-oficina/
# (find-fline "~/2021-oficina/")




#####
#
# pdftotext generates spurious formfeeds
# 2019apr11
#
#####

# «pdftotext-spurious-ffs» (to ".pdftotext-spurious-ffs")
# (find-eev "eev-pdflike.el" "ee-goto-position-page")
# (find-eev "eev-pdflike.el" "ee-goto-position-page" "ee-pdftotext-replace-bad-ffs")
# (find-eev "eev-pdflike.el" "find-pdf-text")
# (find-eev "eev-pdflike.el" "find-pdf-text" "pdftotext")

# An example of a PDF in which my cleanup function doesn't work:
# https://github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf
# (find-books "__comp/__comp.el" "git-internals")
# (find-books "__comp/__comp.el" "git-internals" "\\f\\f")
# (find-gitinternalstext  16 "blob : a906cb")
# (find-gitinternalstext  16 "blob : a906cb" "\f\f")

# (find-man "1 pdftotext")
# (find-man "1 pdftotext" "-enc encoding-name")
# (find-man "1 pdftotext" "-enc encoding-name" "UTF-8")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
# wget -nc https://github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf
cp -v $S/https/github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf .
pdftotext -layout -enc Latin1 peepcode-git.pdf peepcode-git.latin1
pdftotext -layout             peepcode-git.pdf peepcode-git.utf8
# (find-fline "/tmp/peepcode-git.latin1")
# (find-fline "/tmp/peepcode-git.latin1" " 15")
# (find-fline "/tmp/peepcode-git.latin1" " 15" "blob : a906cb")
# (find-fline "/tmp/peepcode-git.latin1" " 15" "blob : a906cb" "\f\f")
# (find-fline "/tmp/peepcode-git.utf8")
# (find-fline "/tmp/peepcode-git.utf8"   " 15")
# (find-fline "/tmp/peepcode-git.utf8"   " 15" "blob : a906cb")
# (find-fline "/tmp/peepcode-git.utf8"   " 15" "blob : a906cb" 3)
# (find-fline "/tmp/peepcode-git.latin1" "SimpleGit Ruby Library" -2)
# (find-fline "/tmp/peepcode-git.utf8"   "SimpleGit Ruby Library" -2)




#####
#
# Page labels in PDFs
# 2018dec03
#
#####

# «page-labels» (to ".page-labels")
# (find-es "tex" "hyperref")
# (find-man "1 pdfinfo")
# https://stackoverflow.com/questions/12924073/export-pdf-page-labels-on-command-line
# https://tex.stackexchange.com/questions/246705/pdf-page-labels
# https://texfaq.org/FAQ-pdfpagelabels

https://manuals.setasign.com/setapdf-core-manual/page-labels/




#####
#
# reduce-pdf-file-size
# 2019dec01
#
#####

# «reduce-pdf-file-size» (to ".reduce-pdf-file-size")
# https://bash.cyberciti.biz/file-management/linux-shell-script-to-reduce-pdf-file-size/





#####
#
# zathura
# 2020dec01
#
#####

# «zathura»  (to ".zathura")
# https://pwmt.org/projects/zathura/
# https://pwmt.org/projects/zathura/download/
# https://pwmt.org/projects/zathura/installation/
# https://pwmt.org/projects/zathura/screenshots/
# https://git.pwmt.org/pwmt/girara.git
# https://git.pwmt.org/pwmt/girara
# https://git.pwmt.org/pwmt
# https://git.pwmt.org/pwmt/zathura
# (find-status   "zathura")
# (find-vldifile "zathura.list")
# (find-udfile   "zathura/")
# (find-man "1 zathura")
# (find-bgprocess "zathura -P 3 ~/Coetzee99.pdf")

(defun  ee-find-zathura-page (fname &optional page)
  `("zathura"
    "-P" ,(format "%d" (or page 1))
    ,fname))

;; (find-code-pdfbackend "zathura-page")
        (code-pdfbackend "zathura-page")

;; (find-zathura-page "~/Coetzee99.pdf")
;; (find-zathura-page "~/Coetzee99.pdf" 3)




#####
#
# mupdf and mutool
# 2021sep23
#
#####

# «mupdf»  (to ".mupdf")
# https://en.wikipedia.org/wiki/MuPDF
# https://mupdf.com/
# https://mupdf.com/docs/ecosystem.html
# https://mupdf.com/docs/manual-mutool-run.html
# https://mujs.com/

# (find-status   "mupdf")
# (find-vldifile "mupdf.list")
# (find-udfile   "mupdf/")
# (find-status   "mupdf-tools")
# (find-vldifile "mupdf-tools.list")
# (find-udfile   "mupdf-tools/")
# (find-man "1 mupdf")
# (find-man "1 mupdf" "KEY BINDINGS")
# (find-man "1 mutool")
# (find-man "1 mutool" "mutool draw [options] file [pages]")
# (find-man "1 mutool" "Comma separated list of page numbers")
# (find-man "1 mutool" "mutool info")
# (find-man "1 mutool" "mutool merge")

# https://www.slant.co/topics/5967/~pdf-viewers-for-linux
# (find-eev "eev-pdflike.el" "find-mupdfpage")

mupdf --help

mupdf ~/Coetzee99.pdf 42

apti mupdf
apti mupdf-tools

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/mutool/
mkdir  /tmp/mutool/
cd     /tmp/mutool/
cp -iv ~/books/__cats/maclane_moerdijk__sheaves_in_geometry_and_logic.pdf \
       /tmp/mutool/in.pdf

mutool draw -o out.pdf in.pdf 21
mutool info    out.pdf

mutool draw -o out.png in.pdf 21

# (find-fline "/tmp/mutool/")

https://stackoverflow.com/questions/2641770/extracting-image-from-pdf-with-ccittfaxdecode-filter
https://stackoverflow.com/questions/39927639/is-it-possible-to-use-libtiff-to-decode-ccitt-encoded-data-when-the-length-is-no?noredirect=1&lq=1
https://blog.idrsolutions.com/2013/03/understanding-the-pdf-file-format-filter-and-decodeparms-objects-for-a-pdf-image/

https://stackoverflow.com/a/47877930/4204372

https://stackoverflow.com/questions/2693820/extract-images-from-pdf-without-resampling-in-python/47877930#47877930

pip3 install pymupdf

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import fitz
os.chdir("/tmp/mutool/")
doc = fitz.open("out.pdf")
for i in range(len(doc)):
    for img in doc.getPageImageList(i):
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)
        if pix.n < 5:       # this is GRAY or RGB
            # pix.writePNG("p%s-%s.png" % (i, xref))
            pix.writePNG("out.png")
        else:               # CMYK: convert to RGB first
            # pix1 = fitz.Pixmap(fitz.csRGB, pix)
            # pix1.writePNG("p%s-%s.png" % (i, xref))
            pix1.writePNG("out.png")
            pix1 = None
        pix = None

# (find-fline "/tmp/mutool/")
# (find-gimp "/tmp/mutool/")

https://lists.gnu.org/archive/html/emacs-devel/2022-09/msg01377.html extract an outline
https://codeberg.org/jao/elibs/src/branch/main/lib/doc/jao-pdf.el#L48 -> jao-pdf-outline
https://codeberg.org/jao/elibs/src/branch/main/lib/doc/jao-doc-view.el#L50 -> jao-doc-view--imenu-create-index




#####
#
# epdfview
# 2022mar24
#
#####

# «epdfview»  (to ".epdfview")

# (find-git-links "https://github.com/JotaRandom/epdfview" "epdfview")
# (code-c-d "epdfview" "~/usrc/epdfview/")
# (find-epdfviewfile "")
# (find-epdfviewfile "INSTALL")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti libgtk-3-dev libgtk2.0-dev

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/epdfview/

git clean -dffx
git reset --hard

./configure --help               |& tee och
./configure --prefix=/usr/local  |& tee oc
make          |& tee om
make check    |& tee omc
sudo make install  |& tee omi
epdfview
epdfview --help
# (find-man "epdfview")




#####
#
# okular
# 2022apr04
#
#####

# «okular»  (to ".okular")
# (find-status   "okular")
# (find-vldifile "okular.list")
# (find-udfile   "okular/")
# (find-man "1 okular")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti okular
aptrm okular
sudo apt-get autoremove

;; Based on: (find-eev "eev-pdflike.el" "find-mupdfpage")
;; Test: (find-pdf-like-intro "2. Preparation")
;;       (find-okular-page "~/Coetzee99.pdf" 3)
;;
(defun     find-okular-page (fname &optional page &rest rest)
  (find-bgprocess (ee-find-okular-page fname page)))
(defvar ee-find-okular-page-options '())
(defun  ee-find-okular-page (fname &optional page &rest rest)
  `("okular"
    ,@ee-find-okular-page-options
    ,@(if page `("-p" ,(format "%s" page)))
    ,fname
    ))

;; (find-code-pdfbackend "okular-page")
        (code-pdfbackend "okular-page")




#####
#
# paps
# 2022dec18
#
#####

# «paps»  (to ".paps")
# (find-angg ".emacs.templates" "find-paps-links")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-12/msg00535.html Jean Louis
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-12/msg00790.html JL: options
# https://lists.gnu.org/archive/html/help-gnu-emacs/2023-01/msg00057.html JL: make
# (find-man "1 paps")
# (find-status   "paps")
# (find-vldifile "paps.list")
# (find-udfile   "paps/")




#####
#
# pypdf
# 2023may23
#
#####

# «pypdf»  (to ".pypdf")
# (find-pip3-links "pypdf")
# (find-pip3-links "pypdf2")
# (find-pip3-links "pypdf4")
# https://pybrary.net/pyPdf/
# https://pypi.org/project/pypdf/
# https://pypi.org/project/PyPDF2/
# https://pypi.org/project/PyPDF4/




#####
#
# pdf2djvu
# 2024sep16
#
#####

# «pdf2djvu»  (to ".pdf2djvu")
# (to "djvu-to-pdf")
# (find-fline "~/books/__analysis/" "iezzi__fundamentos_de_matematica_elementar__01_conjuntos_e_funcoes_3a_ed_1985.pdf")
# (find-books "__analysis/__analysis.el" "iezzi")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v ~/books/__analysis/iezzi__fundamentos_de_matematica_elementar__01_conjuntos_e_funcoes_3a_ed_1985.pdf /tmp/a.pdf
cd /tmp/
pdf2djvu -o b.djvu a.pdf
djvuize b.pdf



pdf2djvu --help

djvu2pdf



https://reverseengineering.stackexchange.com/questions/1526/open-source-gui-tool-for-decomposing-a-pdf





# (find-status   "kwayland-data")
# (find-vldifile "kwayland-data:amd64:amd64.list")
# (find-udfile   "kwayland-data/")
# (find-status   "kwayland-integration")
# (find-vldifile "kwayland-integration:amd64.list")
# (find-udfile   "kwayland-integration/")





;; Configure `find-pdf-page':
;; See:  (find-pdf-like-intro "3. Hyperlinks to PDF files")
;;       (find-pdf-like-intro "3. Hyperlinks to PDF files" "If you have xpdf")
;;       (find-eev "eev-pdflike.el" "change-default-viewer")
;; Test: (find-pdf-like-intro "2. Preparation")
;;       (find-pdf-page "~/Coetzee99.pdf" 3)
(defalias 'find-pdf-page 'find-xpdf-page)
(defalias 'find-pdf-page 'find-googlechrome-page)
(defalias 'find-pdf-page 'find-mupdf-page)








"p%s-%s.png" % (22, 444)


# (find-status   "pstoedit")
# (find-vldifile "pstoedit.list")
# (find-udfile   "pstoedit/")



# (find-efile "play/handwrite.el")







http://www.math.ubc.ca/~cass/graphics/manual/

https://github.com/mkottman/PdfCropGUI




# 2007apr06: An irc bot written in postscript
# http://jeffz.name/gs/

https://www.ghostscript.com/doc/9.27/History9.htm#Version9.27

https://news.ycombinator.com/item?id=32629237 PostScript Control Structures (2003) (nedbatchelder.com)
https://news.ycombinator.com/item?id=33646951 Show HN: I am building a new Python library to read/write PDF files (github.com/desgeeko)
https://news.ycombinator.com/item?id=33912786 How PostScript kickstarted desktop publishing (ieee.org)
https://computerhistory.org/blog/postscript-a-digital-printing-press/
https://amccormack.net/2012-01-22-anatomy-of-a-pdf-document.html
https://web.archive.org/web/20190914234428/esec-lab.sogeti.com/pages/origami.html
https://github.com/dzzie/pdfstreamdumper
https://github.com/jduck/file-dissect
https://www.sensible.so/history-of-the-pdf-pdf
https://news.ycombinator.com/item?id=38765627 Stirling-PDF: local web application to perform various operations on PDFs (github.com/frooodle)

https://github.com/dvcoolarun/web2pdf
https://news.ycombinator.com/item?id=39265756 Show HN: CLI for generating PDFs for offline reading (github.com/dvcoolarun)
https://en.wikipedia.org/wiki/NeWS
https://www.reddit.com/r/emacs/comments/1gbkdag/code_to_modify_pdf_metadata_such_as_its_outline/

https://blog.invisiblethings.org/2013/02/21/converting-untrusted-pdfs-into-trusted.html
https://news.ycombinator.com/item?id=42401904 Converting untrusted PDFs into trusted ones: The Qubes Way (2013) (invisiblethings.org)





#  Local Variables:
#  coding:               utf-8-unix
#  modes:                (fundamental-mode emacs-lisp-mode ps-mode)
#  End: