Warning: this is a htmlized version!
The original is across this link.
#######
#
# E-scripts on e-scripts.
#
# 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.
#
# 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/a/e/escripts.e>
#           or at <http://angg.twu.net/e/escripts.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/a/.emacs[.html]>,
#                 <http://angg.twu.net/a/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######





######
#
# a first e-script demo: debugging gawk (+ explanations)
# 00jan23
#
######

#  «debugging_gawk»

  Hi Georg,

  I have a project that I think you'll find worth a look, as the
  author of "Brave GNU world" or as a GNU user: it lets users embed
  chunks of code and hyperlinks in plain text files (if they use
  Emacs!), in such a way that one can, for example, write notes about
  how to unpack gawk, recompile it with debug information, start gdb
  on it, place a breakpoint at a certain place, and make it run until
  the breakpoint is reached, all that with comments interspersed that
  are in fact hyperlinks to the places where you got the information
  that led you up to that point... and instead of writing these notes
  in an artificial "press this, do that" style you just record what
  you sent to the shell and to gdb and to "replay" what you recorded
  you just have to mark blocks in Emacs and issue some simple
  commands... in this specific example, many comments in the chunk
  below are to be executed with C-x C-e (eval-last-sexp in Emacs) and
  other parts with M-x eev or M-x eegdb-bounded; eev, eegdb-bounded
  and code-c-d are defined in my package, eev.el, and find-gawkfile,
  find-gawknode and find-gawktag become defined when one runs the
  code-c-d line.

# (code-c-d "gawk" "/usr/src/gawk-3.0.3/" "gawk")

rm -Rv /usr/src/gawk-3.0.3/
cd /usr/src/
dpkg-source -sn -x \
  /big/slinks2/dists/slink/main/source/interpreters/gawk_3.0.3-1.dsc
cd /usr/src/gawk-3.0.3/
debian/rules binary	|& tee odrb
etags *.[chy]

# (find-gawkfile "odrb" "strip")
# (find-gawkfile "debian/rules" "strip")
# In the top gawk dir there's a non-stripped binary; we use it.

# (find-gawknode "Numeric Functions")
# (find-gawkfile "awktab.c" "\"cos\"")
# (find-gawktag "do_cos")

cat > /tmp/awkprog <<'---'
BEGIN { print cos(0); }
---

%*
br do_cos
set args -f /tmp/awkprog
run
p *tree
%*
p *(tree->sub.nodep.l.lptr)
%*
p *(tree->sub.nodep.l.ll)
%*

# (gdb "gdb /usr/src/gawk-3.0.3/gawk")
# (find-gawktag "lnode")


# (find-angg "eev.el" "eev")
# (find-angg "eev.el" "code-c-d")
# (find-angg "eev.el" "code-c-d-explan1")
# (find-angg "eev.el" "code-c-d-explan2")
# (find-angg "eev.el" "gdb")
# (find-angg "eev.el" "bounded")





#######
#
# locating escript headers in emacs (old)
#
#######

; (fundamental-mode)
; (emacs-lisp-mode)
; (find-elnode "Top")
; (find-elnode "Searching and Matching")
; (find-elnode "Syntax of Regexps")

; (find-enode "Top")
; (find-enode "Top" "Regexp Search")

; (find-enode "Command Index" "isearch-forward-regexp")
; (find-etag "isearch-forward-regexp")

(setq eregexp (let ((li1 "####*")
		    (li2 "#")
		    (li3 "# \\(.*\\)")
		    (li4 "#")
		    (li5 "####*"))
		(format "\n\n%s\n%s\n%s\n%s\n%s\n\n" li1 li2 li3 li4 li5)))
(let ((regexp-search-ring (list eregexp)))
  (isearch-forward-regexp))

; Uso: C-M-s 

tclsh <<'---'
set re "\n\n####*\n#\n# \\(.*\\)\n#\n####*\n\n"
set re "\n\n####*\n#\n# (.*)\n#\n####*\n\n"
set s "a\n\n#####\n#\n# foo\n#\n######\n\nb"
set fid [open "~/ZHTML/escripts/icon.e"]
set s [read $fid]
puts [regexp $re $s]
puts [regexp $re foo]
---




######
#
# Converting escripts to html (perl version; old)
#
######

#  «escripts_to_html»

# (find-pl5file "HTML/")
# (find-pl5file "HTML/Entities.pm")
# (find-fline "~/bin/e2html")

cat $ES/escripts.e \
  | 850toiso -s \
  | perl -e 'use HTML::Entities;
	     print "<head></head><body><pre>";
	     while ($_ = <>) {
	       if (m/^((#+ |;+ |\\ |\\; )\0253(.*)\0273\n$/) {
		 print "<a name=\"$3\">", encode_entities($1), "</a>\n"; 
	       } else {
		 print encode_entities($_);
	       }
	     }
	     print "</pre></body>\n";' \
  > /tmp/o.html

pdsc /debian/dists/slink/main/source/text/tcs_1-4.dsc


 $a = "V&aring;re norske tegn b&oslash;r &#230res";
 decode_entities($a);
 encode_entities($a, "\200-\377");




#####
#
# Checking if all headers are OK
# 99sep??
#
#####

# (find-enode "Fill Commands")
# (find-enode "Fill Commands" "adaptive-fill-mode")
# (find-enode "Text Mode" "indented-text-mode")

set escripts {anggsmil.e bis.e cartas.e crim.e debian.e debian0.e
  debiandev.e dos.e emacs.e escripts.e ethernet.e fl.e forth.e games.e
  general.e gimp.e greenmatrix.e hardware.e html.e icon.e icq.e k22.e
  kernel.e mail.e maple.e mini.e music.e net.e netscape.e nonfree.e
  page.e perl.e perl1.e ppp.e print.e psx.e raven10.e raven10b.e
  redhat.e rest.e scheme.e secret.e slink.e sql.e tcl.e tese.e tex.e
  todo.e transp.e vivamusica.e yard.e zsh.e}

proc getheaderlines {fname} {
  set lines [split [exec cat /home/root/ZHTML/escripts/$fname] "\n"]
  puts "$fname [llength $lines]"
  set headerlines {}
  foreach line $lines {
    lappend headerlines $line
    if {$line==""} {break}
  }
  return $headerlines
}
proc writefile {fname str} {
  set channel [open $fname w]; puts -nonewline $channel $str; close $channel
}
foreach fname $escripts {
  writefile /tmp/$fname [join [getheaderlines $fname] "\n"]
}


eet
cd /tmp; for i in *.e; do echo "\n\n$i kernel.e"; diff $i kernel.e; done

rm /tmp/*.e





######
#
# Checking the headers with an expect script
# 99oct14
#
######

#  «eheaders»
# (find-fline "~/EXPECT/eheaders")

cd $ES
eheaders *.e





######
#
# Adjusting the headers
# 99nov03
#
######

#  «adjusting_eheaders»
# (find-fline "~/EXPECT/eheaders")

expect -c '
  proc readfile {fname} {
    set channel [open $fname r]; set bigstr [read $channel]; close $channel
    return $bigstr
  }
  set s [readfile $env(ES)/emacs.e]
  set v "#\n"
  set nv "#\[^\n\]+\n"
  set com "#\[^\n\]*\n"
  set bigre "^$nv${v}(($nv)+)${v}(($com)+)(.*)\$"
  if {[regexp $bigre $s -> descr {} hrest {} rest]} {
    puts "<<$descr>>\n<<$hrest>>\n<<$rest>>"
  }
'


#  «fix-eheaders»
# (find-fline "~/TCL/fix-eheaders")

rm -Rv /tmp/e
mkdir /tmp/e
cd $ES
~/TCL/fix-eheaders *.e

# eheaders /tmp/e/*.e

cp -v /tmp/e/*.e $ES/

# (find-fline "~/TCL/fix-eheaders" "splite")
# (find-fline "~/TCL/fix-eheaders" "Bad efile")





#####
#
# find-es as a cgi
# 2000jan03
#
#####