modperl branch collapsed back to MAIN trunk, man!
authorshort <>
Mon, 20 Oct 2003 08:07:18 +0000 (08:07 +0000)
committershort <>
Mon, 20 Oct 2003 08:07:18 +0000 (08:07 +0000)
466 files changed:
.htaccess
Contact.html.pl [new file with mode: 0755]
Index.html.pl [new file with mode: 0755]
Mailman.pl [new file with mode: 0755]
Makefile-head.am
Makefile.am
Redirect.pl [new file with mode: 0755]
SendMsg.pl [new file with mode: 0755]
WebConfig.pm
autogen.pl
configure.ac [moved from configure.in with 64% similarity]
dia-w.sh.in [new file with mode: 0755]
etmms/Index.html.pl [new file with mode: 0755]
etmms/Makefile.am [new file with mode: 0644]
etmms/gate.dia [new file with mode: 0644]
etmms/gate.gif [new file with mode: 0644]
etmms/gate.png [new file with mode: 0644]
etmms/triple.jpeg [new file with mode: 0644]
have_js.js.pl [new file with mode: 0755]
pgp-JanKratochvil.txt [new file with mode: 0644]
project/.htaccess [deleted file]
project/332/332-back-board-small.jpeg [new file with mode: 0644]
project/332/332-back-board.jpeg [new file with mode: 0644]
project/332/332-front-CPU.jpeg [new file with mode: 0644]
project/332/332-front-board-small.jpeg [new file with mode: 0644]
project/332/332-front-board.jpeg [new file with mode: 0644]
project/332/332-front-icon.jpeg [new file with mode: 0644]
project/332/332-noexec.tar.gz [new file with mode: 0644]
project/332/Index.html.pl [new file with mode: 0755]
project/332/ListItem.pm [moved from index.html.pl with 52% similarity]
project/332/Makefile.am [new file with mode: 0644]
project/AutoGen/Index.html.pl [new file with mode: 0755]
project/AutoGen/ListItem.pm [new file with mode: 0755]
project/AutoGen/Makefile.am [new file with mode: 0644]
project/CasioA/Casio-A-icon.png [new file with mode: 0644]
project/CasioA/Casio-A.asm [new file with mode: 0644]
project/CasioA/Casio-A.lha [new file with mode: 0644]
project/CasioA/Casio-A.png [new file with mode: 0644]
project/CasioA/CasioSchema.png [new file with mode: 0644]
project/CasioA/Index.html.pl [new file with mode: 0755]
project/CasioA/ListItem.pm [new file with mode: 0755]
project/CasioA/Makefile.am [new file with mode: 0644]
project/ChangeLog.txt.pl [new file with mode: 0755]
project/FordFulk/FordFulk-icon.png [new file with mode: 0644]
project/FordFulk/FordFulk.png [new file with mode: 0644]
project/FordFulk/Index.html.pl [moved from project/FordFulk/index.html.pl with 67% similarity]
project/FordFulk/ListItem.pm
project/FordFulk/Makefile.am
project/Heat/Heat-icon.png [new file with mode: 0644]
project/Heat/Heat.png [new file with mode: 0644]
project/Heat/Index.html.pl [moved from project/Heat/index.html.pl with 68% similarity]
project/Heat/ListItem.pm
project/Heat/Makefile.am
project/Index.html.pl [new file with mode: 0755]
project/Islet/Index.html.pl [moved from project/Islet/index.html.pl with 66% similarity]
project/Islet/Islet-icon.png [new file with mode: 0644]
project/Islet/ListItem.pm
project/Islet/Makefile.am
project/LaserGame/Index.html.pl [new file with mode: 0755]
project/LaserGame/LaserComm.png [new file with mode: 0644]
project/LaserGame/LaserGame.lha [new file with mode: 0644]
project/LaserGame/LaserGun.a51 [new file with mode: 0644]
project/LaserGame/ListItem.pm [new file with mode: 0755]
project/LaserGame/Makefile.am [new file with mode: 0644]
project/LaserGame/hw-icon.jpeg [new file with mode: 0644]
project/LaserGame/hw.jpeg [new file with mode: 0644]
project/List.html.pl [new file with mode: 0755]
project/Makefile.am
project/MyWeb/Index.html.pl [moved from project/Nokia61/index.html.pl with 67% similarity]
project/MyWeb/ListItem.pm [new file with mode: 0755]
project/MyWeb/Makefile.am [new file with mode: 0644]
project/Nokia61/Index.html.pl [new file with mode: 0755]
project/Nokia61/ListItem.pm
project/Nokia61/Makefile.am
project/Nokia61/Nokia61-icon.jpeg [new file with mode: 0644]
project/Nokia61/Nokia61.jpeg [new file with mode: 0644]
project/PerlMail/Index.html.pl [new file with mode: 0755]
project/PerlMail/ListItem.pm [new file with mode: 0755]
project/PerlMail/Makefile.am [new file with mode: 0644]
project/Pod2Html.html.pl [new file with mode: 0755]
project/PortDiag/Index.html.pl [new file with mode: 0755]
project/PortDiag/ListItem.pm [new file with mode: 0755]
project/PortDiag/Makefile.am [new file with mode: 0644]
project/PortDiag/PortDiag-icon.png [new file with mode: 0644]
project/PortDiag/PortDiag.asm [new file with mode: 0644]
project/PortDiag/PortDiag.lha [new file with mode: 0644]
project/PortDiag/PortDiag.png [new file with mode: 0644]
project/QueryDev/Index.html.pl [new file with mode: 0755]
project/QueryDev/ListItem.pm [new file with mode: 0755]
project/QueryDev/Makefile.am [new file with mode: 0644]
project/QueryDev/QueryDev.README [new file with mode: 0644]
project/QueryDev/QueryDev.asm [new file with mode: 0644]
project/QueryDev/QueryDev.lha [new file with mode: 0644]
project/Rel.pl [new file with mode: 0755]
project/ResRAM/Index.html.pl [new file with mode: 0755]
project/ResRAM/ListItem.pm [new file with mode: 0755]
project/ResRAM/Makefile.am [new file with mode: 0644]
project/ResRAM/ResRAM.README [new file with mode: 0644]
project/ResRAM/ResRAM.asm [new file with mode: 0644]
project/ResRAM/ResRAM.lha [new file with mode: 0644]
project/SClock/Index.html.pl [new file with mode: 0755]
project/SClock/ListItem.pm [new file with mode: 0755]
project/SClock/Makefile.am [new file with mode: 0644]
project/SClock/SClock.README [new file with mode: 0644]
project/SClock/SClock.asm [new file with mode: 0644]
project/SClock/SClock.lha [new file with mode: 0644]
project/ShortRel/Index.html.pl [new file with mode: 0755]
project/ShortRel/ListItem.pm [new file with mode: 0755]
project/ShortRel/Makefile.am [new file with mode: 0644]
project/ShortRel/ShortRel.README [new file with mode: 0644]
project/ShortRel/ShortRel.asm [new file with mode: 0644]
project/ShortRel/ShortRel.lha [new file with mode: 0644]
project/TraceFS/Index.html.pl [new file with mode: 0755]
project/TraceFS/ListItem.pm [new file with mode: 0755]
project/TraceFS/Makefile.am [new file with mode: 0644]
project/TraceFS/TraceFS-icon.png [new file with mode: 0644]
project/badblock_guess/Index.html.pl [moved from project/badblock_guess/index.html.pl with 76% similarity]
project/badblock_guess/ListItem.pm
project/badblock_guess/Makefile.am
project/badblock_guess/hdd-icon.jpeg [new file with mode: 0644]
project/captive/CVS.html.pl [new file with mode: 0755]
project/captive/Index.html.pl [new file with mode: 0755]
project/captive/ListItem.pm [new file with mode: 0755]
project/captive/Makefile.am [moved from project/mdsms/index.html.pl with 64% similarity, mode: 0644]
project/captive/Preview.html.pl [new file with mode: 0755]
project/captive/Resources.html.pl [new file with mode: 0755]
project/captive/Thanks.html.pl [new file with mode: 0755]
project/captive/apiref/.htaccess [new file with mode: 0644]
project/captive/apiref/Makefile.am [new file with mode: 0644]
project/captive/apiref/captive-apiref-calltype-reactos.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-init.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-ldr-exports.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-ldr.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-macros.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-mm.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-ps-reactos.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-rtl-file.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-signal.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-storage.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-unicode-reactos.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-unicode.html [new file with mode: 0644]
project/captive/apiref/ch01.html [new file with mode: 0644]
project/captive/apiref/home.png [new file with mode: 0644]
project/captive/apiref/index.html [new file with mode: 0644]
project/captive/apiref/left.png [new file with mode: 0644]
project/captive/apiref/right.png [new file with mode: 0644]
project/captive/apiref/up.png [new file with mode: 0644]
project/captive/captive-install-acquire-icon.png [new file with mode: 0644]
project/captive/captive-install-acquire-small.png [new file with mode: 0644]
project/captive/captive-install-acquire.png [new file with mode: 0644]
project/captive/dist/captive-1.0-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-1.0-0.src.rpm [new file with mode: 0644]
project/captive/dist/captive-1.0-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/captive-1.0-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-1.0.tar.gz [new file with mode: 0644]
project/captive/dist/captive-debuginfo-1.0-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-install-1.0-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-install-1.0-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/captive-install-1.0-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-install_1.0_i386.deb [new file with mode: 0644]
project/captive/dist/captive-lufs-1.0-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-lufs_1.0_i386.deb [new file with mode: 0644]
project/captive/dist/captive_1.0.dsc [new file with mode: 0644]
project/captive/dist/captive_1.0.tar.gz [new file with mode: 0644]
project/captive/dist/captive_1.0_i386.changes [new file with mode: 0644]
project/captive/dist/captive_1.0_i386.deb [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb [new file with mode: 0644]
project/captive/dist/lufs-0.9.6-1captive6.i386.rpm [new file with mode: 0644]
project/captive/dist/lufs-0.9.6-1captive6.src.rpm [new file with mode: 0644]
project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/lufs-0.9.6captive6.tar.gz [new file with mode: 0644]
project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive6.dsc [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive6.tar.gz [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive6_i386.changes [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive6_i386.deb [new file with mode: 0644]
project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-200309071734captive1.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb [new file with mode: 0644]
project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0.2.dsc [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.changes [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1.dsc [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1_i386.changes [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1_i386.deb [new file with mode: 0644]
project/captive/doc/APITypes.html.pl [new file with mode: 0755]
project/captive/doc/About.html.pl [new file with mode: 0755]
project/captive/doc/Architecture.html.pl [new file with mode: 0755]
project/captive/doc/CacheManager.html.pl [new file with mode: 0755]
project/captive/doc/CallType.html.pl [new file with mode: 0755]
project/captive/doc/Components.html.pl [new file with mode: 0755]
project/captive/doc/Details.html.pl [new file with mode: 0755]
project/captive/doc/Index.html.pl [new file with mode: 0755]
project/captive/doc/LinuxNTFS.html.pl [new file with mode: 0755]
project/captive/doc/Macros.pm [new file with mode: 0755]
project/captive/doc/Makefile.am [moved from project/kix/index.html.pl with 64% similarity, mode: 0644]
project/captive/doc/Related.html.pl [new file with mode: 0755]
project/captive/doc/Reverse.html.pl [new file with mode: 0755]
project/captive/doc/TODO.html.pl [new file with mode: 0755]
project/captive/doc/arch-W32.png [new file with mode: 0644]
project/captive/doc/arch-W32.sxd [new file with mode: 0644]
project/captive/doc/arch-captive.png [new file with mode: 0644]
project/captive/doc/arch-captive.sxd [new file with mode: 0644]
project/captive/doc/captive-install-acquire-ask.png [new file with mode: 0644]
project/captive/doc/dia/Makefile.am [moved from project/kware/index.html.pl with 64% similarity, mode: 0644]
project/captive/doc/dia/TraceFS.dia [new file with mode: 0644]
project/captive/doc/dia/TraceFS.gif [new file with mode: 0644]
project/captive/doc/dia/TraceFS.png [new file with mode: 0644]
project/captive/doc/dia/arch-all.dia [new file with mode: 0644]
project/captive/doc/dia/arch-all.gif [new file with mode: 0644]
project/captive/doc/dia/arch-all.png [new file with mode: 0644]
project/captive/doc/dia/cache-manager.dia [new file with mode: 0644]
project/captive/doc/dia/cache-manager.gif [new file with mode: 0644]
project/captive/doc/dia/cache-manager.png [new file with mode: 0644]
project/captive/doc/dia/inheritance.dia [new file with mode: 0644]
project/captive/doc/dia/inheritance.gif [new file with mode: 0644]
project/captive/doc/dia/inheritance.png [new file with mode: 0644]
project/captive/doc/dia/parent-connector.dia [new file with mode: 0644]
project/captive/doc/dia/parent-connector.gif [new file with mode: 0644]
project/captive/doc/dia/parent-connector.png [new file with mode: 0644]
project/captive/doc/fig/Makefile.am [moved from project/cvsutil/index.html.pl with 60% similarity, mode: 0644]
project/captive/doc/fig/calltype_cdecl.fig [new file with mode: 0644]
project/captive/doc/fig/calltype_fastcall.fig [new file with mode: 0644]
project/captive/doc/fig/calltype_stdcall.fig [new file with mode: 0644]
project/captive/doc/fig/functype_native_fromunix.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_native_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_pass_fromunix.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_pass_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_wrap_fromunix.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_wrap_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/functype_unpatched_native_fromw32.fig [new file with mode: 0644]
project/captive/doc/ntdebug-ntfs.png [new file with mode: 0644]
project/captive/doc/ntdebug-vmware-windbg.png [new file with mode: 0644]
project/captive/doc/ntdebug-vmware-xpdebug.png [new file with mode: 0644]
project/captive/doc/ntdebug-wait.png [new file with mode: 0644]
project/captive/doc/ntdebug-windbg-boot.png [new file with mode: 0644]
project/captive/doc/ntdebug-windbg-port.png [new file with mode: 0644]
project/captive/doc/ntdebug-windbg-sym.png [new file with mode: 0644]
project/captive/doc/ratio.png [new file with mode: 0644]
project/captive/doc/ratio.sxi [new file with mode: 0644]
project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip [new file with mode: 0644]
project/captive/man/captive-cmdline.pod.html [new file with mode: 0644]
project/captive/man/captive-install-acquire.pod.html [new file with mode: 0644]
project/captive/man/captive-install-fstab.pod.html [new file with mode: 0644]
project/captive/man/captive-sandbox-server.pod.html [new file with mode: 0644]
project/captive/man/captive.pod.html [new file with mode: 0644]
project/captive/man/lufs-captivefs.pod.html [new file with mode: 0644]
project/captive/man/mount.captive.pod.html [new file with mode: 0644]
project/captive/reactos.png [new file with mode: 0644]
project/checkListItem.pl
project/checkstatic/Index.html.pl [moved from project/checkstatic/index.html.pl with 69% similarity]
project/checkstatic/ListItem.pm
project/checkstatic/Makefile.am
project/cvsbranchdiff/Index.html.pl [moved from project/cvsbranchdiff/index.html.pl with 68% similarity]
project/cvsbranchdiff/ListItem.pm
project/cvsbranchdiff/Makefile.am
project/cvsutil/Index.html.pl [new file with mode: 0755]
project/cvsutil/ListItem.pm
project/cvsutil/Makefile.am
project/d1xnet/Index.html.pl [moved from project/d1xnet/index.html.pl with 69% similarity]
project/d1xnet/ListItem.pm
project/d1xnet/Makefile.am
project/d1xnet/exit03.jpeg [new file with mode: 0644]
project/doswatch/Index.html.pl [moved from project/doswatch/index.html.pl with 69% similarity]
project/doswatch/ListItem.pm
project/doswatch/Makefile.am
project/energie/Index.html.pl [new file with mode: 0755]
project/energie/ListItem.pm [new file with mode: 0755]
project/energie/Makefile.am [new file with mode: 0644]
project/etherealmmse/Index.html.pl [new file with mode: 0755]
project/etherealmmse/ListItem.pm [new file with mode: 0755]
project/etherealmmse/Makefile.am [new file with mode: 0644]
project/etherealmmse/elogo3d100x100.png [new file with mode: 0644]
project/etherealwsp/Index.html.pl [new file with mode: 0755]
project/etherealwsp/ListItem.pm [new file with mode: 0755]
project/etherealwsp/Makefile.am [new file with mode: 0644]
project/etherealwsp/elogo3d100x100.png [new file with mode: 0644]
project/etherealwsp/ethereal-2002-08-03-packet-wsp.c-contentlocation.diff [new file with mode: 0644]
project/fixhtml/Index.html.pl [moved from project/fixhtml/index.html.pl with 55% similarity]
project/fixhtml/ListItem.pm
project/fixhtml/Makefile.am
project/gladewsrc/Index.html.pl [new file with mode: 0755]
project/gladewsrc/ListItem.pm [new file with mode: 0755]
project/gladewsrc/Makefile.am [new file with mode: 0644]
project/gladewsrc/glade-0.5.7-writesource.diff [new file with mode: 0644]
project/gladewsrc/glade-icon.png [new file with mode: 0644]
project/gsmperl/Index.html.pl [new file with mode: 0755]
project/gsmperl/ListItem.pm [new file with mode: 0755]
project/gsmperl/Makefile.am [new file with mode: 0644]
project/int13sniff/Index.html.pl [new file with mode: 0755]
project/int13sniff/ListItem.pm [new file with mode: 0755]
project/int13sniff/Makefile.am [new file with mode: 0644]
project/int13sniff/int13sniff-icon.png [new file with mode: 0644]
project/int13sniff/int13sniff-snap.png [new file with mode: 0644]
project/int13sniff/int13sniff.bin.gz [new file with mode: 0755]
project/ircon/Index.html.pl [moved from project/ircon/index.html.pl with 80% similarity]
project/ircon/ListItem.pm
project/ircon/Makefile.am
project/ircon/ircon-icon.jpeg [new file with mode: 0644]
project/ircon/ircon-led-small.jpeg [new file with mode: 0644]
project/ircon/ircon-led.jpeg [new file with mode: 0644]
project/ircon/ircon-parport-small.jpeg [new file with mode: 0644]
project/ircon/ircon-parport.jpeg [new file with mode: 0644]
project/kewensis/Index.html.pl [new file with mode: 0755]
project/kewensis/ListItem.pm [new file with mode: 0755]
project/kewensis/Makefile.am [new file with mode: 0644]
project/kewensis/out-edit.html [new file with mode: 0644]
project/kewensis/out-list.html [new file with mode: 0644]
project/kix/Index.html.pl [new file with mode: 0755]
project/kix/ListItem.pm
project/kix/Makefile.am
project/kware/Index.html.pl [new file with mode: 0755]
project/kware/ListItem.pm
project/kware/Makefile.am
project/libtool/Index.html.pl [new file with mode: 0755]
project/libtool/ListItem.pm [new file with mode: 0755]
project/libtool/Makefile.am [new file with mode: 0644]
project/libxml2reader/Index.html.pl [new file with mode: 0755]
project/libxml2reader/ListItem.pm [new file with mode: 0755]
project/libxml2reader/Makefile.am [new file with mode: 0644]
project/line9k/Index.html.pl [moved from project/line9k/index.html.pl with 70% similarity]
project/line9k/ListItem.pm
project/line9k/Makefile.am
project/line9k/charger-icon.jpeg [new file with mode: 0644]
project/line9k/charger.jpeg [new file with mode: 0644]
project/list.cgi.pl [deleted file]
project/lynxilla/Index.html.pl [new file with mode: 0755]
project/lynxilla/ListItem.pm [new file with mode: 0755]
project/lynxilla/Makefile.am [new file with mode: 0644]
project/mdsms/Index.html.pl [new file with mode: 0755]
project/mdsms/ListItem.pm
project/mdsms/Makefile.am
project/mdsms/dist/mdsms-1.5.3-0.i386.rpm [new file with mode: 0644]
project/mdsms/dist/mdsms-1.5.3-0.src.rpm [new file with mode: 0644]
project/mdsms/dist/mdsms-1.5.3.tar.Z [new file with mode: 0644]
project/mdsms/dist/mdsms-1.5.3.tar.gz [new file with mode: 0644]
project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm [new file with mode: 0644]
project/mdsms/mdsms-1.5.2-0.i386.rpm [deleted file]
project/mdsms/mdsms-1.5.2-0.src.rpm [deleted file]
project/mdsms/mdsms-1.5.2.tar.Z [deleted file]
project/mdsms/mdsms-1.5.2.tar.gz [deleted file]
project/mdsms/siemens_m20t-icon.jpeg [new file with mode: 0644]
project/middleman/Index.html.pl [new file with mode: 0755]
project/middleman/ListItem.pm [new file with mode: 0755]
project/middleman/Makefile.am [new file with mode: 0644]
project/mod_auth_tacacs/Index.html.pl [moved from project/mod_auth_tacacs/index.html.pl with 68% similarity]
project/mod_auth_tacacs/ListItem.pm
project/mod_auth_tacacs/Makefile.am
project/mod_auth_tacacs/cisco-icon.jpeg [new file with mode: 0644]
project/mot2as/Index.html.pl [moved from project/mot2as/index.html.pl with 58% similarity]
project/mot2as/ListItem.pm
project/mot2as/Makefile.am
project/muttsort/Index.html.pl [new file with mode: 0755]
project/muttsort/ListItem.pm [new file with mode: 0755]
project/muttsort/Makefile.am [new file with mode: 0644]
project/muttsort/mutt-sort.diff [new file with mode: 0644]
project/muttsort/mutt_button.png [new file with mode: 0644]
project/netstat/Index.html.pl [moved from project/netstat/index.html.pl with 80% similarity]
project/netstat/ListItem.pm
project/netstat/Makefile.am
project/oslik/Index.html.pl [moved from project/oslik/index.html.pl with 72% similarity]
project/oslik/ListItem.pm
project/oslik/Makefile.am
project/patchd2/Index.html.pl [moved from project/patchd2/index.html.pl with 69% similarity]
project/patchd2/ListItem.pm
project/patchd2/Makefile.am
project/patchd2/d2-icon.jpeg [new file with mode: 0644]
project/pgsqlsubstr/Index.html.pl [new file with mode: 0755]
project/pgsqlsubstr/ListItem.pm [new file with mode: 0755]
project/pgsqlsubstr/Makefile.am [new file with mode: 0644]
project/pgsqlsubstr/postgresql.png [new file with mode: 0644]
project/phphash/Index.html.pl [new file with mode: 0755]
project/phphash/ListItem.pm [new file with mode: 0755]
project/phphash/Makefile.am [new file with mode: 0644]
project/phphash/php.gif [new file with mode: 0644]
project/phphash/php.png [new file with mode: 0644]
project/pipebuf/Index.html.pl [moved from project/pipebuf/index.html.pl with 56% similarity]
project/pipebuf/ListItem.pm
project/pipebuf/Makefile.am
project/postget/Index.html.pl [new file with mode: 0755]
project/postget/ListItem.pm [new file with mode: 0755]
project/postget/Makefile.am [new file with mode: 0644]
project/ppp9k/Index.html.pl [moved from project/ppp9k/index.html.pl with 69% similarity]
project/ppp9k/ListItem.pm
project/ppp9k/Makefile.am
project/redirector_ad/Index.html.pl [moved from project/redirector_ad/index.html.pl with 68% similarity]
project/redirector_ad/ListItem.pm
project/redirector_ad/Makefile.am
project/redirector_ad/cnet-icon.png [new file with mode: 0644]
project/smbfs/Index.html.pl [new file with mode: 0755]
project/smbfs/ListItem.pm
project/smbfs/Makefile.am
project/smbfs/index.html.pl [deleted file]
project/sshpatch/Index.html.pl [moved from project/sshpatch/index.html.pl with 80% similarity]
project/sshpatch/ListItem.pm
project/sshpatch/Makefile.am
project/ssht/Index.html.pl [new file with mode: 0755]
project/ssht/ListItem.pm [new file with mode: 0755]
project/ssht/Makefile.am [new file with mode: 0644]
project/step/Index.html.pl [moved from project/step/index.html.pl with 70% similarity]
project/step/ListItem.pm
project/step/Makefile.am
project/surprise/Index.html.pl [moved from project/surprise/index.html.pl with 67% similarity]
project/surprise/ListItem.pm
project/surprise/Makefile.am
project/surprise/surprise-gnome-0-icon.png [new file with mode: 0644]
project/surprise/surprise-gnome-0.gif [deleted file]
project/surprise/surprise-gnome-0.png [new file with mode: 0644]
project/tac_plus/Index.html.pl [moved from project/tac_plus/index.html.pl with 81% similarity]
project/tac_plus/ListItem.pm
project/tac_plus/Makefile.am
project/tac_plus/cisco-icon.jpeg [new file with mode: 0644]
project/tcp_rto/Index.html.pl [new file with mode: 0755]
project/tcp_rto/ListItem.pm
project/tcp_rto/Makefile.am
project/tcp_rto/index.html.pl [deleted file]
project/tcpdump/Index.html.pl [moved from project/tcpdump/index.html.pl with 79% similarity]
project/tcpdump/ListItem.pm
project/tcpdump/Makefile.am
project/timeplan/Index.html.pl [moved from project/timeplan/index.html.pl with 69% similarity]
project/timeplan/ListItem.pm
project/timeplan/Makefile.am
project/timeplan/digiclock.jpeg [new file with mode: 0644]
project/vblib/Index.html.pl [moved from project/vblib/index.html.pl with 69% similarity]
project/vblib/ListItem.pm
project/vblib/Makefile.am
project/wayback/Index.html.pl [new file with mode: 0755]
project/wayback/ListItem.pm [new file with mode: 0755]
project/wayback/Makefile.am [new file with mode: 0644]
project/winvnc/Index.html.pl [moved from project/winvnc/index.html.pl with 85% similarity]
project/winvnc/ListItem.pm
project/winvnc/Makefile.am
project/winvnc/nowinvnc.png [new file with mode: 0644]
project/wllib/Index.html.pl [moved from project/wllib/index.html.pl with 69% similarity]
project/wllib/ListItem.pm
project/wllib/Makefile.am
project/xbill/Index.html.pl [moved from project/xbill/index.html.pl with 59% similarity]
project/xbill/ListItem.pm
project/xbill/Makefile.am
project/xbill/redmond-icon.png [new file with mode: 0644]
project/xbill/redmond_.jpeg [new file with mode: 0644]
resume/.htaccess [new file with mode: 0644]
resume/Makefile.am [new file with mode: 0644]
resume/Resume-JanKratochvil.html.pl [new file with mode: 0755]
resume/Resume-JanKratochvil.png [new file with mode: 0644]
robots.txt

index ad263f7..f93e228 100644 (file)
--- a/.htaccess
+++ b/.htaccess
@@ -1,4 +1,4 @@
-DirectoryIndex index.html
+DirectoryIndex Index.html.pl
 
 AddType text/html .shtml
 AddHandler server-parsed .shtml
@@ -20,9 +20,11 @@ AddHandler cgi-script .cgi
 IndexOptions NameWidth=*
 AddType application/x-rpm .rpm
 AddType application/x-nokia-9000-communicator-add-on-software .aos
-php_flag short_open_tag off
-php_flag magic_quotes_gpc off
-php_flag magic_quotes_runtime off
+<IfModule mod_php4.c>
+       php_flag short_open_tag off
+       php_flag magic_quotes_gpc off
+       php_flag magic_quotes_runtime off
+</IfModule>
 
 <Files "kocky">
        RewriteEngine on
@@ -42,3 +44,17 @@ php_flag magic_quotes_runtime off
        RewriteEngine on
        RewriteRule ^(/home/short/www/www.jankratochvil.net/)?sw/*(.*)$ http://www.jankratochvil.net/project/ [R=301] [L]
 </Files>
+<Files "projects">
+       RewriteEngine on
+       RewriteRule ^(/home/short/www/www.jankratochvil.net/)?projects/*(.*)$ http://www.jankratochvil.net/project/$2 [R=301] [L]
+</Files>
+
+<IfDefine SSL>
+       <Files "*.pl">
+               RewriteEngine on
+               RewriteRule ^.*?/www[.]jankratochvil[.]net/(.*)$ http://localhost:7680/$1 [P]
+       </Files>
+</IfDefine>
+<IfDefine !SSL>
+       Options +ExecCGI
+</IfDefine>
diff --git a/Contact.html.pl b/Contact.html.pl
new file mode 100755 (executable)
index 0000000..a6d6a22
--- /dev/null
@@ -0,0 +1,62 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Contact page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package Contact;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>"Contact",
+               "section"=>"Contact",
+               "head_css"=>"
+table.contact td { vertical-align: top; }
+table.contact { border-collapse: collapse; border-style: solid; border-width: 1px; margin: 8px; }
+table.contact A[href] { text-decoration: inherit; /* revoke underline */ }
+",
+               );
+My::Web->heading();
+
+
+my $mailme=(map({ a_href("mailto:$_",$_); } 'web@jankratochvil.net'))[0];
+
+print <<"HERE";
+<table width="100%" style="border-style: none;"><tr><td align="center"><table class="contact">
+<tr><td class="tab-head">Name    </td><td>Jan Kratochvil</td></tr>
+<tr><td class="tab-head">e-mail  </td><td>$mailme</td></tr>
+<tr><td class="tab-head">WWW     </td><td>@{[ a_href('http://www.jankratochvil.net/') ]}</td></tr>
+<tr><td class="tab-head">OpenPGP </td><td style="font-family: monospace;">@{[ a_href '/pgp-JanKratochvil.txt',''
+               .'pub  1024D/44FC7632 2002-10-07 Jan Kratochvil &lt;pgp-44FC7632@jankratochvil.net&gt;<br />'
+               .'sub  2048g/D9F5F44B 2002-10-07 [expires 2004-10-06]' ]}</span></td></tr>
+</table></td></tr></table>
+
+HERE
+
+
+My::Web->footer();
diff --git a/Index.html.pl b/Index.html.pl
new file mode 100755 (executable)
index 0000000..c860a8d
--- /dev/null
@@ -0,0 +1,84 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Homepage',
+               "no_job"=>1,
+               );
+My::Web->heading();
+
+
+print <<"HERE";
+<h1>Jan Kratochvil Homepage</h1>
+<hr />
+
+<p>Why did you come here? Shhh...Don't say anything &ndash; I'll guess.</p>
+
+<p>Some paper...no, not a paper...a file...maybe even a folder. It is
+so close you can almost touch it, but yet it is unreachable. It lies
+behind glass...perhaps you can see it...but you cannot touch it.</p>
+
+<p>For years, you have dreamed of being able to write to your NTFS partition
+from the safety of your favorite OS GNU/Linux. Well, the day of reckoning is at
+hand! Those nights lying awake feeling foolish for having that extra VFAT
+partition just to exchange files between GNU/Linux and MS-Windows are over!</p>
+
+<table border="0" style="margin: 4ex; padding: 2ex; background: #552222; font-size: larger;">
+       <tr><td>
+               <b>A programmer for hire:</b>
+               <span style="color: #ffaaaa;">
+                       I am looking for new challenges.
+                       If you find the software here useful, please
+                       @{[ a_href $W->{"resume_url"},'consider me' ]}
+                       for your next software project and
+                       @{[ a_href 'Contact.html.pl','get in touch' ]}.
+               </span>
+       </td></tr>
+</table>
+
+
+<h2>Introducing the <i>Captive NTFS Filesystem</i> for GNU/Linux</h2>
+
+<p>The @{[ a_href '/project/captive/','Captive NTFS' ]} filesystem is an
+installable filesystem for GNU/Linux, which allows read/write access to NTFS
+partitions created by Microsoft Windows NT, 200x or XP. You can download it
+@{[ a_href '/project/captive/','here' ]}.</p>
+
+HERE
+
+Wrequire "project::captive::ListItem";
+my %captive_ListItem=( @project::captive::ListItem::ListItem );
+print $captive_ListItem{"description"};
+
+
+My::Web->footer();
diff --git a/Mailman.pl b/Mailman.pl
new file mode 100755 (executable)
index 0000000..acd5c3d
--- /dev/null
@@ -0,0 +1,69 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Mailman page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package Mailman;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+use URI::Escape;
+require LWP::Simple;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>"Mailman Interface",
+               "no_job"=>1,
+               "args_check"=>{
+                               "email"=>'',
+                               "pw"=>'',
+                               "pw-conf"=>'',
+                               "list"=>['^[-\w]+$'],
+                               "back"=>'',
+                               },
+               );
+My::Web->heading();
+
+
+for my $list (@{$W->{"args"}{"list"}}) {
+       print "<h1>List <i>$list</i></h1><blockquote>\n";
+               my $url_base=&{$W->{"mailman_url_sub"}}()."/subscribe/$list";
+               my $t=LWP::Simple::get("$url_base?"
+                               .join('&',
+                                               "list=$list",
+                                               map({ $_."=".uri_escape($W->{"args"}{$_}); } qw(email pw pw-conf))));
+               $t=($t=~m#^.*<body\b[^>]*>(.*?)</body>#is)[0];
+               $t=~s#(href=")(../[^"]*)(")#$1$url_base/$2$3#gi;
+               print $t;
+       print "</blockquote>\n";
+       }
+
+if ($W->{"args"}{"back"}) {
+       print '<h1>'.a_href($W->{"args"}{"back"},'Back to the original page').'</h1>'."\n";
+       }
+
+
+My::Web->footer();
index 4f4aa18..40656bc 100644 (file)
@@ -28,12 +28,22 @@ noinst_DATA=
 # Generally better behaviour but it requires GNU make. Harmless otherwise.
 .DELETE_ON_ERROR:
 
-%.html: %.html.pl $(top_srcdir)/My/Web.pm $(top_srcdir)/WebConfig.pm
-       perl -I$(top_srcdir) >$@ $<
-
 %.ppm: %.fig Makefile
-       fig2dev -L ppm -S4 -b10 $< $@
+       fig2dev -L ppm -S4 -m1.75 -b10 $< | pnmgamma 0.4 >$@
 
 %.gif: %.ppm
-       ppmtogif -sort $< >$@
+       ppmquant -quiet 256 $< | ppmtogif -quiet -sort >$@
+
+# Prevent: make: Circular %.ppm <- %.gif dependency dropped.
+#%.ppm: %.gif
+#      giftopnm $< >$@
+
+%.png: %.ppm
+       pnmtopng $< >$@
+
+%.ppm: %.png
+       pngtopnm $< >$@
+
+%.png: %.dia $(top_srcdir)/dia-w.sh
+       $(top_srcdir)/dia-w.sh --nosplash --export $@ $<
 
index 00a170c..cf27f8b 100644 (file)
@@ -19,7 +19,7 @@
 include $(top_srcdir)/Makefile-head.am
 
 AUTOMAKE_OPTIONS=foreign
-SUBDIRS=macros project
+SUBDIRS=macros My resume etmms project
 ## to automatically rebuild aclocal.m4 if any of the macros in
 ## `macros/' change
 @MAINT@include macros/macros.dep
@@ -33,13 +33,15 @@ EXTRA_DIST+= \
                Makefile-head.am \
                autogen.pl \
                .vimrc \
-               ChangeLog
+               ChangeLog \
+               dia-w.sh.in
 
 MAINTAINERCLEANFILES+= \
                ChangeLog
 
 CLEANFILES+= \
-               ChangeLog.bak
+               ChangeLog.bak \
+               dia-w.sh
 
 if MAINTAINER_MODE
 ChangeLog:
@@ -52,7 +54,11 @@ ChangeLog:
 endif
 
 EXTRA_DIST+= \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl \
+       WebConfig.pm \
+       Redirect.pl \
+       have_js.js.pl \
+       robots.txt \
+       SendMsg.pl \
+       Contact.html.pl \
+       Mailman.pl
diff --git a/Redirect.pl b/Redirect.pl
new file mode 100755 (executable)
index 0000000..327ef14
--- /dev/null
@@ -0,0 +1,41 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# URL redirector of &My::Web::a_href Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package Redirect;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+use Apache::Constants qw(MOVED);
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "header_only"=>1,
+               "args_check"=>{
+                               "location"=>'^\w+://',
+                               },
+               );
+$W->{"r"}->status(MOVED);
+$W->{"r"}->header_out("Location"=>$W->{"args"}{"location"});
diff --git a/SendMsg.pl b/SendMsg.pl
new file mode 100755 (executable)
index 0000000..1f7b4fb
--- /dev/null
@@ -0,0 +1,59 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Quick Send Message
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package SendMsg;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+use Apache::Constants qw(HTTP_NO_CONTENT);
+require Mail::Send;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "header_only"=>1,
+               "args_check"=>{
+                               "msgscript"=>'',        #       If 'text/javascript' is supported.
+                               "msghtml"=>'',  # No 'text/javascript' available.
+                               },
+               );
+my $msg=$W->{"args"}{"msghtml"} || $W->{"args"}{"msgscript"};
+if ($msg) {
+
+       my $subject=$msg.' @'.$W->{"r"}->uri();
+       print STDERR "Message: $subject\n";
+
+       my $send=Mail::Send->new();
+       $send->to(split /,/,$W->{"SendMsg_to"});
+       $send->subject($subject);
+       my $fh=$send->open();
+       print $fh "$subject\n\n";
+       for (sort keys %ENV) {
+               print $fh $_."=".$ENV{$_}."\n";
+               }
+       $fh->close();   # send it here
+
+       }
+$W->{"r"}->status(HTTP_NO_CONTENT);
index 1e5db17..d73ecab 100644 (file)
@@ -20,8 +20,9 @@
 
 package WebConfig;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION);
+use vars qw($VERSION $CVS_ID);
 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
 use strict;
 use warnings;
 
@@ -30,10 +31,94 @@ use vars qw(@ISA @EXPORT);
 @ISA=qw(Exporter);
 @EXPORT=qw(%WebConfig);
 
+use My::Web;
+require CGI;
+
+
+my $resume_url="/resume/Resume-JanKratochvil.html.pl/Resume-JanKratochvil.html";
+
 our %WebConfig=(
                "admin_mail"=>'web-www.jankratochvil.net@jankratochvil.net',
-               "viewcvs"=>map({ (!$_ ? $_ : s#^/#http://cvs.jankratochvil.net/viewcvs/energie/#); } $ENV{"SCRIPT_NAME"}),
+               "SendMsg_to"=>'web-www.jankratochvil.net@jankratochvil.net',
+               "cvs_id_author"=>sub {
+                       my($name)=@_;
+                               return My::Web::a_href("http://www.jankratochvil.net/","Jan Kratochvil") if 0
+                                               || $name eq "short"
+                                               || $name eq "lace";
+                               return CGI::escapeHTML($name);
+                       },
+               "viewcvs"=>"http://cvs.jankratochvil.net/viewcvs/www/www.jankratochvil.net/",
                "title_prefix"=>"Jan Kratochvil",
+               "project_viewcvs"=>"http://cvs.jankratochvil.net/viewcvs/",
+               "pserver"=>':pserver:pserver:@cvs.jankratochvil.net',
+               "pserver_path"=>"/cvs",
+               "resume_url"=>$resume_url,
+               "web_hostname_sub"=>sub () { return "www.jankratochvil.net"; }, # $My::Web::W->{"r"}->hostname()
+               "mailman_url_sub"  =>sub () { return "http://".&{$My::Web::W->{"web_hostname_sub"}}."/mailman/"; },
+               "pipermail_url_sub"=>sub () { return "http://".&{$My::Web::W->{"web_hostname_sub"}}."/pipermail/"; },
+               "heading"=>sub () {
+                       print '<table border="0" align="center" style="font-size: larger;">'."\n";
+                               print '<col width="20%">'."\n";
+                               print '<col width="50%">'."\n";
+                               print '<col width="20%">'."\n";
+                               print '<tr>'."\n";
+                                       print '<td>'."\n";
+                                               print '<table border="1" align="left"'
+                                                               .' style="border-collapse: collapse; border-style: solid; border-width: 2px;">'."\n";
+                                                       print '<tr>'."\n";
+                                                               print '<td style="padding: 5px; font-weight: bold;">'."\n";
+                                                                       print My::Web::a_href('http://www.jankratochvil.net/','Jan Kratochvil',
+                                                                                       "attr"=>'style="text-decoration: inherit; /* revoke underline */;"');
+                                                               print '</td>'."\n";
+                                                       print '</tr>'."\n";
+                                               print '</table>';
+                                       print '</td>'."\n";
+                                       print '<td>'."\n";
+                                               print '<table border="1" align="center"'
+                                                               .' style="border-collapse: collapse; border-style: solid; border-width: 2px;">'."\n";
+                                                       print '<tr>'."\n";
+                                                               my @sections=(
+                                                                               "/project/"=>"Projects",
+                                                                               "http://cvs.jankratochvil.net/"=>"CVS",
+#                                                                              "/News.html.pl"=>"News",
+                                                                               $resume_url=>"Resume",
+                                                                               "/Contact.html.pl"=>"Contact",
+                                                                               );
+                                                               while (@sections) {
+                                                                       my $section_path=shift @sections;
+                                                                       my $section_name=shift @sections;
+                                                                       print '<td style="padding: 5px;">';
+                                                                               print(($My::Web::W->{"section"} || "") eq $section_name ? "<b>$section_name</b>"
+                                                                                               : My::Web::a_href($section_path,$section_name,
+                                                                                                               "attr"=>'style="text-decoration: inherit; /* revoke underline */;"'));
+                                                                       print "</td>\n";
+                                                                       }
+                                                       print '</tr>'."\n";
+                                               print '</table>'."\n";
+                                       print '</td>'."\n";
+                               print '</tr>'."\n";
+                       print '</table>'."\n";
+                       print My::Web::vskip("1ex") if !$My::Web::W->{"WebConfig::heading_novskip"};
+                       },
+               "footing"=>sub () {
+#                      print "<h1>footing</h1>\n";
+                       },
+               "footing_delimit"=>sub () {
+                       return if $My::Web::W->{"no_job"};
+                       print <<"HERE";
+<table border="0" style="margin: 4ex; padding: 2ex; background: #552222;">
+       <tr><td>
+               <b>A programmer for hire:</b>
+               <span style="color: #ffaaaa;">
+                       I am looking for new challenges.
+                       If you find the software here useful, please
+                       @{[ My::Web::a_href($My::Web::W->{"resume_url"},'consider me') ]}
+                       for your next software project.
+               </span>
+       </td></tr>
+</table>
+HERE
+                       },
                );
 
 1;
index 9355b62..5ccb185 100755 (executable)
@@ -19,8 +19,7 @@
 
 
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
 use strict;
 use warnings;
 
@@ -30,16 +29,48 @@ use AutoGen;
 use Carp qw(cluck confess);
 
 
+die if $ENV{"SERVER_SOFTWARE"};        # SECURITY: CGI misuse!
+
 AutoGen->run(
                "name"=>"www.jankratochvil.net",
                "COPYRIGHT_HOLDER"=>'Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>',
                "ARGV"=>\@ARGV,
                "clean"=>[qw(
+                               .xvpics
                                ./ChangeLog.bak
                                ./INSTALL
+                               ./dia-w.sh
                                ./project/Nokia61/Nokia61
                                ./project/Nokia61/Nokia61_23.cache
+                               ./project/line9k/line9k.png
                                ./project/line9k/line9k.gif
-                               *.html
+                               ./project/captive/doc/fig/*.png
+                               ./project/captive/doc/fig/*.gif
+                               ./project/captive/doc/dia/*.dia~
+                               ./project/captive/doc/*.gif
+                               ./project/captive/*.gif
+                               ./project/PortDiag/*.gif
+                               ./project/CasioA/*.gif
+                               ./project/LaserGame/*.gif
+                               ./project/Islet/*.gif
+                               ./project/surprise/*.gif
+                               ./My/*.gif
+                               ./project/int13sniff/*.gif
+                               ./resume/*.gif
+                               ./etmms/*.dia~
+                               ./project/TraceFS/*.gif
+                               ./project/pgsqlsubstr/*.gif
+                               ./project/winvnc/*.gif
+                               ./project/TraceFS/*.gif
+                               ./project/pgsqlsubstr/*.gif
+                               ./project/winvnc/*.gif
+                               ./project/xbill/*.gif
+                               ./project/etherealmmse/*.gif
+                               ./project/etherealwsp/*.gif
+                               ./project/gladewsrc/*.gif
+                               ./project/muttsort/*.gif
+                               ./project/redirector_ad/*.gif
+                               ./project/FordFulk/*.gif
+                               ./project/Heat/*.gif
                                )],
                );
similarity index 64%
rename from configure.in
rename to configure.ac
index e10d54f..a4b1390 100644 (file)
@@ -20,13 +20,21 @@ AC_INIT(./Makefile-head.am)
 AM_INIT_AUTOMAKE(www.jankratochvil.net,1.0cvs)
 AM_MAINTAINER_MODE
 
+AC_PATH_PROG(PATH_XVNC,Xvnc)
+AC_PATH_PROG(PATH_BC,bc)
+AC_PATH_PROG(PATH_DIA,dia)
+
 dnl "Makefile" output files MUST have pathnames incl./excl. "./" prefix as specified!
 AC_OUTPUT([
 Makefile
+./dia-w.sh
 ./macros/Makefile
+./My/Makefile
+./resume/Makefile
+./etmms/Makefile
 ./project/Makefile
 ./project/step/Makefile
-./project/icp/Makefile
+./project/Islet/Makefile
 ./project/FordFulk/Makefile
 ./project/Heat/Makefile
 ./project/kix/Makefile
@@ -60,8 +68,41 @@ Makefile
 ./project/cvsutil/Makefile
 ./project/cvsbranchdiff/Makefile
 ./project/ppp9k/Makefile
-./project/LaceMail/Makefile
+./project/PerlMail/Makefile
 ./project/line9k/Makefile
+./project/captive/Makefile
+./project/captive/apiref/Makefile
+./project/captive/doc/Makefile
+./project/captive/doc/fig/Makefile
+./project/captive/doc/dia/Makefile
+./project/PortDiag/Makefile
+./project/CasioA/Makefile
+./project/LaserGame/Makefile
+./project/ShortRel/Makefile
+./project/TraceFS/Makefile
+./project/AutoGen/Makefile
+./project/gsmperl/Makefile
+./project/332/Makefile
+./project/lynxilla/Makefile
+./project/wayback/Makefile
+./project/kewensis/Makefile
+./project/QueryDev/Makefile
+./project/SClock/Makefile
+./project/ResRAM/Makefile
+./project/ssht/Makefile
+./project/postget/Makefile
+./project/middleman/Makefile
+./project/phphash/Makefile
+./project/energie/Makefile
+./project/MyWeb/Makefile
+./project/pgsqlsubstr/Makefile
+./project/int13sniff/Makefile
+./project/libtool/Makefile
+./project/muttsort/Makefile
+./project/gladewsrc/Makefile
+./project/etherealmmse/Makefile
+./project/etherealwsp/Makefile
+./project/libxml2reader/Makefile
 ])
 
 echo done.
diff --git a/dia-w.sh.in b/dia-w.sh.in
new file mode 100755 (executable)
index 0000000..899f18c
--- /dev/null
@@ -0,0 +1,93 @@
+#! /bin/bash
+# $Id$
+# Try to run "dia" with '-e' option, Xvnc wrapping if needed.
+# Copyright (C) 2000,2003 Jan Kratochvil <project-macros@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+empty=
+if test "x@PATH_XVNC@" != "x@PATH_XVNC$empty@"
+then
+       PATH_XVNC="@PATH_XVNC@"
+fi
+if test "x@PATH_BC@" != "x@PATH_BC$empty@"
+then
+       PATH_BC="@PATH_BC@"
+fi
+if test "x@PATH_DIA@" != "x@PATH_DIA$empty@"
+then
+       PATH_DIA="@PATH_DIA@"
+else
+       PATH_DIA=dia
+fi
+
+unset xpid
+if test "x$PATH_XVNC" != "x"
+then
+       xport=$[($$%4096)+2000]
+       notdone=true
+       run=true
+       while $notdone
+       do
+               if test -r /proc/net/tcp -a "x$PATH_BC" != "x"
+               then
+                       loop=true
+                       while $loop
+                       do
+                               hex="`echo "obase=16;$[$xport+5900]"|$PATH_BC`"
+                               if grep -q ":`echo "000$hex"|tail -c5` " /proc/net/tcp
+                               then
+                                       if $run
+                                       then
+                                               xport=$[$xport+1]
+                                       else
+                                               notdone=false
+                                               loop=false
+                                       fi
+                               else
+                                       if $run
+                                       then
+                                               loop=false
+                                       else
+                                               echo -n .
+                                               sleep 1
+                                       fi
+                               fi
+                       done
+               else
+                       notdone=$run
+               fi
+               if $run
+               then
+                       export DISPLAY=":$xport"
+                       $PATH_XVNC $DISPLAY & xpid=$!
+                       run=false
+               fi
+       done
+else
+       if test "x$DISPLAY" = "x"
+       then
+               export DISPLAY=":0"
+       fi
+fi
+
+$PATH_DIA --disable-crash-dialog "$@";r=$?
+
+if test "x$xpid" != "x"
+then
+       kill $xpid
+fi
+
+exit $r
diff --git a/etmms/Index.html.pl b/etmms/Index.html.pl
new file mode 100755 (executable)
index 0000000..3481e7d
--- /dev/null
@@ -0,0 +1,167 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Contact page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package Contact;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+Wrequire 'My::Project';
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>"MMS Center Debugging",
+               );
+My::Web->heading();
+
+
+sub project ($)
+{
+my($name)=@_;
+
+       my %name_item=( My::Project->one_item_list_read($name) );
+       return a_href "/project/$name/",$name_item{"name"}.': '.$name_item{"summary"};
+};
+
+
+print <<"HERE";
+<h1>MMS Center Debugging</h1>
+
+<p>Here you can find description of very simple but technically interesting hack.
+You can provide your own MMS Center (MMS=Multimedia Messaging Service) in GSM
+network instead of the operator's one.</p>
+
+<p>There is only a limitation of a bearer data service - MMS is usually run
+over GPRS (General Packet Radio Service) channels while you cannot behave as
+GPRS callee in GSM network. Fortunately MMS can be run also over CSD (Circuit
+Switched Data - up to 14400bps) or HSCSD (High Speed CSD - up to 57600bps)
+services. GPRS is usually known as always-online while CSD/HSCSD you must dial
+some destination number. GPRS vs. CSD have usually also different GSM operator
+tariffication but it should not matter much for the short data messages.</p>
+
+<p>I did not provite a completely mine MMS center. I was involved in pilot MMS
+Center project where some compatibility issues of MMS message format between
+MMS phone and MMS center had to be solved. As I did not have technical access
+to the MMS center itself I setup two mobile phones
+(@{[ a_href 'http://www.nokia.com/','Nokia' ]} @{[ a_href 'http://www.communicator.org/','Communicator' ]}s)
+to setup sniffing tunnel. One of the phones were setup in answer mode to
+simulate the MMS center while the other one called to the real official (and
+buggy) MMS center accessible as regular service provided by the GSM operator.</p>
+
+@{[ centerimg 'gate','MMS Sniffing Diagram' ]}
+@{[ vskip "2ex" ]}
+@{[ centerimg 'triple.jpeg','MMS Sniffing Mobiles Setup' ]}
+
+<dl>
+       <dt>Answer side <i>pppd(8)</i> command</dt>
+       <dd><pre>
+pppd /dev/ttyS5 19200 modem lock crtscts connect "chat -vf /etc/ppp/answer-T68i.chat" @{[ "\\" ]}
+               noauth debug nodefaultroute 192.168.192.67:192.168.192.68 default-asyncmap
+       </pre></dd>
+       <dt>Answer side <i>/etc/ppp/answer-T68i.chat</i> file</dt>
+       <dd><pre>
+TIMEOUT 3 "" "ATZ" "OK-ATZ-OK" "" ABORT "BUSY" ABORT "NO CARRIER"
+ABORT "NO DIAL TONE" ABORT "ERROR" ABORT "VOICE" REPORT CONNECT ""
+ATL2 OK-ATL2-OK
+AT+CBST=7,0,1;+DS=3,0,1300,32;+CR=1;+DR=1 OK
+""
+TIMEOUT 300
+@{[ 'RING \d\d\d\d\d\dATA' ]}
+CONNECT "" ^M ""
+       </pre></dd>
+
+       <dt>Dial side <i>pppd(8)</i> command</dt>
+       <dd><pre>
+pppd /dev/ttyS4 19200 modem lock nocrtscts xonxoff connect "chat -vf /etc/ppp/mmsgate.chat" @{[ "\\" ]}
+               noauth debug nodefaultroute
+       </pre></dd>
+       <dt>Answer side <i>/etc/ppp/mmsgate.chat</i> file</dt>
+       <dd><pre>
+TIMEOUT 3 "" "ATZ" "OK-ATZ-OK" "" ABORT "BUSY" ABORT "NO CARRIER"
+ABORT "NO DIAL TONE" ABORT "ERROR" ABORT "VOICE" REPORT CONNECT ""
+#AT+CBST=7,0,1;+DS=3,0,1300,32;+CR=1;+DR=1 OK
+ATD+420602900666
+TIMEOUT 90 CONNECT "" ^M ""
+       </pre></dd>
+</dl>
+
+<p>Some decoded data illustration</p>
+<pre>
+MMS Message Encapsulation
+       Message-Type: m-retrieve-conf (0x84)
+       Transaction-ID: PVve-6DaCUEAAC5qAAAAAQAAAEoAAAAA
+       MMS-Version: 1.0
+       Date: Aug 15, 2002 19:25:20.000000000
+       From: +4206CENSORED/TYPE=PLMN
+       Subject: testidD
+       To: +4206CENSORED/TYPE=PLMN
+       Message-Class: Informational (0x82)
+       Delivery-Report: No (0x81)
+       Content Type: application/vnd.wap.multipart.related (0x33)
+               Type: application/smil
+               Start: AAAA
+       Multipart body
+               Part: 1
+                       Content Type: application/smil
+                               Charset: us-ascii (0x0003)
+                       Headers
+                               Content-Location: AAAA
+                       Data in this part
+               Part: 2
+                       Content Type: image/gif (0x1d)
+                       Headers
+                               Content-Location: postcard.gif
+                       Data in this part
+</pre>
+
+<p>@{[ a_href 'http://www.sonyericsson.com/T68i/','Sony Ericsson T68i' ]}
+MMS definition file URL decoded out of the data stream above:
+@{[ a_href 'http://wap.sonyericssonmobile.com/UAprof/T68R201.xml' ]}</p>
+
+
+<h2>Completed Subtasks</h2>
+<ul>
+       <li style="font-size: larger;">@{[ project 'etherealmmse' ]}</li>
+       <li style="font-size: larger;">@{[ project 'etherealwsp' ]}</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+
+
+HERE
+
+
+My::Web->footer();
diff --git a/etmms/Makefile.am b/etmms/Makefile.am
new file mode 100644 (file)
index 0000000..920c2bf
--- /dev/null
@@ -0,0 +1,21 @@
+# $Id$
+# automake source for the Makefile of etmms/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+=
diff --git a/etmms/gate.dia b/etmms/gate.dia
new file mode 100644 (file)
index 0000000..d4c3b12
--- /dev/null
@@ -0,0 +1,948 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="0.2"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-52,-17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-52.5,-17.5;98.5,79.5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-52,-17"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="150"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="96"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ffffff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-20,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-20.15,21.85;16.15,46.15"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-20,22"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="36"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="24"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.3"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-10,-13"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-10.25,-13.25;42.25,13.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-10,-13"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="52"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="26"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="16,-7"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-2.315,-11.05;34.365,-5.9"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#GNU/Linux PC#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="16,-7"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O4">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-7.742,8.55;3.792,11.7"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#pppd(8)#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-2,11"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O5">
+      <dia:attribute name="obj_pos">
+        <dia:point val="34,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="28.258,8.55;39.792,11.7"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#pppd(8)#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="34,11"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Text" version="0" id="O6">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-1,19"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-1,17.35;4.462,19.5"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#serial#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-1,19"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="0"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Line" version="0" id="O7">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-2,24"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-2.125,12.875;-1.875,24.125"/>
+        </dia:attribute>
+        <dia:attribute name="conn_endpoints">
+          <dia:point val="-2,24"/>
+          <dia:point val="-2,13"/>
+        </dia:attribute>
+        <dia:attribute name="numcp">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.25"/>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Text" version="0" id="O8">
+        <dia:attribute name="obj_pos">
+          <dia:point val="35,19"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="35,17.4;40.412,19.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#serial#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="35,19"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="0"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Line" version="0" id="O9">
+        <dia:attribute name="obj_pos">
+          <dia:point val="34,24"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="33.875,12.875;34.125,24.125"/>
+        </dia:attribute>
+        <dia:attribute name="conn_endpoints">
+          <dia:point val="34,24"/>
+          <dia:point val="34,13"/>
+        </dia:attribute>
+        <dia:attribute name="numcp">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.25"/>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O10">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-48,65"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-48.25,64.75;-15.75,75.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-48,65"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="32"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="10"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O11">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-32,68"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-47.642,65.6;-16.358,74.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Sony Ericsson T68i
+MMS Phone
+CSD MMS Dial Mode#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-32,68"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,42"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-19.4735,39.55;15.5235,42.7"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Simulated MMS Center#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-2,42"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O13">
+        <dia:attribute name="obj_pos">
+          <dia:point val="64,-3"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="63.75,-3.25;94.25,5.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="64,-3"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O14">
+        <dia:attribute name="obj_pos">
+          <dia:point val="79,1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="64.348,-1.4;93.652,4.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Real GSM Operator
+MMS Center#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="79,1"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:group>
+        <dia:object type="Standard - BezierLine" version="0" id="O15">
+          <dia:attribute name="obj_pos">
+            <dia:point val="54,23"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="53.7879,22.1904;57.8096,26.2121"/>
+          </dia:attribute>
+          <dia:attribute name="bez_points">
+            <dia:point val="54,23"/>
+            <dia:point val="56,21"/>
+            <dia:point val="59,24"/>
+            <dia:point val="57,26"/>
+          </dia:attribute>
+          <dia:attribute name="corner_types">
+            <dia:enum val="0"/>
+            <dia:enum val="0"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.3"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - BezierLine" version="0" id="O16">
+          <dia:attribute name="obj_pos">
+            <dia:point val="55,21"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="54.792,20.2024;59.7976,25.208"/>
+          </dia:attribute>
+          <dia:attribute name="bez_points">
+            <dia:point val="55,21"/>
+            <dia:point val="58,19"/>
+            <dia:point val="61,22"/>
+            <dia:point val="59,25"/>
+          </dia:attribute>
+          <dia:attribute name="corner_types">
+            <dia:enum val="0"/>
+            <dia:enum val="0"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.3"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - BezierLine" version="0" id="O17">
+          <dia:attribute name="obj_pos">
+            <dia:point val="56,19"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="55.7879,17.925;62.075,24.2121"/>
+          </dia:attribute>
+          <dia:attribute name="bez_points">
+            <dia:point val="56,19"/>
+            <dia:point val="59,16"/>
+            <dia:point val="64,21"/>
+            <dia:point val="61,24"/>
+          </dia:attribute>
+          <dia:attribute name="corner_types">
+            <dia:enum val="0"/>
+            <dia:enum val="0"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.3"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - BezierLine" version="0" id="O18">
+          <dia:attribute name="obj_pos">
+            <dia:point val="62,14"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="61.7879,13.1904;65.8096,17.2121"/>
+          </dia:attribute>
+          <dia:attribute name="bez_points">
+            <dia:point val="62,14"/>
+            <dia:point val="64,12"/>
+            <dia:point val="67,15"/>
+            <dia:point val="65,17"/>
+          </dia:attribute>
+          <dia:attribute name="corner_types">
+            <dia:enum val="0"/>
+            <dia:enum val="0"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.3"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - BezierLine" version="0" id="O19">
+          <dia:attribute name="obj_pos">
+            <dia:point val="63,12"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="62.792,11.2024;67.7976,16.208"/>
+          </dia:attribute>
+          <dia:attribute name="bez_points">
+            <dia:point val="63,12"/>
+            <dia:point val="66,10"/>
+            <dia:point val="69,13"/>
+            <dia:point val="67,16"/>
+          </dia:attribute>
+          <dia:attribute name="corner_types">
+            <dia:enum val="0"/>
+            <dia:enum val="0"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.3"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - BezierLine" version="0" id="O20">
+          <dia:attribute name="obj_pos">
+            <dia:point val="64,10"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="63.7879,8.92495;70.075,15.2121"/>
+          </dia:attribute>
+          <dia:attribute name="bez_points">
+            <dia:point val="64,10"/>
+            <dia:point val="67,7"/>
+            <dia:point val="72,12"/>
+            <dia:point val="69,15"/>
+          </dia:attribute>
+          <dia:attribute name="corner_types">
+            <dia:enum val="0"/>
+            <dia:enum val="0"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.3"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - BezierLine" version="0" id="O21">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-27,60"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-27.2121,59.1904;-23.1904,63.2121"/>
+        </dia:attribute>
+        <dia:attribute name="bez_points">
+          <dia:point val="-27,60"/>
+          <dia:point val="-25,58"/>
+          <dia:point val="-22,61"/>
+          <dia:point val="-24,63"/>
+        </dia:attribute>
+        <dia:attribute name="corner_types">
+          <dia:enum val="0"/>
+          <dia:enum val="0"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - BezierLine" version="0" id="O22">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-26,58"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-26.208,57.2024;-21.2024,62.208"/>
+        </dia:attribute>
+        <dia:attribute name="bez_points">
+          <dia:point val="-26,58"/>
+          <dia:point val="-23,56"/>
+          <dia:point val="-20,59"/>
+          <dia:point val="-22,62"/>
+        </dia:attribute>
+        <dia:attribute name="corner_types">
+          <dia:enum val="0"/>
+          <dia:enum val="0"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - BezierLine" version="0" id="O23">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-25,56"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-25.2121,54.925;-18.925,61.2121"/>
+        </dia:attribute>
+        <dia:attribute name="bez_points">
+          <dia:point val="-25,56"/>
+          <dia:point val="-22,53"/>
+          <dia:point val="-17,58"/>
+          <dia:point val="-20,61"/>
+        </dia:attribute>
+        <dia:attribute name="corner_types">
+          <dia:enum val="0"/>
+          <dia:enum val="0"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - BezierLine" version="0" id="O24">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-21,53"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-21.2121,52.1904;-17.1904,56.2121"/>
+        </dia:attribute>
+        <dia:attribute name="bez_points">
+          <dia:point val="-21,53"/>
+          <dia:point val="-19,51"/>
+          <dia:point val="-16,54"/>
+          <dia:point val="-18,56"/>
+        </dia:attribute>
+        <dia:attribute name="corner_types">
+          <dia:enum val="0"/>
+          <dia:enum val="0"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - BezierLine" version="0" id="O25">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-20,51"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-20.208,50.2024;-15.2024,55.208"/>
+        </dia:attribute>
+        <dia:attribute name="bez_points">
+          <dia:point val="-20,51"/>
+          <dia:point val="-17,49"/>
+          <dia:point val="-14,52"/>
+          <dia:point val="-16,55"/>
+        </dia:attribute>
+        <dia:attribute name="corner_types">
+          <dia:enum val="0"/>
+          <dia:enum val="0"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - BezierLine" version="0" id="O26">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-19,49"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-19.2121,47.925;-12.925,54.2121"/>
+        </dia:attribute>
+        <dia:attribute name="bez_points">
+          <dia:point val="-19,49"/>
+          <dia:point val="-16,46"/>
+          <dia:point val="-11,51"/>
+          <dia:point val="-14,54"/>
+        </dia:attribute>
+        <dia:attribute name="corner_types">
+          <dia:enum val="0"/>
+          <dia:enum val="0"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O27">
+      <dia:attribute name="obj_pos">
+        <dia:point val="16,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="9.862,3.55;22.188,9.7"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Ethereal
+sniff#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="16,6"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O28">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-3.6,-3.15;35.6,8.15"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="-2,8"/>
+        <dia:point val="-2,-3"/>
+        <dia:point val="34,-3"/>
+        <dia:point val="34,8"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.3"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O29">
+      <dia:attribute name="obj_pos">
+        <dia:point val="16,-3"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="14.4,-3.15;17.6,3.15"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="16,-3"/>
+        <dia:point val="16,3"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.3"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O30">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-18,24"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-18.25,23.75;14.25,34.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-18,24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="32"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="10"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O31">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-2,27"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-18.3355,24.55;14.2855,33.7"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Nokia Communicator
+Modem
+ATA (answer mode)#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-2,27"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O32">
+        <dia:attribute name="obj_pos">
+          <dia:point val="18,24"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="17.75,23.75;50.25,34.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="18,24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="32"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="10"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O33">
+        <dia:attribute name="obj_pos">
+          <dia:point val="34,27"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="17.6645,24.55;50.2855,33.7"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Nokia Communicator
+Modem
+ATD (dial mode)#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="34,27"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+  </dia:layer>
+</dia:diagram>
diff --git a/etmms/gate.gif b/etmms/gate.gif
new file mode 100644 (file)
index 0000000..33e18af
Binary files /dev/null and b/etmms/gate.gif differ
diff --git a/etmms/gate.png b/etmms/gate.png
new file mode 100644 (file)
index 0000000..129f7ce
Binary files /dev/null and b/etmms/gate.png differ
diff --git a/etmms/triple.jpeg b/etmms/triple.jpeg
new file mode 100644 (file)
index 0000000..6081f01
Binary files /dev/null and b/etmms/triple.jpeg differ
diff --git a/have_js.js.pl b/have_js.js.pl
new file mode 100755 (executable)
index 0000000..efc19d4
--- /dev/null
@@ -0,0 +1,64 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# JavaScript detection scriptlet Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package have_js;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Homepage of Jan Kratochvil',
+               );
+# Do not: My::Web->heading();
+$W->{"r"}->send_http_header("text/javascript");
+
+# Prevent redirection of some top (referring) foreign webpage as it
+# may not pass "have_js=1" to us anyway. (for example Google cache)
+print ""
+               .'if (0'."\n"
+               ."\t\t".'|| window.location.hostname=="'.$W->{"r"}->hostname().'" && window.location.port==  80'."\n"
+               ."\t\t".'|| window.location.hostname=="'.'localhost'          .'" && window.location.port==7680)'."\n";
+print <<'HERE';
+       {
+               var searchN=window.location.search;
+               if (searchN=="" || searchN=="?")
+                       searchN="?";
+               else
+                       searchN+="&";
+               searchN+="have_js=1";
+
+               window.location.href
+                               =window.location.protocol+"//"
+                               +window.location.hostname
+                               +(window.location.port==80 ? "" : ":"+window.location.port)
+                               +window.location.pathname
+                               +window.location.hash
+                               +searchN;
+               }
+HERE
+
+# Do not: My::Web->footer();
diff --git a/pgp-JanKratochvil.txt b/pgp-JanKratochvil.txt
new file mode 100644 (file)
index 0000000..58c35bd
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.2.1 (GNU/Linux)
+
+mQGiBD2h6DgRBADenq5efAujJXIdXgnaKsdjNs7Ld1O5YoCE9lTzGHKw0o8uaaal
+/IuNi2qSG8zRnXMEEvQpPbnLiq3Na/oUMSBXJuSM68dNeTyGKEsBs/zmCFqtv+oD
+T4R6Ux3q7zDGSkcpa5mbUuW22HNLbhpSv2LWUg/DMRjMeFL3rKvqIcv3zwCgrthY
+rrGehDsrcD3Dsp+OGoj3EQkD/i3IEFozsCXpdnY96S/JVyTN6mhxW3NzhXzHgG+y
+oX82PBWPt4JOEVTAlpzHpUK10Agvei8d3YojtnEGy4TgiWZB5gQMpYsNINAP7UW8
+0tvblUX2dZEDNimJ68kTOFOFfu2hIDBSKplGSCqYmNJIB4Jojz+6sgRg6eB6o79N
+uaxLA/4tEQUBkpl469AORAodkzNlVTxpwYTpa4YzoeAwa1h5ZKAuWbaKujSfdGpF
+kKOvKsp/i1C1eIKvH1iiGGizhlMGRjHOrPDBHGbQnB/ACDJJ36GxwgPDZS+sLC/T
+8sK4NI6L0z2qgy7/ypqF6fEpoL64vFvvJKnKv8V/wQsbqr83uLQvSmFuIEtyYXRv
+Y2h2aWwgPHBncC00NEZDNzYzMkBqYW5rcmF0b2NodmlsLm5ldD6IXQQTEQIAHQUC
+PaHpWgUJA8JnAAULBwoDBAMVAwIDFgIBAheAAAoJEMw+/LlE/HYysgsAoJCW/9BV
+VqfrfmoD+YktgNbgZjvsAJ9G6JoUgZyM8QHLtcUZOtsNKNTa5IhGBBARAgAGBQI9
+pDS7AAoJECCEtPrx50OBNRwAn0C3TyT4BBqX6yteUDczKMuD0CK1AJ44lw8ht+YZ
+6wPE82sPpwvIrJImb7kCDQQ9oeiPEAgAsMFBmBCGfPrA4HI5R45QkNYvI6ldjsDV
+8jbQ9A37VmnvApsox421pbcerGYlJMZx6BgMCILoJgiih84VQMwARWRdraeTu2Kt
+lrnJQmxxRf9eq4fiDFEwMjKvT7JPtEpC4jR6UBQ3BZAfo/buMmePlKisaMXw2tqL
+BwaIgwzDm1qm+kjwdvfOEjbNlG0VGDjuT2lDs0LfiHdIE/S0c5tys94ecsJu1sfq
+19Lv1BYDEs/oSLqCW1rxeUYYsgSQ8cwbK5JYYgLFPNx+oIB/vDH1kn6srdcOunMe
+zprQuLnPWCS91KZ09aaSnuYsf/72JYHaIxflygtCExMu5i8zax2eFwADBwf/RXLm
+50lIQ3JLUvL3q3KTQkX70/1Xb1pJ6ypT0TUNwH7BChpZWpBBI9VYiLoG5sQ235KK
+JcO1Fq1zTW2Mb1TlXcIZ52raPsZvVBN9cY+vot/Zug3FNZq7Y5GUQt6DCOB2ZwRE
+jQOc+T78w71kgnZ/xBDNal8GhLfjo/gRVcO7XpuSEy0/Jh9m7Bkj6BCwFNqkx85o
+RAIzLeOQVjiSBFOjwYvE5NULbtY1CYU7SHpiSSAnDTL1k8u2zxi8XcNIO7h6e3jE
+WylQbT9Bxp/D5ocD1vSyViBfW6DRQ5eUu3taqPfI9Xgxg/F6pQBQQ8yKkV6eFhPF
+73xpOc2gNJswlsCx44hMBBgRAgAMBQI9oeiPBQkDwmcAAAoJEMw+/LlE/HYyoU0A
+oJzhwVIejRBppzWYb1dwDQBScO0AAJ4iHaUVFxv8w7Hq94x8w+AJupB1Zw==
+=xebT
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/project/.htaccess b/project/.htaccess
deleted file mode 100644 (file)
index 311399d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Options +ExecCGI
-DirectoryIndex list.cgi.pl index.html
diff --git a/project/332/332-back-board-small.jpeg b/project/332/332-back-board-small.jpeg
new file mode 100644 (file)
index 0000000..1932bc6
Binary files /dev/null and b/project/332/332-back-board-small.jpeg differ
diff --git a/project/332/332-back-board.jpeg b/project/332/332-back-board.jpeg
new file mode 100644 (file)
index 0000000..d5e85f2
Binary files /dev/null and b/project/332/332-back-board.jpeg differ
diff --git a/project/332/332-front-CPU.jpeg b/project/332/332-front-CPU.jpeg
new file mode 100644 (file)
index 0000000..27d75c7
Binary files /dev/null and b/project/332/332-front-CPU.jpeg differ
diff --git a/project/332/332-front-board-small.jpeg b/project/332/332-front-board-small.jpeg
new file mode 100644 (file)
index 0000000..04df758
Binary files /dev/null and b/project/332/332-front-board-small.jpeg differ
diff --git a/project/332/332-front-board.jpeg b/project/332/332-front-board.jpeg
new file mode 100644 (file)
index 0000000..140c7e7
Binary files /dev/null and b/project/332/332-front-board.jpeg differ
diff --git a/project/332/332-front-icon.jpeg b/project/332/332-front-icon.jpeg
new file mode 100644 (file)
index 0000000..9bb72b4
Binary files /dev/null and b/project/332/332-front-icon.jpeg differ
diff --git a/project/332/332-noexec.tar.gz b/project/332/332-noexec.tar.gz
new file mode 100644 (file)
index 0000000..eb18e92
Binary files /dev/null and b/project/332/332-noexec.tar.gz differ
diff --git a/project/332/Index.html.pl b/project/332/Index.html.pl
new file mode 100755 (executable)
index 0000000..63000a9
--- /dev/null
@@ -0,0 +1,72 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::332'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::332::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::332::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::332::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Project was destined as the kernel for GPS-tracking device.
+Used Motorola 68332 computer features 1.25MB of RAM and 512KB of FlashEPROM.
+Included build script with custom GCC target for AmigaOS.</p>
+<p>Fortunately Pavel Troller already disassembled the kernel core in the past
+and this project could be based on his reverse engineered sources.</p>
+<p>@{[ a_href "/project/332/332-noexec.tar.gz",'Downloadable sources' ]} archive unfortunately
+legally cannot contain the real code of the ported AmigaOS kernel core as
+@{[ a_href 'http://amigaworld.net/modules/newbb/viewtopic.php?forum=2&topic_id=224','it is copyrighted.' ]}.
+You should send me a mail with md5sum(1)s of AmigaOS kernel including
+statement you are the legal owner to let me send you the missing patched
+AmigaOS kernel core disassembled sources.</p>
+<p>The provided kernel lists the following features:</p>
+<ul>
+       <li>memory management</li>
+       <li>system objects lists operations</li>
+       <li>multitasking</li>
+       <li>intertask messaging</li>
+       <li>device drivers communication</li>
+       <li>locking/synchronization</li>
+       <li>system libraries management</li>
+       <li>server side for remote serial port debuggin</li>
+</ul>
+
+@{[ centerimg
+                               ["332-front-board-small.jpeg","Custom Board (front)","a_href_img"=>"332-front-board.jpeg"],
+                               ["332-back-board-small.jpeg" ,"Custom Board (back)" ,"a_href_img"=>"332-back-board.jpeg"]
+               ]}
+@{[ centerimg "332-front-CPU.jpeg" ,"68332 CPU Board Detail" ]}
+HERE
+
+
+My::Web->footer();
similarity index 52%
rename from index.html.pl
rename to project/332/ListItem.pm
index 2ab5986..264204f 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Main page Perl template.
+# Definition of 'My::Project::332' for list.cgi.pl
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::332::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 use My::Web;
-use Carp qw(cluck confess);
 
 
-My::Web->init(
-               "title"=>'Homepage of Jan Kratochvil alias Lace',
-               );
-My::Web->heading();
-
-print <<'HERE';
-<h1>Jan Kratochvil</h1>
-<hr />
-
-<h2><a href="project/">Software projects</a></h2>
-<blockquote>
-<p>List of my software projects</p>
-</blockquote>
-
-<h2><a href="http://cvs.jankratochvil.net/">ViewCVS of my CVS repository</a></h2>
-<blockquote>
-<p>My public CVSROOT; Accessible storage of all of my projects, config files, webs and more.</p>
-</blockquote>
-
-<h2>Contact</h2>
-<blockquote>
-<p>e-mail: <a href="mailto:web-www.jankratochvil.net@jankratochvil.net">web-www.jankratochvil.net@jankratochvil.net</a></p>
-</blockquote>
-
+our @ListItem=(
+               "name"=>"332",
+               "platform"=>"unixdevel",
+               "priority"=>630,
+               "icon"=>"332-front-icon.jpeg",
+               # FIXME: Relative 'download':
+               "download-sources without patched core"=>"/project/332/332-noexec.tar.gz",
+               "summary"=>"AmigaOS kernel port to embedded Motorola 68332",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "sponsorship"=>@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]},
+               "language"=>"680x0 asm, C",
+               "description"=><<"HERE",
+<p>Core of the AmigaOS kernel (exec.library) ported to embedded Motorola 68332 computer.
+Reusable as OS for your embedded device suitable for developers with AmigaOS experience.</p>
 HERE
+               );
 
-My::Web->footer();
+1;
diff --git a/project/332/Makefile.am b/project/332/Makefile.am
new file mode 100644 (file)
index 0000000..5a40374
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/332/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/AutoGen/Index.html.pl b/project/AutoGen/Index.html.pl
new file mode 100755 (executable)
index 0000000..ffdf9b6
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::AutoGen'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::AutoGen::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::AutoGen::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::AutoGen::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/AutoGen/ListItem.pm b/project/AutoGen/ListItem.pm
new file mode 100755 (executable)
index 0000000..28f0f75
--- /dev/null
@@ -0,0 +1,69 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::AutoGen' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::AutoGen::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"AutoGen",
+               "platform"=>"unixdevel",
+               "priority"=>540,
+               "cvs"=>"macros",
+               "link-Documentation"=>'/project/Pod2Html.html.pl?cvs=macros/AutoGen.pm',
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "link-Source file"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/macros/AutoGen.pm?rev=HEAD",
+               "summary"=>"autogen.sh while supporting CVS/.rpm/.deb",
+               "license"=>"GPL",
+               "maintenance"=>"active",
+               "language"=>"Perl",
+               "description"=><<"HERE",
+<p>Projects usually have their <strong>autogen.sh</strong> script files to run
+<strong>autoconf</strong>(1), <strong>automake</strong>(1) and similiar tools.
+This project has some additional features:</p>
+<ul>
+       <li>
+               Clean the checkout directory without <strong>Makefile</strong>s for
+               'make clean'.
+       </li>
+       <li>
+               Maintain <strong>.cvsignore</strong> files containing the files being
+               cleaned.
+       </li>
+       <li>
+               Single-command package building of
+               <strong>.rpm</strong>/<strong>.deb</strong> out of CVS checkout.
+       </li>
+       <li>
+               Support: <strong>gettext</strong>, <strong>glib-gettext</strong>,
+               <strong>libtool</strong>, <strong>autoconf</strong>,
+               <strong>automake</strong>.
+       </li>
+</ul>
+HERE
+               );
+
+1;
diff --git a/project/AutoGen/Makefile.am b/project/AutoGen/Makefile.am
new file mode 100644 (file)
index 0000000..a5a52c7
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/AutoGen/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/CasioA/Casio-A-icon.png b/project/CasioA/Casio-A-icon.png
new file mode 100644 (file)
index 0000000..b3de039
Binary files /dev/null and b/project/CasioA/Casio-A-icon.png differ
diff --git a/project/CasioA/Casio-A.asm b/project/CasioA/Casio-A.asm
new file mode 100644 (file)
index 0000000..e18d5ff
--- /dev/null
@@ -0,0 +1,1930 @@
+;DEBUG equ     1
+
+;TODO:
+; TRANSMIT/K/M & AppMessage w/arg>1
+
+       include "ssmac.h"
+
+BaudRateBase   equ     1200
+Def_BaudRateN  equ     3
+Def_BaudRate   equ     BaudRateBase<<Def_BaudRateN
+Def_Micros     equ     0       ;1000
+SerBufSiz      equ     1024
+LineBufSiz     equ     1024
+AppBufSiz      equ     256
+ASCII_ACK      equ     6
+ASCII_EOT      equ     4
+ASCII_CR       equ     13
+ASCII_LF       equ     10
+Char_Term      equ     '^'     ;Termination
+Char_TermRepl  equ     '?'     ;How to replace Char_Term during recv
+Char_CasCR     equ     $E4     ;<-/
+Char_CasSep    equ     $F3     ;/#|
+MUIMaster_MVer equ     14
+MUITags        equ     $80420000
+PackMenuHots   equ     7
+FirstMenuCode  equ     6
+SerErrTabSize  equ     13      ;*4
+
+       start
+
+       dbuf    Buttons,0
+       dv.l    TransmitButton
+       dv.l    ReceiveButton
+       dv.l    SettingsButton
+       dv.l    QuitButton
+       dv.l    AbortButton
+       dv.l    SaveButton
+       dv.l    UseButton
+       dv.l    RestoreButton
+       dv.l    CloseButton
+       dv.l    StatBar0
+       dv.l    StatBarNum0
+       dv.l    StatBar1
+       dv.l    StatBarNum1
+       dv.l    StatBar2
+       dv.l    StatBarNum2
+       dv.l    StatBar3
+       dv.l    StatBarNum3
+       dv.l    StatBar4
+       dv.l    StatBarNum4
+       dv.l    StatBar5
+       dv.l    StatBarNum5
+       dbuf.l  PartCounts,6
+       dbuf    Bitmaps,6*(bm_SIZEOF-7*4)
+       dbuf.l  SerErrMem,SerErrTabSize
+       dv.l    SerialTrk
+       dv.l    SerialIO
+       dv.l    TimerTrk
+       dv.l    CurLine
+       dv.l    TxFileSize
+       dv.l    ErrPtr
+       dv.l    muimasterbase
+       dv.l    MUIWaitMask
+       dv.l    BaudRateSlider
+       dv.l    BaudRateClass
+       dv.l    MenuStrip
+       dv.l    TransmitMItem
+       dv.l    ReceiveMItem
+       dv.l    ConfigMItem
+       dv.l    StatBarText
+       dv.l    StatBarBMap
+       dv.l    TransmitFName
+       dbuf    WOpenHook,h_SIZEOF
+       dbuf    AppObjHook,h_SIZEOF
+       dbuf    SerBuf,SerBufSiz        ;A!
+       dbuf    LineBuf,LineBufSiz      ;A!
+       dbuf    AppDropBuf,AppBufSiz
+       dv.w    GaugeSet
+       dbuf.w  MenusHots,PackMenuHots
+       dv.b    CurPart
+       dv.b    SerByte
+       dv.b    TimerPend
+       dv.b    FallOut
+       dv.b    Inside
+       dv.b    InAbort
+       dv.b    GotCmdArgs
+
+       moveq   #Def_Micros,d1
+       get.l   Arg_MicroWait,d0
+       beq.s   NoMicros
+       move.l  d0,a0
+       move.l  (a0),d1
+NoMicros       put.l   d1,Arg_MicroWait
+       dtl     <serial.device>,a0
+       get.l   Arg_Device,d0
+       beq.s   NoDevice
+       move.l  d0,a0
+       move.l  (a0),a0
+NoDevice       put.l   a0,Arg_Device
+       moveq   #0,d1
+       get.l   Arg_DevUnit,d0
+       beq.s   NoDevUnit
+       move.l  d0,a0
+       move.l  (a0),d1
+NoDevUnit      put.l   d1,Arg_DevUnit
+       move.l  #Def_BaudRate,d1
+       get.l   Arg_Baud,d0
+       beq.s   NoBaud
+       move.l  d0,a0
+       move.l  (a0),d1
+NoBaud put.l   d1,Arg_Baud
+
+       lea     SerErrTab(pc),a0
+       move.l  a0,a2
+       geta    SerErrMem,a1
+LoopSerErr     move.b  -(a0),1(a1)
+       beq.s   DoneSerErr
+       moveq   #0,d0
+       move.b  -(a0),d0
+       move.b  d0,3(a1)
+       addq    #4,a1
+       subq.b  #1,d0
+LoopSerErr2    move.l  a2,(a1)+
+SkipSerErr     tst.b   (a2)+
+       bne.s   SkipSerErr
+       dbra    d0,LoopSerErr2
+       bra.s   LoopSerErr
+
+DoneSerErr     get.l   Arg_To,d0
+       vor.l   Arg_From,d0
+       snev    GotCmdArgs
+       tstv.l  Arg_MUI
+       bne.s   DoMUI
+       tst.l   d0
+       bne     ProcessCmdArgs
+DoMUI  dtl     <muimaster.library>,a0
+       moveq   #MUIMaster_MVer,d0
+       call    TrackLibrary
+       put.l   d0,muimasterbase
+       move.l  d0,a6
+       bset.b  #svfb_errorreq,sv_flags+3(v)
+
+       dtl     <_Transmit>,a2
+       dt      <_Receive>
+       dt      <_Settings>
+       dt      <_Quit>
+       dt      <_Abort>
+       dt      <_Save>
+       dt      <_Use>
+       dt      <_Restore>
+       dt      <_Close>
+       geta    Buttons,a3
+       moveq   #8,d2
+LoopMakeObj    push    a2
+       move.l  sp,a0
+       moveq   #MUIO_Button,d0
+       call    muimaster,MUI_MakeObjectA
+       addq    #4,sp
+       move.l  d0,(a3)+
+       bne.s   GenTButton
+MUIDosError    dtl     <MUI error>,a0
+SSDosError     jump    ss,DosError
+
+GenTButton     tst.b   (a2)+
+       bne.s   GenTButton
+       move.l  d0,a0
+       move.w  #MUIA_CycleChain-MUITags,d0
+       moveq   #TRUE,d1
+       bsr     SetAttr
+       dbra    d2,LoopMakeObj
+
+       move.w  #MUIA_InputMode-MUITags,d0
+       moveq   #MUIV_InputMode_Toggle,d1
+       get.l   SettingsButton,a0
+       bsr     SetAttr
+       move.w  #MUIA_Weight-MUITags,d0
+       moveq   #0,d1
+       get.l   AbortButton,a0
+       bsr     SetAttr
+
+       move.w  #MUIA_Popstring_Toggle-MUITags,d0
+       moveq   #1,d1
+       get.l   TransmitButton,a0
+       bsr     SetAttr
+       move.w  #MUIA_Popstring_Toggle-MUITags,d0
+       moveq   #1,d1
+       get.l   ReceiveButton,a0
+       bsr     SetAttr
+
+       moveq   #(6*32*16/8)>>2,d0
+       rol.l   #2,d0
+       moveq   #MEMF_PUBLIC!MEMF_CHIP,d1       
+       call    ss,TrackAllocMem
+       move.l  d0,a6
+
+       lea     CasioIcons(pc),a2
+       lea     PartTab(pc),a4
+       geta    Bitmaps,a3
+       geta    StatBar0,a1
+       moveq   #5,d7
+SkipZeroPart   tst.b   (a4)+
+       beq.s   SkipZeroPart
+       lea     -1(a4),a0
+       put.l   a0,StatBarText
+       put.l   a3,StatBarBMap
+       move.l  #$00040010,(a3)+        ;bm_BytesPerRow+bm_Rows
+       move.l  #$00010000,(a3)+        ;bm_Flags+bm_Depth+bm_Pad
+       move.l  a6,(a3)+                ;bm_Planes[0]
+       moveq   #15,d0
+GenIconLine    move.w  (a2)+,d1
+       moveq   #15,d2
+GenIconPix     move.w  d1,d4
+       roxr.w  #1,d4
+       roxr.l  #1,d3
+       roxr.w  #1,d1
+       roxr.l  #1,d3
+       dbra    d2,GenIconPix
+       move.l  d3,(a6)+
+       dbra    d0,GenIconLine
+       mpush   a1-a3/a6
+       lea     MUI_StatBar(pc),a3
+       bsr     GenerateMUI
+       mpop    a1-a3/a6
+       move.l  d0,(a1)+        ;StatBar
+       get.l   StatBarNumber,(a1)+     ;StatBarNum
+SkipPartPart   tst.b   (a4)+
+       bne.s   SkipPartPart
+       dbra    d7,SkipZeroPart
+
+       move.l  #gnm_SIZEOF*PackMenuNum+1,d0
+       move.l  d0,d2
+       call    ss,IPAlloc
+       clr.l   -(sp)
+       push    d0
+       move.l  d0,a3
+       add.l   d0,d2
+       subq.l  #1,d2
+       lea     PackMenus(pc),a2
+       geta    MenusHots,a4
+       moveq   #FirstMenuCode,d3
+NextMenuField  addq.b  #NM_ITEM,(a3)
+NextMenuTag    move.b  (a2)+,d0
+       beq.s   GotMenuTitle
+       bpl.s   GotMenuHot
+       addq.b  #1,d0
+       bne.s   NotMenuSepar
+       subq.l  #-NM_BARLABEL,gnm_Label(a3)
+       bra.s   NextMenuRecord
+
+NotMenuSepar   move.w  #CHECKIT!MENUTOGGLE,gnm_Flags(a3)
+       bra.s   NextMenuTag
+
+GotMenuTitle   subq.b  #NM_ITEM-NM_TITLE,(a3)
+GotMenuHot     subq.b  #2,d0
+       bmi.s   NotMenuHot
+       move.b  d0,(a4)
+       move.l  a4,gnm_CommKey(a3)
+       addq    #2,a4
+NotMenuHot     move.l  a2,gnm_Label(a3)
+ToEndLabel     tst.b   (a2)+
+       bne.s   ToEndLabel
+       move.l  d3,gnm_UserData(a3)
+       addq.l  #1,d3
+NextMenuRecord lea     gnm_SIZEOF(a3),a3
+       cmp.l   a3,d2
+       bne.s   NextMenuField
+       move.l  sp,a0
+       moveq   #MUIO_MenustripNM,d0
+       call    muimaster,MUI_MakeObjectA
+       put.l   d0,MenuStrip
+       beq     MUIDosError
+       addq    #8,sp
+       pea     (FirstMenuCode+1).w
+       push    #MUIM_FindUData
+       move.l  d0,a2
+       bsr     DoMethod
+       put.l   d0,TransmitMItem
+       addq.l  #1,4(sp)        ;2
+       bsr     DoMethod
+       put.l   d0,ReceiveMItem
+       beq     MUIDosError
+       addq.l  #6,4(sp)        ;8
+       bsr     DoMethod
+       put.l   d0,ConfigMItem
+       beq     MUIDosError
+       addq    #8,sp
+
+       get.l   sv_thistask,a0
+       move.l  v,TC_Userdata(a0)
+       sub.l   a0,a0
+       gett    STR_Slider,a1
+       sub.l   a2,a2
+       moveq   #6,d0
+       lea     BaudRateFunc(pc),a3
+       call    muimaster,MUI_CreateCustomClass
+       put.l   d0,BaudRateClass
+       beq     MUIDosError
+       move.l  d0,a0
+       move.l  mcc_Class(a0),a0
+       clr.l   -(sp)
+       push    sp      ;TRUE
+       push    #MUIA_CycleChain
+       pea     Def_BaudRateN.w
+       push    #MUIA_Numeric_Max
+       pea     Def_BaudRateN.w
+       push    #MUIA_Numeric_Value
+       pea     3.w
+       push    #MUIA_ExportID
+       sub.l   a1,a1
+       move.l  sp,a2
+       call    intuition,NewObjectA
+       lea     4*8+4(sp),sp
+       put.l   d0,BaudRateSlider
+       beq     MUIDosError
+
+       lea     MUI_Applic(pc),a3
+       bsr     GenerateMUI
+
+       lea     MUI_Notific(pc),a3
+       bsr     SetNotify
+
+       push    TriggerValPtr(pc)       ;28
+       vpush   MainWin                 ;24
+       push    #MUIM_Popstring_Open    ;20
+       pea     1.w                     ;16
+       vpush   TransmitAsl             ;12
+       pea     (FirstMenuCode+1).w     ;8
+       push    #MUIA_Application_MenuAction ;4
+       push    #MUIM_Notify            ;0
+       bsr     DoMethodAppl
+       addq.l  #1,8(sp)        ;2
+       get.l   ReceiveAsl,12(sp)
+       bsr     DoMethod
+       addq.l  #2,8(sp)        ;4
+       get.l   ApplObj,12(sp)
+       addq.l  #1,16(sp)       ;->2
+       move.w  #MUIM_Application_AboutMUI-MUITags,22(sp)
+       bsr     DoMethod
+       addq.l  #5,8(sp)        ;9
+       moveq   #MUIV_Application_Load_ENVARC,d0
+       move.l  d0,24(sp)
+       move.w  #MUIM_Application_Load-MUITags,22(sp)
+       bsr     DoMethod
+       addq.l  #1,8(sp)        ;10
+       move.w  #MUIM_Application_OpenConfigWindow-MUITags,22(sp)
+       clr.l   24(sp)
+       bsr     DoMethod
+       move.w  #MUIA_Window_Open-MUITags,6(sp)
+       move.l  EveryTimePtr(pc),8(sp)
+       move.w  #MUIM_CallHook-MUITags,22(sp)
+       geta    WOpenHook,a0
+       lea     WinOpenHook(pc),a1
+       move.l  a1,h_Entry(a0)
+       move.l  v,h_Data(a0)
+       move.l  a0,24(sp)
+       get.l   MainWin,a2
+       bsr     DoMethod
+       move.w  #MUIA_AppMessage-MUITags,6(sp)
+       move.l  a2,12(sp)
+       addq.l  #1,16(sp)       ;->3
+       geta    AppObjHook,a0
+       lea     AppDropHook(pc),a1
+       move.l  a1,h_Entry(a0)
+       move.l  v,h_Data(a0)
+       move.l  a0,24(sp)
+       bsr     DoMethod
+       lea     8*4(sp),sp
+
+       bsr     ActRestore
+
+       move.w  #MUIA_Window_Open-MUITags,d0
+       moveq   #TRUE,d1
+       get.l   MainWin,a0
+       bsr     SetAttr
+       move.w  #MUIA_Window_Open-MUITags,d0
+       get.l   MainWin,a0
+       bsr     GetAttr
+       beq     MUIDosError
+
+       bsr     ProcessCmdArgs
+       tstv.b  GotCmdArgs
+       bne     Return8
+
+LoopNewInput   bsr.s   DoMUIPoll
+       get.l   MUIWaitMask,d0
+       beq.s   LoopNewInput
+       bsr.s   MUIPollEnd
+       bra.s   LoopNewInput
+
+MUIPollEnd     bset.l  #SIGBREAKB_CTRL_C,d0
+       call    exec,Wait
+       put.l   d0,MUIWaitMask
+       btst.l  #SIGBREAKB_CTRL_C,d0
+       beq     Return8
+BreakOut       moveq   #err_break,d0
+SSReportError  jump    ss,ReportError
+
+DoMUIPoll      call    ss,TestBreak
+       push    a2
+       vpea    MUIWaitMask
+       push    #MUIM_Application_NewInput
+       bsr     DoMethodAppl
+       addq    #8,sp
+       pop     a2
+       addq.l  #1,d0
+       beq     EXIT            ;MUIV_Application_ReturnID_Quit
+       subq.l  #2,d0
+       bmi     Return8
+       moveq   #8,d1
+       cmp.l   d0,d1
+       bcs     Return8
+       cmp.w   #5,d0
+       bcc.s   CallAct
+       tstv.b  Inside
+       bne.s   Return8
+CallAct        add.l   d0,d0
+       lea     ButtonAct(pc),a0
+       add.w   (a0,d0.w),a0
+       jmp     (a0)
+
+ButtonAct      dc.w    ActTransmit-ButtonAct   ;0
+       dc.w    ActReceive-ButtonAct    ;1
+       dc.w    ActSave-ButtonAct       ;2
+       dc.w    ActUse-ButtonAct        ;3
+       dc.w    ActRestore-ButtonAct    ;4
+       dc.w    ActAbort-ButtonAct      ;5
+       dc.w    Return8-ButtonAct       ;6
+       dc.w    Return8-ButtonAct       ;7
+       dc.w    ActAbout-ButtonAct      ;8
+
+ActAbout       moveq   #TRUE,d1
+       bsr.s   ApplicSleep
+       dtl.lc  <Casio-A version 1.0 - The communication>,a0
+       dt.lc   <software for Casio organizers series SF-Ax0>
+       dt.lc   <© 1996 Short Software ',60,'short@k332.feld.cvut.cz',62,'>
+       dt.lc   <This software is FreeWare.>
+       dt.lc   <>
+       dt.lc   <Thanks to Pavouk ',60,'pavouk@k332.feld.cvut.cz',62,'>
+       dt.lc   <for testing, icons and hardware support.>
+       dt.lc   <>
+       dt.lc   <This is a MUI-Application,
+       dt      <see "Project/About MUI..." for more.>
+       push    a2
+       dtl     <Okay>,a2
+       call    ss,SimpleRequest
+       pop     a2
+       moveq   #FALSE,d1
+ApplicSleep    move.w  #MUIA_Application_Sleep-MUITags,d0
+       get.l   ApplObj,a0
+       bra     SetAttr
+
+ActUse push    #MUIV_Application_Save_ENV
+       bra.s   ActUseCont
+
+ActSave        push    #MUIV_Application_Save_ENVARC
+ActUseCont     push    #MUIM_Application_Save
+       bsr     DoMethodAppl
+       addq    #8,sp
+       move.w  #MUIA_Window_Open-MUITags,d0
+       moveq   #FALSE,d1
+       get.l   ConfigWin,a0
+       bra     SetAttr
+
+ActRestore     push    #MUIV_Application_Load_ENV
+       push    #MUIM_Application_Load
+       bsr     DoMethodAppl
+       addq    #8,sp
+Return8        rts
+
+ActTransmit    get.l   Arg_From,d0
+       bne     TrasmitClear
+       get.l   TransmitText,a0
+       bsr     GetAttrStr
+       bra     DoTransmit
+
+ActReceive     get.l   ReceiveText,a0
+       bsr     GetAttrStr
+       bra     DoReceive
+
+ActAbort       stv     InAbort
+Return10       rts
+
+ChangeState0   tstv.l  muimasterbase
+       beq.s   Return10
+       moveq   #0,d2
+;---------------
+ChangeState    clr.l   -(sp)
+       vpush   ConfigGroup
+       vpush   ReceiveButton
+       vpush   TransmitButton
+       push    d2
+       push    #MUIA_Disabled
+       push    #MUIM_MultiSet
+       bsr     DoMethodAppl
+       lea     7*4(sp),sp
+       move.w  #MUIA_Menuitem_Enabled-MUITags,d0
+       bchg.l  #0,d2
+       move.l  d2,d1
+       get.l   TransmitMItem,a0
+       bsr.s   SetAttr
+       move.w  #MUIA_Menuitem_Enabled-MUITags,d0
+       move.l  d2,d1
+       get.l   ReceiveMItem,a0
+       bsr.s   SetAttr
+       move.w  #MUIA_Disabled-MUITags,d0
+       move.l  d2,d1
+       get.l   GaugeGroup,a0
+SetAttr        clr.l   -(sp)
+       push    d1
+       move.w  d0,-(sp)
+       move.w  #MUITags>>16,-(sp)
+       move.l  sp,a1
+       call    intuition,SetAttrsA
+       lea     12(sp),sp
+       rts
+;---------------
+ProcessCmdArgs get.l   Arg_To,d0
+       beq.s   NoArgTo
+       bsr.s   DoReceive
+       clrv.l  Arg_To
+NoArgTo        get.l   Arg_From,d0
+       beq.s   Return13
+TrasmitClear   bsr.s   DoTransmit
+       clrv.l  Arg_From
+Return13       rts
+
+DoTransmit     pea     CallTransmit(pc)
+       moveq   #1,d1
+       bra.s   CallRoutine
+
+DoReceive      pea     CallReceive(pc)
+       moveq   #2,d1
+CallRoutine    put.b   d1,Inside
+       push    d0
+
+       tstv.l  muimasterbase
+       beq.s   SkipPrepCfg
+       moveq   #1,d2
+       bsr     ChangeState
+       get.l   DeviceString,a0
+       bsr     GetAttrStr
+       put.l   d0,Arg_Device
+       move.w  #MUIA_Numeric_Value-MUITags,d0
+       get.l   UnitNumber,a0
+       bsr     GetAttr
+       put.l   d0,Arg_DevUnit
+       move.w  #MUIA_Numeric_Value-MUITags,d0
+       get.l   BaudRateSlider,a0
+       bsr     GetAttr
+       moveq   #1200>>4,d1
+       addq.l  #4,d0
+       lsl.l   d0,d1
+       put.l   d1,Arg_Baud
+       move.w  #MUIA_Numeric_Value-MUITags,d0
+       get.l   MicroSecSlider,a0
+       bsr     GetAttr
+       put.l   d0,Arg_MicroWait
+
+       get.b   Inside,d0
+       subq.b  #1,d0
+       dtl     <Transmitting... %ld%% done>,a0
+       beq.s   SkipRecvInfo
+       dtl     <Receiving... %ld%% done>,a0
+SkipRecvInfo   move.l  a0,d1
+       move.w  #MUIA_Gauge_InfoText-MUITags,d0
+       get.l   ProgressGauge,a0
+       bsr     SetAttr
+       moveq   #0,d0
+       bsr     DoSetGauge
+       moveq   #5,d2
+       vlea    PartCounts+6*4,a2
+       move.l  (v),a6
+ClearCounts    clr.l   -(a2)
+       move.l  a2,a1
+       bsr.s   SetNumber
+       dbra    d2,ClearCounts
+SkipPrepCfg    pop     a1
+       pop     a0
+       push    a1
+       moveq   #0,d0
+       clrv.b  InAbort
+       call    ss,CallBlock
+       get.b   Inside,d0
+       bmi.s   AskDelete
+       subq.b  #2,d0
+       beq.s   DoDelete
+       bra.s   WasTransmit
+
+AskDelete      dtl.lc  <Data file "%s" hasn''t been received correctly.>,a0
+       dt      <Do you want to delete this corrupted file?>
+       move.l  sp,a1
+       dtl     <Yes, I''ll retry.|No, leave it!>,a2
+       call    ss,SimpleRequest
+       tst.l   d0
+       beq.s   WasTransmit
+DoDelete       move.l  (sp),d1
+       call    dos,DeleteFile
+WasTransmit    addq    #4,sp
+       clrv.b  Inside
+       tstv.b  FallOut
+       beq     ChangeState0
+EXIT   stv     FallOut
+SSExitCleanup  jump    ss,ExitCleanup
+
+AddPartCount   moveq   #0,d0
+       get.b   CurPart,d0
+       beq.s   IsZeroPart
+       subq.b  #2,d0
+IsZeroPart     lsl.l   #2,d0
+       lea     PartCounts(v,d0.w),a1
+       addq.l  #1,(a1)
+SetNumber      push    a2
+       lea     -12(sp),sp
+       move.l  sp,a2
+       push    a1
+       dt      PercLUT,<%lu>
+       gett    PercLUT,a0
+       call    ss,FormatStr
+       pop     a1
+       move.l  sp,d1
+       geta    PartCounts,a0
+       sub.l   a0,a1
+       add.l   a1,a1
+       geta    StatBarNum0,a0
+       move.l  (a0,a1),a0
+       move.w  #MUIA_Text_Contents-MUITags,d0
+       bsr     SetAttr
+       lea     12(sp),sp
+       pop     a2
+       move.l  (v),a6
+       rts
+
+CallReceive    move.l  a1,a0
+       moveq   #OPEN_NEW+OPEN_LINEBUF,d0
+       moveq   #0,d1
+       call    TrackOpenBuf
+       move.l  d0,a3
+       stv     CurPart
+       bsr     SerialInit
+       put.b   #ASCII_ACK,SerByte
+WaitSig1       bsr     GetSerByte
+       cmp.b   #ASCII_CR,d0
+       bne.s   WaitSig1
+       bsr     GetSerByte
+       cmp.b   #ASCII_LF,d0
+       bne.s   WaitSig1
+       stv.b   Inside
+NextRcvPacket  tstv.l  muimasterbase
+       beq.s   NotUpdGauge
+       get.b   CurPart,d0
+       bmi.s   NotUpdGauge
+       bne.s   NotZeroPart
+       moveq   #2,d0
+NotZeroPart    subq.l  #1,d0
+       moveq   #100,d1
+       mulu.w  d1,d0
+       moveq   #7,d1
+       divu.w  d1,d0
+       bsr.s   ChkSetGauge
+NotUpdGauge    bsr     SendItNow
+       bsr     GetSerByte
+       cmp.b   #ASCII_EOT,d0
+       bne.s   NotEndTrans
+       put.b   d0,Inside
+FullGaugeRet   moveq   #100,d0
+ChkSetGauge    vcmp.w  GaugeSet,d0
+       bls     Return7
+DoSetGauge     tstv.l  muimasterbase
+       beq     Return7
+       put.w   d0,GaugeSet
+       ext.l   d0
+       move.l  d0,d1
+       move.w  #MUIA_Gauge_Current-MUITags,d0
+       get.l   ProgressGauge,a0
+       bra     SetAttr
+
+NotEndTrans    cmp.b   #2,d0
+       beq.s   GotValidPkt
+       dtl     <Packet type ID: $02/$04 is $%02x>,a0
+       move.w  d0,-(sp)
+ExitErrorA1    move.l  sp,a1
+ExitError      jump    ExitError       
+
+GotValidPkt    bsr     GetSerByte
+       move.b  d0,d7
+       vcmp.b  CurPart,d0
+       beq.s   IsCurPart
+       put.b   d0,CurPart
+       cmp.b   #8,d0
+       bcs.s   SmallPartN
+BadPartN       dtl     <Unknown packet part #: $%02x>,a0
+       moveq   #0,d0
+       get.b   CurPart,d0
+       move.w  d0,-(sp)
+       bra.s   ExitErrorA1
+
+SmallPartN     lea     PartTab(pc),a4
+LoopPart       subq.b  #1,d0
+       bcs.s   DoneParts
+ScanPart       tst.b   (a4)+
+       bne.s   ScanPart
+       bra.s   LoopPart
+       
+DoneParts      tst.b   (a4)
+       beq.s   BadPartN
+       dtl     <',Char_Term,Char_Term,Char_Term,'>,a0
+       call    BPuts
+       move.l  a4,a0
+       call    BPutsNL
+       bra.s   NoFirstRec
+
+IsCurPart      cmp.b   #7,d7
+       beq.s   NoFirstRec
+       dtl     <',Char_Term,Char_Term,'>,a0
+       call    BPutsNL
+NoFirstRec     bsr     GetSerByte
+       add.b   d0,d7
+       move.b  d0,d2
+       bsr     GetSerByte
+       add.b   d0,d7
+       rol.w   #8,d0
+       move.b  d2,d0
+       cmp.w   #SerBufSiz-1,d0
+       bcs.s   OkaySize
+       dtl     <Packet too long: size=%u, max=%u>,a0
+       move.w  #SerBufSiz-1,-(sp)
+ExitErrorD0W   move.w  d0,-(sp)
+       bra.s   ExitErrorA1
+
+OkaySize       geta    SerBuf,a4
+       clr.b   (a4,d0.l)
+       move.w  d0,d2
+       move.w  d0,d3
+       bsr     SerReceiveX
+       bsr     GetSerByte
+       move.l  a4,a0
+NextXSumChar   add.b   d0,d7
+       move.b  (a0)+,d0
+       dbra    d2,NextXSumChar
+       tst.b   d7
+       beq.s   GoodXSum
+       dtl     <Packet checksum bad - sum:$00 is $%02x>,a0
+       move.w  d7,-(sp)
+       clr.b   (sp)
+       bra     ExitErrorA1
+
+GoodXSum       bsr     AddPartCount
+       st      d4
+       get.b   CurPart,d0
+       beq     BefRecScan
+       cmp.b   #7,d0   ;CALENDAR
+       beq.s   DoCalendar
+       cmp.b   #$F8,(a4)+
+       beq.s   AfterF8
+       dtl     <Packet data start magic @4:$F8 is $%02x>,a0
+       moveq   #0,d0
+       move.b  -(a4),d0
+       bra.s   ExitErrorD0W
+
+DoCalendar     cmp.w   #6,d3
+       beq.s   GoodCalLen
+       dtl     <Calendar data length:6 is %u>,a0
+       move.w  d3,-(sp)
+       bra     ExitErrorA1
+
+GoodCalLen     move.w  (a4)+,d0
+       bsr.s   PrintDate
+       moveq   #':',d0
+       call    BPutByte
+       moveq   #3,d0
+ReadLELong     move.b  (a4)+,d2
+       ror.l   #8,d2
+       dbra    d0,ReadLELong
+       clr.w   -(sp)
+NextDate       addq.w  #1,(sp)
+       ror.l   #1,d2
+       bcc.s   NotMarked
+       dtl     < %02u>,a0
+       move.l  sp,a1
+       call    BPrintf
+NotMarked      cmp.w   #31,(sp)
+       bne.s   NextDate
+       addq    #2,sp
+       bra     DoneThisRec
+
+PrintDate      move.w  d0,d1
+       and.w   #$000F,d1
+       move.w  d1,-(sp)
+       lsr.w   #4,d0
+       add.w   #$1900,d0
+       btst.l  #8,d0
+       bne.s   Not2000
+       add.w   #$2000-$1A00,d0
+Not2000        move.w  d0,-(sp)
+       dtl     <%x-%02u>,a0
+       move.l  sp,a1
+       call    BPrintf
+       addq    #4,sp 
+Return7        rts
+
+AfterF8        cmp.b   #5,d0   ;SCHEDULE
+       bne     BefRecScan
+       cmp.b   #12,d3
+       bcc.s   LongSchedDat
+       dtl     <Schedule data too short: size=%u, min=12>,a0
+       move.w  d3,-(sp)
+       bra     ExitErrorA1
+
+LongSchedDat   moveq   #0,d0
+       move.b  10(a4),d0
+       move.w  d0,-(sp)
+       move.b  8(a4),d0
+       move.w  d0,-(sp)
+       move.b  3(a4),d0
+       cmp.b   #$F3,d0
+       bne.s   BadSchDat
+       cmp.l   #$00F30000,(sp)
+       beq.s   GoodSched
+BadSchDat      move.w  d0,-(sp)
+       dtl     <Bad schedule data - @8:$F3 is $%02x, @13:$F3 is $%02x, @15:$00 is $%02x>,a0
+       bra     ExitErrorA1
+
+GoodSched      addq    #4,sp
+       move.w  1(a4),d0
+       rol.w   #8,d0
+       bsr.s   PrintDate
+       moveq   #0,d0
+       move.b  4(a4),d0
+       move.w  d0,-(sp)
+       move.b  5(a4),d0
+       move.w  d0,-(sp)
+       move.b  (a4),d0
+       move.w  d0,-(sp)
+       dtl     <-%02x: %02x:%02x>,a0
+       move.l  sp,a1
+       call    BPrintf
+       addq    #6,sp
+       moveq   #0,d0
+       move.b  7(a4),d0
+       cmp.b   #$30,d0
+       beq.s   NoEndTime
+       moveq   #0,d1
+       move.b  6(a4),d1
+       move.w  d1,-(sp)
+       move.w  d0,-(sp)
+       dtl     <-%02x:%02x>,a0
+       move.l  sp,a1
+       call    BPrintf
+       addq    #4,sp
+       moveq   #0,d0
+NoEndTime      move.b  9(a4),d0
+       beq.s   NoSchedImg
+       move.w  d0,-(sp)
+       dtl.c   < >,a0
+       dt      PercUT,<%u>
+       move.l  sp,a1
+       call    BPrintf
+       addq    #2,sp
+NoSchedImg     moveq   #10,d0
+       call    BPutChar
+       lea     11(a4),a4
+
+BefRecScan     moveq   #0,d2
+MainRecScan    move.b  (a4)+,d0
+       beq.s   DoneThisRec
+       cmp.b   #Char_Term,d0
+       bne.s   NotCharTerm
+       moveq   #Char_TermRepl,d0
+       bra.s   NotCharE4
+
+NotCharTerm    cmp.b   #Char_CasSep,d0
+       bne.s   NotCharF3
+       tst.b   d4
+       bne.s   LoopRecScan
+       bsr.s   FlushRecScan
+       moveq   #Char_Term,d0
+       call    BPutByte
+       bra.s   DoCharNL
+
+NotCharF3      cmp.b   #Char_CasCR,d0
+       bne.s   NotCharE4
+DoCharNL       addq.l  #1,d2
+       bra.s   LoopRecScan
+
+NotCharE4      move.w  d0,-(sp)
+       bsr.s   FlushRecScan
+       move.w  (sp)+,d0
+       call    BPutChar
+LoopRecScan    clr.b   d4
+       bra.s   MainRecScan
+
+DoneThisRec    moveq   #10,d0
+       call    BPutChar
+       bra     NextRcvPacket
+
+FlushRecScan   tst.l   d2
+FlushRecScanX  beq     Return7
+       moveq   #10,d0
+       call    BPutChar
+       subq.l  #1,d2
+       bra.s   FlushRecScanX
+;***************
+CallTransmit   put.l   a1,TransmitFName
+       move.l  a1,a0
+       moveq   #OPEN_OLD,d0
+       moveq   #0,d1
+       call    TrackOpenBuf
+       push    d0
+       tstv.l  muimasterbase
+       beq.s   EmptyFile
+       move.l  d0,a0
+       move.l  bh_handle(a0),d1
+       move.l  d1,d4
+       moveq   #0,d2
+       moveq   #OFFSET_END,d3
+       call    dos,Seek
+       moveq   #OFFSET_BEGINNING,d3
+       move.l  d4,d1
+       call    Seek
+       put.l   d0,TxFileSize
+       bne.s   EmptyFile
+       addqv.l #1,TxFileSize
+EmptyFile      bsr     SerialInit
+       move.l  (sp),a2
+       call    BFlush
+       put.l   sp,ErrPtr
+       moveq   #0,d6
+       stv     CurPart
+       move.w  #ASCII_CR<<8!ASCII_LF,-(sp)
+       move.l  sp,a0
+       moveq   #2,d0
+       bsr     DoSendBuf
+       addq    #2,sp
+       bsr     WaitAck
+NextLine       addqv.l #1,CurLine
+       geta    LineBuf,a3
+       move.l  a3,a0
+       move.l  #LineBufSiz,d0
+       call    BGets
+       subq.l  #1,d0
+       beq.s   StringOK
+       bsr     FlushRec
+       addq    #4,sp
+       moveq   #ASCII_EOT,d0
+       bsr     DoSendByte
+       bra     FullGaugeRet
+
+StringOK       cmp.w   #Char_Term<<8!Char_Term,(a3)
+       bne     NotSpec
+       bsr     FlushRec
+       addq    #2,a3
+       tst.b   (a3)
+       beq.s   NextLine
+       cmp.b   #Char_Term,(a3)+
+       beq.s   ReadPartID
+DoInvUse       dt      InvUseT,<Invalid use of ''',Char_Term,'''%s>
+       tpea    InvUseT
+       bra.s   ErrDesc
+
+ReadPartID     lea     PartTab(pc),a4
+       clrv.b  CurPart
+       moveq   #0,d2
+LoopRdPartN    move.l  a3,a0
+       move.l  a4,a1
+       call    utility,Stricmp
+       move.l  (v),a6
+       beq.s   NextLine
+ScanRdPartN    tst.b   (a4)+
+       bne.s   ScanRdPartN
+       addqv.b #1,CurPart
+       cmpv.b  #8,CurPart
+       bne.s   LoopRdPartN
+DoUnkPID       dt      UnkPIDT,<Unknown part ID%s>,a0
+       tpea    UnkPIDT
+ErrDesc        geta    LineBuf,a0
+       push    a0
+LenLine        tst.b   (a0)+
+       bne.s   LenLine
+       sub.l   (sp),a0
+       vpush   CurLine
+       get.l   TransmitFName,a2
+       push    a2
+LenFName       tst.b   (a2)+
+       bne.s   LenFName
+       sub.l   (sp),a2
+       add.l   a2,a0
+       lea     64(a0),a0
+       move.l  a0,d0
+       call    IPAlloc
+       move.l  d0,a2
+       dtl     < in "%s", line %lu: "%s">,a0
+       move.l  sp,a1
+       call    FormatStr
+       lea     12(sp),sp
+       pop     a0
+       get.l   ErrPtr,a1
+       move.l  a2,(a1)
+       bra     ExitErrorA1
+
+NotSpec        move.l  d6,a0
+       tst.l   d6
+       bne     AlreadyBeginX
+       moveq   #0,d4
+       geta    SerBuf,a0
+       move.b  #2,(a0)+
+       get.b   CurPart,d0
+       bmi.s   DoUnkPID
+       move.b  d0,(a0)+
+       clr.w   (a0)+   ;Length 2 B filled L8R
+       cmp.b   #7,d0
+       beq     WrCalendar
+       tst.b   d0
+       beq     AlreadyBegin
+       move.b  #$F8,(a0)+
+       move.b  #Char_CasSep,(a0)+
+       cmp.b   #5,d0
+       bne     AlreadyBegin
+WrSchedule     moveq   #'-',d3
+       bsr     ParseYear
+       move.w  -(a4),d0
+       rol.w   #8,d0
+       move.w  d0,(a4)+
+       bsr     SchedStrStr
+       cmp.l   #32,d0
+       bcc     BadSched
+       tst.l   d0
+       beq     BadSched
+       bsr     ConvByteBCD
+       move.b  d0,-3(a4)
+       move.w  #Char_CasSep<<8,(a4)+
+       bsr     SchReadHour
+       move.b  d0,(a4)+
+       move.l  a4,a0
+LoopSch2Col    move.b  (a3)+,d0
+       move.b  d0,(a4)+
+       beq.s   TermSch2ColX
+       cmp.b   #' ',d0
+       beq.s   TermSch2Col
+       cmp.b   #'-',d0
+       bne.s   LoopSch2Col
+TermSch2ColX   subq    #1,a3
+TermSch2Col    bsr     StrStrToLA4
+       cmp.l   #60,d0
+       bcc.s   BadSched
+       bsr     ConvByteBCD
+       move.b  d0,-2(a4)
+       clr.b   (a4)+
+       move.l  #$30F30000,(a4)+
+       move.l  a4,a0
+SkipSchSpc     move.b  (a3)+,d0
+       beq.s   DoneSchParse
+       cmp.b   #' ',d0
+       beq.s   SkipSchSpc
+       cmp.b   #'-',d0
+       bne.s   NoEndSchTim
+       bsr.s   SchReadHour
+       move.b  d0,-4(a4)
+       move.l  a4,a0
+LoopSch3Col    move.b  (a3)+,d0
+       move.b  d0,(a4)+
+       beq.s   TermSch3Col
+       cmp.b   #' ',d0
+       bne.s   LoopSch3Col
+TermSch3Col    bsr     StrStrToLA4
+       cmp.l   #60,d0
+       bcc.s   BadSched
+       bsr.s   ConvByteBCD
+       move.b  d0,-5(a4)
+NoEndSchTim    move.l  a4,a0
+LoopSch4Col    move.b  (a3)+,d0
+       move.b  d0,(a4)+
+       beq.s   TermSch4Col
+       cmp.b   #' ',d0
+       bne.s   LoopSch4Col
+TermSch4Col    bsr     StrStrToLA4
+       move.l  d0,d1
+       lsr.l   #8,d1
+       bne.s   BadSched
+       move.b  d0,-2(a4)
+       subq    #1,a3
+LoopSch5Col    move.b  (a3)+,d0
+       beq.s   DoneSchParse
+       cmp.b   #' ',d0
+       beq.s   LoopSch5Col
+BadSched       get.l   ErrPtr,sp
+       dt      BadSchedT,<Schedule format bad - req. "YEAR-MN-DY: HS:MS[-HE:ME] [ICON]"%s>
+       tpea    BadSchedT
+       bra     ErrDesc
+
+DoneSchParse   move.l  a4,d6
+       bra     NextLine
+
+SchReadHour    bsr     SchedStrStr
+       cmp.l   #24,d0
+       bcc.s   BadSched
+ConvByteBCD    divu.w  #10,d0
+       move.w  d0,d1
+       swap    d0
+       rol.b   #4,d1
+       or.b    d1,d0
+       rts
+
+ParseYear      move.l  a0,a4
+LoopYrMin      move.b  (a3)+,d0
+       beq.s   BadYear
+       move.b  d0,(a4)+
+       cmp.b   #'-',d0
+       bne.s   LoopYrMin
+       bsr     StrStrToLA4
+       cmp.l   #2100,d0
+       bcs.s   SmallYrYear
+BadYear        dt      BadYearT,<Year/Month format bad - req. "YEAR-MN"%s>
+       tpea    BadYearT
+       bra     ErrDesc
+
+SmallYrYear    cmp.w   #1901,d0
+       bcs.s   BadYear
+       move.l  d0,d2
+       move.l  a4,a0
+LoopYrCol      move.b  (a3)+,d0
+       beq.s   BadYear
+       move.b  d0,(a4)+
+       cmp.b   d3,d0
+       bne.s   LoopYrCol
+       bsr     StrStrToLA4
+       cmp.l   #13,d0
+       bcc.s   BadYear
+       tst.l   d0
+       beq.s   BadYear
+       sub.w   #1900,d2
+       moveq   #10,d1
+       divu.w  d1,d2
+       swap    d2
+       rol.b   #4,d2
+       or.b    d2,d0
+       move.b  d0,1(a4)
+       clr.w   d2
+       swap    d2
+       divu.w  d1,d2
+       swap    d2
+       move.b  d2,d0
+       swap    d2
+       rol.b   #4,d2
+       or.b    d2,d0
+       move.b  d0,(a4)
+       addq    #2,a4
+Return2        rts
+
+WrCalendar     moveq   #':',d3
+       bsr.s   ParseYear
+       moveq   #0,d2
+NextCalenDay   move.l  a4,a0
+SkipSpcCalen   move.b  (a3)+,d0
+       beq.s   SendCalend
+       cmp.b   #' ',d0
+       beq.s   SkipSpcCalen
+       bra.s   SkipZeroCalI
+
+SkipZeroCal    move.b  (a3)+,d0
+SkipZeroCalI   cmp.b   #'0',d0
+       beq.s   SkipZeroCal
+CopyDayNum     move.b  d0,(a4)+
+       move.b  (a3),d0
+       beq.s   DoneDayNum
+       addq    #1,a3
+       cmp.b   #' ',d0
+       bne.s   CopyDayNum
+DoneDayNum     clr.b   (a4)
+       move.l  a0,a4
+       call    StrToL
+       subq.l  #1,d0
+       bmi.s   BadCalend
+       bset.l  d0,d2
+       cmp.l   #31,d0
+       bcs.s   NextCalenDay
+BadCalend      dt      CalBadT,<Calendar format bad - req. "...: D1 D2 ... Dn"%s>
+       tpea    CalBadT
+       bra     ErrDesc
+
+SchedStrStr    move.l  a4,a0
+LoopSchCol     move.b  (a3)+,d0
+       beq     BadSched
+       move.b  d0,(a4)+
+       cmp.b   #':',d0
+       bne.s   LoopSchCol
+StrStrToLA4    clr.b   -(a4)
+       move.l  a0,a4
+       moveq   #0,d0
+StrStrToL      move.b  (a0)+,d0
+       beq.s   Return2
+       cmp.b   #' ',d0
+       beq.s   StrStrToL
+       cmp.b   #'0',d0
+       beq.s   StrStrToL
+       subq    #1,a0
+       jump    StrToL
+
+SendCalend     moveq   #3,d0
+WrCalenLong    move.b  d2,(a4)+
+       ror.l   #8,d2
+       dbra    d0,WrCalenLong
+       move.l  a4,d6
+       bsr.s   FlushRec
+       bra     NextLine
+
+AlreadyBeginX  moveq   #Char_CasCR-$100,d0
+       bclr.l  #0,d4
+       bne.s   PutToBuf
+AlreadyBegin   move.b  (a3)+,d0
+       bne.s   NotNL
+       addq.l  #1,d4
+       move.l  a0,d6
+       bra     NextLine
+
+NotNL  cmp.b   #Char_Term,d0
+       bne.s   PutToBuf
+       tst.b   (a3)
+       bne     DoInvUse
+       moveq   #-1,d4
+       moveq   #Char_CasSep-$100,d0
+PutToBuf       geta    SerBuf+SerBufSiz-1,a1
+       cmp.l   a1,a0
+       bcs.s   GoodPktLen
+       move.w  #SerBufSiz,-(sp)
+       dt      PktDatLT,<Packet data too long - max=%u%s>
+       tpea    PktDatLT
+       bra     ErrDesc
+
+GoodPktLen     move.b  d0,(a0)+
+       bra.s   AlreadyBegin
+
+FlushRec       tst.l   d6
+       beq.s   Return3
+       tstv.l  muimasterbase
+       beq.s   NoMUITxProg
+       call    BTell
+       moveq   #100,d1
+       call    utility,UMult32
+       get.l   TxFileSize,d1
+       call    utility,UDivMod32
+       bsr     DoSetGauge
+       bsr     AddPartCount
+NoMUITxProg    move.l  d6,d0
+       geta    SerBuf+4,a0
+       sub.l   a0,d0
+       ror.w   #8,d0
+       put.w   d0,SerBuf+2
+       ror.w   #8,d0
+       addq.l  #5,d0
+       move.l  d6,a1
+       subq    #4,a0
+       lea     1(a0),a1
+       move.w  d0,d1
+       subq.w  #4,d1
+       move.b  (a1)+,d2
+TxXSum add.b   (a1)+,d2
+       dbra    d1,TxXSum
+       neg     d2
+       move.b  d2,(a1)
+       moveq   #0,d6
+       pea     WaitAck(pc)
+
+DoSendBuf      subq.w  #1,d0
+       bmi.s   Return3
+LoopSendB      push    d0
+       move.b  (a0)+,d0
+       push    a0
+       bsr.s   DoSendByte
+       pop     a0
+       pop     d0
+       dbra    d0,LoopSendB
+Return3        rts
+
+DoSendByte     put.b   d0,SerByte
+       get.l   TimerTrk,a1
+       move.l  trk_data(a1),a0
+       get.l   Arg_MicroWait,IOTV_TIME+TV_MICRO(a0)
+       beq.s   SendItNow
+       clr.l   IOTV_TIME+TV_SECS(a0)
+       dtl     <TR_ADDREQUEST>,a0
+       call    ss,ChkDoIO
+SendItNow      get.l   SerialIO,a0
+       geta    SerByte,a1
+       move.l  a1,IO_DATA(a0)
+       moveq   #1,d0
+       move.l  d0,IO_LENGTH(a0)
+       move.w  #CMD_WRITE,IO_COMMAND(a0)
+       dtl     <CMD_WRITE>,a0
+       get.l   SerialTrk,a1
+       jump    ss,ChkDoIO
+;***************
+WaitAck        bsr.s   GetSerByte
+       cmp.b   #ASCII_ACK,d0
+       beq.s   Return1
+       addq    #2,sp
+       move.w  d0,(sp)
+       dtl     <Casio memory exhausted - got $%02x (ACK=$06)%s>,a0
+       cmp.b   #5,d0
+       beq.s   MemoryErr
+       dtl     <Casio remote abort - got $%02x (ACK=$06)%s>,a0
+       cmp.b   #ASCII_EOT,d0
+       beq.s   MemoryErr
+       dtl     <Expected ACK - $06, got $%02x%s>,a0
+MemoryErr      push    a0
+       bra     ErrDesc
+
+;---------------
+GetSerByte     moveq   #1,d0
+       subq    #2,sp
+       move.l  sp,a0
+       bsr.s   SerReceive
+       moveq   #0,d0
+       move.b  (sp)+,d0
+Return1        rts
+;---------------
+SerReceiveX    move.l  a4,a0
+SerReceive     get.l   SerialIO,a1
+       move.l  a0,IO_DATA(a1)
+       move.w  #CMD_READ,IO_COMMAND(a1)
+       move.l  d0,IO_LENGTH(a1)
+       move.l  MN_REPLYPORT(a1),a0
+       move.b  MP_SIGBIT(a0),d5
+       call    exec,SendIO
+LoopSerInput   tstv.l  muimasterbase
+       beq.s   SkipAbort
+       bsr     DoMUIPoll
+       tstv.b  InAbort
+       beq.s   SkipAbort
+       pea     SSExitCleanup(pc)
+       put.b   #ASCII_EOT,SerByte
+       bra     SendItNow
+
+SkipAbort      get.l   SerialIO,a1
+       call    exec,CheckIO
+       tst.l   d0
+       bne.s   DoneReadIO
+       tstv.l  muimasterbase
+       beq.s   ForceMUIPoll
+       get.l   MUIWaitMask,d0
+       beq.s   LoopSerInput
+ForceMUIPoll   bset.l  d5,d0
+       bsr     MUIPollEnd
+       bra.s   LoopSerInput
+
+DoneReadIO     get.l   SerialIO,a1
+       call    exec,WaitIO
+       move.l  (v),a6
+ProcSerErr     ext.w   d0
+       beq.s   Return1
+       geta    SerErrMem,a0
+;Stolen from SSLib.asm
+10$    move.w  d0,d1
+       sub.w   (a0)+,d1
+       bcs.s   11$
+       move.w  (a0)+,d2
+       beq.s   0$
+       cmp.w   d2,d1
+       bcc.s   12$
+       lsl.w   #2,d1
+       move.l  0(a0,d1.w),d2
+       moveq   #err_iofail2,d0
+       bra.s   01$
+
+11$    move.w  (a0)+,d2
+12$    lsl.w   #2,d2
+       add.l   d2,a0
+       bra.s   10$
+
+0$     moveq   #err_iofail,d0
+       get.l   Arg_Device,d2
+01$    dtl     <CMD_READ>,a1
+       jump    ReportError
+;---------------
+SerialInit     dt      TimerDev,<timer.device>
+       gett    TimerDev,a0
+       moveq   #IOTV_SIZE,d0
+       move.l  d0,a1
+       moveq   #UNIT_MICROHZ,d0
+       moveq   #0,d1
+       sub.l   a2,a2
+       call    ss,TrackDevice
+       put.l   d1,TimerTrk
+       move.w  #TR_ADDREQUEST,IO_COMMAND(a1)
+
+       get.l   Arg_Device,a0
+       get.l   Arg_DevUnit,d0
+       moveq   #IOEXTSER_SIZE,d1
+       move.l  d1,a1
+       moveq   #0,d1
+       geta    SerErrMem,a2
+       call    TrackDevice
+       put.l   d1,SerialTrk
+       put.l   a1,SerialIO
+       move.w  #SDCMD_SETPARAMS,IO_COMMAND(a1)
+       get.l   Arg_Baud,IO_BAUD(a1)
+       move.l  #$08080100!SERF_XDISABLED!SERF_RAD_BOOGIE,IO_READLEN(a1)
+                       ;io_ReadLen,io_WriteLen,io_StopBits,io_SerFlags
+       dtl     <SDCMD_SETPARAMS>,a0
+       move.l  d1,a1
+       jump    ChkDoIO
+;---------------
+GenerateMUI    gett    __BaseText,a2
+       get.l   muimasterbase,a6
+       moveq   #0,d2
+       bra.s   .loopnext
+
+BuildMUILoop   equ     *
+.loop  push    d2
+.loop2 move.l  #MUITags,d2
+       move.w  (a3)+,d2
+       beq.s   .end
+       moveq   #-1,d0
+       cmp.w   d0,d2
+       bne.s   .loopnext
+       move.l  #ASL_TB,d2
+       move.w  (a3)+,d2
+.loopnext      moveq   #0,d3
+       move.w  (a3)+,d3
+       bmi.s   .subobj
+       bclr    #14,d3
+       bne.s   .numb
+       add.l   a2,d3           ; String
+       push    d3
+       bra.s   .loop
+
+.numb  cmp.w   #$2000,d3       ; Number
+       beq.s   .long
+       bcs.s   .plus
+       or.l    #$FFFFE000,d3
+.plus  push    d3
+       bra.s   .loop
+.long  push    (a3)+
+       bra.s   .loop
+
+.subobj        bclr    #15,d3
+       bclr    #14,d3
+       bne.s   .var
+       add.l   a2,d3
+       link    a4,#0
+       push    d3
+       move.w  (a3)+,-(sp)
+       push    d2
+       clr.l   -(sp)
+       bra.s   .loop2
+
+.var   move.l  (a5,d3.w),-(sp)
+       bra.s   .loop
+
+.end   move.l  -4(a4),a0
+       move.l  sp,a1
+       call    MUI_NewObject
+       tst.l   d0
+       beq     MUIDosError
+
+       move.w  -6(a4),d3
+       move.l  d0,(a5,d3.w)
+       move.l  -10(a4),d2
+       unlk    a4
+       tst.w   d2
+       beq.s   Return6
+       push    d0
+       bra     BuildMUILoop
+;---------------
+DoMethodAppl   get.l   ApplObj,a2
+DoMethod       lea     4(sp),a1
+       move.l  -4(a2),a0
+DoMethodEntry  move.l  h_Entry(a0),a6
+       jmp     (a6)
+;---------------
+GetAttrStr     move.w  #MUIA_String_Contents-MUITags,d0
+GetAttr        move.l  #MUITags,d1
+       move.w  d0,d1
+       move.l  d1,d0
+       clr.l   -(sp)
+       move.l  sp,a1
+       call    intuition,GetAttr
+       pop     d0
+Return6        rts
+;---------------
+;-1=Done,-2=TriggerValue,-3=ReturnID_Quit,-4=ID 1
+SetNotify      move.l  sp,d2
+       move.w  (a3)+,d0
+       bpl.s   FilledLongD0E
+       move.w  d0,d1
+       addq.w  #1,d1
+       beq.s   Return6
+       move.l  #MUIV_TriggerValue,d0
+TriggerValPtr  equ     *-4
+       addq.w  #1,d1
+       beq.s   FilledLongD0
+       push    #MUIV_Application_ReturnID_Quit
+       addq.w  #1,d1
+       beq.s   RetQuitID
+       neg.w   d1
+       ext.l   d1
+       move.l  d1,(sp)
+RetQuitID      push    #MUIM_Application_ReturnID
+       pea     2.w
+       vpush   ApplObj
+       bra.s   DoneRetID
+
+FilledLongD0E  ext.l   d0
+FilledLongD0   push    d0
+       move.w  (a3)+,-(sp)
+       move.w  #MUITags>>16,-(sp)
+       push    #MUIM_Set
+       pea     3.w
+       move.w  (a3)+,d0
+       move.l  (v,d0.w),d0
+       push    d0
+DoneRetID      move.w  (a3)+,d0
+       ext.l   d0
+       push    d0
+       addq.l  #1,d0
+       bne.s   NotEveryTime
+       move.l  #MUIV_EveryTime,(sp)
+EveryTimePtr   equ     *-4
+NotEveryTime   move.w  (a3)+,-(sp)
+       move.w  #MUITags>>16,-(sp)
+       push    #MUIM_Notify
+       move.w  (a3)+,d0
+       move.l  (v,d0.w),a2
+       bsr     DoMethod
+       move.l  d2,sp
+       bra.s   SetNotify
+;---------------
+BaudRateFunc   cmp.l   #MUIM_Numeric_Stringify,(a1)
+       beq.s   GotNumString
+       move.l  cl_Super(a0),a0
+       bra     DoMethodEntry
+
+GotNumString   move.w  cl_InstOffset(a0),d0
+       mpush   a2/a5/a6
+       add.w   d0,a2
+       move.l  4(a1),d0        ;offsetof(struct MUIP_Numeric_Stringify,value)
+       moveq   #1200>>4,d1
+       addq.l  #4,d0
+       lsl.l   d0,d1
+       push    d1
+       move.l  4.w,a0
+       move.l  ThisTask(a0),a0
+       move.l  TC_Userdata(a0),v
+       move.l  sp,a1
+       gett    PercLUT,a0
+       call    ss,FormatStr
+       addq    #4,sp
+       move.l  a2,d0
+       mpop    a2/a5/a6
+       rts
+;---------------
+WinOpenHook    mpush   a5/a6
+       move.l  h_Data(a0),v
+       move.w  #MUIA_Window_Window-MUITags,d0
+       get.l   MainWin,a0
+       bsr     GetAttr
+       get.l   sv_thistask,a0
+       move.l  d0,pr_WindowPtr(a0)
+       mpop    a5/a6
+       rts
+;---------------
+AppDropHook    mpush   d2/d3/a2/a5/a6
+       move.l  h_Data(a0),v
+       move.l  (a1),a1
+       move.l  am_NumArgs(a1),d0
+       beq.s   DoneDropHook
+       subq.l  #1,d0
+       beq.s   OneDropHook
+BeepDropHook   sub.l   a0,a0
+       call    intuition,DisplayBeep
+       bra.s   DoneDropHook
+
+OneDropHook    tstv.b  Inside
+       bne.s   BeepDropHook
+       move.l  am_ArgList(a1),a0
+       move.l  (a0)+,d1        ;wa_Lock
+       push    (a0)    ;wa_Name
+       geta    AppDropBuf,a2
+       move.l  a2,d2
+       move.l  #AppBufSiz,d3
+       call    dos,NameFromLock
+       pop     d2
+       tst.l   d0
+       beq.s   BeepDropHook
+       move.l  a2,d1
+       call    AddPart
+       tst.l   d0
+       beq.s   BeepDropHook
+       put.l   a2,Arg_From
+       moveq   #1,d0
+       push    d0
+       push    #MUIM_Application_ReturnID
+       bsr     DoMethodAppl
+       addq    #8,sp
+       move.w  #MUIA_Application_Iconified-MUITags,d0
+       moveq   #0,d1
+       get.l   ApplObj,a0
+       bsr     SetAttr
+DoneDropHook   mpop    d2/d3/a2/a5/a6
+       rts
+;---------------
+Cleanup        get.l   muimasterbase,a6
+       get.l   ApplObj,d0
+       beq.s   NoApplObj
+       move.l  d0,a0
+       clrv.l  ApplObj
+       call    MUI_DisposeObject
+NoApplObj      get.l   BaudRateClass,d0
+       beq     Return6
+       move.l  d0,a0
+       clrv.l  BaudRateClass
+       jump    MUI_DeleteCustomClass
+;---------------
+       dc.b    0,1,15,3,11,3,4,1,1
+SerErrTab      dc.b    'DevBusy',0
+       dc.b    'BufErr',0
+       dc.b    'InvParam',0
+       dc.b    'LineErr',0
+       dc.b    'TimerErr',0
+       dc.b    'BufOverflow',0
+       dc.b    'NoDSR',0
+       dc.b    'DetectedBreak',0
+;!!! SerErrTabSize on begin - keep fresh
+;---------------
+PackMenus      dc.b    0,'Project',0           ;0
+       dc.b    'T'+2,'Transmit...',0   ;1
+       dc.b    'R'+2,'Receive...',0    ;2
+       dc.b    -1
+       dc.b    '?'+2,'About...',0      ;3
+       dc.b    1,'About MUI...',0      ;4
+       dc.b    -1
+       dc.b    'H'+2,'Hide',0          ;5
+       dc.b    'Q'+2,'Quit',0          ;6
+       dc.b    0,'Configuration',0             ;7
+       dc.b    -2,'C'+2,'Settings',0 ;8
+       dc.b    1,'Restore last saved',0 ;9
+       dc.b    -1
+       dc.b    'M'+2,'MUI...',0        ;10
+PackMenuNum    equ     14
+;!!! PackMenuHots on begin - keep fresh
+;---------------
+PartTab        dc.b    'ProtID',0      ;0
+       dc.b    0               ;1
+       dc.b    0               ;2
+       dc.b    'Phone-B',0     ;3
+       dc.b    'Phone-P',0     ;4
+       dc.b    'Schedule',0    ;5
+       dc.b    'Memo',0        ;6
+       dc.b    'Calendar',0    ;7
+       even
+;---------------
+MTag   macro
+       ifge    \1-MUITags
+       dc.w    \1-MUITags
+       else
+       dc.w    -1,\1-ASL_TB
+       endc
+       endm
+
+MOffs  macro
+       dc.w    \1+\2-__BaseText
+       endm
+
+MObj   macro
+       ifne    \1
+       MTag    \1
+       endc
+       ifnd    STREX_\2
+STREX_\2       set     1
+       dt      STR_\2,<\2.mui>
+       endc
+       MOffs   $8000,STR_\2
+       ifgt    NARG-2
+       dc.w    \3
+       dv.l    \3
+       elseif
+       dc.w    __Trash
+       endc
+       endm
+
+MText  macro
+       MTag    \1
+       dt      STR_\@a,<\2>
+       MOffs   0,STR_\@a
+       endm
+
+MNum   macro
+       MTag    \1
+       ifge    \2-$2000
+       dc.w    $6000
+       dc.l    \2
+       elseif
+       ifle    \2+$2000
+       dc.w    $6000
+       dc.l    \2
+       elseif
+       dc.w    $4000+(\2&$3FFF)
+       endc
+       endc
+       endm
+
+MVar   macro
+       MTag    \1
+       ifd     \2
+       ifge    \2-$4000
+       fail
+       endc
+       endc
+       dc.w    \2+$C000
+       endm
+
+MEnd   macro
+       dc.w    0
+       endm
+
+Notify macro
+       ifeq    NARG-4
+        ifc    'Quit','\4'
+         dc.w  -3
+        else
+         dc.w  -(\4)-4
+        endc
+       else
+        ifc    'TriggerValue','\6'
+         dc.w  -2
+        else
+         dc.w  \6
+        endc
+        dc.w   MUIA_\5-MUITags,\4
+       endc
+       ifc     'EveryTime','\3'
+        dc.w   -1
+       else
+        dc.w   \3
+       endc
+       dc.w    MUIA_\2-MUITags,\1
+       endm
+
+       dv.l    __Trash
+       dt.c    __BaseText,<>
+;---------------
+MUI_Applic
+ MObj  0,Application,ApplObj
+  MText        MUIA_Application_Title,<Casio-A>
+  MText        MUIA_Application_Version,<$VER: Casio-A 1.0 (31.8.96)>
+  MText        MUIA_Application_Copyright,<© 1996 Short Software>
+  MText        MUIA_Application_Author,<Jan Kratochvil>
+  MText        MUIA_Application_Description,<Comm. tool for Casio series A organizers>
+  MText        MUIA_Application_Base,<Casio-A>
+  MVar MUIA_Application_Menustrip,MenuStrip
+  MObj MUIA_Application_Window,Window,MainWin
+   MText       MUIA_Window_Title,<Casio-A Communicator>
+   MNum        MUIA_Window_ID,'MAIN'
+   MNum        MUIA_Window_AppWindow,TRUE
+   MObj        MUIA_Window_RootObject,Group
+    MObj       MUIA_Group_Child,Group,GaugeGroup
+     MNum      MUIA_Group_Horiz,TRUE
+     MNum      MUIA_Frame,MUIV_Frame_Button
+     MNum      MUIA_Disabled,TRUE
+     MVar      MUIA_Group_Child,AbortButton
+     MObj      MUIA_Group_Child,Gauge,ProgressGauge
+      MNum     MUIA_Gauge_Horiz,TRUE
+      MText    MUIA_Gauge_InfoText,<%ld%%>
+      MNum     MUIA_Frame,MUIV_Frame_Gauge
+      MEnd
+     MEnd
+    MObj       MUIA_Group_Child,Rectangle
+     MEnd
+    MObj       MUIA_Group_Child,Group
+     MNum      MUIA_Group_Columns,2
+     MNum      MUIA_Frame,MUIV_Frame_Text
+     MVar      MUIA_Group_Child,QuitButton
+     MVar      MUIA_Group_Child,SettingsButton
+     MObj      MUIA_Group_Child,Popasl,ReceiveAsl
+      MVar     MUIA_Popstring_Button,ReceiveButton
+      MObj     MUIA_Popstring_String,String,ReceiveText
+       MNum    MUIA_ExportID,6
+       MNum    MUIA_ShowMe,FALSE
+       MEnd
+      MText    ASLFR_TitleText,<Receive from Casio to file...>
+      MNum     ASLFR_DoSaveMode,TRUE
+      MNum     ASLFR_RejectIcons,TRUE
+      MEnd
+     MObj      MUIA_Group_Child,Popasl,TransmitAsl
+      MVar     MUIA_Popstring_Button,TransmitButton
+      MObj     MUIA_Popstring_String,String,TransmitText
+       MNum    MUIA_ExportID,5
+       MNum    MUIA_ShowMe,FALSE
+       MEnd
+      MText    ASLFR_TitleText,<Files for transmit to Casio...>
+      MNum     ASLFR_RejectIcons,TRUE
+      MEnd
+     MEnd
+    MObj       MUIA_Group_Child,Rectangle
+     MEnd
+    MObj       MUIA_Group_Child,Group
+     MNum      MUIA_Group_Columns,2
+     MNum      MUIA_Frame,MUIV_Frame_Group
+     MText     MUIA_FrameTitle,<Casio Modes>
+     MVar      MUIA_Group_Child,StatBar5
+     MVar      MUIA_Group_Child,StatBar2
+     MVar      MUIA_Group_Child,StatBar4
+     MVar      MUIA_Group_Child,StatBar1
+     MVar      MUIA_Group_Child,StatBar3
+     MVar      MUIA_Group_Child,StatBar0
+     MEnd
+    MEnd
+   MEnd
+  MVar MUIA_Application_DropObject,MainWin
+  MObj MUIA_Application_Window,Window,ConfigWin
+   MText       MUIA_Window_Title,<Casio-A Settings>
+   MNum        MUIA_Window_ID,'SETT'
+   MObj        MUIA_Window_RootObject,Group,ConfigGroup
+    MObj       MUIA_Group_Child,Group
+     MNum      MUIA_Group_Horiz,TRUE
+     MVar      MUIA_Group_Child,CloseButton
+     MVar      MUIA_Group_Child,RestoreButton
+     MVar      MUIA_Group_Child,UseButton
+     MVar      MUIA_Group_Child,SaveButton
+     MEnd
+    MObj       MUIA_Group_Child,Group,MicroSecSlider
+     MNum      MUIA_Group_Columns,2
+     MNum      MUIA_Frame,MUIV_Frame_Button
+     MObj      MUIA_Group_Child,Slider
+      MNum     MUIA_Numeric_Min,0
+      MNum     MUIA_Numeric_Max,1000
+      MNum     MUIA_Numeric_Value,Def_Micros
+      MNum     MUIA_ExportID,4
+      MNum     MUIA_CycleChain,TRUE
+      MEnd
+     MObj      MUIA_Group_Child,Text
+      MText    MUIA_Text_Contents,<',27,'rDelay [MicroSec]>
+      MNum     MUIA_HorizWeight,0
+      MEnd
+     MVar      MUIA_Group_Child,BaudRateSlider
+     MObj      MUIA_Group_Child,Text
+      MText    MUIA_Text_Contents,<',27,'rBaud rate>
+      MNum     MUIA_HorizWeight,0
+      MEnd
+     MObj      MUIA_Group_Child,String,UnitNumber
+      MText    MUIA_String_Accept,<0123456789>
+      MNum     MUIA_Frame,MUIV_Frame_String
+      MVar     MUIA_String_Integer,Arg_DevUnit
+      MNum     MUIA_ExportID,2
+      MNum     MUIA_CycleChain,TRUE
+      MEnd
+     MObj      MUIA_Group_Child,Text
+      MText    MUIA_Text_Contents,<',27,'rDevice unit>
+      MNum     MUIA_HorizWeight,0
+      MEnd
+     MObj      MUIA_Group_Child,String,DeviceString
+      MNum     MUIA_Frame,MUIV_Frame_String
+      MVar     MUIA_String_Contents,Arg_Device
+      MNum     MUIA_ExportID,1
+      MNum     MUIA_CycleChain,TRUE
+      MEnd
+     MObj      MUIA_Group_Child,Text
+      MText    MUIA_Text_Contents,<',27,'rDevice>
+      MNum     MUIA_HorizWeight,0
+      MEnd
+     MEnd
+    MEnd
+   MEnd
+  MEnd
+
+MUI_StatBar
+ MObj  0,Group
+  MNum MUIA_Group_Horiz,TRUE
+  MNum MUIA_Frame,MUIV_Frame_Text
+  MObj MUIA_Group_Child,Rectangle
+   MNum        MUIA_FixWidth,1
+   MEnd
+  MObj MUIA_Group_Child,Text,StatBarNumber
+   MText       MUIA_Text_Contents,<  0>
+   MText       MUIA_Text_PreParse,<',27,'r',27,'8>
+   MEnd
+  MObj MUIA_Group_Child,Text
+   MVar        MUIA_Text_Contents,StatBarText
+   MNum        MUIA_Text_SetMax,TRUE
+   MEnd
+  MObj MUIA_Group_Child,Rectangle
+   MNum        MUIA_Rectangle_VBar,TRUE
+   MNum        MUIA_FixWidth,1
+   MEnd
+  MObj MUIA_Group_Child,Bitmap
+   MVar        MUIA_Bitmap_Bitmap,StatBarBMap
+   MNum        MUIA_Bitmap_Width,32
+   MNum        MUIA_Bitmap_Height,16
+   MNum        MUIA_Bitmap_Precision,PRECISION_ICON
+   MNum        MUIA_Frame,MUIV_Frame_None
+   MNum        MUIA_FixWidth,32
+   MNum        MUIA_FixHeight,16
+   MEnd
+  MEnd
+
+MUI_Notific
+       Notify  SettingsButton,Selected,EveryTime,ConfigWin,Window_Open,TriggerValue
+       Notify  ConfigWin,Window_Open,EveryTime,SettingsButton,Selected,TriggerValue
+       Notify  ConfigWin,Window_Open,EveryTime,ConfigMItem,Menuitem_Checked,TriggerValue
+       Notify  ConfigWin,Window_CloseRequest,TRUE,ConfigWin,Window_Open,FALSE
+       Notify  CloseButton,Pressed,FALSE,ConfigWin,Window_Open,FALSE
+       Notify  MainWin,Window_CloseRequest,TRUE,Quit
+       Notify  TransmitText,String_Acknowledge,EveryTime,0
+       Notify  ReceiveText,String_Acknowledge,EveryTime,1
+       Notify  QuitButton,Pressed,FALSE,Quit
+       Notify  SaveButton,Pressed,FALSE,2
+       Notify  UseButton,Pressed,FALSE,3
+       Notify  RestoreButton,Pressed,FALSE,4
+       Notify  AbortButton,Pressed,FALSE,5
+       Notify  ApplObj,Application_MenuAction,FirstMenuCode+5,ApplObj,Application_Iconified,TRUE
+       Notify  ApplObj,Application_MenuAction,FirstMenuCode+6,Quit
+       Notify  ConfigMItem,Menuitem_Checked,EveryTime,ConfigWin,Window_Open,TriggerValue
+       dc.w    -1
+;---------------
+CasioIcons     incbin  "Casio-A.gfx"
+;---------------
+       tags
+       template <TO=RECEIVE/K,FROM=TRANSMIT/K,DEVICE/K,DEVUNIT/K/N,BAUD/K/N,MICROWAIT/K/N,MUI/S>
+       dv.l    Arg_To
+       dv.l    Arg_From
+       dv.l    Arg_Device
+       dv.l    Arg_DevUnit
+       dv.l    Arg_Baud
+       dv.l    Arg_MicroWait
+       dv.l    Arg_MUI
+       defvar  <Casio-A>
+       diserr  1<<err_number
+       exitrout Cleanup
+       finish
+
+       end
diff --git a/project/CasioA/Casio-A.lha b/project/CasioA/Casio-A.lha
new file mode 100644 (file)
index 0000000..2c62b28
Binary files /dev/null and b/project/CasioA/Casio-A.lha differ
diff --git a/project/CasioA/Casio-A.png b/project/CasioA/Casio-A.png
new file mode 100644 (file)
index 0000000..500eba4
Binary files /dev/null and b/project/CasioA/Casio-A.png differ
diff --git a/project/CasioA/CasioSchema.png b/project/CasioA/CasioSchema.png
new file mode 100644 (file)
index 0000000..043ebf1
Binary files /dev/null and b/project/CasioA/CasioSchema.png differ
diff --git a/project/CasioA/Index.html.pl b/project/CasioA/Index.html.pl
new file mode 100755 (executable)
index 0000000..d2c5930
--- /dev/null
@@ -0,0 +1,47 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::CasioA'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::CasioA::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::CasioA::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::CasioA::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+@{[ centerimg "Casio-A","Casio-A Snapshot" ]}
+@{[ vskip "1ex" ]}
+@{[ centerimg "CasioSchema","Casio-A Interface Scheme" ]}
+HERE
+
+
+My::Web->footer();
diff --git a/project/CasioA/ListItem.pm b/project/CasioA/ListItem.pm
new file mode 100755 (executable)
index 0000000..2d6d088
--- /dev/null
@@ -0,0 +1,51 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::CasioA' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::CasioA::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"Casio-A",
+               "platform"=>"amiga",
+               "priority"=>450,
+               "icon"=>"Casio-A-icon",
+               "download"=>"Casio-A.lha",
+               "link-source file"=>"Casio-A.asm",
+               "summary"=>"Casio SF-A10 diary backup",
+               "license"=>"PD",
+               "maintenance"=>"obsolete-Casio SF-A10 diary and AmigaOS are no longer being used.",
+               "language"=>"680x0 asm",
+               "description"=><<"HERE",
+<p>Casio-A is a software for backup/restore of Casio SF-A10 personal digital
+diary. Its development involved reverse-engineering the Casio communication
+protocol by sniffing serial communication of the vendor's MS-DOS backup tool.</p>
+<p>Hardware issues, Casio SF-A10, electronic scheme and images by the courtesy of
+@{[ a_href 'http://www.pavouk.org/','Pavel "Pavouk" Ruzicka' ]}.</p>
+HERE
+               );
+
+1;
diff --git a/project/CasioA/Makefile.am b/project/CasioA/Makefile.am
new file mode 100644 (file)
index 0000000..544d810
--- /dev/null
@@ -0,0 +1,24 @@
+# $Id$
+# automake source for the Makefile of project/CasioA/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl \
+       Casio-A.png
diff --git a/project/ChangeLog.txt.pl b/project/ChangeLog.txt.pl
new file mode 100755 (executable)
index 0000000..6c85224
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# URL redirector of &My::Web::a_href Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ChangeLog;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+use Apache::Constants qw(MOVED);
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "header_only"=>1,
+               "args_check"=>{
+                               "cvs"=>'^[\w\d][\w\d/.]*$',
+                               },
+               );
+
+$W->{"r"}->send_http_header("text/plain");
+local *F;
+open F,""
+               ."cvs -n -q -d ".$W->{"pserver"}.":".$W->{"pserver_path"}." rlog ".$W->{"args"}{"cvs"}
+               ." |perl -p -e 's#^RCS file: ".$W->{"pserver_path"}.'/(.*?)(?:/Attic/|/)?([^/]*),v$#$&\nWorking file: $1/$2#;'."'"
+               ." |cvs2cl --stdin --stdout --window 3600 --separate-header --no-wrap --usermap ".top_dir_disk()."/cvs2cl-usermap"
+               ." |";
+print while <F>;
+close F;
diff --git a/project/FordFulk/FordFulk-icon.png b/project/FordFulk/FordFulk-icon.png
new file mode 100644 (file)
index 0000000..c9f0aa9
Binary files /dev/null and b/project/FordFulk/FordFulk-icon.png differ
diff --git a/project/FordFulk/FordFulk.png b/project/FordFulk/FordFulk.png
new file mode 100644 (file)
index 0000000..a8d73a8
Binary files /dev/null and b/project/FordFulk/FordFulk.png differ
similarity index 67%
rename from project/FordFulk/index.html.pl
rename to project/FordFulk/Index.html.pl
index 5134e2c..d2ab68d 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::FordFulk::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::FordFulk::ListItem;
+Wuse 'My::Project';
+Wuse 'project::FordFulk::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::FordFulk::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::FordFulk::ListItem::ListItem,
                );
 
-print <<'HERE';
+
+print <<"HERE";
 <iframe src="FordFulk/" width="90%" height="500" />
 <a href="FordFulk/">Program on-line</a>.
 </iframe>
+
+@{[ vskip "3ex" ]}
+
+@{[ centerimg "FordFulk","Applet Screenshot" ]}
 HERE
 
+
 My::Web->footer();
index 055e13e..9d929b4 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::FordFulk;
+package project::FordFulk::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Ford-Fulkenson Algorithm Demonstration",
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"FordFulk",
+               "platform"=>"web",
+               "priority"=>230,
+               "icon"=>"FordFulk-icon",
                "download"=>"FordFulk/FordFulk.zip",
-               "summary"=>"Web applet",
+               "summary"=>"Ford-Fulkenson algorithm web applet",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"Java 1.0.2",
-               "description"=>""
-                               .'<p>Java applet to demonstrate the internals of Ford-Fulkenson network algorithm.</p>'
+               "description"=><<"HERE",
+<p>Java applet to demonstrate the internals of Ford-Fulkenson network algorithm.</p>
+HERE
                );
 
 1;
index b063480..0c1658b 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/Heat/Heat-icon.png b/project/Heat/Heat-icon.png
new file mode 100644 (file)
index 0000000..b1d1d55
Binary files /dev/null and b/project/Heat/Heat-icon.png differ
diff --git a/project/Heat/Heat.png b/project/Heat/Heat.png
new file mode 100644 (file)
index 0000000..9804c57
Binary files /dev/null and b/project/Heat/Heat.png differ
similarity index 68%
rename from project/Heat/index.html.pl
rename to project/Heat/Index.html.pl
index 4fd1ad1..ff2caad 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::Heat::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::Heat::ListItem;
+Wuse 'My::Project';
+Wuse 'project::Heat::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::Heat::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::Heat::ListItem::ListItem,
                );
 
-print <<'HERE';
+
+print <<"HERE";
 <iframe src="Heat/" width="90%" height="500" />
 <a href="Heat/">Program on-line</a>.
 </iframe>
+
+@{[ vskip "3ex" ]}
+
+@{[ centerimg "Heat","Applet Screenshot" ]}
 HERE
 
+
 My::Web->footer();
index 8781cff..592efd7 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::Heat;
+package project::Heat::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Heat Distribution Simulation",
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"Heat",
+               "platform"=>"web",
+               "priority"=>220,
+               "icon"=>"Heat-icon",
                "download"=>"Heat/Heat.zip",
-               "summary"=>"Web applet",
+               "summary"=>"Heat distribution simulation web applet",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"Java 1.0.2",
-               "description"=>""
-                               .'<p>Java applet to demonstrate distribution of heat in time.</p>'
+               "description"=><<"HERE",
+<p>Java applet to demonstrate distribution of heat in time.</p>
+HERE
                );
 
 1;
index b25e8c7..88d647c 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/Index.html.pl b/project/Index.html.pl
new file mode 100755 (executable)
index 0000000..dbbf486
--- /dev/null
@@ -0,0 +1,79 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# List of projects Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wrequire 'My::Project';
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Project List',
+               "section"=>"Projects",
+               "rel_up"=>top_dir(),
+               "rel_start"=>top_dir(),
+               "footer_ids"=>0,
+               );
+My::Web->heading();
+
+print My::Project->views("Detailed");
+print My::Project->platforms(undef());
+
+my %item=( My::Project::item_hash_read() );
+
+my @platforms=@My::Project::platforms;
+while (@platforms) {
+       my $platform_sym =shift @platforms;
+       my $platform_name=shift @platforms;
+       print '<a name="'.$platform_sym.'">';
+       print "<h2>$platform_name</h2>";
+       print '</a>'."\n";
+       my @projects=sort {
+                       ($item{$b}{"priority"} <=> $item{$a}{"priority"})
+                       or
+                       (lc($item{$a}{"name"}) cmp lc($item{$b}{"name"}));
+                       } map({ $item{$_}{"platform"} ne $platform_sym ? () : ($_); } keys(%item));
+       for my $project (@projects) {
+               my $t="";
+
+               $t.="<h3>".a_href("/project/$project/",$item{$project}{"name"}.": ".$item{$project}{"summary"})."</h3>\n";
+               $t.="<blockquote>\n";
+                       $t.=$item{$project}{"description"};
+               $t.="</blockquote>\n";
+
+               if ($item{$project}{"icon"}) {
+                       print rightimg $t,
+                                       "/project/$project/".$item{$project}{"icon"},$item{$project}{"name"}." Icon","a_href"=>"/project/$project/";
+                       }
+               else {
+                       print $t;
+                       }
+               }
+       }
+
+
+My::Web->footer();
similarity index 66%
rename from project/Islet/index.html.pl
rename to project/Islet/Index.html.pl
index 5ef85ab..731a9bc 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Main page of 'My::Project::icp'
+# Main page of 'My::Project::Islet'
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::Islet::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::icp::ListItem;
+Wuse 'My::Project';
+Wuse 'project::Islet::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::icp::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::Islet::ListItem::ListItem,
                );
 
-print <<'HERE';
+
+print <<"HERE";
 <iframe src="Islet/" width="90%" height="500" />
 <a href="Islet/">Program on-line</a>.
 </iframe>
+
+@{[ centerimg "Islet","Applet demo screen" ]}
 HERE
 
-print '<table border="0"><tr><td align="center">'.My::Web::img("Islet.png","Applet demo screen").'</td></tr></table>'."\n";
 
 My::Web->footer();
diff --git a/project/Islet/Islet-icon.png b/project/Islet/Islet-icon.png
new file mode 100644 (file)
index 0000000..d774c43
Binary files /dev/null and b/project/Islet/Islet-icon.png differ
index 11104f9..e3cc9c3 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Definition of 'My::Project::icp' for list.cgi.pl
+# Definition of 'My::Project::Islet' for list.cgi.pl
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::icp;
+package project::Islet::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>'<a href="http://www.stv.cz/icp/">ICP 1998</a> Competition Software',
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"Islet",
+               "platform"=>"web",
+               "priority"=>210,
+               "icon"=>"Islet-icon",
                "download"=>"Islet/Islet.zip",
-               "summary"=>"Web game applet",
+               "summary"=>"Map fight web game applet",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"Java 1.1",
-               "description"=>""
-                               .'<p>Simple game. Written for the purpose of'
-                               .'  a <a href="http://www.stv.cz/icp/">programming competition</a>.</p>'
+               "description"=><<"HERE",
+<p>Java applet implementing a simple map fight game.</p>
+HERE
                );
 
 1;
index 3d2c020..d71feb9 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/LaserGame/Index.html.pl b/project/LaserGame/Index.html.pl
new file mode 100755 (executable)
index 0000000..412d472
--- /dev/null
@@ -0,0 +1,47 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::LaserGame'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::LaserGame::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::LaserGame::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::LaserGame::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+@{[ centerimg "hw.jpeg","LaserGame Hardware" ]}
+@{[ vskip "1ex" ]}
+@{[ centerimg "LaserComm","LaserComm Utility" ]}
+HERE
+
+
+My::Web->footer();
diff --git a/project/LaserGame/LaserComm.png b/project/LaserGame/LaserComm.png
new file mode 100644 (file)
index 0000000..a5d88c6
Binary files /dev/null and b/project/LaserGame/LaserComm.png differ
diff --git a/project/LaserGame/LaserGame.lha b/project/LaserGame/LaserGame.lha
new file mode 100644 (file)
index 0000000..920699a
Binary files /dev/null and b/project/LaserGame/LaserGame.lha differ
diff --git a/project/LaserGame/LaserGun.a51 b/project/LaserGame/LaserGun.a51
new file mode 100644 (file)
index 0000000..d857c7b
--- /dev/null
@@ -0,0 +1,1220 @@
+// 11.0592MHz=>921600 T0 clk=>112.5 ops=2.27`5s time
+// Code is big-endian!
+public BaudRate        equ 2400        // Communication speed
+public StackSiz51      equ 24  // LaserGun stack size required
+       MagicRAMw       equ 0x53AC      // RAM-check
+       TestChar        equ 't' // For Ph_Test
+
+MaxDecimal     equ     99      // If dec>99
+BauDiv equ     28800/BaudRate // 3=9600, 6=4800, 12=2400 (PCON=0)
+
+/*
+Init display:
+Pn-Player ID
+Gx-Game mode: A=Anarchy, G=Green team, R=Red team
+Display:
+Lt-Loading
+Fn-Shot from friend detected
+En-Shot from enemy detected but already dead
+Sn-Shot down by enemy
+dt-Currently dead
+Left dot-reloading
+Right dot-dead
+*/
+
+/******************************/
+       seg     data
+       org     0x00
+DataStart:
+       rb      4 // r0-r3
+#define DispL r4
+#define DispR r5
+#define Timer r6
+#define XMitPhase r7
+       // 0='s';1=PktType;2=SwConfigX;3=PktData;4=XSumH;5=XSumL;6='e'
+       rb      4
+
+TimPhase:      rb      1 // Timer for current phase
+TimLED4:       rb      1 // 4-LED period
+TimScroll:     rb      1 // Scroll advance to next char
+
+       ScrollPtr:      rb 1 // Scroll-text start rel. ScrBase
+       SeriCnt:        rb 1 // Shots in current series
+       CAPktEnd:       rb 1 // End of ConfigReq being answered (or 0)
+       WDogCnt:        rb 1 // WatchDog timer count-down
+       Phase:  rb 1 // Current phase # (see below)
+Ph_CfgDump     equ     0 // Configuration to display dump [Phase1=sub-phase]
+Ph_Ammo        equ     1 // Normal Ammo display
+Ph_Laser       equ     2 // Laser on
+Ph_Delay       equ     3 // Laser off, laser button disabled
+Ph_First       equ     4 // Additional first-in-series delay
+       // Laser allowed boundary
+Ph_Reload      equ     5 // Reload countdown period [Phase1=cdown]
+Ph_Dead        equ     6 // Dead-state countdown period [Phase1=cdown]
+Ph_Test        equ     7 // Test mode with transmit/receive of 'T'
+       Phase1: rb 1 // Sub-phase
+// Ph_CfgDump:
+CD_Bootup      equ     0  // Right after boot-up
+CD_PNum        equ     1  // Player no. (P#)
+CD_GMode       equ     2  // Game mode  (G#: Anarchy, Green, Red)
+CD_LEDs        equ     3  // BBS_QuietL [Ld]
+CD_Sound       equ     4  // BBS_QuietS [Sd]
+CD_WDogs       equ     5  // WDogsCnt   (dr, TU)
+CD_WDogsN      equ     6  // {TU}
+CD_RSwChg      equ     7  // RSwChgs    (SC, TU)
+CD_RSwChgN     equ     8  // {TU}
+CD_TotSh       equ     9  // TotShotsW  (FS, [TH], TU)
+CD_TotShM      equ     10 // {[TH]}
+CD_TotShN      equ     11 // {TU}
+CD_Grave0      equ     12 // GraveW #0  (d#, [TH], TU)
+CD_GraveL      equ     60 // GraveW #++F(d#, [TH], TU)
+CD_Last        equ     60
+// Ph_Reload: Reload cycles countdown
+// Ph_Dead:   Dead cycles countdown
+
+       CurPktE:        rb 1 // +1 of last L2 packet byte received
+       XMitNib:        rb 1 // Transmit-remaining nibble (or 0)
+       PktNibble:      rb 1 // Recevied L2 packet hex nibble
+       CurPktS:        rb 1 // Addr of size of L2 packet being received
+       UserPktS:       rb 1 // Addr of size of 1st L2 packet in user queue
+       TimedL: rb 1 // Left digit of TimedDisp
+       TimedR: rb 1 // Right digit of TimedDisp
+       ConvDecW1:       // For use by ConvDecW
+       RxChkXSumW:     rw 1 // Computed xsum of incoming L2 packet
+       XMitXSumW:      rw 1 // XSum being computed during XMit
+       XMitType:       rb 1 // Actual XMit L3 Pkt type - One of PktN_* below
+
+ClearTop:
+
+public TotShotsW:      rw 1  // Fire statistics
+public RSwChgs:        rb 1  // Run-Time switch configuration change #
+public WDogsCnt:       rb 1  // # of gurus-WatchDog restarts since power-on
+
+public SwConfigXA      equ $-DataStart // Address of SwConfigX
+       SwConfigX:      rb 1 // Copy of SwitchP
+       SysFlagsX:      rb 1 // [XMittedN|XMitByte|XMit1stNib|XMitHaveP|TimedDisp|XMitting|PktGotNib|PktRcvng]
+PktRcvng       bit     SysFlagsX.0     // Currently receiving packet (after 's')
+PktGotNib      bit     SysFlagsX.1     // Already got one hex nibble in PktNibble
+XMitting       bit     SysFlagsX.2     // Background packet transmit in progress
+TimedDisp      bit     SysFlagsX.3 // Generated 2-digit display override
+XMitHaveP      bit     SysFlagsX.4     // XMitNib is prepared and filled
+XMit1stNib     bit     SysFlagsX.5     // Transmit 1st nibble from XMitNib
+XMitByte       bit     SysFlagsX.6     // Transmitting byte instead of two nibbles
+XMittedN       bit     SysFlagsX.7     // Sth was already xmitted this round
+public UsrFlagsX:      rb 1 // [RFU:2|FastFireRD|FullFireT|DisRSwChg|DispDotTR|DispDotRD|UnConfig]
+UnConfig       bit     UsrFlagsX.0     // Ignore all further configuration attempts
+DispDotRD      bit     UsrFlagsX.1     // Display LDot & RDot when [R]eload/[D]ead
+DispDotTR      bit     UsrFlagsX.2     // Display LDot & RDot when [T]ransmit/[R]eceive
+DisRSwChg      bit     UsrFlagsX.3     // Disable run-time switch reconfiguration
+FullFireT      bit     UsrFlagsX.4     // Transmit full 10B packets for fires (safer)
+FastFireRD     bit     UsrFlagsX.5     // Receive disable for FastFires (see FullFireT)
+
+/******************************/
+public Mark_Start      equ 's' // L1 layer packet start
+public Mark_End        equ 'e' // L1 layer packet end
+public XSum_Base       equ 0xB3A7      // L2 packet xsumming base number
+public XSum_Mul        equ 13  // L2 packet xsumming advance multiply
+public PktN_Fire       equ 'S' // L3 packet ID for fire
+public PktN_CfgR       equ 'R' // L3 packet ID for configuration request
+public PktN_CfgA       equ 'A' // L3 packet ID for configuration answer
+
+DispP  equ     P0
+BMD_U  equ     0x01
+BMD_UR equ     0x02
+BMD_UL equ     0x04
+BMD_M  equ     0x08
+BMD_BR equ     0x10
+BND_DOT        equ     5
+BBD_DOT        equ     DispP.BND_DOT
+BMD_DOT        equ     1<<BND_DOT
+BMD_B  equ     0x40
+BMD_BL equ     0x80
+
+MiscP  equ     P1
+BPM_DispR      equ     P1.0
+BMM_DispR      equ     0x01
+BPM_DispL      equ     P1.1
+BMM_DispL      equ     0x02
+BPM_Laser      equ     P1.2
+BMM_Laser      equ     0x04
+BMM_LED0       equ     0x08 // RED    ^ - cable up
+BMM_LED1       equ     0x10 // GREEN  <
+BMM_LED2       equ     0x20 // RED    >
+BNM_LED3       equ     6
+BMM_LED3       equ     1<<BNM_LED3 // GREEN v
+BMM_LEDM       equ     BMM_LED0|BMM_LED1|BMM_LED2|BMM_LED3
+BPM_Sound      equ     P1.7
+BMM_Sound      equ     0x80
+
+SwitchP        equ     P2
+BMS_IdentM     equ     0x0F // However defined, hard-coded
+BNS_IsTeam     equ     4
+BBS_IsTeam     equ     SwConfigX.BNS_IsTeam
+BNS_TeamN      equ     5       // 1=Green
+BBS_TeamN      equ     SwConfigX.BNS_TeamN
+BBS_QuietL     equ     SwConfigX.6     // 1=LEDs off
+BBS_QuietS     equ     SwConfigX.7     // 1=Disable
+
+IfaceP equ     P3
+BPI_Fire       equ     P3.2
+BPI_Status     equ     P3.4
+
+/******************************/
+Font__ equ     low~(0                                              )
+Font_0 equ     low~(0|BMD_U|BMD_UL|BMD_UR      |BMD_BL|BMD_BR|BMD_B)
+Font_1 equ     low~(0             |BMD_UR             |BMD_BR      )
+Font_2 equ     low~(0|BMD_U       |BMD_UR|BMD_M|BMD_BL       |BMD_B)
+Font_3 equ     low~(0|BMD_U       |BMD_UR|BMD_M       |BMD_BR|BMD_B)
+Font_4 equ     low~(0      |BMD_UL|BMD_UR|BMD_M       |BMD_BR      )
+Font_5 equ     low~(0|BMD_U|BMD_UL       |BMD_M       |BMD_BR|BMD_B)
+Font_6 equ     low~(0|BMD_U|BMD_UL       |BMD_M|BMD_BL|BMD_BR|BMD_B)
+Font_7 equ     low~(0|BMD_U       |BMD_UR             |BMD_BR      )
+Font_8 equ     low~(0|BMD_U|BMD_UL|BMD_UR|BMD_M|BMD_BL|BMD_BR|BMD_B)
+Font_9 equ     low~(0|BMD_U|BMD_UL|BMD_UR|BMD_M       |BMD_BR|BMD_B)
+Font_A equ     low~(0|BMD_U|BMD_UL|BMD_UR|BMD_M|BMD_BL|BMD_BR      )
+Font_B equ     low~(0      |BMD_UL       |BMD_M|BMD_BL|BMD_BR|BMD_B)
+Font_C equ     low~(0|BMD_U|BMD_UL             |BMD_BL       |BMD_B)
+Font_c_        equ     low~(0                    |BMD_M|BMD_BL       |BMD_B)
+Font_D equ     low~(0             |BMD_UR|BMD_M|BMD_BL|BMD_BR|BMD_B)
+Font_E equ     low~(0|BMD_U|BMD_UL       |BMD_M|BMD_BL       |BMD_B)
+Font_F equ     low~(0|BMD_U|BMD_UL       |BMD_M|BMD_BL             )
+Font_G equ     low~(0|BMD_U|BMD_UL             |BMD_BL|BMD_BR|BMD_B)
+Font_H equ     low~(0      |BMD_UL|BMD_UR|BMD_M|BMD_BL|BMD_BR      )
+Font_I equ     low~(0      |BMD_UL             |BMD_BL             )
+Font_L equ     low~(0      |BMD_UL             |BMD_BL       |BMD_B)
+Font_N equ     low~(0                    |BMD_M|BMD_BL|BMD_BR      )
+Font_O equ     low~(0|BMD_U|BMD_UL|BMD_UR      |BMD_BL|BMD_BR|BMD_B)
+Font_P equ     low~(0|BMD_U|BMD_UL|BMD_UR|BMD_M|BMD_BL             )
+Font_R equ     low~(0                    |BMD_M|BMD_BL             )
+Font_S equ     low~(0|BMD_U|BMD_UL       |BMD_M       |BMD_BR|BMD_B)
+Font_T equ     low~(0      |BMD_UL       |BMD_M|BMD_BL       |BMD_B)
+Font_U equ     low~(0      |BMD_UL|BMD_UR      |BMD_BL|BMD_BR|BMD_B)
+Font_Y equ     low~(0      |BMD_UL|BMD_UR|BMD_M       |BMD_BR|BMD_B)
+Font_MIN       equ     low~(0                    |BMD_M                    )
+Font_  equ     low~(0|BMD_U|BMD_UL|BMD_UR|BMD_M|BMD_BL|BMD_BR|BMD_B)
+
+/******************************/
+public GraveWA equ     $-DataStart // GraveW address
+public GraveW: rw 16 // Kills by players #0..#F
+// Config:
+LoadPart:
+public ReloadN:        rb 1  // Reload countdown
+public DeadN:  rb 1  // Dead state countdown
+public SeriC_Max:      rb 1  // Maximum # of shots per one series
+public Ammo_Max:       rb 1  // Ammo # in one clip
+public Ammo:   rb 1  // Remaining ammo in the current clip
+public DeadDivN:       rb 1  // 4LED-Dead -> Dead cycle divisor
+public T_Start:        rb 1  // Startup info cycle delay
+public T_Reload:       rb 1  // Reload cycle delay
+public T_Laser:        rb 1  // Laser firing
+public T_Delay:        rb 1  // Inter-Laser delay
+public T_First:        rb 1  // Additional series start delay period
+public T_LED4: rb 1  // 1 of RY-LED switch period
+public T_Scroll:       rb 1  // Scroll of one letter
+public T_ScrollF:      rb 1  // Scroll of 1st two letters
+public T_Dead: rb 1  // 4LED-Dead (and Dead) cycle delay
+public T_TimedD:       rb 1  // TimedDisp delay (temporary, non-scrolling)
+public AddrSpace       equ $-DataStart // +1 of remote configurable address space
+LoadPartS      equ     $-LoadPart
+       MagicRAM:       rw 1  // Contains MagicRAMw for RAM-check
+public RxBufSiz        equ 0x80+DataStart-$-StackSiz51 // Receive buffer size
+RxBuf: rb      RxBufSiz                // Receive buffer
+StackBtm:                              // Start of stack
+
+/******************************/
+       seg     code
+
+       org     0x0     // Reset, SUsage=6
+Reset:
+       jb      BPI_Fire,BadRAM
+       mov     a,#high MagicRAMw
+       xrl     a,MagicRAM
+       jnz     BadRAM
+       sjmp    ResCont
+
+       org     0xB     // T0, SUsage=4
+T0Int: push    psw
+       push    acc
+       inc     Timer
+       dec     WDogCnt
+       mov     a,WDogCnt
+       jnz     NWDogFail
+       inc     WDogsCnt                // Failing!
+WarmBoot:      mov     r0,#ClearTop-1  // Mustn't reset RAM
+       sjmp    ContBoot
+
+NWDogFail:     pop     acc
+       pop     psw
+       reti
+
+       org     0x23    // Ser, SUsage=14
+SerInt:        ajmp    SerICont
+
+SwRConfig:     inc     RSwChgs
+       sjmp    WarmBoot
+
+ResCont:       mov     a,#low MagicRAMw
+       xrl     a,MagicRAM+1
+       jz      SwRConfig
+BadRAM:        mov     MagicRAM,#high MagicRAMw
+       mov     MagicRAM+1,#low MagicRAMw
+       mov     r0,#LoadPart
+       mov     dptr,#LoadContn
+       mov     r2,#LoadPartS
+FillMem:       clr     a
+       movc    a,@a+dptr
+       mov     @r0,a
+       inc     r0
+       inc     dptr
+       djnz    r2,FillMem
+ColdBoot:      mov     r0,#LoadPart-1
+
+ContBoot:      clr     a
+       mov     IE,a
+       mov     TCON,a
+       mov     sp,#StackBtm-1
+
+ClearMem:      mov     @r0,a
+       djnz    r0,ClearMem
+
+       mov     SwConfigX,SwitchP
+       mov     SysFlagsX,a
+
+       mov     Timer,#1
+       mov     CurPktS,#RxBuf
+       mov     UserPktS,#RxBuf
+
+       mov     DispP,a
+       jb      BPI_Fire,0f
+       mov     MiscP,#~(BMM_DispL|BMM_DispR)
+       jnb     BPI_Fire,$
+       mov     a,SwitchP
+       xch     a,SwConfigX
+       xrl     a,SwConfigX
+       jz      0f
+       mov     Phase,#Ph_Test
+       setb    DispDotTR
+0:     mov     MiscP,#~BMM_DispR
+
+       mov     UsrFlagsX,#0x03 //DEBUG!!!
+
+       clr     a
+       mov     IP,#0x10        // Pri: Ser=1
+       mov     TCON,a
+       mov     TL1,#-BauDiv
+       mov     TH1,#-BauDiv
+       mov     TL0,a
+       mov     TH0,a
+       mov     TMOD,#0x20      // T1=m2, T0=m0
+       mov     PCON,a  // SerSpd=normal
+       mov     SCON,#0x50      // 8N1, T1, clr
+       mov     TCON,#0x50      // T1+T0=run, clr
+
+       mov     IE,#0x92        // Int: Ser+T0
+
+       mov     r0,#TimPhase
+       acall   StartTim
+       acall   InitLED4
+MainLoop:      mov     WDogCnt,#0      // Reset WatchDog
+// Check run-time change of configuration
+       jb      DisRSwChg,1f
+       mov     a,SwConfigX
+       xrl     a,SwitchP
+       jz      1f
+       ajmp    SwRConfig
+1:
+// Display refresh
+       mov     DispP,#0xFF
+       xrl     MiscP,#BMM_DispL|BMM_DispR
+       mov     a,Phase
+       jnb     BPM_DispR,0f
+       jnb     DispDotTR,6f
+       jb      Xmitting,7f
+6:     jnb     DispDotRD,1f
+       xrl     a,#Ph_Reload
+       jnz     1f
+7:     clr     BBD_DOT
+1:     mov     a,ScrollPtr
+       jnz     4f
+       mov     a,DispL
+       jnb     TimedDisp,2f
+       mov     a,TimedL
+       sjmp    2f
+
+0:     jnb     DispDotTR,8f
+       jb      PktRcvng,9f
+8:     jnb     DispDotRD,3f
+       xrl     a,#Ph_Dead
+       jnz     3f
+9:     clr     BBD_DOT
+3:     mov     a,ScrollPtr
+       jz      5f
+       inc     a
+4:     mov     dptr,#ScrBase
+       movc    a,@a+dptr
+       sjmp    2f
+
+5:     mov     a,DispR
+       jnb     TimedDisp,2f
+       mov     a,TimedR
+2:     anl     DispP,a
+// 4-LED cycle
+       jb      BBS_QuietL,NoLED4Fr
+       mov     a,Phase
+       xrl     a,#Ph_Dead
+       jz      NoLED4Fr
+       mov     r0,#TimLED4
+       acall   QueryTim
+       jnc     NoLED4Fr
+       jnb     BBS_IsTeam,1f
+       mov     a,#BMM_LED0|BMM_LED2
+       jnb     BBS_TeamN,5f
+       mov     a,#BMM_LED1|BMM_LED3
+5:     xrl     MiscP,a
+       sjmp    2f
+
+1:     mov     a,#~BMM_LEDM
+       orl     a,MiscP
+       rl      a
+       jb      acc.(BNM_LED3+1),4f
+       mov     a,#~BMM_LED0
+4:     orl     MiscP,#BMM_LEDM
+       anl     MiscP,a
+2:     mov     r0,#TimLED4
+       mov     a,T_LED4
+       acall   StartTim
+NoLED4Fr:
+// Fire series maintenance
+       jnb     BPI_Fire,0f
+       mov     SeriCnt,#0
+0:
+/*** Here end mandatory MainLoop routines ***/
+       mov     r0,#TimPhase
+       acall   QueryTim
+       jnc     NoPhases
+       mov     dptr,#PhaseTab
+       mov     r1,#Phase1
+       mov     a,Phase
+       acall   JmpByTab
+NoPhases:
+// Fire check
+       mov     a,Phase
+       jz      1f
+       dec     a
+       jnz     2f
+1:     jb      BPI_Status,0f
+       clr     a
+       mov     Phase,a
+       mov     Phase1,a
+       mov     r0,#TimPhase
+       acall   StartTim
+       sjmp    CantFire
+
+2:     cjne    a,#Ph_First-Ph_Ammo,CantFire
+       mov     a,SeriCnt
+       dec     a
+       jz      CantFire
+0:     jb      BPI_Fire,CantFire
+       mov     a,SeriCnt
+       subb    a,SeriC_Max
+       jnc     CantFire
+       mov     a,Ammo
+       jz      CantFire
+       jb      XMitting,CantFire
+// Fire one shot NOW!
+       inc     SeriCnt
+       mov     Phase,#Ph_Laser
+       dec     Ammo
+       clr     BPM_Laser
+       mov     c,BBS_QuietS
+       mov     BPM_Sound,c
+       inc     TotShotsW+1
+       mov     a,TotShotsW+1
+       jnz     1f
+       inc     TotShotsW
+1:     mov     a,#PktN_Fire
+       acall   StartXMiX
+       mov     ScrollPtr,#0
+       acall   DispAmmo
+       mov     a,T_Laser
+       mov     r0,#TimPhase
+       acall   StartTim
+CantFire:
+// Scroll Update
+       mov     r0,#TimScroll
+       acall   QueryTim
+       jnc     6f
+       clr     TimedDisp
+       mov     a,ScrollPtr
+       jz      6f
+       mov     dptr,#ScrBase+2
+       movc    a,@a+dptr
+       jnz     0f
+       mov     ScrollPtr,a
+       sjmp    6f
+
+0:     inc     ScrollPtr
+       mov     a,ScrollPtr
+       movc    a,@a+dptr
+       jnz     1f
+       mov     a,T_ScrollF
+       sjmp    2f
+
+1:     mov     a,T_Scroll
+2:     acall   StartTim
+6:
+// Packet received?
+       mov     a,UserPktS
+       mov     r0,a
+       xrl     a,CurPktS
+       jnz     0f
+GotNoSerS:     ajmp    GotNoSer
+
+ShortPkt:      mov     a,r0
+       acall   RxBufInc
+       push    0 //r0
+       mov     r0,a
+       sjmp    ProcSPkt
+
+0:     mov     a,@r0
+;      jb      acc.7,ShortPkt
+       jb      XMitting,GotNoSerS
+       inc     a
+       add     a,r0
+       subb    a,#RxBuf+RxBufSiz
+       jnc     1f
+       add     a,#RxBufSiz
+1:     add     a,#RxBuf
+       push    acc
+       mov     a,@r0
+       clr     c
+       subb    a,#3
+       jc      FailRPktN
+       mov     @r0,a
+       push    0 //r0
+       inc     a
+       mov     r2,a
+       acall   RxBufInc
+       mov     r1,#RxChkXSumW+1
+       mov     @r1,#low XSum_Base
+       dec     r1
+       mov     @r1,#high XSum_Base
+0:     mov     a,@r0
+       acall   AddXSum
+       acall   RxBufInc
+       djnz    r2,0b
+       pop     2 //r2
+       mov     a,@r0
+       xrl     a,@r1
+FailRPktN:     jnz     FailRPktS
+       acall   RxBufInc
+       mov     a,@r0
+       inc     r1
+       xrl     a,@r1
+       jnz     FailRPktS
+// XSum is correct
+       mov     a,r2
+       mov     r0,a
+       mov     a,@r0
+       mov     r2,a
+       acall   RxBufInc
+       mov     a,@r0
+       mov     r3,a
+       acall   RxBufInc
+       cjne    r3,#PktN_Fire,NoPFire
+       cjne    r2,#1,FailRPktS
+// Fire packet received, @R0=remote SwConfigX
+ProcSPkt:      mov     a,@r0
+       jnb     BBS_IsTeam,ShotDown // We're anarchy
+       jnb     acc.BNS_IsTeam,ShotDown // From anarchy one
+       xrl     a,SwConfigX
+       jnb     acc.BNS_TeamN,FriendS // One of our team
+       mov     a,@r0
+ShotDown:      xrl     a,SwConfigX
+       anl     a,#BMS_IdentM
+       jz      FriendS
+// Really shot by enemy
+       mov     TimedL,#Font_E
+       mov     a,Phase
+       xrl     a,#Ph_Dead
+       jz      PrintIDR
+       mov     a,@r0
+       anl     a,#0x0F
+       rl      a
+       add     a,#GraveW+1
+       mov     r1,a
+       inc     @r1
+       mov     a,@r1
+       jnz     0f
+       dec     r1
+       inc     @r1
+0:     mov     TimedL,#Font_S
+       mov     Phase,#Ph_Dead
+       mov     Phase1,DeadN
+       anl     MiscP,#~BMM_LEDM
+       push    0 //r0
+       acall   NxtDead
+       pop     0 //r0
+       sjmp    PrintIDR
+
+FriendS:       mov     TimedL,#Font_F
+PrintIDR:      mov     a,@r0
+       anl     a,#0x0F
+       mov     dptr,#FontHex
+       movc    a,@a+dptr
+       mov     TimedR,a
+       setb    TimedDisp
+       mov     ScrollPtr,#0
+       mov     a,T_TimedD
+       mov     r0,#TimScroll
+       acall   StartTim
+FailRPktS:     sjmp    FailRPkt
+
+NoPFire:       cjne    r3,#PktN_CfgR,NoPCfgR
+       jnb     XMitting,0f
+       dec     sp
+       sjmp    GotNoSer
+
+0:     mov     a,@r0
+       xrl     a,SwConfigX
+       anl     a,#BMS_IdentM
+       jnz     FailRPkt
+       acall   RxBufInc2
+CfgNBlock:     mov     a,r2
+       jz      FailRPkt
+       mov     a,@r0
+       acall   RxBufInc2
+       jz      CRRepRes
+       mov     r3,a
+       mov     a,r2
+       jz      FailRPkt
+       mov     a,@r0
+       acall   RxBufInc2
+       mov     r1,a
+CfgBlock:      mov     a,r2
+       jz      FailRPkt
+       mov     a,@r0
+       acall   RxBufInc2
+       push    acc
+       mov     a,r1
+       clr     c
+       subb    a,#AddrSpace
+       pop     acc
+       jnc     SkipWrite
+       jb      UnConfig,SkipWrite
+       mov     @r1,a
+SkipWrite:     inc     r1
+       djnz    r3,CfgBlock
+       sjmp    CfgNBlock
+
+CRRepRes:      pop     acc
+       clr     c
+       subb    a,#RxBuf+2
+       jnc     0f
+       add     a,#RxBufSiz
+0:     add     a,#RxBuf
+       mov     CAPktEnd,a
+       mov     a,r0
+       mov     UserPktS,a
+       mov     a,#CfgRS-ScrBase
+       acall   DoScroll
+       mov     a,#PktN_CfgA
+       acall   StartXMiX
+       sjmp    GotNoSer
+
+NoPCfgR:       cjne    r3,#PktN_CfgA,FailRPkt
+       mov     a,#CfgAS-ScrBase
+ScrRPkt:       acall   DoScroll
+FailRPkt:      pop     UserPktS
+
+GotNoSer:
+
+       ajmp    MainLoop
+
+/******************************/
+PhaseTab:
+       db      PhCfgDump-PhaseTab
+       db      PhAmmo   -PhaseTab
+       db      PhLaser  -PhaseTab
+       db      PhDelay  -PhaseTab
+       db      PhFirst  -PhaseTab
+       db      PhReload -PhaseTab
+       db      PhDead   -PhaseTab
+       db      PhTest   -PhaseTab
+
+PhCfgDump:     mov     a,T_TimedD
+       acall   StartTim
+SkpCDump:      inc     @r1
+       mov     dptr,#CfgDTab
+       mov     a,@r1
+       clr     c
+       subb    a,#CD_Grave0
+       jnc     CDGrave
+       mov     a,@r1
+JmpByTab:      movc    a,@a+dptr
+       jmp     @a+dptr
+
+PhLaser:       orl     MiscP,#BMM_Laser|BMM_Sound
+       inc     Phase
+       mov     a,T_Delay
+       sjmp    StartTimS
+
+PhDelay:       inc     Phase
+       mov     a,Ammo
+       jz      PD_Reload       // Do Reload
+       mov     a,T_First
+       sjmp    StartTimS
+
+PhTest:        jb      XMitting,PT_WaitTI
+       mov     a,#TestChar
+       acall   StartXMiX
+PT_WaitTI:
+       mov     a,SwConfigX
+       swap    a
+       rr      a
+       anl     a,#0x78
+       sjmp    StartTimS
+
+PD_Reload:     inc     Phase
+       mov     Phase1,ReloadN
+       mov     Ammo,Ammo_Max
+       mov     a,#ReloadS-ScrBase
+       acall   DoScroll
+PhReload:      dec     Phase1
+       mov     a,Phase1
+       jz      NormAmmo
+       mov     DispL,#Font_L
+       mov     a,Phase1
+       acall   PutHexFnR
+       mov     a,T_Reload
+       sjmp    StartTimP
+
+PhDead:        xrl     MiscP,#BMM_LEDM
+       dec     Phase1
+       mov     a,Phase1
+       jz      RAmmonLED
+NxtDead:       mov     B,DeadDivN
+       div     aB
+       xch     a,B
+       jnz     0f
+       mov     DispL,#Font_D
+       mov     a,B
+       acall   PutHexFnR
+0:     mov     a,T_Dead
+StartTimP:     mov     r0,#TimPhase
+StartTimS:     ajmp    StartTim
+
+RAmmonLED:     acall   InitLED4
+PhFirst:
+NormAmmo:      mov     Phase,#Ph_Ammo
+PhAmmo:        // PhAmmo shouldn't happen <= no timer
+       ajmp    DispAmmo
+
+CDGrave:       cjne    a,#CD_Last-CD_Grave0,1f
+       sjmp    NormAmmo
+
+1:     mov     B,#3
+       div     aB
+       mov     r2,a
+       rl      a
+       add     a,#GraveW
+       mov     r0,a
+       mov     a,@r0
+       inc     r0
+       orl     a,@r0
+       jz      SkpCDump2
+       mov     a,B
+       cjne    a,#0,0f
+       mov     DispL,#Font_D
+       mov     a,r2
+PutHexFnR:     mov     dptr,#FontHex
+       ajmp    PutFontR
+
+0:     dec     r0
+       mov     r3,a
+       acall   ConvDecW
+       cjne    r3,#1,DispHexS
+       mov     a,@r0
+       sjmp    DispHexS
+
+CfgDTab        equ     $-1
+       db      CDPNum   -CfgDTab
+       db      CDGMode  -CfgDTab
+       db      CDLEDs   -CfgDTab
+       db      CDSound  -CfgDTab
+       db      CDWDogs  -CfgDTab
+       db      CDWDogsN -CfgDTab
+       db      CDRSwChg -CfgDTab
+       db      CDRSwChgN-CfgDTab
+       db      CDTotSh  -CfgDTab
+       db      CDTotShM -CfgDTab
+       db      CDTotShN -CfgDTab
+
+CDPNum:        mov     DispL,#Font_P
+       mov     a,SwConfigX
+       anl     a,#0x0F
+       sjmp    PutHexFnR
+
+CDGMode:       mov     DispL,#Font_G
+       mov     a,#Font_A
+       jnb     BBS_IsTeam,DoGaMode
+       mov     a,#Font_R
+       jnb     BBS_TeamN,DoGaMode
+       mov     a,#Font_G
+DoGaMode:      mov     DispR,a
+       ret
+
+CDLEDs:        jnb     BBS_QuietL,SkpCDumpS
+       mov     DispL,#Font_L
+       mov     DispR,#Font_D
+       ret
+
+CDSound:       jnb     BBS_QuietS,SkpCDumpS
+       mov     DispL,#Font_S
+       mov     DispR,#Font_D
+       ret
+
+CDWDogs:       mov     a,WDogsCnt
+       jz      SkpCDump1
+       mov     DispL,#Font_D
+       mov     DispR,#Font_R
+       ret
+
+SkpCDump2:     inc     @r1
+SkpCDump1:     inc     @r1
+SkpCDumpS:     ajmp    SkpCDump
+
+CDWDogsN:      mov     a,WDogsCnt
+       sjmp    DispDecS
+
+CDRSwChg:      mov     a,RSwChgs
+       jz      SkpCDump1
+       mov     DispL,#Font_S
+       mov     DispR,#Font_C
+       ret
+
+CDRSwChgN:     mov     a,RSwChgs
+DispDecS:      ajmp    DispDec
+
+CDTotSh:       mov     a,TotShotsW
+       orl     a,TotShotsW+1
+       jz      SkpCDump2
+       mov     DispL,#Font_F
+       mov     DispR,#Font_S
+       ret
+
+CDTotShM:      mov     r0,#TotShotsW
+       acall   ConvDecW
+       mov     a,@r0
+       sjmp    DispHexS
+
+CDTotShN:      mov     r0,#TotShotsW
+       acall   ConvDecW
+DispHexS:      ajmp    DispHex
+/******************************/
+SerICont:      push    psw
+       push    acc
+       push    0 //r0
+       push    2 //r2
+RetryRI:       jbc     RI,GotRI
+RetryTI:       jbc     TI,GotTI
+       pop     2 //r2
+       pop     0 //r0
+       pop     acc
+       pop     psw
+       reti
+/******************************/
+GotRI: mov     a,SBUF
+       jnb     acc.7,5f
+       jb      FastFireRD,ScratchRI
+       jb      acc.6,ScratchRI
+       mov     r0,CurPktS
+       mov     @r0,a
+       acall   RxBufInc
+       mov     a,r0
+       xrl     a,UserPktS
+       jz      ScratchRI
+       mov     a,r0
+       mov     CurPktS,a
+       sjmp    ScratchRI
+
+5:     cjne    a,#Mark_Start,0f
+       mov     r0,CurPktS
+       acall   RxBufInc
+       mov     a,r0
+       xrl     a,UserPktS
+       jz      ScratchRI
+       mov     CurPktE,r0
+       setb    PktRcvng
+       clr     PktGotNib
+       sjmp    RetryRI
+
+0:     cjne    a,#Mark_End,1f
+       jnb     PktRcvng,RetryRI
+       jb      PktGotNib,ScratchRI
+       clr     PktRcvng
+       mov     a,CurPktE
+       mov     r0,CurPktS
+       clr     c
+       subb    a,r0
+       jnc     3f
+       add     a,#RxBufSiz
+3:     dec     a
+       jz      RetryRI
+       mov     @r0,a
+       mov     a,CurPktE
+       mov     CurPktS,a
+// Successfuly received packet
+       sjmp    RetryRI
+
+1:     jnb     PktRcvng,RetryRI
+       clr     c
+       subb    a,#'0'
+       jc      ScratchRI
+       subb    a,#10
+       jc      GotRITen
+       subb    a,#'A'-('9'+1)
+       jc      ScratchRI
+       subb    a,#6
+       jc      GotRISix
+ScratchRI:     clr     PktRcvng
+RetryRIS:      sjmp    RetryRI
+/******************************/
+GotTI: jnb     XMitting,RetryTI
+       clr     XMittedN
+       jnb     XMitHaveP,PrepXMit
+       mov     a,XMitNib
+SendPrepd:     jb      XMittedN,RetryTIS
+       jbc     XMitByte,XMitByteC
+       jnb     XMit1stNib,Have2ndN
+       swap    a
+Have2ndN:      anl     a,#0x0F
+       add     a,#'0'
+       mov     r2,a
+       clr     c
+       subb    a,#'9'+1
+       mov     a,r2
+       jc      XMitByteC
+       add     a,#'A'-('9'+1)
+XMitByteC:     mov     SBUF,a
+       setb    XMittedN
+       mov     c,XMit1stNib
+       clr     XMit1stNib
+       mov     XMitHaveP,c
+       jnc     PrepXMit
+RetryTIS:      ajmp    RetryTI
+/******************************/
+GotRISix:      add     a,#6
+GotRITen:      add     a,#10
+       jb      PktGotNib,2f
+       swap    a
+       mov     PktNibble,a
+       sjmp    DoneFNRI
+
+2:     orl     a,PktNibble
+       mov     r2,a
+       mov     r0,CurPktE
+       acall   RxBufInc
+       mov     a,UserPktS
+       xrl     a,r0
+       jz      ScratchRI
+       mov     a,r0
+       xch     a,CurPktE
+       mov     r0,a
+       mov     a,r2
+       mov     @r0,a
+DoneFNRI:      cpl     PktGotNib
+       sjmp    RetryRIS
+/******************************/
+PrepXMit:      mov     a,XMitPhase
+       mov     dptr,#PhXMitTab
+       movc    a,@a+dptr
+       jmp     @a+dptr
+
+PhXMitTab:     db      XPStart -PhXMitTab
+       db      XPType  -PhXMitTab
+       db      XPSwCfg -PhXMitTab
+       db      XPData  -PhXMitTab
+       db      XPXSumH -PhXMitTab
+       db      XPXSumL -PhXMitTab
+       db      XPEnd   -PhXMitTab
+       db      XPFinish-PhXMitTab
+
+InvalCR:       mov     CAPktEnd,a
+XPFinish:      clr     XMitting
+       sjmp    RetryTIS
+
+XPStart:       mov     a,XMitType
+       xrl     a,#TestChar
+       jnz     1f
+       mov     a,#TestChar
+       sjmp    2f
+
+1:     xrl     a,#TestChar^PktN_Fire
+       jnz     0f
+       jb      FullFireT,0f
+       mov     a,SwConfigX
+       clr     acc.6
+       setb    acc.7
+2:     mov     XMitPhase,#6    //XPFinish-1
+       sjmp    ContXMitB
+
+0:     mov     a,#Mark_Start
+ContXMitB:     setb    XMitByte
+       inc     XMitPhase
+       clr     XMit1stNib
+ContXMit:      setb    XMitHaveP
+       mov     XMitNib,a
+       ajmp    SendPrepd
+
+XPType:        mov     XMitXSumW  ,#high XSum_Base
+       mov     XMitXSumW+1,#low  XSum_Base
+       mov     a,XMitType
+XMitXHexP:     inc     XMitPhase
+XMitXHex:      push    1 //r1
+       push    3 //r3
+       push    B
+       mov     r1,#XMitXSumW
+       push    acc
+       acall   AddXSum
+       pop     acc
+       pop     B
+       pop     3 //r3
+       pop     1 //r1
+XMitHex:       clr     XMitByte
+       setb    XMit1stNib
+       sjmp    ContXMit
+
+XPSwCfg:       mov     a,SwConfigX
+       sjmp    XMitXHexP
+
+XPData:        mov     a,XMitType
+       xrl     a,#PktN_CfgA
+       jnz     XPDatDone
+       mov     r0,UserPktS
+NxtBlock:      mov     a,r0
+       xrl     a,CAPktEnd
+       jz      DoneAns
+       mov     a,@r0
+       dec     @r0
+       mov     r2,a
+       acall   RxBufInc
+       mov     a,r0
+       xrl     a,CAPktEnd
+       jz      InvalCR // Invalid CfgReq
+       mov     a,r2
+       jz      DoneBlock
+       mov     a,@r0
+       inc     @r0
+       mov     r0,a
+       mov     a,@r0
+       sjmp    XMitXHex
+
+DoneBlock:     acall   RxBufInc
+       mov     UserPktS,r0
+       mov     a,r0
+       xrl     a,CAPktEnd
+       jnz     NxtBlock
+DoneAns:       mov     CAPktEnd,a      // Cancel CfgA pending alert
+       acall   RxBufInc
+       acall   RxBufInc
+       mov     UserPktS,r0
+XPDatDone:     inc     XMitPhase
+XPXSumH:       mov     a,XMitXSumW
+XMitHexP:      inc     XMitPhase
+       sjmp    XMitHex
+
+XPXSumL:       mov     a,XMitXSumW+1
+       sjmp    XMitHexP
+
+XPEnd: mov     a,#Mark_End
+       sjmp    ContXMitB
+
+/******************************/
+StartXMiX:     mov     XMitType,a
+       clr     a
+       mov     XMitPhase,a
+       clr     XMitHaveP
+       setb    XMitting
+       setb    TI      // Start XMit now!
+       ret
+/******************************/
+// I: A=text offset, O: Filled DispL+DispR, D: A,R0,R2
+DoScroll:      mov     ScrollPtr,a
+       mov     r0,#TimScroll
+       mov     a,T_ScrollF
+       sjmp    StartTim
+/******************************/
+// O: Filled DispL+DispR, D: A,B,R2
+DispAmmo:      mov     a,Ammo
+// I: A=decimal, O: Filled DispL+DispR, D: A,B,R2
+DispDec:       mov     R2,a
+       clr     c
+       subb    a,#100
+       jnc     0f
+       mov     a,MaxDecimal
+0:     mov     a,R2
+       mov     B,#10
+       div     aB
+       swap    a
+       orl     a,B
+// I: A=hexadecimal, O: Filled DispL+DispR, D: A,R2
+DispHex:       mov     dptr,#FontHex
+       mov     R2,a
+       swap    a
+       anl     a,#0x0F
+       movc    a,@a+dptr
+       mov     DispL,a
+       mov     a,R2
+       anl     a,#0x0F
+PutFontR:      movc    a,@a+dptr
+       mov     DispR,a
+Ret1:  ret
+/******************************/
+InitLED4:      orl     MiscP,#BMM_LEDM
+       jb      BBS_QuietL,Ret1
+       anl     MiscP,#~BMM_LED0
+       jnb     BBS_IsTeam,0f
+       jnb     BBS_TeamN,0f
+       xrl     MiscP,#BMM_LED0|BMM_LED1
+0:     mov     r0,#TimLED4
+       mov     a,T_LED4
+/******************************/
+// I: R0=addr of byte, A=min time, O: @R0!=0, D:A
+StartTim:      add     a,Timer
+       jnz     0f
+       inc     a
+0:     mov     @R0,a
+       ret
+/******************************/
+// I: R0=addr of byte, C=1->success, D:A
+QueryTim:      mov     a,@R0
+       clr     c
+       jz      0f
+       subb    a,Timer
+       mov     c,acc.7
+       jnc     0f
+       clr     a
+       mov     @R0,a
+0:     ret
+/******************************/
+RxBufInc2:     dec     r2
+// I: R0=RxAddr, O: R0=RxAddr+1
+RxBufInc:      inc     r0
+       cjne    r0,#RxBuf+RxBufSiz,0f
+       mov     r0,#RxBuf
+0:     ret
+/******************************/
+// I: @R1/W=xsum, A=Byte, O: @R1/W=xsum+Byte, D:A,B,R3
+AddXSum:       push    2 //r2
+       push    acc
+       inc     r1
+       inc     @r1
+       mov     a,@r1
+       dec     r1
+       jnz     0f
+       inc     @r1
+0:     mov     B,#XSum_Mul
+       mul     aB
+       mov     r2,a
+       mov     r3,B
+       mov     a,@r1
+       mov     B,#XSum_Mul
+       mul     aB
+       add     a,r3
+       mov     r3,a
+       pop     acc
+       add     a,r2
+       inc     r1
+       mov     @r1,a
+       dec     r1
+       mov     a,r3
+       addc    a,#0
+       mov     @r1,a
+       pop     2 //r2
+       ret
+// I: R0=SrcWord, O: R0=ConvDecW1, A=LOW [R0/W], D:R1,R2
+ConvDecW:
+       inc     sp
+       mov     r1,sp
+       inc     sp
+       mov     a,@r0
+       mov     @r1,a
+       inc     r0
+       inc     r1
+       mov     a,@r0
+       mov     @r1,a
+       mov     dptr,#CDW_Tab
+       mov     r2,#4
+       mov     r0,#ConvDecW1
+3:     xchd    a,@r0
+       swap    a
+       mov     @r0,a
+       inc     r0
+       clr     a
+       xchd    a,@r0
+       swap    a
+       mov     @r0,a
+2:     mov     a,#1
+       movc    a,@a+dptr
+       mov     B,a
+       mov     a,@r1
+       clr     c
+       subb    a,B
+       push    acc
+       dec     r1
+       clr     a
+       movc    a,@a+dptr
+       mov     B,a
+       mov     a,@r1
+       subb    a,B
+       jc      1f
+       mov     @r1,a
+       pop     acc
+       inc     r1
+       mov     @r1,a
+       inc     @r0
+       sjmp    2b
+
+1:     dec     sp
+       inc     dptr
+       inc     dptr
+       inc     r1
+       mov     a,@r0
+       dec     r0
+       djnz    r2,3b
+       dec     sp
+       dec     sp
+       ret
+/******************************/
+
+ScrBase:       // Every text offset must >0 !!!
+FontHex:       db      Font_0,Font_1,Font_2,Font_3,Font_4,Font_5,Font_6,Font_7
+       db      Font_8,Font_9,Font_A,Font_B,Font_C,Font_D,Font_E,Font_F
+ReloadS:       db      Font_R,Font_E,Font_L,Font_O,Font_A,Font_D,0
+CfgAS: db      Font_C,Font_O,Font_N,Font_F,Font_I,Font_G
+       db      Font_A,Font_N,Font_S,0
+CfgRS: db      Font_C,Font_O,Font_N,Font_F,Font_I,Font_G
+       db      Font_U,Font_R,Font_E,Font_D,0
+       if      ($-ScrBase>=0x100) ScrBase equ 0
+/******************************/
+CDW_Tab:       dw      1000,100,10,1
+
+LoadContn:
+       db      12      // Reload countdown
+       db      40      // Dead state countdown
+       db      15      // Maximum # of shots per one series
+       db      40      // Ammo # in one clip
+       db      40      // Remaining ammo in the current clip
+       db      4       // 4LED-Dead -> Dead cycle divisor
+       db      100     // Startup info cycle delay
+       db      48      // Reload cycle delay
+       db      8       // Laser firing
+       db      2       // Inter-Laser delay
+       db      24      // Additional series start delay period
+       db      32      // 1 of RY-LED switch period
+       db      25      // Scroll of one letter
+       db      50      // Scroll of 1st two letters
+       db      24      // 4LED-Dead (and Dead) cycle delay
+       db      110     // TimedDisp delay (temporary, non-scrolling)
+       if      ($-LoadContn!=LoadPartS) LoadPartS equ 0
diff --git a/project/LaserGame/ListItem.pm b/project/LaserGame/ListItem.pm
new file mode 100755 (executable)
index 0000000..a0f2c8f
--- /dev/null
@@ -0,0 +1,54 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::LaserGame' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::LaserGame::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"LaserGame",
+               "platform"=>"amiga",
+               "priority"=>550,
+               "icon"=>"hw-icon.jpeg",
+               "download"=>"LaserGame.lha",
+               "link-Intel 8051 source file"=>"LaserGun.a51",
+               "summary"=>"Firmware and config tool for shooting gun",
+               "license"=>"PD",
+               "maintenance"=>"obsolete-Config tool is written for the discontinued Amiga platform.",
+               "language"=>"i8051 asm, 680x0 asm",
+               "description"=><<"HERE",
+<p>LaserGame is a clone of commercial shoot'n'run game. Each player has its
+own hardware with multiple infra detecting sensor and one laser/infra gun.
+Shooting is visually targeting by red laser diode while the shooting
+information is being emitted by infrared.</p>
+<p>Its Amiga communication tool will receive shooting statistics while being
+also capable of remote hardware configuration.</p>
+<p>Hardware part done by
+@{[ a_href 'http://www.pavouk.org/','Pavel "Pavouk" Ruzicka' ]}.</p>
+HERE
+               );
+
+1;
diff --git a/project/LaserGame/Makefile.am b/project/LaserGame/Makefile.am
new file mode 100644 (file)
index 0000000..c848438
--- /dev/null
@@ -0,0 +1,24 @@
+# $Id$
+# automake source for the Makefile of project/LaserGame/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl \
+       LaserGame.png
diff --git a/project/LaserGame/hw-icon.jpeg b/project/LaserGame/hw-icon.jpeg
new file mode 100644 (file)
index 0000000..b893746
Binary files /dev/null and b/project/LaserGame/hw-icon.jpeg differ
diff --git a/project/LaserGame/hw.jpeg b/project/LaserGame/hw.jpeg
new file mode 100644 (file)
index 0000000..75c8405
Binary files /dev/null and b/project/LaserGame/hw.jpeg differ
diff --git a/project/List.html.pl b/project/List.html.pl
new file mode 100755 (executable)
index 0000000..0e0e588
--- /dev/null
@@ -0,0 +1,162 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# List of projects Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::List;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+Wrequire 'My::Project';
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Project List',
+               "args_check"=>{
+                               "platform"=>'^(?:platform)?$',
+                               },
+               "rel_up"=>top_dir(),
+               "rel_start"=>top_dir(),
+               "footer_ids"=>0,
+               );
+My::Web->heading();
+
+my $CGI=CGI->new();
+
+print My::Project->views(($W->{"args"}{"platform"} ? "BriefPlatform" : "BriefUnified"));
+print My::Project->platforms(undef()) if $W->{"args"}{"platform"};
+
+my %item=( My::Project::item_hash_read() );
+
+# $col{"name"}{"show"}=1
+# $col{"name"}{"format"}=sub { "<".$_[0].">"; }
+# $col{"name"}{""}="Project name";
+# @col_order
+
+my @row_order=qw(-priority);
+my @col_order=qw(name summary license maintenance language);
+my %col;
+
+sub format_url ($) { return (!$_[0] ? "" : '<a href="'.$_[0].'">X</a>'); }
+
+$col{"name"}{"format"}=sub {
+               $_[0]=~s#<a\s[^>]*>([^<]*)</a>#$1#g;
+               return "<a href=\"".$_[1]."/\">"
+                               .(!$My::Web::W->{"args"}{"W"} ? "" : $item{$_[1]}{"priority"}.":")
+                               .$_[0]."</a>";
+               };
+
+$col{"license"}{"format"}=sub {
+               my %known=(
+                               "PD"=>"<a href=\"http://www.gnu.org/philosophy/categories.html#PublicDomainSoftware\">PD</a>",
+                               "GPL"=>"<a href=\"http://www.gnu.org/licenses/gpl.html\">GPL</a>",
+                               "LGPL"=>"<a href=\"http://www.gnu.org/licenses/lgpl.html\">LGPL</a>",
+                               );
+               return $known{$_[0]} if $known{$_[0]};
+               return $_[0];
+               };
+
+$col{"maintenance"}{"format"}=sub {
+               return ($_[0]=~/^([^-]*)/)[0];
+               };
+
+$col{"online-demo"}{"format"}=\&format_url;
+$col{"download"}{"format"}=\&format_url;
+$col{"name"}{""}="Project Name";
+$col{"summary"}{""}="Abstract";
+$col{"license"}{""}="Copying";
+$col{"maintenance"}{""}="State";
+$col{"language"}{""}="Language";
+
+# Fill in cols not contained in @col_order
+if (0) {
+       my %col_order=map(($_=>1),@col_order);
+       push @col_order,map({ ($col_order{$_} ? () : $_); } keys(%{{ map(($_=>1),map((keys(%{$item{$_}})),keys(%item)))}}));
+       }
+
+my $print_one_platform=sub ($)
+{
+my($platform)=@_;
+
+       print '<table border="1">'."\n";
+               print '<tr>';
+                       for my $col (@col_order) {
+                               next if defined $col{$col}{"show"} && !$col{$col}{"show"};
+                               print '<th>'.($col{$col}{""} || "[$col]").'</th>';
+                               }
+               print '</tr>'."\n";
+               my @rows_ordered=sort {
+                               for my $order_by (@row_order,"name") {
+                                       my $order_by=$order_by;
+                                       my $minus=($order_by=~s/^(-)//)[0];
+                                       # FIXME: 'cmp' or '<=>'?
+                                       my $r=($item{$a}{$order_by} <=> $item{$b}{$order_by});
+                                       $r=-$r if $minus;
+                                       return $r if $r;
+                                       }
+                               return 0;
+                               } map(($platform && $item{$_}{"platform"} ne $platform ? () : ($_)),keys(%item));
+               for my $row (@rows_ordered) {
+                       print '<tr>';
+                       for my $col (@col_order) {
+                               next if defined $col{$col}{"show"} && !$col{$col}{"show"};
+                               print '<td>';
+                               if (!$col{$col}{"format"}) {
+                                       print(($item{$row}{$col} || ""));
+                                       }
+                               else {
+                                       print(&{$col{$col}{"format"}}($item{$row}{$col},$row));
+                                       }
+                               print '</td>';
+                               }
+                       print '</tr>'."\n";
+                       if ($CGI->param("description_opt")) {
+                               print '<tr><td style="border: none;"></td>';
+                               print '<td colspan="'.(scalar(@col_order)-1).'"><blockquote>'.$item{$row}{"description"}.'</blockquote></td>';
+                               print '</tr>'."\n";
+                               print '<tr><td style="border: none;" colspan="'.scalar(@col_order).'">&nbsp;</td></tr>'."\n";
+                               }
+                       }
+       print '</table>'."\n";
+};
+
+
+if (!$W->{"args"}{"platform"}) {
+       &{$print_one_platform}(undef());
+       }
+else {
+       my @platforms=@My::Project::platforms;
+       while (@platforms) {
+               my $platform_sym =shift @platforms;
+               my $platform_name=shift @platforms;
+               print '<a name="'.$platform_sym.'">';
+               print "<h2>$platform_name</h2>";
+               print '</a>'."\n";
+               &{$print_one_platform}($platform_sym);
+               }
+       }
+
+
+My::Web->footer();
index 59c3e05..85a159e 100644 (file)
@@ -20,7 +20,7 @@ include $(top_srcdir)/Makefile-head.am
 
 SUBDIRS= \
                step            \
-               icp             \
+               Islet           \
                FordFulk        \
                Heat            \
                kix             \
@@ -54,11 +54,41 @@ SUBDIRS= \
                cvsutil         \
                cvsbranchdiff   \
                ppp9k           \
-               LaceMail        \
-               line9k
+               PerlMail        \
+               line9k          \
+               captive         \
+               PortDiag        \
+               CasioA          \
+               LaserGame       \
+               ShortRel        \
+               TraceFS         \
+               AutoGen         \
+               gsmperl         \
+               332             \
+               lynxilla        \
+               wayback         \
+               kewensis        \
+               QueryDev        \
+               SClock          \
+               ResRAM          \
+               ssht            \
+               postget         \
+               middleman       \
+               phphash         \
+               energie         \
+               MyWeb           \
+               pgsqlsubstr     \
+               int13sniff      \
+               libtool         \
+               muttsort        \
+               gladewsrc       \
+               etherealmmse    \
+               etherealwsp     \
+               libxml2reader
 
 EXTRA_DIST+= \
-       list.cgi.pl
-
-#noinst_DATA+= \
-#      index.html
+               Index.html.pl \
+               ChangeLog.txt.pl \
+               Pod2Html.html.pl \
+               List.html.pl \
+               Rel.pl
similarity index 67%
rename from project/Nokia61/index.html.pl
rename to project/MyWeb/Index.html.pl
index bb28341..2f48d0c 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Main page of 'My::Project::Nokia61'
+# Main page of 'My::Project::MyWeb'
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::MyWeb::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::Nokia61::ListItem;
+Wuse 'My::Project';
+Wuse 'project::MyWeb::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::Nokia61::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::MyWeb::ListItem::ListItem,
                );
 
-print <<'HERE';
-<iframe src="Nokia61.php?base=.%2F" width="90%" height="500" />
-<a href="Nokia61.php?base=.%2F">Program on-line</a>.
-</iframe>
-HERE
-
 My::Web->footer();
diff --git a/project/MyWeb/ListItem.pm b/project/MyWeb/ListItem.pm
new file mode 100755 (executable)
index 0000000..56d1289
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::MyWeb' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::MyWeb::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"My::Web",
+               "platform"=>"web",
+               "priority"=>250,
+               "cvs"=>"www/www.jankratochvil.net",
+               "link-Example web"=>a_href('http://www.jankratochvil.net/'),
+               "summary"=>a_href('http://www.perl.org/','Perl')." web framework",
+               "license"=>"GPL",
+               "maintenance"=>"ready",
+               "language"=>"Perl",
+               "description"=><<"HERE",
+<p>Each web author has his own web framework reusable for other web developers
+as a generic engine.  Here is mine. I am not a fool to expect you would use
+it.</p>
+HERE
+               );
+
+1;
diff --git a/project/MyWeb/Makefile.am b/project/MyWeb/Makefile.am
new file mode 100644 (file)
index 0000000..abc4f09
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/MyWeb/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/Nokia61/Index.html.pl b/project/Nokia61/Index.html.pl
new file mode 100755 (executable)
index 0000000..82b1953
--- /dev/null
@@ -0,0 +1,55 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::Nokia61'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::Nokia61::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::Nokia61::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::Nokia61::ListItem::ListItem,
+               );
+
+do { My::Web::make("make -s $_") if ! -f $_; } for ("./Nokia61");
+print <<"HERE";
+<table border="0" width="100%">
+       <col width="0*" />
+       <col width="1*" />
+       <tr>
+               <td align="left">
+<iframe src="Nokia61.php?base=.%2F" width="500" height="600">
+<a href="Nokia61.php?base=.%2F">Program on-line</a>.
+</iframe>
+               </td>
+               <td align="center">@{[ img 'Nokia61.jpeg','Illustration' ]}</td>
+       </tr>
+</table>
+HERE
+
+My::Web->footer();
index 6ce277b..d5b717a 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::Nokia61;
+package project::Nokia61::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Nokia Game &quot;Rotation&quot;",
-               "priority"=>7,
+
+our @ListItem=(
+               "name"=>"Rotation",
+               "platform"=>"web",
+               "priority"=>480,
+               "icon"=>"Nokia61-icon.jpeg",
                "download"=>"Nokia61.c",
-               "summary"=>"Logical game solver",
+               "summary"=>"Nokia logical game &quot;Rotation&quot; solver",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C, PHP",
-               "description"=>""
-                               .'<p>At least Nokia 3210 offers game <b>Rotation</b>, this little software will'
-                               .' tell you the optimal solution steps for the given game board situation.'
-                               .' The goal is to get board with'
-                               .' <b>1&nbsp;2&nbsp;3</b>, <b>4&nbsp;5&nbsp;6</b>, <b>7&nbsp;8&nbsp;9</b>,'
-                               .' in rows.</p>'
+               "description"=><<"HERE",
+<p>At least Nokia 3210 offers game <b>Rotation</b>, this little software will
+tell you the optimal solution steps for the given game board situation.
+The goal is to get board with
+<b>1&nbsp;2&nbsp;3</b>, <b>4&nbsp;5&nbsp;6</b>, <b>7&nbsp;8&nbsp;9</b>,
+in rows.</p>
+HERE
                );
 
 1;
index ac789b1..a7798b9 100644 (file)
@@ -20,11 +20,11 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html \
-       Nokia61
+       Index.html.pl
 
 Nokia61: Nokia61.c
        gcc -Wall -ggdb3 -o $@ $<
+
+CLEANFILES+= \
+       Nokia61 \
+       Nokia61_23.cache
diff --git a/project/Nokia61/Nokia61-icon.jpeg b/project/Nokia61/Nokia61-icon.jpeg
new file mode 100644 (file)
index 0000000..e270820
Binary files /dev/null and b/project/Nokia61/Nokia61-icon.jpeg differ
diff --git a/project/Nokia61/Nokia61.jpeg b/project/Nokia61/Nokia61.jpeg
new file mode 100644 (file)
index 0000000..82a1158
Binary files /dev/null and b/project/Nokia61/Nokia61.jpeg differ
diff --git a/project/PerlMail/Index.html.pl b/project/PerlMail/Index.html.pl
new file mode 100755 (executable)
index 0000000..f9048f7
--- /dev/null
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::PerlMail'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::PerlMail::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::PerlMail::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::PerlMail::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Features list</p>
+<ul>
+       <li>Powerful filtering by @{[ a_href 'http://www.perl.org/','Perl' ]} rules</li>
+       <li>Safe mails transfer to remote user workstation while using possibly dynamic IP</li>
+       <li>Event driven immediate response, no polling (IMAP/POP3 poll)</li>
+       <li>No risk of SMTP error mails during remote workstation connection problems</li>
+       <li>SMS-forwarder featuring
+                       @{[ a_href 'http://search.cpan.org/author/JARIAALTO/Lingua-EN-Squeeze-1998.1204/','Lingua::EN::Squeeze' ]},
+                       MIME decoding, HTML conversion</li>
+       <li>Outgoing mail headers mangling by per-recipient rules</li>
+       <li>@{[ a_href 'http://www.mutt.org/','Mutt' ]} mailer integration</li>
+       <li>@{[ a_href 'http://www.nokia.com/phones/9110i','Nokia Communicator' ]} contacts directory conversion</li>
+</ul>
+HERE
+
+
+My::Web->footer();
diff --git a/project/PerlMail/ListItem.pm b/project/PerlMail/ListItem.pm
new file mode 100755 (executable)
index 0000000..c0bb03b
--- /dev/null
@@ -0,0 +1,54 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::PerlMail' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::PerlMail::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"PerlMail",
+               "platform"=>"unixuser",
+               "priority"=>640,
+               "cvs"=>"PerlMail",
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "link-README"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/PerlMail/README?rev=HEAD",
+               "summary"=>"Perl mail processor - ".a_href('http://www.procmail.org/','procmail')."(1) successor",
+               "license"=>"GPL",
+               "maintenance"=>"ready",
+               "language"=>"Perl",
+               "description"=><<"HERE",
+<p>Successor to @{[ a_href 'http://www.procmail.org/','procmail' ]}(1)
+and @{[ a_href 'http://search.cpan.org/author/SIMON/Mail-Audit-2.1/','Mail::Audit' ]}.
+It supports @{[ a_href 'http://www.perl.org/','Perl' ]}-rules filtering, dynamic client IP,
+mobile SMS forwarding, @{[ a_href 'http://www.mutt.org/','Mutt' ]} integration,
+@{[ a_href 'http://www.nokia.com/phones/9110i','Nokia Communicator' ]} contacts directory integration.</p>
+<p>Use if you like: <span class="quote">
+       @{[ CGI::escapeHTML(q{store "=spam" if ($_=mimehead(body_first())->mime_attr("Content-Type")) && m#text/html#i;}) ]}
+       </span></p>
+HERE
+               );
+
+1;
diff --git a/project/PerlMail/Makefile.am b/project/PerlMail/Makefile.am
new file mode 100644 (file)
index 0000000..5b04f16
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/PerlMail/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/Pod2Html.html.pl b/project/Pod2Html.html.pl
new file mode 100755 (executable)
index 0000000..7214962
--- /dev/null
@@ -0,0 +1,46 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# URL redirector of &My::Web::a_href Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::Pod2Html;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "header_only"=>1,
+               "args_check"=>{
+                               "cvs"=>'^[\w\d][\w\d/.]*$',
+                               },
+               );
+
+$W->{"r"}->send_http_header("text/html");
+local *F;
+open F,"lynx -source ".$W->{"project_viewcvs"}."*checkout*/".$W->{"args"}{"cvs"}."?rev=HEAD"
+               ." |pod2html -"
+               ." |";
+print while <F>;
+close F;
diff --git a/project/PortDiag/Index.html.pl b/project/PortDiag/Index.html.pl
new file mode 100755 (executable)
index 0000000..12d64e8
--- /dev/null
@@ -0,0 +1,43 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::PortDiag'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::PortDiag::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::PortDiag::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::PortDiag::ListItem::ListItem,
+               );
+
+
+print centerimg "PortDiag","PortDiag Snapshot";
+
+
+My::Web->footer();
diff --git a/project/PortDiag/ListItem.pm b/project/PortDiag/ListItem.pm
new file mode 100755 (executable)
index 0000000..29da200
--- /dev/null
@@ -0,0 +1,53 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::PortDiag' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::PortDiag::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"PortDiag",
+               "platform"=>"amiga",
+               "priority"=>470,
+               "icon"=>"PortDiag-icon",
+               "download"=>"PortDiag.lha",
+               "link-source file"=>"PortDiag.asm",
+               "aminet"=>"hard/hack/PortDiag",
+               "summary"=>"Hardware I/O port diagnostics utility",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"680x0 asm",
+               "description"=><<"HERE",
+<p>PortDiag is generally used for low-level hardware watching and modifying.
+It has support for all the bits of the four CIA ports, digital and analog parts
+of the game ports, serial port TXD and RXD signals and selective system
+allocation of this hardware.</p>
+<p>Hardware issues and images by the courtesy of
+@{[ a_href 'http://www.pavouk.org/','Pavel "Pavouk" Ruzicka' ]}.</p>
+HERE
+               );
+
+1;
diff --git a/project/PortDiag/Makefile.am b/project/PortDiag/Makefile.am
new file mode 100644 (file)
index 0000000..08328cd
--- /dev/null
@@ -0,0 +1,24 @@
+# $Id$
+# automake source for the Makefile of project/PortDiag/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl \
+       PortDiag.png
diff --git a/project/PortDiag/PortDiag-icon.png b/project/PortDiag/PortDiag-icon.png
new file mode 100644 (file)
index 0000000..4f81388
Binary files /dev/null and b/project/PortDiag/PortDiag-icon.png differ
diff --git a/project/PortDiag/PortDiag.asm b/project/PortDiag/PortDiag.asm
new file mode 100644 (file)
index 0000000..a6cc02b
--- /dev/null
@@ -0,0 +1,1017 @@
+;###############################################
+;### SPECIAL WARNING FOR NORMAL PROGRAMMERS: ###
+;###############################################
+;###### Please don't read this source !!! ######
+;##### It is completely ALTERNATIVELY made #####
+;### from scratch. Reading such thing may and ##
+;### possibly WILL leave permanent damage to ###
+;################ your _mind_. #################
+;##### Special recommendation for Lemming. #####
+;###############################################
+
+;DEBUG equ     1
+
+       include "ssmac.h"
+
+WARN_DDR_MASK  equ     $FFF800FF
+WARN_PR_MASK   equ     $00000001
+
+ciaa   equ     $bfe001
+ciab   equ     $bfd000
+CIABaseA4      equ     ciab
+BaseA4 equ     $dff000
+TEXT_PEN       equ     1
+BGND_PEN       equ     0
+
+       dv.b    ST_joy0daty
+       dv.b    ST_joy0datx
+       dv.b    ST_joy1daty
+       dv.b    ST_joy1datx
+       dv.b    ST_pot0daty
+       dv.b    ST_pot0datx
+       dv.b    ST_pot1daty
+       dv.b    ST_pot1datx
+       dv.l    DefCIAIO
+       dv.l    SigMask
+       dv.l    MyWindow
+       dv.l    StdFont
+       dv.l    potgobase
+       dv.l    diskbase
+       dv.l    miscbase
+       dv.l    OrigWPtr
+       dv.l    VisualInfo
+       dv.w    GameAlloced
+       dbuf    ScrTitBuf,80
+       dv.b    CleanServ
+       dv.b    Signaled
+       dv.b    InitCounters
+       dv.b    DiskAlloc
+       dv.b    PortAdd
+
+       start
+
+       move.l  4.w,a6
+       addq.b  #1,TDNestCnt(a6)
+       gett    RzPortName,a1
+       call    FindPort
+       tst.l   d0
+       beq.s   NoPortFound
+       move.l  d0,a1
+       move.l  MP_SIGTASK(a1),a1
+       moveq   #1<<6,d0
+       rol.l   #8,d0
+       call    Signal
+       call    Permit
+       dtl     <Already running>,a0
+       bra.s   SSExitError
+       
+NoPortFound    lea     RzPort(pc),a1
+       move.l  ThisTask(a6),MP_SIGTASK(a1)
+       call    AddPort
+       call    Permit
+       stv     PortAdd
+       lea     StdAttr(pc),a0
+       call    gfx,OpenFont
+       put.l   d0,StdFont
+       beq.s   OpenWinFail
+       dtl     <disk.resource>,a1
+       call    exec,OpenResource
+       put.l   d0,diskbase
+       beq.s   OpenWinFail
+       dtl     <misc.resource>,a1
+       call    OpenResource
+       put.l   d0,miscbase
+       beq.s   OpenWinFail
+       sub.l   a0,a0
+       call    intuition,LockPubScreen
+       move.l  d0,ScrLock
+       bne.s   LockScrOK
+OpenWinFail    dtl     <Cannot open window>,a0
+SSExitError    jump    ss,ExitError
+
+LockScrOK      move.l  d0,a0
+       sub.l   a1,a1
+       call    gadtools,GetVisualInfoA
+       put.l   d0,VisualInfo
+       beq.s   OpenWinFail
+       move.l  d0,d5
+       lea     AGamePort(pc),a0
+       call    CreateContext
+       lea     GNGadgets(pc),a3
+       clr.l   -(sp)
+       clr.l   -(sp)
+       push    #GA_Immediate
+GGNG_Loop      tst.l   d0
+       beq.s   OpenWinFail
+       move.l  d0,a0
+       move.l  a3,a1
+       tst.b   gng_GadgetID+1(a1)
+       bmi.s   GGNG_Skip
+       move.l  sp,4(sp)
+GGNG_Skip      lea     gng_VisualInfo(a3),a3
+       move.l  d5,(a3)+
+       moveq   #BUTTON_KIND,d0
+       move.l  sp,a2
+       call    CreateGadgetA
+       tst.w   (a3)
+       bne.s   GGNG_Loop
+       tst.l   d0
+       beq.s   OpenWinFail
+       lea     1*8+4(sp),sp
+       lea     NewMyWindow(pc),a0
+;;;    move.w  #CUSTOMSCREEN,nw_Type(a0)
+       clr.l   -(sp)
+       dt      ScrTitle,<PortDiag - Copyright (c) 1995 Short Software ',60,'short@k332.feld.cvut.cz',62,'>
+       tpea    ScrTitle
+       push    #WA_ScreenTitle
+       push    sp
+       push    #WA_AutoAdjust
+       moveq   #0,d0
+       move.w  NewMyWindow+nw_Width(pc),d0
+       push    d0
+       push    #WA_InnerWidth
+       move.w  NewMyWindow+nw_Height(pc),d0
+       push    d0
+       push    #WA_InnerHeight
+       move.l  sp,a1
+       call    intuition,OpenWindowTagList
+       put.l   d0,MyWindow
+       beq     OpenWinFail
+       get.l   sv_thistask,a0
+       put.l   pr_WindowPtr(a0),OrigWPtr
+       move.l  d0,pr_WindowPtr(a0)
+       lea     4*8+4(sp),sp
+       move.l  d0,a0
+       move.l  wd_UserPort(a0),d6
+       move.l  wd_RPort(a0),d2
+       sub.l   a1,a1
+       call    gadtools,GT_RefreshWindow
+       lea     BorList(pc),a2
+       move.w  (a2)+,d0
+       get.l   intuitionbase,a6
+NextBorder     lea     (a2,d0.w),a1
+       move.l  d2,a0
+       moveq   #0,d0
+       moveq   #0,d1
+       call    DrawBorder
+       move.w  (a2)+,d0
+       bne.s   NextBorder
+       get.l   StdFont,a0
+       move.l  d2,a1
+       call    gfx,SetFont
+       move.l  d2,a0
+       lea     MyWinITexts(pc),a1
+       moveq   #0,d0
+       moveq   #0,d1
+       call    intuition,PrintIText
+       dtl     <potgo.resource>,a1
+       call    exec,OpenResource
+       put.l   d0,potgobase
+       beq     OpenWinFail
+       get.l   intuitionbase,a6
+       bsr     ActivateScreen
+       call    ss,TrackSignal
+       moveq   #0,d2
+       bset    d0,d2
+       put.l   d2,SigMask
+       move.l  CIABaseA4Ptr(pc),a4
+       move.b  ciaa+ciaddra-CIABaseA4(a4),d0
+       rol.w   #8,d0
+       move.b  ciaa+ciaddrb-CIABaseA4(a4),d0
+       rol.l   #8,d0
+       move.b  ciab+ciaddra-CIABaseA4(a4),d0
+       rol.l   #8,d0
+       move.b  ciab+ciaddrb-CIABaseA4(a4),d0
+       put.l   d0,DefCIAIO
+       stv.b   CleanServ
+       moveq   #INTB_VERTB,d0
+       lea     IntStruct(pc),a1
+       move.l  v,IS_DATA(a1)
+       call    exec,AddIntServer
+LoopIDCMP      lea     SetSelected(pc),a1
+       bsr     DoRoutUpdate
+       get.l   MyWindow,a2
+       move.l  wd_RPort(a2),d3
+       move.l  d3,a1
+       moveq   #TEXT_PEN,d0
+       call    gfx,SetAPen
+       move.l  d3,a1
+       moveq   #BGND_PEN,d0
+       call    SetBPen
+       move.l  joy0dat(a4),d2
+       geta    ST_joy0daty,a0
+       moveq   #64,d0
+       moveq   #125,d1
+       lea     G12l+gg_GadgetID(pc),a2
+       lea     G12r+gg_GadgetID(pc),a3
+       bsr     ProcCounterLR   ;joy0daty
+       moveq   #64,d0
+       moveq   #114,d1
+       lea     G11l+gg_GadgetID(pc),a2
+       lea     G11r+gg_GadgetID(pc),a3
+       bsr     ProcCounterLR   ;joy0datx
+       move.w  #216,d0
+       moveq   #125,d1
+       lea     G22l+gg_GadgetID(pc),a2
+       lea     G22r+gg_GadgetID(pc),a3
+       bsr     ProcCounterLR   ;joy1daty
+       move.w  #216,d0
+       moveq   #114,d1
+       lea     G21l+gg_GadgetID(pc),a2
+       lea     G21r+gg_GadgetID(pc),a3
+       bsr     ProcCounterLR   ;joy1datx
+       move.l  pot0dat(a4),d2
+       moveq   #64,d0
+       move.w  #147,d1
+       bsr.s   ProcCounter     ;pot0daty
+       moveq   #64,d0
+       move.w  #136,d1
+       bsr.s   ProcCounter     ;pot0datx
+       move.w  #216,d0
+       move.w  #147,d1
+       bsr.s   ProcCounter     ;pot1daty
+       move.w  #216,d0
+       move.w  #136,d1
+       bsr.s   ProcCounter     ;pot1datx
+       stv.b   InitCounters
+       clrv.b  Signaled
+       get.l   SigMask,d0
+       move.l  d6,a0
+       move.b  MP_SIGBIT(a0),d1
+       bset    d1,d0
+       or.w    #SIGBREAKF_CTRL_C!SIGBREAKF_CTRL_E,d0
+       call    exec,Wait
+       btst    #SIGBREAKB_CTRL_C,d0
+       beq.s   TestFlagE
+SSReportBreak  moveq   #err_break,d0
+SSReportError  jump    ss,ReportError
+
+
+PC_Return      tstv.b  InitCounters
+       beq.s   PC_Cont
+       cmp.l   d0,d0
+       rts
+
+ProcCounter    rol.l   #8,d2
+       cmp.b   (a0)+,d2
+       beq.s   PC_Return
+PC_Cont        move.l  a0,d5
+       move.b  d2,-(a0)
+       move.l  d3,a1
+       call    Move
+       move.l  d3,a1
+       moveq   #RP_JAM2,d0
+       call    SetDrMd
+       moveq   #0,d0
+       move.b  d2,d0
+       move.w  d0,-(sp)
+       move.l  sp,a1
+       subq    #4,sp
+       move.l  a2,d4
+       move.l  sp,a2
+       dtl     <%02x>,a0
+       call    ss,FormatStr
+       move.l  d4,a2
+       move.l  d3,a1
+       move.l  sp,a0
+       moveq   #2,d0
+       call    gfx,Text
+       addq    #6,sp
+       move.l  d5,a0
+       move.l  sp,d0
+Return2        rts
+
+ActivateScreen move.l  ScrLock(pc),a0
+       jump    ScreenToFront
+
+TestFlagE      btst    #SIGBREAKB_CTRL_E,d0
+       beq.s   RetryIDCMP
+       get.l   MyWindow,a0
+       call    intuition,ActivateWindow
+       get.l   MyWindow,a0
+       call    WindowToFront
+       bsr.s   ActivateScreen
+RetryIDCMP     move.l  d6,a0
+       call    gadtools,GT_GetIMsg
+       tst.l   d0
+       beq     LoopIDCMP
+       move.l  d0,a1
+       movem.l im_Class(a1),d2/d3/a3
+       call    GT_ReplyIMsg
+       btst    #9,d2   ;bit(IDCMP_CLOSEWINDOW)
+       bne.s   Return2
+       moveq   #0,d0
+       move.l  CIABaseA4Ptr(pc),a4
+       btst    #6,d2   ;bit(IDCMP_GADGETUP)
+       beq.s   NoGadUp
+       move.b  gg_GadgetID+1(a3),d0
+       addq.b  #4,d0
+       bcc.s   RetryIDCMP
+       move.b  DefCIAIO(v,d0.w),d1
+       add.w   d0,d0
+       add.w   CIAddrTab(pc,d0.w),a4
+       move.b  d1,(a4)
+SafeSetCIA     nop
+       move.b  (a4),(a4)
+       bra.s   RetryIDCMP
+
+CIAprTab       dc.w    ciaa+ciapra-CIABaseA4
+       dc.w    ciaa+ciaprb-CIABaseA4
+       dc.w    ciab+ciapra-CIABaseA4
+       dc.w    ciab+ciaprb-CIABaseA4
+CIAddrTab      dc.w    ciaa+ciaddra-CIABaseA4
+       dc.w    ciaa+ciaddrb-CIABaseA4
+       dc.w    ciab+ciaddra-CIABaseA4
+       dc.w    ciab+ciaddrb-CIABaseA4
+CIAEndTab
+
+NoGadUp        btst    #5,d2   ;bit(IDCMP_GADGETDOWN)
+       beq.s   RetryIDCMP
+       move.b  gg_GadgetID+1(a3),d0
+       beq.s   RetryIDCMP
+       subq.b  #1,d0
+       cmp.b   #64,d0
+       bcc.s   OtherButtonDown
+       move.w  d0,d1
+       lsr.w   #3,d0
+       add.w   d0,d0
+       lea     Warn_DDR_Mask(pc),a0
+       subq.w  #8,d0
+       bcc.s   ItsddrChange
+       addq    #4,a0
+       move.w  CIAEndTab(pc,d0.w),d2
+       btst    d1,(a4,d2.w)
+       bne.s   ItsddrChange
+CallScrBeep    bsr.s   DoScrBeep
+       bra     RetryIDCMP
+
+DoScrBeep      move.l  ScrLock(pc),a0  ;(#66)
+       jump    intuition,DisplayBeep
+
+ItsddrChange   tstv.l  Arg_Force
+       bne.s   NoWarnBit
+       move.l  (a0),d3
+       btst    d1,d3
+       beq.s   NoWarnBit
+       mpush   d0/d1/a0
+       dtl.lc  <WARNING:  You are attempting to change a bit>,a0
+       dt.lc   <which may cause permanent hardware damage or>
+       dt.lc   <unconditional immediate system crash!>
+       dt.lc   <>
+       dt.lc   <This is not a common warning as in many other programs:>
+       dt.lc   <THIS REALLY _MIGHT_ DESTROY YOUR MACHINE!!!>
+       dt.lc   <>
+       dt.lc   <And remember:  The author is not responsible for>
+       dt.l    <any damage caused by this (any ;-) ) software!>
+       dtl     <Change it|Oh no, forget it!>,a2
+       call    ss,SimpleRequest
+       subq.l  #1,d0
+       mpop    d0/d1/a0
+       bne     RetryIDCMP
+       bclr    d1,d3
+       move.l  d3,(a0)
+NoWarnBit      add.w   CIAddrTab(pc,d0.w),a4
+       bchg    d1,(a4)
+       bra     SafeSetCIA
+
+Warn_DDR_Mask  dc.l    WARN_DDR_MASK,WARN_PR_MASK
+
+OtherButtonDown        bne.s   NoWritePotgo
+;+++ Pressed "Start potgo" +++ (#65)
+       moveq   #1,d0   ;START
+       moveq   #1,d1   ;START
+       call    potgo,WritePotgo
+       bra     RetryIDCMP
+
+NoWritePotgo   sub.b   #66,d0
+       bmi.s   CallScrBeep
+       bne.s   NoTXD
+       opt     nochkimm                ;(#67)
+       move.b  adkconr+BaseA4,d0
+       opt     chkimm
+       and.b   #ADKF_UARTBRK>>8,d0
+       bchg    #ADKB_UARTBRK-8,d0
+       lsl.b   #4,d0
+       bset    #ADKB_UARTBRK-8,d0
+       opt     nochkimm
+       move.b  d0,adkcon+BaseA4
+       opt     chkimm
+       bra     RetryIDCMP
+
+NoTXD  subq.b  #1,d0
+       cmp.b   #8,d0
+       bcc.s   NoPotgoBits
+       moveq   #0,d1           ;(#68)..(#75)
+       bset    d0,d1
+       rol.w   #8,d1
+       get.l   potgobase,a6
+       move.w  $28(a6),d0
+       and.w   d1,d0
+       eor.w   d1,d0
+       call    WritePotgo
+       bra     RetryIDCMP
+
+NoPotgoBits    subq.b  #8,d0
+       bne     NoASerial
+       moveq   #MR_SERIALPORT,d2
+       lea     ASerial+gg_GadgetID(pc),a2
+       dtl     <Seria>,a3
+DoAParallel    move.l  a2,d7
+       bsr.s   ClearScrTit
+       geta    ScrTitBuf,a0
+CopySerParName move.b  (a3)+,(a0)+
+       bne.s   CopySerParName
+       lea     6(a0),a4
+       subq    #1,a0
+       dtl     <l port grab error, owned by >,a1
+CopySerParSuff move.b  (a1)+,(a0)+
+       bne.s   CopySerParSuff
+       move.l  d7,a2
+       tst.b   (a2)
+       bne.s   DoFreeSerPar
+       lea     -1(a0),a3
+       bsr.s   SerParHalf
+       addq.l  #1,d2
+       bsr.s   SerParHalf
+       dtl     <allocated.>,a0
+       moveq   #-1,d0
+       move.l  d7,a2
+CopySerParSucc move.b  (a0)+,(a4)+
+       bne.s   CopySerParSucc
+       bsr     SetSelected
+       bra.s   DoScrWinTitle
+
+ClearScrTit    get.l   MyWindow,a0
+       moveq   #-1,d0
+       move.l  d0,a1
+       sub.l   a2,a2
+       jump    intuition,SetWindowTitles
+
+DoFreeSerPar   bsr.s   FreeSerParRout
+       gett    GivenSys,a0
+       moveq   #0,d0
+       bra.s   CopySerParSucc
+
+SerParHalf     move.l  d2,d0
+       lea     IntName(pc),a1
+       move.l  4.w,a0
+       addq.b  #1,TDNestCnt(a0)
+       call    misc,AllocMiscResource
+       tst.l   d0
+       beq.s   JumpExecPermit
+       move.l  d0,a0
+       moveq   #31,d0
+CopyLimName    move.b  (a0)+,(a3)+
+       dbeq    d0,CopyLimName
+       clr.b   (a3)
+       bsr.s   JumpExecPermit
+       move.l  d2,d0
+       and.b   #~1,d0
+       cmp.l   d0,d2
+       beq.s   DontFreeRest
+       bsr.s   JumpMiscFree
+DontFreeRest   addq    #4,sp
+       bsr     DoScrBeep
+DoScrWinTitle  geta    ScrTitBuf,a2
+       bra     DoScrTitle
+
+FreeSerParRout move.l  d2,d0
+       bsr.s   JumpMiscFree
+       move.l  d2,d0
+       addq.l  #1,d0
+JumpMiscFree   jump    misc,FreeMiscResource
+
+JumpExecPermit jump    exec,Permit
+
+NoASerial      moveq   #MR_PARALLELPORT,d2
+       lea     AParallel+gg_GadgetID(pc),a2
+       dtl     <Paralle>,a3
+       subq.b  #2,d0
+       bcs     DoAParallel
+       bne     NoADisk
+       lea     ADisk+gg_GadgetID(pc),a2
+       tst.b   (a2)
+       bne     ADiskDoFree
+       move.l  a2,d7
+       get.l   MyWindow,a0
+       get.l   intuitionbase,a6
+       cmp.w   #39,LIB_VERSION(a6)
+       bcs.s   StupidGfx2
+       move.l  a0,a3
+       clr.l   -(sp)
+       push    sp
+       push    #WA_BusyPointer
+       push    sp
+       push    #WA_PointerDelay
+       move.l  sp,a1
+       call    SetWindowPointerA
+       move.l  a3,a0
+StupidGfx2     moveq   #-1,d4
+       move.l  d4,a1
+       dtl     <Allocating disk...>,a2
+       call    SetWindowTitles
+       get.l   diskbase,a6
+       moveq   #3,d2
+LoopADiskUnit  move.l  d2,d0
+       call    AllocUnit
+       tst.l   d0
+       sne     d1
+       move.b  d1,d0
+       roxr.b  #1,d0
+       roxl.b  #1,d3
+       bsr     PushSw
+       dbra    d2,LoopADiskUnit
+       put.b   d3,DiskAlloc
+       get.l   sv_thistask,a2
+       lea     pr_MsgPort(a2),a2
+RetryGetUnit   lea     DRUnit(pc),a1
+       move.l  a2,a0
+       move.l  a0,MN_REPLYPORT(a1)
+       call    disk,GetUnit
+       tst.l   d0
+       bne.s   GotUnit
+       move.l  4.w,a6
+RetryGiveReply move.l  a2,a0
+       call    WaitPort
+       move.l  a2,a0
+       call    GetMsg
+       tst.l   d0
+       beq.s   RetryGiveReply
+       bra.s   RetryGetUnit
+
+GotUnit        move.l  d7,a2
+       moveq   #-1,d0
+       bsr     SetSelected
+       dtl     <Disk control hardware allocated; Units: 0 - %s, 1 - %s, 2 - %s, 3 - %s>,a0
+       move.l  sp,a1
+       geta    ScrTitBuf,a2
+       call    ss,FormatStr
+       lea     4*4(sp),sp
+       get.l   intuitionbase,a6
+       cmp.w   #39,LIB_VERSION(a6)
+       bcs.s   SetTitnRet
+       clr.l   -(sp)
+       clr.l   -(sp)
+       push    #WA_Pointer
+       move.l  a3,a0
+       move.l  sp,a1
+       call    SetWindowPointerA
+       lea     (1*8+4)+(2*8+4)(sp),sp
+SetTitnRet     get.l   MyWindow,a0
+       move.l  d4,a1
+       call    SetWindowTitles
+       bra     RetryIDCMP
+
+ADiskDoFree    bsr     FreeDiskRes
+       moveq   #0,d0
+       bsr     SetSelected
+       dtl.c   <Disk completely >,a2
+       dt      GivenSys,<given to system.>
+DoScrTitle     get.l   intuitionbase,a6
+       moveq   #-1,d4
+       bra.s   SetTitnRet
+
+NoADisk        subq.b  #1,d0
+       bne     RetryIDCMP
+       lea     AGamePort+gg_GadgetID(pc),a2
+       get.l   potgobase,a6
+       tst.b   (a2)
+       bne.s   ADoFreeGame
+       move.w  #$5501,d0
+       move.w  d0,d2
+       call    AllocPotBits
+       and.w   d2,d0
+       beq.s   AGameFailed
+       put.w   d0,GameAlloced
+       moveq   #4,d2
+       ror.w   #2,d0
+LoopPushRol    bsr.s   PushRolSw
+       dbra    d2,LoopPushRol
+       moveq   #-1,d0
+       bsr     SetSelected
+       bsr     ClearScrTit
+       dtl     <Game Port 1: A - %s, B - %s; Game Port 2: A - %s, B - %s; Start - %s>,a0
+       move.l  sp,a1
+       geta    ScrTitBuf,a2
+       call    ss,FormatStr
+       lea     5*4(sp),sp
+       bra.s   DoScrTitle
+
+PushRolSw      rol.w   #2,d0
+       scs     d1
+PushSw neg.b   d1
+       ext.w   d1
+       lsl.w   #2,d1
+       dt      <Yes>
+       dt      NoMsg,<No>
+       gett    NoMsg,a0
+       sub.w   d1,a0
+       move.l  (sp),a1
+       move.l  a0,(sp)
+       jmp     (a1)
+
+AGameFailed    bsr     DoScrBeep
+       dtl     <Game Ports are fully allocated!>,a2
+       bra.s   DoScrTitle
+
+ADoFreeGame    get.w   GameAlloced,d0
+       clrv.w  GameAlloced
+       call    FreePotBits
+       moveq   #0,d0
+       bsr     SetSelected
+       dtl     <Game Ports given to system.>,a2
+       bra     DoScrTitle
+
+FreeDiskRes    call    disk,GiveUnit
+       get.b   DiskAlloc,d3
+       ror.b   #4,d3
+       moveq   #3,d2
+LoopFreeUnit   rol.b   #1,d3
+       bcc.s   SkipFreeUnit
+       move.l  d2,d0
+       call    FreeUnit
+SkipFreeUnit   dbra    d2,LoopFreeUnit
+       rts
+
+Cleanup        move.l  4.w,a6
+       tstv.b  PortAdd
+       beq.s   NoPortAdd
+       clrv.b  PortAdd
+       lea     RzPort(pc),a1
+       call    RemPort
+NoPortAdd      tstv.b  CleanServ
+       beq.s   NoCleanServ
+       clrv.b  CleanServ
+       lea     IntStruct(pc),a1
+       moveq   #INTB_VERTB,d0
+       call    RemIntServer
+NoCleanServ    lea     ADisk+gg_GadgetID(pc),a2
+       tst.b   (a2)
+       beq.s   NoFreeDisk
+       clr.b   (a2)
+       bsr.s   FreeDiskRes
+NoFreeDisk     lea     ASerial+gg_GadgetID(pc),a2
+       tst.b   (a2)
+       beq.s   NoFreeSerial
+       clr.b   (a2)
+       moveq   #MR_SERIALPORT,d2
+       bsr     FreeSerParRout
+NoFreeSerial   lea     AParallel+gg_GadgetID(pc),a2
+       tst.b   (a2)
+       beq.s   NoFreeParallel
+       clr.b   (a2)
+       moveq   #MR_PARALLELPORT,d2
+       bsr     FreeSerParRout
+NoFreeParallel get.w   GameAlloced,d0
+       beq.s   NoFreeGamePort
+       clrv.w  GameAlloced
+       call    potgo,FreePotBits
+NoFreeGamePort get.l   MyWindow,d0
+       beq.s   NoMyWindow
+       clrv.l  MyWindow
+       get.l   sv_thistask,a0
+       get.l   OrigWPtr,pr_WindowPtr(a0)
+       move.l  d0,a4
+       move.l  4.w,a6
+       addq.b  #1,TDNestCnt(a6)
+ClearWinPort   move.l  wd_UserPort(a4),a0
+       call    GetMsg
+       tst.l   d0
+       beq.s   WinPortCleared
+       move.l  d0,a1
+       call    ReplyMsg
+       bra.s   ClearWinPort
+
+WinPortCleared move.l  a4,a0
+       moveq   #0,d0
+       call    intuition,ModifyIDCMP
+       call    exec,Permit
+       move.l  a4,a0
+       call    intuition,CloseWindow
+NoMyWindow     get.l   StdFont,d0
+       beq.s   NoCloseFont
+       clrv.l  StdFont
+       move.l  d0,a1
+       call    gfx,CloseFont
+NoCloseFont    lea     AGamePort(pc),a1
+       move.l  (a1),a0
+       clr.l   (a1)
+       call    gadtools,FreeGadgets
+       get.l   VisualInfo,a0
+       clrv.l  VisualInfo
+       call    FreeVisualInfo
+       sub.l   a0,a0
+       lea     ScrLock(pc),a0
+       move.l  (a0),a1
+       clr.l   (a0)
+       jump    intuition,UnlockPubScreen
+
+GadTable       dc.w    AA0l+gg_GadgetID-*-2
+       dc.w    AA1l+gg_GadgetID-*-2
+       dc.w    AA2l+gg_GadgetID-*-2
+       dc.w    AA3l+gg_GadgetID-*-2
+       dc.w    AA4l+gg_GadgetID-*-2
+       dc.w    AA5l+gg_GadgetID-*-2
+       dc.w    AA6l+gg_GadgetID-*-2
+       dc.w    AA7l+gg_GadgetID-*-2
+       dc.w    AB0l+gg_GadgetID-*-2
+       dc.w    AB1l+gg_GadgetID-*-2
+       dc.w    AB2l+gg_GadgetID-*-2
+       dc.w    AB3l+gg_GadgetID-*-2
+       dc.w    AB4l+gg_GadgetID-*-2
+       dc.w    AB5l+gg_GadgetID-*-2
+       dc.w    AB6l+gg_GadgetID-*-2
+       dc.w    AB7l+gg_GadgetID-*-2
+       dc.w    BA0l+gg_GadgetID-*-2
+       dc.w    BA1l+gg_GadgetID-*-2
+       dc.w    BA2l+gg_GadgetID-*-2
+       dc.w    BA3l+gg_GadgetID-*-2
+       dc.w    BA4l+gg_GadgetID-*-2
+       dc.w    BA5l+gg_GadgetID-*-2
+       dc.w    BA6l+gg_GadgetID-*-2
+       dc.w    BA7l+gg_GadgetID-*-2
+       dc.w    BB0l+gg_GadgetID-*-2
+       dc.w    BB1l+gg_GadgetID-*-2
+       dc.w    BB2l+gg_GadgetID-*-2
+       dc.w    BB3l+gg_GadgetID-*-2
+       dc.w    BB4l+gg_GadgetID-*-2
+       dc.w    BB5l+gg_GadgetID-*-2
+       dc.w    BB6l+gg_GadgetID-*-2
+       dc.w    BB7l+gg_GadgetID-*-2
+       dc.w    AA0r+gg_GadgetID-*-2
+       dc.w    AA1r+gg_GadgetID-*-2
+       dc.w    AA2r+gg_GadgetID-*-2
+       dc.w    AA3r+gg_GadgetID-*-2
+       dc.w    AA4r+gg_GadgetID-*-2
+       dc.w    AA5r+gg_GadgetID-*-2
+       dc.w    AA6r+gg_GadgetID-*-2
+       dc.w    AA7r+gg_GadgetID-*-2
+       dc.w    AB0r+gg_GadgetID-*-2
+       dc.w    AB1r+gg_GadgetID-*-2
+       dc.w    AB2r+gg_GadgetID-*-2
+       dc.w    AB3r+gg_GadgetID-*-2
+       dc.w    AB4r+gg_GadgetID-*-2
+       dc.w    AB5r+gg_GadgetID-*-2
+       dc.w    AB6r+gg_GadgetID-*-2
+       dc.w    AB7r+gg_GadgetID-*-2
+       dc.w    BA0r+gg_GadgetID-*-2
+       dc.w    BA1r+gg_GadgetID-*-2
+       dc.w    BA2r+gg_GadgetID-*-2
+       dc.w    BA3r+gg_GadgetID-*-2
+       dc.w    BA4r+gg_GadgetID-*-2
+       dc.w    BA5r+gg_GadgetID-*-2
+       dc.w    BA6r+gg_GadgetID-*-2
+       dc.w    BA7r+gg_GadgetID-*-2
+       dc.w    BB0r+gg_GadgetID-*-2
+       dc.w    BB1r+gg_GadgetID-*-2
+       dc.w    BB2r+gg_GadgetID-*-2
+       dc.w    BB3r+gg_GadgetID-*-2
+       dc.w    BB4r+gg_GadgetID-*-2
+       dc.w    BB5r+gg_GadgetID-*-2
+       dc.w    BB6r+gg_GadgetID-*-2
+       dc.w    BB7r+gg_GadgetID-*-2
+       dc.w    G13l+gg_GadgetID-*-2
+       dc.w    G13r+gg_GadgetID-*-2
+       dc.w    G14l+gg_GadgetID-*-2
+       dc.w    G14r+gg_GadgetID-*-2
+       dc.w    G23l+gg_GadgetID-*-2
+       dc.w    G23r+gg_GadgetID-*-2
+       dc.w    G24l+gg_GadgetID-*-2
+       dc.w    G24r+gg_GadgetID-*-2
+       dc.w    S1l+gg_GadgetID-*-2
+       dc.w    S2l+gg_GadgetID-*-2
+       dc.w    G13m+gg_GadgetID-*-2
+       dc.w    G23m+gg_GadgetID-*-2
+       dc.w    G14m+gg_GadgetID-*-2
+       dc.w    G24m+gg_GadgetID-*-2
+
+ProcCounterLR  bsr     ProcCounter
+       beq.s   Return1ShEq
+       ror.b   #2,d2
+       scs     d0
+       bsr.s   ChkSelected
+       rol.b   #1,d2
+       scs     d0
+       rol.b   #1,d2
+       scs     d1
+       eor.b   d1,d0
+       move.l  a3,a2
+ChkSelected    cmp.b   (a2),d0
+Return1ShEq    beq.s   Return1
+SetSelected    mpush   d2/d3/a0/a1/a3
+       move.b  d0,(a2)
+       get.l   MyWindow,a3
+       move.l  wd_RPort(a3),a1
+       cmp.b   #76,1(a2)
+       bcc.s   NoImage
+       move.l  a1,a0
+       lea     ImgZero(pc),a1
+       move.w  -gg_GadgetID+gg_LeftEdge(a2),d0
+       move.w  -gg_GadgetID+gg_TopEdge(a2),d1
+       move.l  -gg_GadgetID+gg_GadgetRender(a2),a3
+       cmp.l   a1,a3
+       bne.s   SS_DoInpOut
+       tst.b   (a2)
+       beq.s   SS_HaveImage
+       lea     ImgOne(pc),a1
+       bra.s   SS_HaveImage
+
+NoImage        moveq   #RP_COMPLEMENT,d0
+       call    gfx,SetDrMd
+       move.l  wd_RPort(a3),a0
+       moveq   #3,d0
+       cmp.w   #39,LIB_VERSION(a6)
+       bcs.s   StupidGfx
+       call    SetWriteMask    ;failures ignored
+StupidGfxJump  move.l  wd_RPort(a3),a1
+       lea     -gg_GadgetID+gg_LeftEdge(a2),a0
+       move.w  (a0)+,d0        ;LeftEdge->xmin
+       move.w  (a0)+,d1        ;TopEdge->ymin
+       move.w  (a0)+,d2
+       add.w   d0,d2
+       subq.w  #1,d2           ;xmax
+       move.w  (a0),d3
+       add.w   d1,d3
+       subq.w  #1,d3           ;ymax
+       call    RectFill
+Ret_SetSelected        mpop    d2/d3/a0/a1/a3
+Return1        rts
+
+SS_DoInpOut    lea     ImgInput(pc),a1
+       tst.b   (a2)
+       beq.s   SS_HaveImage
+       lea     ImgOutput(pc),a1
+SS_HaveImage   call    intuition,DrawImage
+       get.l   gfxbase,a6
+       bra.s   Ret_SetSelected
+
+StupidGfx      move.b  d0,rp_Mask(a0)
+       bra.s   StupidGfxJump
+
+DoRoutUpdate   lea     CIABaseA4,a4
+CIABaseA4Ptr   equ     *-4
+       lea     GadTable(pc),a0
+       lea     CIAprTab(pc),a3
+       moveq   #7,d7
+ChkCIALoop     move.w  (a3)+,d0
+       move.b  (a4,d0.w),d2
+       bsr.s   ChkEight
+       dbra    d7,ChkCIALoop
+       get.l   potgobase,a4
+       move.b  $28(a4),d2      ;$28(potgobase)/W=Contents of POTGO/POTINP
+       bsr.s   ChkEight
+       lea     BaseA4,a4
+BaseA4Ptr      equ     *-4
+       move.b  potinp(a4),d2
+       move.b  d2,d0
+       and.b   #$05,d2
+       and.b   #$50,d0
+       lsr.b   #3,d0
+       or.b    d0,d2
+       btst    #ADKB_UARTBRK-8,adkconr(a4)
+       sne     d0      ;TXD
+       roxr.b  #1,d0
+       roxl.b  #1,d2
+       btst    #11-8,serdatr(a4)
+       sne     d0      ;RXD
+       roxr.b  #1,d0
+       roxl.b  #1,d2
+       moveq   #5,d3
+       bra.s   Chk8Loop
+
+ChkEight       moveq   #7,d3
+Chk8Loop       move.w  (a0)+,d0
+       lea     (a0,d0.w),a2
+       ror.b   d2
+       scs     d0
+       cmp.b   (a2),d0
+       beq.s   Chk8Okay
+       jsr     (a1)
+Chk8Okay       dbra    d3,Chk8Loop
+       rts
+
+IntRoutine     tst.b   Signaled(a1)
+       bne.s   IntReturnQuick
+       move.l  a1,v
+       mpush   d2-d4/d7/a2-a4
+       move.l  sp,d4
+       lea     DoSignal(pc),a1
+       bsr     DoRoutUpdate
+       move.l  joy0dat(a4),d0
+       vcmp.l  ST_joy0daty,d0
+       bne.s   DoSignal
+       move.l  pot0dat(a4),d0
+       vcmp.l  ST_pot0daty,d0
+       bne.s   DoSignal
+       bra.s   IntReturn
+
+DoSignal       get.l   SigMask,d0
+       get.l   sv_thistask,a1
+       stv.b   Signaled
+       call    exec,Signal
+       move.l  d4,sp
+IntReturn      mpop    d2-d4/d7/a2-a4
+IntReturnQuick move.l  BaseA4Ptr(pc),a0
+       cmp.l   d0,d0
+       rts
+
+IntStruct      dc.l    0,0
+       dc.b    NT_INTERRUPT,-128
+       dc.l    IntName
+       dc.l    0               ;IS_DATA
+       dc.l    IntRoutine
+
+IntName        dc.b    'PortDiag',0
+       even
+
+DRUnit dc.l    0,0
+       dc.b    NT_MESSAGE,0
+       dc.l    IntName
+DRReplyPort    dc.l    0
+       dc.w    DRU_SIZE
+
+       dc.l    0,0
+       dc.b    NT_INTERRUPT,-128
+       dc.l    IntName,0,0     ;LN_NAME,IS_DATA,IS_CODE
+
+       dc.l    0,0
+       dc.b    NT_INTERRUPT,-128
+       dc.l    IntName,0,0     ;LN_NAME,IS_DATA,IS_CODE
+
+       dc.l    0,0
+       dc.b    NT_INTERRUPT,-128
+       dc.l    IntName,0,0     ;LN_NAME,IS_DATA,IS_CODE
+
+RzPort dc.l    0,0
+       dc.b    NT_MSGPORT,-128
+       dc.l    RzPortName
+       dc.b    PA_IGNORE,0
+       dc.l    0
+RzPortHead     dc.l    RzPortTail
+RzPortTail     dc.l    0,RzPortHead
+       dc.b    NT_MESSAGE,0
+
+       dt      RzPortName,<PortDiag.rendezvous>
+
+GNGadgets
+GNGDefaultAA   dc.w    44,78,72,13
+       dc.l    DefaultTxt,StdAttr
+       dc.w    252
+       dc.l    PLACETEXT_IN,0
+
+GNGDefaultAB   dc.w    196,78,72,13
+       dc.l    DefaultTxt,StdAttr
+       dc.w    253
+       dc.l    PLACETEXT_IN,0
+
+GNGDefaultBA   dc.w    348,78,72,13
+       dc.l    DefaultTxt,StdAttr
+       dc.w    254
+       dc.l    PLACETEXT_IN,0
+
+GNGDefaultBB   dc.w    500,78,72,13
+       dc.l    DefaultTxt,StdAttr
+       dc.w    255
+       dc.l    PLACETEXT_IN,0
+
+GNGStartPotgo  dc.w    318,106,134,15
+       dc.l    SPotgoTxt,StdAttr
+       dc.w    65
+       dc.l    PLACETEXT_IN,0
+
+       dc.w    0
+
+       dt      DefaultTxt,<Default>
+       dt      SPotgoTxt,<Start potgo>
+
+       include "PortDiagWin.asm"
+
+ScrLock        equ     NewMyWindow+nw_Screen
+
+BorList        dc.w    AABorder-*-2
+       dc.w    ABBorder-*-2
+       dc.w    BABorder-*-2
+       dc.w    BBBorder-*-2
+       dc.w    G1Border-*-2
+       dc.w    G1Border1-*-2
+       dc.w    G1Border2-*-2
+       dc.w    G1Border3-*-2
+       dc.w    G1Border4-*-2
+       dc.w    G2Border-*-2
+       dc.w    G2Border1-*-2
+       dc.w    G2Border2-*-2
+       dc.w    G2Border3-*-2
+       dc.w    G2Border4-*-2
+       dc.w    PotgoBorder-*-2
+       dc.w    SerialBorder-*-2
+       dc.w    AllocBorder-*-2
+       dc.w    0
+
+       dt      <$VER: PortDiag 1.0 (4.10.95)>
+
+       tags
+       template <OMIT_ANY_OF_ALL_THOSE_ANNOYING_WARNING_MESSAGES=FORCE/S>
+       dv.l    Arg_Force
+       exitrout        Cleanup
+       finish
+       end
diff --git a/project/PortDiag/PortDiag.lha b/project/PortDiag/PortDiag.lha
new file mode 100644 (file)
index 0000000..820fc7e
Binary files /dev/null and b/project/PortDiag/PortDiag.lha differ
diff --git a/project/PortDiag/PortDiag.png b/project/PortDiag/PortDiag.png
new file mode 100644 (file)
index 0000000..063c525
Binary files /dev/null and b/project/PortDiag/PortDiag.png differ
diff --git a/project/QueryDev/Index.html.pl b/project/QueryDev/Index.html.pl
new file mode 100755 (executable)
index 0000000..498db71
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::QueryDev'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::QueryDev::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::QueryDev::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::QueryDev::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/QueryDev/ListItem.pm b/project/QueryDev/ListItem.pm
new file mode 100755 (executable)
index 0000000..e00b521
--- /dev/null
@@ -0,0 +1,50 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::QueryDev' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::QueryDev::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"QueryDev",
+               "platform"=>"amiga",
+               "priority"=>150,
+               "download"=>"QueryDev.lha",
+               "link-source file"=>"QueryDev.asm",
+               "link-aminet README"=>"QueryDev.README",
+               "summary"=>"Detect disk device name from its volume name",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"680x0 asm",
+               "description"=><<"HERE",
+<p>QueryDev detects the device name from the given volume name. Volume must be
+locked in the system. Useful for DiskCopy which has the parameter DEVICE and
+you want to copy the diskette from any drive. QueryDev writes the detected
+device name to the specified variable.</p>
+HERE
+               );
+
+1;
diff --git a/project/QueryDev/Makefile.am b/project/QueryDev/Makefile.am
new file mode 100644 (file)
index 0000000..b4a1946
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/QueryDev/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/QueryDev/QueryDev.README b/project/QueryDev/QueryDev.README
new file mode 100644 (file)
index 0000000..2c34825
--- /dev/null
@@ -0,0 +1,14 @@
+Short:    Volume name -> device name
+Author:   short@k332.feld.cvut.cz (Jan Kratochvil)
+Uploader: short@k332.feld.cvut.cz (Jan Kratochvil)
+Type:     util/cli
+
+Description:
+   QueryDev  detects the device name from the given volume name.  Volume must
+be  locked in the system.  Useful for DiskCopy which has the parameter DEVICE
+and  you  want  to  copy  the  diskette  from any drive.  QueryDev writes the
+detected device name to the specified variable.
+
+Requirements:
+   Kickstart version V37 (2.04) or higher and ss.library V5.0 or higher (from
+package SSLib*.lha).
diff --git a/project/QueryDev/QueryDev.asm b/project/QueryDev/QueryDev.asm
new file mode 100644 (file)
index 0000000..fb2521c
--- /dev/null
@@ -0,0 +1,65 @@
+;DEBUG equ     1
+
+       include "SSMac.h"
+
+       clistart
+
+       moveq   #LDF_VOLUMES+LDF_DEVICES+LDF_READ,d1
+       call    dos,LockDosList
+       move.l  d0,d1
+       move.l  d0,d4
+       get.l   Arg_Volume,d2
+       moveq   #LDF_VOLUMES,d3
+       call    FindDosEntry
+       tst.l   d0
+       bne.s   EntryFound
+       dtl     <Volume %s not found>,a0
+VolumeError    geta    Arg_Volume,a1
+       jump    ss,ExitError
+
+EntryFound     move.l  d0,a2
+       move.l  dl_Task(a2),a2
+       moveq   #LDF_DEVICES,d2
+NextDevice     move.l  d4,d1
+       call    NextDosEntry
+       dtl     <No device matching volume %s>,a0
+       move.l  d0,d4
+       beq.s   VolumeError
+       move.l  d0,a0
+       cmp.l   dvi_Task(a0),a2
+       bne.s   NextDevice
+       move.l  dvi_Name(a0),d2
+       moveq   #LDF_VOLUMES+LDF_DEVICES+LDF_READ,d1
+       call    UnLockDosList
+       lsl.l   #2,d2
+       move.l  d2,a0
+       get.l   Arg_VarName,d1
+       bne.s   SomeVarName
+       dtl     <DevName>,a1
+       move.l  a1,d1
+SomeVarName    push    d1
+       moveq   #0,d3
+       move.b  (a0)+,d3
+       move.l  a0,d2
+       moveq   #1,d4
+       lsl.l   #GVB_GLOBAL_ONLY,d4
+       tstv.l  Arg_Global
+       bne.s   GlobalVar
+       lsl.l   #GVB_LOCAL_ONLY-GVB_GLOBAL_ONLY,d4
+GlobalVar      call    SetVar
+       tst.l   d0
+       bne.s   Return
+       dtl     <Variable %s cannot be set>,a0
+       move.l  sp,a1
+       jump    ss,DosError
+
+Return addq    #4,sp
+       rts
+
+       tags
+       template <VOLUME/A,TO=VARNAME,GLOBAL/S>
+       dv.l    Arg_Volume
+       dv.l    Arg_VarName
+       dv.l    Arg_Global
+       finish
+       end
diff --git a/project/QueryDev/QueryDev.lha b/project/QueryDev/QueryDev.lha
new file mode 100644 (file)
index 0000000..6e9769d
Binary files /dev/null and b/project/QueryDev/QueryDev.lha differ
diff --git a/project/Rel.pl b/project/Rel.pl
new file mode 100755 (executable)
index 0000000..fd39944
--- /dev/null
@@ -0,0 +1,71 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# List of projects Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+use Apache::Constants qw(MOVED);
+Wrequire 'My::Project';
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "header_only"=>1,
+               "args_check"=>{
+                               "rel"=>'^(?:prev|next)$',
+                               "project"=>'^\w+$',
+                               },
+               );
+
+my %item=( My::Project::item_hash_read() );
+my @platforms=@My::Project::platforms;
+my @projects=();
+# Do not sort by platforms:
+# while (@platforms)
+{
+       my $platform_sym =shift @platforms;
+       my $platform_name=shift @platforms;
+       push @projects,sort {
+                       ($item{$b}{"priority"} <=> $item{$a}{"priority"})
+                       or
+                       (lc($item{$a}{"name"}) cmp lc($item{$b}{"name"}));
+                       }
+                                       ( # Do not sort by platform: map({ $item{$_}{"platform"} ne $platform_sym ? () : ($_); }        # )
+                                       keys(%item)
+                                       );
+       }
+my $target=undef();
+for (0..$#projects) {
+       next if $projects[$_] ne $W->{"args"}{"project"};
+       $target=$projects[$_-1] if $_>0          && $W->{"args"}{"rel"} eq "prev";
+       $target=$projects[$_+1] if $_<$#projects && $W->{"args"}{"rel"} eq "next";
+       last if $target;
+       }
+
+$W->{"r"}->status(MOVED);
+$W->{"r"}->header_out("Location"=>"http://".&{$W->{"web_hostname_sub"}}()
+#              .":7680"        # DEBUG
+               ."/project/".(!$target ? "" : "$target/"));
diff --git a/project/ResRAM/Index.html.pl b/project/ResRAM/Index.html.pl
new file mode 100755 (executable)
index 0000000..5280008
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::ResRAM'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ResRAM::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::ResRAM::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ResRAM::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/ResRAM/ListItem.pm b/project/ResRAM/ListItem.pm
new file mode 100755 (executable)
index 0000000..6fc4ef0
--- /dev/null
@@ -0,0 +1,50 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::ResRAM' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ResRAM::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"ResRAM",
+               "platform"=>"amiga",
+               "priority"=>530,
+               "download"=>"ResRAM.lha",
+               "link-source file"=>"ResRAM.asm",
+               "link-aminet README"=>"ResRAM.README",
+               "summary"=>"Reset-persisent bootable RAM filesystem",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"680x0 asm",
+               "description"=><<"HERE",
+<p>ResRAM is generally used for the RAM disks which are not required to be
+written to. They are being used for fast booting when no harddisk is
+available. On ResRAM execution it scans the given files which are loaded to the
+memory and a reset-surviving resident module is installed.</p>
+HERE
+               );
+
+1;
diff --git a/project/ResRAM/Makefile.am b/project/ResRAM/Makefile.am
new file mode 100644 (file)
index 0000000..587004a
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/ResRAM/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/ResRAM/ResRAM.README b/project/ResRAM/ResRAM.README
new file mode 100644 (file)
index 0000000..8ee2fe8
--- /dev/null
@@ -0,0 +1,11 @@
+Short: Reset surviving RAM FileSys (V37+&ss.lib)
+
+Description:
+   ResRAM  is  generally  used for the RAM disks which are not required to be
+written  to - for example RAD disks used for fast booting when no harddisk is
+available.   When ResRAM is run, it scans given files which are loaded to the
+memory and a reset-surviving resident module is installed.
+
+Requirements:
+   ResRAM  executable  requires  Kickstart version 37 (2.0) or higher and the
+ss.library V5.0 or higher (from package SSLib*.lha).
diff --git a/project/ResRAM/ResRAM.asm b/project/ResRAM/ResRAM.asm
new file mode 100644 (file)
index 0000000..254cdb4
--- /dev/null
@@ -0,0 +1,3038 @@
+;DEBUG equ     1
+;DEBUGX        equ     1       ;Requires silly CPU (680[01]0)
+;WaitDbg       equ     1       ;Wait for RMB after each debug message
+;ModDebug      equ     1       ;Do (Abs|Img)Module debugging
+
+PathLen        equ     256
+StdBootPri     equ     15
+StdTaskPri     equ     10
+StdStackSize   equ     512
+
+GV_DosBase     equ     $204
+
+       ifd     ModDebug
+waitit macro
+       opt     nochkimm
+       push    d0
+\@a    move.w  d0,$dff180
+       addq.w  #1,d0
+       btst.b  #2,$dff016
+       bne.s   \@a
+\@b    move.w  d0,$dff180
+       subq.w  #1,d0
+       btst.b  #2,$dff016
+       beq.s   \@b
+       pop     d0
+       opt     chkimm    
+       endm
+       else
+waitit macro
+       endm
+       endc
+
+       ifd     DEBUGX
+amsg   macro   ;Text
+       opt     w-
+       bsr     DPrintf
+       opt     w+
+       bra.s   \@a
+\@b    dc.b    '\1'
+       ifeq    NARG-1
+       dc.b    10
+       endc
+       dc.b    0
+       even
+\@a
+       endm
+       else
+amsg   macro
+       endm
+       endc
+
+       include "SSMac.h"
+
+_LVOAddBootNode        equ     _LVOexpansionUnused
+
+;Main part:
+;My ResidentTag#
+;Word NULL - LongAlign#
+;Code#
+;Temporary variables
+;Static variables#
+;ResCmds SegLists+checksums#
+;NULL - stop of ResCmds#
+;Resident SegLists+checksums#
+;MyResident pointer#
+;Resident pointers#
+;ResidentList successor
+;KickMemHeader successor
+;KickMemHeader(w/o successor)#
+;KickMem(|s) [1-3]#
+;RES disk data#
+;DosHandler name#
+;Volume name#
+;ResCmds names#
+
+MyFORBID       macro   ;[exec]
+       ifne    NARG
+       move.l  4.w,a6
+       endc
+       addq.b  #1,TDNestCnt(a6)
+       endm
+
+       rsreset         ;FileChain for ReadFiles
+FC_MinNode     rs.b    MLN_SIZE
+FC_FileSize    rs.b    0       ;FileSize (1 Long)
+FC_DirList     rs.b    MLH_SIZE
+FC_ProtBits    rs.b    1       ;Protection Bits (b7=1 -> dir)
+FC_FileName    rs.b    0       ;FileName (ASCIIZ)
+FC_SIZEOF      rs.b    0       ;w/o FileName
+
+       rsreset
+RFC_FileSize   rs.l    1       ;Size of file/dir in bytes
+RFC_ProtBits   rs.b    1       ;Protection bits (b7=1 -> dir)
+RFC_FileName   rs.b    0       ;FileName (ASCIIZ)
+RFC_SIZEOF     rs.b    0       ;w/o FileName
+
+       rsreset         ;Resident chain
+RC_Next        rs.l    1       ;^Next chain or NULL
+RC_Type        rs.w    1       ;Type RCT_#?
+RC_CmdName     rs.b    0       ;RCT_Cmd -> ^FileName of the PathName
+RC_Resident    rs.b    0       ;!=RCT_Cmd -> ^ResidentTag
+RC_Tracker     rs.l    1       ;File tracker
+RC_CheckSum    rs.b    0       ;Segment values sum (LONG)
+RC_CheckSummed rs.w    1       ;BOOL value for summing
+RC_Hunks       rs.w    1       ;# of hunks
+RC_SIZEOF      rs.b    0       ;w/o (hunk sizes|hunk pointers)
+
+RCT_Cmd        equ     -1
+RCT_Lib        equ     0
+RCT_KickMod    equ     1
+
+       dbuf    Anchor,ap_SIZEOF+PathLen
+       dv.l    AnyTrk          ;A! - Must be first
+       dv.l    ChipTrk         ;A!
+       dv.l    ResMemory       ;A! - Tracker of handler's memory
+       dbuf    Root,FC_SIZEOF+1
+       dv.l    RootLock
+       dv.l    ResList         ;Fwd-Linked list of residents
+       dv.l    VolName         ;B!
+       dv.l    DevName         ;B!
+       dv.l    BootPri         ;B!
+       dv.l    OldCurDir
+       dv.l    InhibitEnd      ;Address of terminating 0/':' or NULL
+       dv.l    LinPool
+       dbuf.l  EOFRegs,9
+HunkBuf        equ     EOFRegs         ;Size=20 bytes
+       dbuf    AbsHeader,56
+       dv.w    MEntries
+       dv.w    UnitNum
+       dbuf    StDevName,6
+       dbuf    StVolName,9
+       dv.b    Advisory
+
+       start
+
+       get.l   sv_thistask,a0
+       put.l   pr_CurrentDir(a0),OldCurDir
+       get.l   Arg_Verbose,d0
+       beq.s   NoneVerbose
+       move.l  d0,a2
+       moveq   #0,d2
+VerbParseMLoop move.b  (a2)+,d0
+       beq.s   VerbParseDone
+       move.b  d0,d3
+       call    utility,ToUpper
+       gett    VerbParseTab,a1
+VerbParseCLoop move.b  (a1)+,d1
+       bne.s   VerbParseChar
+       dtl     <Unrecognised VERBOSE char: ''%c''>,a0
+       move.w  d3,-(sp)        ;I hope RawDoFmt'll ignore b8-b15...
+       bra     ErrorA1SS
+
+VerbParseChar  cmp.b   (a1)+,d0
+       bne.s   VerbParseCLoop
+       or.b    d1,d2
+       addq.b  #2,d1
+       sne     d1
+       and.b   d1,d2           ;Clear if 254 (None)
+       bra.s   VerbParseMLoop
+
+VerbParseDone  put.l   d2,Arg_Verbose
+NoneVerbose    geta    BootPri+4,a4
+       moveq   #StdBootPri,d1
+       get.l   Arg_BootPri,d0
+       beq.s   BootPriStd
+       move.l  d0,a0
+       move.l  (a0),d1
+BootPriStd     move.l  d1,-(a4)
+       ext.w   d1
+       ext.l   d1
+       cmp.l   (a4),d1
+       dtl     <BootPri value %ld out of range (-128..127)>,a0
+       bne.s   ErrorSSA4
+       move.l  #RT_SIZE+2+ResidentCode+ResidentVars+12+ML_SIZE+ME_SIZE+RFC_SIZEOF+1,d6 ;RAM disk size
+       geta    StDevName,a3
+       moveq   #'0',d4
+       moveq   #'0'-1,d5
+       moveq   #LDF_DEVICES!LDF_READ,d1
+       moveq   #LDF_DEVICES!LDF_READ,d3
+       call    dos,LockDosList
+       move.l  d0,d7
+       get.l   Arg_Device,d0
+       beq     DeviceStd
+       move.l  d0,a2
+       dt      InvalidName,<Invalid device name "%s">
+       tpea    InvalidName
+       move.l  a2,-(a4)
+TestDevNameLoop        tst.b   (a2)
+       beq.s   TestDevError
+       cmp.b   #':',(a2)+
+       bne.s   TestDevNameLoop
+       tst.b   (a2)
+       beq.s   TestDevTerm
+TestDevError   moveq   #LDF_DEVICES!LDF_READ,d1
+       call    UnLockDosList
+       pop     a0
+ErrorSSA4      move.l  a4,a1
+       bra     ErrorSS
+
+TestDevTerm    sub.l   (a4),d6
+       add.l   a2,d6           ;ASCIIZ name length
+       clr.b   -(a2)           ;Cut out ':'
+       move.l  (a4),d2
+       move.l  d7,d1
+       call    FindDosEntry
+       tst.l   d0
+       dt      DevExists,<Device %s: already exists>
+       tpea    DevExists
+       bne.s   TestDevError
+       addq    #8,sp
+       bsr.s   DevNumDigit
+       bra     DevStdOkay
+
+FindFreeNum    move.l  4.w,a6
+       MyFORBID
+       move.l  KickTagPtr(a6),d0
+       beq.s   DevNumNoTags
+DevNumTagLoop  bclr.l  #31,d0
+       move.l  d0,a0
+DevNumTgLoop   move.l  (a0)+,d0
+       beq.s   DevNumNoTags
+       bmi.s   DevNumTagLoop
+       move.l  d0,a1
+       move.l  RT_NAME(a1),a1
+       moveq   #ResNumOne-ResName-1,d0
+       lea     ResName(pc),a2
+ResNameLoop    move.b  (a1)+,d1
+       beq.s   DevNumTgLoop
+       cmp.b   (a2)+,d1
+       dbne    d0,ResNameLoop
+       bne.s   DevNumTgLoop
+       cmp.b   (a2)+,d4
+       bne.s   DevNumTgLoop
+       cmp.b   (a2)+,d5
+       bne.s   DevNumTgLoop
+       tst.b   (a2)
+       bne.s   DevNumTgLoop
+DevNumNoTags   call    Permit
+       get.l   dosbase,a6
+       tst.w   d0
+       beq     Return
+DevNumDigit    cmp.b   #'9',d5
+       bne.s   DevNumDigitL
+       cmp.b   #'9',d4
+       bne.s   DevNumDigitH
+       dt      MaxDisks,<Max. # of RES disks reached>
+       tpea    MaxDisks
+       bra     TestDevError
+
+DevNumDigitH   addq.b  #1,d4
+       moveq   #'0'-1,d5
+DevNumDigitL   addq.b  #1,d5
+       bra.s   FindFreeNum
+
+DeviceStd      move.l  a3,-(a4)
+       move.l  MyDiskTypeAddr(pc),(a3)
+DevNumLoop     bsr.s   DevNumDigit
+       lea     3(a3),a2
+       cmp.b   #'0',d4
+       beq.s   DevNum1Null
+       move.b  d4,(a2)+
+       bra.s   Digit2Force
+
+DevNum1Null    cmp.b   d4,d5
+       beq.s   Digit2Null
+Digit2Force    move.b  d5,(a2)
+Digit2Null     move.l  a3,d2
+       move.l  d7,d1
+       call    FindDosEntry
+       tst.l   d0
+       bne.s   DevNumLoop
+DevNumOkay     move.l  a3,a2
+DevNumLength   tst.b   (a2)+
+       bne.s   DevNumLength
+       sub.l   (a4),a2
+       add.l   a2,d6
+DevStdOkay     moveq   #LDF_DEVICES!LDF_READ,d1
+       call    UnLockDosList
+       put.b   d4,UnitNum
+       put.b   d5,UnitNum+1
+       get.l   Arg_Name,d0
+       move.l  d0,a0
+       bne.s   VolumeCustom
+       geta    StVolName,a0
+       move.l  a0,a1
+       move.l  #'ResR',(a1)+   ;Standard volume name
+       move.w  #'am',(a1)+
+       lea     3(a3),a2
+VolNameEnd     move.b  (a2)+,(a1)+
+       bne.s   VolNameEnd
+VolumeCustom   move.l  a0,-(a4)
+TestVolName    tst.b   (a0)+
+       bne.s   TestVolName
+       sub.l   (a4),a0
+       add.l   a0,d6
+
+       moveq   #64,d0
+       lsl.l   #6,d0           ;4KBytes Quantum
+       moveq   #MEMF_PUBLIC,d1
+       call    ss,TrackLinPool
+       put.l   d0,LinPool
+       geta    Root+LN_PRED,a1
+       move.l  a1,-(a1)
+       addq    #FC_DirList,a1
+       bsr     InitDir         ;@A4=Parent/Current dir
+       getad   Anchor,a0,d2
+       move.l  #(APF_DOWILD!APF_DODOT)<<24!PathLen,ap_Flags(a0)
+       get.l   Arg_Files,d1
+       call    dos,MatchFirst
+       tst.l   d0
+       beq.s   FileScanFirst
+       cmp.l   #ERROR_NO_MORE_ENTRIES,d0
+ErrNoMorePtr   equ     *-4
+       bne.s   ErrorScan
+       vpush   Arg_Files
+       dtl     <No files match %s>,a0
+ErrorA1SS      move.l  sp,a1
+ErrorSS        jump    ss,ExitError
+
+ErrorScan      dtl     <Error scanning files %s>,a0
+       vpush   Arg_Files
+SSDosErrorA1   move.l  sp,a1
+       jump    ss,DosError
+
+PrintDirName   btstv.b #VerbB_Dirs,Arg_Verbose+3
+       beq     Return
+       vpea    Anchor+ap_Buf
+       dtl     <Scanning directory %s ...',13,$9B,'K>,a0
+       move.l  sp,a1
+       call    ss,Printf
+ReturnSPinc    addq    #4,sp
+       rts
+
+FileScanFirst  get.l   Anchor+ap_Current,a0
+       move.l  an_Lock(a0),d1
+       call    DupLock
+       put.l   d0,RootLock
+       beq.s   ErrorScan
+       tstv.l  Arg_Verbose
+       beq.s   FileScanLoop
+       dtl     <',$9B,'0 p>,a0
+       call    ss,Puts
+
+FileScanLoop   tstv.l  Anchor+ap_Info+fib_DirEntryType
+       bpl.s   IsDir
+       btstv.b #VerbB_Files,Arg_Verbose+3
+       sne     d7
+       beq.s   FileVerbOff
+       bsr.s   FileHeader
+FileVerbOff    tstv.b  Anchor+ap_Info+fib_Protection+3
+       bpl     IsFile
+       tst.b   d7
+       beq.s   NextFile
+       dtl     <Skipped>,a0
+       call    PutsNL
+       bra.s   NextFile
+
+FileHeader     geta    Anchor+ap_Buf,a0
+       call    ss,Puts
+       dtl     < - >,a0
+       jump    Puts
+
+IsDir  bclrv.b #APB_DIDDIR,Anchor+ap_Flags
+       bne     WasDir
+       bsetv.b #APB_DODIR,Anchor+ap_Flags
+       tstv.b  Anchor+ap_Info+fib_FileName
+       beq.s   ClimbedUp
+       bsr     AllocateFC
+       call    ss,TestStack
+       push    a4
+       bsr     InitDir
+ClimbedUp      bsr     PrintDirName
+
+NextFile       call    ss,TestBreak
+       getad   Anchor,a0,d1
+       call    dos,MatchNext
+       tst.l   d0
+       beq.s   FileScanLoop
+       cmp.l   ErrNoMorePtr(pc),d0
+       bne     ErrorScan
+       bsr     FlushStdout
+       get.l   ResList,d3
+       beq     ListPreNull     ;No resident modules -> No detaching
+;Calculate size of the parts for detaching
+       geta    ResMemory,a4
+ListPreSize    move.l  d3,a2
+       move.l  (a2)+,d3        ;RC_Next
+       addq    #RC_Hunks-RC_Type,a2
+       move.w  (a2)+,d0        ;RC_Hunks
+       bra.s   HunkSizeInto
+
+HunkSize       move.l  (a2)+,d1
+       addq.l  #2,d1
+       move.l  a4,a0
+       lsl.l   #2,d1
+       bcs.s   HunkSizeChip
+       subq    #4,a0
+HunkSizeChip   add.l   d1,-(a0)
+HunkSizeInto   dbra    d0,HunkSize
+       tst.l   d3
+       bne.s   ListPreSize
+;Allocate detach part
+       moveq   #MEMF_CHIP,d1
+       move.l  sp,a2
+       dtl     <CHIP>,a3
+       dt      PublicMsg,<PUBLIC>
+GetDetaches    push    d1
+       move.l  -(a4),d2
+       beq.s   NoPart
+       addq.l  #ME_SIZE,d6     ;(Any|Chip)Detach entry
+       gett    DetachMsg,a0
+       move.l  a3,a1
+       bsr     AllocMemTopF
+       move.l  d1,(a4)
+       move.l  (sp),d1
+       move.l  d0,(sp)
+       addq    #5,a3
+NoPart subq.l  #MEMF_CHIP,d1   ;CHIP,void
+       bcc.s   GetDetaches
+;Fill in hunk pointers
+       get.l   ResList,d2
+NextPtrMain    move.l  d2,a0
+       move.l  (a0)+,d2        ;RC_Next
+       addq    #RC_Hunks-RC_Type,a0
+       move.w  (a0)+,d0
+       geta    ResMemory,a2    ;Trashed long
+       bra.s   HunkPtrsInto
+
+HunkPtrsLoop   move.l  (a0),d1
+       move.l  sp,a3
+       lsl.l   #2,d1
+       bcc.s   HunkPtrsAny
+       addq    #4,a3
+HunkPtrsAny    move.l  (a3),a1
+       move.l  d1,(a1)
+       addq.l  #8,(a1)+
+       move.l  a1,d3
+       lsr.l   #2,d3
+       move.l  d3,(a2)
+       move.l  a1,a2
+       clr.l   (a1)+
+       move.l  a1,(a0)+
+       add.l   d1,a1
+       move.l  a1,(a3)
+HunkPtrsInto   dbra    d0,HunkPtrsLoop
+       tst.l   d2
+       bne.s   NextPtrMain
+       addq    #8,sp           ;Trash destination addresses
+;LoadSeg the file
+       vmovev.l ResList,EOFRegs
+LoadSegLoop    get.l   EOFRegs,a4      ;previously D2
+       addq.l  #8,d6           ;SegList+Checksum
+       move.l  (a4)+,d4        ;RC_Next
+       move.w  (a4)+,d3        ;RC_Type
+       bmi.s   LoadSegCmd
+       addq.l  #4,d6           ;^ResidentTag
+LoadSegCmd     move.l  (a4),a2         ;RC_Tracker
+       lea     trk_ext(a2),a2
+       move.l  (v),a6
+       btstv.b #VerbB_LoadFiles,Arg_Verbose+3
+       beq.s   SkipLoadSegInfo
+       move.l  a2,a1
+       dtl     <LoadSeg of the file %s ...',13,$9B,'K>,a0
+       call    Printf
+SkipLoadSegInfo        move.l  (a2),a0         ;trk_ext
+       move.l  -(a2),d2        ;trk_data
+       moveq   #OPEN_OLD,d0
+       moveq   #0,d1
+       call    TrackOpenBufFH
+       move.l  d4,d2
+       move.l  d0,a2
+       addq    #RC_SIZEOF-RC_Tracker,a4
+       movemv.l d2-d6/a2/a4/a6/sp,EOFRegs
+       moveq   #0,d4
+       moveq   #0,d5
+;A4=Hunk pointer table
+;A2=File tracker
+;D2=Next RC
+;D3.W=Type
+;D4=Current hunk #*4 - modifiable
+;D5=Ptr to current hunk - (A2,D4.l) or NULL for no current hunk - modifiable
+HunkMainLoop   movemv.l d4/d5,EOFRegs+2*4
+       vmovem.l EOFRegs+5*4,a2/a4/a6
+       lea     FileEnd(pc),a0
+       move.l  a0,bh_eofhook(a2)
+       call    BGetLong
+       lea     HunkError(pc),a0
+       move.l  a0,bh_eofhook(a2)
+       bclr.l  #HUNKB_ADVISORY,d0
+       snev    Advisory
+       sub.w   #HUNK_NAME,d0
+       bcs     BadHunk
+       cmp.w   #HUNK_RELRELOC32-HUNK_NAME+1,d0
+       bcc     BadHunk
+       lsl.l   #1,d0
+       move.w  HunkTable(pc,d0.w),d1
+       swap    d0
+       lsl.w   #2,d0
+       bne     HunkError
+       jsr     HunkTable(pc,d1.w)
+       bra.s   HunkMainLoop
+
+hunk   macro   ;HUNK_#?[,<routine>]
+       ifne    _hunk-\1
+       fail    Mismatched hunk numbers!
+       endc
+       ifeq    NARG-1
+       dc.w    BadHunk-HunkTable
+       else
+       dc.w    hunk_\2-HunkTable
+       endc
+_hunk  set     _hunk+1
+       endm
+_hunk  set     1000
+HunkTable
+       hunk    HUNK_NAME,skipcnt       ;1000
+       hunk    HUNK_CODE,main          ;1001
+       hunk    HUNK_DATA,main          ;1002
+       hunk    HUNK_BSS,main           ;1003
+       hunk    HUNK_RELOC32,rel32      ;1004
+       hunk    HUNK_RELOC16            ;1005
+       hunk    HUNK_RELOC8             ;1006
+       hunk    HUNK_EXT                ;1007
+       hunk    HUNK_SYMBOL,symbol      ;1008
+       hunk    HUNK_DEBUG,skipcnt      ;1009
+       hunk    HUNK_END,end            ;1010
+       hunk    HUNK_HEADER             ;1011
+       hunk    1012                    ;????
+       hunk    HUNK_OVERLAY            ;1013
+       hunk    HUNK_BREAK              ;1014
+       hunk    HUNK_DREL32,rel16       ;1015
+       hunk    HUNK_DREL16             ;1016
+       hunk    HUNK_DREL8              ;1017
+       hunk    HUNK_LIB                ;1018
+       hunk    HUNK_INDEX              ;1019
+       hunk    HUNK_RELOC32SHORT,rel16 ;1020
+       hunk    HUNK_RELRELOC32,rrel16  ;1021
+       ifne    _hunk-HUNK_RELRELOC32-1
+       fail    Invalid number of hunks!
+       endc
+
+FileEnd        vmovem.l EOFRegs,d2-d6/a2/a4/a6/sp
+       tst.l   d5
+       bne     HunkError
+       move.l  a4,a3
+       lsr.l   #2,d4
+       cmp.w   -(a4),d4        ;RC_Hunks
+       bne     HunkError
+       subq    #RC_Hunks-RC_Tracker,a4
+       move.l  (a4),a0         ;RC_Tracker
+       call    FreeObject      ;Non-buffered tracker
+       move.w  d4,d7
+       tst.w   d3              ;RC_Type
+       bmi.s   LoadEndCmd
+       move.l  a3,d5
+FindResInto    dbra    d4,FindResLoop
+       push    bh_name(a2)
+       dtl     <No resident tag found in file "%s">,a0
+       bra     ErrorA1SS
+
+LoadEndCmd     move.l  bh_name(a2),d1
+       call    dos,FilePart
+       move.l  d0,(a4)+        ;RC_CmdName
+       bra.s   LoadEnd
+
+FindResLoop    move.l  (a3)+,a0
+       move.l  -8(a0),d0       ;Size of the hunk
+       moveq   #RT_SIZE+8,d1
+       sub.l   d1,d0
+       bcs.s   FindResInto
+       lsr.l   #1,d0
+       move.w  d0,d1
+       swap    d0
+FindResTag1    cmp.w   #RTC_MATCHWORD,(a0)+
+FindResTag2    dbeq    d1,FindResTag1
+       dbeq    d0,FindResTag1
+       bne.s   FindResInto
+       move.l  a0,d0
+       subq.l  #2,d0
+       cmp.l   (a0),d0
+       bne.s   FindResTag2
+       tst.w   d3              ;RC_Type
+       bne.s   KickMod
+       move.b  RT_FLAGS-RT_MATCHTAG(a0),d0
+       and.b   #$80,d0
+       or.b    #RTF_AFTERDOS,d0
+       move.b  d0,RT_FLAGS-RT_MATCHTAG(a0)
+       move.b  #-128,RT_PRI-RT_MATCHTAG(a0)
+KickMod        move.l  (a0),(a4)+      ;RC_Resident
+       move.l  d5,a3
+LoadEnd        move.l  a2,a0
+       call    ss,FreeObject
+       moveq   #0,d3
+       tst.w   (a4)
+       beq.s   CalcNoSum
+       subq.w  #1,d7
+CalcSumMod     move.l  (a3)+,a0
+       move.l  -8(a0),d0
+       lsr.l   #2,d0
+       subq.l  #3,d0
+       bmi.s   CalcSumModInto
+       move.w  d0,d1
+       swap    d0
+CalcSumIt      add.l   (a0)+,d3
+       dbra    d1,CalcSumIt
+       dbra    d0,CalcSumIt
+CalcSumModInto dbra    d7,CalcSumMod
+       seq     d0
+       sub.b   d0,d3
+CalcNoSum      move.l  d3,(a4)+        ;RC_CheckSum
+       move.l  (a4),d0
+       lsr.l   #2,d0
+       subq.l  #1,d0
+       move.l  d0,(a4)
+       tst.l   d2
+       bne     LoadSegLoop
+       bsr     FlushStdout
+ListPreNull    move.l  d6,d2
+       gett    BlockMsg,a0
+       dtl     <Main>,a1
+       bsr     AllocMemTop
+       put.l   d1,ResMemory
+       move.l  d0,d5
+       move.l  d0,a1
+       move.w  #RTC_MATCHWORD,(a1)+            ;RT_MATCHWORD
+       move.l  #(RTF_COLDSTART<<24)!(1<<16),d7 ;RT_[FVTP]#?
+       lea     ResName-ResidentPart+RT_SIZE-RT_MATCHTAG+2(a1),a0
+       move.l  a0,d2
+       lea     ResID-ResidentPart+RT_SIZE-RT_MATCHTAG+2(a1),a2
+       lea     ResInit-ResidentPart+RT_SIZE-RT_MATCHTAG+2(a1),a3
+       movem.l d0/d4/d7/a0/a2/a3,(a1)
+       lea     RT_SIZE-RT_MATCHTAG+2(a1),a1
+       lea     ResidentPart(pc),a0
+       move.l  #ResidentCode,d0
+       lea     ResidentCode+ResidentVars(a1),a3
+       call    exec,CopyMem
+       get.w   UnitNum,ResNumOne-V-ResidentVars(a3)
+       get.w   UnitNum,ResNumTwo-V-ResidentVars(a3)
+       lea     -ds_SIZEOF(a3),a2
+       move.l  a2,d1
+       call    dos,DateStamp   ;dosbase used below!
+       get.l   ResList,d0
+       beq.s   NoList1
+Cmds1Loop      move.l  d0,a0
+       move.l  (a0)+,d0        ;RC_Next
+       tst.w   (a0)+           ;RC_Type
+       bpl.s   NoCmdNode1
+       addq    #RC_SIZEOF-RC_CmdName,a0
+       move.l  (a0),(a3)+      ;RC_SIZEOF - SegList
+       move.l  -(a0),(a3)+     ;RC_CheckSum
+NoCmdNode1     tst.l   d0
+       bne.s   Cmds1Loop
+NoList1        clr.l   (a3)+
+       get.l   ResList,d0
+       beq.s   NoList3
+Libs2Loop      move.l  d0,a0
+       move.l  (a0)+,d0        ;RC_Next
+       tst.w   (a0)+           ;RC_Type
+       bmi.s   NoLibNode2
+       addq    #RC_SIZEOF-RC_Resident,a0
+       move.l  (a0),(a3)+      ;SegList
+       move.l  -(a0),(a3)+     ;LibChkSum
+NoLibNode2     tst.l   d0
+       bne.s   Libs2Loop
+NoList3        push    a3              ;STACK=^Resident list
+       move.l  a3,-(a2)        ;ResListPtr
+       move.l  d5,(a3)+        ;My resident struct
+
+       get.l   ResList,d0
+       beq.s   NoList2
+Libs1Loop      move.l  d0,a0
+       move.l  (a0)+,d0        ;RC_Next
+       tst.w   (a0)+           ;RC_Type
+       bmi.s   NoResMod
+       move.l  (a0),(a3)+      ;RC_Resident
+NoResMod       tst.l   d0
+       bne.s   Libs1Loop
+NoList2        move.l  a3,-(a2)        ;ResListSucc
+       clr.l   (a3)+
+       clr.l   (a3)+           ;LN_SUCC
+       push    a3              ;STACK=^Resident list succ
+       clr.l   (a3)+           ;LN_PRED
+       move.w  #NT_KICKMEM<<8,(a3)+    ;LN_TYPE+LN_PRI
+       move.l  d2,(a3)+        ;LN_NAME
+       get.w   MEntries,(a3)+  ;ME_NUMENTRIES
+       geta    AnyTrk,a0
+       moveq   #2,d0
+MEntryLoop     move.l  (a0)+,d1
+       beq.s   NoMEntry
+       move.l  d1,a4
+       move.l  trk_data(a4),(a3)+      ;ME_ADDR
+       move.l  trk_ext(a4),(a3)+       ;ME_LENGTH
+NoMEntry       dbra    d0,MEntryLoop
+       move.l  a3,-(a2)        ;RootPtr
+       clr.l   -(a2)           ;NumLocks
+       clr.l   -(a2)           ;VolumeNode
+       move.l  MyDiskTypeAddr(pc),-(a2)        ;id_DiskType
+       moveq   #64,d0
+       lsl.l   #3,d0
+       move.l  d0,-(a2)        ;id_BytesPerBlock
+       move.l  a3,a1
+       move.l  -(a1),d0        ;Length
+       move.l  d0,d7
+       add.l   -(a1),d7
+       lsr.l   #8,d0
+       lsr.l   #1,d0           ;BlockSize=512
+       addq.l  #1,d0
+       move.l  d0,-(a2)        ;id_NumBlocksUsed
+       move.l  d0,-(a2)        ;id_NumBlocks
+       moveq   #ID_WRITE_PROTECTED,d0
+       move.l  d0,-(a2)        ;id_DiskState
+       clr.l   -(a2)           ;id_UnitNumber
+       clr.l   -(a2)           ;id_NumSoftErrors
+
+       mpush   a1/a2
+       get.l   RootLock,d1
+       call    dos,CurrentDir
+       geta    Root,a2
+       bsr     ReadFiles
+       bsr     FlushStdout
+       mpop    a1/a2
+
+       move.l  a3,-(a2)        ;DosHName
+       geta    DevName,a1
+       move.l  (a1),a0
+LenDosHName    tst.b   (a0)+
+       bne.s   LenDosHName
+       sub.l   (a1),a0
+       move.w  a0,d0
+       subq.w  #1,d0
+       move.b  d0,(a3)+
+       move.l  (a1),a0
+       bra.s   CopyDosHNameI
+
+CopyDosHNameL  move.b  (a0)+,(a3)+
+CopyDosHNameI  dbra    d0,CopyDosHNameL
+
+       move.l  a3,-(a2)        ;VolumeName
+       move.l  -(a1),a0        ;VolName
+CopyVolName    move.b  (a0)+,(a3)+
+       bne.s   CopyVolName
+
+       move.l  a3,-(a2)        ;CmdsNames
+       get.l   ResList,d0
+       beq.s   NoCmdsNoNames
+CmdNamesLoop   move.l  d0,a0
+       move.l  (a0)+,d0
+       tst.w   (a0)+           ;RC_Type
+       bpl.s   NoCmdName
+       move.l  (a0)+,a0        ;RC_CmdName
+CopyCmdName    move.b  (a0)+,(a3)+
+       bne.s   CopyCmdName
+NoCmdName      tst.l   d0
+       bne.s   CmdNamesLoop
+NoCmdsNoNames
+       move.l  d5,a0
+       move.w  #(RT_SIZE+2+ResidentCode)>>2-1,d1
+       moveq   #0,d0
+GenSumMain     sub.l   (a0)+,d0
+       dbra    d1,GenSumMain
+       move.l  a2,a0
+GenSumMainE    sub.l   (a0)+,d0
+       cmp.l   a0,d7
+       bne.s   GenSumMainE
+       move.l  d0,-(a2)        ;AnySum
+       get.l   BootPri,-(a2)   ;VarBootPri
+
+;### Write out the AbsModule (if wished) ###
+;-HEADER- 00000000 00000001 00000000 00000000 *Length* --CODE--
+;*Length* 74Ln6014 0000ABCD 00000000 00000000 00000000 00000000
+       move.l  (v),a6
+       pop     a4              ;-(A4)=KickMem, ResListSucc
+       get.l   Arg_GenAbs,d0
+       beq     GenDisk
+       btstv.b #VerbB_SizeMod,Arg_Verbose+3
+       beq.s   NoModVerb
+       push    d0
+       dtl     <Writing AbsModule to the file %s ...>,a0
+       move.l  sp,a1
+       call    Printf
+       bsr     FlushStdout
+       move.l  (v),a6
+       pop     d0
+NoModVerb      move.l  d0,a0
+       moveq   #OPEN_NEW,d0
+       moveq   #0,d1
+       call    TrackOpenBuf
+       move.l  d0,a3
+       geta    AbsHeader,a0
+       move.l  HeaderPtr(pc),(a0)
+       addq.w  #1,10(a0)
+       moveq   #AbsHdrLength+3,d0
+       geta    AnyTrk,a2
+       moveq   #2,d1
+       move.l  #$60147400!(21+AbsRawLength>>2),d2
+OutAbsLenLoop  tst.l   (a2)+
+       beq.s   OutAbsLenInto
+       addq.w  #2,d0
+       addq.b  #2,d2
+OutAbsLenInto  dbra    d1,OutAbsLenLoop
+       move.w  d0,22(a0)
+       subq.w  #1,d0
+       move.w  d0,30(a0)
+       move.w  #HUNK_CODE,26(a0)
+       swap    d2
+       move.l  d2,32(a0)
+       move.w  #$ABCD,38(a0)
+       moveq   #56,d0
+       call    BWrite
+       lea     AbsModule(pc),a0
+       move.l  #AbsRawLength,d0
+       call    BWrite
+       lea     _LVOBPutLong(a6),a1
+       bsr     GenerateEnd
+       move.l  #HUNK_END,(a0)+
+       move.l  #HUNK_OVERLAY,(a0)+
+       clr.l   (a0)+
+       clr.l   (a0)+
+       move.l  #HUNK_BREAK,(a0)+
+       move.l  a0,d0
+       sub.l   d3,d0
+       move.l  d3,a0
+       call    BWrite
+       bsr     ClosenCleanup
+
+;### Generate AbsModule to the disk (if wished) ###
+GenDisk        get.l   Arg_GenDisk,d2
+       beq     PrepHandler
+       moveq   #LDF_DEVICES+LDF_READ,d1
+       call    dos,LockDosList
+       move.l  d0,d1
+       move.l  d2,a3
+       moveq   #':',d4
+       moveq   #LDF_DEVICES,d3
+NextChar       move.b  (a3)+,d0
+       beq     DiskErrorSP
+       cmp.b   d4,d0
+       bne.s   NextChar
+       clr.b   -(a3)
+       call    FindDosEntry
+       tst.l   d0
+       beq     NoDosEntry
+       move.l  d0,a0
+       move.l  dn_Startup(a0),d0
+       beq     NoDosEntry
+       lsl.l   #2,d0
+       move.l  d0,a0
+       push    (a0)+           ;fssm_Unit
+       push    (a0)+           ;fssm_Device
+       move.l  (a0)+,d0        ;fssm_Environ
+       push    (a0)            ;fssm_Flags
+       lsl.l   #2,d0
+       move.l  d0,a0
+       move.l  (a0)+,d6        ;de_TableSize
+       cmp.l   #128,(a0)       ;de_SizeBlock
+       bne.s   NoDosEntry
+       push    de_HighCyl-de_SizeBlock(a0)
+       push    de_LowCyl-de_SizeBlock(a0)
+       push    de_Surfaces-de_SizeBlock(a0)
+       moveq   #MEMF_PUBLIC,d0
+       subq.l  #8,d6
+       subq.l  #4,d6
+       bmi.s   NoBufMemType
+       move.l  de_BufMemType-de_SizeBlock(a0),d0
+NoBufMemType   put.l   d0,sv_memattr
+       move.l  de_BlocksPerTrack-de_SizeBlock(a0),d0
+       moveq   #3,d1           ;Min. are 3 Blocks/Track
+       cmp.l   d1,d0
+       bcs.s   NoDosEntry
+       lsl.l   #8,d0
+       lsl.l   #1,d0
+       move.l  d0,d6           ;TrackBuffer size
+       get.l   utilitybase,a0
+       lea     _LVOUMult32(a0),a0
+       pop     d1              ;de_Surfaces
+       jsr     (a0)
+       pop     d1              ;de_LowCyl
+       move.l  d0,d7           ;Cylinder size
+       jsr     (a0)
+       exg.l   d0,d7           ;Position offset<->Cylinder size
+       pop     d1              ;de_HighCyl
+       addq.l  #1,d1
+       jsr     (a0)
+       sub.l   d7,d0
+       moveq   #64,d5
+       lsl.l   #3,d5           ;BootBlock size 512
+       geta    AnyTrk,a0
+       moveq   #2,d3
+LoopDiskTrk    move.l  (a0)+,d1
+       beq.s   NoDiskTrk
+       move.l  d1,a1
+       add.l   trk_ext(a1),d5
+       subq.l  #8,d5
+NoDiskTrk      dbra    d3,LoopDiskTrk
+       mpush   d0/d5
+       push    d2
+       dtl     <Not enough disk space on the device %s (size %luB, needed %luB)>,a0
+       cmp.l   d5,d0
+       bcs     ErrorA1SS
+       lea     12(sp),sp
+       moveq   #0,d3
+NoDosEntry     moveq   #LDF_DEVICES+LDF_READ,d1
+       call    UnLockDosList
+DiskErrorSP    push    d2
+DiskError      moveq   #err_lock,d0
+       move.l  (sp),a1
+       subq.l  #LDF_DEVICES,d3
+       beq     ReportSS
+       move.b  d4,(a3)
+       move.l  d2,d1
+       moveq   #DOSTRUE,d2
+       call    Inhibit
+       tst.l   d0
+       beq.s   DiskError
+       move.l  (v),a6
+       put.l   a3,InhibitEnd
+       tstv.l  Arg_NoDiskReq
+       bne.s   SkipDiskReq
+       dtl.lc  <Insert disk for the boot image>,a0
+       dt.lc   <into drive %s>
+       dt.l    <All data on it will be overwritten!>
+       move.l  sp,a1
+       dtl     <Okay|Cancel>,a2
+       call    ss,SimpleRequest
+       move.l  d0,d1
+       moveq   #err_break,d0
+       tst.l   d1
+       beq     ReportSS
+SkipDiskReq    btstv.b #VerbB_SizeMod,Arg_Verbose+3
+       beq.s   NoDiskModVerb
+       dtl     <Generating boot image to the drive %s ...>,a0
+       move.l  sp,a1
+       call    Printf
+       bsr     FlushStdout
+NoDiskModVerb  addq    #4,sp
+       move.l  d6,d1
+       moveq   #OPEN_NEW,d0
+       move.l  d2,a0
+       call    ss,TrackBufHandle
+       move.l  d0,a3
+       lea     RawDiskWrite(pc),a0
+       move.l  a0,bh_writefunc(a3)
+       mpop    d1/a0   ;fssm_Flags,fssm_Device
+       pop     d0      ;fssm_Unit
+       add.l   a0,a0
+       add.l   a0,a0
+       addq.l  #1,a0
+       sub.l   a1,a1
+       sub.l   a2,a2
+       call    TrackDevice
+       move.l  d1,bh_handle(a3)
+       move.w  #TD_FORMAT,IO_COMMAND(a1)
+       move.l  d7,IO_OFFSET(a1)
+       lea     _LVOBPutLong(a6),a1
+       moveq   #(ImgResList-BootImage)>>2,d0
+       lsl.l   #2,d0
+       lea     BootImage(pc),a0
+       call    BWrite
+       bsr.s   GenerateEnd
+       move.l  a0,d0
+       move.l  d3,a0
+       sub.l   a0,d0
+       moveq   #512-(ImgResList-BootImage)-4,d3
+       sub.l   d0,d3
+       call    BWrite
+       lsr.l   #2,d3
+FillBoot       moveq   #0,d0
+       call    BPutLong
+       dbra    d3,FillBoot
+       bsr.s   ClosenCleanup
+
+;### Prepare handler to be resident ###
+PrepHandler    pop     a3              ;^ResList
+       get.l   Arg_Reboot,d0
+       beq.s   NoReboot
+       pea     ImgRebootNow(pc)
+NoReboot       tstv.l  Arg_NoRun
+       bne     Return
+       tst.l   d0
+       bne.s   WellReboot
+       pea     AbsNextRes(pc)
+WellReboot     geta    AnyTrk,a0
+       moveq   #2,d1
+KillMemTrks    move.l  (a0)+,d0
+       beq.s   NoMemTrk
+       move.l  d0,a1
+       clr.b   trk_type(a1)
+NoMemTrk       dbra    d1,KillMemTrks
+       move.l  4.w,a6
+       lea     KickMemPtr(a6),a2
+       MyFORBID
+       move.l  (a2),-(a4)      ;KickMemPtr
+       move.l  a4,(a2)+
+       move.l  (a2),d0         ;KickTagPtr
+       beq.s   NoNextReses
+       bset.l  #31,d0
+NoNextReses    move.l  d0,-(a4)
+       bra     EndMainInit
+
+       ifd     DEBUG
+EXIT   jump    ss,ExitCleanup
+       endc
+
+;################
+;### Routines ###
+;################
+
+GenerateEnd    geta    HunkBuf,a0
+       move.l  a0,d3
+       move.l  4(sp),(a0)+
+       move.l  a4,(a0)+
+       moveq   #2,d7
+       geta    AnyTrk,a2
+       push    a3
+OutAddrLoop    move.l  (a2)+,d0
+       beq.s   OutAddrNo
+       move.l  d0,a3
+       move.l  trk_ext(a3),(a0)+
+       move.l  trk_data(a3),(a0)+
+OutAddrNo      dbra    d7,OutAddrLoop
+       pop     a3
+       rts
+
+ClosenCleanup  geta    AnyTrk,a2
+       moveq   #2,d7
+OutDataLoop    move.l  (a2)+,d0
+       beq.s   OutNoTrk
+       move.l  d0,a0
+       move.l  trk_ext(a0),d0
+       subq.l  #8,d0
+       move.l  trk_data(a0),a0
+       addq    #8,a0
+       call    BWrite
+OutNoTrk       dbra    d7,OutDataLoop
+       btstv.b #VerbB_SizeMod,Arg_Verbose+3
+       beq.s   NoModSizeVerb
+       move.l  a3,a2
+       call    BTell
+       move.l  d0,d1
+       lsr.l   #8,d1
+       addq.l  #2,d1
+       lsr.l   #2,d1
+       mpush   d0/d1
+       move.l  sp,a1
+       dtl.l   < %lu bytes (%luKB)>,a0
+       call    Printf
+       addq    #8,sp
+NoModSizeVerb  move.l  a3,a0
+       jump    FreeObject
+
+;Inputs: A2=Source A3=Destination
+ReadFiles      tst.l   (a2)
+       beq     Return
+       move.l  (v),a6
+ReadFilesRout  move.l  a3,a4           ;As ptr where to fill in DirSize
+       lea     FC_FileSize(a2),a1
+       move.l  (a1)+,d2
+       moveq   #3,d1
+PutLongA       rol.l   #8,d2
+       move.b  d2,(a3)+
+       dbra    d1,PutLongA
+       addq    #MLH_SIZE-MLH_TAIL,a1
+       move.b  (a1)+,(a3)+
+       move.l  a3,a0
+CopyReadName   move.b  (a1)+,(a3)+
+       bne.s   CopyReadName
+       tst.b   FC_ProtBits(a2)         ;FileSize (-1 for dir)
+       bmi.s   CopyDir
+       btstv.b #VerbB_LoadFiles,Arg_Verbose+3
+       beq.s   SkipLoadInfo
+       push    a0
+       move.l  sp,a1
+       dtl     <Loading data file %s ...',13,$9B,'K>,a0
+       call    Printf
+       pop     a0
+SkipLoadInfo   moveq   #OPEN_OLD,d0
+       call    TrackOpen
+       move.l  d1,a0           ;Copy tracker for ChkRead
+       move.l  d2,d0           ;Prepare FileSize
+       move.l  d1,d2           ;Copy tracker for FreeObject
+       move.l  a3,a1           ;Get dest
+       add.l   d0,a3           ;Add FileSize to dest
+       call    ChkRead
+       move.l  d2,a0
+       call    FreeObject
+NextObject     move.l  (a2),a2
+       bra.s   ReadFiles
+
+CopyDir        call    TestStack
+       moveq   #ACCESS_READ,d0
+       call    TrackLock
+       push    d1
+       move.l  d0,d1
+       call    dos,CurrentDir
+       mpush   d0/a2/a4
+       push    a3
+       move.l  d2,a2
+       bsr.s   ReadFiles
+       ;       a3/d0/a2/a4
+       mpop    d0/d1/a2/a4
+       sub.l   a3,d0
+       neg.l   d0
+       moveq   #3,d2
+PutLongB       rol.l   #8,d0
+       move.b  d0,(a4)+
+       dbra    d2,PutLongB     ;DirSize filled
+
+       call    dos,CurrentDir
+       pop     a0
+       call    ss,FreeObject
+       bra.s   NextObject
+
+IsFile moveq   #-1,d3          ;Do checksumming flag
+       geta    Anchor+ap_Info+fib_Comment,a2
+       move.l  a2,a1
+PreCommentLoop tst.b   (a2)
+       beq.s   CommentEnd
+       cmp.b   #':',(a2)+
+       bne.s   PreCommentLoop
+       clr.b   -1(a2)
+       dtl     <4ResRAM>,a0
+       bsr     CompareString
+       tst.l   d0
+       bne.s   CommentEnd
+CommentSpcLoop cmp.b   #' ',(a2)+
+       beq.s   CommentSpcLoop
+       subq    #1,a2
+       move.l  a2,a0
+CommentEndLoop tst.b   (a2)
+       beq.s   CommentEndOK
+       cmp.b   #'!',(a2)+
+       bne.s   CommentEndLoop
+       clr.b   -(a2)
+       moveq   #0,d3           ;'!'=>No checksumming
+CommentEndOK   tst.b   (a0)
+       beq.s   CommentEnd
+       dt      FullExtTable,<Data>
+       dt      PureCmdMsg,<ResCmd>     ;RCT_Cmd
+       dt      MinExtTable,<Library>   ;RCT_Lib
+       dt      <Device>                ;RCT_Lib
+       dt.c    <KickMod>               ;RCT_KickMod
+       dt      WordNull,<',0,'>
+       gett    FullExtTable,a3
+       bsr.s   GetExtNum
+       tst.b   (a3)
+       beq.s   CommentEnd
+       tst.l   d5
+       beq     MakeFile
+       subq.l  #2,d5
+       bra.s   ChecknCorrect
+
+GetExtNum      move.l  a0,a2
+       moveq   #0,d5
+GetExtNumLoop  move.l  a3,a0
+       move.l  a2,a1
+       bsr     CompareString
+       tst.l   d0
+       beq     Return
+       addq.l  #1,d5
+SkipExtName    tst.b   (a3)+
+       bne.s   SkipExtName
+       tst.b   (a3)
+       bne.s   GetExtNumLoop
+       rts
+
+CommentEnd     moveq   #FIBF_PURE!FIBF_EXECUTE,d0
+       vand.b  Anchor+ap_Info+fib_Protection+3,d0
+       moveq   #RCT_Cmd,d5
+       gett    PureCmdMsg,a3
+       cmp.b   #FIBF_PURE,d0
+       beq.s   CheckResident
+       geta    Anchor+ap_Info+fib_FileName,a0
+       call    ss,GetExtension
+       gett    MinExtTable,a3
+       bsr.s   GetExtNum
+       tst.b   (a3)
+       beq     MakeFile
+       tst.l   d5
+ChecknCorrect  shi     d0
+       add.b   d0,d5           ;Library=Device
+CheckResident  geta    Anchor+ap_Buf,a2
+       moveq   #0,d1
+       bsr     LinAlloc
+       move.l  d0,a0
+CopyOpen       move.b  (a2)+,(a0)+
+       bne.s   CopyOpen
+       move.l  d0,d2
+       get.l   Anchor+ap_Last,a0
+       move.l  an_Lock(a0),d1
+       call    dos,CurrentDir
+       geta    Anchor+ap_Info+fib_FileName,a0
+       moveq   #OPEN_OLD,d0
+       call    ss,TrackOpen
+       push    d1
+       move.l  d1,a0
+       move.l  d2,trk_ext(a0)          ;Full PathName of the file
+       geta    HunkBuf,a1
+       move.l  a1,a2
+       moveq   #20,d0
+       call    ChkTryRead
+       moveq   #20,d1
+       cmp.l   d0,d1
+       bne     TryHunksFail
+       cmp.l   #HUNK_HEADER,(a2)+
+HeaderPtr      equ     *-4
+       bne     TryHunksFail
+       tst.l   (a2)+
+       bne     TryHunksFail
+       tst.w   (a2)
+       bne     TryHunksFail
+       move.l  (a2)+,d1
+       beq     TryHunksFail
+       tst.l   (a2)+
+       bne     TryHunksFail
+       addq.l  #1,(a2)
+       cmp.l   (a2),d1
+       bne     TryHunksFail
+       move.l  d1,d4
+       lsl.l   #2,d1
+       move.l  d1,d2
+       addq.l  #8,d1
+       addq.l  #RC_SIZEOF-8,d1
+       bsr     LinAllocInt
+       move.l  d0,a1
+       geta    ResList,a2
+       move.l  (a2),(a1)+              ;RC_Next
+       move.w  d5,(a1)+                ;RC_Type
+       move.l  (sp),(a1)+              ;RC_Tracker
+       move.w  d3,(a1)+                ;RC_CheckSummed
+       move.w  d4,(a1)+                ;RC_Hunks
+       move.l  d0,d3
+       move.l  d2,d0
+       move.l  (sp),a0
+       push    a1
+       call    ChkTryRead
+       pop     a0
+       cmp.l   d0,d2
+       bne     TryHunksFail
+       moveq   #8,d1           ;SegList+CheckSum
+       move.w  d4,d2
+       subq.l  #1,d4
+TestHunkFlg    move.l  (a0)+,d0
+       rol.l   #2,d0
+       add.l   d0,d1
+       and.w   #3,d0
+       sub.l   d0,d1
+       addq.l  #8,d1
+       subq.l  #3,d0
+       dbeq    d4,TestHunkFlg
+       beq     TryHunksFail
+       move.l  d3,(a2)
+       btstv.b #VerbB_LoadSeg,Arg_Verbose+3
+       beq.s   NoFileInfo
+       move.w  d2,-(sp)
+       push    d1
+       tst.b   d7
+       bne.s   HeaderWritten
+       bsr     FileHeader
+HeaderWritten  bsr.s   WriteFileInfo
+       dtl     <; LoadSeg=%lu; Hunks=%u>,a0
+       move.l  sp,a1
+       call    Printf
+       pop     d0
+       vcmp.l  Anchor+ap_Info+fib_Size,d0
+       bls.s   LoadSegSqueeze
+       dtl     <; Large BSS part!!!>,a0
+       call    Puts
+LoadSegSqueeze addq    #2,sp
+       bra.s   DoMsgCR
+
+NoFileInfo     tst.b   d7
+       beq.s   NoMsgCR
+       bsr.s   WriteFileInfo
+DoMsgCR        bsr.s   WriteOutCR
+NoMsgCR        tst.w   d5
+       bpl.s   NotCmdIsNoName
+       geta    Anchor+ap_Info+fib_FileName,a0
+       move.l  a0,d0
+TestResNameLen tst.b   (a0)+
+       bne.s   TestResNameLen
+       sub.l   d0,a0
+       add.l   a0,d6
+NotCmdIsNoName addq    #4,sp           ;Discard the file tracker
+       bra     NextFile
+
+WriteOutCR     gett    WordNull,a0
+       jump    PutsNL
+
+WriteFileInfo  move.l  a3,a0
+       call    Puts
+       tst.l   d3
+       bne.s   HasChkSum
+       dtl     < (don''t checksum)>,a0
+       call    Puts
+HasChkSum      dtl     <; Size=%lu>,a0
+       geta    Anchor+ap_Info+fib_Size,a1
+       jump    Printf
+
+LinAlloc       move.l  a2,a0
+TestGlobLen    tst.b   (a0)+
+       bne.s   TestGlobLen
+       sub.l   a2,a0
+       add.l   a0,d1
+LinAllocInt    get.l   LinPool,a0
+       jump    ss,LinearAlloc  ;1/3 may be LinearAllocN, but ...
+
+TryHunksFail   pop     a0
+       call    FreeObject
+MakeFile       tst.b   d7
+       beq.s   NoFileVerbose
+       moveq   #-1,d3
+       gett    FullExtTable,a3
+       bsr.s   WriteFileInfo
+       bsr.s   WriteOutCR
+NoFileVerbose  bsr.s   AllocateFC
+       get.l   Anchor+ap_Info+fib_Size,(a1)    ;FC_FileSize
+       add.l   (a1),d6
+       bra     NextFile
+
+AllocateFC     geta    Anchor+ap_Info+fib_FileName,a2
+       moveq   #FC_SIZEOF,d1
+       bsr.s   LinAlloc
+       move.l  a4,a0
+       move.l  d0,a1
+       lea     FC_ProtBits(a1),a2
+       call    exec,AddTail
+       lea     FC_DirList-FC_ProtBits(a2),a1
+       move.l  a2,d0
+       get.b   Anchor+ap_Info+fib_Protection+3,(a2)+
+       geta    Anchor+ap_Info+fib_FileName,a0
+CopyFileNameA  move.b  (a0)+,(a2)+
+       bne.s   CopyFileNameA
+       sub.l   d0,a2
+       add.l   a2,d6
+       addq.l  #RFC_ProtBits,d6
+       rts             ;A1=FC_FileSize/FC_DirList
+
+WasDir tstv.b  Anchor+ap_Info+fib_FileName
+       beq     ClimbedUp
+       tstv.l  Arg_EmptyDirs
+       bne.s   ClimbUp
+       cmp.l   LH_TAILPRED(a4),a4      ;Is list empty?
+       beq.s   RemoveThatNode
+ClimbUp        move.l  a4,a0
+       lea     DirItemCmp(pc),a1
+       call    ss,SortList
+NoDirLength    pop     a4
+       geta    Anchor+ap_Buf,a2
+       move.l  a2,d1
+       call    dos,FilePart
+       cmp.l   d0,a2
+       bne.s   LongerPath
+       clr.b   (a2)
+       bra     ClimbedUp
+
+LongerPath     move.l  d0,a0
+       clr.b   -(a0)
+       bra     ClimbedUp
+
+RemoveThatNode lea     -FC_DirList(a4),a1
+       call    exec,Remove
+       lea     FC_FileName-FC_DirList(a4),a0
+DirNameLength  tst.b   (a0)+
+       bne.s   DirNameLength
+       sub.l   a4,a0
+       sub.l   a0,d6
+       addq.l  #FC_SIZEOF-FC_DirList-RFC_SIZEOF,d6
+       bra.s   NoDirLength
+
+;Inputs: A1=FC_DirList
+InitDir        move.l  a1,a4
+       addq    #4,a1
+       move.l  a1,(a4)
+       clr.l   (a1)+
+       move.l  a4,(a1)+
+       bset.b  #7,(a1)
+       rts
+
+;Inputs: A0=^^Node1 A1=^^Node2, Results: D0=-1/0/1 (Node1<=>Node2)
+DirItemCmp     move.l  (a0),a0
+       move.l  (a1),a1
+       lea     FC_ProtBits(a0),a0
+       lea     FC_ProtBits(a1),a1
+       tst.b   (a0)+
+       smi     d0
+       tst.b   (a1)+
+       smi     d1
+       sub.b   d1,d0
+       beq.s   CompareString
+       bpl     Return
+       moveq   #-1,d0
+       rts
+
+CompareString  push    a6
+       call    utility,Stricmp
+       pop     a6
+       rts
+
+AllocMemTop    moveq   #0,d1
+AllocMemTopF   addqv.w #1,MEntries
+       addq.l  #8,d2
+       addq.l  #MEM_BLOCKMASK,d2
+       and.w   #~MEM_BLOCKMASK,d2
+       or.l    #MEMF_PUBLIC!MEMF_REVERSE!MEMF_KICK,d1
+       mpush   d1/a0/a1
+       bclrv.b #err_memory,sv_errsw+3
+       move.l  d2,d0
+       call    ss,TrackAllocMem
+       bsetv.b #err_memory,sv_errsw+3
+       tst.l   d0
+       bne.s   AllocMemTopE
+       move.l  d2,d0
+       move.l  (sp),d1
+       eor.w   #MEMF_KICK!MEMF_LOCAL,d1
+       call    TrackAllocMem
+AllocMemTopE   addq    #4,sp
+       mpop    a0/a1
+       btstv.b #VerbB_Mem,Arg_Verbose+3
+       beq.s   NoMemVerbose
+       push    d1
+       mpush   d0/d2
+       push    a1
+       dt.c    DetachMsg,<Detachable >
+       dt.l    BlockMsg,<%s memory block allocated at $%08lx, size $%08lx>
+       move.l  sp,a1
+       call    Printf
+       addq    #4,sp
+       mpop    d0/d2
+       pop     d1
+NoMemVerbose   addq    #8,d0
+       rts
+
+FlushStdout    get.l   stdout,d1
+       jump    dos,Flush
+
+Cleanup        get.l   OldCurDir,d1
+       call    dos,CurrentDir
+       get.l   RootLock,d1
+       call    UnLock
+       getad   Anchor,a0,d1
+       call    MatchEnd        ;after CurrentDir!
+       tstv.l  Arg_Verbose
+       beq.s   C_NoVerb
+       dtl     <',$9B,' p>,a0
+       call    ss,Puts
+       bsr.s   FlushStdout
+C_NoVerb       get.l   InhibitEnd,d0
+       beq     Return
+       move.l  d0,a0
+       move.b  #':',(a0)
+       get.l   Arg_GenDisk,d1
+       moveq   #DOSFALSE,d2
+       jump    Inhibit
+
+hunk_main      tst.l   d5
+       bne     HunkError
+       move.l  (a4,d4.l),d5
+       push    d0
+       call    BGetLong
+       move.l  d5,a3
+       move.l  -8(a3),d6
+       cmp.l   #(HUNK_BSS-HUNK_NAME)<<17,(sp)+
+       beq.s   DoBSS
+       lsl.l   #2,d0
+       sub.l   d0,d6
+       add.l   d0,a3
+       move.l  d5,a0
+       call    BRead
+DoBSS  lsr.l   #2,d6
+       subq.l  #2,d6
+       move.w  d6,d0
+       swap    d6
+       bra.s   CPUClearInto
+CPUClearLoop   clr.l   (a3)+
+CPUClearInto   dbra    d0,CPUClearLoop
+       dbra    d6,CPUClearLoop
+       rts
+
+hunk_end       tst.l   d5
+       beq     HunkError
+       moveq   #0,d5   ;No CurrHunk
+       addq.l  #4,d4   ;HunkNum+=4
+       rts
+
+hunk_rrel16    moveq   #-1,d0
+       bra.s   HunkReloc
+hunk_rel16     moveq   #1,d0
+       bra.s   HunkReloc
+hunk_rel32     moveq   #0,d0
+HunkReloc      tst.l   d5
+       beq.s   HunkError
+       move.l  d5,a3
+       move.l  -8(a3),d6
+       subq.l  #8,d6
+       move.l  d0,d2           ;RelocType
+       lea     _LVOBGetLong(a6),a1
+       beq.s   MainRelocLoop
+       addq    #6,a1
+MainRelocLoop  jsr     (a1)
+       tst.l   d0
+       beq.s   RelocDone
+       move.l  d0,d2
+       jsr     (a1)
+       lsl.l   #2,d0
+       move.l  (a4,d0.l),d3
+       bra.s   RelocInto
+
+RelocLoop2     swap    d2
+RelocLoop1     jsr     (a1)
+       cmp.l   d6,d0
+       bcc.s   HunkError
+       lea     (a3,d0.l),a0
+       tst.w   d2
+       bpl.s   NotRelRel
+       move.l  a3,d0
+       sub.l   d0,(a0)
+NotRelRel      add.l   d3,(a0)
+RelocInto      dbra    d2,RelocLoop1
+       swap    d2
+       dbra    d2,RelocLoop2
+       bra.s   MainRelocLoop
+
+RelocDone      call    BTell
+       ror.b   #2,d0
+       bcc     Return
+       jump    BGetWord
+
+hunk_symbol    call    BGetLong
+       tst.l   d0
+       beq     Return
+       addq.l  #1,d0
+       bsr.s   RelSeekLongs
+       bra.s   hunk_symbol
+
+BadHunk        tstv.b  Advisory
+       beq.s   HunkError
+hunk_skipcnt   call    BGetLong
+RelSeekLongs   lsl.l   #2,d0
+       jump    BRelSeek
+
+HunkError      moveq   #err_read,d0
+       get.l   EOFRegs+5*4,a0  ;A2=BufFH
+       move.l  bh_name(a0),a1
+ReportSS       jump    ss,ReportError
+
+RawDiskWrite   move.l  bh_bufsize(a0),d1
+       cmp.l   d1,d0
+       bcc.s   RDW_Larger
+       move.l  d1,d0
+RDW_Larger     move.l  a1,d1
+       mpush   d0/d2/a2/a4
+       bset.b  #0,bh_arg1+3(a0)
+       bne.s   RDW_OtherWrite
+       move.w  #255,d2
+       moveq   #0,d0
+RDW_SumLoop    add.l   (a1)+,d0
+       bcc.s   RDW_SkipX
+       addq.l  #1,d0
+RDW_SkipX      dbra    d2,RDW_SumLoop
+       not.l   d0
+       move.l  d0,-1020(a1)
+RDW_OtherWrite move.l  bh_handle(a0),a1        ;DeviceTracker
+       move.l  trk_data(a1),a2         ;IoRequest
+       move.l  d1,IO_DATA(a2)          ;^Buffer
+       move.l  (sp),IO_LENGTH(a2)
+       sub.l   a0,a0
+       call    ss,ChkDoIO
+       pop     d0
+       add.l   d0,IO_OFFSET(a2)
+       mpop    d2/a2/a4
+       rts
+
+;### AbsModule header ###
+AbsModule      ;D2=Position in file to seek/2
+AbsModFH       equ     AbsModule-16
+       ifd     ModDebug
+       lea     AbsDosName(pc),a1
+       call    exec,OldOpenLibrary
+       move.l  d0,d6
+       else
+       move.l  GV_DosBase(a2),d6
+       endc
+       move.l  AbsModFH(pc),d7
+       moveq   #OFFSET_BEGINNING,d3
+       move.l  d7,d1
+       lsl.l   #2,d2
+       move.l  d6,a6
+       call    Seek
+       call    IoErr
+       tst.l   d0
+       bne.s   AbsExitErr
+       lea     AbsModTab(pc),a3
+       move.l  sp,d5
+       clr.l   -(sp)
+AbsAllocLoop   move.l  (a3)+,d0
+       beq.s   AbsAllocEnd
+       move.l  (a3)+,a1
+       move.l  d0,d3
+       call    exec,AllocAbs
+       move.l  d6,a6
+       move.l  d0,d2
+       beq.s   AbsAllocFail
+       push    d0
+       push    d3
+       move.l  d7,d1
+       addq    #8,d2
+       subq    #8,d3
+       call    Read
+       cmp.l   d0,d3
+       beq.s   AbsAllocLoop
+AbsExitErrFree pop     d0
+       beq.s   AbsExitErr
+       pop     a1
+       call    exec,FreeMem
+       bra.s   AbsExitErrFree
+
+AbsExitErr     moveq   #-1,d0
+       rts
+
+AbsAllocFail   moveq   #103,d1
+       call    SetIoErr
+       bra.s   AbsExitErrFree
+
+EndMainInit    move.l  a3,(a2)+
+       call    SumKickData
+       move.l  d0,(a2)
+       call    Permit
+       jump    CacheClearU
+
+AbsAllocEnd    move.l  d5,sp
+       move.l  4.w,a6
+       lea     KickMemPtr(a6),a2
+       MyFORBID
+       move.l  AbsKickSucc(pc),a0
+       move.l  (a2),-(a0)      ;KickMemPtr
+       move.l  a0,(a2)+
+       move.l  (a2),d0         ;KickTagPtr
+       beq.s   AbsNoNextReses
+       bset.l  #31,d0
+AbsNoNextReses move.l  d0,-(a0)
+       move.l  AbsResList(pc),a3
+       bsr.s   EndMainInit
+
+AbsNextRes     move.l  (a3)+,d0
+       ble.s   AbsNoNextRes
+       move.l  d0,a2
+       move.l  RT_NAME(a2),d2
+       move.l  d2,a1
+       call    FindResident
+       bsr.s   AbsChkEnd
+       lea     LibList(a6),a0
+       bsr.s   AbsChkList
+       lea     DeviceList(a6),a0
+       bsr.s   AbsChkList
+       move.l  a2,a1
+       moveq   #0,d1
+       call    InitResident
+       bra.s   AbsNextRes
+
+AbsChkList     move.l  d2,a1
+       MyFORBID
+       call    FindName
+       call    Permit
+AbsChkEnd      tst.l   d0
+       beq.s   AbsReturn
+       addq    #4,sp
+       bra.s   AbsNextRes
+
+AbsNoNextRes   moveq   #0,d0
+AbsReturn      rts
+
+       ifd     ModDebug
+AbsDosName     dc.b    'dos.library',0
+       even
+       endc
+
+AbsResList     equ     *+(*-AbsModule)&2
+AbsKickSucc    equ     AbsResList+4
+AbsModTab      equ     AbsKickSucc+4
+
+AbsHdrLength   equ     (AbsResList-AbsModule+24)>>2
+AbsRawLength   equ     AbsResList-AbsModule
+
+;### BootBlock of the bootimage disk ###
+
+BootImage      dc.l    'DOS'<<8,0,0
+       move.l  a1,d4           ;IoRequest
+       move.w  #CMD_READ,IO_COMMAND(a1)
+       move.l  #1024,IO_OFFSET(a1)
+       lea     ImgModTab(pc),a3
+       lea     BootImage+512(pc),a4
+       lea     BootImage+1024(pc),a5
+       move.l  4.w,a6
+ImgAllocLoop   move.l  (a3)+,d0
+       beq     ImgAllocEnd
+       move.l  (a3)+,a1
+       move.l  a1,d2
+       move.l  d0,d3
+       call    AllocAbs
+       tst.l   d0
+       beq.s   ImgAllocFail
+       addq    #8,d2
+       subq    #8,d3
+       move.l  a5,d0
+       sub.l   a4,d0
+       cmp.l   d0,d3
+       bcc.s   ImgCopyBuf
+       move.l  d3,d0
+ImgCopyBuf     move.l  a4,a0
+       add.l   d0,a4
+       move.l  d2,a1
+       add.l   d0,d2
+       sub.l   d0,d3
+       call    CopyMemQuick
+       move.l  d3,d7
+       and.w   #~511,d3
+       eor.l   d3,d7
+       bsr.s   ImgReadDisk
+       cmp.l   a4,a5
+       bne.s   ImgAllocLoop
+       push    d2
+       lea     BootImage+512(pc),a4
+       move.l  a4,d2
+       moveq   #64,d3
+       lsl.l   #3,d3           ;One sector
+       bsr.s   ImgReadDisk
+       pop     d2
+       move.l  d2,a1
+       move.l  a4,a0
+       add.l   d7,a4
+       move.l  d7,d0
+       call    CopyMemQuick
+       bra.s   ImgAllocLoop
+
+ImgReadDisk    move.l  d4,a1
+       move.l  d2,IO_DATA(a1)
+       add.l   d3,d2
+       move.l  d3,IO_LENGTH(a1)
+       call    DoIO
+       move.l  d4,a1
+       move.l  IO_OFFSET(a1),d1
+       add.l   d3,IO_OFFSET(a1)
+       tst.l   d0
+       beq     ImgReturn
+       push    d0
+       mpush   d1/d3
+       lea     ImgReadFailMsg(pc),a0
+       bra.s   ImgDoAlert
+
+ImgAllocFail   mpush   d2/d3
+       lea     ImgAllocFailMsg(pc),a0
+;A0=Printf-string, SP=Printf-data
+ImgDoAlert     move.l  sp,a1
+       lea     -80(sp),sp
+       move.l  sp,a3
+       lea     ImgAlertHdr(pc),a2
+ImgAlertPrefix move.b  (a2)+,(a3)+
+       bne.s   ImgAlertPrefix
+       subq.l  #1,a3
+       call    RawDoFmt
+       move.l  d0,a0
+       clr.b   (a0)
+       sub.l   sp,d0
+       moveq   #82,d1
+       sub.l   d0,d1
+       lsl.w   #2,d1
+       move.w  d0,-(sp)
+       lea     ImgIntuiName(pc),a1
+       call    OldOpenLibrary
+       move.l  d0,a6
+       moveq   #-1,d0
+       moveq   #29,d1
+       move.l  sp,a0
+       call    DisplayAlert
+       move.l  4.w,a6
+       bra.s   ImgRebootNow
+
+ImgAllocEnd    lea     KickMemPtr(a6),a2
+       move.l  ImgKickSucc(pc),a0
+       MyFORBID
+       move.l  (a2),-(a0)      ;KickMemPtr
+       move.l  a0,(a2)+
+       move.l  (a2),d0         ;KickTagPtr
+       beq.s   ImgNoNextReses
+       bset.l  #31,d0
+ImgNoNextReses move.l  d0,-(a0)
+       move.l  ImgResList(pc),(a2)+
+       call    SumKickData
+       move.l  d0,(a2)
+       call    CacheClearU
+ImgRebootNow   jump    ColdReboot
+
+ImgReadFailMsg dc.b    'Read(offs=%lu, len=%lu) error %ld!',0
+ImgAlertHdr    dc.b    16,'ResRAM boot: ',0
+ImgPutChar     move.b  d0,(a3)+
+       clr.b   (a3)
+ImgReturn      rts
+
+ImgAllocFailMsg        dc.b    'AllocAbs($%08lx,$%08lx) fail!',0
+ImgIntuiName   dc.b    'intuition.library',0
+
+ImgResList     equ     *+(4-(*-BootImage)&3)&3
+ImgKickSucc    equ     ImgResList+4
+ImgModTab      equ     ImgKickSucc+4
+
+       ifgt    ImgResList-BootImage+36-512
+       fail    <Bootblock too big!>
+       endc
+
+;### Code, which will be copied to the resident memory ###
+lerr   macro
+       moveq   #255-ERROR_\1,d1
+       endm
+
+ResidentPart   dc.l    16
+ResSegList     dc.l    0
+
+Res    move.l  4.w,a6
+       amsg    <Entering handler''s code>
+       lea     V(pc),v
+
+       move.l  ThisTask(a6),a0
+       lea     pr_MsgPort(a0),a0
+       move.l  a0,(v)                  ;ProcPort
+
+       bsr     GetPacketInt
+
+       lsl.l   #2,d4
+       move.l  d4,a0
+       move.l  (v),dn_Task(a0)
+       moveq   #-1,d0
+       moveq   #0,d1
+       bsr     ReplyInt
+
+       amsg    <Startup packet replied>
+
+       lea     DosName(pc),a1
+       call    OldOpenLibrary
+       put.l   d0,DOSbase
+       beq     DoOpenDOSAlert  ;ZF=1!
+       move.l  d0,a6
+       get.l   VolumeName,d1
+       moveq   #DLT_VOLUME,d2
+       call    MakeDosEntry
+       lea     HInitFail1(pc),a3
+       bsr     AlertD0Mem
+       move.l  d0,a0
+       move.l  d0,d1
+       lsr.l   #2,d0
+       geta    VolumeNode,a1
+       move.l  d0,(a1)
+       addq    #dl_Task,a0
+       move.l  (v),(a0)
+       addq    #dl_VolumeDate-dl_Task,a0
+       movem.l GDateStamp(v),d0/d2-d3
+       movem.l d0/d2-d3,(a0)
+       move.l  -(a1),dl_DiskType-dl_VolumeDate(a0)     ;id_DiskType
+       call    AddDosEntry
+       bsr     AlertD0
+       amsg    <Volume node added>
+
+       get.l   CmdsNames,a2
+       lea     SkipCmdName(pc),a3      ;Okay, we may ignore it
+       geta    FirstSegment,a4
+AddSegLoop     move.l  (a4),d2
+       beq.s   OpenUtil
+       amsg    <Adding one resident command>
+       addq    #8,a4           ;Skip ResCmd checksum
+       move.l  a2,d1
+       moveq   #CMD_INTERNAL,d3
+       call    AddSegment
+       bsr     AlertD0
+SkipCmdName    tst.b   (a2)+
+       bne.s   SkipCmdName
+       bra.s   AddSegLoop
+
+OpenUtil       lea     UtilName(pc),a1
+       call    exec,OldOpenLibrary
+       addq.l  #AO_UtilityLib-AO_DOSLib,d7
+       lea     HInitFail2(pc),a3       ;VolumeNode from DosList
+       bsr     AlertD0
+       put.l   d0,UTILITYbase
+
+MainLoop       pea     MainLoop(pc)
+       put.l   sp,ErrSP
+       amsg    <Calling GetPacket>
+       bsr.s   GetPacket
+       amsg    <Packet received>
+       lea     FuncTable(pc),a2
+TableLoop      move.w  (a2)+,d7
+       move.w  (a2)+,d0
+       beq.s   NotInTable
+       ext.l   d0
+       cmp.l   d0,d1
+       bne.s   TableLoop
+       amsg    <Packet is known>
+NotInTable     jmp     (a2,d7.w)
+
+;Returns: D0/A1=ExecMsg, A2=DosPacket, D1=dp_Type, D2-D4=dp_Arg[1-3]
+GetLoop        move.l  (v),a0
+       call    WaitPort
+GetPacket      move.l  (v),a0
+GetPacketInt   call    GetMsg
+       tst.l   d0
+       beq.s   GetLoop
+       move.l  d0,a0
+       move.l  LN_NAME(a0),a0
+       move.l  dp_Type(a0),d1
+       movem.l dp_Arg1(a0),d2-d4
+       put.l   a0,CurrPacket
+       rts
+
+;---------------
+F_INFO         ;(lock,info):bool
+       ifd     DEBUGX
+       amsg    <INFO(>,0
+       bsr     PrintLockName
+       amsg    <)>
+       endc
+       move.l  d3,d2
+;---------------
+F_DISK_INFO            ;(info):bool
+       amsg    <DISK_INFO>
+       lsl.l   #2,d2
+       move.l  d2,a0
+       movem.l MyInfoData(v),d0-d7/a1
+       movem.l d0-d7/a1,(a0)
+;---------------
+F_IS_FILESYSTEM                ;():bool
+       amsg    <IS_FILESYSTEM>
+ReplyF0        moveq   #-1,d0
+ReplyX0        moveq   #0,d1
+;---------------
+ReplyPacket    mpush   d0/d1
+       move.l  sp,a1
+       amsg    <Packet value: $%08lx, $%08lx>
+       get.l   ErrSP,sp
+ReplyInt       amsg    <Replying packet>
+       get.l   CurrPacket,a2
+       move.l  (a2),a1         ;dp_Link (ExecMsg)
+ReplyDie       move.l  d0,dp_Res1(a2)
+       move.l  d1,dp_Res2(a2)
+       move.l  dp_Port(a2),a0  ;Port for replying
+       move.l  (v),dp_Port(a2)
+       jump    PutMsg
+;---------------
+F_CURRENT_VOLUME       ;(arg1):volume
+       ifd     DEBUGX
+       amsg    <CURRENT_VOLUME(>,0
+       bsr     PrintLockName
+       amsg    <)>
+       endc
+       get.l   VolumeNode,d0
+       bra.s   ReplyX0
+;---------------
+F_SAME_LOCK            ;(lock1,lock2):bool
+       ifd     DEBUGX
+       amsg    <SAME_LOCK(>,0
+       bsr     PrintLockName
+       amsg    <,>,0
+       move.l  d3,a0
+       bsr     PrintLockNameX
+       amsg    <)>
+       endc
+       lsl.l   #2,d2
+       move.l  d2,a0
+       move.l  fl_Key(a0),d0
+       lsl.l   #2,d3
+       move.l  d3,a0
+       cmp.l   fl_Key(a0),d0
+       beq.s   ReplyF0
+Reply00        moveq   #0,d0
+       bra.s   ReplyX0
+;---------------
+F_NIL
+       ifd     DEBUGX
+       move.w  d1,-(sp)
+       move.l  sp,a1
+       amsg    <ERROR_ACTION_NOT_KNOWN: #%d>
+       addq    #2,sp
+       endc
+       lerr    ACTION_NOT_KNOWN
+Reply0XN       not.b   d1
+Reply0X        moveq   #0,d0
+       bra.s   ReplyPacket
+;---------------
+F_FINDOUTPUT           ;(fh,lock,name):bool
+F_DELETE_OBJECT                ;(lock,name):bool
+F_CREATE_DIR           ;(lock,name):lock
+F_SET_PROTECT          ;(,lock,name,mask):bool
+F_SET_COMMENT          ;(,lock,name,comment):bool
+F_RENAME_OBJECT                ;(slock,sname,dlock,dname):bool
+F_RENAME_DISK          ;(name):bool
+F_SET_DATE             ;(,lock,name,stamp):bool
+F_SET_OWNER            ;(,,lock,userinf):bool
+F_MAKE_LINK            ;(lock,name,dest!#,soft):bool
+       lerr    DISK_WRITE_PROTECTED
+       bra.s   Reply0XN
+;---------------
+F_FINDUPDATE           ;(fh,lock,name):bool
+       moveq   #-1,d6
+       bra.s   FindUpdateJmp
+;---------------
+F_FINDINPUT            ;(fh,lock,name):bool
+       amsg    <FINDINPUT>
+       moveq   #0,d6
+FindUpdateJmp  push    d2
+       move.l  d3,d2
+       move.l  d4,d3
+       bsr.s   LocateMain
+       pop     a1
+JumpFhFromLock ;D0=arg1 A1=fh, A0=^DiskObject
+       tst.b   RFC_ProtBits(a0)
+       bpl.s   FindInputFile
+       move.l  d0,d2
+       bsr.s   FreeLockMain
+ObjWrongType   lerr    OBJECT_WRONG_TYPE
+       bra.s   Reply0XN
+
+FindInputFile  add.l   a1,a1
+       add.l   a1,a1
+       clr.l   fh_Interactive(a1)
+       move.l  d0,fh_Arg1(a1)
+       bra.s   ReplyF0
+;---------------
+F_FREE_LOCK            ;(lock):bool
+       amsg    <FREE_LOCK>
+F_END          ;(arg1):bool
+       ifd     DEBUGX
+       amsg    <END(>,0
+       bsr     PrintLockName
+       amsg    <)>
+       endc
+       pea     ReplyF0(pc)
+;---------------
+FreeLockMain   subqv.l #1,NumLocks
+       lsl.l   #2,d2
+       move.l  d2,a1
+       jump    FreeVec
+;---------------
+F_LOCATE_OBJECT                ;(lock,name,mode):lock
+       amsg    <LOCATE_OBJECT>
+       lerr    OBJECT_IN_USE
+       addq.l  #-ACCESS_READ,d4
+       bne.s   Reply0XN
+       pea     ReplyX0(pc)
+;---------------
+;Inputs: D2=^Lock D3=Name D6=FindUpdate?
+LocateMainNoUpd        moveq   #0,d6
+LocateMain
+       ifd     DEBUGX
+       amsg    <LocateMain(>,0
+       bsr     PrintLockName
+       move.l  d3,a0
+       add.l   a0,a0
+       add.l   a0,a0
+       moveq   #0,d0
+       move.b  (a0)+,d0
+       lea     -30(sp),sp
+       move.l  sp,a1
+       bra.s   CopyDbgInto
+CopyDbgLoop    move.b  (a0)+,(a1)+
+CopyDbgInto    dbra    d0,CopyDbgLoop
+       clr.b   (a1)
+       push    sp
+       move.l  sp,a1
+       amsg    <,%s)>
+       lea     34(sp),sp
+       endc
+
+       lsl.l   #2,d3
+       move.l  d3,a1
+       moveq   #0,d3
+       move.b  (a1)+,d3
+
+       move.l  a1,a0
+       move.w  d3,d0
+       bra.s   ColInto
+ColLoop        cmp.b   #':',(a0)+
+ColInto        dbeq    d0,ColLoop
+       bne.s   ColSkip
+       move.l  a0,a1
+       move.w  d0,d3
+ColSkip
+       get.l   RootPtr,a0
+       lsl.l   #2,d2
+       beq.s   LockInRoot
+       amsg    <Lock in UserDir>
+       move.l  d2,a2
+       move.l  fl_Key(a2),a0
+LockInRoot     tst.b   RFC_ProtBits(a0)
+       bpl.s   ObjWrongType    ;Given lock is to file
+
+NextComponent  amsg    <NextComponent:>
+       moveq   #108,d4         ;Name buffer size
+       geta    NameBuffer,a2
+       move.l  a2,a4
+       lerr    INVALID_COMPONENT_NAME
+       bra.s   NameLoopInto
+
+NameLoop       move.b  (a1)+,d5
+       cmp.b   #'/',d5
+       beq.s   SlashFound
+       subq.l  #1,d4
+       beq     Reply0XN
+       move.b  d5,(a2)+
+NameLoopInto   dbra    d3,NameLoop
+       amsg    <End of FilePath reached>
+       cmp.l   a2,a4
+       beq.s   LockInternal
+       amsg    <Locking file in CurrDir>
+       bsr.s   FindDirItem
+       amsg    <FindDirItem returned>
+;---------------
+;Inputs: A0=^Object, Results: D0=Lock (BPTR)
+LockInternal   mpush   d1/a0-a1
+       ifd     DEBUGX
+       amsg    <LockInternal(>,0
+       push    a2
+       bsr     PrintObjName
+       pop     a2
+       amsg    <)>
+       endc
+       moveq   #fl_SIZEOF,d0
+       moveq   #MEMF_PUBLIC,d1
+       call    AllocVec
+       moveq   #ERROR_NO_FREE_STORE,d1
+       tst.l   d0
+       beq     Reply0X
+       addqv.l #1,NumLocks
+       move.l  d0,a0
+       clr.l   (a0)+           ;fl_Link
+       move.l  4(sp),(a0)+     ;fl_Key
+       moveq   #ACCESS_READ,d1
+       move.l  d1,(a0)+        ;fl_Access
+       move.l  (v),(a0)+       ;fl_Task
+       get.l   VolumeNode,(a0) ;VolumeNode->fl_Volume
+       lsr.l   #2,d0
+       mpop    d1/a0-a1
+       amsg    <LockInternal end>
+       rts
+;---------------
+;End>Empty>Lock CurrDir (A0)
+;    Else >Lock FileName in CurrDir
+;/  >Empty>Parent of CurrDir->A0
+;    Else >Find FileName in CurrDir->A0 (must be DIR)
+
+SlashFound     amsg    <SlashFound:>
+       cmp.l   a2,a4
+       bne.s   NoParent
+       amsg    <Getting Parent>
+       bsr.s   GetEntryParent
+       beq.s   ObjNotFound
+       amsg    <GetEntryParent returned>
+       bra.s   NextComponent
+
+NoParent       amsg    <Switching to sub-directory>
+       bsr.s   FindDirItem
+       amsg    <FindDirItem returned>
+       bra.s   LockInRoot
+
+;---------------
+;Inputs: A2=^End of filename A4=^NameBuffer A0=CurrDir D6=FindUpdate?
+;Results: D0/A0=^DirEntry D5=Size A4=LastDir, Destroys: D2/D4
+FindDirItem    clr.b   (a2)
+       ifd     DEBUGX
+       mpush   a0-a2
+       push    a4
+       move.l  sp,a1
+       amsg    <FindDirItem(%s,>,0
+       addq    #4,sp
+       bsr     PrintObjName
+       amsg    <)>
+       mpop    a0-a2
+       endc
+       moveq   #3,d2
+GetLongC       lsl.l   #8,d5
+       move.b  (a0)+,d5
+       dbra    d2,GetLongC
+       tst.b   (a0)+           ;RFC_ProtBits
+       bpl     ObjWrongType
+SkipNameB      tst.b   (a0)+
+       bne.s   SkipNameB
+       move.l  d5,d4
+       add.l   a0,d4
+
+FindFileLoop   cmp.l   d4,a0           ;D4=Address after current dir
+       bcs.s   StillInDir
+       lerr    DISK_WRITE_PROTECTED
+       tst.l   d6
+       bne     Reply0XN
+ObjNotFound    lerr    OBJECT_NOT_FOUND
+       bra     Reply0XN
+
+StillInDir     move.l  a0,d0
+       moveq   #3,d2
+GetLongA       lsl.l   #8,d5
+       move.b  (a0)+,d5
+       dbra    d2,GetLongA
+       addq    #RFC_FileName-RFC_ProtBits,a0
+       mpush   d0-d1/a0-a1/a6
+       move.l  a4,a1
+       call    UTILITY,Stricmp
+       move.l  d0,d2
+       mpop    d0-d1/a0-a1/a6
+SkipNameC      tst.b   (a0)+
+       bne.s   SkipNameC
+       add.l   d5,a0
+       tst.l   d2
+       bne.s   FindFileLoop
+       move.l  d0,a0
+       rts
+;---------------
+;Inputs: A0=^Entry, Results: A0=^Parent entry, ZF=EQ if no parent
+GetEntryParent mpush   d0-d2/a1-a2
+       get.l   RootPtr,a2
+       sub.l   a1,a1           ;Parent of Root is 0
+NextEntry      amsg    <NextEntry:>
+       cmp.l   a0,a2
+       beq.s   ParentReturn
+       move.l  a2,d2
+       moveq   #3,d0
+GetLongB       lsl.l   #8,d1
+       move.b  (a2)+,d1
+       dbra    d0,GetLongB
+       move.b  (a2)+,d0        ;RFC_ProtBits
+ReachEndName   tst.b   (a2)+
+       bne.s   ReachEndName
+       amsg    <Name skipped>
+       add.l   d1,a2
+       tst.b   d0
+       bpl.s   NextEntry
+       amsg    <Obj is directory>
+       cmp.l   a2,a0
+       bcc.s   NextEntry
+       amsg    <Walking into...>
+       sub.l   d1,a2
+       move.l  d2,a1           ;Current is parent
+       bra.s   NextEntry
+
+ParentReturn   amsg    <ParentReturn:>
+       move.l  a1,a0
+       move.l  a0,d0
+       mpop    d0-d2/a1-a2
+       rts
+;---------------
+F_FH_FROM_LOCK         ;(fh,lock):bool
+       amsg    <FH_FROM_LOCK>
+       exg     d2,d3
+F_PARENT_FH            ;(arg1):lock
+       amsg    <PARENT_FH>
+F_PARENT               ;(lock):lock
+       amsg    <PARENT>
+F_COPY_DIR_FH          ;(arg1):lock
+       amsg    <COPY_DIR_FH>
+F_COPY_DIR             ;(lock):lock
+       ifd     DEBUGX
+       amsg    <COPY_DIR(>,0
+       bsr     PrintLockName
+       amsg    <)>
+       endc
+       lsl.l   #2,d2
+       move.l  d2,a0
+       move.l  fl_Key(a0),a0
+       move.w  d1,d0
+       lsl.w   #2,d0
+       and.w   d1,d0
+       beq.s   DoCopyDir               ;COPY_DIR(|_FH)
+       amsg    <Getting parent of the lock>    ;PARENT(|_FH)
+       bsr.s   GetEntryParent
+       beq     Reply00
+       amsg    <GetEntryParent returned>
+DoCopyDir      bsr     LockInternal
+       amsg    <PARENT/COPY_DIR locked>
+       cmp.w   #ACTION_FH_FROM_LOCK,d1
+       bne     ReplyX0
+       move.l  d3,a1
+       bra     JumpFhFromLock
+;---------------
+F_SEEK         ;(arg1,pos,mode):oldpos/-1
+       amsg    <SEEK>
+F_READ         ;(arg1,&buf,len):len/-1
+       ifd     DEBUGX
+       amsg    <READ(>,0
+       bsr     PrintLockName
+       amsg    <)>
+       endc
+       lsl.l   #2,d2
+       move.l  d2,a1
+       move.l  (a1)+,d5        ;fl_Link - Current position
+       move.l  (a1),a0         ;fl_Key
+       moveq   #3,d2
+GetLongD       lsl.l   #8,d0
+       move.b  (a0)+,d0
+       dbra    d2,GetLongD
+       tst.b   (a0)+           ;RFC_ProtBits
+       bpl.s   ObjIsFile
+       amsg    <Wrong type!>
+       lerr    OBJECT_WRONG_TYPE
+ReplyFXN       not.b   d1
+ReplyFX        moveq   #-1,d0
+       bra     ReplyPacket
+;---------------
+F_WRITE                ;(arg1,&buf,len):len
+       lerr    DISK_WRITE_PROTECTED
+       bra.s   ReplyFXN
+;---------------
+ObjIsFile      cmp.w   #ACTION_SEEK,d1
+       beq.s   ActionIsSeek
+       sub.l   d5,d0           ;D0=Remaining bytes
+SkipNameA      tst.b   (a0)+
+       bne.s   SkipNameA
+       add.l   d5,a0           ;a0=^1st byte for copy
+       cmp.l   d0,d4
+       bcc.s   DoReadFile
+       amsg    <Read in range>
+       move.l  d4,d0
+DoReadFile     add.l   d0,-(a1)
+       move.l  d0,d2
+       move.l  d3,a1
+       call    CopyMem
+       amsg    <Copied>
+       move.l  d2,d0
+       bra     ReplyX0
+
+ActionIsSeek   lerr    SEEK_ERROR
+       addq.l  #1,d4
+       beq.s   SeekDone        ;OFFSET_BEGINNING=-1
+       subq.l  #1,d4
+       beq.s   SeekCurrent     ;OFFSET_CURRENT=0
+       subq.l  #1,d4
+       bne.s   ReplyFXN        ;OFFSET_END=1
+       amsg    <offset_end>
+       add.l   d0,d3           ;End-of-File
+SeekDone       cmp.l   d3,d0
+       bcs.s   ReplyFXN
+       move.l  -(a1),d0        ;Old position
+       move.l  d3,(a1)         ;fl_Link
+       bra     ReplyX0
+
+SeekCurrent    amsg    <SeekCurrent:>
+       add.l   d5,d3           ;fl_Link
+       bra.s   SeekDone
+;---------------
+F_EXAMINE_FH           ;(arg1,fib):bool
+       amsg    <EXAMINE_FH>
+F_EXAMINE_OBJECT       ;(lock,fib):bool
+       amsg    <EXAMINE_OBJECT>
+F_EXAMINE_NEXT         ;(lock,fib):bool
+       ifd     DEBUGX
+       amsg    <EXAMINE_NEXT(>,0
+       bsr     PrintLockName
+       amsg    <)>
+       endc
+       lsl.l   #2,d2
+       move.l  d2,a0
+       lsl.l   #2,d3
+       move.l  d3,a1
+       move.l  fl_Key(a0),a2
+       pea     ReplyF0(pc)
+       cmp.w   #ACTION_EXAMINE_NEXT,d1
+       bne.s   ExamineMain
+       lerr    NO_MORE_ENTRIES
+       move.l  (a1),d3         ;fib_DiskKey
+       beq     Reply0XN        ;ExNext without Examine
+       moveq   #3,d2
+GetLongF       lsl.l   #8,d0
+       move.b  (a2)+,d0
+       dbra    d2,GetLongF
+       tst.b   (a2)+           ;RFC_ProtBits
+       bpl     ObjWrongType
+SkipNameD      tst.b   (a2)+
+       bne.s   SkipNameD
+       add.l   a2,d0           ;D0=End of this directory
+       cmp.l   fl_Key(a0),d3
+       beq.s   FirstEntryIn    ;A2=Entry to process
+       move.l  d3,a2
+       moveq   #3,d2
+GetLongG       lsl.l   #8,d3
+       move.b  (a2)+,d3
+       dbra    d2,GetLongG
+       addq    #RFC_FileName-RFC_ProtBits,a2
+SkipNameE      tst.b   (a2)+
+       bne.s   SkipNameE
+       add.l   d3,a2
+FirstEntryIn   cmp.l   a2,d0
+       beq     Reply0XN        ;No more entries
+
+;Inputs: A2=^DirEntry A1=^FileInfoBlock
+ExamineMain    move.l  a2,(a1)+        ;fib_DiskKey
+       moveq   #3,d1
+GetLongE       lsl.l   #8,d0
+       move.b  (a2)+,d0
+       dbra    d1,GetLongE
+       moveq   #ST_FILE,d1
+       moveq   #0,d2
+       move.b  (a2)+,d2
+       move.l  d0,d4
+       subq.l  #1,d4
+       asr.l   #8,d4
+       asr.l   #1,d4
+       addq.l  #1,d4
+       bclr.l  #7,d2
+       beq.s   EntryTypeDone
+       moveq   #0,d0           ;Size of directory is zero...
+       moveq   #1,d4           ;... but the block size is 1 <- Magic
+       moveq   #ST_USERDIR,d1
+       tst.b   (a2)
+       bne.s   EntryTypeDone
+       moveq   #ST_ROOT,d1
+       get.l   VolumeName,a2
+EntryTypeDone  move.l  d1,(a1)+        ;fib_DirEntryType
+       lea     fib_Protection-fib_FileName(a1),a3
+       move.l  a2,d3
+TestNameLength tst.b   (a2)+
+       bne.s   TestNameLength
+       sub.l   d3,a2
+       exg     d3,a2
+       move.b  d3,(a1)+
+CopyFileNameB  move.b  (a2)+,(a1)+     ;RFC_FileName->fib_FileName
+       bne.s   CopyFileNameB
+       move.l  d2,(a3)+        ;fib_Protection /vvv-MORE MAGIC!!!
+       move.l  d1,(a3)+        ;fib_EntryType (=fib_DirEntryType???)
+       move.l  d0,(a3)+        ;fib_Size
+       move.l  d4,(a3)+        ;fib_NumBlocks
+       geta    GDateStamp,a0
+       move.l  (a0)+,(a3)+     ;GDateStamp->fib_DateStamp
+       move.l  (a0)+,(a3)+
+       move.l  (a0),(a3)+
+       clr.b   (a3)            ;fib_Comment
+       bra     ReplyF0
+;---------------
+F_DIE          ;():bool
+       amsg    <DIE>
+       lerr    OBJECT_IN_USE
+       tstv.l  NumLocks
+       bne     Reply0XN
+       amsg    <Replying the DIE packet to my killer>
+       moveq   #-1,d0
+       moveq   #0,d1
+       bsr     ReplyInt
+       amsg    <Death packet replied, closing UtilLib>
+       get.l   UTILITYbase,a1
+       call    exec,CloseLibrary
+HInitFail2     moveq   #LDF_VOLUMES!LDF_WRITE,d1
+       call    DOS,LockDosList
+       amsg    <LockDosList OK>
+       get.l   VolumeNode,d2
+       lsl.l   #2,d2
+       move.l  d2,d1
+       amsg    <Calling RemDosEntry>
+       call    RemDosEntry
+       amsg    <VolumeNode removed>
+       moveq   #LDF_VOLUMES!LDF_WRITE,d1
+       call    UnLockDosList
+       amsg    <DosList freed>
+HInitFail1     amsg    <Forbidding>
+       MyFORBID exec
+       amsg    <DieResMod regs load>
+       get.l   ResListPtr,a2
+       move.l  (a2),d1
+       moveq   #31,d2
+       move.l  ResModules(a6),d0
+       beq.s   DieResModEnd
+DieResModChunk amsg    <DieResModChunk:>
+       move.l  d0,a0
+DieResModLoop  amsg    <DieResModLoop:>
+       move.l  (a0),d0
+       beq.s   DieResModEnd
+       amsg    <Some entry>
+       bclr.l  d2,d0
+       bne.s   DieResModChunk
+       amsg    <Resident pointer>
+       cmp.l   (a0)+,d1
+       bne.s   DieResModLoop
+       amsg    <Resident is mine>
+       move.l  a0,d0
+       bset.l  d2,d0
+       move.l  d0,-(a0)
+DieResModEnd   amsg    <DieTag regs load>
+       get.l   ResListSucc,a1
+       lea     KickTagPtr(a6),a0
+       move.l  (a0)+,d0
+       bne.s   DieTagInto
+       amsg    <Empty KickTagPtr>
+DieTagNotFound amsg    <DieTagNotFound:>
+       and.w   #$7FFF,KickTagPtr(a6)
+       addq    #4,a1
+       lea     KickMemPtr(a6),a0
+DieMemLoop     amsg    <DieMemLoop:>
+       move.l  (a0),d0         ;LN_SUCC
+       beq.s   DieSumKick
+       cmp.l   d0,a1
+       beq.s   DieMemFound
+       move.l  d0,a0
+       bra.s   DieMemLoop
+
+DieTagFound    amsg    <DieTagFound:>
+       move.l  (a1),-(a0)
+       bra.s   DieTagNotFound
+
+DieTagLoop     amsg    <DieTagLoop:>
+       move.l  (a0)+,d0
+       beq.s   DieTagNotFound
+       bpl.s   DieTagLoop
+       bclr.l  d2,d0
+DieTagInto     amsg    <DieTagInto:>
+       cmp.l   d0,a2
+       beq.s   DieTagFound
+       move.l  d0,a0
+       bra.s   DieTagLoop
+
+DieMemFound    amsg    <DieMemFound:>
+       move.l  (a1),(a0)
+DieSumKick     call    SumKickData
+       move.l  d0,KickCheckSum(a6)
+       call    CacheClearU
+       amsg    <KickCheckSum rewritten>
+DiePortLoop    amsg    <DiePortLoop:>
+       move.l  (v),a0
+       call    GetMsg
+       tst.l   d0
+       beq.s   DiePortOK
+       amsg    <Some packet got>
+       move.l  d0,a1           ;ExecMsg
+       move.l  LN_NAME(a1),a2  ;DosPacket
+       moveq   #0,d0
+       lerr    OBJECT_IN_USE
+       not.b   d1
+       amsg    <Replying...>
+       bsr     ReplyDie
+       amsg    <ReplyDie returned>
+       bra.s   DiePortLoop
+
+DiePortOK      amsg    <DiePortOK:>
+       get.l   DevNode,a0
+       clr.l   dn_Task(a0)
+       clr.l   dn_SegList(a0)
+       amsg    <dn_(Task|SegList) cleared>
+       call    Permit
+       amsg    <Permit succeeded>
+       get.l   VolumeNode,d1
+       lsl.l   #2,d1
+       call    DOS,FreeDosEntry
+       amsg    <VolumeNode deallocated>
+       move.l  a6,a1
+       call    exec,CloseLibrary
+       amsg    <DosLib closed>
+       get.l   ErrSP,sp
+       addq    #4,sp
+       amsg    <The Final Forbid>
+       MyFORBID
+       get.l   RootPtr,a0
+       move.l  -(a0),d0        ;ME_LENGTH
+       move.l  -(a0),a1        ;ME_ADDR
+       amsg    <Calling FreeMem for myself>
+       call    FreeMem
+       amsg    <Running in non-allocated memory!>
+       moveq   #0,d0
+       amsg    <Final RTS... shutting down....>
+       rts
+
+;---------------
+func   macro   ;Function
+       dc.w    F_\1-*-4,ACTION_\1
+       endm
+FuncTable
+;              ACTION_#?       ;Arg1   Arg2    Arg3    Res1
+;              --------------------------------------------
+;              STARTUP         ;?      startup devnode         bool
+       func    FINDINPUT       ;fh     lock    name            bool
+       func    FINDUPDATE      ;fh     lock    name            bool
+       func    READ            ;arg1   &buf    len             len
+       func    END             ;arg1                           bool
+       func    SEEK            ;arg1   pos     mode            oldpos
+       func    EXAMINE_NEXT    ;lock   fib                     bool
+       func    EXAMINE_OBJECT  ;lock   fib                     bool
+       func    INFO            ;lock   info                    bool
+       func    DISK_INFO       ;info                           bool
+       func    PARENT          ;lock                           lock
+       func    LOCATE_OBJECT   ;lock   name    mode            lock
+       func    COPY_DIR        ;lock                           lock
+       func    FREE_LOCK       ;lock                           bool
+       func    CURRENT_VOLUME  ;arg1                           volume
+       func    SAME_LOCK       ;lock1  lock2                   bool
+       func    IS_FILESYSTEM   ;                               bool
+       func    FH_FROM_LOCK    ;fh     lock                    bool
+       func    PARENT_FH       ;arg1                           lock
+       func    EXAMINE_FH      ;arg1   fib                     bool
+       func    COPY_DIR_FH     ;arg1                           lock
+;Write-protected functions
+       func    WRITE           ;arg1   &buf    len             len
+       func    FINDOUTPUT      ;fh     lock    name            bool
+       func    DELETE_OBJECT   ;lock   name                    bool
+       func    CREATE_DIR      ;lock   name                    lock
+       func    SET_PROTECT     ;       lock    name    mask    bool
+       func    SET_COMMENT     ;       lock    name    comment bool
+       func    RENAME_OBJECT   ;slock  sname   dlock   dname   bool
+       func    RENAME_DISK     ;name                           bool
+       func    SET_DATE        ;       lock    name    stamp   bool
+       func    SET_OWNER       ;               lock    userinf bool
+       func    MAKE_LINK       ;lock   name    dest!#  soft    bool
+
+       func    DIE             ;                               bool
+       func    NIL     ;End-of-table mark
+
+;A0=Module with the checksum error
+SumError       mpush   a0/a6
+       lea     ResIntuiName(pc),a1
+       call    exec,OldOpenLibrary
+       move.l  #AT_DeadEnd!AG_OpenLib!AO_Intuition,d7
+       bsr     AlertD0
+       move.l  d0,a6
+       move.l  (sp),a0
+       link    a2,#-$100
+       lea     -252(sp),sp
+       move.l  sp,a1
+SumErrLoop1    move.b  (a0)+,(a1)+
+       bne.s   SumErrLoop1
+       moveq   #53,d0
+       add.l   sp,d0
+       sub.l   a1,d0
+       lsl.b   #2,d0
+       clr.b   (a1)
+       moveq   #(SumErrMsgEnd-SumErrMsg)>>2-1,d1
+       lea     SumErrMsgEnd(pc),a0
+SumErrLoop2    push    -(a0)
+       dbra    d1,SumErrLoop2
+       move.b  d0,SumErrCenter-SumErrMsg(sp)
+       move.l  sp,a0
+       moveq   #0,d0           ;Recovery
+       moveq   #61,d1
+       call    DisplayAlert
+       tst.l   d0
+       beq.s   UserReboot
+       unlk    a2
+       mpop    a0/a6
+       rts
+
+UserReboot     move.l  4.w,a6
+       not.l   ChkBase(a6)
+       call    CacheClearU
+       jump    ColdReboot
+
+ResInit        mpush   d6/d7/a2/a3/a6
+       ifd     DEBUGX
+       call    RawIOInit
+       endc
+       amsg    <ResidentInit started>
+
+       move.l  ResListSucc+V(pc),a0
+       move.l  (a0)+,d0        ;ResListSucc
+       add.l   (a0),d0         ;KickMemSucc
+       lea     ResidentPart-2-RT_SIZE(pc),a1
+       move.w  #(RT_SIZE+2+ResidentCode)>>2-1,d1
+ResSumLoop     sub.l   (a1)+,d0
+       dbra    d1,ResSumLoop
+       move.l  RootPtr+V(pc),a0
+       move.l  -(a0),d1        ;ME_LENGTH
+       add.l   -(a0),d1        ;ME_ADDR
+       lea     AnySum+V(pc),a1
+       clr.l   VolumeNode-AnySum(a1)
+       clr.l   NumLocks-AnySum(a1)
+ResSumLoopE    sub.l   (a1)+,d0
+       cmp.l   a1,d1
+       bne.s   ResSumLoopE
+       tst.l   d0
+       beq.s   ResSumOkay
+       lea     ResName(pc),a0
+       bsr     SumError
+
+ResSumOkay     amsg    <ResRAM checksumming passed, checksumming ResCmds...>
+       lea     FirstSegment+V(pc),a2
+       move.l  CmdsNames+V(pc),a0
+CmdSumsLoop    move.l  (a2)+,d0
+       beq.s   CmdSumsDone
+       bsr.s   SumModInit
+SkipResCmdName tst.b   (a0)+
+       bne.s   SkipResCmdName
+       bra.s   CmdSumsLoop
+
+SumModInit
+       ifd     DEBUGX
+       push    a0
+       move.l  sp,a1
+       amsg    <CheckSumming module "%s">
+       addq    #4,sp
+       endc
+       moveq   #0,d7
+       tst.l   (a2)
+       beq.s   SumIncRet
+       amsg    <This ResModule HAS checksum>
+SumOneModule   lsl.l   #2,d0
+       move.l  d0,a1
+       move.l  (a1)+,d0
+       move.l  -8(a1),d1
+       lsr.l   #2,d1
+       subq.l  #3,d1
+       bmi.s   SumOneHunkEnd
+       move.w  d1,d6
+       swap    d1
+SumOneHunkLoop add.l   (a1)+,d7
+       dbra    d6,SumOneHunkLoop
+       dbra    d1,SumOneHunkLoop
+SumOneHunkEnd  tst.l   d0
+       bne.s   SumOneModule
+       tst.l   d7
+       seq     d1
+       sub.b   d1,d7
+SumIncRet      cmp.l   (a2)+,d7
+       bne     SumError
+       amsg    <CheckSum okay!>
+       rts
+
+CmdSumsDone    amsg    <Checksumming libraries and kickmods...>
+       move.l  ResListPtr+V(pc),a3
+       addq    #4,a3           ;Skip ^MyResident struct
+ResSumsLoop    move.l  (a3)+,d0
+       ble.s   ResSumsDone
+       move.l  d0,a0
+       move.l  RT_NAME(a0),a0
+       move.l  (a2)+,d0
+       bsr.s   SumModInit
+       bra.s   ResSumsLoop
+
+ResSumsDone    amsg    <All checksums done!>
+       move.l  DosHName+V(pc),a2
+       moveq   #0,d0
+       move.b  (a2),d0
+       addq.l  #2,d0
+       moveq   #MEMF_PUBLIC,d1
+       call    AllocVec
+       lea     ResInitFail(pc),a3
+       bsr     AlertD0Mem
+       amsg    <DosHandler name allocated>
+       move.l  d0,a0
+       move.l  d0,d6
+       moveq   #0,d0
+       move.b  (a2),d0
+DosNCopy       move.b  (a2)+,(a0)+
+       clr.b   (a0)
+       dbra    d0,DosNCopy
+       amsg    <DosHandler name copied>
+
+       moveq   #(DeviceNode_SIZEOF+FileSysStartupMsg_SIZEOF+de_Baud+1+DeviceNameEnd-DeviceName)>>1,d0
+       lsl.l   #1,d0
+       move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
+       call    AllocVec
+       bsr     AlertD0
+       amsg    <DeviceNode allocated>
+       move.l  d0,a0
+       exg     d0,d6
+       lea     dn_StackSize+2(a0),a0
+       move.w  #StdStackSize,(a0)+     ;dn_StackSize
+       addq.l  #8,(a0)
+       addq.l  #StdTaskPri-8,(a0)+     ;dn_Priority
+       lea     DeviceNode_SIZEOF-dn_Startup(a0),a1
+       move.l  a1,d1
+       lsr.l   #2,d1
+       move.l  d1,(a0)+        ;dn_Startup
+       lea     ResSegList(pc),a1
+       move.l  d6,DevNode+V-ResSegList(a1)
+       move.l  a1,d1
+       lsr.l   #2,d1
+       move.l  d1,(a0)+        ;dn_SegList
+       not.l   (a0)+           ;dn_GlobalVec
+       lsr.l   #2,d0
+       move.l  d0,(a0)         ;dn_Name
+       addq    #DeviceNode_SIZEOF-dn_Name+fssm_Device-FileSysStartupMsg,a0
+       lea     FileSysStartupMsg_SIZEOF-fssm_Device+de_Baud-DosEnvec(a0),a1
+       move.l  a1,d0
+       lsr.l   #2,d0
+       move.l  d0,(a0)+        ;fssm_Unit
+       lea     FileSysStartupMsg_SIZEOF-fssm_Environ+DosEnvec(a0),a1
+       move.l  a1,d0
+       lsr.l   #2,d0
+       move.l  d0,(a0)         ;fssm_Environ
+       moveq   #DE_DOSTYPE,d0
+       move.l  d0,(a1)+        ;de_TableSize
+       lsl.l   #3,d0           ;DE_DOSTYPE(=16)<<3=128
+       move.l  d0,(a1)         ;de_SizeBlock
+       addq    #de_Surfaces-de_SizeBlock,a1
+       addq.l  #1,(a1)+        ;de_Surfaces
+       addq.l  #1,(a1)+        ;de_SectorPerBlock
+       addq.l  #1,(a1)         ;de_BlocksPerTrack
+       lea     de_HighCyl-de_BlocksPerTrack(a1),a0
+       move.l  MyInfoData+id_NumBlocks+V(pc),(a0)
+       subq.l  #1,(a0)+        ;de_HighCyl
+       addq.l  #5,(a0)+        ;de_NumBuffers
+       addq.l  #MEMF_PUBLIC,(a0)+      ;de_BufMemType
+       move.l  #1<<31-1,(a0)+  ;de_MaxTransfer
+       not.l   (a0)+           ;de_Mask
+       move.l  VarBootPri+V(pc),(a0)+  ;de_BootPri
+       move.l  #'RES'<<8,(a0)+ ;de_DosType
+MyDiskTypeAddr equ     *-4
+       lea     DeviceName(pc),a1
+CopyDevName    move.b  (a1)+,(a0)+
+       bne.s   CopyDevName
+       amsg    <DeviceNode filled>
+
+       lea     ExpName(pc),a1
+       call    OldOpenLibrary
+       move.l  #AG_OpenLib!AO_ExpansionLib,d7
+       bsr.s   AlertD0
+       move.l  d0,a6
+       amsg    <Expansion opened>
+
+       call    AllocConfigDev
+       lea     ResInitCFail(pc),a3
+       bsr.s   AlertD0Mem
+       amsg    <AllocConfigDev succeeded>
+       move.l  d0,a1
+       lea     ResName(pc),a0
+       move.l  a0,LN_NAME(a1)
+       move.b  #ERT_NEWBOARD!ERTF_DIAGVALID,cd_Rom+er_Type(a1)
+       lea     MyDiagArea(pc),a0
+       move.l  a0,cd_Rom+er_Reserved0c(a1)     ;er_Reserved0[c-f]
+       amsg    <ConfigDev filled>
+
+       move.l  d6,a0
+       move.b  VarBootPri+3+V(pc),d0
+       moveq   #ADNF_STARTPROC,d1
+       call    AddBootNode
+       bsr.s   AlertD0
+       amsg    <AddBootNode succeeded>
+ResInitCFail   move.l  a6,a1
+       call    exec,CloseLibrary
+ResInitFail    amsg    <Initialization finished>
+       mpop    d6/d7/a2/a3/a6
+Return rts
+
+;### Debug part of the detach zone ###
+
+       ifd     DEBUGX
+DPrintf        mpush   d0-d1/a0-a3/a6
+       move.l  28(sp),a0
+       addq    #2,a0
+       move.l  4.w,a6
+       lea     _LVORawPutChar(a6),a2
+       MyFORBID
+       call    RawDoFmt
+       call    Permit
+       ifd     WaitDbg
+Wait1  btst.b  #2,$dff016
+       bne.s   Wait1
+Wait2  btst.b  #2,$dff016
+       beq.s   Wait2
+       endc
+       mpop    d0-d1/a0-a3/a6
+       rts
+
+;Inputs: D2=Lock
+PrintLockName  tst.l   d2
+       bne.s   LockNonNull
+       amsg    <NULL>,0
+       rts
+
+LockNonNull    push    d2
+       move.l  sp,a1
+       amsg    <$%08lx/>,0
+       addq    #4,sp
+       move.l  d2,a0
+;Inputs: A0=Lock
+PrintLockNameX add.l   a0,a0
+       add.l   a0,a0
+       move.l  fl_Key(a0),a0
+
+;Inputs: A0=^Object, Destroys: A0-A2 !!! VERY BIG STACK !!!
+PrintObjName   lea     -30(sp),sp
+       move.l  sp,a2
+       lea     RFC_FileName(a0),a1
+       move.b  #':',(a2)+
+CopyName       move.b  (a1)+,(a2)+
+       bne.s   CopyName
+       lea     DPrintf(pc),a1
+       move.w  #$4E75,(a1)
+       bsr     GetEntryParent
+       beq.s   ReachedRoot
+       vcmp.l  RootPtr,a0
+       beq.s   ReachedRoot
+       move.b  #'/',(sp)
+       bsr.s   PrintObjName
+ReachedRoot    lea     DPrintf(pc),a1
+       move.w  #$48E7,(a1)
+       push    sp
+       move.l  sp,a1
+       amsg    <%s>,0
+       lea     34(sp),sp
+       rts
+       endc
+
+; ### MyDiagArea - ptr to it is in ConfigDev structure ###
+MyDiagArea     dc.b    DAC_BOOTTIME,0          ;da_Config,da_Flags
+       dc.w    DiagAreaEnd-MyDiagArea  ;da_Size
+       dc.w    0,DiagBootUp-MyDiagArea ;da_DiagPoint,da_BootPoint
+       dc.w    ResName-MyDiagArea      ;da_Name
+       dc.w    0,0                     ;da_Reserved01,da_Reserved02
+
+AlertD0Mem     moveq   #AG_NoMemory>>16,d7
+       swap    d7
+AlertD0        tst.l   d0
+       bne.s   Return
+       move.l  a6,(sp)
+       call    exec,Alert
+       pop     a6
+       jmp     (a3)
+
+DiagBootUp     amsg    <DiagBootUp started>
+       lea     DosName(pc),a1
+       call    exec,FindResident
+DoOpenDOSAlert move.l  #AT_DeadEnd!AG_OpenLib!AO_DOSLib,d7
+       bsr.s   AlertD0
+       move.l  d0,a0
+       move.l  RT_INIT(a0),a0
+       amsg    <DiagBootUp - Initializing DOS>
+       jmp     (a0)
+DosName        dc.b    'dos.library',0
+
+ResName        dc.b    'ResRAM-Handler'
+       ifne    (*-DosName)&1
+       fail    <Odd length!>
+       endc
+ResNumOne      dc.b    0,0,0
+       even
+DiagAreaEnd
+       dc.b    '$VER: '
+ResID  dc.b    'ResRAM-Handler 1.0 (5.2.95)',0
+ExpName        dc.b    'expansion.library',0
+UtilName       dc.b    'utility.library',0
+DeviceName     dc.b    DeviceNameEnd-DeviceName-2,'none.device',0
+DeviceNameEnd
+       ifne    (DeviceNode_SIZEOF+FileSysStartupMsg_SIZEOF+de_Baud+1+DeviceNameEnd-DeviceName)&1
+       fail    <Odd length!>
+       endc
+ResIntuiName   dc.b    'intuition.library',0
+       even
+SumErrMsg      dc.b    0,96,28,'!! SYSTEM IS NOW UNRELIABLE -'
+       dc.b    ' COLD REBOOT RECOMMENDED !!',0,-1
+       dc.b    0,32,48,'LMB - Continue',0,-1
+       dc.b    480>>8,480&$FF,48,'RMB - ColdReboot',0,-1,0
+SumErrCenter   dc.b    0,16,'ResRAM #'
+       ifne    (*-SumErrMsg)&1
+       fail    <Odd length!>
+       endc
+ResNumTwo      dc.b    0,0,': Invalid checksum on '
+SumErrMsgEnd
+       ifne    (SumErrMsgEnd-SumErrMsg)&3
+       fail    <SumErr not long aligned!!>
+       endc
+V      equ     ResidentPart+(*-ResidentPart+3)&~3
+ResidentCode   equ     V-ResidentPart
+SYSCNTold      equ     SYSCNT
+SYSCNT set     0
+       dv.l    ProcPort
+       dv.l    UTILITYbase
+       dv.l    CurrPacket
+       dv.l    ErrSP
+       dv.l    DOSbase
+       dv.l    DevNode
+
+       dbuf    NameBuffer,108
+       dv.l    VarBootPri
+       dv.l    AnySum          ;Checksum of the main part
+       dv.l    CmdsNames       ;^1st name of Resident Command
+       dv.l    VolumeName      ;APTR to ASCIIZ of volume name
+       dv.l    DosHName        ;APTR to BSTR of dos handler name
+       dbuf    MyInfoData,id_SIZEOF
+VolumeNode     equ     MyInfoData+id_VolumeNode        ;BPTR
+NumLocks       equ     MyInfoData+id_InUse
+       dv.l    RootPtr         ;APTR to root entry
+       dv.l    ResListSucc     ;ResidentList successor
+       dv.l    ResListPtr      ;^^MyResidentStruct
+       dbuf    GDateStamp,ds_SIZEOF    ;Global DateStamp
+       dbuf    FirstSegment,0  ;Label of seg of first ResCmd
+
+ResidentVars   equ     SYSCNT
+SYSCNT set     SYSCNTold
+
+VerbOpt        macro   ;<name>,<letter>,<description>
+       ifc     '\1','All'
+VerbF_\1       equ     255
+       else
+       ifc     '\1','None'
+VerbF_\1       equ     254
+       else
+VerbB_\1       equ     _VerbOpt
+VerbF_\1       equ     1<<_VerbOpt
+_VerbOpt       set     _VerbOpt+1
+       endc
+       endc
+       dt.c    <',VerbF_\1,'\2>
+       dc.b    '  \2: \3',10
+       endm
+_VerbOpt       set     0
+
+       tags
+       template <FILES/A,DEVICE,NAME,PRI=BOOTPRI/N/K,EMPTYDIRS/S,GENABS/K,GENDISK/K,NODISKREQ/S,NORUN/S,REBOOT/S,VERBOSE/K>
+       dv.l    Arg_Files
+       dv.l    Arg_Device
+       dv.l    Arg_Name
+       dv.l    Arg_BootPri
+       dv.l    Arg_EmptyDirs
+       dv.l    Arg_GenAbs
+       dv.l    Arg_GenDisk
+       dv.l    Arg_NoDiskReq
+       dv.l    Arg_NoRun
+       dv.l    Arg_Reboot
+       dv.l    Arg_Verbose
+       extrahelp
+       dc.b    'Resident RAM-Disk loader v1.0 --- (c) 1995 Short Software',10,10
+       dc.b    'FILES     - Directory/pattern for files to load',10
+       dc.b    '            (Wildcards in directory names aren''t supported)',10
+       dc.b    'DEVICE    - DOS device name of RES-Disk (def. RES:)',10
+       dc.b    'NAME      - Volume name of RES-Disk (def. ResRAM)',10
+       dc.b    'BOOTPRI   - Boot priority (def. 15)',10
+       dc.b    'EMPTYDIRS - Don''t discard empty directories',10
+       dc.b    'GENABS    - Filename where an AbsModule should be written',10
+       dc.b    'GENDISK   - DOS device name for a boot image (e.g. DF0:)',10
+       dc.b    'NODISKREQ - Suppress ''Insert disk...'' requester (only for GENDISK)',10
+       dc.b    'NORUN     - Don''t mount RES-Disk',10
+       dc.b    'REBOOT    - Reboot machine when the load succeeds',10
+       dc.b    '            (Doesn''t apply to AbsModules or boot images)',10
+       dc.b    'VERBOSE   - Verbosity switches (seq. of following letters):',10
+       dt.c    VerbParseTab,<>
+       VerbOpt All,A,<Turn all switches on>
+       VerbOpt None,N,<Turn all switches off>
+       VerbOpt Dirs,D,<Scanned directories>
+       VerbOpt Files,F,<Scanned file names & types>
+       VerbOpt LoadSeg,I,<Scan phase LoadSeg info>
+       VerbOpt LoadFiles,L,<Files being loaded>
+       VerbOpt Mem,M,<Memory being allocated>
+       VerbOpt SizeMod,G,<Sizes of modules being generated>
+       endhelp
+       dt      <>
+       defvar  <ResRAM>
+       exitrout Cleanup
+       finish
+       end
diff --git a/project/ResRAM/ResRAM.lha b/project/ResRAM/ResRAM.lha
new file mode 100644 (file)
index 0000000..e8ad917
Binary files /dev/null and b/project/ResRAM/ResRAM.lha differ
diff --git a/project/SClock/Index.html.pl b/project/SClock/Index.html.pl
new file mode 100755 (executable)
index 0000000..8d24758
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::SClock'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::SClock::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::SClock::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::SClock::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/SClock/ListItem.pm b/project/SClock/ListItem.pm
new file mode 100755 (executable)
index 0000000..d67605c
--- /dev/null
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::SClock' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::SClock::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"SClock",
+               "platform"=>"amiga",
+               "priority"=>140,
+               "download"=>"SClock.lha",
+               "link-source file"=>"SClock.asm",
+               "link-aminet README"=>"SClock.README",
+               "summary"=>"Detect disk device name from its volume name",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"680x0 asm",
+               "description"=><<"HERE",
+<p>SClock reads the current date and time from the remote machine and sets this
+time on the local machine. You can save this time to battery backed up clock,
+if present.</p>
+<p>In fact this is the same work as does the standard AmiTCP command SynClock,
+but SClock has no need for the TCP: device, the inet-handler and is much faster
+(no REXX).</p>
+HERE
+               );
+
+1;
diff --git a/project/SClock/Makefile.am b/project/SClock/Makefile.am
new file mode 100644 (file)
index 0000000..14bf2ee
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/SClock/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/SClock/SClock.README b/project/SClock/SClock.README
new file mode 100644 (file)
index 0000000..89d9b6b
--- /dev/null
@@ -0,0 +1,13 @@
+Short: Better AmiTCP SynClock (V37+&ss.lib)
+
+Description:
+   SClock  reads  the  current date and time from the remote machine and sets
+this  time on the local machine.  You can save this time to battery backed up
+clock, if present.
+   In  fact  this  is  the  same  work  as  does  the standard AmiTCP command
+SynClock,  but  SClock has no need for the TCP:  device, the inet-handler and
+is much faster (no REXX).
+
+Requirements:
+   Kickstart version V37 (2.04) or higher and ss.library V5.0 or higher (from
+package SSLib*.lha).
diff --git a/project/SClock/SClock.asm b/project/SClock/SClock.asm
new file mode 100644 (file)
index 0000000..950b55f
--- /dev/null
@@ -0,0 +1,144 @@
+;DEBUG equ     1
+
+TimePort       equ     13              ;Port of the "daytime" service
+
+       include "SSMac.h"
+
+       dbuf    Date,dat_SIZEOF
+       dbuf    DateStr,10
+       dbuf    TimeStr,9
+
+       start
+
+       get.l   Arg_Host,a0
+       call    bsdsocket,GetHostByName
+       moveq   #2,d2
+       tst.l   d0
+       beq     NetErrorVar
+       move.l  d0,a1
+       addq    #8,a1           ;h_(name|aliases)
+       move.l  (a1)+,d0        ;h_addrtype
+       subq.l  #2,d0           ;PF_INET
+       dtl     <Network protocol not supported>,a0
+       bne.s   ErrorSSNE1
+       move.l  (a1)+,d0        ;h_length
+       subq.l  #4,d0
+ErrorSSNE1     bne     ErrorSS
+       move.l  (a1),a1         ;h_addr_list
+       move.l  (a1),a1
+       move.l  (a1),d3         ;Address
+       moveq   #2,d0   ;AF_INET
+       moveq   #1,d1   ;SOCK_STREAM
+       moveq   #0,d2   ;?Why???
+       call    bsdsocket,Socket
+       move.l  d0,d4
+       bmi.s   NetErrorNE
+       clr.l   -(sp)           ;sin_zero
+       clr.l   -(sp)           ;sin_zero
+       push    d3              ;sin_addr.s_addr
+       move.l  #(4<<24)!(2<<16)!TimePort,-(sp) ;sin_(len|family|port)
+       move.l  sp,a0           ;sockaddr_in
+       moveq   #16,d1          ;sizeof(sockaddr_in)
+       call    Connect
+       tst.l   d0
+NetErrorNE     bne     NetError
+       lea     -24(sp),sp
+       move.l  sp,a0
+       moveq   #24,d1
+       moveq   #0,d2
+       move.l  d4,d0
+       call    Recv
+       move.l  d0,d2
+       addq.l  #1,d0
+       beq     NetError
+       moveq   #24,d1
+       dtl     <Invalid data received>,a0
+       cmp.l   d1,d0
+       bcs.s   ErrorSSNE1
+       lea     8(sp),a2
+       geta    DateStr,a1
+       put.l   a1,Date+dat_StrDate
+       move.w  (a2),(a1)+
+       move.l  -(a2),d0
+       moveq   #'-',d1
+       move.b  d1,d0
+       ror.l   #8,d0
+       move.l  d0,(a1)+
+       move.b  d1,(a1)+
+       lea     18(a2),a2
+       move.b  (a2)+,(a1)+
+       move.b  (a2),(a1)
+       addq    #2,a1
+       put.l   a1,Date+dat_StrTime
+       lea     11(sp),a2
+       moveq   #7,d0
+CopyTime       move.b  (a2)+,(a1)+
+       dbra    d0,CopyTime
+       geta    Date,a2
+       move.l  a2,d1
+       call    dos,StrToDate
+       tst.l   d0
+       bne.s   ConvOkay
+       dtl     <StrToDate("%s","%s")>,a0
+       geta    Date+dat_StrDate,a1
+       jump    ss,DosError
+
+ConvOkay       move.l  (a2)+,d0        ;ds_Days
+       move.l  #1440>>3,d1
+       lsl.l   #3,d1
+       call    utility,UMult32
+       add.l   (a2)+,d0        ;ds_Minute
+       moveq   #60,d1
+       call    UMult32
+       move.l  (a2),d1         ;ds_Tick
+       divu    #50,d1
+       ext.l   d1
+       add.l   d1,d0
+       move.l  d0,d2
+       dtl     <timer.device>,a0
+       move.w  #IOTV_SIZE,a1
+       moveq   #UNIT_VBLANK,d0
+       moveq   #0,d1
+       sub.l   a2,a2
+       call    ss,TrackDevice
+       move.w  #TR_SETSYSTIME,IO_COMMAND(a1)
+       move.l  d2,IOTV_TIME+TV_SECS(a1)
+       move.l  a1,a0
+       move.l  d1,a1
+       call    ChkDoIO
+       tstv.l  Arg_Save
+       beq.s   EXIT
+       dtl     <battclock.resource>,a1
+       push    a1
+       call    exec,OpenResource
+       move.l  sp,a1
+       dtl     <%s not found>,a0
+       tst.l   d0
+       beq.s   ErrorSS
+       move.l  d0,a6
+       move.l  d2,d0
+       call    WriteBattClock
+EXIT   jump    ss,ExitCleanup
+
+NetError       moveq   #0,d2
+NetErrorVar    clr.l   -(sp)
+       call    bsdsocket,Errno
+       push    d0
+       push    #$8000001C
+       add.l   d2,(sp)
+       move.l  sp,a0
+       call    SocketBaseTagList
+       addq    #4,sp
+       pop     a0
+       tst.l   d0
+       beq.s   ErrorSS
+ErrorUnknown   dtl     <Unknown net subsystem error>,a0
+ErrorSS        jump    ss,ExitError
+
+       tags
+       template <HOST/A,SAVE/S>
+       dv.l    Arg_Host
+       dv.l    Arg_Save
+       library bsdsocket,3
+       finish
+       end
diff --git a/project/SClock/SClock.lha b/project/SClock/SClock.lha
new file mode 100644 (file)
index 0000000..6ca5f03
Binary files /dev/null and b/project/SClock/SClock.lha differ
diff --git a/project/ShortRel/Index.html.pl b/project/ShortRel/Index.html.pl
new file mode 100755 (executable)
index 0000000..ff9f832
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::ShortRel'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ShortRel::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::ShortRel::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ShortRel::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/ShortRel/ListItem.pm b/project/ShortRel/ListItem.pm
new file mode 100755 (executable)
index 0000000..7d9e8ac
--- /dev/null
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::ShortRel' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ShortRel::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"ShortRel",
+               "platform"=>"amiga",
+               "priority"=>280,
+               "download"=>"ShortRel.lha",
+               "link-source file"=>"ShortRel.asm",
+               "link-aminet README"=>"ShortRel.README",
+               "aminet"=>"util/cli/ShortRel",
+               "summary"=>"Executable file relocations compressor",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"680x0 asm",
+               "description"=><<"HERE",
+<p>ShortRel loads the input file (must be an executable), converts relocations
+(32-bit to 16-bit or vice versa), strips debug informaion (if requested) and
+writes out the result. 16-bit relocations use 2 bytes per each one and 32-bit
+relocations use 4 bytes. So conversion of any executable with many relocations
+from 32-bit to 16-bit relocations saves 2 bytes per each one.</p>
+HERE
+               );
+
+1;
diff --git a/project/ShortRel/Makefile.am b/project/ShortRel/Makefile.am
new file mode 100644 (file)
index 0000000..ec2c257
--- /dev/null
@@ -0,0 +1,25 @@
+# $Id$
+# automake source for the Makefile of project/ShortRel/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl \
+       ShrotRel.lha \
+       ShortRel.asm
diff --git a/project/ShortRel/ShortRel.README b/project/ShortRel/ShortRel.README
new file mode 100644 (file)
index 0000000..3bfa039
--- /dev/null
@@ -0,0 +1,16 @@
+Short:    32bit relocations <-> 16bit
+Author:   short@k332.feld.cvut.cz (Jan Kratochvil)
+Uploader: short@k332.feld.cvut.cz (Jan Kratochvil)
+Type:     util/cli
+
+Description:
+   ShortRel   loads   the  input  file  (must  be  an  executable),  converts
+relocations  (32-bit  to  16-bit  or vice versa), strips debug informaion (if
+requested)  and  writes  out  the result.  16-bit relocations use 2 bytes per
+each one and 32-bit relocations use 4 bytes.  So conversion of any executable
+with  many  relocations  from  32-bit to 16-bit relocations saves 2 bytes per
+each one.
+
+Requirements:
+   Kickstart  version 37 (2.04) or higher and ss.library V5.0 or higher (from
+package SSLib*.lha).
diff --git a/project/ShortRel/ShortRel.asm b/project/ShortRel/ShortRel.asm
new file mode 100644 (file)
index 0000000..dd70b08
--- /dev/null
@@ -0,0 +1,684 @@
+;DEBUG equ     1
+
+       include "SSMac.h"
+
+       dv.l    FileStart
+       dv.l    Hunks
+       dv.l    OldKeepDebug
+       dv.l    RelocPool
+       dv.l    BackupA2
+       dv.l    FirstInsert
+       dv.l    LastInsert
+       dv.b    FlgBufEnd
+       dv.b    Advisory
+
+       start
+
+       get.l   Arg_File,a0
+       call    LoadFile
+       put.l   d0,FileStart
+       move.l  d0,a2
+       add.l   -(a2),d0
+       move.l  d0,d7
+       moveq   #20,d0
+       cmp.l   (a2)+,d0
+       bhi.s   InvalidNE1
+       lea     (a2,d0.l),a3
+       cmp.l   #HUNK_HEADER,(a2)+
+       bne.s   InvalidNE1
+       tst.l   (a2)+
+       bne.s   InvalidNE1
+       move.l  (a2)+,d2
+       beq     Invalid
+       tst.l   (a2)+
+       bne.s   InvalidNE1
+       move.l  (a2)+,d0
+       addq.l  #1,d0
+       cmp.l   d0,d2
+       bne.s   InvalidNE1
+       dtl     <hunk>,a6
+       bsr.s   CheckWordLimit
+       swap    d0
+       put.l   d0,Hunks
+       lsl.l   #3,d0
+       call    ss,TrackAllocPub
+       move.l  d0,a4
+       move.l  d2,d0
+       moveq   #0,d4
+       bsr     CopyLongs
+
+       moveq   #0,d3
+MainHunkLoop
+       ifd     DEBUG
+       push    d4
+       push    d3
+       push    a2
+       dtl     <A2=%08lx, D3=%08lx, D4=%08lx - >,a0
+       move.l  sp,a1
+       call    ss,Printf
+       lea     12(sp),sp
+       endc
+       cmp.l   a2,d7
+       beq.s   FileEnd
+       move.l  (a2)+,d0
+       push    d0
+       ifd     DEBUG
+       dtl.l   <Got %08lx>,a0
+       move.l  sp,a1
+       call    Printf
+       move.l  (sp),d0
+       endc
+       bclr.l  #HUNKB_ADVISORY,d0
+       snev    Advisory
+       sub.w   #HUNK_NAME,d0
+       bcs.s   BadHunk
+       cmp.w   #HUNK_RELRELOC32-HUNK_NAME+1,d0
+       bcc.s   BadHunk
+       lsl.l   #1,d0
+       move.w  HunkTable(pc,d0.w),d1
+       swap    d0
+       lsl.w   #2,d0
+InvalidNE1     bne     Invalid
+       pop     d0
+       jsr     HunkTable(pc,d1.w)
+       bra.s   MainHunkLoop
+
+CheckWordLimit swap    d0
+       tst.w   d0
+       beq     Return5
+       push    a0
+       dtl     <Too many %ss>,a0
+       bra     ErrorSSA1
+
+BadHunk        tstv.b  Advisory
+       beq     Invalid
+       tst.l   d4
+       bne.s   AdviSkip
+       move.l  d0,(a3)+
+AdviSkip       bsr     GetLong
+
+FileEnd        tstv.l  Arg_NoEnd
+       beq.s   PatchNoEnd
+       addq    #4,a3
+PatchNoEnd     geta    Arg_To,a0
+       move.l  (a0),d0
+       bne.s   ArgToSpecified
+       move.l  -4(a0),d0
+       move.l  d0,(a0)
+ArgToSpecified move.l  d0,a0
+       moveq   #OPEN_NEW,d0
+       call    ss,TrackOpen
+       move.l  d1,d2
+       get.l   FileStart,a2
+       move.l  -4(a2),d4
+       get.l   FirstInsert,d3
+       moveq   #0,d5
+
+FlushLoop      tst.l   d3
+       beq.s   FlushNoInsertX
+       move.l  d3,a1
+       move.l  (a1)+,d1        ;Next
+       move.l  (a1)+,d0        ;Point
+       sub.l   a2,d0
+       bne.s   FlushNoInsert
+       move.l  d1,d3
+       move.l  (a1)+,d0        ;Length
+       bra.s   FlushSkip
+
+hunk   macro   ;HUNK_#?[,<routine>]
+       ifne    _hunk-\1
+       fail    Mismatched hunk numbers!
+       endc
+       ifeq    NARG-1
+       dc.w    BadHunk-HunkTable
+       else
+       dc.w    hunk_\2-HunkTable
+       endc
+_hunk  set     _hunk+1
+       endm
+_hunk  set     1000
+HunkTable
+       hunk    HUNK_NAME,skipcnt       ;1000
+       hunk    HUNK_CODE,main          ;1001
+       hunk    HUNK_DATA,main          ;1002
+       hunk    HUNK_BSS,bss            ;1003
+       hunk    HUNK_RELOC32,rel32      ;1004
+       hunk    HUNK_RELOC16            ;1005
+       hunk    HUNK_RELOC8             ;1006
+       hunk    HUNK_EXT                ;1007
+       hunk    HUNK_SYMBOL,symbol      ;1008
+       hunk    HUNK_DEBUG,skipcnt      ;1009
+       hunk    HUNK_END,end            ;1010
+       hunk    HUNK_HEADER             ;1011
+       hunk    1012                    ;????
+       hunk    HUNK_OVERLAY            ;1013
+       hunk    HUNK_BREAK              ;1014
+       hunk    HUNK_DREL32,rel16       ;1015
+       hunk    HUNK_DREL16             ;1016
+       hunk    HUNK_DREL8              ;1017
+       hunk    HUNK_LIB                ;1018
+       hunk    HUNK_INDEX              ;1019
+       hunk    HUNK_RELOC32SHORT,rel16 ;1020
+       hunk    HUNK_RELRELOC32,rrel16  ;1021
+       ifne    _hunk-HUNK_RELRELOC32-1
+       fail    Invalid number of hunks!
+       endc
+
+FlushNoInsertX move.l  a3,d0
+       sub.l   a2,d0
+FlushNoInsert  move.l  a2,a1
+       add.l   d0,a2
+FlushSkip      move.l  d2,a0
+       add.l   d0,d5
+       call    ss,ChkWrite
+       cmp.l   a2,a3
+       bne.s   FlushLoop
+
+       tstv.l  Arg_Quiet
+       bne.s   Return5
+
+       move.l  d5,d0
+       moveq   #100,d1
+       get.l   utilitybase,a0
+       jsr     _LVOUMult32(a0)
+       move.l  d4,d1
+       jsr     _LVOUDivMod32(a0)
+       pop     d1
+       move.w  d0,-(sp)
+       get.l   Arg_To,d3
+       get.l   Arg_File,d2
+       mpush   d1-d5
+       lea     4(sp),a1
+       dtl.l   <%s =',62,' %s: %lu =',62,' %lu (%u%%)>,a0
+       jump    Printf
+
+hunk_rel16     moveq   #-31,d2
+       bra.s   HunkReloc
+
+RelocRead16    moveq   #0,d0
+       move.w  (a2)+,d0
+Return5        rts
+
+hunk_rel32     moveq   #2,d2
+HunkReloc      tst.l   d3
+       beq.s   InvalidEQ1
+RelocLoop      bsr.s   RelocRead
+       beq.s   RelocReturn
+       move.l  d0,d1
+       bsr.s   RelocRead
+       vcmp.l  Hunks,d0
+       bcc     Invalid
+       lsl.l   #2,d0
+       lea     (a4,d0.l),a0
+       move.l  d1,d0
+       tst.l   d4
+       bne.s   RelocScan
+       lsl.l   #2,d0
+       move.l  (a0),a1
+       add.l   d0,(a0)
+       tst.l   d2
+       bmi.s   RelocCopy16
+       move.l  a2,a0
+       add.l   d0,a2
+       call    exec,CopyMemQuick
+       bra.s   RelocLoop
+
+RelocCopy16    subq.l  #1,d1
+RC16Loop       clr.w   (a1)+
+       move.w  (a2)+,(a1)+
+       dbra    d1,RC16Loop
+       bra.s   RelocLoop
+
+RelocScan      add.l   d1,(a0)
+       rol.l   d2,d0
+       bsr     SkipBytes
+       bra.s   RelocLoop
+
+RelocRead      cmp.l   a2,d7
+       beq     InvalidEnd
+       tst.l   d2
+       bmi.s   RelocRead16
+       move.l  (a2)+,d0
+       rts
+
+RelocReturnRR  cmp.l   a3,d7
+       beq.s   InvalidEQ1
+       clr.w   (a3)
+       move.l  a3,d0
+       addq.l  #3,d0
+       and.w   #~3,d0
+       move.l  d0,a3
+RelocReturn    move.l  a2,d0
+       addq.l  #3,d0
+       and.w   #~3,d0
+       move.l  d0,a2
+       rts
+
+hunk_rrel16    tst.l   d3
+InvalidEQ1     beq     Invalid
+       moveq   #-1,d2
+       tst.l   d4
+       bne.s   RRel16Loop
+       move.l  d0,(a3)+
+RRel16Loop     bsr.s   RelocRead
+       tst.l   d4
+       bne.s   SkipCpNum16
+       move.w  d0,(a3)+
+SkipCpNum16    tst.w   d0
+       beq.s   RelocReturnRR
+       addq.l  #1,d0
+       lsl.l   #1,d0
+       bsr.s   CopyBytes       ;or SkipBytes if d4\ne0
+       bra.s   RRel16Loop
+
+hunk_skipcnt   bsr.s   SymInit
+       moveq   #0,d2
+       bsr.s   RelocRead
+       tst.l   d6
+       beq.s   SymbolSkip
+       move.l  d0,(a3)+
+SymbolSkip     push    d4
+       move.l  d6,d4
+       subq.l  #1,d4
+       subx.l  d4,d4
+       bsr.s   CopyLongs
+       pop     d4
+Return1        rts
+
+SymInit        get.l   Arg_KeepDebug,d6
+       beq.s   Return6
+PutnRet        move.l  d0,(a3)+
+Return6        rts
+
+hunk_symbol    moveq   #0,d2
+       bsr.s   SymInit
+SkipSymbol     bsr.s   RelocRead
+       tst.l   d6
+       beq.s   KeepNull
+       move.l  d0,(a3)+
+KeepNull       tst.l   d0
+       beq.s   Return1
+       addq.l  #1,d0
+       bsr.s   SymbolSkip
+       bra.s   SkipSymbol
+
+CopyLongs      lsl.l   #2,d0
+CopyBytes      tst.l   d4
+       bne     SkipBytes
+       move.l  d7,d1
+       sub.l   a2,d1
+       cmp.l   d0,d1
+       bcs     InvalidEnd
+       move.l  a2,a0
+       move.l  a3,a1
+       add.l   d0,a2
+       add.l   d0,a3
+       cmp.l   a0,a1
+       beq.s   Return1
+       cmp.l   a3,a0
+       bcc.s   JumpCopyMem
+       lsr.l   #2,d0
+       bcc.s   CopyQuad
+       move.w  (a0)+,(a1)+
+CopyQuad       move.w  d0,d1
+       swap    d0
+       bra.s   MyCopyInto
+
+MyCopyLoop     move.l  (a0)+,(a1)+
+MyCopyInto     dbra    d1,MyCopyLoop
+       dbra    d0,MyCopyLoop
+       rts
+
+JumpCopyMem    jump    exec,CopyMem
+
+hunk_end       tst.l   d3
+       beq     Invalid
+HunkEndJump    tst.l   d4
+       beq.s   Pass1Done
+       ifd     DEBUG
+       dtl     <HunkEnd - Pass 1>,a0
+       call    ss,PutsNL
+       endc
+       moveq   #64,d0
+       lsl.l   #4,d0
+       moveq   #96,d1
+       lsl.l   #3,d1
+       moveq   #0,d2
+       call    ss,TrackPool
+       put.l   d0,RelocPool
+       push    d3
+       move.l  d0,d3
+       get.l   Hunks,d2
+       move.l  d2,d0
+       lsl.l   #2,d0
+       lea     (a4,d0.l),a2
+       push    a4
+       bra.s   AllocRelocInto
+
+AllocRelocLoop move.l  (a4),d0
+       lsl.l   #2,d0
+       move.l  d0,(a2)+
+       beq.s   NoAllocReloc
+       move.l  d3,a0
+       call    PoolAlloc
+NoAllocReloc   move.l  d0,(a4)+
+AllocRelocInto dbra    d2,AllocRelocLoop
+       pop     a4
+       pop     d3
+       move.l  d4,a2
+       moveq   #0,d4
+       vmovev.l OldKeepDebug,Arg_KeepDebug
+       rts
+
+Pass1Done
+       ifd     DEBUG
+       push    d0
+       dtl     <HunkEnd - Pass 1 done>,a0
+       call    ss,PutsNL
+       pop     d0
+       endc
+       put.l   a2,BackupA2
+       mpush   d0/d7/a4
+       get.l   Hunks,d6
+       move.l  d6,d3
+       lsl.l   #2,d6
+       move.l  (v),a6
+       lea     (a4,d6.l),a2    ;A2=RelLengths, A4=RelEnds
+       moveq   #0,d4           ;define to 16 if at least 1 32bit
+       moveq   #0,d5           ;saved bytes by 16bit header
+       tstv.l  Arg_Reloc32
+       bne.s   Only32Fake
+       get.l   RelocPool,a0
+       move.l  d6,d0
+       call    PoolAlloc
+       push    a3
+       move.l  d0,a3
+       add.l   d6,a3
+       push    a3
+       bra.s   NormalPtrsInto
+
+NormalPtrsLoop move.l  (a2)+,d0
+       sub.l   d0,(a4)
+       move.l  d0,d7
+       move.l  (a4)+,a0
+       beq.s   EmptyHunk
+       move.l  a0,d2
+       lsr.l   #2,d0
+       call    SortLongs
+       moveq   #0,d0
+       move.l  d2,a0
+       move.l  d7,d1
+EdgeLoop       move.l  d0,d2
+       add.l   d1,d2
+       lsr.l   #1,d2
+       and.w   #~3,d2
+       cmp.l   d0,d2
+       beq.s   EdgeFound
+       tst.w   (a0,d2.l)
+       bne.s   EdgeDown
+       move.l  d2,d0
+       move.l  d1,d2
+EdgeDown       move.l  d2,d1
+       bra.s   EdgeLoop
+
+Only32Fake     subq.l  #1,d3
+Only32Loop     move.l  (a4),a0
+       move.l  (a2)+,d0
+       sub.l   d0,a0
+       move.l  a0,(a4)+
+       lsr.l   #2,d0
+       call    SortLongs
+       dbra    d3,Only32Loop
+       bra.s   FromFaked32
+
+EdgeFound      tst.w   (a0,d0.l)
+       bne.s   EdgeFix
+       addq.l  #4,d0
+EdgeFix        add.l   d0,d5
+       addq.l  #8,d5
+EmptyHunk      move.l  d0,-(a3)                ;real # of 16bit relocs
+       beq.s   NormalPtrsInto
+       moveq   #16,d4
+       subq.l  #8,d0
+       bhi.s   MoreThatTwo
+       sub.l   d0,d5
+       subq.l  #8,d5
+       subq.l  #8,d5
+       clr.l   (a3)
+MoreThatTwo    sub.l   d4,d5
+NormalPtrsInto dbra    d3,NormalPtrsLoop       ;A2=TotalEnd, A4=RelLengths
+       mpop    a0/a3
+FromFaked32    move.l  d6,d3
+       lsr.l   #2,d3
+       subq.l  #1,d3
+       sub.l   d6,a2
+       sub.l   d6,a2           ;A2=RelStarts, A4=RelLengths
+       sub.l   d4,d5
+       bmi.s   Hunks32
+       beq.s   Hunks32
+       tst.l   d4
+       beq.s   Hunks32
+       mpush   d3/a0/a2/a4
+       moveq   #8,d0
+H16SizeLoop    move.l  -(a0),d1
+       beq.s   H16SizeSkip
+       lsr.l   #1,d1
+       addq.l  #4,d1
+       add.l   d1,d0
+H16SizeSkip    dbra    d3,H16SizeLoop
+       and.w   #~3,d0
+       bsr     ReserveReloc
+       movem.l 4(sp),d3/a0/a2/a4
+       move.l  #HUNK_DREL32,(a3)+
+       dtl     <reloc>,a6
+H16Loop        move.l  -(a0),d0
+       sub.l   d0,(a4)+
+       lsr.l   #2,d0
+       move.l  (a2),a1
+       beq.s   H16SkipAll
+       move.w  d0,(a3)+
+       subq.w  #1,d0
+       move.w  6(sp),(a3)      ;Desthunk
+       sub.w   d3,(a3)+
+
+H16InLoop      addq    #2,a1
+       move.w  (a1)+,(a3)+
+       dbra    d0,H16InLoop
+       bsr     CheckWordLimit          ;# of relocs>65535 ?!?
+H16SkipAll     move.l  a1,(a2)+
+       dbra    d3,H16Loop
+       clr.w   (a3)+
+       move.w  a3,d0
+       ror.w   #2,d0
+       bcc.s   H16Aligned
+       clr.w   (a3)+
+H16Aligned     pop     a3
+       mpop    d3/a0/a2/a4
+Hunks32        moveq   #0,d0
+       move.l  d3,d2
+       push    a4
+H32SizeLoop    move.l  (a4)+,d1
+       beq.s   H32SizeInto
+       addq.l  #8,d1
+       add.l   d1,d0
+H32SizeInto    dbra    d2,H32SizeLoop
+       pop     a4
+       tst.l   d0
+       beq.s   HunksDone
+       addq.l  #8,d0
+       bsr.s   ReserveReloc
+       move.l  #HUNK_RELOC32,(a3)+
+       move.l  d3,d2
+       moveq   #0,d5           ;Current DestHunk
+H32Loop        move.l  (a2)+,a0
+       move.l  (a4)+,d0
+       beq.s   H32Skip
+       move.l  d0,d1
+       lsr.l   #2,d1
+       move.l  d1,(a3)+
+       move.l  d5,(a3)+
+       move.l  a3,a1
+       add.l   d0,a3
+       call    exec,CopyMemQuick
+H32Skip        addq.l  #1,d5
+       dbra    d2,H32Loop
+       clr.l   (a3)+
+       pop     a3
+HunksDone      get.l   RelocPool,a0
+       call    ss,FreeObject
+       get.l   BackupA2,a2
+       moveq   #0,d3
+       moveq   #0,d4
+       pop     (a3)
+       tstv.l  Arg_NoEnd
+       bne.s   IsNoEnd
+       addq    #4,a3
+IsNoEnd        mpop    d7/a4
+Return4        rts
+
+ReserveReloc   add.l   a3,d0
+       vcmp.l  BackupA2,d0
+       bls.s   ReserveReturn
+       sub.l   a3,d0
+       push    d0
+       addq.l  #8,d0
+       addq.l  #4,d0
+       call    ss,TrackAllocPub
+       geta    FirstInsert,a0
+       get.l   LastInsert,d1
+       beq.s   NoLastInsert
+       move.l  d1,a0
+NoLastInsert   move.l  d0,(a0)
+       put.l   d0,LastInsert
+       move.l  d0,a1
+       clr.l   (a1)+           ;^NextInsert
+       move.l  a3,(a1)+        ;^InsertPoint
+       pop     (a1)+           ;^InsertLength
+       move.l  a3,d0
+       move.l  a1,a3
+ReserveReturn  move.l  (sp),a0
+       move.l  d0,(sp)
+       jmp     (a0)
+
+hunk_main      bsr.s   HunkMainInit
+       push    a3
+       bsr.s   GetLong
+       move.l  d0,d2
+       bsr     CopyLongs
+       move.w  d2,d0
+       swap    d2
+       move.l  a3,d1
+       cmp.l   d0,d0           ;ZF=1
+       bra.s   SqueezeInto
+
+GetLong        cmp.l   a2,d7
+       beq.s   Invalid
+       move.l  (a2)+,d0
+       tst.l   d4
+       bne.s   Return2
+       move.l  d0,(a3)+
+Return2        rts
+
+HunkMainInit   tst.l   d3
+       beq.s   WereFree
+       push    d0
+       move.l  #HUNK_END,d0
+       bsr     HunkEndJump
+       pop     d0
+       tst.l   d3
+       bne.s   HMI_Skip
+WereFree       tst.l   d4
+       beq     PutnRet
+HMI_Skip       addq    #4,sp
+       rts
+
+SqueezeLoop    tst.l   -(a3)
+SqueezeInto    dbne    d0,SqueezeLoop
+       dbne    d2,SqueezeLoop
+       beq.s   TotalSqueeze
+       addq    #4,a3
+TotalSqueeze   sub.l   a3,d1
+       lsr.l   #2,d1
+       pop     a0
+       sub.l   d1,(a0)
+JumpFromBSS    get.l   Hunks,d0
+       move.l  a4,a0
+       bra.s   ClrHunkTabInto
+
+hunk_bss       bsr.s   HunkMainInit
+       bsr.s   GetLong
+       bra.s   JumpFromBSS
+
+ClrHunkTabLoop clr.l   (a0)+
+ClrHunkTabInto dbra    d0,ClrHunkTabLoop
+       move.l  a2,d4
+       vmovev.l Arg_KeepDebug,OldKeepDebug
+       clrv.l  Arg_KeepDebug
+       moveq   #-1,d3
+Return3        rts
+
+SkipBytes      add.l   d0,a2
+       cmp.l   a2,d7
+       bcc.s   Return3
+InvalidEnd     move.l  d7,a2
+Invalid        vsub.l  FileStart,a2
+       push    a2
+       dtl     <Invalid structure of file "%s" near offset $%06lx>,a0
+       vpush   Arg_File
+ErrorSSA1      move.l  sp,a1
+       jump    ss,ExitError
+
+       ifd     DEBUG
+EXIT   jump    ss,ExitCleanup
+       endc
+
+       tags
+       template <FROM/A,TO,KEEPDEBUG/S,RELOC32/S,NOEND/S,QUIET/S>
+       dv.l    Arg_File
+       dv.l    Arg_To
+       dv.l    Arg_KeepDebug
+       dv.l    Arg_Reloc32
+       dv.l    Arg_NoEnd
+       dv.l    Arg_Quiet
+       finish
+       end
+ShortRel dvitype /bin.new.exp/dvitype RELOC32
+ShortRel gftodvi /bin.new.exp/gftodvi RELOC32
+ShortRel gftopk /bin.new.exp/gftopk RELOC32
+ShortRel gftype /bin.new.exp/gftype RELOC32
+ShortRel inimf /bin.new.exp/inimf RELOC32
+ShortRel initex /bin.new.exp/initex RELOC32
+ShortRel mft /bin.new.exp/mft RELOC32
+ShortRel pltotf /bin.new.exp/pltotf RELOC32
+ShortRel tftopl /bin.new.exp/tftopl RELOC32
+ShortRel vftovp /bin.new.exp/vftovp RELOC32
+ShortRel virmf /bin.new.exp/virmf RELOC32
+ShortRel virtex /bin.new.exp/virtex RELOC32
+ShortRel vptovf /bin.new.exp/vptovf RELOC32
+ShortRel MakeInfo /bin.new.exp/MakeInfo RELOC32
+ShortRel tr2tex /bin.new.exp/tr2tex RELOC32
+ShortRel dvi2tty /bin.new.exp/dvi2tty RELOC32
+ShortRel disdvi /bin.new.exp/disdvi RELOC32
+ShortRel DVIprint /bin.new.exp/DVIprint RELOC32
+ShortRel flib /bin.new.exp/flib RELOC32
+ShortRel PToFront /bin.new.exp/PToFront RELOC32
+ShortRel TeXindex /bin.new.exp/TeXindex RELOC32
+ShortRel ShowDVI /bin.new.exp/ShowDVI RELOC32
+ShortRel SpecialHost /bin.new.exp/SpecialHost RELOC32
+ShortRel bm2font /bin.new.exp/bm2font RELOC32
+
+
+A2=000EEE44, D3=00000000, D4=00000000 - Got HUNK_CODE
+A2=00102524, D3=FFFFFFFF, D4=00102524 - Got HUNK_DREL32
+A2=00102E08, D3=FFFFFFFF, D4=00102524 - Got HUNK_RELOC32
+A2=00102E1C, D3=FFFFFFFF, D4=00102524 - Got HUNK_DATA
+A2=00102524, D3=FFFFFFFF, D4=00000000 - Got HUNK_DREL32
+A2=00102E08, D3=FFFFFFFF, D4=00000000 - Got HUNK_RELOC32
+A2=00102E1C, D3=FFFFFFFF, D4=00000000 - Got HUNK_DATA
+A2=00103308, D3=FFFFFFFF, D4=00103308 - Got HUNK_RELOC32
+A2=00103320, D3=FFFFFFFF, D4=00103308 - Got HUNK_BSS
+A2=00103308, D3=FFFFFFFF, D4=00000000 - Got HUNK_RELOC32
+A2=00103320, D3=FFFFFFFF, D4=00000000 - Got HUNK_BSS
+A2=00103328, D3=FFFFFFFF, D4=00103328 - Got HUNK_END
+A2=00103328, D3=FFFFFFFF, D4=00000000 - Got HUNK_END
+A2=0010332C, D3=00000000, D4=00000000 - bm2font => :t/shortrel.res: 83208 => 80888 (97%)
diff --git a/project/ShortRel/ShortRel.lha b/project/ShortRel/ShortRel.lha
new file mode 100644 (file)
index 0000000..417fcc1
Binary files /dev/null and b/project/ShortRel/ShortRel.lha differ
diff --git a/project/TraceFS/Index.html.pl b/project/TraceFS/Index.html.pl
new file mode 100755 (executable)
index 0000000..6a6fe6b
--- /dev/null
@@ -0,0 +1,47 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::TraceFS'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::TraceFS::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::TraceFS::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::TraceFS::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+@{[ centerimg "/project/captive/doc/ntdebug-windbg-boot","TraceFS Initialization" ]}
+@{[ vskip "1ex" ]}
+@{[ centerimg "/project/captive/doc/dia/TraceFS","TraceFS Hooking" ]}
+HERE
+
+
+My::Web->footer();
diff --git a/project/TraceFS/ListItem.pm b/project/TraceFS/ListItem.pm
new file mode 100755 (executable)
index 0000000..eaae33c
--- /dev/null
@@ -0,0 +1,53 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::TraceFS' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::TraceFS::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"TraceFS",
+               "platform"=>"w32",
+               "priority"=>610,
+               "icon"=>"TraceFS-icon",
+               "cvs"=>"captive/src/TraceFS",
+               "link-Documentation"=>"/project/captive/doc/CacheManager.html.pl#TraceFS",
+               "summary"=>"Microsoft Windows Kernel API Tracer",
+               "license"=>"GPL",
+               "maintenance"=>"ready",
+               "language"=>"C",
+               "description"=><<"HERE",
+<p>Project allows wrapping of Microsoft Windows Kernel API calls of your chosen
+kernel driver by your custom function code.</p>
+<p>Although TraceFS was up to now used only for tracing of Windows NT Cache
+Manager it can be easily used ever for any other NT kernel API tracing. You
+need to provide appropriate function wrappers in the main source file.
+Framework for thread synchronizations and debug tracing is provided to prevent
+mangling of messages while running by multiple threads at once.</p>
+HERE
+               );
+
+1;
diff --git a/project/TraceFS/Makefile.am b/project/TraceFS/Makefile.am
new file mode 100644 (file)
index 0000000..c561b56
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/TraceFS/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/TraceFS/TraceFS-icon.png b/project/TraceFS/TraceFS-icon.png
new file mode 100644 (file)
index 0000000..c97bc5e
Binary files /dev/null and b/project/TraceFS/TraceFS-icon.png differ
similarity index 76%
rename from project/badblock_guess/index.html.pl
rename to project/badblock_guess/Index.html.pl
index 2855f2c..c2122e6 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::badblock_guess::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::badblock_guess::ListItem;
+Wuse 'My::Project';
+Wuse 'project::badblock_guess::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::badblock_guess::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::badblock_guess::ListItem::ListItem,
                );
 
 print <<'HERE';
index 1ff3438..37ea617 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::badblock_guess;
+package project::badblock_guess::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Recovery of Data from a Damaged Disk",
-               "priority"=>7,
+
+our @ListItem=(
+               "name"=>"badblock-guess",
+               "platform"=>"unixuser",
+               "priority"=>590,
+               "icon"=>"hdd-icon.jpeg",
                "download-compiled static binary"=>"badblock-guess",
                "download-gzipped compiled static binary"=>"badblock-guess.gz",
-               "link-CVS repository"=>"http://cvs.jankratochvil.net/viewcvs/badblock-guess/",
-               "download-CVS snapshot"=>"http://cvs.jankratochvil.net/viewcvs/badblock-guess/badblock-guess.tar.gz?tarball=1",
-               "link-README"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/badblock-guess/README?rev=HEAD",
-               "summary"=>"Data recovery",
+               "cvs"=>"badblock-guess",
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "link-README"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/badblock-guess/README?rev=HEAD",
+               "summary"=>"Data recovery from a damaged disk",
                "license"=>"GPL",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "description"=>""
-                               .'<p>badblock-guess will try to find all readable sectors of the disk in minimal time.</p>'
+               "description"=><<"HERE",
+<p>badblock-guess will recover all readable sectors of the disk in minimal time
+while trying to prevent disk read retrying head recalibrations.</p>
+HERE
                );
 
 1;
index ef293ce..c759b6b 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/badblock_guess/hdd-icon.jpeg b/project/badblock_guess/hdd-icon.jpeg
new file mode 100644 (file)
index 0000000..1afb9ba
Binary files /dev/null and b/project/badblock_guess/hdd-icon.jpeg differ
diff --git a/project/captive/CVS.html.pl b/project/captive/CVS.html.pl
new file mode 100755 (executable)
index 0000000..f129967
--- /dev/null
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# CVS page of 'My::Project::captive'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::CVS;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::captive::ListItem';
+
+
+my $W=My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::captive::ListItem::ListItem,
+               "before_project_data"=>
+                               '<h2 align="center">'.a_href('./','Captive Main Page').'</h2>'."\n",
+               );
+
+
+print <<"HERE";
+<h2>CVS Checkout Instructions</h2>
+<pre>
+cvs -d :pserver:pserver@{[ '@' ]}cvs.jankratochvil.net:/cvs login
+       Just hit ENTER (empty password)
+cvs -d :pserver:pserver@{[ '@' ]}cvs.jankratochvil.net:/cvs -z3 checkout captive
+cd captive
+cvs -d :pserver:pserver@{[ '@' ]}cvs.jankratochvil.net:/cvs -z3 checkout -r captive -kk reactos
+./autogen.pl
+make
+./src/client/cmdline/captive-cmdline --load-module=/var/lib/captive/ntoskrnl.exe --filesystem=/var/lib/captive/ntfs.sys --disk --blind /dev/hda1
+</pre>
+HERE
+
+
+My::Web->footer();
diff --git a/project/captive/Index.html.pl b/project/captive/Index.html.pl
new file mode 100755 (executable)
index 0000000..7167397
--- /dev/null
@@ -0,0 +1,435 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::captive'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::captive::ListItem';
+
+
+# Redirect foreign visitors to our root with that disgusting introduction ad.
+{
+       my $r=Apache->request();
+       if (my $referer=$r->header_in("Referer")) {
+               Wuse 'WebConfig';
+               require URI;
+               my $refuri=URI->new_abs($referer,$r->uri());
+               if (1
+                               && $refuri->host() ne "localhost"
+                               && $refuri->host() ne &{$WebConfig::WebConfig{"web_hostname_sub"}}) {
+                       use Apache::Constants qw(REDIRECT);
+                       $r->status(REDIRECT);
+                       $r->header_out("Location"=>"http://".&{$WebConfig::WebConfig{"web_hostname_sub"}}());
+                       exit 0;
+                       }
+               }
+       }
+
+
+my $W=My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::captive::ListItem::ListItem,
+               "no_project_data"=>1,
+               "head_css"=>"
+.reqpkg { font-style: italic; }
+.stuff  { font-style: italic; font-size: larger; margin-left: 20%; margin-right: 10%; }
+.re     { font-style: italic; }
+table.mailman > * /* FIXME: What is it? */ > tr > th,
+table.mailman > * /* FIXME: What is it? */ > tr > td { padding: 1ex; text-align: center; }
+",
+               );
+
+
+print <<"HERE";
+<h1>The First Read/Write NTFS for Free Operating Systems</h1>
+<h1>The First Open Source MS-Windows Kernel API for Free OS</h1>
+HERE
+
+my @stuff=(
+               "A lot of people claim to be Windows Programmers.\n"
+                               ." Now, I can join them at last - I have also written my own Microsoft Windows.",
+               "Why do they need ".a_href('http://www.winsupersite.com/reviews/winserver2k3_gold2.asp','5,000 developers')
+                               ." to write Microsoft Windows when it can be just a One Man Show?",
+
+
+
+               "My first Microsoft Windows program ever written? Some 'helloworld'?"
+                               ." <span class=\"quote\">hal.dll</span>.",
+               );
+
+print rightimg((map("<p class=\"stuff\">$_</p>\n",($stuff[int rand @stuff])))[0],
+               'captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]',
+                               "a_href_img"=>'captive-install-acquire');
+
+print <<"HERE";
+
+
+@{[ vskip "3ex" ]}
+
+<p class="stuff">
+       Why did I install Microsoft Windows and write such a disgusting piece of code?<br />
+       Expecting @{[ a_href $W->{"resume_url"},"yet another challenging task" ]}!
+</p>
+
+@{[ vskip "3ex" ]}
+
+
+<table border="1" align="center" style="text-align: center;" width="100%"><tr><th>Distribution</th>
+               <th>Installation Case #1<br />Filesystem and installer<br />(recommended)</th>
+               <th>Installation Case #2<br />Manual installation<br />(filesystem, expert user)</th>
+               <th>Installation Case #3<br />Command-line client<br />(no filesystem access)</th></tr>
+HERE
+my %pkg=(
+               1=>[qw(captive captive-lufs captive-install lufs gnome-vfs-httpcaptive ntfsprogs ntfsprogs-gnomevfs)],
+               2=>[qw(captive captive-lufs                 lufs)],
+               3=>[qw(captive)],
+               );
+my %reqpkg=(
+               1 =>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline libgnomeui)],
+               23=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)],
+               );
+my %version=(
+               map(($_=>["1.0","0"]),qw(captive captive-lufs captive-install)),
+               "lufs"=>["0.9.6","1captive6"],
+               "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
+               "ntfsprogs"=>["200309071734","1captive1"],
+               "ntfsprogs-gnomevfs"=>["1.0.2","0"],
+               );
+my %has_rh8=(map(($_=>1),qw(
+               gnome-vfs-httpcaptive
+               captive
+               captive-lufs
+               captive-install
+               )));
+my %has_mdk91=(map(($_=>1),qw(
+               gnome-vfs-httpcaptive
+               lufs
+               captive
+               captive-lufs
+               captive-install
+               )));
+my %has_devel=(map(($_=>1),qw(
+               ntfsprogs
+               )));
+my %pkg_nosrc=(map(($_=>1),qw(
+               captive-lufs
+               captive-install
+               )));
+
+my $case;
+my $a_href_arch=sub ($$%)
+{
+my($file_base,$text,%args)=@_;
+
+       $text=~s/[._]\D.*$// if $case!=1 && $text!~/^[.]/;
+       return a_href $file_base,$text,"size"=>($case==1),%args;
+};
+
+my @libxml2_rh8_pkgs=qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm libxml2-devel-2.5.4-1.i386.rpm);
+
+my @dist=(
+               {
+                       "name"=>"Red Hat 9<br />Shrike i386",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       my $file="$pkg-$version_base-$version_ext.i386.rpm";
+                                       my $r=&$a_href_arch("dist/$file",$file);
+                                       (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
+                                       $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Red Hat 8<br />Psyche i386<br />"
+                                       ."(".a_href("#libxml2_rh8","libxml2 upgrade note").")",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       my $file="$pkg-$version_base-$version_ext".(!$has_rh8{$pkg} ? "" : "rh8").".i386.rpm";
+                                       my $r=&$a_href_arch("dist/$file",$file);
+                                       (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
+                                       $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       if ($pkg eq "captive-install") {
+                                               for (@libxml2_rh8_pkgs) {
+                                                       $r.="<br />".&$a_href_arch('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9";
+                                                       }
+                                               }
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Mandrake 9.1<br />Bamboo i586",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       my $file="$pkg-$version_base-$version_ext".(!$has_mdk91{$pkg} ? ".i386.rpm" : "mdk91.i586.rpm");
+                                       my $r=&$a_href_arch("dist/$file",$file);
+                                       (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
+                                       $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Debian GNU/Linux<br />'unstable' i386",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       $version_ext=~s/^\d+//;
+                                       my $file="${pkg}_$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext)."_i386.deb";
+                                       my $r=&$a_href_arch("dist/$file",$file);
+                                       (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
+                                       $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Sources (.tar.gz)",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       return () if $pkg_nosrc{$pkg};
+                                       $version_ext=~s/^\d+//;
+                                       my $file="$pkg-$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext).".tar.gz";
+                                       return $file,$file;
+                               },
+                       },
+               {
+                       "name"=>"Sources (.src.rpm)<br />(Red Hat 9 - Shrike)",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       return () if $pkg_nosrc{$pkg};
+                                       my $file="$pkg-$version_base-$version_ext.src.rpm";
+                                       return $file,$file;
+                               },
+                       },
+               );
+
+for my $dist (@dist) {
+       print "<tr>";
+               print "<td>".$dist->{"name"}."</td>";
+               for my $casel (1,2,3) {
+                       $case=$casel;
+                       print "<td>";
+                       print join("<br />",map({ my $pkg=$_;
+                               my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}});
+                               (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text)));
+                               } @{$pkg{$case}}));
+                       print "</td>";
+                       }
+       print "</tr>\n";
+       }
+print "<tr style=\"height: 2ex;\"></tr>\n";
+print "<tr>";
+       print "<td>Package Requirements</td>";
+       for my $case (1,23) {
+               print "<td".($case==23 ? ' colspan="2"' : '').">";
+               print join(", ",map("<span class=\"reqpkg\">$_</span>",@{$reqpkg{$case}}));
+               print "</td>";
+               }
+print "</tr>\n";
+print <<"HERE";
+</table>
+
+<blockquote>
+       <p><a name="libxml2_rh8"><b><i>Red Hat 8 Psyche</i> upgrade of <i>libxml2</i> package:</b></a>
+       Upgrade only the packages already installed on your system to prevent
+       many dependency requirements - do not use &quot;<code>rpm -U</code>&quot;,
+       use &quot;<code>rpm -F</code>&quot; instead:</p>
+       <blockquote><p class="quote">
+               <code>rpm -F @{[ join(" ",@libxml2_rh8_pkgs) ]}</code>
+       </p></blockquote>
+</blockquote>
+
+@{[ vskip "3ex" ]}
+
+
+<h1>Installation Notes</h1>
+
+<p>You should first run <b>captive-install-acquire</b> command to check your
+available Microsoft Windows drivers versions. Now you can execute:</p>
+
+<blockquote>
+       <p class="quote">
+               # mkdir /mnt/dosc<br />
+               # mount -t captive-ntfs /dev/hda1 /mnt/dosc
+       </p>
+</blockquote>
+
+
+<h2>Overview</h2>
+
+<p>'<b>captive</b>' is the base package. It contains debugging '<b>captive-cmdline</b>' client.<br />
+'<b>captive-lufs</b>' permits mounting NTFS as regular filesystem. It needs '<b>lufs</b>'.<br />
+'<b>lufs</b>' is a daemon to enable userland process to provide filesystem functions.</p>
+
+<p>Any errors from '<b>captive-lufs</b>' are written to '<b>/var/log/messages</b>'.</p>
+
+<p>Needed drivers (at least ntoskrnl.exe+ntfs.sys) must be in '<b>/var/lib/captive</b>'.</p>
+
+<p>'<b>captive</b>' package creates '<b>captive</b>' user and '<b>captive</b>' group on your system.</p>
+
+
+<h2>Package Version Conflicts</h2>
+
+<dl>
+
+<dt>@{[ a_href 'http://lufs.sourceforge.net/lufs/','lufs' ]}</dt>
+<dd><p><b>'captive' version required</b>: Although you may already have the
+original package installed you must replace it by the local 'captive'-marked
+version containing some 'captive'-essential fixes and extensions.</p></dd>
+
+<dt>@{[ a_href 'http://linux-ntfs.sourceforge.net/','ntfsprogs' ]}</dt>
+<dd><p><b>Original version >=200309071734 sufficient</b>:
+The package which is downloadable from here, has no code patches - you can freely use the
+original version instead. Unfortunately, the last public release is
+<b>1.7.1</b> while this project requires at least
+@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/','snapshot' ]} version
+<b>@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/ntfsprogs-200309071734.tar.bz2','200309071734' ]}</b>
+which is not packaged (.rpm/.deb) yet. Packaged versions are provided here for
+your convenience.</p></dd>
+
+</dl>
+
+
+<h2>LUFS Kernel Driver Module</h2>
+
+<p>@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File
+System) needs Linux kernel module driver (<i>lufs.o</i>) compatible with your
+running Linux kernel. The binary driver is supplied already precompiled for many
+Linux kernel versions in the binary packages above (<b>.i386.rpm</b> and
+<b>_i386.deb</b> archives).</p>
+
+<p>If you cannot <b>mount</b>(8) your NTFS filesystem you should run <span
+class="quote">/usr/share/lufs/prepmod</span> to see the reasons. It is always
+recommended to upgrade to the latest stable kernel supplied by your GNU/Linux
+distribution vendor. You may need to install package
+<b>kernel-source</b> (Red Hat) or <b>kernel-headers</b> (Debian) matching your
+Linux kernel version (<b>rpm&nbsp;-q&nbsp;kernel</b>) and re-run <span
+class="quote">/usr/share/lufs/prepmod</span>.</p>
+
+<p><b>WARNING:</b> This 'captive' package may modify your Linux kernel
+sources matching your currently running kernel version. These minor
+modifications may include a dependencies rebuild, compiling build tools, fixes of
+several include files, etc. All the modifications are done at the mount(8) time
+by the automatically executed <span class="quote">/usr/share/lufs/prepmod</span> script.
+This behavior was not present in the original
+@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} distribution
+by @{[ a_href 'http://www.malinux.net/main/','Florin Malita' ]}.</p>
+
+
+HERE
+
+
+print rightimg <<"HERE",'reactos','ReactOS',"a_href"=>'http://www.reactos.com/';
+       <h2>The First Open Source MS-Windows Kernel API for Free OS</h2>
+
+       <p>Compatibility with the existing binary Microsoft Windows file system drivers has been
+       reached. Microsoft Windows kernel system components required by these drivers
+       were analyzed and successfully emulated in the GNU/Linux operating system.
+       The project brings the Microsoft Windows kernel emulation framework to support even
+       other types of Microsoft Windows drivers in the future.
+       The <span class="productname">@{[ a_href 'http://www.reactos.com/','ReactOS' ]}</span>
+       code base proved to be a big asset for this functionality.</p>
+HERE
+
+
+my @lists=qw(captive-announce-list captive-list captive-devel-list);
+
+print <<"HERE";
+
+<a name="lists"><h2>Mailing Lists</h2></a>
+
+<form action="@{[ top_dir("/Mailman.pl") ]}" method="post">
+       <table border="1" class="mailman" style="border-collapse: collapse; border-style: solid; border-width: 1px;">
+               <tr>@{[ map("<th>$_</th>",@lists) ]}</tr>
+               <tr><td>New version announcements<br />
+                       (low traffic, recommended)</td>
+                               <td>User support,<br />bug reports</td>
+                               <td>Development</td>
+                               </tr>
+               <tr>@{[ map({ "<td>".a_href(&{$W->{"mailman_url_sub"}}()."/listinfo/$_",'Mailman Infopage')."</td>"; } @lists) ]}</tr>
+               <tr>@{[ map({ "<td>".a_href(&{$W->{"pipermail_url_sub"}}()."/$_",'Archive')."</td>"; } @lists) ]}</tr>
+               <tr>@{[
+                       map(('<td><input type="checkbox" name="list" value="'.$_.'"'
+                                       .($_ ne "captive-announce-list" ? '' : ' checked="checked"')
+                                       .' /> Subscribe?</td>'),@lists)
+                       ]}</tr>
+               <tr><td colspan="3">
+                       <table border="0" style="text-align: left;">
+                               <tr><td>Email address:            </td><td><input type="text"     name="email"   size="30" /></td></tr>
+                               <tr><td>Your new Mailman password:</td><td><input type="password" name="pw"      size="15" /></td></tr>
+                               <tr><td>Reenter your password:    </td><td><input type="password" name="pw-conf" size="15" /></td></tr>
+                       </table>
+                       <p><input type="submit" name="email-button" value="Subscribe me" /></p>
+               </td></tr>
+       </table>
+<input type="hidden" name="back" value="/project/captive/#lists" />
+</form>
+
+
+@{[ vskip "3ex" ]}
+
+<h1>See Also</h1>
+<ul>
+       <li>@{[ a_href 'Preview.html.pl','<span style="font-size: larger;">Technology Preview</span>' ]}</li>
+       <li>@{[ a_href 'CVS.html.pl','CVS Repository' ]}</li>
+       <li>@{[ a_href 'doc/','Developer Documentation' ]}; highlights:<ul>
+               <li>@{[ a_href 'doc/About.html.pl#versions','Microsoft Windows Versions Compatibility' ]}</li>
+               <li>@{[ a_href 'doc/Architecture.html.pl#law','Laws and Licensing Conditions' ]}</li>
+               <li>@{[ a_href 'doc/Details.html.pl#sandbox','Sandboxing of W32 Filesystem' ]}</li>
+               <li>@{[ a_href 'doc/TODO.html.pl#todo_fsck','TODO: Fsck of NTFS' ]}</li>
+               <li>@{[ a_href 'doc/TODO.html.pl#todo_surprise','TODO: NTFS Support for Partition Surprise' ]}</li>
+               <li>@{[ a_href 'doc/Related.html.pl#LinuxNTFScompet','Related Projects - Linux NTFS' ]}</li>
+               <li>@{[ a_href 'doc/Related.html.pl#vmware','Related Projects - VMware Workstation' ]}</li>
+               <li>@{[ a_href 'doc/LinuxNTFS.html.pl',"Re: 7.7 Can't we write a wrapper for Windows' driver?" ]}</li>
+               </ul></li>
+       <li>@{[ a_href 'http://cvs.jankratochvil.net/viewcvs/*checkout*/captive/TODO?rev=HEAD','Known Bugs' ]}</li>
+       <li>Man Pages<ul>
+               @{[
+                       do {
+                               my @mans=(
+                                               'captive'=>[7,'Microsoft Windows NT kernel emulation for NTFS disk access'],
+                                               'mount.captive'=>[8,'mount(8) interface for NTFS disk access'],
+                                               'lufs-captivefs'=>[7,'Linux Userland File System module for NTFS as filesystem'],
+                                               'captive-cmdline'=>[1,'Command-line client for captive(7) NTFS disk access'],
+###                                            'captive-sandbox-server'=>[1,'Security+safety wrapper for NTFS disk access'],
+                                               'captive-install-acquire'=>[1,'Find MS Windows XP driver files for NTFS'],
+###                                            'captive-install-fstab'=>[1,'Manage captive-ntfs /etc/fstab entries'],
+                                               );
+                               my @r;
+                               while (@mans) {
+                                       my $file=shift @mans;
+                                       my($section,$name)=@{shift @mans};
+                                       push @r,"<li>".a_href("man/$file.pod.html",$file)."($section) - $name</li>\n";
+                                       }
+                               @r;
+                               }
+                       ]}
+               </ul></li>
+       <li>@{[ a_href 'Resources.html.pl','Related Pages' ]}</li>
+       <li>@{[ a_href 'Thanks.html.pl','Thanks' ]}</li>
+</ul>
+HERE
+
+
+My::Web->footer();
diff --git a/project/captive/ListItem.pm b/project/captive/ListItem.pm
new file mode 100755 (executable)
index 0000000..daf5101
--- /dev/null
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::captive' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"Captive",
+               "platform"=>"unixuser",
+               "priority"=>666,
+               "summary"=>"NTFS filesystem, MS-Windows NT kernel emulation",
+               "license"=>"GPL",
+               "maintenance"=>"active",
+               "language"=>"i386 asm, C, Perl",
+               "icon"=>"captive-install-acquire-icon",
+               "cvs-of main tree"=>"captive",
+               "cvs-of branched ".a_href('http://www.reactos.com/','reactos')." subdir"=>"reactos:captive",
+               "cvs-of branched ".a_href('http://lufs.sourceforge.net/lufs/','lufs')=>"lufs:captive",
+               "cvs-of 'httpcaptive://' method"=>"gnome-vfs-httpcaptive:captive",
+               "cvs-of 'libntfs://' method"=>"ntfsprogs-gnomevfs",
+               "description"=><<"HERE",
+<p>The first full read/write access to NTFS disk drivers was achieved in
+the @{[ a_href 'http://www.winehq.com/','Wine' ]} way by using the original
+Microsoft Windows <i>ntfs.sys</i> driver. It emulates the required subsystems of
+the Microsoft Windows kernel by reusing one of the original
+<i>ntoskrnl.exe</i>, @{[ a_href 'http://www.reactos.com/','ReactOS' ]} parts, or
+this project's own reimplementations, on a case by case basis.</p>
+<p>Involvement of the original driver files was chosen to achieve the best
+and unprecedented filesystem compatibility and safety.</p>
+HERE
+               );
+
+1;
old mode 100755 (executable)
new mode 100644 (file)
similarity index 64%
rename from project/mdsms/index.html.pl
rename to project/captive/Makefile.am
index 4419075..ca94e91
@@ -1,7 +1,5 @@
-#! /usr/bin/perl
-# 
 # $Id$
-# Main page of 'My::Project::mdsms'
+# automake source for the Makefile of project/captive/ subdir
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use project::mdsms::ListItem;
-
+include $(top_srcdir)/Makefile-head.am
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::mdsms::ListItem,
-               );
+SUBDIRS= \
+               doc
 
-My::Web->footer();
+EXTRA_DIST+= \
+               ListItem.pm \
+               Index.html.pl \
+               Thanks.html.pl \
+               Resources.html.pl \
+               Preview.html.pl \
+               CVS.html.pl
diff --git a/project/captive/Preview.html.pl b/project/captive/Preview.html.pl
new file mode 100755 (executable)
index 0000000..ca49f1d
--- /dev/null
@@ -0,0 +1,76 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project Preview page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Preview;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wrequire 'My::Project';
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Technology Preview',
+               "head_css"=>"
+td { padding: 10px; text-align: center; }
+table { border-collapse: collapse; border-style: solid; }
+",
+               "WebConfig::heading_novskip"=>1,
+               );
+My::Web->heading();
+print My::Project->section("captive");
+
+print "<h1>Captive NTFS Technology Preview</h1>\n";
+
+sub preview_img ($$;$)
+{
+my($file_base,$text,$comment)=@_;
+
+       return <<"HERE";
+<table border="1" align="center">
+<tr><td>@{[ img $file_base,$text ]}</td></tr>
+<tr><td><b>$text</b>@{[ map((!$_ ? "" : "<br />$_"),$comment) ]}</td></tr>
+</table>
+@{[ vskip "3ex" ]}
+HERE
+}
+
+print preview_img 'doc/ntdebug-ntfs','WinDbg Remote NT Kernel NTFS Debugging';
+print preview_img 'doc/dia/arch-all','Captive Components Architecture',''
+               .'<font color="red">Red color</font> indicates Captive components for the most common LUFS use case.<br />'
+               .'<font color="violet">Violet color</font> indicates system components for the most common LUFS use case.';
+print preview_img 'doc/arch-captive','Captive Subsystems Architecture';
+print preview_img 'doc/arch-W32','Original Microsoft Windows Subsystems Architecture';
+print preview_img 'doc/ratio','Functions Reusal Ratio';
+print preview_img 'doc/fig/functype_patched_wrap_fromw32','Code Wrapping of a Call from Microsoft Windows Code';
+print preview_img 'doc/dia/inheritance','Sandboxing Scheme with GObject Inheritance';
+print preview_img 'doc/dia/parent-connector','Parent Connector for Sandbox Slave Restarts Handling';
+print preview_img 'doc/dia/cache-manager','NT Cache Manager Scheme';
+print preview_img 'doc/ntdebug-windbg-boot','Windows NT Remote Kernel Debug Mode During System Boot';
+print preview_img 'doc/dia/TraceFS','TraceFS Debugging Hook for NT Cache Manager Analysis';
+print preview_img 'captive-install-acquire','Captive Microsoft Windows Drivers Acquire Utility';
+
+
+My::Web->footer();
diff --git a/project/captive/Resources.html.pl b/project/captive/Resources.html.pl
new file mode 100755 (executable)
index 0000000..eb6aacb
--- /dev/null
@@ -0,0 +1,78 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project Resources page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Resources;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wrequire 'My::Project';
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Internet Resources',
+               "WebConfig::heading_novskip"=>1,
+               );
+My::Web->heading();
+print My::Project->section("captive");
+
+
+print "<h1>Captive NTFS Internet Resources</h1>\n";
+print "<ul>\n";
+       my @URLs=(
+# no longer valid: 'NTFS Preinstallation and Windows XP'=>'http://www.microsoft.com/hwdev/tech/storage/ntfs-preinstallP.asp',
+                       'Linux-NTFS Project'=>'http://linux-ntfs.sourceforge.net/',
+                       'ReactOS Project'=>'http://www.reactos.com/',
+                       'Ext2 File System Driver'=>'http://sys.xiloo.com/projects/projects.htm#ext2fsd',
+                       'Wine Project'=>'http://www.winehq.com/',
+                       'Memory Support and Windows Operating Systems'=>'http://www.microsoft.com/whdc/hwdev/platform/server/PAE/PAEmem.mspx',
+                       'GnomeVFS - Filesystem Abstraction library'=>'http://developer.gnome.org/doc/API/gnome-vfs/',
+                       'Linux Userland File System (LUFS)'=>'http://lufs.sourceforge.net/lufs/',
+                       'Partition Surprise'=>'http://surprise.sourceforge.net/',
+                       'ntfsresize'=>'http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html',
+                       'NTPwd NTFS driver'=>'http://www.cgsecurity.org/ntfs.html',
+                       'Microsoft Windows XP Service Pack 1a'
+                                       =>'http://download.microsoft.com/download/9/7/6/9763833d-bd58-41e2-9911-50f64c7252a3/xpsp1a_en_x86_CHK.exe',
+                       'The NT Cache Manager Description'=>'http://www.osr.com/ntinsider/1996/cacheman.htm',
+                       'Learn About NT'."'".'s File-system Cache'=>'http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864',
+                       'NT File System Developers mailing list'=>'http://www.ntfsd.org/archive/',
+                       'IDA Freeware'=>'http://www.simtel.net/pub/pd/29498.html',
+                       'Argument Passing and Naming Conventions'
+                                       =>'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_core_argument_passing_and_naming_conventions.asp',
+                       'MS-DOS FAT Filesystems Support on Linux'=>'ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/dosfstools/',
+                       'MSDN (Microsoft Developer Network) Kernel-Mode Driver Architecture: Windows DDK'
+                                       =>'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/kmhdr_6enb.asp',
+                       'GLib, Gnome Utility Library'=>'http://developer.gnome.org/doc/API/2.0/glib/',
+                       'VMware Workstation'=>'http://www.vmware.com/download/workstation.html',
+                       );
+       for (my @URLa=@URLs;@URLa;) {
+               my $text=shift @URLa;
+               my $url=shift @URLa;
+               print "\t<li>".a_href($url,CGI::escapeHTML($text))."</li>\n";
+               }
+print "</ul>\n";
+
+
+My::Web->footer();
diff --git a/project/captive/Thanks.html.pl b/project/captive/Thanks.html.pl
new file mode 100755 (executable)
index 0000000..346bbf8
--- /dev/null
@@ -0,0 +1,91 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project Thanks page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Thanks;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wrequire 'My::Project';
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Thanks',
+               "head_css"=>"
+.name { font-style: italic; }
+",
+               "WebConfig::heading_novskip"=>1,
+               "no_job"=>1,
+               );
+My::Web->heading();
+print My::Project->section("captive");
+
+
+print <<'HERE';
+<h1>Captive NTFS Thanks</h1>
+
+<ul>
+HERE
+
+sub name ($;$$)
+{
+my($name,$pos,$why)=@_;
+
+       my $r="<li>";
+               $r.='<span class="name">'.$name.'</span>';
+               $r.=", $pos" if $pos;
+               $r.=" - $why" if $why;
+       $r.="</li>\n";
+       return $r;
+}
+
+print name "Karel Zatoukal",a_href("http://www.sun.com/","Sun Microsystems");
+print name "Tim Boudreau",a_href("http://www.sun.com/","Sun Microsystems");
+print name a_href_cz('http://www.itpravo.cz/admin.shtml?x=45480','Jiri Cermak'),
+               a_href("http://www.bakernet.com/",'Baker &amp; McKenzie'),
+               'preflight IT law analysis';
+print name a_href('http://www.ucw.cz/~mj/','Martin "MJ" Mares');
+print name "Lubomir Bulej";
+print name "Tomas Bures";
+print name a_href_cz('http://www.vellum.cz/','Lukas "Klokan" Horalek'),undef(),"services hosting";
+print name a_href('http://www-troja.fjfi.cvut.cz/~drab/','Martin Drab'),undef(),
+               "betatesting, ".a_href('http://lufs.sourceforge.net/lufs/','LUFS')." patches";
+print name a_href('http://www.pavouk.org/','Pavel "Pavouk" Ruzicka'),a_href('http://www.gtsgroup.cz/','GTS'),
+               "betatesting";
+print name "Jesse Glick",a_href("http://www.sun.com/","Sun Microsystems"),"betatesting";
+print name a_href_cz('http://vellum.cz/~mikc/','Michal "MIKC" Conos'),undef(),
+               "betatesting";
+print name a_href("http://sys.xiloo.com/","Matt Wu"),
+               a_href("http://sys.xiloo.com/projects/projects.htm#ext2fsd","Ext2fsd")." developer","W32 tips";
+
+print name "Steven Edwards"  ,a_href("http://www.reactos.com/","ReactOS")." developer","W32 tips";
+print name "Casper Hornstrup",a_href("http://www.reactos.com/","ReactOS")." developer","W32 tips";
+print <<'HERE';
+<li>Last but not least - Kind greetings to Danese Cooper, Open Source Diva!</li>
+</ul>
+
+HERE
+
+My::Web->footer();
diff --git a/project/captive/apiref/.htaccess b/project/captive/apiref/.htaccess
new file mode 100644 (file)
index 0000000..717ec6f
--- /dev/null
@@ -0,0 +1 @@
+DirectoryIndex index.html
diff --git a/project/captive/apiref/Makefile.am b/project/captive/apiref/Makefile.am
new file mode 100644 (file)
index 0000000..ad8d991
--- /dev/null
@@ -0,0 +1,41 @@
+# $Id$
+# automake source for the Makefile of project/captive/ API reference doc
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+               captive-apiref-calltype-reactos.html \
+               captive-apiref-init.html \
+               captive-apiref-ldr-exports.html \
+               captive-apiref-ldr.html \
+               captive-apiref-macros.html \
+               captive-apiref-mm.html \
+               captive-apiref-ps-reactos.html \
+               captive-apiref-rtl-file.html \
+               captive-apiref-signal.html \
+               captive-apiref-storage.html \
+               captive-apiref-unicode-reactos.html \
+               captive-apiref-unicode.html \
+               captive-apiref.devhelp \
+               ch01.html \
+               index.html \
+               home.png \
+               left.png \
+               right.png \
+               up.png
+
diff --git a/project/captive/apiref/captive-apiref-calltype-reactos.html b/project/captive/apiref/captive-apiref-calltype-reactos.html
new file mode 100644 (file)
index 0000000..16f5a3e
--- /dev/null
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>calltype_reactos</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-ldr-exports.html" title="ldr_exports"><link rel="next" href="captive-apiref-signal.html" title="signal"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-ldr-exports.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-signal.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-calltype-reactos"></a><div class="titlepage"></div><div class="refnamediv"><h2>calltype_reactos</h2><p>calltype_reactos &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+#define     <a href="captive-apiref-calltype-reactos.html#CAPTIVE-CDECL-CAPS">CAPTIVE_CDECL</a>
+#define     <a href="captive-apiref-calltype-reactos.html#CAPTIVE-STDCALL-CAPS">CAPTIVE_STDCALL</a>
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="CAPTIVE-CDECL-CAPS"></a>CAPTIVE_CDECL</h3><pre class="programlisting">#define CAPTIVE_CDECL    __attribute__((__cdecl__))
+</pre><p>
+Function call type declaration for the real CDECL call type.
+As the default CDECL macro gets disabled (=NOP) during reactos sources
+compilation (and gets undefined to cause error during non-reactos sources
+compilation) you have the chance to do the real CDECL declaration
+by using <a href="captive-apiref-calltype-reactos.html#CAPTIVE-CDECL-CAPS">CAPTIVE_CDECL</a>. You must ifdef it by <tt>LIBCAPTIVE</tt> symbol as it
+is not available during standalone reactos compilation.
+</p><p>
+This macro may be needed to pass control to W32 binary code.</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-STDCALL-CAPS"></a>CAPTIVE_STDCALL</h3><pre class="programlisting">#define CAPTIVE_STDCALL  __attribute__((__stdcall__))
+</pre><p>
+Function call type declaration for the real STDCALL call type.
+As the default STDCALL macro gets disabled (=NOP) during reactos sources
+compilation (and gets undefined to cause error during non-reactos sources
+compilation) you have the chance to do the real STDCALL declaration
+by using <a href="captive-apiref-calltype-reactos.html#CAPTIVE-STDCALL-CAPS">CAPTIVE_STDCALL</a>. You must ifdef it by <tt>LIBCAPTIVE</tt> symbol as it
+is not available during standalone reactos compilation.
+</p><p>
+This macro may be needed to pass control to W32 binary code.</p><p>
+
+</p></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-ldr-exports.html"><b>&lt;&lt; ldr_exports</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-signal.html"><b>signal &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-init.html b/project/captive/apiref/captive-apiref-init.html
new file mode 100644 (file)
index 0000000..4d08a9d
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>init</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="ch01.html" title="Operation Captive"><link rel="next" href="captive-apiref-ldr.html" title="ldr"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-ldr.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-init"></a><div class="titlepage"></div><div class="refnamediv"><h2>init</h2><p>init &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gboolean    <a href="captive-apiref-init.html#captive-init">captive_init</a>                    (void);
+gboolean    <a href="captive-apiref-init.html#captive-shutdown">captive_shutdown</a>                (void);
+void        <a href="captive-apiref-init.html#captive-log-init">captive_log_init</a>                (const struct captive_options *captive_options);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-init"></a>captive_init ()</h3><pre class="programlisting">gboolean    captive_init                    (void);</pre><p>
+Expects captive_options: Parsed by captive_options_parse().
+<tt>NULL</tt> value is forbidden. Field image_iochannel <tt>NULL</tt> value is forbidden.
+</p><p>
+Initializes <tt>libcaptive</tt> and loads the specified filesystem.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if successfuly initialized.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-shutdown"></a>captive_shutdown ()</h3><pre class="programlisting">gboolean    captive_shutdown                (void);</pre><p>
+Closes down <tt>libcaptive</tt>. It should flush all pending buffers and successfuly
+close the filesystem. Variable captive_options-&gt;image_iochannel will not be set to <tt>NULL</tt>,
+you should close such channel yourself.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if successfuly shutdown.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-log-init"></a>captive_log_init ()</h3><pre class="programlisting">void        captive_log_init                (const struct captive_options *captive_options);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>captive_options</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="ch01.html"><b>&lt;&lt; Operation Captive</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-ldr.html"><b>ldr &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-ldr-exports.html b/project/captive/apiref/captive-apiref-ldr-exports.html
new file mode 100644 (file)
index 0000000..4d8e717
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldr_exports</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-storage.html" title="storage"><link rel="next" href="captive-apiref-calltype-reactos.html" title="calltype_reactos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-storage.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-calltype-reactos.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-ldr-exports"></a><div class="titlepage"></div><div class="refnamediv"><h2>ldr_exports</h2><p>ldr_exports &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-kernel-exports">captive_kernel_exports</a>          (void);
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-kernel-patches">captive_kernel_patches</a>          (void);
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-ModuleList-add-builtin">captive_ModuleList_add_builtin</a>  (const gchar *FullName_utf8,
+                                             ...);
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-ModuleList-patch">captive_ModuleList_patch</a>        (const gchar *FullName_utf8,
+                                             ...);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-kernel-exports"></a>captive_kernel_exports ()</h3><pre class="programlisting">gboolean    captive_kernel_exports          (void);</pre><p>
+Export complete libcaptive modules to reactos. It is done by *.def files used
+by dlltool(1) of Mingw32 compiler suite. We use native host OS compiler and
+we also have just a limited set of functions over reactos itself.
+We use our <a href="captive-apiref-ldr-exports.html#captive-ModuleList-add-builtin">captive_ModuleList_add_builtin</a>() to simulate PE headers exporting
+our symbols; this export simulation is invocated from this function.
+</p><p>
+This function is generated automatically from exports.captivesym file
+by captivesym.pl script.
+</p><p>
+Multiple calls of this function are forbidden. See also <a href="captive-apiref-ldr-exports.html#captive-kernel-patches">captive_kernel_patches</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the export was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-kernel-patches"></a>captive_kernel_patches ()</h3><pre class="programlisting">gboolean    captive_kernel_patches          (void);</pre><p>
+Patches W32 libraries by libcaptive functions. It is done by *.def files used
+by dlltool(1) of Mingw32 compiler suite. We use native host OS compiler and
+we also have just a limited set of functions over reactos itself.
+We use our <a href="captive-apiref-ldr-exports.html#captive-ModuleList-patch">captive_ModuleList_patch</a>() to modify existing module function
+tables generated from <a href="captive-apiref-ldr-exports.html#captive-ModuleList-add-builtin">captive_ModuleList_add_builtin</a>().
+</p><p>
+This function is generated automatically from exports.captivesym file
+by captivesym.pl script.
+</p><p>
+Multiple calls of this function are forbidden. See also <a href="captive-apiref-ldr-exports.html#captive-kernel-exports">captive_kernel_exports</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the export was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ModuleList-add-builtin"></a>captive_ModuleList_add_builtin ()</h3><pre class="programlisting">gboolean    captive_ModuleList_add_builtin  (const gchar *FullName_utf8,
+                                             ...);</pre><p>
+Adds simulated built-in module to ModuleListHead module list.
+It can be used for the functionality of reactos/ntoskrnl/ldr/loader.c/LdrInitModuleManagement().
+libcaptive does not support Ordinals - we just pretend liner (<tt>0</tt>-based)
+Ordinal numbers of the functions in given @... stdargs order.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>FullName_utf8</tt></i> :</span></td><td> String to fill in PMODULE_OBJECT-&gt;FullName.
+</td></tr><tr><td><span class="term"><i><tt>...</tt></i> :</span></td><td> (const gchar *sym_name,void *sym_val) symbol list terminated by <tt>NULL</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the module was successfuly added.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ModuleList-patch"></a>captive_ModuleList_patch ()</h3><pre class="programlisting">gboolean    captive_ModuleList_patch        (const gchar *FullName_utf8,
+                                             ...);</pre><p>
+Patches existing <i><tt>FullName_utf8</tt></i> module to use for function named sym_name
+pointer to the handler sym_val. If patchpoint is not <tt>NULL</tt> it gets assigned the original
+pointer value (used for <tt>pass</tt> keyword in exports.captivesym).
+</p><p>
+Put here 0xF4 'hlt' instead of 0xCC 'int $0x3; breakpoint'
+as 'hlt' will generate handled SIGSEGV instead of SIGTRAP which
+is used by gdb(1) during debugging.
+See also libcaptive/ps/signal.c/ sigaction_SIGSEGV().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>FullName_utf8</tt></i> :</span></td><td> String to find PMODULE_OBJECT by FullName.
+</td></tr><tr><td><span class="term"><i><tt>...</tt></i> :</span></td><td> (const gchar *sym_name,void (*sym_val)(void),struct captive_ModuleList_patchpoint *patchpoint) symbol list terminated by <tt>NULL</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the module was successfuly added.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-storage.html"><b>&lt;&lt; storage</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-calltype-reactos.html"><b>calltype_reactos &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-ldr.html b/project/captive/apiref/captive-apiref-ldr.html
new file mode 100644 (file)
index 0000000..93355b4
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldr</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-init.html" title="init"><link rel="next" href="captive-apiref-macros.html" title="macros"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-init.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-macros.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-ldr"></a><div class="titlepage"></div><div class="refnamediv"><h2>ldr</h2><p>ldr &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+NTSTATUS    <a href="captive-apiref-ldr.html#captive-LdrpLoadAndCallImage">captive_LdrpLoadAndCallImage</a>    (PMODULE_OBJECT *ModuleObjectp,
+                                             struct captive_options_module *options_module,
+                                             PDRIVER_OBJECT DriverEntry_DriverObject,
+                                             PUNICODE_STRING DriverEntry_RegistryPath);
+NTSTATUS    <a href="captive-apiref-ldr.html#captive-LdrLoadModule">captive_LdrLoadModule</a>           (struct captive_options_module *options_module,
+                                             PMODULE_OBJECT *ModuleObjectp);
+G_CONST_RETURN gchar* <a href="captive-apiref-ldr.html#captive-ModuleList-function-disable-find">captive_ModuleList_function_disable_find</a>
+                                            (gconstpointer ExportAddress);
+void*       <a href="captive-apiref-ldr.html#captive-Module-GetExportAddress">captive_Module_GetExportAddress</a> (const gchar *ModuleName_utf8,
+                                             const gchar *FunctionName);
+void        <a href="captive-apiref-ldr.html#captive-PoQueueShutdownWorkItem-hooklist-invoke">captive_PoQueueShutdownWorkItem_hooklist_invoke</a>
+                                            (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-LdrpLoadAndCallImage"></a>captive_LdrpLoadAndCallImage ()</h3><pre class="programlisting">NTSTATUS    captive_LdrpLoadAndCallImage    (PMODULE_OBJECT *ModuleObjectp,
+                                             struct captive_options_module *options_module,
+                                             PDRIVER_OBJECT DriverEntry_DriverObject,
+                                             PUNICODE_STRING DriverEntry_RegistryPath);</pre><p>
+Corresponds to reactos LdrpLoadAndCallImage() but it also provides arguments
+to pass to PDRIVER_INITIALIZE call of module driver initialization.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>ModuleObjectp</tt></i> :</span></td><td> Returns PMODULE_OBJECT successfuly loaded.
+</td></tr><tr><td><span class="term"><i><tt>options_module</tt></i> :</span></td><td> captive_options_module structure describing the module to load.
+Loading of already loaded module is forbidden despite original
+LdrpLoadAndCallImage().
+</td></tr><tr><td><span class="term"><i><tt>DriverEntry_DriverObject</tt></i> :</span></td><td> argument DriverObject of PDRIVER_INITIALIZE call.
+</td></tr><tr><td><span class="term"><i><tt>DriverEntry_RegistryPath</tt></i> :</span></td><td> argument RegistryPath of PDRIVER_INITIALIZE call.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> STATUS_SUCCESS if the driver module was loaded and initialized
+successfuly during this call. Ignore returned <i><tt>ModuleObjectp</tt></i> if function failed.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-LdrLoadModule"></a>captive_LdrLoadModule ()</h3><pre class="programlisting">NTSTATUS    captive_LdrLoadModule           (struct captive_options_module *options_module,
+                                             PMODULE_OBJECT *ModuleObjectp);</pre><p>
+Load and initialize module to reactos using host OS functions.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>options_module</tt></i> :</span></td><td> captive_options_module structure describing the module to load.
+Loading of already loaded module is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>ModuleObjectp</tt></i> :</span></td><td> Returns initialized module object.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> STATUS_SUCCESS if the module was loaded successfuly during the call.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ModuleList-function-disable-find"></a>captive_ModuleList_function_disable_find ()</h3><pre class="programlisting">G_CONST_RETURN gchar* captive_ModuleList_function_disable_find
+                                            (gconstpointer ExportAddress);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>ExportAddress</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-Module-GetExportAddress"></a>captive_Module_GetExportAddress ()</h3><pre class="programlisting">void*       captive_Module_GetExportAddress (const gchar *ModuleName_utf8,
+                                             const gchar *FunctionName);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>ModuleName_utf8</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>FunctionName</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-PoQueueShutdownWorkItem-hooklist-invoke"></a>captive_PoQueueShutdownWorkItem_hooklist_invoke ()</h3><pre class="programlisting">void        captive_PoQueueShutdownWorkItem_hooklist_invoke
+                                            (void);</pre><p>
+
+</p></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-init.html"><b>&lt;&lt; init</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-macros.html"><b>macros &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-macros.html b/project/captive/apiref/captive-apiref-macros.html
new file mode 100644 (file)
index 0000000..8f3792e
--- /dev/null
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>macros</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-ldr.html" title="ldr"><link rel="next" href="captive-apiref-mm.html" title="mm"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-ldr.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-mm.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-macros"></a><div class="titlepage"></div><div class="refnamediv"><h2>macros</h2><p>macros &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+#define     <a href="captive-apiref-macros.html#CAPTIVE-FAKEUSE-CAPS">CAPTIVE_FAKEUSE</a>
+#define     <a href="captive-apiref-macros.html#captive-newn">captive_newn</a>                    (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new0n">captive_new0n</a>                   (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-renewn">captive_renewn</a>                  (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new">captive_new</a>                     (objp)
+#define     <a href="captive-apiref-macros.html#captive-new0">captive_new0</a>                    (objp)
+#define     <a href="captive-apiref-macros.html#captive-newn-alloca">captive_newn_alloca</a>             (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new0n-alloca">captive_new0n_alloca</a>            (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new-alloca">captive_new_alloca</a>              (objp)
+#define     <a href="captive-apiref-macros.html#captive-new0-alloca">captive_new0_alloca</a>             (objp)
+#define     <a href="captive-apiref-macros.html#captive-memdup">captive_memdup</a>                  (destp,srcp)
+#define     <a href="captive-apiref-macros.html#captive-va-arg">captive_va_arg</a>                  (objp,ap)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-MEMZERO-CAPS">CAPTIVE_MEMZERO</a>                 (objp)
+#define     <a href="captive-apiref-macros.html#captive-printf-alloca">captive_printf_alloca</a>           (format,args...)
+#define     <a href="captive-apiref-macros.html#captive-strdup-alloca">captive_strdup_alloca</a>           (string)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN-CAPS">CAPTIVE_ROUND_DOWN</a>              (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN64-CAPS">CAPTIVE_ROUND_DOWN64</a>            (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN-EXCEEDING-CAPS">CAPTIVE_ROUND_DOWN_EXCEEDING</a>    (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN-EXCEEDING64-CAPS">CAPTIVE_ROUND_DOWN_EXCEEDING64</a>  (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-UP-CAPS">CAPTIVE_ROUND_UP</a>                (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-UP64-CAPS">CAPTIVE_ROUND_UP64</a>              (pointer,fragment)
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="CAPTIVE-FAKEUSE-CAPS"></a>CAPTIVE_FAKEUSE</h3><pre class="programlisting">#define CAPTIVE_FAKEUSE =0
+</pre><p>
+Prevent 'might be used uninitialized' warning.
+Macro will fakes the use of the variable as sometimes GCC can't code flow
+analyse C correctly.
+</p><p>
+</p><div class="informalexample"><pre class="programlisting">
+g_some_type some_variable CAPTIVE_FAKEUSE;
+</pre></div><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-newn"></a>captive_newn()</h3><pre class="programlisting">#define captive_newn(objp,n) ((objp)=g_new(typeof(*(objp)),(n)))
+</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0n"></a>captive_new0n()</h3><pre class="programlisting">#define captive_new0n(objp,n) ((objp)=g_new0(typeof(*(objp)),(n)))
+</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated and precleared.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-renewn"></a>captive_renewn()</h3><pre class="programlisting">#define     captive_renewn(objp,n)</pre><p>
+Macro to reallocate the original memory stored in <i><tt>objp</tt></i>
+to the size <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+New allocated space may contain garbage. Both <i><tt>objp</tt></i> and <i><tt>n</tt></i> can be nonexclusively
+passed as zero.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be reallocated. 
+Value <tt>NULL</tt> is permitted (g_malloc() effect).
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (g_free() effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new"></a>captive_new()</h3><pre class="programlisting">#define captive_new(objp) (captive_newn((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage. Equivalent to captive_newn(objp,1) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp)).
+Value <tt>NULL</tt> is never returned.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0"></a>captive_new0()</h3><pre class="programlisting">#define captive_new0(objp) (captive_new0n((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared. Equivalent to captive_new0n(objp,1) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp)).
+Value <tt>NULL</tt> is never returned.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated and precleared.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-newn-alloca"></a>captive_newn_alloca()</h3><pre class="programlisting">#define     captive_newn_alloca(objp,n)</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0n-alloca"></a>captive_new0n_alloca()</h3><pre class="programlisting">#define     captive_new0n_alloca(objp,n)</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated and precleared.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new-alloca"></a>captive_new_alloca()</h3><pre class="programlisting">#define captive_new_alloca(objp) (captive_newn_alloca((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage. Equivalent to captive_newn_alloca(objp,1) call.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp)).
+Value <tt>NULL</tt> is never returned.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0-alloca"></a>captive_new0_alloca()</h3><pre class="programlisting">#define captive_new0_alloca(objp) (captive_new0n_alloca((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared. Equivalent to captive_new0n_alloca(objp,1) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp)).</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated and precleared.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-memdup"></a>captive_memdup()</h3><pre class="programlisting">#define     captive_memdup(destp,srcp)</pre><p>
+Macro to similiar to g_memdup() but the object size is detected automatically.
+Size of <i><tt>destp</tt></i> object and <i><tt>srcp</tt></i> object must be the same.
+</p><p>
+You must free the allocated memory of <i><tt>destp</tt></i> by g_free().
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>destp</tt></i> value as the copied memory of size sizeof(typeof(*srcp)).</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>destp</tt></i> :</span></td><td> Variable with the pointer to the target object wished to be allocated.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>srcp</tt></i> :</span></td><td> Pointer to the source object to be copied to <i><tt>destp</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-va-arg"></a>captive_va_arg()</h3><pre class="programlisting">#define captive_va_arg(objp,ap) ((objp)=va_arg((ap),typeof(objp)))
+</pre><p>
+Automatically determines the size of <i><tt>objp</tt></i>.
+Equivalent to objp=va_arg(ap,typeof(objp)) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable to be filled from the next argument of <i><tt>ap</tt></i>.
+</td></tr><tr><td><span class="term"><i><tt>ap</tt></i> :</span></td><td> Initialized va_list type.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-MEMZERO-CAPS"></a>CAPTIVE_MEMZERO()</h3><pre class="programlisting">#define CAPTIVE_MEMZERO(objp) (memset((objp),0,sizeof(*(objp))))
+</pre><p>
+Clears the sizeof(*<i><tt>objp</tt></i>) bytes of the given pointer with memset().
+Pass _pointer_ to the object to be cleared.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Pointer to the variable to be cleared.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-printf-alloca"></a>captive_printf_alloca()</h3><pre class="programlisting">#define     captive_printf_alloca(format,args...)</pre><p>
+Format the given format string <i><tt>format</tt></i> as in sprintf().
+Output buffer is allocated automatically and it does not need to be deallocated
+manually as it is managed by g_alloca().
+</p><p>
+<i><tt>Returns</tt></i>: Formatted output string located in g_alloca() memory.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>format</tt></i> :</span></td><td> Format string. See the sprintf() documentation.
+</td></tr><tr><td><span class="term"><i><tt>args...</tt></i> :</span></td><td> Arguments for <i><tt>format</tt></i>. See the sprintf() documentation.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-strdup-alloca"></a>captive_strdup_alloca()</h3><pre class="programlisting">#define     captive_strdup_alloca(string)</pre><p>
+Macro to do g_strdup() equivalent in g_alloca() style.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Duplicated <i><tt>string</tt></i>. You may modify its items if the length is not changed.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string</tt></i> :</span></td><td> const gchar * string to duplicate.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN-CAPS"></a>CAPTIVE_ROUND_DOWN()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN(pointer,fragment)</pre><p>
+General pointer down-rounding macro. Already aligned pointer is left as is.
+</p><p>
+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS.
+</p><p>
+<i><tt>Returns</tt></i>: Down-rounded <i><tt>pointer</tt></i> to the integer multiple of <i><tt>fragment</tt></i>.
+Resulting pointer has the same type as <i><tt>pointer</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td> Arbitrary pointer type.
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td> Amount of 'sizeof(char)' to align <i><tt>pointer</tt></i> down to.
+This size will be typically a power of 2.
+Value less or equal to <tt>0</tt> is forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN64-CAPS"></a>CAPTIVE_ROUND_DOWN64()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN64(pointer,fragment)</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN-EXCEEDING-CAPS"></a>CAPTIVE_ROUND_DOWN_EXCEEDING()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN_EXCEEDING(pointer,fragment)</pre><p>
+Detects current non-aligned amount of data exceeding over integer multiple of <i><tt>fragment</tt></i>.
+It will return value <tt>0</tt> for an aligned pointer.
+</p><p>
+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS.
+</p><p>
+<i><tt>Returns</tt></i>: gsize typed number of bytes exceeding over integer multiple of <i><tt>fragment</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td> Arbitrary pointer type.
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td> Amount of 'sizeof(char)' to detect down-alignment amount of <i><tt>pointer</tt></i> for.
+This size will be typically a power of 2.
+Value less or equal to <tt>0</tt> is forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN-EXCEEDING64-CAPS"></a>CAPTIVE_ROUND_DOWN_EXCEEDING64()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN_EXCEEDING64(pointer,fragment)</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-UP-CAPS"></a>CAPTIVE_ROUND_UP()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_UP(pointer,fragment)</pre><p>
+General pointer up-rounding macro. Already aligned pointer is left as is.
+</p><p>
+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS.
+</p><p>
+<i><tt>Returns</tt></i>: Up-rounded <i><tt>pointer</tt></i> to the integer multiple of <i><tt>fragment</tt></i>.
+Resulting pointer has the same type as <i><tt>pointer</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td> Arbitrary pointer type.
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td> Amount of 'sizeof(char)' to align <i><tt>pointer</tt></i> up to.
+This size will be typically a power of 2.
+Value less or equal to <tt>0</tt> is forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-UP64-CAPS"></a>CAPTIVE_ROUND_UP64()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_UP64(pointer,fragment)</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-ldr.html"><b>&lt;&lt; ldr</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-mm.html"><b>mm &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-mm.html b/project/captive/apiref/captive-apiref-mm.html
new file mode 100644 (file)
index 0000000..88f3f0f
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>mm</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-macros.html" title="macros"><link rel="next" href="captive-apiref-ps-reactos.html" title="ps_reactos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-macros.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-ps-reactos.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-mm"></a><div class="titlepage"></div><div class="refnamediv"><h2>mm</h2><p>mm &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gint        <a href="captive-apiref-mm.html#captive-flProtect-to-mmap-prot">captive_flProtect_to_mmap_prot</a>  (ULONG flProtect);
+gboolean    <a href="captive-apiref-mm.html#captive-mmap-map-new">captive_mmap_map_new</a>            (gconstpointer addr,
+                                             size_t len,
+                                             int mmap_prot);
+gint        <a href="captive-apiref-mm.html#captive-mmap-map-get">captive_mmap_map_get</a>            (gconstpointer addr);
+gboolean    <a href="captive-apiref-mm.html#captive-mmap-map-set">captive_mmap_map_set</a>            (gconstpointer addr,
+                                             int mmap_prot);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-flProtect-to-mmap-prot"></a>captive_flProtect_to_mmap_prot ()</h3><pre class="programlisting">gint        captive_flProtect_to_mmap_prot  (ULONG flProtect);</pre><p>
+Map reactos flProtect to mprotect(2)-compatible &quot;prot&quot; argument.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>flProtect</tt></i> :</span></td><td> reactos compatible constant such as <tt>PAGE_READWRITE</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> mmap(2) compatible <i><tt>prot</tt></i> argument.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-mmap-map-new"></a>captive_mmap_map_new ()</h3><pre class="programlisting">gboolean    captive_mmap_map_new            (gconstpointer addr,
+                                             size_t len,
+                                             int mmap_prot);</pre><p>
+Initialize the protection map for the specified memory block.
+Any existing protections in the specified block are forbidden.
+</p><p>
+This function does not do any mprotect(2) style, it just stores
+the settings for the later <tt>OR</tt> operations by MmSetPageProtect().
+Caller is responsibel to set the same protections as the given <i><tt>mmap_prot</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>addr</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned address of memory block.
+<tt>NULL</tt> value is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>len</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned  length of memory block.
+Value <tt>0</tt> is permitted. Value <tt>-1</tt> is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>mmap_prot</tt></i> :</span></td><td> Protections for the memory block as specified by <i><tt>prot</tt></i> of mprotect(2).
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the protection storage was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-mmap-map-get"></a>captive_mmap_map_get ()</h3><pre class="programlisting">gint        captive_mmap_map_get            (gconstpointer addr);</pre><p>
+Query the protection settings at <i><tt>addr</tt></i> address.
+The given <i><tt>addr</tt></i> block of <tt>PAGE_SIZE</tt> must be already initialized
+by <a href="captive-apiref-mm.html#captive-mmap-map-new">captive_mmap_map_new</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>addr</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned address of memory block.
+<tt>NULL</tt> value is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> Protections of the page as specified by <i><tt>prot</tt></i> of mprotect(2)
+if successful. Value <tt>-1</tt> if failed.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-mmap-map-set"></a>captive_mmap_map_set ()</h3><pre class="programlisting">gboolean    captive_mmap_map_set            (gconstpointer addr,
+                                             int mmap_prot);</pre><p>
+Set the protection settings at <i><tt>addr</tt></i> address.
+The given <i><tt>addr</tt></i> block of <tt>PAGE_SIZE</tt> must be already initialized
+by <a href="captive-apiref-mm.html#captive-mmap-map-new">captive_mmap_map_new</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>addr</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned address of memory block.
+<tt>NULL</tt> value is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>mmap_prot</tt></i> :</span></td><td> Protections for the memory block as specified by <i><tt>prot</tt></i> of mprotect(2).
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the protections were successfuly set.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-macros.html"><b>&lt;&lt; macros</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-ps-reactos.html"><b>ps_reactos &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-ps-reactos.html b/project/captive/apiref/captive-apiref-ps-reactos.html
new file mode 100644 (file)
index 0000000..22555cb
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ps_reactos</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-mm.html" title="mm"><link rel="next" href="captive-apiref-unicode.html" title="unicode"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-mm.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-unicode.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-ps-reactos"></a><div class="titlepage"></div><div class="refnamediv"><h2>ps_reactos</h2><p>ps_reactos &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+typedef     <a href="captive-apiref-ps-reactos.html#captive-KPCR">captive_KPCR</a>;
+typedef     <a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a>;
+<a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a> <a href="captive-apiref-ps-reactos.html#captive-KeGetCurrentKPCR">captive_KeGetCurrentKPCR</a>      (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-KPCR"></a>captive_KPCR</h3><pre class="programlisting">typedef struct {
+       struct
+                       /* newline to pass gtkdoc-scan */
+                       _KTHREAD *CurrentThread;
+       } captive_KPCR;
+</pre><p>
+PCR (Processor Control Region) structure type.
+Returned by <a href="captive-apiref-ps-reactos.html#captive-KeGetCurrentKPCR">captive_KeGetCurrentKPCR</a>().
+</p><p>
+This structure IS NOT binary compatible with reactos!</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-PKPCR"></a>captive_PKPCR</h3><pre class="programlisting">typedef captive_KPCR *captive_PKPCR;
+</pre><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-KeGetCurrentKPCR"></a>captive_KeGetCurrentKPCR ()</h3><pre class="programlisting"><a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a> captive_KeGetCurrentKPCR      (void);</pre><p>
+Returns the PCR (Processor Control Region) structure for the
+current CPU.
+Currently libcaptive doesn't use multithreading
+and thus this function returns a constant pointer to one static structure.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a> type pointer to valid <a href="captive-apiref-ps-reactos.html#captive-KPCR">captive_KPCR</a>.
+This structure IS NOT binary compatible with reactos - you SHOULD NOT
+export this symbol for binary W32 modules. Anyone using this function
+is very low-level based and you would probably find many other
+compatibility problems afterwards - replace of such function is recommended.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-mm.html"><b>&lt;&lt; mm</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-unicode.html"><b>unicode &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-rtl-file.html b/project/captive/apiref/captive-apiref-rtl-file.html
new file mode 100644 (file)
index 0000000..c068ca9
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>rtl-file</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-signal.html" title="signal"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-signal.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th></tr></table><div class="refentry" lang="en"><a name="captive-apiref-rtl-file"></a><div class="titlepage"></div><div class="refnamediv"><h2>rtl-file</h2><p>rtl-file &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gpointer    <a href="captive-apiref-rtl-file.html#captive-rtl-file-mmap">captive_rtl_file_mmap</a>           (size_t *lenp,
+                                             const gchar *path,
+                                             int open_flags,
+                                             int mmap_prot,
+                                             int mmap_flags);
+void        <a href="captive-apiref-rtl-file.html#captive-rtl-file-munmap">captive_rtl_file_munmap</a>         (gpointer base);
+gpointer    <a href="captive-apiref-rtl-file.html#captive-rtl-file-read">captive_rtl_file_read</a>           (gint fd,
+                                             gsize *bufsizep);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-rtl-file-mmap"></a>captive_rtl_file_mmap ()</h3><pre class="programlisting">gpointer    captive_rtl_file_mmap           (size_t *lenp,
+                                             const gchar *path,
+                                             int open_flags,
+                                             int mmap_prot,
+                                             int mmap_flags);</pre><p>
+mmap(2) the whole file into memory.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>lenp</tt></i> :</span></td><td> returns the file length if successful. <tt>NULL</tt> pointer permitted.
+</td></tr><tr><td><span class="term"><i><tt>path</tt></i> :</span></td><td> File pathname to open(2).
+</td></tr><tr><td><span class="term"><i><tt>open_flags</tt></i> :</span></td><td> open(2) parameter flags such as <tt>O_RDONLY</tt>.
+</td></tr><tr><td><span class="term"><i><tt>mmap_prot</tt></i> :</span></td><td> mmap(2) parameter prot such as <tt>PROT_READ</tt>.
+</td></tr><tr><td><span class="term"><i><tt>mmap_flags</tt></i> :</span></td><td> mmap(2) parameter flags such as <tt>MAP_SHARED</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> address base with mmap(2)ed file (and <i><tt>lenp</tt></i> filled) or NULL if error.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-rtl-file-munmap"></a>captive_rtl_file_munmap ()</h3><pre class="programlisting">void        captive_rtl_file_munmap         (gpointer base);</pre><p>
+munmap(2) the whole file and destroy all its resources.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>base</tt></i> :</span></td><td> file base address returned by <a href="captive-apiref-rtl-file.html#captive-rtl-file-mmap">captive_rtl_file_mmap</a>(). <tt>NULL</tt> pointer forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-rtl-file-read"></a>captive_rtl_file_read ()</h3><pre class="programlisting">gpointer    captive_rtl_file_read           (gint fd,
+                                             gsize *bufsizep);</pre><p>
+Reads the whole file into memory.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>fd</tt></i> :</span></td><td> file-descriptor to read data from.
+</td></tr><tr><td><span class="term"><i><tt>bufsizep</tt></i> :</span></td><td> Returns the size of resulting data.
+<tt>NULL</tt> pointer is permitted.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> address base of the memory being filled with file contents.
+Free the area by g_free() if no longer used.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-signal.html"><b>&lt;&lt; signal</b></a></td><td align="right"></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-signal.html b/project/captive/apiref/captive-apiref-signal.html
new file mode 100644 (file)
index 0000000..ccc195d
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>signal</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-calltype-reactos.html" title="calltype_reactos"><link rel="next" href="captive-apiref-rtl-file.html" title="rtl-file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-calltype-reactos.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-rtl-file.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-signal"></a><div class="titlepage"></div><div class="refnamediv"><h2>signal</h2><p>signal &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gboolean    <a href="captive-apiref-signal.html#captive-signal-init">captive_signal_init</a>             (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-signal-init"></a>captive_signal_init ()</h3><pre class="programlisting">gboolean    captive_signal_init             (void);</pre><p>
+Initialize UNIX signal handling to be able to emulate foreign W32
+instructions. These instructions must be located inside address
+space of foreign W32 binary code which is identified by successful
+call to <a href="captive-apiref-mm.html#captive-mmap-map-get">captive_mmap_map_get</a>() returning PROT_EXEC bit set.
+This bit should be set from MmAllocateSection() called from
+ntoskrnl/ldr/loader.c/LdrPEProcessModule().
+</p><p>
+Currently emulated set is the access to <tt>fs</tt> register offset <tt>0</tt>
+where the exception stack top pointer is located.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if successful.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-calltype-reactos.html"><b>&lt;&lt; calltype_reactos</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-rtl-file.html"><b>rtl-file &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-storage.html b/project/captive/apiref/captive-apiref-storage.html
new file mode 100644 (file)
index 0000000..478140c
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>storage</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-unicode-reactos.html" title="unicode_reactos"><link rel="next" href="captive-apiref-ldr-exports.html" title="ldr_exports"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-unicode-reactos.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-ldr-exports.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-storage"></a><div class="titlepage"></div><div class="refnamediv"><h2>storage</h2><p>storage &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+extern      GIOChannel *<a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a>;
+extern      guint64 <a href="captive-apiref-storage.html#captive-image-size">captive_image_size</a>;
+guint64     <a href="captive-apiref-storage.html#captive-giochannel-size">captive_giochannel_size</a>         (GIOChannel *channel);
+gboolean    <a href="captive-apiref-storage.html#captive-cdrom-init">captive_cdrom_init</a>              (void);
+gboolean    <a href="captive-apiref-storage.html#captive-disk-init">captive_disk_init</a>               (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-image-iochannel"></a>captive_image_iochannel</h3><pre class="programlisting">extern GIOChannel *captive_image_iochannel;
+</pre><p>
+The readl GIOChannel to be used for accessing the disk image.
+It may be either directly captive_options-&gt;image_iochannel
+or the wrapper by giochannel-blind.</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-image-size"></a>captive_image_size</h3><pre class="programlisting">extern guint64 captive_image_size;
+</pre><p>
+Size of <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a>. Empty files are rejected and therefore
+this value is always &gt;0 after successful <a href="captive-apiref-init.html#captive-init">captive_init</a>().
+Value is detected by captive_giochannel_size(captive_image_iochannel).</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-giochannel-size"></a>captive_giochannel_size ()</h3><pre class="programlisting">guint64     captive_giochannel_size         (GIOChannel *channel);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>channel</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-cdrom-init"></a>captive_cdrom_init ()</h3><pre class="programlisting">gboolean    captive_cdrom_init              (void);</pre><p>
+Creates system device &quot;\Device\CdRom<tt>d</tt>&quot; providing readonly access
+to the given <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a> as emulation of CD-ROM driver.
+</p><p>
+libcaptive currently supports just one drive and thus &quot;\Device\CdRom0&quot;
+is always created. It is forbidden to call this function twice.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the initialization was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-disk-init"></a>captive_disk_init ()</h3><pre class="programlisting">gboolean    captive_disk_init               (void);</pre><p>
+Creates system device &quot;\Device\CaptiveHarddisk<tt>d</tt>&quot; providing readwrite access
+to the given <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a> as emulation of harddisk driver.
+reactos initializes &quot;\Device\Harddisk<tt>d</tt>\Partition0&quot; as the whole disk
+and each partition it founds by IoReadPartitionTable() it will create
+as &quot;\Device\Harddisk<tt>d</tt>\Partition1&quot;, &quot;\Device\Harddisk<tt>d</tt>\Partition2&quot; etc.
+</p><p>
+libcaptive does not (yet?) support any partitions and it will always create
+just the disk device for the whole given <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a>.
+As this behaviour is a bit specific we rather create some non-standard name
+of the device; anyway I have seen some &quot;\Device\Harddisk<tt>dVolume</tt><tt>d</tt>&quot; on W32
+system.
+</p><p>
+captive currently supports just one drive and thus &quot;\Device\CaptiveHarddisk0&quot;
+is always created. It is forbidden to call this function twice.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the initialization was successful.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-unicode-reactos.html"><b>&lt;&lt; unicode_reactos</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-ldr-exports.html"><b>ldr_exports &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-unicode-reactos.html b/project/captive/apiref/captive-apiref-unicode-reactos.html
new file mode 100644 (file)
index 0000000..11cf220
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>unicode_reactos</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-unicode.html" title="unicode"><link rel="next" href="captive-apiref-storage.html" title="storage"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-unicode.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-storage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-unicode-reactos"></a><div class="titlepage"></div><div class="refnamediv"><h2>unicode_reactos</h2><p>unicode_reactos &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+typedef     <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a>;
+const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a>* <a href="captive-apiref-unicode-reactos.html#captive-ucs4-to-ucs2-const">captive_ucs4_to_ucs2_const</a>
+                                            (const gunichar *string_ucs4);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-ucs2"></a>captive_ucs2</h3><pre class="programlisting">typedef guint16 captive_ucs2;
+</pre><p>
+This type is separated from Gnome gunichar2 as <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> MUST be used for UCS-2
+encoded strings in the opposite of gunichar2 beging used for UTF-16 encoded strings.</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs4-to-ucs2-const"></a>captive_ucs4_to_ucs2_const ()</h3><pre class="programlisting">const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a>* captive_ucs4_to_ucs2_const
+                                            (const gunichar *string_ucs4);</pre><p>
+Constant string conversion from 32-bit wchar_t to 16-bit wchar_t.
+You may not modify the result in any way.
+</p><p>
+It is guaranteed to get two different string addresses for two different
+input addresses even if the input strings content is the same.
+Otherwise we would behave as GCC option <tt>-fmerge</tt>-constants which
+results in <tt>C</tt> non-conforming behaviour.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs4</tt></i> :</span></td><td> const gunichar * type of persistent string to convert.
+This string MUST remain readable with the same content forever.
+This string MUST be convertible to UCS-2 string.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> * converted string <i><tt>string_ucs4</tt></i>.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-unicode.html"><b>&lt;&lt; unicode</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-storage.html"><b>storage &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-unicode.html b/project/captive/apiref/captive-apiref-unicode.html
new file mode 100644 (file)
index 0000000..d4ec3f8
--- /dev/null
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>unicode</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-ps-reactos.html" title="ps_reactos"><link rel="next" href="captive-apiref-unicode-reactos.html" title="unicode_reactos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-ps-reactos.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-unicode-reactos.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-unicode"></a><div class="titlepage"></div><div class="refnamediv"><h2>unicode</h2><p>unicode &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+#define     <a href="captive-apiref-unicode.html#captive-UnicodeString-to-utf8-alloca">captive_UnicodeString_to_utf8_alloca</a>(string_UnicodeString)
+#define     <a href="captive-apiref-unicode.html#captive-utf8-to-UnicodeString-alloca">captive_utf8_to_UnicodeString_alloca</a>(string_utf8)
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-ucs4">captive_validate_ucs4</a>           (const gunichar *string_ucs4);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-ucs2">captive_validate_ucs2</a>           (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-ucs2-fixlen">captive_validate_ucs2_fixlen</a>    (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2,
+                                             glong string_ucs2_fixlen);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-utf8">captive_validate_utf8</a>           (const gchar *string_utf8);
+glong       <a href="captive-apiref-unicode.html#captive-ucs2-strlen">captive_ucs2_strlen</a>             (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-UnicodeString">captive_validate_UnicodeString</a>  (const UNICODE_STRING *string_UnicodeString);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-UnicodeString-noterm">captive_validate_UnicodeString_noterm</a>
+                                            (const UNICODE_STRING *string_UnicodeString_noterm);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-AnsiString">captive_validate_AnsiString</a>     (const ANSI_STRING *string_AnsiString);
+gchar*      <a href="captive-apiref-unicode.html#captive-UnicodeString-to-utf8-malloc">captive_UnicodeString_to_utf8_malloc</a>
+                                            (const UNICODE_STRING *string_UnicodeString);
+PUNICODE_STRING <a href="captive-apiref-unicode.html#captive-utf8-to-UnicodeString-malloc">captive_utf8_to_UnicodeString_malloc</a>
+                                            (const gchar *string_utf8);
+const gunichar2* <a href="captive-apiref-unicode.html#captive-ucs4-to-utf16-const">captive_ucs4_to_utf16_const</a>
+                                            (const gunichar *string_ucs4);
+gboolean    <a href="captive-apiref-unicode.html#captive-ucs2-compare">captive_ucs2_compare</a>            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-UnicodeString-compare">captive_UnicodeString_compare</a>   (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);
+gboolean    <a href="captive-apiref-unicode.html#captive-ucs2-compare-insensitive">captive_ucs2_compare_insensitive</a>
+                                            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-UnicodeString-compare-insensitive">captive_UnicodeString_compare_insensitive</a>
+                                            (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);
+void        <a href="captive-apiref-unicode.html#captive-FsRtlLegalAnsiCharacterArray-init">captive_FsRtlLegalAnsiCharacterArray_init</a>
+                                            (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-to-utf8-alloca"></a>captive_UnicodeString_to_utf8_alloca()</h3><pre class="programlisting">#define     captive_UnicodeString_to_utf8_alloca(string_UnicodeString)</pre><p>
+alloca(3)-based conversion from PUNICODE_STRING to plain utf8 string.
+</p><p>
+<i><tt>Returns</tt></i>: const gchar * alloca(3)ed converted string <i><tt>string_UnicodeString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString</tt></i> :</span></td><td> PUNICODE_STRING type of string to convert.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-utf8-to-UnicodeString-alloca"></a>captive_utf8_to_UnicodeString_alloca()</h3><pre class="programlisting">#define     captive_utf8_to_UnicodeString_alloca(string_utf8)</pre><p>
+alloca(3)-based conversion from plain utf8 string to PUNICODE_STRING.
+</p><p>
+<i><tt>Returns</tt></i>: PUNICODE_STRING alloca(3)ed converted string <i><tt>string_utf8</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_utf8</tt></i> :</span></td><td> const gchar * string in utf8 to convert.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-ucs4"></a>captive_validate_ucs4 ()</h3><pre class="programlisting">gboolean    captive_validate_ucs4           (const gunichar *string_ucs4);</pre><p>
+Checks the validity of all 32-bit unicharacters of 0-terminated string.
+It is required to have characters complying to g_unichar_validate().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs4</tt></i> :</span></td><td> const gunichar * type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-ucs2"></a>captive_validate_ucs2 ()</h3><pre class="programlisting">gboolean    captive_validate_ucs2           (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);</pre><p>
+Checks the validity of all 16-bit unicharacters of 0-terminated string.
+It is required to have characters complying to g_unichar_validate().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs2</tt></i> :</span></td><td> const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> * type string to validate.
+Invalid string input is forbidden.
+UTF-16 encoded strings are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-ucs2-fixlen"></a>captive_validate_ucs2_fixlen ()</h3><pre class="programlisting">gboolean    captive_validate_ucs2_fixlen    (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2,
+                                             glong string_ucs2_fixlen);</pre><p>
+Checks the validity of first <i><tt>string_ucs2_fixlen</tt></i> 16-bit unicharacters of <i><tt>string_ucs2</tt></i>.
+It is required to have characters complying to g_unichar_validate().
+String length must be equal or larger than <i><tt>string_ucs2_fixlen</tt></i>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs2</tt></i> :</span></td><td> const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> * type string to validate.
+Invalid string input is forbidden.
+UTF-16 encoded strings are forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_ucs2_fixlen</tt></i> :</span></td><td> Number of characters from <i><tt>string_ucs2</tt></i> to check.
+captive_ucs2_strlen(<i><tt>string_ucs2</tt></i>)&gt;=<i><tt>string_ucs2_fixlen</tt></i> is required.
+Negative value is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-utf8"></a>captive_validate_utf8 ()</h3><pre class="programlisting">gboolean    captive_validate_utf8           (const gchar *string_utf8);</pre><p>
+Checks the validity of all utf8 of 0-terminated string.
+It is required to have characters complying to g_utf8_validate().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_utf8</tt></i> :</span></td><td> const gchar * utf8 type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs2-strlen"></a>captive_ucs2_strlen ()</h3><pre class="programlisting">glong       captive_ucs2_strlen             (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);</pre><p>
+Counts the number of characters (=2bytes) in <i><tt>strings_ucs2</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs2</tt></i> :</span></td><td> String of type const gunichar2 * in pure UCS-2
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <i><tt>string_ucs2</tt></i> length in UCS-2 characters.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-UnicodeString"></a>captive_validate_UnicodeString ()</h3><pre class="programlisting">gboolean    captive_validate_UnicodeString  (const UNICODE_STRING *string_UnicodeString);</pre><p>
+Checks the internal consistency of the given <i><tt>string_UnicodeString</tt></i>.
+It is required to have characters complying to g_unichar_validate().
+<i><tt>string_UnicodeString</tt></i> MUST be zero-terminated.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString</tt></i> :</span></td><td> PUNICODE_STRING type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-UnicodeString-noterm"></a>captive_validate_UnicodeString_noterm ()</h3><pre class="programlisting">gboolean    captive_validate_UnicodeString_noterm
+                                            (const UNICODE_STRING *string_UnicodeString_noterm);</pre><p>
+Checks the internal consistency of the given <i><tt>string_UnicodeString</tt></i>.
+It is required to have characters complying to g_unichar_validate().
+<i><tt>string_UnicodeString_noterm</tt></i> does not neet to be zero-terminated.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString_noterm</tt></i> :</span></td><td> PUNICODE_STRING type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-AnsiString"></a>captive_validate_AnsiString ()</h3><pre class="programlisting">gboolean    captive_validate_AnsiString     (const ANSI_STRING *string_AnsiString);</pre><p>
+Checks the internal consistency of the given <i><tt>string_AnsiString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_AnsiString</tt></i> :</span></td><td> PANSI_STRING type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-to-utf8-malloc"></a>captive_UnicodeString_to_utf8_malloc ()</h3><pre class="programlisting">gchar*      captive_UnicodeString_to_utf8_malloc
+                                            (const UNICODE_STRING *string_UnicodeString);</pre><p>
+g_malloc()-based conversion from PUNICODE_STRING to plain utf8 string.
+You must free the result with g_free() function.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString</tt></i> :</span></td><td> PUNICODE_STRING type of string to convert.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> const gchar * g_malloc()ed converted string <i><tt>string_UnicodeString</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-utf8-to-UnicodeString-malloc"></a>captive_utf8_to_UnicodeString_malloc ()</h3><pre class="programlisting">PUNICODE_STRING captive_utf8_to_UnicodeString_malloc
+                                            (const gchar *string_utf8);</pre><p>
+g_malloc()-based conversion from plain utf8 string to PUNICODE_STRING.
+You must free the result with g_free() function.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_utf8</tt></i> :</span></td><td> const gchar * string in utf8 to convert.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> PUNICODE_STRING g_malloc()ed converted string <i><tt>string_utf8</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs4-to-utf16-const"></a>captive_ucs4_to_utf16_const ()</h3><pre class="programlisting">const gunichar2* captive_ucs4_to_utf16_const
+                                            (const gunichar *string_ucs4);</pre><p>
+Constant string conversion from 32-bit wchar_t to 16-bit (possible pairs of) UTF-16.
+You may not modify the result in any way.
+</p><p>
+It is guaranteed to get two different string addresses for two different
+input addresses even if the input strings content is the same.
+Otherwise we would behave as GCC option <tt>-fmerge</tt>-constants which
+results in <tt>C</tt> non-conforming behaviour.
+</p><p>
+FIXME: UTF-16 encoding IS NOT IMPLEMENTED.
+</p><p>
+See also <a href="captive-apiref-unicode-reactos.html#captive-ucs4-to-ucs2-const">captive_ucs4_to_ucs2_const</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs4</tt></i> :</span></td><td> const gunichar * type of persistent string to convert.
+This string MUST remain readable with the same content forever.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> const gunichar2 * converted string <i><tt>string_ucs4</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs2-compare"></a>captive_ucs2_compare ()</h3><pre class="programlisting">gboolean    captive_ucs2_compare            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);</pre><p>
+Compares case-sensitively <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_ucs2</tt></i> :</span></td><td> First string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_ucs2</tt></i> :</span></td><td> Second string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-compare"></a>captive_UnicodeString_compare ()</h3><pre class="programlisting">gboolean    captive_UnicodeString_compare   (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);</pre><p>
+Compares case-sensitively <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_UnicodeString</tt></i> :</span></td><td> First string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_UnicodeString</tt></i> :</span></td><td> Second string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs2-compare-insensitive"></a>captive_ucs2_compare_insensitive ()</h3><pre class="programlisting">gboolean    captive_ucs2_compare_insensitive
+                                            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);</pre><p>
+Compares case-insensitively <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_ucs2</tt></i> :</span></td><td> First string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_ucs2</tt></i> :</span></td><td> Second string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-compare-insensitive"></a>captive_UnicodeString_compare_insensitive ()</h3><pre class="programlisting">gboolean    captive_UnicodeString_compare_insensitive
+                                            (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);</pre><p>
+Compares case-insensitively <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_UnicodeString</tt></i> :</span></td><td> First string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_UnicodeString</tt></i> :</span></td><td> Second string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-FsRtlLegalAnsiCharacterArray-init"></a>captive_FsRtlLegalAnsiCharacterArray_init ()</h3><pre class="programlisting">void        captive_FsRtlLegalAnsiCharacterArray_init
+                                            (void);</pre><p>
+Initialize FsRtlLegalAnsiCharacterArray character classes
+by appropriate FSRTL_FAT_LEGAL etc. flags.</p><p>
+
+</p></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-ps-reactos.html"><b>&lt;&lt; ps_reactos</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-unicode-reactos.html"><b>unicode_reactos &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/ch01.html b/project/captive/apiref/ch01.html
new file mode 100644 (file)
index 0000000..f3141cc
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Operation Captive</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="index.html" title="Operation Captive Reference Manual"><link rel="previous" href="index.html" title="Operation Captive Reference Manual"><link rel="next" href="captive-apiref-init.html" title="init"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-init.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="id2872113"></a>Operation Captive</h2></div></div><div class="toc">
+
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><a href="captive-apiref-init.html">init</a> - Init and cleanup code of libcaptive to be called by client application</dt>
+<dt><a href="captive-apiref-ldr.html">ldr</a> - ReactOS loader emulation of libcaptive </dt>
+<dt><a href="captive-apiref-macros.html">macros</a> - General macros and typedefs used through Captive</dt>
+<dt><a href="captive-apiref-mm.html">mm</a> - ReactOS Memory Manager emulation of libcaptive</dt>
+<dt><a href="captive-apiref-ps-reactos.html">ps_reactos</a> - Processor support used for ReactOS files</dt>
+<dt><a href="captive-apiref-unicode.html">unicode</a> - Unicode add-ons to ReactOS ntoskrnl/rtl/unicode.c</dt>
+<dt><a href="captive-apiref-unicode-reactos.html">unicode_reactos</a> - Unicode support used for ReactOS files</dt>
+<dt><a href="captive-apiref-storage.html">storage</a> - Storage drivers for ReactOS</dt>
+<dt><a href="captive-apiref-ldr-exports.html">ldr_exports</a> - ReactOS loader to be used from ke/exports.c</dt>
+<dt><a href="captive-apiref-calltype-reactos.html">calltype_reactos</a> - Function call types definitions for ReactOS files</dt>
+<dt><a href="captive-apiref-signal.html">signal</a> - UNIX signal handling for processor emulation for support of ntoskrnl</dt>
+<dt><a href="captive-apiref-rtl-file.html">rtl-file</a> - Internal file handling utilities</dt>
+</dl>
+
+</div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="index.html"><b>&lt;&lt; Operation Captive Reference Manual</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-init.html"><b>init &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/home.png b/project/captive/apiref/home.png
new file mode 100644 (file)
index 0000000..1700361
Binary files /dev/null and b/project/captive/apiref/home.png differ
diff --git a/project/captive/apiref/index.html b/project/captive/apiref/index.html
new file mode 100644 (file)
index 0000000..780e376
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Operation Captive Reference Manual</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="next" href="ch01.html" title="Operation Captive"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="en"><div class="titlepage"><div><table class="navigation" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Operation Captive Reference Manual</p></th></tr></table></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="ch01.html">Operation Captive</a></dt></dl></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"></td><td align="right"><a accesskey="n" href="ch01.html"><b>Operation Captive &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/left.png b/project/captive/apiref/left.png
new file mode 100644 (file)
index 0000000..2d05b3d
Binary files /dev/null and b/project/captive/apiref/left.png differ
diff --git a/project/captive/apiref/right.png b/project/captive/apiref/right.png
new file mode 100644 (file)
index 0000000..92832e3
Binary files /dev/null and b/project/captive/apiref/right.png differ
diff --git a/project/captive/apiref/up.png b/project/captive/apiref/up.png
new file mode 100644 (file)
index 0000000..85b3e2a
Binary files /dev/null and b/project/captive/apiref/up.png differ
diff --git a/project/captive/captive-install-acquire-icon.png b/project/captive/captive-install-acquire-icon.png
new file mode 100644 (file)
index 0000000..c1c9c26
Binary files /dev/null and b/project/captive/captive-install-acquire-icon.png differ
diff --git a/project/captive/captive-install-acquire-small.png b/project/captive/captive-install-acquire-small.png
new file mode 100644 (file)
index 0000000..81fc36e
Binary files /dev/null and b/project/captive/captive-install-acquire-small.png differ
diff --git a/project/captive/captive-install-acquire.png b/project/captive/captive-install-acquire.png
new file mode 100644 (file)
index 0000000..20d10d4
Binary files /dev/null and b/project/captive/captive-install-acquire.png differ
diff --git a/project/captive/dist/captive-1.0-0.i386.rpm b/project/captive/dist/captive-1.0-0.i386.rpm
new file mode 100644 (file)
index 0000000..7fed66b
Binary files /dev/null and b/project/captive/dist/captive-1.0-0.i386.rpm differ
diff --git a/project/captive/dist/captive-1.0-0.src.rpm b/project/captive/dist/captive-1.0-0.src.rpm
new file mode 100644 (file)
index 0000000..a8f4f88
Binary files /dev/null and b/project/captive/dist/captive-1.0-0.src.rpm differ
diff --git a/project/captive/dist/captive-1.0-0mdk91.i586.rpm b/project/captive/dist/captive-1.0-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..efed032
Binary files /dev/null and b/project/captive/dist/captive-1.0-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/captive-1.0-0rh8.i386.rpm b/project/captive/dist/captive-1.0-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..ec57d77
Binary files /dev/null and b/project/captive/dist/captive-1.0-0rh8.i386.rpm differ
diff --git a/project/captive/dist/captive-1.0.tar.gz b/project/captive/dist/captive-1.0.tar.gz
new file mode 100644 (file)
index 0000000..418e6d6
Binary files /dev/null and b/project/captive/dist/captive-1.0.tar.gz differ
diff --git a/project/captive/dist/captive-debuginfo-1.0-0.i386.rpm b/project/captive/dist/captive-debuginfo-1.0-0.i386.rpm
new file mode 100644 (file)
index 0000000..45d820f
Binary files /dev/null and b/project/captive/dist/captive-debuginfo-1.0-0.i386.rpm differ
diff --git a/project/captive/dist/captive-install-1.0-0.i386.rpm b/project/captive/dist/captive-install-1.0-0.i386.rpm
new file mode 100644 (file)
index 0000000..622f45e
Binary files /dev/null and b/project/captive/dist/captive-install-1.0-0.i386.rpm differ
diff --git a/project/captive/dist/captive-install-1.0-0mdk91.i586.rpm b/project/captive/dist/captive-install-1.0-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..3487310
Binary files /dev/null and b/project/captive/dist/captive-install-1.0-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/captive-install-1.0-0rh8.i386.rpm b/project/captive/dist/captive-install-1.0-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..1199eac
Binary files /dev/null and b/project/captive/dist/captive-install-1.0-0rh8.i386.rpm differ
diff --git a/project/captive/dist/captive-install_1.0_i386.deb b/project/captive/dist/captive-install_1.0_i386.deb
new file mode 100644 (file)
index 0000000..3642beb
Binary files /dev/null and b/project/captive/dist/captive-install_1.0_i386.deb differ
diff --git a/project/captive/dist/captive-lufs-1.0-0.i386.rpm b/project/captive/dist/captive-lufs-1.0-0.i386.rpm
new file mode 100644 (file)
index 0000000..f7436df
Binary files /dev/null and b/project/captive/dist/captive-lufs-1.0-0.i386.rpm differ
diff --git a/project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm b/project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..e64db7c
Binary files /dev/null and b/project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm b/project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..390bafe
Binary files /dev/null and b/project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm differ
diff --git a/project/captive/dist/captive-lufs_1.0_i386.deb b/project/captive/dist/captive-lufs_1.0_i386.deb
new file mode 100644 (file)
index 0000000..5aa7db2
Binary files /dev/null and b/project/captive/dist/captive-lufs_1.0_i386.deb differ
diff --git a/project/captive/dist/captive_1.0.dsc b/project/captive/dist/captive_1.0.dsc
new file mode 100644 (file)
index 0000000..b3e8d84
--- /dev/null
@@ -0,0 +1,33 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: captive
+Version: 1.0
+Binary: captive-lufs, captive, captive-install
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0),
+ liborbit2-dev,
+ libssl-dev,
+ libgnomevfs2-dev,
+ libxml2-dev (>= 2.4.29),
+ libpopt-dev,
+ libglib2.0-dev,
+ libreadline4-dev,
+ libbonobo2-dev,
+ lufs,
+ ntfsprogs-dev,
+ libgnomeui-dev,
+ gcc (>= 3.0) | gcc-3.0
+Files: 
+ 19f888db80898bc5f0da35290d56ac82 2391571 captive_1.0.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/k4JbzD78uUT8djIRAgntAJ9VN4fCkGcmqspV41rY/bn2YV/+EQCfRqxU
+hoNvaEIi5ynH5cmypsMZwq4=
+=NxM7
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/captive_1.0.tar.gz b/project/captive/dist/captive_1.0.tar.gz
new file mode 100644 (file)
index 0000000..e0e0936
Binary files /dev/null and b/project/captive/dist/captive_1.0.tar.gz differ
diff --git a/project/captive/dist/captive_1.0_i386.changes b/project/captive/dist/captive_1.0_i386.changes
new file mode 100644 (file)
index 0000000..4b774b7
--- /dev/null
@@ -0,0 +1,35 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: captive
+Binary: captive-install captive captive-lufs
+Architecture: source i386
+Version: 1.0
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ captive    - NTFS filesystem using Microsoft Windows drivers
+ captive-install - Instant installer for Microsoft Windows platform filesystem acces
+ captive-lufs - LUFS module for Microsoft Windows platform filesystem access.
+Changes: 
+ captive (1.0) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ d4108fa374367afb408f06e3f51b21a4 743 contrib/base optional captive_1.0.dsc
+ 19f888db80898bc5f0da35290d56ac82 2391571 contrib/base optional captive_1.0.tar.gz
+ f5223c4aa0d378138ed1372652507fe8 345630 contrib/base optional captive_1.0_i386.deb
+ 4ba22e40f71761a8a371f8a15d046faa 21422 contrib/base optional captive-lufs_1.0_i386.deb
+ d35acc96ac941032925553e1ce4cea3f 55810 contrib/base optional captive-install_1.0_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/k4JgzD78uUT8djIRArZuAJ0cWSJDPyvAI67VTWxksEoo6GRx+gCfY3gc
+biGzf1ZgYYSuvi/IG7CEwzY=
+=pNNG
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/captive_1.0_i386.deb b/project/captive/dist/captive_1.0_i386.deb
new file mode 100644 (file)
index 0000000..76b5415
Binary files /dev/null and b/project/captive/dist/captive_1.0_i386.deb differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm
new file mode 100644 (file)
index 0000000..bad3365
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm
new file mode 100644 (file)
index 0000000..b53e440
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..180a873
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..995f6e0
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz
new file mode 100644 (file)
index 0000000..848a25f
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm b/project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm
new file mode 100644 (file)
index 0000000..2ed799b
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc
new file mode 100644 (file)
index 0000000..404c5fd
--- /dev/null
@@ -0,0 +1,21 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: gnome-vfs-httpcaptive
+Version: 2.3.8captive2
+Binary: gnome-vfs-httpcaptive
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0), libgnomevfs2-dev, libglib2.0-dev
+Files: 
+ 28b11b8bad6afd34358c7164cf115b26 548681 gnome-vfs-httpcaptive_2.3.8captive2.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/cQF0zD78uUT8djIRAg0BAJ41drC99NHu0WeZ1jbrOeqBVDskagCgjiBh
+LGCDaoxg6ntOx5MKZezbgbA=
+=R87D
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz
new file mode 100644 (file)
index 0000000..f283893
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes
new file mode 100644 (file)
index 0000000..5f696a5
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: gnome-vfs-httpcaptive
+Binary: gnome-vfs-httpcaptive
+Architecture: source i386
+Version: 2.3.8captive2
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ gnome-vfs-httpcaptive - Improved http handler for GNOME virtual file-system libraries
+Changes: 
+ gnome-vfs-httpcaptive (2.3.8captive2) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ 17cb718d117e7d9379f82f0bd6921f5e 601 main/base optional gnome-vfs-httpcaptive_2.3.8captive2.dsc
+ 28b11b8bad6afd34358c7164cf115b26 548681 main/base optional gnome-vfs-httpcaptive_2.3.8captive2.tar.gz
+ ced34037f2394693e125d93569fa3c05 29014 main/base optional gnome-vfs-httpcaptive_2.3.8captive2_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/cQF5zD78uUT8djIRAi+lAJ4kX3A7BRernUTWY3ULbjyNhjjSrQCdFBjH
+BMDmPvZSKiguLfa47mNMDbM=
+=cNwB
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb
new file mode 100644 (file)
index 0000000..b2f938b
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb differ
diff --git a/project/captive/dist/lufs-0.9.6-1captive6.i386.rpm b/project/captive/dist/lufs-0.9.6-1captive6.i386.rpm
new file mode 100644 (file)
index 0000000..de68f7f
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive6.i386.rpm differ
diff --git a/project/captive/dist/lufs-0.9.6-1captive6.src.rpm b/project/captive/dist/lufs-0.9.6-1captive6.src.rpm
new file mode 100644 (file)
index 0000000..9f90bb7
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive6.src.rpm differ
diff --git a/project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm b/project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..6d97730
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm differ
diff --git a/project/captive/dist/lufs-0.9.6captive6.tar.gz b/project/captive/dist/lufs-0.9.6captive6.tar.gz
new file mode 100644 (file)
index 0000000..3ba914c
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6captive6.tar.gz differ
diff --git a/project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm b/project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm
new file mode 100644 (file)
index 0000000..74f3c28
Binary files /dev/null and b/project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm differ
diff --git a/project/captive/dist/lufs_0.9.6captive6.dsc b/project/captive/dist/lufs_0.9.6captive6.dsc
new file mode 100644 (file)
index 0000000..e65a494
--- /dev/null
@@ -0,0 +1,28 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: lufs
+Version: 0.9.6captive6
+Binary: lufs
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: any
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0),
+ cvs2cl,
+ make,
+ autoconf,
+ libtool,
+ automake (>= 1.6) | automake1.6 | automake1.7,
+ gcc,
+ perl
+Files: 
+ 106f7117b0ea67ce85f0528ca0cc619b 214704 lufs_0.9.6captive6.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/kC5izD78uUT8djIRArCHAJ9G8lWAQeHVwvwCM73d0A0XHI4wNACeLPMb
+yByHpJ/ii85kBgrQ8/2BEiM=
+=uLrf
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/lufs_0.9.6captive6.tar.gz b/project/captive/dist/lufs_0.9.6captive6.tar.gz
new file mode 100644 (file)
index 0000000..2f1ff7b
Binary files /dev/null and b/project/captive/dist/lufs_0.9.6captive6.tar.gz differ
diff --git a/project/captive/dist/lufs_0.9.6captive6_i386.changes b/project/captive/dist/lufs_0.9.6captive6_i386.changes
new file mode 100644 (file)
index 0000000..872230a
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: lufs
+Binary: lufs
+Architecture: source i386
+Version: 0.9.6captive6
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ lufs       - lufs - Linux Userland File System
+Changes: 
+ lufs (0.9.6captive6) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ ccee758dd73a778ec6d0dc14b9bf665a 613 base optional lufs_0.9.6captive6.dsc
+ 106f7117b0ea67ce85f0528ca0cc619b 214704 base optional lufs_0.9.6captive6.tar.gz
+ 0581c9d3a4826c1661a705ab8bbceaf4 141754 base optional lufs_0.9.6captive6_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/kC5ozD78uUT8djIRAq33AKCGZBDgJazHocKIfmA0UqW9YednrQCfbLUg
+aFO2ESsKFkhKhVEjGZnb1aw=
+=HuH4
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/lufs_0.9.6captive6_i386.deb b/project/captive/dist/lufs_0.9.6captive6_i386.deb
new file mode 100644 (file)
index 0000000..63aaa7d
Binary files /dev/null and b/project/captive/dist/lufs_0.9.6captive6_i386.deb differ
diff --git a/project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm b/project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..801d4a7
Binary files /dev/null and b/project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm b/project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm
new file mode 100644 (file)
index 0000000..50eb2ab
Binary files /dev/null and b/project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm differ
diff --git a/project/captive/dist/ntfsprogs-200309071734captive1.tar.gz b/project/captive/dist/ntfsprogs-200309071734captive1.tar.gz
new file mode 100644 (file)
index 0000000..ddca521
Binary files /dev/null and b/project/captive/dist/ntfsprogs-200309071734captive1.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm b/project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..6a64a6b
Binary files /dev/null and b/project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb b/project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb
new file mode 100644 (file)
index 0000000..a164d20
Binary files /dev/null and b/project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb differ
diff --git a/project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm b/project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..1162b36
Binary files /dev/null and b/project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.i386.rpm b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.i386.rpm
new file mode 100644 (file)
index 0000000..c8b6631
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm
new file mode 100644 (file)
index 0000000..dcf43c7
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz
new file mode 100644 (file)
index 0000000..a594525
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm b/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm
new file mode 100644 (file)
index 0000000..98ec4ba
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.dsc b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.dsc
new file mode 100644 (file)
index 0000000..c4a59e4
--- /dev/null
@@ -0,0 +1,24 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: ntfsprogs-gnomevfs
+Version: 1.0.2
+Binary: ntfsprogs-gnomevfs
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0),
+ libgnomevfs2-dev,
+ libglib2.0-dev,
+ ntfsprogs-dev
+Files: 
+ 4087f57e2f6a38b2ec8956396b61bc24 312531 ntfsprogs-gnomevfs_1.0.2.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/k4zXzD78uUT8djIRAqQKAJ0cxz6Uo7RBg1AXyXBBOgBzFOLsYwCgk1Pq
+q4pv3fUOIAv8zUdOMVRYpV4=
+=KIUE
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz
new file mode 100644 (file)
index 0000000..0cfce9f
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.changes b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.changes
new file mode 100644 (file)
index 0000000..15ec8b4
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: ntfsprogs-gnomevfs
+Binary: ntfsprogs-gnomevfs
+Architecture: source i386
+Version: 1.0.2
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ ntfsprogs-gnomevfs - NTFS filesystem library GNOME virtual file-system interface
+Changes: 
+ ntfsprogs-gnomevfs (1.0.2) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ 770c049238a95f00920aff1f08cfdcce 594 main/base optional ntfsprogs-gnomevfs_1.0.2.dsc
+ 4087f57e2f6a38b2ec8956396b61bc24 312531 main/base optional ntfsprogs-gnomevfs_1.0.2.tar.gz
+ 5833cbaa6611d8afaaf8f10632755fc8 9896 main/base optional ntfsprogs-gnomevfs_1.0.2_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/k4zczD78uUT8djIRAni7AJ4zzu9GWno8xcPJ/m/ySrMTLRxlmQCfZEs7
+GYgWB1y2Lm0QeHQtx+VRBRE=
+=RhCE
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb
new file mode 100644 (file)
index 0000000..8fcd67a
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb differ
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1.dsc b/project/captive/dist/ntfsprogs_200309071734captive1.dsc
new file mode 100644 (file)
index 0000000..9b6b0a3
--- /dev/null
@@ -0,0 +1,20 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: ntfsprogs
+Version: 200309071734captive1
+Binary: ntfsprogs, ntfsprogs-dev
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Files: 
+ d1d605893444b80fd837301320dd2261 535278 ntfsprogs_200309071734captive1.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bdcpzD78uUT8djIRAjnhAKCE3ofdN1P9M434xfCqJTuqAVSHSQCdFiq1
+0Mg8noB5XT55apyd7hq6RbI=
+=LrBu
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1.tar.gz b/project/captive/dist/ntfsprogs_200309071734captive1.tar.gz
new file mode 100644 (file)
index 0000000..0ec13c3
Binary files /dev/null and b/project/captive/dist/ntfsprogs_200309071734captive1.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1_i386.changes b/project/captive/dist/ntfsprogs_200309071734captive1_i386.changes
new file mode 100644 (file)
index 0000000..d60878f
--- /dev/null
@@ -0,0 +1,33 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Tue, 09 Sep 2003 08:22:48 +0200
+Source: ntfsprogs
+Binary: ntfsprogs ntfsprogs-dev
+Architecture: source i386
+Version: 200309071734captive1
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ ntfsprogs  - NTFS filesystem libraries and utilities
+ ntfsprogs-dev - files required to compile software that uses libntfs
+Changes: 
+ ntfsprogs (200309071734captive1) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ d4fd74a7e479d42cb3e375c0c50f0694 524 contrib/base optional ntfsprogs_200309071734captive1.dsc
+ d1d605893444b80fd837301320dd2261 535278 contrib/base optional ntfsprogs_200309071734captive1.tar.gz
+ 202a161dc4b512e94ed4ef65a798b33a 169968 contrib/base optional ntfsprogs_200309071734captive1_i386.deb
+ 80b2f06832c66bb07c439f7c7e175b64 91630 contrib/base optional ntfsprogs-dev_200309071734captive1_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bdcuzD78uUT8djIRAvX4AJoC11uEH2aQNfmLgeRGOOU5u0098gCcDHpS
+cN3+Cbhbo775wc68qlvhSqw=
+=FheU
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb b/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb
new file mode 100644 (file)
index 0000000..53b9fcb
Binary files /dev/null and b/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb differ
diff --git a/project/captive/doc/APITypes.html.pl b/project/captive/doc/APITypes.html.pl
new file mode 100755 (executable)
index 0000000..9c0476c
--- /dev/null
@@ -0,0 +1,480 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc APITypes page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::APITypes;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: API Functions',
+               "rel_prev"=>'Details.html.pl',
+               "rel_next"=>'CallType.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<a name="functype"><h1>API Function Implementation Choices</h1></a>
+
+       <p>For each function exported by W32
+       <span class="fname">ntoskrnl.exe</span> and imported and called by the
+       filesystem driver a decision needs to be made to properly implement its
+       functionality. Currently implemented functionality statistics are provided
+       below:</p>
+
+       <table border="1" align="center">
+               <tr><th>Function type                                            </th><th>Items</th><th>Portion</th></tr>
+               <tr><td>@{[ a_href 'APITypes.html.pl#functype_pass','pass' ]}                    </td><td>   81</td><td>    26%</td></tr>
+               <tr><td>@{[ a_href 'APITypes.html.pl#functype_wrap','wrap' ]}                    </td><td>    2</td><td>     0%</td></tr>
+               <tr><td>@{[ a_href 'APITypes.html.pl#functype_native_reactos','native-ReactOS' ]}</td><td>  113</td><td>    36%</td></tr>
+               <tr><td>@{[ a_href 'APITypes.html.pl#functype_native_libcaptive','native-own' ]} </td><td>  116</td><td>    38%</td></tr>
+               <caption>Function Implementation Types Statistics</caption>
+       </table>
+
+       @{[ doc_img 'ratio','Functions Reusal Ratio' ]}
+
+       <p>As there are several choices to implement each function the usual
+       attempts/investigations ordering is listed in the sections below.</p>
+
+       <p>Special case must be taken for data-type symbols since they are
+       referenced without the possibility of catching the code flow by some
+       breakpoints (it would be possible only in some special access cases). Data
+       export symbols of <span class="constant">unpatched</span> libraries must
+       contain already prepared content at the runtime. There is a&nbsp;problem
+       with <span class="constant">patched</span> libraries where it is necessary
+       to also fully implement the data symbol as
+       @{[ a_href 'APITypes.html.pl#functype_native','native implementation' ]} since there is no
+       possibility to @{[ a_href 'APITypes.html.pl#functype_pass','pass' ]} the data symbol instead of
+       the original W32 data location and therefore there will be two instances of
+       such data variable place. As there will be also the uncaught references for
+       such W32 data location from the <span class="constant">patched</span>
+       library itself such symbols should be usually only some constants (such as
+       <span class="constant">KeNumberProcessors</span>).</p>
+
+       <p>W32 platform symbols export/import can be based either on the symbol
+       name itself or it can be also exported and imported just by its
+       identification number called <span class="constant">Ordinal</span>.
+       Although it saves some jumptables file binary size it is currently no
+       longer used by W32 binaries and this project also does not support such
+       <span class="constant">Ordinal</span> symbol reference type at all.</p>
+
+       <p>All the exporting magic is handled by custom script
+       <span class="fname">captivesym</span> processing the definition file
+       <span class="fname">@{[ captive_srcfile 'src/libcaptive/ke/exports.captivesym' ]}</span>
+       to produce the intermediate relaying code
+       <span class="fname">src/libcaptive/ke/exports.c</span>. For details of the
+       <span class="fname">captivesym</span>-specific source file syntax please
+       see its documentation:
+       <span class="fname">@{[ a_href
+                       '/project/Pod2Html.html.pl?cvs=captive/src/libcaptive/ke/captivesym.pl',
+                       'src/libcaptive/ke/captivesym.pl' ]}</span>
+
+       <a name="functype_pass"><h2>Direct Pass to Original &quot;ntoskrnl.exe&quot;</h2></a>
+
+               <p>Simple (standalone) functions such as
+               <span class="function">RtlTimeToSecondsSince1970()</span> can be simply
+               passed to the original implementation in
+               <span class="fname">ntoskrnl.exe</span> as they make no hardware access
+               and they do not expect any special internal data structures to be set up
+               in advance by an earlier library initialization. A common case are all
+               the data structures utility functions such as
+               <span class="constant">GenericTable</span> subsystem or
+               <span class="constant">LargeMcb</span> handling.</p>
+
+               <a name="functype_pass_fromunix"><h3>Pass from UNIX Code</h3></a>
+
+                       <p>Control flow begins in some standard UNIX code. Such code is always
+                       using @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} for all its
+                       intracalls. <a href="APITypes.html.pl#functype_native_reactos">Native functions
+                       compiled from <span class="productname">ReactOS</span> sources</a> use
+                       their own @{[ a_href '#calltype','cdecl/stdcall/fastcall' ]} declarations
+                       but these call type modifications are discarded during compilation for
+                       this project by the <span class="constant">LIBCAPTIVE</span>
+                       symbol.</p>
+
+                       <p>UNIX code calls <span class="function">FUNCTIONNAME()</span> relay
+                       from the generated UNIX jump table. Such relay will debug dump the
+                       passed arguments and finally pass the control to the original W32
+                       function code in the proper call type
+                       @{[ a_href '#calltype','cdecl/stdcall/fastcall' ]} for a&nbsp;given
+                       function.</p>
+
+                       <p>Original W32 code entry point is always trapped by a&nbsp;breakpoint
+                       although it would not be needed during this specific direct pass from
+                       UNIX code to the original W32 implementation. Still the breakpoint has
+                       to be there to catch some other (such as intra-W32) possible calls
+                       described later. There are several more ways to define breakpoint in
+                       the code. One way is to use processor hardware breakpoint support but
+                       the number of breakpoints is limited.  The other way is to patch in the
+                       <span class="instruction">@{[ 'int $3' ]}</span> instruction but it will invoke
+                       <span class="constant">SIGTRAP</span> signal handler conflicting with
+                       the possible debugger (<span class="productname">gdb(1)</span>)
+                       control. This project uses the <span class="instruction">hlt</span>
+                       instruction, which also has a&nbsp;single-byte opcode as
+                       <span class="instruction">@{[ 'int $3' ]}</span> and it is a&nbsp;privileged
+                       instruction forbidden to be used from the UNIX user space code.
+                       <span class="instruction">hlt</span> invokes
+                       <span class="constant">SIGSEGV</span> signal which can be resolved by
+                       a&nbsp;custom signal handler without any conflict with the possible
+                       debugger control; <span class="productname">gdb(1)</span> needs the
+                       following command to pass through such
+                       <span class="constant">SIGSEGV</span> signal:</p>
+
+                       <blockquote class="command">
+                               <p>handle SIGSEGV nostop noprint pass</p>
+                       </blockquote>
+
+                       <p>When a breakpoint gets caught, we usually need to return to the
+                       running code. Unfortunately it is not possible because of the patched
+                       breakpoint opcode. The breakpoint cannot be simply removed upon return
+                       as it would permanently loose control over the point of entry. Even if
+                       the return would include faking of the return address in the bottom
+                       stack frame to patch the breakpoint back during later function exit it
+                       still would not solve the caughts of inner calls of recursive
+                       functions. One of the working possibilities would be to patch the
+                       original instruction back and perform a&nbsp;singlestep provided by
+                       <span class="function">ptrace(2)</span> syscall. However such
+                       singlestep needs another controlling UNIX process and it would again
+                       conflict with the debuggers such as
+                       <span class="productname">gdb(1)</span>. This project implements the
+                       singlestep functionality by two consecutive breakpoints
+                       (<span class="instruction">hlt</span> instructions to be specific):
+                       The first two instruction addresses of the W32 functions are called
+                       <span class="productname">slot #1</span> and
+                       <span class="productname">slot #2</span>, the length of the first
+                       function instruction has to be analyzed to get the right address of
+                       <span class="productname">slot #2</span>. When the first breakpoint is
+                       caught it is necessary to patch the original instruction back and also
+                       patch another breakpoint in place of
+                       <span class="productname">slot #2</span>.
+                       During the <span class="productname">slot #2</span> breakpoint
+                       invocation the operation will be reverted &mdash; the breakpoint will be put
+                       to <span class="productname">slot #1</span> again and the instruction
+                       of <span class="productname">slot #2</span> will be restored to be able
+                       to continue the execution of the function.</p>
+
+                       <p>W32 function will finish in its specific
+                       @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]}, the control
+                       will return to the UNIX jump table relay which will debug dump the
+                       return value and it will finally pass the control back to the UNIX
+                       caller in the standard UNIX
+                       @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]}.</p>
+
+                       @{[ doc_img 'fig/functype_patched_pass_fromunix',
+                                       'Function Type: <span class="constant">pass</span> from UNIX Code' ]}
+
+               <a name="functype_pass_fromw32"><h3>Pass from W32 Code</h3></a>
+
+                       <p>This function type is similiar to the
+                       @{[ a_href 'APITypes.html.pl#functype_pass_fromunix','previous one' ]} with the exception
+                       of more complicated entry point. Unfortunately W32 libraries call their
+                       own functions directly, using the <span class="instruction">call</span>
+                       instructions without any patchable jump table. Even the
+                       <span class="instruction">call</span> argument itself cannot be patched
+                       according to the relocation table record as such library intra-call
+                       instruction has no relocation due to its relative argument offset on
+                       <span class="constant">i386</span>. This time the double-breakpoint
+                       mechanism @{[ a_href 'APITypes.html.pl#functype_pass_fromunix','described above' ]} gets
+                       handy since it will catch the entry point when the function gets
+                       called.  <span class="constant">SIGSEGV</span> handler gets invoked by
+                       the <span class="instruction">hlt</span> instruction and it will
+                       redirect the control to the jump table relay function to debug dump the
+                       function entry arguments (it has no other uses in this call type).</p>
+
+                       <p>When the relay needs to call the original function it will reach
+                       exactly the same breakpoint instruction as during the recent
+                       <span class="constant">SIGSEGV</span> handling redirecting to this
+                       calling relay.  But this time the
+                       <span class="constant">through_w32_func</span> field of this function
+                       record will be set to to prevent repeated redirection and to pass the
+                       control through the breakpoint mangle instead this time.</p>
+
+                       <p>Returning is not much interesting as the first
+                       <span class="constant">SIGSEGV</span> handler did a&nbsp;straight jump
+                       for the redirection purposes without any needed consequent
+                       handling.</p>
+
+                       <p>The jump table relay used for the callers from W32 code is
+                       a&nbsp;different one than the relay being used for the callers
+                       @{[ a_href 'APITypes.html.pl#functype_pass_fromunix','from UNIX code' ]}. UNIX code always
+                       uses relay with external @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]}
+                       but in this case a&nbsp;relay with the appropriate
+                       @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]} is used.</p>
+
+                       @{[ doc_img 'fig/functype_patched_pass_fromw32',
+                                       'Function Type: <span class="constant">pass</span> from W32 Code' ]}
+
+               @{[ vskip() ]}
+
+               <table border="1" align="center">
+                       <tr><td><span class="fname">captivesym</span> keyword</td><td>pass</td></tr>
+                       <tr><td>Native code function name                    </td><td>(no implementation)</td></tr>
+                       <tr><td>W32 traced code from UNIX function name      </td><td>FUNCNAME</td></tr>
+                       <tr><td>W32 traced code from W32  function name      </td><td>FUNCNAME_cdecl/_stdcall/_fastcall</td></tr>
+                       <tr><td>Entry/exit debug tracing from UNIX code      </td><td>yes</td></tr>
+                       <tr><td>Entry/exit debug tracing from W32 code       </td><td>yes</td></tr>
+                       <caption>Function Type <span class="constant">pass</span> Characteristics</caption>
+               </table>
+
+       <a name="functype_wrap"><h2>Wrap of the Original "ntoskrnl.exe" Function</h2></a>
+
+               <a name="functype_wrap_fromunix"><h3>Wrapping of Call from UNIX Code</h3></a>
+
+                       <p>The code control flow has no special hardcore features since it is
+                       very similiar to <a href="APITypes.html.pl#functype_pass_fromunix">the direct pass to
+                       W32 function from UNIX code</a>. All the wrapping is done in the
+                       standard UNIX @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} manner.
+                       Jump table debug dumping relays are provided twice &mdash; the
+                       &quot;outer&quot; one to trace the parameters from the function caller
+                       and the &quot;inner&quot; one to trace the call from the wrapper to the
+                       original W32 code. The &quot;inner&quot; relay also calls the W32 code
+                       with the appropriate <a href="#calltype">cdecl/stdcall/fastcall call
+                       type</a>.</p>
+
+                       @{[ doc_img 'fig/functype_patched_wrap_fromunix',
+                                       'Function Type: <span class="constant">wrap</span> from UNIX Code' ]}
+
+               <a name="functype_wrap_fromw32"><h3>Wrapping of Call from W32 Code</h3></a>
+
+                       <p>This scheme is a&nbsp;combination of the
+                       <a href="APITypes.html.pl#functype_wrap_fromunix">previous wrap of a&nbsp;call from
+                       UNIX code</a> and the <a href="APITypes.html.pl#functype_pass_fromw32">direct pass from
+                       the W32 code</a>. The control is caught and redirected by
+                       <span class="constant">SIGSEGV</span> handler from the breakpoint
+                       placed at the entry to the original W32 function code. The second entry
+                       to the original W32 function with the
+                       <span class="constant">through_w32_func</span> field of this function
+                       description already set is done from the &quot;inner&quot; jump table
+                       relay with the appropriate
+                       @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]}.</p>
+
+                       @{[ doc_img 'fig/functype_patched_wrap_fromw32',
+                                       'Function Type: <span class="constant">wrap</span> from W32 Code' ]}
+
+               @{[ vskip() ]}
+
+               <p>Some functions can be <a href="APITypes.html.pl#functype_pass">passed to the original
+               code</a> but they need their parameters to be checked/prepared.
+               Currently, such wrapping is only needed for the
+               <span class="function">ExAllocateFromPagedLookasideList()</span> function
+               where it is required due to <a href="#init_ntoskrnl">missing execution of
+               <span class="fname">ntoskrnl.exe</span> initialization execution</a>,
+               which would otherwise properly initialize some internal data structures.
+               In this case the wrapping code detects passing of an uninitialized
+               parameter and will search through the whole
+               <span class="fname">ntoskrnl.exe</span> code body at runtime to find the
+               proper initialization routine containing the correct initialization
+               parameters.  Passed addresses of static structures must be differentiated
+               as each of them usually has different initialization parameters. It is
+               proactive to not to have fixed parameters array as these parameters may
+               differ across different <span class="fname">ntoskrnl.exe</span>
+               versions.</p>
+
+               <table border="1" align="center">
+                       <tr><td><span class="fname">captivesym</span> keyword</td><td>wrap</td></tr>
+                       <tr><td>Native UNIX wrapping code function name      </td><td>FUNCNAME_wrap</td></tr>
+                       <tr><td>W32 traced wraping code from UNIX func. name </td><td>FUNCNAME</td></tr>
+                       <tr><td>W32 traced wrapping code from W32 func. name </td><td>FUNCNAME_cdecl/_stdcall/...</td></tr>
+                       <tr><td>W32 traced original code function name       </td><td>FUNCNAME_orig</td></tr>
+                       <tr><td>Entry/exit debug tracing from UNIX code      </td><td>yes</td></tr>
+                       <tr><td>Entry/exit debug tracing from W32 code       </td><td>yes</td></tr>
+                       <caption>Function Type <span class="constant">wrap</span> Characteristics</caption>
+               </table>
+
+       <a name="functype_native"><h2>Native Implementation</h2></a>
+
+               <a name="functype_native_fromunix"><h3>Native Implementation Called from UNIX Code</h3></a>
+
+                       <p>This is the simplest case of a&nbsp;function call as it is fully
+                       handled only by the compiler and/or linker.</p>
+
+                       <p>In this case though, no debug dumping call relay is provided &mdash; such
+                       relay would need to rename the implementations of native functions to
+                       prevent its automatic linking with the caller code. This renaming would
+                       not be possible to do by simple <span class="constant">#define</span>
+                       since it would also rename any calling statements of such function in
+                       the same C&nbsp;sources.  One of the possibilities to solve would be to
+                       utilize <span class="dashdash">--redefine-sym</span> feature of the
+                       <span class="productname">objcopy(1)</span> utility. On the other hand
+                       there is not much need to catch/debug such calls as both the caller and
+                       the callee are provided with full source file debug information for the
+                       debugger. Also the callee usually debug dumps its entry/exit parameters
+                       by custom debug dumps in the
+                       <a href="APITypes.html.pl#functype_native_reactos"><span class="productname">ReactOS</span> implementations</a>.
+
+                       @{[ doc_img 'fig/functype_native_fromunix',
+                                       'Function Type: <span class="constant">native</span> from UNIX Code' ]}
+
+               <a name="functype_native_fromw32"><h3>Native Implementation of
+                               &quot;unpatched&quot; Library Function Called from W32 Code</h3></a>
+
+                       @{[ doc_img 'fig/functype_unpatched_native_fromw32',
+                                       'Function Type: <span class="constant">native</span> of <span class="constant">unpatched</span> from W32 Code' ]}
+
+                       <p>Here comes the differentiation if the project deals either with
+                       a&nbsp;<span class="constant">patched</span> or an
+                       <span class="constant">unpatched</span> version of the library
+                       (<span class="constant">patched</span> is a&nbsp;loaded W32 binary
+                       library while <span class="constant">unpatched</span> library is
+                       completely provided by this project with no use of the library's
+                       original W32 binary file). As the project adjusts the exported symbol
+                       address during the patching operation, in some cases the
+                       <span class="constant">patched</span> library call may be handled
+                       simply as <span class="constant">unpatched</span> library call even for
+                       the <span class="constant">patched</span> libraries. Fortunately the
+                       distinction is not much important as the project is prepared to
+                       properly handle both cases.</p>
+
+                       <p>The W32 caller which imported the symbol will be pointed right to
+                       the relaying function. The debug dumping relay will be called from W32
+                       code with the appropriate
+                       @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]} while the
+                       relay will call the implementation of the native function in the
+                       standard UNIX @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} manner.</p>
+
+               <a name="functype_native_fromw32_patched"><h3>Native Implementation of &quot;patched&quot; Library Function Called from W32 Code</h3></a>
+
+                       @{[ doc_img 'fig/functype_patched_native_fromw32',
+                                       'Function Type: <span class="constant">native</span> of <span class="constant">patched</span> from W32 Code' ]}
+
+                       <p>The calling scheme is similiar to the
+                       <a href="APITypes.html.pl#functype_native_fromw32">previous call of
+                       <span class="constant">unpatched</span> library function from W32
+                       code</a> but the call control is redirected from the entry point of the
+                       original W32 binary implementation by the breakpoint and its
+                       <span class="constant">SIGSEGV</span> handler as in
+                       <a href="APITypes.html.pl#functype_pass_fromw32">the case of passing control from W32
+                       call</a>.</p>
+
+                       <p>The original W32 function implementation located in the original
+                       loaded binary file is never executed but its entry point needs to be
+                       trapped by the breakpoint to be able to catch the function calls within
+                       the library.</p>
+
+               @{[ vskip() ]}
+
+               <p>In all cases the final function implementation is a&nbsp;standard UNIX
+               code compiled from C&nbsp;sources with full debug information available
+               for the debugger. Fortunately all such functions do not need to be coded
+               from scratch for this project since there already exist $freespeech
+               $ReactOS and $Wine projects and their code can be used instead.</p>
+
+               <p>$Wine project is listed mostly for a&nbsp;completeness as almost no
+               code was suitable for reuse as it implements W32 user space while this
+               project is running pure W32 kernel space environment (in $gnulinux user
+               space!).</p>
+
+               <a name="functype_native_reactos"><h3>Native Implementation
+                               - <span class="productname">ReactOS</span></h3></a>
+
+                       <p>Some functions are already implemented in the $ReactOS
+                       project and they can be used as they are.  Although it would be
+                       possible to <a href="APITypes.html.pl#functype_pass">pass some function calls to the
+                       original code</a> it is more handy to provide native implementation as
+                       there is better control of the data handling during debugging sessions
+                       due to the provided debugging symbols.</p>
+
+                       <p>Such functions can be found in
+                       <span class="fname">src/libcaptive/reactos/</span> subdirectory.
+                       Some functions had to be adjusted for this project
+                       - these modifications are compiled conditionally, depending on the
+                       <span class="constant">LIBCAPTIVE</span> symbol existence.</p>
+
+                       <p>Later stages of this project reached the level where
+                       $ReactOS is yet too immature and the needed functions are usually
+                       written just with the sad body:</p>
+
+                       <blockquote class="command">
+                               <p>UNIMPLEMENTED;</p>
+                       </blockquote>
+
+                       <p>Functions that were not possible to
+                       @{[ a_href 'APITypes.html.pl#functype_pass','pass' ]} were reimplemented by this project
+                       and placed in the project's implementation directories
+                       @{[ a_href '#reactos_nocare','instead of extending' ]} $ReactOS code.</p>
+
+               <a name="functype_native_wine"><h3>Native Implementation &ndash; <span class="productname">Wine</span></h3></a>
+
+                       <p>Even though $Wine only implements the
+                       <span class="productname">Microsoft Windows NT</span> user space, there
+                       still are some common functions which could be copied from the $Wine
+                       project.</p>
+
+               <a name="functype_native_libcaptive"><h3>Native Implementation &ndash; Project Specific</h3></a>
+
+                       <p>As the last resort it was necessary to provide completely own
+                       implementation of some API functions such as PC hardware dependent
+                       parts or memory management functions.</p>
+
+               @{[ vskip() ]}
+
+               <table border="1" align="center">
+                       <tr><td><span class="fname">captivesym</span> keyword</td><td>(none; just the symbol name)</td></tr>
+                       <tr><td>Native code function name                    </td><td>FUNCTIONNAME</td></tr>
+                       <tr><td>Native traced code from W32 code func. name  </td><td>FUNCTIONNAME_cdecl/_std...</td></tr>
+                       <tr><td>Entry/exit debug tracing from UNIX code      </td><td>no</td></tr>
+                       <tr><td>Entry/exit debug tracing from W32 code       </td><td>yes</td></tr>
+                       <caption>Function Type <span class="constant">native</span> Characteristics</caption>
+               </table>
+
+       <a name="functype_undef"><h2>Undefined Function</h2></a>
+
+               <p>Functions not defined by any of the previous function types cannot be
+               called by any W32 code including the code of the library implementing
+               such function. All functions of <span class="constant">patch</span>ed
+               libraries not listed in the <span class="fname">captivesym</span> exports
+               file are automatically set to be trapped as fatal program execution
+               errors.</p>
+
+               <p>It is not necessary to list the symbols as
+               <span class="constant">undef</span> as long as you are just loading the
+               W32 <span class="constant">PE-32</span> code and the symbols belong to
+               <span class="constant">patch</span>ed library. On the other hand if you
+               are loading W32 <span class="fname">.so</span> code or if such symbol is
+               a&nbsp;part of <span class="constant">unpatched</span> library (and thus
+               being completely provided by the project) you need to list such symbol as
+               <span class="constant">undef</span> type to prevent unresolved symbol
+               reference.</p>
+
+               <table border="1" align="center">
+                       <tr><td><span class="fname">captivesym</span> keyword</td><td>undef</td></tr>
+                       <tr><td>Native code function name                    </td><td>(no implementation)</td></tr>
+                       <tr><td>Native traced code function name             </td><td>FUNCTIONNAME_cdecl/_stdcall/_fastcall</td></tr>
+                       <tr><td>Debug tracing message from UNIX code         </td><td>yes</td></tr>
+                       <tr><td>Debug tracing message from W32 code          </td><td>yes</td></tr>
+                       <caption>Function Type <span class="constant">undef</span> Characteristics</caption>
+               </table>
+
+       
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/About.html.pl b/project/captive/doc/About.html.pl
new file mode 100755 (executable)
index 0000000..444d98d
--- /dev/null
@@ -0,0 +1,140 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc About page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::About;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: About',
+               "rel_prev"=>'Index.html.pl',
+               "rel_next"=>'Architecture.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<h1>About</h1>
+
+       <a name="reasons"><h2>Reasons for the Implementation</h2></a>
+
+               <p>Currently there is no possibility to any of the available $freespeech
+                       ($freespeech used in the following text in the meaning of
+                       &quot;@{[ a_href 'http://www.gnu.org/philosophy/free-sw.html','free as in speech' ]}&quot;)
+               operating systems to reliably write to the most common disk partition
+               filesystem type &ndash; <span class="productname">Microsoft NTFS</span>. It would
+               be already supported a long time ago but there is no proper documentation of
+               <span class="productname">NTFS</span> filesystem data structures available.
+               Since <span class="productname">Microsoft</span> corporation continues in its
+               propagation of <span class="productname">Microsoft Windows NT</span>
+                       (<span class="productname">NT</span> identifier used in the following text
+                       applies to all the products of <span class="productname">Microsoft</span>
+                       <span class="productname">NT</span> series such as
+                       <span class="productname">NT&nbsp;4.0</span>,
+                       <span class="productname">2000</span> as NT-5.0
+                       and
+                       <span class="productname">XP</span> as NT-5.1.)
+               based operating systems <span class="productname">NTFS</span> is the default
+               disk file system type for vendor preinstalled <span class="productname">Microsoft Windows</span>.
+
+               <p>Unfortunately the <span class="productname">NTFS</span> filesystem has too
+               complex data structure to allow a complete reverse enginnering process in
+               reasonable time. Currently available $freespeech solutions such as $LinuxNTFS
+               filesystem have already implemented reliable reverse
+               engineered read-only access. However <a name="reliability">reliabile</a>
+               read-write part of the access would require much better
+               knowledge of the <span class="productname">NTFS</span> data structures.
+               Currently only rewriting of already existing file data blocks is supported
+               by $LinuxNTFS &mdash; no file creation, no file deletion, no directory operations etc.
+               Also any future versions of <span class="productname">NTFS</span> filesystem
+               would require another major reverse engineering effort.</p>
+
+
+       <a name="challenges"><h2>Challenges of the Project</h2></a>
+
+               <p>The <a name="NTFSgoal">ultimate goal</a> of this project is definitely the
+               free implementation of @{[ a_href '#reliability','reliable' ]} read-write <span
+               class="productname">NTFS</span> filesystem driver. This project chose to
+               solve this problem in the style of $Wine project by using the original binary
+               <span class="fname">ntfs.sys</span> and emulating all the required layers of
+               <span class="productname">Microsoft Windows NT</span> for it.</p>
+
+               <p>Unfortunately this effort is tainted by only partial and generally
+               insufficient documentation of API between filesystem driver
+               (<span class="fname">ntfs.sys</span>) and the
+               <span class="productname">Microsoft Windows NT</span>
+               (&quot;@{[ a_href 'http://mail.gnu.org/archive/html/libtool/2000-09/msg00000.html','W32' ]}&quot;
+               in the following text) kernel <span class="fname">ntoskrnl.exe</span>. Note
+               that this API is a different than the one being used in the $Wine project
+               since <span class="productname">Wine</span> implements only the user space
+               part of W32.</p>
+
+
+       <a name="versions"><h2>Microsoft Windows Versions Compatibility</h2></a>
+
+               <p>Currently this project supports only driver files of
+               <span class="productname">Microsoft Windows XP</span> (NT-5.1)
+               in the following releases:</p>
+
+               <ul>
+                       <li>Microsoft Windows XP Service Pack 1a Checked Build U.S.</li>
+                       <li>Microsoft Windows XP Service Pack 1a Free Build U.S.</li>
+                       <li>Microsoft Windows XP (No Service Pack) Checked Build U.S.</li>
+                       <li>Microsoft Windows XP (No Service Pack) Free Build U.S.</li>
+               </ul>
+
+               <p>The latest list of supported driver files can be found in:
+               @{[ captive_srcfile 'src/install/acquire/w32-mod-id.captivemodid.xml' ]}</p>
+
+               <p>Microsoft Windows NTFS filesystem driver is capable of accessing even
+               the older formats of the filesystem. Porting to Microsoft Windows 2003
+               Server is expected to be done soon. There can be also a danger of Microsoft
+               Windows upgrading NTFS disk filesystem where you would no longer be able
+               to access your NTFS disk by your original
+               <span class="productname">Microsoft Windows</span> version.
+               This upgrade does not happen as it occurs only during complete CD-ROM
+               Microsoft Windows system installation &ndash; such operation is not performed
+               by this project.</p>
+
+               <p>There is no problem technically obtaining the needed driver files of
+               <span class="productname">Microsoft Windows XP</span> as they are freely
+               downloadable at:
+               @{[ a_href 'http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp' ]}</p>
+               There may be @{[ a_href 'Architecture.html.pl#law','legal reasons' ]} you would not be allowed
+               to use there files if you own license to a different version of
+               <span class="productname">Microsoft Windows</span>. Legal rights will very
+               depending on your country.</p>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/Architecture.html.pl b/project/captive/doc/Architecture.html.pl
new file mode 100755 (executable)
index 0000000..0f982ca
--- /dev/null
@@ -0,0 +1,214 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Architecture page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Architecture;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: Architecture',
+               "rel_prev"=>'About.html.pl',
+               "rel_next"=>'Components.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<h1>Architecture</h1>
+
+       <p>The principle of the
+       project lies in the glue between
+       <span class="productname">Microsoft Windows NT</span> kernel space
+       environment and $gnulinux user space process environment:</p>
+
+       @{[ doc_img 'arch-W32','Microsoft Windows Subsystems Architecture' ]}
+       @{[ doc_img 'arch-captive','Captive Subsystems Architecture' ]}
+       
+       <a name="existing_emulation"><h2>Existing Emulation Projects</h2></a>
+
+               <p>There were two well-known $freespeech projects emulating W32 subsystems
+               to reach the compatibility with various W32 components:
+               $Wine and $ReactOS. Sad moment is that the goals of this project do not fit
+               very well into any role in those two ones. Therefore this project went
+               its own way of emulation:</p>
+
+               <table align="center" border="1">
+                       <tr>
+                               <th>@{[ a_href '#guestosnote','Guest-OS' ]}</th>
+                               <th>@{[ a_href '#hostosnote' ,'Host-OS'  ]}</th>
+                               <th>Implements</th>
+                               <th>W32 kernel library</th>
+                               </tr>
+                       <tr>
+                               <td>$Wine</td>
+                               <td>$gnulinux</td>
+                               <td>W32 user space</td>
+                               <td><span class="fname">ntdll.dll</span></td>
+                               </tr>
+                       <tr>
+                               <td>$ReactOS</td>
+                               <td><span class="constant">i386</span> hardware</td>
+                               <td>W32 kernel and user space</td>
+                               <td><span class="fname">ntoskrnl.exe</span></td>
+                               </tr>
+                       <tr style="height: 1ex;"></tr>
+                       <tr>
+                               <td>this project</td>
+                               <td>$gnulinux</td>
+                               <td>W32 kernel</td>
+                               <td><span class="fname">ntoskrnl.exe</span></td>
+                               </tr>
+                       <caption>Emulation Projects Characteristics</caption>
+               </table>
+
+               <dl>
+                       <a name="guestosnote"><dt>Guest-OS</dt></a>
+                       <dd>@{[ a_href 'http://www.vmware.com/support/reference/common/glossary/#guestos','Guest OS' ]}:
+                               An operating system that runs inside a&nbsp;virtual machine.</dd>
+                       <a name="hostosnote" ><dt>Host  OS</dt></a>
+                       <dd>@{[ a_href 'http://www.vmware.com/support/reference/common/glossary/#hostos' ,'Host  OS' ]}:
+                               An operating system that runs on the host machine.</dd>
+               </dl>
+
+               <p>While $ReactOS provides the necessary W32 kernel subsystem emulation
+               code we also need to run such @{[ a_href '#guestosnote','Guest-OS' ]} in the
+               @{[ a_href '#hostosnote','Host-OS' ]} $gnulinux. Initially it was planned to
+               extend $Wine with the W32 kernel space emulation functionality but
+               fortunately <span class="author">Steven Edwards</span> pointed to the $ReactOS
+               which better suits the needs of this project by its already implemented W32
+               kernel space emulation.</p>
+
+               <p>The <a name="reactos_nocare">original reasons</a> for developing
+               $ReactOS still make no sense to the author of this project. Free
+               implementation of W32 platform standalone running on the machine hardware
+               is no longer free as most od the W32 applications are usually closed source
+               and the user still looses its freedom on the application level anyway. Even
+               in the case of available free applications there still remains the
+               disadvantage of loosing the Host-OS platform availability if implemented in
+               the $Wine style. For these ideology incompatibilities not much effort was
+               made for acceptance the fixes and improvements of $ReactOS by this project.
+               Moreover new functionality is not being implemented to the $ReactOS part
+               but it is coded in Gnome style in the project specific source files
+               place.</p>
+
+               <p>The most serious problem of $ReactOS is its dependence on the direct
+               <span class="constant">i386</span> hardware instead of some
+               @{[ a_href '#hostosnote','Host-OS' ]} as required by the goals of this project.
+               W32 is designed to be hardware-independent using its
+               <span class="fname">hal.dll</span>. Unfortunately $ReactOS does not follow
+               this design and thus there are needed various patches and replaces of its
+               various parts and its hardware-dependent code. Despite it $ReactOS code
+               base still made a big asset for this project.</p>
+
+
+
+
+
+               <p>Some API functions are provided both by
+               <span class="fname">ntdll.dll</span> and
+               <span class="fname">ntoskrnl.exe</span> in W32.
+               <span class="author">Casper Hornstrup</span> enlightened such functions
+               calling conventions have to be differentiated as
+               <span class="fname">ntdll.dll</span> lives in the user space (low address
+               space &ndash; below <span class="constant">0x80000000</span>) and
+               <span class="fname">ntoskrnl.exe</span> in the kernel space (high address
+               space &ndash; above <span class="constant">0x80000000</span>). Although they
+               contain slightly different set of symbols (functions)
+               <span class="fname">ntdll.dll</span> still can be considered as a&nbsp;user
+               space interface to the kernel space implementation by
+               <span class="fname">ntoskrnl.exe</span>.</p>
+
+               <p>Currently there are
+               no plans to ever extend the project's crossplatformity beyond the
+               <span class="constant">i386</span> processor
+                       (<span class="constant">i386</span> used here as
+                       @{[ a_href 'http://www.intel.com/','Intel' ]} architecture covering 32-bit
+                       processors compatible with <span class="constant">i386</span>,
+                       <span class="constant">i486</span>, ...).</p>
+
+
+       <a name="law"><h2>Laws and Licensing Conditions</h2></a>
+
+               <p>If you are an <span class="productname">authorized user</span> of
+               <span class="productname">Microsoft Windows NT</span> the laws in some
+               countries give you the right to fully handle the product in any way you
+               want. Therefore you can disassemble the product even in the case you had
+               to agree with the product license forbidding such disassembly as the
+               country laws override any such license agreement.</p>
+
+               <a name="law_servicepack"><h3>Microsoft Service Pack</h3></a>
+
+                       <p>Sometimes you may have the legal license for
+                       <span class="productname">Microsoft Windows NT</span>
+                       but for various technical reasons you do not have the media and/or
+                       installation ready at the place of intended use of this project.</p>
+
+                       <p>Fortunately <span class="productname">Microsoft</span> provides
+                       $freebeer update packages for its
+                       <span class="productname">Microsoft Windows</span> products called
+                       <span class="productname">Service Packs</span>; the latest one is
+                       <span class="productname">@{[ a_href 'http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp','Microsoft Windows XP Service Pack 1a' ]}</span>.</p>
+
+                       <p>This downloadable file contains the full versions of the essential
+                       files needed for the current stage of this product:
+                       <span class="fname">ntfs.sys</span>
+                       and
+                       <span class="fname">ntoskrnl.exe</span>.
+                       It even contains
+                       <span class="fname">cdfs.sys</span> and
+                       <span class="fname">fastfat.sys</span> for testing purposes.</p>
+
+                       <p><span class="productname">Service Pack</span> also contains
+                       EULA (End User License Agreement) paper disallowing any use of
+                       <span class="productname">Service Pack</span> outside its original
+                       intentions. According to the laws of some countries you need to be
+                       <span class="productname">authorized user</span> of the
+                       <span class="productname">Microsoft Windows XP</span> product to be
+                       allowed to use the files contained in such
+                       <span class="productname">Service Pack</span> without the bindings of its
+                       EULA. Even the interpretation of such laws may vary.</p>
+
+                       <p>It would be a&nbsp;breach of the law by the project author to provide
+                       automatic (=hidden) functionality to download and extract the
+                       <span class="productname">Service Pack</span> files. On the other hand it
+                       is perfectly legal to ask user for his/her confirmation whether he/she is
+                       really the <span class="productname">authorized user</span> of
+                       <span class="productname">Microsoft Windows XP</span> product and
+                       download/extract the <span class="productname">Service Pack</span> files
+                       accordingly.</p>
+
+                       @{[ doc_img 'captive-install-acquire-ask','Microsoft Windows Drivers Acquire Affirmation' ]}
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/CacheManager.html.pl b/project/captive/doc/CacheManager.html.pl
new file mode 100755 (executable)
index 0000000..55faaee
--- /dev/null
@@ -0,0 +1,329 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Cache Manager page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::CacheManager;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: NT Cache Manager',
+               "rel_prev"=>'Reverse.html.pl',
+               "rel_next"=>'Details.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<a name="cache_manager"><h1>NT Cache Manager</h1></a>
+
+       <p>Although there exist some 3rd party documents about
+       <span class="productname">NT Cache Manager</span> W32 subsystem such as
+       <span class="productname">@{[ a_href 'http://www.osr.com/ntinsider/1996/cacheman.htm',
+                       'The NT Cache Manager Description' ]}</span> or
+       <span class="productname">@{[ a_href 'http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864',
+                       'Learn About NT'."'".'s&nbsp;File-system Cache' ]}</span>
+       they are definitely insufficient for compatible
+       <span class="productname">NT Cache Manager</span> reimplementation.</p>
+
+       <p><span class="productname">NT Cache Manager</span> is about mapping
+       filesystem objects such as regular file data, filesystem bitmap or
+       journalling zone (log file). It is also being used by the filesystem for
+       mapping of virtual volume files representing the whole underlying
+       filesystem device.</p>
+
+       <p>The original W32 <span class="productname">NT Cache Manager</span>
+       is much more complicated as it must coordinate its effort with
+       other W32 subsystems like mapping of executable files
+       (<span class="type">ImageSectionObject</span>), insufficient system
+       resources from <span class="productname">NT Memory Manager</span>
+       or general effort to perform caching features for system performance.</p>
+       <span class="productname">NT Cache Manager</span> of this project has much
+       simpler goal - it just needs to provide compatible
+       <span class="productname">NT Cache Manager</span> functionality while
+       the other goals of its W32 counterpart are left to be successfuly handled
+       by UNIX OS in much more efficient way.</p>
+
+       @{[ doc_img 'dia/cache-manager',
+                       '<span class="productname">NT Cache Manager</span> Architecture' ]}
+
+       <p>Cache Manager objects are always bound to
+       <span class="type">FCB</span> (File Control Block).
+       <span class="type">FileObject</span> (or its associated
+       <span class="type">HANDLE</span>) serve only as reference
+       to <span class="type">FCB</span> and there can be multiple
+       <span class="type">FileObject</span>/<span class="type">HANDLE</span>
+       items for one <span class="type">FCB</span>. It is a bit misleading
+       you must use <span class="type">FileObject</span> pointer while calling
+       most of the Cache Manager functions.</p>
+
+       <p>Before using any other Cache Manager functions you must first call
+       <span class="function">CcInitializeCacheMap()</span>. You must give the
+       maximum mapped object offset. Each mapped object byte must have at most one
+       mapped memory location - no shared pages are allowed. Also any subsequent
+       mapping request is expected to be mapped into continuous memory region.
+       It implies you must reserve the memory region for possible future mapping
+       during the initial <span class="function">CcInitializeCacheMap()</span>
+       moment sized according to the given maximum mapped object offset. 
+       This is the approach currently implemented by this project although it
+       cannot be used for 3rd party <span class="fname">ext2fsd.sys</span>
+       driver as it initialized Cache Manager by the whole media device size
+       and it surprisingly succeeds for original
+       <span class="productname">Microsoft Windows</span> 
+       <span class="productname">Cache Manager</span>.
+       I expect the space reservation should be postponed to the first mapping
+       request and expect no multiple mappings will be done in the case
+       of memory-exceeding <span class="function">CcInitializeCacheMap()</span>
+       reservation request. <span class="function">CcSetFileSizes()</span>
+       changing the reserved memory area size may assume no existing Map
+       or Pin mappings exist. Only in the case of 
+       <span class="constant">FO_STREAM_FILE</span> (virtual device file)
+       it is permitted to extend mapped size even in the case of existing
+       (and dirty) Map or Pin mappings.</p>
+
+       <p><span class="type">PCACHE_MANAGER_CALLBACKS</type> argument can be
+       safely ignored:</p>
+
+       <dl>
+               <dt><span class="function">AcquireForReadAhead()</span>/<span class="function">ReleaseFromReadAhead()</span></dt>
+               <dd>
+                       <p>As any readahead functionality is optional these entries are
+                       never used by Cache Manager implementation of this project.</p>
+               </dd>
+
+               <dt><span class="function">AcquireForLazyWrite()</span>/<span class="function">ReleaseFromLazyWrite()</span></dt>
+               <dd>
+                       <p>Even the write-behind functionality is optional for Cache Manager.
+                       It is being done in asynchronous way in the original
+                       <span class="productname">Microsoft Windows</span>
+                       <span class="productname">Cache Manager</span>.
+                       implementation and it is ignored by Cache Manager implementation of
+                       this project.</p>
+
+                       <p>Cache Manager does not need to write any data if not explicitely
+                       requested by the driver. It is even expected to silently drop any
+                       pending dirty data blocks during filesystem shutdown.
+                       Forced dirty block write by function
+                       <span class="function">CcFlushCache()</span> should be written without
+                       any wrapping surrounding
+                       <span class="function">AcquireForLazyWrite()</span>/<span class="function">ReleaseFromLazyWrite()</span>
+                       pair.</p>
+               </dd>
+       </dl>
+
+       <p><span class="function">CcUninitializeCacheMap()</span> is just
+       a suggestion for Cache Manager that driver will no longer reference
+       given <span class="type">SharedCacheMap</span>. The uninitialization
+       can be postponed to any later moment in original 
+       <span class="productname">Microsoft Windows</span> 
+       <span class="productname">Cache Manager</span>
+       as it may be locked by existing
+       <span class="type">ImageSectionObject</span>
+       of some file being executed etc.
+       <a name="sharedcachemap_leak">It is fatal to destroy
+       <span class="type">SharedCacheMap</span></a>
+       in the moment you see no other
+       references to it as the driver will access it for some moment
+       even after <span class="function">CcUninitializeCacheMap()</span>.
+       I am not sure if it is a bug of the driver or whether there are some rules
+       how long after <span class="function">CcUninitializeCacheMap()</span>
+       completion given <span class="type">SharedCacheMap</span> still exists.
+       Fortunately it is safe to never destroy
+       <span class="type">SharedCacheMap</span> and leave it leaked - everything
+       gets clean in the
+       @{[ a_href 'Details.html.pl#sandbox','sandboxed environment' ]} soon anyway.</p>
+
+       <p>There exist Map and Pin type objects for each
+       <span class="type">SharedCacheMap</span> although they look very similiar.
+       Only these objects give you access to any memory data
+       &mdash; <span class="type">SharedCacheMap</span> only reserved the space
+       to ensure continuous mapping of the forthcoming mappings but it did not map
+       any data into it.</p>
+
+       <p>Mapping of 'new' Map or Pin will create the new object only in the case
+       no such mapping exists now. Otherwise you will just get the reference to
+       the existing object with increased usecount.</p>
+
+       <dl>
+               <dt>Map</dt>
+               <dd>
+                       <p>Map mapping is always at most one for each
+                       <span class="type">SharedCacheMap</span>. Base offset/length of such
+                       mapping have no meaning as there can be only single Map.</p>
+
+                       <p>Apparently Map size can be arbitrary long according
+                       to its <span class="type">SharedCacheMap</span> reserved space.</p>
+
+                       <p>You cannot modify the memory mapped by Map in any way.
+                       As it is the same memory area (address) as the pages used by Pin
+                       objects you always access the last modified version by possible
+                       Pin of the same page.</p>
+               </dd>
+
+               <dt>Pin</dt>
+               <dd>
+                       <p>Pin mapping always represents just one physical page
+                       (<span class="constant">PAGE_SIZE</span> &nspan; 4096 for i386).
+                       Its base offset/length can be safely extended to be aligned to the
+                       requested page.</p>
+
+                       <p>Pin can have associated pair of oldest and newest
+                       <span class="type>LSN</span> (Linear Sequence Number). It can be
+                       set by <span class="function">CcSetDirtyPinnedData()</span>
+                       and Cache Manager always tracks the lowest and highest
+                       reported <span class="type>LSN</span> for each page.
+                       <span class="type>LSN</span> is assumed to be
+                       <span class="constant">0</span> if not set.</p>
+
+                       <p>Any existing Pin mapping will be reused for further mappings
+                       as long as it is not ThreadOwned. In the moment you use
+                       <span class="function">CcSetBcbOwnerPointer()</span> you will detach
+                       the associated Pin pages from its
+                       <span class="type">SharedCacheMap</span>.
+                       Although they will further act as valid Pin mappings they will be no
+                       longer reused during new Pin mapping of the same page.
+                       There can exist multiple Pin mappings of the same page (although
+                       sharing the same memory space). This detaching must be implemented
+                       even in the
+                       @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} W32 implementation
+                       of this project as it is affecting the behaviour of Cache Manager.
+                       It was never
+                       @{[ a_href 'CacheManager.html.pl#TraceFS','seen' ]} how to behave if multiple dirty Pin
+                       mappings of the same page exist.</p>
+               </dd>
+       </dl>
+
+       <p>Only the pages not yet present in the memory must be read from the disk.
+       You must not read any pages you do not need to as the driver does not
+       expect it and it would corrupt its data buffers. There is just a&nbsp;strict
+       difference between <span class="function">CcPinRead()</span> and
+       <span class="function">CcPinMappedData()</span> function calls where
+       <span class="function">CcPinRead()</span> is required to re-read its data
+       blocks even if they were currently already Map mapped (unless it was already
+       also Pin mapped at least once). On the opposite side
+       <span class="function">CcPinMappedData()</span> must not re-read the given
+       blocks, moreover it blocks are required to be already Map mapped by the caller.</p>
+
+       <p>Cache Manager of this project will destroy Pin or Map mappings after
+       their last unreferencing (in opposite of
+       @{[ a_href 'sharedcachemap_leak','leaked <span class="type">SharedCacheMap</span>' ]}).
+       Despite it any dirty pages may still be held as the pages
+       (including their <span class="type>LSN</span>s) are cached associated
+       with <span class="type">SharedCacheMap</span>. It may be also possible
+       original <span class="productname">Microsoft Windows</span> 
+       <span class="productname">Cache Manager</span>
+       postpones Pin mapping destroy to later time but it does not matter.</p>
+
+
+       <a name="TraceFS"><h2>TraceFS NT Cache Manager Tracer</h2></a>
+
+               <p>@{[ a_href '#cache_manager','Cache Manager behaviour' ]} would be hard
+               to analyze just by @{[ a_href '#reverse','reverse engineering' ]} as it
+               is pretty complicated code cooperating with many other W32 kernel
+               subsystems. It was chosen as easier way to trace it instead and validate
+               all the Cache Manager assumptions by Cache Manager simulator.</p>
+
+               @{[ doc_img 'dia/TraceFS','TraceFS Hooking' ]}
+
+               <p>You must prepare your driver to be hooked
+               (<span class="fname">ntfs.sys</span> in this case):</p>
+
+               <blockquote class="command">
+                       <p>@{[ captive_srcfile './src/TraceFS/hookfs.pl' ]} ntfs.sys ./src/TraceFS/TraceFS-W32/TraceFS.sys &gt;hooked/ntfs.sys</p>
+               </blockquote>
+
+               <p>This <span class="fname">hooked/ntfs.sys</span> file must be replaced
+               in the <span class="fname">%System32%\\drivers</span> directory.
+               Beware as
+               <span class="productname">Microsoft Windows</span>
+               has many backups of these system files such as
+               <span class="fname">%System32%\\dllcache</span> &mdash; delete them
+               all!</p>
+
+               <p>You also need to install
+               <span class="fname">./src/TraceFS/TraceFS-W32/TraceFS.sys</span>
+               into <span class="fname">%System32%\\drivers</span> directory
+               and import <span class="fname">TraceFS/TraceFS-W32/TraceFS.reg</span>
+               registry file to initialize the debug driver during system boot.</p>
+
+               <p>You can now pray a bit and snap the resulting Cache Manager tracing
+               from <span class="productname">WinDbg</span> by
+               @{[ a_href 'Reverse.html.pl#WinDbg','W32 remote kernel debugging' ]}:</p>
+
+               @{[ doc_img 'ntdebug-windbg-boot','Successfuly connected <span class="productname">WinDbg</span>' ]}
+
+               <p>The resulting trace file should be processed by
+               @{[ captive_srcfile './src/TraceFS/checktrace.pl' ]} Perl Cache Manager
+               implementation to validate its assumptions about Cache Manager behaviour.
+               Any seen incompatibilies will be reported &mdash; your target is to reach
+               as few error messages as possible.</p>
+
+               <p>KNOWN BUGS: Combination of message synchronization primitives and
+               implemented refusal to create journalling thread of
+               <span class="fname">ntfs.sys</span>
+               causes fatal system lockup in several advanced operations
+               such as setting compression attribute. Despite it more common operations
+               can be successfuly traced during the whole
+               <span class="productname">Microsoft Windows</span>
+               session including its final shutdown and such traces provide enough
+               material to be food to
+               @{[ captive_srcfile './src/TraceFS/checktrace.pl' ]} Perl Cache Manager
+               validator.</p>
+
+               <a name="TraceFS_general"><h3>TraceFS for general API tracing</h3></a>
+
+                       <p>Although TraceFS was up to now used only for tracing of
+                       <span class="productname">NT Cache Manager</span> it can be easily
+                       used ever for any other NT kernel API tracing. You need to provide
+                       appropriate function wrappers in the main source file
+                       @{[ captive_srcfile './src/TraceFS/TraceFS-W32/TraceFS.c' ]}.
+                       Original system functions being wrapped should be called with their
+                       original name. Your wrapping functions should have the first letter
+                       of their name replaced by character
+                       <span class="command">'T'</span>. Therefore wrapping of
+                       <span class="function">CcInitializeCacheMap()</span> must be
+                       done by your function
+                       <span class="function">TcInitializeCacheMap()</span>.
+                       Prototypes of both the wrapping and wrapped functions must be the same.
+                       You must also export all the wrapped functions by
+                       @{[ captive_srcfile './src/TraceFS/TraceFS-W32/TraceFS.def' ]}.
+                       @{[ captive_srcfile './src/TraceFS/hookfs.pl' ]} has no hardcoded
+                       function names &ndash; it will hook exactly the exported entries.</p>
+
+                       <p>Framework for thread synchronizations and debug tracing is provided to
+                       prevent mangling of messages while running by multiple threads at once.
+                       Testing was done just on uniprocessor machine, SMP kernel may need some
+                       fixes.</p>
+               
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/CallType.html.pl b/project/captive/doc/CallType.html.pl
new file mode 100755 (executable)
index 0000000..d1e3049
--- /dev/null
@@ -0,0 +1,163 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Calling Types page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::CallType;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: API Calling Conventions',
+               "rel_prev"=>'APITypes.html.pl',
+               "rel_next"=>'TODO.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<a name="calltype"><h1>API Function Calling Conventions</h1></a>
+
+       <p>Standard UNIX code compiled by GCC (GNU C&nbsp;Compiler) running on host
+       $gnulinux always uses @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl' ]} ABI (Application
+       Binary Interface) calling convention. This calling convention is also the
+       default declaration type of UNIX functions.</p>
+
+       <p>W32 uses three different calling conventions in its ABI. They are all
+       described in the
+       <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_core_argument_passing_and_naming_conventions.asp"><span class="productname">Microsoft</span> documentation</a>.
+       There is always necessary to have the proper function declaration
+       (prototype) in the caller scope to prevent all sorts of unexpected
+       crashes.</p>
+
+       <p>Unfortunately some non-matching combinations of calling conventions
+       result in hard to debug bugs: the caller gets back an unexpected stack
+       pointer from the callee and upon return it will restore registers from the
+       wrong stack pointer place. Since the caller will finally reclaim its stack
+       frame from its (uncorrupted) <span class="constant">EBP</span> stack frame
+       pointer the caller will return to the caller of the caller correctly. Just
+       the registers remain corrupted causing crashes of completely unrelated code
+       executed far, far away...</p>
+
+       <p><span class="constant">EDI</span>, <span class="constant">ESI</span> and
+       <span class="constant">EBX</span> registers are always saved on the stack.
+       They are stored on the stack in this particular order from bottom to top
+       addresses (using the <span class="instruction">push EBX</span>,
+       <span class="instruction">push ESI</span>,
+       <span class="instruction">push EDI</span> sequence). Fortunately $gnulinux
+       GCC has the same register saving behaviour. If some register corruption
+       occurs the calling type presented between the caller and callee should be
+       checked.</p>
+
+       <a name="calltype_cdecl"><h2>W32 Calling Convention &quot;cdecl&quot;</h2></a>
+
+               <p>The only calling convention in the UNIX world. The default one for all
+               the compilers. All the arguments are passed on the stack, no arguments
+               are cleaned by the callee. Possible inconsistencies in the number of
+               function arguments with the function prototype used by the caller is
+               harmless. Variable arguments lists can be passed by this convention.</p>
+
+               @{[ doc_img 'fig/calltype_cdecl',
+                               'W32 Calling Convention <span class="constant">cdecl</span> Scheme' ]}
+
+               <table border="1" align="center">
+                       <tr><td>Arguments freed by         </td><td>caller</td></tr>
+                       <tr><td>Arguments on the stack     </td><td>#0 ... #(n-1)</td></tr>
+                       <tr><td>Arguments in the registers </td><td>none</td></tr>
+                       <tr><td>GCC attribute              </td><td><span class="command">__attribute__((__cdecl__))</span> (default)</td></tr>
+                       <caption>Calling Convention <span class="constant">cdecl</span> Characteristics</caption>
+               </table>
+
+       <a name="calltype_stdcall"><h2>W32 Calling Convention &quot;stdcall&quot;</h2></a>
+
+               @{[ doc_img 'fig/calltype_stdcall',
+                               'W32 Calling Convention <span class="constant">stdcall</span> Scheme' ]}
+
+               <p>Convention never used in the UNIX world. It needs to be specified for
+               W32 compilers. All the arguments are passed on the stack, all the
+               arguments are cleaned by the callee. Possible inconsistencies in the
+               number of function arguments with the function prototype used by the
+               caller will result in fatal crash. Variable arguments lists cannot be
+               passed by this convention &ndash; use @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl' ]}
+               instead.</p>
+
+               <table border="1" align="center">
+                       <tr><td>Arguments freed by         </td><td>callee</td></tr>
+                       <tr><td>Arguments on the stack     </td><td>#0 ... #(n-1)</td></tr>
+                       <tr><td>Arguments in the registers </td><td>none</td></tr>
+                       <tr><td>GCC attribute              </td><td><span class="command">__attribute__((__stdcall__))</span></td></tr>
+                       <caption>Calling Convention <span class="constant">stdcall</span> Characteristics</caption>
+               </table>
+
+       <a name="calltype_fastcall"><h2>W32 Calling Convention &quot;fastcall&quot;</h2></a>
+
+               <p>Convention never used in the UNIX world. It needs to be specified for
+               W32 compilers. Convention used in the W32 world for its low calling
+               overhead. All but the first two arguments are passed on the stack, such
+               arguments are cleaned by the callee. First two arguments are passed in
+               the registers <span class="constant">ECX</span> and
+               <span class="constant">EDX</span> respectively. Possible inconsistencies
+               in the number of function arguments with the function prototype used by
+               the caller will result in fatal crash. Variable arguments lists cannot be
+               passed by this convention &ndash; use @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl' ]}
+               instead.</p>
+
+               <p>GCC (GNU C&nbsp;Compiler) native support for this calling convention
+               is pretty fresh and it is currently present only in the recent CVS
+               versions since 21st December of 2002 which should get released as GCC
+               version 3.4. This project solved the unsupported calling convention by
+               declaration of arguments passed in registers by
+               <span class="command">__attribute__((__regparm__(3)))</span>.
+               W32 passes the arguments in registers in the order
+               <span class="constant">ECX</span>, <span class="constant">EDX</span> but
+               GCC passes them in registers <span class="constant">EAX</span>,
+               <span class="constant">EDX</span>, <span class="constant">ECX</span>.
+               This incompatibility is compensated at C&nbsp;source level in the
+               @{[ a_href '#functype','relaying code' ]} generated by
+               <span class="fname">captivesym</span> relay generator.</p>
+
+               @{[ doc_img 'fig/calltype_fastcall',
+                               'W32 Calling Convention <span class="constant">fastcall</span> Scheme' ]}
+
+               <table border="1" align="center">
+                       <tr><td>Arguments freed by         </td><td>callee</td></tr>
+                       <tr><td>Arguments on the stack     </td><td>#2 ... #(n-1)</td></tr>
+                       <tr><td>Arguments in the registers </td><td><span class="constant">ECX</span>=#0,
+                                                                                                                                                                                                       <span class="constant">EDX</span>=#1</td></tr>
+                       <tr><td>GCC &ge;3.4 attribute      </td><td><span class="command">__attribute__((__fastcall__))</span></td></tr>
+                       <tr><td>GCC &lt;3.4 attr. emulation</td><td><span class="command">__attribute__((__stdcall__))</span></td></tr>
+                       <tr><td>                           </td><td><span class="command">__attribute__((__regparm__(3) /* EAX,EDX,ECX */))</span></td></tr>
+                       <caption>Calling Convention <span class="constant">fastcall</span> Characteristics</caption>
+               </table>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/Components.html.pl b/project/captive/doc/Components.html.pl
new file mode 100755 (executable)
index 0000000..c182074
--- /dev/null
@@ -0,0 +1,279 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Components page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Components;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: Components',
+               "rel_prev"=>'Architecture.html.pl',
+               "rel_next"=>'Reverse.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<h1>Project Components</h1>
+
+       @{[ doc_img 'dia/arch-all','Project Components Architecture' ]}
+
+       <p>Most of the work of this project is located in the single box called
+       &quot;<span class="constant">libcaptive</span>&quot; located in the center
+       of the scheme. This component implements the core W32 kernel API by
+       various methods described in this document.
+       The &quot;<span class="constant">libcaptive</span>&quot; box cannot be
+       further dissected as it is just an implementation of a&nbsp;set of
+       @{[ captive_srcfile 'src/libcaptive/ke/exports.captivesym','API functions' ]}.
+       It could be separated to several subsystems such as the
+       @{[ a_href '#cache_manager','Cache Manager' ]},
+       Memory Manager, Object Manager, Runtime Library, I/O&nbsp;Manager
+       etc. but they have no interesting referencing structure.</p>
+
+       <p>As this project is in fact just a&nbsp;filesystem implementation every
+       story must begin at the device file and end at the filesystem operations
+       interface. The unified suppported interfaces are
+       <span class="productname">@{[ a_href 'http://developer.gnome.org/doc/API/2.0/glib/','GLib' ]}</span>
+               (the most low level portability, data-types and utility library for Gnome)
+       <span class="type">GIOChannel</span> (for the device access) and the custom
+       <span class="constant">libcaptive</span> filesystem API. Each of these ends
+       can be connected either to some direct interface (such as the
+       <span class="constant">captive-cmdline</span> client),
+       @{[ a_href 'http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)' ]}
+       or as a general $GnomeVFS filter.
+       @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} will be used in
+       most cases as it offers standard filesystem interface by Linux kernel.
+       
+       You can also use $GnomeVFS as it offers nice filter interface on
+       the UNIX user-privileges level for transparent operation with archives and
+       network protocols. This filter interface was used by this project to turn
+       the device reference such as <span class="fname">/dev/hda3</span> or <span
+       class="fname">/dev/discs/disc0/part3</span> to the fully accessible
+       filesystem (pretending being an &quot;archive&quot; in the device
+       reference). This device access can be specified by $GnomeVFS URLs such as:
+       <span
+       class="fname">file:///dev/hda3#captive-fastfat:/autoexec.bat</span></p>
+
+       <span class="constant">captive-bug-replay</span> serves just for debugging
+       purposes &mdash; you can 'replay' existing
+       <span class="fname">file.captivebug.xml.gz</span> automatically being
+       generated during W32 filesystem failure. This bugreport file will contain
+       all the touched data blocks of the device used in the moment of the
+       failure. <span class="constant">captive-bug-replay</span> will therefore
+       emulate internal virtual writable device out of these bugreported data.
+
+       <p>If the passed device reference is requested by the user to be accessed
+       either in <span class="dashdash">--ro</span> (read-only) mode or in the
+       <span class="dashdash">--rw</span> (full read-write) mode there are no
+       further device layers needed. Just in the case of <span
+       class="dashdash">--blind</span> mode another layer is involved to emulate
+       read-write device on top of the real read-only device by the method of
+       non-persistent memory buffering of all the possible write requests.</p>
+
+       <span class="constant">sandbox commit buffer</span> is involved only in the
+       case @{[ a_href 'Details.html.pl#sandbox','sandboxing feature' ]} is active. It will
+       buffer any writes to the device during the sandbox run to prevent
+       filesystem damage if the driver would fail in the meantime. If the
+       filesystem gets finally successfully unmounted this sandbox buffer can be
+       <a name="safe_flush">safely flushed</a>
+       to its underlying physical media. The buffer will be dropped
+       in the case of filesystem failure, of course. The filesystem should be
+       unmounted from time to time &mdash; it can be transparently unmounted and mounted
+       by <span class="command">commit</span> of
+       <span class="constant">captive-cmdline</span> custom client. Currently you
+       cannot force remounting when using
+       @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} interface client
+       but it will be remounted after approx each 1MB data written automatically
+       due to @{[ a_href '#log_file_full','NTFS log file full' ]}.
+
+       Now we need to transparently
+       @{[ captive_srcfile 'src/libcaptive/sandbox/sandbox.idl','connect' ]}
+       the device interface of <span class="type">GIOChannel</span> type through
+       @{[ a_href 'Details.html.pl#sandbox','CORBA/ORBit' ]} to the sandboxed slave.
+
+       <p>Such device is still only a&nbsp;UNIX style GLib <span
+       class="type">GIOChannel</span> type at this point. As we need to supply it
+       to the W32 filesystem driver we must convert it to the W32 I/O&nbsp;Device
+       with its capability of handling <span class="type">IRP</span>
+               (<span class="constant">I/O Request Packet</span>; structure holding the
+               request and result data for any W32 filesystem or W32 block device
+               operation)
+       requests from its upper W32 filesystem driver. Such W32 I/O&nbsp;Device can
+       represent either <span class="type">CD-ROM</span> or
+       <span class="type">disk</span> device type as different W32 filesystem
+       drivers require different media types &mdash; currently only
+       <span class="fname">cdfs.sys</span> requires
+       <span class="type">CD-ROM</span> type.</p>
+
+       <p>W32 media I/O&nbsp;Device is accessed from the W32 filesystem driver.
+       The filesystem driver itself always creates volume object by
+       <span class="function">IoCreateStreamFileObject()</span> representing the
+       underlying W32 media I/O&nbsp;Device as the object handled by the
+       filesystem driver itself. All the client application filesystem requests
+       must be first resolved at the filesystem structures level, passed to the
+       volume stream object of the same filesystem and then finally passed to the
+       W32 media I/O&nbsp;Device (already implemented by this project as an
+       interface to <span class="type">GIOChannel</span> noted above).</p>
+
+       <p>The filesystem driver is called by the core W32 kernel implementation of
+       <span class="constant">libcaptive</span> in
+       @{[ a_href 'Details.html.pl#synchronous','synchronous way' ]} in single-shot manner instead of
+       the several reentrancies while waiting for the disk I/O completions as can
+       be seen in the original
+       <span class="productname">Microsoft Windows NT</span>.
+       This single-shot synchronous behaviour is possible since all the needed
+       resources (disk blocks etc.) can be always presented as instantly ready as
+       their acquirement is solved by @{[ a_href 'hostosnote','Host-OS' ]} outside of
+       the W32 emulated @{[ a_href 'guestosnote','Guest-OS' ]} environment.
+       For several cases needed only by <span class="fname">ntfs.sys</span> 
+       there had to be supported asynchronous access &mdash; parallel execution
+       is emulated by GLib <span class="function">g_idle_add_full()</span>
+       with <span class="function">g_main_context_iteration()</span> called during
+       <span class="function">KeWaitForSingleObject()</span>.</p>
+
+       <p><span class="constant">libcaptive</span> offers the W32 kernel
+       filesystem API to the upper layers. This is still not the API the common
+       W32 applications are used to as they use W32 libraries which in turn pass
+       the call to W32 kernel.  For example
+       <span class="function">CreateFileA()</span> is being implemented by several
+       libraries such as <span class="fname">user32.dll</span> as a relay
+       interface for the kernel function
+       <span class="function">IoCreateFile()</span> implemented by this
+       project's&nbsp;<span class="constant">libcaptive</span> W32 kernel
+       emulation component.</p>
+
+       <p>As it would be very inconvenient to use the legacy, bloated and UNIX
+       style unfriendly W32 kernel filesystem API this project offers its own
+       @{[ a_href '#client_interface','custom filesystem API interface' ]} inspired by
+       the $GnomeVFS client interface adapted to the specifics of W32 kernel API.
+       This interface is supposed to be easily utilized by
+       <a href="#client_interface_customapp">a&nbsp;custom application accessing
+       the W32 filesystem driver</a>.</p>
+
+       <p>@{[ a_href 'Details.html.pl#sandbox','CORBA/ORBit' ]} hits us again &ndash; we need to
+       @{[ captive_srcfile 'src/libcaptive/sandbox/sandbox.idl','translate' ]}
+       the @{[ a_href '#client_interface','custom filesystem API interface' ]}
+       out of the sandboxed slave to the UNIX space.</p>
+
+       <p><span class="constant">captive sandbox master</span> provides the
+       functionality of covering any possible sandboxed slave restarts and its
+       communication. It is also capable of
+       <a name="demultiplexing_master">demultiplexing single API operations</a>
+       to multiple its connected sandbox slaves in transparent way
+       as each of them handles
+       @{[ a_href 'Details.html.pl#mounted_one','just one filesystem device' ]}.</p>
+
+       <p>The rest of the story is not much special for this project since this is
+       a common UNIX problem how to offer user space implemented UNIX filesystem
+       as a generic system filesystem (as those are usually implemented only as
+       the components od UNIX kernel).</p>
+
+       <p>The filesystem service can be offered in several ways:</p>
+
+       <dl>
+               <dt>Custom client</dt>
+               <dd>
+                       <p>One possibility would be to write
+                       <a name="client_interface_customapp">a custom client application</a>
+                       for this project such as file manager or a&nbsp;shell. Although it
+                       would implement the most appropriate user interface to the set of
+                       functions offered by this project (and W32 filesystem API) it has the
+                       disadvantage of special client software. Appropriate client is provided
+                       by this project as:
+                       <span class="fname">src/client/cmdline/cmdline-captive</span></p>
+               </dd>
+
+               <dt>@{[ a_href 'http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)' ]}</dt>
+               <dd>
+                       <p>The most usable interface is the
+                       @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} client
+                       by <span class="constant">liblufs-captivefs</span>.
+                       As @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]}
+                       already assigns separate process for each filesystem mount the
+                       @{[ a_href '#demultiplexing_master','demultiplexing feature' ]}
+                       is not utilized in this case.</p>
+
+                       <p>@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]}
+                       needs multiple operating threads (each UNIX kernel operation needs
+                       one free lufsd slot/thread to not to fail immediately).
+                       As <span class="constant">libcaptive</span> is
+                       @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} all the operations
+                       get always synchronized by
+                       <span class="constant">liblufs-captivefs</span>
+                       before their pass over to <span class="constant">libcaptive</span>.</p>
+               </dd>
+
+               <dt>@{[ a_href '#offered_gnomevfs','Gnome-VFS' ]}</dt>
+               <dd>
+                       <p>This client allowing its filesystem access even without any
+                       involvement of UNIX kernel from any $GnomeVFS aware client application
+                       (such as <span class="fname">gnome-vfs/tests/test-shell</span>).
+                       This @{[ a_href '#offered_gnomevfs','Gnome-VFS interface' ]} connects the
+                       data flow of this project in two points &mdash; both as the lowest layer
+                       device image source and also as the upper layer for the filesystem
+                       operation requests.</p>
+               </dd>
+       </dl>
+
+       <p>Unimplemented and deprecated methods for providing filesystem
+       service:</p>
+
+       <dl>
+               <dt>W32 filesystem in UNIX OS kernel</dt>
+               <dd>
+                       <p>The real UNIX OS filesystem implementation must be completely
+                       implemented inside the hosting OS kernel. This requires special coding
+                       methods with limited availability of coding features and libraries.
+                       Also it would give the full system control to the untrusted W32
+                       filesystem driver code with possibly fatal consequences of yet
+                       unhandled W32 emulation code paths. It would benefit from the best
+                       execution performance but this solution was never considered a real
+                       possibility.</p>
+               </dd>
+
+               <dt>Custom NFS server</dt>
+               <dd>
+                       <p>The common approach
+                       <a name="offered_NFS">of filesystem implementations</a>
+                       outside UNIX OS kernel were custom NFS servers usually running on the
+                       same machine as the NFS-connected client as such NFS server is usually
+                       an ordinary UNIX user space process. It would be possible to implement
+                       this project as a&nbsp;custom NFS server but the NFS protocol itself
+                       has a&nbsp;lot of fundamental flaws and complicated code for backward
+                       compatibility.</p>
+               </dd>
+       </dl>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/Details.html.pl b/project/captive/doc/Details.html.pl
new file mode 100755 (executable)
index 0000000..be27aab
--- /dev/null
@@ -0,0 +1,504 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Details page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Details;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: Implementation Details',
+               "rel_prev"=>'CacheManager.html.pl',
+               "rel_next"=>'APITypes.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<h1>Implementation Details</h1>
+
+       <a name="emulmeth"><h2>Choice of the Emulation Methods</h2></a>
+
+               <p>The intent of the project was to get reliable read-write access to
+               <span class="productname">NTFS</span> partition. There are several possible
+               ways to achieve that:</p>
+
+               <a name="emulmeth_vm"><h3>Virtualmachine Running the Original W32 Subsystem</h3></a>
+
+                       <p>Creating virtual-hardware PC and running the original W32 binaries
+                       including their boot-loader etc. Disk device access would be passed as
+                       virtual IDE disk (=hard disk drive). File access API would be implemented
+                       either by special escaping by some trapped instruction out of the
+                       virtualmachine while using W32 file access API or using the standard W32
+                       SMB (Server Message Block) network access through some virtual network
+                       card. The latter network access solution is almost the currently available
+                       possibility of running full-blown disk-sharing real
+                       <span class="productname">Microsoft Windows NT</span> inside virtual
+                       machine emulator such as <span class="productname">VMware</span>.</p>
+
+                       <p>pros: Full compatibility due to fully native codebase.</p>
+
+                       <p>cons: Hard to debug, missing documentation of NT booting internals,
+                       possible problems by different PC virtual-hardware than expected by NT,
+                       requirement of fully installed
+                       <span class="productname">Microsoft Windows NT</span> product.</p>
+
+               <a name="method_ntoskrnl"><h3>&quot;ntoskrnl.exe&quot; Inside Virtual Address Space</h3></a>
+
+                       <p>This solution was chosen by the project. Binary filesystem driver and
+                       also <span class="fname">ntoskrnl.exe</span> binary file are required.
+                       Unfortunately <span class="fname">ntoskrnl.exe</span> expects a&nbsp;native
+                       PC virtual-hardware missing during regular UNIX user space process
+                       emulation, therefore such instructions must be trapped and emulated/ignored
+                       from case to case.</p>
+
+                       <p>Also the <a name="init_ntoskrnl">initialization code of <span
+                       class="fname">ntoskrnl.exe</span></a> is not executed by this project since
+                       it expects to get full PC hardware access privileges and thus some
+                       datastructures do not get initialized by it (need to be trapped later at
+                       runtime stage). Some of the missing initializations are solved by
+                       @{[ a_href 'APITypes.html.pl#functype_wrap','API functions wrapping' ]}.
+
+                       <p>pros: Lightweight, easier to debug.</p>
+
+                       <p>cons: Possible incompatible emulation of
+                       <span class="fname">ntoskrnl.exe</span> parts, missing documentation needed
+                       for the implementation.</p>
+
+               <a name="emulmeth_fs"><h3>Filesystem Driver Inside Virtual Address Space</h3></a>
+
+                       <p>Unlike @{[ a_href 'Details.html.pl#method_ntoskrnl','previous method' ]} here we do not use
+                       even <span class="fname">ntoskrnl.exe</span> as the complete kernel part of
+                       W32 is <a name="native_ntoskrnl">emulated from the project source
+                       files</a>. <span class="fname">cdfs.sys</span> driver was successfuly ran
+                       in this manner in the former versions of this project but the possibility
+                       to run without <span class="fname">ntoskrnl.exe</span> was dropped since it
+                       had no licensing gains (you need the original
+                       <span class="productname">Microsoft Windows NT</span> files at least for
+                       the filesystem driver itself) and the emulation of undocumented parts
+                       reusable from <span class="fname">ntoskrnl.exe</span> binary was
+                       a&nbsp;pain.</p>
+
+                       <p>pros: Lightweight, easier to debug.</p>
+
+                       <p>cons: Possible incompatible emulation of the whole
+                       <span class="fname">ntoskrnl.exe</span>, its missing documentation.</p>
+
+
+       <a name="apichoice"><h2>API Function Implementation Choices</h2></a>
+
+               <p>During the initial point of the project development all the API
+               functions were defined as unimplemented, of course. Any call of such
+               unimplemented function is fatal and results in program termination. When we
+               need to implement any required API function we have multiple choices to do
+               so:
+               @{[ a_href 'APITypes.html.pl#functype_pass','Direct pass to original <span class="fname">ntoskrnl.exe</span>' ]},
+               @{[ a_href 'APITypes.html.pl#functype_wrap','Wrap of the original <span class="fname">ntoskrnl.exe</span> function' ]},
+               @{[ a_href 'APITypes.html.pl#functype_native_reactos','Native implementation &ndash; $ReactOS' ]},
+               @{[ a_href 'APITypes.html.pl#functype_native_wine','Native implementation &ndash; $Wine' ]}
+               or
+               @{[ a_href 'APITypes.html.pl#functype_native_libcaptive','Native implementation &ndash; project specific' ]}.
+               <!-- a_href 'APITypes.html.pl#functype_undef','Undefined function' -->
+
+
+       <a name="sandbox"><h2>Sandboxing of W32 Filesystem</h2></a>
+
+               <p>The emulated W32 environment running the original W32 filesystem driver
+               is separated from the rest of UNIX OS. It achieves the following goals:</p>
+
+               <ul>
+                       <li><b>Restartable</b>: W32 driver can be restartde in clean state if it crashed</li>
+                       <li><b>Secure</b>: Malicious W32 code cannot affect the security of UNIX OS</li>
+                       <li><b>Stable</b>: Buggy W32 cannot crash any part of UNIX OS</li>
+               </ul>
+
+               <p>Sandboxing is provided with the following attributes:</p>
+               
+               <ul>
+                       <li>standalone UNIX process with separate memory space</li>
+                       <li>chroot(2) in empty directory to prevent any UNIX OS filesystem access</li>
+                       <li>setuid(2) to own user/group to prevent interaction with UNIX processes</li>
+                       <li>setrlimit(2) to limit system resources available for W32 environment</li>
+                       <li>the only connection with the UNIX OS by CORBA/ORBit RPC</li>
+               </ul>
+
+               <p>This security is almost the same as provided by
+               emulated virtual machines such as
+               @{[ a_href 'http://www.vmware.com/solutions/security.html','VMware' ]}.</p>
+
+               @{[ doc_img 'dia/inheritance','Sandboxing Scheme' ]}
+
+               <p>Project can be also used in non-sandboxed mode by
+               <span class="command">--no-sandbox</span> option as it is easier to debug
+               without CORBA/ORBit RPC. In this case the
+               <span class="type">DirectorySlave</span>/<span class="type">FileSlave</span>
+               options are used directly instead of their
+               <span class="type">DirectoryParent</span>/<span class="type">FileParent</span>
+               peers.</p>
+
+
+       <a name="patched"><h2>&quot;patched&quot; vs. &quot;unpatched&quot; Libraries</h2></a>
+
+               <p>Library is called <span class="constant">patched</span> if we require
+               loading its original binary code file. Project needs to patch it to be able
+               to trap all the function entry points. The only currently
+               <span class="constant">patched</span> library of this project is
+               <span class="fname">ntoskrnl.exe</span>.</p>
+
+               <p>Library is called <span class="constant">unpatched</span> if no original
+               binary code is needed since all of its functions are completely emulated by
+               @{[ a_href 'APITypes.html.pl#functype_native','the native implementations' ]} of this project.
+               The typical <span class="constant">unpatched</span> representative is
+               <span class="fname">hal.dll</span> as it specializes on the hardware
+               dependent code and therefore it must be completely replaced by this project
+               running in the $gnulinux operating system environment. Early versions of
+               this project had also full <span class="constant">unpatched</span>
+               <a href="#native_ntoskrnl">native implementation of
+               <span class="fname">ntoskrnl.exe</span></a> but it no longer applies.</p>
+
+       <a name="mman"><h2>Memory Management</h2></a>
+
+               <p>Original <span class="productname">Microsoft Windows NT</span>
+               architecture uses two address space areas &ndash; user space and kernel space.
+               User space is mapped in the range <span class="constant">0x00000000</span>
+               to <span class="constant">0x7FFFFFFF</span>, kernel space is mapped in the
+               range <span class="constant">0x80000000</span>
+               (<span class="constant">KERNEL_BASE</span> in $ReactOS sources) to
+               <span class="constant">0xFFFFFFFF</span>. All these virtual memory ranges
+               represent addresses after their MMU (Memory Management Unit) mapping, of
+               course. More discussion can be found in the
+               <a href="http://www.microsoft.com/hwdev/platform/server/PAE/PAEmem.asp">description 
+               by <span class="productname">Microsoft</span></a>.</p>
+
+               <p>This project runs in the virtual address space used both for the UNIX
+               user space process part and for the W32 kernel space. Therefore this
+               project defines that W32 kernel runs in the whole range
+               <span class="constant">0x00000000</span> to
+               <span class="constant">0xFFFFFFFF</span> since there are no special mapping
+               assumptions about the UNIX user space process mapping. No W32 user space
+               exists in this project. Such approach also nullifies any special memory
+               moving operations between W32 kernel space and W32 user space memory areas
+               (such as <span class="function">MmSafeCopyToUser()</span>).</p>
+
+       <a name="unicode"><h2>Unicode Strings and Characters</h2></a>
+
+               <p>W32 platform uses 16-bit type <span class="type">wchar_t</span> while $gnulinux uses a
+               32-bit one. This can be problem during GCC (GNU C&nbsp;Compiler)
+               compilation of combination of native UNIX C&nbsp;sources (assuming 32-bit
+               GCC with 32-bit <span class="type">wchar_t</span>) and
+               $ReactOS C sources (assuming W32 compiler with 16-bit
+               <span class="type">wchar_t</span>) for literal wide strings
+               (C source file systax: <span class="command">L&quot;wstring&quot;</span>).
+               Possibilities to solve this issue list:</p>
+
+               <ul>
+                       <li>
+                               <p>Using <span class="constant">-fshort-wchar</span> GCC option and
+                               strictly differentiate between compilation of
+                               <span class="productname">ReactOS</span> code and UNIX code.</p>
+
+                               <p>pros: No source modifications needed, no runtime performance hit.</p>
+
+                               <p>cons: No type checking if some part of code has bad compilation
+                               flags, complicated way to completely split
+                               <span class="productname">ReactOS</span> and UNIX code.</p>
+                       </li>
+                       <li>
+                               <p>Wrap all <span class="productname">ReactOS</span> literal constants
+                               by some conversions function call (implemented as macro
+                               <span class="function">REACTOS_UCS2()</span> by this project).</p>
+
+                               <p>pros: Any forgotten/mistaken conversions are type-checked and warned
+                               during the compilation by GCC.</p>
+
+                               <p>cons: All compiled <span class="productname">ReactOS</span> sources
+                               files containing literal wide strings have to be wrapped/modified,
+                               performance hit by runtime string conversions.</p>
+
+                               <p>This solution was chosen to get the internal sanity checking
+                               benefit.</p>
+                       </li>
+               </ul>
+
+       <a name="binfmt"><h2>Supported Binary Formats</h2></a>
+
+               <p>The native W32 binary format is identified as
+               <span class="constant">PE-32</span> (Portable Executable 32-bit), such
+               files have all the usual extensions such as
+               <span class="fname">.sys</span>, <span class="fname">.exe</span>,
+               <span class="fname">.dll</span> etc. <span class="constant">PE-32</span>
+               loading support was already implemented by $ReactOS, its memory mapping
+               specifics just had to be ported to $gnulinux environment by this project.
+               This loading support does not (yet) cover importing of debug symbols from
+               W32 <span class="fname">.PDB</span> (Program DataBase) files in $gnulinux
+               ABI (Application Binary Interface) compatible way.</p>
+
+               <p>This project also supports transparent loading of UNIX
+               <span class="fname">.so</span> (Shared Object file) binary format. If you
+               have W32 source files for some W32 library you can try to compile it by GCC
+               to get the shared library with $gnulinux ABI compatible debug information
+               (GCC option <span class="constant">-ggdb3</span> recommended). Beware of
+               possible compilation problems as <span class="productname">Microsoft</span>
+               C&nbsp;code expects <span class="constant">exception</span> handling to be
+               supported by the compiler (definitely not the case of the plain C compiler
+               of GCC) &mdash; all the exception catching code should be discarded as any
+               @{[ a_href '#exception_fatal','generated exceptions are always fatal' ]} when
+               such driver is running in the scope of this project. You can use the
+               following script of this project to compile W32 filesystem source files as
+               UNIX <span class="fname">.so</span>:
+               @{[ captive_srcfile 'src/w32-mod/ext2fsd.so-build.sh' ]}</p>
+               
+               <p>Be aware of some differences if you use
+               <span class="constant">PE-32</span> binary format file vs.
+               <span class="fname">.so</span> format file.
+               <span class="constant">PE-32</span> use the appropriate W32 specific
+               @{[ a_href '#calltype','cdecl/stdcall/fastcall call types' ]},
+               <span class="fname">.so</span> must be completely compiled in the standard
+               UNIX @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type semantics' ]}.
+               @{[ a_href 'APITypes.html.pl#functype_native','Native function implementations' ]} do not need
+               to be explicitely exported by <span class="fname">captivesym</span> as they
+               are resolved automatically by the UNIX dynamic system linker. It may be
+               surprising you will have to fix all such missing symbol exports if you
+               advance during the development from the debugging
+               <span class="fname">.so</span> file for the production version of the
+               original <span class="constant">PE-32</span> binary file.</p>
+
+
+       <a name="mounted_one"><h2>At Most One Mounted Filesystem</h2></a>
+
+               <p>The project technically supports only one (exactly one...) mounted
+               filesystem device and only one filesystem driver. There is nothing
+               complicated to support multiple disks and multiple loaded filesystem
+               modules but as they would share the address space it would only bring
+               a&nbsp;possible complications during bug reports and the bug solving
+               itself.  It was considered as a&nbsp;more sane way to support multiple W32
+               mounted disks by completely separately running project instances in
+               a&nbsp;different UNIX processes communicating from their sandboxes via
+               @{[ a_href 'Details.html.pl#sandbox','CORBA sandbox interface' ]}. This sandboxing
+               feature is not yet deployed although its code is already prepared.</p>
+
+               <p>The project also does not support any state cleanup to be able to load
+               filesystem&nbsp;<span class="constant">A</span>,
+               cleanup&nbsp;<span class="constant">A</span> and load a different
+               filesystem&nbsp;<span class="constant">B</span> in the same process address
+               space. It complies with the preventions of the possible debugging
+               complications as noted above. Despite this you still must call the function
+               <span class="function">captive_shutdown()</span> to flush all the pending
+               filesystem buffers to the disk. After calling
+               <span class="function">captive_shutdown()</span> the process address space is
+               no longer usable for any further project operations and the process is
+               expected to be terminated in the manner compatible with its driving
+               @{[ a_href 'Details.html.pl#sandbox','CORBA sandbox interface' ]} control master.</p>
+
+               <p>Each sandbox executing the untrusted W32 binary filesystem driver code
+               is connected through its
+               @{[ a_href 'Details.html.pl#sandbox','CORBA sandbox interface' ]} at the point of upper
+               layer <span class="constant">libcaptive</span>-specific filesystem API, at
+               the point of the bottom layer of <span class="type">GIOChannel</span>
+               device access and also for transfers of GLib logging
+               messages/warnings/errors out of the sandbox to the user.</p>
+
+
+       <a name="synchronous"><h2>Multithreading and Multiple Processors</h2></a>
+
+               <p>W32 platform stands on its&nbsp;thorough architecture parallelism. It
+               must lock all its objects to maintain coherence in presence of
+               multithreading and multiple processors. Since the author of this project
+               considers any parallel execution a serious obstacle for debugging the whole
+               project architecture was designed to prevent any undeterministic behaviour.
+               Therefore this projects always emulates uniprocessor
+               <span class="productname">Microsoft Windows NT</span> kernel
+               (<span class="constant">KeNumberProcessors</span> symbol is always 1),
+               everything runs in the single initial thread/process and all the filesystem
+               operations are performed as synchronous
+                       (&quot;synchronous&quot; by flags
+                       <span class="constant">FILE_SYNCHRONOUS_IO_ALERT</span>,
+                       <span class="constant">FO_SYNCHRONOUS_IO</span>,
+                       <span class="constant">IRP_SYNCHRONOUS_API</span>,
+                       <span class="constant">IRP_SYNCHRONOUS_PAGING_IO</span>,
+                       forced <span class="constant">TRUE</span> result of
+                       <span class="function">IoIsOperationSynchronous()</span>
+                       etc.).
+               For several cases needed only by <span class="fname">ntfs.sys</span> there
+               had to be supported asynchronous access
+               (<span class="constant">STATUS_PENDING</span> return code) &ndash; parallel
+               execution is emulated by GLib
+               <span class="function">g_idle_add_full()</span> with
+               <span class="function">g_main_context_iteration()</span> called during
+               <span class="function">KeWaitForSingleObject()</span>.</p>
+               Since there is a&nbsp;possibility a&nbsp;real W32 parallel threading would
+               be yet needed in the future all the code that would be hit by W32
+               multithreading capability is marked by
+               <span class="constant">TODO:thread</span> comment.</p>
+
+               <p>Multiple processors (SMP) support will never need to be implemented
+               since uniprocessor W32 kernels apparently run the filesystem driver modules
+               fine. As this project implements only the uniprocessor W32 kernel all the
+               processor locking functions and structures such as
+               <span class="constant">KSPIN_LOCK</span> etc. can be safely implemented as
+               no-operations.</p>
+
+               <p>Asynchronous callbacks registered for
+               <span class="constant">IO_WORKITEM</span>s are passed as GLib idle
+               functions by <span class="function">g_idle_add_full()</span>. Although they
+               will probably never be executed during non-interactive project's batch
+               executions it is the&nbsp;responsibility of W32 driver implementation to
+               complete all the pending tasks before its W32 shutdown. Such W32 shutdown
+               is done during cleanup of the project's&nbsp;execution by
+               <span class="function">captive_shutdown()</span>.</p>
+
+       <a name="paranoia"><h2>Paranoia Checks</h2></a>
+
+               <p>A&nbsp;general approach of software projects development is to implement
+               many internal sanity checks during the development stage but to produce the
+               most optimized final release product without those debugging checks.</p>
+
+               <p>Facilities for these practices can be seen in the standard
+               C&nbsp;include files for example as function
+               <span class="function">assert()</span> which gets disabled by the
+               <span class="constant">NDEBUG</span> symbol used during the final optimized
+               executable compilation. This project uses Gnome GLib messaging subsystem
+               offering sanity checks discarded by symbols
+               <span class="constant">G_DISABLE_ASSERT</span> and
+               <span class="constant">G_DISABLE_CHECKS</span>.
+               <span class="productname">Microsoft</span> also produces two versions of
+               its products &ndash; regular customers use the &quot;free build&quot; (also
+               called &quot;retail&quot;) while the programmers should develop their code
+               on the &quot;checked build&quot; product releases.</p>
+
+               <p>As this project will always run unknown binary code of proprietary W32
+               filesystem drivers, the code can never be trusted. Such code even runs in
+               the same unprotected address space as its controlling UNIX code. Since
+               there is not enough documentation for the W32 components of the system and
+               also such documentation is usually misleading it can never be considered as
+               100% emulation. Even in the final releases all the sanity checks
+               implemented in this project should remain active as all the project's code
+               always interacts with unknown and untrusted W32 binaries.</p>
+
+               <p><span class="productname">Microsoft Windows NT</span> code is written in
+               a&nbsp;foolproof style as it accepts even invalid input values, and which
+               it usually corrects. This makes long-term debugging a&nbsp;pain as it hides
+               sources of problems. &quot;Checked build&quot; releases were probably
+               designed to fix this flaw by strict consistency checks but it did not reach
+               its goals as such checks are usually missing in the code.</p>
+
+               <p>This project has strict consistency checks across all the code to make
+               the debugging phase easy enough. Failed sanity check is not always
+               a&nbsp;bug &ndash; sometimes it just means the real W32 binary code is more
+               benevolent than it could be expected according to the documentation and
+               such sanity check gets removed for the next version build. In other cases
+               the failed sanity checks mean the execution path for some unexpected
+               arguments combination was not yet implemented by this project. I may also
+               mean a bug, of course...</p>
+
+               <p>Last but not least &ndash; never miss a&nbsp;possible sanity check as its
+               later removal is in an order of magnitude cheaper than an&nbsp;uncaught
+               invalid assumption. Failed assertion is not always a&nbsp;bug although it
+               has to be fixed, of course.</p>
+
+
+       <a name="logfile"><h2>STATUS_LOG_FILE_FULL</h2></a>
+
+               <p>After writing approx. 1MB of data on NTFS test partition NTFS driver
+               returns for any further write requests
+               <span class="constant">STATUS_LOG_FILE_FULL</status> error code.
+               Apparently it is caused by the fact this project is
+               @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} and it ignores the spawn
+               of parallel journalling thread during <span class="fname">ntfs.sys</span>
+               initialization.</p>
+
+               <p>Fortunately <span class="fname">ntfs.sys</span> will clear its
+               journalling log file during filesystem unmount. This project will therefore
+               remount the volume if <span class="constant">STATUS_LOG_FILE_FULL</status>
+               is detected to workaround missing journalling thread.</p>
+
+               <p>Similiar behaviour can be seen during write of compressed files &mdash;
+               the file gets written uncompressed and its compression will proceed only
+               during the final filesystem unmount.</p>
+
+               <p>For these reasons it was mandatory to support
+               @{[ a_href 'Details.html.pl#parent_connector','transparent volume remounting' ]}.</p>
+
+
+       <a name="parent_connector"><h2><span class="constant">ParentConnector</span> volume remounter</h2></a>
+
+               <p>The sandbox master component of this project has control of restarting
+               its sandbox slaves containing the W32 filesystem. Target goal of
+               <span class="constant">ParentConnector</span> component is to transparently
+               provide persistent view of files and directories over the sandboxed slaves
+               being restarted.</p>
+               
+               <p>In the case of read-only operations it would be simple as we could only
+               save our state of currently opened filesystem objects with their read
+               file/directory offset. Write operations can be handled as the read-only
+               ones as long as all the operations are successful. In the case of W32
+               filesystem crash we loose all the past write operations. If we would redo
+               all the write operations we could very easily invoke the same crash.
+               Therefore we write:</p>
+
+                       <blockquote class="command">
+                               <p>Filesystem crash broke dirty object: FILE/PATH/NAME</p>
+                       </blockquote>
+
+               <p>message to syslog and refuse any further operations with this
+               object.</p>
+
+               @{[ doc_img 'dia/parent-connector','Parent Connector' ]}
+
+               <p><span class="constant">HANDLE</span> represents W32 object open in
+               existing W32 filesystem.<span class="constant">HANDLE</span> is created
+               on-demand according to the saved state of the object (such as its
+               pathname). Even the whole <span class="constant">VFS</span> sandbox slave
+               is spawn on-demand if some object operation requests it.</p>
+
+               <p>W32 filesystem crash can obviously occur at any moment - it generates
+               @{[ a_href 'http://developer.gnome.org/doc/API/2.0/gobject/','GObject' ]}
+               @{[ a_href 'http://developer.gnome.org/doc/API/2.0/gobject/gobject-Signals.html','signal' ]}
+               <span class="constant">abort</span>. Successful filesystem unmount
+               (even as the part of remount operation) must be first preceded by
+               <span class="constant">detach</span> signal to close all existing
+               W32 <span class="constant">HANDLE</span>s. After their close the filesystem
+               gets the unmount requests. Only in the case all the close operations
+               succeeded including the final filesystem unmount the signal
+               <span class="constant">cease</span> can be activated to notify all the
+               dirty (written) objects they are now clean. During this
+               <span class="constant">cease</span> signal the project will also
+               @{[ a_href '#safe_flush','flush' ]} the sandbox commit buffer to its
+               underlying media.</p>
+
+               <p>Objects never written remain in <span class="constant">clean</span>
+               state and they can be transparently reopened even if W32 filesystem crash
+               occurs.</p>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/Index.html.pl b/project/captive/doc/Index.html.pl
new file mode 100755 (executable)
index 0000000..3e7262f
--- /dev/null
@@ -0,0 +1,163 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Index page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation',
+               "rel_next"=>'About.html.pl',
+               "rel_up"=>top_dir("/project/captive/"),
+               );
+
+
+print <<"HERE";
+
+
+<h1>Captive NTFS Developer Documentation</h1>
+
+<ul>
+
+<li><a href="About.html.pl">About</a>
+       <ul>
+       <li><a href="About.html.pl#reasons">Reasons for the Implementation</a></li>
+       <li><a href="About.html.pl#challenges">Challenges of the Project</a></li>
+       <li><a href="About.html.pl#versions">Microsoft Windows Versions Compatibility</a></li>
+       </ul></li>
+
+<li><a href="Architecture.html.pl">Architecture</a>
+       <ul>
+       <li><a href="Architecture.html.pl#existing_emulation">Existing Emulation Projects</a></li>
+       <li><a href="Architecture.html.pl#law">Laws and Licensing Conditions</a>
+               <ul>
+               <li><a href="Architecture.html.pl#law_servicepack">Microsoft Service Pack</a></li>
+               </ul></li>
+
+       <li><a href="Components.html.pl">Project Components</a></li>
+
+       <li><a href="Reverse.html.pl">Reverse Engineering</a>
+               <ul>
+               <li><a href="Reverse.html.pl#dumpbin">dumpbin.exe</a></li>
+               <li><a href="Reverse.html.pl#WinDbg">WinDbg Windows NT kernel debugging</a>
+                       <ul>
+                       <li><a href="Reverse.html.pl#WinDbg_WinDbg">WinDbg side setup</a></li>
+                       <li><a href="Reverse.html.pl#WinDbg_kern">Setup of the side being kernel-debugged</a></li>
+                       </ul></li>
+               </ul></li>
+       </ul></li>
+
+<li><a href="Details.html.pl">Implementation Details</a>
+
+       <ul>
+       <li><a href="CacheManager.html.pl">NT Cache Manager</a>
+               <ul>
+               <li><a href="CacheManager.html.pl#TraceFS">TraceFS NT Cache Manager Tracer</a>
+                       <ul>
+                       <li><a href="CacheManager.html.pl#TraceFS_general">TraceFS for general API tracing</a></li>
+                       </ul></li>
+               </ul></li>
+
+       <li><a href="Details.html.pl#emulmeth">Choice of the Emulation Methods</a>
+               <ul>
+               <li><a href="Details.html.pl#emulmeth_vm">Virtualmachine Running the Original W32 Subsystem</a></li>
+               <li><a href="Details.html.pl#method_ntoskrnl">&quot;ntoskrnl.exe&quot; Inside Virtual Address Space</a></li>
+               <li><a href="Details.html.pl#emulmeth_fs">Filesystem Driver Inside Virtual Address Space</a></li>
+               </ul></li>
+       <li><a href="Details.html.pl#apichoice">API Function Implementation Choices</a></li>
+       <li><a href="Details.html.pl#sandbox">Sandboxing of W32 Filesystem</a></li>
+       <li><a href="Details.html.pl#patched">&quot;patched&quot; vs. &quot;unpatched&quot; Libraries</a></li>
+       <li><a href="Details.html.pl#mman">Memory Management</a></li>
+       <li><a href="Details.html.pl#unicode">Unicode Strings and Characters</a></li>
+       <li><a href="Details.html.pl#binfmt">Supported Binary Formats</a></li>
+       <li><a href="Details.html.pl#mounted_one">At Most One Mounted Filesystem</a></li>
+       <li><a href="Details.html.pl#synchronous">Multithreading and Multiple Processors</a></li>
+       <li><a href="Details.html.pl#paranoia">Paranoia Checks</a></li>
+       <li><a href="Details.html.pl#logfile">STATUS_LOG_FILE_FULL</a></li>
+       <li><a href="Details.html.pl#parent_connector">ParentConnector volume remounter</a></li>
+
+       <li><a href="../apiref/">Captive API Reference Manual (fragment)</a></li>
+
+       <li><a href="APITypes.html.pl">API Function Implementation Choices</a>
+               <ul>
+               <li><a href="APITypes.html.pl#functype_pass">Direct Pass to Original &quot;ntoskrnl.exe&quot;</a>
+                       <ul>
+                       <li><a href="APITypes.html.pl#functype_pass_fromunix">Pass from UNIX Code</a></li>
+                       <li><a href="APITypes.html.pl#functype_pass_fromw32">Pass from W32 Code</a></li>
+                       </ul></li>
+               <li><a href="APITypes.html.pl#functype_wrap">Wrap of the Original "ntoskrnl.exe" Function</a>
+                       <ul>
+                       <li><a href="APITypes.html.pl#functype_wrap_fromunix">Wrapping of Call from UNIX Code</a></li>
+                       <li><a href="APITypes.html.pl#functype_wrap_fromw32">Wrapping of Call from W32 Code</a></li>
+                       </ul></li>
+               <li><a href="APITypes.html.pl#functype_native">Native Implementation</a>
+                       <ul>
+                       <li><a href="APITypes.html.pl#functype_native_fromunix">Native Implementation Called from UNIX Code</a></li>
+                       <li><a href="APITypes.html.pl#functype_native_fromw32">Native Implementation of &quot;unpatched&quot;
+                                       Library Function Called from W32 Code</a></li>
+                       <li><a href="APITypes.html.pl#functype_native_fromw32_patched">Native Implementation of &quot;patched&quot;
+                                       Library Function Called from W32 Code</a></li>
+                       <li><a href="APITypes.html.pl#functype_native_reactos">Native Implementation - ReactOS</a></li>
+                       <li><a href="APITypes.html.pl#functype_native_wine">Native Implementation &ndash; Wine</a></li>
+                       <li><a href="APITypes.html.pl#functype_native_libcaptive">Native Implementation &ndash; Project Specific</a></li>
+                       </ul></li>
+               <li><a href="APITypes.html.pl#functype_undef">Undefined Function</a></li>
+               </ul></li>
+
+       <li><a href="CallType.html.pl">API Function Calling Conventions</a>
+               <ul>
+               <li><a href="CallType.html.pl#calltype_cdecl">W32 Calling Convention &quot;cdecl&quot;</a></li>
+               <li><a href="CallType.html.pl#calltype_stdcall">W32 Calling Convention &quot;stdcall&quot;</a></li>
+               <li><a href="CallType.html.pl#calltype_fastcall">W32 Calling Convention &quot;fastcall&quot;</a></li>
+               </ul></li>
+       </ul></li>
+
+<li><a href="TODO.html.pl#todo_fsck">TODO: Fsck of NTFS</a></li>
+<li><a href="TODO.html.pl#todo_surprise">TODO: NTFS Support for Partition Surprise</a></li>
+
+<li><a href="Related.html.pl">Related Projects</a>
+       <ul>
+       <li><a href="Related.html.pl#LinuxNTFScompet">Linux NTFS</a></li>
+       <li><a href="Related.html.pl#NTPwd">NTPwd NTFS Driver</a></li>
+       <li><a href="Related.html.pl#vmware">VMware Workstation</a></li>
+       <li><a href="Related.html.pl#wine">Wine Project</a></li>
+       <li><a href="Related.html.pl#ntfs98">NTFS for Windows 98</a></li>
+       <li><a href="Related.html.pl#ntfsdos">NTFSDOS Professional</a></li>
+       </ul></li>
+
+<li><a href="LinuxNTFS.html.pl">Re: 7.7 Can't we write a wrapper for Windows' driver?</a></li>
+
+</ul>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/LinuxNTFS.html.pl b/project/captive/doc/LinuxNTFS.html.pl
new file mode 100755 (executable)
index 0000000..7d2393d
--- /dev/null
@@ -0,0 +1,90 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc LinuxNTFS page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::LinuxNTFS;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: Captive vs. Linux-NTFS',
+               "rel_prev"=>'Related.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<h1>Re: @{[ a_href 'http://linux-ntfs.sourceforge.net/info/ntfs.html#7.7',
+               "7.7 Can't we write a wrapper for Windows' driver?" ]}</h1>
+
+       <p class="re">&gt; It sounds like a great idea, to start with, but there are numerous
+       problems.</p>
+
+       <p><span class="re">&gt; The largest technical problem is joining the Windows
+       system DLL to the Linux VFS. It could be done, but it wouldn't be pretty.</span><br />
+       Yep. :-)</p>
+
+       <p><span class="re">&gt; It would have to run as part of the kernel which would mean
+       that if it went wrong it could crash the machine. With no source, we might not
+       be able to work around the problem.</span><br />
+       @{[ a_href 'Details.html.pl#sandbox','Nope' ]},
+       @{[ a_href 'http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)' ]}
+       moves the filesystem implementation to UNIX userland where the Microsoft
+       Windows filesystem is completely unarmed by Captive jail of chroot(2),
+       setuid(2) and setrlimit(2). There only remains one narrow connection to the rest of
+       system (by CORBA/ORBit). The filesystem's life environment gets kill(2)ed when
+       UNIX is no longer satisfied with it. Safety similiar to
+       @{[ a_href 'http://www.vmware.com/solutions/security.html','VMware sandbox' ]}.</p>
+
+       <p><span class="re">&gt; The next major problem is compati<!--orig. text typo-->bility.
+       Which version of the Windows system file would we use? Picking one would limit
+       its use, making the wrapper versatile for all of them would be a programming
+       nightmare.</span><br />
+       Microsoft Windows NTFS filesystem driver is capable of accessing older formats
+       of the filesystem. This project currently runs Microsoft Windows XP version,
+       porting to Microsoft Windows 2003 Server expected. (Microsoft Windows upgrades
+       NTFS disk filesystem to its own version during complete CD-ROM Microsoft
+       Windows system installation &ndash; such operation is not threat this project use.)</p>
+
+       <p><span class="re">&gt; And it gets worse. The legal implications of
+       distributing Windows systems files would cause problems.</span><br />
+       User must be careful to obey all licensing restrictions according to his
+       local country laws.<br />
+       <span class="re">&gt; Also the proprietary nature of the driver would mean that
+       the other kernel coders would not investigate any problems if someone had used
+       the NTFS wrapper.</span><br />
+       It does not apply to this project due to the implemented
+       @{[ a_href 'Details.html.pl#sandbox','filesystem separation' ]}.</p>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/Macros.pm b/project/captive/doc/Macros.pm
new file mode 100755 (executable)
index 0000000..a30562e
--- /dev/null
@@ -0,0 +1,139 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc macros.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Macros;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use Exporter;
+our @EXPORT=qw(
+               &doc_img &productname &captive_srcfile
+               $freespeech $freebeer $Wine $ReactOS $LinuxNTFS $GnomeVFS $GnomeVFSmodule $gnulinux
+               );
+our @ISA=qw(Exporter);
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+Wrequire 'My::Project';
+
+
+sub init ($%)
+{
+my($class,%args)=@_;
+
+       %args=(
+                       "rel_start"=>top_dir("/project/captive/"),
+                       "rel_up"=>top_dir("/project/captive/doc/"),
+                       %args);
+       My::Web->init(
+                       "head_css"=>"
+.productname { font-family: cursive; }
+.fname       { font-family: monospace; }
+.constant    { font-family: monospace; }
+.author      { font-family: cursive; }
+.stuff       { font-style: italic; font-size: larger; margin-left: 20%; margin-right: 10%; }
+.function    { font-family: monospace; }
+.type        { font-family: monospace; }
+.command     { font-family: monospace; }
+.instruction { font-style: italic; }
+",
+                       "WebConfig::heading_novskip"=>1,
+                       %args,
+                       );
+       My::Web->heading();
+       print My::Project->section("captive");
+       $class->navigate();
+}
+
+sub footer ($)
+{
+my($class)=@_;
+
+       print vskip "2ex";
+       project::captive::doc::Macros->navigate("footer");
+       My::Web->footer();
+}
+
+sub navigate ($;$)
+{
+my($class,$where)=@_;
+
+       print '<table border="0" width="100%"><tr>'."\n";
+               print '<col width="'.$_.'%" />'."\n" for (qw(10 20 40 20 10));
+               print '<td></td>'."\n";
+               print '<td align="left">';
+                       print img "/My/arrow-left" ,"Previous document","a_href"=>$My::Web::W->{"rel_prev"}
+                                       if $My::Web::W->{"rel_prev"};
+               print '</td>'."\n";
+               print '<td align="center">';
+                       print img "/My/arrow-up"   ,"Parent","a_href"=>$My::Web::W->{"rel_up"}
+                               if $My::Web::W->{"rel_up"} && !($where && $where eq "footer");
+               print '</td>'."\n";
+               print '<td align="right">';
+                       print img "/My/arrow-right","Next document","a_href"=>$My::Web::W->{"rel_next"}
+                               if $My::Web::W->{"rel_next"};
+               print '</td>'."\n";
+               print '<td></td>'."\n";
+       print '</tr></table>'."\n";
+}
+
+sub doc_img ($$)
+{
+my($img_base,$caption)=@_;
+
+       my $r="";
+       $r.='<table border="0" align="center">'."\n";
+               $r.="\t<tr><td>".img($img_base,$caption)."</td></tr>\n";
+               $r.="\t<caption>$caption</caption>\n";
+       $r.='</table>'."\n";
+       $r.=vskip "2ex";
+       return $r;
+}
+
+sub captive_srcfile ($;$)
+{
+my($filename,$text)=@_;
+
+       a_href 'http://cvs.jankratochvil.net/viewcvs/*checkout*/captive/'.$filename.'?rev=HEAD',
+                       ($text || $filename);
+}
+
+our $freespeech=a_href 'http://www.gnu.org/philosophy/free-sw.html','Free';
+our $freebeer=a_href 'http://www.gnu.org/philosophy/free-sw.html','free (as in beer)';
+
+sub productname
+{
+my($url,$name)=@_;
+
+       return '<span class="productname">'.a_href($url,CGI::escapeHTML($name)).'</span>';
+}
+our $Wine=productname 'http://www.winehq.com/','Wine';
+our $ReactOS=productname 'http://www.reactos.com/','ReactOS';
+our $LinuxNTFS=productname 'http://linux-ntfs.sourceforge.net/','Linux NTFS';
+our $GnomeVFS=productname 'http://developer.gnome.org/doc/API/gnome-vfs/','Gnome-VFS';
+our $GnomeVFSmodule=productname 'http://developer.gnome.org/doc/API/gnome-vfs/modules.html','Gnome-VFS-module';
+our $gnulinux='GNU/Linux';
+
+
+1;
old mode 100755 (executable)
new mode 100644 (file)
similarity index 64%
rename from project/kix/index.html.pl
rename to project/captive/doc/Makefile.am
index c5de223..3b62801
@@ -1,7 +1,5 @@
-#! /usr/bin/perl
-# 
 # $Id$
-# Main page of 'My::Project::kix'
+# automake source for the Makefile of project/captive/ documentation
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use project::kix::ListItem;
+include $(top_srcdir)/Makefile-head.am
 
+SUBDIRS= \
+               fig \
+               dia
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::kix::ListItem,
-               );
+EXTRA_DIST+= \
+               Index.html.pl
 
-My::Web->footer();
+CLEANFILES+= \
+               *.gif
diff --git a/project/captive/doc/Related.html.pl b/project/captive/doc/Related.html.pl
new file mode 100755 (executable)
index 0000000..ada3a87
--- /dev/null
@@ -0,0 +1,122 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Related Projects page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Related;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: Related Projects',
+               "rel_prev"=>'TODO.html.pl',
+               "rel_next"=>'LinuxNTFS.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<h1>Related Projects</h1>
+
+       <p>The usual solution for file exchange between $freespeech operating systems
+       and <span class="productname">Microsoft Windows NT</span> is to use
+       <span class="productname">FAT32</span> (<span class="productname">vfat</span>
+       called in $gnulinux) partition and swap the files over it. This method is not
+       very comfortable as you never have access to all the files of the other
+       operating system.</p>
+
+       <a name="LinuxNTFScompet"><h2>$LinuxNTFS</h2></a>
+
+               <p>Although this project takes a&nbsp;completely different approach and has
+               a&nbsp;different architecture, the final goal is the same as for this
+               project &ndash; reliable read-write <span class="productname">NTFS</span>
+               filesystem support. $LinuxNTFS goes the way of reverse engineering
+               filesystem data structures (and possibly
+               <span class="fname">ntfs.sys</span> itself). Unfortunately after many years
+               of its development it did not yet reach the state of reliable read-write
+               access although its read-only part is considered trustworthy.</p>
+
+               <p>Using $LinuxNTFS for read-only access to existing partition with
+               <span class="productname">Microsoft Windows NT</span> installation is
+               implemented for successful acquire of <span class="fname">ntfs.sys</span>,
+               <span class="fname">ntoskrnl.exe</span> and possibly even
+               <span class="fname">fastfat.sys</span> and/or
+               <span class="fname">cdfs.sys</span> files from the user's
+               <span class="productname">NTFS</span> partition.</p>
+
+       <a name="NTPwd"><h2><span class="productname">@{[ a_href 'http://www.cgsecurity.org/ntfs.html',
+                       'NTPwd NTFS Driver' ]}</span></h2></a>
+
+               <p>DOS based @{[ a_href 'http://www.gnu.org/licenses/gpl.html','GPL-2.0' ]}
+               read-write NTFS driver. Filesystem structures are reverse engineered in the
+               way of @{[ a_href 'Related.html.pl#LinuxNTFScompet','Linux-NTFS Project' ]}. As it is not very
+               actively maintained it reaches a&nbsp;lower level of
+               <span class="productname">NTFS</span> compatibility.</p>
+
+       <a name="vmware"><h2>@{[ a_href 'http://www.vmware.com/download/workstation.html','VMware Workstation' ]}</h2></a>
+
+               <p>The only real competition: Closed-source read/write @{[ '$299' ]} equivalent.</p>
+
+               <p>Original Microsoft Windows operating system can be run inside a virtual
+               machine running under GNU/Linux and share the read-write NTFS disk by using
+               a network file sharing through a&nbsp;VMware virtual network card.</p>
+
+               <p>You need @{[ '$299' ]} for this product and you need to
+               give up your system security by running un@{[ a_href 'Details.html.pl#sandbox','sandbox' ]}ed
+               closed-source program in your GNU/Linux.</p>
+
+       <a name="wine"><h2>@{[ a_href 'http://www.winehq.com/','Wine Project' ]}</h2></a>
+
+               <p>No code could be shared &ndash; Wine emulates only Microsoft Windows userland.
+               Filesystem drivers completely belong to Microsoft Windows kernelland.</p>
+
+       <a name="ntfs98"<h2>@{[ a_href 'http://www.sysinternals.com/ntw2k/freeware/ntfswin98.shtml','NTFS for Windows 98' ]}</h2></a>
+
+               <p>Closed-source read-only-crippled @{[ '$0' ]} equivalent for Microsoft Windows.</p>
+
+               <p>There is a @{[ a_href 'http://www.sysinternals.com/images/screenshots/ntfs98ap.gif',
+                               'diagram' ]} showing exactly the principle of Captive NTFS project.
+               There is apparently disabled read/write functionality in <i>NTFS for
+               Windows 98</i> as the same company also sells the following product sharing
+               the same codebase:</p>
+
+       <a name="ntfsdos"><h2>@{[ a_href 'http://www.winternals.com/products/repairandrecovery/ntfsdospro.asp',
+                       'NTFSDOS Professional' ]}</h2></a>
+
+               <p>Closed-source read/write @{[ '$299' ]} equivalent for MS-DOS.</p>
+
+               <p>This product is the most close equivalent to Captive NTFS but it is
+               a commercial product, closed-source and it has filesystem interface only
+               for MS-DOS.</p>
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/Reverse.html.pl b/project/captive/doc/Reverse.html.pl
new file mode 100755 (executable)
index 0000000..d444c87
--- /dev/null
@@ -0,0 +1,188 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Reverse Engineering page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Reverse;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: Reverse Engineering',
+               "rel_prev"=>'Components.html.pl',
+               "rel_next"=>'CacheManager.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<a name="reverse"><h1>Reverse Engineering</h1></a>
+
+       <p>This project has no intentions to reverse engineer and document the
+       filesystem data structures themselves since they are being encapsulated by
+       the filesystem driver. For these reasons the resources available in
+       projects such as $LinuxNTFS get out of any possible use. This project goal
+       is to provide fully compatible API interface to the rest of the W32 system
+       to persuade the filesystem driver it is running in the native
+       <span class="productname">Microsoft Windows XP</span> environment.</p>
+
+       <p>All the W32 filesystem drivers are running in the W32 kernel address
+       space and this area of W32 API is not much documented by
+       <span class="productname">Microsoft</span>. Some API functions are not
+       documented at all and the others are documented insufficiently for a their
+       possibly needed reimplementation from scratch. Documentation being
+       consulted primarily consists of
+       <span class="productname">@{[ a_href 'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/kmhdr_6enb.asp','MSDN (Microsoft Developer Network) Kernel-Mode Driver Architecture: Windows DDK' ]}</span>
+       documentation and also various other 3rd party documentation resources such as
+       <span class="productname">@{[ a_href 'http://www.osr.com/ntinsider/1996/cacheman.htm',
+                       'The NT Cache Manager Description' ]}</span>,
+       <span class="productname">@{[ a_href 'http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864',
+                       'Learn About NT'."'".'s&nbsp;File-system Cache' ]}</span>,
+       <span class="productname">@{[ a_href 'http://www.ntfsd.org/archive/',
+                       'NT File System Developers mailing list archives' ]}</span>
+       including various
+       @{[ a_href 'http://www.google.com/search?q=site%3Amicrosoft.com','fulltext searches' ]}
+       through Internet from case to case.</p>
+
+       <p>Sometimes no sufficient documentation was found and some code behaviour
+       had to be reverse engineered directly from the binaries of
+       <span class="fname">ntoskrnl.exe</span>,
+       <span class="fname">cdfs.sys</span>,
+       <span class="fname">fastfat.sys</span>
+       and primarily
+       <span class="fname">ntfs.sys</span>.
+       Up to now the code was disassembled by
+       <span class="productname">@{[ a_href 'http://www.simtel.net/pub/pd/29498.html','IDA Freeware' ]}</span>
+       and by
+       <span class="productname">dumpbin.exe</span> of
+       <span class="productname">Microsoft Visual Studio</span>.
+       <span class="productname">dumpbin.exe</span> is fortunately able to
+       interpret debug symbols from W32 <span class="fname">.PDB</span>
+       (Program DataBase) debug information files.</p>
+
+       <a name="dumpbin"><h2><span class="productname">dumpbin.exe</span></h2></a>
+
+               <p>You should use the following options for
+               <span class="productname">dumpbin.exe</span>:</p>
+
+               <blockquote class="command">
+                       <p>dumpbin.exe /all /rawdata:none /disasm /pdbpath:verbose FILENAME.SYS</p>
+               </blockquote>
+
+               <p>You should see the following line in the output:</p>
+
+               <blockquote class="command">
+                       <p>PDB file found at '.\\FILENAME.pdb'</p>
+               </blockquote>
+
+       <a name="WinDbg"><h2><span class="productname">WinDbg</span> Windows NT kernel debugging</h2></a>
+
+               <p><span class="productname">WinDbg</span> is downloadable from:
+               @{[ a_href 'http://www.microsoft.com/whdc/ddk/debugging/installx86.mspx' ]}</p>
+
+               <p>This is (the only?) tool able to debug filesystem drivers incl.
+               <span class="fname">ntfs.sys</span>. You will need two computers running
+               <span class="productname">Microsoft Windows</span> &mdash; one computer will run
+               <span class="productname">WinDbg</span> while the other one will be
+               frozen in remote Windows NT kernel debug mode. It does not matter which
+               <span class="productname">Microsoft Windows</span> version will be run
+               on the <span class="productname">WinDbg</span> side. Your goal is to
+               successfuly connect <span class="productname">WinDbg</span>:</p>
+
+               @{[ doc_img 'ntdebug-ntfs','<span class="productname">WinDbg</span> Remote NT Kernel NTFS Debugging' ]}
+
+               <p>The most easy way to setup two computers is to use commercial
+               <span class="productname">@{[ a_href 'http://www.vmware.com/download/workstation.html','VMware Workstation' ]}</span>
+               where you can run two virtual machines simultaneously on single PC
+               hardware and you can connect them by a virtual serial port provided by
+               <span class="productname">VMware</span>.</p>
+
+               <a name="WinDbg_WinDbg"><h3><span class="productname">WinDbg</span> side setup</h3></a>
+
+                       @{[ doc_img 'ntdebug-vmware-windbg',
+                                       '<span class="productname">VMware</span> virtual serial port'
+                                                       .' of <span class="productname">WinDbg</span> side' ]}
+
+                       <p>You should setup <span class="productname">WinDbg</span> according
+                       to:</p>
+
+                       @{[ doc_img 'ntdebug-windbg-port','Port settings of <span class="productname">WinDbg</span>' ]}
+                       @{[ doc_img 'ntdebug-windbg-sym','Symbols files location of <span class="productname">WinDbg</span>' ]}
+
+                       <span class="constant">Symbols</span> should point to the directory where
+                       reside files extracted from the symbol archive for your version of
+                       <span class="productname">Microsoft Windows</span>. In the case of the
+                       recommended <span class="productname">Microsoft Windows XP Service Pack 1 Checked Build</span>
+                       you should use:
+                       @{[ a_href 'http://msdl.microsoft.com/download/symbols/packages/windowsxp/xpsp1sym_x86_chk.exe' ]}</p>
+
+                       <blockquote class="command">
+                               <p># Rename xpsp1sym_x86_chk.exe contents .pdb files for WinDbg<br />
+                               @{[ CGI::escapeHTML(q{for i in *.pdb*;do ext="`echo $i|sed 's/^.*\.pdb\.\(.*\)$/\1/'`";if [ "$i" = "$ext" ];then echo "BAD:$i";break;fi;base="`echo $i|sed 's/\(\.pdb\)\..*$/\1/'`";echo "md $ext";echo "move /-y $i $ext\\$base";done|sort -u|sed 's/$/'`echo -ne '\r'`'/g' >/tmp/rename.bat}) ]}</p>
+                       </blockquote>
+
+                       <p>The resulting <span class="command">rename.bat</span> for
+                       <span class="command">xpsp1sym_x86_chk.exe</span> can be found at:
+                       @{[ a_href 'xpsp1sym_x86_chk-rename.bat.zip' ]}</p>
+
+                       <p>The resulting directory should contain at least
+                       <span class="command">sys\\ntfs.pdb</span>
+                       and
+                       <span class="command">exe\\ntoskrnl.pdb</span>.</p>
+
+                       <p>Your successfuly connected target (after the steps described
+                       below) should look like:</p>
+
+                       @{[ doc_img 'ntdebug-windbg-boot','Successfuly connected <span class="productname">WinDbg</span>' ]}
+
+               <a name="WinDbg_kern"><h3>Setup of the side being kernel-debugged</h3></a>
+
+                       @{[ doc_img 'ntdebug-vmware-xpdebug',
+                                       '<span class="productname">VMware</span> virtual serial port'
+                                                       .' of the side being kernel-debugged' ]}
+
+                       <p>You must use the following options in your
+                       <span class="command">c:\\boot.init</span> command-line:</p>
+
+                       <blockquote class="command">
+                               <p>/debug /debugport=COM1 /baudrate=115200</p>
+                       </blockquote>
+
+                       <p>After booting this <span class="command">boot.ini</span>-entry
+                       should freeze at this point
+                       (if no <span class="productname">WinDbg</span> is waiting in the other
+                       virtual machine):</p>
+
+                       @{[ doc_img 'ntdebug-wait','Side being kernel-debugged waiting for <span class="productname">WinDbg</span>' ]}
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/TODO.html.pl b/project/captive/doc/TODO.html.pl
new file mode 100755 (executable)
index 0000000..8085863
--- /dev/null
@@ -0,0 +1,88 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc TODO page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::TODO;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
+
+
+project::captive::doc::Macros->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Developer Documentation: TODO',
+               "rel_prev"=>'CallType.html.pl',
+               "rel_next"=>'Related.html.pl',
+               );
+
+
+print <<"HERE";
+
+
+<a name="todo_fsck"><h1>TODO: Fsck of NTFS</h1></a>
+
+       <p>Currently this project does not support checking of data structures
+       of NTFS volume as being provided by <span class="command">chkdsk.exe</span>
+       in W32 environment and <span class="command">fsck</span> in UNIX OS.</p>
+
+       <p>W32 has its disk checking functionality split to
+       <span class="fname">untfs.dll</span> W32 userland library.
+       according to
+       @{[ a_href 'http://www.sysinternals.com/ntw2k/source/fmifs.shtml',
+                       'Chkdskx and Formatx' ]}
+       by @{[ a_href 'http://www.sysinternals.com/aboutus.shtml',
+                       'Mark Russinovich' ]}.
+
+       <p>I&nbsp;assume its execution falls completely
+       @{[ a_href 'Architecture.html.pl#existing_emulation','out of scope' ]}
+       of this project as it is W32 userland.</p>
+
+       <p>This possibility was not yet investigated in any way.</p>
+
+
+<a name="todo_surprise"><h1>TODO: NTFS Support for
+               <span class="productname">@{[ a_href '/project/surprise/','Partition Surprise' ]}</span></h1></a>
+
+       <p>Although there currently exists
+       <span class="productname">@{[ a_href 'http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html','ntfsresize' ]}</span>
+       I am not sure whether it is really reliable for all NTFS filesystems.
+       <span class="productname">@{[ a_href '/project/surprise/','Partition Surprise' ]}</span>
+       is the only partition manager capable of safely resize the disk
+       by using just the original W32 filesystem driver by full rebuild of
+       filesystem metadata.
+       Almost no file data blocks would be moved even on these generic filesystems
+       as W32 supports <span class="constant">FSCTL_MOVE_FILE</span> request
+       according to
+       @{[ a_href 'http://www.sysinternals.com/ntw2k/info/defrag.shtml',
+                       'Inside Windows NT Disk Defragmenting' ]}
+       by @{[ a_href 'http://www.sysinternals.com/aboutus.shtml',
+                       'Mark Russinovich' ]}.
+
+
+HERE
+
+
+project::captive::doc::Macros->footer();
diff --git a/project/captive/doc/arch-W32.png b/project/captive/doc/arch-W32.png
new file mode 100644 (file)
index 0000000..d93bda7
Binary files /dev/null and b/project/captive/doc/arch-W32.png differ
diff --git a/project/captive/doc/arch-W32.sxd b/project/captive/doc/arch-W32.sxd
new file mode 100644 (file)
index 0000000..5e1a261
Binary files /dev/null and b/project/captive/doc/arch-W32.sxd differ
diff --git a/project/captive/doc/arch-captive.png b/project/captive/doc/arch-captive.png
new file mode 100644 (file)
index 0000000..8642292
Binary files /dev/null and b/project/captive/doc/arch-captive.png differ
diff --git a/project/captive/doc/arch-captive.sxd b/project/captive/doc/arch-captive.sxd
new file mode 100644 (file)
index 0000000..f7fddb1
Binary files /dev/null and b/project/captive/doc/arch-captive.sxd differ
diff --git a/project/captive/doc/captive-install-acquire-ask.png b/project/captive/doc/captive-install-acquire-ask.png
new file mode 100644 (file)
index 0000000..e3af274
Binary files /dev/null and b/project/captive/doc/captive-install-acquire-ask.png differ
old mode 100755 (executable)
new mode 100644 (file)
similarity index 64%
rename from project/kware/index.html.pl
rename to project/captive/doc/dia/Makefile.am
index c7598e3..9a285e8
@@ -1,7 +1,5 @@
-#! /usr/bin/perl
-# 
 # $Id$
-# Main page of 'My::Project::kware'
+# automake source for the Makefile of project/captive/ documentation .dia-s
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use project::kware::ListItem;
+include $(top_srcdir)/Makefile-head.am
 
+EXTRA_DIST+= \
+               cache-manager.dia \
+               inheritance.dia \
+               parent-connector.dia
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::kware::ListItem,
-               );
+CLEANFILES+= \
+               *.dia~
 
-My::Web->footer();
+#CLEANFILES+= \
+#              *.png \
+#              *.gif
diff --git a/project/captive/doc/dia/TraceFS.dia b/project/captive/doc/dia/TraceFS.dia
new file mode 100644 (file)
index 0000000..977bb63
--- /dev/null
@@ -0,0 +1,740 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="0.25"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-19,-6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-19.5,-6.5;47.5,36.5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-19,-6"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="66"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="42"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ffffff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,30"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.4,11.75;15.6,30.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="14,30"/>
+        <dia:point val="14,19"/>
+        <dia:point val="14,19"/>
+        <dia:point val="14,12"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="4"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O18" connection="1"/>
+        <dia:connection handle="1" to="O5" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="34,19"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.4,11.75;34.25,19.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="34,19"/>
+        <dia:point val="34,17"/>
+        <dia:point val="14,17"/>
+        <dia:point val="14,12"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O14" connection="1"/>
+        <dia:connection handle="1" to="O5" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,30"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="13.75,22.75;35.6,30.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="14,30"/>
+        <dia:point val="14,25"/>
+        <dia:point val="34,25"/>
+        <dia:point val="34,23"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O18" connection="1"/>
+        <dia:connection handle="1" to="O14" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O4">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-10,3"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-10.25,2.75;27.25,12.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-10,3"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="37"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="9"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:group>
+        <dia:object type="Standard - Box" version="0" id="O5">
+          <dia:attribute name="obj_pos">
+            <dia:point val="2,8"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="1.75,7.75;26.25,12.25"/>
+          </dia:attribute>
+          <dia:attribute name="elem_corner">
+            <dia:point val="2,8"/>
+          </dia:attribute>
+          <dia:attribute name="elem_width">
+            <dia:real val="24"/>
+          </dia:attribute>
+          <dia:attribute name="elem_height">
+            <dia:real val="4"/>
+          </dia:attribute>
+          <dia:attribute name="border_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="show_background">
+            <dia:boolean val="true"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Text" version="0" id="O6">
+          <dia:attribute name="obj_pos">
+            <dia:point val="14,11"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="2.1695,8.6;25.8305,11.6"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#Cache Manager#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-Bold"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="3"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="14,11"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="1"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Box" version="0" id="O7">
+          <dia:attribute name="obj_pos">
+            <dia:point val="-6,8"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="-6.25,7.75;0.25,12.25"/>
+          </dia:attribute>
+          <dia:attribute name="elem_corner">
+            <dia:point val="-6,8"/>
+          </dia:attribute>
+          <dia:attribute name="elem_width">
+            <dia:real val="6"/>
+          </dia:attribute>
+          <dia:attribute name="elem_height">
+            <dia:real val="4"/>
+          </dia:attribute>
+          <dia:attribute name="border_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="show_background">
+            <dia:boolean val="true"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Text" version="0" id="O8">
+          <dia:attribute name="obj_pos">
+            <dia:point val="-3,11"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="-4.1385,8.6;-1.8615,11.6"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#...#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-Bold"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="3"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="-3,11"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="1"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:object type="Standard - Text" version="0" id="O9">
+        <dia:attribute name="obj_pos">
+          <dia:point val="0,6"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-9.504,3.6;9.504,6.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ntoskrnl.exe#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="0,6"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-7,30"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-7.25,11.75;-2.4,30.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="-7,30"/>
+        <dia:point val="-7,15"/>
+        <dia:point val="-4,15"/>
+        <dia:point val="-4,12"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O16" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-7,30"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-7.25,11.75;13.6,30.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="-7,30"/>
+        <dia:point val="-7,16"/>
+        <dia:point val="12,16"/>
+        <dia:point val="12,12"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O16" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="28,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.95,21.3553;28,22.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="28,22"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,30"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-3.6,11.75;14.25,30.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="14,30"/>
+        <dia:point val="14,27"/>
+        <dia:point val="-2,27"/>
+        <dia:point val="-2,12"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#00ff00"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O18" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O14">
+        <dia:attribute name="obj_pos">
+          <dia:point val="24,19"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="23.75,18.75;44.25,23.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="24,19"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="20"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O15">
+        <dia:attribute name="obj_pos">
+          <dia:point val="34,22"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="24.4465,19.6;43.5535,22.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#TraceFS.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="34,22"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O16">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-16,30"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-16.25,29.75;2.25,34.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-16,30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#0000ff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O17">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-7,33"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-15.0685,30.55;1.1185,33.7"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#fastfat.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-7,33"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O18">
+        <dia:attribute name="obj_pos">
+          <dia:point val="7,30"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="6.75,29.75;21.25,34.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="7,30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#00ff00"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O19">
+        <dia:attribute name="obj_pos">
+          <dia:point val="14,33"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="7.9115,30.55;20.1385,33.7"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ntfs.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="14,33"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O20">
+      <dia:attribute name="obj_pos">
+        <dia:point val="15,21"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15,19.35;22.442,21.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#hooked#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="15,21"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O21">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,-1"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-19.858,-4.25;47.908,-0.1"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#TraceFS Cache Manager hooking#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="4"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="14,-1"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+  </dia:layer>
+</dia:diagram>
diff --git a/project/captive/doc/dia/TraceFS.gif b/project/captive/doc/dia/TraceFS.gif
new file mode 100644 (file)
index 0000000..bd90bcc
Binary files /dev/null and b/project/captive/doc/dia/TraceFS.gif differ
diff --git a/project/captive/doc/dia/TraceFS.png b/project/captive/doc/dia/TraceFS.png
new file mode 100644 (file)
index 0000000..dbed736
Binary files /dev/null and b/project/captive/doc/dia/TraceFS.png differ
diff --git a/project/captive/doc/dia/arch-all.dia b/project/captive/doc/dia/arch-all.dia
new file mode 100644 (file)
index 0000000..a4a17ca
--- /dev/null
@@ -0,0 +1,3968 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="0.25"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-23,-97"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-23.5,-97.5;123.5,123.5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-23,-97"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="146"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="220"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ffffff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-7,-26"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-7.5,-26.5;80.5,40.5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-7,-26"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="87"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="66"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O2">
+        <dia:attribute name="obj_pos">
+          <dia:point val="5,10"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="4.75,9.75;19.25,14.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="5,10"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O3">
+        <dia:attribute name="obj_pos">
+          <dia:point val="12,13"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="5.5155,10.6;18.4845,13.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#cdfs.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="12,13"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O4">
+        <dia:attribute name="obj_pos">
+          <dia:point val="21,10"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="20.75,9.75;39.25,14.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="21,10"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O5">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,13"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="21.9315,10.6;38.0685,13.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#fastfat.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,13"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O6">
+        <dia:attribute name="obj_pos">
+          <dia:point val="41,10"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="40.75,9.75;59.25,14.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="41,10"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O7">
+        <dia:attribute name="obj_pos">
+          <dia:point val="50,13"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="41.1395,10.6;58.8605,13.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ext2fsd.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="50,13"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="12,14"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="11.75,13.75;12.25,22.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="12,14"/>
+        <dia:point val="12,22"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O2" connection="6"/>
+        <dia:connection handle="1" to="O32" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O9">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,14"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,13.75;50.3536,17.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="30,14"/>
+        <dia:point val="30,17"/>
+        <dia:point val="50,17"/>
+        <dia:point val="50,17"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O4" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="50,14"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="49.75,13.75;50.25,17.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="50,14"/>
+        <dia:point val="50,17"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O6" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="68,14"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="49.6464,13.75;68.25,17.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="68,14"/>
+        <dia:point val="68,17"/>
+        <dia:point val="50,17"/>
+        <dia:point val="50,17"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="50,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="49.75,16.75;50.25,22.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="50,22"/>
+        <dia:point val="50,17"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O105" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="12,29"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="11.75,28.75;30.3536,32.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="12,29"/>
+        <dia:point val="12,32"/>
+        <dia:point val="30,32"/>
+        <dia:point val="30,32"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O32" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O14">
+      <dia:attribute name="obj_pos">
+        <dia:point val="50,29"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,28.75;50.25,32.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="50,29"/>
+        <dia:point val="50,32"/>
+        <dia:point val="30,32"/>
+        <dia:point val="30,32"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O105" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O15">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,32"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,31.75;30.25,40.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,32"/>
+        <dia:point val="30,40"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O16">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,36"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,34.4;44.53,36.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[GIOChannel]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,36"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O17">
+      <dia:attribute name="obj_pos">
+        <dia:point val="32,43"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="32,41.4;47.774,43.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[CORBA/ORBit]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="32,43"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O18">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,50"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,48.4;44.53,50.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[GIOChannel]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,50"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O19">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,65"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,63.4;44.53,65.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[GIOChannel]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,65"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O20">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,62"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,61.75;30.25,67.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,62"/>
+        <dia:point val="30,67"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O107" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - PolyLine" version="0" id="O21">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,67"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="20.75,66.75;30.25,81.25"/>
+      </dia:attribute>
+      <dia:attribute name="poly_points">
+        <dia:point val="30,67"/>
+        <dia:point val="21,67"/>
+        <dia:point val="21,81"/>
+        <dia:point val="30,81"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O22">
+      <dia:attribute name="obj_pos">
+        <dia:point val="25,69"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="24.75,68.75;53.25,79.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="25,69"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="28"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="10"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O23">
+      <dia:attribute name="obj_pos">
+        <dia:point val="39,72"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="25.0905,69.6;52.9095,78.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#captive
+r/w-over-r/o buffer
+[giochannel-blind]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="39,72"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O24">
+      <dia:attribute name="obj_pos">
+        <dia:point val="39,69"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,66.75;39.25,69.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="39,69"/>
+        <dia:point val="39,67"/>
+        <dia:point val="30,67"/>
+        <dia:point val="30,67"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O25">
+      <dia:attribute name="obj_pos">
+        <dia:point val="39,79"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,78.75;39.25,81.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="39,79"/>
+        <dia:point val="39,81"/>
+        <dia:point val="30,81"/>
+        <dia:point val="30,81"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O22" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O26">
+      <dia:attribute name="obj_pos">
+        <dia:point val="20,82"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="11.882,80.4;20,82.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#--ro/--rw#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="20,82"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="2"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O27">
+      <dia:attribute name="obj_pos">
+        <dia:point val="39,82"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="39,80.4;45.336,82.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#--blind#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="39,82"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O28">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,86"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,84.4;44.53,86.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[GIOChannel]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,86"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O29">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,81"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,80.75;30.25,88.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,81"/>
+        <dia:point val="30,88"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O30">
+        <dia:attribute name="obj_pos">
+          <dia:point val="61,10"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="60.75,9.75;75.25,14.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="61,10"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O31">
+        <dia:attribute name="obj_pos">
+          <dia:point val="68,13"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="61.9115,10.6;74.0885,13.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ntfs.sys#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="68,13"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O32">
+        <dia:attribute name="obj_pos">
+          <dia:point val="1,22"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="0.75,21.75;23.25,29.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="1,22"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="22"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="7"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O33">
+        <dia:attribute name="obj_pos">
+          <dia:point val="12,25"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="0.912,22.6;23.088,28.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive
+storage/cdrom#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="12,25"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O34">
+        <dia:attribute name="obj_pos">
+          <dia:point val="32,90"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="31.75,89.75;52.25,97.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="32,90"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="20"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="7"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O35">
+        <dia:attribute name="obj_pos">
+          <dia:point val="42,93"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="31.9515,90.6;52.0485,96.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive
+giognomevfs#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="42,93"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O36">
+      <dia:attribute name="obj_pos">
+        <dia:point val="42,100"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="42,98.136;66.805,100.636"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[GnomeVFSHandle]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2.5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="42,100"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O37">
+        <dia:attribute name="obj_pos">
+          <dia:point val="33,101"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="32.75,100.75;51.25,105.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="33,101"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O38">
+        <dia:attribute name="obj_pos">
+          <dia:point val="42,104"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="33.387,101.6;50.613,104.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GnomeVFS#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="42,104"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O39">
+      <dia:attribute name="obj_pos">
+        <dia:point val="42,97"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="41.75,96.75;42.25,101.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="42,97"/>
+        <dia:point val="42,101"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O34" connection="6"/>
+        <dia:connection handle="1" to="O37" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O40">
+      <dia:attribute name="obj_pos">
+        <dia:point val="42,90"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,87.75;42.25,90.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="42,90"/>
+        <dia:point val="42,88"/>
+        <dia:point val="30,88"/>
+        <dia:point val="30,88"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O34" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O41">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,88"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="14.75,87.75;30,95.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="30,88"/>
+        <dia:point val="30,88"/>
+        <dia:point val="15,88"/>
+        <dia:point val="15,95"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O122" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O42">
+        <dia:attribute name="obj_pos">
+          <dia:point val="75,95"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="74.75,94.75;103.25,102.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="75,95"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="28"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="7"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O43">
+        <dia:attribute name="obj_pos">
+          <dia:point val="89,98"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="74.6945,95.6;103.306,101.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive-bug-replay
+[giochannel-blind]#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="89,98"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O44">
+      <dia:attribute name="obj_pos">
+        <dia:point val="90,107"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="90,105.4;106.764,107.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[xmlTextReader]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="90,107"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O45">
+      <dia:attribute name="obj_pos">
+        <dia:point val="89,102"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="88.75,101.75;89.25,110.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="89,102"/>
+        <dia:point val="89,110"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O42" connection="6"/>
+        <dia:connection handle="1" to="O91" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O46">
+      <dia:attribute name="obj_pos">
+        <dia:point val="89,95"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,87.75;89.25,95.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="89,95"/>
+        <dia:point val="89,88"/>
+        <dia:point val="30,88"/>
+        <dia:point val="30,88"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O42" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O47">
+      <dia:attribute name="obj_pos">
+        <dia:point val="42,105"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,104.75;42.25,107.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="42,105"/>
+        <dia:point val="42,107"/>
+        <dia:point val="30,107"/>
+        <dia:point val="30,107"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O37" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O48">
+      <dia:attribute name="obj_pos">
+        <dia:point val="15,102"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="14.75,101.75;30.3536,107.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="15,102"/>
+        <dia:point val="15,107"/>
+        <dia:point val="30,107"/>
+        <dia:point val="30,107"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O122" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O49">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,110"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,106.75;30.25,110.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,110"/>
+        <dia:point val="30,107"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O124" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O50">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,19"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-5.038,17.4;11,19.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[W32 block IRP]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="11,19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="2"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O51">
+      <dia:attribute name="obj_pos">
+        <dia:point val="49,20"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="32.962,18.4;49,20.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[W32 block IRP]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="49,20"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="2"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O52">
+      <dia:attribute name="obj_pos">
+        <dia:point val="12,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="11.75,6.75;30.3536,10.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="12,10"/>
+        <dia:point val="12,7"/>
+        <dia:point val="30,7"/>
+        <dia:point val="30,7"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O2" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O53">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,6.75;30.25,10.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,10"/>
+        <dia:point val="30,7"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O4" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O54">
+      <dia:attribute name="obj_pos">
+        <dia:point val="50,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,6.75;50.25,10.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="50,10"/>
+        <dia:point val="50,7"/>
+        <dia:point val="30,7"/>
+        <dia:point val="30,7"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O6" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O55">
+      <dia:attribute name="obj_pos">
+        <dia:point val="68,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.6464,6.75;68.25,10.25"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="68,10"/>
+        <dia:point val="68,7"/>
+        <dia:point val="30,7"/>
+        <dia:point val="30,7"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O56">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,7"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,1.75;30.25,7.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,7"/>
+        <dia:point val="30,2"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O103" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O57">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,4.4;43.342,6.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[W32 fs IRP]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,6"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O58">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-16"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,-16.25;30.25,-10.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-16"/>
+        <dia:point val="30,-11"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O101" connection="6"/>
+        <dia:connection handle="1" to="O103" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O59">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,-13"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,-14.6;47.698,-12.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[W32 kernel API]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,-13"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O60">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,-21"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,-22.6;52.45,-20.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[libcaptive client API]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,-21"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O61">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-26"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27,-34.25;33,-25.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-26"/>
+        <dia:point val="30,-34"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="3"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="3"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O99" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O62">
+      <dia:attribute name="obj_pos">
+        <dia:point val="32,-28"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="32,-29.6;47.774,-27.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[CORBA/ORBit]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="32,-28"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O63">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,-32"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,-33.6;52.45,-31.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[libcaptive client API]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,-32"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O64">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-46"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,-49.25;30.25,-45.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-46"/>
+        <dia:point val="30,-49"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O97" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O65">
+      <dia:attribute name="obj_pos">
+        <dia:point val="31,-43"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="31,-44.6;52.45,-42.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[libcaptive client API]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="31,-43"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O66">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-20"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,-26.25;30.25,-19.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-20"/>
+        <dia:point val="30,-26"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O101" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O67">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-42"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="29.75,-46.25;30.25,-41.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-42"/>
+        <dia:point val="30,-46"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O99" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O68">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-46"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-6.25,-49.25;30,-45.75"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="30,-46"/>
+        <dia:point val="30,-46"/>
+        <dia:point val="-6,-46"/>
+        <dia:point val="-6,-49"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O83" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O69">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-53"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="28.4,-57.25;31.6,-52.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-53"/>
+        <dia:point val="30,-57"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O97" connection="1"/>
+        <dia:connection handle="1" to="O111" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O70">
+      <dia:attribute name="obj_pos">
+        <dia:point val="45,-61"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="38.75,-62.6;45.25,-59.4"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="45,-61"/>
+        <dia:point val="39,-61"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O109" connection="3"/>
+        <dia:connection handle="1" to="O111" connection="4"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O71">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-69"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="28.4,-69.25;31.6,-64.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,-69"/>
+        <dia:point val="30,-65"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O118" connection="6"/>
+        <dia:connection handle="1" to="O111" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O72">
+      <dia:attribute name="obj_pos">
+        <dia:point val="27,-82"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="25.4,-86.25;28.6,-81.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="27,-82"/>
+        <dia:point val="27,-86"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O116" connection="1"/>
+        <dia:connection handle="1" to="O113" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - ZigZagLine" version="0" id="O73">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,-46"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="30,-49.25;88.25,-45.75"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="30,-46"/>
+        <dia:point val="30,-46"/>
+        <dia:point val="88,-46"/>
+        <dia:point val="88,-49"/>
+      </dia:attribute>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="1"/>
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O74" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O74">
+        <dia:attribute name="obj_pos">
+          <dia:point val="72,-53"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="71.75,-53.25;104.25,-48.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="72,-53"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="32"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O75">
+        <dia:attribute name="obj_pos">
+          <dia:point val="88,-50"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="72.4075,-52.4;103.593,-49.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#libcaptive-gnomevfs#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="88,-50"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O76">
+        <dia:attribute name="obj_pos">
+          <dia:point val="79,-63"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="78.75,-63.25;97.25,-58.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="79,-63"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O77">
+        <dia:attribute name="obj_pos">
+          <dia:point val="88,-60"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="79.387,-62.4;96.613,-59.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GnomeVFS#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="88,-60"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O78">
+      <dia:attribute name="obj_pos">
+        <dia:point val="88,-53"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="87.75,-59.25;88.25,-52.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="88,-53"/>
+        <dia:point val="88,-59"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O74" connection="1"/>
+        <dia:connection handle="1" to="O76" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O79">
+      <dia:attribute name="obj_pos">
+        <dia:point val="88,-63"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="87.75,-69.25;88.25,-62.75"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="88,-63"/>
+        <dia:point val="88,-69"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O76" connection="1"/>
+        <dia:connection handle="1" to="O80" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O80">
+        <dia:attribute name="obj_pos">
+          <dia:point val="70,-75"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="69.75,-75.25;106.25,-68.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="70,-75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="36"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="6"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Box" version="0" id="O81">
+        <dia:attribute name="obj_pos">
+          <dia:point val="71,-74"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="70.75,-74.25;105.25,-69.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="71,-74"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="34"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O82">
+        <dia:attribute name="obj_pos">
+          <dia:point val="88,-71"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="71.8135,-73.4;104.187,-70.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GnomeVFS/test-shell#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="88,-71"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O83">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-19,-58"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-19.25,-58.25;7.25,-48.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-19,-58"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="26"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="9"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Box" version="0" id="O84">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-18,-57"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-18.25,-57.25;6.25,-49.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-18,-57"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="7"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O85">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-6,-54"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-18.177,-56.4;6.177,-50.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive-cmdline
+[custom client]#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-6,-54"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O86">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,33"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.212,31.4;11,33.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#--cdrom#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="11,33"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="2"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O87">
+      <dia:attribute name="obj_pos">
+        <dia:point val="51,33"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="51,31.4;56.676,33.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#--disk#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="51,33"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O88">
+      <dia:attribute name="obj_pos">
+        <dia:point val="42,-38"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="41.75,-39.6;65.25,-36.4"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="42,-38"/>
+        <dia:point val="65,-38"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O99" connection="4"/>
+        <dia:connection handle="1" to="O89" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O89">
+        <dia:attribute name="obj_pos">
+          <dia:point val="65,-42"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="64.75,-42.25;95.25,-33.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="65,-42"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="line_style">
+          <dia:enum val="1"/>
+        </dia:attribute>
+        <dia:attribute name="corner_radius">
+          <dia:real val="4"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O90">
+        <dia:attribute name="obj_pos">
+          <dia:point val="80,-38"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="65.5955,-40.4;94.4045,-34.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#.captivebug.xml.gz
+[file]#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="80,-38"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O91">
+        <dia:attribute name="obj_pos">
+          <dia:point val="74,110"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="73.75,109.75;104.25,118.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="74,110"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="corner_radius">
+          <dia:real val="4"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O92">
+        <dia:attribute name="obj_pos">
+          <dia:point val="89,114"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="74.5955,111.6;103.404,117.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#.captivebug.xml.gz
+[file]#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="89,114"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - PolyLine" version="0" id="O93">
+      <dia:attribute name="obj_pos">
+        <dia:point val="73,28"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="71.6464,27.6464;73.3536,36.3536"/>
+      </dia:attribute>
+      <dia:attribute name="poly_points">
+        <dia:point val="73,28"/>
+        <dia:point val="72,29"/>
+        <dia:point val="73,30"/>
+        <dia:point val="72,31"/>
+        <dia:point val="73,32"/>
+        <dia:point val="72,33"/>
+        <dia:point val="73,34"/>
+        <dia:point val="72,35"/>
+        <dia:point val="73,36"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O94">
+      <dia:attribute name="obj_pos">
+        <dia:point val="73,32"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="72.75,31.75;105.25,32.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="73,32"/>
+        <dia:point val="105,32"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O95">
+      <dia:attribute name="obj_pos">
+        <dia:point val="81,31"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="81,28.6;104.661,31.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#[CORBA/ORBit]#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="81,31"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O96">
+      <dia:attribute name="obj_pos">
+        <dia:point val="72,25"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="66.819,23.4;77.181,27.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#W32
+DbgPrint()#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="72,25"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O97">
+        <dia:attribute name="obj_pos">
+          <dia:point val="17,-53"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="16.75,-53.25;43.25,-48.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="17,-53"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="26"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O98">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,-50"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="17.7735,-52.4;42.2265,-49.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#liblufs-captivefs#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,-50"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O99">
+        <dia:attribute name="obj_pos">
+          <dia:point val="18,-42"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="17.75,-42.25;42.25,-33.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="18,-42"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O100">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,-38"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="17.526,-40.4;42.474,-34.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive
+sandbox master#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,-38"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O101">
+        <dia:attribute name="obj_pos">
+          <dia:point val="18,-20"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="17.75,-20.25;42.25,-15.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="18,-20"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O102">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,-17"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="18.021,-19.4;41.979,-16.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#libcaptive/client#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,-17"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Box" version="0" id="O103">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,-11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-2.25,-11.25;62.25,2.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-2,-11"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="64"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="13"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O104">
+      <dia:attribute name="obj_pos">
+        <dia:point val="8,-6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-0.547,-8.8;16.547,-5.3"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#libcaptive#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3.5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="8,-6"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O105">
+        <dia:attribute name="obj_pos">
+          <dia:point val="40,22"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="39.75,21.75;60.25,29.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="40,22"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="20"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="7"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O106">
+        <dia:attribute name="obj_pos">
+          <dia:point val="50,25"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="40.496,22.6;59.504,28.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive
+storage/disk#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="50,25"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O107">
+        <dia:attribute name="obj_pos">
+          <dia:point val="12,52"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="11.75,51.75;48.25,62.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="12,52"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="36"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="10"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O108">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,55"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="12.0315,52.6;47.9685,61.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#captive
+sandbox commit buffer
+[giochannel-blind]#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,55"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O109">
+        <dia:attribute name="obj_pos">
+          <dia:point val="45,-65"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="44.75,-65.25;63.25,-56.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="45,-65"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O110">
+        <dia:attribute name="obj_pos">
+          <dia:point val="54,-61"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="45.387,-63.4;62.613,-57.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#lufsd
+fsctl thread#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="54,-61"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O111">
+        <dia:attribute name="obj_pos">
+          <dia:point val="21,-65"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="20.75,-65.25;39.25,-56.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="21,-65"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O112">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,-61"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="21.882,-63.4;38.118,-57.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#lufsd
+slot thread#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,-61"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O113">
+        <dia:attribute name="obj_pos">
+          <dia:point val="14,-92"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="13.75,-92.25;40.25,-85.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="14,-92"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="26"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="6"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Box" version="0" id="O114">
+        <dia:attribute name="obj_pos">
+          <dia:point val="15,-91"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="14.75,-91.25;39.25,-86.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="15,-91"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O115">
+        <dia:attribute name="obj_pos">
+          <dia:point val="27,-88"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="14.823,-90.4;39.177,-87.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#user application#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="27,-88"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O116">
+        <dia:attribute name="obj_pos">
+          <dia:point val="9,-82"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="8.75,-82.25;45.25,-68.75"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="9,-82"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="36"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="13"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O117">
+        <dia:attribute name="obj_pos">
+          <dia:point val="19,-78"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="9.6445,-80.4;28.3555,-77.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Linux kernel#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="19,-78"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:group>
+        <dia:object type="Standard - Box" version="0" id="O118">
+          <dia:attribute name="obj_pos">
+            <dia:point val="16,-76"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="15.75,-76.25;44.25,-68.75"/>
+          </dia:attribute>
+          <dia:attribute name="elem_corner">
+            <dia:point val="16,-76"/>
+          </dia:attribute>
+          <dia:attribute name="elem_width">
+            <dia:real val="28"/>
+          </dia:attribute>
+          <dia:attribute name="elem_height">
+            <dia:real val="7"/>
+          </dia:attribute>
+          <dia:attribute name="border_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="border_color">
+            <dia:color val="#ff007f"/>
+          </dia:attribute>
+          <dia:attribute name="show_background">
+            <dia:boolean val="true"/>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Text" version="0" id="O119">
+          <dia:attribute name="obj_pos">
+            <dia:point val="30,-73"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="15.546,-75.4;44.454,-69.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#lufs
+Linux kernel driver#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-Bold"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="3"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="30,-73"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="1"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O120">
+        <dia:attribute name="obj_pos">
+          <dia:point val="105,30"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="104.75,29.75;117.25,34.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="105,30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="12"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="corner_radius">
+          <dia:real val="4"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O121">
+        <dia:attribute name="obj_pos">
+          <dia:point val="111,33"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="105.951,30.6;116.049,33.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#syslog#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="111,33"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O122">
+        <dia:attribute name="obj_pos">
+          <dia:point val="2,95"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="1.75,94.75;28.25,102.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="2,95"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="26"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="7"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O123">
+        <dia:attribute name="obj_pos">
+          <dia:point val="15,98"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="2.328,95.6;27.672,101.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GLib
+GIOUnixChannel#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="15,98"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O124">
+        <dia:attribute name="obj_pos">
+          <dia:point val="15,110"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="14.75,109.75;45.25,118.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="15,110"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="30"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="corner_radius">
+          <dia:real val="4"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O125">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,114"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="18.1695,111.6;41.8305,117.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#partition device
+[file]#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="30,114"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O126">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,-4"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="5.75,-4.25;26.25,0.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="6,-4"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="20"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O127">
+        <dia:attribute name="obj_pos">
+          <dia:point val="16,-1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="6.496,-3.4;25.504,-0.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ntoskrnl.exe#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="16,-1"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O128">
+        <dia:attribute name="obj_pos">
+          <dia:point val="44,-4"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="43.75,-4.25;60.25,0.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="44,-4"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O129">
+        <dia:attribute name="obj_pos">
+          <dia:point val="52,-1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="44.2285,-3.4;59.7715,-0.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#halcaptive#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="52,-1"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O130">
+        <dia:attribute name="obj_pos">
+          <dia:point val="28,-4"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="27.75,-4.25;42.25,0.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="28,-4"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff007f"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O131">
+        <dia:attribute name="obj_pos">
+          <dia:point val="35,-1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="28.466,-3.4;41.534,-0.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ReactOS#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="35,-1"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O132">
+      <dia:attribute name="obj_pos">
+        <dia:point val="98,-8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="82.3003,-12.4;113.7,-1.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Sandboxed
+Slave#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="5.5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="98,-8"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O133">
+      <dia:attribute name="obj_pos">
+        <dia:point val="30,40"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27,39.75;33,52.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="30,40"/>
+        <dia:point val="30,52"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="3"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="3"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O107" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O134">
+          <dia:attribute name="obj_pos">
+            <dia:point val="70,74"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="70,71.2;95.9875,74.7"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#opt. reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="3.5"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="70,74"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O135">
+          <dia:attribute name="obj_pos">
+            <dia:point val="97,73"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="96.75,71;105.25,75"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="97,73"/>
+            <dia:point val="105,73"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="9"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="2"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O136">
+          <dia:attribute name="obj_pos">
+            <dia:point val="70,70"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="70,67.2;95.2945,70.7"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#N:1 reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="3.5"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="70,70"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O137">
+          <dia:attribute name="obj_pos">
+            <dia:point val="97,69"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="96.75,67;105.25,71"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="97,69"/>
+            <dia:point val="105,69"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow">
+            <dia:enum val="20"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow_length">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow_width">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="2"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O138">
+          <dia:attribute name="obj_pos">
+            <dia:point val="70,66"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="70,63.2;88.1335,66.7"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="3.5"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="70,66"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O139">
+          <dia:attribute name="obj_pos">
+            <dia:point val="97,65"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="96.75,63;105.25,67"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="97,65"/>
+            <dia:point val="105,65"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="2"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+    </dia:group>
+  </dia:layer>
+</dia:diagram>
diff --git a/project/captive/doc/dia/arch-all.gif b/project/captive/doc/dia/arch-all.gif
new file mode 100644 (file)
index 0000000..f8408ad
Binary files /dev/null and b/project/captive/doc/dia/arch-all.gif differ
diff --git a/project/captive/doc/dia/arch-all.png b/project/captive/doc/dia/arch-all.png
new file mode 100644 (file)
index 0000000..74c2af2
Binary files /dev/null and b/project/captive/doc/dia/arch-all.png differ
diff --git a/project/captive/doc/dia/cache-manager.dia b/project/captive/doc/dia/cache-manager.dia
new file mode 100644 (file)
index 0000000..3efa82d
--- /dev/null
@@ -0,0 +1,1455 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,-6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-2.5,-6.5;118.5,33.5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-2,-6"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="120"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="39"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ffffff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="51,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="50.7172,-0.213244;79.5586,6.28284"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="51,6"/>
+        <dia:point val="79,2"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="2.2"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="2.2"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O32" connection="4"/>
+        <dia:connection handle="1" to="O12" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="51,27"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="50.6528,7.65276;79.3472,27.3472"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="51,27"/>
+        <dia:point val="79,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O38" connection="4"/>
+        <dia:connection handle="1" to="O12" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="51,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="50.6855,7.68549;79.3145,17.3145"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="51,17"/>
+        <dia:point val="79,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O35" connection="4"/>
+        <dia:connection handle="1" to="O12" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O4">
+      <dia:attribute name="obj_pos">
+        <dia:point val="28,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.6742,9.42393;55.8352,22.3258"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="28,22"/>
+        <dia:point val="55,11"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="4"/>
+        <dia:connection handle="1" to="O41" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O5">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.4,5.75;15.6,11.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="14,6"/>
+        <dia:point val="14,11"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O26" connection="6"/>
+        <dia:connection handle="1" to="O28" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O6">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,15"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.4,14.75;15.6,20.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="14,15"/>
+        <dia:point val="14,20"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O28" connection="6"/>
+        <dia:connection handle="1" to="O30" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O7">
+      <dia:attribute name="obj_pos">
+        <dia:point val="28,20"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.6646,5.06085;36.5429,20.3354"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="28,20"/>
+        <dia:point val="35,6"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="2"/>
+        <dia:connection handle="1" to="O32" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="28,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.6513,15.5527;36.1334,22.3487"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="28,22"/>
+        <dia:point val="35,17"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="4"/>
+        <dia:connection handle="1" to="O35" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O9">
+      <dia:attribute name="obj_pos">
+        <dia:point val="28,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.6513,21.6513;36.1334,28.4473"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="28,22"/>
+        <dia:point val="35,27"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="4"/>
+        <dia:connection handle="1" to="O38" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="28,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.75,20.4;55.25,23.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="28,22"/>
+        <dia:point val="55,22"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="4"/>
+        <dia:connection handle="1" to="O44" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="59,-1"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="34.9925,-5;83.0075,0"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#NT Cache Manager#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="59,-1"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="79,2"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="78.75,1.75;116.25,14.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="79,2"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="37"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="12"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff00ff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="87,5"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="83.3865,2.6;90.6135,5.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#page#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="3"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="87,5"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O14">
+      <dia:attribute name="obj_pos">
+        <dia:point val="83,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="83,8.4;116.264,12.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#dirty
+dirty: &lt;LSNoldest .. LSNnewest&gt;#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="83,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Line" version="0" id="O15">
+        <dia:attribute name="obj_pos">
+          <dia:point val="80,9"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="79.6464,6.64645;82.3536,9.35355"/>
+        </dia:attribute>
+        <dia:attribute name="conn_endpoints">
+          <dia:point val="80,9"/>
+          <dia:point val="82,7"/>
+        </dia:attribute>
+        <dia:attribute name="numcp">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Line" version="0" id="O16">
+        <dia:attribute name="obj_pos">
+          <dia:point val="80,9"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="79.75,8.75;82.25,9.25"/>
+        </dia:attribute>
+        <dia:attribute name="conn_endpoints">
+          <dia:point val="80,9"/>
+          <dia:point val="82,9"/>
+        </dia:attribute>
+        <dia:attribute name="numcp">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Line" version="0" id="O17">
+        <dia:attribute name="obj_pos">
+          <dia:point val="80,9"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="79.6464,8.64645;82.3536,11.3536"/>
+        </dia:attribute>
+        <dia:attribute name="conn_endpoints">
+          <dia:point val="80,9"/>
+          <dia:point val="82,11"/>
+        </dia:attribute>
+        <dia:attribute name="numcp">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="line_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O18">
+      <dia:attribute name="obj_pos">
+        <dia:point val="73,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="72.6646,7.66459;79.3354,11.3354"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="73,11"/>
+        <dia:point val="79,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O41" connection="4"/>
+        <dia:connection handle="1" to="O12" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O19">
+      <dia:attribute name="obj_pos">
+        <dia:point val="73,22"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="72.6717,7.67173;79.3283,22.3283"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="73,22"/>
+        <dia:point val="79,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O44" connection="4"/>
+        <dia:connection handle="1" to="O12" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O20">
+          <dia:attribute name="obj_pos">
+            <dia:point val="90,28"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="90,26.4;104.85,28.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#opt. reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="90,28"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O21">
+          <dia:attribute name="obj_pos">
+            <dia:point val="106,27"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="105.75,25.4;111.25,28.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="106,27"/>
+            <dia:point val="111,27"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="9"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O22">
+          <dia:attribute name="obj_pos">
+            <dia:point val="90,25"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="90,23.4;104.454,25.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#N:1 reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="90,25"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O23">
+          <dia:attribute name="obj_pos">
+            <dia:point val="106,24"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="105.75,22.4;111.25,25.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="106,24"/>
+            <dia:point val="111,24"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow">
+            <dia:enum val="20"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O24">
+          <dia:attribute name="obj_pos">
+            <dia:point val="90,22"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="90,20.4;100.362,22.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="90,22"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O25">
+          <dia:attribute name="obj_pos">
+            <dia:point val="106,21"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="105.75,19.4;111.25,22.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="106,21"/>
+            <dia:point val="111,21"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O26">
+        <dia:attribute name="obj_pos">
+          <dia:point val="2,2"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="1.75,1.75;26.25,6.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="2,2"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#007fff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O27">
+        <dia:attribute name="obj_pos">
+          <dia:point val="14,5"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="2.5655,2.6;25.4345,5.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#W32 FileObject#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="14,5"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O28">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,11"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="5.75,10.75;22.25,15.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="6,11"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#007fff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O29">
+        <dia:attribute name="obj_pos">
+          <dia:point val="14,14"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="7.0205,11.6;20.9795,14.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#W32 FCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="14,14"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O30">
+        <dia:attribute name="obj_pos">
+          <dia:point val="0,20"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-0.25,19.75;28.25,24.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="0,20"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="28"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O31">
+        <dia:attribute name="obj_pos">
+          <dia:point val="14,23"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="0.5855,20.6;27.4145,23.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#SharedCacheMap#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="14,23"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O32">
+        <dia:attribute name="obj_pos">
+          <dia:point val="35,2"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="34.75,1.75;51.25,10.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="35,2"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#00ff00"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O33">
+        <dia:attribute name="obj_pos">
+          <dia:point val="43,7"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="37.654,5.4;48.346,9.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#pages:
+start .. end#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="43,7"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O34">
+        <dia:attribute name="obj_pos">
+          <dia:point val="43,5"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="35.971,2.6;50.029,5.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Map BCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="43,5"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O35">
+        <dia:attribute name="obj_pos">
+          <dia:point val="35,13"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="34.75,12.75;51.25,21.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="35,13"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#0000ff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O36">
+        <dia:attribute name="obj_pos">
+          <dia:point val="43,16"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="36.664,13.6;49.336,16.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Pin BCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="43,16"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O37">
+        <dia:attribute name="obj_pos">
+          <dia:point val="43,18"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="38.875,16.4;47.125,20.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#page:
+start + x#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="43,18"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O38">
+        <dia:attribute name="obj_pos">
+          <dia:point val="35,23"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="34.75,22.75;51.25,31.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="35,23"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#0000ff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O39">
+        <dia:attribute name="obj_pos">
+          <dia:point val="43,26"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="36.664,23.6;49.336,26.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Pin BCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="43,26"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O40">
+        <dia:attribute name="obj_pos">
+          <dia:point val="43,28"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="38.875,26.4;47.125,30.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#page:
+start + y#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="43,28"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O41">
+        <dia:attribute name="obj_pos">
+          <dia:point val="55,6"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="54.75,5.75;73.25,16.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="55,6"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="10"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#0000ff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="line_style">
+          <dia:enum val="1"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O42">
+        <dia:attribute name="obj_pos">
+          <dia:point val="64,9"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="57.664,6.6;70.336,9.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Pin BCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="64,9"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O43">
+        <dia:attribute name="obj_pos">
+          <dia:point val="64,11"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="55.816,9.4;72.184,15.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ThreadId owned
+page:
+start + x#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="64,11"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O44">
+        <dia:attribute name="obj_pos">
+          <dia:point val="55,17"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="54.75,16.75;73.25,27.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="55,17"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="10"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#0000ff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="line_style">
+          <dia:enum val="1"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O45">
+        <dia:attribute name="obj_pos">
+          <dia:point val="64,20"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="57.664,17.6;70.336,20.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Pin BCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="64,20"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O46">
+        <dia:attribute name="obj_pos">
+          <dia:point val="64,22"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="55.816,20.4;72.184,26.4"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ThreadId owned
+page:
+start + x#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="2"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="64,22"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Text" version="0" id="O47">
+      <dia:attribute name="obj_pos">
+        <dia:point val="83,8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="83,6.4;88.214,8.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#clean#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="2"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="83,8"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+  </dia:layer>
+</dia:diagram>
diff --git a/project/captive/doc/dia/cache-manager.gif b/project/captive/doc/dia/cache-manager.gif
new file mode 100644 (file)
index 0000000..c9ae2c6
Binary files /dev/null and b/project/captive/doc/dia/cache-manager.gif differ
diff --git a/project/captive/doc/dia/cache-manager.png b/project/captive/doc/dia/cache-manager.png
new file mode 100644 (file)
index 0000000..fc5c3f8
Binary files /dev/null and b/project/captive/doc/dia/cache-manager.png differ
diff --git a/project/captive/doc/dia/inheritance.dia b/project/captive/doc/dia/inheritance.dia
new file mode 100644 (file)
index 0000000..93ecf40
--- /dev/null
@@ -0,0 +1,2595 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="0.3"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-39,-9"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-39.5,-9.5;77.5,87.5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-39,-9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="116"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="96"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ffffff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-3,14"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-3.25,13.75;75.25,20.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-3,14"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="78"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="6"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="2"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-37,0"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-37.25,-0.25;75.25,11.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-37,0"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="112"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="11"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="2"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-10,3"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-10.25,1.4;41.25,4.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-10,3"/>
+        <dia:point val="41,3"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="2"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O59" connection="4"/>
+        <dia:connection handle="1" to="O61" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O4">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-10,3"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-10.343,2.657;-5.49939,9.03757"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-10,3"/>
+        <dia:point val="-7,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O59" connection="4"/>
+        <dia:connection handle="1" to="O25" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O5">
+      <dia:attribute name="obj_pos">
+        <dia:point val="19,8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="18.75,6.4;22.25,9.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="19,8"/>
+        <dia:point val="22,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O25" connection="4"/>
+        <dia:connection handle="1" to="O57" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O6">
+      <dia:attribute name="obj_pos">
+        <dia:point val="57,3"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="56.75,1.4;60.25,4.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="57,3"/>
+        <dia:point val="60,3"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="2"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O61" connection="4"/>
+        <dia:connection handle="1" to="O19" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O7">
+      <dia:attribute name="obj_pos">
+        <dia:point val="49,5"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="47.4,4.75;50.6,15.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="49,5"/>
+        <dia:point val="49,15"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O61" connection="6"/>
+        <dia:connection handle="1" to="O23" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="52,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="51.75,15.4;60.25,18.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="52,17"/>
+        <dia:point val="60,17"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O23" connection="4"/>
+        <dia:connection handle="1" to="O21" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O9">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="13.75,15.4;46.25,18.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="14,17"/>
+        <dia:point val="46,17"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O27" connection="4"/>
+        <dia:connection handle="1" to="O23" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="6,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.4,9.75;7.6,15.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="6,10"/>
+        <dia:point val="6,15"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O25" connection="6"/>
+        <dia:connection handle="1" to="O27" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-23,31"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-24.6,30.75;-21.4,41.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-23,31"/>
+        <dia:point val="-23,41"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O63" connection="6"/>
+        <dia:connection handle="1" to="O66" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="6,31"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.4,30.75;7.6,41.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="6,31"/>
+        <dia:point val="6,41"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="9"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O30" connection="6"/>
+        <dia:connection handle="1" to="O34" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-38,36"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-38.5,35.5;75.5,36.5"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-38,36"/>
+        <dia:point val="75,36"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O14">
+      <dia:attribute name="obj_pos">
+        <dia:point val="20,-3"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-16.531,-7.8;56.531,-1.8"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Sandboxing/Inheritance#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="6"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="20,-3"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O15">
+      <dia:attribute name="obj_pos">
+        <dia:point val="48,33"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="27.705,29;68.295,34"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Sandbox parent#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="48,33"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O16">
+      <dia:attribute name="obj_pos">
+        <dia:point val="48,43"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="25.9725,39;70.0275,44"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Sandboxed slave#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="5"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="48,43"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O17">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-5,-2"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-5,-3.18938;-5,-1.58938"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-5,-2"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O18">
+      <dia:attribute name="obj_pos">
+        <dia:point val="68,8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="68,6.81062;68,8.41062"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="68,8"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O19">
+        <dia:attribute name="obj_pos">
+          <dia:point val="60,1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="59.75,0.75;74.25,5.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="60,1"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O20">
+        <dia:attribute name="obj_pos">
+          <dia:point val="67,4"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="60.862,1.6;73.138,4.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GObject#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="67,4"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O21">
+        <dia:attribute name="obj_pos">
+          <dia:point val="60,15"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="59.75,14.75;74.25,19.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="60,15"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O22">
+        <dia:attribute name="obj_pos">
+          <dia:point val="67,18"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="60.862,15.6;73.138,18.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GObject#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="67,18"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O23">
+        <dia:attribute name="obj_pos">
+          <dia:point val="46,15"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="45.75,14.75;52.25,19.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="46,15"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="6"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O24">
+        <dia:attribute name="obj_pos">
+          <dia:point val="49,18"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="46.5745,15.6;51.4255,18.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Vfs#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="49,18"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O25">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-7,6"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-7.25,5.75;19.25,10.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-7,6"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="26"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O26">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,9"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-7.0185,6.6;19.0185,9.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#ParentConnector#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,9"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O27">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-2,15"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-2.25,14.75;14.25,19.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-2,15"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O28">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,18"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-1.524,15.6;13.524,18.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#VfsParent#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,18"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O29">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-23,5"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-24.6,4.75;-21.4,23.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-23,5"/>
+        <dia:point val="-23,23"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O59" connection="6"/>
+        <dia:connection handle="1" to="O63" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O30">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-1,23"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-1.25,22.75;13.25,31.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-1,23"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#00ff00"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O31">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,30"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-0.336,27.6;12.336,30.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Vfs stub#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,30"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O32">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,27"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="0.159,24.6;11.841,27.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#CORBA#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,27"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O33">
+      <dia:attribute name="obj_pos">
+        <dia:point val="6,19"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.4,18.75;7.6,23.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="6,19"/>
+        <dia:point val="6,23"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O27" connection="6"/>
+        <dia:connection handle="1" to="O30" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O34">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-3,41"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-3.25,40.75;15.25,49.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-3,41"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="18"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#00ff00"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O35">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,48"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-2.7615,45.6;14.7615,48.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Vfs servant#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,48"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O36">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,45"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="0.159,42.6;11.841,45.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#CORBA#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,45"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O37">
+      <dia:attribute name="obj_pos">
+        <dia:point val="19,62"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="17.4,56.75;20.6,62.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="19,62"/>
+        <dia:point val="19,57"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O71" connection="1"/>
+        <dia:connection handle="1" to="O50" connection="6"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O38">
+      <dia:attribute name="obj_pos">
+        <dia:point val="54,66"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="54,64.8106;54,66.4106"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="54,66"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O39">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-23,49"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-24.6,48.75;-21.4,62.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-23,49"/>
+        <dia:point val="-23,62"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O66" connection="6"/>
+        <dia:connection handle="1" to="O69" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O40">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-36,61"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-36.25,60.75;45.25,67.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-36,61"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="81"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="6"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="2"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O41">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-32,64"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-32.25,62.4;21.25,65.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-32,64"/>
+        <dia:point val="21,64"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="2"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O42">
+      <dia:attribute name="obj_pos">
+        <dia:point val="27,64"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="26.75,62.4;30.25,65.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="27,64"/>
+        <dia:point val="30,64"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="2"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O71" connection="4"/>
+        <dia:connection handle="1" to="O43" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O43">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,62"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="29.75,61.75;44.25,66.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="30,62"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O44">
+        <dia:attribute name="obj_pos">
+          <dia:point val="37,65"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="30.862,62.6;43.138,65.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GObject#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="37,65"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Box" version="0" id="O45">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,52"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-2.25,51.75;45.25,58.25"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-2,52"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="47"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="6"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="2"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O46">
+      <dia:attribute name="obj_pos">
+        <dia:point val="22,55"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="21.75,53.4;30.25,56.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="22,55"/>
+        <dia:point val="30,55"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O50" connection="4"/>
+        <dia:connection handle="1" to="O48" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O47">
+      <dia:attribute name="obj_pos">
+        <dia:point val="13,55"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.75,53.4;16.25,56.6"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="13,55"/>
+        <dia:point val="16,55"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_color">
+        <dia:color val="#0000ff"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O52" connection="4"/>
+        <dia:connection handle="1" to="O50" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O48">
+        <dia:attribute name="obj_pos">
+          <dia:point val="30,53"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="29.75,52.75;44.25,57.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="30,53"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O49">
+        <dia:attribute name="obj_pos">
+          <dia:point val="37,56"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="30.862,53.6;43.138,56.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GObject#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="37,56"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O50">
+        <dia:attribute name="obj_pos">
+          <dia:point val="16,53"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="15.75,52.75;22.25,57.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="16,53"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="6"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O51">
+        <dia:attribute name="obj_pos">
+          <dia:point val="19,56"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="16.5745,53.6;21.4255,56.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Vfs#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="19,56"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O52">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-1,53"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-1.25,52.75;13.25,57.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-1,53"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="14"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O53">
+        <dia:attribute name="obj_pos">
+          <dia:point val="6,56"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-0.732,53.6;12.732,56.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#VfsSlave#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="6,56"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:object type="Standard - Line" version="0" id="O54">
+      <dia:attribute name="obj_pos">
+        <dia:point val="6,49"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.4,48.75;7.6,53.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="6,49"/>
+        <dia:point val="6,53"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O34" connection="6"/>
+        <dia:connection handle="1" to="O52" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O55">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-23,75"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-24.6,74.75;-21.4,79.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-23,75"/>
+        <dia:point val="-23,79"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="20"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O81" connection="6"/>
+        <dia:connection handle="1" to="O83" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O56">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-23,66"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-24.6,65.75;-21.4,71.25"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="-23,66"/>
+        <dia:point val="-23,71"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="1.6"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O69" connection="6"/>
+        <dia:connection handle="1" to="O81" connection="1"/>
+      </dia:connections>
+    </dia:object>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O57">
+        <dia:attribute name="obj_pos">
+          <dia:point val="22,6"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="21.75,5.75;46.25,10.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="22,6"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O58">
+        <dia:attribute name="obj_pos">
+          <dia:point val="34,9"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="22.318,6.6;45.682,9.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#GTypeInterface#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="34,9"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O59">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-36,1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-36.25,0.75;-9.75,5.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-36,1"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="26"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O60">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,4"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-35.078,1.6;-10.922,4.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#DirectoryParent#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,4"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O61">
+        <dia:attribute name="obj_pos">
+          <dia:point val="41,1"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="40.75,0.75;57.25,5.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="41,1"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O62">
+        <dia:attribute name="obj_pos">
+          <dia:point val="49,4"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="42.0205,1.6;55.9795,4.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Directory#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="49,4"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O63">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-35,23"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-35.25,22.75;-10.75,31.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-35,23"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#00ff00"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O64">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,30"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-33.89,27.6;-12.11,30.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Directory stub#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,30"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O65">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,27"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-28.841,24.6;-17.159,27.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#CORBA#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,27"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O66">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-37,41"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-37.25,40.75;-8.75,49.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-37,41"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="28"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="8"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#00ff00"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O67">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,48"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-36.3155,45.6;-9.6845,48.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Directory servant#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,48"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O68">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,45"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-28.841,42.6;-17.159,45.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#CORBA#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,45"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O69">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-35,62"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-35.25,61.75;-10.75,66.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-35,62"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#ff0000"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O70">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,65"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-34.286,62.6;-11.714,65.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#DirectorySlave#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,65"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O71">
+        <dia:attribute name="obj_pos">
+          <dia:point val="11,62"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="10.75,61.75;27.25,66.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="11,62"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O72">
+        <dia:attribute name="obj_pos">
+          <dia:point val="19,65"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="12.0205,62.6;25.9795,65.6"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#Directory#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="19,65"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O73">
+          <dia:attribute name="obj_pos">
+            <dia:point val="49,79"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="49,77.4;63.85,79.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#opt. reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="49,79"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O74">
+          <dia:attribute name="obj_pos">
+            <dia:point val="65,78"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="64.75,76.4;70.25,79.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="65,78"/>
+            <dia:point val="70,78"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="9"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O75">
+          <dia:attribute name="obj_pos">
+            <dia:point val="49,76"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="49,74.4;63.454,76.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#N:1 reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="49,76"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O76">
+          <dia:attribute name="obj_pos">
+            <dia:point val="65,75"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="64.75,73.4;70.25,76.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="65,75"/>
+            <dia:point val="70,75"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow">
+            <dia:enum val="20"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="start_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O77">
+          <dia:attribute name="obj_pos">
+            <dia:point val="49,73"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="49,71.4;59.362,73.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#reference:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="49,73"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O78">
+          <dia:attribute name="obj_pos">
+            <dia:point val="65,72"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="64.75,70.4;70.25,73.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="65,72"/>
+            <dia:point val="70,72"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+      <dia:group>
+        <dia:object type="Standard - Text" version="0" id="O79">
+          <dia:attribute name="obj_pos">
+            <dia:point val="49,70"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="49,68.4;61.144,70.4"/>
+          </dia:attribute>
+          <dia:attribute name="text">
+            <dia:composite type="text">
+              <dia:attribute name="string">
+                <dia:string>#inheritance:#</dia:string>
+              </dia:attribute>
+              <dia:attribute name="font">
+                <dia:font name="Helvetica-BoldOblique"/>
+              </dia:attribute>
+              <dia:attribute name="height">
+                <dia:real val="2"/>
+              </dia:attribute>
+              <dia:attribute name="pos">
+                <dia:point val="49,70"/>
+              </dia:attribute>
+              <dia:attribute name="color">
+                <dia:color val="#000000"/>
+              </dia:attribute>
+              <dia:attribute name="alignment">
+                <dia:enum val="0"/>
+              </dia:attribute>
+            </dia:composite>
+          </dia:attribute>
+        </dia:object>
+        <dia:object type="Standard - Line" version="0" id="O80">
+          <dia:attribute name="obj_pos">
+            <dia:point val="65,69"/>
+          </dia:attribute>
+          <dia:attribute name="obj_bb">
+            <dia:rectangle val="64.75,67.4;70.25,70.6"/>
+          </dia:attribute>
+          <dia:attribute name="conn_endpoints">
+            <dia:point val="65,69"/>
+            <dia:point val="70,69"/>
+          </dia:attribute>
+          <dia:attribute name="numcp">
+            <dia:int val="1"/>
+          </dia:attribute>
+          <dia:attribute name="line_color">
+            <dia:color val="#0000ff"/>
+          </dia:attribute>
+          <dia:attribute name="line_width">
+            <dia:real val="0.5"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow">
+            <dia:enum val="1"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_length">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+          <dia:attribute name="end_arrow_width">
+            <dia:real val="1.6"/>
+          </dia:attribute>
+        </dia:object>
+      </dia:group>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O81">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-35,71"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-35.25,70.75;-10.75,75.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-35,71"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="24"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#007fff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O82">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,74"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-34.4345,71.55;-11.5155,74.7"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#W32 FileObject#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,74"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+    <dia:group>
+      <dia:object type="Standard - Box" version="0" id="O83">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-31,79"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-31.25,78.75;-14.75,83.25"/>
+        </dia:attribute>
+        <dia:attribute name="elem_corner">
+          <dia:point val="-31,79"/>
+        </dia:attribute>
+        <dia:attribute name="elem_width">
+          <dia:real val="16"/>
+        </dia:attribute>
+        <dia:attribute name="elem_height">
+          <dia:real val="4"/>
+        </dia:attribute>
+        <dia:attribute name="border_width">
+          <dia:real val="0.5"/>
+        </dia:attribute>
+        <dia:attribute name="border_color">
+          <dia:color val="#007fff"/>
+        </dia:attribute>
+        <dia:attribute name="show_background">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+      </dia:object>
+      <dia:object type="Standard - Text" version="0" id="O84">
+        <dia:attribute name="obj_pos">
+          <dia:point val="-23,82"/>
+        </dia:attribute>
+        <dia:attribute name="obj_bb">
+          <dia:rectangle val="-29.9795,79.55;-15.9705,82.7"/>
+        </dia:attribute>
+        <dia:attribute name="text">
+          <dia:composite type="text">
+            <dia:attribute name="string">
+              <dia:string>#W32 FCB#</dia:string>
+            </dia:attribute>
+            <dia:attribute name="font">
+              <dia:font name="Helvetica-Bold"/>
+            </dia:attribute>
+            <dia:attribute name="height">
+              <dia:real val="3"/>
+            </dia:attribute>
+            <dia:attribute name="pos">
+              <dia:point val="-23,82"/>
+            </dia:attribute>
+            <dia:attribute name="color">
+              <dia:color val="#000000"/>
+            </dia:attribute>
+            <dia:attribute name="alignment">
+              <dia:enum val="1"/>
+            </dia:attribute>
+          </dia:composite>
+        </dia:attribute>
+      </dia:object>
+    </dia:group>
+  </dia:layer>
+</dia:diagram>
diff --git a/project/captive/doc/dia/inheritance.gif b/project/captive/doc/dia/inheritance.gif
new file mode 100644 (file)
index 0000000..c34de03
Binary files /dev/null and b/project/captive/doc/dia/inheritance.gif differ
diff --git a/project/captive/doc/dia/inheritance.png b/project/captive/doc/dia/inheritance.png
new file mode 100644 (file)
index 0000000..4ac30b6
Binary files /dev/null and b/project/captive/doc/dia/inheritance.png differ
diff --git a/project/captive/doc/dia/parent-connector.dia b/project/captive/doc/dia/parent-connector.dia
new file mode 100644 (file)
index 0000000..625c305
--- /dev/null
@@ -0,0 +1,1159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-4,1"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-4,1;24,26"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="-4,1"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="28"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="25"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ffffff"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="false"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0.736,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.686,5.95;7.3508,7.95"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="0.736,6"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="6.5648"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="1.9"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#disconnected#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="4.0184,7.19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10.868,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.818,5.95;14.79,7.95"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="10.868,6"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.872"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="1.9"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#broken#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12.804,7.19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#ff0000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0.868,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.768,11.9;4.808,14.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="0.868,12"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.84"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#00ff00"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#closed
+clean#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="2.788,13.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O4">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10.8548,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.7548,11.9;14.9004,14.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="10.8548,12"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.9456"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#closed 
+dirty #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12.8276,13.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O5">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.8076,17.9;5.1644,20.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="0.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="4.1568"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#00ff00"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#opened
+clean#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="2.986,19.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O6">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.8076,17.9;15.1644,20.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="10.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="4.1568"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#opened
+dirty#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12.986,19.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O7">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0,9"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-0.05,8.95;23.05,9.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="0,9"/>
+        <dia:point val="23,9"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="20,8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="18.0217,7.12;21.9784,8.22"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#no VFS#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.1"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="20,8"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O9">
+      <dia:attribute name="obj_pos">
+        <dia:point val="20,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="17.0053,10.12;22.9948,11.22"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#VFS exists#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.1"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="20,11"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10.8548,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="6.66355,7.33822;10.9253,12.0705"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="10.8548,12"/>
+        <dia:point val="7.3008,7.9"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O4" connection="0"/>
+        <dia:connection handle="1" to="O1" connection="15"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="8,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="6.8252,10.3647;9.1748,11.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#  cease#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="8,11"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="4,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.2,7.95;4.8,12.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="4,12"/>
+        <dia:point val="4,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="1.878,9.36471;4.122,10.9647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#cease  
+abort  #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="3,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O14">
+      <dia:attribute name="obj_pos">
+        <dia:point val="13,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.2,7.95;13.8,12.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="13,12"/>
+        <dia:point val="13,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O15">
+      <dia:attribute name="obj_pos">
+        <dia:point val="12,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.878,9.36471;13.122,10.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#abort  #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O16">
+      <dia:attribute name="obj_pos">
+        <dia:point val="5,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.2,7.95;5.8,18.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="5,18"/>
+        <dia:point val="5,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O17">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="5.5612,16.3647;8.4388,17.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#abort     #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="7,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O18">
+      <dia:attribute name="obj_pos">
+        <dia:point val="14.0252,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="13.1999,7.94798;14.8001,18.0501"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="14.0252,18"/>
+        <dia:point val="14,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O6" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O19">
+      <dia:attribute name="obj_pos">
+        <dia:point val="16,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="14.6668,16.3647;17.3332,17.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#abort    #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="16,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O20">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.0674425,14.7401;1.66856,18.0506"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="0.9076,18"/>
+        <dia:point val="0.868,14.8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O5" connection="0"/>
+        <dia:connection handle="1" to="O3" connection="11"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O21">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="1.4556,16.3647;4.5444,17.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#detach    #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="3,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O22">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.0541,14.7368;11.6555,18.0508"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="10.9076,18"/>
+        <dia:point val="10.8548,14.8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O6" connection="0"/>
+        <dia:connection handle="1" to="O4" connection="11"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O23">
+      <dia:attribute name="obj_pos">
+        <dia:point val="9,16"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.7988,15.3647;10.2012,16.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#detach#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="9,16"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O24">
+      <dia:attribute name="obj_pos">
+        <dia:point val="5.0644,19.4"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="5.0144,18.6;10.9576,20.2"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="5.0644,19.4"/>
+        <dia:point val="10.9076,19.4"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O5" connection="8"/>
+        <dia:connection handle="1" to="O6" connection="7"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O25">
+      <dia:attribute name="obj_pos">
+        <dia:point val="8,19"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="6.3764,18.3647;9.6236,19.1647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#write op.#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="8,19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Arc" version="0" id="O26">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0.736,7.9"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-0.24883,7.84842;1.66919,12.0757"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="0.736,7.9"/>
+        <dia:point val="0.868,12"/>
+      </dia:attribute>
+      <dia:attribute name="curve_distance">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O1" connection="11"/>
+        <dia:connection handle="1" to="O3" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O27">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-3.6236,9.36471;-0.3764,10.9647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#read op.
+write op.#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-2,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Arc" version="0" id="O28">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0.868,14.8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.073501,14.7494;1.70816,18.0599"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="0.868,14.8"/>
+        <dia:point val="0.9076,18"/>
+      </dia:attribute>
+      <dia:attribute name="curve_distance">
+        <dia:real val="0.7642"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O3" connection="11"/>
+        <dia:connection handle="1" to="O5" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O29">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-3.6236,16.3647;-0.3764,17.9647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#read op.
+write op.#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-2,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O30">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,23"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="1,22.3147;17.418,24.8647"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#shutdown: &lt;detach&gt; [unmount OK] &lt;cease&gt;
+shutdown: &lt;detach&gt; [crash] &lt;abort&gt;   
+unsolicited: [crash] &lt;abort&gt;         #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Bookman-Demi"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="1,23"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O31">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10,3"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-2.7908,1.48;22.7908,5.28"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#ParentConnector interface
+state machine#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.9"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="10,3"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O32">
+      <dia:attribute name="obj_pos">
+        <dia:point val="20,14"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="16.7148,13.12;23.2852,14.22"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#no HANDLE#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.1"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="20,14"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O33">
+      <dia:attribute name="obj_pos">
+        <dia:point val="20,19"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="17.6042,18.12;22.3958,20.32"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#HANDLE
+exists#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica-Bold"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.1"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="20,19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+  </dia:layer>
+</dia:diagram>
diff --git a/project/captive/doc/dia/parent-connector.gif b/project/captive/doc/dia/parent-connector.gif
new file mode 100644 (file)
index 0000000..337e430
Binary files /dev/null and b/project/captive/doc/dia/parent-connector.gif differ
diff --git a/project/captive/doc/dia/parent-connector.png b/project/captive/doc/dia/parent-connector.png
new file mode 100644 (file)
index 0000000..57356f2
Binary files /dev/null and b/project/captive/doc/dia/parent-connector.png differ
old mode 100755 (executable)
new mode 100644 (file)
similarity index 60%
rename from project/cvsutil/index.html.pl
rename to project/captive/doc/fig/Makefile.am
index f77cf06..b881b7f
@@ -1,7 +1,5 @@
-#! /usr/bin/perl
-# 
 # $Id$
-# Main page of 'My::Project::cvsutil'
+# automake source for the Makefile of project/captive/ documentation .fig-s
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use project::cvsutil::ListItem;
-
+include $(top_srcdir)/Makefile-head.am
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::cvsutil::ListItem,
-               );
+EXTRA_DIST+= \
+               functype_native_fromunix.fig \
+               functype_patched_native_fromw32.fig \
+               functype_patched_pass_fromunix.fig \
+               functype_patched_pass_fromw32.fig \
+               functype_patched_wrap_fromunix.fig \
+               functype_patched_wrap_fromw32.fig \
+               functype_unpatched_native_fromw32.fig \
+               calltype_cdecl.fig \
+               calltype_stdcall.fig \
+               calltype_fastcall.fig
 
-My::Web->footer();
+CLEANFILES+= \
+               *.png \
+               *.gif
diff --git a/project/captive/doc/fig/calltype_cdecl.fig b/project/captive/doc/fig/calltype_cdecl.fig
new file mode 100644 (file)
index 0000000..dd0429b
--- /dev/null
@@ -0,0 +1,87 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3750 1050 3750 3750
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 3450 1800 3450 2100 2250 2100 2250 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2032 2250 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1732 2250 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2325 2250 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2100 3450 2100 3450 2400 2250 2400 2250 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1275 3450 1275 3450 1800 2250 1800 2250 1275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2400 3450 2400 3450 2700 2250 2700 2250 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2700 3450 2700 3450 3000 2250 3000 2250 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2625 2250 2625
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2925 2250 2925
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 1800 6600 1800 6600 2100 5400 2100 5400 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2032 5400 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 1732 5400 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2325 5400 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 2100 6600 2100 6600 2400 5400 2400 5400 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 1275 6600 1275 6600 1800 5400 1800 5400 1275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 2400 6600 2400 6600 2700 5400 2700 5400 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 2700 6600 2700 6600 3000 5400 3000 5400 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2625 5400 2625
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2925 5400 2925
+4 0 0 50 0 16 13 0.0000 4 210 2745 2550 750 W32 cdecl calling convention\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 135 960 2415 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 2775 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2977 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 2377 [ESP+0x08]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 1778 [ESP+0x10]\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2910 argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2610 argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 135 960 5565 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 5925 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4073 2977 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4073 2677 [ESP+0x04]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4072 2377 [ESP+0x08]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4072 1778 [ESP+0x10]\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2910 argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2610 argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 180 945 923 2078 [ESP+0x0C]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2677 [ESP+0x04]\001
+4 0 0 50 0 0 12 0.0000 4 180 945 4073 2078 [ESP+0x0C]\001
+4 0 0 50 0 0 12 0.0000 4 135 795 1950 3750 before call\001
+4 0 0 50 0 0 12 0.0000 4 135 675 4950 3750 after call\001
+4 0 0 50 0 0 12 0.0000 4 135 1830 4050 3375 EDX:EAX=return value\001
diff --git a/project/captive/doc/fig/calltype_fastcall.fig b/project/captive/doc/fig/calltype_fastcall.fig
new file mode 100644 (file)
index 0000000..2a6fd0f
--- /dev/null
@@ -0,0 +1,47 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 3450 1800 3450 2100 2250 2100 2250 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2032 2250 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1732 2250 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2325 2250 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2100 3450 2100 3450 2400 2250 2400 2250 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1275 3450 1275 3450 1800 2250 1800 2250 1275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        4725 2325 5100 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5100 1275 6300 1275 6300 2400 5100 2400 5100 1275
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3750 1050 3750 3450
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 135 960 2415 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 2775 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 960 5258 1982 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 135 1830 4050 2850 EDX:EAX=return value\001
+4 0 0 50 0 0 12 0.0000 4 180 1320 1200 3000 ECX=argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 1335 1200 2700 EDX=argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 645 1215 2377 [ESP+0]\001
+4 0 0 50 0 0 12 0.0000 4 180 645 1215 2078 [ESP+4]\001
+4 0 0 50 0 0 12 0.0000 4 180 645 1215 1778 [ESP+8]\001
+4 0 0 50 0 0 12 0.0000 4 180 645 4058 2385 [ESP+0]\001
+4 0 0 50 0 0 12 0.0000 4 15 135 5641 1755 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 795 1950 3450 before call\001
+4 0 0 50 0 0 12 0.0000 4 135 675 4800 3450 after call\001
+4 0 0 50 0 16 13 0.0000 4 210 2910 2550 750 W32 fastcall calling convention\001
diff --git a/project/captive/doc/fig/calltype_stdcall.fig b/project/captive/doc/fig/calltype_stdcall.fig
new file mode 100644 (file)
index 0000000..a7fb9e2
--- /dev/null
@@ -0,0 +1,59 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 3450 1800 3450 2100 2250 2100 2250 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2032 2250 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1732 2250 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2325 2250 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2100 3450 2100 3450 2400 2250 2400 2250 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1275 3450 1275 3450 1800 2250 1800 2250 1275
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3750 1050 3750 3450
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2400 3450 2400 3450 2700 2250 2700 2250 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2700 3450 2700 3450 3000 2250 3000 2250 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2625 2250 2625
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2925 2250 2925
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2325 5400 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 1275 6600 1275 6600 2400 5400 2400 5400 1275
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 135 960 2415 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 2775 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 1830 4050 2850 EDX:EAX=return value\001
+4 0 0 50 0 0 12 0.0000 4 135 795 1950 3450 before call\001
+4 0 0 50 0 16 13 0.0000 4 210 2850 2550 750 W32 stdcall calling convention\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2977 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2677 [ESP+0x04]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 2377 [ESP+0x08]\001
+4 0 0 50 0 0 12 0.0000 4 180 945 893 2078 [ESP+0x0C]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 1778 [ESP+0x10]\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2910 argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2610 argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4058 2385 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 135 960 5558 1982 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 5941 1755 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 675 4950 3450 after call\001
diff --git a/project/captive/doc/fig/functype_native_fromunix.fig b/project/captive/doc/fig/functype_native_fromunix.fig
new file mode 100644 (file)
index 0000000..4a2934a
--- /dev/null
@@ -0,0 +1,44 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 3150 5535 3870 6255
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 5535 3870 5535 3870 6075 3150 6075 3150 5535
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 6075 3870 6075 3870 6255 3150 6255 3150 6075
+4 0 0 50 0 0 12 0.0000 4 135 585 3237 5887 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 3439 6203 ret\001
+-6
+6 4275 5490 4950 5850
+4 0 0 50 0 0 12 0.0000 4 180 600 4309 5631 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 4382 5817 cdecl\001
+-6
+6 3060 3375 4005 3780
+6 3060 3555 4005 3780
+4 0 0 50 0 0 12 0.0000 4 180 900 3083 3698 calling code\001
+-6
+4 0 0 50 0 0 12 0.0000 4 135 465 3270 3510 UNIX\001
+-6
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4140 3510 4410
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 1 2
+       2 1 1.00 120.00 90.00
+        3510 5085 3510 4815
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4410 3870 4410 3870 4815 3150 4815 3150 4410
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        3510 6255 3510 6435 4185 6435 4185 4680 3870 4680
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 6
+       0 0 1.00 60.00 120.00
+        3870 4545 4320 4545 4320 5400 2835 5400 2835 5805 3150 5805
+4 0 0 50 0 0 12 0.0000 4 135 555 3242 4674 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 3240 4095 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3330 5265 END\001
diff --git a/project/captive/doc/fig/functype_patched_native_fromw32.fig b/project/captive/doc/fig/functype_patched_native_fromw32.fig
new file mode 100644 (file)
index 0000000..82a7618
--- /dev/null
@@ -0,0 +1,103 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2625 2550 3225 3150
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 2841 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 2720 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 2969 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 3096 /fastcall\001
+-6
+6 4725 1350 5550 1950
+4 0 0 50 0 1 12 0.0000 4 135 720 4778 1718 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4901 1531 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 4864 1893 handler\001
+-6
+6 1650 1500 2475 1950
+4 0 0 50 0 0 12 0.0000 4 135 465 1831 1674 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 180 735 1719 1849 jumptable\001
+-6
+6 2925 1500 4425 1950
+4 0 0 50 0 1 12 0.0000 4 180 1470 2939 1665 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 3225 1852 binary code\001
+-6
+6 600 1500 1125 1875
+4 0 0 50 0 0 12 0.0000 4 135 465 615 1665 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 360 668 1846 code\001
+-6
+6 4815 3240 5445 3420
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3240 5445 3240 5445 3420 4815 3420 4815 3240
+4 0 0 50 0 0 9 0.0000 4 90 405 4950 3375 redirect\001
+-6
+6 953 3343 1628 3718
+4 0 0 50 0 0 12 0.0000 4 180 600 1017 3514 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 1090 3700 cdecl\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 3375 2070 3555 2430 3555 2430 2520 3195 2520
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3195 2385 2565 2385 2565 3330 3240 3330
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 7
+       0 0 1.00 60.00 120.00
+        5130 3420 5130 3555 5670 3555 5670 2025 1440 2025 1440 2475
+        1845 2475
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        855 3150 855 3330 1665 3330 1665 2880 1845 2880
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1845 2700 1215 2700
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2790 2295 2790 2295 2970 1845 2970 1845 2790
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3240 2295 3240 2295 3375 1845 3375 1845 3240
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2970 2295 2970 2295 3240 1845 3240 1845 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2340 2295 2340 2295 2610 1845 2610 1845 2340
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2610 2295 2610 2295 2790 1845 2790 1845 2610
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 4275 4185 4275 4185 4635 3195 4635 3195 4275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 2655 4185 2655 4185 2250 3195 2250 3195 2655
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3690 2655 3690 2835
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3150 2115 3465 2250
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3195 4185 3195 4185 3465 3195 3465 3195 3195
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3465 4185 3465 4185 4275 3195 4275 3195 3465
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        4140 3330 4815 3330
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2430 1215 2430 1215 2970 495 2970 495 2430
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2970 1215 2970 1215 3150 495 3150 495 2970
+4 0 0 50 0 0 12 0.0000 4 105 210 3594 4507 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 3345 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 2457 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 2558 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 3093 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 3193 trace\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3430 2510 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 2564 2212 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3517 2981 END\001
+4 0 0 50 0 0 9 0.0000 4 75 270 3540 3382 break\001
+4 0 0 50 0 0 12 0.0000 4 135 540 3427 3885 unused\001
+4 0 0 50 0 0 12 0.0000 4 135 585 3413 4102 callee...\001
+4 0 0 50 0 0 12 0.0000 4 135 360 3484 3720 W32\001
+4 0 0 50 0 0 12 0.0000 4 135 585 582 2782 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 784 3098 ret\001
diff --git a/project/captive/doc/fig/functype_patched_pass_fromunix.fig b/project/captive/doc/fig/functype_patched_pass_fromunix.fig
new file mode 100644 (file)
index 0000000..6d4c9c8
--- /dev/null
@@ -0,0 +1,116 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 4594 4305 4849 4495
+4 0 0 50 0 0 9 0.0000 4 75 255 4594 4495 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 4615 4395 exit\001
+-6
+6 4589 3696 4859 3872
+4 0 0 50 0 0 9 0.0000 4 105 270 4589 3771 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4594 3872 trace\001
+-6
+6 4990 3300 5740 4050
+4 0 0 50 0 1 12 0.0000 4 180 600 5049 3949 /fastcall\001
+4 0 0 50 0 1 12 0.0000 4 135 600 5066 3782 /stdcall/\001
+4 0 0 50 0 1 12 0.0000 4 135 435 5114 3634 cdecl/\001
+4 0 0 50 0 0 12 0.0000 4 180 600 5068 3463 calltype\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        4950 4005 5985 4005
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        6165 5400 6165 5580 5310 5580 5310 4275 4950 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        6255 4005 6975 4005 6975 3690 7290 3690
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        7605 3960 7605 4140 6615 4140
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        6615 4275 7290 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        7605 4590 7605 4770 6975 4770 6975 4455 6255 4455
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3870 4545 4185 4545 4185 3870 4500 3870
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4500 6660 4500 6660 5040 5670 5040 5670 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 5040 6660 5040 6660 5400 5670 5400 5670 5040
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4230 5940 4230 5940 4500 5670 4500 5670 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 4230 6300 4230 6300 4500 5940 4500 5940 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 4230 6660 4230 6660 4500 6300 4500 6300 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 3960 6300 3960 6300 4230 5940 4230 5940 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 3960 6660 3960 6660 4230 6300 4230 6300 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3600 7922 3600 7922 3780 7290 3780 7290 3600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3780 7920 3780 7920 3960 7290 3960 7290 3780
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4230 7920 4230 7920 4410 7290 4410 7290 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4410 7920 4410 7920 4590 7290 4590 7290 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3960 5940 3960 5940 4230 5670 4230 5670 3960
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4140 3510 4410
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 1 2
+       2 1 1.00 120.00 90.00
+        3510 5085 3510 4815
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4410 3870 4410 3870 4815 3150 4815 3150 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4275 4950 4275 4950 4545 4500 4545 4500 4275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4545 4950 4545 4950 4680 4500 4680 4500 4545
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 4680 4725 4950 4185 4950 4185 4680 3870 4680
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3645 4950 3645 4950 3915 4500 3915 4500 3645
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3915 4950 3915 4950 4095 4500 4095 4500 3915
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4095 4950 4095 4950 4275 4500 4275 4500 4095
+4 0 0 50 0 0 12 0.0000 4 180 900 3083 3338 calling code\001
+4 0 0 50 0 1 12 0.0000 4 180 1470 5414 3150 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 5700 3337 binary code\001
+4 0 0 50 0 0 12 0.0000 4 135 465 3270 3150 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 105 210 6069 5272 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4140 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 5970 4140 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 6360 4140 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 270 6331 4410 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 5996 4410 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4410 #2\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7369 3921 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7366 4373 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7371 3744 #1=instr\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7362 4545 #2=instr\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4486 3159 UNIX\001
+4 0 0 50 0 1 12 0.0000 4 135 720 7253 3248 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 7376 3061 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 7339 3423 handler\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3242 4674 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 585 5919 4837 callee...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 3240 4095 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3330 5265 END\001
+4 0 0 50 0 0 9 0.0000 4 75 150 4657 4662 ret\001
+4 0 0 50 0 0 12 0.0000 4 180 600 3904 3606 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 3977 3792 cdecl\001
+4 0 0 50 0 0 12 0.0000 4 180 735 4374 3334 jumptable\001
diff --git a/project/captive/doc/fig/functype_patched_pass_fromw32.fig b/project/captive/doc/fig/functype_patched_pass_fromw32.fig
new file mode 100644 (file)
index 0000000..71103f5
--- /dev/null
@@ -0,0 +1,136 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 7275 3675 7950 4125
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3735 7922 3735 7922 3915 7290 3915 7290 3735
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3915 7920 3915 7920 4095 7290 4095 7290 3915
+4 0 0 50 0 0 9 0.0000 4 75 465 7369 4056 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7371 3879 #1=instr\001
+-6
+6 5100 3375 5700 3975
+4 0 0 50 0 1 10 0.0000 4 105 405 5195 3606 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 5149 3485 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 5132 3734 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 5120 3861 /fastcall\001
+-6
+6 5175 4275 5775 4875
+4 0 0 50 0 1 10 0.0000 4 105 405 5250 4501 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 5204 4380 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 5187 4629 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 5175 4756 /fastcall\001
+-6
+6 5400 2250 6900 2700
+4 0 0 50 0 1 12 0.0000 4 180 1470 5414 2430 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 5700 2617 binary code\001
+-6
+6 4350 2250 5175 2700
+4 0 0 50 0 0 12 0.0000 4 180 735 4374 2614 jumptable\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4486 2439 UNIX\001
+-6
+6 7200 2175 8025 2775
+4 0 0 50 0 1 12 0.0000 4 135 720 7253 2528 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 7376 2341 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 7339 2703 handler\001
+-6
+6 4595 4475 4850 4665
+4 0 0 50 0 0 9 0.0000 4 90 210 4616 4565 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4595 4665 trace\001
+-6
+6 4588 3872 4858 4048
+4 0 0 50 0 0 9 0.0000 4 75 255 4593 4048 trace\001
+4 0 0 50 0 0 9 0.0000 4 105 270 4588 3947 entry\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        4950 4185 5985 4185
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        6165 5400 6165 5580 5130 5580 5130 4365 4950 4365
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        6255 4140 7065 4140 7065 3825 7290 3825
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        7605 4095 7605 4185 6615 4185
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        6615 4275 7290 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        7605 4590 7605 4725 6975 4725 6975 4455 6255 4455
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 4860 4725 5040 4275 5040 4275 3285 5670 3285
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4500 6660 4500 6660 5040 5670 5040 5670 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 5040 6660 5040 6660 5400 5670 5400 5670 5040
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4230 5940 4230 5940 4500 5670 4500 5670 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 4230 6300 4230 6300 4500 5940 4500 5940 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 4230 6660 4230 6660 4500 6300 4500 6300 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 3960 6300 3960 6300 4230 5940 4230 5940 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 3960 6660 3960 6660 4230 6300 4230 6300 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3960 5940 3960 5940 4230 5670 4230 5670 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3420 6660 3420 6660 3015 5670 3015 5670 3420
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        5670 3150 5040 3150 5040 4005 5985 4005
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3375 7920 3375 7920 3555 7290 3555 7290 3375
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        6255 4005 6885 4005 6885 3465 7290 3465
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 7
+       0 0 1.00 60.00 120.00
+        7605 3555 7605 3645 8145 3645 8145 2790 4140 2790 4140 3960
+        4500 3960
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        6165 3420 6165 3690
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        5670 2880 5940 3015
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4725 4950 4725 4950 4860 4500 4860 4500 4725
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4455 4950 4455 4950 4725 4500 4725 4500 4455
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4275 4950 4275 4950 4455 4500 4455 4500 4275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4095 4950 4095 4950 4275 4500 4275 4500 4095
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3825 4950 3825 4950 4095 4500 4095 4500 3825
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4230 7920 4230 7920 4410 7290 4410 7290 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4410 7920 4410 7920 4590 7290 4590 7290 4410
+4 0 0 50 0 0 12 0.0000 4 105 210 6069 5272 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4140 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 5970 4140 break\001
+4 0 0 50 0 0 9 0.0000 4 75 270 6331 4410 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 5996 4410 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4410 #2\001
+4 0 0 50 0 0 12 0.0000 4 135 585 5919 4837 callee...\001
+4 0 0 50 0 0 12 0.0000 4 135 555 5905 3275 caller...\001
+4 0 0 50 0 0 9 0.0000 4 90 405 7425 3510 redirect\001
+4 0 0 50 0 0 12 0.0000 4 135 390 5985 3825 END\001
+4 0 0 50 0 0 12 0.0000 4 135 570 5085 2970 START\001
+4 0 0 50 0 0 9 0.0000 4 75 150 4660 4819 ret\001
+4 0 0 50 0 0 9 0.0000 4 90 225 6356 4121 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7365 4369 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7373 4545 #2=instr\001
diff --git a/project/captive/doc/fig/functype_patched_wrap_fromunix.fig b/project/captive/doc/fig/functype_patched_wrap_fromunix.fig
new file mode 100644 (file)
index 0000000..4367e4f
--- /dev/null
@@ -0,0 +1,173 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 3900 3450 4575 3825
+4 0 0 50 0 0 12 0.0000 4 180 600 3904 3606 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 3977 3792 cdecl\001
+-6
+6 5400 5475 6075 6225
+4 0 0 50 0 1 12 0.0000 4 180 600 5417 6123 /fastcall\001
+4 0 0 50 0 1 12 0.0000 4 135 600 5434 5956 /stdcall/\001
+4 0 0 50 0 1 12 0.0000 4 135 435 5482 5808 cdecl/\001
+4 0 0 50 0 0 12 0.0000 4 180 600 5436 5637 calltype\001
+-6
+6 3150 5550 3900 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 5580 3690 5580 3690 5715 3150 5715 3150 5580
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 5715 3870 5715 3870 6075 3150 6075 3150 5715
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 6075 3870 6075 3870 6255 3150 6255 3150 6075
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3870 6255 3150 6255 3150 6435 3870 6435 3870 6255
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 6435 3870 6435 3870 6570 3150 6570 3150 6435
+4 0 0 50 0 16 8 0.0000 4 90 450 3195 5685 wrapper\001
+4 0 0 50 0 0 9 0.0000 4 90 510 3244 5881 arguments\001
+4 0 0 50 0 0 9 0.0000 4 75 300 3361 6007 check\001
+4 0 0 50 0 0 9 0.0000 4 75 150 3424 6540 ret\001
+-6
+6 4500 5850 4950 7125
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6480 4950 6480 4950 6660 4500 6660 4500 6480
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6930 4950 6930 4950 7065 4500 7065 4500 6930
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6660 4950 6660 4950 6930 4500 6930 4500 6660
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6300 4950 6300 4950 6480 4500 6480 4500 6300
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6030 4950 6030 4950 6300 4500 6300 4500 6030
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4860 6030 4500 6030 4500 5895 4860 5895 4860 6030
+4 0 0 50 0 0 9 0.0000 4 75 150 4648 7035 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 4586 6147 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 6248 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 4612 6783 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 6883 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 4548 6007 inner\001
+-6
+6 4275 5175 4950 5625
+4 0 0 50 0 0 12 0.0000 4 180 600 4347 5382 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 4420 5568 cdecl\001
+-6
+6 3375 6975 4050 7350
+4 0 0 50 0 0 12 0.0000 4 180 600 3422 7127 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 3495 7313 cdecl\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        6255 4005 6975 4005 6975 3690 7290 3690
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        7605 3960 7605 4185 6615 4185
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        6615 4275 7290 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        7605 4590 7605 4770 6975 4770 6975 4455 6255 4455
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3870 4545 4050 4545 4050 3870 4500 3870
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 4770 4725 4950 4050 4950 4050 4680 3870 4680
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4500 6660 4500 6660 5040 5670 5040 5670 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 5040 6660 5040 6660 5400 5670 5400 5670 5040
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4230 5940 4230 5940 4500 5670 4500 5670 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 4230 6300 4230 6300 4500 5940 4500 5940 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 4230 6660 4230 6660 4500 6300 4500 6300 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 3960 6300 3960 6300 4230 5940 4230 5940 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 3960 6660 3960 6660 4230 6300 4230 6300 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3600 7922 3600 7922 3780 7290 3780 7290 3600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3780 7920 3780 7920 3960 7290 3960 7290 3780
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4230 7920 4230 7920 4410 7290 4410 7290 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4410 7920 4410 7920 4590 7290 4590 7290 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4410 3870 4410 3870 4815 3150 4815 3150 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3960 5940 3960 5940 4230 5670 4230 5670 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4185 4950 4185 4950 4365 4500 4365 4500 4185
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4635 4950 4635 4950 4770 4500 4770 4500 4635
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4365 4950 4365 4950 4635 4500 4635 4500 4365
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3735 4950 3735 4950 4005 4500 4005 4500 3735
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3735 4860 3735 4860 3600 4500 3600 4500 3735
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 7065 4725 7155 4050 7155 4050 6345 3870 6345
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        4500 4095 4185 4095 4185 5895 3870 5895
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        3510 6570 3510 6750 4320 6750 4320 4275 4500 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3870 6165 4500 6165
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 60.00 120.00
+        6165 5400 6165 6570 4950 6570
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        4950 6390 5310 6390 5310 4005 5985 4005
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4005 4950 4005 4950 4185 4500 4185 4500 4005
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4140 3510 4410
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4815 3510 5085
+4 0 0 50 0 1 12 0.0000 4 180 1470 5414 3150 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 135 465 3270 3150 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 105 210 6069 5272 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4140 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 5970 4140 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 6360 4140 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 270 6331 4410 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 5996 4410 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4410 #2\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7369 3921 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7366 4373 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7371 3744 #1=instr\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7362 4545 #2=instr\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4486 3159 UNIX\001
+4 0 0 50 0 1 12 0.0000 4 135 720 7253 3248 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 7376 3061 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 7339 3423 handler\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3242 4674 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 585 5919 4837 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 4648 4740 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 4586 3852 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 3953 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 4612 4488 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 4588 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 4543 3705 outer\001
+4 0 0 50 0 0 12 0.0000 4 180 735 4374 3334 jumptable\001
+4 0 0 50 0 0 12 0.0000 4 180 870 5700 3337 binary code\001
+4 0 0 50 0 0 12 0.0000 4 135 360 3323 3331 code\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3342 5247 END\001
+4 0 0 50 0 0 12 0.0000 4 135 570 3240 4110 START\001
diff --git a/project/captive/doc/fig/functype_patched_wrap_fromw32.fig b/project/captive/doc/fig/functype_patched_wrap_fromw32.fig
new file mode 100644 (file)
index 0000000..1493046
--- /dev/null
@@ -0,0 +1,195 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2625 2550 3225 3150
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 2841 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 2720 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 2969 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 3096 /fastcall\001
+-6
+6 4725 1350 5550 1950
+4 0 0 50 0 1 12 0.0000 4 135 720 4778 1718 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4901 1531 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 4864 1893 handler\001
+-6
+6 1800 3825 2325 5025
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4410 2295 4410 2295 4590 1845 4590 1845 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4860 2295 4860 2295 4995 1845 4995 1845 4860
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4590 2295 4590 2295 4860 1845 4860 1845 4590
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4230 2295 4230 2295 4410 1845 4410 1845 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3960 2295 3960 2295 4230 1845 4230 1845 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2205 3960 1845 3960 1845 3825 2205 3825 2205 3960
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 4965 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 4077 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 4178 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 4713 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 4813 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 1893 3937 inner\001
+-6
+6 675 4200 1350 4575
+4 0 0 50 0 0 12 0.0000 4 180 600 722 4382 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 795 4568 cdecl\001
+-6
+6 750 1950 1425 2325
+4 0 0 50 0 0 12 0.0000 4 180 600 814 2121 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 887 2307 cdecl\001
+-6
+6 1650 1500 2475 1950
+4 0 0 50 0 0 12 0.0000 4 135 465 1831 1674 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 180 735 1719 1849 jumptable\001
+-6
+6 2925 1500 4425 1950
+4 0 0 50 0 1 12 0.0000 4 180 1470 2939 1665 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 3225 1852 binary code\001
+-6
+6 600 1500 1125 1875
+4 0 0 50 0 0 12 0.0000 4 135 465 615 1665 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 360 668 1846 code\001
+-6
+6 525 2550 1125 2850
+4 0 0 50 0 0 9 0.0000 4 90 510 581 2675 arguments\001
+4 0 0 50 0 0 9 0.0000 4 75 300 698 2801 check\001
+-6
+6 2625 3900 3225 4500
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 4146 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 4025 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 4274 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 4401 /fastcall\001
+-6
+6 4800 2925 5475 3375
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 2970 5447 2970 5447 3150 4815 3150 4815 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3150 5445 3150 5445 3330 4815 3330 4815 3150
+4 0 0 50 0 0 9 0.0000 4 75 465 4894 3291 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 4896 3114 #1=instr\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 3375 2070 3555 2430 3555 2430 2520 3195 2520
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3735 4185 3735 4185 4275 3195 4275 3195 3735
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3465 3465 3465 3465 3735 3195 3735 3195 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3465 3465 3825 3465 3825 3735 3465 3735 3465 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3825 3465 4185 3465 4185 3735 3825 3735 3825 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3465 3195 3825 3195 3825 3465 3465 3465 3465 3195
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3825 3195 4185 3195 4185 3465 3825 3465 3825 3195
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3195 3465 3195 3465 3465 3195 3465 3195 3195
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3195 2385 2565 2385 2565 3240 3510 3240
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 2610 5445 2610 5445 2790 4815 2790 4815 2610
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3780 3240 4410 3240 4410 2700 4815 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 7
+       0 0 1.00 60.00 120.00
+        5130 2790 5130 2880 5670 2880 5670 2025 1440 2025 1440 2475
+        1845 2475
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        855 3420 855 3600 1665 3600 1665 2880 1845 2880
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1845 2700 1215 2700
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2790 2295 2790 2295 2970 1845 2970 1845 2790
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3240 2295 3240 2295 3375 1845 3375 1845 3240
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2970 2295 2970 2295 3240 1845 3240 1845 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2340 2295 2340 2295 2610 1845 2610 1845 2340
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2340 2205 2340 2205 2205 1845 2205 1845 2340
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2610 2295 2610 2295 2790 1845 2790 1845 2610
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 4995 2070 5085 1395 5085 1395 3150 1215 3150
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        1215 2970 1530 2970 1530 4095 1845 4095
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2385 1035 2385 1035 2520 495 2520 495 2385
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2520 1215 2520 1215 2880 495 2880 495 2520
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2880 1215 2880 1215 3060 495 3060 495 2880
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1215 3060 495 3060 495 3240 1215 3240 1215 3060
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 3240 1215 3240 1215 3420 495 3420 495 3240
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        2295 4320 2565 4320 2565 3420 3510 3420
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 4275 4185 4275 4185 4635 3195 4635 3195 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        3690 4635 3690 4815 2565 4815 2565 4500 2295 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 2655 4185 2655 4185 2250 3195 2250 3195 2655
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        3780 3375 4590 3375 4590 3060 4815 3060
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        5130 3330 5130 3420 4140 3420
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        4140 3510 4815 3510
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        5130 3825 5130 3960 4500 3960 4500 3690 3780 3690
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3465 5445 3465 5445 3645 4815 3645 4815 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3645 5445 3645 5445 3825 4815 3825 4815 3645
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3690 2655 3690 2835
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3150 2115 3465 2250
+4 0 0 50 0 0 12 0.0000 4 105 210 3594 4507 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 3262 3375 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 3495 3375 break\001
+4 0 0 50 0 0 9 0.0000 4 75 270 3856 3645 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 3521 3645 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 3262 3645 #2\001
+4 0 0 50 0 0 12 0.0000 4 135 585 3444 4072 callee...\001
+4 0 0 50 0 0 9 0.0000 4 90 405 4950 2745 redirect\001
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 3345 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 2457 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 2558 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 3093 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 3193 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 1888 2310 outer\001
+4 0 0 50 0 16 8 0.0000 4 90 450 548 2490 wrapper\001
+4 0 0 50 0 0 9 0.0000 4 75 150 784 3363 ret\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3430 2510 caller...\001
+4 0 0 50 0 0 9 0.0000 4 90 225 3885 3356 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 465 4895 3608 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 4894 3780 #2=instr\001
+4 0 0 50 0 0 12 0.0000 4 135 570 2564 2212 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3517 2981 END\001
diff --git a/project/captive/doc/fig/functype_unpatched_native_fromw32.fig b/project/captive/doc/fig/functype_unpatched_native_fromw32.fig
new file mode 100644 (file)
index 0000000..d9b6c7d
--- /dev/null
@@ -0,0 +1,75 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2625 2550 3225 3150
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 2841 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 2720 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 2969 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 3096 /fastcall\001
+-6
+6 1650 1500 2475 1950
+4 0 0 50 0 0 12 0.0000 4 135 465 1831 1674 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 180 735 1719 1849 jumptable\001
+-6
+6 2925 1500 4425 1950
+4 0 0 50 0 1 12 0.0000 4 180 1470 2939 1665 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 3225 1852 binary code\001
+-6
+6 600 1500 1125 1875
+4 0 0 50 0 0 12 0.0000 4 135 465 615 1665 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 360 668 1846 code\001
+-6
+6 975 3555 1650 3930
+4 0 0 50 0 0 12 0.0000 4 180 600 1017 3694 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 1090 3880 cdecl\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 3555 2070 3735 2430 3735 2430 2520 3195 2520
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3195 2385 1620 2385 1620 2655 1845 2655
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 2655 4185 2655 4185 2250 3195 2250 3195 2655
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3690 2655 3690 2835
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3150 2115 3465 2250
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        855 3330 855 3510 1665 3510 1665 3060 1845 3060
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1845 2880 1215 2880
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2970 2295 2970 2295 3150 1845 3150 1845 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3420 2295 3420 2295 3555 1845 3555 1845 3420
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3150 2295 3150 2295 3420 1845 3420 1845 3150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2520 2295 2520 2295 2790 1845 2790 1845 2520
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2790 2295 2790 2295 2970 1845 2970 1845 2790
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2610 1215 2610 1215 3150 495 3150 495 2610
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 3150 1215 3150 1215 3330 495 3330 495 3150
+4 0 0 50 0 0 12 0.0000 4 135 555 3430 2510 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 2564 2212 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3517 2981 END\001
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 3525 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 2637 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 2738 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 3273 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 3373 trace\001
+4 0 0 50 0 0 12 0.0000 4 135 585 582 2962 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 784 3278 ret\001
diff --git a/project/captive/doc/ntdebug-ntfs.png b/project/captive/doc/ntdebug-ntfs.png
new file mode 100644 (file)
index 0000000..e1ed114
Binary files /dev/null and b/project/captive/doc/ntdebug-ntfs.png differ
diff --git a/project/captive/doc/ntdebug-vmware-windbg.png b/project/captive/doc/ntdebug-vmware-windbg.png
new file mode 100644 (file)
index 0000000..abc4ba9
Binary files /dev/null and b/project/captive/doc/ntdebug-vmware-windbg.png differ
diff --git a/project/captive/doc/ntdebug-vmware-xpdebug.png b/project/captive/doc/ntdebug-vmware-xpdebug.png
new file mode 100644 (file)
index 0000000..fda7d4f
Binary files /dev/null and b/project/captive/doc/ntdebug-vmware-xpdebug.png differ
diff --git a/project/captive/doc/ntdebug-wait.png b/project/captive/doc/ntdebug-wait.png
new file mode 100644 (file)
index 0000000..06a5888
Binary files /dev/null and b/project/captive/doc/ntdebug-wait.png differ
diff --git a/project/captive/doc/ntdebug-windbg-boot.png b/project/captive/doc/ntdebug-windbg-boot.png
new file mode 100644 (file)
index 0000000..e434c80
Binary files /dev/null and b/project/captive/doc/ntdebug-windbg-boot.png differ
diff --git a/project/captive/doc/ntdebug-windbg-port.png b/project/captive/doc/ntdebug-windbg-port.png
new file mode 100644 (file)
index 0000000..cf72fc3
Binary files /dev/null and b/project/captive/doc/ntdebug-windbg-port.png differ
diff --git a/project/captive/doc/ntdebug-windbg-sym.png b/project/captive/doc/ntdebug-windbg-sym.png
new file mode 100644 (file)
index 0000000..380e3c2
Binary files /dev/null and b/project/captive/doc/ntdebug-windbg-sym.png differ
diff --git a/project/captive/doc/ratio.png b/project/captive/doc/ratio.png
new file mode 100644 (file)
index 0000000..63fa8a6
Binary files /dev/null and b/project/captive/doc/ratio.png differ
diff --git a/project/captive/doc/ratio.sxi b/project/captive/doc/ratio.sxi
new file mode 100644 (file)
index 0000000..c11280f
Binary files /dev/null and b/project/captive/doc/ratio.sxi differ
diff --git a/project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip b/project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip
new file mode 100644 (file)
index 0000000..3f2ed57
Binary files /dev/null and b/project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip differ
diff --git a/project/captive/man/captive-cmdline.pod.html b/project/captive/man/captive-cmdline.pod.html
new file mode 100644 (file)
index 0000000..d33914d
--- /dev/null
@@ -0,0 +1,199 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>captive-cmdline - Command-line client for B&lt;captive&gt; NTFS disk access</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#synopsis">SYNOPSIS</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>captive-cmdline - Command-line client for <strong>captive</strong>(7) NTFS disk access</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Simple <strong>ftp</strong>(1)-like client to access disks by Microsoft Windows drivers.
+Use if <strong>lufs-captivefs</strong>(7) not available; also useful during debugging.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<p>All programs using <strong>captive</strong>(7) library share the common set of configuration
+options:</p>
+<dl>
+<dt><strong><a name="item_%2d%2dfilesystem%3dpathname"><strong>--filesystem</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to <strong>.sys</strong> or <strong>.so</strong> filesystem module file. You will use exactly
+once this option. Possible choices are
+<strong>/usr/local/var/lib/captive/ntfs.sys</strong>
+etc.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dload%2dmodule%3dpathname"><strong>--load-module</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to any W32 module to load w/o initialization. Multiple modules can be
+loaded although in common case you will use just
+<strong>/usr/local/var/lib/captive/ntoskrnl.exe</strong>
+here.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dro"><strong>--ro</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: Any write access will be forbidden. You should set this mode
+for <strong>cdfs.sys</strong> (<em>CD-ROM</em> filesystem). This option is mutually exclusive with
+<strong>--blind</strong> and <strong>--rw</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dblind"><strong>--blind</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: All writes are just simulated in memory (default). Microsoft
+Windows filesystem driver will see no difference between <strong>--blind</strong> and <strong>--rw</strong>
+although the UNIX image file/device will be open read/only as for <strong>--ro</strong>.
+All the changes get 'written' as long as <strong>captive</strong>(7) program runs - all the
+changes will be lost afterwards. This mode is the most suitable for debugging.
+This option is mutually exclusive with <strong>--ro</strong> and <strong>--rw</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2drw"><strong>--rw</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: Write directly to the image file/device. Standard read/write
+disk mode. You should use <strong>--sandbox-server</strong> option in this case to have the
+disk protected against Microsoft Windows filesystem driver crashes. Modified
+disk image blocks are in <strong>--sandbox-server</strong> <strong>--rw</strong> mode buffered in the
+memory and they get reflected to the disk only after successful completion
+of all filesystem operations including filesystem unmount.
+This option is mutually exclusive with <strong>--ro</strong> and <strong>--blind</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dcdrom"><strong>--cdrom</strong></a></strong><br />
+</dt>
+<dd>
+Media type: CD-ROM. You must set this media type for <strong>cdfs.sys</strong>.
+Virtual Microsoft Windows block device driver used by Captive maps to
+<strong>\Device\CdRom0</strong>. This option is mutually exclusive with <strong>--disk</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddisk"><strong>--disk</strong></a></strong><br />
+</dt>
+<dd>
+Media type: Disk (default). You must set this media type for all the Microsoft
+Windows filesystem drivers except <strong>cdfs.sys</strong>. Virtual Microsoft Windows block
+device driver used by Captive maps to <strong>\Device\CaptiveHarddisk0</strong>.
+This option is mutually exclusive with <strong>--cdrom</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddebug%2dmessages"><strong>--debug-messages</strong></a></strong><br />
+</dt>
+<dd>
+Turn on debugging messages. Be prepared for substation debug output.
+Use of <strong>--syslog</strong> feature is not recommended in this case.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsandbox%2dserver%3dpathname"><strong>--sandbox-server</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+program, turns on sandboxing.
+You should always use this option in conjunction with <strong>--rw</strong>, see it for
+details. Although this program is <em>setuid root</em> and it drops it privileges
+to <strong>@CAPTIVE_SANDBOX_SETUID@</strong> user. Your system gets protected by
+<strong>chroot</strong>(2), <strong>setuid</strong>(2), <strong>setgid</strong>(2) and <strong>setrlimit</strong>(2) UNIX security
+features against malicious Microsoft Windows drivers. You should never use this
+option during debugging.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsandbox%2dserver%2dior%3dior"><strong>--sandbox-server-ior</strong>=<strong>IOR</strong></a></strong><br />
+</dt>
+<dd>
+Specify <em>CORBA IOR</em> of
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+program, turns on
+sandboxing. Specified <em>CORBA IOR</em> should be the string starting by ``<strong>IOR:</strong>''
+text. This option is useful only for debugging. No sandbox restarting is
+possible in this case.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dno%2dsandbox"><strong>--no-sandbox</strong></a></strong><br />
+</dt>
+<dd>
+Turn off sandboxing feature (default). No
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+is run. Microsoft Windows filesystem driver is run in native UNIX environment
+without any <em>CORBA</em> separation. This option is recommended only for debugging.
+It is dangerous to use <strong>--rw</strong> together, see its description for the details.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dbug%2dpathname%3dpathname"><strong>--bug-pathname</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to <strong>strftime</strong>(3) for <strong>.captivebug.xml.gz</strong> bugreports. Every crash of
+sandbox child gets bugreported to the specified file. You should attempt to
+minimize the number of operations from the mount operation till the expected
+crash to minimize the snapshot file size. <strong>--sandbox-server</strong> option is
+required for <strong>--bug-pathname</strong>.
+</dd>
+<dd>
+<p><strong>!!! Be aware '.captivebug.xml.gz' will contain data from your disk drive !!!</strong></p>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsyslog"><strong>--syslog</strong></a></strong><br />
+</dt>
+<dd>
+Messages sent to <strong>syslog</strong>(3) instead of <em>stderr</em>. This option gets handy
+for <strong>mount</strong>(8) operation as the messages would be lost otherway.
+Watch our for possible ``<strong>Filesystem crash broke dirty object</strong>'' messages where
+some written filesystem data got lost in the case of Microsoft Windows
+filesystem driver crash.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsyslog%2dfacility%3dfacility"><strong>--syslog-facility</strong>=<strong>facility</strong></a></strong><br />
+</dt>
+<dd>
+<strong>openlog</strong>(3) facility for <strong>--syslog</strong>. See <strong>facility</strong> section of
+<strong>openlog</strong>(3) man page for details. Lowercased values such as <strong>daemon</strong> or
+<strong>user</strong> are supported.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>captive</strong>(7), <strong>lufs-captivefs</strong>(7)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/man/captive-install-acquire.pod.html b/project/captive/man/captive-install-acquire.pod.html
new file mode 100644 (file)
index 0000000..4776636
--- /dev/null
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>captive-install-acquire - Find MS Windows XP driver files for B&lt;NTFS&gt;</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#synopsis">SYNOPSIS</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>captive-install-acquire - Find MS Windows XP driver files for <strong>NTFS</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Program acquires the needed <em>Microsoft Windows XP</em> driver files. Multiple
+methods of getting the driver files are supported. All the driver files are
+stored to the directory
+<strong>/usr/local/var/lib/captive/</strong>
+where they are
+expected by <strong>mount.captive</strong>(8).</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<p>Program will run interactively if no action options (<strong>--scan-disks</strong>,
+<strong>--scan-disks-quick</strong>, <strong>--scan-path</strong> or <strong>--microsoft-com</strong>) are specified.
+Otherwise the requested <code>action(s)</code> is proceeded in silent batch mode.</p>
+<dl>
+<dt><strong><a name="item_%2d%2dtext"><strong>--text</strong></a></strong><br />
+</dt>
+<dd>
+Disable <em>Gnome</em> user interface even if <em>X Window System</em> is available.
+You must specify this option as the first one. This option has effect only for
+interactive mode (no action options specified).
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dv%7c%2d%2dverbose"><strong>-v</strong>|<strong>--verbose</strong></a></strong><br />
+</dt>
+<dd>
+Display additional information during disks scanning.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dn%7c%2d%2ddry"><strong>-n</strong>|<strong>--dry</strong></a></strong><br />
+</dt>
+<dd>
+Perform all the operations but do not modify anything (no drivers are
+stored to
+<strong>/usr/local/var/lib/captive/</strong>
+directory).
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dmodid%2dpath%3dpath"><strong>--modid-path</strong>=<strong>path</strong></a></strong><br />
+</dt>
+<dd>
+Path to <strong>.captivemodid.xml</strong> database (default:
+<strong>/usr/local/etc/w32-mod-id.captivemodid.xml</strong>). This file contains
+identifications (<strong>md5sum</strong>(1)) of known compatible <em>Microsoft Windows XP</em>
+driver files. <strong>captive-install-acquire</strong>(1) will ignore any files not
+identified by this file although you may try to copy them to
+<strong>/usr/local/var/lib/captive/</strong>
+manually for <strong>captive</strong>(7) clients.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dscan%2ddisks"><strong>--scan-disks</strong></a></strong><br />
+</dt>
+<dd>
+Scan all files on any local hard drive (mounted or unmounted) <strong>NTFS</strong> or
+(mounted) <strong>FAT</strong> partitions. This scanning includes <em>cabinet</em> (<strong>.cab</strong>)
+archives. This scanning can last for very long time.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dscan%2ddisks%2dquick"><strong>--scan-disks-quick</strong></a></strong><br />
+</dt>
+<dd>
+Reduced version of <strong>--scan-disks</strong>. Only <strong>windows/system32</strong> subdirectory in
+the root of any local hard drive (mounted or unmounted) <strong>NTFS</strong> or (mounted)
+<strong>FAT</strong> partition is investigated. This scan should find existing driver files
+in already existing <em>Microsoft Windows XP</em> installations.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dscan%2dpath%3dpath%2furi"><strong>--scan-path</strong>=<strong>path/URI</strong></a></strong><br />
+</dt>
+<dd>
+Scan the specified <strong>path/URI</strong> for device driver files. You may use either
+filename (<strong>/tmp/ntoskrnl.ex_</strong>), directory (<strong>/tmp/servicepack.cab</strong>), <strong>NTFS</strong>
+disk file/directory (<strong>file:///dev/hda1#libntfs:/windows/system32</strong>) or remote
+<em>URI</em> filename (<strong><a href="http://server/path/to/ntfs.sys">http://server/path/to/ntfs.sys</a></strong>). Remote <em>URI</em> directory
+(such as <strong><a href="http://server/subdir/">http://server/subdir/</a></strong>) is not supported.
+</dd>
+<dd>
+<p>Possibly specified directory is always scanned recursively.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dmicrosoft%2dcom"><strong>--microsoft-com</strong></a></strong><br />
+</dt>
+<dd>
+You can download the best available version of needed drivers from
+<em>Microsoft</em>.  They can be found in <em>Microsoft Windows XP Service Pack 1
+Checked Build</em> (URL
+<strong><a href="http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp">http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp</a></strong>)
+</dd>
+<dd>
+<p>Legal: In some countries you need to have valid <em>Microsoft Windows XP</em> license
+to use it.</p>
+</dd>
+<dd>
+<p>Program will need to download approx 29MB of data (the cabinet file is 151MB;
+1MB=1e6B here).</p>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>captive-install-fstab</strong>(1), <strong>captive</strong>(7), <strong>lufs-captivefs</strong>(7)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/man/captive-install-fstab.pod.html b/project/captive/man/captive-install-fstab.pod.html
new file mode 100644 (file)
index 0000000..2bec451
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>captive-install-fstab - Manage B&lt;captive-ntfs&gt; B&lt;/etc/fstab&gt; entries</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#synopsis">SYNOPSIS</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>captive-install-fstab - Manage <strong>captive-ntfs</strong> <strong>/etc/fstab</strong> entries</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Program will scan your local disk drive partitions (from <strong>/proc/partitions</strong>)
+and it will add/remove appropriate file-system type <strong>captive-ntfs</strong> entries
+in <strong>/etc/fstab</strong>.</p>
+<p>Destination directory is chosen automatically as <strong>/mnt/captive-</strong>LABEL_NAME
+where <strong>LABEL_NAME</strong> is the label used for the <strong>NTFS</strong> partition. Directory
+<strong>/mnt/captive-</strong> may be used if no volume label is set. Different (numbered)
+directory name is used if multiple disks have the same volume label set.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item_%2dv%7c%2d%2dverbose"><strong>-v</strong>|<strong>--verbose</strong></a></strong><br />
+</dt>
+<dd>
+Display additional information during disks scanning.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dn%7c%2d%2ddry"><strong>-n</strong>|<strong>--dry</strong></a></strong><br />
+</dt>
+<dd>
+Perform all the operations but do not modify anything (file <strong>/etc/fstab</strong>).
+You will probably use this option together with [<strong>-v</strong>|<strong>--verbose</strong>].
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dadd"><strong>--add</strong></a></strong><br />
+</dt>
+<dd>
+Add all the found <strong>NTFS</strong> disk drive partitions to <strong>/etc/fstab</strong>.
+Any previous <strong>captive-ntfs</strong> entries will be deleted as described in
+<strong>--remove</strong> option.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dremove"><strong>--remove</strong></a></strong><br />
+</dt>
+<dd>
+Remove all lines of filesystem type <strong>captive-ntfs</strong> and device name in
+<strong>/dev</strong> directory.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>captive-install-acquire</strong>(1), <strong>captive</strong>(7), <strong>lufs-captivefs</strong>(7)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/man/captive-sandbox-server.pod.html b/project/captive/man/captive-sandbox-server.pod.html
new file mode 100644 (file)
index 0000000..0dfc4c4
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>captive-sandbox-server - Security+safety wrapper for NTFS disk access</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#synopsis">SYNOPSIS</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>captive-sandbox-server - Security+safety wrapper for NTFS disk access</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>captive-sandbox-server</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Program implementing separation of emulated <em>Microsoft Windows NT</em> kernel
+environment from the rest of <em>UNIX</em> system. Your system gets protected by
+<strong>chroot</strong>(2), <strong>setuid</strong>(2), <strong>setgid</strong>(2) and <strong>setrlimit</strong>(2) UNIX security
+features against malicious Microsoft Windows drivers.</p>
+<p>Use this program as argument of <strong>--sandbox-server</strong> option of <strong>captive</strong>(7).
+Do not use this option/program during <strong>captive</strong>(7) debugging.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<p>No options are permitted for this command - it will display its <em>CORBA/ORBit</em>
+connection properties on its standard output.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>captive</strong>(7), <strong>captive-cmdline</strong>(1), <strong>lufs-captivefs</strong>(7)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/man/captive.pod.html b/project/captive/man/captive.pod.html
new file mode 100644 (file)
index 0000000..4ecb3b0
--- /dev/null
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>captive - Microsoft Windows NT kernel emulation for NTFS disk access</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>captive - Microsoft Windows NT kernel emulation for NTFS disk access</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p><strong>captive</strong>(7) library allows applications running under the <strong>GNU/Linux</strong>
+operating system to access <strong>NTFS</strong> drives. File system driver compatibility
+with <strong>VFAT</strong>, <strong>ISO9660</strong> and <strong>EXT2</strong> is also provided.</p>
+<p>This man page <strong>captive</strong>(7) show the common options of all <strong>captive</strong>
+clients. You will always use a specific client such as
+<strong>mount.captive</strong>(8) or <strong>captive-cmdline</strong>(1).</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<p>All programs using <strong>captive</strong>(7) library share the common set of configuration
+options:</p>
+<dl>
+<dt><strong><a name="item_%2d%2dfilesystem%3dpathname"><strong>--filesystem</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to <strong>.sys</strong> or <strong>.so</strong> filesystem module file. You will use exactly
+once this option. Possible choices are
+<strong>/usr/local/var/lib/captive/ntfs.sys</strong>
+etc.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dload%2dmodule%3dpathname"><strong>--load-module</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to any W32 module to load w/o initialization. Multiple modules can be
+loaded although in common case you will use just
+<strong>/usr/local/var/lib/captive/ntoskrnl.exe</strong>
+here.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dro"><strong>--ro</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: Any write access will be forbidden. You should set this mode
+for <strong>cdfs.sys</strong> (<em>CD-ROM</em> filesystem). This option is mutually exclusive with
+<strong>--blind</strong> and <strong>--rw</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dblind"><strong>--blind</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: All writes are just simulated in memory (default). Microsoft
+Windows filesystem driver will see no difference between <strong>--blind</strong> and <strong>--rw</strong>
+although the UNIX image file/device will be open read/only as for <strong>--ro</strong>.
+All the changes get 'written' as long as <strong>captive</strong>(7) program runs - all the
+changes will be lost afterwards. This mode is the most suitable for debugging.
+This option is mutually exclusive with <strong>--ro</strong> and <strong>--rw</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2drw"><strong>--rw</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: Write directly to the image file/device. Standard read/write
+disk mode. You should use <strong>--sandbox-server</strong> option in this case to have the
+disk protected against Microsoft Windows filesystem driver crashes. Modified
+disk image blocks are in <strong>--sandbox-server</strong> <strong>--rw</strong> mode buffered in the
+memory and they get reflected to the disk only after successful completion
+of all filesystem operations including filesystem unmount.
+This option is mutually exclusive with <strong>--ro</strong> and <strong>--blind</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dcdrom"><strong>--cdrom</strong></a></strong><br />
+</dt>
+<dd>
+Media type: CD-ROM. You must set this media type for <strong>cdfs.sys</strong>.
+Virtual Microsoft Windows block device driver used by Captive maps to
+<strong>\Device\CdRom0</strong>. This option is mutually exclusive with <strong>--disk</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddisk"><strong>--disk</strong></a></strong><br />
+</dt>
+<dd>
+Media type: Disk (default). You must set this media type for all the Microsoft
+Windows filesystem drivers except <strong>cdfs.sys</strong>. Virtual Microsoft Windows block
+device driver used by Captive maps to <strong>\Device\CaptiveHarddisk0</strong>.
+This option is mutually exclusive with <strong>--cdrom</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddebug%2dmessages"><strong>--debug-messages</strong></a></strong><br />
+</dt>
+<dd>
+Turn on debugging messages. Be prepared for substation debug output.
+Use of <strong>--syslog</strong> feature is not recommended in this case.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsandbox%2dserver%3dpathname"><strong>--sandbox-server</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+program, turns on sandboxing.
+You should always use this option in conjunction with <strong>--rw</strong>, see it for
+details. Although this program is <em>setuid root</em> and it drops it privileges
+to <strong>@CAPTIVE_SANDBOX_SETUID@</strong> user. Your system gets protected by
+<strong>chroot</strong>(2), <strong>setuid</strong>(2), <strong>setgid</strong>(2) and <strong>setrlimit</strong>(2) UNIX security
+features against malicious Microsoft Windows drivers. You should never use this
+option during debugging.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsandbox%2dserver%2dior%3dior"><strong>--sandbox-server-ior</strong>=<strong>IOR</strong></a></strong><br />
+</dt>
+<dd>
+Specify <em>CORBA IOR</em> of
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+program, turns on
+sandboxing. Specified <em>CORBA IOR</em> should be the string starting by ``<strong>IOR:</strong>''
+text. This option is useful only for debugging. No sandbox restarting is
+possible in this case.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dno%2dsandbox"><strong>--no-sandbox</strong></a></strong><br />
+</dt>
+<dd>
+Turn off sandboxing feature (default). No
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+is run. Microsoft Windows filesystem driver is run in native UNIX environment
+without any <em>CORBA</em> separation. This option is recommended only for debugging.
+It is dangerous to use <strong>--rw</strong> together, see its description for the details.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dbug%2dpathname%3dpathname"><strong>--bug-pathname</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to <strong>strftime</strong>(3) for <strong>.captivebug.xml.gz</strong> bugreports. Every crash of
+sandbox child gets bugreported to the specified file. You should attempt to
+minimize the number of operations from the mount operation till the expected
+crash to minimize the snapshot file size. <strong>--sandbox-server</strong> option is
+required for <strong>--bug-pathname</strong>.
+</dd>
+<dd>
+<p><strong>!!! Be aware '.captivebug.xml.gz' will contain data from your disk drive !!!</strong></p>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsyslog"><strong>--syslog</strong></a></strong><br />
+</dt>
+<dd>
+Messages sent to <strong>syslog</strong>(3) instead of <em>stderr</em>. This option gets handy
+for <strong>mount</strong>(8) operation as the messages would be lost otherway.
+Watch our for possible ``<strong>Filesystem crash broke dirty object</strong>'' messages where
+some written filesystem data got lost in the case of Microsoft Windows
+filesystem driver crash.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsyslog%2dfacility%3dfacility"><strong>--syslog-facility</strong>=<strong>facility</strong></a></strong><br />
+</dt>
+<dd>
+<strong>openlog</strong>(3) facility for <strong>--syslog</strong>. See <strong>facility</strong> section of
+<strong>openlog</strong>(3) man page for details. Lowercased values such as <strong>daemon</strong> or
+<strong>user</strong> are supported.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>mount.captive</strong>(8), <strong>captive-cmdline</strong>(1), <strong>captive-install-acquire</strong>(1)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/man/lufs-captivefs.pod.html b/project/captive/man/lufs-captivefs.pod.html
new file mode 100644 (file)
index 0000000..78d21bf
--- /dev/null
@@ -0,0 +1,199 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>lufs-captivefs - Linux Userland File System module for NTFS as filesystem</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>lufs-captivefs - Linux Userland File System module for NTFS as filesystem</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p><strong>lufs-captivefs</strong>(7) module for Linux Userland File System (LUFS) enables
+<strong>GNU/Linux</strong> system to access NTFS drives by Microsoft Windows drivers in
+the most common way of kernel-level filesystem implementation.</p>
+<p>{<strong>-c CHAN</strong>|<strong>--channels</strong>=<strong>CHAN</strong>} option of <strong>lufsmount</strong>(1) is respected
+although the final filesystem operations are always processed in single-channel
+mode. Do not set <strong>CHAN</strong> to <strong>1</strong> as it would invoke errors by LUFS kernel
+driver.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<p>All programs using <strong>captive</strong>(7) library share the common set of configuration
+options:</p>
+<dl>
+<dt><strong><a name="item_%2d%2dfilesystem%3dpathname"><strong>--filesystem</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to <strong>.sys</strong> or <strong>.so</strong> filesystem module file. You will use exactly
+once this option. Possible choices are
+<strong>/usr/local/var/lib/captive/ntfs.sys</strong>
+etc.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dload%2dmodule%3dpathname"><strong>--load-module</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to any W32 module to load w/o initialization. Multiple modules can be
+loaded although in common case you will use just
+<strong>/usr/local/var/lib/captive/ntoskrnl.exe</strong>
+here.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dro"><strong>--ro</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: Any write access will be forbidden. You should set this mode
+for <strong>cdfs.sys</strong> (<em>CD-ROM</em> filesystem). This option is mutually exclusive with
+<strong>--blind</strong> and <strong>--rw</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dblind"><strong>--blind</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: All writes are just simulated in memory (default). Microsoft
+Windows filesystem driver will see no difference between <strong>--blind</strong> and <strong>--rw</strong>
+although the UNIX image file/device will be open read/only as for <strong>--ro</strong>.
+All the changes get 'written' as long as <strong>captive</strong>(7) program runs - all the
+changes will be lost afterwards. This mode is the most suitable for debugging.
+This option is mutually exclusive with <strong>--ro</strong> and <strong>--rw</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2drw"><strong>--rw</strong></a></strong><br />
+</dt>
+<dd>
+Read/write mode: Write directly to the image file/device. Standard read/write
+disk mode. You should use <strong>--sandbox-server</strong> option in this case to have the
+disk protected against Microsoft Windows filesystem driver crashes. Modified
+disk image blocks are in <strong>--sandbox-server</strong> <strong>--rw</strong> mode buffered in the
+memory and they get reflected to the disk only after successful completion
+of all filesystem operations including filesystem unmount.
+This option is mutually exclusive with <strong>--ro</strong> and <strong>--blind</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dcdrom"><strong>--cdrom</strong></a></strong><br />
+</dt>
+<dd>
+Media type: CD-ROM. You must set this media type for <strong>cdfs.sys</strong>.
+Virtual Microsoft Windows block device driver used by Captive maps to
+<strong>\Device\CdRom0</strong>. This option is mutually exclusive with <strong>--disk</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddisk"><strong>--disk</strong></a></strong><br />
+</dt>
+<dd>
+Media type: Disk (default). You must set this media type for all the Microsoft
+Windows filesystem drivers except <strong>cdfs.sys</strong>. Virtual Microsoft Windows block
+device driver used by Captive maps to <strong>\Device\CaptiveHarddisk0</strong>.
+This option is mutually exclusive with <strong>--cdrom</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddebug%2dmessages"><strong>--debug-messages</strong></a></strong><br />
+</dt>
+<dd>
+Turn on debugging messages. Be prepared for substation debug output.
+Use of <strong>--syslog</strong> feature is not recommended in this case.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsandbox%2dserver%3dpathname"><strong>--sandbox-server</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+program, turns on sandboxing.
+You should always use this option in conjunction with <strong>--rw</strong>, see it for
+details. Although this program is <em>setuid root</em> and it drops it privileges
+to <strong>@CAPTIVE_SANDBOX_SETUID@</strong> user. Your system gets protected by
+<strong>chroot</strong>(2), <strong>setuid</strong>(2), <strong>setgid</strong>(2) and <strong>setrlimit</strong>(2) UNIX security
+features against malicious Microsoft Windows drivers. You should never use this
+option during debugging.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsandbox%2dserver%2dior%3dior"><strong>--sandbox-server-ior</strong>=<strong>IOR</strong></a></strong><br />
+</dt>
+<dd>
+Specify <em>CORBA IOR</em> of
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+program, turns on
+sandboxing. Specified <em>CORBA IOR</em> should be the string starting by ``<strong>IOR:</strong>''
+text. This option is useful only for debugging. No sandbox restarting is
+possible in this case.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dno%2dsandbox"><strong>--no-sandbox</strong></a></strong><br />
+</dt>
+<dd>
+Turn off sandboxing feature (default). No
+<strong>/usr/local/sbin/captive-sandbox-server</strong>
+is run. Microsoft Windows filesystem driver is run in native UNIX environment
+without any <em>CORBA</em> separation. This option is recommended only for debugging.
+It is dangerous to use <strong>--rw</strong> together, see its description for the details.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dbug%2dpathname%3dpathname"><strong>--bug-pathname</strong>=<strong>pathname</strong></a></strong><br />
+</dt>
+<dd>
+Pathname to <strong>strftime</strong>(3) for <strong>.captivebug.xml.gz</strong> bugreports. Every crash of
+sandbox child gets bugreported to the specified file. You should attempt to
+minimize the number of operations from the mount operation till the expected
+crash to minimize the snapshot file size. <strong>--sandbox-server</strong> option is
+required for <strong>--bug-pathname</strong>.
+</dd>
+<dd>
+<p><strong>!!! Be aware '.captivebug.xml.gz' will contain data from your disk drive !!!</strong></p>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsyslog"><strong>--syslog</strong></a></strong><br />
+</dt>
+<dd>
+Messages sent to <strong>syslog</strong>(3) instead of <em>stderr</em>. This option gets handy
+for <strong>mount</strong>(8) operation as the messages would be lost otherway.
+Watch our for possible ``<strong>Filesystem crash broke dirty object</strong>'' messages where
+some written filesystem data got lost in the case of Microsoft Windows
+filesystem driver crash.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dsyslog%2dfacility%3dfacility"><strong>--syslog-facility</strong>=<strong>facility</strong></a></strong><br />
+</dt>
+<dd>
+<strong>openlog</strong>(3) facility for <strong>--syslog</strong>. See <strong>facility</strong> section of
+<strong>openlog</strong>(3) man page for details. Lowercased values such as <strong>daemon</strong> or
+<strong>user</strong> are supported.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>mount.captive</strong>(8), <strong>lufsmount</strong>(1), <strong>captive</strong>(7)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/man/mount.captive.pod.html b/project/captive/man/mount.captive.pod.html
new file mode 100644 (file)
index 0000000..79691ac
--- /dev/null
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>mount.captive - B&lt;mount&gt; interface for NTFS disk access</title>
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+       <li><a href="#name">NAME</a></li>
+       <li><a href="#synopsis">SYNOPSIS</a></li>
+       <li><a href="#description">DESCRIPTION</a></li>
+       <li><a href="#options">OPTIONS</a></li>
+       <li><a href="#see_also">SEE ALSO</a></li>
+       <li><a href="#author">AUTHOR</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>mount.captive - <strong>mount</strong>(8) interface for NTFS disk access</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>mount.ntfs</strong> {<strong>image-file</strong>|<strong>device</strong>} <strong>mountdir</strong>
+[<strong>-n</strong>] [<strong>-v</strong>] [<strong>-o</strong> <strong>options</strong>]</p>
+<p><strong>mount</strong> <strong>-t</strong> <strong>captive-ntfs</strong>
+[<strong>-n</strong>] [<strong>-v</strong>] [<strong>-o</strong> <strong>options</strong>]
+{<strong>image-file</strong>|<strong>device</strong>} <strong>dir</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p><strong>mount.captive</strong>(8) provides <strong>mount</strong>(8) interface to <strong>lufs-captivefs</strong>(7)
+by calling <strong>lufsmount</strong>(1) with appropriate arguments. You should never call
+this command directly - use <strong>mount</strong>(8) instead.</p>
+<p><strong>mount.captive</strong>(8) (<strong>captive</strong> filesystem type) is never used - this command
+is provided just as a base <code>mount(8)</code> interface to <strong>captive</strong>(7). You must always
+use captive-<strong>fstype</strong> filesystem type such as <strong>captive-ntfs</strong>. Other supported
+filesystem types are:
+<strong>ntfs</strong>, <strong>fastfat</strong>, <strong>cdfs</strong>, <strong>ext2fsd</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item_%7bimage%2dfile%7cdevice%7d">{<strong>image-file</strong>|<strong>device</strong>}</a></strong><br />
+</dt>
+<dd>
+Pathname such as <strong>/dev/hda1</strong> or <strong>/tmp/ntfs.bin</strong>. You should refer to the
+partition name, not the whole device (<strong>/dev/hda</strong> is forbidden).
+<strong>/dev/hda1</strong> may correspond to <strong>/dev/ide/host0/bus0/target0/lun0/part1</strong>
+on your system.
+</dd>
+<p></p>
+<dt><strong><a name="item_mountdir"><strong>mountdir</strong></a></strong><br />
+</dt>
+<dd>
+Existing empty target directory where {<strong>image-file</strong>|<strong>device</strong>} will be
+mounted.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dn"><strong>-n</strong></a></strong><br />
+</dt>
+<dd>
+Do not modify <strong>/etc/mtab</strong>. This option is currently not supported (ignored),
+<strong>/etc/mtab</strong> is modified notwithstanding.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dv"><strong>-v</strong></a></strong><br />
+</dt>
+<dd>
+Enable verbose mode. Command <strong>lufsmount</strong>(1) being called is shown.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2do_options"><strong>-o</strong> <strong>options</strong></a></strong><br />
+</dt>
+<dd>
+Custom options passed to <strong>captive</strong>(7). See its manpage for details.  Options
+double-dashes (<strong>--</strong>) can be omitted for <strong>lufs-captivefs</strong>(7) or
+<strong>mount.captive</strong>(8).
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><strong>lufs-captivefs</strong>(7), <strong>lufsmount</strong>(1)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p><table cellspacing="0" cellpadding="0"><tr><td>Jan Kratochvil &lt;<strong><a href="mailto:project-captive@jankratochvil.net">project-captive@jankratochvil.net</a></strong>&gt;,
+<tr><td><td><em><a href="http://www.jankratochvil.net/">http://www.jankratochvil.net/</a></em></table></p>
+
+</body>
+
+</html>
diff --git a/project/captive/reactos.png b/project/captive/reactos.png
new file mode 100644 (file)
index 0000000..e1d6716
Binary files /dev/null and b/project/captive/reactos.png differ
index b8c9814..dfb5529 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::checkListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
@@ -50,7 +50,7 @@ for my $ENTRIES (ENTRIES,ENTRIES_LOG) {
 
 my %item;
 for my $dir (keys(%dirs)) {
-       require "$dir/ListItem.pm";
+       Wrequire "$dir/ListItem.pm";
        my $item=eval('\%My::Project::'.$dir.'::ListItem');
        do { warn "Broken $dir/List.pm"; next; } if !defined %$item;
        $item{$dir}=$item;
similarity index 69%
rename from project/checkstatic/index.html.pl
rename to project/checkstatic/Index.html.pl
index a291c91..938f4fe 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::checkstatic::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::checkstatic::ListItem;
+Wuse 'My::Project';
+Wuse 'project::checkstatic::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::checkstatic::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::checkstatic::ListItem::ListItem,
                );
 
 My::Web->footer();
index 91f0d26..c400142 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::checkstatic;
+package project::checkstatic::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"C Sources Symbol Attributes Checker",
-               "priority"=>7,
-               "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/checkstatic?rev=HEAD",
-               "summary"=>"Development tool",
+
+our @ListItem=(
+               "name"=>"checkstatic",
+               "platform"=>"unixdevel",
+               "priority"=>510,
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/checkstatic?rev=HEAD",
+               "summary"=>"C sources symbol attributes checker",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"Perl",
-               "description"=>""
-                               .'<p>Gives additional warnings not provided by GNU C Compiler'
-                               .' such as dead code declared as <code>global</code> in separate file,'
-                               .' missing <code>static</code> keywords etc.</p>'
-                               .' <p>It can get very valuable during stripping functionality off of'
-                               .' a big package for embedded resource-limited machines.</p>'
+               "description"=><<"HERE",
+<p>Scripts gives additional warnings not provided by GNU C Compiler
+such as dead code declared as <code>global</code> in separate file,
+missing <code>static</code> keywords etc.</p>
+<p>It can get very valuable during stripping functionality off of
+a big package for embedded resource-limited machines.</p>
+HERE
                );
 
 1;
index a8e5c31..c1c4634 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 68%
rename from project/cvsbranchdiff/index.html.pl
rename to project/cvsbranchdiff/Index.html.pl
index e85a1aa..58410d2 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::cvsbranchdiff::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::cvsbranchdiff::ListItem;
+Wuse 'My::Project';
+Wuse 'project::cvsbranchdiff::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::cvsbranchdiff::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::cvsbranchdiff::ListItem::ListItem,
                );
 
 My::Web->footer();
index 6e66bc3..7bae49b 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::cvsbranchdiff;
+package project::cvsbranchdiff::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"CVS Branching Utility",
-               "priority"=>6,
-               "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/cvsbranchdiff?rev=HEAD",
-               "summary"=>"CVS addon",
+
+our @ListItem=(
+               "name"=>"cvsbranchdiff",
+               "platform"=>"unixdevel",
+               "priority"=>490,
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/cvsbranchdiff?rev=HEAD",
+               "summary"=>"CVS Branching Utility",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"bash",
-               "description"=>""
-                               .'<p>During patching of foreign CVS trees you have to regularly import them'
-                               .' as CVS does not support multiple repositories. There is a problem with'
-                               .' new or removed files, this simple tool will take care of them.</p>'
+               "description"=><<"HERE",
+<p>During patching of foreign CVS trees you have to regularly import them
+as CVS does not support multiple repositories. There is a problem with
+new or removed files, this simple tool will take care of them.</p>
+HERE
                );
 
 1;
index e821382..cffb9e2 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/cvsutil/Index.html.pl b/project/cvsutil/Index.html.pl
new file mode 100755 (executable)
index 0000000..f3f2bf3
--- /dev/null
@@ -0,0 +1,47 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::cvsutil'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::cvsutil::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::cvsutil::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::cvsutil::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>There already exists package @{[ a_href 'http://www.red-bean.com/cvsutils/','CVS Utilities' ]}
+with similiar features - this utility should be merged into it.
+Pointed out by the courtesy of Jesse Glick.</p>
+HERE
+
+
+My::Web->footer();
index 50af733..24e93dd 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::cvsutil;
+package project::cvsutil::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"CVS General Utility",
-               "priority"=>7,
-               "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/cvsutil?rev=HEAD",
-               "summary"=>"CVS addon",
+
+our @ListItem=(
+               "name"=>"cvsutil",
+               "platform"=>"unixdevel",
+               "priority"=>500,
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/cvsutil?rev=HEAD",
+               "summary"=>"Clean CVS checkout working files or safely change CVS/Root",
                "license"=>"PD",
                "maintenance"=>"merge",
                "language"=>"Perl",
-               "description"=>""
-                               .'<p>Lists of specified types of files and safe settings of CVSROOT'
-                               .' for already checkouted package.</p>'
-                               .' <p>There exists package <a href=\"http://www.red-bean.com/cvsutils/\">CVS Utilities</a>'
-                               .' doing similiar things and more - this utility should be merged into it.'
-                               .' Pointed out by the courtesy of Jesse Glick.</p>'
+               "description"=><<"HERE",
+<p>List the specified types of files and safe settings of CVSROOT
+for already checkouted package. As an example of its many applications
+can serve a handy prevention of grepping built files: <span class="quote">
+       grep -w wanted_sym `cvsfiles`
+       </span></p>
+HERE
                );
 
 1;
index 4baa20e..63108f5 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 69%
rename from project/d1xnet/index.html.pl
rename to project/d1xnet/Index.html.pl
index 817b479..02e3ecd 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::d1xnet::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::d1xnet::ListItem;
+Wuse 'My::Project';
+Wuse 'project::d1xnet::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::d1xnet::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::d1xnet::ListItem::ListItem,
                );
 
 My::Web->footer();
index 2ec7cfe..20a86b7 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::d1xnet;
+package project::d1xnet::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"<a href=\"http://d1x.warpcore.org/\">D1X</a> native TCP/IP support patch",
-               "priority"=>2,
+
+our @ListItem=(
+               "name"=>a_href('http://d1x.warpcore.org/','D1X').' TCP/IP',
+               "platform"=>"patch",
+               "priority"=>200,
+               "icon"=>"exit03.jpeg",
                "download"=>"d1x-tcpip-0.99.1.diff.gz",
-               "summary"=>"Network patch",
+               "summary"=>a_href('http://d1x.warpcore.org/','D1X').' native TCP/IP support patch',
                "license"=>"PD",
                "maintenance"=>"accepted",
                "language"=>"C module",
-               "description"=>""
-                               .'<p>No further mess with <a href="ftp://linux.kali.net/outgoing/kalinix/">KaliNix</a>,'
-                               .' KIX or any other IPX layer convertor. This patch adds true TCP/IP networking'
-                               .' capability to <a href="http://d1x.warpcore.org/">D1X</a> version 1.30.</p>'
+               "description"=><<"HERE",
+<p>No further mess with @{[ a_href 'ftp://linux.kali.net/outgoing/kalinix/','KaliNix' ]},
+KIX or any other IPX layer convertor. This patch adds true TCP/IP networking
+capability to @{[ a_href 'http://d1x.warpcore.org/','D1X' ]} version 1.30.</p>
+HERE
                );
 
 1;
index c226e1f..c75fd5d 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/d1xnet/exit03.jpeg b/project/d1xnet/exit03.jpeg
new file mode 100644 (file)
index 0000000..9dbb0d8
Binary files /dev/null and b/project/d1xnet/exit03.jpeg differ
similarity index 69%
rename from project/doswatch/index.html.pl
rename to project/doswatch/Index.html.pl
index 1cd0733..fc056af 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::doswatch::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::doswatch::ListItem;
+Wuse 'My::Project';
+Wuse 'project::doswatch::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::doswatch::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::doswatch::ListItem::ListItem,
                );
 
 My::Web->footer();
index 38c99ac..e4796c9 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::doswatch;
+package project::doswatch::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"DOSWatcher - DOS File Access Snooper",
-               "priority"=>2,
+
+our @ListItem=(
+               "name"=>"DOSWatcher",
+               "platform"=>"dos",
+               "priority"=>390,
                "download"=>"doswatch.zip",
-               "summary"=>"DOS files snooper",
+               "summary"=>"DOS files access strace(1) equivalent",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"i386 asm",
-               "description"=>""
-                               .'<p>Resident program which displays all the file (and other) DOS function'
-                               .' calls access on the secondary console. Useful for many failure discoveries'
-                               .' for weird software packages with broken file/directory access.</p>'
-                               .' <ul>'
-                               .'      <li>Requires MDA/Hercules secondary adapter to be usable'
-                               .'      <li>Contains also MDABIOS, generic secondary adapter display layer'
-                               .'      <li>Can be run on primary-only VGA (with not much comfort, indeed)'
-                               .' </ul>'
+               "description"=><<"HERE",
+<p>Resident program which displays all the file (and other) DOS function
+calls access on the secondary console. Useful for many failure discoveries
+for weird software packages with broken file/directory access.</p>
+<ul>
+       <li>MDA/Hercules secondary adapter recommended for DOSWATCH</li>
+       <li>Package contains also MDABIOS - generic secondary adapter driver</li>
+       <li>MDABIOS features DOS commands accessible device "mda$"</li>
+       <li>DOSWATCH can be run on single VGA card (with not much comfort, indeed)</li>
+</ul>
+HERE
                );
 
 1;
index 7cbbe96..df5a81d 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/energie/Index.html.pl b/project/energie/Index.html.pl
new file mode 100755 (executable)
index 0000000..d9b5d90
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::energie'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::energie::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::energie::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::energie::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/energie/ListItem.pm b/project/energie/ListItem.pm
new file mode 100755 (executable)
index 0000000..1c01fcb
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::energie' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::energie::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"PHP Web",
+               "platform"=>"web",
+               "priority"=>240,
+               "cvs"=>"www/www.energie.vellum.cz",
+               "link-Example web"=>a_href('http://www.energie.vellum.cz/'),
+               "summary"=>a_href('http://www.php.net/','PHP')." web framework",
+               "license"=>"GPL",
+               "maintenance"=>"obsolete-".a_href('http://www.php.net/','PHP')." is deprecated in favor of "
+                               .a_href('http://www.perl.org/','Perl')." - use ".a_href("/project/MyWeb/","My::Web"),
+               "language"=>"PHP",
+               "description"=><<"HERE",
+<p>Each web author has his own web framework reusable for other web developers
+as a generic engine.  Here is mine. I am not a fool to expect you would use
+it.</p>
+HERE
+               );
+
+1;
diff --git a/project/energie/Makefile.am b/project/energie/Makefile.am
new file mode 100644 (file)
index 0000000..b04d980
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/energie/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/etherealmmse/Index.html.pl b/project/etherealmmse/Index.html.pl
new file mode 100755 (executable)
index 0000000..f475ac6
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::etherealmmse'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::etherealmmse::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::etherealmmse::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::etherealmmse::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/etherealmmse/ListItem.pm b/project/etherealmmse/ListItem.pm
new file mode 100755 (executable)
index 0000000..e56dc84
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::etherealmmse' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::etherealmmse::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.ethereal.com/','Ethereal').' MMSE fix',
+               "platform"=>"patch",
+               "priority"=>360,
+               "icon"=>"elogo3d100x100",
+               "summary"=>'Fixed MMS Encapsulation protocol decoding',
+               "link-ChangeLog entry"=>'http://www.ethereal.com/cgi-bin/viewcvs.cgi/ethereal/packet-mmse.c#rev1.15',
+               "download-patch"=>'http://www.ethereal.com/cgi-bin/viewcvs.cgi/ethereal/packet-mmse.c.diff?r2=1.15&r1=1.14&diff_format=u',
+               "license"=>"GPL",
+               "maintenance"=>"accepted",
+               "sponsorship"=>a_href('http://www.atspraha.cz/','Advanced Telecom Services'),
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>Fixed a tiny bug in MMS Encapsulation protocol decoding.</p>
+HERE
+               );
+
+1;
diff --git a/project/etherealmmse/Makefile.am b/project/etherealmmse/Makefile.am
new file mode 100644 (file)
index 0000000..0bf001f
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/etherealmmse/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/etherealmmse/elogo3d100x100.png b/project/etherealmmse/elogo3d100x100.png
new file mode 100644 (file)
index 0000000..17821f4
Binary files /dev/null and b/project/etherealmmse/elogo3d100x100.png differ
diff --git a/project/etherealwsp/Index.html.pl b/project/etherealwsp/Index.html.pl
new file mode 100755 (executable)
index 0000000..6aef2ee
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::etherealwsp'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::etherealwsp::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::etherealwsp::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::etherealwsp::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/etherealwsp/ListItem.pm b/project/etherealwsp/ListItem.pm
new file mode 100755 (executable)
index 0000000..35a5616
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::etherealwsp' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::etherealwsp::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.ethereal.com/','Ethereal').' WSP patch',
+               "platform"=>"patch",
+               "priority"=>350,
+               "icon"=>"elogo3d100x100",
+               "summary"=>'Enhanced WSP headers decoding',
+               "download-patch"=>'ethereal-2002-08-03-packet-wsp.c-contentlocation.diff',
+               "license"=>"GPL",
+               "maintenance"=>"ignored",
+               "sponsorship"=>a_href('http://www.atspraha.cz/','Advanced Telecom Services'),
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>Extended decoded headers for '<i>Content-Location</i>'. This header
+is used for MMS encoding in WSP.</p>
+HERE
+               );
+
+1;
diff --git a/project/etherealwsp/Makefile.am b/project/etherealwsp/Makefile.am
new file mode 100644 (file)
index 0000000..03e6153
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/etherealwsp/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/etherealwsp/elogo3d100x100.png b/project/etherealwsp/elogo3d100x100.png
new file mode 100644 (file)
index 0000000..17821f4
Binary files /dev/null and b/project/etherealwsp/elogo3d100x100.png differ
diff --git a/project/etherealwsp/ethereal-2002-08-03-packet-wsp.c-contentlocation.diff b/project/etherealwsp/ethereal-2002-08-03-packet-wsp.c-contentlocation.diff
new file mode 100644 (file)
index 0000000..e86ee3f
--- /dev/null
@@ -0,0 +1,39 @@
+--- ethereal-2002-08-03/packet-wsp.c-orig      Sat Aug  3 01:36:04 2002
++++ ethereal-2002-08-03/packet-wsp.c   Mon Aug  5 06:25:00 2002
+@@ -109,6 +109,7 @@
+ static int hf_wsp_header_connection_str                       = HF_EMPTY;
+ static int hf_wsp_header_cache_control_field_name_str = HF_EMPTY;
+ static int hf_wsp_header_content_length                       = HF_EMPTY;
++static int hf_wsp_header_content_location             = HF_EMPTY;
+ static int hf_wsp_header_age                          = HF_EMPTY;
+ static int hf_wsp_header_bearer_indication            = HF_EMPTY;
+ static int hf_wsp_header_date                         = HF_EMPTY;
+@@ -1724,7 +1725,13 @@
+                   hf_wsp_header_content_length,
+                   headerType);
+               break;
+-                              
++
++      case FN_CONTENT_LOCATION:       /* Content-Location */
++              add_string_value_header (tree, header_buff, headerLen,
++                  value_buff, valueType, valueLen,
++                  hf_wsp_header_content_location, headerType);
++              break;
++
+       case FN_DATE:                   /* Date */
+               add_date_value_header (tree, header_buff, headerLen,
+                   value_buff, valueType, valueLen,
+@@ -4538,6 +4545,13 @@
+                               "Content-Length", HFILL
+                       }
+               },
++              { &hf_wsp_header_content_location,
++                      {       "Content-Location",           
++                              "wsp.header.content_location",
++                               FT_STRING, BASE_NONE, NULL, 0x00,
++                              "Content-Location", HFILL
++                      }
++              },
+               { &hf_wsp_header_date,
+                       {       "Date",           
+                               "wsp.header.date",
similarity index 55%
rename from project/fixhtml/index.html.pl
rename to project/fixhtml/Index.html.pl
index 4524e36..bf399dc 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::fixhtml::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::fixhtml::ListItem;
+Wuse 'My::Project';
+Wuse 'project::fixhtml::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::fixhtml::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::fixhtml::ListItem::ListItem,
                );
 
+
+print <<"HERE";
+<p>If you download/grab the whole (or its part) of some web site (for example
+by <b>WebCopy</b> tool), you will
+probably want to browse it locally on your computer offline. Unfortunately
+the authors are usually using server-name protocol reference or absolute
+path referration which will broke on your local machine.</p>
+HERE
+
+
 My::Web->footer();
index e5dbbbc..669e8f9 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::fixhtml;
+package project::fixhtml::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Converter of HTML Files URLs to Relative",
-               "priority"=>3,
+
+our @ListItem=(
+               "name"=>"fixhtml",
+               "platform"=>"unixuser",
+               "trivia"=>1,
+               "priority"=>20,
                "download"=>"fixhtml.pl",
-               "summary"=>"HTML converter",
+               "summary"=>"Convert HTML files URLs to relative",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"obsolete-".a_href('http://wget.sunsite.dk/','Wget')." option <b>--convert-links</b> does the same.",
                "language"=>"Perl",
-               "description"=>""
-                               .'<p>If you download/grab the whole (or its part) of some web site (for example'
-                               .' by <b>WebCopy</b> tool), you will'
-                               .' probably want to browse it locally on your computer offline. Unfortunately'
-                               .' the authors are usually using server-name protocol reference or absolute'
-                               .' path referration which will broke on your local machine.</p>'
-                               .' <p>This software is derived from <b>WebCopy</b> and initially it was only'
-                               .' its extension. I separated it afterwards - you really do not want to do'
-                               .' the opposite, think twice before trying to integrate it back.</p>'
+               "description"=><<"HERE",
+<p>Program translates the URL references in your downloaded web pages to be relative
+and therefore browsable without Internet access.</p>
+HERE
                );
 
 1;
index d30b8b4..555f1b1 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/gladewsrc/Index.html.pl b/project/gladewsrc/Index.html.pl
new file mode 100755 (executable)
index 0000000..3b73d5c
--- /dev/null
@@ -0,0 +1,46 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::gladewsrc'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::gladewsrc::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::gladewsrc::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::gladewsrc::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Patch got integrated to <b>glade/main.c</b> revision <b>1.10</b> (although
+modified by Damon Chaplin).</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/gladewsrc/ListItem.pm b/project/gladewsrc/ListItem.pm
new file mode 100755 (executable)
index 0000000..dced5dd
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::gladewsrc' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::gladewsrc::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://glade.gnome.org/','Glade').' -w',
+               "platform"=>"patch",
+               "priority"=>310,
+               "icon"=>"glade-icon",
+               "summary"=>'Option <i>--write-source</i> for batch compilation',
+               "download-original patch"=>'glade-0.5.7-writesource.diff',
+               "link-ChangeLog entry"=>'http://cvs.gnome.org/bonsai/cvslog.cgi?file=glade%2Fglade/main.c&root=/cvs/gnome#1.10',
+               "license"=>"GPL",
+               "maintenance"=>"accepted",
+               "sponsorship"=>a_href('http://www.suse.com/','SuSE'),
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>Automatically generate {interface,support}.[ch] and other source files
+by @{[ a_href 'http://glade.gnome.org/','Glade' ]}.</p>
+HERE
+               );
+
+1;
diff --git a/project/gladewsrc/Makefile.am b/project/gladewsrc/Makefile.am
new file mode 100644 (file)
index 0000000..f5f5772
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/gladewsrc/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/gladewsrc/glade-0.5.7-writesource.diff b/project/gladewsrc/glade-0.5.7-writesource.diff
new file mode 100644 (file)
index 0000000..d7ebd48
--- /dev/null
@@ -0,0 +1,162 @@
+diff -ru -x *.pot -x cat-id-tbl* glade-0.5.7-orig/glade/main.c glade-0.5.7/glade/main.c
+--- glade-0.5.7-orig/glade/main.c      Wed Dec 22 17:01:00 1999
++++ glade-0.5.7/glade/main.c   Sun Mar 12 20:44:11 2000
+@@ -36,14 +36,31 @@
+ static void parse_command_line (int argc,
+                               char *argv[],
+                               GladeProjectWindow *project_window);
++static void post_command_line (GladeProjectWindow *project_window);
+ static void usage (void);
++/* Currently we handle only command-line arguments an XML file to load
++   and request for source build.
++   For Gnome we have to use popt, even though we have no options. */
++
++static gchar *arg_filename=NULL;
++static int arg_write_source=0;
++
+ #ifdef USE_GNOME
+ static poptContext pctx;
+ static struct poptOption options[] = {
+   {
++    "writesource",
++    'w',
++    0,
++    &arg_write_source,
++    0,
++    N_("Whether to automatically (and only) build the source files"),
++    NULL
++  },
++  {
+     NULL,
+     '\0',
+     0,
+@@ -95,6 +112,7 @@
+   glade_show_property_editor ();
+   parse_command_line (argc, argv, project_window);
++  post_command_line (project_window);
+   if (current_project == NULL)
+     glade_project_new ();
+@@ -104,15 +122,44 @@
+   return 0;
+ }
++static void
++post_command_line (GladeProjectWindow *project_window)
++{
++  gchar *directory;
++  GladeProject *project;
++  GladeError *error;
++
++  if (arg_filename)
++    {
++      directory = g_get_current_dir ();
++      arg_filename = glade_util_make_absolute_path (directory, arg_filename);
++      glade_project_window_open_project (project_window, arg_filename);
++      g_free (directory);
++      g_free (arg_filename);
++    }
++  if (arg_write_source)
++    {
++      if (!arg_filename) {
++        fprintf(stderr,_("Project name not specified, requited for \"--writesource\" option.\n"));
++      exit(1);
++        }
++      project = glade_project_view_get_project (GLADE_PROJECT_VIEW (project_window->project_view));
++      g_return_if_fail (project != NULL);
++      error = glade_project_write_source (project);
++      if (error) {
++              fprintf(stderr,_("Error writing source, use GUI to fix it.\n"));
++      glade_error_free (error);
++      exit(1);
++      }
++      exit(0);
++    }
++}
+-/* Currently the only command-line argument we handle is an XML file to load.
+-   For Gnome we have to use popt, even though we have no options. */
+ #ifdef USE_GNOME
+ static void
+ parse_command_line (int argc, char *argv[],
+                   GladeProjectWindow *project_window)
+ {
+-  gchar *filename = NULL, *directory;
+   const gchar **args;
+   gint i;
+@@ -120,22 +167,13 @@
+   for (i = 0; args && args[i]; i++)
+     {
+-      if (filename == NULL)
+-      filename = (gchar*) args[i];
+-      else
+-      usage ();
++    if (arg_filename == NULL)
++      arg_filename = (gchar*) args[i];
++    else
++      usage ();
+     }
+   poptFreeContext (pctx);
+-
+-  if (filename)
+-    {
+-      directory = g_get_current_dir ();
+-      filename = glade_util_make_absolute_path (directory, filename);
+-      glade_project_window_open_project (project_window, filename);
+-      g_free (directory);
+-      g_free (filename);
+-    }
+ }
+ #else
+@@ -143,28 +181,18 @@
+ parse_command_line (int argc, char *argv[],
+                   GladeProjectWindow *project_window)
+ {
+-  gchar *filename = NULL, *directory;
+   gint i;
+   /* GTK parses argc & argv and sets arguments to NULL if it has used them. */
+   for (i = 1; i < argc; i++)
+     {
+-      if (argv[i])
+-      {
+-        if (filename == NULL)
+-          filename = argv[i];
+-        else
+-          usage ();
+-      }
+-    }
+-
+-  if (filename)
+-    {
+-      directory = g_get_current_dir ();
+-      filename = glade_util_make_absolute_path (directory, filename);
+-      glade_project_window_open_project (project_window, filename);
+-      g_free (directory);
+-      g_free (filename);
++      if (!argv[i]) continue;
++      if (!strcmp(argv[i],"-w") || !strcmp(argv[i],"--writesource"))
++      arg_write_source = 1;
++      else if (arg_filename == NULL)
++      arg_filename = (gchar*) argv[i];
++      else
++      usage ();
+     }
+ }
+ #endif
+@@ -173,6 +201,6 @@
+ static void
+ usage (void)
+ {
+-  fprintf (stderr, "Usage: glade [filename]\n");
++  fprintf (stderr, "Usage: glade [-w|--writesource] [<filename>]\n");
+   exit (0);
+ }
diff --git a/project/gladewsrc/glade-icon.png b/project/gladewsrc/glade-icon.png
new file mode 100644 (file)
index 0000000..3c23cad
Binary files /dev/null and b/project/gladewsrc/glade-icon.png differ
diff --git a/project/gsmperl/Index.html.pl b/project/gsmperl/Index.html.pl
new file mode 100755 (executable)
index 0000000..3eecdc9
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::gsmperl'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::gsmperl::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::gsmperl::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::gsmperl::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/gsmperl/ListItem.pm b/project/gsmperl/ListItem.pm
new file mode 100755 (executable)
index 0000000..8aae4bb
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::gsmperl' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::gsmperl::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.tektonica.com/projects/gsmsms/','GSM::SMS').' patch',
+               "platform"=>"patch",
+               "priority"=>520,
+               "cvs"=>"gsmperl/GSM:lace",
+               "summary"=>'Extension of '.a_href('http://www.tektonica.com/projects/gsmsms/','GSM::SMS')
+                               .' for EMS+Alcatel',
+               "license"=>"PD",
+               "maintenance"=>"pending",
+               "sponsorship"=>a_href('http://www.atspraha.cz/','Advanced Telecom Services'),
+               "language"=>"Perl",
+               "description"=><<"HERE",
+<p>Patch extends @{[ a_href 'http://www.tektonica.com/projects/gsmsms/','GSM::SMS' ]}
+package by EMS and Alcatel-proprietary formats. Only picture/animations have
+been implemented now, EMS/Alcatel ringtones are not yet supported.</p>
+HERE
+               );
+
+1;
diff --git a/project/gsmperl/Makefile.am b/project/gsmperl/Makefile.am
new file mode 100644 (file)
index 0000000..9d0b0b0
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/gsmperl/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/int13sniff/Index.html.pl b/project/int13sniff/Index.html.pl
new file mode 100755 (executable)
index 0000000..1d3c9c5
--- /dev/null
@@ -0,0 +1,43 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::int13sniff'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::int13sniff::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::int13sniff::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::int13sniff::ListItem::ListItem,
+               );
+
+
+print centerimg "int13sniff-snap","Boot Snapshot";
+
+
+My::Web->footer();
diff --git a/project/int13sniff/ListItem.pm b/project/int13sniff/ListItem.pm
new file mode 100755 (executable)
index 0000000..3f0cbac
--- /dev/null
@@ -0,0 +1,50 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::int13sniff' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::int13sniff::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"Int13Sniff",
+               "platform"=>"unixdevel",
+               "priority"=>370,
+               "icon"=>"int13sniff-icon",
+               "summary"=>'Trace PC bootloader disk operations',
+               "download-source"=>'http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/surprise/surprise/misc/int13sniff.S?rev=HEAD',
+               "download-gzip(1)ped floppy image head"=>'int13sniff.bin.gz',
+               "link-parent Surprise project"=>"/project/surprise/",
+               "license"=>"GPL",
+               "maintenance"=>"ready",
+               "sponsorship"=>a_href('http://www.suse.com/','SuSE'),
+               "language"=>"i386 asm",
+               "description"=><<"HERE",
+<p>Developer tool for PC boot loading analysis. Report all sectors being read
+to display, back to its own floppy disk and/or to serial port(s).</p>
+HERE
+               );
+
+1;
diff --git a/project/int13sniff/Makefile.am b/project/int13sniff/Makefile.am
new file mode 100644 (file)
index 0000000..9bffbd2
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/int13sniff/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/int13sniff/int13sniff-icon.png b/project/int13sniff/int13sniff-icon.png
new file mode 100644 (file)
index 0000000..248f14a
Binary files /dev/null and b/project/int13sniff/int13sniff-icon.png differ
diff --git a/project/int13sniff/int13sniff-snap.png b/project/int13sniff/int13sniff-snap.png
new file mode 100644 (file)
index 0000000..88bf21f
Binary files /dev/null and b/project/int13sniff/int13sniff-snap.png differ
diff --git a/project/int13sniff/int13sniff.bin.gz b/project/int13sniff/int13sniff.bin.gz
new file mode 100755 (executable)
index 0000000..e8e5d95
Binary files /dev/null and b/project/int13sniff/int13sniff.bin.gz differ
similarity index 80%
rename from project/ircon/index.html.pl
rename to project/ircon/Index.html.pl
index e70d307..da7c831 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::ircon::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::ircon::ListItem;
+Wuse 'My::Project';
+Wuse 'project::ircon::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::ircon::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ircon::ListItem::ListItem,
                );
 
-print <<'HERE';
+print <<"HERE";
 <p>Package consists of:</p>
 <ul>
 <li>Linux kernel module implementing <code>/dev/ircon</code> device as hardware interface</li>
@@ -58,6 +61,11 @@ print <<'HERE';
 should be more intelligent and generate the signal itself as PC hardware simply is too slow to keep up strictly
 with the original frequencies and so in about 1 of 30 button presses it misses. Due to this the automatic Maspro
 tuning software (generating hundreds of button presses) is not usable.</p>
+
+@{[ centerimg
+               ['ircon-parport-small.jpeg','Parallel Port Adapter',"a_href_img"=>'ircon-parport.jpeg'],
+               ['ircon-led-small.jpeg','Remote LED Transmitter',"a_href_img"=>'ircon-led.jpeg']
+               ]}
 HERE
 
 My::Web->footer();
index cd4f448..51b2f0b 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::ircon;
+package project::ircon::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"IRCon - Infrared Remote Control",
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"IRCon",
+               "platform"=>"unixuser",
+               "priority"=>580,
+               "icon"=>"ircon-icon.jpeg",
                "download"=>"ircon.tar.gz",
                "link-index of scanned images"=>"ircon-img/",
                "download-all scanned images"=>"ircon-img.tar",
-               "summary"=>"InfraRed control",
+               "summary"=>"InfraRed remote control hardware",
                "license"=>"PD",
-               "maintenance"=>"obsolete",
-               "reason"=>"Linux kernel driver no longer maintained. Superseded by <a href=\"http://www.lirc.org/\">LIRC</a>",
+               "maintenance"=>"obsolete-Superseded by ".a_href('http://www.lirc.org/','LIRC'),
                "language"=>"C, Java",
-               "description"=>""
-                               .'<p>Software package for custom simple hardware connected to PC parallel port'
-                               .' and transmitting infrared singals to fake real remote TV/video controllers. Hardware'
-                               .' is also equipped with receiver which is only used during development to grab and decode'
-                               .' original signals.</p>'
+               "description"=><<"HERE",
+<p>Software package for custom simple hardware connected to PC parallel port
+and transmitting infrared singals to fake real remote TV/video controllers. Hardware
+is also equipped with receiver which is only used during development to grab and decode
+original signals.</p>
+HERE
                );
 
 1;
index d585b16..b7bf197 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/ircon/ircon-icon.jpeg b/project/ircon/ircon-icon.jpeg
new file mode 100644 (file)
index 0000000..07ed8f4
Binary files /dev/null and b/project/ircon/ircon-icon.jpeg differ
diff --git a/project/ircon/ircon-led-small.jpeg b/project/ircon/ircon-led-small.jpeg
new file mode 100644 (file)
index 0000000..92880e2
Binary files /dev/null and b/project/ircon/ircon-led-small.jpeg differ
diff --git a/project/ircon/ircon-led.jpeg b/project/ircon/ircon-led.jpeg
new file mode 100644 (file)
index 0000000..4bcd442
Binary files /dev/null and b/project/ircon/ircon-led.jpeg differ
diff --git a/project/ircon/ircon-parport-small.jpeg b/project/ircon/ircon-parport-small.jpeg
new file mode 100644 (file)
index 0000000..e5ff7f3
Binary files /dev/null and b/project/ircon/ircon-parport-small.jpeg differ
diff --git a/project/ircon/ircon-parport.jpeg b/project/ircon/ircon-parport.jpeg
new file mode 100644 (file)
index 0000000..62398cd
Binary files /dev/null and b/project/ircon/ircon-parport.jpeg differ
diff --git a/project/kewensis/Index.html.pl b/project/kewensis/Index.html.pl
new file mode 100755 (executable)
index 0000000..cf4f889
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::kewensis'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::kewensis::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::kewensis::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::kewensis::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<iframe src="out-list.html" width="90%" height="1500">
+</iframe>
+@{[ vskip "3ex" ]}
+<iframe src="out-edit.html" width="90%" height="500">
+</iframe>
+HERE
+
+
+My::Web->footer();
diff --git a/project/kewensis/ListItem.pm b/project/kewensis/ListItem.pm
new file mode 100755 (executable)
index 0000000..ad74f7f
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::kewensis' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::kewensis::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"kewensis",
+               "platform"=>"web",
+               "priority"=>120,
+               "cvs"=>"kewensis",
+               "summary"=>a_href('http://www.ipni.org/','Plant Name Index').' custom engine',
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"PHP, Perl",
+               "description"=><<"HERE",
+<p>@{[ a_href 'http://www.ipni.org/','International Plant Name Index' ]}
+provides information about plants in duplicated and unconveniently searchable
+pages. You can download their database and run your own engine on it locally.</p>
+<p>This engine allows you to modify the database to fix names of your own
+plants and it groups synonyms of the same plant.</p>
+HERE
+               );
+
+1;
diff --git a/project/kewensis/Makefile.am b/project/kewensis/Makefile.am
new file mode 100644 (file)
index 0000000..89d572f
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/kewensis/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/kewensis/out-edit.html b/project/kewensis/out-edit.html
new file mode 100644 (file)
index 0000000..3466447
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
+<head><title>Kewensis</title>
+<style type="text/css"><!--
+.cvs-id   { font-family: monospace; }
+.error    { color: red;   background-color: transparent; }
+.quote    { font-family: monospace; }
+.nowrap   { white-space: nowrap; }
+.centered { text-align: center; }
+body {
+               background-color: black;
+               color: white;
+               }
+:link    { color: aqua;   background-color: transparent; }
+:visited { color: teal;   background-color: transparent; }
+h1,h2    { color: yellow; background-color: transparent; }
+.name { font-weight: bold; }
+.PublAuthor { font-variant: small-caps; }
+.Publication { }
+--></style>
+</head><body>
+<!-- ID=646463-1 --><form action="index.php#id_646463-1" method="POST">
+<table border="0" width="100%"><tr><td align="center"><table border="0"><tr><td>
+<input type="text" name="name" size="25" value="Odontoglossum crispatulum" />
+<input type="text" name="PublAuthor" size="25" value="Reichb.f." /><br />
+<input type="text" name="Publication" size="50" value="in Walp. Ann. vi. 853." /><br /><textarea name="html" rows="6" cols="40">&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;
+
+&lt;h4&gt;Original Data&lt;/h2&gt;
+Notes: =Gomesa crispa</textarea>
+</td></tr></table><p>&nbsp;</p>
+<input type="submit" name="update" value="Update entry" />
+<input type="hidden" name="id" value="646463-1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</td></tr></table></form><p>&nbsp;</p>
+<hr />
+<table border="0" width="100%">
+<tr><td align="left"><span class="cvs-id">$Id$</span></td><td align="right"><a
+       href="http://validator.w3.org/check?uri=http%3A%2F%2Flocalhost%2Fkewensis%2Findex%2Ephp%3Fedit%3DEdituj%2Bzaznam%26id%3D646463%2D1%26find%3Dodontoglossum%2Bcris%26limit%5Ffrom%3D0%26limit%5Fmax%3D10">Valid XHTML 1.1!</a><a href="http://jigsaw.w3.org/css-validator/validator?warning=2&amp;profile=css2&amp;uri=http%3A%2F%2Flocalhost%2Fkewensis%2Findex%2Ephp%3Fedit%3DEdituj%2Bzaznam%26id%3D646463%2D1%26find%3Dodontoglossum%2Bcris%26limit%5Ffrom%3D0%26limit%5Fmax%3D10">Valid CSS!</a></td></tr>
+</table>
+</body></html>
diff --git a/project/kewensis/out-list.html b/project/kewensis/out-list.html
new file mode 100644 (file)
index 0000000..6f1139d
--- /dev/null
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
+<head><title>Kewensis</title>
+<style type="text/css"><!--
+.cvs-id   { font-family: monospace; }
+.error    { color: red;   background-color: transparent; }
+.quote    { font-family: monospace; }
+.nowrap   { white-space: nowrap; }
+.centered { text-align: center; }
+body {
+               background-color: black;
+               color: white;
+               }
+:link    { color: aqua;   background-color: transparent; }
+:visited { color: teal;   background-color: transparent; }
+h1,h2    { color: yellow; background-color: transparent; }
+.name { font-weight: bold; }
+.PublAuthor { font-variant: small-caps; }
+.Publication { }
+--></style>
+</head><body>
+<form action="index.php" method="GET">
+<h1 align="center"><input type="text" name="find" size="40"  value="odontoglossum cris" onkeyup="this.form.elements['limit_from'].value=0;" onchange="this.form.elements['limit_from'].value=0;" onfocus="this.form.elements['limit_from'].value=0;" />
+&nbsp;<input type="submit" value="Search" />
+</h1><h2 align="center">
+First Group: <input type="text" name="limit_from" size="6" value="0" />
+&nbsp;&nbsp;&nbsp;Max Groups: <input type="text" name="limit_max"  size="6" value="10" />
+</h2></form>
+<hr />
+<table border="0" width="100%"><tr><td align="center">
+<table border="0" width="80%"><tr><td align="left"></td><td align="right"><form action="index.php" method="GET"><input type="submit"  value="Next" /><input type="hidden" name="limit_from" value="10" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr></table><hr />
+<table border="0" width="90%"><tr><td align="right"><a name="family_646464-1"><form action="index.php#family_646464-1" method="POST">Group&nbsp;#&nbsp;<input type="text" size="10" readonly="readonly" value="646464-1" /><br /><br />Join to this group: <input type="text" name="move_src" size="21" value="" />&nbsp;<input type="submit" name="move" value="Join" />
+<input type="hidden" name="move_dst" value="646464-1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form>
+</td></tr></table>
+<a name="id_646464-1"><!-- family_order=0 --><table border="0" width="90%"><tr><td align="left" valign="center"><table border="0"><tr><td><span class="name">Odontoglossum crispum</span>
+<span class="PublAuthor">Lindl.</span></td></tr><tr><td><span class="Publication">in Ann. &amp; Mag. Nat. Hist. Ser. I. xv. (1845) 256.</span></td></tr><tr><td><blockquote><!-- BEGIN import: [646464-1] -->
+<p></p><p></p><br>
+
+<h4>Original Data</h2>
+Notes: N. Granat
+<!-- END import: [646464-1] --></blockquote></td></tr></table></td><td align="right" valign="center"><table border="0"><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="confirm" value="Delete entry" /><input type="hidden" name="id" value="646464-1" />
+<input type="hidden" name="confirming" value="delete" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="confirm" value="(in window)" /><input type="hidden" name="id" value="646464-1" />
+<input type="hidden" name="confirming" value="delete" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="edit" value="Edit entry" /><input type="hidden" name="id" value="646464-1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="edit" value="(in window)" /><input type="hidden" name="id" value="646464-1" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr></table></td></tr></table></a>
+
+</a>
+<hr />
+<table border="0" width="90%"><tr><td align="right"><a name="family_172210-2"><form action="index.php#family_172210-2" method="POST">Group&nbsp;#&nbsp;<input type="text" size="10" readonly="readonly" value="172210-2" /><br /><br />Join to this group: <input type="text" name="move_src" size="21" value="" />&nbsp;<input type="submit" name="move" value="Join" />
+<input type="hidden" name="move_dst" value="172210-2" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form>
+</td></tr></table>
+<a name="id_172210-2"><!-- family_order=0 --><table border="0" width="90%"><tr><td align="left" valign="center"><table border="0"><tr><td><span class="name">Odontoglossum alexandrae var. flaveolum</span>
+<span class="PublAuthor">(Rchb.f.) B.S.Williams &amp; T.Moore</span></td></tr><tr><td><span class="Publication">Orchid Album 1: tab. 43. 1882</span></td></tr><tr><td><blockquote><!-- BEGIN import: [172210-2] -->
+<p></p><p></p>
+<h4>Linked Records</h2>
+<p>nomenclatural synonym:Odontoglossum crispum forma flaveolum Rchb.f.</p>
+<!-- END import: [172210-2] --></blockquote></td></tr></table></td><td align="right" valign="center"><table border="0"><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="confirm" value="Delete entry" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="confirming" value="delete" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="confirm" value="(in window)" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="confirming" value="delete" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="edit" value="Edit entry" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="edit" value="(in window)" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="confirm" value="Isolate entry" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="confirming" value="isolate" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="confirm" value="(in window)" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="confirming" value="isolate" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr><tr><td align="center"><form action="index.php#family_172210-2" method="POST"><input type="submit"  name="reorder" value="vvv down vvv" /><input type="hidden" name="id" value="172210-2" />
+<input type="hidden" name="reorder_by" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr></table></a>
+
+<blockquote><a name="id_1162282-2"><!-- family_order=1 --><table border="0" width="90%"><tr><td align="left" valign="center"><table border="0"><tr><td>&bull;</td><td><span class="name">Odontoglossum crispum forma flaveolum</span>
+<span class="PublAuthor">Rchb.f.</span></td></tr><tr><td></td><td><blockquote><!-- BEGIN import: [1162282-2] -->
+<p></p><p></p>
+<h4>Linked Records</h2>
+<p>nomenclatural synonym(Main Record):Odontoglossum alexandrae var. flaveolum (Rchb.f.) B.S.Williams  & T.Moore</p>
+<!-- END import: [1162282-2] --></blockquote></td></tr></table></td><td align="right" valign="center"><table border="0"><tr><td align="center"><form action="index.php#family_172210-2" method="POST"><input type="submit"  name="reorder" value="^^^ up ^^^" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="reorder_by" value="-1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="confirm" value="Delete entry" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="confirming" value="delete" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="confirm" value="(in window)" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="confirming" value="delete" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="edit" value="Edit entry" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="edit" value="(in window)" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr><tr><td align="center"><table border="0"><tr><td><form action="index.php" method="GET"><input type="submit"  name="confirm" value="Isolate entry" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="confirming" value="isolate" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td><td><form action="index.php" method="GET" target="_blank"><input type="submit"  name="confirm" value="(in window)" /><input type="hidden" name="id" value="1162282-2" />
+<input type="hidden" name="confirming" value="isolate" />
+<input type="hidden" name="winclose" value="1" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_from" value="0" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr></table></td></tr></table></a>
+</blockquote>
+</ul>
+</a>
+<hr /><table border="0" width="100%"><tr><td align="center">
+<table border="0" width="80%"><tr><td align="left"></td><td align="right"><form action="index.php" method="GET"><input type="submit"  value="Next" /><input type="hidden" name="limit_from" value="10" />
+<input type="hidden" name="find" value="odontoglossum cris" />
+<input type="hidden" name="limit_max" value="10" />
+</form></td></tr></table></td></tr></table>
+<hr />
+<table border="0" width="100%">
+<tr><td align="left"><span class="cvs-id">$Id$</span></td><td align="right"><a
+       href="http://validator.w3.org/check?uri=http%3A%2F%2Flocalhost%2Fkewensis%2Findex%2Ephp%3Ffind%3Dodontoglossum%2Bcris%26limit%5Ffrom%3D0%26limit%5Fmax%3D10">Valid XHTML 1.1!</a><a href="http://jigsaw.w3.org/css-validator/validator?warning=2&amp;profile=css2&amp;uri=http%3A%2F%2Flocalhost%2Fkewensis%2Findex%2Ephp%3Ffind%3Dodontoglossum%2Bcris%26limit%5Ffrom%3D0%26limit%5Fmax%3D10">Valid CSS!</a></td></tr>
+</table>
+</body></html>
diff --git a/project/kix/Index.html.pl b/project/kix/Index.html.pl
new file mode 100755 (executable)
index 0000000..6522d39
--- /dev/null
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::kix'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::kix::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::kix::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::kix::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>You no longer need to run any foreign binaries on your system and connect
+to remote/slow real @{[ a_href 'http://www.kali.net/','Kali' ]} server.
+You also do not need to sign any papers to get binary-only your
+own Kali server. Unfortunaly you cannot interconnect a game established
+by using KIX with any other software (Kali, native IPX etc.).</p>
+<p>Just compile, run and then add "-kali" option to your
+@{[ a_href 'http://d1x.warpcore.org/','D1X' ]} to get it running. You
+do not need IPX support anywhere (kernel, D1X, ...).</p>
+HERE
+
+
+My::Web->footer();
index fbfb31b..3a209d3 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::kix;
+package project::kix::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"KIX - KaliNix Replacement",
-               "priority"=>4,
+
+our @ListItem=(
+               "name"=>"KIX",
+               "platform"=>"unixuser",
+               "priority"=>110,
                "download"=>"kix.c",
-               "summary"=>"Network game server",
+               "summary"=>"Free protocol-compatible ".a_href('http://www.kali.net/','Kali').' server equivalent',
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "description"=>""
-                               .'<p>Server which can be used on GNU/Linux as a replacement of'
-                               .' <a href="ftp://linux.kali.net/outgoing/kalinix/">KaliNix</a>'
-                               .' and thus no need to run some foreign binaries on your system and connection'
-                               .' to remote/slow real <a href="http://www.kali.net/">Kali</a> server'
-                               .' and/or subscribing various papers to get (again binary-only) your'
-                               .' own Kali server. Unfortunaly you cannot interconnect a game established'
-                               .' by using KIX with any other software (Kali, native IPX etc.).</p>'
-                               .' <p>Just compile, run and then add "-kali" option to your'
-                               .' <a href="http://d1x.warpcore.org/">D1X</a> to get it running. You'
-                               .' do not need IPX support anywhere (kernel, D1X, ...).</p>'
+               "description"=><<"HERE",
+<p>Server used on GNU/Linux as a replacement for proprietary
+@{[ a_href 'ftp://linux.kali.net/outgoing/kalinix/','KaliNix' ]} network game server.</p>
+HERE
                );
 
 1;
index c9e04ea..fecdcd8 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/kware/Index.html.pl b/project/kware/Index.html.pl
new file mode 100755 (executable)
index 0000000..e980c65
--- /dev/null
@@ -0,0 +1,47 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::kware'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::kware::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::kware::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::kware::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Currently only a few functions are implemented and the code is rather
+an ugly hack than professional solution. I do not expect to ever develop
+it into some clean software, take it as it is, improve it or let it be.</p>
+HERE
+
+
+My::Web->footer();
index b617182..45a5869 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::kware;
+package project::kware::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"KernelWare, Linux Kernel Drivers in Userland",
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"KernelWare",
+               "platform"=>"unixdevel",
+               "priority"=>190,
                "download"=>"kware.tar.gz",
-               "summary"=>"Drivers debugging",
+               "summary"=>"Linux kernel drivers in userland for their debugging",
                "license"=>"PD",
-               "maintenance"=>"obsolete",
-               "reason"=>"<a href=\"http://user-mode-linux.sourceforge.net/\">The User-mode Linux Kernel</a>",
+               "maintenance"=>"obsolete-"
+                               .a_href('http://user-mode-linux.sourceforge.net/','The User-mode Linux Kernel')." is much more useful now.",
                "language"=>"C",
-               "description"=>""
-                               .'<p>Do you also find debugging of Linux kernel drivers a nightmare? Would you'
-                               .' like to be able to run them as normal userland process including fancy'
-                               .' <code>gdb</code> debugging and <code>SIGSEGV</code>-guarded operation?'
-                               .' Here you are!</p>'
-                               .' <p>KernelWare provides stub-style emulation of core kernel functions and'
-                               .' is able to link with already pre-compiled modules. No special compilation'
-                               .' flags needed, just link the <code>.o</code> module of the driver with'
-                               .' KernelWare and you will get standard executable.</p>'
-                               .' <p>Currently only a few functions are implemented and the code is rather'
-                               .' an ugly hack than professional solution. I do not expect to ever develop'
-                               .' it into some clean software, take it as it is, improve it or let it be.</p>'
+               "description"=><<"HERE",
+<p>Do you also find debugging of Linux kernel drivers a nightmare? Would you
+like to be able to run them as normal userland process including fancy
+<code>gdb</code> debugging and <code>SIGSEGV</code>-guarded operation?
+Here you are!</p>
+<p>KernelWare provides stub-style emulation of core kernel functions and
+is able to link with already pre-compiled modules. No special compilation
+flags needed, just link the <code>.o</code> module of the driver with
+KernelWare and you will get standard executable.</p>
+HERE
                );
 
 1;
index d33693b..60305f8 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/libtool/Index.html.pl b/project/libtool/Index.html.pl
new file mode 100755 (executable)
index 0000000..641b135
--- /dev/null
@@ -0,0 +1,65 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::libtool'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::libtool::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::libtool::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::libtool::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>When you include convenience library (<i>.a</i>) containing two conflicting name
+objects (same basename from two different directories) only one of those two
+object files will survive in &quot;<i>.libs/libA.lax/</i>&quot; arena:</p>
+<pre>
+       rm -fr .libs/libA.lax/libB.a
+       mkdir .libs/libA.lax/libB.a
+       (cd .libs/libA.lax/libB.a &amp;&amp; ar x /abs/path/to/A/B/.libs/libB.a)
+</pre>
+
+<p>The patch implements automatic renaming of &quot;<i>*.*</i>&quot; to &quot;<i>*-@{[ '$' ]}seqnum.*</i>&quot;
+in such case:</p>
+<pre>
+       libtool: link: warning: object name conflicts; renaming object files
+       libtool: link: warning: to ensure that they will not overwrite
+       (cd .libs/libA.lax/libB.a &amp;&amp; ar xN 1 /abs/path/to/A/B/.libs/libB.a 'XconflictX.o' &amp;&amp; mv -f 'XconflictX.o' 'XconflictX-1.o')
+       (cd .libs/libA.lax/libB.a &amp;&amp; ar xN 2 /abs/path/to/A/B/.libs/libB.a 'XconflictX.o' &amp;&amp; mv -f 'XconflictX.o' 'XconflictX-2.o')
+</pre>
+
+<p>Although renaming to a new name may be confusing IMO there is no better option.
+The original (conflicting) name is not left there in any instance to prevent
+misleading confusion of different object file found than expected.</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/libtool/ListItem.pm b/project/libtool/ListItem.pm
new file mode 100755 (executable)
index 0000000..eded704
--- /dev/null
@@ -0,0 +1,46 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::libtool' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::libtool::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.gnu.org/software/libtool/libtool.html','GNU Libtool').' fix',
+               "platform"=>"patch",
+               "priority"=>620,
+               "summary"=>'Handle duplicate object file names',
+               "download-patch"=>'http://savannah.gnu.org/cgi-bin/cvsweb/libtool/ltmain.in.diff?r1=1.320&r2=1.321',
+               "license"=>"GPL",
+               "maintenance"=>"accepted",
+               "language"=>"sh patch",
+               "description"=><<"HERE",
+<p>Patch fixis linking of convenience libraries (<i>.a</i>) containing two
+conflicting name objects.</p>
+HERE
+               );
+
+1;
diff --git a/project/libtool/Makefile.am b/project/libtool/Makefile.am
new file mode 100644 (file)
index 0000000..58fc29f
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/libtool/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/libxml2reader/Index.html.pl b/project/libxml2reader/Index.html.pl
new file mode 100755 (executable)
index 0000000..7a3ac83
--- /dev/null
@@ -0,0 +1,45 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::libxml2reader'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::libxml2reader::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::libxml2reader::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::libxml2reader::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Patch got integrated to <b>xmlreader.c</b> revision <b>1.50</b>.</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/libxml2reader/ListItem.pm b/project/libxml2reader/ListItem.pm
new file mode 100755 (executable)
index 0000000..6d098b7
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::libxml2reader' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::libxml2reader::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.xmlsoft.org/','libxml2').' fix',
+               "platform"=>"patch",
+               "priority"=>365,
+               "summary"=>'Fixed incomplete XML text nodes reading',
+               "link-ChangeLog entry"=>'http://cvs.gnome.org/bonsai/cvslog.cgi?file=libxml2/xmlreader.c&root=/cvs/gnome#1.50',
+               "link-Bugzilla entry"=>'http://bugzilla.gnome.org/show_bug.cgi?id=117702',
+               "download-my original patch"=>'http://bugzilla.gnome.org/showattachment.cgi?attach_id=18386',
+               "license"=>"PD",
+               "maintenance"=>"accepted",
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>xmlreader will sometimes return TEXT_NODE with only initial part of the
+real content. The remaining part of such text node is lost.</p>
+HERE
+               );
+
+1;
diff --git a/project/libxml2reader/Makefile.am b/project/libxml2reader/Makefile.am
new file mode 100644 (file)
index 0000000..92c727a
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/libxml2reader/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
similarity index 70%
rename from project/line9k/index.html.pl
rename to project/line9k/Index.html.pl
index b803226..b16bbb7 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::line9k::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::line9k::ListItem;
+Wuse 'My::Project';
+Wuse 'project::line9k::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::line9k::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::line9k::ListItem::ListItem,
                );
 
-print <<'HERE';
+
+print <<"HERE";
 <p>Scheme for battery charger. Review/fixes by the courtesy of <a href="http://www.pavouk.org/">Pavouk</a>.
 Connect serial port (such as <code>/dev/ttyS0</code>) to <code>RS232</code> pins,
 your original mobile phone charge to <code>AC</code> pins. <code>PS/2</code> keyboard
 fork of <code>+5V</code>/<code>GND</code> pins are required to power this hardware switch.</p>
+
+@{[ centerimg "charger.jpeg","AC Switch Photo" ]}
+@{[ vskip "3ex" ]}
+@{[ centerimg "line9k","AC Switch Scheme" ]}
 HERE
 
-print '<table border="0"><tr><td align="center">'.My::Web::img("line9k.gif","AC Switch Scheme").'</td></tr></table>'."\n";
 
 My::Web->footer();
index 6b60251..0e62897 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::line9k;
+package project::line9k::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Modem / Nokia 9110 GSM data gate",
-               "priority"=>7,
-               "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/usr/local/sbin/line9k?rev=HEAD",
-               "summary"=>"pppd(8) script, charger scheme",
+
+our @ListItem=(
+               "name"=>"line9k",
+               "platform"=>"unixuser",
+               "priority"=>420,
+               "icon"=>"charger-icon.jpeg",
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/bin/line9k?rev=HEAD",
+               "summary"=>"Modem / Nokia 9110 GSM data gateway control, charger",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"bash, hardware",
-               "description"=>""
-                               .'<p>Waits for incoming PPP data connection, authorizes it and answers it.</p>'
-                               .'<p>Scheme of computer controllde hardware charger for Nokia Communicator 9110 is supplied.'
-                               .'It keeps the Nokia battery fit by automatically controlled battery charging cycles.</p>'
+               "description"=><<"HERE",
+<p>Daemon waits for incoming PPP data connection, authorizes it and answers it.</p>
+<p>Scheme of computer controllde hardware charger for Nokia Communicator 9110 is supplied.
+It keeps the Nokia battery fit by automatically controlled battery charging cycles.</p>
+HERE
                );
 
 1;
index bf70f20..1945b4b 100644 (file)
@@ -20,14 +20,10 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl \
+       Index.html.pl \
        line9k.fig
 
-noinst_DATA+= \
-       index.html \
-       line9k.gif
-
-index.html: line9k.gif
-
 CLEANFILES+= \
-       line9k.fig.bak
+       line9k.fig.bak \
+       line9k.png \
+       line9k.gif
diff --git a/project/line9k/charger-icon.jpeg b/project/line9k/charger-icon.jpeg
new file mode 100644 (file)
index 0000000..a201302
Binary files /dev/null and b/project/line9k/charger-icon.jpeg differ
diff --git a/project/line9k/charger.jpeg b/project/line9k/charger.jpeg
new file mode 100644 (file)
index 0000000..03ea87e
Binary files /dev/null and b/project/line9k/charger.jpeg differ
diff --git a/project/list.cgi.pl b/project/list.cgi.pl
deleted file mode 100755 (executable)
index eeadeef..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#! /usr/bin/perl
-# 
-# $Id$
-# List of projects Perl template.
-# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
-# 
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; exactly version 2 of June 1991 is required
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use lib qw(/home/short/lib/perl5/site_perl/5.6.0/i386-linux /home/short/lib/perl5/site_perl/5.6.0 /home/short/lib/perl5/site_perl/i386-linux /home/short/lib/perl5/site_perl /home/short/lib/perl5/5.6.0/i386-linux /home/short/lib/perl5/5.6.0 /home/short/lib/perl5/i386-linux /home/short/lib/perl5);
-
-use lib "../";
-use My::Web;
-require CGI;
-
-use constant ENTRIES=>"CVS/Entries";
-use constant ENTRIES_LOG=>"CVS/Entries.Log";
-
-
-My::Web->init(
-               "title"=>'Project List',
-               );
-My::Web->heading();
-
-my $CGI=CGI->new();
-
-print <<'HERE';
-<h1>Project List of <a href="mailto:web-www.jankratochvil.net@jankratochvil.net">Jan Kratochvil</a></h1>
-
-<form action="list.cgi.pl" method="get"><p>
-<select name="description_opt" onchange="this.form.submit();">
-HERE
-print '<option value="0"'.(!$CGI->param("description_opt") ? ' selected="selected"' : '').'>only list</option>'."\n";
-print '<option value="1"'.( $CGI->param("description_opt") ? ' selected="selected"' : '').'>incl. descriptions</option>'."\n";
-print <<'HERE';
-</select>
-<input type="submit" value="Update" />
-</p></form>
-HERE
-
-my %dirs;
-for my $ENTRIES (ENTRIES,ENTRIES_LOG) {
-       local *E;
-       next if !open E,$ENTRIES;
-       while (<E>) {
-               chomp;
-               do { $dirs{$1}=1; next; } if m#^(?:A )?D/([^/]*)/#;
-               next if m#^/([^/]*)/# ;
-               next if /^D$/;
-               warn "File $ENTRIES contains invalid line \"$_\": $!";
-               }
-       close E;
-       }
-
-my %item;
-for my $dir (keys(%dirs)) {
-       require "$dir/ListItem.pm";
-       my $item=eval('\%My::Project::'.$dir.'::ListItem');
-       do { warn "Broken $dir/List.pm"; next; } if !defined %$item;
-       $item{$dir}=$item;
-       }
-
-# $col{"name"}{"show"}=1
-# $col{"name"}{"format"}=sub { "<".$_[0].">"; }
-# $col{"name"}{""}="Project name";
-# @col_order
-
-my @row_order=qw(-priority);
-my @col_order=qw(name summary license maintenance language);
-my %col;
-
-sub format_url ($) { return (!$_[0] ? "" : '<a href="'.$_[0].'">X</a>'); }
-
-$col{"name"}{"format"}=sub {
-               $_[0]=~s#<a\s[^>]*>([^<]*)</a>#$1#g;
-               return "<a href=\"".$_[1]."/\">".$_[0]."</a>";
-               };
-
-$col{"license"}{"format"}=sub {
-               my %known=(
-                               "PD"=>"<a href=\"http://www.gnu.org/philosophy/categories.html#PublicDomainSoftware\">PD</a>",
-                               "GPL"=>"<a href=\"http://www.gnu.org/licenses/gpl.html\">GPL</a>",
-                               "LGPL"=>"<a href=\"http://www.gnu.org/licenses/lgpl.html\">LGPL</a>",
-                               );
-               return $known{$_[0]} if $known{$_[0]};
-               return $_[0];
-               };
-
-$col{"online-demo"}{"format"}=\&format_url;
-$col{"download"}{"format"}=\&format_url;
-$col{"name"}{""}="Project Name";
-$col{"summary"}{""}="Abstract";
-$col{"license"}{""}="Copying";
-$col{"maintenance"}{""}="State";
-$col{"language"}{""}="Language";
-
-# Fill in cols not contained in @col_order
-if (0) {
-       my %col_order=map(($_=>1),@col_order);
-       push @col_order,map({ ($col_order{$_} ? () : $_); } keys(%{{ map(($_=>1),map((keys(%{$item{$_}})),keys(%item)))}}));
-       }
-
-print '<table border="1">'."\n";
-       print '<tr>';
-               for my $col (@col_order) {
-                       next if defined $col{$col}{"show"} && !$col{$col}{"show"};
-                       print '<th>'.($col{$col}{""} || "[$col]").'</th>';
-                       }
-       print '</tr>'."\n";
-       my @rows_ordered=sort {
-                       for my $order_by (@row_order,"name") {
-                               my $order_by=$order_by;
-                               my $minus=($order_by=~s/^(-)//)[0];
-                               my $r=($item{$a}{$order_by} cmp $item{$b}{$order_by});
-                               $r=-$r if $minus;
-                               return $r if $r;
-                               }
-                       return 0;
-                       } keys(%item);
-       for my $row (@rows_ordered) {
-               print '<tr>';
-               for my $col (@col_order) {
-                       next if defined $col{$col}{"show"} && !$col{$col}{"show"};
-                       print '<td>';
-                       if (!$col{$col}{"format"}) {
-                               print(($item{$row}{$col} || ""));
-                               }
-                       else {
-                               print(&{$col{$col}{"format"}}($item{$row}{$col},$row));
-                               }
-                       print '</td>';
-                       }
-               print '</tr>'."\n";
-               if ($CGI->param("description_opt")) {
-                       print '<tr><td style="border: none;"></td>';
-                       print '<td colspan="'.(scalar(@col_order)-1).'"><blockquote>'.$item{$row}{"description"}.'</blockquote></td>';
-                       print '</tr>'."\n";
-                       print '<tr><td style="border: none;" colspan="'.scalar(@col_order).'">&nbsp;</td></tr>'."\n";
-                       }
-               }
-print '</table>'."\n";
-
-My::Web->footer();
diff --git a/project/lynxilla/Index.html.pl b/project/lynxilla/Index.html.pl
new file mode 100755 (executable)
index 0000000..2d971c9
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::lynxilla'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::lynxilla::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::lynxilla::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::lynxilla::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/lynxilla/ListItem.pm b/project/lynxilla/ListItem.pm
new file mode 100755 (executable)
index 0000000..cbdc9f4
--- /dev/null
@@ -0,0 +1,54 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::lynxilla' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::lynxilla::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"lynxilla",
+               "platform"=>"web",
+               "trivia"=>1,
+               "priority"=>460,
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/.userContent.css?rev=HEAD",
+               "summary"=>a_href('http://lynx.isc.org/','Lynx').' look&feel with '
+                               .a_href('http://www.mozilla.org/','Mozilla').' web compatibility',
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"CSS",
+               "description"=><<"HERE",
+<p>@{[ a_href 'http://lynx.isc.org/','Lynx' ]} brings unified colors and fonts of all web pages.
+Unfortunately it is not the one of those two browsers respected by broken websites.
+To get back the unified look and feel of all the web pages while retaining the web compatibility
+you can override CSS settings of your @{[ a_href 'http://www.mozilla.org/','Mozilla' ]} by placing
+@{[ a_href 'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/.userContent.css?rev=HEAD",
+               'userContent.css' ]}
+as your local file: @{[ '$HOME/.mozilla/$USER/*/chrome/userContent.css' ]}</p>
+HERE
+               );
+
+1;
diff --git a/project/lynxilla/Makefile.am b/project/lynxilla/Makefile.am
new file mode 100644 (file)
index 0000000..bc638eb
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/lynxilla/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/mdsms/Index.html.pl b/project/mdsms/Index.html.pl
new file mode 100755 (executable)
index 0000000..1a71f44
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::mdsms'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::mdsms::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::mdsms::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::mdsms::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>This software should be general-UNIX compatible. Please wait a minute when
+you run it, under various UNIXes it may take some time to finish.</p>
+<p><b>GSM network codes: </b>GSM network code needs to be given as parameter during
+sending of operator logo. Nice list of the codes you will find
+@{[ a_href 'http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html','here' ]}.</p>
+HERE
+
+
+My::Web->footer();
index 4dc644f..b807a5a 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::mdsms;
+package project::mdsms::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Mobile Device SMS Tool",
-               "priority"=>8,
-               "download-sources .tar.gz"=>"mdsms-1.5.2.tar.gz",
-               "download-sources .tar.Z"=>"mdsms-1.5.2.tar.Z",
-               "download-i386 RPM package"=>"mdsms-1.5.2-0.i386.rpm",
-               "download-sources RPM package"=>"mdsms-1.5.2-0.src.rpm",
+
+our @ListItem=(
+               "name"=>"mdsms",
+               "platform"=>"unixuser",
+               "priority"=>600,
+               "icon"=>"siemens_m20t-icon.jpeg",
+               "download-i386 RPM package"=>"dist/mdsms-1.5.3-0.i386.rpm",
+               "download-sources RPM package"=>"dist/mdsms-1.5.3-0.src.rpm",
+               "download-sources .tar.gz"=>"dist/mdsms-1.5.3.tar.gz",
+               "download-sources .tar.Z"=>"dist/mdsms-1.5.3.tar.Z",
                "download-logos from KESSLER Wireless Design"=>"http://www.kessler-design.com/wireless/samples.php3",
-               "link-View CVS"=>"http://cvs.jankratochvil.net/viewcvs/mdsms/",
-               "summary"=>"Mobile communication",
+               "cvs"=>"mdsms",
+               "link-".a_href('http://freshmeat.net/','Freshmeat')=>
+                               a_href('http://freshmeat.net/projects/mdsms/','Mobile Device SMS tool'),
+               "summary"=>"Mobile Device SMS Tool",
                "license"=>"GPL",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
+               "sponsorship"=>join(", ",
+                               a_href('http://www.tencom.cz/','TENcom Trade')
+                                               .'/'.a_href('http://www.sme.cz/default.asp?lng=en&ver=html','SME'),
+                               a_href('http://www.readynote.com/','ReadyNote'),
+                               a_href('http://www.atspraha.cz/','Advanced Telecom Services')),
                "language"=>"C",
-               "description"=>""
-                               .'<p>Sends NOL or NGG files as operator logo or group graphics through'
-                               .' <a href="http://www.nokia.com/">Nokia</a> <a href="http://www.communicator.org/">Communicator</a>'
-                               .' <b>9110</b> (9000/9000i is definitively <b>not</b> compatible). Usually you need'
-                               .' to have either infra-red port in your computer or special FBUS cable to be able'
-                               .' to use conventional logo-uploading tools (<a href="http://www.gnokii.org/">GNokii</a>'
-                               .' or one from <a href="http://www.kessler-design.com/wireless/operatorlogo.php3">KESSLER'
-                               .' Wireless Design</a>). This program uses only standard modem cable and integrated'
-                               .' FaxModem capability of 9110.</p>'
-                               .' <p>This software should be general-UNIX compatible. Please wait a minute when'
-                               .' you run it, under various UNIXes it may take some time to finish.</p>'
-                               .' <p><b>GSM network codes: </b>GSM network code needs to be given as parameter during'
-                               .' sending of operator logo. Nice list of the codes you will find'
-                               .' <a href="http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html">here</a>.</p>'
+               "description"=><<"HERE",
+<p>Program sends NOL or NGG files as Nokia operator logo or group graphics through
+@{[ a_href 'http://www.nokia.com/','Nokia' ]} @{[ a_href 'http://www.communicator.org/','Communicator' ]}
+9110 (@{[ a_href 'http://www.nokia.com/phones/9000i','9000/9000i' ]}
+is not compatible). Usually you need
+to have either infra-red port in your computer or special FBUS cable to be able
+to use conventional logo-uploading tools (such as @{[ a_href 'http://www.gnokii.org/','gnokii' ]}).
+This program uses only standard modem cable and the integrated
+FaxModem capability of 9110.</p>
+HERE
                );
 
 1;
index 3cc6842..8eb2d05 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/mdsms/dist/mdsms-1.5.3-0.i386.rpm b/project/mdsms/dist/mdsms-1.5.3-0.i386.rpm
new file mode 100644 (file)
index 0000000..9373dd2
Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3-0.i386.rpm differ
diff --git a/project/mdsms/dist/mdsms-1.5.3-0.src.rpm b/project/mdsms/dist/mdsms-1.5.3-0.src.rpm
new file mode 100644 (file)
index 0000000..917d324
Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3-0.src.rpm differ
diff --git a/project/mdsms/dist/mdsms-1.5.3.tar.Z b/project/mdsms/dist/mdsms-1.5.3.tar.Z
new file mode 100644 (file)
index 0000000..804e262
Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3.tar.Z differ
diff --git a/project/mdsms/dist/mdsms-1.5.3.tar.gz b/project/mdsms/dist/mdsms-1.5.3.tar.gz
new file mode 100644 (file)
index 0000000..85bc518
Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3.tar.gz differ
diff --git a/project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm b/project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm
new file mode 100644 (file)
index 0000000..7906bf8
Binary files /dev/null and b/project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm differ
diff --git a/project/mdsms/mdsms-1.5.2-0.i386.rpm b/project/mdsms/mdsms-1.5.2-0.i386.rpm
deleted file mode 100644 (file)
index 4a5c0d6..0000000
Binary files a/project/mdsms/mdsms-1.5.2-0.i386.rpm and /dev/null differ
diff --git a/project/mdsms/mdsms-1.5.2-0.src.rpm b/project/mdsms/mdsms-1.5.2-0.src.rpm
deleted file mode 100644 (file)
index 2a62771..0000000
Binary files a/project/mdsms/mdsms-1.5.2-0.src.rpm and /dev/null differ
diff --git a/project/mdsms/mdsms-1.5.2.tar.Z b/project/mdsms/mdsms-1.5.2.tar.Z
deleted file mode 100644 (file)
index 1974583..0000000
Binary files a/project/mdsms/mdsms-1.5.2.tar.Z and /dev/null differ
diff --git a/project/mdsms/mdsms-1.5.2.tar.gz b/project/mdsms/mdsms-1.5.2.tar.gz
deleted file mode 100644 (file)
index a541e7d..0000000
Binary files a/project/mdsms/mdsms-1.5.2.tar.gz and /dev/null differ
diff --git a/project/mdsms/siemens_m20t-icon.jpeg b/project/mdsms/siemens_m20t-icon.jpeg
new file mode 100644 (file)
index 0000000..8440ac5
Binary files /dev/null and b/project/mdsms/siemens_m20t-icon.jpeg differ
diff --git a/project/middleman/Index.html.pl b/project/middleman/Index.html.pl
new file mode 100755 (executable)
index 0000000..e73a31a
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::middleman'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::middleman::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::middleman::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::middleman::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/middleman/ListItem.pm b/project/middleman/ListItem.pm
new file mode 100755 (executable)
index 0000000..3504565
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::middleman' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::middleman::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://middle-man.sourceforge.net/','Middleman').' port',
+               "platform"=>"unixuser",
+               "priority"=>60,
+               "cvs"=>"middleman:lace",
+               "summary"=>'HTTP proxy ported to '
+                               .a_href('http://www.freebsd.org/','FreeBSD'),
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "sponsorship"=>a_href('http://www.jklabs.cz/','JKLabs'),
+               "language"=>"C patch",
+               "description"=><<"HERE",
+HTTP proxy server @{[ a_href 'http://middle-man.sourceforge.net/','Middleman' ]}
+capable of returned data mangling has been ported to
+@{[ a_href 'http://www.freebsd.org/','FreeBSD' ]}.
+HERE
+               );
+
+1;
diff --git a/project/middleman/Makefile.am b/project/middleman/Makefile.am
new file mode 100644 (file)
index 0000000..152d864
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/middleman/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
similarity index 68%
rename from project/mod_auth_tacacs/index.html.pl
rename to project/mod_auth_tacacs/Index.html.pl
index 9490658..1f1b1b3 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::mod_auth_tacacs::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::mod_auth_tacacs::ListItem;
+Wuse 'My::Project';
+Wuse 'project::mod_auth_tacacs::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::mod_auth_tacacs::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::mod_auth_tacacs::ListItem::ListItem,
                );
 
 My::Web->footer();
index 997be01..e9a2b94 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::mod_auth_tacacs;
+package project::mod_auth_tacacs::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"<a href=\"http://sourceforge.net/projects/mod-auth-tacacs/\">mod_auth_tacacs</a> TACACS+ test client",
-               "priority"=>2,
+
+our @ListItem=(
+               "name"=>a_href('http://sourceforge.net/projects/mod-auth-tacacs/','mod_auth_tacacs').' client',
+               "platform"=>"patch",
+               "priority"=>260,
+               "icon"=>"cisco-icon.jpeg",
                "download"=>"mod_auth_tacacs-2.0.2-gts1-checkout.diff.gz",
                "link-mod_auth_tacacs homepage"=>"http://sourceforge.net/projects/mod-auth-tacacs/",
-               "summary"=>"Network server security",
+               "summary"=>a_href('http://www.cisco.com/warp/public/614/7.html','Cisco TACACS+')
+                               .' testing/debugging client for '
+                               .a_href('http://sourceforge.net/projects/mod-auth-tacacs/','mod_auth_tacacs'),
                "license"=>"PD",
                "maintenance"=>"accepted",
                "language"=>"C patch",
-               "description"=>""
-                               .'Patch implements: command-line client, <code>dropped Makefile.in</code>'
-                               .' in favor of <code>Makefile.am</code>, <code>--with-apache</code> works now'
-                               .' (whole <code>configure.in</code> rewritten)'
+               "description"=><<"HERE",
+Patch implements: command-line client, <code>dropped Makefile.in</code>
+in favor of <code>Makefile.am</code>, <code>--with-apache</code> works now
+(whole <code>configure.in</code> rewritten)
+HERE
                );
 
 1;
index b564973..a08b8cf 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/mod_auth_tacacs/cisco-icon.jpeg b/project/mod_auth_tacacs/cisco-icon.jpeg
new file mode 100644 (file)
index 0000000..7c68e75
Binary files /dev/null and b/project/mod_auth_tacacs/cisco-icon.jpeg differ
similarity index 58%
rename from project/mot2as/index.html.pl
rename to project/mot2as/Index.html.pl
index 7352004..94dff41 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::mot2as::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::mot2as::ListItem;
+Wuse 'My::Project';
+Wuse 'project::mot2as::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::mot2as::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::mot2as::ListItem::ListItem,
                );
 
+
+print <<"HERE";
+<p>Specifically it will care about: <code>equ</code> operation, <code>dc.b</code> strings,
+<code>;</code> comments, <code>@{[ '$' ]}</code> for hex-radix, <code>%</code> for bin-radix,
+local labels, <code>:</code> for label termination.</p>
+HERE
+
+
 My::Web->footer();
index 30afeeb..917aba0 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::mot2as;
+package project::mot2as::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Motorola to AT&amp;T/GNU Assembler Syntax Converter",
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"mot2as",
+               "platform"=>"unixdevel",
+               "priority"=>50,
                "download"=>"mot2as.c",
-               "summary"=>"Asm syntax converter",
+               "summary"=>'Convert Motorola to AT&amp;T/GNU assembler syntax',
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "sponsorship"=>"<a href=\"http://www.princip.cz/\">Princip, a.s.</a>",
-               "description"=>""
-                               .'<p>Do you need to compile under UNIX assembly sources for Motorola 68k family'
-                               .' of processors? You have probably already found out that original Motorola'
-                               .' syntax is not suitable for GNU assembler which uses a bit different (AT&amp;T'
-                               .' style) syntax. Using this very simple program you can convert between these two.</p>'
-                               .' <p>Specifically it will care about: <code>equ</code> operation, <code>dc.b</code> strings,'
-                               .' <code>;</code> comments, <code>$</code> for hex-radix, <code>%</code> for bin-radix,'
-                               .' local labels, <code>:</code> for label termination.</p>'
+               "sponsorship"=>a_href('http://www.princip.cz/','Princip, a.s.'),
+               "description"=><<"HERE",
+<p>Do you need to compile under UNIX assembly sources for Motorola 68k family
+of processors? You have probably already found out that original Motorola
+syntax is not suitable for GNU assembler which uses a bit different (AT&amp;T
+style) syntax. Using this very simple program you can convert between these two.</p>
+HERE
                );
 
 1;
index 63e2d77..3ee15d4 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/muttsort/Index.html.pl b/project/muttsort/Index.html.pl
new file mode 100755 (executable)
index 0000000..13e0596
--- /dev/null
@@ -0,0 +1,45 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::muttsort'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::muttsort::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::muttsort::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::muttsort::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Patch got integrated to <b>thread.c</b> revision <b>2.16</b>.</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/muttsort/ListItem.pm b/project/muttsort/ListItem.pm
new file mode 100755 (executable)
index 0000000..81218d5
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::muttsort' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::muttsort::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.mutt.org/','Mutt').' speedup',
+               "platform"=>"patch",
+               "priority"=>430,
+               "icon"=>"mutt_button",
+               "summary"=>'Mailbox reading phase acceleration',
+               "download-patch"=>'mutt-sort.diff',
+               "license"=>"GPL",
+               "maintenance"=>"accepted",
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>Mutt is pretty slow when opening a mailbox. Phase "Reading..." is hard to
+speedup but "Sorting mailbox..." was rewritten from <i>(n^2)</i> complexity
+to <i>(n*log(n))</i>.
+HERE
+               );
+
+1;
diff --git a/project/muttsort/Makefile.am b/project/muttsort/Makefile.am
new file mode 100644 (file)
index 0000000..7d61eaf
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/muttsort/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/muttsort/mutt-sort.diff b/project/muttsort/mutt-sort.diff
new file mode 100644 (file)
index 0000000..51bb02e
--- /dev/null
@@ -0,0 +1,109 @@
+Index: thread.c
+===================================================================
+RCS file: /home/roessler/cvs/mutt/thread.c,v
+retrieving revision 2.15
+diff -I! -ICVS -u -r2.15 thread.c
+--- thread.c   2001/04/25 22:08:41     2.15
++++ thread.c   2001/07/26 02:18:11
+@@ -535,23 +535,48 @@
+ HEADER *mutt_sort_subthreads (HEADER *hdr, sort_t *func)
+ {
+-  HEADER *top = NULL;
+-  HEADER *t;
++  static HEADER **array = NULL;
++  static unsigned array_size = 0, array_alloc = 0;
++  unsigned array_alloc_base;
++  unsigned items, item;
+   
+-  while (hdr)
++  if (!func || !hdr)
++    return hdr;
++
++  array_alloc_base = array_alloc;
++  for (item = array_alloc_base; hdr; hdr = hdr->next)
+   {
+-    t = hdr;
+-    hdr = hdr->next;
+-    insert_message (&top, t, func);
+-    if (t->child)
+-      t->child = mutt_sort_subthreads (t->child, func);
++    if (item >= array_size)
++    {
++      array_size = 2 * MAX(array_size, 0x100);
++      safe_realloc ((void **) &array, array_size * sizeof (*array));
++    }
++    array[item++] = hdr;
++    if (hdr->child)
++    {
++      array_alloc = item;
++      hdr->child = mutt_sort_subthreads (hdr->child, func);
++    }
+   }
+-  return top;
++  array_alloc = array_alloc_base;
++
++  items = item - array_alloc_base;
++  qsort ((void *) (array + array_alloc_base), items, sizeof (*array), func);
++
++  array[array_alloc_base          ]->prev = NULL;
++  array[array_alloc_base + items-1]->next = NULL;
++
++  for (item = array_alloc_base; item < array_alloc_base + items-1; item++)
++  {
++    array[item  ]->next = array[item+1];
++    array[item+1]->prev = array[item  ];
++  }
++
++  return array[array_alloc_base];
+ }
+ void mutt_sort_threads (CONTEXT *ctx, int init)
+ {
+-  sort_t *usefunc = NULL;
+   HEADER *tmp, *CUR;
+   int i, oldsort;
+   
+@@ -562,10 +587,6 @@
+   oldsort = Sort;
+   Sort = SortAux;
+   
+-  /* if the SORT_LAST bit is set, we save sorting for later */
+-  if (!(Sort & SORT_LAST))
+-    usefunc = mutt_get_sort_func (Sort);
+-
+   for (i = 0; i < ctx->msgcount; i++)
+   {
+     CUR = ctx->hdrs[i];
+@@ -580,7 +601,7 @@
+       CUR->subject_changed = 1;
+       unlink_message (&CUR->parent->child, CUR);
+       CUR->parent = NULL;
+-      insert_message (&ctx->tree, CUR, usefunc);
++      insert_message (&ctx->tree, CUR, NULL);
+     }
+     else if (!CUR->threaded)
+     {
+@@ -603,15 +624,19 @@
+        * parent) during the initial threading.
+        */
+       if (CUR->env->message_id)
+-        move_descendants (tmp ? &tmp->child : &ctx->tree, CUR, usefunc);
++        move_descendants (tmp ? &tmp->child : &ctx->tree, CUR, NULL);
+       }
+-      insert_message (tmp ? &tmp->child : &ctx->tree, CUR, usefunc);
++      insert_message (tmp ? &tmp->child : &ctx->tree, CUR, NULL);
+       CUR->threaded = 1;
+     }
+   }
+   if (!option (OPTSTRICTTHREADS))
+-    pseudo_threads (ctx, usefunc);
++    pseudo_threads (ctx, NULL);
++
++  /* if the SORT_LAST bit is not set, sort the whole tree now */
++  if (!(Sort & SORT_LAST))
++    ctx->tree = mutt_sort_subthreads (ctx->tree, mutt_get_sort_func (Sort));
+   /* now that the whole tree is put together, we can sort by last-* */
+   if (Sort & SORT_LAST)
diff --git a/project/muttsort/mutt_button.png b/project/muttsort/mutt_button.png
new file mode 100644 (file)
index 0000000..aa1f6fe
Binary files /dev/null and b/project/muttsort/mutt_button.png differ
similarity index 80%
rename from project/netstat/index.html.pl
rename to project/netstat/Index.html.pl
index 4132351..3296463 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::netstat::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::netstat::ListItem;
+Wuse 'My::Project';
+Wuse 'project::netstat::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::netstat::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::netstat::ListItem::ListItem,
                );
 
 print <<'HERE';
index 37ff856..24b94a7 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::netstat;
+package project::netstat::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Program name display for <a href=\"http://www.inka.de/sites/lina/linux/NetTools/\">net-tools-1.50</a>/netstat",
-               "priority"=>3,
+
+our @ListItem=(
+               "name"=>"netstat -p",
+               "platform"=>"patch",
+               "priority"=>400,
                "download"=>"net-tools-1.50-progname.diff.gz",
-               "summary"=>"Network tool enhancement",
+               "summary"=>"Program name display for ".a_href('http://www.inka.de/sites/lina/linux/NetTools/','net-tools-1.50').'/netstat',
                "license"=>"PD",
                "maintenance"=>"accepted",
                "language"=>"C patch",
-               "description"=>""
-                               .'<p>After answering several questions on the mailing lists and several from'
-                               .' my friends personally, I decided that there is missing some tool for GNU/Linux'
-                               .' which would display PID (or simply the process) of the owner of some socket,'
-                               .' either listening or communicating.</p>'
+               "description"=><<"HERE",
+<p>After answering several questions on the mailing lists and several from
+my friends personally, I decided that there is missing some tool for GNU/Linux
+which would display PID (or simply the process) of the owner of some socket,
+either listening or communicating.</p>
+HERE
                );
 
 1;
index 4f2da6e..6ca5708 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/oslik/index.html.pl
rename to project/oslik/Index.html.pl
index 7630b06..8c8c379 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::oslik::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::oslik::ListItem;
+Wuse 'My::Project';
+Wuse 'project::oslik::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::oslik::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::oslik::ListItem::ListItem,
                );
 
 print <<"HERE";
index deff81b..3f18c9c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::oslik;
+package project::oslik::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Logical Puzzle in Prolog",
-               "priority"=>5,
+
+our @ListItem=(
+               "name"=>"oslik",
+               "platform"=>"unixdevel",
+               "trivia"=>1,
+               "priority"=>70,
                "download"=>"oslik/oslik.zip",
-               "summary"=>"Prolog example",
+               "summary"=>"Prolog example solving logical puzzle Oslik",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"Prolog",
-               "description"=>""
-                               .'<p>This is no game, just solution of one specific mathematical problem'
-                               .' consisting of simple state search. Software is written equivalentnly'
-                               .' both in <strong>C</strong> and <strong>Prolog</strong> for comparation.</p>'
+               "description"=><<"HERE",
+<p>Solution calculator of a logical game / mathematical problem
+consisting of simple state search. Software is written equivalentnly
+both in <strong>C</strong> and <strong>Prolog</strong> for comparation.</p>
+HERE
                );
 
 1;
index c99d2ce..997d8eb 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 69%
rename from project/patchd2/index.html.pl
rename to project/patchd2/Index.html.pl
index fee364b..3890e7f 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::patchd2::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::patchd2::ListItem;
+Wuse 'My::Project';
+Wuse 'project::patchd2::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::patchd2::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::patchd2::ListItem::ListItem,
                );
 
 My::Web->footer();
index d492d2e..6d2dad1 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::patchd2;
+package project::patchd2::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Patch <a href=\"http://www.descent2.com/\">Descent 2</a> to Avoid CD-ROM",
-               "priority"=>2,
+
+our @ListItem=(
+               "name"=>a_href('http://www.descent2.com/','Descent 2').' no-CD',
+               "platform"=>"dos",
+               "priority"=>160,
+               "icon"=>"d2-icon.jpeg",
                "download"=>"patchd2.zip",
-               "summary"=>"Patch for no-CD",
+               "summary"=>a_href('http://www.descent2.com/','Descent 2').' patch to avoid CD-ROM requirement',
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"i386 asm patch",
-               "description"=>""
-                               .'<p>Use this <a href="http://www.calderathin.com/products/drdos/">DOS</a>'
-                               .' program to patch/unpatch Descent 2 to not require CD-ROM to'
-                               .' run. I need this as I have no CD-ROM installed in my computer. The exact'
-                               .' bytes sequences needed was investigated by some-else hacker.</p>'
+               "description"=><<"HERE",
+<p>Use this @{[ a_href 'http://www.calderathin.com/products/drdos/','DOS' ]}
+program to patch/unpatch Descent 2 to not require CD-ROM to run.</p>
+HERE
                );
 
 1;
index 15690b7..5d19d4c 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/patchd2/d2-icon.jpeg b/project/patchd2/d2-icon.jpeg
new file mode 100644 (file)
index 0000000..d891379
Binary files /dev/null and b/project/patchd2/d2-icon.jpeg differ
diff --git a/project/pgsqlsubstr/Index.html.pl b/project/pgsqlsubstr/Index.html.pl
new file mode 100755 (executable)
index 0000000..81f807f
--- /dev/null
@@ -0,0 +1,46 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::pgsqlsubstr'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::pgsqlsubstr::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::pgsqlsubstr::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::pgsqlsubstr::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Although the patch is noted by Thomas G. Lockhart he is referring in me in
+that text, believe me. :-)</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/pgsqlsubstr/ListItem.pm b/project/pgsqlsubstr/ListItem.pm
new file mode 100755 (executable)
index 0000000..dff23d9
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::pgsqlsubstr' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::pgsqlsubstr::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.postgresql.org/','PostgreSQL').'-6.3 fix',
+               "platform"=>"patch",
+               "priority"=>290,
+               "icon"=>"postgresql",
+               "summary"=>'Fixed substr() and substring() SQL functions',
+               "download-patch"=>'http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/backend/utils/adt/varlena.c.diff?r1=1.31&r2=1.32&f=u',
+               "link-ChangeLog entry"=>'http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/backend/utils/adt/varlena.c#rev1.32',
+               "license"=>"PD",
+               "maintenance"=>"accepted",
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>Fix off-by-one in the embedded substr() and substring() functions of
+PostgreSQL engine.</p>
+HERE
+               );
+
+1;
diff --git a/project/pgsqlsubstr/Makefile.am b/project/pgsqlsubstr/Makefile.am
new file mode 100644 (file)
index 0000000..76e087c
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/pgsqlsubstr/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/pgsqlsubstr/postgresql.png b/project/pgsqlsubstr/postgresql.png
new file mode 100644 (file)
index 0000000..c70a41c
Binary files /dev/null and b/project/pgsqlsubstr/postgresql.png differ
diff --git a/project/phphash/Index.html.pl b/project/phphash/Index.html.pl
new file mode 100755 (executable)
index 0000000..3d28ad7
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::phphash'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::phphash::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::phphash::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::phphash::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/phphash/ListItem.pm b/project/phphash/ListItem.pm
new file mode 100755 (executable)
index 0000000..58b5543
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::phphash' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::phphash::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>a_href('http://www.php.net/','PHP').'-3.0b6 fix',
+               "platform"=>"patch",
+               "priority"=>300,
+               "icon"=>"php",
+               "summary"=>'Avoid excessive use of memory for hashes',
+               "download-patch"=>'http://cvs.php.net/diff.php/php3/Attic/hash.c?r1=1.76&r2=1.77&ty=u',
+               "license"=>"PD",
+               "maintenance"=>"accepted",
+               "language"=>"C patch",
+               "description"=><<"HERE",
+<p>Fixed a tiny bug in the hash initialization which caused excessive use of
+memory. Fixed hash items deletion emulation by copying the hash except the item
+being deleted.</p>
+HERE
+               );
+
+1;
diff --git a/project/phphash/Makefile.am b/project/phphash/Makefile.am
new file mode 100644 (file)
index 0000000..57e201b
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/phphash/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
diff --git a/project/phphash/php.gif b/project/phphash/php.gif
new file mode 100644 (file)
index 0000000..c187fb9
Binary files /dev/null and b/project/phphash/php.gif differ
diff --git a/project/phphash/php.png b/project/phphash/php.png
new file mode 100644 (file)
index 0000000..a049095
Binary files /dev/null and b/project/phphash/php.png differ
similarity index 56%
rename from project/pipebuf/index.html.pl
rename to project/pipebuf/Index.html.pl
index c06b103..e3850af 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::pipebuf::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::pipebuf::ListItem;
+Wuse 'My::Project';
+Wuse 'project::pipebuf::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::pipebuf::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::pipebuf::ListItem::ListItem,
                );
 
+
+print <<"HERE";
+<p>Progarm is implemented as two processes (no threads - no pthread libraries
+needed, only IPC communication used). Features custom buffer sizes, prefill
+(start writing of the first byte only after the WHOLE buffer has beel filled
+up) and warning messages when buffer is getting emptied.</p>
+HERE
+
+
 My::Web->footer();
index c6f2746..1b12092 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::pipebuf;
+package project::pipebuf::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"PipeBuf - Data Buffering Tool",
-               "priority"=>8,
+
+our @ListItem=(
+               "name"=>"pipebuf",
+               "platform"=>"unixuser",
+               "priority"=>440,
                "download"=>"pipebuf.c",
-               "summary"=>"Pipe buffer",
+               "summary"=>"UNIX pipe realtime buffering",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "description"=>""
-                               .'<p>You can do a buffering of realtime data such as audio stream by inserting this program'
-                               .' with traditional &quot;UNIX filter&quot; behaviour. It reads as fast as possible into'
-                               .' its cache and also in the same time writes as fast as possible to the output. In fact'
-                               .' it is implemented as two processes (no threads - no pthread libraries needed, only IPC'
-                               .' communication used). Features custom buffer sizes, prefill (start writing of the first byte'
-                               .' only after the WHOLE buffer has beel filled up) and warning messages when buffer is getting'
-                               .' emptied.</p>'
+               "description"=><<"HERE",
+<p>You can buffer realtime data such as audio stream by inserting this program
+with traditional &quot;UNIX filter&quot; behaviour. It reads as fast as possible into
+its cache and also in the same time writes as fast as possible to the output.</p>
+HERE
                );
 
 1;
index 1f51bd9..8646788 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/postget/Index.html.pl b/project/postget/Index.html.pl
new file mode 100755 (executable)
index 0000000..f97a35e
--- /dev/null
@@ -0,0 +1,72 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::postget'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::postget::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::postget::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::postget::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+
+<ul>
+       <li>
+               <p>Store the
+                               @{[ a_href $W->{"project_viewcvs"}."*checkout*/nethome/WWW/cgi-bin/postget.php?rev=HEAD",'downloaded file' ]}
+               as <b>/home/lace/WWW/cgi-bin/postget.php</b>.</p>
+       </li>
+       <li>
+               <p>Edit path to your <b>priv</b> directory in the stored
+               <b>@{[ a_href $W->{"project_viewcvs"}."*checkout*/nethome/WWW/cgi-bin/postget.php?rev=HEAD",'postget.php' ]}</b>.
+       </li>
+       <li>
+               <p>Bookmark the following @{[ a_href 'http://freshmeat.net/','Freshmeat' ]} URL:
+                               @{[ CGI::escapeHTML(q{http://localhost/~lace/cgi-bin/postget.php?_postget=http%3A%2F%2Ffreshmeat.net%2Flogin%2F&url=%2F&username=YOUR_USERNAME&password=_priv_postget.freshmeat.net.pwd&persistent=1}) ]}
+               </p>
+               <p>(Replace <b>YOUR_USERNAME</b> with your @{[ a_href 'http://freshmeat.net/','Freshmeat' ]}
+               account name.</p>
+       </li>
+       <li>
+               <p>Store your @{[ a_href 'http://freshmeat.net/','Freshmeat' ]} account password
+               to: <b>~/priv/postget.freshmeat.net.pwd</b></p>
+               <p>Protect it by '<i>chgrp nobody postget.freshmeat.net.pwd</i>' and
+               '<i>chmod 640 postget.freshmeat.net.pwd</i>' (it is not secure as long as
+               someone else can supply pages served by the same
+               @{[ a_href 'http://httpd.apache.org/','Apache webserver' ]}.</p>
+       </li>
+</ul>
+
+HERE
+
+
+My::Web->footer();
diff --git a/project/postget/ListItem.pm b/project/postget/ListItem.pm
new file mode 100755 (executable)
index 0000000..ff499b8
--- /dev/null
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::postget' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::postget::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"postget",
+               "platform"=>"web",
+               "trivia"=>1,
+               "priority"=>380,
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/WWW/cgi-bin/postget.php?rev=HEAD",
+               "summary"=>"Bookmark ".a_href('http://www.w3.org/TR/html4/interact/forms.html#h-17.13.1','POST')
+                               .' forms, hide passwords',
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"PHP",
+               "description"=><<"HERE",
+<p>You cannot bookmark pre-filled forms to your browser bookmarks. Although
+browsers support storing of form data you still have to load the form page and
+click its submit button. This script will allow you to:</p>
+<ul>
+       <li>Store all @{[ a_href 'http://www.w3.org/TR/html4/interact/forms.html#h-17.13.1','POST' ]}ed
+                       form data as @{[ a_href 'http://www.w3.org/TR/html4/interact/forms.html#h-17.13.1','GET' ]} data
+                       (after '<b>?</b>' URL delimiter).</li>
+       <li>Replace all sensitive passwords by indirect references to your <b>priv</b> directory
+                       to allow you to make your bookmark file itself public.</li>
+</ul>
+HERE
+               );
+
+1;
diff --git a/project/postget/Makefile.am b/project/postget/Makefile.am
new file mode 100644 (file)
index 0000000..58d0cb5
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/postget/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
similarity index 69%
rename from project/ppp9k/index.html.pl
rename to project/ppp9k/Index.html.pl
index aaa0ba7..e056c4b 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::ppp9k::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::ppp9k::ListItem;
+Wuse 'My::Project';
+Wuse 'project::ppp9k::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::ppp9k::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ppp9k::ListItem::ListItem,
                );
 
 My::Web->footer();
index 0c1a9e5..c5ff3f8 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::ppp9k;
+package project::ppp9k::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Nokia Communicator Leased Line",
-               "priority"=>6,
-               "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/ppp9k?rev=HEAD",
-               "summary"=>"Communication script",
+
+our @ListItem=(
+               "name"=>"ppp9k",
+               "platform"=>"unixuser",
+               "priority"=>410,
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/ppp9k?rev=HEAD",
+               "summary"=>"Connect device (Nokia Communicator) by serial PPP to your LAN",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"bash",
-               "description"=>""
-                               .'<p>Script will connect Nokia Communicator <a href="http://www.nokia.com/phones/9000i">9000i</a>'
-                               .' or <a href="http://www.nokia.com/phones/9110i">9110i</a> through'
-                               .' your local GNU/Linux PC Internet connection. You will also need'
-                               .' Nokia Communicator utility <a href="http://www.mgroeber.de/nokia.htm">Advanced PPP Settings</a>.'
+               "description"=><<"HERE",
+<p>Script will connect Nokia Communicator @{[ a_href 'http://www.nokia.com/phones/9000i','9000i' ]}
+or @{[ a_href 'http://www.nokia.com/phones/9110i','9110i' ]} through
+your local GNU/Linux PC Internet connection. You will also need
+Nokia Communicator utility @{[ a_href 'http://www.mgroeber.de/nokia.htm','Advanced PPP Settings' ]}.
+HERE
                );
 
 1;
index 6aa772b..dadec1d 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 68%
rename from project/redirector_ad/index.html.pl
rename to project/redirector_ad/Index.html.pl
index 4c72d1f..9a33401 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::redirector_ad::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::redirector_ad::ListItem;
+Wuse 'My::Project';
+Wuse 'project::redirector_ad::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::redirector_ad::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::redirector_ad::ListItem::ListItem,
                );
 
 My::Web->footer();
index a1efd03..17c9e6f 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::redirector_ad;
+package project::redirector_ad::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Banner Killer as 'squid redirector'",
-               "priority"=>7,
-               "link-CVS download"=>"http://cvs.jankratochvil.net/viewcvs/redirector-ad/redirector-ad.tar.gz?tarball=1",
-               "summary"=>"Banner killer",
+
+our @ListItem=(
+               "name"=>"redirector-ad",
+               "platform"=>"unixuser",
+               "priority"=>340,
+               "icon"=>"cnet-icon",
+               "cvs"=>"redirector-ad",
+               "summary"=>'Banner killer as '.a_href('http://www.squid-cache.org/','Squid').' redirector filter',
+               # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"}
+               "link-README"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/redirector-ad/README?rev=HEAD",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"Perl",
-               "description"=>""
-                               .'<p>Scripts that will simply discard graphical images referenced'
-                               .' from web pages.  Unlike other such packages it:</p>'
-                               .' <ul>'
-                               .' <li>Does not need separate administration of another daemon</li>'
-                               .' <li>Does not do any page contents filtering (popups will still pass through!)</li>'
-                               .' </ul>'
+               "description"=><<"HERE",
+<p>Scripts discarding specified graphical images (read 'ads') referenced
+from web pages. Unlike zillions of other such packages there
+is no need for separate administration of another daemon.</p>
+HERE
                );
 
 1;
index 20a5c35..21cfd3a 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/redirector_ad/cnet-icon.png b/project/redirector_ad/cnet-icon.png
new file mode 100644 (file)
index 0000000..8cc46aa
Binary files /dev/null and b/project/redirector_ad/cnet-icon.png differ
diff --git a/project/smbfs/Index.html.pl b/project/smbfs/Index.html.pl
new file mode 100755 (executable)
index 0000000..68ace61
--- /dev/null
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::smbfs'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::smbfs::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::smbfs::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::smbfs::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>Simple patch to increase virtual block size of SMB filesytem in Linux
+kernel. It improved tranfer rate of <code>cp</code> command almost
+by a factor of <strong>2</strong> (approx. 700KB -&gt; 1300KB or something
+like about it) in the local conditions. Now <code>cp</code> should be as fast
+as <code>cat</code> redirected across networked filesystems.</p>
+<p>Unfortunately the blocksize causes different (4 times smaller) sizes
+reported by <code>du</code> command as it measures it in <i>blocks</i>
+and not in <i>kilobytes</i> as some people think.</p>
+HERE
+
+
+My::Web->footer();
index e35dc74..d499dff 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::smbfs;
+package project::smbfs::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"SMB Kernel Filesystem Acceleration",
-               "priority"=>6,
+
+our @ListItem=(
+               "name"=>"smbfs patch",
+               "platform"=>"unixuser",
+               "trivia"=>1,
+               "priority"=>80,
                "download"=>"smbfs-2.1.132-blocksize.diff",
-               "summary"=>"SMB acceleration patch",
+               "summary"=>'Linux kernel smbfs acceleration patch',
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C patch",
-               "description"=>""
-                               .'<p>Simple patch to increase virtual block size of SMB filesytem in Linux'
-                               .' kernel. For me it improved tranfer rate of <code>cp</code> command almost'
-                               .' by a factor of <strong>2</strong> (approx. 700KB -&gt; 1300KB or something'
-                               .' like about it). Now <code>cp</code> should be as fast as <code>cat</code>'
-                               .' redirected across networked filesystems.</p>'
-                               .' <p>Unfortunately the blocksize causes different (4 times smaller) sizes'
-                               .' reported by <code>du</code> command as it measures it in <i>blocks</i>'
-                               .' and not in <i>kilobytes</i> as some people think.</p>'
-
+               "description"=><<"HERE",
+<p>Accelerate twice the copying transfer rate for client GNU/Linux from SMB
+server share (Microsoft Windows).
+HERE
                );
 
 1;
index b00fdbb..2f7332f 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/smbfs/index.html.pl b/project/smbfs/index.html.pl
deleted file mode 100755 (executable)
index 1a54ee3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/perl
-# 
-# $Id$
-# Main page of 'My::Project::smbfs'
-# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
-# 
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; exactly version 2 of June 1991 is required
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use project::smbfs::ListItem;
-
-
-My::Web->init_project(
-               "ListItem"=>\%My::Project::smbfs::ListItem,
-               );
-
-My::Web->footer();
similarity index 80%
rename from project/sshpatch/index.html.pl
rename to project/sshpatch/Index.html.pl
index f9083e5..9f75b3c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::sshpatch::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::sshpatch::ListItem;
+Wuse 'My::Project';
+Wuse 'project::sshpatch::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::sshpatch::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::sshpatch::ListItem::ListItem,
                );
 
 print <<'HERE';
index 0e516e6..f0aef26 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::sshpatch;
+package project::sshpatch::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"SSH-1 patch for <i>KeepAliveData</i> and <i>OnDemandForward</i>",
-               "priority"=>7,
+
+our @ListItem=(
+               "name"=>"SSH-1 patch",
+               "platform"=>"unixuser",
+               "priority"=>180,
                "download"=>"ssh-1.2.30-kadata+odforw.tar.gz",
                "download-SSH-1, version 1.2.30, .src.rpm"=>"ftp://ftp.fi.muni.cz/pub/ssh/local-fi.muni.cz/linux/ssh-1.2.30-1i.src.rpm",
                "download-SSH-1, version 1.2.30, .tar.gz"=>"ftp://ftp.fi.muni.cz/pub/ssh/ssh-1.2.30.tar.gz",
-               "summary"=>"SSH enhancement",
+               "summary"=>"SSH-1 <i>KeepAliveData</i> and <i>OnDemandForward</i> features",
                "license"=>"PD",
-               "maintenance"=>"update",
-               "reason"=>"<a href=\"http://www.openssh.com/\">OpenSSH</a> is now preferred but this patch is not yet migrated.",
+               "maintenance"=>"update-".a_href('http://www.openssh.com/','OpenSSH').' is preferred although this patch is not migrated.',
                "language"=>"C patch",
-               "description"=>""
-                               .'This patch will protect your mostly idle SSH connection from broken masquerading firewalls'
-                               .' and/or it will also provide _on-demand_ tunnelling.'
+               "description"=><<"HERE",
+<ul>
+       <li><i>KeepAliveData</i>: Protect your mostly idle SSH connection from broken
+                       masquerading firewalls which forget and reset the idle connections.</li>
+       <li><i>OnDemandForward</i>: Setup the connection only after the first client
+                       connected to the local tunnel (-L) connection side.</li>
+</ul>
+HERE
                );
 
 1;
index 4b005ae..c15394f 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/ssht/Index.html.pl b/project/ssht/Index.html.pl
new file mode 100755 (executable)
index 0000000..319a299
--- /dev/null
@@ -0,0 +1,78 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::ssht'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ssht::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::ssht::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ssht::ListItem::ListItem,
+               );
+
+
+my $cvsfile=sub ($) {
+my($file)=@_;
+
+       return a_href $W->{"project_viewcvs"}.'/*checkout*/ssht/hostintranet/etc-inittab?rev=HEAD',
+                       CGI::escapeHTML($file);
+};
+
+print <<"HERE";
+
+<ul>
+       <li>
+               <p>Replace all strings <b>hostintranet</b> by the name of your firewalled
+               intranet machine (without any dots - it must be valid string token).</p>
+       </li>
+       <li>
+               <p>Replace all strings <b>public.internet.com</b> by the hostname of your
+               server in public Internet. Replace <b>1.2.3.4-IP-of-public.internet.com</b>
+               with IP address of this host</p>
+       </li>
+       <li>Generate new keypair by '<b>ssh-keygen -t dsa</b>'.</p>
+               <p>Place its public key part to
+               @{[ &{$cvsfile}('public.internet.com/home-hostintranet-ssht/.ssh/authorized_keys') ]}.</p>
+               <p>Place its private key part to
+               @{[ &{$cvsfile}('hostintranet/public.internet.com--hostintranet-ssht--identity') ]}.
+               Protect this file by '<i>chmod 600 hostintranet/public.internet.com--hostintranet-ssht--identity</i>'.</p>
+       <li>
+               <p>Append line from @{[ &{$cvsfile}('public.internet.com/etc-passwd') ]}
+               to the file <b>/etc/passwd</b> on your server in public Internet.</p>
+       </li>
+       <li>
+               <p>Append line from @{[ &{$cvsfile}('hostintranet/etc-inittab') ]} to
+               the file <b>/etc/inittab</b> on your firewalled intranet machine.</p>
+               <p>Execute '<i>init q</i>' command there.</p>
+       </li>
+</ul>
+HERE
+
+
+My::Web->footer();
diff --git a/project/ssht/ListItem.pm b/project/ssht/ListItem.pm
new file mode 100755 (executable)
index 0000000..90403f0
--- /dev/null
@@ -0,0 +1,51 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::ssht' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::ssht::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"ssht",
+               "platform"=>"unixuser",
+               "priority"=>90,
+               "cvs"=>"ssht",
+               "summary"=>'Unattended intranet host accessibility by '.a_href('http://www.openssh.org/','SSH').' tunnel',
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "sponsorship"=>a_href('http://www.jklabs.cz/','JKLabs'),
+               "language"=>"bash",
+               "description"=><<"HERE",
+<p>Do you need to admin remote host placed in the intranet behind firewall out of your contrl?
+If the firewall performat NAT (masquerade) where you can connect from
+the intranet to the outer world by @{[ a_href 'http://www.openssh.org/','SSH' ]}
+you can use these security safe scripts.</p>
+<p>If you are able to set up port forwarding on the firewall you do not need any such scripts.
+In the case of HTTP-only proxy you cannot use these scripts - look elsewhere.</p>
+HERE
+               );
+
+1;
diff --git a/project/ssht/Makefile.am b/project/ssht/Makefile.am
new file mode 100644 (file)
index 0000000..c6838b9
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/ssht/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
similarity index 70%
rename from project/step/index.html.pl
rename to project/step/Index.html.pl
index 0c59086..7b16ae0 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::step::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::step::ListItem;
+Wuse 'My::Project';
+Wuse 'project::step::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::step::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::step::ListItem::ListItem,
                );
 
 My::Web->footer();
index 3c1266f..b158b67 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::step;
+package project::step::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"STEP - Student's Trainee Exchange Programme",
-               "priority"=>4,
+
+our @ListItem=(
+               "name"=>"STEP",
+               "platform"=>"web",
+               "priority"=>130,
                "download"=>"step.tar.gz",
                "summary"=>"Custom web database application",
                "license"=>"PD",
                "maintenance"=>"dead",
                "language"=>"PHP 3.0",
-               "description"=>""
-                               .'<p>Preview of a possible future web database solution for some lawyers association.'
-                               .' Currently it remains as a source of some web development <a href="http://www.php.net/">PHP 3.0</a>'
-                               .' codebase to be reused in other projects.</p>'
+               "description"=><<"HERE",
+<p>Preview of a possible future web database solution for a lawyers association.
+Currently it remains as a source of some web development @{[ a_href 'http://www.php.net/','PHP 3.0' ]}
+codebase to be reused in other projects.</p>
+HERE
                );
 
 1;
index 4a0f95c..c89769e 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 67%
rename from project/surprise/index.html.pl
rename to project/surprise/Index.html.pl
index e51279f..f233afd 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::surprise::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::surprise::ListItem;
+Wuse 'My::Project';
+Wuse 'project::surprise::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::surprise::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::surprise::ListItem::ListItem,
                );
 
-print '<table border="0"><tr><td align="center">'.My::Web::img("surprise-gnome-0.gif","Gnome client").'</td></tr></table>'."\n";
+
+print centerimg "surprise-gnome-0","Gnome client";
+
 
 My::Web->footer();
index 1d2b900..f5eb31a 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::surprise;
+package project::surprise::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
+
+our @ListItem=(
                "name"=>"Partition Surprise",
-               "priority"=>9,
+               "platform"=>"unixuser",
+               "priority"=>650,
+               "icon"=>"surprise-gnome-0-icon",
                "download-Page on SourceForge.net"=>"http://sourceforge.net/project/showfiles.php?group_id=10546",
                "download-ISO Image from SourceForge.net"=>"http://surprise.sourceforge.net/download/surprise-rel7.iso.zip",
                "link-Homepage on SourceForge.net"=>"http://surprise.sourceforge.net/",
                "link-Project Page on SourceForge.net"=>"http://sourceforge.net/projects/surprise/",
-               "summary"=>"Partition manager",
+               "summary"=>"GPLed Partition Magic clone",
                "license"=>"GPL",
+               "sponsorship"=>a_href('http://www.suse.com/','SuSE'),
                "maintenance"=>"update",
-               "ownership"=>"Coauthor; development team of 5 people",
+               "ownership"=><<"HERE",
+Member of the development team:
+<ul>
+       <li>@{[ a_href 'http://atrey.karlin.mff.cuni.cz/~jack/','Jan Kara' ]}</li>
+       <li>@{[ a_href 'http://atrey.karlin.mff.cuni.cz/~kral/','Daniel Kral' ]}</li>
+       <li>@{[ a_href 'http://www.jankratochvil.net/','Jan Kratochvil' ]}</li>
+       <li>@{[ a_href 'http://www.ucw.cz/~robert/','Robert Spalek' ]}</li>
+       <li>@{[ a_href 'http://kiwi.ms.mff.cuni.cz/~tom/','Tomas Tichy' ]}</li>
+</ul>
+HERE
                "language"=>"C",
-               "description"=>""
-                               .'<p>Partition Surprise is a GPL partition managing software for Linux. Partition'
-                               .'resizes, moves and conversions is implemented. Limited support of operations on'
-                               .'mounted ext2-filesystem included as well.'
+               "description"=><<"HERE",
+<p>Partition Surprise is a GPL partition managing software for GNU/Linux. Partition
+resizes, moves and conversions is implemented. Limited support of operations on
+mounted ext2-filesystem included as well.
+HERE
                );
 
 1;
index c4c5552..482a487 100644 (file)
@@ -19,8 +19,9 @@
 include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
-       ListItem.pm \
-       index.html.pl
+               ListItem.pm \
+               Index.html.pl \
+               surprise-gnome-0.png
 
-noinst_DATA+= \
-       index.html
+CLEANFILES+= \
+               surprise-gnome-0.gif
diff --git a/project/surprise/surprise-gnome-0-icon.png b/project/surprise/surprise-gnome-0-icon.png
new file mode 100644 (file)
index 0000000..4553bab
Binary files /dev/null and b/project/surprise/surprise-gnome-0-icon.png differ
diff --git a/project/surprise/surprise-gnome-0.gif b/project/surprise/surprise-gnome-0.gif
deleted file mode 100644 (file)
index 5b1ce7c..0000000
Binary files a/project/surprise/surprise-gnome-0.gif and /dev/null differ
diff --git a/project/surprise/surprise-gnome-0.png b/project/surprise/surprise-gnome-0.png
new file mode 100644 (file)
index 0000000..2d6431e
Binary files /dev/null and b/project/surprise/surprise-gnome-0.png differ
similarity index 81%
rename from project/tac_plus/index.html.pl
rename to project/tac_plus/Index.html.pl
index d0b0ff2..56ae6f0 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::tac_plus::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::tac_plus::ListItem;
+Wuse 'My::Project';
+Wuse 'project::tac_plus::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::tac_plus::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::tac_plus::ListItem::ListItem,
                );
 
 print <<'HERE';
index 93f8679..40674b8 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::tac_plus;
+package project::tac_plus::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"TACACS+ Server NAS Host Based Authorization",
-               "priority"=>8,
+
+our @ListItem=(
+               "name"=>"tac_plus auth",
+               "platform"=>"unixuser",
+               "priority"=>270,
+               "icon"=>"cisco-icon.jpeg",
                "download-GTS rel.4 diff for TACACS+ v4.0.3"=>"tac_plus-F4.0.3.alpha.8.gts4.diff.gz",
                "download-TACACS+ v4.0.3, Devrim Seral rel.8"=>"http://www.gazi.edu.tr/tacacs/index.php?page=download",
-               "link-CVS repository for GTS version"=>"http://cvs.jankratochvil.net/viewcvs/tac_plus/",
-               "summary"=>"Network server security",
+               "cvs"=>"tac_plus",
+               "link-".a_href('http://freshmeat.net/','Freshmeat')=>
+                               a_href('http://freshmeat.net/branches/18747/','Tacacs+ - Authorization by NAS host patch branch'),
+               "summary"=>a_href('http://www.cisco.com/warp/public/614/7.html','Cisco TACACS+')
+                               .' NAS host based authorization',
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"pending",
                "language"=>"C patch",
-               "sponsorship"=>"<a href=\"http://www.gtsgroup.cz/\">GTS</a>",
-               "description"=>""
-                               .'<p>Patch provides complete freedom of specifying ANY'
-                               .' configuration changes depending on the specific NAS the user is being logged'
-                               .' on. This involves different enable password, NAS keys but now also: various'
-                               .' specific commands, permitted services etc.</p>'
+               "sponsorship"=>a_href('http://www.gtsgroup.cz/'.'GTS'),
+               "description"=><<"HERE",
+<p>Patch provides complete freedom of specifying any
+configuration changes depending on the specific NAS the user is being logged
+on. This involves different enable password, NAS keys but now also: various
+specific commands, permitted services etc.</p>
+HERE
                );
 
 1;
index dfbc836..c2261aa 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/tac_plus/cisco-icon.jpeg b/project/tac_plus/cisco-icon.jpeg
new file mode 100644 (file)
index 0000000..7c68e75
Binary files /dev/null and b/project/tac_plus/cisco-icon.jpeg differ
diff --git a/project/tcp_rto/Index.html.pl b/project/tcp_rto/Index.html.pl
new file mode 100755 (executable)
index 0000000..5c5dd9a
--- /dev/null
@@ -0,0 +1,55 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::tcp_rto'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::tcp_rto::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::tcp_rto::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::tcp_rto::ListItem::ListItem,
+               );
+
+
+print <<"HERE";
+<p>This patch can solve your problems if you have network connection dropping too much
+packets. In standard case the Linux kernel will correctly increase our round-trip-time
+of connection slowing the transfer rate up to the unusable state.</p>
+<p>After applying this patch you can set your maximal round-trip-time in file
+&quot;<b>/proc/sys/net/ipv4/tcp_rto_max</b>&quot;, it is expressed in <tt>Hz</tt>
+units (<tt>100-per-second</tt> on <i>x86</i> platform). You may need also to enlarge
+your maximal retry count in &quot;<b>/proc/sys/net/ipv4/tcp_retries2</b>&quot;,
+otherwise <u>your</u> machine will reject the connection as it will have to retry
+the packets more than in sane states.</p>
+<p><font color="red">Please use this feature very carefully! You are violating
+<tt>RFC</tt> standards and you can get your network administrators to be very angry!</font></p>
+HERE
+
+
+My::Web->footer();
index 7338b40..9f9ca54 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::tcp_rto;
+package project::tcp_rto::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Linux Kernel Patch for Maximal Round-trip-time",
-               "priority"=>7,
+
+our @ListItem=(
+               "name"=>"tcp_rto",
+               "platform"=>"unixuser",
+               "trivia"=>1,
+               "priority"=>330,
                "download-Linux kernel 2.2.17 patch"=>"linux-2.2.17-tcp_rto-1.diff",
                "download-Linux kernel 2.4.16 patch"=>"linux-2.4.16-tcp_rto-1.diff",
-               "summary"=>"Network workaround",
+               "summary"=>"Linux kernel maximal TCP round-trip-time patch",
                "license"=>"GPL",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C patch",
-               "description"=>""
-                               .'<p>This patch can solve your problems if you have network connection dropping too much'
-                               .' packets. In standard case the Linux kernel will correctly increase our round-trip-time'
-                               .' of connection slowing the transfer rate up to the unusable state.</p>'
-                               .' <p>After applying this patch you can set your maximal round-trip-time in file'
-                               .' &quot;<b>/proc/sys/net/ipv4/tcp_rto_max</b>&quot;, it is expressed in <tt>Hz</tt>'
-                               .' units (<tt>100-per-second</tt> on <i>x86</i> platform). You may need also to enlarge'
-                               .' your maximal retry count in &quot;<b>/proc/sys/net/ipv4/tcp_retries2</b>&quot;,'
-                               .' otherwise <u>your</u> machine will reject the connection as it will have to retry'
-                               .' the packets more than in sane states.</p>'
-                               .' <p><font color="red">Please use this feature very carefully! You are violating'
-                               .' <tt>RFC</tt> standards and you can get your network administrators to be very angry!</font></p>'
+               "description"=><<"HERE",
+<p>Solve your problems with network connection dropping too much of your
+packets. It forces Linux kernel to insist repeating the packages to prevent
+slowdown of the TCP connection up to its unusable state.</p>
+HERE
                );
 
 1;
index 1e511ee..a3bd7f7 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/tcp_rto/index.html.pl b/project/tcp_rto/index.html.pl
deleted file mode 100755 (executable)
index 361a9cf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/perl
-# 
-# $Id$
-# Main page of 'My::Project::tcp_rto'
-# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
-# 
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; exactly version 2 of June 1991 is required
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use project::tcp_rto::ListItem;
-
-
-My::Web->init_project(
-               "ListItem"=>\%My::Project::tcp_rto::ListItem,
-               );
-
-My::Web->footer();
similarity index 79%
rename from project/tcpdump/index.html.pl
rename to project/tcpdump/Index.html.pl
index b709890..5eabacb 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::tcpdump::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::tcpdump::ListItem;
+Wuse 'My::Project';
+Wuse 'project::tcpdump::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::tcpdump::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::tcpdump::ListItem::ListItem,
                );
 
 print <<'HERE';
index 19f0fed..afb52fd 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::tcpdump;
+package project::tcpdump::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"tcpdump ASCII Dump Patch",
-               "priority"=>6,
+
+our @ListItem=(
+               "name"=>"tcpdump ASCII",
+               "platform"=>"unixuser",
+               "trivia"=>1,
+               "priority"=>170,
                "download"=>"tcpdump-3.4-ASCIIdump.diff",
                "download-tcpdump-3.4"=>"ftp://ftp.ee.lbl.gov/tcpdump-3.4.tar.Z",
-               "summary"=>"tcpdump readability patch",
+               "summary"=>"tcpdump(1) patch for better output readable as ASCII",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C patch",
-               "description"=>""
-                               .'<p>Makes the text messages of tcpdump(1) readable when option <code>-x</code> is used.</p>'
+               "description"=><<"HERE",
+<p>Makes the text messages of tcpdump(1) readable when option <code>-x</code> is used.</p>
+HERE
                );
 
 1;
index 7d428e8..0d57b65 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 69%
rename from project/timeplan/index.html.pl
rename to project/timeplan/Index.html.pl
index 5eeba24..ac46a0a 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::timeplan::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::timeplan::ListItem;
+Wuse 'My::Project';
+Wuse 'project::timeplan::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::timeplan::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::timeplan::ListItem::ListItem,
                );
 
 My::Web->footer();
index 248fa57..821fa97 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::timeplan;
+package project::timeplan::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Time Log Summarizer",
-               "priority"=>6,
+
+our @ListItem=(
+               "name"=>"timeplan",
+               "platform"=>"unixuser",
+               "trivia"=>1,
+               "priority"=>100,
+               "icon"=>"digiclock.jpeg",
                "download"=>"timeplan-1.0.1.tar.gz",
-               "summary"=>"Time management",
+               "cvs"=>"timeplan",
+               "summary"=>"Calculate statistics from your personal time tracking notes",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "description"=>""
-                               .'<p>Software to do summaries of time log - what have you spent much time on.'
-                               .' The greatest effect to me was just the writing of such time log: Consecutively'
-                               .' you do not spend such time on useless issues as you would be forced to write'
-                               .' such event to your log.</p>'
+               "description"=><<"HERE",
+<p>Software to do summaries of time log - what have you spent much time on.
+The greatest effect to me was just the writing of such time log: Consecutively
+you do not spend such time on useless issues as you would be forced to write
+such event to your log.</p>
+HERE
                );
 
 1;
index db36941..d773411 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/timeplan/digiclock.jpeg b/project/timeplan/digiclock.jpeg
new file mode 100644 (file)
index 0000000..4e4ccbc
Binary files /dev/null and b/project/timeplan/digiclock.jpeg differ
similarity index 69%
rename from project/vblib/index.html.pl
rename to project/vblib/Index.html.pl
index 303dd3d..65f4b0c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::vblib::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::vblib::ListItem;
+Wuse 'My::Project';
+Wuse 'project::vblib::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::vblib::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::vblib::ListItem::ListItem,
                );
 
 My::Web->footer();
index 0e2c134..344320f 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::vblib;
+package project::vblib::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Variable Buffers Library",
-               "priority"=>4,
+
+our @ListItem=(
+               "name"=>"vblib",
+               "platform"=>"unixdevel",
+               "priority"=>30,
                "download"=>"vblib-1.0.0.tar.gz",
-               "summary"=>"Streams library",
+               "summary"=>"High performance memory streams library",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "sponsorship"=>"<a href=\"http://www.princip.cz/\">Princip, a.s.</a>",
-               "description"=>""
-                               .'<p>Enables application to easily do input/output functions (like'
-                               .' read/write, printf etc.) with memory streams while using performance effective'
-                               .' functions. Simple buffer copying/moving would be possible but it would case a'
-                               .' major performance hit if not using algorithms implemented in this library.</p>'
+               "sponsorship"=>"<a href=\"http://www.geoinvest.cz/\">Geoinvest</a>",
+               "description"=><<"HERE",
+<p>Enables application to easily do input/output functions (like
+read/write, printf etc.) with memory streams while using performance effective
+functions. Simple buffer copying/moving would be possible but it would case a
+major performance hit if not using algorithms implemented in this library.</p>
+HERE
                );
 
 1;
index 0a0c8d1..ced12a6 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/wayback/Index.html.pl b/project/wayback/Index.html.pl
new file mode 100755 (executable)
index 0000000..592f6e3
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::wayback'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::wayback::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+Wuse 'My::Project';
+Wuse 'project::wayback::ListItem';
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::wayback::ListItem::ListItem,
+               );
+
+My::Web->footer();
diff --git a/project/wayback/ListItem.pm b/project/wayback/ListItem.pm
new file mode 100755 (executable)
index 0000000..7538911
--- /dev/null
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::wayback' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::wayback::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+use My::Web;
+
+
+our @ListItem=(
+               "name"=>"wayback",
+               "platform"=>"unixuser",
+               "trivia"=>1,
+               "priority"=>320,
+               "cvs"=>"wayback",
+               "summary"=>"Shift system time backwards for a specific application",
+               "license"=>"PD",
+               "maintenance"=>"ready",
+               "language"=>"C",
+               "description"=><<"HERE",
+<p>This programs is userful for time-limited demo versions, of course.</p>
+<p>Just set environment variable "<b>WAYBACK</b>" to the number of seconds to shift the system time back.
+Set "<b>LD_PRELOAD</b>" to the provided <b>libwayback.so</b> and run your demo program.</P>
+HERE
+               );
+
+1;
diff --git a/project/wayback/Makefile.am b/project/wayback/Makefile.am
new file mode 100644 (file)
index 0000000..4b296dc
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+# automake source for the Makefile of project/wayback/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+       ListItem.pm \
+       Index.html.pl
similarity index 85%
rename from project/winvnc/index.html.pl
rename to project/winvnc/Index.html.pl
index fa5b3ff..027f6f0 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::winvnc::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::winvnc::ListItem;
+Wuse 'My::Project';
+Wuse 'project::winvnc::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::winvnc::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::winvnc::ListItem::ListItem,
                );
 
 print <<'HERE';
index b677286..8bf0773 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::winvnc;
+package project::winvnc::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Patch for Secret WinVNC Server Run",
-               "priority"=>6,
+
+our @ListItem=(
+               "name"=>"WinVNC hide",
+               "platform"=>"w32",
+               "priority"=>560,
+               "icon"=>"nowinvnc",
                "download-already patched version 3.3.3r9"=>"vnc-3.3.3r9_x86_win32-exe-SECRET.zip",
                "download-original version 3.3.3r9"=>"http://www.uk.research.att.com/vnc/dist/vnc-3.3.3r9_x86_win32.zip",
                "download-already patched version 3.3.3r7"=>"vnc-3.3.3r7_x86_win32-exe-SECRET.zip",
                "download-original version 3.3.3r7"=>"http://www.uk.research.att.com/vnc/dist/vnc-3.3.3r7_x86_win32.zip",
                "link-VNC Homepage"=>"http://www.uk.research.att.com/vnc/",
-               "summary"=>"Patch to hide WinVNC",
+               "summary"=>"Hide running WinVNC server",
                "license"=>"PD",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"i386 asm patch",
-               "description"=>""
-                               .'<p>If you install <i>WinVNC</i> in'
-                               .' <a href="http://www.microsoft.com/">MS</a>&nbsp;<a href="http://www.microsoft.com/windows/">Windows</a>'
-                               .' environment, you will notice that it creates its own small icon in <i>System Tray</i>.'
-                               .' Sometimes you want to get rid of this visible icon and you cannot remove it by any configuration'
-                               .' settings.</p>'
+               "description"=><<"HERE",
+<p>If you install <i>WinVNC</i> in
+@{[ a_href 'http://www.microsoft.com/','MS' ]}&nbsp;@{[ a_href 'http://www.microsoft.com/windows/','Windows' ]}
+environment, you will notice that it creates its own small icon in <i>System Tray</i>.
+Sometimes you want to get rid of this visible icon and you cannot remove it by any configuration
+settings.</p>
+HERE
                );
 
 1;
index 4f2fe05..4a75ab1 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/winvnc/nowinvnc.png b/project/winvnc/nowinvnc.png
new file mode 100644 (file)
index 0000000..8fa619e
Binary files /dev/null and b/project/winvnc/nowinvnc.png differ
similarity index 69%
rename from project/wllib/index.html.pl
rename to project/wllib/Index.html.pl
index 061bae3..826d340 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::wllib::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::wllib::ListItem;
+Wuse 'My::Project';
+Wuse 'project::wllib::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::wllib::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::wllib::ListItem::ListItem,
                );
 
 My::Web->footer();
index c490ca7..c607d3c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::wllib;
+package project::wllib::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Line drawing Crossplatform Library",
-               "priority"=>4,
+
+our @ListItem=(
+               "name"=>"wllib",
+               "platform"=>"unixdevel",
+               "priority"=>40,
                "download"=>"wllib-1.0.0.tar.gz",
-               "summary"=>"Graphics library",
+               "summary"=>"Graphics library for crossplatform line drawing",
                "license"=>"PD",
-               "maintenance"=>"obsolete",
-               "reason"=>"Supported backends are no longer being used.",
+               "maintenance"=>"obsolete-Any of the supported backends are no longer being used.",
                "language"=>"C",
-               "description"=>""
-                               .'<p>This library should make you generically use line drawing on the following platforms:'
-                               .' <a href="http://www.x.org/">UNIX/X Windows System X11</a>,'
-                               .' <a href="http://www.svgalib.org/">UNIX/SVGAlib</a> and'
-                               .' <a href="http://www.amiga.com/">AmigaOS</a>.</p>'
+               "description"=><<"HERE",
+<p>This library should make you generically use line drawing on the following platforms:
+@{[ a_href 'http://www.x.org/','UNIX/X Windows System X11 (libX11)' ]},
+@{[ a_href 'http://www.svgalib.org/','UNIX/SVGAlib' ]} and
+@{[ a_href 'http://www.amiga.com/','AmigaOS' ]}.</p>
+HERE
                );
 
 1;
index 1fb9668..0bbd406 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 59%
rename from project/xbill/index.html.pl
rename to project/xbill/Index.html.pl
index 9c25cc0..05b90a5 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::xbill::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
 use My::Web;
-use project::xbill::ListItem;
+Wuse 'My::Project';
+Wuse 'project::xbill::ListItem';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::xbill::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::xbill::ListItem::ListItem,
                );
 
+
+print <<"HERE";
+<p>This project has been moved to @{[ a_href 'http://sourceforge.net/','SourceForge' ]}.
+Please refer to its @{[ a_href 'http://xbill.sourceforge.net/','SourceForge project page' ]}.</p>
+
+@{[ centerimg "redmond_.jpeg","xBill" ]}
+HERE
+
+
 My::Web->footer();
index 80b9885..6a8b23b 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::xbill;
+package project::xbill::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+use My::Web;
 
-our %ListItem=(
-               "name"=>"Classic xBill game",
-               "priority"=>7,
+
+our @ListItem=(
+               "name"=>"Gnome xBill",
+               "platform"=>"unixuser",
+               "priority"=>570,
+               "icon"=>"redmond-icon",
                "link-Download from SourceForge.net"=>"http://sourceforge.net/project/showfiles.php?group_id=10700",
                "link-Homepage on SourceForge.net"=>"http://xbill.sourceforge.net/",
-               "summary"=>"Graphical game",
+               "summary"=>"xBill game rewritten with network support and Gnome/GTK+",
                "license"=>"GPL",
-               "maintenance"=>"finished",
+               "maintenance"=>"ready",
                "language"=>"C",
-               "description"=>""
-                               .'<p>Almost-rewritten <a href="ftp://ftp.x.org/contrib/games/xbill-2.0.tgz">classical xBill game</a>,'
-                               .' this project has been moved to <a href="http://sourceforge.net/">SourceForge</a>.'
-                               .' Please refer to the <a href="http://xbill.sourceforge.net/">page linked above</a>'
-                               .' to have further access to it.</p>'
+               "description"=><<"HERE",
+<p>Rewritten @{[ a_href 'ftp://ftp.x.org/contrib/games/xbill-2.0.tgz','classical xBill game' ]}.
+<p>Features list: @{[ a_href 'http://www.gnome.org/','Gnome/GTK+' ]} UI,
+network gameplay, C++ no longer required, portability.</p>
+HERE
                );
 
 1;
index 7414d24..e7ce4de 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/xbill/redmond-icon.png b/project/xbill/redmond-icon.png
new file mode 100644 (file)
index 0000000..d229977
Binary files /dev/null and b/project/xbill/redmond-icon.png differ
diff --git a/project/xbill/redmond_.jpeg b/project/xbill/redmond_.jpeg
new file mode 100644 (file)
index 0000000..3829885
Binary files /dev/null and b/project/xbill/redmond_.jpeg differ
diff --git a/resume/.htaccess b/resume/.htaccess
new file mode 100644 (file)
index 0000000..5a3b380
--- /dev/null
@@ -0,0 +1 @@
+DirectoryIndex Resume-JanKratochvil.html.pl
diff --git a/resume/Makefile.am b/resume/Makefile.am
new file mode 100644 (file)
index 0000000..037201d
--- /dev/null
@@ -0,0 +1,19 @@
+# $Id$
+# automake source for the Makefile of Resume subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
diff --git a/resume/Resume-JanKratochvil.html.pl b/resume/Resume-JanKratochvil.html.pl
new file mode 100755 (executable)
index 0000000..c982285
--- /dev/null
@@ -0,0 +1,301 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Resume page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package resume::ResumeJanKratochvil;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+require Crypt::Rot13;
+Wrequire 'My::Project';
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>"Resume",
+               "section"=>"Resume",
+               "heading"=>0,
+               "footer"=>0,
+               "head_css"=>"
+td { vertical-align: top; }
+table { border-collapse: collapse; border-style: solid; border-width: 1px; margin: 8px; }
+A[href] { text-decoration: inherit; /* revoke underline */ }
+A[href].project { text-decoration: underline; }
+.platform { font-style: italic; white-space: nowrap; }
+table.referees td.com { text-align: center; }
+.techs { white-space: nowrap; }
+",
+               "args_check"=>{
+                               "referees"=>'', # Do not bother with '^(?:(?i)referees)?$'
+                               },
+               );
+My::Web->heading();
+
+
+my %item=( My::Project::item_hash_read() );
+my @itemnames=sort {
+               ($item{$b}{"priority"} <=> $item{$a}{"priority"})
+               or (lc($item{$a}->{"name"}) cmp lc($item{$b}->{"name"}));
+               } keys(%item);
+
+my $projectref=sub
+{
+my($name)=@_;
+
+       return a_href "/project/$name/",$item{$name}{"name"},"attr"=>'class="project"';
+};
+
+my $project=sub
+{
+my($name,%args)=@_;
+
+       return &{$projectref}($name).($args{"bare"} ? '' : ': '.$item{$name}{"summary"});
+};
+
+my $free_projects=sub (@)
+{
+my(@platforms)=@_;
+
+       my $r="";
+       $r.=join ", ",map({ my $platform=$_;
+               map({ ($item{$_}{"sponsorship"} || $item{$_}{"trivia"}
+                               || $item{$_}{"platform"} ne $platform ? () : (&{$projectref}($_))); } @itemnames);
+               } @platforms);
+       return $r;
+};
+
+
+my $reference=sub ($$)
+{
+my($mail,$fullname)=@_;
+
+       my $r="";
+       $r.='<td>';
+               $r.=$fullname;
+               if (lc($W->{"args"}{"referees"}) eq "referees") {
+                       my $rot13=Crypt::Rot13->new();
+                       $rot13->charge($mail);
+                       $mail=($rot13->rot13())[0];
+                       $r.=' &lt;'.a_href("mailto:$mail",$mail).'&gt;';
+                       }
+       $r.='</td>';
+       return $r;
+};
+
+sub techs ($)
+{
+my($arg)=@_;
+
+       return '<span class="techs">('.$arg.')</span>';
+}
+
+
+my $uClinux=a_href 'http://www.uclinux.com/','uClinux';
+my $mailme=(map({ a_href("mailto:$_",$_); } 'job@jankratochvil.net'))[0];
+my $now=(localtime())[5]+1900;
+
+print <<"HERE";
+<table width="100%" style="border-style: none;"><tr><td align="center"><table>
+<tr><td rowspan="9" style="padding: 10px; vertical-align: middle;">
+                               @{[ img "/resume/Resume-JanKratochvil","face" ]}</td>
+               <td class="tab-head">Name    </td><td>Jan Kratochvil</td></tr>
+<tr><td class="tab-head">English </td><td>technical: fluent, general: communicable</td></tr>
+<tr><td class="tab-head">Born    </td><td>1979</td></tr>
+<tr><td class="tab-head">Status  </td><td>single</td></tr>
+<tr><td class="tab-head">Licenses</td><td>motorcycle, car</td></tr>
+<tr><td class="tab-head">eMail   </td><td>$mailme</td></tr>
+<tr><td class="tab-head">WWW     </td><td>@{[ a_href('http://www.jankratochvil.net/') ]}</td></tr>
+<tr><td class="tab-head">Resume  </td><td>@{[ a_href('http://www.jankratochvil.net/resume/') ]}</td></tr>
+<tr><td class="tab-head">OpenPGP </td><td style="font-family: monospace;">@{[ a_href '/pgp-JanKratochvil.txt',''
+               .'pub  1024D/44FC7632 2002-10-07 Jan Kratochvil &lt;pgp-44FC7632@jankratochvil.net&gt;<br />'
+               .'sub  2048g/D9F5F44B 2002-10-07 [expires 2004-10-06]' ]}</span></td></tr>
+</table></td></tr></table>
+
+@{[ vskip "2ex" ]}
+
+<table>
+<tr><td class="tab-head">Platforms    </td><td>GNU/Linux/i386/UNIX/FreeBSD, W32 kernel, Amiga/680x0, MS-DOS,
+                                               ZX Spectrum, handheld PC-E500S</td></tr>
+<tr><td class="tab-head">Major Areas  </td><td>mobile technologies, filesystems, embedded devices</td></tr>
+<tr><td class="tab-head">Languages    </td><td>C (Gnome/GCC), Perl, bash/awk/sed...,
+                                               Java, C++, Pascal, Basic, REXX, S-Lang, Foxplus, Prolog</td></tr>
+<tr><td class="tab-head">Tools/Metalanguages</td>
+                                           <td>autoconf, automake, libtool, m4, CVS, gettext, bison, flex, ld&nbsp;script,
+                                               gdb&nbsp;script, Maple&nbsp;V</td></tr>
+<tr><td class="tab-head">Assemblers   </td><td>i386, Motorola 680x0, Zilog&nbsp;Z80, Intel 8051, MIPS R2/3000,
+                                               (Hitachi SH-8)</td></tr>
+<tr><td class="tab-head">WWW-Related  </td><td>(X)HTML, CSS, PHP, SQL (PostgreSQL, MySQL), JavaScript, CGI</td></tr>
+<tr><td class="tab-head">Documentation</td><td>plainTeX, LaTeX, DocBook, DocBook Lite, XML/NS/Schema, nroff, pod</td></tr>
+<tr><td class="tab-head">Libraries    </td><td>Gnome/GTK+/GLib, POSIX/BSD/SysV/threads/sockets, X11, OpenGL, NCurses,
+                                               S-Lang, GnomeVFS, libxml, SVGALib, NIS, Qt,...</td></tr>
+<tr><td class="tab-head">RPC          </td><td>CORBA/ORBit, SOAP, Sun&nbsp;RPC</td></tr>
+<tr><td class="tab-head">Protocols    </td><td>GSM SMS/PDU/Nokia&nbsp;Smart&nbsp;Messaging/EMS/MMS/SMIL/WAP/WSP/AMR/ETSI stds/3GPP stds,
+                                               IPv4, HTTP, SMTP/RFC822/MIME, FTP, SSH, DHCP, POP3, NFSv2, PPP/LCP/IPCP,...</td></tr>
+<tr><td class="tab-head">Filesystems  </td><td>ext2, FAT, AmigaFFS, ISO-9660</td></tr>
+<caption>Each technology involved in at least one of my past projects.</caption>
+</table>
+
+@{[ vskip "2ex" ]}
+
+<table>
+<tr><td>1984-1991</td><td class="platform">Platform:</td><td>Sinclair ZX Spectrum: Basic, Zilog Z80 machine code</td></tr>
+<tr><td>1992-1997</td><td class="platform">Platform:</td><td>Amiga: Motorola 680x0 assembler, C, REXX</td></tr>
+<tr><td>         </td><td class="platform">Projects:</td><td>@{[ &{$free_projects}("amiga") ]}</td></tr>
+<tr><td>1993-1997</td><td class="platform">Platform:</td><td>PC/MS-DOS: i386 assembler, C, Pascal, OpenGL/Mesa, Foxplus</td></tr>
+<tr><td>         </td><td class="platform">Unlisted Projects:</td><td>@{[ &{$free_projects}("dos") ]}</td></tr>
+<tr><td>1993     </td><td class="com">@{[ a_href('http://www.japhila.cz/index_en.htm','Japhila') ]}</td>
+               <td>StampMan: Database application @{[ techs 'MS-DOS: Pascal, plainTeX' ]}</td></tr>
+<tr><td>1993-$now</td><td class="platform">Platform:</td><td>PC/GNU/Linux:
+                                                       C, Perl, bash/awk/sed..., Java, C++, ...</td></tr>
+<tr><td>         </td><td class="platform">Unlisted Projects:</td><td>@{[ &{$free_projects}(qw(unixuser unixdevel web)) ]}</td></tr>
+<tr><td>1993-1996</td><td class="com">Profes J&amp;K</td>
+               <td>PC assembly and customer service</td></tr>
+<tr><td>1998     </td><td class="com">@{[ a_href('http://www.elsa-online.org/',"European Law Students' Association") ]}</td>
+               <td>@{[ &$project('step') ]} @{[ techs 'PHP, PostgreSQL' ]}<br />
+                   subtasks @{[ &$project('phphash',"bare"=>1) ]}, @{[ &$project('pgsqlsubstr',"bare"=>1) ]}</td></tr>
+<tr><td>1998-1999</td><td class="com">@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}</td>
+               <td>@{[ a_href 'http://members.tripod.com/Stelios_Cellar/GSM/m1module.htm','Siemens M1' ]}
+                                               GSM modem daemon, client/server, remote GSM terminals @{[ techs 'C, GSM, GPS, S-Lang' ]}<br />
+                               GPLed subtask @{[ &$project('vblib') ]} @{[ techs 'C' ]}</td></tr>
+<tr><td>1999     </td><td class="com">@{[ a_href('http://www.tencom.cz/','TENcom Trade') ]}</td>
+               <td>@{[ a_href "/project/mdsms/","MobilDock SMS Tool","attr"=>'class="project"' ]} @{[ techs 'GSM/PDU' ]}</td></tr>
+<tr><td>1999     </td><td class="com">@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}</td>
+               <td>@{[ &$project('332') ]} @{[ techs 'M680x0 asm, C' ]}<br />
+                               subtask @{[ &$project('mot2as') ]}</td></tr>
+<tr><td>1999     </td><td class="com">@{[ a_href('http://www.unicom-prague.cz/','Unicom') ]}</td>
+               <td>Technical translations from English</td></tr>
+<tr><td>1999-$now</td><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
+               <td>sysadmin GNU/Linux and FreeBSD, techsupport: GuestNET,
+                               @{[ a_href 'http://www.2m.dk/web/html_version/eclipse/eclipse.html','Eclipse' ]},
+                               @{[ a_href 'http://www.globaloop.com/','GlobaLoop' ]},
+                               @{[ a_href 'http://www.antlimited.com/products/fresco.htm','Fresco' ]}</td></tr>
+<tr><td>1999     </td><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
+               <td>IRQ redirector for legacy devices @{[ techs 'i386 asm' ]}</td></tr>
+<tr><td>1999-2000</td><td class="com">@{[ a_href('http://www.suse.com/','SuSE') ]}</td>
+               <td>@{[ &$project('surprise') ]} @{[ techs 'C, Gnome, m4' ]}<br />
+                               subtask @{[ &$project('int13sniff') ]}<br />
+                               subtask @{[ &$project('gladewsrc') ]}</td></tr>
+<tr><td>2001     </td><td class="com">@{[ a_href('http://www.gtsgroup.cz/','GTS') ]}</td>
+               <td>@{[ &$project('tac_plus') ]} @{[ techs 'C, Cisco TACACS+' ]}<br />
+                               subtask @{[ &$project('mod_auth_tacacs') ]} @{[ techs 'C, Cisco TACACS+' ]}</td></tr>
+<tr><td>2001     </td><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
+               <td>@{[ &$project('mdsms') ]} - update for
+                               @{[ a_href 'http://www.transportdata.de/html/produkte/siemens_m20t.php?lang=en',
+                                               'Siemens M20' ]}
+                               @{[ techs 'C, GSM PDU' ]}</td></tr>
+<tr><td>2001     </td><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
+               <td>@{[ a_href 'http://www.gnokii.org/','gnokii' ]}
+                                               @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/gnokii-lace-2001-11-17-01.tar.gz',
+                                                               'driver for SMS gateway' ]}
+                                               of GSM operator @{[ a_href('http://www.eurotel.cz/','EuroTel') ]}
+                               (C, PostgreSQL)</td></tr>
+<tr><td>2001     </td><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
+               <td>@{[ &$project('gsmperl') ]} @{[ techs 'Perl, GSM EMS' ]}</td></tr>
+<tr><td>2001     </td><td class="com">@{[ a_href('http://www.netcentrum.cz/','NetCentrum') ]}</td>
+               <td>@{[ a_href 'http://www.gnokii.org/','gnokii' ]}
+                               @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/gnokii-0.4.0pre1_lace2001_11_14_01_netcentrum.diff',
+                                               'driver for custom SMS gateway protocol' ]} @{[ techs 'C' ]}</td></tr>
+<tr><td>2001     </td><td class="com">@{[ a_href('http://www.readynote.com/','ReadyNote') ]}</td>
+               <td>@{[ &$project('mdsms') ]} port to embedded $uClinux
+                               @{[ techs 'GSM, Nokia, uClinux' ]}</td></tr>
+<tr><td>2002     </td><td class="com">@{[ a_href('http://www.readynote.com/','ReadyNote') ]}</td>
+               <td>@{[ a_href 'http://www.mwiacek.com/gsm/gammu/gammu.html','mygnokii' ]}
+                               @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/mygnokii-0.3.3_pre8-gold_2002_03_10--uClinux2002_03_17_23_03/',
+                                               'port to embedded' ]} $uClinux,
+               @{[ a_href 'http://www.nokiausa.com/phones/5190/1,1162,,00.html','Nokia 5190' ]}
+                               @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/mygnokii-0.3.3_pre8-gold_2002_02_24-decodefile/',
+                                               'sw-modem debugging' ]}
+               @{[ techs 'GSM, Nokia, uClinux' ]}</td></tr>
+<tr><td>2002     </td><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
+               <td>@{[ &$project('ssht') ]}</td></tr>
+<tr><td>2002     </td><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
+               <td>@{[ &$project('middleman') ]}
+                               for hotel system @{[ techs 'C, BSD, HTTP' ]}</td></tr>
+<tr><td>2002     </td><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
+               <td>MMS framework client via @{[ a_href('http://www.eurotel.cz/site/en/home/','EuroTel') ]} GSM operator
+                                               (GSM MMS, Perl, XML, SOAP)<br />
+                               subtasks @{[ a_href "/etmms/",'MMS center debugging',"attr"=>'class="project"' ]},
+                                               @{[ &$project('etherealmmse',"bare"=>1) ]}, @{[ &$project('etherealwsp',"bare"=>1) ]}</td></tr>
+<caption>Contractor Jobs</caption>
+</table>
+
+@{[ vskip "1ex" ]}
+
+<table class="referees">
+<tr><td class="com">@{[ a_href('http://www.japhila.cz/index_en.htm','Japhila') ]}</td>
+               @{[ &{$reference}('wnavx(ng)wncuvyn.pbz','Bretislav Janik') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}</td>
+               @{[ &{$reference}('ohgna(ng)trbvairfg.pm','Lubor Otta') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.tencom.cz/','TENcom Trade') ]}</td>
+               @{[ &{$reference}('grfne(ng)grapbz.pm','Petr Tesar') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.unicom-prague.cz/','Unicom') ]}</td>
+               @{[ &{$reference}('erprcpr(ng)havpbz-centhr.pm','Valerie Bernardova') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
+               @{[ &{$reference}('wna.xbyne(ng)wxynof.pm','Jan Kolar') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.gtsgroup.cz/','GTS') ]}</td>
+               @{[ &{$reference}('Zvpunry.Znprx(ng)tgftebhc.pm','Michael Macek') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
+               @{[ &{$reference}('zvpuny.ubenx(ng)ngfcenun.pm','Michal Horak') ]}</tr>
+<tr><td class="com">@{[ a_href('http://www.readynote.com/','ReadyNote') ]}</td>
+               @{[ &{$reference}('wcehrgg(ng)ernqlabgr.pbz','Jim Pruett') ]}</tr>
+HERE
+
+if (lc($W->{"args"}{"referees"}) ne "referees") {
+       print <<"HERE";
+               <tr><td style="padding: 10px;" colspan="2">
+                       <hr />
+                       <form method="post" action="@{[ $W->{"resume_url"} ]}">
+                               <p>Enter the word '<b>referees</b>' (without quotes) to disclose e-mail addresses:</p>
+                               <input type="text" size="15" name="referees" value="@{[ CGI::escapeHTML($W->{"args"}{"referees"}) ]}" />
+                               <input type="submit" value="Submit" />
+                               <p>(spambot protection)</p>
+                       </form>
+               </td></tr>
+HERE
+       }
+
+print <<"HERE";
+<caption>Contractor Jobs Referees (chronologically)</caption>
+</table>
+
+@{[ vskip "2ex" ]}
+
+<table>
+<tr><td>1995</td><td>7th in the Central European Olympiad in Informatics</td></tr>
+<tr><td>1996</td><td>4th in the International Competition in Programming</td></tr>
+<tr><td>1997</td><td>1st in the International Competition in Programming</td></tr>
+<tr><td>1997</td><td>2nd in an MO-P national contest - mathematics Olympiad, the programming category</td></tr>
+<tr><td>1997</td><td>Bronze medal in the International Olympiad in Informatics, South Africa - Cape Town</td></tr>
+</table>
+
+@{[ vskip "3ex" ]}
+
+<p style="font-size: larger;">Looking for a fulltime job. Relocation around the world expected.</p>
+<p style="font-size: larger;">Contact: $mailme</p>
+HERE
+
+
+My::Web->footer();
diff --git a/resume/Resume-JanKratochvil.png b/resume/Resume-JanKratochvil.png
new file mode 100644 (file)
index 0000000..a3da63d
Binary files /dev/null and b/resume/Resume-JanKratochvil.png differ
index eb05362..43317cb 100644 (file)
@@ -1,2 +1,2 @@
 User-agent: *
-Disallow:
+Disallow: /project/ChangeLog.txt.pl