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:
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 ¤Ë³äÅö¤Æ¤ë¤è¤¦¤ËÊѹ¹¤·¤¿.
- ¡¦ÆüËܸìÈǤǤâ, ¥Ð¥Ã¥Õ¥¡Æâ¤Ç¤Ï ¤Ï 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 ʸ»ú¤òÀÞ¤êÊÖ¤·²Äǽ¤Ê¶õÇòʸ»ú¤È¤·¤Æ°·¤¦¤è¤¦¤ËÊѹ¹¤·, ¥Ð¥Ã¥Õ¥¡
- ÆâÉô¤Î¶õÇòʸ»ú¤ò ¤«¤é 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>><TD>²èÌÌÁ´ÂΤò±¦¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤòº¸¤Ë¤º¤é¤¹)
<TR><TD><<TD>²èÌÌÁ´ÂΤòº¸¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤò±¦¤Ë¤º¤é¤¹)
<TR><TD>.<TD>²èÌÌÁ´ÂΤò1ʸ»ú±¦¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤòº¸¤Ë¤º¤é¤¹)
<TR><TD>,<TD>²èÌÌÁ´ÂΤò1ʸ»úº¸¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤò±¦¤Ë¤º¤é¤¹)
-<TR><TD>g<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó¾å¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥
-<TR><TD>G<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó²¼¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥
+<TR><TD>g,M-<<TD>ʸ½ñ¤Î¤¤¤Á¤Ð¤ó¾å¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡¥
+<TR><TD>G,M-><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><FRAMESET>¤ò´Þ¤àʸ½ñ¤òɽ¼¨¤·¤Æ¤¤¤ë¤È¤¤Ë¡¤<FRAME>
¥¿¥°¤Î»Ø¤¹Ê£¿ô¤Îʸ½ñ¤ò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>><TD>²èÌÌÁ´ÂΤò±¦¤Ë¤º¤é¤·¤Þ¤¹¡¥(ɽ¼¨ÆâÍƤòº¸¤Ë¤º¤é¤¹)
<TR><TD><<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><FRAMESET>¤ò´Þ¤àʸ½ñ¤òɽ¼¨¤·¤Æ¤¤¤ë¤È¤¤Ë¡¤<FRAME>
¥¿¥°¤Î»Ø¤¹Ê£¿ô¤Îʸ½ñ¤ò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>><TD>Shift screen right
<TR><TD><<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-<<TD>Go to the first line
+<TR><TD>G,M-><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>><TD>Shift screen right
<TR><TD><<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=\
+