w3m

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/w3m.git/
Log | Files | Refs | README

commit f8bee183527654bfcb4da35ed5909a78a10a63a3
parent 34a7dcff6a99288737db249fbe5af6158a041a68
Author: a-ito <a-ito>
Date:   Fri,  9 Nov 2001 04:59:17 +0000

Updates from 0.2.1 into 0.2.1-inu-1.5

Diffstat:
MBonus/html2latex | 2+-
DPatches/alpha | 19-------------------
DPatches/armlinux | 110-------------------------------------------------------------------------------
MPatches/ews4800 | 209++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
DPatches/hpux11 | 25-------------------------
DPatches/linux2.2sparc | 10----------
DPatches/macosx | 41-----------------------------------------
DPatches/macppc | 147-------------------------------------------------------------------------------
DPatches/mipsel | 184-------------------------------------------------------------------------------
DPatches/newsos6 | 27---------------------------
DPatches/os2 | 39---------------------------------------
MXMakefile | 29+++++++++++++++++++++--------
MXMakefile.dist | 31++++++++++++++++++++++---------
MXXMakefile | 41+++++++++++++++++++++++++++++------------
Manchor.c | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mbackend.c | 10+++-------
Mbuffer.c | 35+++++++++++++++++++++++------------
Mconfig.h | 66+++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Mconfigure | 346+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Mconv.c | 2+-
Mcookie.c | 16++++++++--------
Adeflate.c | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ddict.c | 137-------------------------------------------------------------------------------
Mdisplay.c | 58++++++++++++++++++++++++----------------------------------
Ddoc-jp/HISTORY.kokb | 1220------------------------------------------------------------------------------
Mdoc-jp/MANUAL.html | 52+++++++++++++++++++++++++++++++++++++++++-----------
Mdoc-jp/README | 2--
Mdoc-jp/README.func | 36++++++++++++++++++++++++++++--------
Mdoc-jp/README.mailcap | 12+++++++-----
Mdoc-jp/keymap.default | 7++++++-
Mdoc-jp/keymap.lynx | 12++++++++----
Mdoc-jp/w3m.1 | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mdoc/FAQ.html | 2+-
Mdoc/MANUAL.html | 65+++++++++++++++++++++++++++++++++++++++++++++++------------------
Mdoc/README | 2+-
Mdoc/README.func | 38+++++++++++++++++++++++++++++---------
Mdoc/STORY.html | 2+-
Mdoc/keymap.default | 7++++++-
Mdoc/keymap.lynx | 12++++++++----
Mdoc/w3m.1 | 50+++++++++++++++++++++++++++++++++++++++++++++++++-
Aentity.c | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aentity.h | 365+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aentity.tab | 258+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Metc.c | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Mfile.c | 878+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
Mfm.h | 55+++++++++++++++++++++++++++++++++++++++++++++++++------
Mform.c | 253+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Mform.h | 22+++++++++++-----------
Mframe.c | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Mframe.h | 4++++
Mftp.c | 74++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Mfunc.c | 36++++++++++++++++++++++++------------
Mfuncname.c | 111+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Mfuncname.tab | 18+++++++++++++++++-
Mfuncname1.h | 92++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Mfuncname2.h | 92++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Agc/AmigaOS.c | 623+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/BCC_MAKEFILE | 8++++----
Mgc/EMX_MAKEFILE | 8++++----
Mgc/Makefile | 372+++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
Agc/Makefile.am | 158+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/Makefile.direct | 597+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/Makefile.dj | 208++++++++++++++++++++++++++++++++++++++-----------------------------------------
Agc/Makefile.in | 518+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/NT_MAKEFILE | 20++++++++++----------
Agc/NT_THREADS_MAKEFILE | 2158+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/OS2_MAKEFILE | 10+++++-----
Dgc/README | 1517-------------------------------------------------------------------------------
Dgc/README.Mac | 385-------------------------------------------------------------------------------
Dgc/README.OS2 | 6------
Mgc/README.QUICK | 74+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Dgc/README.alpha | 22----------------------
Dgc/README.amiga | 180-------------------------------------------------------------------------------
Dgc/README.debugging | 58----------------------------------------------------------
Dgc/README.dj | 12------------
Dgc/README.hp | 11-----------
Dgc/README.linux | 50--------------------------------------------------
Dgc/README.rs6000 | 9---------
Dgc/README.sgi | 41-----------------------------------------
Dgc/README.solaris2 | 65-----------------------------------------------------------------
Dgc/README.uts | 2--
Dgc/README.win32 | 149-------------------------------------------------------------------------------
Dgc/SCoptions.amiga | 16----------------
Mgc/SMakefile.amiga | 168++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
Mgc/WCC_MAKEFILE | 4++--
Agc/acinclude.m4 | 182+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/aclocal.m4 | 320+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/add_gc_prefix.c | 8+++++++-
Mgc/allchblk.c | 181+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Mgc/alloc.c | 263++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
Mgc/alpha_mach_dep.s | 113+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
Dgc/backptr.h | 56--------------------------------------------------------
Dgc/barrett_diagram | 106-------------------------------------------------------------------------------
Mgc/blacklst.c | 47++++++++++++++++++++++++++++-------------------
Mgc/checksums.c | 2+-
Agc/configure | 2802+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/configure.host | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/configure.in | 260+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dgc/cord/README | 31-------------------------------
Dgc/cord/SCOPTIONS.amiga | 14--------------
Dgc/cord/SMakefile.amiga | 20--------------------
Dgc/cord/cord.h | 327-------------------------------------------------------------------------------
Mgc/cord/cordprnt.c | 2+-
Mgc/cord/cordtest.c | 1+
Dgc/cord/ec.h | 70----------------------------------------------------------------------
Dgc/cord/gc.h | 754-------------------------------------------------------------------------------
Dgc/cord/private/cord_pos.h | 118-------------------------------------------------------------------------------
Mgc/dbg_mlc.c | 398+++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
Agc/digimars.mak | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/dyn_load.c | 393++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
Mgc/finalize.c | 190++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
Dgc/gc.h | 754-------------------------------------------------------------------------------
Mgc/gc.mak | 501+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Dgc/gc.man | 80-------------------------------------------------------------------------------
Dgc/gc_alloc.h | 380-------------------------------------------------------------------------------
Dgc/gc_copy_descr.h | 26--------------------------
Mgc/gc_cpp.cc | 19++++---------------
Agc/gc_cpp.cpp | 2++
Dgc/gc_cpp.h | 290-------------------------------------------------------------------------------
Agc/gc_dlopen.c | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dgc/gc_hdrs.h | 135-------------------------------------------------------------------------------
Dgc/gc_mark.h | 280-------------------------------------------------------------------------------
Dgc/gc_priv.h | 1748-------------------------------------------------------------------------------
Dgc/gc_private.h | 1-
Dgc/gc_typed.h | 91-------------------------------------------------------------------------------
Dgc/gcconfig.h | 1110-------------------------------------------------------------------------------
Agc/gcj_mlc.c | 284+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/gcname.c | 13+++++++++++++
Agc/gctest | 0
Mgc/headers.c | 29++++++++++++++++++-----------
Agc/hpux_test_and_clear.s | 21+++++++++++++++++++++
Agc/if_mach | 0
Mgc/if_mach.c | 5++++-
Agc/if_not_there | 0
Mgc/if_not_there.c | 5++++-
Dgc/include/backptr.h | 56--------------------------------------------------------
Mgc/include/cord.h | 2+-
Mgc/include/gc.h | 310+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mgc/include/gc_alloc.h | 3+++
Agc/include/gc_amiga_redirects.h | 30++++++++++++++++++++++++++++++
Agc/include/gc_backptr.h | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/include/gc_cpp.h | 114++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Agc/include/gc_gcj.h | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/include/gc_inl.h | 12++++++++----
Agc/include/gc_local_alloc.h | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/include/gc_mark.h | 145+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/include/gc_pthread_redirects.h | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/include/gc_typed.h | 2++
Mgc/include/new_gc_alloc.h | 21++++++++++++---------
Agc/include/private/dbg_mlc.h | 153+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/include/private/gc_hdrs.h | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/include/private/gc_locks.h | 481+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/include/private/gc_pmark.h | 388+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/include/private/gc_priv.h | 1433++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mgc/include/private/gcconfig.h | 776++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
Rgc/solaris_threads.h -> gc/include/private/solaris_threads.h | 0
Agc/include/private/specific.h | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/install-sh | 251+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/irix_threads.c | 121+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Agc/libtool.m4 | 435+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/linux_threads.c | 1256+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Agc/ltconfig | 3078+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agc/ltmain.sh | 4012+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/mach_dep.c | 232++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
Mgc/malloc.c | 332+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mgc/mallocx.c | 435+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
Mgc/mark.c | 862++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Mgc/mark_rts.c | 128+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
Mgc/mips_sgi_mach_dep.s | 1+
Mgc/misc.c | 451++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
Agc/mkinstalldirs | 36++++++++++++++++++++++++++++++++++++
Mgc/new_hblk.c | 128+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Dgc/nursery.c | 175-------------------------------------------------------------------------------
Dgc/nursery.h | 90-------------------------------------------------------------------------------
Mgc/obj_map.c | 43++++++++++++++++++++++++-------------------
Mgc/os_dep.c | 1368++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
Mgc/pc_excludes | 11++++++++---
Mgc/pcr_interface.c | 9+++++++--
Agc/powerpc_macosx_mach_dep.s | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/ptr_chck.c | 82++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mgc/reclaim.c | 516+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mgc/setjmp_t.c | 5++---
Mgc/solaris_pthreads.c | 50+++++++++++++++++++++++++++++---------------------
Mgc/solaris_threads.c | 24+++++++++++++++---------
Agc/sparc_netbsd_mach_dep.s | 34++++++++++++++++++++++++++++++++++
Agc/specific.c | 108+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgc/stubborn.c | 15++++++++++++---
Dgc/test.c | 1263-------------------------------------------------------------------------------
Dgc/test_cpp.cc | 265-------------------------------------------------------------------------------
Agc/threadlibs | 0
Mgc/threadlibs.c | 19+++++++++++++++++--
Mgc/typd_mlc.c | 108++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Mgc/version.h | 4++--
Dgc/weakpointer.h | 221-------------------------------------------------------------------------------
Mgc/win32_threads.c | 494++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Mhistory.c | 4++--
Mhtml.c | 282++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mhtml.h | 7+++++++
Mindep.c | 849++++++++++++++++++++++++++++++++++++-------------------------------------------
Mindep.h | 23++++++++++++++---------
Ainflate.c | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mistream.c | 13++++++++++++-
Mistream.h | 4++--
Mkeybind.c | 2+-
Mkeybind_lynx.c | 6+++---
Mlinein.c | 116+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
Mlocal.c | 177+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mmailcap.c | 144+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mmain.c | 1173++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
Mmap.c | 41++++++++++++++++++++++++-----------------
Mmenu.c | 78+++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Mmimehead.c | 36+++++++++++++++++++++++++++++++-----
Mmyctype.c | 4++--
Mmyctype.h | 3+++
Mparsetag.c | 7+++++--
Mparsetagx.c | 17+++++++++--------
Mparsetagx.h | 1-
Mproto.h | 61++++++++++++++++++++++++++++++++++++++++++++-----------------
Mrc.c | 141+++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
Drcparams.h | 76----------------------------------------------------------------------------
Dscripts/bm2menu.pl | 54------------------------------------------------------
Mscripts/dirlist.cgi | 107+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Mscripts/dirlist.in | 107+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Mtable.c | 211++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Dtable.c.0 | 2878-------------------------------------------------------------------------------
Mtable.h | 7++++---
Mterms.c | 94++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mterms.h | 10----------
Aucs_eucjp.h | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aucs_latin1.h | 36++++++++++++++++++++++++++++++++++++
Murl.c | 218+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
Mversion.c | 2+-
Mw3m-doc/contain.wd | 2+-
Mw3m-doc/detail.html.in | 4++--
Dw3m-doc/developement.html.in | 77-----------------------------------------------------------------------------
Aw3m-doc/development.html.in | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mw3m-doc/index.html.in | 14+++++++-------
Mw3mbookmark.c | 27++++++++++++++++-----------
Mw3mhelp-lynx_en.html | 36++++++++++++++++++++++--------------
Mw3mhelp-lynx_ja.html | 24++++++++++++++++--------
Mw3mhelp-w3m_en.html | 31+++++++++++++++++++++++++++----
Mw3mhelp-w3m_ja.html | 30+++++++++++++++++++++++++++---
Mw3mhelperpanel.c | 4++--
243 files changed, 32801 insertions(+), 21853 deletions(-)

diff --git a/Bonus/html2latex b/Bonus/html2latex @@ -490,7 +490,7 @@ until f.eof? print "\\begin{document}\n" $in_document = TRUE end - # enviconment push + # environment push if act[1].kind_of?(Hash) && (tok.tagname != "p" || tok.switch('align') != nil) then intp.dup diff --git a/Patches/alpha b/Patches/alpha @@ -1,19 +0,0 @@ -*** gc/Makefile.orig Thu Jun 24 10:08:17 1999 ---- gc/Makefile Thu Jun 24 10:08:54 1999 -*************** -*** 10,16 **** - ABI_FLAG= - CC=cc $(ABI_FLAG) - CXX=CC $(ABI_FLAG) -! AS=as $(ABI_FLAG) - # The above doesn't work with gas, which doesn't run cpp. - # Define AS as `gcc -c -x assembler-with-cpp' instead. - # Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64) ---- 10,16 ---- - ABI_FLAG= - CC=cc $(ABI_FLAG) - CXX=CC $(ABI_FLAG) -! AS=gcc -c -x assembler-with-cpp - # The above doesn't work with gas, which doesn't run cpp. - # Define AS as `gcc -c -x assembler-with-cpp' instead. - # Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64) diff --git a/Patches/armlinux b/Patches/armlinux @@ -1,110 +0,0 @@ -From lars@junk.nocrew.org Tue Mar 7 04:44 EST 2000 -Return-Path: <lars@junk.nocrew.org> -Received: from ei5sun.yz.yamagata-u.ac.jp (ei5sun.yz.yamagata-u.ac.jp [133.24.114.42]) - by ei5hp710.yz.yamagata-u.ac.jp (8.9.3/8.9.3) with ESMTP id EAA25953 - for <aito@ei5hp710.yz.yamagata-u.ac.jp>; Tue, 7 Mar 2000 04:44:51 -0500 (EST) -Received: from junk.nocrew.org (mail@[212.73.17.42]) by ei5sun.yz.yamagata-u.ac.jp (8.8.0/3.5Wbeta) with ESMTP id SAA07952 for <aito@ei5sun.yz.yamagata-u.ac.jp>; Tue, 7 Mar 2000 18:54:43 +0900 (JST) -Received: from lars by junk.nocrew.org with local (Exim 3.03 #1 (Debian)) - for aito@ei5sun.yz.yamagata-u.ac.jp - id 12SGVE-0001rh-00; Tue, 07 Mar 2000 10:42:08 +0100 -To: aito@ei5sun.yz.yamagata-u.ac.jp -Subject: ARMLinux patch -From: lars brinkhoff <lars@nocrew.org> -Date: 07 Mar 2000 10:42:08 +0100 -Message-ID: <85zosbjevj.fsf@junk.nocrew.org> -Lines: 89 -User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.5 -MIME-Version: 1.0 -Content-Type: text/plain; charset=us-ascii -Sender: lars brinkhoff <lars@junk.nocrew.org> - -This patch is an attempt to make w3m version 0.1.6 work in ARMLinux. -It seems to work well. - ---- gc/gcconfig.h.org Wed Jan 12 05:23:37 2000 -+++ gc/gcconfig.h Sun Mar 5 14:24:52 2000 -@@ -151,6 +151,10 @@ - # define SPARC - # define mach_type_known - # endif -+# if defined(LINUX) && (defined(__arm__) || defined(arm)) -+# define ARM -+# define mach_type_known -+# endif - # if defined(__alpha) || defined(__alpha__) - # define ALPHA - # if !defined(LINUX) -@@ -985,6 +989,39 @@ - # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext) - # define DATAEND (&_end) - # define HEURISTIC2 -+# endif -+ -+# ifdef ARM -+# define MACH_TYPE "ARM" -+# ifdef LINUX -+# define OS_TYPE "LINUX" -+# define HEURISTIC1 -+# define STACKBOTTOM ((ptr_t) 0xbffffffc) -+# ifdef __ELF__ -+# define DYNAMIC_LOADING -+# include <features.h> -+# if defined(__GLIBC__) && __GLIBC__ >= 2 -+ extern int __data_start; -+# define DATASTART ((ptr_t)(&__data_start)) -+# else -+ extern char **__environ; -+# define DATASTART ((ptr_t)(&__environ)) -+ /* hideous kludge: __environ is the first */ -+ /* word in crt0.o, and delimits the start */ -+ /* of the data segment, no matter which */ -+ /* ld options were passed through. */ -+ /* We could use _etext instead, but that */ -+ /* would include .rodata, which may */ -+ /* contain large read-only data tables */ -+ /* that we'd rather not scan. */ -+# endif -+ extern int _end; -+# define DATAEND (&_end) -+# else -+ ARMLinux non elf ? -+# endif -+# endif -+# define ALIGNMENT 4 - # endif - - # ifndef STACK_GROWS_UP -diff -ur gc/mach_dep.c w3m-0.1.6.lars/gc/mach_dep.c ---- gc/mach_dep.c.org Wed Jan 12 05:23:37 2000 -+++ gc/mach_dep.c Thu Jan 27 21:28:39 2000 -@@ -337,7 +337,7 @@ - /* other machines... */ - # if !(defined M68K) && !(defined VAX) && !(defined RT) - # if !(defined SPARC) && !(defined I386) && !(defined NS32K) --# if !defined(POWERPC) && !defined(UTS4) -+# if !defined(POWERPC) && !defined(UTS4) && !defined(ARM) - --> bad news <-- - # endif - # endif -diff -ur w3m/gc/os_dep.c w3m-0.1.6.lars/gc/os_dep.c ---- gc/os_dep.c.org Wed Jan 12 05:23:37 2000 -+++ gc/os_dep.c Thu Jan 27 21:37:27 2000 -@@ -72,7 +72,7 @@ - # define NEED_FIND_LIMIT - # endif - --# if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || defined(ALPHA)) -+# if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || defined(ALPHA) || defined (ARM)) - # define NEED_FIND_LIMIT - # endif - -@@ -139,7 +139,7 @@ - # define OPT_PROT_EXEC 0 - #endif - --#if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || defined(ALPHA)) -+#if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || defined(ALPHA) || defined(ARM)) - /* The I386 case can be handled without a search. The Alpha case */ - /* used to be handled differently as well, but the rules changed */ - /* for recent Linux versions. This seems to be the easiest way to */ - diff --git a/Patches/ews4800 b/Patches/ews4800 @@ -1,34 +1,175 @@ ---- XMakefile.orig Mon Mar 19 10:47:56 2001 -+++ XMakefile Mon Mar 19 21:03:34 2001 -@@ -65,7 +65,7 @@ - $(CC) $(CFLAGS) -o $(HELPER) w3mhelperpanel.o $(LIBS) - - gc/gc.a: -- cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS)' -+ cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS) -Dmips' - - install: $(TARGETS) - -$(MKDIR) $(DESTDIR)$(BIN_DIR) ---- gc/Makefile.orig Tue Jan 4 14:46:50 2000 -+++ gc/Makefile Thu Mar 22 18:10:10 2001 -@@ -7,7 +7,7 @@ - # and runs some tests of collector and cords. Does not add cords or - # c++ interface to gc.a - # cord/de - builds dumb editor based on cords. --ABI_FLAG= -+ABI_FLAG=-Kconform_pic - CC=cc $(ABI_FLAG) - CXX=CC $(ABI_FLAG) - AS=as $(ABI_FLAG) ---- gc/gcconfig.h.orig Tue Jun 6 14:39:29 2000 -+++ gc/gcconfig.h Mon Mar 19 21:02:51 2001 -@@ -64,7 +64,8 @@ - # endif - # if defined(mips) || defined(__mips) - # define MIPS --# if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) -+# if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) ||\ -+ defined(nec_ews) - # define ULTRIX - # else - # if !defined(LINUX) +diff -bcrN gc.org/doc/README.ews4800 gc/doc/README.ews4800 +*** gc.org/doc/README.ews4800 Thu Jan 1 09:00:00 1970 +--- gc/doc/README.ews4800 Wed Jul 25 17:38:57 2001 +*************** +*** 0 **** +--- 1,75 ---- ++ GC on EWS4800 ++ ------------- ++ ++ 1. About EWS4800 ++ EWS4800 is 32bit/64bit workstation. ++ ++ Vender: NEC Corporation ++ OS: UX/4800 R9.* - R13.* (SystemV R4.2) ++ CPU: R4000, R4400, R10000 (MIPS) ++ ++ 2. Compiler ++ ++ 32bit: ++ Use ANSI C compiler. ++ CC = /usr/abiccs/bin/cc ++ ++ 64bit: ++ Use 64bit ANSI C compiler. ++ CC = /usr/ccs64/bin/cc ++ AR = /usr/ccs64/bin/ar ++ ++ 3. ELF file format ++ *** Caution: The following infomation is empirical. *** ++ ++ 32bit: ++ ELF file has an unique format. (See a.out(4) and end(3C).) ++ ++ &_start ++ : text segment ++ &etext ++ DATASTART ++ : data segment (initialized) ++ &edata ++ DATASTART2 ++ : data segment (uninitialized) ++ &end ++ ++ Here, DATASTART and DATASTART2 are macros of GC, and are defined as ++ the following equations. (See include/private/gcconfig.h.) ++ The algorithm for DATASTART is similar with the function ++ GC_SysVGetDataStart() in os_dep.c. ++ ++ DATASTART = ((&etext + 0x3ffff) & ~0x3ffff) + (&etext & 0xffff) ++ ++ Dynamically linked: ++ DATASTART2 = (&_gp + 0x8000 + 0x3ffff) & ~0x3ffff ++ ++ Statically linked: ++ DATASTART2 = &edata ++ ++ GC has to check addresses both between DATASTART and &edata, and ++ between DATASTART2 and &end. If a program accesses between &etext ++ and DATASTART, or between &edata and DATASTART2, the segmentation ++ error occurs and the program stops. ++ ++ If a program is statically linked, there is not a gap between ++ &edata and DATASTART2. The global symbol &_DYNAMIC_LINKING is used ++ for the detection. ++ ++ 64bit: ++ ELF file has a simple format. (See end(3C).) ++ ++ _ftext ++ : text segment ++ _etext ++ _fdata = DATASTART ++ : data segment (initialized) ++ _edata ++ _fbss ++ : data segment (uninitialized) ++ _end = DATAEND ++ ++ -- ++ Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> ++ +diff -bcrN gc.org/include/private/gcconfig.h gc/include/private/gcconfig.h +*** gc.org/include/private/gcconfig.h Sun Jul 1 06:29:27 2001 +--- gc/include/private/gcconfig.h Wed Jul 25 17:38:57 2001 +*************** +*** 75,83 **** + # endif + # define mach_type_known + # endif +! # if defined(mips) || defined(__mips) + # define MIPS +! # if !defined(LINUX) + # if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) + # define ULTRIX + # else +--- 75,86 ---- + # endif + # define mach_type_known + # endif +! # if defined(mips) || defined(__mips) || defined(_mips) + # define MIPS +! # if defined(nec_ews) || defined(_nec_ews) +! # define EWS4800 +! # endif +! # if !defined(LINUX) && !defined(EWS4800) + # if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) + # define ULTRIX + # else +*************** +*** 1083,1088 **** +--- 1086,1114 ---- + /* instead. But some kernel versions seem to give the wrong */ + /* value from /proc. */ + # endif /* Linux */ ++ # ifdef EWS4800 ++ # define HEURISTIC2 ++ # if defined(_MIPS_SZPTR) && (_MIPS_SZPTR == 64) ++ extern int _fdata[], _end[]; ++ # define DATASTART ((ptr_t)_fdata) ++ # define DATAEND ((ptr_t)_end) ++ # define CPP_WORDSZ _MIPS_SZPTR ++ # define ALIGNMENT (_MIPS_SZPTR/8) ++ # else ++ extern int etext, edata, end; ++ extern int _DYNAMIC_LINKING, _gp; ++ # define DATASTART ((ptr_t)((((word)&etext + 0x3ffff) & ~0x3ffff) \ ++ + ((word)&etext & 0xffff))) ++ # define DATAEND (&edata) ++ # define DATASTART2 (&_DYNAMIC_LINKING \ ++ ? (ptr_t)(((word)&_gp + 0x8000 + 0x3ffff) & ~0x3ffff) \ ++ : (ptr_t)&edata) ++ # define DATAEND2 (&end) ++ # define ALIGNMENT 4 ++ # endif ++ # define OS_TYPE "EWS4800" ++ # define USE_GENERIC_PUSH_REGS 1 ++ # endif + # ifdef ULTRIX + # define HEURISTIC2 + # define DATASTART (ptr_t)0x10000000 +diff -bcrN gc.org/mach_dep.c gc/mach_dep.c +*** gc.org/mach_dep.c Thu Jun 28 05:54:23 2001 +--- gc/mach_dep.c Wed Jul 25 17:38:57 2001 +*************** +*** 429,435 **** + *i = 0; + } + # if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \ +! || defined(UTS4) || defined(LINUX) + (void) setjmp(regs); + # else + (void) _setjmp(regs); +--- 429,435 ---- + *i = 0; + } + # if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \ +! || defined(UTS4) || defined(LINUX) || defined(EWS4800) + (void) setjmp(regs); + # else + (void) _setjmp(regs); +diff -bcrN gc.org/os_dep.c gc/os_dep.c +*** gc.org/os_dep.c Tue Jun 26 11:32:26 2001 +--- gc/os_dep.c Wed Jul 25 17:38:57 2001 +*************** +*** 1088,1093 **** +--- 1088,1096 ---- + GC_add_roots_inner(DATASTART, (char *)sbrk(0), FALSE); + # else + GC_add_roots_inner(DATASTART, (char *)(DATAEND), FALSE); ++ # if defined(DATASTART2) ++ GC_add_roots_inner(DATASTART2, (char *)(DATAEND2), FALSE); ++ # endif + # endif + # endif + # if !defined(PCR) && (defined(NEXT) || defined(MACOSX)) diff --git a/Patches/hpux11 b/Patches/hpux11 @@ -1,25 +0,0 @@ -Install note for HP-UX - -If you are running HP-UX 11 or later on PA-RISC 2.0, you -have to apply the following patch on GC library. This patch -is contributed by Dave Eaton <dwe@arde.com>. - -If you want to use HP C compiler, answer - - Input your favorite C-compiler. - (Default: cc) cc -Aa -D_HPUX_SOURCE - -If you use just 'cc' without options, you can't compile w3m. -If you are using gcc, no option is needed. - ----------------------------------------------------------------------- ---- gc/gcconfig.h.original Wed May 19 01:38:55 1999 -+++ gc/gcconfig.h Tue Jun 8 12:38:22 1999 -@@ -125,6 +125,7 @@ - # define mach_type_known - # endif - # if defined(_PA_RISC1_0) || defined(_PA_RISC1_1) \ -+ || defined(_PA_RISC2_0) \ - || defined(hppa) || defined(__hppa__) - # define HP_PA - # define mach_type_known diff --git a/Patches/linux2.2sparc b/Patches/linux2.2sparc @@ -1,10 +0,0 @@ ---- gc/gcconfig.h.org -+++ gc/gcconfig.h -@@ -601,7 +601,7 @@ - extern int _end; - # define DATAEND (&_end) - # define SVR4 --# define STACKBOTTOM ((ptr_t) 0xf0000000) -+# define STACKBOTTOM ((ptr_t) 0xeffff000) - # endif - # endif diff --git a/Patches/macosx b/Patches/macosx @@ -1,41 +0,0 @@ -Jeroen Scheerder <J.Scheerder@cwi.nl> (by way of Jeroen Scheerder) -Subject: w3m 0.1.6 on Mac OS X -Content-Type: text/plain; charset="us-ascii" - -Hi, - -I've compiled w3m successfully on Mac OS X (DP3). I'm including -patches, mainly dealing with compiler complaints about possible use of -uninitialized data. - -It compiles with one warning, still: - -url.c:799: warning: variable `p' might be clobbered by `longjmp' or - `vfork' - - -On a related note: I had to modify the makefile; there is no `m' -library, and no `termcap' library, and they're not needed as well -- -but they will cause an ld failure, when present on the ld command line. - -Context diffs (against a 21/1/2000 0.1.6) are included, including the -(trivial) patch to make Boehm gc compile. - - - -*** gc/gcconfig.h Mon Mar 6 12:16:04 2000 ---- gc/gcconfig.h.org Wed Jan 12 04:23:37 2000 -*************** -*** 180,190 **** - # define POWERPC - # define mach_type_known - # endif -- # if defined(__APPLE__) -- # define MACOSX -- # define POWERPC -- # define mach_type_known -- # endif - # if defined(NeXT) && defined(mc68000) - # define M68K - # define NEXT ---- 180,185 ---- diff --git a/Patches/macppc b/Patches/macppc @@ -1,147 +0,0 @@ -Here is a patch to port GC library to NetBSD/macppc. If you are -using NetBSD on PowerMac, apply this patch first. - -This patch is provided by K. Sunagawa (kei_sun@ba2.so-net.ne.jp). - -Index: gc/dyn_load.c -=================================================================== -RCS file: /cvsroot/w3m/gc/dyn_load.c,v -retrieving revision 1.1.1.2 -retrieving revision 1.2 -diff -u -u -r1.1.1.2 -r1.2 ---- gc/dyn_load.c 1999/06/02 19:29:13 1.1.1.2 -+++ gc/dyn_load.c 1999/06/03 12:44:49 1.2 -@@ -48,7 +48,8 @@ - #if !defined(SUNOS4) && !defined(SUNOS5DL) && !defined(IRIX5) && \ - !defined(MSWIN32) && !(defined(ALPHA) && defined(OSF1)) && \ - !defined(HP_PA) && !(defined(LINUX) && defined(__ELF__)) && \ -- !defined(RS6000) && !defined(SCO_ELF) -+ !defined(RS6000) && !defined(SCO_ELF) && \ -+ !(defined(NETBSD) && defined(POWERPC)) - --> We only know how to find data segments of dynamic libraries for the - --> above. Additional SVR4 variants might not be too - --> hard to add. -@@ -260,14 +261,22 @@ - # endif /* !USE_PROC ... */ - # endif /* SUNOS */ - --#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) -+#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \ -+ (defined(NETBSD) && defined(POWERPC)) - - /* Dynamic loading code for Linux running ELF. Somewhat tested on - * Linux/x86, untested but hopefully should work on Linux/Alpha. - * This code was derived from the Solaris/ELF support. Thanks to - * whatever kind soul wrote that. - Patrick Bridges */ - -+#if defined(NETBSD) -+#include <sys/exec_elf.h> -+#define DT_DEBUG 21 -+#define PT_LOAD 1 -+#define PF_W 0x2 -+#else - #include <elf.h> -+#endif - #include <link.h> - - /* Newer versions of Linux/Alpha and Linux/x86 define this macro. We -Index: gc/gcconfig.h -=================================================================== -RCS file: /cvsroot/w3m/gc/gcconfig.h,v -retrieving revision 1.1.1.2 -retrieving revision 1.2 -diff -u -u -r1.1.1.2 -r1.2 ---- gc/gcconfig.h 1999/06/02 19:29:18 1.1.1.2 -+++ gc/gcconfig.h 1999/06/03 12:44:49 1.2 -@@ -48,6 +48,11 @@ - # define NETBSD - # define mach_type_known - # endif -+# if defined(__NetBSD__) && defined(__powerpc__) -+# define POWERPC -+# define NETBSD -+# define mach_type_known -+# endif - # if defined(vax) - # define VAX - # ifdef ultrix -@@ -486,8 +491,8 @@ - - # ifdef POWERPC - # define MACH_TYPE "POWERPC" --# define ALIGNMENT 2 - # ifdef MACOS -+# define ALIGNMENT 2 - # ifndef __LOWMEM__ - # include <LowMem.h> - # endif -@@ -497,6 +502,7 @@ - # define DATAEND /* not needed */ - # endif - # ifdef LINUX -+# define ALIGNMENT 2 - # define OS_TYPE "LINUX" - # define HEURISTIC1 - # undef STACK_GRAN -@@ -504,6 +510,14 @@ - # define DATASTART GC_data_start - extern int _end; - # define DATAEND (&_end) -+# endif -+# ifdef NETBSD -+# define ALIGNMENT 4 -+# define OS_TYPE "NETBSD" -+# define HEURISTIC2 -+ extern char etext; -+# define DATASTART GC_data_start -+# define DYNAMIC_LOADING - # endif - # endif - -Index: gc/misc.c -=================================================================== -RCS file: /cvsroot/w3m/gc/misc.c,v -retrieving revision 1.1.1.1 -retrieving revision 1.2 -diff -u -u -r1.1.1.1 -r1.2 ---- gc/misc.c 1999/06/02 19:23:56 1.1.1.1 -+++ gc/misc.c 1999/06/03 12:44:50 1.2 -@@ -433,6 +433,9 @@ - # if defined(LINUX) && defined(SPARC) - GC_init_linuxsparc(); - # endif -+# if defined(NETBSD) && defined(POWERPC) -+ GC_init_netbsd_powerpc(); -+# endif - # ifdef SOLARIS_THREADS - GC_thr_init(); - /* We need dirty bits in order to find live stack sections. */ -Index: gc/os_dep.c -=================================================================== -RCS file: /cvsroot/w3m/gc/os_dep.c,v -retrieving revision 1.1.1.2 -retrieving revision 1.2 -diff -u -u -r1.1.1.2 -r1.2 ---- gc/os_dep.c 1999/06/02 19:29:10 1.1.1.2 -+++ gc/os_dep.c 1999/06/03 12:44:50 1.2 -@@ -84,6 +84,19 @@ - # include <machine/trap.h> - #endif - -+#if defined(NETBSD) && defined(POWERPC) -+ ptr_t GC_data_start; -+ -+ void GC_init_netbsd_powerpc() -+ { -+ extern ptr_t GC_find_limit(); -+ extern char **environ; -+ /* This may need to be environ, without the underscore, for */ -+ /* some versions. */ -+ GC_data_start = GC_find_limit((ptr_t)&environ, FALSE); -+ } -+#endif -+ - #ifdef AMIGA - # include <proto/exec.h> - # include <proto/dos.h> - diff --git a/Patches/mipsel b/Patches/mipsel @@ -1,184 +0,0 @@ -diff -ur gc/gcconfig.h w3m/gc/gcconfig.h ---- gc/gcconfig.h Tue Jan 4 14:46:50 2000 -+++ gc/gcconfig.h Fri May 26 00:30:56 2000 -@@ -67,11 +67,13 @@ - # if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) - # define ULTRIX - # else --# if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) || defined(__SYSTYPE_SVR4__) --# define IRIX5 /* or IRIX 6.X */ --# else --# define RISCOS /* or IRIX 4.X */ --# endif -+# if !defined(LINUX) -+# if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) || defined(__SYSTYPE_SVR4__) -+# define IRIX5 /* or IRIX 6.X */ -+# else -+# define RISCOS /* or IRIX 4.X */ -+# endif -+# endif - # endif - # define mach_type_known - # endif -@@ -836,49 +838,58 @@ - - # ifdef MIPS - # define MACH_TYPE "MIPS" --# ifndef IRIX5 --# define DATASTART (ptr_t)0x10000000 -+# ifdef LINUX -+# define OS_TYPE "LINUX" -+ extern int __data_start; -+# define DATASTART ((ptr_t)(&__data_start)) -+# define ALIGNMENT 4 -+# define USE_GENERIC_PUSH_REGS 1 -+# define STACKBOTTOM 0x80000000 -+# else /* LINUX */ -+# ifndef IRIX5 -+# define DATASTART (ptr_t)0x10000000 - /* Could probably be slightly higher since */ - /* startup code allocates lots of stuff. */ --# else -- extern int _fdata; --# define DATASTART ((ptr_t)(&_fdata)) --# ifdef USE_MMAP --# define HEAP_START (ptr_t)0x30000000 - # else --# define HEAP_START DATASTART --# endif -+ extern int _fdata; -+# define DATASTART ((ptr_t)(&_fdata)) -+# ifdef USE_MMAP -+# define HEAP_START (ptr_t)0x30000000 -+# else -+# define HEAP_START DATASTART -+# endif - /* Lowest plausible heap address. */ - /* In the MMAP case, we map there. */ - /* In either case it is used to identify */ - /* heap sections so they're not */ - /* considered as roots. */ --# endif /* IRIX5 */ --# define HEURISTIC2 -+# endif /* IRIX5 */ -+# define HEURISTIC2 - /* # define STACKBOTTOM ((ptr_t)0x7fff8000) sometimes also works. */ --# ifdef ULTRIX --# define OS_TYPE "ULTRIX" --# define ALIGNMENT 4 --# endif --# ifdef RISCOS --# define OS_TYPE "RISCOS" --# define ALIGNMENT 4 /* Required by hardware */ --# endif --# ifdef IRIX5 --# define OS_TYPE "IRIX5" --# define MPROTECT_VDB --# ifdef _MIPS_SZPTR --# define CPP_WORDSZ _MIPS_SZPTR --# define ALIGNMENT (_MIPS_SZPTR/8) --# if CPP_WORDSZ != 64 -+# ifdef ULTRIX -+# define OS_TYPE "ULTRIX" -+# define ALIGNMENT 4 -+# endif -+# ifdef RISCOS -+# define OS_TYPE "RISCOS" -+# define ALIGNMENT 4 /* Required by hardware */ -+# endif -+# ifdef IRIX5 -+# define OS_TYPE "IRIX5" -+# define MPROTECT_VDB -+# ifdef _MIPS_SZPTR -+# define CPP_WORDSZ _MIPS_SZPTR -+# define ALIGNMENT (_MIPS_SZPTR/8) -+# if CPP_WORDSZ != 64 -+# define ALIGN_DOUBLE -+# endif -+# else -+# define ALIGNMENT 4 - # define ALIGN_DOUBLE - # endif --# else --# define ALIGNMENT 4 --# define ALIGN_DOUBLE --# endif --# define DYNAMIC_LOADING --# endif -+# define DYNAMIC_LOADING -+# endif -+# endif - # endif - - # ifdef RS6000 -diff -ur gc/mach_dep.c w3m/gc/mach_dep.c ---- gc/mach_dep.c Tue Jan 4 14:46:50 2000 -+++ gc/mach_dep.c Fri May 26 00:34:11 2000 -@@ -74,6 +74,21 @@ - # ifdef RT - register long TMP_SP; /* must be bound to r11 */ - # endif -+# if defined(MIPS) && defined(LINUX) -+# define call_push(x) asm("move $4," x ";"); asm("jal GC_push_one") -+ call_push("$2"); -+ call_push("$3"); -+ call_push("$16"); -+ call_push("$17"); -+ call_push("$18"); -+ call_push("$19"); -+ call_push("$20"); -+ call_push("$21"); -+ call_push("$22"); -+ call_push("$23"); -+ call_push("$30"); -+# undef call_push -+# endif /* MIPS && LINUX */ - # ifdef VAX - /* VAX - generic code below does not work under 4.2 */ - /* r1 through r5 are caller save, and therefore */ -@@ -338,7 +353,9 @@ - # if !(defined M68K) && !(defined VAX) && !(defined RT) - # if !(defined SPARC) && !(defined I386) && !(defined NS32K) - # if !defined(POWERPC) && !defined(UTS4) -+# if (!defined(MIPS) && !defined(LINUX)) - --> bad news <-- -+# endif - # endif - # endif - # endif -diff -ur gc/misc.c w3m/gc/misc.c ---- gc/misc.c Tue Jan 4 14:46:50 2000 -+++ gc/misc.c Fri May 26 00:52:59 2000 -@@ -433,7 +433,8 @@ - # ifdef MSWIN32 - GC_init_win32(); - # endif --# if defined(LINUX) && (defined(POWERPC) || defined(ALPHA) || defined(SPARC)) -+# if defined(LINUX) && (defined(POWERPC) || defined(ALPHA) || \ -+ defined(SPARC) || defined(MIPS)) - GC_init_linux_data_start(); - # endif - # ifdef SOLARIS_THREADS -diff -ur gc/os_dep.c w3m/gc/os_dep.c ---- gc/os_dep.c Tue Jan 4 14:46:50 2000 -+++ gc/os_dep.c Fri May 26 00:37:07 2000 -@@ -72,7 +72,8 @@ - # define NEED_FIND_LIMIT - # endif - --# if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || defined(ALPHA)) -+# if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || \ -+ defined(ALPHA) || defined(MIPS)) - # define NEED_FIND_LIMIT - # endif - -@@ -139,7 +140,8 @@ - # define OPT_PROT_EXEC 0 - #endif - --#if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || defined(ALPHA)) -+#if defined(LINUX) && (defined(POWERPC) || defined(SPARC) || \ -+ defined(ALPHA) || defined(MIPS)) - /* The I386 case can be handled without a search. The Alpha case */ - /* used to be handled differently as well, but the rules changed */ - /* for recent Linux versions. This seems to be the easiest way to */ diff --git a/Patches/newsos6 b/Patches/newsos6 @@ -1,27 +0,0 @@ -diff -ur gc/Makefile gc/Makefile ---- gc/Makefile Sat Jul 24 02:53:34 1999 -+++ gc/Makefile Tue Nov 30 14:29:50 1999 -@@ -7,7 +7,7 @@ - # and runs some tests of collector and cords. Does not add cords or - # c++ interface to gc.a - # cord/de - builds dumb editor based on cords. --ABI_FLAG= -+ABI_FLAG=-KPIC - CC=cc $(ABI_FLAG) - CXX=CC $(ABI_FLAG) - AS=as $(ABI_FLAG) -Only in gc: Makefile.back -Only in gc: Makefile.orig -diff -ur gc/gcconfig.h gc/gcconfig.h ---- gc/gcconfig.h Fri Jul 9 05:03:22 1999 -+++ gc/gcconfig.h Tue Nov 30 14:30:11 1999 -@@ -64,7 +64,8 @@ - # endif - # if defined(mips) || defined(__mips) - # define MIPS --# if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) -+# if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) ||\ -+ defined(nec_ews) || defined(__sony_news) - # define ULTRIX - # else - # if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) || defined(__SYSTYPE_SVR4__) diff --git a/Patches/os2 b/Patches/os2 @@ -1,39 +0,0 @@ ---- w3m-0.1.10/XMakefile Thu Jun 8 13:26:04 2000 -+++ w3m-0.1.10-6/XMakefile Sun Jun 11 16:37:18 2000 -@@ -8,7 +8,7 @@ - LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o hash.o tagtable.o - LLOBJS=version.o - ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o --ALIB=libindep.a -+ALIB=indep.a - ALLOBJS=$(OBJS) $(LOBJS) $(LLOBJS) - - TARGET=w3m$(EXT) -@@ -31,13 +31,13 @@ - $(CC) $(CFLAGS) -o $(TARGET) $(ALLOBJS) $(LIBS) - - $(ALIB): $(ALIBOBJS) -- $(AR) rv $(ALIB) $(ALIBOBJS) -+ $(AR) srv $(ALIB) $(ALIBOBJS) - $(RANLIB) $(ALIB) - - $(OBJS): fm.h funcname1.h - - tagtable.c: html.h tagtable.tab mktable$(EXT) -- ./mktable 100 tagtable.tab > tagtable.c -+ mktable 100 tagtable.tab > tagtable.c - - func.o: funcname.c - keybind.o: funcname2.h ---- w3m-0.1.10/gc/os_dep.c Tue Jan 4 14:46:50 2000 -+++ w3m-0.1.10-6/gc/os_dep.c Sun Jun 11 16:37:16 2000 -@@ -732,7 +732,9 @@ - if (!(flags & OBJWRITE)) continue; - if (!(flags & OBJREAD)) continue; - if (flags & OBJINVALID) { -+#ifndef __EMX__ - GC_err_printf0("Object with invalid pages?\n"); -+#endif - continue; - } - GC_add_roots_inner(O32_BASE(seg), O32_BASE(seg)+O32_SIZE(seg), FALSE); diff --git a/XMakefile b/XMakefile @@ -4,19 +4,20 @@ SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \ OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\ form.o map.o frame.o rc.o menu.o mailcap.o\ func.o cookie.o history.o backend.o $(KEYBIND_OBJ) -LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c hash.c parsetagx.c\ +LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c parsetagx.c\ tagtable.c istream.c -LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o hash.o parsetagx.o\ +LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o parsetagx.o\ tagtable.o istream.o LLOBJS=version.o -ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o +ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o entity.o hash.o ALIB=libindep.a ALLOBJS=$(OBJS) $(LOBJS) $(LLOBJS) TARGET=w3m$(EXT) BOOKMARKER=w3mbookmark$(EXT) HELPER=w3mhelperpanel$(EXT) -TARGETS=$(TARGET) $(BOOKMARKER) $(HELPER) +INFLATE=inflate$(EXT) +TARGETS=$(TARGET) $(EXT_TARGETS) INCLUDES=-I. @@ -39,7 +40,10 @@ $(ALIB): $(ALIBOBJS) $(OBJS): fm.h funcname1.h tagtable.c: html.h tagtable.tab mktable$(EXT) - ./mktable 100 tagtable.tab > tagtable.c + ./mktable$(EXT) 100 tagtable.tab > tagtable.c + +# entity.h: html.h entity.tab mktable$(EXT) +# ./mktable 100 entity.tab > entity.h func.o: funcname.c keybind.o: funcname2.h @@ -47,7 +51,7 @@ keybind_lynx.o: funcname2.h parsetagx.o: html.c funcname.c: funcname.tab - awk -f funcname0.awk funcname.tab > funcname.c + sort funcname.tab | awk -f funcname0.awk > funcname.c funcname1.h: funcname.tab awk -f funcname1.awk funcname.tab > funcname1.h @@ -64,8 +68,14 @@ $(BOOKMARKER): w3mbookmark.o $(ALIB) $(GCTARGET) $(HELPER): w3mhelperpanel.o $(ALIB) $(GCTARGET) $(CC) $(CFLAGS) -o $(HELPER) w3mhelperpanel.o $(LIBS) +$(INFLATE): inflate.o + $(CC) $(CFLAGS) $(Z_CFLAGS) -o $(INFLATE) inflate.o $(ZLIB) + +inflate.o: inflate.c + $(CC) $(CFLAGS) $(Z_CFLAGS) -c inflate.c + gc/gc.a: - cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS)' + cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS) $(GC_CFLAGS)' SPECIALCFLAGS='-I./\$(srcdir)/include $(GC_CFLAGS)' install: $(TARGETS) -$(MKDIR) $(DESTDIR)$(BIN_DIR) @@ -77,7 +87,7 @@ install: $(TARGETS) $(INSTALL) -m 644 w3mhelp-lynx_en.html $(DESTDIR)$(HELP_DIR)/w3mhelp-lynx_en.html $(INSTALL) -m 644 w3mhelp-lynx_ja.html $(DESTDIR)$(HELP_DIR)/w3mhelp-lynx_ja.html $(INSTALL) -m 644 $(HELP_FILE) $(DESTDIR)$(HELP_DIR)/w3mhelp.html - for d in $(BOOKMARKER) $(HELPER); do $(INSTALL) -m 755 $$d $(DESTDIR)$(LIB_DIR)/$$d; done + for d in $(EXT_TARGETS); do $(INSTALL) -m 755 $$d $(DESTDIR)$(LIB_DIR)/$$d; done (cd scripts; for i in *.cgi; do $(INSTALL2) -m 755 $$i $(DESTDIR)$(LIB_DIR)/$$i; done) uninstall: @@ -87,6 +97,9 @@ uninstall: -$(RM) $(HELP_DIR)/w3mhelp-w3m_en.html -$(RM) $(HELP_DIR)/w3mhelp-w3m_ja.html -$(RM) $(HELP_DIR)/w3mhelp.html + -$(RM) $(LIB_DIR)/$(BOOKMARKER) + -$(RM) $(LIB_DIR)/$(HELPER) + -$(RM) $(LIB_DIR)/$(INFLATE) clean: sweep rm -f *.o *.a $(TARGETS) mktable$(EXT) diff --git a/XMakefile.dist b/XMakefile.dist @@ -1,22 +1,23 @@ SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \ form.c map.c frame.c rc.c menu.c mailcap.c\ - func.c cookie.c history.c $(KEYBIND_SRC) + func.c cookie.c history.c backend.c $(KEYBIND_SRC) OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\ form.o map.o frame.o rc.o menu.o mailcap.o\ - func.o cookie.o history.o $(KEYBIND_OBJ) -LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c hash.c parsetagx.c\ + func.o cookie.o history.o backend.o $(KEYBIND_OBJ) +LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c parsetagx.c\ tagtable.c istream.c -LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o hash.o parsetagx.o\ +LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o parsetagx.o\ tagtable.o istream.o LLOBJS=version.o -ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o +ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o entity.o hash.o ALIB=libindep.a ALLOBJS=$(OBJS) $(LOBJS) $(LLOBJS) TARGET=w3m$(EXT) BOOKMARKER=w3mbookmark$(EXT) HELPER=w3mhelperpanel$(EXT) -TARGETS=$(TARGET) $(BOOKMARKER) $(HELPER) +INFLATE=inflate$(EXT) +TARGETS=$(TARGET) $(EXT_TARGETS) INCLUDES=-I. @@ -41,13 +42,16 @@ $(OBJS): fm.h funcname1.h tagtable.c: html.h tagtable.tab mktable$(EXT) ./mktable 100 tagtable.tab > tagtable.c +# entity.h: html.h entity.tab mktable$(EXT) +# ./mktable 100 entity.tab > entity.h + func.o: funcname.c keybind.o: funcname2.h keybind_lynx.o: funcname2.h parsetagx.o: html.c funcname.c: funcname.tab - awk -f funcname0.awk funcname.tab > funcname.c + sort funcname.tab | awk -f funcname0.awk > funcname.c funcname1.h: funcname.tab awk -f funcname1.awk funcname.tab > funcname1.h @@ -64,8 +68,14 @@ $(BOOKMARKER): w3mbookmark.o $(ALIB) $(GCTARGET) $(HELPER): w3mhelperpanel.o $(ALIB) $(GCTARGET) $(CC) $(CFLAGS) -o $(HELPER) w3mhelperpanel.o $(LIBS) +$(INFLATE): inflate.o + $(CC) $(CFLAGS) $(Z_CFLAGS) -o $(INFLATE) inflate.o $(ZLIB) + +inflate.o: inflate.c + $(CC) $(CFLAGS) $(Z_CFLAGS) -c inflate.c + gc/gc.a: - cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS)' + cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS) $(GC_CFLAGS)' SPECIALCFLAGS='-I./\$(srcdir)/include $(GC_CFLAGS)' install: $(TARGETS) -$(MKDIR) $(DESTDIR)$(BIN_DIR) @@ -77,7 +87,7 @@ install: $(TARGETS) $(INSTALL) -m 644 w3mhelp-lynx_en.html $(DESTDIR)$(HELP_DIR)/w3mhelp-lynx_en.html $(INSTALL) -m 644 w3mhelp-lynx_ja.html $(DESTDIR)$(HELP_DIR)/w3mhelp-lynx_ja.html $(INSTALL) -m 644 $(HELP_FILE) $(DESTDIR)$(HELP_DIR)/w3mhelp.html - for d in $(BOOKMARKER) $(HELPER); do $(INSTALL) -m 755 $$d $(DESTDIR)$(LIB_DIR)/$$d; done + for d in $(EXT_TARGETS); do $(INSTALL) -m 755 $$d $(DESTDIR)$(LIB_DIR)/$$d; done (cd scripts; for i in *.cgi; do $(INSTALL2) -m 755 $$i $(DESTDIR)$(LIB_DIR)/$$i; done) uninstall: @@ -87,6 +97,9 @@ uninstall: -$(RM) $(HELP_DIR)/w3mhelp-w3m_en.html -$(RM) $(HELP_DIR)/w3mhelp-w3m_ja.html -$(RM) $(HELP_DIR)/w3mhelp.html + -$(RM) $(LIB_DIR)/$(BOOKMARKER) + -$(RM) $(LIB_DIR)/$(HELPER) + -$(RM) $(LIB_DIR)/$(INFLATE) clean: sweep rm -f *.o *.a $(TARGETS) mktable$(EXT) diff --git a/XXMakefile b/XXMakefile @@ -4,20 +4,24 @@ BIN_DIR = /usr/local/bin HELP_DIR = /usr/local/lib/w3m LIB_DIR = /usr/local/lib/w3m HELP_FILE = w3mhelp-w3m_ja.html -SYS_LIBRARIES = -lgpm -lbsd -lnsl -ltermcap -L/usr/local/ssl/lib -lssl -lcrypto +SYS_LIBRARIES = -lgpm -lbsd -lnsl -lncurses -L/usr/lib -L/usr/lib -L/usr/local/ssl/lib -L/usr/local/ssl/lib -lssl -lcrypto LOCAL_LIBRARIES = CC = gcc -MYCFLAGS = -g -Wall -I./gc/include -I/usr/local/ssl/include/openssl -I/usr/local/ssl/include -GCCFLAGS = -g -Wall -I./gc/include -DATOMIC_UNCOLLECTABLE -DNO_EXECUTE_PERMISSION -DALL_INTERIOR_POINTERS -DSILENT -DNO_DEBUGGING #-DNO_SIGNALS +MYCFLAGS = -O -I./gc/include -I/usr/local/ssl/include/openssl -I/usr/local/ssl/include +GCCFLAGS = -O -I./gc/include -I./$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS KEYBIND_SRC = keybind.c KEYBIND_OBJ = keybind.o EXT= MATHLIB=-lm +Z_CFLAGS=-I/usr/include +ZLIB=-L/usr/lib -lz +EXT_TARGETS=$(BOOKMARKER) $(HELPER) $(INFLATE) +GC_CFLAGS= GCLIB=gc/gc.a GCTARGET=gc/gc.a RANLIB=ranlib MKDIR=mkdir -p -VERSION=0.2.1 +VERSION=0.2.1-inu-1.5 MODEL=Linux.i686-monster-ja #else SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \ @@ -26,19 +30,20 @@ SRCS=main.c file.c buffer.c display.c etc.c search.c linein.c table.c local.c \ OBJS=main.o file.o buffer.o display.o etc.o search.o linein.o table.o local.o\ form.o map.o frame.o rc.o menu.o mailcap.o\ func.o cookie.o history.o backend.o $(KEYBIND_OBJ) -LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c hash.c parsetagx.c\ +LSRCS=terms.c conv.c url.c ftp.c anchor.c mimehead.c parsetagx.c\ tagtable.c istream.c -LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o hash.o parsetagx.o\ +LOBJS=terms.o conv.o url.o ftp.o anchor.o mimehead.o parsetagx.o\ tagtable.o istream.o LLOBJS=version.o -ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o +ALIBOBJS=Str.o indep.o regex.o textlist.o parsetag.o myctype.o entity.o hash.o ALIB=libindep.a ALLOBJS=$(OBJS) $(LOBJS) $(LLOBJS) TARGET=w3m$(EXT) BOOKMARKER=w3mbookmark$(EXT) HELPER=w3mhelperpanel$(EXT) -TARGETS=$(TARGET) $(BOOKMARKER) $(HELPER) +INFLATE=inflate$(EXT) +TARGETS=$(TARGET) $(EXT_TARGETS) INCLUDES=-I. @@ -61,7 +66,10 @@ $(ALIB): $(ALIBOBJS) $(OBJS): fm.h funcname1.h tagtable.c: html.h tagtable.tab mktable$(EXT) - ./mktable 100 tagtable.tab > tagtable.c + ./mktable$(EXT) 100 tagtable.tab > tagtable.c + +# entity.h: html.h entity.tab mktable$(EXT) +# ./mktable 100 entity.tab > entity.h func.o: funcname.c keybind.o: funcname2.h @@ -69,7 +77,7 @@ keybind_lynx.o: funcname2.h parsetagx.o: html.c funcname.c: funcname.tab - awk -f funcname0.awk funcname.tab > funcname.c + sort funcname.tab | awk -f funcname0.awk > funcname.c funcname1.h: funcname.tab awk -f funcname1.awk funcname.tab > funcname1.h @@ -86,8 +94,14 @@ $(BOOKMARKER): w3mbookmark.o $(ALIB) $(GCTARGET) $(HELPER): w3mhelperpanel.o $(ALIB) $(GCTARGET) $(CC) $(CFLAGS) -o $(HELPER) w3mhelperpanel.o $(LIBS) +$(INFLATE): inflate.o + $(CC) $(CFLAGS) $(Z_CFLAGS) -o $(INFLATE) inflate.o $(ZLIB) + +inflate.o: inflate.c + $(CC) $(CFLAGS) $(Z_CFLAGS) -c inflate.c + gc/gc.a: - cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS)' + cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS) $(GC_CFLAGS)' SPECIALCFLAGS='-I./\$(srcdir)/include $(GC_CFLAGS)' install: $(TARGETS) -$(MKDIR) $(DESTDIR)$(BIN_DIR) @@ -99,7 +113,7 @@ install: $(TARGETS) $(INSTALL) -m 644 w3mhelp-lynx_en.html $(DESTDIR)$(HELP_DIR)/w3mhelp-lynx_en.html $(INSTALL) -m 644 w3mhelp-lynx_ja.html $(DESTDIR)$(HELP_DIR)/w3mhelp-lynx_ja.html $(INSTALL) -m 644 $(HELP_FILE) $(DESTDIR)$(HELP_DIR)/w3mhelp.html - for d in $(BOOKMARKER) $(HELPER); do $(INSTALL) -m 755 $$d $(DESTDIR)$(LIB_DIR)/$$d; done + for d in $(EXT_TARGETS); do $(INSTALL) -m 755 $$d $(DESTDIR)$(LIB_DIR)/$$d; done (cd scripts; for i in *.cgi; do $(INSTALL2) -m 755 $$i $(DESTDIR)$(LIB_DIR)/$$i; done) uninstall: @@ -109,6 +123,9 @@ uninstall: -$(RM) $(HELP_DIR)/w3mhelp-w3m_en.html -$(RM) $(HELP_DIR)/w3mhelp-w3m_ja.html -$(RM) $(HELP_DIR)/w3mhelp.html + -$(RM) $(LIB_DIR)/$(BOOKMARKER) + -$(RM) $(LIB_DIR)/$(HELPER) + -$(RM) $(LIB_DIR)/$(INFLATE) clean: sweep rm -f *.o *.a $(TARGETS) mktable$(EXT) diff --git a/anchor.c b/anchor.c @@ -96,7 +96,6 @@ registerForm(Buffer * buf, FormList * flist, struct parsed_tag * tag, int line, &a, NULL, line, pos); - fi->anchor_num = buf->formitem->nanchor - 1; return a; } @@ -358,7 +357,7 @@ putHmarker(HmarkerList * ml, int line, int pos, int seq) } if (ml->markmax == 0) { ml->markmax = FIRST_MARKER_SIZE; - ml->marks = New_N(BufferPoint, ml->markmax); + ml->marks = NewAtom_N(BufferPoint, ml->markmax); #ifdef __CYGWIN__ bzero((char *) ml->marks, sizeof(BufferPoint) * ml->markmax); #else /* not __CYGWIN__ */ @@ -418,3 +417,59 @@ closest_prev_anchor(AnchorList * a, Anchor * an, int x, int y) } return an; } + +void +addMultirowsForm(Buffer *buf, AnchorList *al) +{ + int i, j, k, col, ecol, pos; + Anchor a_form, *a; + FormItemList *fi; + Line *l, *ls; + + if (al == NULL || al->nanchor == 0) + return; + for (i = 0; i < al->nanchor; i++) { + a_form = al->anchors[i]; + al->anchors[i].rows = 1; + if (a_form.hseq < 0 || a_form.rows <= 1) + continue; + for (l = buf->firstLine; l != NULL; l = l->next) { + if (l->linenumber == a_form.y) + break; + } + if (! l) + continue; + if (a_form.y == a_form.start.line) + ls = l; + else { + for (ls = l; ls != NULL; + ls = (a_form.y < a_form.start.line) ? ls->next : ls->prev) { + if (ls->linenumber == a_form.start.line) + break; + } + if (! ls) + continue; + } + fi = (FormItemList *) a_form.url; + col = COLPOS(ls, a_form.start.pos); + ecol = COLPOS(ls, a_form.end.pos); + for (j = 0; l && j < a_form.rows; l = l->next, j++) { + pos = columnPos(l, col); + if (j == 0) { + buf->hmarklist->marks[a_form.hseq].line = l->linenumber; + buf->hmarklist->marks[a_form.hseq].pos = pos; + } + if (a_form.start.line == l->linenumber) + continue; + buf->formitem = putAnchor(buf->formitem, a_form.url, + a_form.target, &a, NULL, l->linenumber, pos); + a->hseq = a_form.hseq; + a->y = a_form.y; + a->end.pos = pos + ecol - col; + l->lineBuf[pos - 1] = '['; + l->lineBuf[a->end.pos] = ']'; + for (k = pos; k < a->end.pos; k++) + l->propBuf[k] |= PE_FORM; + } + } +} diff --git a/backend.c b/backend.c @@ -203,7 +203,7 @@ static void post( TextList *argv ){ url = p; } if( url ){ - request = newFormList( NULL, "post", charset, enctype, target, NULL ); + request = newFormList( NULL, "post", charset, enctype, target, NULL, NULL ); request->body = body; request->boundary = boundary; request->length = ( length > 0 )? length : ( body ? strlen(body) : 0 ); @@ -246,11 +246,10 @@ static void show( TextList *argv ){ /* Command: quit */ static void quit( TextList *argv ){ - deleteFiles(); #ifdef USE_COOKIE save_cookies(); #endif /* USE_COOKIE */ - exit(0); + w3m_exit(0); } @@ -298,13 +297,10 @@ static void call_command_function( char *str ){ /* Main function */ int backend( void ){ char *str; - extern int w3m_dump; /* Declared in main.c. */ - w3m_dump = FALSE; - w3m_halfdump = FALSE; + w3m_dump = 0; if (COLS == 0) COLS = 80; #ifdef MOUSE - mouse_end(); use_mouse = FALSE; #endif /* MOUSE */ diff --git a/buffer.c b/buffer.c @@ -96,9 +96,11 @@ discardBuffer(Buffer * buf) if (buf->real_scheme != SCM_LOCAL || buf->bufferprop & BP_FRAME) unlink(buf->sourcefile); } + if (buf->mailcap_source) + unlink(buf->mailcap_source); while (buf->frameset) { deleteFrameSet(buf->frameset); - buf->frameset = popFrameTree(&(buf->frameQ), NULL, NULL); + buf->frameset = popFrameTree(&(buf->frameQ)); } } @@ -202,7 +204,7 @@ writeBufferName(Buffer * buf, int n) case SCM_LOCAL_CGI: if (strcmp(buf->currentURL.file, "-")) { Strcat_char(msg, ' '); - Strcat_charp(msg, buf->filename); + Strcat_charp(msg, conv_from_system(buf->currentURL.real_file)); } break; case SCM_UNKNOWN: @@ -476,7 +478,6 @@ selectBuffer(Buffer * firstbuf, Buffer * currentbuf, char *selectchar) } } - /* * Reshape HTML buffer */ @@ -487,8 +488,10 @@ reshapeBuffer(Buffer * buf) int top, linenum, cursorY, pos, currentColumn; AnchorList *formitem; + if (buf->sourcefile == NULL) + return; init_stream(&f, SCM_LOCAL, NULL); - examineFile(buf->sourcefile, &f); + examineFile(buf->mailcap_source ? buf->mailcap_source : buf->sourcefile, &f); if (f.stream == NULL) return; @@ -505,7 +508,7 @@ reshapeBuffer(Buffer * buf) clearBuffer(buf); while (buf->frameset) { deleteFrameSet(buf->frameset); - buf->frameset = popFrameTree(&(buf->frameQ), NULL, NULL); + buf->frameset = popFrameTree(&(buf->frameQ)); } formitem = buf->formitem; @@ -515,12 +518,20 @@ reshapeBuffer(Buffer * buf) buf->formitem = NULL; buf->width = INIT_BUFFER_WIDTH; - loadHTMLstream(&f, buf, NULL, FALSE); +#ifdef JP_CHARSET + UseContentCharset = FALSE; + UseAutoDetect = FALSE; +#endif + if (! strcasecmp(buf->type, "text/html")) + loadHTMLBuffer(&f, buf); + else + loadBuffer(&f, buf); UFclose(&f); +#ifdef JP_CHARSET + UseContentCharset = TRUE; + UseAutoDetect = TRUE; +#endif - buf->topLine = buf->firstLine; - buf->lastLine = buf->currentLine; - buf->currentLine = buf->firstLine; buf->height = LASTLINE + 1; buf->topLine = lineSkip(buf, buf->topLine, top - 1, FALSE); gotoLine(buf, linenum); @@ -651,16 +662,16 @@ readBufferCache(Buffer *buf) fread1(l->width, cache) || fread1(l->len, cache)) break; - l->lineBuf = New_N(char, l->len + 1); + l->lineBuf = NewAtom_N(char, l->len + 1); fread(l->lineBuf, 1, l->len, cache); l->lineBuf[l->len] = '\0'; - l->propBuf = New_N(Lineprop, l->len); + l->propBuf = NewAtom_N(Lineprop, l->len); fread(l->propBuf, sizeof(Lineprop), l->len, cache); #ifdef ANSI_COLOR if (fread1(colorflag, cache)) break; if (colorflag) { - l->colorBuf = New_N(Linecolor, l->len); + l->colorBuf = NewAtom_N(Linecolor, l->len); fread(l->colorBuf, sizeof(Linecolor), l->len, cache); } else { l->colorBuf = NULL; diff --git a/config.h b/config.h @@ -54,12 +54,12 @@ /* * Support NNTP */ -#define USE_NNTP +#undef USE_NNTP /* * Support ANSI color escape sequences */ -#define ANSI_COLOR +#undef ANSI_COLOR /* * Enable id attribute @@ -77,11 +77,6 @@ #undef USE_EGD /* - * MENU_MAP enables w3m to show image map link with popup menu. - */ -#define MENU_MAP - -/* * Use Emacs-like key binding for file name completion */ #undef EMACS_LIKE_LINEEDIT @@ -91,6 +86,16 @@ */ #undef ENABLE_REMOVE_TRAILINGSPACES +/* + * Move cursor to top line when going to label. + */ +#undef LABEL_TOPLINE + +/* + * Move cursor to top line when moving to next page. + */ +#undef NEXTPAGE_TOPLINE + /**********************************************************/ #ifdef makefile_parameter @@ -98,25 +103,30 @@ BIN_DIR = /usr/local/bin HELP_DIR = /usr/local/lib/w3m LIB_DIR = /usr/local/lib/w3m HELP_FILE = w3mhelp-w3m_ja.html -SYS_LIBRARIES = -lgpm -lbsd -lnsl -ltermcap -L/usr/local/ssl/lib -lssl -lcrypto +SYS_LIBRARIES = -lgpm -lbsd -lnsl -lncurses -L/usr/lib -L/usr/lib -L/usr/local/ssl/lib -L/usr/local/ssl/lib -lssl -lcrypto LOCAL_LIBRARIES = CC = gcc -MYCFLAGS = -g -Wall -I./gc/include -I/usr/local/ssl/include/openssl -I/usr/local/ssl/include -GCCFLAGS = -g -Wall -I./gc/include -DATOMIC_UNCOLLECTABLE -DNO_EXECUTE_PERMISSION -DALL_INTERIOR_POINTERS -DSILENT -DNO_DEBUGGING #-DNO_SIGNALS +MYCFLAGS = -O -I./gc/include -I/usr/local/ssl/include/openssl -I/usr/local/ssl/include +GCCFLAGS = -O -I./gc/include -I./$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS KEYBIND_SRC = keybind.c KEYBIND_OBJ = keybind.o EXT= MATHLIB=-lm +Z_CFLAGS=-I/usr/include +ZLIB=-L/usr/lib -lz +EXT_TARGETS=$(BOOKMARKER) $(HELPER) $(INFLATE) +GC_CFLAGS= GCLIB=gc/gc.a GCTARGET=gc/gc.a RANLIB=ranlib MKDIR=mkdir -p -VERSION=0.2.1 +VERSION=0.2.1-inu-1.5 MODEL=Linux.i686-monster-ja #else #define DISPLAY_CODE 'E' +#define SYSTEM_CODE 'E' #define JA 0 #define EN 1 @@ -129,13 +139,13 @@ MODEL=Linux.i686-monster-ja #define MENU #define USE_COOKIE #define USE_SSL -#define USE_SSL_VERIFY -#define FTPPASS_HOSTNAMEGEN -#define SHOW_PARAMS +#undef USE_SSL_VERIFY +#undef FTPPASS_HOSTNAMEGEN +#undef SHOW_PARAMS #define DEF_EDITOR "/bin/vi" #define DEF_MAILER "/bin/mail" -#define DEF_EXT_BROWSER "/usr/X11R6/bin/netscape" +#define DEF_EXT_BROWSER "/usr/bin/netscape" #define LIB_DIR "/usr/local/lib/w3m" #define HELP_DIR "/usr/local/lib/w3m" @@ -153,10 +163,11 @@ MODEL=Linux.i686-monster-ja #define USER_MAILCAP RC_DIR "/mailcap" #define SYS_MAILCAP "/etc/mailcap" #define USER_MIMETYPES "~/.mime.types" -#define SYS_MIMETYPES "/usr/lib/mime.types" +#define SYS_MIMETYPES "/usr/local/lib/mime.types" #define DEF_SAVE_FILE "index.html" +#undef USE_BINMODE_STREAM #define TERMIOS #define DIRENT #define STRCASECMP @@ -173,6 +184,8 @@ MODEL=Linux.i686-monster-ja #define READLINK #define HAVE_SETENV #define HAVE_PUTENV +#define HAVE_SRAND48 +#define HAVE_SRANDOM #define READLINK @@ -184,18 +197,37 @@ typedef void MySignalHandler; #define SIGNAL_ARG int _dummy #define SIGNAL_ARGLIST 0 #define SIGNAL_RETURN return +#define HAVE_SETPGRP + /* If you want to use IPv6, define this symbol. */ #undef INET6 + #undef TABLE_EXPAND #undef TABLE_NO_COMPACT #define NOWRAP 1 -#define NEW_FORM 1 #define MATRIX 1 #undef NO_FLOAT_H +#ifndef HAVE_SRAND48 +#ifdef HAVE_SRANDOM +#define srand48 srandom +#define lrand48 random +#else /* HAVE_SRANDOM */ +#define USE_INCLUDED_SRAND48 +#endif /* HAVE_SRANDOM */ +#endif + +#if defined( __CYGWIN32__ ) && !defined( __CYGWIN__ ) +#define __CYGWIN__ +#endif + +#if defined( __CYGWIN__ ) || defined( __EMX__ ) +#define SUPPORT_DOS_DRIVE_PREFIX 1 +#endif + #endif /* makefile_parameter */ #endif /* _CONFIGURED_ */ diff --git a/configure b/configure @@ -4,10 +4,17 @@ # # -sysname=`uname -s` -sysversion=`uname -r` +if ./which uname > /dev/null ; then + sysname=`uname -s` + sysversion=`uname -r` + platform=`uname -m` +elif [ -f /usr/sony/bin/machine -a -f /etc/osversion ]; then + sysname='NEWS-OS' + sysversion=`sed 's/[^ ]* [^ ]* //' /etc/osversion` + platform=`/usr/sony/bin/machine` +fi + host=`hostname` -platform=`uname -m` sysversion1=`echo $sysversion | awk -F. '{print $1}'` sysversion2=`echo $sysversion | awk -F. '{print $2}'` @@ -22,7 +29,7 @@ if [ -f config.param ] ; then fi fi -echo "# Configuretion at $host" > config.param +echo "# Configuration at $host" > config.param # parameters: @@ -63,6 +70,9 @@ do -model=monster|--model=monster) dmodel=5 ;; + -model=custom|--model=custom) + dmodel=6 + ;; -code=*|--code=*) def_dcode=`expr "$1" : "-*code=\(.*\)"` ;; @@ -73,10 +83,10 @@ do echo "-yes, -nonstop Set all parameters to the default" echo "-prefix=DIR Specify prefix (default: /usr/local)" echo "-lang=(en|ja) Specify default language" - echo "-model=(baby|little|mouse|cookie|monster)" + echo "-model=(baby|little|mouse|cookie|monster|custom)" echo " Specify default model" echo "-code=(S|E|j|N|n|m)" - echo " Specify derault kanji code" + echo " Specify default kanji code" echo "-cflags=FLAGS Specify C flags" echo "-help Display help" exit 0 @@ -89,7 +99,7 @@ done # version number: JMMAAA J: major MM: minor AAA: alpha # Alpha number of non-alpha version is 255. # version 4.14alpha1 => 414002 -mygcversion=500003 +mygcversion=600255 if [ -z "`echo -n aho | grep n`" ] ; then Echo() @@ -188,7 +198,7 @@ save_params() { find_ssl() { sslinclude="" - for i1 in /usr /usr/local + for i1 in /usr /usr/local $prefix do for i2 in /openssl /ssl / do @@ -202,7 +212,7 @@ find_ssl() { for i3 in lib/openssl lib do dirname=${i1}${i2}/${i3} - for ext in a so + for ext in a $so_ext do if [ -f $dirname/libssl.$ext -o -f $dirname/libcrypto.$ext ]; then if [ "$ssllib" = -L${dirname} ]; then @@ -249,12 +259,8 @@ echo "% Hello $user. Let's start configuration process for w3m." echo "% Please answer some questions." echo "%" -if [ -n "`echo $sysname | grep CYGWIN`" ]; then - sysname="CYGWIN" - extension='.exe' -else - extension= -fi +extension= +use_binstream='#undef USE_BINMODE_STREAM' topdir=$prefix special_sys='' @@ -262,11 +268,18 @@ case "$sysname" in aix | AIX ) special_sys="#define AIX" ;; - CYGWIN ) + CYGWIN* ) + sysname='CYGWIN' special_sys="#define CYGWIN $sysversion1" if [ $sysversion1 -eq 0 ]; then - topdir=/cygnus/cygwin-b20/H-i586-cygwin32 + topdir=/cygnus/cygwin-b20/H-i586-cygwin32 fi + extension='.exe' + use_binstream='#define USE_BINMODE_STREAM' + ;; + OS/2 ) + extension='.exe' + use_binstream='#define USE_BINMODE_STREAM' ;; NetBSD ) # Newer NetBSD system doesn't define 'unix' symbol anymore, but GC library @@ -275,6 +288,17 @@ case "$sysname" in ;; esac +# determine shared object extension +so_ext=so +case "$sysname" in + HP-UX ) + so_ext=sl + ;; + Darwin ) + so_ext=dylib + ;; +esac + if [ -z "$def_bindir" ]; then def_bindir="$topdir/bin" fi @@ -368,8 +392,14 @@ if [ "$lang" = ja ]; then break done echo "def_dcode=$ncode" >> config.param + if [ "$ncode" = "S" ]; then + scode=S + else + scode=E + fi else ncode=x + scode=x fi echo "Do you want to use Lynx-like key binding?" @@ -435,7 +465,7 @@ else def_use_nntp="#undef USE_NNTP" fi -echo "Do you want ANSI color escape sequences supprot?" +echo "Do you want ANSI color escape sequences support?" yesno ansi_color "$ansi_color" n echo "ansi_color=$ansi_color" >> config.param if [ "$ansi_color" = y ]; then @@ -465,6 +495,7 @@ readanswer ans "$dmodel" if [ -z "$ans" -a -n "$dmodel" ]; then ans=$dmodel fi +dmodel_save="$dmodel" dmodel=$ans case "$ans" in 1) @@ -514,6 +545,15 @@ case "$ans" in customized=y ;; 6) + if [ "X$dmodel_save" = X6 ] + then + if [ "X$use_ssl" = Xy ] + then + find_ssl + fi + save_params + customized=n + fi ;; *) echo "Please input 1-6." @@ -702,9 +742,9 @@ if [ -z "$dtermlib" ]; then for lib in $TERM_LIBS do - for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib + for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib $prefix/lib do - if [ -f $libdir/lib$lib.a -o -f $libdir/lib$lib.so ] ; then + if [ -f $libdir/lib$lib.a -o -f $libdir/lib$lib.$so_ext ] ; then # check if the lib works... Echo "Terminal library -l$lib found at $libdir, " if $cc $cflags -o _zmachdep _zmachdep.c -l$lib > /dev/null 2>&1 @@ -744,7 +784,7 @@ fi use_gpm="" gpmlib="" if [ "$use_mouse" = y ]; then - for libdir in /lib /usr/lib /usr/local/lib + for libdir in /lib /usr/lib /usr/local/lib $prefix/lib do if [ -f $libdir/libgpm.a -o -f $libdir/libgpm.so ]; then echo "GPM library found." @@ -778,9 +818,9 @@ case $sysname in esac for lib in $searchlibs do - for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib + for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib $prefix/lib do - if [ -f $libdir/lib$lib.a -o -f $libdir/lib$lib.so ] ; then + if [ -f $libdir/lib$lib.a -o -f $libdir/lib$lib.$so_ext ] ; then extlib="$extlib -l$lib" break fi @@ -793,18 +833,44 @@ if [ -n "$extlib" ]; then echo "additional library found: $extlib" fi +## Search zlib +zlib= +for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib $prefix/lib ${HOME}/lib +do + if [ -f $libdir/libz.a -o -f $libdir/libz.$so_ext ] ; then + echo "$libdir/libz found" + zlib="-L$libdir -lz" + break + fi +done +z_cflags= +for inc in /usr/include /usr/local/include $prefix/include ${HOME}/include +do + if [ -f $inc/zlib.h ]; then + echo "$inc/zlib.h found" + z_cflags="-I$inc" + break + fi +done +if [ -n "$zlib" -a -n "$z_cflags" ]; then + inflate='$(INFLATE)' +else + echo "Warning: It seems you don't have zlib. Inflate cannot be installed." + inflate= +fi + gclib='' gcinclude='' gctarget='' -for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib ${HOME}/lib +for libdir in /lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib $prefix/lib ${HOME}/lib do - if [ -f $libdir/libgc.a -o -f $libdir/libgc.so ] ; then + if [ -f $libdir/libgc.a -o -f $libdir/libgc.$so_ext ] ; then echo "$libdir/libgc found" gclib="-L$libdir -lgc" break fi done -for inc in /usr/include /usr/include/gc /usr/local/include /usr/local/include/gc ${HOME}/include +for inc in /usr/include /usr/include/gc /usr/local/include /usr/local/include/gc $prefix/include ${HOME}/include do if [ -f $inc/gc.h ]; then echo "$inc/gc.h found" @@ -840,8 +906,8 @@ EOF echo "GC_version is $gcversion." if [ $gcversion -lt $mygcversion ]; then echo "GC library on your system seems to be old." - Echo "Do you want to use GC library comes with w3m?[y] " - read ans + echo "Do you want to use GC library comes with w3m?" + yesno ans y y if [ "$ans" = 'n' -o "$ans" = 'N' ]; then cflags="$cflags -I$gcinclude" else @@ -867,50 +933,19 @@ if [ -z "$gclib" -o -z "$gcinclude" ]; then fi # Apply patch. +gc_cflags='' if [ "$gclib" = "gc/gc.a" -a ! -f patch_done ]; then patchfile="" case "$platform:$sysname" in - [Aa]lpha:Linux) - patchfile=Patches/alpha ;; - [Ss]parc:Linux|sun4*:Linux) - if [ "$sysversion1" = 2 -a "$sysversion2" = 2 ] - then - patchfile=Patches/linux2.2sparc - fi - ;; - ARM*:Linux|arm*:Linux) - patchfile=Patches/armlinux - ;; - [mM]ips*:Linux|MIPS*:Linux) - patchfile=Patches/mipsel - ;; - *:HP-UX) - if [ "$sysversion2" = 11 ] - then - patchfile=Patches/hpux11 - fi - ;; - macppc:NetBSD) - patchfile = Patches/macppc - ;; R3000:*System_V*|R4000:UNIX_SYSV|R*000:UNIX_SV) # EWS-4800 patchfile=Patches/ews4800 + gc_cflags=-Dmips ;; - *:NEWS-OS) - patchfile=Patches/newsos6 - ;; - *:Rhapsody|*:"Mac OS") - # MacOS X - patchfile=Patches/macosx - ;; - *:OS/2) - # OS/2 - patchfile=Patches/os2 esac if [ -n "$patchfile" -a -f "$patchfile" ]; then - patch -p0 < $patchfile + patch -lp0 < $patchfile echo "dpatch='$patch'" >> config.param touch patch_done fi @@ -933,7 +968,7 @@ echo "Checking machine dependency." ###### mime.types MIME_TYPES="" -for d in /usr/lib /usr/local/lib /usr/local/lib/mosaic /usr/local/mosaic /usr/local/netscape /usr/local/lib/netscape +for d in /usr/lib /usr/local/lib $prefix/lib /usr/local/lib/mosaic /usr/local/mosaic /usr/local/netscape /usr/local/lib/netscape do if [ -f $d/mime.types ]; then MIME_TYPES="$d/mime.types" @@ -1247,6 +1282,40 @@ else jmpbuf_def="#define JMP_BUF jmp_buf" fi +####### srand48 +cat > _zmachdep.c << EOF +#include <stdlib.h> +main() +{ + srand48(0); +} +EOF +if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +then + echo "You have srand48()." + srand48_flg="#define HAVE_SRAND48" +else + echo "You don't have srand48()." + srand48_flg="#undef HAVE_SRAND48" +fi + +####### srandom +cat > _zmachdep.c << EOF +#include <stdlib.h> +main() +{ + srandom(0); +} +EOF +if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +then + echo "You have srandom()." + srandom_flg="#define HAVE_SRANDOM" +else + echo "You don't have srandom()." + srandom_flg="#undef HAVE_SRANDOM" +fi + ####### fclose cat > _zmachdep.c << EOF #include <stdio.h> @@ -1385,6 +1454,66 @@ else no_float_h='#define NO_FLOAT_H 1' fi +####### setpgrp(pid, pgrp) or setpgrp() ? +cat > _zmachdep.c << EOF +#include <unistd.h> +int main(){ + int pid; + if((pid = fork()) == 0 ) + setpgrp(); +} +EOF +if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +then + echo "You have setpgrp()." + have_setpgrp='#define HAVE_SETPGRP' +else + cat > _zmachdep.c << EOF +#include <unistd.h> +int main(){ + int pid; + if((pid = fork()) == 0 ) + setpgrp( 0, 0 ); +} +EOF + if $cc $cflags -o _zmachdep _zmachdep.c $extlib > /dev/null 2>&1 + then + echo "You have setpgrp( pid, pgrp )." + have_setpgrp='#define HAVE_SETPGRP' + setpgrp='#define setpgrp() setpgrp( 0, 0 )' + else + have_setpgrp='' + fi +fi + +###### atexit/on_exit +# cat > _zmachdep.c <<EOF +# main() +# { +# atexit( sleep(1) ); +# } +# EOF +# if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +# then +# echo "You have atexit()." +# atexit_flg="#define HAVE_ATEXIT" +# else +# cat > _zmachdep.c <<EOF +# #include <stdio.h> +# main() +# { +# on_exit( sleep(1), NULL ); +# } +# EOF +# if $cc $cflags -o _zmachdep _zmachdep.c > /dev/null 2>&1 +# then +# echo "You have on_exit()." +# atexit_flg="#define atexit(x) on_exit(x, NULL)" +# else +# echo "You don't have atexit()/on_exit()" +# fi +# fi + ###### IPv6 support check cat > _zmachdep.c <<EOF #include <sys/types.h> @@ -1398,7 +1527,9 @@ main() } EOF ipv6="#undef INET6" +v6_ss_family="" v6lib='' + if $cc $cflags -o _zmachdep _zmachdep.c $extlib > /dev/null 2>&1 then if ./_zmachdep; then @@ -1421,7 +1552,7 @@ EOF then echo "You have getaddrinfo() in libc." else - for libdir in /usr/local/v6/lib /usr/local/lib /usr/lib + for libdir in /usr/local/v6/lib /usr/local/lib /usr/lib $prefix/lib do if [ -e $libdir/libinet6.a ]; then if [ "$libdir" != "/usr/lib" ]; then @@ -1446,6 +1577,40 @@ EOF ;; esac fi + +####### ss_family or __ss_family ? +if [ "$ipv6" = "#define INET6" ]; then + cat > _zmachdep.c <<EOF +#include <sys/types.h> +#include <sys/socket.h> +int main() { + struct sockaddr_storage ss; + int i = ss.ss_family; +} +EOF + if $cc $cflags -o _zmachdep _zmachdep.c $extlib > /dev/null 2>&1 + then + echo "You have ss_family." + else + cat > _zmachdep.c <<EOF +#include <sys/types.h> +#include <sys/socket.h> +int main() { + struct sockaddr_storage ss; + int i = ss.__ss_family; +} +EOF + if $cc $cflags -o _zmachdep _zmachdep.c $extlib > /dev/null 2>&1 + then + echo "You have __ss_family." + ipv6_ss_family="#define ss_family __ss_family" + else + echo "You don't have ss_family." + ipv6="#undef INET6" + fi + fi +fi + if [ "$ipv6" = "#undef INET6" ]; then echo "You don't have IPv6 support." else @@ -1566,11 +1731,6 @@ $def_ansi_color #undef USE_EGD /* - * MENU_MAP enables w3m to show image map link with popup menu. - */ -#define MENU_MAP - -/* * Use Emacs-like key binding for file name completion */ #undef EMACS_LIKE_LINEEDIT @@ -1580,6 +1740,16 @@ $def_ansi_color */ #undef ENABLE_REMOVE_TRAILINGSPACES +/* + * Move cursor to top line when going to label. + */ +#undef LABEL_TOPLINE + +/* + * Move cursor to top line when moving to next page. + */ +#undef NEXTPAGE_TOPLINE + /**********************************************************/ #ifdef makefile_parameter @@ -1591,11 +1761,15 @@ SYS_LIBRARIES = $gpmlib $extlib $termlib $ssllib $v6lib LOCAL_LIBRARIES = $ldflags CC = $cc MYCFLAGS = $cflags $bsdinclude $sslinclude -GCCFLAGS = $cflags -DATOMIC_UNCOLLECTABLE -DNO_EXECUTE_PERMISSION -DALL_INTERIOR_POINTERS -DSILENT -DNO_DEBUGGING #-DNO_SIGNALS +GCCFLAGS = $cflags -I./\$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS KEYBIND_SRC = $keymap_file.c KEYBIND_OBJ = $keymap_file.o EXT=$extension MATHLIB=$mathlib +Z_CFLAGS=$z_cflags +ZLIB=$zlib +EXT_TARGETS=\$(BOOKMARKER) \$(HELPER) $inflate +GC_CFLAGS=$gc_cflags GCLIB=$gclib GCTARGET=$gctarget RANLIB=$ranlib_cmd @@ -1606,6 +1780,7 @@ MODEL=$sysname.$platform-$modelname-$lang $special_sys #define DISPLAY_CODE '$ncode' +#define SYSTEM_CODE '$scode' #define JA 0 #define EN 1 @@ -1646,6 +1821,7 @@ $def_show_params #define DEF_SAVE_FILE "index.html" +$use_binstream $term_if $dir_if $strcasecmp_flg @@ -1662,6 +1838,8 @@ $getwd_flg $readlink_flg $setenv_flg $putenv_flg +$srand48_flg +$srandom_flg $readlink_flg $fclose_dcl $pclose_dcl @@ -1673,18 +1851,37 @@ $sig_type $sig_arg $sig_arglist $sig_return +$have_setpgrp +$setpgrp /* If you want to use IPv6, define this symbol. */ $ipv6 +$ipv6_ss_family #undef TABLE_EXPAND #undef TABLE_NO_COMPACT #define NOWRAP 1 -#define NEW_FORM 1 #define MATRIX 1 $no_float_h +#ifndef HAVE_SRAND48 +#ifdef HAVE_SRANDOM +#define srand48 srandom +#define lrand48 random +#else /* HAVE_SRANDOM */ +#define USE_INCLUDED_SRAND48 +#endif /* HAVE_SRANDOM */ +#endif + +#if defined( __CYGWIN32__ ) && !defined( __CYGWIN__ ) +#define __CYGWIN__ +#endif + +#if defined( __CYGWIN__ ) || defined( __EMX__ ) +#define SUPPORT_DOS_DRIVE_PREFIX 1 +#endif + #endif /* makefile_parameter */ #endif /* _CONFIGURED_ */ @@ -1699,14 +1896,7 @@ perl=`./which perl` if [ `expr "$perl" : 'not found'` != 0 ]; then perl=/usr/local/bin/perl fi -if [ $sysname = CYGWIN ]; then - cygwin=1 -else - cygwin=0 -fi sed -e "s;@PERL@;$perl;" \ - -e "s;@CYGWIN@;$cygwin;" \ scripts/dirlist.in > scripts/dirlist.cgi - echo 'Configuration done. Just type "make".' diff --git a/conv.c b/conv.c @@ -141,7 +141,7 @@ static void n_impr(char s) { fprintf(stderr, "conv: option %c(0x%02x) is not implemented yet... sorry\n", s, s); - exit(1); + w3m_exit(1); } Str diff --git a/cookie.c b/cookie.c @@ -552,7 +552,7 @@ cookie_list_panel(void) Strcat_charp(src, "<ol>"); for (p = First_cookie, i = 0; p; p = p->next, i++) { - tmp = htmlquote_str(parsedURL2Str(&p->url)->ptr); + tmp = html_quote(parsedURL2Str(&p->url)->ptr); if (p->expires != (time_t) - 1) { #ifdef HAVE_STRFTIME strftime(tmp2, 80, "%a, %d %b %Y %H:%M:%S GMT", gmtime(&p->expires)); @@ -590,20 +590,20 @@ cookie_list_panel(void) Strcat_charp(src, "<table cellpadding=0>"); if (!(p->flag & COO_SECURE)) { Strcat_charp(src, "<tr><td width=\"80\"><b>Cookie:</b></td><td>"); - Strcat_charp(src, htmlquote_str(make_cookie(p)->ptr)); + Strcat_charp(src, html_quote(make_cookie(p)->ptr)); Strcat_charp(src, "</td></tr>"); } if (p->comment) { Strcat_charp(src, "<tr><td width=\"80\"><b>Comment:</b></td><td>"); - Strcat_charp(src, htmlquote_str(p->comment->ptr)); + Strcat_charp(src, html_quote(p->comment->ptr)); Strcat_charp(src, "</td></tr>"); } if (p->commentURL) { Strcat_charp(src, "<tr><td width=\"80\"><b>CommentURL:</b></td><td>"); Strcat_charp(src, "<a href=\""); - Strcat_charp(src, htmlquote_str(p->commentURL->ptr)); + Strcat_charp(src, html_quote(p->commentURL->ptr)); Strcat_charp(src, "\">"); - Strcat_charp(src, htmlquote_str(p->commentURL->ptr)); + Strcat_charp(src, html_quote(p->commentURL->ptr)); Strcat_charp(src, "</a>"); Strcat_charp(src, "</td></tr>"); } @@ -619,17 +619,17 @@ cookie_list_panel(void) Strcat_charp(src, "</td></tr><tr><td>"); if (p->domain) { Strcat_charp(src, "<tr><td width=\"80\"><b>Domain:</b></td><td>"); - Strcat_charp(src, htmlquote_str(p->domain->ptr)); + Strcat_charp(src, html_quote(p->domain->ptr)); Strcat_charp(src, "</td></tr>"); } if (p->path) { Strcat_charp(src, "<tr><td width=\"80\"><b>Path:</b></td><td>"); - Strcat_charp(src, htmlquote_str(p->path->ptr)); + Strcat_charp(src, html_quote(p->path->ptr)); Strcat_charp(src, "</td></tr>"); } if (p->portl) { Strcat_charp(src, "<tr><td width=\"80\"><b>Port:</b></td><td>"); - Strcat_charp(src, htmlquote_str(portlist2str(p->portl)->ptr)); + Strcat_charp(src, html_quote(portlist2str(p->portl)->ptr)); Strcat_charp(src, "</td></tr>"); } Strcat_charp(src, "<tr><td width=\"80\"><b>Secure:</b></td><td>"); diff --git a/deflate.c b/deflate.c @@ -0,0 +1,58 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <zlib.h> + +#undef BUFSIZE +#define BUFSIZE 4096 + +int +main(int argc, char **argv) +{ + z_stream s; + FILE *f; + char inbuf[BUFSIZE], outbuf[BUFSIZE]; + int status, flush; + + if (argc > 1) { + f = fopen(argv[1], "rb"); + if (! f) + exit(1); + } else + f = stdin; + + s.zalloc = Z_NULL; + s.zfree = Z_NULL; + s.opaque = Z_NULL; + status = deflateInit(&s, Z_DEFAULT_COMPRESSION); + if (status != Z_OK) + exit(1); + s.avail_in = 0; + s.next_out = outbuf; + s.avail_out = sizeof(outbuf); + flush = Z_NO_FLUSH; + while (1) { + if (s.avail_in == 0) { + s.next_in = inbuf; + s.avail_in = fread(inbuf, 1, sizeof(inbuf), f); + if (s.avail_in < sizeof(inbuf)) + flush = Z_FINISH; + } + status = deflate(&s, flush); + if (status == Z_STREAM_END) { + if (sizeof(outbuf) - s.avail_out) + fwrite(outbuf, 1, sizeof(outbuf) - s.avail_out, stdout); + break; + } + if (status != Z_OK) + exit(1); + if (s.avail_out == 0) { + fwrite(outbuf, 1, sizeof(outbuf), stdout); + s.next_out = outbuf; + s.avail_out = sizeof(outbuf); + } + } + deflateEnd(&s); + fclose(f); + return 0; +} diff --git a/dict.c b/dict.c @@ -1,137 +0,0 @@ - -/* - * From g96p0935@mse.waseda.ac.jp Mon Jun 14 09:34:15 1999 Received: from - * ei5sun.yz.yamagata-u.ac.jp (ei5sun.yz.yamagata-u.ac.jp [133.24.114.42]) - * by ei5nazha.yz.yamagata-u.ac.jp (8.9.3/8.9.3) with ESMTP id JAA20673 for - * <aito@ei5nazha.yz.yamagata-u.ac.jp>; Mon, 14 Jun 1999 09:34:14 +0900 - * (JST) Received: from pandora.mse.waseda.ac.jp - * (root@pandora.mse.waseda.ac.jp [133.9.5.9]) by - * ei5sun.yz.yamagata-u.ac.jp (8.8.0/3.5Wbeta) with ESMTP id JAA23968 for - * <aito@ei5sun.yz.yamagata-u.ac.jp>; Mon, 14 Jun 1999 09:35:30 +0900 (JST) - * Received: from localhost (root@[133.9.85.55]) by pandora.mse.waseda.ac.jp - * (8.9.1+3.0W/3.7W) with ESMTP id JAA18473; Mon, 14 Jun 1999 09:30:31 +0900 - * (JST) Message-Id: <199906140030.JAA18473@pandora.mse.waseda.ac.jp> To: - * aito@ei5sun.yz.yamagata-u.ac.jp Subject: w3m:$B1QOB<-E58!:w5!G=Ec:\(B - * Cc: g96p0935@mse.waseda.ac.jp From: Takashi Nishimoto - * <g96p0935@mse.waseda.ac.jp> X-Mailer: Mew version 1.93 on Emacs 19.34 / - * Mule 2.3 (SUETSUMUHANA) Mime-Version: 1.0 Content-Type: Text/Plain; - * charset=iso-2022-jp Content-Transfer-Encoding: 7bit Date: Mon, 14 Jun - * 1999 09:29:56 +0900 X-Dispatcher: imput version 980506 Lines: 150 - * - * $B@>K\(B@$BAaBg$G$9!#(B - * - * Quick Hack $B$G(B w3m - * $B$K1QOB<-E58!:w5!G=$HC18lC10L$N%+!<%=%k0\F0$r<BAu$7$^(B $B$7$?!#(B - * - * Unix $B$r;H$C$F$$$k$H!"1QJ8$rFI$`5!2q$,B?$$$G$9$M!#(B Emacs - * $BFb$G$O%o%s%?%C%A$G1QOB<-E5$r8!:w$9$k(B sdic - * $B$N$h$&$J%D!<%k$,$"$j$^(B - * $B$9$,!"$A$g$C$H$7$?J8=q$rFI$`$@$1$K$$$A$$$A(B Emacs - * $B$KFI$_9~$`$N$O$+$C$?(B $B$k$$$N$G!"$J$s$H$+(B w3m - * $B$G$G$-$J$$$+$H;W$$!":n6H$KF'$_@Z$j$^$7$?!#(B - * - * $B$9$k$H0U30$K4JC1$K<BAu$G$-$^$7$?!#KM$O(B C - * $B%W%m%0%i%`$N2~B$$O=i$a$F$G$9(B $B$,!"(B Emacs Lisp - * $BJB$N<j7Z$5$G<BAu$G$-$?$3$H$K$O46F0$7$^$7$?!#(B - * - * dictword $B$,D4$Y$kC18l$rJ9$$$F8!:w$9$k4X?t$G!"(B dictwordat - * $B$,%+!<%=%k0L(B - * $BCV$NC18l$r8!:w$9$k4X?t$G$9!#%=!<%9$r8+$l$PL@$i$+$J$h$&$K8!:w$9$k30It%3(B - * $B%^%s%I$O(B w3mdict $B$G$9!#(B Unix - * $B$J$N$G!"IaCJ;H$C$F$$$k%3%^%s%I$X$N(B symlink $B$K$7$F$$$^$9!#(Bw - * $B$K(B dictword$B!"(B W $B$K(B dictwordat $B$r3d$jEv$F$F$$$^(B - * $B$9!#$^$?!"1&<j$GFI$a$k$h$&$K(B ; $B$K$b(B dictwordat - * $B$r3d$jEv$F$F$$$^$9!#(B */ -#include "fm.h" -#include <signal.h> - -#ifdef DICT - -#define DICTCMD "w3mdict " -#define DICTBUFFERNAME "*dictionary*" -/* char *DICTBUFFERNAME="*dictionary*"; */ - -char * -GetWord(char *word) -{ - Line *l = Currentbuf->currentLine; - char *lb = l->lineBuf; - int i, b, e, pos = Currentbuf->pos; - - i = pos; - while (!IS_ALPHA(lb[i]) && i >= 0) - i--; - pos = i; - while (IS_ALPHA(lb[i]) && i >= 0) - i--; - i++; - if (!IS_ALPHA(lb[i])) - return NULL; - b = i; - i = pos; - while (IS_ALPHA(lb[i]) && i <= l->len - 1) - i++; - e = i - 1; - strncpy(word, &lb[b], e - b + 1); - word[e - b + 1] = '\0'; - return word; -} - -void -execdict(char *word) -{ - Buffer *buf; - static char cmd[100], bufname[100]; - MySignalHandler(*prevtrap) (); - - if (word == NULL) - return; - strcpy(cmd, DICTCMD); - strcat(cmd, word); - buf = namedBuffer(Firstbuf, SHELLBUFFERNAME); - if (buf != NULL) - Firstbuf = deleteBuffer(Firstbuf, buf); - - if (cmd == NULL || *cmd == '\0') { - displayBuffer(Currentbuf, B_NORMAL); - return; - } - prevtrap = signal(SIGINT, intTrap); - crmode(); - buf = getshell(cmd); -/* sprintf(bufname,"*dictionary(%s)*",word); */ -/* buf->buffername = bufname; */ - buf->buffername = DICTBUFFERNAME; - buf->filename = word; - signal(SIGINT, prevtrap); - term_raw(); - if (buf == NULL) { - disp_message("Execution failed", FALSE); - } - else if (buf->firstLine == NULL) { - /* if the dictionary doesn't describe the word. */ - char msg[100]; - sprintf(msg, "Word \"%s\" Not Found", word); - disp_message(msg, FALSE); - - } - else { - buf->nextBuffer = Firstbuf; - Currentbuf = Firstbuf = buf; - } - displayBuffer(Currentbuf, B_FORCE_REDRAW); -} - -void -dictword(void) -{ - execdict(inputStr("(dictionary)!", "")); -} - -void -dictwordat(void) -{ - static char word[100]; - execdict(GetWord(word)); -} -#endif /* DICT */ diff --git a/display.c b/display.c @@ -148,20 +148,6 @@ fmTerm(void) } } -void -deleteFiles() -{ - Buffer *buf; - char *f; - while (Firstbuf && Firstbuf != NO_BUFFER) { - buf = Firstbuf->nextBuffer; - discardBuffer(Firstbuf); - Firstbuf = buf; - } - while ((f = popText(fileToDelete)) != NULL) - unlink(f); -} - /* * Initialize routine. @@ -171,12 +157,11 @@ fmInit(void) { if (!fmInitialized) { initscr(); +#if defined( __CYGWIN__ ) && defined( JP_CHARSET ) + init_win32_console_handle(); +#endif term_raw(); term_noecho(); -#ifdef MOUSE - if (use_mouse) - mouse_init(); -#endif /* MOUSE */ } fmInitialized = TRUE; } @@ -201,7 +186,7 @@ static Linecolor color_mode = 0; static Buffer *save_current_buf = NULL; #endif -static int in_check_url = FALSE; +int in_check_url = FALSE; void displayBuffer(Buffer * buf, int mode) @@ -237,6 +222,11 @@ displayBuffer(Buffer * buf, int mode) scroll(n); } else if (n < 0 && n > -LASTLINE) { +#if defined(CYGWIN) && LANG == JA + move(LASTLINE + n + 1, 0); + clrtoeolx(); + refresh(); +#endif /* defined(CYGWIN) && LANG == JA */ rscroll(-n); } redrawNLine(buf, n); @@ -771,7 +761,7 @@ message_list_panel(void) "<h1>List of error messages</h1><table cellpadding=0>\n"); if (message_list) for (p = message_list->last ; p ; p = p->prev) - Strcat_m_charp(tmp, "<tr><td><pre>", htmlquote_str(p->ptr), "</pre></td></tr>\n", NULL); + Strcat_m_charp(tmp, "<tr><td><pre>", html_quote(p->ptr), "</pre></td></tr>\n", NULL); else Strcat_charp(tmp, "<tr><td>(no message recorded)</td></tr>\n"); Strcat_charp(tmp, "</table></body></html>"); @@ -793,7 +783,7 @@ void disp_message_nsec(char *s, int redraw_current, int sec, int purge, int mouse) { if (!fmInitialized) { - fprintf(stderr, "%s\n", s); + fprintf(stderr, "%s\n", conv_to_system(s)); return; } if (Currentbuf != NULL) @@ -828,14 +818,14 @@ disp_message_nomouse(char *s, int redraw_current) #endif void -cursorUp(Buffer * buf) +cursorUp(Buffer * buf, int n) { if (buf->firstLine == NULL) return; if (buf->cursorY > 0) cursorUpDown(buf, -1); else { - buf->topLine = lineSkip(buf, buf->topLine, -(LASTLINE + 1) / 2, FALSE); + buf->topLine = lineSkip(buf, buf->topLine, - n, FALSE); if (buf->currentLine->prev != NULL) buf->currentLine = buf->currentLine->prev; arrangeLine(buf); @@ -843,14 +833,14 @@ cursorUp(Buffer * buf) } void -cursorDown(Buffer * buf) +cursorDown(Buffer * buf, int n) { if (buf->firstLine == NULL) return; if (buf->cursorY < LASTLINE - 1) cursorUpDown(buf, 1); else { - buf->topLine = lineSkip(buf, buf->topLine, (LASTLINE + 1) / 2, FALSE); + buf->topLine = lineSkip(buf, buf->topLine, n, FALSE); if (buf->currentLine->next != NULL) buf->currentLine = buf->currentLine->next; arrangeLine(buf); @@ -870,7 +860,7 @@ cursorUpDown(Buffer * buf, int n) } void -cursorRight(Buffer * buf) +cursorRight(Buffer * buf, int n) { int i, delta = 1, cpos, vpos2; Line *l = buf->currentLine; @@ -907,15 +897,15 @@ cursorRight(Buffer * buf) delta = 2; #endif /* JP_CHARSET */ vpos2 = COLPOS(l, buf->pos + delta) - buf->currentColumn - 1; - if (vpos2 >= COLS) { - columnSkip(buf, (COLS / 2) + (vpos2 - COLS) - (vpos2 - COLS) % (COLS / 2)); + if (vpos2 >= COLS && n) { + columnSkip(buf, n + (vpos2 - COLS) - (vpos2 - COLS) % n); buf->visualpos = cpos - buf->currentColumn; } buf->cursorX = buf->visualpos; } void -cursorLeft(Buffer * buf) +cursorLeft(Buffer * buf, int n) { int i, delta = 1, cpos; Line *l = buf->currentLine; @@ -935,8 +925,8 @@ cursorLeft(Buffer * buf) buf->pos = 0; cpos = COLPOS(l, buf->pos); buf->visualpos = cpos - buf->currentColumn; - if (buf->visualpos < 0) { - columnSkip(buf, -(COLS / 2) + buf->visualpos - buf->visualpos % (COLS / 2)); + if (buf->visualpos < 0 && n) { + columnSkip(buf, - n + buf->visualpos - buf->visualpos % n); buf->visualpos = cpos - buf->currentColumn; } buf->cursorX = buf->visualpos; @@ -1042,19 +1032,19 @@ cursorXY(Buffer * buf, int x, int y) if (buf->cursorX > x) { while (buf->cursorX > x) - cursorLeft(buf); + cursorLeft(buf, COLS / 2); } else if (buf->cursorX < x) { while (buf->cursorX < x) { oldX = buf->cursorX; - cursorRight(buf); + cursorRight(buf, COLS / 2); if (oldX == buf->cursorX) break; } if (buf->cursorX > x) - cursorLeft(buf); + cursorLeft(buf, COLS / 2); } } diff --git a/doc-jp/HISTORY.kokb b/doc-jp/HISTORY.kokb @@ -1,1220 +0,0 @@ -2001/1/25 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01667] Re: mailer %s - Editor ¤¬ "vi %s" ¤Ê¤É¤Î¾ì¹ç¤Ë "vi file +10" ¤Ê¤É¤ÈŸ³«¤µ¤ì¤Æ¤·¤Þ¤¤¡¢ - ÌäÂ꤬¤¢¤Ã¤¿¤Î¤Ç¡¢Editor ¤ÎŸ³«¤ò¡¢ - ¡¦%s ¤¬¤¢¤ë¾ì¹ç - * %d ¤¬¤¢¤ì¤Ð¡¢ - Sprintf(Editor, linenum, file) # ½çÈ֤ϸÇÄê - * ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð - Sprintf(Editor, file) - ¡¦%s ¤¬¤Ê¤¤¾ì¹ç - * %d ¤¬¤¢¤ì¤Ð¡¢ - Sprintf(Editor, linenum) file - * "vi" ¤È¤¤¤¦Ê¸»úÎ󤬤¢¤ì¤Ð¡¢ - Sprintf("%s +%d", Editor, linenum) file - * ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð - Editor file - ¤È¤·¤Æ¤ß¤Þ¤·¤¿¡£ - - -2001/1/24 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01661] Re: <head> - security fix. - - -2001/1/23 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦Â°À­ÃͤÎÃæ¤Î ", <, > & Åù¤¬¥¯¥©¡¼¥È¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤¹¤ë - ¤è¤¦¤Ë¤·¤¿. - ¡¦Â°À­¤ò»ý¤Æ¤Ê¤¤¥¿¥°¤Î, °À­¤Î¥Á¥§¥Ã¥¯¤¬È´¤±¤Æ¤¤¤¿ÌäÂê¤Î½¤Àµ. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01663] replace addUniqHist with addHist in loadHistory() - - -2001/1/22 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01617] Re: first body with -m (Re: w3m-m17n-0.7) - üËö¤ò¥ê¥µ¥¤¥º¤·¤¿¾ì¹ç¤ÎÆ°ºî¤âƱ¤¸¤Ë¤·¤Þ¤·¤¿(ñ¤Ë˺¤ì¤Æ¤¤¤¿¤À¤±)¡£ - ¤Ä¤¤¤Ç¤Ë¡¢Â¿ÃʤΥե졼¥à¤Ç¹½À®¤µ¤ì¤Æ¤¤¤ë¥Ú¡¼¥¸¤Î»þ¡¢INFO('=') ¤Ç¤Î - ¥Õ¥ì¡¼¥à¾ðÊó¤Îɽ¼¨¤¬¤ª¤«¤·¤«¤Ã¤¿¤Î¤Ç¤½¤Î½¤Àµ¤Ç¤¹¡£ - -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01621] NEXT_LINK and GOTO_LINE problem - NEXT_LINK ¤È GOTO_LINE ¤Ç¤¹¤¬¡¢¼¡¤Î¥Ú¡¼¥¸¤ÎºÇ½é¤Î¹Ô¤Ë°ÜÆ°¤·¤¿¤È¤­¤À¤±¡¢ - 1 ¥Ú¡¼¥¸Ê¬¥¹¥¯¥í¡¼¥ë¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ - -From: Yamate Keiichirou <yamate@ebina.hitachi.co.jp> -Subject: [w3m-dev 01623] Re: (frame) http://www.securityfocus.com/ -Subject: [w3m-dev 01632] Re: (frame) http://www.securityfocus.com/ - frame fix. - -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01624] Re: first body with -m -From: Hironori Sakamoto <h-saka@udlew10.uldev.lsi.nec.co.jp> -Subject: [w3m-dev 01625] Re: first body with -m - pgFore, pgBack ¤Ç¡¢currentLine ¤¬²èÌ̳°¤È¤Ê¤ê¡¢¤«¤Ä¡¢°ì²èÌÌʬ - ¥¹¥¯¥í¡¼¥ë¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­¤Ë¡¢º£¤Þ¤Çɽ¼¨¤µ¤ì¤Æ¤¤¤¿Éôʬ¤È¿·¤·¤¯É½¼¨¤µ¤ì - ¤¿Éôʬ¤Î´Ö¤Ë currentLine ¤ò»ý¤Ã¤Æ¤¯¤ë¤è¤¦¤Ê¥Ñ¥Ã¥Á¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£ - -From: Hironori Sakamoto <h-saka@udlew10.uldev.lsi.nec.co.jp> -Subject: [w3m-dev 01635] Directory list - local.c ¤Î directory list ¤òºîÀ®¤¹¤ëÉôʬ¤Ë¥Ð¥°¤¬¤¢¤ê¤Þ¤·¤¿¡£ - -From: Hironori Sakamoto <h-saka@udlew10.uldev.lsi.nec.co.jp> -Subject: [w3m-dev 01643] buffername -Subject: [w3m-dev 01650] Re: buffername - buffername (title) ¤Ë´Ø¤¹¤ë²þÎÉ(?)¤È½¤Àµ¤Ç¤¹¡£ - ¡¦displayLink ¤¬ ON ¤Î¾ì¹ç¤ËŤ¤ URL ¤òɽ¼¨¤¹¤ë»þ¤Ï buffername ¤ÎÊý¤ò - ÀÚ¤ê¤Ä¤á¤ëÍͤˤ·¤Æ¤ß¤Þ¤·¤¿¡£ - ¡¦¤Ä¤¤¤Ç¤Ë displayBuffer() ¤Î¥³¡¼¥É¤ÎÀ°Íý¡£ - ¡¦HTML Ã椫¤é title ¤ò¼è¤ë¾ì¹ç¤ËËöÈø¤Î¶õÇòʸ»ú¤Ïºï½ü¤¹¤ëÍͤˤ·¤Þ¤·¤¿¡£ - ¡¦[w3m-dev 01503], [w3m-dev 01504] ¤Î·ï¤Î½¤Àµ - buffername ¤Ï¾ï¤Ë cleaup_str ¤µ¤ì¤ÆÊÝ»ý¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ - ¤Ê¤ª¡¢¸½»þÅÀ¤Ç¤Ï¡¢SJIS ¤Î¥Õ¥¡¥¤¥ë̾¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤òÆɤà¤È¡¢ - buffername ¤ä URL ¤¬ SJIS ¤Ë¤Ê¤Ã¤Æ°­¤µ¤ò¤¹¤ë¤³¤È¤¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£ - -From: Hironori Sakamoto <h-saka@udlew10.uldev.lsi.nec.co.jp> -Subject: [w3m-dev 01646] putAnchor - HTML ¤Î¥µ¥¤¥º¤È®Å٤Υ٥ó¥Á¥Þ¡¼¥¯¤ò¤·¤Æ¤ß¤è¤¦¤È»×¤Ã¤Æ¡¢¤¤¤í¤¤¤í - ¤ä¤Ã¤Æ¤ë¤È¡¢¤¢¤ë¥µ¥¤¥º¤«¤éµÞ·ã¤Ë®ÅÙ¤¬Äã²¼¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤·¤¿¡£ - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01647] Re: first body with -m - ºäº¬¤µ¤ó¤«¤é #label ¤Ä¤­¤Î URL ¤ò»ý¤Ä¥Ð¥Ã¥Õ¥¡¤ò reload ¤¹¤ë¤È¡¢ - ¥«¡¼¥½¥ë°ÌÃÖ¤¬¤º¤ì¤Æ¤·¤Þ¤¦¾ì¹ç¤¬¤¢¤ë¤È¤Î»ØŦ¤¬¤¢¤ê¤Þ¤·¤¿¤Î¤Ç¡¢ - ½¤Àµ patch ¤Ç¤¹¡£ - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01651] display column position with LINE_INFO - LINE_INFO(Ctrl-g) ¤Ç¥«¥é¥à°ÌÃÖ¤â½ÐÎϤ¹¤ëÍͤˤ·¤Æ¤ß¤Þ¤·¤¿¡£ - - -2001/1/5 - -From: Ryoji Kato <ryoji.kato@nrj.ericsson.se> -Subject: [w3m-dev 01582] rfc2732 patch - RFC2732 ¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê URL Ãæ¤Î '[' ¤È ']' ¤Ç¤¯¤¯¤é¤ì¤¿ - literal IPv6 address ¤ò²ò¼á¤¹¤ë¡£ - -From: Yamate Keiichirou <yamate@ebina.hitachi.co.jp> -Subject: [w3m-dev 01594] first body with -m (Re: w3m-m17n-0.7) - "-m" ¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤ÆÆ°¤«¤·¤¿¤È¤­¤Ë¡¢¥á¡¼¥ë¤Î¥Ø¥Ã¥À¤ÈËÜʸ¤Î´Ö¤Î - ¶õ¹Ô¤Î½èÍý¤¬¤ª¤«¤·¤¤¤Ç¤¹¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01602] Re: first body with -m (Re: w3m-m17n-0.7) - ... - ¤É¤³¤«¤Ë¡¢ - buf->lastLine->linenumber - buf->topLine->linenumber < LASTLINE - 1 - ¤È¤¤¤¦Çû¤ê¤ò²Ã¤¨¤ë¤È¤¤¤¤¤Î¤«¤Ê¡£ - ¤È¤¤¤¦¤ï¤±¤Ç patch ¤òºî¤Ã¤Æ¤ß¤¿¤Î¤Ç¤¹¤¬¡¢¤Á¤ç¤Ã¤È¼«¿®Ìµ¤·¤Ç¤¹¡£ - ¤Ê¤ª¡¢pgFore, pgBack ¤Î¥«¡¼¥½¥ë°ÌÃÖ¤ÎÀßÄê¤ò¡¢¥¹¥¯¥í¡¼¥ë('J', 'K') - ¤ÈƱ¤¸Æ°ºî¤Ë¤·¤Æ¤¤¤Þ¤¹¡£¤¹¤Ê¤ï¤Á ¡Ø¿ô SPC¡Ù¤È¡Ø¿ô J¡Ù ¤ÏƱ¤¸¡£ - vi ¤ÎÆ°ºî¤È¤Ï¤³¤Ã¤Á¤¬¹ç¤Ã¤Æ¤ë¤Ï¤º¤Ç¤¹¤¬¡¢¤É¤¦¤Ç¤·¤ç¤¦¡£ - ¤Ä¤¤¤Ç¤Ë¡¢reload, edit »þ¤Ë¥«¡¼¥½¥ë°ÌÃÖ¤òÊݸ¤¹¤ë¼ÂÁõ¤ò²þÎɤ·¤Æ¤¤¤Þ¤¹¡£ - - -2001/1/1 - -From: Yamate Keiichirou <yamate@ebina.hitachi.co.jp> -Subject: [w3m-dev 01584] Re: attribute replacing in frames. (Re: some fixes) - ¤â¤¦°ìÅÙ¡£frameÆâ¤Îtag½ñ¤­´¹¤¨¤òñ½ã¤Ë¤·¤¿patch¤òÁ÷¤ê¤Þ¤¹¡£ - - -2000/12/27 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Ë¶õ¹Ô¤¬Í¾Ê¬¤ËÄɲ䵤ì¤ëÌäÂê¤Î½¤Àµ. - - -2000/12/26 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01560] Re: long URL - >> ²¬ÅĤǤ¹¡£ - >> PEEK ¤ä PEEK_LINK ¤Ç²èÌÌÉý¤è¤êŤ¤ URL ¤ò¸«¤é¤ì¤ë¤è¤¦¤Ë¡¢prefix ¤òÍøÍÑ - >> ¤·¤Æ¼ÂÁõ¤·¤Æ¤ß¤Þ¤·¤¿¡£ - >> ËÜÅö¤Ï°ìÅÙ¤ËÁ´Éôɽ¼¨¤·¤¿¤«¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢²èÌÌÀ©¸æ¤Þ¤ï¤ê¤¬¤è¤¯¤ï¤«¤é¤Ê¤«¤Ã - >> ¤¿¤Î¤Ç¡¢¤È¤ê¤¢¤¨¤ºÉ½¼¨¤·¤¿¤¤Éôʬ¤ò»ØÄꤹ¤ëÊýË¡¤ò¤È¤Ã¤Æ¤¤¤Þ¤¹¡£2c ¤ä 3u - >> ¤ÈÆþÎϤ¹¤ë¤È¡¢»ØÄꤵ¤ì¤¿Éôʬ¤ËÂбþ¤¹¤ë¡¢URL ¤Î°ìÉô¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£ - >> ¸æ°Õ¸«¡¢¸æ´¶ÁÛ¤ªÂÔ¤Á¤·¤Æ¤ª¤ê¤Þ¤¹¡£ - ¤³¤¦¤¤¤¦¤Î¤Ï¤É¤¦¤Ç¤·¤ç¤¦¡£ - Ϣ³¤·¤¿ 'u' ¤ä 'c' ¤Ç URL ¤¬°ìʸ»ú¤º¤Ä¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹¡£ - -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01570] Re: long URL - ºäËܤµ¤ó> # ²¬ÅĤµ¤ó¤Î°Æ¤âÆþ¤ì¤Æ¤â¤¤¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£ - - ºäËܤµ¤ó¤Î [w3m-dev 1560] ¤«¤é¤Îº¹Ê¬¤òźÉÕ¤·¤Þ¤¹¡£Èó¾ï¤ËŤ¤ URL ¤Î¾ì - ¹ç¤ÏÍ­¸ú¤«¤È»×¤¤¤Þ¤¹(¤¢¤Þ¤ê¼ûÍפϤʤµ¤½¤¦¤Ç¤¹¤¬)¡£ - -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01506] compile option of gc.a - NO_DEBUGGING ¤òÉÕ¤±¤Æ gc.a ¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢gc.a ¤ä w3m ¤Î¥Ð¥¤ - ¥Ê¥ê¥µ¥¤¥º¤¬Â¿¾¯¤Ç¤¹¤¬¾®¤µ¤¯¤Ê¤ê¤Þ¤¹¡£ - -From: Fumitoshi UKAI <ukai@debian.or.jp> -Subject: [w3m-dev 01509] Forward: Bug#79689: No way to view information on SSL certificates - ¸½¥É¥­¥å¥á¥ó¥È¤Î¾ðÊó¤òɽ¼¨('=')¤Ç¸«¤Æ¤â SSL¤Ë´Ø¤¹¤ë¾ÚÌÀ½ñ¾ðÊó¤ò - ¤ß¤é¤ì¤Ê¤¤¤Î¤Ï³Î¤«¤ËÈᤷ¤¤¤Ê¤¡ ¤È»×¤Ã¤Æ¤¤¤¿¤Î¤Ç ŬÅö¤Ê¥Ñ¥Ã¥Á - ¤Ä¤¯¤Ã¤Æ¤ß¤Þ¤·¤¿¡£(¤«¤Ê¤ê¤¤¤¤¤«¤²¤ó) - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01556] Re: ANSI color support (was Re: w3m-m17n-0.4) - ANSI color support. - -From: Yamate Keiichirou <yamate@ebina.hitachi.co.jp> -Subject: [w3m-dev 01535] how to check wait3 in configure. -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01537] Re: how to check wait3 in configure. - BSD/OS 3.1, SunOS 4.1.3 ¤Ç, configure ¤¬ wait3() ¤ò¸¡½Ð¤Ç¤­¤Ê¤¤Ìä - Âê¤Ø¤ÎÂнè. - - -2000/12/25 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - <plaintext> ¤¬¤Þ¤È¤â¤ËÆ°¤¤¤Æ¤¤¤Ê¤«¤Ã¤¿ÌäÂê¤Î½¤Àµ. - - -2000/12/22 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01555] Re: some fixes for <select> - <option> ¤Ê¤·¤Î <select> ¤¬¤¢¤ë¤ÈÍî¤Á¤ëÍͤˤ·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Þ¤·¤¿¤Î - ¤Ç½¤Àµ¤Ç¤¹¡£ - - -2000/12/21 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦feed_table ¤Î¥È¡¼¥¯¥óʬ³ä½èÍý¤ò HTMLlineproc0 ¤Ç¹Ô¤Ê¤¦¤è¤¦¤ËÊѹ¹ - ¤·¤¿. - ¡¦HTMLlineproc0 ¤Î¥Õ¥©¡¼¥à¤Î½èÍý¤â¥á¥¤¥ó¥ë¡¼¥×¤Ç¹Ô¤Ê¤¦¤è¤¦¤ËÊѹ¹¤· - ¤¿. - ¡¦table ¤Ç <xmp> ¤È </xmp> ¤Î´Ö¤Ë¤¢¤ë¥¿¥°¤¬¾Ã¤¨¤ë»ö¤¬¤¢¤ëÌäÂê¤Î½¤ - Àµ. - ¡¦¥Õ¥©¡¼¥à¤Î¥Ç¡¼¥¿¤ËÆâÉô¥³¡¼¥É¤¬´Þ¤Þ¤ì¤ë»ö¤¬¤¢¤ë¤Î¤Ç, ½¤Àµ. - -From: Yamate Keiichirou <yamate@ebina.hitachi.co.jp> -Subject: [w3m-dev 01536] Re: <P> in <DL> -Subject: [w3m-dev 01544] Re: <P> in <DL> - ÌäÂê¤Î¤¢¤ë HTML ¤Ç, °Û¾ï½ªÎ»¤¹¤ë»ö¤¬¤¢¤ëÌäÂê¤Ø¤ÎÂнè. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - <a>, <img_alt>, <b>, <u> Åù¤Î¥¿¥°¤¬ÊĤ¸¤Æ¤¤¤Ê¤¤¤È¤­, ½ªÎ»¥¿¥°¤òÊä - ´°¤¹¤ë¤è¤¦¤Ë¤·¤¿. - - -2000/12/20 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - °Ê²¼¤Î¥Ð¥°¤ò¥Õ¥£¥¯¥¹¤·¤¿. - ¡¦feed_table_tag ¤Î <dt> ¥¿¥°¤Î½èÍý¤¬¾¯¤·¤ª¤«¤·¤«¤Ã¤¿. - ¡¦table Ãæ¤Ç¥¿¥°¤¬ÊĤ¸¤Æ¤¤¤Ê¤¤¾ì¹ç, °Û¾ï½ªÎ»¤¹¤ë»ö¤¬¤¢¤Ã¤¿. - ¤Þ¤¿, <dt> ¥¿¥°Ä¾¸å¤Î <p> ¤Ï̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿. - -From: Yamate Keiichirou <yamate@ebina.hitachi.co.jp> -Subject: [w3m-dev 01530] returned at a morment. - read_token ¤Î " ¤Ç°Ï¤Þ¤ì¤¿Â°À­ÃͤνèÍý¤Ç²þ¹Ô¤ò¥¹¥­¥Ã¥×¤·¤Æ¤¤¤Ê¤«¤Ã - ¤¿¥Ð¥°¤Î½¤Àµ. -Subject: [w3m-dev 01531] coocie check in header from stdin. - cat ¤á¡¼¤ë | w3m -m - ¤È¤¹¤ë¤ÈÍî¤Á¤Þ¤¹¡£ - - -2000/12/17 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01513] Re: w3m-0.1.11-pre-kokb23 - frame.c ¤Ë¥Ð¥°¤È»×¤ï¤ì¤ë²Õ½ê¤¬¤¢¤ê¤Þ¤·¤¿¡£ -Subject: [w3m-dev 01515] some fixes for <select> -Subject: [w3m-dev 01516] Re: some fixes for <select> - <select>¡Á<option> ¤Ë´Ø¤·¤Æ´ö¤Ä¤«¤Î²þÎɤò¹Ô¤¤¤Þ¤·¤¿¡£ - ¡¦multiple °À­¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ä #undef MENU_SELECT ¤Î¾ì¹ç¤Ë - <option> ¤Î value °À­¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È form ¤È¤·¤Æ¤Î - Ãͤ¬Á÷¤é¤ì¤Ê¤¤¥Ð¥°¤Î½¤Àµ¡£ - ¡¦<option> ¤Î label °À­¤Ø¤ÎÂбþ¡£ - ¡¦¥Ç¥Õ¥©¥ë¥È¤Î name °À­¤ÎÃͤ¬ "default" ¤Ç¤¢¤ë¤Î¤ò <input> ¤Ê¤É¤Ë - ¹ç¤ï¤»¤Æ "" ¤Ë¡£ - ¡¦<option> ¤Î label ¤¬ "" ¤Ç¤¢¤ë¾ì¹ç "???" ¤Ë¤Ê¤ë¤Î¤ò»ß¤á¤¿¡£ - # ¶õÇò¤Ç¤¢¤Ã¤ÆÍߤ·¤¤¾ì¹ç¤â¹Í¤¨¤é¤ì¤ë¡£ - ¡¦n_select >= MAX_SELECT ¤È¤Ê¤Ã¤¿¾ì¹ç¡¢#undef MENU_SELECT ¤Î¥³¡¼¥É¤ò - »È¤¨¤ëÍͤˤ·¤¿¡£ - # MAX_SELECT = 100 ¤Ê¤Î¤Ç¤Þ¤ºÌµ°ÕÌ£ - - -2000/12/14 - -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01501] Re: w3m-0.1.11-pre-kokb23 - no menu ¤Î¤È¤­¤Ë¤Ò¤È¤Ä¤À¤±¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤¬½Ð¤Þ¤·¤¿¤Î¤Ç¡¢¤½¤Î½¤Àµ - ¥Ñ¥Ã¥Á¤Ç¤¹¡£ - - -2000/12/13 - -From: sekita-n@hera.im.uec.ac.jp (Nobutaka SEKITANI) -Subject: [w3m-dev 01483] Patch to show image URL includes anchor - ¥ê¥ó¥¯ÉÕ¤­²èÁü¤ÎURL¤ò¸«¤ë¤È¤­¡¢`u'¤Ç¤Ï¥ê¥ó¥¯¤ÎURL¤·¤«¸«¤é¤ì¤Þ¤»¤ó - ¤Ç¤·¤¿¤¬¡¢¤³¤Î¥Ñ¥Ã¥Á¤ò»È¤¨¤Ð`i'¤Ç²èÁü¤½¤Î¤â¤Î¤ÎURL¤¬¸«¤é¤ì¤ë¤è¤¦¤Ë - ¤Ê¤ê¤Þ¤¹¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01500] fix risky code in url.c - url.c ¤Ë¤¢¤Ã¤¿´í¸±À­¤Î¤¢¤ë¥³¡¼¥É¤ò½¤Àµ¤·¤Þ¤·¤¿¡£ - local.c ¤Ï¤ª¤Þ¤±¤Î½¤Àµ¤Ç¤¹¡£ - - -2000/12/12 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01491] bug ? - file.c ¤Î°Ê²¼¤ÎÉôʬ¤Ç¤¹¤¬¡¢¤¿¤Ö¤ó¤³¤¦¤À¤È»×¤¤¤Þ¤¹¤¬¡£ - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¥Ì¥ëʸ»ú¤ò´Þ¤àʸ»úÎó¤ËÂФ¹¤ë¸¡º÷¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿. - -From: Tsutomu Okada <okada@furuno.co.jp> -Subject: [w3m-dev 01498] Re: null character - ̵¸Â¥ë¡¼¥×¤Ë¤Ï¤Þ¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£ - - -2000/12/11 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦StrmyISgets ¤Ç, ñÆȤΠ'\r' ¤¬²þ¹Ô¤Èǧ¼±¤µ¤ì¤Ê¤¤¥Ð¥°¤Î½¤Àµ. - ¤Þ¤¿, ²þ¹Ô¥³¡¼¥É¤ä¥Ê¥ëʸ»ú¤ÎÊÑ´¹¤ò cleanup_line ¤ËʬΥ¤·¤¿. - ¡¦¥Ú¡¼¥¸¥ã¥â¡¼¥É¤Ç, ¥Ê¥ëʸ»ú¤ò°·¤¨¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦base64 ¤ä quoted printable ¤Î¥Ç¥³¡¼¥É½èÍý¤ò convertline ¤«¤é - istream.c ¤Ë°ÜÆ°. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01487] A string in <textarea> is broken after editing - w3m-0.1.11-pre-kokb21 ¤Îº¢¤«¤é¤Ç¤¹¤¬¡¢<textarea> ¤ÎÃæ¤Îʸ»úÎó¤òÊÔ - ½¸¤¹¤ë¤Èʸ»úÎóÃæ¤Ë ^` ¤ÎÍͤÊʸ»ú¤¬Æþ¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ -Subject: [w3m-dev 01488] buffer overflow bugs - ¥Ð¥Ã¥Õ¥¡¡¼¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò°ú¤­µ¯¤³¤¹¶²¤ì¤Î¤¢¤ë°Ê²¼¤ÎÌäÂêÅÀ¤ò½¤Àµ¤·¤Þ¤·¤¿¡£ - * file.c ¤Î select_option[MAX_SELECT] ¤Îź»ú¤Î¥Á¥§¥Ã¥¯¤¬Ìµ¤«¤Ã¤¿¡£ - ¢ª n_select ¤È MAX_SELECT ¤òÈæ³Ó - * file.c ¤Î textarea_str[MAX_TEXTAREA] ¤Îź»ú¤Î¥Á¥§¥Ã¥¯¤¬ÉÔ´°Á´¤À¤Ã¤¿¡£ - ¢ª n_textarea ¤È MAX_TEXTAREA ¤òÈæ³Ó - * file.c ¤Î form_stack[FORMSTACK_SIZE] ¤Îź»ú¤Î¥Á¥§¥Ã¥¯¤¬Ìµ¤«¤Ã¤¿¡£ - ¢ª forms ¤Ë¹ç¤ï¤»¤Æ form_stack ¤â¥Ý¥¤¥ó¥¿¤È¤·¼«Æ°¿­Ä¥¤¹¤ëÍͤˤ·¤¿¡£ - * doFileCopy(), doFileSave() ¤Î sprintf ¤ò»È¤Ã¤¿ msg[LINELEN] ¤Ø¤ÎÂåÆþ¡£ - ¢ª Str msg ¤È Sprintf() ¤ËÃÖ¤­´¹¤¨¡£ - * local.c ¤Î dirBuffer() ¤Î sprintf ¤ò»È¤Ã¤¿ fbuf[1024] ¤Ø¤ÎÂåÆþ¡£ - ¢ª Str fbuf ¤ËÃÖ¤­´¹¤¨¡£ - - -2000/12/9 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - maximum_table_width ¤Ç td, th ¥¿¥°¤Î width °À­Ãͤò¹Íθ¤¹¤ë¤è¤¦¤Ë - Êѹ¹. - - -2000/12/8 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01473] Re: internal tag and attribute check - °ÊÁ°¡¢[w3m-dev 01446] ¤Ç¡¢ - >> frame »þ¤ËÄɲ䵤ì¤ë°À­ framename, referer, charset ¤Ê¤É¤Ï - >> ÌäÂê¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«¡£¸ú²ÌŪ¤Ë°­ÍѤ¹¤ëÎã¤Ï»×¤¤ÉÕ¤­¤Þ¤»¤ó¤¬¡¢ - ¤È½ñ¤­¤Þ¤·¤¿¤¬¡¢<form charset=e> Åù¤Ç w3m ¤¬½ªÎ»¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ - accept-charset ¤âƱÍͤǤ¹¤Î¤Ç½¤Àµ¤·¤Þ¤·¤¿¡£ - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦table ¥¿¥°¤Î hborder °À­¤ÏÄ̾ï¤Ç¤â¼õ¤±ÉÕ¤±¤ë¤è¤¦¤ËÊѹ¹. - ¡¦table ¥¿¥°¤Î border °À­¤ËÃͤ¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Î°·¤¤¤ò¸µ¤ËÌá - ¤·¤¿. - -From: sakane@d4.bsd.nes.nec.co.jp (Yoshinobu Sakane) -Subject: [w3m-dev 01478] Option Setting Panel - ²£Ä¹¤Î¥¦¥£¥ó¥É¥¦¤Ç Option Setting Panel ¤ò³«¤¯¤È¡¢´Ö±ä¤Ó¤·¤Æ - º¸±¦¤ÎÂбþ¤¬¼è¤ê¤Å¤é¤¤¤Î¤Ç¡¢´Ö¤òµÍ¤á¤ë¥Ñ¥Ã¥Á¤Ç¤¹¡£ - - -2000/12/7 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦parse_tag ¤Ë gethtmlcmd ¤Îµ¡Ç½¤â»ý¤¿¤»¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦ºÇ½é¤Î parse_tag ¤ÇÆâÉô¥¿¥°¤ä°À­¤ò¼õ¤±ÉÕ¤±¤Ê¤¤¤è¤¦¤Ë¤·¤¿. - ¤Þ¤¿, ÆâÉô°À­¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¤Ï, ¤½¤ÎÆâÉô°À­¤ò´Þ¤Þ¤Ê¤¤¤è¤¦¤Ë¥¿¥° - ¤òºî¤êľ¤¹¤è¤¦¤Ë¤·¤¿. - ¡¦visible_length ¤Ç¤ÏÉÔÍפʥ¿¥°¤Î²òÀϤò»ß¤á¤¿. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01456] linein.c - m17n ¤«¤é¤Î feed back ¤Ç¤¹¤¬¡¢linein.c ¤ò calcPosition() ¥Ù¡¼¥¹¤Ë - ½ñ¤­Ä¾¤·¤Þ¤·¤¿¡£½èÍý¤Ï display.c ¤È¤Û¤ÜƱÍͤǤ¹¡£ - Ť¤Ê¸»úÎóÃæ¤Ë¥¿¥Ö¤ä¥³¥ó¥È¥í¡¼¥ëʸ»ú¤¬¤¢¤Ã¤Æ¤âÀµ¤·¤¯¥«¡¼¥½¥ë¤¬ - Æ°¤¯¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01457] cursor position on sumbit form - TAB¥­¡¼¤Ç<input type="submit" ¡Á value="OK">¤Î¾å¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤µ - ¤»¤¿¤È¤­¤Î°ÌÃÖ¤¬¤º¤ì¤Æ¤¤¤¿ÌäÂê¤Ø¤ÎÂнè. - - -2000/12/3 - -From: Kiyokazu SUTO <suto@ks-and-ks.ne.jp> -Subject: [w3m-dev 01449] Re: Directory of private header of gc library. - popText (rpopText) ¤ÇºÇ¸å¤ÎÍ×ÁǤò¼è¤ê½Ð¤·¤¿¸å¤Ë¤³¤Î¥ê¥¹¥È¤Ë¥¢¥¯¥» - ¥¹¤·¤è¤¦¤È¤¹¤ë¤È°Û¾ï½ªÎ»¤·¤Æ¤·¤Þ¤¦»ö¤¬¤¢¤ëÌäÂê¤ËÂФ¹¤ë½¤Àµ. - - -2000/12/2 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¤Þ¤À, image map ¤¬»È¤¨¤Ê¤¤ÌäÂ꤬»Ä¤Ã¤Æ¤¤¤¿¤Î¤Ç½¤Àµ. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ÆâÉô¥Æ¡¼¥Ö¥ë (MYCTYPE_MAP) ¤Ë¤è¤Ã¤Æ, ʸ»ú¤òʬÎह¤ë¤è¤¦¤ËÊѹ¹. - ´Á»ú, latin1, ascii, internal character ¤ÎȽÊÌ¤Ë¤Ï INTCTYPE_MAP ¤ò - »È¤¦¤è¤¦¤ËÊѹ¹. - # ·ë²Ì¤È¤·¤ÆɬÍ×̵¤¯¤Ê¤Ã¤¿ CTYPE_MAP ¤Ïºï½ü¤·¤¿. - - -2000/12/1 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: Security hole in w3m (<input_alt type=file>) - ¡¦HTMLlineproc1, HTMLtagproc1 Åù¤Î°ú¿ô¤Ë¥Õ¥é¥°¤ò»ý¤¿¤»¤Æ¡¢ - ³°Éô¤«¤éÆâÉô¥¿¥°¤ò»È¤¨¤Ê¤¤Íͤˤ·¤¿¡£ - ¡¦map.c ¤Ç `<', `>' Åù¤¬¥¯¥©¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿½ê¤Î½¤Àµ¡£ -Subject: [w3m-dev 01432] Re: w3m-0.1.11-pre-kokb22 patch - ¤Þ¤À¡¢½¤Àµ¤ÎÈ´¤«¤ê¤¬¤¢¤ê¤Þ¤·¤¿¡£patch ¤òÉÕ¤±¤Þ¤¹¡£ - ([w3m-dev 01431] ¤Ç¤Î²¬ÅĤµ¤ó¤Î»ØŦ¤Ø¤Î½¤Àµ¤âÆþ¤Ã¤Æ¤Þ¤¹) -Subject: [w3m-dev 01437] Re: w3m-0.1.11-pre-kokb22 patch - ¥»¥­¥å¥ê¥Æ¥£´ØÏ¢¤Î½¤Àµ¤Ç image map ¤¬»È¤¨¤Ê¤¯¤Ê¤ëÌäÂê¤Ø¤ÎÂнè. - -From: sekita-n@hera.im.uec.ac.jp (Nobutaka SEKITANI) -Subject: [w3m-dev 01415] Lineedit patch for kokb21 - Subject: [w3m-dev 00976] move & delete until /, &, or ? - ¤ÇÅê¹Æ¤·¤¿URLÅùÆþÎϵ¡Ç½¤ò³ÈÄ¥¤¹¤ë¥Ñ¥Ã¥Á¤òw3m-0.1.11-pre-kokb21ÍÑ¤Ë - ½ñ¤­Ä¾¤·¤Þ¤·¤¿¡£kokb20¤Ç¤â¥Ñ¥Ã¥Á¤ÏÀµ¾ï¤ËÅö¤Æ¤é¤ì¤Þ¤¹¡£ - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ²¬ÅĤµ¤ó¤Î¥Ñ¥Ã¥Á [w3m-dev 01427] ¤ò»²¹Í¤Ë, HTML ¥Ð¥Ã¥Õ¥¡¤ÎʸËö¤Î¶õ - Çò¤òºï½ü¤¹¤ë¥³¥ó¥Ñ¥¤¥ë¥ª¥×¥·¥ç¥ó (ENABLE_REMOVE_TRAILINGSPACES) ¤ò - Äɲä·¤¿. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev-en 00301] Re: "w3m -h" outputs to stderr - w3m -h ¤Î½ÐÎÏÀè¤ò stderr ¤«¤é stdout ¤ËÊѹ¹. - -From: sakane@d4.bsd.nes.nec.co.jp (Yoshinobu Sakane) -Subject: [w3m-dev 01430] Re: w3m-0.1.11-pre-kokb22 patch - EWS4800(/usr/abiccs/bin/cc) ¤Î¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤Ø¤ÎÂнè. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦dumm_table ¥¿¥°¤Î id °À­¤ÎÈÏ°Ï¥Á¥§¥Ã¥¯¤ò²Ã¤¨¤¿. - ¡¦form_int ¥¿¥°¤Î fid °À­¤ÎÈÏ°Ï¥Á¥§¥Ã¥¯¤ò²Ã¤¨¤¿. - ¡¦table ¥¹¥¿¥Ã¥¯¤Î¥ª¡¼¥Ð¥Õ¥í¡¼¤Î¥Á¥§¥Ã¥¯¤ò²Ã¤¨¤¿. - - -2000/11/29 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01422] bpcmp in anchor.c -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01423] Re: bpcmp in anchor.c - ¹â®²½¤Î¤¿¤á¤Î´ö¤Ä¤«¤Î½¤Àµ. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦checkType ¤Î¥Ð¥°¥Õ¥£¥¯¥¹¤ª¤è¤Ó¼ã´³¤Î¹â®²½. - ¡¦´Á»ú¤ò 2 ¥Ð¥¤¥Èñ°Ì¤Ç°·¤¦¤è¤¦¤ËÊѹ¹. - - -2000/11/28 - -From: Takenobu Sugiyama <sugiyama@ae.advantest.co.jp> -Subject: patch for cygwin - cygwin ¤Ç¤Î ftp¥µ¥¤¥È¤«¤é¤Î download ¤Ç¤¹¤¬, °Ê²¼¤Î patch¤ÇÂнè¤Ç - ¤­¤Þ¤·¤¿. cygwin ¤Ç¤Ï, ¥Õ¥¡¥¤¥ë¤Î open/close¤ò binary ¥â¡¼¥É¤Ë¤· - ¤Æ¤ª¤«¤Ê¤¤¤È, ¤¤¤í¤¤¤í¤ÈÌäÂ꤬¤¢¤ë¤è¤¦¤Ç¤¹. - - -2000/11/27 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01401] Re: bugfix of display of control chars, merge of easy UTF-8 patch, etc. - ¤³¤Î½¤Àµ¤ÎÄɲäǤ¹¤¬¡¢°ì¹Ô¤ÎºÇ¸å¤Ë¥³¥ó¥È¥í¡¼¥ëʸ»ú¤¬¤¢¤ë¤È²èÌÌ¥·¥Õ - ¥ÈÎ̤¬Â­¤é¤Ê¤¯¤Ê¤Ã¤Æ¡¢¤½¤Îʸ»ú¤òɽ¼¨¤Ç¤­¤Ê¤¤¥Ð¥°¤Î½¤Àµ¤Ç¤¹¡£ - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - table ¤Î¥ì¥ó¥À¥ê¥ó¥°¤Î¹â®²½. - - -2000/11/25 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - table ¤Î¥«¥é¥àÉý¤¬ width °À­¤Ç»ØÄꤷ¤¿¤â¤Î¤è¤ê¾®¤µ¤¯¤Ê¤ë»ö¤¬¤¢¤ë - ÌäÂê¤Î½¤Àµ. - - -2000/11/24 -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¤Þ¤À¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ó¤Ç¤Ê¤¤¤È¤­¤Ï, ¥×¥í¥°¥ì¥¹¥Ñ¡¼¤ËžÁ÷®ÅÙ¤òɽ¼¨ - ¤·¤Ê¤¤¤è¤¦¤ËÊѹ¹¤·¤¿. - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01385] Re: w3m-0.1.11-pre-kokb20 patch - w3m-0111-utf8-kokb20 ¤Ç¤¹¤¬¡¢conv.c ¤Ç°ì²Õ½ê´Ö°ã¤¤¤È»×¤ï¤ì¤ë¤È¤³¤í - ¤¬¤¢¤ê¤Þ¤·¤¿¤Î¤Ç¡¢¥Ñ¥Ã¥Á¤òźÉÕ¤·¤Þ¤¹¡£¤Ä¤¤¤Ç¤Ë¡¢¥¤¥ó¥Ç¥ó¥È¤ä¥³¥ó¥Ñ - ¥¤¥ë»þ¤Î warning ¤Î½¤Àµ¤â°ìÉô¤·¤Æ¤¢¤ê¤Þ¤¹¡£ - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç¥ª¥×¥·¥ç¥óÀßÄê¤òÊѹ¹¤·¤¿¤È¤­, proxy ¤ä cookie Åù - Êѹ¹¤¬È¿±Ç¤µ¤ì¤Ê¤¤Éôʬ¤¬¤¢¤Ã¤¿ÌäÂê¤ËÂФ¹¤ë½¤Àµ. - ¡¦¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤ò¥»¡¼¥Ö¤¹¤ë¤È¤­, ¸µ¤Î¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤·¤Æ¤·¤Þ¤¦ - »ö¤¬¤¢¤ëÌäÂê¤ËÂФ¹¤ë½¤Àµ. - - -2000/11/23 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦StrStream ¤ËÂФ·¤Æ¤Ï, ¸µ¤Î Str ¤ò¤½¤Î¤Þ¤Þ¥Ð¥Ã¥Õ¥¡¤È¤·¤ÆÍøÍѤ¹¤ë¤è - ¤¦¤ËÊѹ¹. - ¡¦get_ctype ¤ò¥Þ¥¯¥í²½¤·, ¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤ÆȽÃǤ¹¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦menu.c ¤ËÊÖ¤êÃͤ¬Àë¸À¤È°ìÃפ·¤Æ¤¤¤Ê¤¤½ê¤¬¤¢¤Ã¤¿¤Î¤Ç½¤Àµ. - - -2000/11/22 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¼ç¤Ë¹â®²½¤Î¤¿¤á¤ÎÊѹ¹¤Ç¤¹. - ¡¦¥Õ¥¡¥¤¥ëÆɤ߹þ¤ß»þ¤Ë¼«Á°¤Ç¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤ò¹Ô¤Ê¤¦¤è¤¦¤Ë¤·¤¿. - ¡¦conv.c ¤Î´Ø¿ô¤ò Str ¥Ù¡¼¥¹¤ËÊѹ¹. - ²Äǽ¤Ê¸Â¤êʸ»úÎó¤Î¥³¥Ô¡¼¤ò¹Ô¤Ê¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤¿. - ¡¦checkType ¤Î¹â®²½. - ¡¦¥«¡¼¥½¥ë¾å¤Ëʸ»ú¤¬Ìµ¤¤¤È¤­ cursorRight ¤ÎÆ°ºî¤ËÌäÂ꤬¤¢¤Ã¤¿¤Î¤Ç, - ½¤Àµ¤·¤¿. - ¤Þ¤¿°ì¹Ô¤¬ LINELEN ¤ò±Û¤¨¤¿¤È¤­¤Ë, calcPosition ¤ÇÇÛÎó¤Î³°¤ò¥¢¥¯ - ¥»¥¹¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¥µ¥¤¥º¤òÊѹ¹. - -From: Fumitoshi UKAI <ukai@debian.or.jp> -Subject: [w3m-dev 01372] w3m sometimes uses the wrong mailcap entry - http://bugs.debian.org/77679 - ¤Ç¤¹¤¬¡¢mime type ¤ÎȽÃǤ¬ substring match ¤Ë¤Ê¤Ã¤Æ¤ë¤«¤é¤À¤È - »×¤¤¤Þ¤¹¡£¤³¤ì¤Çľ¤ë¤ó¤¸¤ã¤Ê¤¤¤Ç¤·¤ç¤¦¤« - - -2000/11/20 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - Ãæ¿È¤Î̵¤¤ table ¤¬ table ¤ÎÃæ¤Ë¤¢¤ë¤È¤­¤Ë, ³°¤Î table ¤¬Êø¤ì¤ëÌä - Âê¤Ø¤ÎÂнè. - - -2000/11/19 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - gc6 Âбþ. - - -2000/11/18 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦¥Ð¥Ã¥Õ¥¡ÆâÉô¤Î¶õÇòʸ»ú¤ò 0x80-0x9f ¤Ë³äÅö¤Æ¤ë¤è¤¦¤ËÊѹ¹¤·¤¿. - ¡¦ÆüËܸìÈǤǤâ, ¥Ð¥Ã¥Õ¥¡Æâ¤Ç¤Ï &nbsp; ¤Ï 0xa0 ¤Çɽ¤ï¤¹¤Ë¤·¤¿. - ¡¦ºäËܤµ¤ó¤Î´Ê°× UTF-8 ÈǤΠUTF-8 ¤È¤Ï´Ø·¸Ìµ¤¤Éôʬ¤Î¥³¡¼¥É¤ò¥Þ¡¼¥¸ - ¤·¤¿. - ¤Þ¤¿¥Ç¥Ð¥Ã¥°¤Î¤È¤­¤ËÊØÍø¤Ê¤Î¤Ç, ÆâÉô¥³¡¼¥É¤òʸ½ñ¥³¡¼¥É¤Ë»ØÄꤹ¤ë - »ö¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦É½¼¨ÉÔ²ÄǽÎΰè (0x80-0xa0) ¤Ë¤¢¤ëʸ»ú¤Ï \xxx ¤Î·Á¤Çɽ¼¨¤¹¤ë¤è¤¦ - ¤Ë¤·¤¿. - ´ØÏ¢¤·¤Æ, ²èÌÌ¥·¥Õ¥È»þ¤Ë, ¥³¥ó¥È¥í¡¼¥ëʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤Èɽ¼¨¤¬ - Íð¤ì¤ë¥Ð¥°¤¬¤¢¤Ã¤¿¤Î¤Ç½¤Àµ¤·¤¿. - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP - #undef USE_GOPHER ¤ä #undef USE_NNTP ¤È¤·¤¿¤È¤­¤Ë¡¢´ØÏ¢¤¹¤ë¥³¡¼¥É¤¬¤Ç - ¤­¤ë¤À¤±¾¯¤Ê¤¯¤Ê¤ë¤è¤¦¤ËÊѹ¹¤·¤Æ¤ß¤Þ¤·¤¿¡£ - - -2000/11/16 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - °Û¾ï¤Ê¼ÂÂλ²¾È¤Ç getescapechar ¤¬ÊѤÏÃͤòÊÖ¤¹»ö¤¬¤¢¤ëÌäÂê¤Ø¤ÎÂнè. - - -2000/11/15 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦table ¤ÎÏȤ¬Êø¤ì¤ë»ö¤¬¤¢¤ë¥Ð¥°¤Î½¤Àµ. - ¡¦DEL ʸ»ú¤òÀÞ¤êÊÖ¤·²Äǽ¤Ê¶õÇòʸ»ú¤È¤·¤Æ°·¤¦¤è¤¦¤ËÊѹ¹¤·, ¥Ð¥Ã¥Õ¥¡ - ÆâÉô¤Î¶õÇòʸ»ú¤ò &nbsp; ¤«¤é DEL ¤ËÊѹ¹. - -From: Kiyokazu SUTO <suto@ks-and-ks.ne.jp> -Subject: [w3m-dev 01338] Re: Lynx patch for character encoding in form -Subject: [w3m-dev 01342] Re: Lynx patch for character encoding in form - form ¥¿¥°¤Î accept-charset °À­¤ò¼õ¤±ÉÕ¤±¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿. - - -2000/11/14 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦¥¯¥©¡¼¥È¤¹¤ë¤Î¤ò˺¤ì¤Æ¤¤¤ë¤È»×¤ï¤ì¤ëÉôʬ¤ò½¤Àµ. - ¡¦cleanup_str, htmlquote_str ¤Ï, ¤â¤· (¥¢¥ó) ¥¯¥©¡¼¥È¤¹¤ëɬÍפ¬Ìµ - ¤±¤ì¤Ð, ¸µ¤Îʸ»úÎó¤ò¤½¤Î¤Þ¤ÞÊÖ¤¹¤è¤¦¤Ë¤·¤¿. - - -2000/11/10 - -From: ÅÏîµ¾¡Ç· <katsuyuki_1.watanabe@toppan.co.jp> -Subject: [w3m-dev 01336] patch for Cygwin 1.1.x - Cygwin 1.1.x (¤ª¤½¤é¤¯ 1.1.3 °Ê¹ß) ¸þ¤±¤Î¥Ñ¥Ã¥Á¤òºîÀ®¤·¤Þ¤·¤¿¡£ - Cygwin 1.x °Ê¹ß¤Î´Ä¶­¤Ë¤ª¤¤¤Æ¡¢ - ¡¦É¸½à¤Î¥¤¥ó¥¹¥È¡¼¥ë¥Ñ¥¹¤ò /cygnus/cygwin-b20/H-i586-cygwin32 - °Ê²¼¤ØÊѹ¹¤·¤Ê¤¤ - ¡¦T_as,T_ae,T_ac ¤ò¶õ¤Ë¤¹¤ë¤Î¤ò¤ä¤á¤¿ - - -2000/11/8 - -From: Jan Nieuwenhuizen <janneke@gnu.org> -Subject: [w3m-dev-en 00189] [PATCH] w3m menu <select> search - Enable to search within popup menu. - - -2000/11/7 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01331] Re: form TEXT: - ¸¡º÷ʸ»úÎó¤È¥Õ¥©¡¼¥àÆþÎÏʸ»úÎó¤Î¥Ò¥¹¥È¥ê¤Î°ìËܲ½. - - -2000/11/4 -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¥»¥ëÉý¤¬²èÌÌÉý¤ò±Û¤¨¤ë¤È¤­, ¥»¥ë¤ÎÃæ¿È¤Ï²èÌÌÉý¤ÇÀ°·Á¤¹¤ë¤è¤¦¤Ë¤·¤¿. - - -2000/11/2 - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01313] Re: SCM_NNTP - MARK_URL ¤Ç nntp: ¤â¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿¡£Àµµ¬É½¸½¤Ï gopher: - ¤Î¤â¤Î¤ò¥³¥Ô¡¼¤·¤¿¤À¤±¤Ç¤¹¡£ - - -2000/10/31 - -From: Kiyokazu SUTO <suto@ks-and-ks.ne.jp> -Subject: [w3m-dev 01310] Re: option select (Re: w3mmee-0.1.11p10) - gc¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òdisp_message_nsec¤òÄ̤·¤Æ½ÐÎϤ¹¤ë - ¤è¤¦¤Ë¤·¤¿. - - -2000/10/30 - -From: sakane@d4.bsd.nes.nec.co.jp (Yoshinobu Sakane) -Subject: [w3m-dev 01294] mouse no effect on blank page. - mouse¤¢¤ê¤Îw3m ¤Çblank¤Ê¥Ú¥¤¥¸¤òɽ¼¨¤·¤Æ¤¤¤ë»þ¡¢mouse¥Ü¥¿¥ó - ¤¬¸ú¤«¤Ê¤¤(Ãæ¥Ü¥¿¥ó¤ÇÌá¤ì¤Ê¤¤¤Î¤¬¥Ä¥é¥¤)¤Î¤Ç½¤Àµ¤·¤Æ¤ß¤Þ¤·¤¿¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01295] Re: mouse no effect on blank page. - ¼ÂºÝ¤ËÍî¤Á¤¿¤ï¤±¤Ç¤Ï¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢¤³¤¦¤·¤Æ¤ª¤¯Êý¤¬°ÂÁ´¤Ç¤¹¤Í¡£ - -From: SASAKI Takeshi <sasaki@ct.sakura.ne.jp> -Subject: [w3m-dev 01297] Re: backword search bug report - [w3m-dev 01296] ¤ÇÊó¹ð¤µ¤ì¤Æ¤¤¤ë, ¼¡¤ÎÌäÂê¤ËÂФ¹¤ëÂнè. - > Êó¹ð¤À¤±¤Ê¤ó¤Ç¤¹¤¬¡¢"aaaa" ¤ä "¤¢¤¢¤¢¤¢" ¤Î¤è¤¦¤ÊƱ¤¸Ê¸»ú¤¬Ï¢Â³¤·¤Æ¤¤ - > ¤ë¤È¤­¤Ë "a" ¤ä "¤¢" ¤Ç backword search ¤¹¤ë¤È¡¢¥«¡¼¥½¥ë°ÌÃÖ¤¬ 1 ʸ»ú - > Èô¤ó¤Ç¤·¤Þ¤¦¤è¤¦¤Ç¤¹¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01298] Re: backword search bug report - backword search ¤Ç wrapped search ¤¬Í­¸ú¤Î»þ¡¢¸½ºß¤Î¹Ô¤Î¸åÊý¤ò¸¡º÷ - ¤Ç¤­¤Ê¤¤¥Ð¥°¤òľ¤·¤Þ¤·¤¿¡£ -Subject: [w3m-dev 01299] Re: backword search bug report - ÆüËܸì¤ò¸¡º÷¤¹¤ë¤È¤­¤Ë 2byteÌܤȼ¡¤Îʸ»ú¤Î 1byteÌܤȤǥޥåÁ¤¹¤ëÌä - Âê¤È¡¢ little endian ¤Ç¤ÏÀµµ¬É½¸½ [¤¢-¤ó] ¤¬Àµ¤·¤¯µ¡Ç½¤·¤Ê¤¤ÌäÂê¡¢ - ±Ñ¸ìÈÇ¤Ç¤Ï latin1 ¤¬¾å¼ê¤¯¸¡º÷¤Ç¤­¤Ê¤«¤Ã¤¿(¤Ç¤¢¤í¤¦)ÌäÂê¤òľ¤·¤Þ¤·¤¿¡£ - - -2000/10/29 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦LESSOPEN ¤ò»ÈÍѤ¹¤ë¤«¤É¤¦¤«¤ò Option Setting Panel ¤ÇÁªÂò¤¹¤ë¤è - ¤¦¤Ë¤·¤¿ (default ¤Ï»ÈÍѤ·¤Ê¤¤). - ¡¦°µ½Ì¥Õ¥¡¥¤¥ë¿­Ä¥¸å¤Î¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤òºî¤ë¤È¤­¤Î³ÈÄ¥»Ò¤ò, ¸µ¤Î - ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò (.Z, .gz, .bz2) ¤ò½ü¤¤¤¿Éôʬ¤«¤é·è¤á¤ë¤è¤¦¤ËÊÑ - ¹¹¤·¤¿. - ¡¦gunzip_stream, save2tmp, visible_length ¤Î¹â®²½. - - -2000/10/28 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¥³¥ó¥Ñ¥¤¥ë»þ, ¥Õ¥¡¥¤¥ë̾Êä´°Ãæ¤Î¥­¡¼³äÅö¤Æ¤ò Emacs-like ¤Ë¤Ç¤­¤ë¤è - ¤¦¤Ë¤·¤¿. - (config.h ¤Ç #define EMACS_LIKE_LINEEDIT ¤Ë¤·¤Þ¤¹) - ¤Þ¤¿, Êä´°¸õÊä°ìÍ÷»þ¤Ë¥Ð¥Ã¥¯¥¹¥¯¥í¡¼¥ë¤ò²Äǽ¤Ë¤·¤¿. - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01284] Re: improvement of filename input - ¡¦URLÆþÎÏ»þ(U)¤Ç¤Ï file:/ ¤«¤é»Ï¤á¤ë¾ì¹ç¤Î¤ß¥Õ¥¡¥¤¥ë̾Êä´°¤òÍ­¸ú - ¤Ë¤·¤Þ¤·¤¿¡£ - (URL ²òÀϤλÅÍ;夳¤ì°Ê³°¤Ç¤Ï³Î¼Â¤Ë local-file ¤Ë¤Ê¤é¤Ê¤¤¤¿¤á) - ¡¦²¬Éô¤µ¤ó¤Î¥¢¥É¥Ð¥¤¥¹¤Ë¤è¤ê CTRL-D ¤Ç¤Î°ìÍ÷ɽ¼¨¤Ï¡¢ - ʸ»úÎó¤ÎºÇ¸å¤Ë¥«¡¼¥½¥ë¤¬¤¢¤ë¾ì¹ç¤Ë¸ÂÄꤷ¤Þ¤·¤¿¡£ - -From: Kiyokazu SUTO <suto@ks-and-ks.ne.jp> -Subject: [w3m-dev 01280] Stop to prepend rc_dir to full path. - rcFile()¤ò¡¢¥Õ¥ë¥Ñ¥¹¤Ë¤Ïrc_dir¤òÉÕ¤±¤Ê¤¤¤è¤¦¤¹¤ë¥Ñ¥Ã¥Á¤Ç¤¹¡£ - - -2000/10/27 - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01269] Re: SCM_NNTP - [w3m-dev 1258] ¤ÇºäËܤµ¤ó¤¬»ØŦ¤µ¤ì¤Æ¤¤¤¿¤È¤³¤í¤ò½¤Àµ¤·¤Æ¤ß¤Þ¤·¤¿¡£¥Ñ¥Ã - ¥Á¤òźÉÕ¤·¤Þ¤¹¡£»ä¤Î´Ä¶­¤Ç¤Ï¡¢¤³¤Î½¤Àµ¤ò¤·¤Ê¤¤¤È news:<Message-ID> ¤¬ - Æ°¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ -Subject: [w3m-dev 01273] Re: SCM_NNTP - url.c ¤ò½¤Àµ¤·¤Æ¡¢#undef USE_GOPHER ¤ä #undef USE_NNTP ¤Î¤È¤­¤Ë¤Ï - gopther: ¤ä news: ¤¬Æ°ºî¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£¤Þ¤¿¡¢nntp: ¤âÆ°ºî¤·¤Ê¤¤ - ¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ - ²Ã¤¨¤Æ¡¢GOTO URL ¤Ç mailto: ¤òÆþÎϤ·¤¿¤È¤­¤ËÆ°ºî¤¹¤ë¤è¤¦¤ËÊѹ¹¤·¤Æ¤ß¤Þ - ¤·¤¿¡£¤Ä¤¤¤Ç¤Ë¡¢¥³¥á¥ó¥È¤Î´Ö°ã¤¤¤âľ¤·¤Æ¤¢¤ê¤Þ¤¹¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01258] improvement of filename input - ºÇ²¼¹Ô¤Ç¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ¹¤ë»þ¤Î¶¯²½¤ò¹Ô¤¤¤Þ¤·¤¿¡£ - ¡¦Ctrl-D ¤ÇÊä´°¸õÊä¤Î°ìÍ÷¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ - ²èÌ̤ËÆþ¤êÀÚ¤é¤Ê¤¤»þ¤ÏϢ³¤·¤¿ Ctrl-D ¤Ç¼¡¤Î¸õÊä¤Î°ìÍ÷¤¬½Ð¤Þ¤¹¡£ - # ʸ»ú¤Îºï½ü¤Ï BackSpace ¤« Del ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£ - ¡¦URL ÆþÎÏ»þ(GOTO)¤Çʸ»úÎó¤¬ file:/, file:/// ¤ä file://localhost/ ¤«¤é - »Ï¤Þ¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥Õ¥¡¥¤¥ë̾¤òÊä´°¤¹¤ëÍͤˤ·¤Þ¤·¤¿¡£(²¼ÄŤµ¤ó¤«¤é¤ÎÍ×˾) - # http: ¤ä ftp: ¤Ï²¿¤â¤·¤Þ¤»¤ó¡£¥Ò¥¹¥È¥ê¤«¤é¤ÎÊä´°¤Ç¤âÌÌÇò¤¤¤±¤É¡£ - ¡¦URL ¤ò¥Ò¥¹¥È¥ê¤ËÊݸ¤¹¤ë¾ì¹ç¤Ë password Éôʬ¤Ïºï½ü¤¹¤ëÍͤ˽¤Àµ¤·¤Þ¤·¤¿¡£ - ¤Ê¤ª¡¢°ÊÁ°¤«¤é¤¢¤ë undocument ¤Êµ¡Ç½¤Ç¤¹¤¬¡¢¸¡º÷ʸ»ú¤ÎÆþÎϤʤɤξì¹ç¤Ç¤â¡¢ - Ctrl-X ¤Ç TAB(Ctrl-I) ¤Ç¤Î ¥Õ¥¡¥¤¥ë̾Êä´°¤¬Í­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£ - -From: Fumitoshi UKAI <ukai@debian.or.jp> -Subject: [w3m-dev 01277] Accept-Encoding: gzip (Re: some wishlists) - Accept-Encoding: gzip, compress - ¤ò¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ËÉÕ¤±¤ë¤è¤¦¤Ë¤·¤¿. -Subject: [w3m-dev 01275] Re: squeeze multiple blank lines option ( http://bugs.debian.org/75527 ) - ¤È¤ê¤¢¤¨¤º #ifdef DEBIAN ¤Ç - squeeze multiple blank line ¤Ï -s - üËöʸ»ú¥³¡¼¥É»ØÄê¤Î -s/-e/-j ¤Ï¥Ê¥·¡£¤«¤ï¤ê¤Ë -o kanjicode={S,E,J} ¤ò»È¤¦ - ¤³¤È¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£ -Subject: [w3m-dev 01274] Re: SCM_NNTP - ¤»¤Ã¤«¤¯¤Ê¤Î¤Ç nntp: ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤ß¤Þ¤·¤¿ -Subject: [w3m-dev 01276] URL in w3m -v - LANG=EN (¤È¤¤¤¦¤« undef JP_CHARSET)¤Î»þ¤Î visual mode ¤Ç»È¤ï¤ì¤Æ¤ë URL - ¤¬Àµ¤·¤¯¤Ê¤¤¤è¤¦¤Ç¤¹¡£ - - -2000/10/26 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - mailcap ¤È mime.type ¥Õ¥¡¥¤¥ë¤Î¾ì½ê¤ò Option Setting Panel ¤ÇÀßÄê - ²Äǽ¤Ë¤·¤¿. - - -2000/10/25 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01247] Re: buffer selection menu - ¥á¥Ë¥å¡¼´ØÏ¢¤Î patch ¤ª¤è¤Ó»ÅÍÍÊѹ¹ [w3m-dev 01227], [w3m-dev 01228], - [w3m-dev 01229], [w3m-dev 01237], [w3m-dev 01238] ¤ò¤Þ¤È¤á¤Þ¤·¤¿¡£ - ¡¦Select ¥á¥Ë¥å¡¼¤Ç¤Î¾Ãµî(¥­¡¼¤Ï 'D') - ¡¦Select ¥á¥Ë¥å¡¼¤Ç¤Î¥³¥á¥ó¥È¤Îɽ¼¨ - ¨­--- SPC for select / D for delete buffer ---¨­ - ¨±¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨° - ¡¦¥á¥Ë¥å¡¼¤«¤é¤Î¥³¥Þ¥ó¥É¼Â¹Ô¤òµö²Ä¡£ - - -2000/10/24 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦ ¥¯¥Ã¥­¡¼¤ÎÀßÄê¤Ç, `.' ¤ÏÁ´¤Æ¤Î¥É¥á¥¤¥ó¤òɽ¤ï¤¹¤è¤¦¤Ë¤·¤¿. - ¡¦ bm2menu.pl ¤ò CVS ¤Ë add ¤¹¤ë¤Î¤ò˺¤ì¤Æ¤¤¤¿¤Î¤Ç, ÄɲÃ. - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01240] Re: w3m-0.1.11-pre-kokb17 patch - ¤È¤ê¤¢¤¨¤º¥³¥ó¥Ñ¥¤¥ë»þ¤Ë incompatible pointer type ¤È¤¤¤ï¤ì¤¿¤È¤³ - ¤í¤Î½¤Àµ¥Ñ¥Ã¥Á¤òźÉÕ¤·¤Þ¤¹¡£ - - -2000/10/23 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦ ¥ª¥×¥·¥ç¥óÀßÄê¥Ñ¥Í¥ë¤Ç, ¥¯¥Ã¥­¡¼¤ò¼õ¤±ÉÕ¤±¤ë (¼õ¤±ÉÕ¤±¤Ê¤¤) ¥É - ¥á¥¤¥ó¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿. - ¤Þ¤¿, ¥¯¥Ã¥­¡¼ÀßÄê¤ò°ì¤Ä¤Î¥»¥¯¥·¥ç¥ó¤È¤·¤ÆʬΥ¤·¤¿. - ¡¦ frame ¤Î reload ¤ÎºÝ, ¥×¥í¥¯¥·¤Î¥­¥ã¥Ã¥·¥å¤¬¹¹¿·¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã - ¤¿ÌäÂê¤Ø¤ÎÂнè. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01211] Re: a small change to linein.c -Subject: [w3m-dev 01214] Re: a small change to linein.c - Ť¤Ê¸»úÎó¤òÊÔ½¸¤¹¤ëºÝ, Á´¤Æ¤Îʸ»úÎó¤¬É½¼¨¤µ¤ì¤Ê¤¤»ö¤¬¤¢¤ëÌäÂê¤Ø¤Î - Âнè. - -From: Fumitoshi UKAI <ukai@debian.or.jp> -Subject: [w3m-dev 01216] error message for invalid keymap -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01220] Re: error message for invalid keymap - keymap ¤ËÌäÂ꤬¤¢¤Ã¤¿¤È¤­¤Ë, ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò½Ð¤¹¤è¤¦¤Ë½¤Àµ. - -From: Fumitoshi UKAI <ukai@debian.or.jp> -Subject: [w3m-dev 01217] keymap.lynx example could be better. - keymap.lynx ¤Î¹¹¿·. - - -2000/10/20 -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - cookie ¤Î¼è¤ê°·¤¤¤Ë´Ø¤·¤Æ´ö¤Ä¤«¤Î½¤Àµ¤ò²Ã¤¨¤¿. - ¡¦ version 1 cookie ¤ËÂФ¹¤ë°·¤¤¤ò - http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-state-man-mec-12.txt - ¤Ë½àµò¤¹¤ë¤è¤¦¤ËÊѹ¹. - Netscape-style cookie ¤Î¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ë, Cookie2 ¤òÄɲÃ. - ¡¦ [w3m-dev-en 00190] patch ¤ËÂФ¹¤ë´ö¤Ä¤«¤ÎÊѹ¹. - - -2000/10/19 - -From: "Ambrose Li [EDP]" <acli@mingpaoxpress.com> -Subject: [w3m-dev-en 00136] version 0 cookies and some odds and ends -Subject: [w3m-dev-en 00191] sorry, the last patch was not made properly -Subject: [w3m-dev-en 00190] w3m-0.1.10 patch (mostly version 0 cookie handling) - I've hacked up a big mess (patch) against w3m-0.1.9 primarily - involving version 0 cookies. To my dismay, it seems that most - servers out there still want version 0 cookies and version 0 - cookie handling behaviour, and w3m's cookie handling is too - strict for version 0, causing some sites (notably my.yahoo.co.jp) - not to work. - -2000/10/18 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ʸ»úÉý¤òÀßÄê²Äǽ¤Ë¤·¤¿. - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01208] '#', '?' in ftp:/.... - ftp:/ ¤Ç¥Õ¥¡¥¤¥ë̾¤Ë '#' ¤¬Æþ¤Ã¤Æ¤¤¤ë¤È¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤ÌäÂê¤Ø¤ÎÂÐ - ½è. - -From: Kiyokazu SUTO <suto@ks-and-ks.ne.jp> -Subject: [w3m-dev 01209] http_response_code and ``Location:'' header - ¡ÖLocation:¡×¥Ø¥Ã¥À¤¬¤¢¤ë¤È¡¢Ìµ¾ò·ï¤Ë¤½¤ì¤Ë½¾¤¦¤è¤¦¤Ë¤Ê¤Ã¤Æ¤Þ¤¹¤¬¡¢ - http_response_code¤ò¸«¤Æ301¡Á303¤Î»þ¤À¤±½¾¤¦¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿¡£ - - -2000/10/17 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - local CGI ¤Ç, ¥¾¥ó¥Ó¤¬¤Ç¤­¤ëÌäÂê¤Ø¤ÎÂнè. - - -2000/10/16 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - table Ãæ¤Ç <textarea> ¤¬ÊĤ¸¤Æ¤Ê¤¤»þ, ½ªÎ»¤Ç¤­¤Ê¤¯¤Ê¤ëÌäÂê¤Ø¤ÎÂнè. - ([w3m-dev 00959] ¤ÎÂåÂØ°Æ). - <select> ¤Î°·¤¤¤Ë½à¤¸¤ë¤è¤¦¤Ë¤·¤¿. - -From: maeda@tokyo.pm.org -Subject: [w3m-dev 00990] auth password input - ²¿¤ËÂФ¹¤ë¥Ñ¥¹¥ï¡¼¥É¤Ê¤Î¤«¤ï¤«¤é¤Ê¤¤¤Î¤Ç¡¢°Ê²¼¤Î¤è¤¦¤Ê - ¥Ñ¥Ã¥Á¤òÅö¤Æ¤Þ¤·¤¿¡£sleep(2)¤ÏŤ¹¤®¤ë¤«¤â¡£ - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01193] Re: frame bug? - ¥Õ¥ì¡¼¥à¤Î¤¢¤ë¥Ú¡¼¥¸¤ò±ýÍ褷¤Æ¤¤¤ë¤È¤­, Íî¤Á¤ë»ö¤¬¤¢¤ëÌäÂê¤Ø¤ÎÂнè. - - -2000/10/13 - -From: SASAKI Takeshi <sasaki@ct.sakura.ne.jp> -Subject: [w3m-dev 00928] misdetection of IPv6 support on CYGWIN 1.1.2 - CYGWIN 1.1.2°Ê¹ß¤Ç, ¸í¤Ã¤Æ IPv6 ¥µ¥Ý¡¼¥È¤ò¸¡½Ð¤·¤Æ¤·¤Þ¤¦ÌäÂê¤Ø¤ÎÂÐ - ½è. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01170] Re: cursor position after RELOAD, EDIT - ¡¦cache ¥Õ¥¡¥¤¥ë¤¬»Ä¤ë¤³¤È¤¬¤¢¤ë¥Ð¥°¤Î½¤Àµ. - ¤½¤Î¾ - ¡¦¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È¤Î URL ¤¬ /$LIB/dirlis.cgi¡Ä ¤È³Ê¹¥°­¤«¤Ã¤¿¤Î¤Ç¡¢ - ¸µ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤½¤Î¤â¤Î¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ - dirlist.in ¤òÊѹ¹¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢configure ¤òºÆ¼Â¹Ô¤¹¤ë¤«¡¢ - cp dirlist.in dirlist.cgi ¤È¤·¤Æ @PERL@ ¤È @CYGWIN@ ¤ò½ñ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£ - ¡¦keymap ¤Ç°ú¿ô¤òµ­½Ò¤Ç¤­¤ë³ÈÄ¥¤ò°Ê²¼¤Î´Ø¿ô¤ËŬÍѤ·¤Þ¤·¤¿¡£ - LOAD ¡Ä ¥Õ¥¡¥¤¥ë̾ - EXTERN, EXTERN_LINK ¡Ä ³°Éô¥Ö¥é¥¦¥¶Ì¾ - (w3m-control: ¤«¤é¤Ï»È¤¨¤Þ¤»¤ó) - EXEC_SHELL, READ_SHELL, PIPE_SHELL ¡Ä shell¥³¥Þ¥ó¥É - (w3m-control: ¤«¤é¤Ï»È¤¨¤Þ¤»¤ó) - SAVE, SAVE_IMAGE, SAVE_LINK, SAVE_SCREEN ¡Ä ¥Õ¥¡¥¤¥ë̾(pipe ¥³¥Þ¥ó¥É) - (w3m-control: ¤«¤é¤Ï»È¤¨¤Þ¤»¤ó) - - -2000/10/11 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦É¸½àÆþÎϤ«¤é¤Î¥Ð¥Ã¥Õ¥¡¤ËÆɤ߹þ¤à¤È¤­, MAN_PN ¤ò¸«¤Æ¥Ð¥Ã¥Õ¥¡Ì¾¤ò·è¤á - ¤ë¤è¤¦¤Ë¤·¤¿. - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01156] Re: w3m-0.1.11-pre-kokb15 - ¡¦mydirname ¤Î¥Ð¥°½¤Àµ¤È´Ø¿ôÀë¸À¤ÎÄɲà - ¡¦SERVER_NAME ¤òÀßÄꤹ¤ë¤è¤¦¤ËÊѹ¹ - ¡¦[w3m-dev-en 00234] ¤ò»²¹Í¤Ë GATEWAY_INTERFACE ¤òÀßÄꤹ¤ë¤è¤¦¤ËÊѹ¹ - ¡¦current working directory ¤òÊѹ¹¤·¤Æ popen ¤¹¤ë¡¢¤è¤ê¤Þ¤È¤â¤Ê¼ÂÁõ - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01158] some bugs fix when RELOAD, EDIT -Subject: [w3m-dev 01164] cursor position after RELOAD, EDIT - ¡¦local CGI ¤È¤·¤Æ¸Æ¤Ó½Ð¤·¤¿ file:... ¤ò EDIT ¤Ç¤­¤ë¥Ð¥°¤ò½¤Àµ¤·¤Þ¤·¤¿¡£ - # currentURL.scheme ¤Ç¤Ï¤Ê¤¯ real_scheme ¤ò»È¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ - ¡¦HTML ¤ò¥½¡¼¥¹É½¼¨¾õÂÖ¤«¤é RELOAD, EDIT ¤·¤¿¸å¤Ë¤Ï - ¥½¡¼¥¹É½¼¨¾õÂ֤ˤʤë¤è¤¦¤Ë¤·¤Þ¤·¤¿(°ìÉôÉÔ¶ñ¹ç¤¬¤¢¤ê¤Þ¤·¤¿)¡£ - ¡¦µÕ¤Ë plain text ¥Õ¥¡¥¤¥ë¤ò HTML ɽ¼¨¤·¤Æ¤¤¤ë¾õÂÖ¤«¤é RELOAD, EDIT - ¤·¤¿¸å¤Ë¤Ï HTML ɽ¼¨¾õÂ֤ˤʤë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ - ¡¦RELOAD, EDIT ¸å¤Î¥«¡¼¥½¥ë°ÌÃÖ¤ò RELOAD, EDIT Á°¤ÈƱ¤¸¤Ë¤Ê¤ë¤è¤¦¤Ë - ¤·¤Þ¤·¤¿¡£ - - -2000/10/10 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01166] Re: cell width in table - table ´Ø·¸¤Î¥Ð¥°¥Õ¥£¥¯¥¹¤Ç¤¹. - ¡¦ ²èÌÌÉý¤¬½½Ê¬¤¢¤ë¤Ë¤â´Ø¤ï¤é¤º, ʸ¤¬ÅÓÃæ¤ÇÀÞ¤êÊÖ¤µ¤ì¤Æ¤·¤Þ¤¦ÌäÂê¤Î½¤Àµ. - ¡¦ table ¤Ç <wbr> ¤¬¸ú¤«¤Ê¤¤»ö¤¬¤¢¤ëÌäÂê¤Î½¤Àµ. - ¡¦ feed_table_tag() ¤Î½èÍý¤Î¶¦Ä̲½. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01155] history of data for <input type=text> - ¤Õ¤È»×¤¤½Ð¤·¤Æ <input type=text> ¤ÇÆþÎϤ·¤¿¥Ç¡¼¥¿¤â¥Ò¥¹¥È¥ê¤ò - é¤ì¤ëÍͤˤ·¤Æ¤ß¤Þ¤·¤¿¡£ - ¸¡º÷¥µ¡¼¥Ó¥¹¤òÅϤêÊ⤯»þ¤Ê¤É¤ËÊØÍø¤È»×¤¤¤Þ¤¹¡£ - - -2000/10/9 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01150] Some bug fixes - [w3m-dev 00956] unknown scheme in frame - [w3m-dev 00975] goto link from frame page - ¤ÇÊó¹ð¤µ¤ì¤¿ÌäÂê¤Î½¤Àµ. - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01145] buffer overflow in linein.c - inputLineHist(linein.c) ¤Ç¥Ç¥Õ¥©¥ë¥Èʸ»úÎó¤¬ 256 ʸ»ú°Ê¾å¤Î¾ì¹ç¤Ë - strProp ¤¬Îΰ賰¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤·¤¿¤Î¤Ç¡¢¤½¤Î½¤Àµ patch ¤Ç¤¹¡£ - ¤Þ¤¿Ê¸»úÎóŤÎÀ©¸ÂÃͤò 1024 ¤Ë¤·¤Þ¤·¤¿¡£ - - -2000/10/8 - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01136] function argument in keymap -Subject: [w3m-dev 01139] Re: function argument in keymap - Ĺ¤é¤¯½ÉÂê¤Ë¤Ê¤Ã¤Æ¤¿ ~/.w3m/keymap ¤Ç¤Î´Ø¿ô¤Î°ú¿ô»ØÄê¤ò²Äǽ¤Ë¤·¤Þ¤·¤¿¡£ - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 01143] image map with popup menu - image map ¤ò popup menu ¤ò»È¤Ã¤Æ <option> ¤ÎÍͤËɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿¡£ - config.h ¤Ç #define MENU_MAP ¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£ - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 00971] Re: segmentation fault with http: - URL ¤È¤·¤Æ http: ¤ä http:/ ¤òÆþÎϤ¹¤ë¤ÈÍî¤Á¤Æ¤·¤Þ¤¦¤Î¤Ç½¤Àµ¤·¤Þ¤·¤¿¡£ - - -2000/10/07 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01134] w3m in xterm horribly confused by Japanese in title (fr - http://bugs.debian.org/w3m ¤ÇÊó¹ð¤µ¤ì¤Æ¤¤¤ë, ±Ñ¸ìÈǤÇÆüËܸ쥿¥¤¥È¥ë¤Î - ¤¢¤ë¥Ú¡¼¥¸¤ò¸«¤¿¤È¤­¤Ë, w3m ¤¬È¯¶¸¤¹¤ë»ö¤¬¤¢¤ëÌäÂê¤ËÂФ¹¤ë¥Ð¥°¥Õ¥£¥¯¥¹ - ¤Ç¤¹. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01127] SIGINT signal in ftp session (Re: my w3m support page) - ftp ¤ÎºÝ¤Ë SIGINT ¤¬È¯À¸¤¹¤ë¤ÈÍî¤Á¤ë¥Ð¥°¤Î½¤Àµ. - - -2000/10/06 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - ¡¦ table ¤Î recalc_width() ¤Î wmin ¤ÎºÇÂçÃͤò 0.05 ¤ËÊѹ¹. - ¡¦ ³°Éô¥³¥Þ¥ó¥É¤Î½ÐÎϥХåե¡¤Î filename, basename, type ¤òÊѹ¹. - ¡¦ http ¤È local file °Ê³°¤Î°µ½Ì¥Ç¡¼¥¿¤ò¿­Ä¹¤¹¤ë¤Î¤Ë, °ìö¥Æ¥ó¥Ý¥é¥ê - ¥Õ¥¡¥¤¥ë¤ËÍî¤È¤¹¤è¤¦¤Ë¤·¤¿. - ¡¦ ¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë̾¤òÀ¸À®¤¹¤ëÊýË¡¤ÎÊѹ¹. - ¡¦ mailcap ¤Î edit= ¤ò²ò¼á¤¹¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦ URLFile ¤Î½é´ü²½¤¬ÉÔ´°Á´¤À¤Ã¤¿ÌäÂê¤Î½¤Àµ. - ¡¦ »Ä¤Ã¤Æ¤¤¤¿Èó¸ø¼°¥Ñ¥Ã¥Á¤Î¥´¥ß¤Îºï½ü. - - -2000/10/05 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - -dump, -source_dump ¥ª¥×¥·¥ç¥ó¤Î²þÁ±, frame Ãæ¤Î <meta> ¥¿¥°¤ò̵»ë - ¤¹¤ë¤è¤¦¤Ë¤¿. - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 00930] HTML-quote in w3mbookmark.c - "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ÎÅÐÏ¿" ¤Ç URL ¤ä Title ¤¬ HTML-quote ¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤ò - ½¤Àµ¤·¤Þ¤·¤¿¡£ - -From: hsaka@mth.biglobe.ne.jp (Hironori Sakamoto) -Subject: [w3m-dev 00972] better display of progress bar ? - 2Mb ¤Î¥Õ¥¡¥¤¥ë¤òÆɤó¤Ç¤¤¤ë»þ¤Ë¡¢¤º¤Ã¤È 0/2Mb ¤Ë¤Ê¤Ã¤ÆÈᤷ¤«¤Ã¤¿¤Î¤Ç¡¢ - ¥×¥í¥°¥ì¥¹¥Ð¡¼¤Îɽ¼¨¤ò %.0f (%.1f) ¤«¤é %.3g ¤Ë¤·¤Æ¤ß¤¿¤ó¤Ç¤¹¤¬¡¢ - ¤É¤ó¤Ê¤â¤ó¤Ç¤·¤ç¤¦¡£ - - -2000/10/05 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> - textlist ¤ËÂФ¹¤ë null pointer ¥Á¥§¥Ã¥¯¤ò²Ã¤¨¤¿. - -From: Fumitoshi UKAI <ukai@debian.or.jp> -Subject: [w3m-dev 01100] space in URL - - * http://bugs.debian.org/60825 ¤È http://bugs.debian.org/67466 - - form ¤ò submit ¤¹¤ë»þ¤Ë value ¤·¤« form_quote() ¤·¤Æ¤Þ¤»¤ó¤¬ - name ¤ÎÊý¤â form_quote() ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ - - * http://bugs.debian.org/66887 - - Goto URL: ¤ÇÀèƬ¤Ë space ¤¬Æþ¤ë¤È current¤«¤é¤ÎÁêÂа·¤¤¤Ë¤Ê¤ë¤Î¤ò - ¤ä¤á¤Æ¤Û¤·¤¤¤È¤¤¤¦Êó¹ð¡£¤¿¤·¤«¤Ë cut & paste ¤¹¤ë¤È¤­¤Ë¤Ê¤ê¤¬¤Á¤Ê¤Î¤Ç - (¤Ä¤¤¤Ç¤Ê¤Î¤Ç¸å¤í¤Î¶õÇò¤âºï½ü) - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01111] bug of conv.c - UTF-8 ¤Ê¥Ú¡¼¥¸(Shift_JIS ¤È¸íǧ¤µ¤ì¤ë)¤Ç w3m ¤Îɽ¼¨¤¬Íð¤ì¤ë - (¥³¥ó¥È¥í¡¼¥ë¥·¡¼¥±¥ó¥¹¤¬Ï³¤ì¤ë)¤³¤È¤¬¤¢¤Ã¤¿¤Î¤ÇÄ´¤Ù¤Æ¤ß¤¿¤È¤³¤í¡¢ - conv.c ¤¬¥Ð¥°¤Ã¤Æ¤Þ¤·¤¿¡£Ã±½ã¥ß¥¹¤Ç¤¹¡£¤¹¤ß¤Þ¤»¤óm(_o_)m - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01113] bug fix (content charset) - content charset ¤ÎÀßÄêÉô¤Ç¥Ð¥°¤Ã¤Æ¤Þ¤·¤¿¤Î¤Ç¡¢½¤Àµ patch ¤Ç¤¹¡£ - - -2000/10/02 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01112] Re: mailcap test= directive - mailcap ¤Î°·¤¤¤ò³ÈÄ¥¤·¤Þ¤·¤¿. - ¡¦ %s °Ê³°¤Ë, %t (content-type name) ¤ò»È¤¨¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¡¦ nametemplate ¥ª¥×¥·¥ç¥ó¤¬Í­¸ú¤Ë¤Ê¤ê¤Þ¤·¤¿. - ¡¦ %s ¤¬Ìµ¤¤¾ì¹ç¤Ï, ɸ½àÆþÎϤò %s ¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Æ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹ - ¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¥·¥§¥ë¤Î¹½Ê¸¤È¤·¤Æ¥Ü¡¼¥ó¥·¥§¥ë¤ò²¾Äꤷ¤Æ¤¤¤ë¤Î¤Ç, OS/2 Åù¤Ç¤Ï¤³¤Î - ¤Þ¤Þ¤Ç¤ÏÂÌÌܤ«¤â¤·¤ì¤Þ¤»¤ó. - ¡¦ needsterminal ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï, ¥Õ¥©¥¢¥°¥é¥ó¥É¤Ç¥³¥Þ¥ó¥É¤ò¼Â - ¹Ô¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¡¦ copiousoutput ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï, ¥³¥Þ¥ó¥É¤Î¼Â¹Ô·ë²Ì¤ò¥Ð¥Ã¥Õ¥¡ - ¤ËÆɤ߹þ¤à¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¡¦ RFC 1524 ¤Ë¤Ï̵¤¤¤Î¤Ç¤¹¤¬, ¥³¥Þ¥ó¥É¤Î¼Â¹Ô·ë²Ì¤ò text/html ¤È¤·¤Æ - ¥Ð¥Ã¥Õ¥¡¤ËÆɤ߹þ¤à¤¿¤á¤Î¥ª¥×¥·¥ç¥ó htmloutput ¤òÄɲä·¤Þ¤·¤¿. - ¤³¤ì¤Ï, ºäËܤµ¤ó¤¬ [w3m-dev 01079] ¤ÇÄó°Æ¤µ¤ì¤Æ¤¤¤¿¤â¤Î¤ÎÂåÂذƤΠ- ¤Ä¤â¤ê¤Ç¤¹. - ¤Þ¤À¥Æ¥¹¥È¤·¤Æ¤Þ¤»¤ó¤¬, ¤Á¤ã¤ó¤ÈÆ°¤¤¤Æ¤¤¤ì¤Ð - - application/excel; xlHtml %s | lv -Iu8 -Oej; htmloutput - - ¤È¤¹¤ì¤Ð, lv ¤Î¼Â¹Ô·ë²Ì¤¬ html ¤È¤·¤Æ w3m ¤Î¥Ð¥Ã¥Õ¥¡¤Ëɽ¼¨¤µ¤ì¤ë - ¤Ï¤º¤Ç¤¹. - Ʊ¤¸ content-type ¤Î¥¨¥ó¥È¥ê¤¬Ê£¿ô¤¢¤ë¾ì¹ç, htmloutput ¥ª¥×¥·¥ç¥ó - ¤¬¤¢¤ë¤â¤Î¤òÍ¥À褹¤ë¤è¤¦¤Ë¤·¤Æ¤¢¤ë¤Î¤Ç, ¾¤Î¥×¥í¥°¥é¥à¤È mailcap - ¤ò¶¦Í­¤·¤Æ¤âÌäÂê̵¤¤¤È»×¤¤¤Þ¤¹. - ¤·¤«¤·, RFC 1524 ¤Ë½àµò¤·¤Æ¤Ê¤¤¤Î¤Ï³Î¤«¤Ê¤Î¤Ç, ¸æ°Õ¸«¤ªÂÔ¤Á¤·¤Æ¤Þ - ¤¹. - ¡¦ (gunzip_stream() ¤Ë¤è¤ë) °µ½Ì¥Õ¥¡¥¤¥ë¤Î±ÜÍ÷¤¬ ftp ¤ËÂФ·¤Æ¤â»È¤¨ - ¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¿ʬ [w3m-dev 01078] ¤Î¥Ð¥°¤À¤È»×¤¤¤Þ¤¹¤¬, http ¤ËÂФ·¤Æ, °µ½Ì¤· - ¤¿¥Æ¥­¥¹¥È¥Ç¡¼¥¿¤Î±ÜÍ÷¤¬¤Ç¤­¤Ê¤¯¤Ê¤Ã¤Æ¤¿¤Î¤Ç, ½¤Àµ¤·¤Þ¤·¤¿. - - -2000/09/28 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01097] gunzip_stream problem - °µ½Ì¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ó¤Ç¤ëÅÓÃæ¤Ç, INT ¥·¥°¥Ê¥ë¤¬È¯À¸¤·¤¿¤È¤­¤ÎÆ°ºî - ¤¬ÊѤʤΤÇ, ½¤Àµ¤·¤Þ¤·¤¿. - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01092] CONFIG_FILE - config.h ¤Î CONFIG_FILE ¤òÊѹ¹¤·¤Æ¤âÈ¿±Ç¤µ¤ì¤Ê¤¤¤Ê¤È»×¤Ã¤¿¤é¡¢ - ¤¤¤Ä¤Î¤Þ¤Ë¤«¥Ï¡¼¥É¥³¡¼¥Ç¥£¥ó¥°¤ËÌá¤Ã¤Æ¤Þ¤·¤¿¡£ - ¤½¤Î½¤Àµ¤Ç¤¹¡£ - - -2000/09/17 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01078] treatment of content type - document type ¤Î°·¤¤¤Î²þÎɤò¹Ô¤Ê¤¤¤Þ¤·¤¿. - ¡¦ examineFile ¤Ë¤ª¤±¤ë, lessopen_stream ¤È gunzip_stream ¤ÎÍ¥Àè½ç°Ì - ¤òÊѹ¹¤·¤Þ¤·¤¿. - ¡¦ lessopen_stream ¤Î½èÍý¸å¤Ï, plain text ¤È¤·¤Æ°·¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¡¦ lessopen_stream ¤Ï, document type ¤¬ text/* ¤Ç¤¢¤ë¤«, ³°Éô¥Ó¥å¡¼¥¢ - ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Î¤ß»È¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¤Þ¤¿, text/html °Ê³°¤Î, text/* ·¿¤Ï w3m ÆâÉô¤Ç½èÍý¤¹¤ë¤è¤¦¤Ë¤·¤Þ - ¤·¤¿. - ¡¦ page_info_panel ¤Çɽ¼¨¤µ¤ì¤ë document type ¤Ï, examineFile ¤Ç½èÍý - ¤µ¤ì¤ëÁ°¤ÎÃͤò»È¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿. - ¡¦ ³°Éô¥Ó¥å¡¼¥¢¤ò¥Ð¥Ã¥¯¥°¥é¥ó¥É¤ÇÆ°¤«¤¹¤È¤­, ¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ë - ">/dev/null 2>&1 &" ¤òÉÕ¤±¤Æ¤ß¤Þ¤·¤¿. - - -2000/09/13 - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01053] Re: Location: in local cgi. - [w3m-dev 01051] ¤Î¥Ñ¥Ã¥Á¤Ç¤Ï¡¢w3m -m ¤Ç Location: ¤Î¥Ø¥Ã¥À¤Î¤¢¤ëʸ¾Ï¤ò - ¸«¤ë¤ÈÈô¤ó¤Ç¤¤¤Ã¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢local CGI ¤Î¤È¤­¤Î¤ß Location: ¤ò»²¾È¤¹ - ¤ë¤è¤¦¤ËÊѹ¹¤·¤Þ¤·¤¿¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01065] map key '0' - keymap ¤¬¤é¤ß¤Î½¤Àµ¤Ç¤¹¡£ - ¡¦Ã±ÆȤΠ'0' ¤ò¥­¡¼¥Þ¥Ã¥×²Äǽ¤Ë¤·¤Þ¤·¤¿¡£ - ¡Ø10 j¡Ù¤È¤«¤Ï°ÊÁ°Ä̤ê¤Ç¤¹¡£ - ¡¦¡ØESC ¤¢¡Ù¤Ê¤É ESC ¤Î¸å¤Ë 0x80-0xff ¤Îʸ»ú¤òÆþÎϤ¹¤ë¤È - ÇÛÎó³°¥¢¥¯¥»¥¹¤ò¤¹¤ë²ÄǽÀ­¤¬¤¢¤Ã¤¿¤â¤Î¤ò½¤Àµ¡£ - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 01066] 104japan - frame Ãæ¤Î form ¤Îʸ»ú¥³¡¼¥É¤ÎÊÑ´¹¤¬¾å¼ê¤¯½èÍý¤Ç¤­¤Æ¤¤¤Ê¤¤¤è¤¦ - ¤Ç¤¹¤Î¤Ç¡¢½¤Àµ¤·¤Þ¤·¤¿¡£ - - -2000/09/07 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01058] <dt>, <dd>, <blockquote> (Re: <ol> etc.) - ¡¦ <blockquote> ¤ÎÁ°¸å¤Î¶õ¹Ô¤Ï¾ï¤ËÆþ¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦ <dt>, <dd> ¥¿¥°Ä¾¸å¤Î <p> ¥¿¥°¤ò̵»ë¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿. - - -2000/09/04 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01052] cellpadding, cellspacing, vspace, etc. - ¶õÇò¤ä¶õ¹Ô¤Ë´Ø¤¹¤ë, ¼¡¤Î¤è¤¦¤Ê¤¤¤¯¤Ä¤«¤ÎÊѹ¹¤ò¹Ô¤Ê¤¤¤Þ¤·¤¿. - ¡¦ ;ʬ¤Ê¥»¥ë¤¬½ÐÍè¤ë¤Î¤òËɤ°¤¿¤á¤Ë, <tr> ¤ä <td> ¤Î³°¤Ë¤¢¤ë - <a name="..."></a> ¤ä, <font> Åù¤Ï¼¡¤Î¥»¥ë¤ËÆþ¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦ <table> ¤Î cellspacing °À­¤Î²ò¼á¤ò´Ö°ã¤Ã¤Æ¤¤¤¿¤Î¤Ç, ½¤Àµ¤·¤¿. - vspace °À­¤â²ò¼á¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿. - ¡¦ ¶õ¹Ô¤ÎȽÄê¾ò·ï¤òÊѹ¹¤·¤¿. - ¡¦ </p> ¥¿¥°¤Ç¶õ¹Ô¤¬Æþ¤ë¤è¤¦¤Ë¤·¤¿. - - -2000/08/17 - -From: Tsutomu Okada (²¬ÅÄ ÊÙ) <okada@furuno.co.jp> -Subject: [w3m-dev 01018] sqrt DOMAIN error in table.c -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01019] Re: sqrt DOMAIN error in table.c - º¬¹æ¤ÎÃæ¿È¤¬Éé¤Ë¤Ê¤ë¾ì¹ç¤¬¤¢¤ëÌäÂê¤Î½¤Àµ. - - -2000/08/15 - -From: satodai@dog.intcul.tohoku.ac.jp (Dai Sato) -Subject: [w3m-dev 01017] value of input tag in option panel - aito Ï¢ÍíÄ¢¡Êhttp://ei5nazha.yz.yamagata-u.ac.jp/BBS/spool/log.html¡Ë - ¤Ë½Ð¤Æ¤¿ÌäÂê¤Ç¤¹¡£option ²èÌ̤γ°Éô editor ¤Ê¤É¤Ë '"' ¤¬´Þ¤Þ¤ì¤ë - ¥³¥Þ¥ó¥É¤¬»ØÄꤵ¤ì¤ë¤È¡¤ºÆÅÙ option ²èÌ̤ò¸Æ¤Ó½Ð¤·¤¿»þ¤Ë '"' °Ê¹ß¤¬ - ɽ¼¨¤µ¤ì¤Ê¤¯¤Ê¤ë¤È¸À¤¦ÌäÂê¡£ - - -2000/08/06 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01016] Table geometry calculation - table ¤Î¥¸¥ª¥á¥È¥ê¡¼·×»»¤Ç¼Â¿ô¤òÀ°¿ô¤Ë´Ý¤á¤ë¼ê½ç¤òÊѹ¹¤·¤Æ, table Éý¤Î - »ØÄêÃͤÈËÜÅö¤ÎÉý¤Îº¹¤¬²Äǽ¤Ê¸Â¤ê¾®¤µ¤¯¤Ê¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿. - - -2000/07/26 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01006] initialize PRNG of openssl 0.9.5 or later - ¥Ð¡¼¥¸¥ç¥ó 0.9.5 °Ê¹ß¤Î openssl ¥é¥¤¥Ö¥é¥ê¤Ç, ¥é¥ó¥À¥à¥Ç¥Ð¥¤¥¹ - (/dev/urandom) ¤¬Â¸ºß¤·¤Ê¤¤´Ä¶­¤Ç¤â SSL ¤¬»È¤¨¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿. - - -2000/07/21 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01004] unused socket is not closed. - C-c (SIGINT) ¤Ç¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß¤òÃæÃǤ·¤¿¤È¤­, socket ¤¬¥¯¥í¡¼¥º¤µ¤ì - ¤Æ¤¤¤Ê¤¤¾ì¹ç¤¬¤¢¤ë¤è¤¦¤Ç¤¹. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01005] table caption problem - </caption> ¤ò˺¤ì¤Æ¤¤¤¿¤È¤­¤Ë w3m ¤¬½ªÎ»¤·¤Ê¤¯¤Ê¤ëÌäÂê¤ÎÌäÂê¤Î½¤Àµ. - - -2000/07/19 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 00966] ssl and proxy authorization - authorization ¤òɬÍפȤ¹¤ë¾ì¹ç¤Î HTTP proxy ¥µ¡¼¥Ð¤Î SSL ¥È¥ó¥Í¥ê - ¥ó¥°¤ËÌäÂ꤬¤¢¤Ã¤¿¤Î¤Ç½¤Àµ. - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 01003] Some bug fixes for table - table ¤Î¥¸¥ª¥á¥È¥ê·×»»¤Î¤¤¤¯¤Ä¤«¤ÎÌäÂê¤ËÂФ¹¤ë½¤Àµ. - - -2000/07/16 - -From: SASAKI Takeshi <sasaki@ct.sakura.ne.jp> -Subject: [w3m-dev 00999] Re: bookmark - ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤¬ÅÐÏ¿¤Ç¤­¤Ê¤¤¾ì¹ç¤¬¤¢¤ëÌäÂê¤Î½¤Àµ. - - -2000/06/18 - -From: Okabe Katsuya <okabek@guitar.ocn.ne.jp> -Subject: [w3m-dev 00934] clear_buffer bug - clear_buffer ¤¬ TRUE ¤Î¤È¤­, selBuf() ¤Ç²èÌ̤¬¾Ã¤¨¤Æ¤·¤Þ¤¦ÌäÂê¤ËÂФ¹¤ë - ¥Ð¥°¥Õ¥£¥¯¥¹¤Ç¤¹. - - -2000/06/17 - -From: SASAKI Takeshi <sasaki@ct.sakura.ne.jp> -Subject: [w3m-dev 00929] ftp.c patch - USER ¥³¥Þ¥ó¥É¤ËÂФ·¤Æ 230 ¤¬Ê֤äƤ­¤¿¾ì¹ç¤Ë¤ÏÀ®¸ù¤·¤¿¤â¤Î¤È - ¤ß¤Ê¤¹ patch ¤òºîÀ®¤·¤Þ¤·¤¿¡£°Ê²¼¤ËźÉÕ¤·¤Þ¤¹¡£ - - -2000/06/16 - -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 00923] some bug fixes - ¡¦ #undef JP_CHARSET ¤Î¾ì¹ç¤Ë file.c ¤¬ make ¤Ç¤­¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿ - ¥Ð¥°(»ä¤Î¥ß¥¹¤Ç¤·¤¿_o_)¤Î½¤Àµ¤È¡¢ - ¡¦ buffer.c ¤Î '=' ¤¬ '==' ¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤â¤Î¤Î½¤Àµ¤Ç¤¹¡£ - -From: Kazuhiko Izawa <izawa@nucef.tokai.jaeri.go.jp> -Subject: [w3m-dev 00924] Re: w3m-0.1.11pre -From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> -Subject: [w3m-dev 00925] Re: w3m-0.1.11pre - file://localhost/foo ¤Î·Á¼°¤Î URL ¤Ë¥¢¥¯¥»¥¹¤·¤è¤¦¤È¤·¤¿¤È¤­°Û¾ï½ª - λ¤·¤Æ¤·¤Þ¤¦ÌäÂê¤Î½¤Àµ. diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html @@ -48,8 +48,6 @@ w3m <dd>text/plain ¤Îʸ½ñ¤òɽ¼¨¤¹¤ë¾ì¹ç¡¤½Å¤ÍÂǤÁ¤Ë¤è¤ë¶¯Ä´Ê¸»ú¤òɽ¼¨¤·¤Ê¤¤¡¥ ¤³¤Î¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤Ê¤¤¾ì¹ç¡¤``A^H_''¤ÏA¤Î¥¢¥ó¥À¡¼¥é¥¤¥ó¤È¤·¤Æɽ¼¨¤µ¤ì¡¤ ``A^HA''¤ÏA¤Î¥Ü¡¼¥ë¥É¤È¤·¤Æɽ¼¨¤µ¤ì¤ë¡¥ -<dt>-S -<dd>text/plain ¤Îʸ½ñ¤òɽ¼¨¤¹¤ë¾ì¹ç¡¤Ê£¿ô¤Î¶õ¹Ô¤ò1¤Ä¤Ë¤Þ¤È¤á¤Æɽ¼¨¤¹¤ë¡¥ <dt>-l ¹Ô¿ô <dd>ɸ½àÆþÎϤÎÆâÍƤòɽ¼¨¤¹¤ë¤È¤­¤ËÊݸ¤µ¤ì¤ëºÇÂç¹Ô¿ô¤ò»ØÄꤹ ¤ë¡¥¥Ç¥Õ¥©¥ë¥È¤Ï 10000¡¥ @@ -59,6 +57,8 @@ w3m <dd>EUC ¥³¡¼¥É¤Çɽ¼¨¤¹¤ë¡¥ <dt>-j <dd>JIS(ISO-2022-JP) ¥³¡¼¥É¤Çɽ¼¨¤¹¤ë¡¥ +<dt>-I e|s +<dd>ÆþÎÏʸ½ñ¤Îʸ»ú¥³¡¼¥É¤ò»ØÄꤹ¤ë¡¥ <dt>-T ¥¿¥¤¥× <dd>ɽ¼¨¤¹¤ëʸ½ñ¤Î¥¿¥¤¥×¤ò»ØÄꤹ¤ë¡¥¤³¤Î»ØÄ꤬¤Ê¤¤¾ì¹ç¡¤¥Õ¥¡¥¤¥ë ̾¤Î³ÈÄ¥»Ò¤Ë¤è¤Ã¤Æ¼«Æ°È½Ê̤µ¤ì¤ë¡¥È½Ê̤Ǥ­¤Ê¤¤¾ì¹ç¤Ï text/plain @@ -77,6 +77,8 @@ HTML <dd>Internet message ¥â¡¼¥É¤Çɽ¼¨¤¹¤ë¡¥Internet message¥â¡¼¥É¤Î¾ì¹ç¡¤ ¥Ø¥Ã¥À¤ÎÆâÍƤò¸«¤Æ¡¤Content-Type: ¤¬¤¢¤ì¤Ð¤½¤ì¤ò»²¹Í¤Ë¤¹¤ë¡¥ÅŻҥ᡼¥ë¤ä ¥Í¥Ã¥È¥Ë¥å¡¼¥¹¤Îµ­»ö¤òÆɤà¤È¤­¤ËÊØÍø¡¥ +<dt>-v +<dd>¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Ú¡¼¥¸¤òɽ¼¨¤¹¤ë¡¥ <dt>-B <dd>Bookmark ¤òɽ¼¨¤¹¤ë¡¥ <dt>-bookmark file @@ -95,6 +97,8 @@ HTML <dd>¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¡¥ <dt>-no-proxy <dd>¥×¥í¥­¥·¤òÍøÍѤ·¤Ê¤¤¡¥ +<dt>-pauth user:pass +<dd>¥×¥í¥­¥·Ç§¾ÚÍѤΥ桼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ò»ØÄꤹ¤ë¡¥ <dt>-no-mouse <dd>¥Þ¥¦¥¹¤òÍøÍѤ·¤Ê¤¤¡¥ <dt>-cookie @@ -115,6 +119,16 @@ HTML ´Á»ú¥³¡¼¥ÉÊÑ´¹¤â¤µ¤ì¤Ê¤¤¡¥ <dt>-dump_head <dd>URL¤Ë¥¢¥¯¥»¥¹¤·¡¤¥Ø¥Ã¥À¾ðÊó¤ò½ÐÎϤ¹¤ë¡¥ +<dt>-dump_both +<dd>URL¤Ë¥¢¥¯¥»¥¹¤·¡¤¥Ø¥Ã¥À¾ðÊó¤ÈHTML¥½¡¼¥¹¤ò½ÐÎϤ¹¤ë¡¥ +<dt>-dump_extra +<dd>URL¤Ë¥¢¥¯¥»¥¹¤·¡¤³ÈÄ¥¾ðÊó¤È¥Ø¥Ã¥À¾ðÊó¤ÈHTML¥½¡¼¥¹¤ò½ÐÎϤ¹¤ë¡¥ +<dt>-post file +<dd>¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòPOST¤¹¤ë¡¥ +<dt>-header string +<dd>HTTPÍ×µá¥Ø¥Ã¥À¤òÄɲ乤롥 +<dt>-config file +<dd>config¤Î¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¡¥ </dl> <hr> @@ -154,16 +168,20 @@ HTMLʸ <TR><TD>k,C-p,¾åÌð°õ¥­¡¼<TD>¥«¡¼¥½¥ë¤ò¾å¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>J<TD>²èÌ̤ò1¹Ô¾å¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹¡¥ <TR><TD>K<TD>²èÌ̤ò1¹Ô²¼¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹¡¥ +<TR><TD>^,C-a<TD>¹ÔƬ¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>$,C-e<TD>¹ÔËö¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>w<TD>¼¡¤Îñ¸ì¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>W<TD>Á°¤Îñ¸ì¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>&gt;<TD>²èÌÌÁ´ÂΤò±¦¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤòº¸¤Ë¤º¤é¤¹) <TR><TD>&lt;<TD>²èÌÌÁ´ÂΤòº¸¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤò±¦¤Ë¤º¤é¤¹) <TR><TD>.<TD>²èÌÌÁ´ÂΤò1ʸ»ú±¦¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤòº¸¤Ë¤º¤é¤¹) <TR><TD>,<TD>²èÌÌÁ´ÂΤò1ʸ»úº¸¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤò±¦¤Ë¤º¤é¤¹) -<TR><TD>g<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó¾å¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ -<TR><TD>G<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó²¼¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>g,M-&lt;<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó¾å¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>G,M-&gt;<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó²¼¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>ESC g<TD>²èÌ̲¼¤Ç¹ÔÈÖ¹æ¤òÆþÎϤ·¡¤¤½¤³¤Ç»ØÄꤷ¤¿¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ ¤³¤³¤Ç $ ¤òÆþÎϤ¹¤ë¤È¡¤ºÇ½ª¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>Z<TD>¥«¡¼¥½¥ë¤Î¤¢¤ë°ÌÃÖ¤ò¹Ô¤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>z<TD>¥«¡¼¥½¥ë¤Î¤¢¤ë¹Ô¤ò²èÌ̤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>TAB<TD>¼¡¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>C-u, ESC TAB<TD>Á°¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>[<TD>ºÇ½é¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ @@ -175,6 +193,7 @@ HTMLʸ <TR><TD WIDTH=100>RET<TD>¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤¬»Ø¤¹Àè¤Îʸ½ñ¤òÆɤߤ³¤ß¤Þ¤¹¡¥ <TR><TD>a, ESC RET<TD>¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤¬»Ø¤¹Àè¤Îʸ½ñ¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥ <TR><TD>u<TD>¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤¬»Ø¤¹Àè¤ÎURL¤òɽ¼¨¤·¤Þ¤¹¡¥ +<TR><TD>i<TD>¥ê¥ó¥¯¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿²èÁü¤Ø¤ÎURL¤Îɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>I<TD>¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤ËÂбþ¤¹¤ë²èÁü¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>ESC I<TD>¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤¬»Ø¤¹ ²èÁü¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥ @@ -184,6 +203,8 @@ HTMLʸ Æɤó¤Ç¤¤¤ë¤È¤­¤Ë¤âÍ­¸ú¤Ç¤¹¡¥ <TR><TD>c<TD>¸½ºß¤Îʸ½ñ¤ÎURL¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>=<TD>¸½ºß¤Îʸ½ñ¤Ë´Ø¤¹¤ë¾ðÊó¤òɽ¼¨¤·¤Þ¤¹¡¥ +<TR><TD>C-g<TD>¥Ú¡¼¥¸Ãæ¤Ç¤Î¸½ºß°ÌÃÖ¤òɽ¼¨¤·¤Þ¤¹¡¥ +<TR><TD>C-h<TD>URLÍúÎò¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>F<TD>&lt;FRAMESET&gt;¤ò´Þ¤àʸ½ñ¤òɽ¼¨¤·¤Æ¤¤¤ë¤È¤­¤Ë¡¤&lt;FRAME&gt; ¥¿¥°¤Î»Ø¤¹Ê£¿ô¤Îʸ½ñ¤ò1¤Ä¤Îʸ½ñ¤ËÊÑ´¹¤·¤Æɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>M<TD>¸½ºß¸«¤Æ¤¤¤ë¥Ú¡¼¥¸¤ò¡¤³°Éô¥Ö¥é¥¦¥¶¤ò»È¤Ã¤Æɽ¼¨¤·¤Þ¤¹¡¥ @@ -207,6 +228,7 @@ HTMLʸ <TR><TD>s<TD>¥Ð¥Ã¥Õ¥¡ÁªÂò¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹¡¥ <TR><TD>E<TD>¸½ºß¸«¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤¬¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤Î¾ì¹ç¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥¨¥Ç¥£¥¿ ¤ÇÊÔ½¸¤·¤Þ¤¹¡¥¥¨¥Ç¥£¥¿¤ò½ªÎ»¤·¤¿¸å¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤òºÆÅÙÆɤ߹þ¤ß¤Þ¤¹¡¥ +<TR><TD>C-l<TD>²èÌ̤òºÆÉÁ²è¤·¤Þ¤¹¡¥ <TR><TD>R<TD>¥Ð¥Ã¥Õ¥¡¤òºÆÅÙÆɤ߹þ¤ß¤Þ¤¹¡¥ <TR><TD>S<TD>¥Ð¥Ã¥Õ¥¡¤Îɽ¼¨ÆâÍƤò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥ <TR><TD>ESC s<TD>HTML¤Î¥½¡¼¥¹¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥v ¤Ç¥½¡¼¥¹¤òɽ¼¨¤·¤Æ S ¤Ç @@ -238,6 +260,7 @@ HTMLʸ <TR><TD>?,C-r<TD>¸½ºß¤Î¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤Ë¸þ¤«¤Ã¤ÆÀµµ¬É½¸½¤ò¸¡º÷¤·¤Þ¤¹¡¥ <TR><TD>n<TD>¼¡¤ò¸¡º÷¤·¤Þ¤¹¡¥ <TR><TD>N<TD>Á°¤ò¸¡º÷¤·¤Þ¤¹¡¥ +<TR><TD>C-w<TD>ÀÞ¤êÊÖ¤·¸¡º÷¥â¡¼¥É¤òÀڤ괹¤¨¤Þ¤¹¡¥ </table> <H3>¥Þ¡¼¥¯Áàºî</H3> @@ -283,22 +306,27 @@ HTMLʸ LynxÉ÷¥­¡¼¥Ð¥¤¥ó¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤¿¾ì¹ç¤Î»È¤¤¤«¤¿¤Ç¤¹¡¥ <H3>¥Ú¡¼¥¸/¥«¡¼¥½¥ë°ÜÆ°</H3> <table> -<TR><TD>SPC,C-v<TD>¼¡¤Î¥Ú¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡¥ -<TR><TD>b,ESC v<TD>Á°¤Î¥Ú¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡¥ +<TR><TD>SPC,C-v,+<TD>¼¡¤Î¥Ú¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡¥ +<TR><TD>b,ESC v,-<TD>Á°¤Î¥Ú¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>l<TD>¥«¡¼¥½¥ë¤ò±¦¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>h<TD>¥«¡¼¥½¥ë¤òº¸¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>j<TD>¥«¡¼¥½¥ë¤ò²¼¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>k<TD>¥«¡¼¥½¥ë¤ò¾å¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>J<TD>²èÌ̤ò1¹Ô¾å¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹¡¥ <TR><TD>K<TD>²èÌ̤ò1¹Ô²¼¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹¡¥ +<TR><TD>^<TD>¹ÔƬ¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>$<TD>¹ÔËö¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>&gt;<TD>²èÌÌÁ´ÂΤò±¦¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤòº¸¤Ë¤º¤é¤¹) <TR><TD>&lt;<TD>²èÌÌÁ´ÂΤòº¸¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤò±¦¤Ë¤º¤é¤¹) <TR><TD>C-a<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó¾å¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>C-e<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó²¼¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>G<TD>²èÌ̲¼¤Ç¹ÔÈÖ¹æ¤òÆþÎϤ·¡¤¤½¤³¤Ç»ØÄꤷ¤¿¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ ¤³¤³¤Ç $ ¤òÆþÎϤ¹¤ë¤È¡¤ºÇ½ª¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>Z<TD>¥«¡¼¥½¥ë¤Î¤¢¤ë°ÌÃÖ¤ò¹Ô¤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>z<TD>¥«¡¼¥½¥ë¤Î¤¢¤ë¹Ô¤ò²èÌ̤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>TAB, C-n, ²¼Ìð°õ<TD>¼¡¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>ESC TAB, C-p, ¾åÌð°õ<TD>Á°¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>C-g<TD>¥Ú¡¼¥¸Ãæ¤Ç¤Î¸½ºß°ÌÃÖ¤òɽ¼¨¤·¤Þ¤¹¡¥ </table> <H3>¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯Áàºî</H3> @@ -314,6 +342,7 @@ Lynx <TR><TD>ESC :<TD>Message-IDÉ÷¤Îʸ»úÎó¤ò¡¤news: ¤Î¥ê¥ó¥¯¤Ë¤·¤Þ¤¹¡¥¤³¤Îµ¡Ç½¤Ï¡¤HTML¤Ç¤Ê¤¤Ê¸½ñ¤òÆɤó¤Ç¤¤¤ë¤È¤­¤Ë¤âÍ­¸ú¤Ç¤¹¡¥ <TR><TD>c<TD>¸½ºß¤Îʸ½ñ¤ÎURL¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>=<TD>¸½ºß¤Îʸ½ñ¤Ë´Ø¤¹¤ë¾ðÊó¤òɽ¼¨¤·¤Þ¤¹¡¥ +<TR><TD>C-h<TD>URLÍúÎò¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>F<TD>&lt;FRAMESET&gt;¤ò´Þ¤àʸ½ñ¤òɽ¼¨¤·¤Æ¤¤¤ë¤È¤­¤Ë¡¤&lt;FRAME&gt; ¥¿¥°¤Î»Ø¤¹Ê£¿ô¤Îʸ½ñ¤ò1¤Ä¤Îʸ½ñ¤ËÊÑ´¹¤·¤Æɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>M<TD>¸½ºß¸«¤Æ¤¤¤ë¥Ú¡¼¥¸¤ò¡¤³°Éô¥Ö¥é¥¦¥¶¤ò»È¤Ã¤Æɽ¼¨¤·¤Þ¤¹¡¥ @@ -334,8 +363,9 @@ Lynx <table> <TR><TD WIDTH=100>B, C-b, º¸Ìð°õ<TD>¸½ºß¸«¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤òºï½ü¤·¡¤°ì¤ÄÁ°¤Î¥Ð¥Ã¥Õ¥¡¤òɽ¼¨¤·¤Þ¤¹¡¥ <TR><TD>\<TD>HTML¤Î¥½¡¼¥¹¤òɽ¼¨¤·¤Þ¤¹¡¥ -<TR><TD>s, C-h<TD>¥Ð¥Ã¥Õ¥¡ÁªÂò¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹¡¥ +<TR><TD>s<TD>¥Ð¥Ã¥Õ¥¡ÁªÂò¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹¡¥ <TR><TD>E<TD>¸½ºß¸«¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤¬¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤Î¾ì¹ç¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥¨¥Ç¥£¥¿¤ÇÊÔ½¸¤·¤Þ¤¹¡¥¥¨¥Ç¥£¥¿¤ò½ªÎ»¤·¤¿¸å¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤òºÆÅÙÆɤ߹þ¤ß¤Þ¤¹¡¥ +<TR><TD>C-l, C-w<TD>²èÌ̤òºÆÉÁ²è¤·¤Þ¤¹¡¥ <TR><TD>R, C-r<TD>¥Ð¥Ã¥Õ¥¡¤òºÆÅÙÆɤ߹þ¤ß¤Þ¤¹¡¥ <TR><TD>S, p<TD>¥Ð¥Ã¥Õ¥¡¤Îɽ¼¨ÆâÍƤò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥ <TR><TD>ESC s<TD>HTML¤Î¥½¡¼¥¹¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹¡¥v ¤Ç¥½¡¼¥¹¤òɽ¼¨¤·¤Æ S ¤Ç @@ -363,16 +393,16 @@ Lynx <H3>¸¡º÷</H3> <table> -<TR><TD WIDTH=100>/<TD>¸½ºß¤Î¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¥Õ¥¡¥¤¥ëËöÈø¤Ë¸þ¤«¤Ã¤ÆÀµµ¬É½¸½¤ò¸¡º÷¤·¤Þ¤¹¡¥ -<TR><TD>?<TD>¸½ºß¤Î¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤Ë¸þ¤«¤Ã¤ÆÀµµ¬É½¸½¤ò¸¡º÷¤·¤Þ¤¹¡¥ +<TR><TD WIDTH=100>/,C-s<TD>¸½ºß¤Î¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¥Õ¥¡¥¤¥ëËöÈø¤Ë¸þ¤«¤Ã¤ÆÀµµ¬É½¸½¤ò¸¡º÷¤·¤Þ¤¹¡¥ <TR><TD>n<TD>¼¡¤ò¸¡º÷¤·¤Þ¤¹¡¥ +<TR><TD>w<TD>ÀÞ¤êÊÖ¤·¸¡º÷¥â¡¼¥É¤òÀڤ괹¤¨¤Þ¤¹¡¥ </table> <H3>¥Þ¡¼¥¯Áàºî</H3> <table> <TR><TD WIDTH=100>C-SPC<TD>¥Þ¡¼¥¯¤òÀßÄê¡¿²ò½ü¤·¤Þ¤¹¡¥¥Þ¡¼¥¯¤Ïȿžɽ¼¨¤µ¤ì¤Þ¤¹¡¥ -<TR><TD>ESC p<TD>°ì¤ÄÁ°¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ -<TR><TD>ESC n<TD>°ì¤Ä¸å¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>P<TD>°ì¤ÄÁ°¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +<TR><TD>N<TD>°ì¤Ä¸å¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ <TR><TD>"<TD>Àµµ¬É½¸½¤Ç»ØÄꤵ¤ì¤¿Ê¸»úÎó¤òÁ´¤Æ¥Þ¡¼¥¯¤·¤Þ¤¹¡¥ </table> diff --git a/doc-jp/README b/doc-jp/README @@ -81,8 +81,6 @@ OS/2 ¤Î¤Ç¡¤¥â¥Î¥¯¥íÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡¥ Windows README.cygwin ¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡¥ -MS-DOS - README.dj¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ 3. Ãøºî¸¢ diff --git a/doc-jp/README.func b/doc-jp/README.func @@ -6,10 +6,11 @@ BOOKMARK CENTER_H ¥«¡¼¥½¥ë¤Î¤¢¤ë°ÌÃÖ¤ò¹Ô¤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹ CENTER_V ¥«¡¼¥½¥ë¤Î¤¢¤ë¹Ô¤ò²èÌ̤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹ COOKIE ¥¯¥Ã¥­¡¼°ìÍ÷¤òɽ¼¨¤·¤Þ¤¹ +DELETE_PREVBUF Á°¤Î¥Ð¥Ã¥Õ¥¡¤ò¾Ãµî¤·¤Þ¤¹(¼ç¤Ë local-CGI ÍÑ) DICT_WORD ÆþÎϤ·¤¿Ã±¸ì¤ò¼­½ñ¥³¥Þ¥ó¥É¤ÇÄ´¤Ù¤Þ¤¹ DICT_WORD_AT ¥«¡¼¥½¥ë°ÌÃÖ¤Îñ¸ì¤ò¼­½ñ¥³¥Þ¥ó¥É¤ÇÄ´¤Ù¤Þ¤¹ DOWN ²èÌ̤ò1¹Ô²¼¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹ -DOWN_LOAD HTML¤Î¥½¡¼¥¹¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹ +DOWNLOAD HTML¤Î¥½¡¼¥¹¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Þ¤¹ EDIT ¥¨¥Ç¥£¥¿¤ÇÊÔ½¸¤·¤Þ¤¹ EDIT_SCREEN ¸½ºßɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤ò¥¨¥Ç¥£¥¿¤ÇÊÔ½¸¤·¤Þ¤¹ END ʸ½ñ¤Î¤¤¤Á¤Ð¤ó²¼¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹ @@ -22,13 +23,16 @@ GOTO URL GOTO_LINE ²èÌ̲¼¤Ç¹ÔÈÖ¹æ¤òÆþÎϤ·¡¤¤½¤³¤Ç»ØÄꤷ¤¿¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹ GOTO_LINK ¥ê¥ó¥¯¤¬»Ø¤¹Àè¤Îʸ½ñ¤òÆɤߤ³¤ß¤Þ¤¹ HELP ¥Ø¥ë¥×¥Õ¥¡¥¤¥ë¤òɽ¼¨¤·¤Þ¤¹ -HISTPRY URLÍúÎò¤òɽ¼¨¤·¤Þ¤¹ +HISTORY URLÍúÎò¤òɽ¼¨¤·¤Þ¤¹ INFO ¸½ºß¤Îʸ½ñ¤Ë´Ø¤¹¤ë¾ðÊó¤òɽ¼¨¤·¤Þ¤¹ +INIT_MAILCAP mailcap ¤òºÆÆɤ߹þ¤ß¤·¤Þ¤¹(¼ç¤Ë local-CGI ÍÑ) INTERRUPT ʸ½ñ¤ÎÆɤ߹þ¤ß¤òÃæÃǤ·¤Þ¤¹ LEFT ²èÌÌÁ´ÂΤò1ʸ»úº¸¤Ë¤º¤é¤·¤Þ¤¹ LINE_BEGIN ¹ÔƬ¤Ë°ÜÆ°¤·¤Þ¤¹ LINE_END ¹ÔËö¤Ë°ÜÆ°¤·¤Þ¤¹ -LINE_INFO ¸½ºß¤Îʸ½ñ¤Ë´Ø¤¹¤ë¾ðÊó¤òɽ¼¨¤·¤Þ¤¹ +LINE_INFO ¥Ú¡¼¥¸Ãæ¤Ç¤Î¸½ºß°ÌÃÖ¤òɽ¼¨¤·¤Þ¤¹ +LINK_BEGIN ºÇ½é¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ +LINK_END ºÇ¸å¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ LOAD ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Æ³«¤­¤Þ¤¹ MAIN_MENU ¥á¥Ë¥å¡¼¤òΩ¤Á¾å¤²¤Þ¤¹ MARK ¥Þ¡¼¥¯¤òÀßÄê¡¿²ò½ü¤·¤Þ¤¹ @@ -36,20 +40,32 @@ MARK_MID Message-ID MARK_URL URLÉ÷¤Îʸ»úÎó¤ò¥ê¥ó¥¯¤Ë¤·¤Þ¤¹ MENU ¥á¥Ë¥å¡¼¤òΩ¤Á¾å¤²¤Þ¤¹ MOUSE_TOGGLE ¥Þ¥¦¥¹¤ÎÍ­¸ú/̵¸ú¤ò¥È¥°¥ë¤¹¤ë -MOVE_DOWN ¥«¡¼¥½¥ë¤ò²¼¤Ë°ÜÆ°¤·¤Þ¤¹ -MOVE_LEFT ¥«¡¼¥½¥ë¤òº¸¤Ë°ÜÆ°¤·¤Þ¤¹ -MOVE_RIGHT ¥«¡¼¥½¥ë¤ò±¦¤Ë°ÜÆ°¤·¤Þ¤¹ -MOVE_UP ¥«¡¼¥½¥ë¤ò¾å¤Ë°ÜÆ°¤·¤Þ¤¹ +MOVE_DOWN ¥«¡¼¥½¥ë¤ò²¼¤Ë°ÜÆ°¤·¤Þ¤¹(²þ¥Ú¡¼¥¸»þ¤Ë¤ÏȾ¥Ú¡¼¥¸¥¹¥¯¥í¡¼¥ë) +MOVE_DOWN1 ¥«¡¼¥½¥ë¤ò²¼¤Ë°ÜÆ°¤·¤Þ¤¹(²þ¥Ú¡¼¥¸»þ¤Ë¤Ï£±¹Ô¥¹¥¯¥í¡¼¥ë) +MOVE_LEFT ¥«¡¼¥½¥ë¤òº¸¤Ë°ÜÆ°¤·¤Þ¤¹(º¸Ã¼¤Î¾ì¹ç¤Ë¤ÏȾ²èÌÌʬ¥·¥Õ¥È) +MOVE_LEFT1 ¥«¡¼¥½¥ë¤òº¸¤Ë°ÜÆ°¤·¤Þ¤¹(º¸Ã¼¤Î¾ì¹ç¤Ë¤Ï£±Ê¸»úʬ¥·¥Õ¥È) +MOVE_RIGHT ¥«¡¼¥½¥ë¤ò±¦¤Ë°ÜÆ°¤·¤Þ¤¹(±¦Ã¼¤Î¾ì¹ç¤Ë¤ÏȾ²èÌÌʬ¥·¥Õ¥È) +MOVE_RIGHT1 ¥«¡¼¥½¥ë¤ò±¦¤Ë°ÜÆ°¤·¤Þ¤¹(±¦Ã¼¤Î¾ì¹ç¤Ë¤Ï£±Ê¸»úʬ¥·¥Õ¥È) +MOVE_UP ¥«¡¼¥½¥ë¤ò¾å¤Ë°ÜÆ°¤·¤Þ¤¹(²þ¥Ú¡¼¥¸»þ¤Ë¤ÏȾ¥Ú¡¼¥¸¥¹¥¯¥í¡¼¥ë) +MOVE_UP1 ¥«¡¼¥½¥ë¤ò¾å¤Ë°ÜÆ°¤·¤Þ¤¹(²þ¥Ú¡¼¥¸»þ¤Ë¤Ï£±¹Ô¥¹¥¯¥í¡¼¥ë) +MSGS ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Î°ìÍ÷¤Îɽ¼¨ +NEXT_DOWN ¥«¡¼¥½¥ë¤Î²¼Â¦¤Ë¤¢¤ë¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ +NEXT_LEFT ¥«¡¼¥½¥ë¤Îº¸Â¦¤Ë¤¢¤ë¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ +NEXT_LEFT_UP ¥«¡¼¥½¥ë¤Îº¸Â¦(̵¤±¤ì¤ÐÁ°¤Î¹Ô°ÊÁ°)¤Ë¤¢¤ë¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ NEXT_LINK ¼¡¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ NEXT_MARK °ì¤Ä¸å¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ NEXT_PAGE ¼¡¤Î¥Ú¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹ +NEXT_RIGHT ¥«¡¼¥½¥ë¤Î±¦Â¦¤Ë¤¢¤ë¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ +NEXT_RIGHT_DOWN ¥«¡¼¥½¥ë¤Î±¦Â¦(̵¤±¤ì¤Ð¼¡¹Ô°Ê¹ß)¤Ë¤¢¤ë¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ +NEXT_UP ¥«¡¼¥½¥ë¤Î¾å¦¤Ë¤¢¤ë¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ NEXT_WORD ¼¡¤Îñ¸ì¤Ë°ÜÆ°¤·¤Þ¤¹ NOTHING ²¿¤â¤·¤Þ¤»¤ó NULL ²¿¤â¤·¤Þ¤»¤ó OPTIONS ¥ª¥×¥·¥ç¥óÀßÄê¥Ñ¥Í¥ë¤òɽ¼¨¤·¤Þ¤¹ PEEK ¸½ºß¤Îʸ½ñ¤ÎURL¤òɽ¼¨¤·¤Þ¤¹ -PEEK_LINK ¥ê¥ó¥¯¤¬»Ø¤¹Àè¤ÎURL¤òɽ¼¨¤·¤Þ¤¹ PEEK_IMG ¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤ò´Þ¤à²èÁü¤½¤Î¤â¤Î¤ÎURL¤òɽ¼¨¤·¤Þ¤¹ +PEEK_LINK ¥ê¥ó¥¯¤¬»Ø¤¹Àè¤ÎURL¤òɽ¼¨¤·¤Þ¤¹ +PIPE_BUF ¥Ð¥Ã¥Õ¥¡¤ÎÆâÍƤò¥Ñ¥¤¥×¤ËÅϤ·¤Þ¤¹ PIPE_SHELL ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¡¤·ë²Ì¤òÆɤߤ³¤ß¤Ê¤¬¤éɽ¼¨¤·¤Þ¤¹ PREV_LINK Á°¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ PREV_MARK °ì¤ÄÁ°¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹ @@ -72,12 +88,16 @@ SEARCH_FORE SEARCH_NEXT ¼¡¤ò¸¡º÷¤·¤Þ¤¹ SEARCH_PREV Á°¤ò¸¡º÷¤·¤Þ¤¹ SELECT ¥Ð¥Ã¥Õ¥¡ÁªÂò¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹ +SELECT_MENU ¥Ð¥Ã¥Õ¥¡ÁªÂò¥á¥Ë¥å¡¼¤òΩ¤Á¾å¤²¤Þ¤¹ +SETENV ´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¤Þ¤¹ +SET_OPTION ¥ª¥×¥·¥ç¥ó¤òÀßÄꤷ¤Þ¤¹ SHELL ¥·¥§¥ë¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤¹ SHIFT_LEFT ²èÌÌÁ´ÂΤòº¸¤Ë¤º¤é¤·¤Þ¤¹ SHIFT_RIGHT ²èÌÌÁ´ÂΤò±¦¤Ë¤º¤é¤·¤Þ¤¹ SOURCE HTML¤Î¥½¡¼¥¹¤òɽ¼¨¤·¤Þ¤¹ SUSPEND ¥µ¥¹¥Ú¥ó¥É UP ²èÌ̤ò1¹Ô¾å¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹ +VERSION w3m ¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨¤·¤Þ¤¹ VIEW HTML¤Î¥½¡¼¥¹¤òɽ¼¨¤·¤Þ¤¹ VIEW_BOOKMARK ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤òÆɤ߹þ¤ß¤Þ¤¹ VIEW_IMAGE ¥ê¥ó¥¯¤ËÂбþ¤¹¤ë²èÁü¤òɽ¼¨¤·¤Þ¤¹ diff --git a/doc-jp/README.mailcap b/doc-jp/README.mailcap @@ -28,11 +28,13 @@ mailcap LESSOPEN ¥³¥Þ¥ó¥É¤Ç¤Ç¤­¤ë»ö¤Ï, ÂçÉôʬ¤³¤ì¤ÇÃÖ¤­´¹¤¨¤ë»ö¤¬¤Ç¤­¤Þ¤¹. ¤½¤Î¤¿¤á LESSOPEN ¤ÎÍøÍѤϥª¥×¥·¥ç¥ó°·¤¤¤Ë¤Ê¤ê¤Þ¤·¤¿. - w3m ¤Î³ÈÄ¥¥Õ¥£¡¼¥ë¥É¤È¤·¤Æ, htmloutput ¤¬¤¢¤ê¤Þ¤¹. copiousoutput ¤ÈƱÍͤ˥³ - ¥Þ¥ó¥É¤Î¼Â¹Ô·ë²Ì¤¬¥Ð¥Ã¥Õ¥¡¤ËÆɤ߹þ¤Þ¤ì¤Þ¤¹¤¬, HTML ¤È¤·¤Æ¥ì¥ó¥À¥ê¥ó¥°¤¹¤ë½ê - ¤¬°Û¤Ê¤ê¤Þ¤¹. ¤³¤Îµ¡Ç½¤ò»È¤¦¾ì¹ç¤Ï, w3m ÍѤΠmailcap ¥Õ¥¡¥¤¥ë¤òÊ̤ËÍÑ°Õ¤¹¤ë - ¤«, ¾¤Î¥Ö¥é¥¦¥¶ÍÑ¤Ë htmloutput ¤ò´Þ¤Þ¤Ê¤¤¥¨¥ó¥È¥ê¤òÁ°¤ËÃÖ¤¤¤Æ¤ª¤¯¤ÈÎɤ¤¤« - ¤â¤·¤ì¤Þ¤»¤ó. + w3m ¤Î³ÈÄ¥¥Õ¥£¡¼¥ë¥É¤È¤·¤Æ, x-htmloutput ¤¬¤¢¤ê¤Þ¤¹. copiousoutput ¤ÈƱÍÍ¤Ë + ¥³¥Þ¥ó¥É¤Î¼Â¹Ô·ë²Ì¤¬¥Ð¥Ã¥Õ¥¡¤ËÆɤ߹þ¤Þ¤ì¤Þ¤¹¤¬, HTML ¤È¤·¤Æ¥ì¥ó¥À¥ê¥ó¥°¤¹¤ë + ½ê¤¬°Û¤Ê¤ê¤Þ¤¹. ¤³¤Îµ¡Ç½¤ò»È¤¦¾ì¹ç¤Ï, w3m ÍѤΠmailcap ¥Õ¥¡¥¤¥ë¤òÊ̤ËÍÑ°Õ¤¹ + ¤ë¤«, ¾¤Î¥Ö¥é¥¦¥¶ÍÑ¤Ë x-htmloutput ¤ò´Þ¤Þ¤Ê¤¤¥¨¥ó¥È¥ê¤òÁ°¤ËÃÖ¤¤¤Æ¤ª¤¯¤ÈÎÉ + ¤¤¤«¤â¤·¤ì¤Þ¤»¤ó. + (2001/08/01) ºäËÜ + htmloutput ¢ª x-htmloutput ¡¦ nametemplate= ¤Ï³°Éô¥³¥Þ¥ó¥É¤ËÅϤ¹¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤷ¤Þ¤¹. ¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤òºî¤ë¤È¤­, Ä̾︵¤Î URL ¤Î³ÈÄ¥»Ò¤¬¥Õ¥¡¥¤¥ë̾¤ËÉÕ¤±¤é¤ì¤Þ diff --git a/doc-jp/keymap.default b/doc-jp/keymap.default @@ -26,7 +26,9 @@ keymap C-n MOVE_DOWN keymap C-p MOVE_UP keymap C-r SEARCH_BACK keymap C-s SEARCH +keymap C-u PREV_LINK keymap C-v NEXT_PAGE +keymap C-w WRAP_TOGGLE keymap C-z SUSPEND keymap SPC NEXT_PAGE @@ -52,6 +54,7 @@ keymap I VIEW_IMAGE keymap J UP keymap K DOWN keymap M EXTERN +keymap N SEARCH_PREV keymap Q EXIT keymap R RELOAD keymap S SAVE_SCREEN @@ -59,6 +62,8 @@ keymap U GOTO keymap V LOAD keymap W PREV_WORD keymap Z CENTER_H +keymap [ LINK_BEGIN +keymap ] LINK_END keymap \^ LINE_BEGIN keymap a SAVE_LINK keymap b PREV_PAGE @@ -72,7 +77,7 @@ keymap l MOVE_RIGHT keymap n SEARCH_NEXT keymap o OPTIONS keymap q QUIT -keymap s SELECT +keymap s SELECT_MENU keymap u PEEK_LINK keymap v VIEW keymap w NEXT_WORD diff --git a/doc-jp/keymap.lynx b/doc-jp/keymap.lynx @@ -12,9 +12,10 @@ keymap C-@ MARK keymap C-a BEGIN -keymap C-b PREV_PAGE +keymap C-b BACK keymap C-e END -keymap C-f NEXT_PAGE +keymap C-f GOTO_LINK +keymap C-g LINE_INFO keymap C-h HISTORY keymap TAB NEXT_LINK keymap C-j GOTO_LINK @@ -51,6 +52,7 @@ keymap H HELP keymap I VIEW_IMAGE keymap J UP keymap K DOWN +keymap M EXTERN keymap N NEXT_MARK keymap P PREV_MARK keymap Q EXIT @@ -64,7 +66,7 @@ keymap \^ LINE_BEGIN keymap a ADD_BOOKMARK keymap b PREV_PAGE keymap c PEEK -keymap d SAVE +keymap d SAVE_LINK keymap g GOTO keymap h MOVE_LEFT keymap i PEEK_IMG @@ -75,9 +77,10 @@ keymap n SEARCH_NEXT keymap o OPTIONS keymap p SAVE_SCREEN keymap q QUIT -keymap s SELECT +keymap s SELECT_MENU keymap u PEEK_LINK keymap v BOOKMARK +keymap w WRAP_TOGGLE keymap z CENTER_V keymap M-TAB PREV_LINK @@ -86,6 +89,7 @@ keymap M-C-m SAVE_LINK keymap M-: MARK_MID keymap M-I SAVE_IMAGE +keymap M-M EXTERN_LINK keymap M-a ADD_BOOKMARK keymap M-b BOOKMARK keymap M-e EDIT_SCREEN diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1 @@ -48,6 +48,9 @@ EUC .B \-j JIS (ISO-2022-JP)¥³¡¼¥É¤Çɽ¼¨¤¹¤ë¡¥ .TP +.BI \-I\ e|s +ÆþÎÏʸ½ñ¤Îʸ»ú¥³¡¼¥É¤ò»ØÄꤹ¤ë¡¥ +.TP .BI \-T\ ¥¿¥¤¥× ɽ¼¨¤¹¤ëʸ½ñ¤Î¥¿¥¤¥×¤ò»ØÄꤹ¤ë¡¥¤³¤Î»ØÄ꤬¤Ê¤¤¾ì¹ç¡¤¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤Ë¤è¤Ã¤Æ ¼«Æ°È½Ê̤µ¤ì¤ë¡¥È½Ê̤Ǥ­¤Ê¤¤¾ì¹ç¤Ïtext/plain¤È¤ß¤Ê¤µ¤ì¤ë¡¥ @@ -100,6 +103,9 @@ Bookmark .B \-no\-proxy ¥×¥í¥­¥·¤òÍøÍѤ·¤Ê¤¤¡¥ .TP +.BI \-pauth\ user:pass +¥×¥í¥­¥·Ç§¾ÚÍѤΥ桼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ò»ØÄꤹ¤ë¡¥ +.TP .B \-no\-mouse ¥Þ¥¦¥¹¤òÍøÍѤ·¤Ê¤¤¡¥ .TP @@ -130,6 +136,21 @@ URL .TP .B \-dump_head URL¤Ë¥¢¥¯¥»¥¹¤·¡¤¥Ø¥Ã¥À¾ðÊó¤ò½ÐÎϤ¹¤ë¡¥ +.TP +.B \-dump_both +URL¤Ë¥¢¥¯¥»¥¹¤·¡¤¥Ø¥Ã¥À¾ðÊó¤ÈHTML¥½¡¼¥¹¤ò½ÐÎϤ¹¤ë¡¥ +.TP +.B \-dump_extra +URL¤Ë¥¢¥¯¥»¥¹¤·¡¤³ÈÄ¥¾ðÊó¤È¥Ø¥Ã¥À¾ðÊó¤ÈHTML¥½¡¼¥¹¤ò½ÐÎϤ¹¤ë¡¥ +.TP +.BI \-post\ file +¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòPOST¤¹¤ë¡¥ +.TP +.BI \-header\ string +HTTPÍ×µá¥Ø¥Ã¥À¤òÄɲ乤롥 +.TP +.BI \-config\ file +config¤Î¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¡¥ .SS ʸ½ñ¤Îɽ¼¨ÆâÍÆ HTMLʸ½ñ¤òɽ¼¨¤·¤Æ¤¤¤ë¤È¤­¤Ë¤Ï¡¤¼¡¤Î¤è¤¦¤Êɽ¼¨¤Ë¤Ê¤ê¤Þ¤¹¡¥ .in +8n @@ -195,6 +216,12 @@ FORM .B K ²èÌ̤ò1¹Ô²¼¤Ë¥¹¥¯¥í¡¼¥ë¤·¤Þ¤¹¡¥ .TP +.B ^ +¹ÔƬ¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +.TP +.B $ +¹ÔËö¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +.TP .B w ¼¡¤Îñ¸ì¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP @@ -213,10 +240,10 @@ FORM .B ", " ²èÌÌÁ´ÂΤò1ʸ»úº¸¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤò±¦¤Ë¤º¤é¤¹) .TP -.B g +.B g, M-< ʸ½ñ¤Î¤¤¤Á¤Ð¤ó¾å¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP -.B G +.B G, M-> ʸ½ñ¤Î¤¤¤Á¤Ð¤ó²¼¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP .B "ESC g" @@ -225,11 +252,23 @@ FORM .$ ¤òÆþÎϤ¹¤ë¤È¡¤ºÇ½ª¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP +.B Z +¥«¡¼¥½¥ë¤Î¤¢¤ë°ÌÃÖ¤ò¹Ô¤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +.TP +.B z +¥«¡¼¥½¥ë¤Î¤¢¤ë¹Ô¤ò²èÌ̤ÎÃæ±û¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +.TP .B TAB ¼¡¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP .B C-u, "ESC TAB" Á°¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +.TP +.B [ +ºÇ½é¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ +.TP +.B ] +ºÇ¸å¤Î¥ê¥ó¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .SS ¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯Áàºî .TP .B RET @@ -241,6 +280,9 @@ FORM .B u ¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤¬»Ø¤¹Àè¤ÎURL¤òɽ¼¨¤·¤Þ¤¹¡¥ .TP +.B i +¥ê¥ó¥¯¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿²èÁü¤Ø¤ÎURL¤Îɽ¼¨¤·¤Þ¤¹¡¥ +.TP .B I ¸½ºß¥«¡¼¥½¥ë¤¬¤¢¤ë¥ê¥ó¥¯¤ËÂбþ¤¹¤ë²èÁü¤òɽ¼¨¤·¤Þ¤¹¡¥ .TP @@ -261,6 +303,12 @@ Message-ID .B = ¸½ºß¤Îʸ½ñ¤Ë´Ø¤¹¤ë¾ðÊó¤òɽ¼¨¤·¤Þ¤¹¡¥ .TP +.B C-g +¥Ú¡¼¥¸Ãæ¤Ç¤Î¸½ºß°ÌÃÖ¤òɽ¼¨¤·¤Þ¤¹¡¥ +.TP +.B C-h +URLÍúÎò¤òɽ¼¨¤·¤Þ¤¹¡¥ +.TP .B F <FRAMESET>¤ò´Þ¤àʸ½ñ¤òɽ¼¨¤·¤Æ¤¤¤ë¤È¤­¤Ë¡¤<FRAME>¥¿¥°¤Î»Ø¤¹Ê£¿ô¤Îʸ½ñ¤ò1¤Ä¤Î ʸ½ñ¤ËÊÑ´¹¤·¤Æɽ¼¨¤·¤Þ¤¹¡¥ @@ -303,6 +351,9 @@ HTML ¸½ºß¸«¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤¬¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤Î¾ì¹ç¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥¨¥Ç¥£¥¿¤ÇÊÔ½¸¤·¤Þ ¤¹¡¥¥¨¥Ç¥£¥¿¤ò½ªÎ»¤·¤¿¸å¡¤¤½¤Î¥Õ¥¡¥¤¥ë¤òºÆÅÙÆɤ߹þ¤ß¤Þ¤¹¡¥ .TP +.B C-l +²èÌ̤òºÆÉÁ²è¤·¤Þ¤¹¡¥ +.TP .B R ¥Ð¥Ã¥Õ¥¡¤òºÆÅÙÆɤ߹þ¤ß¤Þ¤¹¡¥ .TP @@ -355,15 +406,21 @@ HTML .TP .B n ¼¡¤ò¸¡º÷¤·¤Þ¤¹¡¥ +.TP +.B N +Á°¤ò¸¡º÷¤·¤Þ¤¹¡¥ +.TP +.B C-w +ÀÞ¤êÊÖ¤·¸¡º÷¥â¡¼¥É¤òÀڤ괹¤¨¤Þ¤¹¡¥ .SS ¥Þ¡¼¥¯Áàºî .TP .B C-SPC ¥Þ¡¼¥¯¤òÀßÄê¡¿²ò½ü¤·¤Þ¤¹¡¥¥Þ¡¼¥¯¤Ïȿžɽ¼¨¤µ¤ì¤Þ¤¹¡¥ .TP -.B P +.B "ESC p" °ì¤ÄÁ°¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP -.B N +.B "ESC n" °ì¤Ä¸å¤Î¥Þ¡¼¥¯¤Ë°ÜÆ°¤·¤Þ¤¹¡¥ .TP .B "\"" @@ -379,6 +436,9 @@ HTML .B o ¥ª¥×¥·¥ç¥óÀßÄê¥Ñ¥Í¥ë¤òɽ¼¨¤·¤Þ¤¹¡¥ .TP +.B C-k +¥¯¥Ã¥­¡¼°ìÍ÷¤òɽ¼¨¤·¤Þ¤¹¡¥ +.TP .B C-c ʸ½ñ¤ÎÆɤ߹þ¤ß¤òÃæÃǤ·¤Þ¤¹¡¥ .TP diff --git a/doc/FAQ.html b/doc/FAQ.html @@ -256,7 +256,7 @@ with Ctrl-u. What to do?</h3> <i>Up to <a href="#index">index</a></i> </div> <br> -<u><h2><a name="other">Miscellanous</a></h2></u> +<u><h2><a name="other">Miscellaneous</a></h2></u> <br> <dl> <dt><h3>What is w3m's configuration file?</h3> diff --git a/doc/MANUAL.html b/doc/MANUAL.html @@ -52,8 +52,6 @@ Options are as follows: <dd>When displaying text/plain document, prohibit emphasis using backspace. If you don't specify this option, ``A^H_'' is interpreted as underlined character and ``A^HA'' as a bold character. -<dt>-S -<dd>When displaying text/plain document, squeeze blank lines. <dt>-l number <dd>Specify line number preserved internally when reading text/plain document fron standard input. Default is 10000. @@ -80,8 +78,10 @@ Display HTML source </pre> <dt>-m <dd>Display document with Internet message mode. -With this option, w3m determines document type from header infomation. +With this option, w3m determines document type from header information. It is useful when reading E-mail or NetNews messages. +<dt>-v +<dd>visual startup mode. <dt>-B <dd>Show the bookmark. <dt>-bookmark file @@ -91,7 +91,7 @@ It is useful when reading E-mail or NetNews messages. <dt>-F <dd>Automatically render frame. <dt>-S -<dd>Sqeeze blank lines. +<dd>Squeeze blank lines. <dt>-X <dd>Upon exit, do not display preserved screen. <dt>-W @@ -120,12 +120,22 @@ with -cols option. <dd>Read document specified by URL and dump the source. <dt>-dump_head <dd>Read document specified by URL and dump headers. +<dt>-dump_both +<dd>Read document specified by URL and dump headers and the source. +<dt>-dump_extra +<dd>Read document specified by URL and dump extra informations, headers and the source. +<dt>-post file +<dd>use POST method with file content. +<dt>-header string +<dd>insert string as a header. <dt>-no-proxy <dd>Don't use proxy server. <dt>-no-graph <dd>Don't use graphic character to draw frames. <dt>-no-mouse <dd>Don't activate mouse. +<dt>-config file +<dd>specify config file. </dl> <hr> @@ -163,17 +173,21 @@ bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>. <TR><TD>k,C-p<TD>Cursor up <TR><TD>J<TD>Roll up one line <TR><TD>K<TD>Roll down one line +<TR><TD>^,C-a<TD>Go to the beginning of line +<TR><TD>$,C-e<TD>Go to the end of line <TR><TD>w<TD>Go to next word <TR><TD>W<TD>Go to previous word <TR><TD>&gt;<TD>Shift screen right <TR><TD>&lt;<TD>Shift screen left <TR><TD>.<TD>Shift screen one column right <TR><TD>,<TD>Shift screen one column left -<TR><TD>g<TD>Go to the first line -<TR><TD>G<TD>Go to the last line +<TR><TD>g,M-&lt;<TD>Go to the first line +<TR><TD>G,M-&gt;<TD>Go to the last line <TR><TD>ESC g<TD>Go to specified line +<TR><TD>Z<TD>Move to the center line +<TR><TD>z<TD>Move to the center column <TR><TD>TAB<TD>Move to next hyperlink -<TR><TD>ESC TAB<TD>Move to previous hyperlink +<TR><TD>C-u,ESC TAB<TD>Move to previous hyperlink <TR><TD>[<TD>Move to the first hyperlink <TR><TD>]<TD>Move to the last hyperlink </table> @@ -183,12 +197,15 @@ bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>. <TR><TD WIDTH=100>RET<TD>Follow hyperlink <TR><TD>a, ESC RET<TD>Save link to file <TR><TD>u<TD>Peek link URL +<TR><TD>i<TD>Peek image URL <TR><TD>I<TD>View inline image <TR><TD>ESC I<TD>Save inline image to file <TR><TD>:<TD>Mark URL-like strings as anchors <TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors <TR><TD>c<TD>Peek current URL -<TR><TD>=<TD>Display infomation about current document +<TR><TD>=<TD>Display information about current document +<TR><TD>C-g<TD>Show current line number +<TR><TD>C-h<TD>View history of URL <TR><TD>F<TD>Render frame <TR><TD>M<TD>Browse current document using external browser (use 2M and 3M to invoke second and third browser) @@ -210,6 +227,7 @@ bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>. <TR><TD>v<TD>View HTML source <TR><TD>s<TD>Select buffer <TR><TD>E<TD>Edit buffer source +<TR><TD>C-l<TD>Redraw screen <TR><TD>R<TD>Reload buffer <TR><TD>S<TD>Save buffer <TR><TD>ESC s<TD>Save source @@ -236,6 +254,7 @@ bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>. <TR><TD>?,C-r<TD>Search backward <TR><TD>n<TD>Search next <TR><TD>N<TD>Search previous +<TR><TD>C-w<TD>Toggle wrap search mode </table> <H3>Mark operation</H3> @@ -251,6 +270,7 @@ bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>. <TR><TD WIDTH=100>!<TD>Execute shell command <TR><TD>H<TD>Help (load this file) <TR><TD>o<TD>Set option +<TR><TD>C-k<TD>Show cookie jar <TR><TD>C-c<TD>Stop <TR><TD>C-z<TD>Suspend <TR><TD>q<TD>Quit (with confirmation, if you like) @@ -282,21 +302,26 @@ you can use the following key binding. <H3>Page/Cursor motion</H3> <table> -<TR><TD WIDTH=100>SPC,C-v<TD>Forward page -<TR><TD>b,ESC v<TD>Previous page +<TR><TD WIDTH=100>SPC,C-v,+<TD>Forward page +<TR><TD>b,ESC v,-<TD>Previous page <TR><TD>l<TD>Cursor right <TR><TD>h<TD>Cursor left <TR><TD>j<TD>Cursor down <TR><TD>k<TD>Cursor up <TR><TD>J<TD>Roll up one line <TR><TD>K<TD>Roll down one line +<TR><TD>^<TD>Go to the beginning of line +<TR><TD>$<TD>Go to the end of line <TR><TD>&gt;<TD>Shift screen right <TR><TD>&lt;<TD>Shift screen left -<TR><TD>.<TD>Shift screen one column right -<TR><TD>,<TD>Shift screen one column left +<TR><TD>C-a<TD>Go to the first line +<TR><TD>C-e<TD>Go to the last line <TR><TD>G<TD>Go to the specified line +<TR><TD>Z<TD>Move to the center line +<TR><TD>z<TD>Move to the center column <TR><TD>TAB,C-n,Down arrow<TD>Move to next hyperlink <TR><TD>ESC TAB,C-p,Up arrow<TD>Move to previous link +<TR><TD>C-g<TD>Show current page position </table> @@ -305,12 +330,14 @@ you can use the following key binding. <TR><TD WIDTH=100>RET, C-f, Right arrow<TD>Follow hyperlink <TR><TD>d, ESC RET<TD>Save link to file <TR><TD>u<TD>Peek link URL +<TR><TD>i<TD>Peek image URL <TR><TD>I<TD>View inline image <TR><TD>ESC I<TD>Save inline image to file <TR><TD>:<TD>Mark URL-like strings as anchors <TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors <TR><TD>c<TD>Peek current URL -<TR><TD>=<TD>Display infomation about current document +<TR><TD>=<TD>Display information about current document +<TR><TD>C-h<TD>View history of URL <TR><TD>F<TD>Render frame <TR><TD>M<TD>Browse current document using external browser (use 2M and 3M to invoke second and third browser) @@ -332,6 +359,7 @@ you can use the following key binding. <TR><TD>\<TD>View HTML source <TR><TD>s, C-h<TD>Select buffer <TR><TD>E<TD>Edit buffer source +<TR><TD>C-l, C-w<TD>Redraw screen <TR><TD>R, C-r<TD>Reload buffer <TR><TD>S, p<TD>Save buffer <TR><TD>ESC s<TD>Save source @@ -354,24 +382,25 @@ you can use the following key binding. <H2>Search</H2> <table> -<TR><TD WIDTH=100>/<TD>Search forward -<TR><TD>?<TD>Search backward +<TR><TD WIDTH=100>/, C-s<TD>Search forward <TR><TD>n<TD>Search next +<TR><TD>w<TD>Toggle wrap search mode </table> <H2>Mark operation</H2> <table> <TR><TD WIDTH=100>C-SPC<TD>Set/unset mark -<TR><TD>ESC p<TD>Go to previous mark -<TR><TD>ESC n<TD>Go to next mark +<TR><TD>P<TD>Go to previous mark +<TR><TD>N<TD>Go to next mark <TR><TD>"<TD>Mark by regular expression </table> <H2>Miscellany</H2> <table> <TR><TD WIDTH=100>!<TD>Execute shell command -<TR><TD>H<TD>Help (load this file) +<TR><TD>H, ?<TD>Help (load this file) <TR><TD>o<TD>Set option +<TR><TD>C-k<TD>Show cookie jar <TR><TD>C-c<TD>Stop <TR><TD>C-z<TD>Suspend <TR><TD>q<TD>Quit (with confirmation, if you like) diff --git a/doc/README b/doc/README @@ -18,7 +18,7 @@ used as a text-mode WWW browser. Current problems are: -* Resize behaviour is imcomplete. +* Resize behaviour is incomplete. * It can't show images inline. (It seems to be impossible as far as using xterm) * It doesn't decode MIME-body of the document. diff --git a/doc/README.func b/doc/README.func @@ -6,10 +6,11 @@ BOOKMARK Read bookmark CENTER_H Move to the center line CENTER_V Move to the center column COOKIE View cookie list -DELETE_PREVBUF Delete previous buffer +DELETE_PREVBUF Delete previous buffer (mainly for local-CGI) DICT_WORD Execute dictionary command (see README.dict) +DICT_WORD_AT Execute dictionary command for word at cursor DOWN Scroll down one line -DOWN_LOAD Save HTML source +DOWNLOAD Save HTML source EDIT Edit current document EDIT_SCREEN Edit currently rendered document END Go to the last line @@ -25,31 +26,46 @@ HELP View help HISTORY View history of URL INFO View info of current document INTERRUPT Stop loading document -INIT_MAILCAP Reread mailcap +INIT_MAILCAP Reread mailcap (mainly for local-CGI) LEFT Shift screen one column LINE_BEGIN Go to the beginning of line LINE_END Go to the end of line LINE_INFO Show current line number +LINK_BEGIN Go to the first link +LINK_END Go to the last link LOAD Load local file MAIN_MENU Popup menu MARK Set/unset mark MARK_MID Mark Message-ID-like strings as anchors MARK_URL Mark URL-like strings as anchors MENU Popup menu -MOVE_DOWN Move cursor down -MOVE_LEFT Move cursor left -MOVE_RIGHT Move cursor right -MOVE_UP Move cursor up +MOUSE_TOGGLE Toggle activity of mouse +MOVE_DOWN Move cursor down (a half screen scroll at the end of screen) +MOVE_DOWN1 Move cursor down (1 line scroll at the end of screen) +MOVE_LEFT Move cursor left (a half screen shift at the left edge) +MOVE_LEFT1 Move cursor left (1 columns shift at the left edge) +MOVE_RIGHT Move cursor right (a half screen shift at the right edge) +MOVE_RIGHT1 Move cursor right (1 columns shift at the right edge) +MOVE_UP Move cursor up (a half screen scroll at the top of screen) +MOVE_UP1 Move cursor up (1 line scrol at the top of screen) +MSGS Display error messages +NEXT_DOWN Move to next downward link +NEXT_LEFT Move to next left link +NEXT_LEFT_UP Move to next left (or upward) link NEXT_LINK Move to next link NEXT_MARK Move to next word NEXT_PAGE Move to next page +NEXT_RIGHT Move to next right link +NEXT_RIGHT_DOWN Move to next right (or downward) link +NEXT_UP Move to next upward link NEXT_WORD Move to next word NOTHING Do nothing NULL Do nothing OPTIONS Option setting panel PEEK Peek current URL -PEEK_LINK Peek link URL PEEK_IMG Peek image URL +PEEK_LINK Peek link URL +PIPE_BUF Send rendered document to pipe PIPE_SHELL Execute shell command and browse PREV_LINK Move to previous link PREV_MARK Move to previous mark @@ -72,14 +88,18 @@ SEARCH_FORE Search forward SEARCH_NEXT Search next regexp SEARCH_PREV Search previous regexp SELECT Go to buffer selection panel +SELECT_MENU Popup buffer selection menu +SETENV Set environment variable +SET_OPTION Set option SHELL Execute shell command SHIFT_LEFT Shift screen left SHIFT_RIGHT Shift screen right SOURCE View HTML source SUSPEND Stop loading document UP Scroll up one line +VERSION Display version of w3m VIEW View HTML source VIEW_BOOKMARK View bookmark VIEW_IMAGE View image WHEREIS Search forward -WRAP_TOGGLE Toggle wrap search mode +WRAP_TOGGLE Toggle wrap search mode diff --git a/doc/STORY.html b/doc/STORY.html @@ -101,7 +101,7 @@ read the research log. Then I decided to implement a table renderer into w3m. <P> I didn't intend to write a perfect table renderer because tables -I used was not very complicated. However, imcomplete table rendering +I used was not very complicated. However, incomplete table rendering made the display of table-layout pages horrible. I realized that it required almost-perfect table renderer to do well both in `rendering (real) table' and `fine display of diff --git a/doc/keymap.default b/doc/keymap.default @@ -26,7 +26,9 @@ keymap C-n MOVE_DOWN keymap C-p MOVE_UP keymap C-r SEARCH_BACK keymap C-s SEARCH +keymap C-u PREV_LINK keymap C-v NEXT_PAGE +keymap C-w WRAP_TOGGLE keymap C-z SUSPEND keymap SPC NEXT_PAGE @@ -52,6 +54,7 @@ keymap I VIEW_IMAGE keymap J UP keymap K DOWN keymap M EXTERN +keymap N SEARCH_PREV keymap Q EXIT keymap R RELOAD keymap S SAVE_SCREEN @@ -59,6 +62,8 @@ keymap U GOTO keymap V LOAD keymap W PREV_WORD keymap Z CENTER_H +keymap [ LINK_BEGIN +keymap ] LINK_END keymap \^ LINE_BEGIN keymap a SAVE_LINK keymap b PREV_PAGE @@ -72,7 +77,7 @@ keymap l MOVE_RIGHT keymap n SEARCH_NEXT keymap o OPTIONS keymap q QUIT -keymap s SELECT +keymap s SELECT_MENU keymap u PEEK_LINK keymap v VIEW keymap w NEXT_WORD diff --git a/doc/keymap.lynx b/doc/keymap.lynx @@ -12,9 +12,10 @@ keymap C-@ MARK keymap C-a BEGIN -keymap C-b PREV_PAGE +keymap C-b BACK keymap C-e END -keymap C-f NEXT_PAGE +keymap C-f GOTO_LINK +keymap C-g LINE_INFO keymap C-h HISTORY keymap TAB NEXT_LINK keymap C-j GOTO_LINK @@ -51,6 +52,7 @@ keymap H HELP keymap I VIEW_IMAGE keymap J UP keymap K DOWN +keymap M EXTERN keymap N NEXT_MARK keymap P PREV_MARK keymap Q EXIT @@ -64,7 +66,7 @@ keymap \^ LINE_BEGIN keymap a ADD_BOOKMARK keymap b PREV_PAGE keymap c PEEK -keymap d SAVE +keymap d SAVE_LINK keymap g GOTO keymap h MOVE_LEFT keymap i PEEK_IMG @@ -75,9 +77,10 @@ keymap n SEARCH_NEXT keymap o OPTIONS keymap p SAVE_SCREEN keymap q QUIT -keymap s SELECT +keymap s SELECT_MENU keymap u PEEK_LINK keymap v BOOKMARK +keymap w WRAP_TOGGLE keymap z CENTER_V keymap M-TAB PREV_LINK @@ -86,6 +89,7 @@ keymap M-C-m SAVE_LINK keymap M-: MARK_MID keymap M-I SAVE_IMAGE +keymap M-M EXTERN_LINK keymap M-a ADD_BOOKMARK keymap M-b BOOKMARK keymap M-e EDIT_SCREEN diff --git a/doc/w3m.1 b/doc/w3m.1 @@ -65,12 +65,18 @@ EUC-JP .B -B load bookmark .TP +.B -bookmark file +specify bookmark file +.TP .B -T type specify content-type .TP .B -m internet message mode .TP +.B -v +visual startup mode +.TP .B -M monochrome display .TP @@ -90,9 +96,51 @@ Larger values will make tables narrower. .B -dump_source dump page source into stdout .TP +.B -dump_head +dump response of HEAD request into stdout +.TP +.B -dump_both +dump HEAD and source into stdout +.TP +.B -dump_extra +dump HEAD, source, and extra information into stdout +.TP +.B -post file +use POST method with file content +.TP +.B -header string +insert string as a header +.TP .B +<num> goto <num> line .TP +.B -num +show line number +.TP +.B -no-proxy +don't use proxy +.TP +.B -no-mouse +don't use mouse +.TP +.B -pauth user:pass +proxy authentication +.TP +.B -S +squeeze multiple blank lines +.TP +.B -W +toggle wrap search mode +.TP +.B -X +don't use termcap init/deinit +.TP +.B -o opt=value +assign value to config option +.TP +.B -config file +specify config file +.TP .B -debug DO NOT USE .SH EXAMPLES @@ -113,7 +161,7 @@ $ cat foo.html | w3m -dump -T text/html >foo.txt This is the .I w3m -990604 Release. +0.2.1 Release. .PP Additional information about .I diff --git a/entity.c b/entity.c @@ -0,0 +1,135 @@ + +#include "fm.h" +#include <stdio.h> +#include "indep.h" +#include "Str.h" +#include "gc.h" + +typedef struct { + short ucs; + char *ptr; +} entity_map; + +#ifdef JP_CHARSET +#include "ucs_eucjp.h" + +static char *latin1_eucjp_map[ 96 ] = +{ + NBSP, "!", "¡ñ", "¡ò", "CUR","¡ï", "|", "¡ø", /* 32- 39 */ + "¡¯", "(C)","-a", "¢ã", "¢Ì", "-", "(R)","¡±", /* 40- 47 */ + "¡ë", "¡Þ", "^2", "^3", "'", "¦Ì", "¢ù", "¡¦", /* 48- 55 */ + ",", "^1", "-o", "¢ä", "1/4","1/2","3/4","?", /* 56- 63 */ + "A`", "A'", "A^", "A~", "A:", "¢ò", "AE","C,", /* 64- 71 */ + "E`", "E'", "E^", "E", "I`", "I'", "I^", "I:", /* 72- 79 */ + "D-", "N~", "O`", "O'", "O^", "O~", "Oe", "¡ß", /* 80- 87 */ + "¦Õ", "U`", "U'", "U^", "U:", "Y'", "th", "ss", /* 88- 95 */ + "a`", "a'", "a^", "a~", "a:", "a", "ae", "c", /* 96-103 */ + "e`", "e'", "e^", "e:", "i`", "i'", "i^", "i:", /* 104-111 */ + "d-", "n~", "o`", "o'", "o^", "o~", "oe", "¡à", /* 112-119 */ + "¦Õ", "u`", "u'", "u^", "u:", "y'", "th", "y:" /* 120-127 */ +}; + +#else +#ifdef __EMX__ +/* + * Character conversion table + * ( to code page 850 from iso-8859-1 ) + * + * Following character constants are in code page 850. + */ +static char *latin1_cp850_map[ 96 ] = { + NBSP, "\255", "\275", "\234", "\317", "\276", "\335", "\365", + "\371", "\270", "\246", "\256", "\252", "\360", "\251", "\356", + "\370", "\361", "\375", "\374", "\357", "\346", "\364", "\372", + "\367", "\373", "\247", "\257", "\254", "\253", "\363", "\250", + "\267", "\265", "\266", "\307", "\216", "\217", "\222", "\200", + "\324", "\220", "\322", "\323", "\336", "\326", "\327", "\330", + "\321", "\245", "\343", "\340", "\342", "\345", "\231", "\236", + "\235", "\353", "\351", "\352", "\232", "\355", "\350", "\341", + "\205", "\240", "\203", "\306", "\204", "\206", "\221", "\207", + "\212", "\202", "\210", "\211", "\215", "\241", "\214", "\213", + "\320", "\244", "\225", "\242", "\223", "\344", "\224", "\366", + "\233", "\227", "\243", "\226", "\201", "\354", "\347", "\230" +}; +#endif +#endif +#include "ucs_latin1.h" + +static char *latin1_ascii_map[ 96 ] = +{ + NBSP, "!", "-c-","-L-","CUR","=Y=","|", "S:", /* 32- 39 */ + "\"", "(C)","-a", "<<", "NOT","-", "(R)","¡±", /* 40- 47 */ + "DEG","+-", "^2", "^3", "'", "u", "P:", ".", /* 48- 55 */ + ",", "^1", "-o", ">>", "1/4","1/2","3/4","?", /* 56- 63 */ + "A`", "A'", "A^", "A~", "A:", "AA", "AE", "C,", /* 64- 71 */ + "E`", "E'", "E^", "E", "I`", "I'", "I^", "I:", /* 72- 79 */ + "D-", "N~", "O`", "O'", "O^", "O~", "Oe", "x", /* 80- 87 */ + "O/", "U`", "U'", "U^", "U:", "Y'", "th", "ss", /* 88- 95 */ + "a`", "a'", "a^", "a~", "a:", "a", "ae", "c", /* 96-103 */ + "e`", "e'", "e^", "e:", "i`", "i'", "i^", "i:", /* 104-111 */ + "d-", "n~", "o`", "o'", "o^", "o~", "oe", "-:", /* 112-119 */ + "o/", "u`", "u'", "u^", "u:", "y'", "th", "y:" /* 120-127 */ +}; + +char UseAltEntity = FALSE; + +static int +map_cmp(const void *a, const void *b) +{ + return *(int *)a - ((entity_map *)b)->ucs; +} + +static char * +map_search(int c, entity_map *map, size_t n) +{ + entity_map *m; + + m = (entity_map *)bsearch((void *)&c, (void *)map, n, + sizeof(entity_map), map_cmp); + return m ? m->ptr : NULL; +} + +char * +conv_entity(int c) +{ + static char buf[] = {0, 0}; + char *p; + + if (c < 0) /* error */ + return "?"; + if (c < 0x80) { /* US-ASCII */ + buf[0] = (char)c; + return buf; + } + if (c < 0xa0) /* C1 */ + return "?"; + if (c == 0xa0) /* NBSP */ + return NBSP; + if (c < 0x100) { /* Latin 1 (ISO-8859-1) */ + if (UseAltEntity) + return latin1_ascii_map[c - 0xa0]; +#ifdef JP_CHARSET + return latin1_eucjp_map[c - 0xa0]; +#else +#ifdef __EMX__ + if (CodePage == 850) + return latin1_cp850_map[c - 0xa0]; +#endif + buf[0] = (char)c; + return buf; +#endif + } + /* Unicode */ +#ifdef JP_CHARSET + if (! UseAltEntity) { + p = map_search(c, ucs_eucjp_map, + sizeof(ucs_eucjp_map) / sizeof(entity_map)); + return p ? p : "?"; + } +#endif + p = map_search(c, ucs_latin1_map, + sizeof(ucs_latin1_map) / sizeof(entity_map)); + if (p && *p & 0x80) /* ISO-8859-1 */ + return conv_entity((int)(*p & 0xff)); + return p ? p : "?"; +} diff --git a/entity.h b/entity.h @@ -0,0 +1,365 @@ +#include "hash.h" +static HashItem_si MyHashItem[] = { + /* 0 */ {"otimes",0x2297,&MyHashItem[1]}, + /* 1 */ {"laquo",0xAB,NULL}, + /* 2 */ {"cap",0x2229,&MyHashItem[3]}, + /* 3 */ {"dArr",0x21D3,&MyHashItem[4]}, + /* 4 */ {"euml",0xEB,NULL}, + /* 5 */ {"sum",0x2211,&MyHashItem[6]}, + /* 6 */ {"Ocirc",0xD4,NULL}, + /* 7 */ {"dagger",0x2020,&MyHashItem[8]}, + /* 8 */ {"Scaron",0x0160,&MyHashItem[9]}, + /* 9 */ {"Omicron",0x039F,&MyHashItem[10]}, + /* 10 */ {"brvbar",0xA6,NULL}, + /* 11 */ {"Eta",0x0397,&MyHashItem[12]}, + /* 12 */ {"iacute",0xED,&MyHashItem[13]}, + /* 13 */ {"aelig",0xE6,&MyHashItem[14]}, + /* 14 */ {"Ugrave",0xD9,&MyHashItem[15]}, + /* 15 */ {"deg",0xB0,NULL}, + /* 16 */ {"Yuml",0x0178,&MyHashItem[17]}, + /* 17 */ {"sup",0x2283,&MyHashItem[18]}, + /* 18 */ {"middot",0xB7,NULL}, + /* 19 */ {"ge",0x2265,&MyHashItem[20]}, + /* 20 */ {"alefsym",0x2135,&MyHashItem[21]}, + /* 21 */ {"sigma",0x03C3,&MyHashItem[22]}, + /* 22 */ {"aring",0xE5,&MyHashItem[23]}, + /* 23 */ {"Icirc",0xCE,NULL}, + /* 24 */ {"and",0x2227,&MyHashItem[25]}, + /* 25 */ {"weierp",0x2118,&MyHashItem[26]}, + /* 26 */ {"frac12",0xBD,NULL}, + /* 27 */ {"radic",0x221A,&MyHashItem[28]}, + /* 28 */ {"chi",0x03C7,&MyHashItem[29]}, + /* 29 */ {"zeta",0x03B6,&MyHashItem[30]}, + /* 30 */ {"Theta",0x0398,&MyHashItem[31]}, + /* 31 */ {"Atilde",0xC3,&MyHashItem[32]}, + /* 32 */ {"para",0xB6,NULL}, + /* 33 */ {"frac14",0xBC,&MyHashItem[34]}, + /* 34 */ {"cedil",0xB8,&MyHashItem[35]}, + /* 35 */ {"quot",0x22,NULL}, + /* 36 */ {"ang",0x2220,&MyHashItem[37]}, + /* 37 */ {"ucirc",0xFB,NULL}, + /* 38 */ {"supe",0x2287,&MyHashItem[39]}, + /* 39 */ {"iota",0x03B9,&MyHashItem[40]}, + /* 40 */ {"Ograve",0xD2,NULL}, + /* 41 */ {"rArr",0x21D2,&MyHashItem[42]}, + /* 42 */ {"Auml",0xC4,&MyHashItem[43]}, + /* 43 */ {"frac34",0xBE,&MyHashItem[44]}, + /* 44 */ {"nbsp",0xA0,NULL}, + /* 45 */ {"euro",0x20AC,&MyHashItem[46]}, + /* 46 */ {"ocirc",0xF4,NULL}, + /* 47 */ {"equiv",0x2261,&MyHashItem[48]}, + /* 48 */ {"upsilon",0x03C5,&MyHashItem[49]}, + /* 49 */ {"sigmaf",0x03C2,&MyHashItem[50]}, + /* 50 */ {"ETH",0xD0,NULL}, + /* 51 */ {"le",0x2264,&MyHashItem[52]}, + /* 52 */ {"beta",0x03B2,&MyHashItem[53]}, + /* 53 */ {"yacute",0xFD,&MyHashItem[54]}, + /* 54 */ {"egrave",0xE8,NULL}, + /* 55 */ {"lowast",0x2217,&MyHashItem[56]}, + /* 56 */ {"real",0x211C,&MyHashItem[57]}, + /* 57 */ {"amp",0x26,NULL}, + /* 58 */ {"icirc",0xEE,&MyHashItem[59]}, + /* 59 */ {"micro",0xB5,NULL}, + /* 60 */ {"isin",0x2208,&MyHashItem[61]}, + /* 61 */ {"curren",0xA4,NULL}, + /* 62 */ {"rdquo",0x201D,&MyHashItem[63]}, + /* 63 */ {"sbquo",0x201A,&MyHashItem[64]}, + /* 64 */ {"ne",0x2260,&MyHashItem[65]}, + /* 65 */ {"theta",0x03B8,&MyHashItem[66]}, + /* 66 */ {"Igrave",0xCC,NULL}, + /* 67 */ {"gt",0x3E,NULL}, + /* 68 */ {"hearts",0x2665,&MyHashItem[69]}, + /* 69 */ {"rang",0x232A,NULL}, + /* 70 */ {"rfloor",0x230B,NULL}, + /* 71 */ {"ldquo",0x201C,&MyHashItem[72]}, + /* 72 */ {"ni",0x220B,&MyHashItem[73]}, + /* 73 */ {"Ntilde",0xD1,&MyHashItem[74]}, + /* 74 */ {"Aacute",0xC1,NULL}, + /* 75 */ {"crarr",0x21B5,&MyHashItem[76]}, + /* 76 */ {"Ouml",0xD6,&MyHashItem[77]}, + /* 77 */ {"GT",0x3E,NULL}, + /* 78 */ {"clubs",0x2663,NULL}, + /* 79 */ {"scaron",0x0161,&MyHashItem[80]}, + /* 80 */ {"part",0x2202,NULL}, + /* 81 */ {"tilde",0x02DC,&MyHashItem[82]}, + /* 82 */ {"oelig",0x0153,&MyHashItem[83]}, + /* 83 */ {"pi",0x03C0,&MyHashItem[84]}, + /* 84 */ {"ugrave",0xF9,NULL}, + /* 85 */ {"darr",0x2193,&MyHashItem[86]}, + /* 86 */ {"uuml",0xFC,&MyHashItem[87]}, + /* 87 */ {"QUOT",0x22,NULL}, + /* 88 */ {"Prime",0x2033,NULL}, + /* 89 */ {"zwj",0x200D,&MyHashItem[90]}, + /* 90 */ {"lfloor",0x230A,&MyHashItem[91]}, + /* 91 */ {"notin",0x2209,&MyHashItem[92]}, + /* 92 */ {"cent",0xA2,&MyHashItem[93]}, + /* 93 */ {"lt",0x3C,NULL}, + /* 94 */ {"eta",0x03B7,&MyHashItem[95]}, + /* 95 */ {"Phi",0x03A6,&MyHashItem[96]}, + /* 96 */ {"atilde",0xE3,NULL}, + /* 97 */ {"hArr",0x21D4,&MyHashItem[98]}, + /* 98 */ {"iuml",0xEF,&MyHashItem[99]}, + /* 99 */ {"NBSP",0xA0,NULL}, + /* 100 */ {"mu",0x03BC,NULL}, + /* 101 */ {"or",0x2228,&MyHashItem[102]}, + /* 102 */ {"plusmn",0xB1,&MyHashItem[103]}, + /* 103 */ {"LT",0x3C,NULL}, + /* 104 */ {"nu",0x03BD,&MyHashItem[105]}, + /* 105 */ {"ograve",0xF2,&MyHashItem[106]}, + /* 106 */ {"AElig",0xC6,NULL}, + /* 107 */ {"rceil",0x2309,&MyHashItem[108]}, + /* 108 */ {"uArr",0x21D1,&MyHashItem[109]}, + /* 109 */ {"sect",0xA7,NULL}, + /* 110 */ {"circ",0x02C6,NULL}, + /* 111 */ {"perp",0x22A5,&MyHashItem[112]}, + /* 112 */ {"eth",0xF0,NULL}, + /* 113 */ {"rsquo",0x2019,&MyHashItem[114]}, + /* 114 */ {"nabla",0x2207,NULL}, + /* 115 */ {"lceil",0x2308,&MyHashItem[116]}, + /* 116 */ {"cup",0x222A,&MyHashItem[117]}, + /* 117 */ {"exist",0x2203,&MyHashItem[118]}, + /* 118 */ {"rarr",0x2192,&MyHashItem[119]}, + /* 119 */ {"upsih",0x03D2,NULL}, + /* 120 */ {"prime",0x2032,&MyHashItem[121]}, + /* 121 */ {"Omega",0x03A9,&MyHashItem[122]}, + /* 122 */ {"Ecirc",0xCA,NULL}, + /* 123 */ {"Epsilon",0x0395,NULL}, + /* 124 */ {"lsquo",0x2018,&MyHashItem[125]}, + /* 125 */ {"xi",0x03BE,&MyHashItem[126]}, + /* 126 */ {"Lambda",0x039B,&MyHashItem[127]}, + /* 127 */ {"Kappa",0x039A,&MyHashItem[128]}, + /* 128 */ {"divide",0xF7,&MyHashItem[129]}, + /* 129 */ {"igrave",0xEC,&MyHashItem[130]}, + /* 130 */ {"acute",0xB4,NULL}, + /* 131 */ {"Euml",0xCB,&MyHashItem[132]}, + /* 132 */ {"ordf",0xAA,NULL}, + /* 133 */ {"image",0x2111,&MyHashItem[134]}, + /* 134 */ {"Tau",0x03A4,&MyHashItem[135]}, + /* 135 */ {"Rho",0x03A1,NULL}, + /* 136 */ {"ntilde",0xF1,&MyHashItem[137]}, + /* 137 */ {"aacute",0xE1,&MyHashItem[138]}, + /* 138 */ {"times",0xD7,NULL}, + /* 139 */ {"omicron",0x03BF,NULL}, + /* 140 */ {"oplus",0x2295,&MyHashItem[141]}, + /* 141 */ {"Zeta",0x0396,&MyHashItem[142]}, + /* 142 */ {"Eacute",0xC9,&MyHashItem[143]}, + /* 143 */ {"ordm",0xBA,NULL}, + /* 144 */ {"Oslash",0xD8,&MyHashItem[145]}, + /* 145 */ {"Ccedil",0xC7,&MyHashItem[146]}, + /* 146 */ {"iquest",0xBF,NULL}, + /* 147 */ {"omega",0x03C9,&MyHashItem[148]}, + /* 148 */ {"Psi",0x03A8,&MyHashItem[149]}, + /* 149 */ {"ecirc",0xEA,NULL}, + /* 150 */ {"int",0x222B,NULL}, + /* 151 */ {"trade",0x2122,&MyHashItem[152]}, + /* 152 */ {"kappa",0x03BA,&MyHashItem[153]}, + /* 153 */ {"Iota",0x0399,&MyHashItem[154]}, + /* 154 */ {"Delta",0x0394,&MyHashItem[155]}, + /* 155 */ {"Alpha",0x0391,&MyHashItem[156]}, + /* 156 */ {"Otilde",0xD5,NULL}, + /* 157 */ {"sdot",0x22C5,NULL}, + /* 158 */ {"cong",0x2245,NULL}, + /* 159 */ {"rsaquo",0x203A,&MyHashItem[160]}, + /* 160 */ {"OElig",0x0152,&MyHashItem[161]}, + /* 161 */ {"diams",0x2666,&MyHashItem[162]}, + /* 162 */ {"phi",0x03C6,&MyHashItem[163]}, + /* 163 */ {"Beta",0x0392,&MyHashItem[164]}, + /* 164 */ {"szlig",0xDF,&MyHashItem[165]}, + /* 165 */ {"sup1",0xB9,&MyHashItem[166]}, + /* 166 */ {"reg",0xAE,NULL}, + /* 167 */ {"harr",0x2194,&MyHashItem[168]}, + /* 168 */ {"hellip",0x2026,&MyHashItem[169]}, + /* 169 */ {"yuml",0xFF,&MyHashItem[170]}, + /* 170 */ {"sup2",0xB2,NULL}, + /* 171 */ {"Gamma",0x0393,&MyHashItem[172]}, + /* 172 */ {"sup3",0xB3,NULL}, + /* 173 */ {"forall",0x2200,NULL}, + /* 174 */ {"bdquo",0x201E,&MyHashItem[175]}, + /* 175 */ {"spades",0x2660,&MyHashItem[176]}, + /* 176 */ {"Pi",0x03A0,&MyHashItem[177]}, + /* 177 */ {"Uacute",0xDA,&MyHashItem[178]}, + /* 178 */ {"Agrave",0xC0,NULL}, + /* 179 */ {"permil",0x2030,&MyHashItem[180]}, + /* 180 */ {"mdash",0x2014,&MyHashItem[181]}, + /* 181 */ {"lArr",0x21D0,&MyHashItem[182]}, + /* 182 */ {"uarr",0x2191,NULL}, + /* 183 */ {"Upsilon",0x03A5,&MyHashItem[184]}, + /* 184 */ {"pound",0xA3,NULL}, + /* 185 */ {"lsaquo",0x2039,&MyHashItem[186]}, + /* 186 */ {"lrm",0x200E,&MyHashItem[187]}, + /* 187 */ {"lambda",0x03BB,&MyHashItem[188]}, + /* 188 */ {"delta",0x03B4,&MyHashItem[189]}, + /* 189 */ {"alpha",0x03B1,NULL}, + /* 190 */ {"frasl",0x2044,&MyHashItem[191]}, + /* 191 */ {"thorn",0xFE,&MyHashItem[192]}, + /* 192 */ {"auml",0xE4,NULL}, + /* 193 */ {"Mu",0x039C,NULL}, + /* 194 */ {"nsub",0x2284,&MyHashItem[195]}, + /* 195 */ {"macr",0xAF,NULL}, + /* 196 */ {"minus",0x2212,&MyHashItem[197]}, + /* 197 */ {"Nu",0x039D,&MyHashItem[198]}, + /* 198 */ {"Oacute",0xD3,NULL}, + /* 199 */ {"prod",0x220F,&MyHashItem[200]}, + /* 200 */ {"Uuml",0xDC,&MyHashItem[201]}, + /* 201 */ {"iexcl",0xA1,NULL}, + /* 202 */ {"lang",0x2329,&MyHashItem[203]}, + /* 203 */ {"tau",0x03C4,&MyHashItem[204]}, + /* 204 */ {"rho",0x03C1,&MyHashItem[205]}, + /* 205 */ {"gamma",0x03B3,NULL}, + /* 206 */ {"loz",0x25CA,&MyHashItem[207]}, + /* 207 */ {"bull",0x2022,&MyHashItem[208]}, + /* 208 */ {"piv",0x03D6,NULL}, + /* 209 */ {"eacute",0xE9,NULL}, + /* 210 */ {"zwnj",0x200C,&MyHashItem[211]}, + /* 211 */ {"oslash",0xF8,&MyHashItem[212]}, + /* 212 */ {"ccedil",0xE7,&MyHashItem[213]}, + /* 213 */ {"THORN",0xDE,&MyHashItem[214]}, + /* 214 */ {"Iuml",0xCF,&MyHashItem[215]}, + /* 215 */ {"not",0xAC,NULL}, + /* 216 */ {"sim",0x223C,&MyHashItem[217]}, + /* 217 */ {"thetasym",0x03D1,&MyHashItem[218]}, + /* 218 */ {"Acirc",0xC2,NULL}, + /* 219 */ {"Dagger",0x2021,&MyHashItem[220]}, + /* 220 */ {"fnof",0x0192,NULL}, + /* 221 */ {"rlm",0x200F,&MyHashItem[222]}, + /* 222 */ {"oline",0x203E,&MyHashItem[223]}, + /* 223 */ {"Chi",0x03A7,&MyHashItem[224]}, + /* 224 */ {"Xi",0x039E,&MyHashItem[225]}, + /* 225 */ {"otilde",0xF5,&MyHashItem[226]}, + /* 226 */ {"Iacute",0xCD,&MyHashItem[227]}, + /* 227 */ {"copy",0xA9,NULL}, + /* 228 */ {"ndash",0x2013,&MyHashItem[229]}, + /* 229 */ {"ouml",0xF6,NULL}, + /* 230 */ {"psi",0x03C8,NULL}, + /* 231 */ {"sube",0x2286,NULL}, + /* 232 */ {"emsp",0x2003,&MyHashItem[233]}, + /* 233 */ {"asymp",0x2248,&MyHashItem[234]}, + /* 234 */ {"prop",0x221D,NULL}, + /* 235 */ {"infin",0x221E,NULL}, + /* 236 */ {"empty",0x2205,&MyHashItem[237]}, + /* 237 */ {"uacute",0xFA,&MyHashItem[238]}, + /* 238 */ {"agrave",0xE0,&MyHashItem[239]}, + /* 239 */ {"shy",0xAD,NULL}, + /* 240 */ {"ensp",0x2002,NULL}, + /* 241 */ {"acirc",0xE2,NULL}, + /* 242 */ {"sub",0x2282,&MyHashItem[243]}, + /* 243 */ {"epsilon",0x03B5,NULL}, + /* 244 */ {"Yacute",0xDD,&MyHashItem[245]}, + /* 245 */ {"Egrave",0xC8,NULL}, + /* 246 */ {"there4",0x2234,&MyHashItem[247]}, + /* 247 */ {"larr",0x2190,&MyHashItem[248]}, + /* 248 */ {"uml",0xA8,&MyHashItem[249]}, + /* 249 */ {"AMP",0x26,NULL}, + /* 250 */ {"Sigma",0x03A3,&MyHashItem[251]}, + /* 251 */ {"Aring",0xC5,NULL}, + /* 252 */ {"yen",0xA5,NULL}, + /* 253 */ {"oacute",0xF3,&MyHashItem[254]}, + /* 254 */ {"raquo",0xBB,NULL}, + /* 255 */ {"thinsp",0x2009,NULL}, + /* 256 */ {"Ucirc",0xDB,NULL}, +}; + +static HashItem_si *MyHashItemTbl[] = { + NULL, + &MyHashItem[0], + &MyHashItem[2], + &MyHashItem[5], + &MyHashItem[7], + &MyHashItem[11], + &MyHashItem[16], + &MyHashItem[19], + &MyHashItem[24], + &MyHashItem[27], + &MyHashItem[33], + &MyHashItem[36], + NULL, + &MyHashItem[38], + &MyHashItem[41], + &MyHashItem[45], + &MyHashItem[47], + &MyHashItem[51], + &MyHashItem[55], + &MyHashItem[58], + &MyHashItem[60], + &MyHashItem[62], + &MyHashItem[67], + &MyHashItem[68], + &MyHashItem[70], + &MyHashItem[71], + &MyHashItem[75], + &MyHashItem[78], + &MyHashItem[79], + &MyHashItem[81], + &MyHashItem[85], + &MyHashItem[88], + &MyHashItem[89], + &MyHashItem[94], + &MyHashItem[97], + &MyHashItem[100], + &MyHashItem[101], + &MyHashItem[104], + &MyHashItem[107], + &MyHashItem[110], + &MyHashItem[111], + &MyHashItem[113], + &MyHashItem[115], + &MyHashItem[120], + &MyHashItem[123], + &MyHashItem[124], + &MyHashItem[131], + &MyHashItem[133], + NULL, + &MyHashItem[136], + NULL, + NULL, + &MyHashItem[139], + &MyHashItem[140], + &MyHashItem[144], + &MyHashItem[147], + &MyHashItem[150], + &MyHashItem[151], + &MyHashItem[157], + &MyHashItem[158], + NULL, + &MyHashItem[159], + &MyHashItem[167], + &MyHashItem[171], + &MyHashItem[173], + &MyHashItem[174], + &MyHashItem[179], + NULL, + &MyHashItem[183], + &MyHashItem[185], + &MyHashItem[190], + &MyHashItem[193], + &MyHashItem[194], + &MyHashItem[196], + &MyHashItem[199], + &MyHashItem[202], + &MyHashItem[206], + &MyHashItem[209], + &MyHashItem[210], + &MyHashItem[216], + &MyHashItem[219], + &MyHashItem[221], + &MyHashItem[228], + &MyHashItem[230], + NULL, + &MyHashItem[231], + &MyHashItem[232], + NULL, + &MyHashItem[235], + &MyHashItem[236], + &MyHashItem[240], + &MyHashItem[241], + &MyHashItem[242], + &MyHashItem[244], + &MyHashItem[246], + &MyHashItem[250], + &MyHashItem[252], + &MyHashItem[253], + &MyHashItem[255], + &MyHashItem[256], +}; + +Hash_si entity = {100, MyHashItemTbl}; diff --git a/entity.tab b/entity.tab @@ -0,0 +1,258 @@ +%% +lt 0x3C +LT 0x3C +gt 0x3E +GT 0x3E +amp 0x26 +AMP 0x26 +quot 0x22 +QUOT 0x22 +nbsp 0xA0 +NBSP 0xA0 +iexcl 0xA1 +cent 0xA2 +pound 0xA3 +curren 0xA4 +yen 0xA5 +brvbar 0xA6 +sect 0xA7 +uml 0xA8 +copy 0xA9 +ordf 0xAA +laquo 0xAB +not 0xAC +shy 0xAD +reg 0xAE +macr 0xAF +deg 0xB0 +plusmn 0xB1 +sup2 0xB2 +sup3 0xB3 +acute 0xB4 +micro 0xB5 +para 0xB6 +middot 0xB7 +cedil 0xB8 +sup1 0xB9 +ordm 0xBA +raquo 0xBB +frac14 0xBC +frac12 0xBD +frac34 0xBE +iquest 0xBF +Agrave 0xC0 +Aacute 0xC1 +Acirc 0xC2 +Atilde 0xC3 +Auml 0xC4 +Aring 0xC5 +AElig 0xC6 +Ccedil 0xC7 +Egrave 0xC8 +Eacute 0xC9 +Ecirc 0xCA +Euml 0xCB +Igrave 0xCC +Iacute 0xCD +Icirc 0xCE +Iuml 0xCF +ETH 0xD0 +Ntilde 0xD1 +Ograve 0xD2 +Oacute 0xD3 +Ocirc 0xD4 +Otilde 0xD5 +Ouml 0xD6 +times 0xD7 +Oslash 0xD8 +Ugrave 0xD9 +Uacute 0xDA +Ucirc 0xDB +Uuml 0xDC +Yacute 0xDD +THORN 0xDE +szlig 0xDF +agrave 0xE0 +aacute 0xE1 +acirc 0xE2 +atilde 0xE3 +auml 0xE4 +aring 0xE5 +aelig 0xE6 +ccedil 0xE7 +egrave 0xE8 +eacute 0xE9 +ecirc 0xEA +euml 0xEB +igrave 0xEC +iacute 0xED +icirc 0xEE +iuml 0xEF +eth 0xF0 +ntilde 0xF1 +ograve 0xF2 +oacute 0xF3 +ocirc 0xF4 +otilde 0xF5 +ouml 0xF6 +divide 0xF7 +oslash 0xF8 +ugrave 0xF9 +uacute 0xFA +ucirc 0xFB +uuml 0xFC +yacute 0xFD +thorn 0xFE +yuml 0xFF +fnof 0x0192 +Alpha 0x0391 +Beta 0x0392 +Gamma 0x0393 +Delta 0x0394 +Epsilon 0x0395 +Zeta 0x0396 +Eta 0x0397 +Theta 0x0398 +Iota 0x0399 +Kappa 0x039A +Lambda 0x039B +Mu 0x039C +Nu 0x039D +Xi 0x039E +Omicron 0x039F +Pi 0x03A0 +Rho 0x03A1 +Sigma 0x03A3 +Tau 0x03A4 +Upsilon 0x03A5 +Phi 0x03A6 +Chi 0x03A7 +Psi 0x03A8 +Omega 0x03A9 +alpha 0x03B1 +beta 0x03B2 +gamma 0x03B3 +delta 0x03B4 +epsilon 0x03B5 +zeta 0x03B6 +eta 0x03B7 +theta 0x03B8 +iota 0x03B9 +kappa 0x03BA +lambda 0x03BB +mu 0x03BC +nu 0x03BD +xi 0x03BE +omicron 0x03BF +pi 0x03C0 +rho 0x03C1 +sigmaf 0x03C2 +sigma 0x03C3 +tau 0x03C4 +upsilon 0x03C5 +phi 0x03C6 +chi 0x03C7 +psi 0x03C8 +omega 0x03C9 +thetasym 0x03D1 +upsih 0x03D2 +piv 0x03D6 +bull 0x2022 +hellip 0x2026 +prime 0x2032 +Prime 0x2033 +oline 0x203E +frasl 0x2044 +weierp 0x2118 +image 0x2111 +real 0x211C +trade 0x2122 +alefsym 0x2135 +larr 0x2190 +uarr 0x2191 +rarr 0x2192 +darr 0x2193 +harr 0x2194 +crarr 0x21B5 +lArr 0x21D0 +uArr 0x21D1 +rArr 0x21D2 +dArr 0x21D3 +hArr 0x21D4 +forall 0x2200 +part 0x2202 +exist 0x2203 +empty 0x2205 +nabla 0x2207 +isin 0x2208 +notin 0x2209 +ni 0x220B +prod 0x220F +sum 0x2211 +minus 0x2212 +lowast 0x2217 +radic 0x221A +prop 0x221D +infin 0x221E +ang 0x2220 +and 0x2227 +or 0x2228 +cap 0x2229 +cup 0x222A +int 0x222B +there4 0x2234 +sim 0x223C +cong 0x2245 +asymp 0x2248 +ne 0x2260 +equiv 0x2261 +le 0x2264 +ge 0x2265 +sub 0x2282 +sup 0x2283 +nsub 0x2284 +sube 0x2286 +supe 0x2287 +oplus 0x2295 +otimes 0x2297 +perp 0x22A5 +sdot 0x22C5 +lceil 0x2308 +rceil 0x2309 +lfloor 0x230A +rfloor 0x230B +lang 0x2329 +rang 0x232A +loz 0x25CA +spades 0x2660 +clubs 0x2663 +hearts 0x2665 +diams 0x2666 +OElig 0x0152 +oelig 0x0153 +Scaron 0x0160 +scaron 0x0161 +Yuml 0x0178 +circ 0x02C6 +tilde 0x02DC +ensp 0x2002 +emsp 0x2003 +thinsp 0x2009 +zwnj 0x200C +zwj 0x200D +lrm 0x200E +rlm 0x200F +ndash 0x2013 +mdash 0x2014 +lsquo 0x2018 +rsquo 0x2019 +sbquo 0x201A +ldquo 0x201C +rdquo 0x201D +bdquo 0x201E +dagger 0x2020 +Dagger 0x2021 +permil 0x2030 +lsaquo 0x2039 +rsaquo 0x203A +euro 0x20AC diff --git a/etc.c b/etc.c @@ -15,6 +15,7 @@ #include <sys/types.h> #include <time.h> #include <sys/wait.h> +#include <signal.h> #ifdef __WATT32__ #define read(a,b,c) read_s(a,b,c) @@ -123,9 +124,11 @@ lineSkip(Buffer * buf, Line * line, int offset, int last) Line *l; l = currentLineSkip(buf, line, offset, last); +#ifndef NEXTPAGE_TOPLINE for (i = (LASTLINE - 1) - (buf->lastLine->linenumber - l->linenumber); i > 0 && l->prev != NULL; i--, l = l->prev); +#endif return l; } @@ -663,6 +666,29 @@ bzero(void *ptr, int len) } #endif /* NOBCOPY */ +#ifdef USE_INCLUDED_SRAND48 +static unsigned long R1 = 0x1234abcd; +static unsigned long R2 = 0x330e; +#define A1 0x5deec +#define A2 0xe66d +#define C 0xb + +void +srand48(long seed) +{ + R1 = (unsigned long)seed; + R2 = 0x330e; +} + +long +lrand48(void) +{ + R1 = (A1 * R1 << 16) + A1 * R2 + A2 * R1 + ((A2 * R2 + C) >> 16); + R2 = (A2 * R2 + C) & 0xffff; + return (long)(R1 >> 1); +} +#endif + char * mybasename(char *s) { @@ -1123,36 +1149,32 @@ romanAlphabet(int n) return r; } -Str -quoteShell(char *string) -{ - Str str = Strnew(); - - while (*string != '\0') { - if (!IS_ALNUM(*string) && *string != '_' && *string != '.' && - *string != ':' && *string != '/') - Strcat_char(str, '\\'); - Strcat_char(str, *(string++)); - } - return str; -} - void mySystem(char *command, int background) { -#ifdef __EMX__ /* jsawa */ if (background){ +#ifndef HAVE_SETPGRP Str cmd = Strnew_charp("start /f "); Strcat_charp(cmd, command); system(cmd->ptr); - }else - system(command); #else - Str cmd = Strnew_charp(command); - if (background) - cmd = Sprintf("(%s) >/dev/null 2>&1 &", cmd->ptr); - system(cmd->ptr); + int pid; + flush_tty(); + if ((pid = fork()) == 0) { +#ifdef SIGCHLD + signal(SIGCHLD, SIG_IGN); #endif + setpgrp(); + close_tty(); + fclose(stdout); + fclose(stderr); + execl("/bin/sh", "sh", "-c", command, NULL); + exit(127); + } +#endif + } + else + system(command); } char * @@ -1189,6 +1211,37 @@ expandName(char *name) return extpath->ptr; } +char * +file_to_url(char *file) +{ + Str tmp; +#if defined( __CYGWIN__ ) || defined( __EMX__ ) + char *drive = NULL; +#endif + + file = expandName(file); +#if defined( __CYGWIN__ ) || defined( __EMX__ ) + if (IS_ALPHA(file[0]) && file[1] == ':') { + drive = allocStr(file, 2); + file += 2; + } else +#endif + if (file[0] != '/') { + tmp = Strnew_charp(CurrentDir); + if (Strlastchar(tmp) != '/') + Strcat_char(tmp, '/'); + Strcat_charp(tmp, file); + file = tmp->ptr; + } + tmp = Strnew_charp("file://"); +#if defined( __CYGWIN__ ) || defined( __EMX__ ) + if (drive) + Strcat_charp(tmp, drive); +#endif + Strcat_charp(tmp, file_quote(cleanupName(file))); + return tmp->ptr; +} + static char *tmpf_base[MAX_TMPF_TYPE] = { "tmp", "src", "frame", "cache" diff --git a/file.c b/file.c @@ -59,27 +59,29 @@ static int cur_option_selected; static int cur_status; #ifdef MENU_SELECT /* menu based <select> */ -FormSelectOption select_option[MAX_SELECT]; +FormSelectOption *select_option; +static int max_select = MAX_SELECT; static int n_select; static int cur_option_maxwidth; #endif /* MENU_SELECT */ static Str cur_textarea; -Str textarea_str[MAX_TEXTAREA]; +Str *textarea_str; static int cur_textarea_size; static int cur_textarea_rows; +static int cur_textarea_readonly; static int n_textarea; +static int ignore_nl_textarea; +static int max_textarea = MAX_TEXTAREA; static int http_response_code; #ifdef JP_CHARSET static char content_charset = '\0'; +static char meta_charset = '\0'; static char guess_charset(char *p); -#ifdef NEW_FORM -static char check_charset(char *p); -static char check_accept_charset(char *p); -#endif -char DocumentCode = '\0'; +static char check_charset(char *s); +static char check_accept_charset(char *s); #endif static Str save_line = NULL; @@ -101,16 +103,12 @@ static struct link_stack *link_stack = NULL; #define Str_news_endline(s) ((s)->ptr[0]=='.'&&((s)->ptr[1]=='\n'||(s)->ptr[1]=='\r'||(s)->ptr[1]=='\0')) #endif /* USE_NNTP */ -#ifdef NEW_FORM #define INITIAL_FORM_SIZE 10 static FormList **forms; static int *form_stack; static int form_max = 0; static int forms_size = 0; #define cur_form_id ((form_sp >= 0)? form_stack[form_sp] : -1) -#else /* not NEW_FORM */ -static FormList *form_stack[FORMSTACK_SIZE]; -#endif /* not NEW_FORM */ static int form_sp = 0; static int current_content_length; @@ -131,7 +129,7 @@ char *ullevel[MAX_UL_LEVEL] = NBSP "*", NBSP "+", NBSP "o", NBSP "#", NBSP "@", NBSP "-", NBSP "=", "**", "--" }; -#define HR_RULE "\212" +#define HR_RULE "-" #define HR_RULE_WIDTH 1 #endif /* not KANJI_SYMBOLS */ @@ -176,7 +174,8 @@ int currentLn(Buffer * buf) { if (buf->currentLine) - return buf->currentLine->real_linenumber + 1; +/* return buf->currentLine->real_linenumber + 1; */ + return buf->currentLine->linenumber + 1; else return 1; } @@ -194,7 +193,7 @@ loadSomething(URLFile * f, buf->filename = path; if (buf->buffername == NULL || buf->buffername[0] == '\0') - buf->buffername = lastFileName(path); + buf->buffername = conv_from_system(lastFileName(path)); if (buf->currentURL.scheme == SCM_UNKNOWN) buf->currentURL.scheme = f->scheme; buf->real_scheme = f->scheme; @@ -359,8 +358,11 @@ convertLine(URLFile * uf, Str line, char *code, int mode) { #ifdef JP_CHARSET char ic; - if ((ic = checkShiftCode(line, *code)) != '\0') - line = conv_str(line, (*code = ic), InnerCode); + if ((ic = checkShiftCode(line, *code)) != '\0') { + if (UseAutoDetect) + *code = ic; + line = conv_str(line, *code, InnerCode); + } #endif /* JP_CHARSET */ cleanup_line(line, mode); #ifdef USE_NNTP @@ -382,11 +384,13 @@ loadFile(char *path) if (uf.stream == NULL) return NULL; current_content_length = 0; +#ifdef JP_CHARSET + content_charset = '\0'; +#endif return loadSomething(&uf, path, loadBuffer, NULL); } -#ifdef USE_COOKIE -static int +int matchattr(char *p, char *attr, int len, Str * value) { int quoted; @@ -423,7 +427,6 @@ matchattr(char *p, char *attr, int len, Str * value) } return 0; } -#endif /* USE_COOKIE */ void readHeader(URLFile * uf, @@ -439,7 +442,6 @@ readHeader(URLFile * uf, #ifdef JP_CHARSET char code = DocumentCode, ic; #endif - extern int w3m_dump_head; headerlist = newBuf->document_header = newTextList(); if (uf->scheme == SCM_HTTP @@ -476,7 +478,7 @@ readHeader(URLFile * uf, break; /* last header */ } - else if (!w3m_dump_head) { + else if (!(w3m_dump & DUMP_HEAD)) { if (lineBuf2) { Strcat(lineBuf2, tmp); } @@ -490,8 +492,11 @@ readHeader(URLFile * uf, continue; lineBuf2 = decodeMIME(lineBuf2->ptr); #ifdef JP_CHARSET - if ((ic = checkShiftCode(lineBuf2, code)) != '\0') - lineBuf2 = conv_str(lineBuf2, (code = ic), InnerCode); + if ((ic = checkShiftCode(lineBuf2, code)) != '\0') { + if (UseAutoDetect) + code = ic; + lineBuf2 = conv_str(lineBuf2, code, InnerCode); + } #endif /* JP_CHARSET */ /* separated with line and stored */ tmp = Strnew_size(lineBuf2->length); @@ -540,6 +545,9 @@ readHeader(URLFile * uf, uf->encoding = ENC_BASE64; else if (!strncasecmp(p, "quoted-printable", 16)) uf->encoding = ENC_QUOTE; + else if (!strncasecmp(p, "uuencode", 8) || + !strncasecmp(p, "x-uuencode", 10)) + uf->encoding = ENC_UUENCODE; else uf->encoding = ENC_7BIT; } @@ -664,7 +672,7 @@ readHeader(URLFile * uf, if (msg->length > COLS - 4) Strshrink(msg, msg->length - (COLS - 4)); term_raw(); - ans = inputStr(msg->ptr, FALSE); + ans = inputChar(msg->ptr); } if (ans == NULL || tolower(*ans) != 'y' || (err = add_cookie(pu, name, value, expires, domain, path, @@ -748,7 +756,6 @@ checkContentType(Buffer * buf) while (*p && *p != ';' && !IS_SPACE(*p)) Strcat_char(r, *p++); #ifdef JP_CHARSET - content_charset = '\0'; if ((p = strcasestr(p, "charset")) != NULL) { p += 7; SKIP_BLANKS(p); @@ -830,18 +837,31 @@ getAuthCookie(char *realm, char *auth_header, TextList * extra_header, ParsedURL term_raw(); if ((pp = inputStr(Sprintf("Username for %s: ", realm)->ptr, NULL)) == NULL) return NULL; - uname = Strnew_charp(pp); + uname = Str_conv_to_system(Strnew_charp(pp)); if ((pp = inputLine(Sprintf("Password for %s: ", realm)->ptr, NULL, IN_PASSWORD)) == NULL) return NULL; - pwd = Strnew_charp(pp); + pwd = Str_conv_to_system(Strnew_charp(pp)); term_cbreak(); } else { - printf("Username: "); + int proxy = !strncasecmp( "Proxy-Authorization:", auth_header, auth_header_len ); + + /* + * If post file is specified as '-', stdin is closed at this point. + * In this case, w3m cannot read username from stdin. + * So exit with error message. + * (This is same behavior as lwp-request.) + */ + if (feof(stdin) || ferror (stdin)) { + fprintf(stderr, "w3m: Authorization required for %s\n", realm); + exit(1); + } + + printf(proxy ? "Proxy Username for %s: " : "Username for %s: ", realm); fflush(stdout); uname = Strfgets(stdin); Strchop(uname); - pwd = Strnew_charp((char *) getpass("Password: ")); + pwd = Strnew_charp((char *) getpass(proxy ? "Proxy Password: " : "Password: ")); } Strcat_char(uname, ':'); Strcat(uname, pwd); @@ -855,6 +875,14 @@ getAuthCookie(char *realm, char *auth_header, TextList * extra_header, ParsedURL return ss; } +static int +same_url_p(ParsedURL *pu1, ParsedURL *pu2) +{ + return (pu1->scheme == pu2->scheme && pu1->port == pu2->port && + (pu1->host ? pu2->host ? !strcasecmp(pu1->host, pu2->host) : 0 : 1) && + (pu1->file ? pu2->file ? !strcmp(pu1->file, pu2->file) : 0 : 1)); +} + /* * loadGeneralFile: load file to buffer */ @@ -862,7 +890,9 @@ Buffer * loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormList * request) { URLFile f, *of = NULL; - ParsedURL pu; + ParsedURL pu, * volatile puv = NULL; + int volatile nredir = 0; + int volatile nredir_size = 0; Buffer *b = NULL, *(*proc) (); char *tpath; char *t, *p, *real_type = NULL; @@ -877,7 +907,6 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi unsigned char status = HTST_NORMAL; URLOption url_option; Str tmp; - extern int w3m_dump, w3m_dump_source; tpath = path; prevtrap = NULL; @@ -919,24 +948,24 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi case SCM_LOCAL: { struct stat st; - if (stat(pu.file, &st) < 0) + if (stat(pu.real_file, &st) < 0) return NULL; if (S_ISDIR(st.st_mode)) { if (UseExternalDirBuffer) { Str tmp = Strnew_charp(DirBufferCommand); - Strcat_m_charp(tmp, "?", + Strcat_m_charp(tmp, "?dir=", pu.file, "#current", NULL); b = loadGeneralFile(tmp->ptr, NULL, NO_REFERER, 0, NULL); if (b != NULL && b != NO_BUFFER) { copyParsedURL(&b->currentURL, &pu); - b->filename = b->currentURL.file; + b->filename = b->currentURL.real_file; } return b; } else { - b = dirBuffer(pu.file); + b = dirBuffer(pu.real_file); if (b == NULL) return NULL; t = "text/html"; @@ -968,6 +997,7 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi searchHeader = TRUE; searchHeader_through = FALSE; } + if (header_string) header_string = NULL; if (fmInitialized) { prevtrap = signal(SIGINT, KeyAbort); term_cbreak(); @@ -1002,17 +1032,37 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi t = "text/plain"; if (http_response_code >= 301 && http_response_code <= 303 && (p = checkHeader(t_buf, "Location:")) != NULL) { /* document moved */ - tmp = Strnew_charp(p); - Strchop(tmp); - tpath = tmp->ptr; - request = NULL; - UFclose(&f); - add_auth_cookie_flag = 0; - current = New(ParsedURL); - copyParsedURL(current, &pu); - t_buf->bufferprop |= BP_REDIRECTED; - status = HTST_NORMAL; - goto load_doc; + if (nredir >= FollowRedirection) { + tmp = Sprintf("Number of redirections exceeded %d at %s", FollowRedirection, parsedURL2Str(&pu)->ptr); + disp_err_message(tmp->ptr, FALSE); + } + else if (nredir_size > 0 && + (same_url_p(&pu, &puv[(nredir - 1) % nredir_size]) || + (!(nredir % 2) && same_url_p(&pu, &puv[(nredir / 2) % nredir_size])))) { + tmp = Sprintf("Redirection loop detected (%s)", parsedURL2Str(&pu)->ptr); + disp_err_message(tmp->ptr, FALSE); + } + else { + if (!puv) { + nredir_size = FollowRedirection / 2 + 1; + puv = New_N(ParsedURL, nredir_size); + memset(puv, 0, sizeof(ParsedURL) * nredir_size); + } + + copyParsedURL(&puv[nredir % nredir_size], &pu); + ++nredir; + tmp = Strnew_charp(p); + Strchop(tmp); + tpath = tmp->ptr; + request = NULL; + UFclose(&f); + add_auth_cookie_flag = 0; + current = New(ParsedURL); + copyParsedURL(current, &pu); + t_buf->bufferprop |= BP_REDIRECTED; + status = HTST_NORMAL; + goto load_doc; + } } if ((p = checkHeader(t_buf, "WWW-Authenticate:")) != NULL && http_response_code == 401) { @@ -1099,11 +1149,14 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi if (f.compression != CMP_NOCOMPRESS) { char *t1 = uncompressed_file_type(pu.file, NULL); real_type = f.guess_type; +/* if (t1 && strncasecmp(t1, "application/", 12) == 0) { f.compression = CMP_NOCOMPRESS; t = real_type; } - else if (t1) + else +*/ + if (t1) t = t1; else t = real_type; @@ -1114,6 +1167,7 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi real_type = "text/plain"; t = real_type; } +/* if (!strncasecmp(t, "application/", 12)) { char *tmpf = tmpfname(TMPF_DFL, NULL)->ptr; current_content_length = 0; @@ -1124,10 +1178,11 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi term_raw(); signal(SIGINT, prevtrap); } - doFileMove(tmpf, guess_save_name(pu.file)); + doFileMove(tmpf, guess_save_name(t_buf, pu.file)); } return NO_BUFFER; } +*/ } else if (searchHeader) { t_buf = newBuffer(INIT_BUFFER_WIDTH); @@ -1169,18 +1224,25 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi if (do_download) { /* download only */ + char *file; if (fmInitialized) { term_raw(); signal(SIGINT, prevtrap); } - doFileSave(f, guess_save_name(pu.file)); + if (DecodeCTE && IStype(f.stream) != IST_ENCODED) + f.stream = newEncodedStream(f.stream, f.encoding); + if (pu.scheme == SCM_LOCAL) + file = conv_from_system(guess_save_name(NULL, pu.real_file)); + else + file = guess_save_name(t_buf, pu.file); + doFileSave(f, file); UFclose(&f); return NO_BUFFER; } if (f.compression != CMP_NOCOMPRESS) { - if (!w3m_dump_source && - (w3m_dump || is_text_type(t) || searchExtViewer(t))) { + if (!(w3m_dump & DUMP_SOURCE) && + (w3m_dump & ~DUMP_FRAME || is_text_type(t) || searchExtViewer(t))) { gunzip_stream(&f); uncompressed_file_type(pu.file, &f.ext); } @@ -1200,8 +1262,9 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi } #endif /* USE_GOPHER */ else if (w3m_backend) ; - else if (!w3m_dump || is_dump_text_type(t)) { - if (!do_download && doExternal(f, pu.file, t, &b, t_buf)) { + else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) { + if (!do_download && doExternal(f, + pu.real_file ? pu.real_file : pu.file, t, &b, t_buf)) { if (b && b != NO_BUFFER) { b->real_scheme = f.scheme; b->real_type = real_type; @@ -1222,10 +1285,13 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi } if (pu.scheme == SCM_LOCAL) { UFclose(&f); - doFileCopy(pu.file, guess_save_name(pu.file)); + doFileCopy(pu.real_file, + conv_from_system(guess_save_name(NULL, pu.real_file))); } else { - doFileSave(f, guess_save_name(pu.file)); + if (DecodeCTE && IStype(f.stream) != IST_ENCODED) + f.stream = newEncodedStream(f.stream, f.encoding); + doFileSave(f, guess_save_name(t_buf, pu.file)); UFclose(&f); } return NO_BUFFER; @@ -1247,7 +1313,7 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi t_buf->ssl_certificate = s->ptr; } #endif - b = loadSomething(&f, pu.file, proc, t_buf); + b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf); UFclose(&f); if (b) { b->real_scheme = f.scheme; @@ -1255,7 +1321,7 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi loaded: if (b->currentURL.host == NULL && b->currentURL.file == NULL) copyParsedURL(&b->currentURL, &pu); - if (!strcmp(t, "text/html")) + if (!strcasecmp(t, "text/html")) b->type = "text/html"; else if (w3m_backend) { Str s = Strnew_charp(t); @@ -1273,6 +1339,11 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi #endif /* not JP_CHARSET */ if (a != NULL) { gotoLine(b, a->start.line); +#ifdef LABEL_TOPLINE + b->topLine = lineSkip(b, b->topLine, + b->currentLine->linenumber - b->topLine->linenumber, + FALSE); +#endif b->pos = a->start.pos; arrangeCursor(b); } @@ -1285,6 +1356,7 @@ loadGeneralFile(char *path, ParsedURL * current, char *referer, int flag, FormLi } } } + if (header_string) header_string = NULL; if (fmInitialized) { term_raw(); signal(SIGINT, prevtrap); @@ -1430,6 +1502,8 @@ set_breakpoint(struct readbuffer *obuf, int tag_length) #ifdef FORMAT_NICE obuf->bp.flag &= ~RB_FILL; #endif /* FORMAT_NICE */ + obuf->bp.top_margin = obuf->top_margin; + obuf->bp.bottom_margin = obuf->bottom_margin; if (!obuf->bp.init_flag) return; @@ -1457,6 +1531,8 @@ back_to_breakpoint(struct readbuffer *obuf) obuf->in_under = obuf->bp.in_under; obuf->prev_ctype = obuf->bp.prev_ctype; obuf->pos = obuf->bp.pos; + obuf->top_margin = obuf->bp.top_margin; + obuf->bottom_margin = obuf->bp.bottom_margin; if (obuf->flag & RB_NOBR) obuf->nobr_level = obuf->bp.nobr_level; } @@ -1593,14 +1669,16 @@ proc_mchar(struct readbuffer *obuf, int pre_mode, } void -push_render_image(Str str, int width, struct html_feed_environ *h_env) +push_render_image(Str str, int width, int limit, struct html_feed_environ *h_env) { struct readbuffer *obuf = h_env->obuf; int indent = h_env->envs[h_env->envc].indent; + push_spaces(obuf, 1, (limit - width) / 2); push_str(obuf, width, str, PC_ASCII); + push_spaces(obuf, 1, (limit - width + 1) / 2); if (width > 0) - flushline(h_env, obuf, indent, 0, h_env->limit); + flushline(h_env, obuf, indent, 0, h_env->limit); } static int @@ -1760,6 +1838,26 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, if (obuf->in_under && !hidden_under) Strcat_charp(line, "</u>"); + if (obuf->top_margin > 0) { + int i; + struct html_feed_environ h; + struct readbuffer o; + struct environment e[1]; + + init_henv(&h, &o, e, 1, NULL, width, indent); + o.line = Strnew_size(width + 20); + o.pos = obuf->pos; + o.flag = obuf->flag; + o.top_margin = -1; + o.bottom_margin = -1; + Strcat_charp(o.line, "<pre_int>"); + for (i = 0; i < o.pos; i++) + Strcat_char(o.line, ' '); + Strcat_charp(o.line, "</pre_int>"); + for (i = 0; i < obuf->top_margin; i++) + flushline(h_env, &o, indent, force, width); + } + if (force == 1 || obuf->flag & RB_NFLUSHED) { TextLine *lbuf = newTextLine(line, obuf->pos); if (RB_GET_ALIGN(obuf) == RB_CENTER) { @@ -1870,8 +1968,33 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, pass = tmp2; } } + + if (obuf->bottom_margin > 0) { + int i; + struct html_feed_environ h; + struct readbuffer o; + struct environment e[1]; + + init_henv(&h, &o, e, 1, NULL, width, indent); + o.line = Strnew_size(width + 20); + o.pos = obuf->pos; + o.flag = obuf->flag; + o.top_margin = -1; + o.bottom_margin = -1; + Strcat_charp(o.line, "<pre_int>"); + for (i = 0; i < o.pos; i++) + Strcat_char(o.line, ' '); + Strcat_charp(o.line, "</pre_int>"); + for (i = 0; i < obuf->bottom_margin; i++) + flushline(h_env, &o, indent, force, width); + } + if (obuf->top_margin < 0 || obuf->bottom_margin < 0) + return; + obuf->line = Strnew_size(256); obuf->pos = 0; + obuf->top_margin = 0; + obuf->bottom_margin = 0; obuf->prevchar = ' '; obuf->bp.init_flag = 1; obuf->flag &= ~RB_NFLUSHED; @@ -1886,17 +2009,17 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent, if (obuf->anchor_hseq > 0) obuf->anchor_hseq = -obuf->anchor_hseq; tmp = Sprintf("<A HSEQ=\"%d\" HREF=\"", obuf->anchor_hseq); - Strcat_charp(tmp, htmlquote_str(obuf->anchor->ptr)); + Strcat_charp(tmp, html_quote(obuf->anchor->ptr)); if (obuf->anchor_target) { Strcat_charp(tmp, "\" TARGET=\""); - Strcat_charp(tmp, htmlquote_str(obuf->anchor_target->ptr)); + Strcat_charp(tmp, html_quote(obuf->anchor_target->ptr)); } Strcat_charp(tmp, "\">"); push_tag(obuf, tmp->ptr, HTML_A); } if (!hidden_img && obuf->img_alt) { Str tmp = Strnew_charp("<IMG_ALT SRC=\""); - Strcat_charp(tmp, htmlquote_str(obuf->img_alt->ptr)); + Strcat_charp(tmp, html_quote(obuf->img_alt->ptr)); Strcat_charp(tmp, "\">"); push_tag(obuf, tmp->ptr, HTML_IMG_ALT); } @@ -2072,23 +2195,15 @@ process_img(struct parsed_tag * tag) tmp = Strnew_size(128); if (r) { r2 = strchr(r, '#'); -#ifdef NEW_FORM s = "<form_int method=internal action=map>"; process_form(parse_tag(&s, TRUE)); Strcat(tmp, Sprintf("<pre_int><input_alt fid=\"%d\" " "type=hidden name=link value=\"", cur_form_id)); - Strcat_charp(tmp, htmlquote_str((r2) ? r2 + 1 : r)); + Strcat_charp(tmp, html_quote((r2) ? r2 + 1 : r)); Strcat(tmp, Sprintf("\"><input_alt hseq=\"%d\" fid=\"%d\" " "type=submit no_effect=true>", cur_hseq++, cur_form_id)); -#else /* not NEW_FORM */ - Strcat_charp(tmp, "<form_int method=internal action=map>" - "<pre_int><input_alt type=hidden name=link value=\""); - Strcat_charp(tmp, htmlquote_str((r2) ? r2 + 1 : r)); - Strcat(tmp, Sprintf("\"><input_alt hseq=\"%d\" type=submit " - "no_effect=true>", cur_hseq++)); -#endif /* not NEW_FORM */ } if (q != NULL && *q == '\0' && ignore_null_img_alt) q = NULL; @@ -2096,10 +2211,10 @@ process_img(struct parsed_tag * tag) Strcat_charp(tmp, "<img_alt src=\""); else Strcat_charp(tmp, "<nobr><img_alt src=\""); - Strcat_charp(tmp, htmlquote_str(p)); + Strcat_charp(tmp, html_quote(p)); Strcat_charp(tmp, "\">"); if (q != NULL) { - Strcat_charp(tmp, htmlquote_str(q)); + Strcat_charp(tmp, html_quote(q)); Strcat_charp(tmp, "</img_alt> "); goto img_end2; } @@ -2125,7 +2240,7 @@ process_img(struct parsed_tag * tag) if (w > 200 && i < 13) { /* must be a horizontal line */ #ifndef KANJI_SYMBOLS - Strcat_charp(tmp, "<_RULE>"); + Strcat_charp(tmp, "<_RULE TYPE=10>"); #endif /* not KANJI_SYMBOLS */ w /= pixel_per_char; for (i = 0; i < w - (HR_RULE_WIDTH - 1); i += HR_RULE_WIDTH) @@ -2160,12 +2275,8 @@ process_img(struct parsed_tag * tag) Strcat_charp(tmp, "</nobr>"); img_end2: if (r) { -#ifdef NEW_FORM Strcat_charp(tmp, "</input_alt></pre_int>"); process_n_form(); -#else /* not NEW_FORM */ - Strcat_charp(tmp, "</input_alt></pre_int></form_int>"); -#endif /* not NEW_FORM */ } return tmp; } @@ -2187,7 +2298,7 @@ process_anchor(struct parsed_tag * tag, char *tagbuf) Str process_input(struct parsed_tag * tag) { - int i, w, v, x, y; + int i, w, v, x, y, z; char *q , *p, *r, *p2; Str tmp; char *qq = ""; @@ -2207,6 +2318,7 @@ process_input(struct parsed_tag * tag) parsedtag_get_value(tag, ATTR_ALT, &p2); x = parsedtag_exists(tag, ATTR_CHECKED); y = parsedtag_exists(tag, ATTR_ACCEPT); + z = parsedtag_exists(tag, ATTR_READONLY); v = formtype(p); if (v == FORM_UNKNOWN) @@ -2223,7 +2335,7 @@ process_input(struct parsed_tag * tag) q = "RESET"; break; /* if no VALUE attribute is specified in * <INPUT - * TYPE=CHECHBOX> tag, then the value "on" is used * as a + * TYPE=CHECKBOX> tag, then the value "on" is used * as a * default value. It is not a part of HTML4.0 * specification, * but an imitation of Netscape * behaviour. */ case FORM_INPUT_CHECKBOX: @@ -2234,7 +2346,7 @@ process_input(struct parsed_tag * tag) if (v == FORM_INPUT_FILE) q = NULL; if (q) { - qq = htmlquote_str(q); + qq = html_quote(q); qlen = strlen(q); } @@ -2249,20 +2361,16 @@ process_input(struct parsed_tag * tag) case FORM_INPUT_RADIO: Strcat_char(tmp, '('); } -#ifdef NEW_FORM Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s " "name=\"%s\" width=%d maxlength=%d value=\"%s\"", cur_hseq++, cur_form_id, - p, htmlquote_str(r), w, i, qq)); -#else /* not NEW_FORM */ - Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" type=%s " - "name=\"%s\" width=%d maxlength=%d value=\"%s\"", - cur_hseq++, p, htmlquote_str(r), w, i, qq)); -#endif /* not NEW_FORM */ + p, html_quote(r), w, i, qq)); if (x) Strcat_charp(tmp, " checked"); if (y) Strcat_charp(tmp, " accept"); + if (z) + Strcat_charp(tmp, " readonly"); Strcat_char(tmp, '>'); if (v == FORM_INPUT_HIDDEN) @@ -2304,7 +2412,7 @@ process_input(struct parsed_tag * tag) case FORM_INPUT_SUBMIT: case FORM_INPUT_BUTTON: if (p2) { - Strcat_charp(tmp, htmlquote_str(p2)); + Strcat_charp(tmp, html_quote(p2)); i = strlen(p2); } else { @@ -2363,17 +2471,15 @@ process_select(struct parsed_tag * tag) select_is_multiple = parsedtag_exists(tag, ATTR_MULTIPLE); #ifdef MENU_SELECT - if (!select_is_multiple && n_select < MAX_SELECT) { -#ifdef NEW_FORM + if (!select_is_multiple) { select_str = Sprintf("<pre_int>[<input_alt hseq=\"%d\" " "fid=\"%d\" type=select name=\"%s\" selectnumber=%d", - cur_hseq++, cur_form_id, htmlquote_str(p), n_select); -#else /* not NEW_FORM */ - select_str = Sprintf("<pre_int><input_alt hseq=\"%d\" " - "type=select name=\"%s\" selectnumber=%d", - cur_hseq++, htmlquote_str(p), n_select); -#endif /* not NEW_FORM */ + cur_hseq++, cur_form_id, html_quote(p), n_select); Strcat_charp(select_str, ">"); + if (n_select == max_select) { + max_select *= 2; + select_option = New_Reuse(FormSelectOption, select_option, max_select); + } select_option[n_select].first = NULL; select_option[n_select].last = NULL; cur_option_maxwidth = 0; @@ -2392,16 +2498,14 @@ process_n_select(void) return NULL; process_option(); #ifdef MENU_SELECT - if (!select_is_multiple && n_select < MAX_SELECT) { - if (select_option[n_select].first) - Strcat(select_str, textfieldrep(chooseSelectOption( - select_option[n_select].first, CHOOSE_OPTION), - cur_option_maxwidth)); + if (!select_is_multiple) { + if (select_option[n_select].first) { + FormItemList sitem; + chooseSelectOption(&sitem, select_option[n_select].first); + Strcat(select_str, textfieldrep(sitem.label, cur_option_maxwidth)); + } Strcat_charp(select_str, "</input_alt>]</pre_int>"); n_select++; - if (n_select == MAX_SELECT) { - disp_err_message("Too many select in one page", FALSE); - } } else #endif /* MENU_SELECT */ Strcat_charp(select_str, "<br>"); @@ -2489,7 +2593,7 @@ process_option(void) if (cur_option_label == NULL) cur_option_label = cur_option; #ifdef MENU_SELECT - if (!select_is_multiple && n_select < MAX_SELECT) { + if (!select_is_multiple) { if (cur_option_label->length > cur_option_maxwidth) cur_option_maxwidth = cur_option_label->length; addSelectOption(&select_option[n_select], @@ -2499,7 +2603,6 @@ process_option(void) return; } #endif /* MENU_SELECT */ -#ifdef NEW_FORM if (!select_is_multiple) { begin_char = '('; end_char = ')'; @@ -2507,22 +2610,15 @@ process_option(void) Strcat(select_str, Sprintf("<br><pre_int>%c<input_alt hseq=\"%d\" " "fid=\"%d\" type=%s name=\"%s\" value=\"%s\"", begin_char, cur_hseq++, cur_form_id, -#else /* not NEW_FORM */ - Strcat(select_str, Sprintf("<br><pre_int><input_alt hseq=\"%d\" " - "type=%s name=\"%s\" value=\"%s\"", - cur_hseq++, -#endif /* not NEW_FORM */ select_is_multiple ? "checkbox" : "radio", - htmlquote_str(cur_select->ptr), - htmlquote_str(cur_option_value->ptr))); + html_quote(cur_select->ptr), + html_quote(cur_option_value->ptr))); if (cur_option_selected) Strcat_charp(select_str, " checked>*</input_alt>"); else Strcat_charp(select_str, "> </input_alt>"); -#ifdef NEW_FORM Strcat_char(select_str, end_char); -#endif /* not NEW_FORM */ - Strcat_charp(select_str, htmlquote_str(cur_option_label->ptr)); + Strcat_charp(select_str, html_quote(cur_option_label->ptr)); Strcat_charp(select_str, "</pre_int>"); n_selectitem++; } @@ -2530,25 +2626,32 @@ process_option(void) Str process_textarea(struct parsed_tag * tag, int width) { - char *p, *q, *r; - - p = "40"; - parsedtag_get_value(tag, ATTR_COLS, &p); - q = ""; - parsedtag_get_value(tag, ATTR_NAME, &q); - r = "10"; - parsedtag_get_value(tag, ATTR_ROWS, &r); - cur_textarea = Strnew_charp(q); - cur_textarea_size = atoi(p); - if (p[strlen(p) - 1] == '%') { - cur_textarea_size = width * cur_textarea_size / 100 - 2; - } - if (cur_textarea_size <= 0) - cur_textarea_size = 40; + char *p; - cur_textarea_rows = atoi(r); - if (n_textarea < MAX_TEXTAREA) - textarea_str[n_textarea] = Strnew(); + p = ""; + parsedtag_get_value(tag, ATTR_NAME, &p); + cur_textarea = Strnew_charp(p); + cur_textarea_size = 20; + if (parsedtag_get_value(tag, ATTR_COLS, &p)) { + cur_textarea_size = atoi(p); + if (p[strlen(p) - 1] == '%') + cur_textarea_size = width * cur_textarea_size / 100 - 2; + if (cur_textarea_size <= 0) + cur_textarea_size = 20; + } + cur_textarea_rows = 1; + if (parsedtag_get_value(tag, ATTR_ROWS, &p)) { + cur_textarea_rows = atoi(p); + if (cur_textarea_rows <= 0) + cur_textarea_rows = 1; + } + cur_textarea_readonly = parsedtag_exists(tag, ATTR_READONLY); + if (n_textarea >= max_textarea) { + max_textarea *= 2; + textarea_str = New_Reuse(Str, textarea_str, max_textarea); + } + textarea_str[n_textarea] = Strnew(); + ignore_nl_textarea = TRUE; return NULL; } @@ -2557,29 +2660,27 @@ Str process_n_textarea(void) { Str tmp; + int i; - if (cur_textarea == NULL || n_textarea >= MAX_TEXTAREA) + if (cur_textarea == NULL) return NULL; -#ifdef NEW_FORM - tmp = Sprintf("<pre_int>[<input_alt hseq=\"%d\" fid=\"%d\" type=textarea " - "name=\"%s\" size=%d rows=%d textareanumber=%d><u>", - cur_hseq++, cur_form_id, htmlquote_str(cur_textarea->ptr), - cur_textarea_size, cur_textarea_rows, n_textarea); -#else /* not NEW_FORM */ - tmp = Sprintf("<pre_int>[<input_alt hseq=\"%d\" type=textarea " - "name=\"%s\" size=%d rows=%d textareanumber=%d><u>", - cur_hseq++, htmlquote_str(cur_textarea->ptr), - cur_textarea_size, cur_textarea_rows, n_textarea); -#endif /* not NEW_FORM */ - Strcat(tmp, textfieldrep(textarea_str[n_textarea], cur_textarea_size)); - Strcat_charp(tmp, "</u></input_alt>]</pre_int>"); + tmp = Strnew(); + Strcat(tmp, Sprintf("<pre_int>[<input_alt hseq=\"%d\" fid=\"%d\" " + "type=textarea name=\"%s\" size=%d rows=%d " + "top_margin=%d textareanumber=%d", + cur_hseq, cur_form_id, + html_quote(cur_textarea->ptr), + cur_textarea_size, cur_textarea_rows, + cur_textarea_rows - 1, n_textarea)); + if (cur_textarea_readonly) + Strcat_charp(tmp, " readonly"); + Strcat_charp(tmp, "><u>"); + for (i = 0; i < cur_textarea_size; i++) + Strcat_char(tmp, ' '); + Strcat_charp(tmp, "</u></input_alt>]</pre_int>\n"); + cur_hseq++; n_textarea++; - if (n_textarea == MAX_TEXTAREA) { - disp_err_message("Too many textarea in one page", FALSE); - } - else - textarea_str[n_textarea] = Strnew(); cur_textarea = NULL; return tmp; @@ -2588,17 +2689,23 @@ process_n_textarea(void) void feed_textarea(char *str) { - if (n_textarea < MAX_TEXTAREA) { - while (*str) { - if (*str == '&') - Strcat_charp(textarea_str[n_textarea], getescapecmd(&str)); - else if (*str == '\n') { - Strcat_charp(textarea_str[n_textarea], "\r\n"); - str++; - } - else - Strcat_char(textarea_str[n_textarea], *(str++)); - } + if (cur_textarea == NULL) + return; + if (ignore_nl_textarea) { + if (*str == '\r') + str++; + if (*str == '\n') + str++; + } + ignore_nl_textarea = FALSE; + while (*str) { + if (*str == '&') + Strcat_charp(textarea_str[n_textarea], getescapecmd(&str)); + else if (*str == '\n') { + Strcat_charp(textarea_str[n_textarea], "\r\n"); + str++; + } else if (*str != '\r') + Strcat_char(textarea_str[n_textarea], *(str++)); } } @@ -2629,7 +2736,7 @@ process_hr(struct parsed_tag *tag, int width, int indent_width) break; } #ifndef KANJI_SYMBOLS - Strcat_charp(tmp, "<_RULE>"); + Strcat_charp(tmp, "<_RULE TYPE=10>"); #endif /* not KANJI_SYMBOLS */ w -= HR_RULE_WIDTH - 1; if (w <= 0) @@ -2644,9 +2751,8 @@ process_hr(struct parsed_tag *tag, int width, int indent_width) return tmp; } -#ifdef NEW_FORM #ifdef JP_CHARSET -char +static char check_charset(char *s) { switch (*s) { @@ -2663,7 +2769,7 @@ check_charset(char *s) return 0; } -char +static char check_accept_charset(char *s) { char *e; @@ -2684,12 +2790,12 @@ check_accept_charset(char *s) } return 0; } -#endif +#endif /* JP_CHARSET */ Str process_form(struct parsed_tag *tag) { - char *p, *q, *r, *s, *tg; + char *p, *q, *r, *s, *tg, *n; char cs = 0; p = "get"; @@ -2702,17 +2808,19 @@ process_form(struct parsed_tag *tag) cs = check_accept_charset(r); if (! cs && parsedtag_get_value(tag, ATTR_CHARSET, &r)) cs = check_charset(r); -#endif +#endif /*JP_CHARSET */ s = NULL; parsedtag_get_value(tag, ATTR_ENCTYPE, &s); tg = NULL; parsedtag_get_value(tag, ATTR_TARGET, &tg); + n = NULL; + parsedtag_get_value(tag, ATTR_NAME, &n); form_max++; form_sp++; if (forms_size == 0) { forms_size = INITIAL_FORM_SIZE; forms = New_N(FormList *, forms_size); - form_stack = New_N(int, forms_size); + form_stack = NewAtom_N(int, forms_size); } else if (forms_size <= form_max) { forms_size += form_max; @@ -2720,7 +2828,7 @@ process_form(struct parsed_tag *tag) form_stack = New_Reuse(int, form_stack, forms_size); } forms[form_max] = - newFormList(q, p, &cs, s, tg, (form_max > 0) ? forms[form_max - 1] : NULL); + newFormList(q, p, &cs, s, tg, n, (form_max > 0) ? forms[form_max - 1] : NULL); form_stack[form_sp] = form_max; return NULL; @@ -2733,7 +2841,6 @@ process_n_form(void) form_sp--; return NULL; } -#endif /* NEW_FORM */ static void clear_ignore_p_flag(int cmd, struct readbuffer *obuf) @@ -2795,9 +2902,9 @@ process_idattr(struct readbuffer *obuf, int cmd, struct parsed_tag *tag) return; if (framename) idtag = Sprintf("<_id id=\"%s\" framename=\"%s\">", - htmlquote_str(id), htmlquote_str(framename)); + html_quote(id), html_quote(framename)); else - idtag = Sprintf("<_id id=\"%s\">", htmlquote_str(id)); + idtag = Sprintf("<_id id=\"%s\">", html_quote(id)); push_tag(obuf, idtag->ptr, HTML_NOP); } #endif /* ID_EXT */ @@ -2970,8 +3077,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) } if (cmd == HTML_UL) envs[h_env->envc].type = ul_type(tag, 0); - if (cmd == HTML_BLQ) - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); + flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); return 1; case HTML_N_UL: case HTML_N_OL: @@ -3129,13 +3235,13 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) append_tags(obuf); tmp = Strnew_charp(obuf->line->ptr); Strremovetrailingspaces(tmp); - h_env->title = cleanup_str(tmp->ptr); + h_env->title = html_unquote(tmp->ptr); obuf->line = save_line; obuf->prevchar = save_prevchar; back_to_breakpoint(obuf); tmp = Strnew_m_charp( "<title_alt title=\"", - htmlquote_str(h_env->title), + html_quote(h_env->title), "\">", NULL); push_tag(obuf, tmp->ptr, HTML_TITLE_ALT); @@ -3156,11 +3262,11 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) parsedtag_get_value(tag, ATTR_SRC, &q); parsedtag_get_value(tag, ATTR_NAME, &r); if (q) { - q = htmlquote_str(q); + q = html_quote(q); push_tag(obuf, Sprintf("<a hseq=\"%d\" href=\"%s\">", cur_hseq++, q)->ptr, HTML_A); if (r) - q = htmlquote_str(r); + q = html_quote(r); push_charp(obuf, strlen(q), q, PC_ASCII); push_tag(obuf, "</a>", HTML_N_A); } @@ -3292,6 +3398,18 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) obuf->img_alt = NULL; } return 1; + case HTML_INPUT_ALT: + i = 0; + if (parsedtag_get_value(tag, ATTR_TOP_MARGIN, &i)) { + if (i > obuf->top_margin) + obuf->top_margin = i; + } + i = 0; + if (parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &i)) { + if (i > obuf->bottom_margin) + obuf->bottom_margin = i; + } + return 0; case HTML_TABLE: obuf->table_level++; if (obuf->table_level >= MAX_TABLE) @@ -3371,20 +3489,13 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) RB_RESTORE_FLAG(obuf); return 1; case HTML_FORM: -#ifdef NEW_FORM case HTML_FORM_INT: process_form(tag); return 1; -#endif /* NEW_FORM */ case HTML_N_FORM: -#ifdef NEW_FORM case HTML_N_FORM_INT: process_n_form(); return 1; -#else /* not NEW_FORM */ - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - return 0; -#endif /* not NEW_FORM */ case HTML_INPUT: tmp = process_input(tag); if (tmp) @@ -3416,9 +3527,9 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) parsedtag_get_value(tag, ATTR_PROMPT, &p); parsedtag_get_value(tag, ATTR_ACTION, &q); tmp = Strnew_m_charp("<form method=get action=\"", - htmlquote_str(q), + html_quote(q), "\">", - htmlquote_str(p), + html_quote(p), "<input type=text name=\"\" accept></form>", NULL); HTMLlineproc1(tmp->ptr, h_env); @@ -3435,7 +3546,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) if (*q == '=') { q++; SKIP_BLANKS(q); - content_charset = guess_charset(q); + meta_charset = guess_charset(q); } } else @@ -3469,7 +3580,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) q++; } if (s_tmp) { - q = htmlquote_str(s_tmp->ptr); + q = html_quote(s_tmp->ptr); tmp = Sprintf("Refresh (%d sec) <a hseq=\"%d\" href=\"%s\">%s</a>", refresh, cur_hseq++, q, q); push_str(obuf, s_tmp->length, tmp, PC_ASCII); @@ -3507,7 +3618,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) if (view_unseenobject) { if (parsedtag_get_value(tag, ATTR_SRC, &p)) { Str s; - q = htmlquote_str(p); + q = html_quote(p); s = Sprintf("<A HREF=\"%s\">bgsound(%s)</A>", q, q); HTMLlineproc1(s->ptr, h_env); } @@ -3517,7 +3628,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) if (view_unseenobject) { if (parsedtag_get_value(tag, ATTR_SRC, &p)) { Str s; - q = htmlquote_str(p); + q = html_quote(p); s = Sprintf("<A HREF=\"%s\">embed(%s)</A>", q, q); HTMLlineproc1(s->ptr, h_env); } @@ -3527,7 +3638,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) if (view_unseenobject) { if (parsedtag_get_value(tag, ATTR_ARCHIVE, &p)) { Str s; - q = htmlquote_str(p); + q = html_quote(p); s = Sprintf("<A HREF=\"%s\">applet archive(%s)</A>", q, q); HTMLlineproc1(s->ptr, h_env); } @@ -3539,7 +3650,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) if (view_unseenobject) { if (parsedtag_get_value(tag, ATTR_BACKGROUND, &p)) { Str s; - q = htmlquote_str(p); + q = html_quote(p); s = Sprintf("<IMG SRC=\"%s\" ALT=\"bg image(%s)\"><BR>", q, q); HTMLlineproc1(s->ptr, h_env); @@ -3579,9 +3690,6 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) Anchor *a_href = NULL, *a_img = NULL, *a_form = NULL; char outc[LINELEN]; char *p, *q, *r, *str; -#ifndef NEW_FORM - char cs; -#endif Lineprop outp[LINELEN], mode, effect; int pos; int nlines; @@ -3594,15 +3702,16 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) int hseq; Str line; char *endp; +#ifndef KANJI_SYMBOLS + char rule; +#endif if (w3m_debug) debug = fopen("zzzerr", "a"); effect = 0; nlines = 0; -#ifdef NEW_FORM buf->formlist = (form_max >= 0) ? forms[form_max] : NULL; -#endif /* NEW_FORM */ while ((line = feed()) != NULL) { if (w3m_debug) { Strfputs(line, debug); @@ -3626,8 +3735,8 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) while (str < endp && pos < LINELEN) { mode = get_mctype(str); #ifndef KANJI_SYMBOLS - if (effect & PC_RULE && IS_INTSPACE(*str)) { - PPUSH(PC_ASCII | effect, *str); + if (effect & PC_RULE && *str != '<') { + PPUSH(PC_ASCII | effect, rule | 0x80); str++; } else #endif @@ -3686,21 +3795,30 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) break; case HTML_A: if (renderFrameSet && - parsedtag_get_value(tag, ATTR_FRAMENAME, &p) && - (!idFrame || strcmp(idFrame->body->name, p))) { - idFrame = search_frame(renderFrameSet, p); - if (idFrame && idFrame->body->attr != F_BODY) - idFrame = NULL; + parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) { + p = url_quote_conv(p, buf->document_code); + if (!idFrame || strcmp(idFrame->body->name, p)) { + idFrame = search_frame(renderFrameSet, p); + if (idFrame && idFrame->body->attr != F_BODY) + idFrame = NULL; + } } p = r = NULL; q = buf->baseTarget; hseq = 0; id = NULL; - if (parsedtag_get_value(tag, ATTR_NAME, &id)) + if (parsedtag_get_value(tag, ATTR_NAME, &id)) { + id = url_quote_conv(id, buf->document_code); registerName(buf, id, currentLn(buf), pos); - parsedtag_get_value(tag, ATTR_HREF, &p); - parsedtag_get_value(tag, ATTR_TARGET, &q); - parsedtag_get_value(tag, ATTR_REFERER, &r); + } + if (parsedtag_get_value(tag, ATTR_HREF, &p)) { + p = remove_space(p); + p = url_quote_conv(p, buf->document_code); + } + if (parsedtag_get_value(tag, ATTR_TARGET, &q)) + q = url_quote_conv(q, buf->document_code); + if (parsedtag_get_value(tag, ATTR_REFERER, &r)) + r = url_quote_conv(r, buf->document_code); parsedtag_get_value(tag, ATTR_HSEQ, &hseq); if (hseq > 0) buf->hmarklist = @@ -3735,6 +3853,8 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) break; case HTML_IMG_ALT: if (parsedtag_get_value(tag, ATTR_SRC, &p)) { + p = remove_space(p); + p = url_quote_conv(p, buf->document_code); a_img = registerImg(buf, p, currentLn(buf), pos); } @@ -3751,28 +3871,17 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) case HTML_INPUT_ALT: { FormList *form; -#ifdef NEW_FORM + int top = 0, bottom = 0; int form_id = -1; -#endif /* NEW_FORM */ -#ifndef NEW_FORM - if (form_sp < 0) - break; /* outside of <form>..</form> */ -#endif /* not NEW_FORM */ hseq = 0; parsedtag_get_value(tag, ATTR_HSEQ, &hseq); -#ifdef NEW_FORM parsedtag_get_value(tag, ATTR_FID, &form_id); -#endif -#ifdef NEW_FORM + parsedtag_get_value(tag, ATTR_TOP_MARGIN, &top); + parsedtag_get_value(tag, ATTR_BOTTOM_MARGIN, &bottom); if (form_id < 0 || form_id > form_max || forms == NULL) break; /* outside of <form>..</form> */ form = forms[form_id]; -#else /* not NEW_FORM */ - if (form_sp >= FORMSTACK_SIZE) - break; - form = form_stack[form_sp]; -#endif /* not NEW_FORM */ if (hseq > 0) { int hpos = pos; if (*str == '[') @@ -3784,7 +3893,9 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) form->target = buf->baseTarget; a_form = registerForm(buf, form, tag, currentLn(buf), pos); if (a_form) { - a_form->hseq = hseq - 1; + a_form->hseq = hseq - 1; + a_form->y = currentLn(buf) - top; + a_form->rows = 1 + top + bottom; if (!parsedtag_exists(tag, ATTR_NO_EFFECT)) effect |= PE_FORM; break; @@ -3801,32 +3912,6 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) } a_form = NULL; break; -#ifndef NEW_FORM - case HTML_FORM: - case HTML_FORM_INT: - form_sp++; - if (form_sp >= FORMSTACK_SIZE) - break; - p = "get"; - q = "/"; - s = NULL; - cs = 0; - parsedtag_get_value(tag, ATTR_METHOD, &p); - parsedtag_get_value(tag, ATTR_ACTION, &q); -#ifdef JP_CHARSET - if (parsedtag_get_value(tag, ATTR_CHARSET, &r)) - cs = check_charset(r); -#endif - parsedtag_get_value(tag, ATTR_ENCTYPE, &s); - buf->formlist = newFormList(q, p, &cs, s, buf->formlist); - form_stack[form_sp] = buf->formlist; - break; - case HTML_N_FORM: - case HTML_N_FORM_INT: - if (form_sp >= 0) - form_sp--; - break; -#endif /* not NEW_FORM */ case HTML_MAP: if (parsedtag_get_value(tag, ATTR_NAME, &p)) { MapList *m = New(MapList); @@ -3845,6 +3930,8 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) * <map>..</map> */ break; if (parsedtag_get_value(tag, ATTR_HREF, &p)) { + p = remove_space(p); + p = url_quote_conv(p, buf->document_code); pushText(buf->maplist->urls, p); if (parsedtag_get_value(tag, ATTR_ALT, &q)) pushText(buf->maplist->alts, q); @@ -3864,7 +3951,7 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) buf->frameset = frameset_s[frameset_sp]; } else - pushFrameTree(&(buf->frameQ), frameset_s[frameset_sp], 0, 0); + pushFrameTree(&(buf->frameQ), frameset_s[frameset_sp], NULL); } else addFrameSetElement(frameset_s[frameset_sp - 1], @@ -3878,25 +3965,30 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) if (frameset_sp >= 0 && frameset_sp < FRAMESTACK_SIZE) { union frameset_element element; - element.body = newFrame(tag, baseURL(buf)); + element.body = newFrame(tag, buf); addFrameSetElement(frameset_s[frameset_sp], element); } break; case HTML_BASE: if (parsedtag_get_value(tag, ATTR_HREF, &p)) { + p = remove_space(p); + p = url_quote_conv(p, buf->document_code); if (!buf->baseURL) buf->baseURL = New(ParsedURL); parseURL(p, buf->baseURL, NULL); } - parsedtag_get_value(tag, ATTR_TARGET, &buf->baseTarget); + if (parsedtag_get_value(tag, ATTR_TARGET, &p)) + buf->baseTarget = url_quote_conv(p, buf->document_code); break; case HTML_TITLE_ALT: if (parsedtag_get_value(tag, ATTR_TITLE, &p)) - buf->buffername = cleanup_str(p); + buf->buffername = html_unquote(p); break; #ifndef KANJI_SYMBOLS case HTML_RULE: effect |= PC_RULE; + if (parsedtag_get_value(tag, ATTR_TYPE, &p)) + rule = (char)atoi(p); break; case HTML_N_RULE: effect &= ~PC_RULE; @@ -3905,14 +3997,18 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) } #ifdef ID_EXT id = NULL; - if (parsedtag_get_value(tag, ATTR_ID, &id)) + if (parsedtag_get_value(tag, ATTR_ID, &id)) { + id = url_quote_conv(id, buf->document_code); registerName(buf, id, currentLn(buf), pos); + } if (renderFrameSet && - parsedtag_get_value(tag, ATTR_FRAMENAME, &p) && - (!idFrame || strcmp(idFrame->body->name, p))) { - idFrame = search_frame(renderFrameSet, p); - if (idFrame && idFrame->body->attr != F_BODY) - idFrame = NULL; + parsedtag_get_value(tag, ATTR_FRAMENAME, &p)) { + p = url_quote_conv(p, buf->document_code); + if (!idFrame || strcmp(idFrame->body->name, p)) { + idFrame = search_frame(renderFrameSet, p); + if (idFrame && idFrame->body->attr != F_BODY) + idFrame = NULL; + } } if (id && idFrame) idFrame->body->nameList = @@ -3938,6 +4034,8 @@ HTMLlineproc2body(Buffer * buf, Str (*feed) (), int llimit) } if (w3m_debug) fclose(debug); + if (n_textarea) + addMultirowsForm(buf, buf->formitem); } void @@ -3974,16 +4072,17 @@ proc_escape(struct readbuffer *obuf, char **str_return) char *str = *str_return, *estr; int ech = getescapechar(str_return); int width, n_add = *str_return - str; - Lineprop mode = IS_CNTRL(ech) ? PC_CTRL : PC_ASCII; + Lineprop mode; - if (!ech) { + if (ech < 0) { *str_return = str; proc_mchar(obuf, obuf->flag & RB_SPECIAL, 1, str_return, PC_ASCII); return; } + mode = IS_CNTRL(ech) ? PC_CTRL : PC_ASCII; check_breakpoint(obuf, obuf->flag & RB_SPECIAL, ech); - estr = conv_latin1(ech); + estr = conv_entity(ech); width = strlen(estr); if (width == 1 && ech == (unsigned char) *estr && ech != '&' && ech != '<' && ech != '>') @@ -3999,7 +4098,7 @@ static int need_flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, Lineprop mode) { - char ch = Strlastchar(obuf->line); + char ch; if (obuf->flag & RB_PRE_INT) { if (obuf->pos > h_env->limit) @@ -4008,6 +4107,7 @@ need_flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, return 0; } + ch = Strlastchar(obuf->line); /* if (ch == ' ' && obuf->tag_sp > 0) */ if (ch == ' ') return 0; @@ -4040,7 +4140,7 @@ HTMLlineproc0(char *istr, struct html_feed_environ *h_env, int internal) struct readbuffer *obuf = h_env->obuf; int indent, delta; struct parsed_tag *tag; - Str tokbuf = Strnew(); + Str tokbuf; struct table *tbl = NULL; struct table_mode *tbl_mode; int tbl_width; @@ -4067,6 +4167,8 @@ HTMLlineproc0(char *istr, struct html_feed_environ *h_env, int internal) return; } + tokbuf = Strnew(); + table_start: if (obuf->table_level >= 0) { int level = min(obuf->table_level, MAX_TABLE - 1); @@ -4120,6 +4222,12 @@ HTMLlineproc0(char *istr, struct html_feed_environ *h_env, int internal) if (ST_IS_REAL_TAG(obuf->status)) Strcat_char(h_env->tagbuf, ' '); } + if ((obuf->flag & RB_IGNORE) && + ! TAG_IS(h_env->tagbuf->ptr, obuf->ignore_tag->ptr, + obuf->ignore_tag->length - 1)) + /* within ignored tag, such as * + * <script>..</script>, don't process tag. */ + obuf->status = R_ST_NORMAL; continue; } is_tag = TRUE; @@ -4263,9 +4371,21 @@ HTMLlineproc0(char *istr, struct html_feed_environ *h_env, int internal) mode = get_mctype(str); delta = get_mclen(mode); if (obuf->flag & (RB_SPECIAL & ~RB_NOBR)) { - if (*str != '\n') + char ch = *str; + if (! (obuf->flag & RB_PLAINMODE) && (*str == '&')) { + char *p = str; + int ech = getescapechar(&p); + if (ech == '\n' || ech == '\r') { + ch = '\n'; + str = p - 1; + } else if (ech == '\t') { + ch = '\t'; + str = p - 1; + } + } + if (ch != '\n') obuf->flag &= ~RB_IGNORE_P; - if (*str == '\n') { + if (ch == '\n') { str++; if (obuf->flag & RB_IGNORE_P) { obuf->flag &= ~RB_IGNORE_P; @@ -4276,14 +4396,14 @@ HTMLlineproc0(char *istr, struct html_feed_environ *h_env, int internal) else flushline(h_env, obuf, h_env->envs[h_env->envc].indent, 1, h_env->limit); } - else if (*str == '\t') { + else if (ch == '\t') { do { PUSH(' '); } while (obuf->pos % Tabstop != 0); str++; } else if (obuf->flag & RB_PLAINMODE) { - char *p = htmlquote_char(*str); + char *p = html_quote_char(*str); if (p) { push_charp(obuf, 1, p, PC_ASCII); str++; @@ -4416,7 +4536,7 @@ addnewline(Buffer * buf, char *line, Lineprop * prop, l->next = NULL; if (pos > 0) { l->lineBuf = allocStr(line, pos); - l->propBuf = New_N(Lineprop, pos); + l->propBuf = NewAtom_N(Lineprop, pos); bcopy((void *) prop, (void *) l->propBuf, pos * sizeof(Lineprop)); } else { @@ -4425,7 +4545,7 @@ addnewline(Buffer * buf, char *line, Lineprop * prop, } #ifdef ANSI_COLOR if (pos > 0 && color) { - l->colorBuf = New_N(Linecolor, pos); + l->colorBuf = NewAtom_N(Linecolor, pos); bcopy((void *) color, (void *) l->colorBuf, pos * sizeof(Linecolor)); } else { l->colorBuf = NULL; @@ -4447,7 +4567,8 @@ addnewline(Buffer * buf, char *line, Lineprop * prop, buf->firstLine = l; l->linenumber = ++buf->allLine; if (nlines < 0) { - l->real_linenumber = l->linenumber; +/* l->real_linenumber = l->linenumber; */ + l->real_linenumber = 0; } else { l->real_linenumber = nlines; @@ -4466,7 +4587,8 @@ loadHTMLBuffer(URLFile * f, Buffer * newBuf) if (newBuf == NULL) newBuf = newBuffer(INIT_BUFFER_WIDTH); - if (newBuf->sourcefile == NULL && f->scheme != SCM_LOCAL) { + if (newBuf->sourcefile == NULL && + (f->scheme != SCM_LOCAL || newBuf->mailcap)) { tmp = tmpfname(TMPF_SRC, ".html"); src = fopen(tmp->ptr, "w"); if (src) @@ -4478,6 +4600,8 @@ loadHTMLBuffer(URLFile * f, Buffer * newBuf) newBuf->topLine = newBuf->firstLine; newBuf->lastLine = newBuf->currentLine; newBuf->currentLine = newBuf->firstLine; + if (n_textarea) + formResetBuffer(newBuf, newBuf->formitem); if (src) fclose(src); @@ -4528,7 +4652,7 @@ showProgress(int *linelen, int *trbyte) { int i, j, rate, duration, eta, pos; static time_t last_time, start_time; - time_t cur_time = time(0); + time_t cur_time; Str messages; char *fmtrbyte, *fmrate; @@ -4537,6 +4661,7 @@ showProgress(int *linelen, int *trbyte) if (current_content_length > 0) { double ratio; + cur_time = time(0); if (cur_time == last_time) return; last_time = cur_time; @@ -4584,6 +4709,7 @@ showProgress(int *linelen, int *trbyte) refresh(); } else if (*linelen > 1000) { + cur_time = time(0); if (cur_time == last_time) return; last_time = cur_time; @@ -4599,10 +4725,10 @@ showProgress(int *linelen, int *trbyte) duration = cur_time - start_time; if (duration) { fmrate = convert_size(*trbyte / duration, 1); - messages = Sprintf("%7s loaded %7s/s\n", fmtrbyte, fmrate); + messages = Sprintf("%7s loaded %7s/s", fmtrbyte, fmrate); } else { - messages = Sprintf("%7s loaded\n", fmtrbyte); + messages = Sprintf("%7s loaded", fmtrbyte); } message(messages->ptr, 0, 0); refresh(); @@ -4634,6 +4760,8 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf, obuf->prev_ctype = PC_ASCII; obuf->tag_sp = 0; obuf->fontstat_sp = 0; + obuf->top_margin = 0; + obuf->bottom_margin = 0; obuf->bp.init_flag = 1; set_breakpoint(obuf, 0); @@ -4702,17 +4830,18 @@ loadHTMLstream(URLFile * f, Buffer * newBuf, FILE * src, int internal) n_textarea = 0; cur_textarea = NULL; + max_textarea = MAX_TEXTAREA; + textarea_str = New_N(Str,max_textarea); #ifdef MENU_SELECT n_select = 0; + max_select = MAX_SELECT; + select_option = New_N(FormSelectOption,max_select); #endif /* MENU_SELECT */ cur_select = NULL; form_sp = -1; -#ifdef NEW_FORM form_max = -1; forms_size = 0; forms = NULL; -#endif /* NEW_FORM */ - cur_hseq = 1; if (w3m_halfload) { @@ -4739,11 +4868,11 @@ loadHTMLstream(URLFile * f, Buffer * newBuf, FILE * src, int internal) #ifdef JP_CHARSET if (newBuf != NULL && newBuf->document_code != '\0') code = newBuf->document_code; - else if (content_charset != '\0') + else if (content_charset != '\0' && UseContentCharset) code = content_charset; else code = DocumentCode; - content_charset = '\0'; + meta_charset = '\0'; #endif #if 0 do_blankline(&htmlenv1, &obuf, 0, 0, htmlenv1.limit); @@ -4757,9 +4886,10 @@ loadHTMLstream(URLFile * f, Buffer * newBuf, FILE * src, int internal) linelen += lineBuf2->length; showProgress(&linelen, &trbyte); #ifdef JP_CHARSET - if (content_charset != '\0') { /* <META> */ - code = content_charset; - content_charset = '\0'; + if (meta_charset != '\0') { /* <META> */ + if (content_charset == '\0' && UseContentCharset) + code = meta_charset; + meta_charset = '\0'; } #endif if (!internal) @@ -4794,10 +4924,11 @@ loadHTMLstream(URLFile * f, Buffer * newBuf, FILE * src, int internal) term_raw(); signal(SIGINT, prevtrap); } - HTMLlineproc2(newBuf, htmlenv1.buf); #ifdef JP_CHARSET newBuf->document_code = code; + content_charset = '\0'; #endif /* JP_CHARSET */ + HTMLlineproc2(newBuf, htmlenv1.buf); } /* @@ -4809,6 +4940,8 @@ loadHTMLString(Str page) URLFile f; MySignalHandler(*prevtrap) (); Buffer *newBuf; + Str tmp; + FILE *src = NULL; newBuf = newBuffer(INIT_BUFFER_WIDTH); if (SETJMP(AbortLoading) != 0) { @@ -4821,8 +4954,15 @@ loadHTMLString(Str page) prevtrap = signal(SIGINT, KeyAbort); term_cbreak(); } + if (w3m_dump & DUMP_FRAME) { + tmp = tmpfname(TMPF_SRC, ".html"); + pushText(fileToDelete, tmp->ptr); + src = fopen(tmp->ptr, "w"); + if (src) + newBuf->sourcefile = tmp->ptr; + } - loadHTMLstream(&f, newBuf, NULL, TRUE); + loadHTMLstream(&f, newBuf, src, TRUE); if (fmInitialized) { term_raw(); @@ -4834,6 +4974,10 @@ loadHTMLString(Str page) #ifdef JP_CHARSET newBuf->document_code = InnerCode; #endif /* JP_CHARSET */ + if (n_textarea) + formResetBuffer(newBuf, newBuf->formitem); + if (src) + fclose(src); return newBuf; } @@ -4861,7 +5005,7 @@ loadGopherDir(URLFile * uf, Buffer * newBuf) #ifdef JP_CHARSET if (newBuf->document_code != '\0') code = newBuf->document_code; - else if (content_charset != '\0') + else if (content_charset != '\0' && UseContentCharset) code = content_charset; else code = DocumentCode; @@ -4874,8 +5018,11 @@ loadGopherDir(URLFile * uf, Buffer * newBuf) (lbuf->ptr[1] == '\n' || lbuf->ptr[1] == '\r')) break; #ifdef JP_CHARSET - if ((ic = checkShiftCode(lbuf, code)) != '\0') - lbuf = conv_str(lbuf, (code = ic), InnerCode); + if ((ic = checkShiftCode(lbuf, code)) != '\0') { + if (UseAutoDetect) + code = ic; + lbuf = conv_str(lbuf, code, InnerCode); + } #endif /* JP_CHARSET */ cleanup_line(lbuf, HTML_MODE); @@ -4929,6 +5076,9 @@ loadGopherDir(URLFile * uf, Buffer * newBuf) Strcat_charp(lbuf, name->ptr + 1); pushTextLine(tl, newTextLine(lbuf, visible_length(lbuf->ptr))); } +#ifdef JP_CHARSET + newBuf->document_code = code; +#endif /* JP_CHARSET */ HTMLlineproc2(newBuf, tl); newBuf->topLine = newBuf->firstLine; newBuf->lastLine = newBuf->currentLine; @@ -4968,7 +5118,8 @@ loadBuffer(URLFile * uf, Buffer * newBuf) term_cbreak(); } - if (newBuf->sourcefile == NULL && uf->scheme != SCM_LOCAL) { + if (newBuf->sourcefile == NULL && + (uf->scheme != SCM_LOCAL || newBuf->mailcap)) { tmpf = tmpfname(TMPF_SRC, NULL); src = fopen(tmpf->ptr, "w"); if (src) @@ -4977,7 +5128,7 @@ loadBuffer(URLFile * uf, Buffer * newBuf) #ifdef JP_CHARSET if (newBuf->document_code != '\0') code = newBuf->document_code; - else if (content_charset != '\0') + else if (content_charset != '\0' && UseContentCharset) code = content_charset; else code = DocumentCode; @@ -5032,6 +5183,7 @@ loadBuffer(URLFile * uf, Buffer * newBuf) term_raw(); } newBuf->topLine = newBuf->firstLine; + newBuf->lastLine = newBuf->currentLine; newBuf->currentLine = newBuf->firstLine; newBuf->trbyte = trbyte + linelen; #ifdef JP_CHARSET @@ -5100,7 +5252,7 @@ saveBufferDelNum(Buffer * buf, FILE * f, int del) else #endif tmp = Strnew_charp_n(l->lineBuf, l->len); - if (del && (p = strchr(tmp->ptr, ':')) != NULL) + if (del && l->real_linenumber && (p = strchr(tmp->ptr, ':')) != NULL) Strdelete(tmp, 0, p - tmp->ptr + 1); #ifdef JP_CHARSET tmp = conv_str(tmp, InnerCode, DisplayCode); @@ -5144,11 +5296,11 @@ Buffer * getshell(char *cmd) { Buffer *buf; - Str bn; + buf = loadcmdout(cmd, loadBuffer, NULL); buf->filename = cmd; - bn = Sprintf("%s %s", SHELLBUFFERNAME, cmd); - buf->buffername = bn->ptr; + buf->buffername = Sprintf("%s %s", SHELLBUFFERNAME, + conv_from_system(cmd))->ptr; return buf; } @@ -5160,7 +5312,6 @@ getpipe(char *cmd) { FILE *f, *popen(const char *, const char *); Buffer *buf; - Str bn; if (cmd == NULL || *cmd == '\0') return NULL; @@ -5170,8 +5321,8 @@ getpipe(char *cmd) buf = newBuffer(INIT_BUFFER_WIDTH); buf->pagerSource = newFileStream(f, (void (*)()) pclose); buf->filename = cmd; - bn = Sprintf("%s %s", PIPEBUFFERNAME, cmd); - buf->buffername = bn->ptr; + buf->buffername = Sprintf("%s %s", PIPEBUFFERNAME, + conv_from_system(cmd))->ptr; buf->bufferprop |= BP_PIPE; return buf; } @@ -5189,6 +5340,8 @@ openPagerBuffer(InputStream stream, Buffer * buf) buf->buffername = getenv("MAN_PN"); if (buf->buffername == NULL) buf->buffername = PIPEBUFFERNAME; + else + buf->buffername = conv_from_system(buf->buffername); buf->bufferprop |= BP_PIPE; #ifdef JP_CHARSET buf->document_code = DocumentCode; @@ -5227,25 +5380,29 @@ openGeneralPagerBuffer(InputStream stream) t = DefaultType; DefaultType = NULL; } - if (!strcmp(t, "text/html")) { + if (!strcasecmp(t, "text/html")) { buf = loadHTMLBuffer(&uf, t_buf); buf->type = "text/html"; } else if (is_plain_text_type(t)) { + if (IStype(stream) != IST_ENCODED) + stream = newEncodedStream(stream, uf.encoding); buf = openPagerBuffer(stream, t_buf); buf->type = "text/plain"; } else { if (doExternal(uf, "-", t, &buf, t_buf)) { - ; + if (buf == NULL || buf == NO_BUFFER) + return buf; } else { /* unknown type is regarded as text/plain */ + if (IStype(stream) != IST_ENCODED) + stream = newEncodedStream(stream, uf.encoding); buf = openPagerBuffer(stream, t_buf); buf->type = "text/plain"; } } buf->real_type = t; - buf->encoding = uf.encoding; buf->currentURL.scheme = SCM_LOCAL; buf->currentURL.file = "-"; return buf; @@ -5294,7 +5451,7 @@ getNextPage(Buffer * buf, int plen) /* Assume that `cmd == buf->filename' */ if (buf->filename) buf->buffername = Sprintf("%s %s", - CPIPEBUFFERNAME, buf->filename)->ptr; + CPIPEBUFFERNAME, conv_from_system(buf->filename))->ptr; else if (getenv("MAN_PN") == NULL) buf->buffername = CPIPEBUFFERNAME; buf->bufferprop |= BP_CLOSE; @@ -5330,11 +5487,11 @@ getNextPage(Buffer * buf, int plen) len = lineBuf2->length; l = New(Line); l->lineBuf = lineBuf2->ptr; - l->propBuf = New_N(Lineprop, len); + l->propBuf = NewAtom_N(Lineprop, len); bcopy((void *) propBuffer, (void *) l->propBuf, len * sizeof(Lineprop)); #ifdef ANSI_COLOR if (check_color) { - l->colorBuf = New_N(Linecolor, len); + l->colorBuf = NewAtom_N(Linecolor, len); bcopy((void *) colorBuffer, (void *) l->colorBuf, len * sizeof(Linecolor)); } else { l->colorBuf = NULL; @@ -5343,13 +5500,17 @@ getNextPage(Buffer * buf, int plen) l->len = len; l->width = -1; l->prev = pl; +/* if (squeezeBlankLine) { +*/ l->real_linenumber = nlines; l->linenumber = (pl == NULL ? nlines : pl->linenumber + 1); +/* } else { l->real_linenumber = l->linenumber = nlines; } +*/ if (pl == NULL) { pl = l; buf->firstLine = buf->topLine = buf->currentLine = l; @@ -5469,6 +5630,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, Buffer *defaultbuf struct mailcap *mcap; int stat; Buffer *buf = NULL; + char *header; if (!(mcap = searchExtViewer(type))) return 0; @@ -5476,7 +5638,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, Buffer *defaultbuf tmpf = tmpfname(TMPF_DFL, NULL); if (mcap->nametemplate) { - Str tmp = unquote_mailcap(mcap->nametemplate, NULL, tmpf->ptr, NULL); + Str tmp = unquote_mailcap(mcap->nametemplate, NULL, tmpf->ptr, NULL, NULL); if (Strncmp(tmpf, tmp, tmpf->length) == 0) { tmpf = tmp; goto _save; @@ -5486,29 +5648,40 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, Buffer *defaultbuf Strcat_charp(tmpf, uf.ext); } _save: + if (IStype(uf.stream) != IST_ENCODED) + uf.stream = newEncodedStream(uf.stream, uf.encoding); if (save2tmp(uf, tmpf->ptr) < 0) return 0; - command = unquote_mailcap(mcap->viewer, type, tmpf->ptr, &stat); + header = checkHeader(defaultbuf, "Content-Type:"); + if (header) + header = conv_to_system(header); + command = unquote_mailcap(mcap->viewer, type, tmpf->ptr, header, &stat); #ifndef __EMX__ if (!(stat & MCSTAT_REPNAME)) { - Str tmp = Sprintf("(%s) < %s", command->ptr, tmpf->ptr); + Str tmp = Sprintf("(%s) < %s", command->ptr, shell_quote(tmpf->ptr)); command = tmp; } #endif if (mcap->flags & (MAILCAP_HTMLOUTPUT|MAILCAP_COPIOUSOUTPUT)) { if (defaultbuf == NULL) defaultbuf = newBuffer(INIT_BUFFER_WIDTH); - defaultbuf->sourcefile = tmpf->ptr; + defaultbuf->mailcap = mcap; } if (mcap->flags & MAILCAP_HTMLOUTPUT) { buf = loadcmdout(command->ptr, loadHTMLBuffer, defaultbuf); - if (buf) + if (buf && buf != NO_BUFFER) { buf->type = "text/html"; + buf->mailcap_source = buf->sourcefile; + buf->sourcefile = tmpf->ptr; + } } else if (mcap->flags & MAILCAP_COPIOUSOUTPUT) { buf = loadcmdout(command->ptr, loadBuffer, defaultbuf); - if (buf) + if (buf && buf != NO_BUFFER) { buf->type = "text/plain"; + buf->mailcap_source = buf->sourcefile; + buf->sourcefile = tmpf->ptr; + } } else { if (mcap->flags & MAILCAP_NEEDSTERMINAL || !BackgroundExtViewer) { @@ -5525,8 +5698,9 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp, Buffer *defaultbuf if (buf && buf != NO_BUFFER) { buf->filename = path; if (buf->buffername == NULL || buf->buffername[0] == '\0') - buf->buffername = lastFileName(path); + buf->buffername = conv_from_system(lastFileName(path)); buf->edit = mcap->edit; + buf->mailcap = mcap; } *bufp = buf; pushText(fileToDelete, tmpf->ptr); @@ -5586,6 +5760,7 @@ doFileCopy(char *tmpf, char *defstr) defstr, IN_COMMAND, SaveHist); if (p == NULL || *p == '\0') return; + p = conv_to_system(p); } if (*p != '|' || !PermitSaveToPipe) { p = expandName(p); @@ -5653,6 +5828,7 @@ doFileSave(URLFile uf, char *defstr) defstr, IN_FILENAME, SaveHist); if (p == NULL || *p == '\0') return; + p = conv_to_system(p); } if (checkOverWrite(p) < 0) return; @@ -5732,7 +5908,7 @@ checkOverWrite(char *path) if (stat(path, &st) < 0) return 0; if (fmInitialized) { - ans = inputStr("File exists. Overwrite? (y or n)", ""); + ans = inputChar("File exists. Overwrite? (y or n)"); } else { printf("File exists. Overwrite? (y or n)"); @@ -5744,41 +5920,20 @@ checkOverWrite(char *path) return -1; } -static void -sig_chld(int signo) -{ - int stat; -#ifdef HAVE_WAITPID - pid_t pid; - - while ((pid = waitpid(-1, &stat, WNOHANG)) > 0) { - ; - } -#elif HAVE_WAIT3 - int pid; - - while ((pid = wait3(&stat, WNOHANG, NULL)) > 0) { - ; - } -#else - wait(&stat); -#endif - return; -} - #ifdef __EMX__ #define GUNZIP_CMD "gzip" #define BUNZIP2_CMD "bzip2" +#define INFLATE_CMD libFile("inflate.exe") #else /* not __EMX__ */ #define GUNZIP_CMD "gunzip" #define BUNZIP2_CMD "bunzip2" +#define INFLATE_CMD libFile("inflate") #endif /* not __EMX__ */ -#define INFLATE_CMD "inflate" #define GUNZIP_NAME "gunzip" #define BUNZIP2_NAME "bunzip2" #define INFLATE_NAME "inflate" -void +static void gunzip_stream(URLFile *uf) { int pid1; @@ -5787,6 +5942,10 @@ gunzip_stream(URLFile *uf) char *expand_name = GUNZIP_NAME; char *tmpf = NULL; + if (IStype(uf->stream) != IST_ENCODED) { + uf->stream = newEncodedStream(uf->stream, uf->encoding); + uf->encoding = ENC_7BIT; + } switch (uf->compression) { case CMP_COMPRESS: case CMP_GZIP: @@ -5815,14 +5974,14 @@ gunzip_stream(URLFile *uf) UFclose(uf); return; } +/* if (uf->scheme != SCM_FTP) +*/ UFclose(uf); + uf->scheme = SCM_LOCAL; pushText(fileToDelete, tmpf); } -#ifdef SIGCHLD - signal(SIGCHLD, sig_chld); -#endif flush_tty(); /* fd1[0]: read, fd1[1]: write */ if ((pid1 = fork()) == 0) { @@ -5844,9 +6003,6 @@ gunzip_stream(URLFile *uf) /* child */ int pid2; int fd2[2]; -#ifdef SIGCHLD - signal(SIGCHLD, sig_chld); -#endif if (fmInitialized) { close_tty(); fmInitialized = FALSE; @@ -5932,7 +6088,7 @@ reloadBuffer(Buffer * buf) buf->pagerSource != NULL) return; init_stream(&uf, SCM_UNKNOWN, NULL); - examineFile(buf->sourcefile, &uf); + examineFile(buf->mailcap_source ? buf->mailcap_source : buf->sourcefile, &uf); if (uf.stream == NULL) return; is_redisplay = TRUE; @@ -5974,8 +6130,8 @@ guess_charset(char *p) } #endif -char * -guess_save_name(char *file) +static char * +guess_filename(char *file) { char *p = NULL, *s; @@ -5996,6 +6152,28 @@ guess_save_name(char *file) return s; } +char * +guess_save_name(Buffer *buf, char *path) +{ + if (buf && buf->document_header) { + Str name = NULL; + char *p, *q; + if ((p = checkHeader(buf, "Content-Disposition:")) != NULL && + (q = strcasestr(p, "filename")) != NULL && + (q == p || IS_SPACE(*(q-1)) || *(q-1) == ';')) { + if (matchattr(q, "filename", 8, &name)) + return name->ptr; + } + if ((p = checkHeader(buf, "Content-Type:")) != NULL && + (q = strcasestr(p, "name")) != NULL && + (q == p || IS_SPACE(*(q-1)) || *(q-1) == ';')) { + if (matchattr(q, "name", 4, &name)) + return name->ptr; + } + } + return guess_filename(path); +} + /* Local Variables: */ /* c-basic-offset: 4 */ /* tab-width: 8 */ diff --git a/fm.h b/fm.h @@ -20,6 +20,7 @@ #ifdef MENU #define MENU_SELECT +#define MENU_MAP #endif /* MENU */ #ifndef COLOR @@ -212,6 +213,7 @@ extern int REV_LB[]; #define IN_PASSWORD 0x40 #define IN_COMMAND 0x80 #define IN_URL 0x100 +#define IN_CHAR 0x200 /* * Macros. @@ -222,6 +224,7 @@ extern int REV_LB[]; #define inputStrHist(p,d,h) inputLineHist(p,d,IN_STRING,h) #define inputFilename(p,d) inputLine(p,d,IN_FILENAME) #define inputFilenameHist(p,d,h) inputLineHist(p,d,IN_FILENAME,h) +#define inputChar(p) inputLine(p,"",IN_CHAR) #define free(x) GC_free(x) /* let GC do it. */ @@ -289,6 +292,8 @@ typedef struct _anchor { BufferPoint start; BufferPoint end; int hseq; + short y; + short rows; } Anchor; #define NO_REFERER ((char*)-1) @@ -320,7 +325,6 @@ typedef struct _Buffer { short height; char *type; char *real_type; - char encoding; int allLine; short bufferprop; short currentColumn; @@ -354,6 +358,9 @@ typedef struct _Buffer { FormItemList *form_submit; char *savecache; char *edit; + struct mailcap *mailcap; + char *mailcap_source; + char search_header; #ifdef USE_SSL char *ssl_certificate; #endif @@ -384,6 +391,8 @@ typedef struct { short nobr_level; Lineprop prev_ctype; char init_flag; + short top_margin; + short bottom_margin; } Breakpoint; struct readbuffer { @@ -409,6 +418,8 @@ struct readbuffer { Breakpoint bp; struct cmdtable *tag_stack[TAG_STACK_SIZE]; int tag_sp; + short top_margin; + short bottom_margin; }; #define in_bold fontstat[0] @@ -590,7 +601,8 @@ typedef struct http_request { extern int LINES, COLS; #if defined(CYGWIN) && LANG == JA -#define LASTLINE (LINES-2) +extern int isWinConsole; +#define LASTLINE (LINES-(isWinConsole ? 2 : 1)) #else /* not defined(CYGWIN) && LANG == JA */ #define LASTLINE (LINES-1) #endif /* not defined(CYGWIN) && LANG == JA */ @@ -607,6 +619,8 @@ global char *DefaultType init(NULL); global char RenderFrame init(FALSE); global char TargetSelf init(FALSE); global char PermitSaveToPipe init(FALSE); +global char DecodeCTE init(FALSE); +global char ArgvIsURL init(FALSE); global char fmInitialized init(FALSE); @@ -637,6 +651,7 @@ global int DNS_order init(0); extern int ai_family_order_table[3][3]; /* XXX */ #endif /* INET6 */ global TextList *NO_proxy_domains; +global char NoCache init(FALSE); global int Do_not_use_proxy init(FALSE); global int Do_not_use_ti_te init(FALSE); @@ -657,9 +672,18 @@ extern char *ullevel[]; extern char *version; +#define DUMP_BUFFER 0x01 +#define DUMP_HEAD 0x02 +#define DUMP_SOURCE 0x04 +#define DUMP_EXTRA 0x08 +#define DUMP_HALFDUMP 0x10 +#define DUMP_FRAME 0x20 global int w3m_debug; -global int w3m_halfdump init(FALSE); +global int w3m_dump init(0); +#define w3m_halfdump (w3m_dump & DUMP_HALFDUMP) global int w3m_halfload init(FALSE); +global Str header_string init(NULL); +global int override_content_type init(FALSE); #ifdef COLOR global int useColor init(TRUE); @@ -732,14 +756,29 @@ global int SaveURLHist init(TRUE); #endif /* USE_HISTORY */ global int multicolList init(FALSE); +global char DisplayCode init(DISPLAY_CODE); #ifdef JP_CHARSET -extern char DisplayCode; -extern char DocumentCode; +global char SystemCode init(SYSTEM_CODE); +global char DocumentCode init(0); +global char UseContentCharset init(TRUE); +global char UseAutoDetect init(TRUE); +#define Str_conv_from_system(x) conv_str((x), SystemCode, InnerCode) +#define Str_conv_to_system(x) conv_str((x), InnerCode, SystemCode) +#define conv_from_system(x) conv((x), SystemCode, InnerCode)->ptr +#define conv_to_system(x) conv((x), InnerCode, SystemCode)->ptr +#define url_quote_conv(x,c) url_quote(conv((x), InnerCode, (c))->ptr) +#else +#define Str_conv_from_system(x) (x) +#define Str_conv_to_system(x) (x) +#define conv_from_system(x) (x) +#define conv_to_system(x) (x) +#define url_quote_conv(x,c) url_quote(x) #endif /* JP_CHARSET */ #ifndef KANJI_SYMBOLS global int no_graphic_char init(FALSE); extern char alt_rule[]; #endif /* not KANJI_SYMBOLS */ +extern char UseAltEntity; global char *rc_dir; global int rc_dir_is_tmp init(FALSE); @@ -751,7 +790,7 @@ global int reverse_mouse init(FALSE); #ifdef USE_COOKIE global int default_use_cookie init(TRUE); -global int use_cookie init(TRUE); +global int use_cookie init(FALSE); global int accept_cookie init(FALSE); global int accept_bad_cookie init(FALSE); global char *cookie_reject_domains init(NULL); @@ -799,10 +838,14 @@ global int use_lessopen init(FALSE); #define get_wctype(wc) (is~wckanji(wc)?PC_ASCII:GET_PCTYPE(wc)) #endif +global int FollowRedirection init(10); + global int w3m_backend init(FALSE); global Str backend_halfdump_str; global TextList *backend_batch_commands init(NULL); int backend( void ); +extern void deleteFiles(void); +void w3m_exit( int i ); /* * Externals diff --git a/form.c b/form.c @@ -16,9 +16,9 @@ #define lstat stat #endif /* __EMX__ */ -extern Str textarea_str[]; +extern Str *textarea_str; #ifdef MENU_SELECT -extern FormSelectOption select_option[]; +extern FormSelectOption *select_option; #include "menu.h" #endif /* MENU_SELECT */ @@ -43,7 +43,7 @@ struct { }; struct form_list * -newFormList(char *action, char *method, char *charset, char *enctype, char *target, struct form_list *_next) +newFormList(char *action, char *method, char *charset, char *enctype, char *target, char *name, struct form_list *_next) { struct form_list *l; Str a = Strnew_charp(action); @@ -75,6 +75,7 @@ newFormList(char *action, char *method, char *charset, char *enctype, char *targ l->charset = c; l->enctype = e; l->target = target; + l->name = name; l->next = _next; l->nitems = 0; l->body = NULL; @@ -100,10 +101,11 @@ formList_addInput(struct form_list *fl, struct parsed_tag *tag) item->type = FORM_UNKNOWN; item->size = -1; item->rows = 0; - item->checked = 0; + item->checked = item->init_checked = 0; item->accept = 0; item->name = NULL; - item->value = NULL; + item->value = item->init_value = NULL; + item->readonly = 0; if (parsedtag_get_value(tag, ATTR_TYPE, &p)) { item->type = formtype(p); if (item->size < 0 && @@ -115,13 +117,14 @@ formList_addInput(struct form_list *fl, struct parsed_tag *tag) if (parsedtag_get_value(tag, ATTR_NAME, &p)) item->name = Strnew_charp(p); if (parsedtag_get_value(tag, ATTR_VALUE, &p)) - item->value = Strnew_charp(p); - item->checked = parsedtag_exists(tag, ATTR_CHECKED); + item->value = item->init_value = Strnew_charp(p); + item->checked = item->init_checked = parsedtag_exists(tag, ATTR_CHECKED); item->accept = parsedtag_exists(tag, ATTR_ACCEPT); parsedtag_get_value(tag, ATTR_SIZE, &item->size); parsedtag_get_value(tag, ATTR_MAXLENGTH, &item->maxlength); + item->readonly = parsedtag_exists(tag, ATTR_READONLY); if (parsedtag_get_value(tag, ATTR_TEXTAREANUMBER, &i)) - item->value = textarea_str[i]; + item->value = item->init_value = textarea_str[i]; #ifdef MENU_SELECT if (parsedtag_get_value(tag, ATTR_SELECTNUMBER, &i)) item->select_option = select_option[i].first; @@ -134,8 +137,10 @@ formList_addInput(struct form_list *fl, struct parsed_tag *tag) } #ifdef MENU_SELECT if (item->type == FORM_SELECT) { - item->value = chooseSelectOption(item->select_option, CHOOSE_VALUE); - item->label = chooseSelectOption(item->select_option, CHOOSE_OPTION); + chooseSelectOption(item, item->select_option); + item->init_selected = item->selected; + item->init_value = item->value; + item->init_label = item->label; } #endif /* MENU_SELECT */ if (item->type == FORM_INPUT_FILE && item->value && item->value->length) { @@ -196,25 +201,24 @@ formtype(char *typestr) } void -form_recheck_radio(FormItemList * fi, void *data, void (*update_hook) (FormItemList *, void *)) +formRecheckRadio(Anchor *a, Buffer *buf, FormItemList * fi) { - Str tmp; + int i; + Anchor *a2; FormItemList *f2; - tmp = fi->name; - for (f2 = fi->parent->item; f2 != NULL; f2 = f2->next) { - if (f2 != fi && Strcmp(tmp, f2->name) == 0 && - f2->type == FORM_INPUT_RADIO) { + for (i = 0; i < buf->formitem->nanchor; i++) { + a2 = &buf->formitem->anchors[i]; + f2 = (FormItemList *) a2->url; + if (f2->parent == fi->parent && f2 != fi && + f2->type == FORM_INPUT_RADIO && + Strcmp(f2->name, fi->name) == 0) { f2->checked = 0; - if (update_hook != NULL) { - update_hook(f2, data); - } + formUpdateBuffer(a2, buf, f2); } } fi->checked = 1; - if (update_hook != NULL) { - update_hook(fi, data); - } + formUpdateBuffer(a, buf, fi); } void @@ -264,8 +268,9 @@ formUpdateBuffer(Anchor * a, Buffer * buf, FormItemList * form) int i, j, k; Buffer save; char *p; - int spos, epos, c_len; + int spos, epos, c_len, rows, c_rows, pos, col; Lineprop c_type; + Line *l; copyBuffer(&save, buf); gotoLine(buf, a->start.line); @@ -300,46 +305,80 @@ formUpdateBuffer(Anchor * a, Buffer * buf, FormItemList * form) case FORM_TEXTAREA: #ifdef MENU_SELECT case FORM_SELECT: - if (form->type == FORM_SELECT) + if (form->type == FORM_SELECT) { p = form->label->ptr; - else + updateSelectOption(form, form->select_option); + } else #endif /* MENU_SELECT */ p = form->value->ptr; - i = spos + 1; - for (j = 0; p[j];) { - if (p[j] == '\r') { - j++; - continue; - } - c_type = get_mctype(&p[j]); - c_len = get_mclen(c_type); - k = i + c_len; - if (k > epos) - break; + j = 0; + l = buf->currentLine; + if (form->type == FORM_TEXTAREA) { + int n = a->y - buf->currentLine->linenumber; + if (n > 0) + for (; l && n; l = l->prev, n--); + else if (n < 0) + for (; l && n; l = l->prev, n++); + if (! l) + break; + } + rows = form->rows ? form->rows : 1; + if (rows > 1) + col = COLPOS(l, a->start.pos); + for (c_rows = 0; c_rows < rows; c_rows++, l = l->next) { + if (rows > 1) { + pos = columnPos(l, col); + a = retrieveAnchor(buf->formitem, l->linenumber, pos); + if (a == NULL) + break; + spos = a->start.pos - 1; + epos = a->end.pos; + } + i = spos + 1; + while (p[j]) { + if (rows > 1 && (p[j] == '\r' || p[j] == '\n')) + break; + if (p[j] == '\r') { + j++; + continue; + } + c_type = get_mctype(&p[j]); + c_len = get_mclen(c_type); + k = i + c_len; + if (k > epos) + break; #ifdef JP_CHARSET - if (c_type == PC_KANJI && form->type != FORM_INPUT_PASSWORD) { - SetCharType(buf->currentLine->propBuf[i], PC_KANJI1); - SetCharType(buf->currentLine->propBuf[i+1], PC_KANJI2); - } - else + if (c_type == PC_KANJI && form->type != FORM_INPUT_PASSWORD) { + SetCharType(l->propBuf[i], PC_KANJI1); + SetCharType(l->propBuf[i+1], PC_KANJI2); + } + else #endif /* JP_CHARSET */ - SetCharType(buf->currentLine->propBuf[i], PC_ASCII); - - for (; i < k; i++, j++) { - if (form->type == FORM_INPUT_PASSWORD) - buf->currentLine->lineBuf[i] = '*'; - else if (c_type == PC_CTRL || - IS_UNPRINTABLE_ASCII(p[j], c_type)) - buf->currentLine->lineBuf[i] = ' '; - else - buf->currentLine->lineBuf[i] = p[j]; + SetCharType(l->propBuf[i], PC_ASCII); + + for (; i < k; i++, j++) { + if (form->type == FORM_INPUT_PASSWORD) + l->lineBuf[i] = '*'; + else if (c_type == PC_CTRL || + IS_UNPRINTABLE_ASCII(p[j], c_type)) + l->lineBuf[i] = ' '; + else + l->lineBuf[i] = p[j]; + } + } + if (rows > 1) { + while (p[j] && p[j] != '\r' && p[j] != '\n') + j++; + if (p[j] == '\r') + j++; + if (p[j] == '\n') + j++; + } + for (; i < epos; i++) { + l->lineBuf[i] = ' '; + SetCharType(l->propBuf[i], PC_ASCII); } } - for (; i < epos; i++) { - buf->currentLine->lineBuf[i] = ' '; - SetCharType(buf->currentLine->propBuf[i], PC_ASCII); - } - i--; break; } copyBuffer(buf, &save); @@ -399,12 +438,12 @@ form_fputs_decode(Str s, FILE * f) p++; } break; -#if !defined(CYGWIN) && !defined(__EMX__) +#if !defined( __CYGWIN__ ) && !defined( __EMX__ ) case '\r': if (*(p + 1) == '\n') p++; /* continue to the next label */ -#endif /* !defined(CYGWIN) && !defined(__EMX__) */ +#endif /* !defined( __CYGWIN__ ) && !defined( __EMX__ ) */ default: Strcat_char(z, *p); p++; @@ -425,6 +464,9 @@ input_textarea(FormItemList * fi) Str tmpname = tmpfname(TMPF_DFL, NULL); Str tmp; FILE *f; +#ifdef JP_CHARSET + char code = DisplayCode, ic; +#endif f = fopen(tmpname->ptr, "w"); if (f == NULL) { @@ -435,13 +477,23 @@ input_textarea(FormItemList * fi) form_fputs_decode(fi->value, f); fclose(f); if (strcasestr(Editor, "%s")) - tmp = Sprintf(Editor, tmpname->ptr); - else - tmp = Sprintf("%s %s", Editor, tmpname->ptr); + if (strcasestr(Editor, "%d")) + tmp = Sprintf(Editor, 1, tmpname->ptr); + else + tmp = Sprintf(Editor, tmpname->ptr); + else { + if (strcasestr(Editor, "%d")) + tmp = Sprintf(Editor, 1); + else + tmp = Strnew_charp(Editor); + Strcat_m_charp(tmp, " ", tmpname->ptr, NULL); + } fmTerm(); system(tmp->ptr); fmInit(); + if (fi->readonly) + return; f = fopen(tmpname->ptr, "r"); if (f == NULL) { disp_err_message("Can't open temporary file", FALSE); @@ -459,10 +511,10 @@ input_textarea(FormItemList * fi) Strcat_charp(tmp, "\r\n"); } #ifdef JP_CHARSET - Strcat(fi->value, conv_str(tmp, DisplayCode, InnerCode)); -#else /* not JP_CHARSET */ - Strcat(fi->value, tmp); + if ((ic = checkShiftCode(tmp, code)) != '\0') + tmp = conv_str(tmp, (code = ic), InnerCode); #endif /* not JP_CHARSET */ + Strcat(fi->value, tmp); } fclose(f); unlink(tmpname->ptr); @@ -503,53 +555,73 @@ addSelectOption(FormSelectOption * fso, Str value, Str label, int chk) } } -Str -chooseSelectOption(FormSelectOptionItem * item, int choose_type) +void +chooseSelectOption(FormItemList *fi, FormSelectOptionItem *item) { - Str chosen; - if (item == NULL) - return Strnew_size(0); - if (choose_type == CHOOSE_OPTION) - chosen = item->label; - else - chosen = item->value; - while (item) { - if (item->checked) { - if (choose_type == CHOOSE_OPTION) - chosen = item->label; - else - chosen = item->value; + FormSelectOptionItem *opt; + int i; + + fi->selected = 0; + if (item == NULL) { + fi->value = Strnew_size(0); + fi->label = Strnew_size(0); + return; + } + fi->value = item->value; + fi->label = item->label; + for (i = 0, opt = item; opt != NULL; i++, opt = opt->next) { + if (opt->checked) { + fi->value = opt->value; + fi->label = opt->label; + fi->selected = i; + break; } - item = item->next; } - return chosen; + updateSelectOption(fi, item); } void +updateSelectOption(FormItemList *fi, FormSelectOptionItem *item) +{ + int i; + + if (fi == NULL || item == NULL) + return; + for (i = 0; item != NULL; i++, item = item->next) { + if (i == fi->selected) + item->checked = TRUE; + else + item->checked = FALSE; + } +} + +int formChooseOptionByMenu(struct form_item_list *fi, int x, int y) { - int i, n, selected = -1, init_select = 0; + int i, n, selected = -1, init_select = fi->selected; FormSelectOptionItem *opt; char **label; for (n = 0, opt = fi->select_option; opt != NULL; n++, opt = opt->next); label = New_N(char *, n + 1); - for (i = 0, opt = fi->select_option; opt != NULL; i++, opt = opt->next) { + for (i = 0, opt = fi->select_option; opt != NULL; i++, opt = opt->next) label[i] = opt->label->ptr; - if (!Strcmp(fi->value, opt->value)) - init_select = i; - } label[n] = NULL; optionMenu(x, y, label, &selected, init_select, NULL); + if (selected < 0) + return 0; for (i = 0, opt = fi->select_option; opt != NULL; i++, opt = opt->next) { if (i == selected) { + fi->selected = selected; fi->value = opt->value; fi->label = opt->label; break; } } + updateSelectOption(fi, fi->select_option); + return 1; } #endif /* MENU_SELECT */ @@ -562,16 +634,19 @@ form_write_data(FILE * f, char *boundary, char *name, char *value) } void -form_write_form_file(FILE * f, char *boundary, char *name, char *file) +form_write_from_file(FILE * f, char *boundary, char *name, char *filename, char *file) { FILE *fd; struct stat st; int c; + char *type; fprintf(f, "--%s\r\n", boundary); fprintf(f, "Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n", - name, mybasename(file)); - fprintf(f, "Content-Type: text/plain\r\n\r\n"); + name, mybasename(filename)); + type = guessContentType(file); + fprintf(f, "Content-Type: %s\r\n\r\n", + type ? type : "application/octet-stream"); #ifdef READLINK if (lstat(file, &st) < 0) diff --git a/form.h b/form.h @@ -32,10 +32,10 @@ #define FORM_ENCTYPE_URLENCODED 0 #define FORM_ENCTYPE_MULTIPART 1 -#define MAX_TEXTAREA 100 /* max number of * <textarea>..</textarea> +#define MAX_TEXTAREA 10 /* max number of * <textarea>..</textarea> * within one * document */ #ifdef MENU_SELECT -#define MAX_SELECT 100 /* max number of <select>..</select> * +#define MAX_SELECT 10 /* max number of <select>..</select> * * within one document */ #endif /* MENU_SELECT */ @@ -45,6 +45,7 @@ typedef struct form_list { int method; Str action; char *target; + char *name; int charset; int enctype; struct form_list *next; @@ -68,29 +69,28 @@ typedef struct form_select_option { } FormSelectOption; void addSelectOption(FormSelectOption * fso, Str value, Str label, int chk); -Str chooseSelectOption(FormSelectOptionItem * item, int choose_type); -void formChooseOptionByMenu(struct form_item_list *fi, int x, int y); -/* macros for chooseSelectOption */ -#define CHOOSE_OPTION 0 -#define CHOOSE_VALUE 1 +void chooseSelectOption(struct form_item_list *fi, FormSelectOptionItem *item); +void updateSelectOption(struct form_item_list *fi, FormSelectOptionItem *item); +int formChooseOptionByMenu(struct form_item_list *fi, int x, int y); #endif /* MENU_SELECT */ typedef struct form_item_list { int type; Str name; - Str value; - int checked; + Str value, init_value; + int checked, init_checked; int accept; int size; int rows; int maxlength; + int readonly; #ifdef MENU_SELECT FormSelectOptionItem *select_option; - Str label; + Str label, init_label; + int selected, init_selected; #endif /* MENU_SELECT */ struct form_list *parent; struct form_item_list *next; - int anchor_num; } FormItemList; #endif /* not FORM_H */ diff --git a/frame.c b/frame.c @@ -4,6 +4,9 @@ #include "myctype.h" #include <signal.h> #include <setjmp.h> +#ifdef __EMX__ +#include <strings.h> /* for bzero() and bcopy() */ +#endif /* __EMX__ */ #ifdef KANJI_SYMBOLS #define RULE_WIDTH 2 @@ -105,7 +108,7 @@ newFrameSet(struct parsed_tag *tag) } struct frame_body * -newFrame(struct parsed_tag *tag, ParsedURL * baseURL) +newFrame(struct parsed_tag *tag, Buffer *buf) { struct frame_body *body; char *p; @@ -114,11 +117,12 @@ newFrame(struct parsed_tag *tag, ParsedURL * baseURL) bzero((void *) body, sizeof(*body)); body->attr = F_UNLOADED; body->flags = 0; - body->baseURL = baseURL; + body->baseURL = baseURL(buf); if (tag) { - parsedtag_get_value(tag, ATTR_SRC, &body->url); + if (parsedtag_get_value(tag, ATTR_SRC, &p)) + body->url = url_quote_conv(p, buf->document_code); if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_') - body->name = p; + body->name = url_quote_conv(p, buf->document_code); } return body; } @@ -267,8 +271,7 @@ flushFrameSet(struct frameset *fs) void pushFrameTree(struct frameset_queue **fqpp, struct frameset *fs, - long linenumber, - short pos) + Buffer *buf) { struct frameset_queue *rfq, *cfq = *fqpp; @@ -276,8 +279,11 @@ pushFrameTree(struct frameset_queue **fqpp, return; rfq = New(struct frameset_queue); - rfq->linenumber = linenumber; - rfq->pos = pos; + rfq->linenumber = (buf && buf->currentLine) ? buf->currentLine->linenumber : 1; + rfq->top_linenumber = (buf && buf->topLine) ? buf->topLine->linenumber : 1; + rfq->pos = buf ? buf->pos : 0; + rfq->currentColumn = buf ? buf->currentColumn : 0; + rfq->formitem = buf ? buf->formitem : NULL; rfq->back = cfq; if (cfq) { @@ -294,9 +300,7 @@ pushFrameTree(struct frameset_queue **fqpp, } struct frameset * -popFrameTree(struct frameset_queue **fqpp, - long *linenumber, - short *pos) +popFrameTree(struct frameset_queue **fqpp) { struct frameset_queue *rfq = NULL, *cfq = *fqpp; struct frameset *rfs = NULL; @@ -304,11 +308,6 @@ popFrameTree(struct frameset_queue **fqpp, if (!cfq) return rfs; - if (linenumber) - *linenumber = cfq->linenumber; - if (pos) - *pos = cfq->pos; - rfs = cfq->frameset; if (cfq->next) { (rfq = cfq->next)->back = cfq->back; @@ -337,11 +336,11 @@ resetFrameElement(union frameset_element *f_element, f_element->set = buf->frameset; f_element->set->currentURL = New(ParsedURL); copyParsedURL(f_element->set->currentURL, &buf->currentURL); - buf->frameset = popFrameTree(&(buf->frameQ), NULL, NULL); + buf->frameset = popFrameTree(&(buf->frameQ)); f_element->set->name = f_name; } else { - f_body = newFrame(NULL, baseURL(buf)); + f_body = newFrame(NULL, buf); f_body->attr = F_BODY; f_body->name = f_name; f_body->url = parsedURL2Str(&buf->currentURL)->ptr; @@ -355,6 +354,7 @@ resetFrameElement(union frameset_element *f_element, f_body->flags |= FB_TODELETE; buf->sourcefile = NULL; } + f_body->type = buf->type; f_body->referer = referer; f_body->request = request; deleteFrameSetElement(*f_element); @@ -378,15 +378,19 @@ frame_download_source(struct frame_body *b, ParsedURL * currentURL, parseURL2(b->url, &url, currentURL); switch (url.scheme) { case SCM_LOCAL: - b->source = url.file; +/* + b->source = url.real_file; +*/ b->flags = 0; default: is_redisplay = TRUE; + w3m_dump |= DUMP_FRAME; buf = loadGeneralFile(b->url, baseURL ? baseURL : currentURL, b->referer, flag, b->request); + w3m_dump &= ~DUMP_FRAME; is_redisplay = FALSE; break; } @@ -397,6 +401,8 @@ frame_download_source(struct frame_body *b, ParsedURL * currentURL, return NULL; } b->url = parsedURL2Str(&buf->currentURL)->ptr; + b->source = buf->sourcefile; + b->type = buf->type; if (buf->real_scheme != SCM_LOCAL) { tmp = tmpfname(TMPF_FRAME, NULL); rename(buf->sourcefile, tmp->ptr); @@ -410,7 +416,7 @@ frame_download_source(struct frame_body *b, ParsedURL * currentURL, ret_frameset->name = b->name; ret_frameset->currentURL = New(ParsedURL); copyParsedURL(ret_frameset->currentURL, &buf->currentURL); - buf->frameset = popFrameTree(&(buf->frameQ), NULL, NULL); + buf->frameset = popFrameTree(&(buf->frameQ)); } discardBuffer(buf); return ret_frameset; @@ -453,7 +459,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int if (level == 0) { fprintf(f1, "<html><head><title>%s</title></head><body>\n", - htmlquote_str(current->buffername)); + html_quote(current->buffername)); fputs("<table hborder width=\"100%\">\n", f1); } else @@ -482,7 +488,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int fputs("<td", f1); if (frame.element->name) - fprintf(f1, " id=\"_%s\"", htmlquote_str(frame.element->name)); + fprintf(f1, " id=\"_%s\"", html_quote(frame.element->name)); if (!r) fprintf(f1, " width=\"%s\"", f->width[c]); fputs(">\n", f1); @@ -496,7 +502,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int switch (frame.element->attr) { default: fprintf(f1, "Frameset \"%s\" frame %d: type unrecognized", - htmlquote_str(f->name), i + 1); + html_quote(f->name), i + 1); break; case F_UNLOADED: if (!frame.body->name && f->name) { @@ -519,8 +525,11 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int frame.body->attr = F_UNLOADED; if (frame.body->flags & FB_NO_BUFFER) fprintf(f1, "Open %s with other method", frame.body->url); - else + else if (frame.body->url) fprintf(f1, "Can't open %s", frame.body->url); + else + fprintf(f1, "This frame (%s) contains no src attribute", + frame.body->name ? frame.body->name : "(no name)"); break; } parseURL2(frame.body->url, &base, currentURL); @@ -532,6 +541,23 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int code = '\0'; #endif /* JP_CHARSET */ t_stack = 0; + if (frame.body->type && + ! strcasecmp(frame.body->type, "text/plain")) { + Str tmp; + fprintf(f1, "<pre>\n"); + while ((tmp = StrmyISgets(f2))->length) { +#ifdef JP_CHARSET + if ((ic = checkShiftCode(tmp, code)) != '\0') + tmp = conv_str(tmp, (code = ic), InnerCode); + +#endif /* JP_CHARSET */ + cleanup_line(tmp, HTML_MODE); + fprintf(f1, "%s", html_quote(tmp->ptr)); + } + fprintf(f1, "</pre>\n"); + ISclose(f2); + break; + } do { status = R_ST_NORMAL; do { @@ -575,15 +601,17 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int fputs("-->", f1); goto token_end; case HTML_BASE: - if (parsedtag_get_value(tag, ATTR_HREF, &q)) + if (parsedtag_get_value(tag, ATTR_HREF, &q)) { + q = url_quote_conv(q, code); parseURL(q, &base, NULL); + } if (parsedtag_get_value(tag, ATTR_TARGET, &q)) { if (!strcasecmp(q, "_self")) d_target = s_target; else if (!strcasecmp(q, "_parent")) d_target = p_target; else - d_target = q; + d_target = url_quote_conv(q, code); } /* fall thru, "BASE" is prohibit tag */ case HTML_HEAD: @@ -643,6 +671,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer * current, int level, int case ATTR_ACTION: if (!tag->value[j]) break; + tag->value[j] = url_quote_conv(tag->value[j], code); parseURL2(tag->value[j], &url, &base); if (url.scheme == SCM_MAILTO || url.scheme == SCM_UNKNOWN || diff --git a/frame.h b/frame.h @@ -21,6 +21,7 @@ struct frame_body { char *url; ParsedURL *baseURL; char *source; + char *type; char *referer; struct _anchorList *nameList; FormList *request; @@ -50,7 +51,10 @@ struct frameset_queue { struct frameset_queue *back; struct frameset *frameset; long linenumber; + long top_linenumber; short pos; + short currentColumn; + struct _anchorList *formitem; }; extern struct frameset *renderFrameSet; diff --git a/ftp.c b/ftp.c @@ -139,7 +139,7 @@ FtpLogin(FTP * ftp_return, char *host, char *user, char *pass) if (atoi(tmp->ptr) != 220) return -1; if (fmInitialized) { - message(Sprintf("Sending FTP username (%s) to remote server.\n", user)->ptr, 0, 0); + message(Sprintf("Sending FTP username (%s) to remote server.", user)->ptr, 0, 0); refresh(); } tmp = Sprintf("USER %s\r\n", user); @@ -154,7 +154,7 @@ FtpLogin(FTP * ftp_return, char *host, char *user, char *pass) if (atoi(tmp->ptr) != 331) return -1; if (fmInitialized) { - message(Sprintf("Sending FTP password to remote server.\n")->ptr, 0, 0); + message(Sprintf("Sending FTP password to remote server.")->ptr, 0, 0); refresh(); } tmp = Sprintf("PASS %s\r\n", pass); @@ -263,17 +263,26 @@ FtpCwd(FTP ftp, char *path) } int -FtpOpenRead(FTP ftp, char *path) +FtpOpenReadBody(FTP ftp, char *path) { Str tmp; - if (ftp_pasv(ftp) < 0) - return -1; tmp = Sprintf("RETR %s\r\n", path); fwrite(tmp->ptr, tmp->length, sizeof(char), ftp->wcontrol); fflush(ftp->wcontrol); tmp = read_response(ftp); if (tmp->ptr[0] == '5') { + return -1; + } + return 0; +} + +int +FtpOpenRead(FTP ftp, char *path) +{ + if (ftp_pasv(ftp) < 0) + return -1; + if (FtpOpenReadBody(ftp, path) < 0) { fclose(ftp->data); ftp->data = NULL; return -1; @@ -292,12 +301,10 @@ Ftpfclose(FILE * f) } int -FtpData(FTP ftp, char *cmd, char *arg, char *mode) +FtpDataBody(FTP ftp, char *cmd, char *arg, char *mode) { Str tmp; - if (ftp_pasv(ftp) < 0) - return -1; tmp = Sprintf(cmd, arg); Strcat_charp(tmp, "\r\n"); fwrite(tmp->ptr, tmp->length, sizeof(char), ftp->wcontrol); @@ -312,6 +319,15 @@ FtpData(FTP ftp, char *cmd, char *arg, char *mode) } int +FtpData(FTP ftp, char *cmd, char *arg, char *mode) +{ + if (ftp_pasv(ftp) < 0) + return -1; + + return FtpDataBody(ftp, cmd, arg, mode); +} + +int FtpClose(FTP ftp) { Str tmp; @@ -409,6 +425,7 @@ openFTP(ParsedURL * pu) if (fmInitialized) { term_raw(); pwd = Strnew_charp(inputLine("Password: ", NULL, IN_PASSWORD)); + pwd = Str_conv_to_system(pwd); term_cbreak(); } else { @@ -437,11 +454,18 @@ openFTP(ParsedURL * pu) if (pu->file == NULL || *pu->file == '\0') goto ftp_dir; else - realpath = ftp_restore_str(pu->file); + realpath = file_unquote(pu->file); + + if (pu->file[strlen(pu->file)-1] == '/') + goto ftp_dir; /* Get file */ FtpBinary(ftp); - s = FtpOpenRead(ftp, realpath); + if (ftp_pasv(ftp) < 0) { + FtpBye(ftp); + return NULL; + } + s = FtpOpenReadBody(ftp, realpath); if (!FtpError(s)) { #ifdef JP_CHARSET pathStr = Strnew_charp(realpath); @@ -453,18 +477,24 @@ openFTP(ParsedURL * pu) pu->file = realpath; return FTPDATA(ftp); } + goto ftp_dir1; /* Get directory */ ftp_dir: + if (ftp_pasv(ftp) < 0) { + FtpBye(ftp); + return NULL; + } + ftp_dir1: pu->scheme = SCM_FTPDIR; FTPDIRtmp = Strnew(); sv_type = ftp_system(ftp); if (pu->file == NULL || *pu->file == '\0') { if (sv_type == UNIXLIKE_SERVER) { - s = FtpData(ftp, "LIST", NULL, "r"); + s = FtpDataBody(ftp, "LIST", NULL, "r"); } else { - s = FtpData(ftp, "NLST", NULL, "r"); + s = FtpDataBody(ftp, "NLST", NULL, "r"); } curdir = Strnew_charp("/"); } @@ -472,11 +502,11 @@ openFTP(ParsedURL * pu) if (sv_type == UNIXLIKE_SERVER) { s = FtpCwd(ftp, realpath); if (!FtpError(s)) { - s = FtpData(ftp, "LIST", NULL, "r"); + s = FtpDataBody(ftp, "LIST", NULL, "r"); } } else { - s = FtpData(ftp, "NLST %s", realpath, "r"); + s = FtpDataBody(ftp, "NLST %s", realpath, "r"); } if (realpath[0] == '/') curdir = Strnew_charp(realpath); @@ -496,10 +526,10 @@ openFTP(ParsedURL * pu) Strcat_charp(host, pu->host); if (Strlastchar(host) == '/') Strshrink(host, 1); - qdir = htmlquote_str(curdir->ptr); + qdir = html_quote(curdir->ptr); FTPDIRtmp = Sprintf("<html><head><title>%s%s</title></head><body><h1>Index of %s%s</h1>\n", host->ptr, qdir, host->ptr, qdir); - curdir = Strnew_charp(ftp_escape_str(curdir->ptr)); + curdir = Strnew_charp(file_quote(curdir->ptr)); qdir = curdir->ptr; tmp2 = Strdup(curdir); if (Strcmp_charp(curdir, "/") != 0) { @@ -514,7 +544,7 @@ openFTP(ParsedURL * pu) Strcat_charp(FTPDIRtmp, "<ul><li><a href=\""); } Strcat_m_charp(FTPDIRtmp, host->ptr, - htmlquote_str(tmp2->ptr), + html_quote(tmp2->ptr), "\">[Upper Directory]</a>\n", NULL); flist = New_N(char *, nfile_max); @@ -578,9 +608,9 @@ openFTP(ParsedURL * pu) Strcat_m_charp(FTPDIRtmp, "<a href=\"", host->ptr, qdir, - ftp_escape_str(fn), + html_quote(file_quote(fn)), "\">", - htmlquote_str(fn), NULL); + html_quote(fn), NULL); if (ftype == FTPDIR_DIR) { Strcat_charp(FTPDIRtmp, "/"); len++; @@ -616,9 +646,9 @@ openFTP(ParsedURL * pu) fn = flist[i]; Strcat_m_charp(FTPDIRtmp, "<li><a href=\"", host->ptr, qdir, - ftp_escape_str(fn), + html_quote(file_quote(fn)), "\">", - htmlquote_str(fn), + html_quote(fn), "</a>\n", NULL); } Strcat_charp(FTPDIRtmp, "</ul></body></html>\n"); @@ -779,7 +809,7 @@ ex_ftpdir_name_size_date(char *line, char **name, char **date, char **sizep) && IS_SPACE(cp[6]) && (IS_SPACE(cp[7]) || IS_DIGIT(cp[7])) && IS_DIGIT(cp[8]) && (cp[9] == ':' || IS_DIGIT(cp[9])) - && IS_DIGIT(cp[10]) && IS_DIGIT(cp[11]) + && IS_DIGIT(cp[10]) && (IS_DIGIT(cp[11]) || IS_SPACE(cp[11])) && IS_SPACE(cp[12])) { cp[12] = '\0'; date_str = Strnew_charp(cp); diff --git a/func.c b/func.c @@ -24,6 +24,8 @@ initKeymap(void) int c; int f; int lineno; + int verbose = 1; + extern int str_to_bool(char *value, int old); if (!w3mNFuncList) w3mNFuncList = countFuncList(w3mFuncList); @@ -43,36 +45,46 @@ initKeymap(void) s = getWord(&p); if (*s == '#') /* comment */ continue; - if (strcmp(s, "keymap")) { /* error */ - emsg = Sprintf("line %d: keymap not found\n", lineno)->ptr; + if (! strcmp(s, "keymap")) + ; + else if (! strcmp(s, "verbose")) { + s = getWord(&p); + if (*s) + verbose = str_to_bool(s, verbose); + continue; + } else { /* error */ + emsg = Sprintf("line %d: syntax error '%s'", lineno, s)->ptr; record_err_message(emsg); - disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); + if (verbose) + disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); continue; } s = getQWord(&p); c = getKey(s); if (c < 0) { /* error */ - emsg = Sprintf("line %d: unknown key '%s'\n", lineno, s)->ptr; + emsg = Sprintf("line %d: unknown key '%s'", lineno, s)->ptr; record_err_message(emsg); - disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); + if (verbose) + disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); continue; } s = getWord(&p); f = getFuncList(s, w3mFuncList, w3mNFuncList); if (f < 0) { - emsg = Sprintf("line %d: invalid command '%s'\n", lineno, s)->ptr; + emsg = Sprintf("line %d: invalid command '%s'", lineno, s)->ptr; record_err_message(emsg); - disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); - f = FUNCNAME_nulcmd; + if (verbose) + disp_message_nsec(emsg, FALSE, 1, TRUE, FALSE); + continue; } if (c & K_ESCD) - EscDKeymap[c ^ K_ESCD] = (f >= 0) ? f : FUNCNAME_nulcmd; + EscDKeymap[c ^ K_ESCD] = f; else if (c & K_ESCB) - EscBKeymap[c ^ K_ESCB] = (f >= 0) ? f : FUNCNAME_nulcmd; + EscBKeymap[c ^ K_ESCB] = f; else if (c & K_ESC) - EscKeymap[c ^ K_ESC] = (f >= 0) ? f : FUNCNAME_nulcmd; + EscKeymap[c ^ K_ESC] = f; else - GlobalKeymap[c] = (f >= 0) ? f : FUNCNAME_nulcmd; + GlobalKeymap[c] = f; s = getQWord(&p); addKeyList(&w3mKeyList, c, s); } diff --git a/funcname.c b/funcname.c @@ -46,53 +46,68 @@ FuncList w3mFuncList[] = { /*44*/ {"MOUSE",mouse}, /*45*/ {"MOUSE_TOGGLE",msToggle}, /*46*/ {"MOVE_DOWN",movD}, -/*47*/ {"MOVE_LEFT",movL}, -/*48*/ {"MOVE_RIGHT",movR}, -/*49*/ {"MOVE_UP",movU}, -/*50*/ {"MSGS",msgs}, -/*51*/ {"NEXT_LINK",nextA}, -/*52*/ {"NEXT_MARK",nextMk}, -/*53*/ {"NEXT_PAGE",pgFore}, -/*54*/ {"NEXT_WORD",movRW}, -/*55*/ {"NOTHING",nulcmd}, -/*56*/ {"NULL",nulcmd}, -/*57*/ {"OPTIONS",ldOpt}, -/*58*/ {"PCMAP",pcmap}, -/*59*/ {"PEEK",curURL}, -/*60*/ {"PEEK_LINK",peekURL}, -/*61*/ {"PEEK_IMG",peekIMG}, -/*62*/ {"PIPE_SHELL",pipesh}, -/*63*/ {"PREV_LINK",prevA}, -/*64*/ {"PREV_MARK",prevMk}, -/*65*/ {"PREV_PAGE",pgBack}, -/*66*/ {"PREV_WORD",movLW}, -/*67*/ {"PRINT",svBuf}, -/*68*/ {"QUIT",qquitfm}, -/*69*/ {"READ_SHELL",readsh}, -/*70*/ {"REDRAW",rdrwSc}, -/*71*/ {"REG_MARK",reMark}, -/*72*/ {"RELOAD",reload}, -/*73*/ {"RIGHT",col1R}, -/*74*/ {"SAVE",svSrc}, -/*75*/ {"SAVE_IMAGE",svI}, -/*76*/ {"SAVE_LINK",svA}, -/*77*/ {"SAVE_SCREEN",svBuf}, -/*78*/ {"SEARCH",srchfor}, -/*79*/ {"SEARCH_BACK",srchbak}, -/*80*/ {"SEARCH_FORE",srchfor}, -/*81*/ {"SEARCH_NEXT",srchnxt}, -/*82*/ {"SEARCH_PREV",srchprv}, -/*83*/ {"SELECT",selBuf}, -/*84*/ {"SHELL",execsh}, -/*85*/ {"SHIFT_LEFT",shiftl}, -/*86*/ {"SHIFT_RIGHT",shiftr}, -/*87*/ {"SOURCE",vwSrc}, -/*88*/ {"SUSPEND",susp}, -/*89*/ {"UP",lup1}, -/*90*/ {"VIEW",vwSrc}, -/*91*/ {"VIEW_BOOKMARK",ldBmark}, -/*92*/ {"VIEW_IMAGE",followI}, -/*93*/ {"WHEREIS",srchfor}, -/*94*/ {"WRAP_TOGGLE",wrapToggle}, +/*47*/ {"MOVE_DOWN1",movD1}, +/*48*/ {"MOVE_LEFT",movL}, +/*49*/ {"MOVE_LEFT1",movL1}, +/*50*/ {"MOVE_RIGHT",movR}, +/*51*/ {"MOVE_RIGHT1",movR1}, +/*52*/ {"MOVE_UP",movU}, +/*53*/ {"MOVE_UP1",movU1}, +/*54*/ {"MSGS",msgs}, +/*55*/ {"NEXT_DOWN",nextD}, +/*56*/ {"NEXT_LEFT",nextL}, +/*57*/ {"NEXT_LEFT_UP",nextLU}, +/*58*/ {"NEXT_LINK",nextA}, +/*59*/ {"NEXT_MARK",nextMk}, +/*60*/ {"NEXT_PAGE",pgFore}, +/*61*/ {"NEXT_RIGHT",nextR}, +/*62*/ {"NEXT_RIGHT_DOWN",nextRD}, +/*63*/ {"NEXT_UP",nextU}, +/*64*/ {"NEXT_WORD",movRW}, +/*65*/ {"NOTHING",nulcmd}, +/*66*/ {"NULL",nulcmd}, +/*67*/ {"OPTIONS",ldOpt}, +/*68*/ {"PCMAP",pcmap}, +/*69*/ {"PEEK",curURL}, +/*70*/ {"PEEK_IMG",peekIMG}, +/*71*/ {"PEEK_LINK",peekURL}, +/*72*/ {"PIPE_BUF",pipeBuf}, +/*73*/ {"PIPE_SHELL",pipesh}, +/*74*/ {"PREV_LINK",prevA}, +/*75*/ {"PREV_MARK",prevMk}, +/*76*/ {"PREV_PAGE",pgBack}, +/*77*/ {"PREV_WORD",movLW}, +/*78*/ {"PRINT",svBuf}, +/*79*/ {"QUIT",qquitfm}, +/*80*/ {"READ_SHELL",readsh}, +/*81*/ {"REDRAW",rdrwSc}, +/*82*/ {"REG_MARK",reMark}, +/*83*/ {"RELOAD",reload}, +/*84*/ {"RIGHT",col1R}, +/*85*/ {"SAVE",svSrc}, +/*86*/ {"SAVE_IMAGE",svI}, +/*87*/ {"SAVE_LINK",svA}, +/*88*/ {"SAVE_SCREEN",svBuf}, +/*89*/ {"SEARCH",srchfor}, +/*90*/ {"SEARCH_BACK",srchbak}, +/*91*/ {"SEARCH_FORE",srchfor}, +/*92*/ {"SEARCH_NEXT",srchnxt}, +/*93*/ {"SEARCH_PREV",srchprv}, +/*94*/ {"SELECT",selBuf}, +/*95*/ {"SETENV",setEnv}, +/*96*/ {"SET_OPTION",setOpt}, +/*97*/ {"SHELL",execsh}, +/*98*/ {"SHIFT_LEFT",shiftl}, +/*99*/ {"SHIFT_RIGHT",shiftr}, +/*100*/ {"SOURCE",vwSrc}, +/*101*/ {"SUBMIT",submitForm}, +/*102*/ {"SUSPEND",susp}, +/*103*/ {"UP",lup1}, +/*104*/ {"VERSION",dispVer}, +/*105*/ {"VIEW",vwSrc}, +/*106*/ {"VIEW_BOOKMARK",ldBmark}, +/*107*/ {"VIEW_IMAGE",followI}, +/*108*/ {"WHEREIS",srchfor}, +/*109*/ {"WRAP_TOGGLE",wrapToggle}, { NULL, NULL } }; diff --git a/funcname.tab b/funcname.tab @@ -47,21 +47,32 @@ MENU mainMn MOUSE mouse MOUSE_TOGGLE msToggle MOVE_DOWN movD +MOVE_DOWN1 movD1 MOVE_LEFT movL +MOVE_LEFT1 movL1 MOVE_RIGHT movR +MOVE_RIGHT1 movR1 MOVE_UP movU +MOVE_UP1 movU1 MSGS msgs +NEXT_DOWN nextD +NEXT_LEFT nextL +NEXT_LEFT_UP nextLU NEXT_LINK nextA NEXT_MARK nextMk NEXT_PAGE pgFore +NEXT_RIGHT nextR +NEXT_RIGHT_DOWN nextRD +NEXT_UP nextU NEXT_WORD movRW NOTHING nulcmd NULL nulcmd OPTIONS ldOpt PCMAP pcmap PEEK curURL -PEEK_LINK peekURL PEEK_IMG peekIMG +PEEK_LINK peekURL +PIPE_BUF pipeBuf PIPE_SHELL pipesh PREV_LINK prevA PREV_MARK prevMk @@ -84,12 +95,17 @@ SEARCH_FORE srchfor SEARCH_NEXT srchnxt SEARCH_PREV srchprv SELECT selBuf +SELECT_MENU selMn +SETENV setEnv +SET_OPTION setOpt SHELL execsh SHIFT_LEFT shiftl SHIFT_RIGHT shiftr SOURCE vwSrc +SUBMIT submitForm SUSPEND susp UP lup1 +VERSION dispVer VIEW vwSrc VIEW_BOOKMARK ldBmark VIEW_IMAGE followI diff --git a/funcname1.h b/funcname1.h @@ -43,41 +43,57 @@ #define FUNCNAME_mouse 44 #define FUNCNAME_msToggle 45 #define FUNCNAME_movD 46 -#define FUNCNAME_movL 47 -#define FUNCNAME_movR 48 -#define FUNCNAME_movU 49 -#define FUNCNAME_msgs 50 -#define FUNCNAME_nextA 51 -#define FUNCNAME_nextMk 52 -#define FUNCNAME_pgFore 53 -#define FUNCNAME_movRW 54 -#define FUNCNAME_ldOpt 57 -#define FUNCNAME_pcmap 58 -#define FUNCNAME_curURL 59 -#define FUNCNAME_peekURL 60 -#define FUNCNAME_peekIMG 61 -#define FUNCNAME_pipesh 62 -#define FUNCNAME_prevA 63 -#define FUNCNAME_prevMk 64 -#define FUNCNAME_pgBack 65 -#define FUNCNAME_movLW 66 -#define FUNCNAME_svBuf 67 -#define FUNCNAME_qquitfm 68 -#define FUNCNAME_readsh 69 -#define FUNCNAME_rdrwSc 70 -#define FUNCNAME_reMark 71 -#define FUNCNAME_reload 72 -#define FUNCNAME_col1R 73 -#define FUNCNAME_svI 75 -#define FUNCNAME_svA 76 -#define FUNCNAME_srchfor 78 -#define FUNCNAME_srchbak 79 -#define FUNCNAME_srchnxt 81 -#define FUNCNAME_srchprv 82 -#define FUNCNAME_selBuf 83 -#define FUNCNAME_shiftl 85 -#define FUNCNAME_shiftr 86 -#define FUNCNAME_vwSrc 87 -#define FUNCNAME_lup1 89 -#define FUNCNAME_followI 92 -#define FUNCNAME_wrapToggle 94 +#define FUNCNAME_movD1 47 +#define FUNCNAME_movL 48 +#define FUNCNAME_movL1 49 +#define FUNCNAME_movR 50 +#define FUNCNAME_movR1 51 +#define FUNCNAME_movU 52 +#define FUNCNAME_movU1 53 +#define FUNCNAME_msgs 54 +#define FUNCNAME_nextD 55 +#define FUNCNAME_nextL 56 +#define FUNCNAME_nextLU 57 +#define FUNCNAME_nextA 58 +#define FUNCNAME_nextMk 59 +#define FUNCNAME_pgFore 60 +#define FUNCNAME_nextR 61 +#define FUNCNAME_nextRD 62 +#define FUNCNAME_nextU 63 +#define FUNCNAME_movRW 64 +#define FUNCNAME_ldOpt 67 +#define FUNCNAME_pcmap 68 +#define FUNCNAME_curURL 69 +#define FUNCNAME_peekIMG 70 +#define FUNCNAME_peekURL 71 +#define FUNCNAME_pipeBuf 72 +#define FUNCNAME_pipesh 73 +#define FUNCNAME_prevA 74 +#define FUNCNAME_prevMk 75 +#define FUNCNAME_pgBack 76 +#define FUNCNAME_movLW 77 +#define FUNCNAME_svBuf 78 +#define FUNCNAME_qquitfm 79 +#define FUNCNAME_readsh 80 +#define FUNCNAME_rdrwSc 81 +#define FUNCNAME_reMark 82 +#define FUNCNAME_reload 83 +#define FUNCNAME_col1R 84 +#define FUNCNAME_svI 86 +#define FUNCNAME_svA 87 +#define FUNCNAME_srchfor 89 +#define FUNCNAME_srchbak 90 +#define FUNCNAME_srchnxt 92 +#define FUNCNAME_srchprv 93 +#define FUNCNAME_selBuf 94 +#define FUNCNAME_selMn 95 +#define FUNCNAME_setEnv 96 +#define FUNCNAME_setOpt 97 +#define FUNCNAME_shiftl 99 +#define FUNCNAME_shiftr 100 +#define FUNCNAME_vwSrc 101 +#define FUNCNAME_submitForm 102 +#define FUNCNAME_lup1 104 +#define FUNCNAME_dispVer 105 +#define FUNCNAME_followI 108 +#define FUNCNAME_wrapToggle 110 diff --git a/funcname2.h b/funcname2.h @@ -43,41 +43,57 @@ #define mouse 44 #define msToggle 45 #define movD 46 -#define movL 47 -#define movR 48 -#define movU 49 -#define msgs 50 -#define nextA 51 -#define nextMk 52 -#define pgFore 53 -#define movRW 54 -#define ldOpt 57 -#define pcmap 58 -#define curURL 59 -#define peekURL 60 -#define peekIMG 61 -#define pipesh 62 -#define prevA 63 -#define prevMk 64 -#define pgBack 65 -#define movLW 66 -#define svBuf 67 -#define qquitfm 68 -#define readsh 69 -#define rdrwSc 70 -#define reMark 71 -#define reload 72 -#define col1R 73 -#define svI 75 -#define svA 76 -#define srchfor 78 -#define srchbak 79 -#define srchnxt 81 -#define srchprv 82 -#define selBuf 83 -#define shiftl 85 -#define shiftr 86 -#define vwSrc 87 -#define lup1 89 -#define followI 92 -#define wrapToggle 94 +#define movD1 47 +#define movL 48 +#define movL1 49 +#define movR 50 +#define movR1 51 +#define movU 52 +#define movU1 53 +#define msgs 54 +#define nextD 55 +#define nextL 56 +#define nextLU 57 +#define nextA 58 +#define nextMk 59 +#define pgFore 60 +#define nextR 61 +#define nextRD 62 +#define nextU 63 +#define movRW 64 +#define ldOpt 67 +#define pcmap 68 +#define curURL 69 +#define peekIMG 70 +#define peekURL 71 +#define pipeBuf 72 +#define pipesh 73 +#define prevA 74 +#define prevMk 75 +#define pgBack 76 +#define movLW 77 +#define svBuf 78 +#define qquitfm 79 +#define readsh 80 +#define rdrwSc 81 +#define reMark 82 +#define reload 83 +#define col1R 84 +#define svI 86 +#define svA 87 +#define srchfor 89 +#define srchbak 90 +#define srchnxt 92 +#define srchprv 93 +#define selBuf 94 +#define selMn 95 +#define setEnv 96 +#define setOpt 97 +#define shiftl 99 +#define shiftr 100 +#define vwSrc 101 +#define submitForm 102 +#define lup1 104 +#define dispVer 105 +#define followI 108 +#define wrapToggle 110 diff --git a/gc/AmigaOS.c b/gc/AmigaOS.c @@ -0,0 +1,623 @@ + + +/****************************************************************** + + AmigaOS-spesific routines for GC. + This file is normally included from os_dep.c + +******************************************************************/ + + +#if !defined(GC_AMIGA_DEF) && !defined(GC_AMIGA_SB) && !defined(GC_AMIGA_DS) && !defined(GC_AMIGA_AM) +# include "gc_priv.h" +# include <stdio.h> +# include <signal.h> +# define GC_AMIGA_DEF +# define GC_AMIGA_SB +# define GC_AMIGA_DS +# define GC_AMIGA_AM +#endif + + +#ifdef GC_AMIGA_DEF + +# ifndef __GNUC__ +# include <exec/exec.h> +# endif +# include <proto/exec.h> +# include <proto/dos.h> +# include <dos/dosextens.h> +# include <workbench/startup.h> + +#endif + + + + +#ifdef GC_AMIGA_SB + +/****************************************************************** + Find the base of the stack. +******************************************************************/ + +ptr_t GC_get_stack_base() +{ + struct Process *proc = (struct Process*)SysBase->ThisTask; + + /* Reference: Amiga Guru Book Pages: 42,567,574 */ + if (proc->pr_Task.tc_Node.ln_Type==NT_PROCESS + && proc->pr_CLI != NULL) { + /* first ULONG is StackSize */ + /*longPtr = proc->pr_ReturnAddr; + size = longPtr[0];*/ + + return (char *)proc->pr_ReturnAddr + sizeof(ULONG); + } else { + return (char *)proc->pr_Task.tc_SPUpper; + } +} + +#if 0 /* old version */ +ptr_t GC_get_stack_base() +{ + extern struct WBStartup *_WBenchMsg; + extern long __base; + extern long __stack; + struct Task *task; + struct Process *proc; + struct CommandLineInterface *cli; + long size; + + if ((task = FindTask(0)) == 0) { + GC_err_puts("Cannot find own task structure\n"); + ABORT("task missing"); + } + proc = (struct Process *)task; + cli = BADDR(proc->pr_CLI); + + if (_WBenchMsg != 0 || cli == 0) { + size = (char *)task->tc_SPUpper - (char *)task->tc_SPLower; + } else { + size = cli->cli_DefaultStack * 4; + } + return (ptr_t)(__base + GC_max(size, __stack)); +} +#endif + + +#endif + + +#ifdef GC_AMIGA_DS +/****************************************************************** + Register data segments. +******************************************************************/ + + void GC_register_data_segments() + { + struct Process *proc; + struct CommandLineInterface *cli; + BPTR myseglist; + ULONG *data; + + int num; + + +# ifdef __GNUC__ + ULONG dataSegSize; + GC_bool found_segment = FALSE; + extern char __data_size[]; + + dataSegSize=__data_size+8; + /* Can`t find the Location of __data_size, because + it`s possible that is it, inside the segment. */ + +# endif + + proc= (struct Process*)SysBase->ThisTask; + + /* Reference: Amiga Guru Book Pages: 538ff,565,573 + and XOper.asm */ + if (proc->pr_Task.tc_Node.ln_Type==NT_PROCESS) { + if (proc->pr_CLI == NULL) { + myseglist = proc->pr_SegList; + } else { + /* ProcLoaded 'Loaded as a command: '*/ + cli = BADDR(proc->pr_CLI); + myseglist = cli->cli_Module; + } + } else { + ABORT("Not a Process."); + } + + if (myseglist == NULL) { + ABORT("Arrrgh.. can't find segments, aborting"); + } + + /* xoper hunks Shell Process */ + + num=0; + for (data = (ULONG *)BADDR(myseglist); data != NULL; + data = (ULONG *)BADDR(data[0])) { + if (((ULONG) GC_register_data_segments < (ULONG) &data[1]) || + ((ULONG) GC_register_data_segments > (ULONG) &data[1] + data[-1])) { +# ifdef __GNUC__ + if (dataSegSize == data[-1]) { + found_segment = TRUE; + } +# endif + GC_add_roots_inner((char *)&data[1], + ((char *)&data[1]) + data[-1], FALSE); + } + ++num; + } /* for */ +# ifdef __GNUC__ + if (!found_segment) { + ABORT("Can`t find correct Segments.\nSolution: Use an newer version of ixemul.library"); + } +# endif + } + +#if 0 /* old version */ + void GC_register_data_segments() + { + extern struct WBStartup *_WBenchMsg; + struct Process *proc; + struct CommandLineInterface *cli; + BPTR myseglist; + ULONG *data; + + if ( _WBenchMsg != 0 ) { + if ((myseglist = _WBenchMsg->sm_Segment) == 0) { + GC_err_puts("No seglist from workbench\n"); + return; + } + } else { + if ((proc = (struct Process *)FindTask(0)) == 0) { + GC_err_puts("Cannot find process structure\n"); + return; + } + if ((cli = BADDR(proc->pr_CLI)) == 0) { + GC_err_puts("No CLI\n"); + return; + } + if ((myseglist = cli->cli_Module) == 0) { + GC_err_puts("No seglist from CLI\n"); + return; + } + } + + for (data = (ULONG *)BADDR(myseglist); data != 0; + data = (ULONG *)BADDR(data[0])) { +# ifdef AMIGA_SKIP_SEG + if (((ULONG) GC_register_data_segments < (ULONG) &data[1]) || + ((ULONG) GC_register_data_segments > (ULONG) &data[1] + data[-1])) { +# else + { +# endif /* AMIGA_SKIP_SEG */ + GC_add_roots_inner((char *)&data[1], + ((char *)&data[1]) + data[-1], FALSE); + } + } + } +#endif /* old version */ + + +#endif + + + +#ifdef GC_AMIGA_AM + +#ifndef GC_AMIGA_FASTALLOC + +void *GC_amiga_allocwrapper(size_t size,void *(*AllocFunction)(size_t size2)){ + return (*AllocFunction)(size); +} + +void *(*GC_amiga_allocwrapper_do)(size_t size,void *(*AllocFunction)(size_t size2)) + =GC_amiga_allocwrapper; + +#else + + + + +void *GC_amiga_allocwrapper_firsttime(size_t size,void *(*AllocFunction)(size_t size2)); + +void *(*GC_amiga_allocwrapper_do)(size_t size,void *(*AllocFunction)(size_t size2)) + =GC_amiga_allocwrapper_firsttime; + + +/****************************************************************** + Amiga-spesific routines to obtain memory, and force GC to give + back fast-mem whenever possible. + These hacks makes gc-programs go many times faster when + the amiga is low on memory, and are therefore strictly necesarry. + + -Kjetil S. Matheussen, 2000. +******************************************************************/ + + + +/* List-header for all allocated memory. */ + +struct GC_Amiga_AllocedMemoryHeader{ + ULONG size; + struct GC_Amiga_AllocedMemoryHeader *next; +}; +struct GC_Amiga_AllocedMemoryHeader *GC_AMIGAMEM=(struct GC_Amiga_AllocedMemoryHeader *)(int)~(NULL); + + + +/* Type of memory. Once in the execution of a program, this might change to MEMF_ANY|MEMF_CLEAR */ + +ULONG GC_AMIGA_MEMF = MEMF_FAST | MEMF_CLEAR; + + +/* Prevents GC_amiga_get_mem from allocating memory if this one is TRUE. */ +#ifndef GC_AMIGA_ONLYFAST +BOOL GC_amiga_dontalloc=FALSE; +#endif + +#ifdef GC_AMIGA_PRINTSTATS +int succ=0,succ2=0; +int nsucc=0,nsucc2=0; +int nullretries=0; +int numcollects=0; +int chipa=0; +int allochip=0; +int allocfast=0; +int cur0=0; +int cur1=0; +int cur10=0; +int cur50=0; +int cur150=0; +int cur151=0; +int ncur0=0; +int ncur1=0; +int ncur10=0; +int ncur50=0; +int ncur150=0; +int ncur151=0; +#endif + +/* Free everything at program-end. */ + +void GC_amiga_free_all_mem(void){ + struct GC_Amiga_AllocedMemoryHeader *gc_am=(struct GC_Amiga_AllocedMemoryHeader *)(~(int)(GC_AMIGAMEM)); + struct GC_Amiga_AllocedMemoryHeader *temp; + +#ifdef GC_AMIGA_PRINTSTATS + printf("\n\n" + "%d bytes of chip-mem, and %d bytes of fast-mem where allocated from the OS.\n", + allochip,allocfast + ); + printf( + "%d bytes of chip-mem were returned from the GC_AMIGA_FASTALLOC supported allocating functions.\n", + chipa + ); + printf("\n"); + printf("GC_gcollect was called %d times to avoid returning NULL or start allocating with the MEMF_ANY flag.\n",numcollects); + printf("%d of them was a success. (the others had to use allocation from the OS.)\n",nullretries); + printf("\n"); + printf("Succeded forcing %d gc-allocations (%d bytes) of chip-mem to be fast-mem.\n",succ,succ2); + printf("Failed forcing %d gc-allocations (%d bytes) of chip-mem to be fast-mem.\n",nsucc,nsucc2); + printf("\n"); + printf( + "Number of retries before succeding a chip->fast force:\n" + "0: %d, 1: %d, 2-9: %d, 10-49: %d, 50-149: %d, >150: %d\n", + cur0,cur1,cur10,cur50,cur150,cur151 + ); + printf( + "Number of retries before giving up a chip->fast force:\n" + "0: %d, 1: %d, 2-9: %d, 10-49: %d, 50-149: %d, >150: %d\n", + ncur0,ncur1,ncur10,ncur50,ncur150,ncur151 + ); +#endif + + while(gc_am!=NULL){ + temp=gc_am->next; + FreeMem(gc_am,gc_am->size); + gc_am=(struct GC_Amiga_AllocedMemoryHeader *)(~(int)(temp)); + } +} + +#ifndef GC_AMIGA_ONLYFAST + +/* All memory with address lower than this one is chip-mem. */ + +char *chipmax; + + +/* + * Allways set to the last size of memory tried to be allocated. + * Needed to ensure allocation when the size is bigger than 100000. + * + */ +size_t latestsize; + +#endif + + +/* + * The actual function that is called with the GET_MEM macro. + * + */ + +void *GC_amiga_get_mem(size_t size){ + struct GC_Amiga_AllocedMemoryHeader *gc_am; + +#ifndef GC_AMIGA_ONLYFAST + if(GC_amiga_dontalloc==TRUE){ +// printf("rejected, size: %d, latestsize: %d\n",size,latestsize); + return NULL; + } + + // We really don't want to use chip-mem, but if we must, then as little as possible. + if(GC_AMIGA_MEMF==(MEMF_ANY|MEMF_CLEAR) && size>100000 && latestsize<50000) return NULL; +#endif + + gc_am=AllocMem((ULONG)(size + sizeof(struct GC_Amiga_AllocedMemoryHeader)),GC_AMIGA_MEMF); + if(gc_am==NULL) return NULL; + + gc_am->next=GC_AMIGAMEM; + gc_am->size=size + sizeof(struct GC_Amiga_AllocedMemoryHeader); + GC_AMIGAMEM=(struct GC_Amiga_AllocedMemoryHeader *)(~(int)(gc_am)); + +// printf("Allocated %d (%d) bytes at address: %x. Latest: %d\n",size,tot,gc_am,latestsize); + +#ifdef GC_AMIGA_PRINTSTATS + if((char *)gc_am<chipmax){ + allochip+=size; + }else{ + allocfast+=size; + } +#endif + + return gc_am+1; + +} + + + + +#ifndef GC_AMIGA_ONLYFAST + +/* Tries very hard to force GC to find fast-mem to return. Done recursively + * to hold the rejected memory-pointers reachable from the collector in an + * easy way. + * + */ +#ifdef GC_AMIGA_RETRY +void *GC_amiga_rec_alloc(size_t size,void *(*AllocFunction)(size_t size2),const int rec){ + void *ret; + + ret=(*AllocFunction)(size); + +#ifdef GC_AMIGA_PRINTSTATS + if((char *)ret>chipmax || ret==NULL){ + if(ret==NULL){ + nsucc++; + nsucc2+=size; + if(rec==0) ncur0++; + if(rec==1) ncur1++; + if(rec>1 && rec<10) ncur10++; + if(rec>=10 && rec<50) ncur50++; + if(rec>=50 && rec<150) ncur150++; + if(rec>=150) ncur151++; + }else{ + succ++; + succ2+=size; + if(rec==0) cur0++; + if(rec==1) cur1++; + if(rec>1 && rec<10) cur10++; + if(rec>=10 && rec<50) cur50++; + if(rec>=50 && rec<150) cur150++; + if(rec>=150) cur151++; + } + } +#endif + + if (((char *)ret)<=chipmax && ret!=NULL && (rec<(size>500000?9:size/5000))){ + ret=GC_amiga_rec_alloc(size,AllocFunction,rec+1); +// GC_free(ret2); + } + + return ret; +} +#endif + + +/* The allocating-functions defined inside the amiga-blocks in gc.h is called + * via these functions. + */ + + +void *GC_amiga_allocwrapper_any(size_t size,void *(*AllocFunction)(size_t size2)){ + void *ret,*ret2; + + GC_amiga_dontalloc=TRUE; // Pretty tough thing to do, but its indeed necesarry. + latestsize=size; + + ret=(*AllocFunction)(size); + + if(((char *)ret) <= chipmax){ + if(ret==NULL){ + //Give GC access to allocate memory. +#ifdef GC_AMIGA_GC + if(!GC_dont_gc){ + GC_gcollect(); +#ifdef GC_AMIGA_PRINTSTATS + numcollects++; +#endif + ret=(*AllocFunction)(size); + } +#endif + if(ret==NULL){ + GC_amiga_dontalloc=FALSE; + ret=(*AllocFunction)(size); + if(ret==NULL){ + WARN("Out of Memory! Returning NIL!\n", 0); + } + } +#ifdef GC_AMIGA_PRINTSTATS + else{ + nullretries++; + } + if(ret!=NULL && (char *)ret<=chipmax) chipa+=size; +#endif + } +#ifdef GC_AMIGA_RETRY + else{ + /* We got chip-mem. Better try again and again and again etc., we might get fast-mem sooner or later... */ + /* Using gctest to check the effectiviness of doing this, does seldom give a very good result. */ + /* However, real programs doesn't normally rapidly allocate and deallocate. */ +// printf("trying to force... %d bytes... ",size); + if( + AllocFunction!=GC_malloc_uncollectable +#ifdef ATOMIC_UNCOLLECTABLE + && AllocFunction!=GC_malloc_atomic_uncollectable +#endif + ){ + ret2=GC_amiga_rec_alloc(size,AllocFunction,0); + }else{ + ret2=(*AllocFunction)(size); +#ifdef GC_AMIGA_PRINTSTATS + if((char *)ret2<chipmax || ret2==NULL){ + nsucc++; + nsucc2+=size; + ncur0++; + }else{ + succ++; + succ2+=size; + cur0++; + } +#endif + } + if(((char *)ret2)>chipmax){ +// printf("Succeeded.\n"); + GC_free(ret); + ret=ret2; + }else{ + GC_free(ret2); +// printf("But did not succeed.\n"); + } + } +#endif + } + + GC_amiga_dontalloc=FALSE; + + return ret; +} + + + +void (*GC_amiga_toany)(void)=NULL; + +void GC_amiga_set_toany(void (*func)(void)){ + GC_amiga_toany=func; +} + +#endif // !GC_AMIGA_ONLYFAST + + +void *GC_amiga_allocwrapper_fast(size_t size,void *(*AllocFunction)(size_t size2)){ + void *ret; + + ret=(*AllocFunction)(size); + + if(ret==NULL){ + // Enable chip-mem allocation. +// printf("ret==NULL\n"); +#ifdef GC_AMIGA_GC + if(!GC_dont_gc){ + GC_gcollect(); +#ifdef GC_AMIGA_PRINTSTATS + numcollects++; +#endif + ret=(*AllocFunction)(size); + } +#endif + if(ret==NULL){ +#ifndef GC_AMIGA_ONLYFAST + GC_AMIGA_MEMF=MEMF_ANY | MEMF_CLEAR; + if(GC_amiga_toany!=NULL) (*GC_amiga_toany)(); + GC_amiga_allocwrapper_do=GC_amiga_allocwrapper_any; + return GC_amiga_allocwrapper_any(size,AllocFunction); +#endif + } +#ifdef GC_AMIGA_PRINTSTATS + else{ + nullretries++; + } +#endif + } + + return ret; +} + +void *GC_amiga_allocwrapper_firsttime(size_t size,void *(*AllocFunction)(size_t size2)){ + atexit(&GC_amiga_free_all_mem); + chipmax=(char *)SysBase->MaxLocMem; // For people still having SysBase in chip-mem, this might speed up a bit. + GC_amiga_allocwrapper_do=GC_amiga_allocwrapper_fast; + return GC_amiga_allocwrapper_fast(size,AllocFunction); +} + + +#endif //GC_AMIGA_FASTALLOC + + + +/* + * The wrapped realloc function. + * + */ +void *GC_amiga_realloc(void *old_object,size_t new_size_in_bytes){ +#ifndef GC_AMIGA_FASTALLOC + return GC_realloc(old_object,new_size_in_bytes); +#else + void *ret; + latestsize=new_size_in_bytes; + ret=GC_realloc(old_object,new_size_in_bytes); + if(ret==NULL && GC_AMIGA_MEMF==(MEMF_FAST | MEMF_CLEAR)){ + /* Out of fast-mem. */ +#ifdef GC_AMIGA_GC + if(!GC_dont_gc){ + GC_gcollect(); +#ifdef GC_AMIGA_PRINTSTATS + numcollects++; +#endif + ret=GC_realloc(old_object,new_size_in_bytes); + } +#endif + if(ret==NULL){ +#ifndef GC_AMIGA_ONLYFAST + GC_AMIGA_MEMF=MEMF_ANY | MEMF_CLEAR; + if(GC_amiga_toany!=NULL) (*GC_amiga_toany)(); + GC_amiga_allocwrapper_do=GC_amiga_allocwrapper_any; + ret=GC_realloc(old_object,new_size_in_bytes); +#endif + } +#ifdef GC_AMIGA_PRINTSTATS + else{ + nullretries++; + } +#endif + } + if(ret==NULL){ + WARN("Out of Memory! Returning NIL!\n", 0); + } +#ifdef GC_AMIGA_PRINTSTATS + if(((char *)ret)<chipmax && ret!=NULL){ + chipa+=new_size_in_bytes; + } +#endif + return ret; +#endif +} + +#endif //GC_AMIGA_AM + + diff --git a/gc/BCC_MAKEFILE b/gc/BCC_MAKEFILE @@ -47,9 +47,9 @@ gc.lib: $(OBJS) $(XXXOBJS:XXX=+) | -gctest.exe: test.obj gc.lib +gctest.exe: tests\test.obj gc.lib $(cc) @&&| - $(cflags) -W -e$* test.obj gc.lib + $(cflags) -W -e$* tests\test.obj gc.lib | cord\de.obj cord\de_win.obj: cord\cord.h cord\private\cord_pos.h cord\de_win.h \ @@ -68,8 +68,8 @@ gc_cpp.obj: gc_cpp.h gc.h gc_cpp.cpp: gc_cpp.cc copy gc_cpp.cc gc_cpp.cpp -test_cpp.cpp: test_cpp.cc - copy test_cpp.cc test_cpp.cpp +test_cpp.cpp: tests\test_cpp.cc + copy tests\test_cpp.cc test_cpp.cpp test_cpp.exe: test_cpp.obj gc_cpp.h gc.h gc.lib $(cc) @&&| diff --git a/gc/EMX_MAKEFILE b/gc/EMX_MAKEFILE @@ -77,7 +77,7 @@ $(OBJS) test.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \ # options such as -DSILENT affects the size of GC_arrays, # invalidating all .o files that rely on gc_priv.h -mark.o typd_mlc.o finalize.o: $(srcdir)/gc_mark.h +mark.o typd_mlc.o finalize.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h gc.a: $(OBJS) $(AR) ru gc.a $(OBJS) @@ -120,13 +120,13 @@ cord/de.exe: $(srcdir)/cord/de.c $(srcdir)/cord/cordbscs.o $(srcdir)/cord/cordxt $(CC) $(CFLAGS) -o cord/de.exe $(srcdir)/cord/de.c $(srcdir)/cord/cordbscs.o $(srcdir)/cord/cordxtra.o gc.a $(CURSES) clean: - rm -f gc.a test.o gctest.exe output-local output-diff $(OBJS) \ + rm -f gc.a tests/test.o gctest.exe output-local output-diff $(OBJS) \ setjmp_test mon.out gmon.out a.out core \ $(CORD_OBJS) cord/cordtest.exe cord/de.exe -rm -f *~ -gctest.exe: test.o gc.a - $(CC) $(CFLAGS) -o gctest.exe test.o gc.a +gctest.exe: tests/test.o gc.a + $(CC) $(CFLAGS) -o gctest.exe tests/test.o gc.a # If an optimized setjmp_test generates a segmentation fault, # odds are your compiler is broken. Gctest may still work. diff --git a/gc/Makefile b/gc/Makefile @@ -1,52 +1,77 @@ +# This is the original manually generated Makefile. It may still be used +# to build the collector. +# # Primary targets: # gc.a - builds basic library -# libgc.a - builds library for use with g++ "-fgc-keyword" extension # c++ - adds C++ interface to library # cords - adds cords (heavyweight strings) to library # test - prints porting information, then builds basic version of gc.a, # and runs some tests of collector and cords. Does not add cords or # c++ interface to gc.a # cord/de - builds dumb editor based on cords. -ABI_FLAG= +ABI_FLAG= CC=cc $(ABI_FLAG) -CXX=CC $(ABI_FLAG) +CXX=g++ $(ABI_FLAG) AS=as $(ABI_FLAG) # The above doesn't work with gas, which doesn't run cpp. # Define AS as `gcc -c -x assembler-with-cpp' instead. # Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64) # if you use something other than the default ABI on your machine. -CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DALL_INTERIOR_POINTERS -DSILENT +# Redefining srcdir allows object code for the nonPCR version of the collector +# to be generated in different directories. +srcdir= . +VPATH= $(srcdir) + +CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS + +# To build the parallel collector on Linux, add to the above: +# -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC +# To build the parallel collector n a static library on HP/UX, add to the above: +# -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L + +# HOSTCC and HOSTCFLAGS are used to build executables that will be run as +# part of the build process, i.e. on the build machine. These will usually +# be the same as CC and CFLAGS, except in a cross-compilation environment. +# Note that HOSTCFLAGS should include any -D flags that affect thread support. +HOSTCC=$(CC) +HOSTCFLAGS=$(CFLAGS) # For dynamic library builds, it may be necessary to add flags to generate # PIC code, e.g. -fPIC on Linux. # Setjmp_test may yield overly optimistic results when compiled # without optimization. + +# These define arguments influence the collector configuration: # -DSILENT disables statistics printing, and improves performance. # -DFIND_LEAK causes GC_find_leak to be initially set. # This causes the collector to assume that all inaccessible # objects should have been explicitly deallocated, and reports exceptions. # Finalization and the test program are not usable in this mode. -# -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define SOLARIS_THREADS and then include +# -DGC_SOLARIS_THREADS enables support for Solaris (thr_) threads. +# (Clients should also define GC_SOLARIS_THREADS and then include # gc.h before performing thr_ or dl* or GC_ operations.) # Must also define -D_REENTRANT. -# -D_SOLARIS_PTHREADS enables support for Solaris pthreads. +# -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads. # Define SOLARIS_THREADS as well. -# -DIRIX_THREADS enables support for Irix pthreads. See README.irix. -# -DLINUX_THREADS enables support for Xavier Leroy's Linux threads. +# -DGC_IRIX_THREADS enables support for Irix pthreads. See README.irix. +# -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads. +# Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp. +# -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads. # see README.linux. -D_REENTRANT may also be required. # -DALL_INTERIOR_POINTERS allows all pointers to the interior # of objects to be recognized. (See gc_priv.h for consequences.) +# Alternatively, GC_all_interior_pointers can be set at process +# initialization time. # -DSMALL_CONFIG tries to tune the collector for small heap sizes, # usually causing it to use less space in such situations. # Incremental collection no longer works in this case. # -DLARGE_CONFIG tunes the collector for unusually large heaps. # Necessary for heaps larger than about 500 MB on most machines. # Recommended for heaps larger than about 64 MB. -# -DDONT_ADD_BYTE_AT_END is meaningful only with -# -DALL_INTERIOR_POINTERS. Normally -DALL_INTERIOR_POINTERS +# -DDONT_ADD_BYTE_AT_END is meaningful only with -DALL_INTERIOR_POINTERS or +# GC_all_interior_pointers = 1. Normally -DALL_INTERIOR_POINTERS # causes all objects to be padded so that pointers just past the end of # an object can be recognized. This can be expensive. (The padding # is normally more than one byte due to alignment constraints.) @@ -56,24 +81,34 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DALL_INT # implementations, and it sometimes has a significant performance # impact. However, it is dangerous for many not-quite-ANSI C # programs that call things like printf in asynchronous signal handlers. +# This is on by default. Turning it off has not been extensively tested with +# compilers that reorder stores. It should have been. # -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not # have execute permission, i.e. it may be impossible to execute # code from the heap. Currently this only affects the incremental # collector on UNIX machines. It may greatly improve its performance, # since this may avoid some expensive cache synchronization. -# -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the -# new syntax "operator new[]" for allocating and deleting arrays. +# -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support +# the new syntax "operator new[]" for allocating and deleting arrays. # See gc_cpp.h for details. No effect on the C part of the collector. -# This is defined implicitly in a few environments. +# This is defined implicitly in a few environments. Must also be defined +# by clients that use gc_cpp.h. # -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined # as aliases for X, GC_realloc, and GC_free, respectively. # Calloc is redefined in terms of the new malloc. X should -# be either GC_malloc or GC_malloc_uncollectable. +# be either GC_malloc or GC_malloc_uncollectable, or +# GC_debug_malloc_replacement. (The latter invokes GC_debug_malloc +# with dummy source location information, but still results in +# properly remembered call stacks on Linux/X86 and Solaris/SPARC.) # The former is occasionally useful for working around leaks in code # you don't want to (or can't) look at. It may not work for # existing code, but it often does. Neither works on all platforms, # since some ports use malloc or calloc to obtain system memory. # (Probably works for UNIX, and win32.) +# -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X. +# The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement, +# together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to +# generate leak reports with call stacks for both malloc and realloc. # -DIGNORE_FREE turns calls to free into a noop. Only useful with # -DREDIRECT_MALLOC. # -DNO_DEBUGGING removes GC_dump and the debugging routines it calls. @@ -110,81 +145,138 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DALL_INT # like a pointer, print both the address containing the value, and the # value of the near-bogus-pointer. Can be used to identifiy regions of # memory that are likely to contribute misidentified pointers. -# -DOLD_BLOCK_ALLOC Use the old, possibly faster, large block -# allocation strategy. The new strategy tries harder to minimize -# fragmentation, sometimes at the expense of spending more time in the -# large block allocator and/or collecting more frequently. -# If you expect the allocator to promptly use an explicitly expanded -# heap, this is highly recommended. # -DKEEP_BACK_PTRS Add code to save back pointers in debugging headers # for objects allocated with the debugging allocator. If all objects # through GC_MALLOC with GC_DEBUG defined, this allows the client # to determine how particular or randomly chosen objects are reachable -# for debugging/profiling purposes. The backptr.h interface is +# for debugging/profiling purposes. The gc_backptr.h interface is # implemented only if this is defined. # -DGC_ASSERTIONS Enable some internal GC assertion checking. Currently # this facility is only used in a few places. It is intended primarily # for debugging of the garbage collector itself, but could also +# -DDBG_HDRS_ALL Make sure that all objects have debug headers. Increases +# the reliability (from 99.9999% to 100%) of some of the debugging +# code (especially KEEP_BACK_PTRS). Makes -DSHORT_DBG_HDRS possible. +# Assumes that all client allocation is done through debugging +# allocators. +# -DSHORT_DBG_HDRS Assume that all objects have debug headers. Shorten +# the headers to minimize object size, at the expense of checking for +# writes past the end of an object. This is intended for environments +# in which most client code is written in a "safe" language, such as +# Scheme or Java. Assumes that all client allocation is done using +# the GC_debug_ functions, or through the macros that expand to these, +# or by redirecting malloc to GC_debug_malloc_replacement. +# (Also eliminates the field for the requested object size.) # occasionally be useful for debugging of client code. Slows down the # collector somewhat, but not drastically. +# -DSAVE_CALL_COUNT=<n> Set the number of call frames saved with objects +# allocated through the debugging interface. Affects the amount of +# information generated in leak reports. Only matters on platforms +# on which we can quickly generate call stacks, currently Linux/(X86 & SPARC) +# and Solaris/SPARC. Turns on call chain saving on X86. On X86, client +# code should NOT be compiled with -fomit-frame-pointer. # -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly # altered stubborn objects, at substantial performance cost. # Use only for debugging of the incremental collector. +# -DGC_GCJ_SUPPORT includes support for gcj (and possibly other systems +# that include a pointer to a type descriptor in each allocated object). +# Building this way requires an ANSI C compiler. +# -DUSE_I686_PREFETCH causes the collector to issue Pentium III style +# prefetch instructions. No effect except on X86 Linux platforms. +# Assumes a very recent gcc-compatible compiler and assembler. +# (Gas prefetcht0 support was added around May 1999.) +# Empirically the code appears to still run correctly on Pentium II +# processors, though with no performance benefit. May not run on other +# X86 processors? In some cases this improves performance by +# 15% or so. +# -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style +# prefetch instructions. Same restrictions as USE_I686_PREFETCH. +# UNTESTED!! +# -DGC_USE_LD_WRAP in combination with the gld flags listed in README.linux +# causes the collector some system and pthread calls in a more transparent +# fashion than the usual macro-based approach. Requires GNU ld, and +# currently probably works only with Linux. +# -DTHREAD_LOCAL_ALLOC defines GC_local_malloc(), GC_local_malloc_atomic() +# and GC_local_gcj_malloc(). Needed for gc_gcj.h interface. These allocate +# in a way that usually does not involve acquisition of a global lock. +# Currently requires -DGC_LINUX_THREADS, but should be easy to port to +# other pthreads environments. Recommended for multiprocessors. +# -DPARALLEL_MARK allows the marker to run in multiple threads. Recommended +# for multiprocessors. Currently requires Linux on X86 or IA64, though +# support for other Posix platforms should be fairly easy to add, +# if the thread implementation is otherwise supported. +# -DNO_GETENV prevents the collector from looking at environment variables. +# These may otherwise alter its configuration, or turn off GC altogether. +# I don't know of a reason to disable this, except possibly if the +# resulting process runs as a privileged user? +# -DSTUBBORN_ALLOC allows allocation of "hard to change" objects, and thus +# makes incremental collection easier. Was enabled by default until 6.0. +# Rarely used, to my knowledge. # - -LIBGC_CFLAGS= -O -DNO_SIGNALS -DSILENT \ - -DREDIRECT_MALLOC=GC_malloc_uncollectable \ - -DDONT_ADD_BYTE_AT_END -DALL_INTERIOR_POINTERS -# Flags for building libgc.a -- the last two are required. - CXXFLAGS= $(CFLAGS) AR= ar RANLIB= ranlib -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories. In this case, the destination directory -# should contain a copy of the original include directory. -srcdir = . -VPATH = $(srcdir) +OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o +CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c -CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c - -CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c cord/cord.h cord/ec.h cord/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga +CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.s \ - sparc_mach_dep.s gc.h gc_typed.h gc_hdrs.h gc_priv.h gc_private.h \ - gcconfig.h gc_mark.h include/gc_inl.h include/gc_inline.h gc.man \ - threadlibs.c if_mach.c if_not_there.c gc_cpp.cc gc_cpp.h weakpointer.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h gc_alloc.h \ + sparc_mach_dep.s include/gc.h include/gc_typed.h \ + include/private/gc_hdrs.h include/private/gc_priv.h \ + include/private/gcconfig.h include/private/gc_pmark.h \ + include/gc_inl.h include/gc_inline.h include/gc_mark.h \ + threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \ + gcname.c include/weakpointer.h include/private/gc_locks.h \ + gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \ include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \ - solaris_threads.h backptr.h $(CORD_SRCS) - -OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \ - README test.c test_cpp.cc setjmp_t.c SMakefile.amiga \ - SCoptions.amiga README.amiga README.win32 cord/README \ - cord/gc.h include/gc.h include/gc_typed.h include/cord.h \ - include/ec.h include/private/cord_pos.h include/private/gcconfig.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/gc_cpp.h README.rs6000 include/backptr.h \ - include/weakpointer.h README.QUICK callprocs pc_excludes \ - barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \ - MacOS.c EMX_MAKEFILE makefile.depend README.debugging \ - include/gc_cpp.h Mac_files/datastart.c Mac_files/dataend.c \ + sparc_netbsd_mach_dep.s \ + include/private/solaris_threads.h include/gc_backptr.h \ + hpux_test_and_clear.s include/gc_gcj.h \ + include/gc_local_alloc.h include/private/dbg_mlc.h \ + include/private/specific.h powerpc_macosx_mach_dep.s \ + include/leak_detector.h include/gc_amiga_redirects.h \ + include/gc_pthread_redirects.h $(CORD_SRCS) + +DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \ + doc/README.amiga doc/README.cords doc/debugging.html \ + doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \ + doc/README.sgi doc/README.solaris2 doc/README.uts \ + doc/README.win32 doc/barrett_diagram doc/README \ + doc/README.contributors doc/README.changes doc/gc.man \ + doc/README.environment doc/tree.html doc/gcdescr.html \ + doc/README.autoconf doc/README.macros + +TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \ + tests/leak_test.c tests/thread_leak_test.c + +GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \ + libtool.m4 install-sh configure.host Makefile.in \ + aclocal.m4 config.sub config.guess ltconfig \ + ltmain.sh mkinstalldirs + +OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \ + BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \ + PCR-Makefile SMakefile.amiga Makefile.DLLs \ + digimars.mak Makefile.direct +# Makefile and Makefile.direct are copies of each other. + +OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \ + MacProjects.sit.hqx MacOS.c \ + Mac_files/datastart.c Mac_files/dataend.c \ Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ - add_gc_prefix.c README.solaris2 README.sgi README.hp README.uts \ - win32_threads.c NT_THREADS_MAKEFILE gc.mak README.dj Makefile.dj \ - README.alpha README.linux version.h Makefile.DLLs \ - WCC_MAKEFILE nursery.c nursery.h gc_copy_descr.h \ - include/leak_detector.h + add_gc_prefix.c gc_cpp.cpp win32_threads.c \ + version.h AmigaOS.c \ + $(TESTS) $(GNU_BUILD_FILES) $(OTHER_MAKEFILES) -CORD_INCLUDE_FILES= $(srcdir)/gc.h $(srcdir)/cord/cord.h $(srcdir)/cord/ec.h \ - $(srcdir)/cord/private/cord_pos.h +CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \ + $(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h UTILS= if_mach if_not_there threadlibs @@ -196,7 +288,7 @@ CURSES= -lcurses -ltermlib # the SHELL environment variable. SHELL= /bin/sh -SPECIALCFLAGS = +SPECIALCFLAGS = -I$(srcdir)/include # Alternative flags to the C compiler for mach_dep.c. # Mach_dep.c often doesn't like optimization, and it's # not time-critical anyway. @@ -204,17 +296,47 @@ SPECIALCFLAGS = all: gc.a gctest -pcr: PCR-Makefile gc_private.h gc_hdrs.h gc.h gcconfig.h mach_dep.o $(SRCS) - make -f PCR-Makefile depend - make -f PCR-Makefile - -$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \ - $(srcdir)/gcconfig.h $(srcdir)/gc_typed.h Makefile +BSD-pkg-all: bsd-libgc.a + +bsd-libgc.a: + $(MAKE) CFLAGS="$(CFLAGS)" clean c++-t + mv gc.a bsd-libgc.a + +BSD-pkg-install: BSD-pkg-all + ${CP} bsd-libgc.a libgc.a + ${INSTALL_DATA} libgc.a ${PREFIX}/lib + ${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include + +pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \ +include/private/gc_locks.h include/gc.h include/private/gcconfig.h \ +mach_dep.o $(SRCS) + $(MAKE) -f PCR-Makefile depend + $(MAKE) -f PCR-Makefile + +$(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \ + $(srcdir)/include/private/gc_priv.h \ + $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \ + $(srcdir)/include/gc.h \ + $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \ + Makefile # The dependency on Makefile is needed. Changing # options such as -DSILENT affects the size of GC_arrays, # invalidating all .o files that rely on gc_priv.h -mark.o typd_mlc.o finalize.o: $(srcdir)/gc_mark.h +mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h + +specific.o linux_threads.o: $(srcdir)/include/private/specific.h + +solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h + +dbg_mlc.o gcj_mlc.o: $(srcdir)/include/private/dbg_mlc.h + +tests/test.o: tests $(srcdir)/tests/test.c + $(CC) $(CFLAGS) -c $(srcdir)/tests/test.c + mv test.o tests/test.o + +tests: + mkdir tests base_lib gc.a: $(OBJS) dyn_load.o $(UTILS) echo > base_lib @@ -236,16 +358,22 @@ cords: $(CORD_OBJS) cord/cordtest $(UTILS) ./if_not_there dont_ar_3 $(AR) ru gc.a $(CORD_OBJS) ./if_not_there dont_ar_3 $(RANLIB) gc.a || cat /dev/null -gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/gc_cpp.h $(srcdir)/gc.h Makefile +gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h Makefile $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc -test_cpp: $(srcdir)/test_cpp.cc $(srcdir)/gc_cpp.h gc_cpp.o $(srcdir)/gc.h \ +test_cpp: $(srcdir)/tests/test_cpp.cc $(srcdir)/include/gc_cpp.h gc_cpp.o $(srcdir)/include/gc.h \ base_lib $(UTILS) rm -f test_cpp - ./if_mach HP_PA "" $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o gc.a -ldld - ./if_not_there test_cpp $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o gc.a `./threadlibs` + ./if_mach HP_PA HPUX $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a -ldld `./threadlibs` + ./if_not_there test_cpp $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a `./threadlibs` -c++: gc_cpp.o $(srcdir)/gc_cpp.h test_cpp +c++-t: c++ + ./test_cpp 1 + +c++-nt: c++ + @echo "Use ./test_cpp 1 to test the leak library" + +c++: gc_cpp.o $(srcdir)/include/gc_cpp.h test_cpp rm -f dont_ar_4 ./if_mach SPARC SUNOS5 touch dont_ar_4 ./if_mach SPARC SUNOS5 $(AR) rus gc.a gc_cpp.o @@ -276,7 +404,7 @@ libirixgc.so: $(OBJS) dyn_load.o # Linux shared library version of the collector liblinuxgc.so: $(OBJS) dyn_load.o - gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o -lo + gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o ln liblinuxgc.so libgc.so # Alternative Linux rule. This is preferable, but is likely to break the @@ -292,19 +420,24 @@ liblinuxgc.so: $(OBJS) dyn_load.o # gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo # touch liblinuxgc.so -mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s $(srcdir)/rs6000_mach_dep.s $(UTILS) +mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s \ + $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s $(UTILS) rm -f mach_dep.o ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach RS6000 "" $(AS) -o mach_dep.o $(srcdir)/rs6000_mach_dep.s - ./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.s + ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s +# ./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.s +# alpha_mach_dep.s assumes that pointers are not saved in fp registers. +# Gcc on a 21264 can spill pointers to fp registers. Oops. ./if_mach SPARC SUNOS5 $(AS) -o mach_dep.o $(srcdir)/sparc_mach_dep.s ./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s ./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s + ./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s ./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c -mark_rts.o: $(srcdir)/mark_rts.c if_mach if_not_there $(UTILS) +mark_rts.o: $(srcdir)/mark_rts.c $(UTILS) rm -f mark_rts.o -./if_mach ALPHA OSF1 $(CC) -c $(CFLAGS) -Wo,-notail $(srcdir)/mark_rts.c ./if_not_there mark_rts.o $(CC) -c $(CFLAGS) $(srcdir)/mark_rts.c @@ -313,60 +446,67 @@ mark_rts.o: $(srcdir)/mark_rts.c if_mach if_not_there $(UTILS) alloc.o: version.h -cord/cordbscs.o: $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) +cord: + mkdir cord + +cord/cordbscs.o: cord $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordbscs.c mv cordbscs.o cord/cordbscs.o # not all compilers understand -o filename -cord/cordxtra.o: $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) +cord/cordxtra.o: cord $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordxtra.c mv cordxtra.o cord/cordxtra.o -cord/cordprnt.o: $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) +cord/cordprnt.o: cord $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordprnt.c mv cordprnt.o cord/cordprnt.o cord/cordtest: $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a $(UTILS) rm -f cord/cordtest ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -lucb - ./if_mach HP_PA "" $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld + ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld `./threadlibs` + ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` ./if_not_there cord/cordtest $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` cord/de: $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(UTILS) rm -f cord/de ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs` - ./if_mach HP_PA "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld + ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs` ./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses + ./if_mach POWERPC MACOSX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a ./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` - ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses - ./if_mach M68K AMIGA $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses + ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` + ./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` + ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses ./if_not_there cord/de $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) `./threadlibs` -if_mach: $(srcdir)/if_mach.c $(srcdir)/gcconfig.h - $(CC) $(CFLAGS) -o if_mach $(srcdir)/if_mach.c +if_mach: $(srcdir)/if_mach.c $(srcdir)/include/private/gcconfig.h + $(HOSTCC) $(HOSTCFLAGS) -o if_mach $(srcdir)/if_mach.c -threadlibs: $(srcdir)/threadlibs.c $(srcdir)/gcconfig.h Makefile - $(CC) $(CFLAGS) -o threadlibs $(srcdir)/threadlibs.c +threadlibs: $(srcdir)/threadlibs.c $(srcdir)/include/private/gcconfig.h Makefile + $(HOSTCC) $(HOSTCFLAGS) -o threadlibs $(srcdir)/threadlibs.c if_not_there: $(srcdir)/if_not_there.c - $(CC) $(CFLAGS) -o if_not_there $(srcdir)/if_not_there.c + $(HOSTCC) $(HOSTCFLAGS) -o if_not_there $(srcdir)/if_not_there.c clean: - rm -f gc.a *.o gctest gctest_dyn_link test_cpp \ + rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \ setjmp_test mon.out gmon.out a.out core if_not_there if_mach \ threadlibs $(CORD_OBJS) cord/cordtest cord/de -rm -f *~ -gctest: test.o gc.a if_mach if_not_there +gctest: tests/test.o gc.a $(UTILS) rm -f gctest - ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest test.o gc.a -lucb - ./if_mach HP_PA "" $(CC) $(CFLAGS) -o gctest test.o gc.a -ldld - ./if_not_there gctest $(CC) $(CFLAGS) -o gctest test.o gc.a `./threadlibs` + ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -lucb + ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -ldld `./threadlibs` + ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o gctest tests/test.o gc.a `./threadlibs` + ./if_not_there gctest $(CC) $(CFLAGS) -o gctest tests/test.o gc.a `./threadlibs` # If an optimized setjmp_test generates a segmentation fault, # odds are your compiler is broken. Gctest may still work. # Try compiling setjmp_t.c unoptimized. -setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/gc.h if_mach if_not_there +setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h $(UTILS) $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c test: KandRtest cord/cordtest @@ -377,12 +517,22 @@ KandRtest: setjmp_test gctest ./setjmp_test ./gctest -add_gc_prefix: add_gc_prefix.c +add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h $(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c -gc.tar: $(SRCS) $(OTHER_FILES) add_gc_prefix - ./add_gc_prefix $(SRCS) $(OTHER_FILES) > /tmp/gc.tar-files - (cd $(srcdir)/.. ; tar cvfh - `cat /tmp/gc.tar-files`) > gc.tar +gcname: $(srcdir)/gcname.c $(srcdir)/version.h + $(CC) -o gcname $(srcdir)/gcname.c + +gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix gcname + cp Makefile Makefile.old + cp Makefile.direct Makefile + rm -f `./gcname` + ln -s . `./gcname` + ./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files + tar cvfh gc.tar `cat /tmp/gc.tar-files` + cp gc.tar `./gcname`.tar + gzip `./gcname`.tar + rm `./gcname` pc_gc.tar: $(SRCS) $(OTHER_FILES) tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES) @@ -408,21 +558,23 @@ gc.tar.Z: gc.tar gc.tar.gz: gc.tar gzip gc.tar -lint: $(CSRCS) test.c - lint -DLINT $(CSRCS) test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall|change in ANSI|improper alignment" +lint: $(CSRCS) tests/test.c + lint -DLINT $(CSRCS) tests/test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall|change in ANSI|improper alignment" # BTL: added to test shared library version of collector. # Currently works only under SunOS5. Requires GC_INIT call from statically # loaded client code. ABSDIR = `pwd` -gctest_dyn_link: test.o libgc.so - $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread +gctest_dyn_link: tests/test.o libgc.so + $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link tests/test.o -lgc -ldl -lthread -gctest_irix_dyn_link: test.o libirixgc.so - $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link test.o -lirixgc +gctest_irix_dyn_link: tests/test.o libirixgc.so + $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link tests/test.o -lirixgc -test_dll.o: test.c libgc_globals.h - $(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o +# The following appear to be dead, especially since libgc_globals.h +# is apparently lost. +test_dll.o: tests/test.c libgc_globals.h + $(CC) $(CFLAGS) -DGC_USE_DLL -c tests/test.c -o test_dll.o test_dll: test_dll.o libgc_dll.a libgc.dll $(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll @@ -433,13 +585,13 @@ SYM_PREFIX-libgc=GC # include Makefile.DLLs reserved_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ + for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ sed s/GC_/_GC_/g < $$file > tmp; \ cp tmp $$file; \ done user_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ + for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ sed s/_GC_/GC_/g < $$file > tmp; \ cp tmp $$file; \ done diff --git a/gc/Makefile.am b/gc/Makefile.am @@ -0,0 +1,158 @@ +# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. +# +# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +# OR IMPLIED. ANY USE IS AT YOUR OWN RISK. +# +# Permission is hereby granted to use or copy this program +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. +# +# Original author: Tom Tromey + +## Process this file with automake to produce Makefile.in. + +## FIXME: `make dist' in this directory will not currently work. Many +## files that should be in the distribution are not mentioned in this +## Makefile.am. + +AUTOMAKE_OPTIONS = cygnus + +# Multilib support variables. +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true + +## Install a library built with a cross compiler in tooldir, not +## libdir. +if USE_LIBDIR +toolexeclibdir = $(libdir)$(MULTISUBDIR) +else +toolexecdir = $(exec_prefix)/$(target_alias) +toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) +endif + +toolexeclib_LTLIBRARIES = $(target_all) +EXTRA_LTLIBRARIES = libgc.la +libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ +dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c irix_threads.c \ +linux_threads.c malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \ +obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \ +solaris_pthreads.c solaris_threads.c specific.c stubborn.c typd_mlc.c + +# Include THREADLIBS here to ensure that the correct versions of +# linuxthread semaphore functions get linked: +libgc_la_LIBADD = @addobjs@ $(THREADLIBS) +libgc_la_DEPENDENCIES = @addobjs@ +libgc_la_LDFLAGS = -version-info 1:1:0 -rpath $(toolexeclibdir) + +EXTRA_libgc_la_SOURCES = alpha_mach_dep.s \ +mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_macosx_mach_dep.s \ +rs6000_mach_dep.s sparc_mach_dep.s sparc_netbsd_mach_dep.s \ +sparc_sunos4_mach_dep.s + +AM_CXXFLAGS = @GC_CFLAGS@ +AM_CFLAGS = @GC_CFLAGS@ + +check_PROGRAMS = gctest +# The following hack produces a warning from automake, but we need it in order +# to build a file from a subdirectory. FIXME. +test.o: tests/test.c + $(COMPILE) -c $< +gctest_OBJECTS = test.o +gctest_LDADD = ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) +TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc +TESTS = gctest + +## FIXME: relies on internal code generated by automake. +all_objs = @addobjs@ $(libgc_la_OBJECTS) +$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ +include/private/gc_hdrs.h include/gc.h include/gc_gcj.h include/gc_mark.h + +## FIXME: we shouldn't have to do this, but automake forces us to. +.s.lo: +## We use -Wp,-P to strip #line directives. Irix `as' chokes on +## these. + $(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $< + +## We have our own definition of LTCOMPILE because we want to use our +## CFLAGS, not those passed in from the top level make. +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@ + +AM_CFLAGS = @GC_CFLAGS@ + +# Work around what appears to be a GNU make bug handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS=$(LDFLAGS)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + "PICFLAG=$(PICFLAG)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ + "SHELL=$(SHELL)" \ + "EXPECT=$(EXPECT)" \ + "RUNTEST=$(RUNTEST)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "prefix=$(prefix)" \ + "tooldir=$(tooldir)" \ + "AR=$(AR)" \ + "AS=$(AS)" \ + "CC=$(CC)" \ + "CXX=$(CXX)" \ + "LD=$(LD)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "NM=$(NM)" \ + "PICFLAG=$(PICFLAG)" \ + "RANLIB=$(RANLIB)" \ + "DESTDIR=$(DESTDIR)" + +CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host + +# Multilib support. +.PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \ + maintainer-clean-multi + +all-am: all-multi +install-am: install-multi +mostlyclean-am: mostlyclean-multi +clean-am: clean-multi +distclean-am: distclean-multi +maintainer-clean-am: maintainer-clean-multi + +all-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do +install-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do +mostlyclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean +clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean +distclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean +maintainer-clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean + +MAKEOVERRIDES= diff --git a/gc/Makefile.direct b/gc/Makefile.direct @@ -0,0 +1,597 @@ +# This is the original manually generated Makefile. It may still be used +# to build the collector. +# +# Primary targets: +# gc.a - builds basic library +# c++ - adds C++ interface to library +# cords - adds cords (heavyweight strings) to library +# test - prints porting information, then builds basic version of gc.a, +# and runs some tests of collector and cords. Does not add cords or +# c++ interface to gc.a +# cord/de - builds dumb editor based on cords. +ABI_FLAG= +CC=cc $(ABI_FLAG) +CXX=g++ $(ABI_FLAG) +AS=as $(ABI_FLAG) +# The above doesn't work with gas, which doesn't run cpp. +# Define AS as `gcc -c -x assembler-with-cpp' instead. +# Under Irix 6, you will have to specify the ABI (-o32, -n32, or -64) +# if you use something other than the default ABI on your machine. + +# Redefining srcdir allows object code for the nonPCR version of the collector +# to be generated in different directories. +srcdir= . +VPATH= $(srcdir) + +CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DNO_EXECUTE_PERMISSION -DSILENT -DALL_INTERIOR_POINTERS + +# To build the parallel collector on Linux, add to the above: +# -DGC_LINUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC +# To build the parallel collector n a static library on HP/UX, add to the above: +# -DGC_HPUX_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC -DUSE_HPUX_TLS -D_POSIX_C_SOURCE=199506L + +# HOSTCC and HOSTCFLAGS are used to build executables that will be run as +# part of the build process, i.e. on the build machine. These will usually +# be the same as CC and CFLAGS, except in a cross-compilation environment. +# Note that HOSTCFLAGS should include any -D flags that affect thread support. +HOSTCC=$(CC) +HOSTCFLAGS=$(CFLAGS) + +# For dynamic library builds, it may be necessary to add flags to generate +# PIC code, e.g. -fPIC on Linux. + +# Setjmp_test may yield overly optimistic results when compiled +# without optimization. + +# These define arguments influence the collector configuration: +# -DSILENT disables statistics printing, and improves performance. +# -DFIND_LEAK causes GC_find_leak to be initially set. +# This causes the collector to assume that all inaccessible +# objects should have been explicitly deallocated, and reports exceptions. +# Finalization and the test program are not usable in this mode. +# -DGC_SOLARIS_THREADS enables support for Solaris (thr_) threads. +# (Clients should also define GC_SOLARIS_THREADS and then include +# gc.h before performing thr_ or dl* or GC_ operations.) +# Must also define -D_REENTRANT. +# -DGC_SOLARIS_PTHREADS enables support for Solaris pthreads. +# Define SOLARIS_THREADS as well. +# -DGC_IRIX_THREADS enables support for Irix pthreads. See README.irix. +# -DGC_HPUX_THREADS enables support for HP/UX 11 pthreads. +# Also requires -D_REENTRANT or -D_POSIX_C_SOURCE=199506L. See README.hp. +# -DGC_LINUX_THREADS enables support for Xavier Leroy's Linux threads. +# see README.linux. -D_REENTRANT may also be required. +# -DALL_INTERIOR_POINTERS allows all pointers to the interior +# of objects to be recognized. (See gc_priv.h for consequences.) +# Alternatively, GC_all_interior_pointers can be set at process +# initialization time. +# -DSMALL_CONFIG tries to tune the collector for small heap sizes, +# usually causing it to use less space in such situations. +# Incremental collection no longer works in this case. +# -DLARGE_CONFIG tunes the collector for unusually large heaps. +# Necessary for heaps larger than about 500 MB on most machines. +# Recommended for heaps larger than about 64 MB. +# -DDONT_ADD_BYTE_AT_END is meaningful only with -DALL_INTERIOR_POINTERS or +# GC_all_interior_pointers = 1. Normally -DALL_INTERIOR_POINTERS +# causes all objects to be padded so that pointers just past the end of +# an object can be recognized. This can be expensive. (The padding +# is normally more than one byte due to alignment constraints.) +# -DDONT_ADD_BYTE_AT_END disables the padding. +# -DNO_SIGNALS does not disable signals during critical parts of +# the GC process. This is no less correct than many malloc +# implementations, and it sometimes has a significant performance +# impact. However, it is dangerous for many not-quite-ANSI C +# programs that call things like printf in asynchronous signal handlers. +# This is on by default. Turning it off has not been extensively tested with +# compilers that reorder stores. It should have been. +# -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not +# have execute permission, i.e. it may be impossible to execute +# code from the heap. Currently this only affects the incremental +# collector on UNIX machines. It may greatly improve its performance, +# since this may avoid some expensive cache synchronization. +# -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support +# the new syntax "operator new[]" for allocating and deleting arrays. +# See gc_cpp.h for details. No effect on the C part of the collector. +# This is defined implicitly in a few environments. Must also be defined +# by clients that use gc_cpp.h. +# -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined +# as aliases for X, GC_realloc, and GC_free, respectively. +# Calloc is redefined in terms of the new malloc. X should +# be either GC_malloc or GC_malloc_uncollectable, or +# GC_debug_malloc_replacement. (The latter invokes GC_debug_malloc +# with dummy source location information, but still results in +# properly remembered call stacks on Linux/X86 and Solaris/SPARC.) +# The former is occasionally useful for working around leaks in code +# you don't want to (or can't) look at. It may not work for +# existing code, but it often does. Neither works on all platforms, +# since some ports use malloc or calloc to obtain system memory. +# (Probably works for UNIX, and win32.) +# -DREDIRECT_REALLOC=X causes GC_realloc to be redirected to X. +# The canonical use is -DREDIRECT_REALLOC=GC_debug_realloc_replacement, +# together with -DREDIRECT_MALLOC=GC_debug_malloc_replacement to +# generate leak reports with call stacks for both malloc and realloc. +# -DIGNORE_FREE turns calls to free into a noop. Only useful with +# -DREDIRECT_MALLOC. +# -DNO_DEBUGGING removes GC_dump and the debugging routines it calls. +# Reduces code size slightly at the expense of debuggability. +# -DJAVA_FINALIZATION makes it somewhat safer to finalize objects out of +# order by specifying a nonstandard finalization mark procedure (see +# finalize.c). Objects reachable from finalizable objects will be marked +# in a sepearte postpass, and hence their memory won't be reclaimed. +# Not recommended unless you are implementing a language that specifies +# these semantics. Since 5.0, determines only only the initial value +# of GC_java_finalization variable. +# -DFINALIZE_ON_DEMAND causes finalizers to be run only in response +# to explicit GC_invoke_finalizers() calls. +# In 5.0 this became runtime adjustable, and this only determines the +# initial value of GC_finalize_on_demand. +# -DATOMIC_UNCOLLECTABLE includes code for GC_malloc_atomic_uncollectable. +# This is useful if either the vendor malloc implementation is poor, +# or if REDIRECT_MALLOC is used. +# -DHBLKSIZE=ddd, where ddd is a power of 2 between 512 and 16384, explicitly +# sets the heap block size. Each heap block is devoted to a single size and +# kind of object. For the incremental collector it makes sense to match +# the most likely page size. Otherwise large values result in more +# fragmentation, but generally better performance for large heaps. +# -DUSE_MMAP use MMAP instead of sbrk to get new memory. +# Works for Solaris and Irix. +# -DUSE_MUNMAP causes memory to be returned to the OS under the right +# circumstances. This currently disables VM-based incremental collection. +# This is currently experimental, and works only under some Unix and +# Linux versions. +# -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than +# GC_scratch_alloc() to get stack memory. +# -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever +# the garbage collector detects a value that looks almost, but not quite, +# like a pointer, print both the address containing the value, and the +# value of the near-bogus-pointer. Can be used to identifiy regions of +# memory that are likely to contribute misidentified pointers. +# -DKEEP_BACK_PTRS Add code to save back pointers in debugging headers +# for objects allocated with the debugging allocator. If all objects +# through GC_MALLOC with GC_DEBUG defined, this allows the client +# to determine how particular or randomly chosen objects are reachable +# for debugging/profiling purposes. The gc_backptr.h interface is +# implemented only if this is defined. +# -DGC_ASSERTIONS Enable some internal GC assertion checking. Currently +# this facility is only used in a few places. It is intended primarily +# for debugging of the garbage collector itself, but could also +# -DDBG_HDRS_ALL Make sure that all objects have debug headers. Increases +# the reliability (from 99.9999% to 100%) of some of the debugging +# code (especially KEEP_BACK_PTRS). Makes -DSHORT_DBG_HDRS possible. +# Assumes that all client allocation is done through debugging +# allocators. +# -DSHORT_DBG_HDRS Assume that all objects have debug headers. Shorten +# the headers to minimize object size, at the expense of checking for +# writes past the end of an object. This is intended for environments +# in which most client code is written in a "safe" language, such as +# Scheme or Java. Assumes that all client allocation is done using +# the GC_debug_ functions, or through the macros that expand to these, +# or by redirecting malloc to GC_debug_malloc_replacement. +# (Also eliminates the field for the requested object size.) +# occasionally be useful for debugging of client code. Slows down the +# collector somewhat, but not drastically. +# -DSAVE_CALL_COUNT=<n> Set the number of call frames saved with objects +# allocated through the debugging interface. Affects the amount of +# information generated in leak reports. Only matters on platforms +# on which we can quickly generate call stacks, currently Linux/(X86 & SPARC) +# and Solaris/SPARC. Turns on call chain saving on X86. On X86, client +# code should NOT be compiled with -fomit-frame-pointer. +# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly +# altered stubborn objects, at substantial performance cost. +# Use only for debugging of the incremental collector. +# -DGC_GCJ_SUPPORT includes support for gcj (and possibly other systems +# that include a pointer to a type descriptor in each allocated object). +# Building this way requires an ANSI C compiler. +# -DUSE_I686_PREFETCH causes the collector to issue Pentium III style +# prefetch instructions. No effect except on X86 Linux platforms. +# Assumes a very recent gcc-compatible compiler and assembler. +# (Gas prefetcht0 support was added around May 1999.) +# Empirically the code appears to still run correctly on Pentium II +# processors, though with no performance benefit. May not run on other +# X86 processors? In some cases this improves performance by +# 15% or so. +# -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style +# prefetch instructions. Same restrictions as USE_I686_PREFETCH. +# UNTESTED!! +# -DGC_USE_LD_WRAP in combination with the gld flags listed in README.linux +# causes the collector some system and pthread calls in a more transparent +# fashion than the usual macro-based approach. Requires GNU ld, and +# currently probably works only with Linux. +# -DTHREAD_LOCAL_ALLOC defines GC_local_malloc(), GC_local_malloc_atomic() +# and GC_local_gcj_malloc(). Needed for gc_gcj.h interface. These allocate +# in a way that usually does not involve acquisition of a global lock. +# Currently requires -DGC_LINUX_THREADS, but should be easy to port to +# other pthreads environments. Recommended for multiprocessors. +# -DPARALLEL_MARK allows the marker to run in multiple threads. Recommended +# for multiprocessors. Currently requires Linux on X86 or IA64, though +# support for other Posix platforms should be fairly easy to add, +# if the thread implementation is otherwise supported. +# -DNO_GETENV prevents the collector from looking at environment variables. +# These may otherwise alter its configuration, or turn off GC altogether. +# I don't know of a reason to disable this, except possibly if the +# resulting process runs as a privileged user? +# -DSTUBBORN_ALLOC allows allocation of "hard to change" objects, and thus +# makes incremental collection easier. Was enabled by default until 6.0. +# Rarely used, to my knowledge. +# + +CXXFLAGS= $(CFLAGS) +AR= ar +RANLIB= ranlib + + +OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o gc_dlopen.o + +CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c gc_dlopen.c + +CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC + +CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o + +SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.s \ + sparc_mach_dep.s include/gc.h include/gc_typed.h \ + include/private/gc_hdrs.h include/private/gc_priv.h \ + include/private/gcconfig.h include/private/gc_pmark.h \ + include/gc_inl.h include/gc_inline.h include/gc_mark.h \ + threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \ + gcname.c include/weakpointer.h include/private/gc_locks.h \ + gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \ + include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \ + sparc_netbsd_mach_dep.s \ + include/private/solaris_threads.h include/gc_backptr.h \ + hpux_test_and_clear.s include/gc_gcj.h \ + include/gc_local_alloc.h include/private/dbg_mlc.h \ + include/private/specific.h powerpc_macosx_mach_dep.s \ + include/leak_detector.h include/gc_amiga_redirects.h \ + include/gc_pthread_redirects.h $(CORD_SRCS) + +DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \ + doc/README.amiga doc/README.cords doc/debugging.html \ + doc/README.dj doc/README.hp doc/README.linux doc/README.rs6000 \ + doc/README.sgi doc/README.solaris2 doc/README.uts \ + doc/README.win32 doc/barrett_diagram doc/README \ + doc/README.contributors doc/README.changes doc/gc.man \ + doc/README.environment doc/tree.html doc/gcdescr.html \ + doc/README.autoconf doc/README.macros + +TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \ + tests/leak_test.c tests/thread_leak_test.c + +GNU_BUILD_FILES= configure.in Makefile.am configure acinclude.m4 \ + libtool.m4 install-sh configure.host Makefile.in \ + aclocal.m4 config.sub config.guess ltconfig \ + ltmain.sh mkinstalldirs + +OTHER_MAKEFILES= OS2_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE gc.mak \ + BCC_MAKEFILE EMX_MAKEFILE WCC_MAKEFILE Makefile.dj \ + PCR-Makefile SMakefile.amiga Makefile.DLLs \ + digimars.mak Makefile.direct +# Makefile and Makefile.direct are copies of each other. + +OTHER_FILES= Makefile setjmp_t.c callprocs pc_excludes \ + MacProjects.sit.hqx MacOS.c \ + Mac_files/datastart.c Mac_files/dataend.c \ + Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ + add_gc_prefix.c gc_cpp.cpp win32_threads.c \ + version.h AmigaOS.c \ + $(TESTS) $(GNU_BUILD_FILES) $(OTHER_MAKEFILES) + +CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \ + $(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h + +UTILS= if_mach if_not_there threadlibs + +# Libraries needed for curses applications. Only needed for de. +CURSES= -lcurses -ltermlib + +# The following is irrelevant on most systems. But a few +# versions of make otherwise fork the shell specified in +# the SHELL environment variable. +SHELL= /bin/sh + +SPECIALCFLAGS = -I$(srcdir)/include +# Alternative flags to the C compiler for mach_dep.c. +# Mach_dep.c often doesn't like optimization, and it's +# not time-critical anyway. +# Set SPECIALCFLAGS to -q nodirect_code on Encore. + +all: gc.a gctest + +BSD-pkg-all: bsd-libgc.a + +bsd-libgc.a: + $(MAKE) CFLAGS="$(CFLAGS)" clean c++-t + mv gc.a bsd-libgc.a + +BSD-pkg-install: BSD-pkg-all + ${CP} bsd-libgc.a libgc.a + ${INSTALL_DATA} libgc.a ${PREFIX}/lib + ${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include + +pcr: PCR-Makefile include/private/gc_private.h include/private/gc_hdrs.h \ +include/private/gc_locks.h include/gc.h include/private/gcconfig.h \ +mach_dep.o $(SRCS) + $(MAKE) -f PCR-Makefile depend + $(MAKE) -f PCR-Makefile + +$(OBJS) tests/test.o dyn_load.o dyn_load_sunos53.o: \ + $(srcdir)/include/private/gc_priv.h \ + $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \ + $(srcdir)/include/gc.h \ + $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \ + Makefile +# The dependency on Makefile is needed. Changing +# options such as -DSILENT affects the size of GC_arrays, +# invalidating all .o files that rely on gc_priv.h + +mark.o typd_mlc.o finalize.o ptr_chck.o: $(srcdir)/include/gc_mark.h $(srcdir)/include/private/gc_pmark.h + +specific.o linux_threads.o: $(srcdir)/include/private/specific.h + +solaris_threads.o solaris_pthreads.o: $(srcdir)/include/private/solaris_threads.h + +dbg_mlc.o gcj_mlc.o: $(srcdir)/include/private/dbg_mlc.h + +tests/test.o: tests $(srcdir)/tests/test.c + $(CC) $(CFLAGS) -c $(srcdir)/tests/test.c + mv test.o tests/test.o + +tests: + mkdir tests + +base_lib gc.a: $(OBJS) dyn_load.o $(UTILS) + echo > base_lib + rm -f dont_ar_1 + ./if_mach SPARC SUNOS5 touch dont_ar_1 + ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(OBJS) dyn_load.o + ./if_mach M68K AMIGA touch dont_ar_1 + ./if_mach M68K AMIGA $(AR) -vrus gc.a $(OBJS) dyn_load.o + ./if_not_there dont_ar_1 $(AR) ru gc.a $(OBJS) dyn_load.o + ./if_not_there dont_ar_1 $(RANLIB) gc.a || cat /dev/null +# ignore ranlib failure; that usually means it doesn't exist, and isn't needed + +cords: $(CORD_OBJS) cord/cordtest $(UTILS) + rm -f dont_ar_3 + ./if_mach SPARC SUNOS5 touch dont_ar_3 + ./if_mach SPARC SUNOS5 $(AR) rus gc.a $(CORD_OBJS) + ./if_mach M68K AMIGA touch dont_ar_3 + ./if_mach M68K AMIGA $(AR) -vrus gc.a $(CORD_OBJS) + ./if_not_there dont_ar_3 $(AR) ru gc.a $(CORD_OBJS) + ./if_not_there dont_ar_3 $(RANLIB) gc.a || cat /dev/null + +gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h Makefile + $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc + +test_cpp: $(srcdir)/tests/test_cpp.cc $(srcdir)/include/gc_cpp.h gc_cpp.o $(srcdir)/include/gc.h \ +base_lib $(UTILS) + rm -f test_cpp + ./if_mach HP_PA HPUX $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a -ldld `./threadlibs` + ./if_not_there test_cpp $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a `./threadlibs` + +c++-t: c++ + ./test_cpp 1 + +c++-nt: c++ + @echo "Use ./test_cpp 1 to test the leak library" + +c++: gc_cpp.o $(srcdir)/include/gc_cpp.h test_cpp + rm -f dont_ar_4 + ./if_mach SPARC SUNOS5 touch dont_ar_4 + ./if_mach SPARC SUNOS5 $(AR) rus gc.a gc_cpp.o + ./if_mach M68K AMIGA touch dont_ar_4 + ./if_mach M68K AMIGA $(AR) -vrus gc.a gc_cpp.o + ./if_not_there dont_ar_4 $(AR) ru gc.a gc_cpp.o + ./if_not_there dont_ar_4 $(RANLIB) gc.a || cat /dev/null + ./test_cpp 1 + echo > c++ + +dyn_load_sunos53.o: dyn_load.c + $(CC) $(CFLAGS) -DSUNOS53_SHARED_LIB -c $(srcdir)/dyn_load.c -o $@ + +# SunOS5 shared library version of the collector +sunos5gc.so: $(OBJS) dyn_load_sunos53.o + $(CC) -G -o sunos5gc.so $(OBJS) dyn_load_sunos53.o -ldl + ln sunos5gc.so libgc.so + +# Alpha/OSF shared library version of the collector +libalphagc.so: $(OBJS) + ld -shared -o libalphagc.so $(OBJS) dyn_load.o -lc + ln libalphagc.so libgc.so + +# IRIX shared library version of the collector +libirixgc.so: $(OBJS) dyn_load.o + ld -shared $(ABI_FLAG) -o libirixgc.so $(OBJS) dyn_load.o -lc + ln libirixgc.so libgc.so + +# Linux shared library version of the collector +liblinuxgc.so: $(OBJS) dyn_load.o + gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o + ln liblinuxgc.so libgc.so + +# Alternative Linux rule. This is preferable, but is likely to break the +# Makefile for some non-linux platforms. +# LIBOBJS= $(patsubst %.o, %.lo, $(OBJS)) +# +#.SUFFIXES: .lo $(SUFFIXES) +# +#.c.lo: +# $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c $< -o $@ +# +# liblinuxgc.so: $(LIBOBJS) dyn_load.lo +# gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo +# touch liblinuxgc.so + +mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s \ + $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s $(UTILS) + rm -f mach_dep.o + ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s + ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s + ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s + ./if_mach RS6000 "" $(AS) -o mach_dep.o $(srcdir)/rs6000_mach_dep.s + ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s +# ./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.s +# alpha_mach_dep.s assumes that pointers are not saved in fp registers. +# Gcc on a 21264 can spill pointers to fp registers. Oops. + ./if_mach SPARC SUNOS5 $(AS) -o mach_dep.o $(srcdir)/sparc_mach_dep.s + ./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s + ./if_mach SPARC OPENBSD $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s + ./if_mach SPARC NETBSD $(AS) -o mach_dep.o $(srcdir)/sparc_netbsd_mach_dep.s + ./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c + +mark_rts.o: $(srcdir)/mark_rts.c $(UTILS) + rm -f mark_rts.o + -./if_mach ALPHA OSF1 $(CC) -c $(CFLAGS) -Wo,-notail $(srcdir)/mark_rts.c + ./if_not_there mark_rts.o $(CC) -c $(CFLAGS) $(srcdir)/mark_rts.c +# Work-around for DEC optimizer tail recursion elimination bug. +# The ALPHA-specific line should be removed if gcc is used. + +alloc.o: version.h + +cord: + mkdir cord + +cord/cordbscs.o: cord $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES) + $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordbscs.c + mv cordbscs.o cord/cordbscs.o +# not all compilers understand -o filename + +cord/cordxtra.o: cord $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES) + $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordxtra.c + mv cordxtra.o cord/cordxtra.o + +cord/cordprnt.o: cord $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES) + $(CC) $(CFLAGS) -c -I$(srcdir) $(srcdir)/cord/cordprnt.c + mv cordprnt.o cord/cordprnt.o + +cord/cordtest: $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a $(UTILS) + rm -f cord/cordtest + ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -lucb + ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a -ldld `./threadlibs` + ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` + ./if_not_there cord/cordtest $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) gc.a `./threadlibs` + +cord/de: $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(UTILS) + rm -f cord/de + ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -lucb `./threadlibs` + ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -ldld `./threadlibs` + ./if_mach RS6000 "" $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses + ./if_mach POWERPC MACOSX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a + ./if_mach I386 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` + ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` + ./if_mach IA64 LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses `./threadlibs` + ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses + ./if_not_there cord/de $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) `./threadlibs` + +if_mach: $(srcdir)/if_mach.c $(srcdir)/include/private/gcconfig.h + $(HOSTCC) $(HOSTCFLAGS) -o if_mach $(srcdir)/if_mach.c + +threadlibs: $(srcdir)/threadlibs.c $(srcdir)/include/private/gcconfig.h Makefile + $(HOSTCC) $(HOSTCFLAGS) -o threadlibs $(srcdir)/threadlibs.c + +if_not_there: $(srcdir)/if_not_there.c + $(HOSTCC) $(HOSTCFLAGS) -o if_not_there $(srcdir)/if_not_there.c + +clean: + rm -f gc.a *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \ + setjmp_test mon.out gmon.out a.out core if_not_there if_mach \ + threadlibs $(CORD_OBJS) cord/cordtest cord/de + -rm -f *~ + +gctest: tests/test.o gc.a $(UTILS) + rm -f gctest + ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -lucb + ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o gctest tests/test.o gc.a -ldld `./threadlibs` + ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o gctest tests/test.o gc.a `./threadlibs` + ./if_not_there gctest $(CC) $(CFLAGS) -o gctest tests/test.o gc.a `./threadlibs` + +# If an optimized setjmp_test generates a segmentation fault, +# odds are your compiler is broken. Gctest may still work. +# Try compiling setjmp_t.c unoptimized. +setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h $(UTILS) + $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c + +test: KandRtest cord/cordtest + cord/cordtest + +# Those tests that work even with a K&R C compiler: +KandRtest: setjmp_test gctest + ./setjmp_test + ./gctest + +add_gc_prefix: $(srcdir)/add_gc_prefix.c $(srcdir)/version.h + $(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c + +gcname: $(srcdir)/gcname.c $(srcdir)/version.h + $(CC) -o gcname $(srcdir)/gcname.c + +gc.tar: $(SRCS) $(DOC_FILES) $(OTHER_FILES) add_gc_prefix gcname + cp Makefile Makefile.old + cp Makefile.direct Makefile + rm -f `./gcname` + ln -s . `./gcname` + ./add_gc_prefix $(SRCS) $(DOC_FILES) $(OTHER_FILES) > /tmp/gc.tar-files + tar cvfh gc.tar `cat /tmp/gc.tar-files` + cp gc.tar `./gcname`.tar + gzip `./gcname`.tar + rm `./gcname` + +pc_gc.tar: $(SRCS) $(OTHER_FILES) + tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES) + +floppy: pc_gc.tar + -mmd a:/cord + -mmd a:/cord/private + -mmd a:/include + -mmd a:/include/private + mkdir /tmp/pc_gc + cat pc_gc.tar | (cd /tmp/pc_gc; tar xvf -) + -mcopy -tmn /tmp/pc_gc/* a: + -mcopy -tmn /tmp/pc_gc/cord/* a:/cord + -mcopy -mn /tmp/pc_gc/cord/de_win.ICO a:/cord + -mcopy -tmn /tmp/pc_gc/cord/private/* a:/cord/private + -mcopy -tmn /tmp/pc_gc/include/* a:/include + -mcopy -tmn /tmp/pc_gc/include/private/* a:/include/private + rm -r /tmp/pc_gc + +gc.tar.Z: gc.tar + compress gc.tar + +gc.tar.gz: gc.tar + gzip gc.tar + +lint: $(CSRCS) tests/test.c + lint -DLINT $(CSRCS) tests/test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall|change in ANSI|improper alignment" + +# BTL: added to test shared library version of collector. +# Currently works only under SunOS5. Requires GC_INIT call from statically +# loaded client code. +ABSDIR = `pwd` +gctest_dyn_link: tests/test.o libgc.so + $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link tests/test.o -lgc -ldl -lthread + +gctest_irix_dyn_link: tests/test.o libirixgc.so + $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link tests/test.o -lirixgc + +# The following appear to be dead, especially since libgc_globals.h +# is apparently lost. +test_dll.o: tests/test.c libgc_globals.h + $(CC) $(CFLAGS) -DGC_USE_DLL -c tests/test.c -o test_dll.o + +test_dll: test_dll.o libgc_dll.a libgc.dll + $(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll + +SYM_PREFIX-libgc=GC + +# Uncomment the following line to build a GNU win32 DLL +# include Makefile.DLLs + +reserved_namespace: $(SRCS) + for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ + sed s/GC_/_GC_/g < $$file > tmp; \ + cp tmp $$file; \ + done + +user_namespace: $(SRCS) + for file in $(SRCS) tests/test.c tests/test_cpp.cc; do \ + sed s/_GC_/GC_/g < $$file > tmp; \ + cp tmp $$file; \ + done diff --git a/gc/Makefile.dj b/gc/Makefile.dj @@ -1,3 +1,7 @@ +# This Makefile is intended only for DJGPP use. +# It is mainly a copy of the main Makefile, but tends to get out of sync +# with it. A merge would probably be appropriate. + # Primary targets: # gc.a - builds basic library # libgc.a - builds library for use with g++ "-fgc-keyword" extension @@ -20,29 +24,18 @@ AS=gcc -c -x assembler-with-cpp $(ABI_FLAG) CXXLD=gxx $(ABI_FLAG) EXE_SUFFIX=.exe -CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT +srcdir= . +VPATH= $(srcdir) -# For dynamic library builds, it may be necessary to add flags to generate -# PIC code, e.g. -fPIC on Linux. +CFLAGS= -O -I$(srcdir)/include -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT # Setjmp_test may yield overly optimistic results when compiled # without optimization. # -DSILENT disables statistics printing, and improves performance. -# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly -# altered stubborn objects, at substantial performance cost. -# Use only for incremental collector debugging. -# -DFIND_LEAK causes the collector to assume that all inaccessible +# -DFIND_LEAK causes GC_find_leak to be initially set. +# This causes the collector to assume that all inaccessible # objects should have been explicitly deallocated, and reports exceptions. # Finalization and the test program are not usable in this mode. -# -DSOLARIS_THREADS enables support for Solaris (thr_) threads. -# (Clients should also define SOLARIS_THREADS and then include -# gc.h before performing thr_ or dl* or GC_ operations.) -# Must also define -D_REENTRANT. -# -D_SOLARIS_PTHREADS enables support for Solaris pthreads. -# Define SOLARIS_THREADS as well. -# -DIRIX_THREADS enables support for Irix pthreads. See README.irix. -# -DLINUX_THREADS enables support for Xavier Leroy's Linux threads. -# see README.linux. -D_REENTRANT may also be required. # -DALL_INTERIOR_POINTERS allows all pointers to the interior # of objects to be recognized. (See gc_priv.h for consequences.) # -DSMALL_CONFIG tries to tune the collector for small heap sizes, @@ -62,15 +55,18 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXEC # implementations, and it sometimes has a significant performance # impact. However, it is dangerous for many not-quite-ANSI C # programs that call things like printf in asynchronous signal handlers. +# This is on by default. Turning it off has not been extensively tested with +# compilers that reorder stores. It should have been. # -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not # have execute permission, i.e. it may be impossible to execute # code from the heap. Currently this only affects the incremental # collector on UNIX machines. It may greatly improve its performance, # since this may avoid some expensive cache synchronization. -# -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the -# new syntax "operator new[]" for allocating and deleting arrays. +# -DGC_NO_OPERATOR_NEW_ARRAY declares that the C++ compiler does not support +# the new syntax "operator new[]" for allocating and deleting arrays. # See gc_cpp.h for details. No effect on the C part of the collector. -# This is defined implicitly in a few environments. +# This is defined implicitly in a few environments. Must also be defined +# by clients that use gc_cpp.h. # -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined # as aliases for X, GC_realloc, and GC_free, respectively. # Calloc is redefined in terms of the new malloc. X should @@ -89,9 +85,12 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXEC # finalize.c). Objects reachable from finalizable objects will be marked # in a sepearte postpass, and hence their memory won't be reclaimed. # Not recommended unless you are implementing a language that specifies -# these semantics. +# these semantics. Since 5.0, determines only only the initial value +# of GC_java_finalization variable. # -DFINALIZE_ON_DEMAND causes finalizers to be run only in response # to explicit GC_invoke_finalizers() calls. +# In 5.0 this became runtime adjustable, and this only determines the +# initial value of GC_finalize_on_demand. # -DATOMIC_UNCOLLECTABLE includes code for GC_malloc_atomic_uncollectable. # This is useful if either the vendor malloc implementation is poor, # or if REDIRECT_MALLOC is used. @@ -100,76 +99,100 @@ CFLAGS= -O -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXEC # kind of object. For the incremental collector it makes sense to match # the most likely page size. Otherwise large values result in more # fragmentation, but generally better performance for large heaps. -# -DUSE_MMAP use MMAP instead of sbrk to get new memory. -# Works for Solaris and Irix. -# -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than -# GC_scratch_alloc() to get stack memory. # -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever # the garbage collector detects a value that looks almost, but not quite, # like a pointer, print both the address containing the value, and the # value of the near-bogus-pointer. Can be used to identifiy regions of # memory that are likely to contribute misidentified pointers. -# -DOLD_BLOCK_ALLOC Use the old, possibly faster, large block -# allocation strategy. The new strategy tries harder to minimize -# fragmentation, sometimes at the expense of spending more time in the -# large block allocator and/or collecting more frequently. -# If you expect the allocator to promtly use an explicitly expanded -# heap, this is highly recommended. -# - - +# -DKEEP_BACK_PTRS Add code to save back pointers in debugging headers +# for objects allocated with the debugging allocator. If all objects +# through GC_MALLOC with GC_DEBUG defined, this allows the client +# to determine how particular or randomly chosen objects are reachable +# for debugging/profiling purposes. The gc_backptr.h interface is +# implemented only if this is defined. +# -DGC_ASSERTIONS Enable some internal GC assertion checking. Currently +# this facility is only used in a few places. It is intended primarily +# for debugging of the garbage collector itself, but could also +# -DDBG_HDRS_ALL Make sure that all objects have debug headers. Increases +# the reliability (from 99.9999% to 100%) of some of the debugging +# code (especially KEEP_BACK_PTRS). Makes -DSHORT_DBG_HDRS possible. +# Assumes that all client allocation is done through debugging +# allocators. +# -DSHORT_DBG_HDRS Assume that all objects have debug headers. Shorten +# the headers to minimize object size, at the expense of checking for +# writes past the end of an object. This is intended for environments +# in which most client code is written in a "safe" language, such as +# Scheme or Java. Assumes that all client allocation is done using +# the GC_debug_ functions (or through the macros that expand to these. +# (Also eliminates the field for the requested object size.) +# occasionally be useful for debugging of client code. Slows down the +# collector somewhat, but not drastically. +# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly +# altered stubborn objects, at substantial performance cost. +# Use only for debugging of the incremental collector. +# -DGC_GCJ_SUPPORT includes support for gcj (and possibly other systems +# that include a pointer to a type descriptor in each allocated object). +# Building this way requires an ANSI C compiler. +# -DUSE_I686_PREFETCH causes the collector to issue Pentium III style +# prefetch instructions. No effect except on X86 Linux platforms. +# Assumes a very recent gcc-compatible compiler and assembler. +# (Gas prefetcht0 support was added around May 1999.) +# Empirically the code appears to still run correctly on Pentium II +# processors, though with no performance benefit. May not run on other +# X86 processors? In some cases this improves performance by +# 15% or so. +# -DUSE_3DNOW_PREFETCH causes the collector to issue AMD 3DNow style +# prefetch instructions. Same restrictions as USE_I686_PREFETCH. +# UNTESTED!! +# -DGC_USE_LD_WRAP in combination with the gld flags listed in README.linux +# causes the collector some system and pthread calls in a more transparent +# fashion than the usual macro-based approach. Requires GNU ld, and +# currently probably works only with Linux. -LIBGC_CFLAGS= -O -DNO_SIGNALS -DSILENT \ - -DREDIRECT_MALLOC=GC_malloc_uncollectable \ - -DDONT_ADD_BYTE_AT_END -DALL_INTERIOR_POINTERS -# Flags for building libgc.a -- the last two are required. CXXFLAGS= $(CFLAGS) -DOPERATOR_NEW_ARRAY AR= ar RANLIB= ranlib -# Redefining srcdir allows object code for the nonPCR version of the collector -# to be generated in different directories. In this case, the destination directory -# should contain a copy of the original include directory. -srcdir = . -VPATH = $(srcdir) - -OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o +OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o hpux_irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o gcj_mlc.o specific.o -CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c +CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c hpux_irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c gcj_mlc.c specific.c -CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c cord/cord.h cord/ec.h cord/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga +CORD_SRCS= cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c include/cord.h include/ec.h include/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga CORD_OBJS= cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.s \ - sparc_mach_dep.s gc.h gc_typed.h gc_hdrs.h gc_priv.h gc_private.h \ - gcconfig.h gc_mark.h include/gc_inl.h include/gc_inline.h gc.man \ - threadlibs.c if_mach.c if_not_there.c gc_cpp.cc gc_cpp.h weakpointer.h \ - gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h gc_alloc.h \ + sparc_mach_dep.s include/gc.h include/gc_typed.h \ + include/private/gc_hdrs.h include/private/gc_priv.h \ + include/private/gcconfig.h include/private/gc_mark.h \ + include/gc_inl.h include/gc_inline.h gc.man \ + threadlibs.c if_mach.c if_not_there.c gc_cpp.cc include/gc_cpp.h \ + include/weakpointer.h include/private/gc_locks.h \ + gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h \ include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \ - solaris_threads.h $(CORD_SRCS) + include/private/solaris_threads.h include/gc_backptr.h \ + hpux_test_and_clear.s include/gc_gcj.h \ + include/gc_local_alloc.h include/private/dbg_mlc.h \ + include/private/specific.h powerpc_macosx_mach_dep.s \ + include/leak_detector.h $(CORD_SRCS) OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \ README test.c test_cpp.cc setjmp_t.c SMakefile.amiga \ SCoptions.amiga README.amiga README.win32 cord/README \ - cord/gc.h include/gc.h include/gc_typed.h include/cord.h \ - include/ec.h include/private/cord_pos.h include/private/gcconfig.h \ - include/private/gc_hdrs.h include/private/gc_priv.h \ - include/gc_cpp.h README.rs6000 \ - include/weakpointer.h README.QUICK callprocs pc_excludes \ + README.rs6000 README.QUICK callprocs pc_excludes \ barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \ - MacOS.c EMX_MAKEFILE makefile.depend README.debugging \ - include/gc_cpp.h Mac_files/datastart.c Mac_files/dataend.c \ + MacOS.c EMX_MAKEFILE README.debugging \ + Mac_files/datastart.c Mac_files/dataend.c \ Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ add_gc_prefix.c README.solaris2 README.sgi README.hp README.uts \ win32_threads.c NT_THREADS_MAKEFILE gc.mak README.dj Makefile.dj \ - README.alpha README.linux version.h Makefile.DLLs \ - WCC_MAKEFILE + README.alpha README.linux README.MacOSX version.h Makefile.DLLs \ + WCC_MAKEFILE nursery.c include/gc_nursery.h include/gc_copy_descr.h -CORD_INCLUDE_FILES= $(srcdir)/gc.h $(srcdir)/cord/cord.h $(srcdir)/cord/ec.h \ - $(srcdir)/cord/private/cord_pos.h +CORD_INCLUDE_FILES= $(srcdir)/include/gc.h $(srcdir)/include/cord.h \ + $(srcdir)/include/ec.h $(srcdir)/include/private/cord_pos.h UTILS= if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) @@ -189,12 +212,12 @@ SPECIALCFLAGS = all: gc.a gctest$(EXE_SUFFIX) -pcr: PCR-Makefile gc_private.h gc_hdrs.h gc.h gcconfig.h mach_dep.o $(SRCS) - make -f PCR-Makefile depend - make -f PCR-Makefile - -$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \ - $(srcdir)/gcconfig.h $(srcdir)/gc_typed.h Makefile +$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: \ + $(srcdir)/include/private/gc_priv.h \ + $(srcdir)/include/private/gc_hdrs.h $(srcdir)/include/private/gc_locks.h \ + $(srcdir)/include/gc.h \ + $(srcdir)/include/private/gcconfig.h $(srcdir)/include/gc_typed.h \ + Makefile # The dependency on Makefile is needed. Changing # options such as -DSILENT affects the size of GC_arrays, # invalidating all .o files that rely on gc_priv.h @@ -217,17 +240,17 @@ cords: $(CORD_OBJS) cord/cordtest$(EXE_SUFFIX) $(UTILS) ./if_not_there on_sparc_sunos5_3 $(AR) ru gc.a $(CORD_OBJS) -./if_not_there on_sparc_sunos5_3 $(RANLIB) gc.a -gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/gc_cpp.h $(srcdir)/gc.h Makefile +gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h Makefile $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc -test_cpp$(EXE_SUFFIX): $(srcdir)/test_cpp.cc $(srcdir)/gc_cpp.h gc_cpp.o $(srcdir)/gc.h \ +test_cpp$(EXE_SUFFIX): $(srcdir)/test_cpp.cc $(srcdir)/include/gc_cpp.h gc_cpp.o $(srcdir)/include/gc.h \ base_lib $(UTILS) rm -f test_cpp test_cpp$(EXE_SUFFIX) ./if_mach HP_PA "" $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o gc.a -ldld ./if_not_there test_cpp$(EXE_SUFFIX) $(CXXLD) $(CXXFLAGS) -o test_cpp$(EXE_SUFFIX) $(srcdir)/test_cpp.cc gc_cpp.o gc.a rm -f test_cpp -c++: gc_cpp.o $(srcdir)/gc_cpp.h test_cpp$(EXE_SUFFIX) +c++: gc_cpp.o $(srcdir)/include/gc_cpp.h test_cpp$(EXE_SUFFIX) rm -f on_sparc_sunos5_4 ./if_mach SPARC SUNOS5 touch on_sparc_sunos5_4 ./if_mach SPARC SUNOS5 $(AR) rus gc.a gc_cpp.o @@ -259,12 +282,14 @@ liblinuxgc.so: $(OBJS) dyn_load.o gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o -lo ln liblinuxgc.so libgc.so -mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s $(srcdir)/rs6000_mach_dep.s $(UTILS) +mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s \ + $(srcdir)/rs6000_mach_dep.s $(srcdir)/powerpc_macosx_mach_dep.s $(UTILS) rm -f mach_dep.o ./if_mach MIPS IRIX5 $(AS) -o mach_dep.o $(srcdir)/mips_sgi_mach_dep.s ./if_mach MIPS RISCOS $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach MIPS ULTRIX $(AS) -o mach_dep.o $(srcdir)/mips_ultrix_mach_dep.s ./if_mach RS6000 "" $(AS) -o mach_dep.o $(srcdir)/rs6000_mach_dep.s + ./if_mach POWERPC MACOSX $(AS) -o mach_dep.o $(srcdir)/powerpc_macosx_mach_dep.s ./if_mach ALPHA "" $(AS) -o mach_dep.o $(srcdir)/alpha_mach_dep.s ./if_mach SPARC SUNOS5 $(AS) -o mach_dep.o $(srcdir)/sparc_mach_dep.s ./if_mach SPARC SUNOS4 $(AS) -o mach_dep.o $(srcdir)/sparc_sunos4_mach_dep.s @@ -312,20 +337,17 @@ cord/de$(EXE_SUFFIX): $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $ ./if_mach ALPHA LINUX $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses ./if_not_there cord/de$(EXE_SUFFIX) $(CC) $(CFLAGS) -o cord/de$(EXE_SUFFIX) $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) -if_mach$(EXE_SUFFIX): $(srcdir)/if_mach.c $(srcdir)/gcconfig.h +if_mach$(EXE_SUFFIX): $(srcdir)/if_mach.c $(srcdir)/include/private/gcconfig.h rm -f if_mach if_mach$(EXE_SUFFIX) $(CC) $(CFLAGS) -o if_mach $(srcdir)/if_mach.c - rm -f if_mach -threadlibs$(EXE_SUFFIX): $(srcdir)/threadlibs.c $(srcdir)/gcconfig.h Makefile +threadlibs$(EXE_SUFFIX): $(srcdir)/threadlibs.c $(srcdir)include/private/gcconfig.h Makefile rm -f threadlibs threadlibs$(EXE_SUFFIX) $(CC) $(CFLAGS) -o threadlibs $(srcdir)/threadlibs.c - rm -f threadlibs if_not_there$(EXE_SUFFIX): $(srcdir)/if_not_there.c rm -f if_not_there if_not_there$(EXE_SUFFIX) $(CC) $(CFLAGS) -o if_not_there $(srcdir)/if_not_there.c - rm -f if_not_there # Clean removes *.o several times, # because as the first one doesn't seem to get them all! @@ -352,7 +374,7 @@ gctest$(EXE_SUFFIX): test.o gc.a if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) # If an optimized setjmp_test generates a segmentation fault, # odds are your compiler is broken. Gctest may still work. # Try compiling setjmp_t.c unoptimized. -setjmp_test$(EXE_SUFFIX): $(srcdir)/setjmp_t.c $(srcdir)/gc.h \ +setjmp_test$(EXE_SUFFIX): $(srcdir)/setjmp_t.c $(srcdir)/include/gc.h \ if_mach$(EXE_SUFFIX) if_not_there$(EXE_SUFFIX) rm -f setjmp_test$(EXE_SUFFIX) $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c @@ -377,21 +399,6 @@ gc.tar: $(SRCS) $(OTHER_FILES) add_gc_prefix pc_gc.tar: $(SRCS) $(OTHER_FILES) tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES) -floppy: pc_gc.tar - -mmd a:/cord - -mmd a:/cord/private - -mmd a:/include - -mmd a:/include/private - mkdir /tmp/pc_gc - cat pc_gc.tar | (cd /tmp/pc_gc; tar xvf -) - -mcopy -tmn /tmp/pc_gc/* a: - -mcopy -tmn /tmp/pc_gc/cord/* a:/cord - -mcopy -mn /tmp/pc_gc/cord/de_win.ICO a:/cord - -mcopy -tmn /tmp/pc_gc/cord/private/* a:/cord/private - -mcopy -tmn /tmp/pc_gc/include/* a:/include - -mcopy -tmn /tmp/pc_gc/include/private/* a:/include/private - rm -r /tmp/pc_gc - gc.tar.Z: gc.tar compress gc.tar @@ -408,9 +415,6 @@ ABSDIR = `pwd` gctest_dyn_link: test.o libgc.so $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread -gctest_irix_dyn_link: test.o libirixgc.so - $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link test.o -lirixgc - test_dll.o: test.c libgc_globals.h $(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o @@ -422,15 +426,3 @@ SYM_PREFIX-libgc=GC # Uncomment the following line to build a GNU win32 DLL # include Makefile.DLLs -reserved_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ - sed s/GC_/_GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done - -user_namespace: $(SRCS) - for file in $(SRCS) test.c test_cpp.cc; do \ - sed s/_GC_/GC_/g < $$file > tmp; \ - cp tmp $$file; \ - done - diff --git a/gc/Makefile.in b/gc/Makefile.in @@ -0,0 +1,518 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. +# +# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +# OR IMPLIED. ANY USE IS AT YOUR OWN RISK. +# +# Permission is hereby granted to use or copy this program +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. +# +# Original author: Tom Tromey + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +AR = @AR@ +AS = @AS@ +CC = @CC@ +CPP = @CPP@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXINCLUDES = @CXXINCLUDES@ +DLLTOOL = @DLLTOOL@ +EXEEXT = @EXEEXT@ +EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@ +GCJ = @GCJ@ +GCJFLAGS = @GCJFLAGS@ +GC_CFLAGS = @GC_CFLAGS@ +INCLUDES = @INCLUDES@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MY_CFLAGS = @MY_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +STRIP = @STRIP@ +THREADLIBS = @THREADLIBS@ +VERSION = @VERSION@ +addobjs = @addobjs@ +gc_basedir = @gc_basedir@ +target_all = @target_all@ + +AUTOMAKE_OPTIONS = cygnus + +# Multilib support variables. +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true +@USE_LIBDIR_TRUE@toolexeclibdir = $(libdir)$(MULTISUBDIR) +@USE_LIBDIR_FALSE@toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) +@USE_LIBDIR_FALSE@toolexecdir = $(exec_prefix)/$(target_alias) + +toolexeclib_LTLIBRARIES = $(target_all) +EXTRA_LTLIBRARIES = libgc.la +libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c irix_threads.c linux_threads.c malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c solaris_pthreads.c solaris_threads.c specific.c stubborn.c typd_mlc.c + + +# Include THREADLIBS here to ensure that the correct versions of +# linuxthread semaphore functions get linked: +libgc_la_LIBADD = @addobjs@ $(THREADLIBS) +libgc_la_DEPENDENCIES = @addobjs@ +libgc_la_LDFLAGS = -version-info 1:1:0 -rpath $(toolexeclibdir) + +EXTRA_libgc_la_SOURCES = alpha_mach_dep.s mips_sgi_mach_dep.s mips_ultrix_mach_dep.s powerpc_macosx_mach_dep.s rs6000_mach_dep.s sparc_mach_dep.s sparc_netbsd_mach_dep.s sparc_sunos4_mach_dep.s + + +AM_CXXFLAGS = @GC_CFLAGS@ + +AM_CFLAGS = @GC_CFLAGS@ + +check_PROGRAMS = gctest +gctest_OBJECTS = test.o +gctest_LDADD = ./libgc.la $(THREADLIBS) $(EXTRA_TEST_LIBS) +TESTS_ENVIRONMENT = LD_LIBRARY_PATH=../../$(MULTIBUILDTOP)gcc +TESTS = gctest + +all_objs = @addobjs@ $(libgc_la_OBJECTS) + +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(MY_CFLAGS) $(GC_CFLAGS) + +LINK = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(MY_CFLAGS) $(LDFLAGS) -o $@ + +# Work around what appears to be a GNU make bug handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = "AR_FLAGS=$(AR_FLAGS)" "CC_FOR_BUILD=$(CC_FOR_BUILD)" "CFLAGS=$(CFLAGS)" "CXXFLAGS=$(CXXFLAGS)" "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" "INSTALL=$(INSTALL)" "INSTALL_DATA=$(INSTALL_DATA)" "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" "LDFLAGS=$(LDFLAGS)" "LIBCFLAGS=$(LIBCFLAGS)" "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" "MAKE=$(MAKE)" "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" "PICFLAG=$(PICFLAG)" "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" "SHELL=$(SHELL)" "EXPECT=$(EXPECT)" "RUNTEST=$(RUNTEST)" "RUNTESTFLAGS=$(RUNTESTFLAGS)" "exec_prefix=$(exec_prefix)" "infodir=$(infodir)" "libdir=$(libdir)" "prefix=$(prefix)" "tooldir=$(tooldir)" "AR=$(AR)" "AS=$(AS)" "CC=$(CC)" "CXX=$(CXX)" "LD=$(LD)" "LIBCFLAGS=$(LIBCFLAGS)" "NM=$(NM)" "PICFLAG=$(PICFLAG)" "RANLIB=$(RANLIB)" "DESTDIR=$(DESTDIR)" + + +CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host + +MAKEOVERRIDES = +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(toolexeclib_LTLIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +libgc_la_OBJECTS = allchblk.lo alloc.lo blacklst.lo checksums.lo \ +dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo \ +irix_threads.lo linux_threads.lo malloc.lo mallocx.lo mark.lo \ +mark_rts.lo misc.lo new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo \ +ptr_chck.lo real_malloc.lo reclaim.lo solaris_pthreads.lo \ +solaris_threads.lo specific.lo stubborn.lo typd_mlc.lo +check_PROGRAMS = gctest$(EXEEXT) +gctest_DEPENDENCIES = ./libgc.la +gctest_LDFLAGS = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +DIST_COMMON = Makefile.am Makefile.in acinclude.m4 aclocal.m4 \ +config.guess config.sub configure configure.in install-sh ltconfig \ +ltmain.sh + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +SOURCES = $(libgc_la_SOURCES) $(EXTRA_libgc_la_SOURCES) +OBJECTS = $(libgc_la_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .obj .s +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +mostlyclean-toolexeclibLTLIBRARIES: + +clean-toolexeclibLTLIBRARIES: + -test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES) + +distclean-toolexeclibLTLIBRARIES: + +maintainer-clean-toolexeclibLTLIBRARIES: + +install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) + @list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \ + $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \ + else :; fi; \ + done + +uninstall-toolexeclibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \ + done + +.c.o: + $(COMPILE) -c $< + +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + -rm -f *.$(OBJEXT) + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libgc.la: $(libgc_la_OBJECTS) $(libgc_la_DEPENDENCIES) + $(LINK) $(libgc_la_LDFLAGS) $(libgc_la_OBJECTS) $(libgc_la_LIBADD) $(LIBS) + +mostlyclean-checkPROGRAMS: + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +distclean-checkPROGRAMS: + +maintainer-clean-checkPROGRAMS: + +gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) + @rm -f gctest$(EXEEXT) + $(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +check-TESTS: $(TESTS) + @failed=0; all=0; \ + srcdir=$(srcdir); export srcdir; \ + for tst in $(TESTS); do \ + if test -f $$tst; then dir=.; \ + else dir="$(srcdir)"; fi; \ + if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \ + all=`expr $$all + 1`; \ + echo "PASS: $$tst"; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="$$failed of $$all tests failed"; \ + fi; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0 +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +installcheck-am: +installcheck: installcheck-am +install-info-am: +install-info: install-info-am +install-exec-am: install-toolexeclibLTLIBRARIES +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-toolexeclibLTLIBRARIES +uninstall: uninstall-am +all-am: Makefile $(LTLIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(toolexeclibdir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-toolexeclibLTLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-checkPROGRAMS \ + mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-toolexeclibLTLIBRARIES clean-compile clean-libtool \ + clean-checkPROGRAMS clean-tags clean-generic \ + mostlyclean-am + +clean: clean-am + +distclean-am: distclean-toolexeclibLTLIBRARIES distclean-compile \ + distclean-libtool distclean-checkPROGRAMS \ + distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + -rm -f config.status + +maintainer-clean-am: maintainer-clean-toolexeclibLTLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-checkPROGRAMS maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + -rm -f config.status + +.PHONY: mostlyclean-toolexeclibLTLIBRARIES \ +distclean-toolexeclibLTLIBRARIES clean-toolexeclibLTLIBRARIES \ +maintainer-clean-toolexeclibLTLIBRARIES \ +uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool mostlyclean-checkPROGRAMS \ +distclean-checkPROGRAMS clean-checkPROGRAMS \ +maintainer-clean-checkPROGRAMS tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir check-TESTS info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-info-am \ +install-info install-exec-am install-exec install-data-am install-data \ +install-am install uninstall-am uninstall all-redirect all-am all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + +# The following hack produces a warning from automake, but we need it in order +# to build a file from a subdirectory. FIXME. +test.o: tests/test.c + $(COMPILE) -c tests/test.c +$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ +include/private/gc_hdrs.h include/gc.h include/gc_gcj.h include/gc_mark.h + +.s.lo: + $(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $< + +# Multilib support. +.PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \ + maintainer-clean-multi + +all-am: all-multi +install-am: install-multi +mostlyclean-am: mostlyclean-multi +clean-am: clean-multi +distclean-am: distclean-multi +maintainer-clean-am: maintainer-clean-multi + +all-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do +install-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do +mostlyclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean +clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean +distclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean +maintainer-clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gc/NT_MAKEFILE b/gc/NT_MAKEFILE @@ -10,29 +10,29 @@ OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_r all: gctest.exe cord\de.exe test_cpp.exe .c.obj: - $(cc) $(cdebug) $(cflags) $(cvars) -DSMALL_CONFIG -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ $*.c /Fo$*.obj + $(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL $*.c /Fo$*.obj .cpp.obj: - $(cc) $(cdebug) $(cflags) $(cvars) -DSMALL_CONFIG -DSILENT -DALL_INTERIOR_POINTERS $*.CPP /Fo$*.obj + $(cc) $(cdebug) $(cflags) $(cvars) -Iinclude -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $*.CPP /Fo$*.obj -$(OBJS) test.obj: gc_priv.h gc_hdrs.h gc.h +$(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h gc.lib: $(OBJS) lib /MACHINE:i386 /out:gc.lib $(OBJS) # The original NT SDK used lib32 instead of lib -gctest.exe: test.obj gc.lib +gctest.exe: tests\test.obj gc.lib # The following works for win32 debugging. For win32s debugging use debugtype:coff # and add mapsympe line. # This produces a "GUI" applications that opens no windows and writes to the log file # "gc.log". This is done to make the result runnable under win32s. - $(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe test.obj $(guilibs) gc.lib + $(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe tests\test.obj $(guilibs) gc.lib # mapsympe -n -o gctest.sym gctest.exe cord\de_win.rbj: cord\de_win.res cvtres -$(CPU) cord\de_win.res -o cord\de_win.rbj -cord\de.obj cord\de_win.obj: cord\cord.h cord\private\cord_pos.h cord\de_win.h cord\de_cmds.h +cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h $(rc) $(rcvars) -r -fo cord\de_win.res $(cvars) cord\de_win.rc @@ -41,18 +41,18 @@ cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:cord\de.exe cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(guilibs) -gc_cpp.obj: gc_cpp.h gc.h +gc_cpp.obj: include\gc_cpp.h include\gc.h gc_cpp.cpp: gc_cpp.cc copy gc_cpp.cc gc_cpp.cpp -test_cpp.cpp: test_cpp.cc - copy test_cpp.cc test_cpp.cpp +test_cpp.cpp: tests\test_cpp.cc + copy tests\test_cpp.cc test_cpp.cpp # This generates the C++ test executable. The executable expects # a single numeric argument, which is the number of iterations. # The output appears in the file "gc.log". -test_cpp.exe: test_cpp.obj gc_cpp.h gc.h gc.lib +test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib $(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:test_cpp.exe test_cpp.obj gc.lib $(guilibs) diff --git a/gc/NT_THREADS_MAKEFILE b/gc/NT_THREADS_MAKEFILE @@ -0,0 +1,2158 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.10 +# This has been hand-edited way too many times. +# A clean, manually generated makefile would be an improvement. + +# TARGTYPE "Win32 (x86) Application" 0x0101 +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=gctest - Win32 Release +!MESSAGE No configuration specified. Defaulting to cord - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "gc - Win32 Release" && "$(CFG)" != "gc - Win32 Debug" &&\ + "$(CFG)" != "gctest - Win32 Release" && "$(CFG)" != "gctest - Win32 Debug" &&\ + "$(CFG)" != "cord - Win32 Release" && "$(CFG)" != "cord - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gc.mak" CFG="cord - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "gc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "gctest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "gctest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE "cord - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "cord - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "gctest - Win32 Debug" + +!IF "$(CFG)" == "gc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : ".\Release\gc.dll" ".\Release\gc.bsc" + +CLEAN : + -@erase ".\Release\allchblk.obj" + -@erase ".\Release\allchblk.sbr" + -@erase ".\Release\alloc.obj" + -@erase ".\Release\alloc.sbr" + -@erase ".\Release\blacklst.obj" + -@erase ".\Release\blacklst.sbr" + -@erase ".\Release\checksums.obj" + -@erase ".\Release\checksums.sbr" + -@erase ".\Release\dbg_mlc.obj" + -@erase ".\Release\dbg_mlc.sbr" + -@erase ".\Release\dyn_load.obj" + -@erase ".\Release\dyn_load.sbr" + -@erase ".\Release\finalize.obj" + -@erase ".\Release\finalize.sbr" + -@erase ".\Release\gc.bsc" + -@erase ".\Release\gc_cpp.obj" + -@erase ".\Release\gc_cpp.sbr" + -@erase ".\Release\gc.dll" + -@erase ".\Release\gc.exp" + -@erase ".\Release\gc.lib" + -@erase ".\Release\headers.obj" + -@erase ".\Release\headers.sbr" + -@erase ".\Release\mach_dep.obj" + -@erase ".\Release\mach_dep.sbr" + -@erase ".\Release\malloc.obj" + -@erase ".\Release\malloc.sbr" + -@erase ".\Release\mallocx.obj" + -@erase ".\Release\mallocx.sbr" + -@erase ".\Release\mark.obj" + -@erase ".\Release\mark.sbr" + -@erase ".\Release\mark_rts.obj" + -@erase ".\Release\mark_rts.sbr" + -@erase ".\Release\misc.obj" + -@erase ".\Release\misc.sbr" + -@erase ".\Release\new_hblk.obj" + -@erase ".\Release\new_hblk.sbr" + -@erase ".\Release\obj_map.obj" + -@erase ".\Release\obj_map.sbr" + -@erase ".\Release\os_dep.obj" + -@erase ".\Release\os_dep.sbr" + -@erase ".\Release\ptr_chck.obj" + -@erase ".\Release\ptr_chck.sbr" + -@erase ".\Release\reclaim.obj" + -@erase ".\Release\reclaim.sbr" + -@erase ".\Release\stubborn.obj" + -@erase ".\Release\stubborn.sbr" + -@erase ".\Release\typd_mlc.obj" + -@erase ".\Release\typd_mlc.sbr" + -@erase ".\Release\win32_threads.obj" + -@erase ".\Release\win32_threads.sbr" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "SILENT" /D "GC_BUILD" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "WIN32_THREADS" /FR /YX /c +CPP_PROJ=/nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "SILENT" /D "GC_BUILD" /D\ + "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D\ + "WIN32_THREADS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/gc.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\Release/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +MTL=mktyplib.exe +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +RSC=rc.exe +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/gc.bsc" +BSC32_SBRS= \ + ".\Release\allchblk.sbr" \ + ".\Release\alloc.sbr" \ + ".\Release\blacklst.sbr" \ + ".\Release\checksums.sbr" \ + ".\Release\dbg_mlc.sbr" \ + ".\Release\dyn_load.sbr" \ + ".\Release\finalize.sbr" \ + ".\Release\gc_cpp.sbr" \ + ".\Release\headers.sbr" \ + ".\Release\mach_dep.sbr" \ + ".\Release\malloc.sbr" \ + ".\Release\mallocx.sbr" \ + ".\Release\mark.sbr" \ + ".\Release\mark_rts.sbr" \ + ".\Release\misc.sbr" \ + ".\Release\new_hblk.sbr" \ + ".\Release\obj_map.sbr" \ + ".\Release\os_dep.sbr" \ + ".\Release\ptr_chck.sbr" \ + ".\Release\reclaim.sbr" \ + ".\Release\stubborn.sbr" \ + ".\Release\typd_mlc.sbr" \ + ".\Release\win32_threads.sbr" + +".\Release\gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/gc.pdb" /machine:I386 /out:"$(OUTDIR)/gc.dll"\ + /implib:"$(OUTDIR)/gc.lib" +LINK32_OBJS= \ + ".\Release\allchblk.obj" \ + ".\Release\alloc.obj" \ + ".\Release\blacklst.obj" \ + ".\Release\checksums.obj" \ + ".\Release\dbg_mlc.obj" \ + ".\Release\dyn_load.obj" \ + ".\Release\finalize.obj" \ + ".\Release\gc_cpp.obj" \ + ".\Release\headers.obj" \ + ".\Release\mach_dep.obj" \ + ".\Release\malloc.obj" \ + ".\Release\mallocx.obj" \ + ".\Release\mark.obj" \ + ".\Release\mark_rts.obj" \ + ".\Release\misc.obj" \ + ".\Release\new_hblk.obj" \ + ".\Release\obj_map.obj" \ + ".\Release\os_dep.obj" \ + ".\Release\ptr_chck.obj" \ + ".\Release\reclaim.obj" \ + ".\Release\stubborn.obj" \ + ".\Release\typd_mlc.obj" \ + ".\Release\win32_threads.obj" + +".\Release\gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +OUTDIR=.\Debug +INTDIR=.\Debug + +ALL : ".\Debug\gc.dll" ".\Debug\gc.bsc" + +CLEAN : + -@erase ".\Debug\allchblk.obj" + -@erase ".\Debug\allchblk.sbr" + -@erase ".\Debug\alloc.obj" + -@erase ".\Debug\alloc.sbr" + -@erase ".\Debug\blacklst.obj" + -@erase ".\Debug\blacklst.sbr" + -@erase ".\Debug\checksums.obj" + -@erase ".\Debug\checksums.sbr" + -@erase ".\Debug\dbg_mlc.obj" + -@erase ".\Debug\dbg_mlc.sbr" + -@erase ".\Debug\dyn_load.obj" + -@erase ".\Debug\dyn_load.sbr" + -@erase ".\Debug\finalize.obj" + -@erase ".\Debug\finalize.sbr" + -@erase ".\Debug\gc_cpp.obj" + -@erase ".\Debug\gc_cpp.sbr" + -@erase ".\Debug\gc.bsc" + -@erase ".\Debug\gc.dll" + -@erase ".\Debug\gc.exp" + -@erase ".\Debug\gc.lib" + -@erase ".\Debug\gc.map" + -@erase ".\Debug\gc.pdb" + -@erase ".\Debug\headers.obj" + -@erase ".\Debug\headers.sbr" + -@erase ".\Debug\mach_dep.obj" + -@erase ".\Debug\mach_dep.sbr" + -@erase ".\Debug\malloc.obj" + -@erase ".\Debug\malloc.sbr" + -@erase ".\Debug\mallocx.obj" + -@erase ".\Debug\mallocx.sbr" + -@erase ".\Debug\mark.obj" + -@erase ".\Debug\mark.sbr" + -@erase ".\Debug\mark_rts.obj" + -@erase ".\Debug\mark_rts.sbr" + -@erase ".\Debug\misc.obj" + -@erase ".\Debug\misc.sbr" + -@erase ".\Debug\new_hblk.obj" + -@erase ".\Debug\new_hblk.sbr" + -@erase ".\Debug\obj_map.obj" + -@erase ".\Debug\obj_map.sbr" + -@erase ".\Debug\os_dep.obj" + -@erase ".\Debug\os_dep.sbr" + -@erase ".\Debug\ptr_chck.obj" + -@erase ".\Debug\ptr_chck.sbr" + -@erase ".\Debug\reclaim.obj" + -@erase ".\Debug\reclaim.sbr" + -@erase ".\Debug\stubborn.obj" + -@erase ".\Debug\stubborn.sbr" + -@erase ".\Debug\typd_mlc.obj" + -@erase ".\Debug\typd_mlc.sbr" + -@erase ".\Debug\vc40.idb" + -@erase ".\Debug\vc40.pdb" + -@erase ".\Debug\win32_threads.obj" + -@erase ".\Debug\win32_threads.sbr" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I include /D "_DEBUG" /D "SILENT" /D "GC_BUILD" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "WIN32_THREADS" /FR /YX /c +CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I include /D "_DEBUG" /D "SILENT" /D "GC_BUILD"\ + /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D\ + "WIN32_THREADS" /FR"$(INTDIR)/" /Fp"$(INTDIR)/gc.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\Debug/ +CPP_SBRS=.\Debug/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +MTL=mktyplib.exe +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +RSC=rc.exe +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/gc.bsc" +BSC32_SBRS= \ + ".\Debug\allchblk.sbr" \ + ".\Debug\alloc.sbr" \ + ".\Debug\blacklst.sbr" \ + ".\Debug\checksums.sbr" \ + ".\Debug\dbg_mlc.sbr" \ + ".\Debug\dyn_load.sbr" \ + ".\Debug\finalize.sbr" \ + ".\Debug\gc_cpp.sbr" \ + ".\Debug\headers.sbr" \ + ".\Debug\mach_dep.sbr" \ + ".\Debug\malloc.sbr" \ + ".\Debug\mallocx.sbr" \ + ".\Debug\mark.sbr" \ + ".\Debug\mark_rts.sbr" \ + ".\Debug\misc.sbr" \ + ".\Debug\new_hblk.sbr" \ + ".\Debug\obj_map.sbr" \ + ".\Debug\os_dep.sbr" \ + ".\Debug\ptr_chck.sbr" \ + ".\Debug\reclaim.sbr" \ + ".\Debug\stubborn.sbr" \ + ".\Debug\typd_mlc.sbr" \ + ".\Debug\win32_threads.sbr" + +".\Debug\gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/gc.pdb" /map:"$(INTDIR)/gc.map" /debug /machine:I386\ + /out:"$(OUTDIR)/gc.dll" /implib:"$(OUTDIR)/gc.lib" +LINK32_OBJS= \ + ".\Debug\allchblk.obj" \ + ".\Debug\alloc.obj" \ + ".\Debug\blacklst.obj" \ + ".\Debug\checksums.obj" \ + ".\Debug\dbg_mlc.obj" \ + ".\Debug\dyn_load.obj" \ + ".\Debug\finalize.obj" \ + ".\Debug\gc_cpp.obj" \ + ".\Debug\headers.obj" \ + ".\Debug\mach_dep.obj" \ + ".\Debug\malloc.obj" \ + ".\Debug\mallocx.obj" \ + ".\Debug\mark.obj" \ + ".\Debug\mark_rts.obj" \ + ".\Debug\misc.obj" \ + ".\Debug\new_hblk.obj" \ + ".\Debug\obj_map.obj" \ + ".\Debug\os_dep.obj" \ + ".\Debug\ptr_chck.obj" \ + ".\Debug\reclaim.obj" \ + ".\Debug\stubborn.obj" \ + ".\Debug\typd_mlc.obj" \ + ".\Debug\win32_threads.obj" + +".\Debug\gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "gctest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "gctest\Release" +# PROP BASE Intermediate_Dir "gctest\Release" +# PROP BASE Target_Dir "gctest" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "gctest\Release" +# PROP Intermediate_Dir "gctest\Release" +# PROP Target_Dir "gctest" +OUTDIR=.\gctest\Release +INTDIR=.\gctest\Release + +ALL : "gc - Win32 Release" ".\Release\gctest.exe" + +CLEAN : + -@erase ".\gctest\Release\test.obj" + -@erase ".\Release\gctest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +test.c : tests\test.c + copy tests\test.c test.c + +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "WIN32_THREADS" /YX /c +CPP_PROJ=/nologo /MD /W3 /GX /O2 /I include /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\ + "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "WIN32_THREADS"\ + /Fp"$(INTDIR)/gctest.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\gctest\Release/ +CPP_SBRS=.\. + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +MTL=mktyplib.exe +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +RSC=rc.exe +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/gctest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/gctest.exe" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/gctest.pdb" /machine:I386 /out:"Release/gctest.exe" +LINK32_OBJS= \ + ".\gctest\Release\test.obj" \ + ".\Release\gc.lib" + +".\Release\gctest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "gctest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "gctest\Debug" +# PROP BASE Intermediate_Dir "gctest\Debug" +# PROP BASE Target_Dir "gctest" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "gctest\Debug" +# PROP Intermediate_Dir "gctest\Debug" +# PROP Target_Dir "gctest" +OUTDIR=.\gctest\Debug +INTDIR=.\gctest\Debug + +ALL : "gc - Win32 Debug" ".\Debug\gctest.exe" ".\gctest\Debug\gctest.bsc" + +CLEAN : + -@erase ".\Debug\gctest.exe" + -@erase ".\gctest\Debug\gctest.bsc" + -@erase ".\gctest\Debug\gctest.map" + -@erase ".\gctest\Debug\gctest.pdb" + -@erase ".\gctest\Debug\test.obj" + -@erase ".\gctest\Debug\test.sbr" + -@erase ".\gctest\Debug\vc40.idb" + -@erase ".\gctest\Debug\vc40.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "WIN32_THREADS" /FR /YX /c +CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I include /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\ + /D "ALL_INTERIOR_POINTERS" /D "__STDC__" /D "WIN32_THREADS" /FR"$(INTDIR)/"\ + /Fp"$(INTDIR)/gctest.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c +CPP_OBJS=.\gctest\Debug/ +CPP_SBRS=.\gctest\Debug/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +MTL=mktyplib.exe +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +RSC=rc.exe +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/gctest.bsc" +BSC32_SBRS= \ + ".\gctest\Debug\test.sbr" + +".\gctest\Debug\gctest.bsc" : "$(OUTDIR)" $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /map /debug /machine:I386 /out:"Debug/gctest.exe" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/gctest.pdb" /map:"$(INTDIR)/gctest.map" /debug /machine:I386\ + /out:"Debug/gctest.exe" +LINK32_OBJS= \ + ".\Debug\gc.lib" \ + ".\gctest\Debug\test.obj" + +".\Debug\gctest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "cord - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "cord\Release" +# PROP BASE Intermediate_Dir "cord\Release" +# PROP BASE Target_Dir "cord" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "cord\Release" +# PROP Intermediate_Dir "cord\Release" +# PROP Target_Dir "cord" +OUTDIR=.\cord\Release +INTDIR=.\cord\Release + +ALL : "gc - Win32 Release" ".\Release\de.exe" + +CLEAN : + -@erase ".\cord\Release\cordbscs.obj" + -@erase ".\cord\Release\cordxtra.obj" + -@erase ".\cord\Release\de.obj" + -@erase ".\cord\Release\de_win.obj" + -@erase ".\cord\Release\de_win.res" + -@erase ".\Release\de.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /YX /c +CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /I include /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\ + "ALL_INTERIOR_POINTERS" /Fp"$(INTDIR)/cord.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\cord\Release/ +CPP_SBRS=.\. + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +MTL=mktyplib.exe +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +RSC=rc.exe +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +RSC_PROJ=/l 0x809 /fo"$(INTDIR)/de_win.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/cord.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/de.exe" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)/de.pdb"\ + /machine:I386 /out:"Release/de.exe" +LINK32_OBJS= \ + ".\cord\Release\cordbscs.obj" \ + ".\cord\Release\cordxtra.obj" \ + ".\cord\Release\de.obj" \ + ".\cord\Release\de_win.obj" \ + ".\cord\Release\de_win.res" \ + ".\Release\gc.lib" + +".\Release\de.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "cord - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "cord\Debug" +# PROP BASE Intermediate_Dir "cord\Debug" +# PROP BASE Target_Dir "cord" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "cord\Debug" +# PROP Intermediate_Dir "cord\Debug" +# PROP Target_Dir "cord" +OUTDIR=.\cord\Debug +INTDIR=.\cord\Debug + +ALL : "gc - Win32 Debug" ".\Debug\de.exe" + +CLEAN : + -@erase ".\cord\Debug\cordbscs.obj" + -@erase ".\cord\Debug\cordxtra.obj" + -@erase ".\cord\Debug\de.obj" + -@erase ".\cord\Debug\de.pdb" + -@erase ".\cord\Debug\de_win.obj" + -@erase ".\cord\Debug\de_win.res" + -@erase ".\cord\Debug\vc40.idb" + -@erase ".\cord\Debug\vc40.pdb" + -@erase ".\Debug\de.exe" + -@erase ".\Debug\de.ilk" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /YX /c +CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I include /D "_DEBUG" /D "WIN32" /D\ + "_WINDOWS" /D "ALL_INTERIOR_POINTERS" /Fp"$(INTDIR)/cord.pch" /YX\ + /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c +CPP_OBJS=.\cord\Debug/ +CPP_SBRS=.\. + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +MTL=mktyplib.exe +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +RSC=rc.exe +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +RSC_PROJ=/l 0x809 /fo"$(INTDIR)/de_win.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/cord.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"Debug/de.exe" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/de.pdb" /debug /machine:I386 /out:"Debug/de.exe" +LINK32_OBJS= \ + ".\cord\Debug\cordbscs.obj" \ + ".\cord\Debug\cordxtra.obj" \ + ".\cord\Debug\de.obj" \ + ".\cord\Debug\de_win.obj" \ + ".\cord\Debug\de_win.res" \ + ".\Debug\gc.lib" + +".\Debug\de.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +################################################################################ +# Begin Target + +# Name "gc - Win32 Release" +# Name "gc - Win32 Debug" + +!IF "$(CFG)" == "gc - Win32 Release" + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\gc_cpp.cpp + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_RECLA=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + ".\include\gc_cpp.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_RECLA=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\gc_cpp.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + +".\Release\gc_cpp.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_RECLA=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + ".\include\gc_cpp.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_RECLA=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\gc_cpp.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + +".\Debug\gc_cpp.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\reclaim.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_RECLA=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_RECLA=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\reclaim.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + +".\Release\reclaim.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_RECLA=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_RECLA=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\reclaim.obj" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + +".\Debug\reclaim.sbr" : $(SOURCE) $(DEP_CPP_RECLA) "$(INTDIR)" + + +!ENDIF + +# End Source File + +################################################################################ +# Begin Source File + +SOURCE=.\os_dep.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_OS_DE=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\STAT.H"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_OS_DE=\ + ".\il\PCR_IL.h"\ + ".\mm\PCR_MM.h"\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + ".\vd\PCR_VD.h"\ + + +".\Release\os_dep.obj" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" + +".\Release\os_dep.sbr" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_OS_DE=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\STAT.H"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_OS_DE=\ + ".\il\PCR_IL.h"\ + ".\mm\PCR_MM.h"\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + ".\vd\PCR_VD.h"\ + + +".\Debug\os_dep.obj" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" + +".\Debug\os_dep.sbr" : $(SOURCE) $(DEP_CPP_OS_DE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\misc.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_MISC_=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_MISC_=\ + ".\il\PCR_IL.h"\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\misc.obj" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" + +".\Release\misc.sbr" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_MISC_=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_MISC_=\ + ".\il\PCR_IL.h"\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\misc.obj" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" + +".\Debug\misc.sbr" : $(SOURCE) $(DEP_CPP_MISC_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mark_rts.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_MARK_=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_MARK_=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\mark_rts.obj" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" + +".\Release\mark_rts.sbr" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_MARK_=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_MARK_=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\mark_rts.obj" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" + +".\Debug\mark_rts.sbr" : $(SOURCE) $(DEP_CPP_MARK_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mach_dep.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_MACH_=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_MACH_=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\mach_dep.obj" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" + +".\Release\mach_dep.sbr" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_MACH_=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_MACH_=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\mach_dep.obj" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" + +".\Debug\mach_dep.sbr" : $(SOURCE) $(DEP_CPP_MACH_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\headers.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_HEADE=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_HEADE=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\headers.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + +".\Release\headers.sbr" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_HEADE=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_HEADE=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\headers.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + +".\Debug\headers.sbr" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\alloc.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_ALLOC=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_ALLOC=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\alloc.obj" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" + +".\Release\alloc.sbr" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_ALLOC=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_ALLOC=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\alloc.obj" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" + +".\Debug\alloc.sbr" : $(SOURCE) $(DEP_CPP_ALLOC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\allchblk.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_ALLCH=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_ALLCH=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\allchblk.obj" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" + +".\Release\allchblk.sbr" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_ALLCH=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_ALLCH=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\allchblk.obj" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" + +".\Debug\allchblk.sbr" : $(SOURCE) $(DEP_CPP_ALLCH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\stubborn.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_STUBB=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_STUBB=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\stubborn.obj" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" + +".\Release\stubborn.sbr" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_STUBB=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_STUBB=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\stubborn.obj" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" + +".\Debug\stubborn.sbr" : $(SOURCE) $(DEP_CPP_STUBB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\obj_map.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_OBJ_M=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_OBJ_M=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Release\obj_map.obj" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" + +".\Release\obj_map.sbr" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "gc - Win32 Debug" + +DEP_CPP_OBJ_M=\ + ".\include\private\gcconfig.h"\ + ".\include\gc.h"\ + ".\include\private\gc_hdrs.h"\ + ".\include\private\gc_priv.h"\ + {$(INCLUDE)}"\sys\TYPES.H"\ + +NODEP_CPP_OBJ_M=\ + ".\th\PCR_Th.h"\ + ".\th\PCR_ThCrSec.h"\ + ".\th\PCR_ThCtl.h"\ + + +".\Debug\obj_map.obj" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" + +".\Debug\obj_map.sbr" : $(SOURCE) $(DEP_CPP_OBJ_M) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\new_hblk.c + +!IF "$(CFG)" == "gc - Win32 Release" + +DEP_CPP_NEW_H=\ +