Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on mktclapp
#
# 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/mktclapp.e>
#           or at <http://angg.twu.net/e/mktclapp.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/>.
#
#######




# «.mktclapp.debs»	(to "mktclapp.debs")
# «.mktclapp.signing»	(to "mktclapp.signing")
# «.mktclapp_demo»	(to "mktclapp_demo")
# «.shared»		(to "shared")
# «.debugging_.sos»	(to "debugging_.sos")
# «.vtutil.so»		(to "vtutil.so")
# «.zHeader_zTail»	(to "zHeader_zTail")





#####
#
# Debianizing mktclapp (again)
# 2000nov26
#
#####

# «mktclapp.debs»  (to ".mktclapp.debs")
# (find-es "debiandev" "mktclapp_dh_make")
# (find-es "debiandev" "mktclapp")
# (find-es "debiandev" "mktclapp-3.9-fupl")
# (find-es "gpg" "gpg")

# (find-shttpw3 "www.hwaci.com/sw/mktclapp/")
# (find-fline "$S/http/www.hwaci.com/sw/mktclapp/mktclapp.tar.gz")
# Hm, the tgz hasn't been updated to version 3.10... But I won't mind now.
psne http://www.hwaci.com/sw/mktclapp/
psne http://www.hwaci.com/sw/mktclapp/mktclapp.tar.gz

#*
rm -v /usr/src/mktclapp*
rm -v /usr/src/mktclapp_3.9-*
rm -v /usr/src/mktclapp_3.9.orig.tar.gz

(cd /usr/src/; laf -d mktclapp*)

rm -Rv /usr/src/mktclapp-3.9.orig/
mkdir /usr/src/mktclapp-3.9.orig/
cd /usr/src/mktclapp-3.9.orig/
tar -xvzf $S/http/www.hwaci.com/sw/mktclapp/mktclapp.tar.gz

rm -Rv /usr/src/mktclapp-3.9/
mkdir /usr/src/mktclapp-3.9/
cd /usr/src/mktclapp-3.9/
tar -xvzf $S/http/www.hwaci.com/sw/mktclapp/mktclapp.tar.gz

# (find-mtafile "")
# (find-fline "~/mktclapp-3.9/")
# (find-fline "~/mktclapp-3.9/.files")

cd /usr/src/mktclapp-3.9/
mkdir debian examples
for i in $(<~/mktclapp-3.9/.files); do
  cp -ipv ~/mktclapp-3.9/$i $i
done


# «mktclapp.signing»  (to ".mktclapp.signing")
cd /usr/src/mktclapp-3.9/
# dpkg-buildpackage	|& tee odbp
# sh -x /usr/bin/dpkg-buildpackage.orig	|& tee odbpo
#
cat > $EEG <<'---'
TestPasswd
TestPasswd
---
eeg sh -x /usr/bin/dpkg-buildpackage.orig	|& tee odbpo


(cd /usr/src/; laf -d mktclapp*)

#*
cd /usr/src/
mv -v mktclapp*.deb .debs/
mv -v mktclapp*.dsc     .dscs/
mv -v mktclapp*.gz      .dscs/
mv -v mktclapp*.changes .dscs/
aptu-local-i386

#*

# (find-fline "/usr/bin/dh_builddeb")


# dpkg-deb: building package `mktclapp' in `../mktclapp_3.9-1_i386.deb'.
#  signfile mktclapp_3.9-1.dsc
# gpg: skipped `Eduardo Ochs <[email protected]>': secret key not available
# gpg: [stdin]: clearsign failed: secret key not available

# (find-fline "/usr/src/mktclapp_3.9-1_i386.deb")
dpkg -i /usr/src/mktclapp_3.9-1_i386.deb

# (find-fline "/usr/src/mktclapp-3.9/")
# (find-fline "/usr/src/mktclapp-3.9/odbp")
# (find-fline "/usr/src/mktclapp-3.9/debian/tmp/")
# (find-fline "/usr/src/mktclapp-3.9/debian/tmp/DEBIAN/")

# (find-status "mktclapp")
# (find-vldifile "mktclapp.list")
# (find-vldifile "" "mktclapp.list")
# (find-vldifile "mktclapp.postinst")
# (find-vldifile "tkdiff.postinst")
# (find-fline "/usr/doc/mktclapp/")
# (find-fline "/usr/share/doc/mktclapp/")

# (find-fline "~/mktclapp-3.9/debian/")
# (find-fline "~/mktclapp-3.9/debian/rules")
# (eeman "dh_installexamples")
# (eeman "dh_installdocs")
# (eeman "dh_installdocs" "postinst")
# (eeman "dh_installdeb")

laf -d /usr/doc/mktclapp /usr/share/doc/mktclapp
laf -d /usr/doc/tkdiff   /usr/share/doc/tkdiff






#####
#
# running the mktclapp demo README
# 2000dec06
#
#####

# «mktclapp_demo»  (to ".mktclapp_demo")
# (find-fline "/usr/doc/mktclapp/")
# (find-fline "/usr/doc/mktclapp/examples/")
# (find-fline "/usr/doc/mktclapp/examples/README")
# (find-fline "/usr/doc/mktclapp/examples/Makefile")
# (find-es "make" "environment")
# (find-vldifile "" " tcl")
# (find-node "(make)Setting" "FOO ?= bar")
# (find-node "(make)Origin Function")
# (find-node "(bash)Simple Command Expansion" "Otherwise")

#*
cd /usr/doc/mktclapp/examples/
rm -Rv /tmp/mktclapp/
TCL=8.2 TK=8.2 sh README	|& tee ~/o
#sh README TCL=8.2 TK=8.2	|& tee ~/o
#sh README TCL=8.3 TK=8.3

#*

# (find-fline "~/o")
# (find-fline "/tmp/mktclapp/")





#####
#
# more about making ".so"s
# 2000dec07
#
#####

# «shared»  (to ".shared")
# (find-fline "~/mktclapp-3.9/examples/")
# (find-fline "~/mktclapp-3.9/examples/README" "but now as a Tcl extension:")
# (find-fline "~/mktclapp-3.9/examples/Makefile" "factor.so:")
# (find-fline "/usr/doc/mktclapp/examples/")
#*
rm -Rv /tmp/mta/
mkdir  /tmp/mta/
cd     /tmp/mta/

cat > factor.c <<'---'
#include "mktclapp.h"
int ET_COMMAND_factor(ET_TCLARGS){
  int i, n;
  if( argc!=3 ){
    Et_ResultF(interp,"wrong # args: should be \"%s NUM PROC\"",argv[0]);
    return TCL_ERROR;
  }
  n = atoi(argv[1]);
  for(i=1; i<=n; i++){
    if( (n/i)*i!=n ) continue;
    if( Et_EvalF(interp, "%s %d", argv[2], i)!=TCL_OK ){
      return TCL_ERROR;
    }
  }
  return TCL_OK;
}
---

mktclapp -header > mktclapp.h
mktclapp -notk -extension Factor factor.c > factor_e.c
gcc -c -g -o factor.o factor.c
gcc -c -g -o factor_e.o factor_e.c
gcc -shared -o factor.so  factor_e.o factor.o

cat > factor2.tcl <<'---'
load ./factor.so
factor 12 puts
---
tclsh factor2.tcl

laf

#*
# «debugging_.sos»  (to ".debugging_.sos")
# (find-fline "~/TCL/attachgdb")
# You need to execute the block above before executing this!
cd /tmp/mta/

cat > factor3 <<'---'
#!/usr/bin/tclsh8.2
 # load ./factor.so
 puts [exec pstree]

  load /tmp/mta/factor.so
  # Full path for the .so; gdb would get confused with just "load ./factor.so"
  # (find-fline "~/TCL/attachgdb")
  puts [exec $env(HOME)/TCL/attachgdb {
          gdbk-gdb tclsh8.2 [ancestorpid factor3]
         }]

 puts hello
 factor 12 puts
 puts bye
---
chmod 755 factor3

cat > $EEG <<'---'
br ET_COMMAND_factor
cont
p argv[1]
bt
---

./factor3
#*




#####
#
# vtutil.so
# 2000jan07
#
#####

# «vtutil.so»  (to ".vtutil.so")
# (find-fline "~/MTA/")
#*
cd ~/MTA/
mktclapp -header > mktclapp.h
mktclapp -notk -extension Vtutil vtutilsh.c > vtutilsh_e.c
gcc -c -o vtutilsh_e.o vtutilsh_e.c
gcc -c -o vtutilsh.o   vtutilsh.c
gcc -shared -o vtutilsh.so  vtutilsh_e.o vtutilsh.o
expect -c '
  load ./vtutilsh.so Vtutil
  puts [join [lsort [info commands]] "\n"]
'
#*


#*
# (eev-bounded)
cd ~/MTA/
make veryclean
# make vtutilsh.so CFLAGS=-g
# make vtutilsh.so CFLAGS=-g TCLVERSION=8.0
# make vtutilsh.so vtutilsh CFLAGS=-g TCLVERSION=8.2
make vtutilsh.so vtutilsh CFLAGS="-g -I/usr/include/tcl8.3" TCLVERSION=8.3

cd ~/MTA/
./vtutil setfont 256 8 math1.8  /dev/tty0
# tclsh8.3 ./vtutil setfont 256 8 math1.8  /dev/tty0

# (find-fline "~/MTA/vtutil" "attachgdb")
#load /home/root/MTA/vtutilsh.so Vtutil
#  # (find-es "mktclapp" "debugging_.sos")
#  # (find-fline "~/TCL/attachgdb")
#  puts [exec /home/root/TCL/attachgdb {
#    gdbk-gdb tclsh8.2 [ancestorpid vtutil] 
#  }]

#*
cd ~/MTA/
make veryclean
# make vtutilsh.so vtutilsh CFLAGS="-g -I/usr/include/tcl8.3" TCLVERSION=8.3
make CFLAGS="-g -I/usr/include/tcl8.3" TCLVERSION=8.3
#*

# (gdbk-gdb t "/home/root/MTA/vtutilsh")
set args vtutil modifyfont 256 8 ega1.8  math1.8
set env LD_LIBRARY_PATH /usr/src/tcl8.3-8.3.1/unix
# br main
# br ET_OBJCOMMAND_setfont
br ET_OBJCOMMAND_change_char
run
# p objv[4][0]
p objv[5][0]

#*


# (gdbk-gdb t "/usr/bin/tclsh8.3")
# set args /home/root/MTA/vtutil setfont 256 8 math1.8  /dev/tty0








# I'm not in a debugging mood now, so I'm making this silly hack:
#catch {exec setfont  $env(HOME)/MTA/math1.8}
#catch {exec loadkeys $env(HOME)/MTA/math850.map}
#exit

# (find-es "mktclapp" "debugging_.sos")
# (find-fline "~/TCL/attachgdb")
#puts [exec /home/root/TCL/attachgdb {
#  gdbk-gdb tclsh8.2 [ancestorpid vtutil] 
#}]

# (find-status "tcl8.2-dev")
# (find-vldifile "tcl8.0-dev.list")
# (find-vldifile "tcl8.2-dev.list")
# (find-vldifile "tcl8.3-dev.list")
# (find-fline "/usr/doc/tcl8.2-dev/")

# (eeg-bounded 'once)
# (find-es "gdb" "zcatinfo-gdb")

#*
ldd /usr/bin/tclsh
LD_LIBRARY_PATH=/usr/src/tcl8.3-8.3.1/debian/tcl8.3/usr/lib: \
  ldd /usr/bin/tclsh

#*

# (gdbk-gdb t "/usr/bin/tclsh8.2")
cd /home/root/MTA/
set args vtutil modifyfont 256 8 ega1.8  math1.8

# (eev-bounded 'once)


#*
cat > $EEG <<'---'
br ET_OBJCOMMAND_change_char
cont
p objv[3][0]
p objv[5][0]
---

cd ~/MTA/
./vtutil modifyfont 256 8 ega1.8  math1.8
#*

# (find-fline "~/MTA/vtutil")
# (find-fline "~/MTA/vtutil" "proc modifyfont")



# share vtutilsh.so
# br main
# run

# (find-fline "~/MTA/vtutilsh.c")
# (find-fline "~/MTA/vtutil")
# (find-fline "~/TCL/")

symbol-file /usr/bin/tclsh8.2
add-symbol-file /home/root/MTA/vtutilsh.so

# set args /home/root/MTA/vtutil










#####
#
# mktclapp: fiddling with the zHeader and zTail strings
# 00feb13
#
#####

# «zHeader_zTail»  (to ".zHeader_zTail")

cd /usr/src/mktclapp-3.8/
sed -e 's/^int main/int oldmain/' mktclapp.c > mktclapp0.c
cat >> mktclapp0.c <<'---'
int main(int argc, char **argv){
  switch( argv[1][0] ){
    case '0': printf("%s", zHeader); break;
    case '1': printf("%s", zTail); break;
    default: exit(1);
  }
  return 0;
}
---
gcc -v -o mktclapp0 mktclapp0.c
mktclapp0 0 > zHeader
mktclapp0 1 > zTail

l zHeader zTail

# (find-mtafile "mktclapp.c" "int main")
# (find-mtafile "mktclapp0.c" "int oldmain")
# (find-mtafile "mktclapp0.c" "\nint main")

# (find-mtafile "mktclapp.c" "static char zHeader[] =")
# (find-mtafile "mktclapp.c" "static char zTail[] =")

# (find-mtafile "zHeader")
# (find-mtafile "zTail")





#####
#
# mail about zHeader and zTail
# 00feb10
#
#####

mail -s 'Re: Character array in mktclapp.c is too long' \
  [email protected] <<'---'
D. Richard Hipp wrote:

> OK.  There is now zTail[] of size 17235 bytes and zTail2[] of
> size 48764 bytes.  Please try the beta copy at
>
>     http://www.hwaci.com/sw/mktclapp/mktclapp.c-3.10b3
>
> and let me know if it works any better.
>
> Another approach would be to strip comments from the generated
> code.  This would make the output of mktclapp less readable,
> but it would probably also get the string down below 64K.
> Thoughts anyone?

Thoughts:

I would be nice to include a small "mktclapp hacker's guide" in the
mktclapp distribution, showing which scripts are used to extract the
text in zTail and zHeader and to put them back in mktclapp.c after
modification; by tweaking these scripts just a bit, a big file with
some delimiter lines ("/*--split here if needed--*/", say) would
become, say, zTail, zTail2, zTail3..., or zTail[0], zTail[1], ...,
instead of just zTail (we don't need much generality here: users
playing with this can (*) fix what they break).

With this, people who want to strip off the comments will be able to
do it easily with some grepping on the intermediate files, but that
would not be standard practice, and wouldn't be needed.

  Cheers,
    Edrx
    [email protected]
    http://angg.twu.net/mktclapp.html
    http://angg.twu.net/a/mktclapp-3.8/examples/README

(*): :-)
---





#####
#
# on not resetting ttys
#
#####

# (find-fline "~/MTA/")
# (find-fline "~/MTA/vtutilsh.c")



k22glimpse VT_GETSTATE

# (find-k22file "include/linux/tty.h" "VT_GETSTATE")
# (find-k22file "include/linux/tty.h" "struct tty_struct {")
#sub-structs:
# (find-k22tag "tty_driver")
# (find-k22tag "tty_ldisc")
# (find-k22tag "termios")
# (find-k22tag "winsize")
# (find-k22tag "tty_struct")
# (find-k22tag "fasync_struct")
# (find-k22tag "tty_flip_buffer")
# (find-k22tag "wait_queue")
# (find-k22tag "wait_queue")
# (find-k22tag "tq_struct")
# (find-k22tag "semaphore")

# (find-k22file "drivers/char/vt.c" "vt_stat")
# (find-k22file "Documentation/devices.txt" "Current virtual console")

cd /dev; laf tty? tty1?

# (find-fline "~/MTA/Makefile" "math:")

cd ~root/MTA/
./vtutil setfont  256 8 math1.8  /dev/tty
./vtutil setfont  256 16 math1.16  /dev/tty0

# Ops: se eu abro /dev/tty ao invés de um terminal específico os ls
# deixam de vir com crs implícitos.

math1.16: ega1.16 vtutil vtutilsh
	./vtutil modifyfont 256 16 ega1.16 math1.16
math16: math1.16 math850.map vtutil vtutilsh


/*
 * vtgetstate
 * Removed from vtutilsh because of crlf problems...
 * (eeman "console_ioctls" "VT_GETSTATE")
 * (find-k22tag "vt_stat")
 * (find-k22file "include/linux/vt.h")
 * (find-k22file "include/linux/vt.h" "struct vt_stat")
 * (find-k22file "include/linux/kd.h")
 * (find-fline "~/MTA/vtutilsh.c")
 * (find-fline "~/MTA/vtutilsh.c" "file%d")
 */

#include <linux/vt.h>

int ET_OBJCOMMAND_vtgetstate(ET_OBJARGS) {
  int f;
  struct vt_stat vtstat;
  if (objc != 2)
    ET_OARGSERROR("CHANNEL");
  if (sscanf(OARGV_STRING(1, 0), "file%d", &f) != 1)
    ET_ERROR("CHANNEL must be a file descriptor");
  if (ioctl(f, VT_GETSTATE, &vtstat))
    ET_ERROR1("VT_GETSTATE error: %s", strerror(errno));
  Et_ResultF(interp, "%d %d %d",
	     vtstat.v_active, vtstat.v_signal, vtstat.v_state);
  return TCL_OK;
}

# Removed from vtutil...

proc showvtstate {devfname} {
  set devfile [open $devfname {RDONLY NOCTTY NONBLOCK}]
  puts [vtgetstate $devfile]
  close $devfile
}




# (find-fline "~/MTA/vtutilsh.c" "VT_GETSTATE")
# (find-fline "~/MTA/vtutil")
# (find-fline "~/MTA/Makefile")
math
cd ~/MTA/
./vtutil showvtstate /dev/tty
ls


ls
cd ~/MTA/
./vtutil showvtstate thistty
ls





#####
#
# ?
#
#####

# (find-k22file "scripts/Configure" "if [")
# (find-fline "~/mktclapp-3.8/examples/README")

sh ~/mktclapp-3.8/examples/README
sh ~/mktclapp-3.8/examples/README TCL=99
sh ~/mktclapp-3.8/examples/README TCL=99 TK=aaa

cp -v ~/mktclapp-3.8/examples/Makefile /usr/doc/mktclapp/examples/
sh ~/mktclapp-3.8/examples/README TCL=4.0 TK=4.0

TCL=99







#  Local Variables:
#  coding:               utf-8-unix
#  End: