πŸš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.sources.patch
Article #2

kehpager V1.2 to kehpager V1.21 (part 1/2)

#2
From: Kari Hurtta
Date: Sun, 16 Oct 1994 14:12
1947 lines
64772 bytes
Title: kehpager V1.21 - Charset aware pager for VTxxx terminals
Patch-To: kehpager V1.2
Archive-Name: kehpager0120/patch1.1
Author: Kari E. Hurtta <Kari.Hurtta@Helsinki.FI>
Part: 1/2
Environment: Ansi C, SunOS 4.1.2 (OS/MP 4.1B), 4.1.3, 5.2, 5.3, 
	HP-UX A.09.01 (?), IRIX 4.0.5 (?), IRIX 5.2, FreeBSD (?), 
	NetBSD(?), 386BSD(?), VTxxx

#!/bin/sh
# shar:	Shell Archiver  (v1.22)
#
# This is part 1 of a multipart archive                                    
# do not concatenate these parts, unpack them in order with /bin/sh        
#
#	Run the following text with /bin/sh to create:
#	  patch1.COPYRIGHT
#	  patch1.README
#	  patch1.diff
#	  patch1.kehpagerrc
#	  patch1.schedule.c
#	  patch1.schedule.h
#	  patch1.sh
#
if test -r s2_seq_.tmp
then echo "Must unpack archives in sequence!"
     next=`cat s2_seq_.tmp`; echo "Please unpack part $next next"
     exit 1; fi
sed 's/^X//' << 'SHAR_EOF' > patch1.COPYRIGHT &&
X
X  kehpager, Charset aware pager, Kari E. Hurtta
X
X  Copyright (c) 1993, 1994 Kari E. Hurtta
X
X  Redistribution and use in source and binary forms are permitted
X  provided that the above copyright notice and this paragraph are
X  duplicated in all such forms. This software is provided 'as is'
X  and without any warranty.
SHAR_EOF
chmod 0444 patch1.COPYRIGHT || echo "restore of patch1.COPYRIGHT fails"
sed 's/^X//' << 'SHAR_EOF' > patch1.README &&
Xkehpager V1.21 - Charset aware pager for VTxxx terminals
X
XThis patch updates kehpager from version 1.2 to version 1.21.
X
XLook file patch1.COPYRIGHT to see your rights.
X
X     Kehpager is a pager that displays the  contents  of  a  text
X     file on the terminal, one screenful at a time. It translates
X     file's charset to the terminal's charsets.  Too  long  lines
X     are  wrapped in between words. Kehpager  can also interprete
X     text/enriched and text/richtext -formatted text files.
X
XChanges in this patch:
X * Changed charset names UNICODE-1-1-UTF7 and UNICODE-1-1-UTF8
X   to UNICODE-1-1-UTF-7 and UNICODE-1-1-UTF-8. RFC1642 defines
X   UNICODE-1-1-UTF-7 as value of charset. UNICODE-1-1-UTF-8
X   is not defined in any RFCs. RFC1641 only hints that someone
X   may define charset as UNICODE-1-1-UTF-8. Charset value
X   UNICODE-1-1 (as defined in RFC1641) is not supported by
X   kehpager.
X * New module schedule.c
X * Minor bug fix on initalizing terminal (in SGI) when line 
X   discipline == 0 (Irix 4.0.5)
X * Ported to Irix 5.2 -- let's hope that this still works with Irix 4.0.5 !
X
XApplying patch:
X	Execute patch1.sh in kehpager's source directory
X
XInstallation
XSunOS 4:
X	Set correct value for use.keyboard.language -field in
X		kehpager.init (you can also comment it out if your
X		terminals is inteelligent enough). You probably also
X	 want add
X	   use.vt100.national_available: Enabled
X	 to kehpager.init (this was default prior version 1.06).
X	Copy kehpager.init to library direction
X	Edit Makefile and put defination of GLOBAL_INIT_FILE
X	  point correct location of kehpager.init
X	  Also select correct compiler (gcc, or SUN's acc)
X	  to Makefile.'s define.
X	Compile it with
X		make sunos4
X	Copy kehpager and kehpager.1 to correct directories
XSunOS 5:
X	Set correct value for use.keyboard.language -field in
X		kehpager.init (you can also comment it out if your
X		terminals is intelligent enough). You probably also
X	 want add
X	   use.vt100.national_available: Enabled
X	 to kehpager.init (this was default prior version 1.06).
X	Copy kehpager.init to library direction
X	Edit Makefile and put defination of GLOBAL_INIT_FILE
X	  point correct location of kehpager.init
X	  Also select correct compiler (gcc, or SUN's acc)
X	  to Makefile.'s define.
X	Compile it with
X		make sunos5
X	Copy kehpager and kehpager.1 to correct directories
XHP-UX:
X	Set correct value for use.keyboard.language -field in
X		kehpager.int (you can also comment it out if your
X		terminals is intelligent enough). You probably also
X	 want add
X	   use.vt100.national_available: Enabled
X	 to kehpager.init.hpux (this was default prior version 1.06).
X	Copy kehpager.init.hpux to library direction
X	Edit Makefile.hpux and put defination of GLOBAL_INIT_FILE
X	  point correct location of kehpager.init.hpux
X	  Also select correct compiler (gcc, or HP's cc (ANSI C version))
X	  to Makefile.hpux's define.
X	Compile it with
X		make -f Makefile.hpux
X	Copy kehpager and kehpager.1 to correct directories
X386BSD, FreeBSD, NetBSD: (I haven't tested this!)
X	Set correct value for use.keyboard.language -field in
X		kehpager.init (you can also comment it out if your
X		terminals is intelligent enough). You probably also
X	 want add
X	   use.vt100.national_available: Enabled
X	 to kehpager.init (this was default prior version 1.06).
X	Copy kehpager.init to library direction
X	Edit Makefile and put defination of GLOBAL_INIT_FILE
X	  point correct location of kehpager.init
X	Compile it with
X		make -f Makefile.bsd
X	Copy kehpager and kehpager.1 to correct directories
XIRIX 4.0.5:
X	(I get ENOTDEV error when closing terminal, so there is still
X	 some problems... To ignore that error, put -DCLOSEBUG to CFLAGS
X	 in Makefile.irix. I haven't compiled that version of kehpager
X	 in Irix 4.0.5)
X	Set correct value for use.keyboard.language -field in
X		kehpager.init (you can also comment it out if your
X		terminals is intelligent enough). You probably also
X	 want add
X	   use.vt100.national_available: Enabled
X	 to kehpager.init (this was default prior version 1.06).
X	Copy kehpager.init to library direction
X	Edit Makefile.irix and put defination of GLOBAL_INIT_FILE
X	  point correct location of kehpager.init
X	Compile it with
X		make -f Makefile.irix
X	Copy kehpager and kehpager.1 to correct directories. If you don't
X		have troff or groff, ask someone to compile kehpager.1
XIRIX 5.2:
X	(I don't know if there is same error in IRIX 5.2 as was in IRIX
X	4.0.5 (I don'r expect it). But if there is, you can ignore
X	error message with putting -DCLOSEBUG to CFLAGS
X	 in Makefile.irix. )
X	Set correct value for use.keyboard.language -field in
X		kehpager.init (you can also comment it out if your
X		terminals is intelligent enough). You probably also
X	 want add
X	   use.vt100.national_available: Enabled
X	 to kehpager.init (this was default prior version 1.06).
X	Copy kehpager.init to library direction
X	Edit Makefile.irix and put defination of GLOBAL_INIT_FILE
X	  point correct location of kehpager.init
X	Compile it with
X		make -f Makefile.irix
X	Copy kehpager and kehpager.1 to correct directories. If you don't
X		have troff or groff, ask someone to compile kehpager.1
X
X
XTested platforms:
X	Kehpager works on SunOS 4.1.2 (OS/MP 4.1B), 4.1.3, 5.2, 5.3, 
X	HP-UX A.09.01, IRIX 5.2 (at least some way).
X	There may be some errors in HP-UX A.09.01 version -- some tests
X	indicates that, but I haven't sure.
X
XCompiler:
X	Kehpager is compiled with gcc in SunOS 4.1.2, 5.2, 5.3, HP-UX.
X	In HP-UX it is compiled with cc (ANSI C version).
X		(notice that ANSI C version of cc isn't bundled with HP-UX)
X	In IRIX 5.2 it is compiled with cc (in -xansi mode).
X	Kehpager compiles without error or warning messages 
X		(with gcc's -Wall in SunOs 5.2. Also HP's cc
X		 don't give any warnigs even that it is more strict than
X		 gcc).
X
X	(This version isn't compiled with SUN's acc, as previous version was.)
X
XThanks to: 
X	Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
X	Tim Lasko <lasko@regent.enet.dec.com>
X	David E A Wilson <david@cs.uow.edu.au>
X	JΓΆrg Wunsch <joerg_wunsch@tcd-dresden.de>
SHAR_EOF
chmod 0644 patch1.README || echo "restore of patch1.README fails"
sed 's/^X//' << 'SHAR_EOF' > patch1.diff &&
Xdiff -c ../kehpager-1.2/Makefile ./Makefile
X*** ../kehpager-1.2/Makefile	Sat Jul  9 13:29:02 1994
X--- ./Makefile	Sat Oct 15 18:29:24 1994
X***************
X*** 14,20 ****
X  .KEEP_STATE:
X  
X  SOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
X! rc.c env.c keyboard.c content.c edit.c
X  #OBJS = $(SOURCES:.c=.o) /usr/lib/debug/malloc.o
X  OBJS = $(SOURCES:.c=.o)
X  CFLAGS += -DGLOBAL_INIT_FILE=\"/home/hydra/hurtta/src/kehpager/kehpager.init\"
X--- 14,20 ----
X  .KEEP_STATE:
X  
X  SOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
X! rc.c env.c keyboard.c content.c edit.c schedule.c
X  #OBJS = $(SOURCES:.c=.o) /usr/lib/debug/malloc.o
X  OBJS = $(SOURCES:.c=.o)
X  CFLAGS += -DGLOBAL_INIT_FILE=\"/home/hydra/hurtta/src/kehpager/kehpager.init\"
X***************
X*** 40,42 ****
X--- 40,45 ----
X  sunos5: kehpager
X  sunos52: sunos5
X  sunos53: sunos5
X+ 
X+ clean: 
X+ 	rm -rf $(OBJS) core kehpager
Xdiff -c ../kehpager-1.2/Makefile.bsd ./Makefile.bsd
X*** ../kehpager-1.2/Makefile.bsd	Sat Jul  9 13:29:02 1994
X--- ./Makefile.bsd	Sat Oct 15 18:29:25 1994
X***************
X*** 19,26 ****
X  	rc.c env.c keyboard.c content.c edit.c
X  
X  OBJS	= kehpager.o terminal.o esc.o memory.o control.o charset.o window.o \
X! 	rc.o env.o keyboard.o content.o edit.o
X  
X  
X  kehpager: $(OBJS)
X  	$(CC) -o $@ $(OBJS) $(LDFLAGS)
X--- 19,29 ----
X  	rc.c env.c keyboard.c content.c edit.c
X  
X  OBJS	= kehpager.o terminal.o esc.o memory.o control.o charset.o window.o \
X! 	rc.o env.o keyboard.o content.o edit.o schedule.c
X  
X  
X  kehpager: $(OBJS)
X  	$(CC) -o $@ $(OBJS) $(LDFLAGS)
X+ 
X+ clean: 
X+ 	rm -rf $(OBJS) core kehpager
Xdiff -c ../kehpager-1.2/Makefile.hpux ./Makefile.hpux
X*** ../kehpager-1.2/Makefile.hpux	Sat Jul  9 13:29:02 1994
X--- ./Makefile.hpux	Sat Oct 15 18:29:25 1994
X***************
X*** 14,22 ****
X  .KEEP_STATE:
X  
X  SOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
X! rc.c env.c keyboard.c  content.c edit.c
X  OBJS = $(SOURCES:.c=.o) 
X  
X  
X  kehpager: $(OBJS)
X  	$(CC) $(LDFLAGS) -o $@ $(OBJS) 
X--- 14,25 ----
X  .KEEP_STATE:
X  
X  SOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
X! rc.c env.c keyboard.c  content.c edit.c schedule.c
X  OBJS = $(SOURCES:.c=.o) 
X  
X  
X  kehpager: $(OBJS)
X  	$(CC) $(LDFLAGS) -o $@ $(OBJS) 
X+ 
X+ clean: 
X+ 	rm -rf $(OBJS) core kehpager
Xdiff -c ../kehpager-1.2/Makefile.irix ./Makefile.irix
X*** ../kehpager-1.2/Makefile.irix	Sat Jul  9 13:29:02 1994
X--- ./Makefile.irix	Sat Oct 15 18:29:25 1994
X***************
X*** 2,7 ****
X--- 2,8 ----
X  
X  # Compiling with SGI C
X  CC = cc
X+ # -DCLOSEBUG when compiling irix 4
X  CFLAGS = -xansi -O2 $(INIT) 
X  
X  LDFLAGS = -lm 
X***************
X*** 9,17 ****
X  .KEEP_STATE:
X  
X  SOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
X! rc.c env.c keyboard.c  content.c edit.c
X  OBJS = $(SOURCES:.c=.o) 
X  
X  
X  kehpager: $(OBJS)
X  	$(CC) $(LDFLAGS) -o $@ $(OBJS) 
X--- 10,21 ----
X  .KEEP_STATE:
X  
X  SOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
X! rc.c env.c keyboard.c  content.c edit.c schedule.c
X  OBJS = $(SOURCES:.c=.o) 
X  
X  
X  kehpager: $(OBJS)
X  	$(CC) $(LDFLAGS) -o $@ $(OBJS) 
X+ 
X+ clean: 
X+ 	rm -rf $(OBJS) core kehpager
Xdiff -c ../kehpager-1.2/VERSION ./VERSION
X*** ../kehpager-1.2/VERSION	Sat Jul  9 13:30:55 1994
X--- ./VERSION	Sat Oct 15 18:39:18 1994
X***************
X*** 1 ****
X! kehpager V1.2
X--- 1 ----
X! kehpager V1.21
Xdiff -c ../kehpager-1.2/charset.c ./charset.c
X*** ../kehpager-1.2/charset.c	Sat Jul  9 13:28:56 1994
X--- ./charset.c	Sat Oct 15 18:29:18 1994
X***************
X*** 10245,10253 ****
X    { "X-ISO646-ITA",         MAP_ITAL,          NT_MIME },
X    { "Mnemonics",            MAP_Mnem,          NT_name },
X    { "Unicode 1.1 with UTF7",MAP_UTF7,          NT_name },
X!   { "UNICODE-1-1-UTF7",     MAP_UTF7,          NT_MIME },
X    { "Unicode 1.1 with UTF8",MAP_UTF8,          NT_name },
X!   { "UNICODE-1-1-UTF8",     MAP_UTF8,          NT_MIME },
X    { "X-FSS-UTF",            MAP_UTF8,          NT_MIME },
X  };
X  
X--- 10245,10253 ----
X    { "X-ISO646-ITA",         MAP_ITAL,          NT_MIME },
X    { "Mnemonics",            MAP_Mnem,          NT_name },
X    { "Unicode 1.1 with UTF7",MAP_UTF7,          NT_name },
X!   { "UNICODE-1-1-UTF-7",    MAP_UTF7,          NT_MIME },
X    { "Unicode 1.1 with UTF8",MAP_UTF8,          NT_name },
X!   { "UNICODE-1-1-UTF-8",    MAP_UTF8,          NT_MIME },
X    { "X-FSS-UTF",            MAP_UTF8,          NT_MIME },
X  };
X  
Xdiff -c ../kehpager-1.2/control.c ./control.c
X*** ../kehpager-1.2/control.c	Sat Jul  9 13:28:57 1994
X--- ./control.c	Sat Oct 15 18:29:19 1994
X***************
X*** 1772,1789 ****
X    
X    if (-1 == pri) {
X      if (DEBUG_LBUFFER)
X!       print_debug("flush_some_lines: result=0");
X  
X      return 0;
X    }
X  
X    if (DEBUG_LBUFFER)
X!     print_debug("flush_some_lines: priority=%d lines=%d-%d",
X  		pri,priorities[pri].first_line,
X  		priorities[pri].last_line);
X  
X-   
X- 
X    for (Y = priorities[pri].first_line;
X         Y <= priorities[pri].last_line;
X         Y++) flush_line(Y,pri);
X--- 1772,1787 ----
X    
X    if (-1 == pri) {
X      if (DEBUG_LBUFFER)
X!       print_debug("flush_some_lines(): result=0");
X  
X      return 0;
X    }
X  
X    if (DEBUG_LBUFFER)
X!     print_debug("flush_some_lines(): priority=%d lines=%d-%d",
X  		pri,priorities[pri].first_line,
X  		priorities[pri].last_line);
X  
X    for (Y = priorities[pri].first_line;
X         Y <= priorities[pri].last_line;
X         Y++) flush_line(Y,pri);
X***************
X*** 1792,1798 ****
X    priorities[pri].last_line=0;
X  
X    if (DEBUG_LBUFFER)
X!     print_debug("flush_some_lines: result=1\n"
X  		"  priorities[pri=%d].first_line=%d\n"
X  		"  priorities[pri=%d].last_line=%d",
X  		pri,priorities[pri].first_line,
X--- 1790,1796 ----
X    priorities[pri].last_line=0;
X  
X    if (DEBUG_LBUFFER)
X!     print_debug("flush_some_lines(): result=1\n"
X  		"  priorities[pri=%d].first_line=%d\n"
X  		"  priorities[pri=%d].last_line=%d",
X  		pri,priorities[pri].first_line,
X***************
X*** 2038,2043 ****
X--- 2036,2042 ----
X    update_hard();
X  }
X  
X+  
X  int ask_timeout(long *timeout) {
X    static int states_first = 1;
X    /* 1/10 seconds */
X***************
X*** 2073,2079 ****
X      GOT;
X      break;
X    }
X- 
X  }
X  
X  int do_escape(int cmd) {
X--- 2072,2077 ----
X***************
X*** 2093,2100 ****
X        return 0;
X      } else { /* Cursor position */
X        int X,Y;
X-       pos_count++;
X        if (2 == sscanf(Cs(args),"%d;%d",&Y,&X)) {
X  	switch(pos_count) {
X  	case 1: 
X  	  starting_line = Y;
X--- 2091,2099 ----
X        return 0;
X      } else { /* Cursor position */
X        int X,Y;
X        if (2 == sscanf(Cs(args),"%d;%d",&Y,&X)) {
X+ 	pos_count++;
X+ 	
X  	switch(pos_count) {
X  	case 1: 
X  	  starting_line = Y;
Xdiff -c ../kehpager-1.2/control.h ./control.h
X*** ../kehpager-1.2/control.h	Sat Jul  9 13:29:00 1994
X--- ./control.h	Sat Oct 15 18:29:22 1994
X***************
X*** 58,64 ****
X  
X  /* output priorities */
X  #define PRI_NORMAL   0
X! #define PRI_EDIT     1
X  #define PRI_COMPLETE 5
X  #define PRI_WAIT     6      /* print immediately */
X  
X--- 58,64 ----
X  
X  /* output priorities */
X  #define PRI_NORMAL   0
X! #define PRI_EDIT     4
X  #define PRI_COMPLETE 5
X  #define PRI_WAIT     6      /* print immediately */
X  
Xdiff -c ../kehpager-1.2/kehpager.c ./kehpager.c
X*** ../kehpager-1.2/kehpager.c	Sat Jul  9 13:28:58 1994
X--- ./kehpager.c	Sat Oct 15 18:29:20 1994
X***************
X*** 46,53 ****
X  #include "keyboard.h"
X  #include "content.h"
X  #include "edit.h"
X  
X! char *Version = "kehpager V1.2";
X  /* Author: Kari E. Hurtta <Kari.Hurtta@Helsinki.FI> */
X  char *prog="Unknown";
X  int quitflag = 0;
X--- 46,54 ----
X  #include "keyboard.h"
X  #include "content.h"
X  #include "edit.h"
X+ #include "schedule.h"
X  
X! char *Version = "kehpager V1.21";
X  /* Author: Kari E. Hurtta <Kari.Hurtta@Helsinki.FI> */
X  char *prog="Unknown";
X  int quitflag = 0;
X***************
X*** 55,61 ****
X  
X  /* Versions:
X   * 0.1  93-05-27 First version
X!  * 0.11 93-05-27 telentd/rlogind don't longer die when start kehpager
X   * 0.12 93-05-27 Printing optimizing, 
X   *               keys: b = previous page, DEL = backward one line
X   * 0.13 93-06-06 option: - refers standard input, 
X--- 56,62 ----
X  
X  /* Versions:
X   * 0.1  93-05-27 First version
X!  * 0.11 93-05-27 telentd/rlogind don't longer die when kehpager starts
X   * 0.12 93-05-27 Printing optimizing, 
X   *               keys: b = previous page, DEL = backward one line
X   * 0.13 93-06-06 option: - refers standard input, 
X***************
X*** 257,263 ****
X   *               VLNEXT_preserved
X   *               $LINES overdrives use.terminal.lines and $COLUMNS overdrives
X   *                  use.terminal.columns (if env.size is set)
X!  *               Updated Text/Enriched according RFC1563 (previous version
X   *                 of enriched specification was RFC1523):
X   *                 - Added FlushBoth environment
X   *                 - Now Text/Enriched allows initial state justification 
X--- 258,264 ----
X   *               VLNEXT_preserved
X   *               $LINES overdrives use.terminal.lines and $COLUMNS overdrives
X   *                  use.terminal.columns (if env.size is set)
X!  *               Updated Text/Enriched according of RFC1563 (previous version
X   *                 of enriched specification was RFC1523):
X   *                 - Added FlushBoth environment
X   *                 - Now Text/Enriched allows initial state justification 
X***************
X*** 306,311 ****
X--- 307,324 ----
X   *               Latin/4 209 fixed
X   *                 from LATIN CAPITAL LETTER N WITH OGONEK
X   *                 to LATIN CAPITAL LETTER N WITH CEDILLA
X+  * 1.21 94-10-15 Changed charset names UNICODE-1-1-UTF7 and UNICODE-1-1-UTF8
X+  *                 to UNICODE-1-1-UTF-7 and UNICODE-1-1-UTF-8. RFC1642 defines
X+  *                 UNICODE-1-1-UTF-7 as value of charset. UNICODE-1-1-UTF-8
X+  *                 is not defined in any RFCs. RFC1641 only hints that someone
X+  *                 may define charset as UNICODE-1-1-UTF-8. Charset value
X+  *                 UNICODE-1-1 (as defined in RFC1641) is not supported by
X+  *                 kehpager.
X+  *               New module schedule.c
X+  *               Minor bug fix on initalizing terminal (in SGI) when line 
X+  *                 discipline == 0
X+  *               Ported to Irix 5.2 -- let's hope that this still works with
X+  *                  irix 4.0.5 !
X   */
X  
X  static int use_scrolling = 1;
X***************
X*** 481,486 ****
X--- 494,507 ----
X    return val;
X  }
X  
X+ #define PROMPT_NEXT_PAGE      1
X+ #define PROMPT_READ           2
X+ #define PROMPT_NEXT_PAGE_MES  3
X+ #define PROMPT_NEXT_PAGE_LAS  4
X+ #define PROMPT_WRAP           5
X+ #define PROMPT_SEARCH         6
X+ #define PROMPT_SKIP           7
X+ 
X  static void update_prompt(int win, int mode) {
X    int Y,off,roff,rl,bot,prompt_line,tgroup,pagenum,pages;
X    int T,W,SP,TS,IS,PR,PG,prompt_X = 1;
X***************
X*** 494,504 ****
X    get_window_status(win,&T,&W,&SP,&TS,&IS,&PR,&PG);
X  
X    switch(mode) {
X!   case 3: 
X      sprintf(S,"MESSAGE (press %s for next page)",give_mapping(&key_page));
X      key_group = G_MESSAGE;    
X      break;
X!   case 2: case 1: case 4:
X      sprintf(S,"MORE (press %s for next page)",give_mapping(&key_page));
X      key_group = G_PAGER;
X      break;
X--- 515,525 ----
X    get_window_status(win,&T,&W,&SP,&TS,&IS,&PR,&PG);
X  
X    switch(mode) {
X!   case PROMPT_NEXT_PAGE_MES: 
X      sprintf(S,"MESSAGE (press %s for next page)",give_mapping(&key_page));
X      key_group = G_MESSAGE;    
X      break;
X!   case PROMPT_READ: case PROMPT_NEXT_PAGE: case PROMPT_NEXT_PAGE_LAS:
X      sprintf(S,"MORE (press %s for next page)",give_mapping(&key_page));
X      key_group = G_PAGER;
X      break;
X***************
X*** 515,529 ****
X    if (prompt_line < Y) prompt_line = Y;
X    if (prompt_line > lines) prompt_line = lines;
X    else if (pagenum == 0 || pagenum == pages) switch (mode) { 
X!     case 1: sprintf(S,"TAIL (press %s for next file)",
X  		    give_mapping(&key_next)); break;
X!     case 2: strcpy(S,"READ (please wait)"); break;
X!     case 3: 
X        sprintf(S,"OK (press %s to clear message)",
X  	      give_mapping(&key_mquit)); 
X        key_group = G_MESSAGE_LAST;
X        break;
X!     case 4: sprintf(S,"TAIL (press %s to quit kehpager)",
X  		    give_mapping(&key_quit)); 
X        if (!wait_quit) {
X  	quitflag = 1;
X--- 536,550 ----
X    if (prompt_line < Y) prompt_line = Y;
X    if (prompt_line > lines) prompt_line = lines;
X    else if (pagenum == 0 || pagenum == pages) switch (mode) { 
X!     case PROMPT_NEXT_PAGE: sprintf(S,"TAIL (press %s for next file)",
X  		    give_mapping(&key_next)); break;
X!     case PROMPT_READ: strcpy(S,"READ (please wait)"); break;
X!     case PROMPT_NEXT_PAGE_MES: 
X        sprintf(S,"OK (press %s to clear message)",
X  	      give_mapping(&key_mquit)); 
X        key_group = G_MESSAGE_LAST;
X        break;
X!     case PROMPT_NEXT_PAGE_LAS: sprintf(S,"TAIL (press %s to quit kehpager)",
X  		    give_mapping(&key_quit)); 
X        if (!wait_quit) {
X  	quitflag = 1;
X***************
X*** 532,544 ****
X        break;
X      }
X  
X!   if (5 == mode) {
X      strcpy(S,"WRAP (please wait)"); 
X!   } else if (6 == mode) {
X      strcpy(S,"SEARCH (please wait)"); 
X!   } else if (7 == mode) {
X      strcpy(S,"SKIP (please wait)"); 
X!   }
X    
X    line = roff + prompt_line - Y;
X  
X--- 553,565 ----
X        break;
X      }
X  
X!   if (PROMPT_WRAP == mode) {
X      strcpy(S,"WRAP (please wait)"); 
X!   } else if (PROMPT_SEARCH == mode) {
X      strcpy(S,"SEARCH (please wait)"); 
X!   } else if (PROMPT_SKIP == mode) {
X      strcpy(S,"SKIP (please wait)"); 
X!   } 
X    
X    line = roff + prompt_line - Y;
X  
X***************
X*** 633,639 ****
X    }
X  }
X  
X! static int got_from_TAIL(int *ptr) {
X    int result;
X    block_state S;
X  
X--- 654,660 ----
X    }
X  }
X  
X! int got_from_TAIL(int *ptr) {
X    int result;
X    block_state S;
X  
X***************
X*** 661,667 ****
X    }
X  }
X  
X! static void print_errors(int ptr) {
X    volatile CHAR *buffer = error_pool[ptr];
X    CHAR_IDX *mapped;
X    int len;
X--- 682,688 ----
X    }
X  }
X  
X! void print_errors(int ptr) {
X    volatile CHAR *buffer = error_pool[ptr];
X    CHAR_IDX *mapped;
X    int len;
X***************
X*** 732,738 ****
X  
X  }
X  
X! static void not_selectable(int *fp) {
X    unblock(fp);
X    if (DEBUG_FILIO) {
X      print_debug("Marking %s%s (fd=%d) not selectable",
X--- 753,759 ----
X  
X  }
X  
X! void not_selectable(int *fp) {
X    unblock(fp);
X    if (DEBUG_FILIO) {
X      print_debug("Marking %s%s (fd=%d) not selectable",
X***************
X*** 1565,1571 ****
X      if (chars[j].evector[ENT_name]) s4=chars[j].evector[ENT_name];
X      else s4="";
X  
X!     print_help(win,"%S%c%S%c%M%c%S%c%S",s1,14,s2,22,j,28,s3,38,s4);
X      
X    }
X  
X--- 1586,1592 ----
X      if (chars[j].evector[ENT_name]) s4=chars[j].evector[ENT_name];
X      else s4="";
X  
X!     print_help(win,"1c1ckehpager.cc1c%S",s1,14,s2,22,j,28,s3,38,s4);
X      
X    }
X  
X***************
X*** 1727,1733 ****
X      search_X++;
X      break;
X    }
X!   update_prompt(visible,6);
X    if (find_buffer_text(visible,search_value_len,search_value,
X  		       &search_X,&search_Y,&rY,&mlen)) {
X      set_win_hl(visible,FL_BOLD,search_X,search_X+mlen-1,search_Y);
X--- 1748,1754 ----
X      search_X++;
X      break;
X    }
X!   update_prompt(visible,PROMPT_SEARCH);
X    if (find_buffer_text(visible,search_value_len,search_value,
X  		       &search_X,&search_Y,&rY,&mlen)) {
X      set_win_hl(visible,FL_BOLD,search_X,search_X+mlen-1,search_Y);
X***************
X*** 1751,1757 ****
X    int visible = have_error ? WIN_ERROR : WIN_TEXT;
X    if (&key_genter == pos) {
X      int rvalue = string_value(value_len,value);
X!     update_prompt(visible,7);
X      goto_window(visible,rvalue);
X      return 1;
X    } else if (&key_gpercnt == pos) {
X--- 1772,1778 ----
X    int visible = have_error ? WIN_ERROR : WIN_TEXT;
X    if (&key_genter == pos) {
X      int rvalue = string_value(value_len,value);
X!     update_prompt(visible,PROMPT_SKIP);
X      goto_window(visible,rvalue);
X      return 1;
X    } else if (&key_gpercnt == pos) {
X***************
X*** 1758,1764 ****
X      int len = window_rlines(visible);
X      int rvalue = string_value(value_len,value);
X      if (rvalue <= 100) {
X!       update_prompt(visible,7);
X        if (0 == rvalue) goto_window(visible,1);
X        else goto_window(visible,rvalue*len/100);
X        return 1;
X--- 1779,1785 ----
X      int len = window_rlines(visible);
X      int rvalue = string_value(value_len,value);
X      if (rvalue <= 100) {
X!       update_prompt(visible,PROMPT_SKIP);
X        if (0 == rvalue) goto_window(visible,1);
X        else goto_window(visible,rvalue*len/100);
X        return 1;
X***************
X*** 1849,1855 ****
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      tab = !tab;
X!     update_prompt(visible, 5);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_prompt == pos) {
X--- 1870,1876 ----
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      tab = !tab;
X!     update_prompt(visible, PROMPT_WRAP);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_prompt == pos) {
X***************
X*** 1861,1867 ****
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      wrap = !wrap;
X!     update_prompt(visible, 5);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_spc == pos) {
X--- 1882,1888 ----
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      wrap = !wrap;
X!     update_prompt(visible, PROMPT_WRAP);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_spc == pos) {
X***************
X*** 1869,1875 ****
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      showspc = !showspc;
X!     update_prompt(visible, 5);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_pagemode == pos) {
X--- 1890,1896 ----
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      showspc = !showspc;
X!     update_prompt(visible, PROMPT_WRAP);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_pagemode == pos) {
X***************
X*** 1877,1883 ****
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      pagemode = !pagemode;
X!     update_prompt(visible, 5);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_next == pos) {
X--- 1898,1904 ----
X      get_window_status(visible,&tab,&wrap,&showspc,&tab_step,&indent_step,
X  		      &priority,&pagemode);
X      pagemode = !pagemode;
X!     update_prompt(visible, PROMPT_WRAP);
X      set_window_status(visible,tab,wrap,showspc,tab_step,indent_step,
X  		      priority,pagemode);
X    } else if (&key_next == pos) {
X***************
X*** 1896,1905 ****
X      }
X      
X    } else if (&key_page == pos) {
X!     update_prompt(visible,7);
X      go_next_page(visible);
X    } else if (&key_prev == pos) {
X!     update_prompt(visible,7);
X      go_prev_page(visible);
X    } else if (&key_copyright == pos) {
X      key_group = G_MESSAGE;
X--- 1917,1926 ----
X      }
X      
X    } else if (&key_page == pos) {
X!     update_prompt(visible,PROMPT_SKIP);
X      go_next_page(visible);
X    } else if (&key_prev == pos) {
X!     update_prompt(visible,PROMPT_SKIP);
X      go_prev_page(visible);
X    } else if (&key_copyright == pos) {
X      key_group = G_MESSAGE;
X***************
X*** 1929,1935 ****
X      if (roffset > 0) scroll_window_R(visible);
X    } else if(&key_top == pos) {
X      int offset,Y,roffset,pagenum,pages;
X!     update_prompt(visible,7);
X      window_pos(visible,&Y,&offset,&roffset,&pagenum,&pages);
X      if (roffset > 0) roffset = 0;
X      map_window(visible,roffset,Y);
X--- 1950,1956 ----
X      if (roffset > 0) scroll_window_R(visible);
X    } else if(&key_top == pos) {
X      int offset,Y,roffset,pagenum,pages;
X!     update_prompt(visible,PROMPT_SKIP);
X      window_pos(visible,&Y,&offset,&roffset,&pagenum,&pages);
X      if (roffset > 0) roffset = 0;
X      map_window(visible,roffset,Y);
X***************
X*** 1936,1942 ****
X      while(flush_some_lines());
X    } else if(&key_bottom == pos) {
X      int offset,Y,roffset,roffset_old,rl,pagenum,pages;
X!     update_prompt(visible,7);
X      window_pos(visible,&Y,&offset,&roffset_old,&pagenum,&pages);
X      rl = window_rlines(visible);
X      roffset = rl - lines + Y;
X--- 1957,1963 ----
X      while(flush_some_lines());
X    } else if(&key_bottom == pos) {
X      int offset,Y,roffset,roffset_old,rl,pagenum,pages;
X!     update_prompt(visible,PROMPT_SKIP);
X      window_pos(visible,&Y,&offset,&roffset_old,&pagenum,&pages);
X      rl = window_rlines(visible);
X      roffset = rl - lines + Y;
X***************
X*** 1950,1961 ****
X    }
X  }
X  
X! static void message_to_error(int len, CHAR_IDX *buffer) {
X    map_errors();
X    print_to_window(WIN_ERROR,-1,error_line,0,len,buffer);
X  }
X  
X! static int do_keyboard(int cmd, int *cancel) {
X    CHAR_IDX ch;
X    switch (commands[cmd].what) {
X      CHAR *c;
X--- 1971,1982 ----
X    }
X  }
X  
X! void message_to_error(int len, CHAR_IDX *buffer) {
X    map_errors();
X    print_to_window(WIN_ERROR,-1,error_line,0,len,buffer);
X  }
X  
X! int do_keyboard(int cmd, int *cancel) {
X    CHAR_IDX ch;
X    switch (commands[cmd].what) {
X      CHAR *c;
X***************
X*** 1992,2525 ****
X  static int auto_input = 1;
X  static CHAR *LAST_UNPARSED = NULL;
X  
X- void schedule(void) {
X- #ifdef _HPUX_SOURCE
X-   int readfs,writefs;
X- #else
X-   fd_set readfs,writefs;
X- #endif
X-   struct timeval *timeout,Timeout;
X-   long atime;
X-   int res;
X-   int last_columns=0, last_lines = 0;
X-   int remove = 0; /* Unparsed */
X-   int cancel = 0, no_option = 0;
X  
X!   while (!quitflag) {
X!     int biggest = terminal;
X!     int skip = 0, was_input = 0;
X!     int tail_ptr;
X  
X!     if (need_redraw) {
X!       need_redraw = 0;
X!       do_redraw();
X!     }
X  
X!     if (last_columns != columns) {
X!       last_columns = columns;
X!       if (pager_state && !remove)
X! 	update_prompt(have_error ? WIN_ERROR : WIN_TEXT, 5);
X!       rewrap_windows();
X!       skip = 1; /* Prompt need recalculating */
X!     } 
X!     if (last_lines != lines) { 
X!       last_lines = lines;
X!       skip = 1; /* Prompt need recalculating */
X!     } 
X  
X!     /* With this way we can lost some messages 
X!      * but it is very diffuclt guarantee that message is really
X!      * printed before signal occurs (because messag can go out
X!      * of display in window anyway)
X!      */
X!     if (got_from_TAIL(&tail_ptr)) {
X!       print_errors(tail_ptr);
X!       skip = 1; /* Prompt need recalculating */
X!     }
X  
X! #ifdef _HPUX_SOURCE
X!     readfs = 1 << terminal;    
X!     writefs = 0;
X! #else
X!     FD_ZERO(&readfs);
X!     FD_SET(terminal,&readfs);
X!     FD_ZERO(&writefs);
X! #endif
X  
X!     if (need_line_flush() || need_flush_buffer()) {
X! #ifdef _HPUX_SOURCE
X!       writefs |= 1 << terminal;
X! #else
X!       FD_SET(terminal,&writefs);
X! #endif
X!     }
X  
X!     if (-1 != FP && !EOF_IN_FILE) {
X!       if (!NOT_SELECTABLE) {
X! #ifdef _HPUX_SOURCE
X! 	readfs |= 1 << FP;
X! #else
X! 	FD_SET(FP,&readfs);
X! #endif
X! 	if (FP > biggest) biggest = FP;
X!       } else skip = 1;
X!     } 
X!     
X!     if (skip) {
X!       timeout = &Timeout;
X!       Timeout.tv_sec = 0;
X!       Timeout.tv_usec = 0;
X!     } else if (ask_timeout(&atime)) {
X!       timeout = &Timeout;
X!       Timeout.tv_sec = atime / 10L;
X!       Timeout.tv_usec = ( atime % 10L) * 100000L;
X!     } else timeout = NULL;
X  
X!     if (pager_state && showtime && !timeout) {
X!       timeout = &Timeout;
X!       Timeout.tv_sec = seconds_to_next_minute();
X!       Timeout.tv_usec = 1;
X!       skip = 2;
X!     } else if (pager_state && showtime) {
X!       int s = seconds_to_next_minute();
X!       if (s < timeout -> tv_sec) {
X! 	timeout = &Timeout;
X! 	Timeout.tv_sec = s;
X! 	Timeout.tv_usec = 1;
X! 	skip = 2;
X!       }
X!     }
X  
X-     if (DEBUG_FILIO || DEBUG_TERM || DEBUG_BUFFER) {
X-       print_debug("Doing select: max fd=%d, %s (skip=%d)",
X- 		  biggest, timeout ? "timeout" : "no timeout",
X- 		  skip);
X-     }
X  
X! #ifdef _HPUX_SOURCE
X!     res = select(biggest+1,&readfs,&writefs,(int *)NULL,
X! 		     timeout);
X! #else
X!     res = select(biggest+1,&readfs,&writefs,(fd_set *)NULL,
X! 		     timeout);
X! #endif
X!     if (-1 == res) {
X!       int code = errno;
X!       if (DEBUG_FILIO) {
X! 	print_debug("Got errno=%d from select",
X! 		    code);
X!       }
X!       if (EINTR == code) continue;
X!       if (ENXIO == code && !NOT_SELECTABLE) {
X! 	not_selectable(&FP);
X! 	continue;
X!       }
X!       print_error(code,
X! 		  "(%s) Error when waiting response of terminal from /dev/tty",
X! 		  prog);
X!       quitflag = 1;
X!       continue;
X!     }
X!     if (0 == res && !skip) do_timeout();
X  
X! #ifdef _HPUX_SOURCE
X!     if (readfs & (1 << terminal))
X! #else
X!     if (FD_ISSET(terminal,&readfs)) 
X! #endif
X!       {
X! 	
X! 	CHAR input_buffer[INPUT_BUFFER_SIZE+1];
X! 	int len = read_from_terminal(input_buffer);
X! 	if (len > 0) parse_input(input_buffer, len); 
X! 	was_input = 1;
X!       }
X!     
X!     cancel = 0;
X!     while (command_len > 0) {
X!       CHAR *name;
X!       if (DEBUG_TERM) {
X! 	CHAR *R1=printable_command(0);
X! 	print_debug("Command: %s",R1);
X! 	FREE(R1);
X!       }
X!       if (do_escape(0) || 
X! 	  cancel || 
X! 	  do_keyboard(0,&cancel)) {
X  
X!       } else if (0 != (name = key_name(0))) {
X! 	  char *buffer1 = "Key ", *buffer3 = " haven't action";
X! 	  int bl1 = strlen(buffer1), bl3 = strlen(buffer3);
X! 	  int bl2 = strlen(Cs(name));
X! 	  CHAR_IDX buffer[50];
X! 	  map_input(MAP_ASCII,bl1,rCs(buffer1),buffer);
X! 	  map_input(MAP_ASCII,bl2,name,buffer+bl1);
X! 	  map_input(MAP_ASCII,bl3,rCs(buffer3),buffer+bl1+bl2);
X! 	  message_to_error(bl1+bl2+bl3,buffer);
X!       } else {
X! 	CHAR *R1=printable_sequence(0);
X! 	print_notify("Unexpected escape sequence: %s",R1);
X! 	free(R1);
X!       }
X! 
X!       rem_command(0);
X      }
X  
X!     if (pager_state)
X!     {
X!       CHAR *R2=unparsed_printable();
X!       CHAR *T=composing();
X! 
X!       if (cancel) {
X! 	clear_errors();
X! 	key_group = G_PAGER; 
X        }
X- 
X-       if (T) {
X- 	CHAR *TMP = concat_text(NULL,T);
X- 	if (R2) {
X- 	  TMP = concat_text(TMP,rCs(" "));
X- 	  TMP = concat_text(TMP,R2);
X- 	  FREE(R2);
X- 	}
X- 	R2 = TMP;
X-       }
X- 
X-       if (R2) {
X- 	int len = strlen(Cs(R2));
X- 
X- 	if (LAST_UNPARSED && 0 == strcmp(Cs(R2),Cs(LAST_UNPARSED))) {
X- 	  FREE(R2);
X- 
X- 	} else {
X- 	  CHAR_IDX *mapped = (CHAR_IDX *)MALLOC(len * sizeof(CHAR_IDX));
X- 
X- 	  if (LAST_UNPARSED) {
X- 	    FREE(LAST_UNPARSED); LAST_UNPARSED = NULL;
X- 	  }
X  	  
X! 	  clear_window(WIN_UNPARSED);
X! 	  set_window_status(WIN_UNPARSED,0,0,0,8,4,PRI_COMPLETE,0);
X! 	  map_window(WIN_UNPARSED,0,lines);
X! 
X! 	  map_input(MAP_ASCII,len,R2,mapped);
X! 	  print_to_window(WIN_UNPARSED,1,1,FL_BOLD,len,mapped);
X! 	
X! 	  set_win_prompt(WIN_UNPARSED,len+1,1);
X! 	  FREE(mapped);
X! 	  LAST_UNPARSED = R2;
X! 	  remove = 1;
X! 	}
X!       } else if (remove) {
X! 	if (LAST_UNPARSED) {
X! 	  FREE(LAST_UNPARSED); LAST_UNPARSED = NULL;
X! 	}
X! 	unmap_window(WIN_UNPARSED);
X! 	remove = 0;
X!       }
X      }
X!     
X!     if (pager_state && get_next) {
X!       CHAR *name = NULL;
X  
X!       set_win_prompt(-1,-1,-1);
X!       update_prompt(WIN_TEXT, 0);
X!       clear_window(WIN_TEXT);
X!       map_window(WIN_TEXT,1-down_line,1);
X        
X!       if (0 == arg_left) { 
X! 	if (auto_input) {
X! 	  if (!isatty(0)) name = rCs(STD_INPUT);
X! 	  else {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    copyright_page(WIN_TEXT);
X! 	    auto_input = 0;
X! 	    if (-1 != FP) {
X! 	      exit_content(&CT);
X! 	      close_file(&FP);
X! 	    }
X! 	    EOF_IN_FILE = 1;
X  	  }
X! 	} else quitflag = 1; 
X!       } else while(arg_left--> 0) {
X! 	if ('-' == **arg_vec && !no_option) {
X! 	  if (0 == strcmp("-",*arg_vec)) name = rCs(STD_INPUT);
X! 	  else if (0 == strcmp("--",*arg_vec)) no_option = 1;
X! 	  else if (0 == strcmp("-A",*arg_vec)) { map = MAP_ASCII;
X  						 map_param = NULL; }
X! 	  else if (0 == strcmp("-L",*arg_vec)) { map = MAP_LATIN1;
X! 						 map_param = NULL; }
X! 	  else if (0 == strcmp("-L1",*arg_vec)) { map = MAP_LATIN1;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-L2",*arg_vec)) { map = MAP_LATIN2;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-L3",*arg_vec)) { map = MAP_LATIN3;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-L4",*arg_vec)) { map = MAP_LATIN4;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-L5",*arg_vec)) { map = MAP_LATIN5;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-M",*arg_vec)) { map = MAP_MULTINATIONAL;
X! 						 map_param = NULL; }
X! 	  else if (0 == strcmp("-PC",*arg_vec)) { map = MAP_CP437;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-MAC",*arg_vec)) { map = MAP_MAC;
X! 						   map_param = NULL; }
X! 	  else if (0 == strcmp("-F",*arg_vec)) { map = MAP_FINNISH;
X! 						 map_param = NULL; }
X! 	  else if (0 == strcmp("-UK",*arg_vec)) { map = MAP_UK;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-NR",*arg_vec)) { map = MAP_NOR;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-SW",*arg_vec)) { map = MAP_SWE;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-FR",*arg_vec)) { map = MAP_BEL;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-CA",*arg_vec)) { map = MAP_CAN;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-GR",*arg_vec)) { map = MAP_GER;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-SP",*arg_vec)) { map = MAP_SPA;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-IT",*arg_vec)) { map = MAP_ITAL;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-U7",*arg_vec)) { map = MAP_UTF7;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-U8",*arg_vec)) { map = MAP_UTF8;
X! 						  map_param = NULL; }
X! 	  else if (0 == strcmp("-MN",*arg_vec)) { map = MAP_Mnem;
X! 						  map_param = rCs("29"); }
X! 	  else if (0 == strncmp("-MN:",*arg_vec,4)) { map = MAP_Mnem;
X! 						  map_param = rCs(*arg_vec+4); }
X! 	  else if (0 == strcmp("-t",*arg_vec)) enable_tab = 0;
X! 	  else if (0 == strcmp("-t+",*arg_vec)) enable_tab = 1;
X! 	  else if (0 == strncmp("-t",*arg_vec,2) && isdigit((*arg_vec)[2])) {
X! 	    input_tabstep = atoi((*arg_vec)+2);
X  	  }
X! 	  else if (0 == strncmp("-i",*arg_vec,2) && isdigit((*arg_vec)[2])) {
X! 	    input_indentstep = atoi((*arg_vec)+2);
X  	  }
X! 	  else if (0 == strcmp("-w",*arg_vec)) enable_wrapping = 0;
X! 	  else if (0 == strcmp("-w+",*arg_vec)) enable_wrapping = 1;
X! 	  else if (0 == strcmp("-sp",*arg_vec)) enable_eatspc = 0;
X! 	  else if (0 == strcmp("-sp+",*arg_vec)) enable_eatspc = 1;
X! 	  else if (0 == strcmp("-st",*arg_vec)) showtime = 0;
X! 	  else if (0 == strcmp("-st+",*arg_vec)) showtime = 1;
X! 	  else if (0 == strcmp("-j",*arg_vec)) enable_fulljust = 0;
X! 	  else if (0 == strcmp("-j+",*arg_vec)) enable_fulljust = 1;
X! 	  else if (0 == strcmp("-p",*arg_vec)) have_prompt = 0;
X! 	  else if (0 == strcmp("-p+",*arg_vec)) have_prompt = 1;
X! 	  else if (0 == strcmp("-pm",*arg_vec)) enable_pages = 0;
X! 	  else if (0 == strcmp("-pm+",*arg_vec)) enable_pages = 1;
X! 	  else if (0 == strcmp("-nu",*arg_vec)) eoln_type = EOLN_unix;
X! 	  else if (0 == strcmp("-nn",*arg_vec)) eoln_type = EOLN_network;
X! 	  else if (0 == strcmp("-pl",*arg_vec)) content_type = CT_plain;
X! 	  else if (0 == strcmp("-tr",*arg_vec)) content_type = CT_terminal;
X! 	  else if (0 == strcmp("-er",*arg_vec)) content_type = CT_enriched;
X! 	  else if (0 == strcmp("-rt",*arg_vec)) content_type = CT_richtext;
X! 	  else if (0 == strcmp("-H",*arg_vec)) {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    help_page(WIN_TEXT);
X! 	    arg_vec++;
X! 	    auto_input = 0;
X! 	    if (-1 != FP) {
X! 	      exit_content(&CT);
X! 	      close_file(&FP);
X! 	    }
X! 	    EOF_IN_FILE = 1;
X! 	    break;
X! 	  } else if (0 == strcmp("-cs",*arg_vec)) {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    charset_listing(WIN_TEXT);
X! 	    arg_vec++;
X! 	    auto_input = 0;
X! 	    if (-1 != FP) {
X! 	      exit_content(&CT);
X! 	      close_file(&FP);
X! 	    }
X! 	    EOF_IN_FILE = 1;
X! 	    break;
X! 	  } else if (0 == strcmp("-DS",*arg_vec)) {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    debug_page(WIN_TEXT);
X! 	    arg_vec++;
X! 	    auto_input = 0;
X! 	    if (-1 != FP) {
X! 	      exit_content(&CT);
X! 	      close_file(&FP);
X! 	    }
X! 	    EOF_IN_FILE = 1;
X! 	    break;
X! 	  } else if (0 == strcmp("-T",*arg_vec)) {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    test_page(WIN_TEXT);
X! 	    arg_vec++;
X! 	    auto_input = 0;
X! 	    EOF_IN_FILE = 1;
X! 	    break;
X! 	  } else if (0 == strcmp("-T2",*arg_vec)) {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    test_page2(WIN_TEXT);
X! 	    arg_vec++;
X! 	    auto_input = 0;
X! 	    if (-1 != FP) {
X! 	      exit_content(&CT);
X! 	      close_file(&FP);
X! 	    }
X! 	    EOF_IN_FILE = 1;
X! 	    break;
X! 	  } else if (0 == strcmp("-T3",*arg_vec)) {
X! 	    set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			      !enable_eatspc,input_tabstep,input_indentstep,
X! 			      PRI_NORMAL,enable_pages);
X! 	    test_page3(WIN_TEXT);
X! 	    arg_vec++;
X! 	    auto_input = 0;
X! 	    if (-1 != FP) {
X! 	      exit_content(&CT);
X! 	      close_file(&FP);
X! 	    }
X! 	    EOF_IN_FILE = 1;
X! 	    break;
X! 	  } else if (0 == strcmp("-CS",*arg_vec)) {
X! 	    if (arg_left > 0) {
X! 	      if ('\0' == (*++arg_vec)[0]) {
X! 		arg_left--;
X! 		map = map_null_name;
X! 		map_param = NULL;
X! 	      } else {
X! 		int cs = find_map(rCs(*arg_vec));
X! 		arg_left--;
X! 		map = MAP_ASCII;
X! 		map_param = NULL;
X! 		if (cs >= 0) map = cs;
X! 		else print_notify("Bad charset: %s",*arg_vec);
X! 	      }
X! 	    } else print_notify("Argument expected for -CS");
X! 	  } else if (0 == strcmp("-ct",*arg_vec)) {
X! 	    if (arg_left > 0) {
X! 	      int ct = search_content(rCs(*++arg_vec),0);
X! 	      arg_left--;
X! 	      content_type = CT_plain;
X! 	      if (ct >= 0) content_type = ct;
X! 	      else print_notify("Bad content-type: %s",*arg_vec);
X! 	    } else print_notify("Argument expected for -ct");
X! 	  } 
X! 	  /* OBSOLETED: */
X! 	  else if (0 == strcmp("-b",*arg_vec)) content_type = CT_plain;
X! 	  else if (0 == strcmp("-b+",*arg_vec)) content_type = CT_terminal;
X! 	  else if (0 == strcmp("-a",*arg_vec)) content_type  = CT_plain;
X! 	  else if (0 == strcmp("-a+",*arg_vec)) content_type = CT_terminal;
X! 	  else if (0 == strcmp("-nl",*arg_vec)) NOT_IN_USE = 0;
X! 	  else if (0 == strcmp("-nl+",*arg_vec)) NOT_IN_USE = 0;
X! 	  else print_notify("Bad option: %s",*arg_vec);
X! 
X! 	} else {
X  	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X  			    !enable_eatspc,input_tabstep,input_indentstep,
X  			    PRI_NORMAL,enable_pages);
X! 	  name = rCs(*arg_vec);
X  	  arg_vec++;
X  	  break;
X! 	}
X! 	arg_vec++;
X!       }
X! 
X!       if (NULL == name && auto_input)
X! 	name = rCs(STD_INPUT);
X!       
X!       if (name) {
X! 	if (-1 != FP) {
X! 	  exit_content(&CT);
X! 	  close_file(&FP);
X! 	}
X! 	auto_input = 0;
X! 	read_file(name,&FP,&EOF_IN_FILE,&EOLN_STATE,
X! 		  &CT,map,map_param,
X! 		  content_type);
X  	
X  	set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X  			  !enable_eatspc,input_tabstep,input_indentstep,
X  			  PRI_NORMAL,enable_pages);
X  
X        }
X        
X!       get_next = 0;
X      }
X  
X! #ifdef _HPUX_SOURCE
X!     if (-1 != FP && !EOF_IN_FILE && 
X! 	(NOT_SELECTABLE || (readfs & (1 << FP))))
X! #else
X!     if (-1 != FP && !EOF_IN_FILE && 
X! 	(NOT_SELECTABLE || FD_ISSET(FP,&readfs)))
X! #endif
X!       {
X! 	handle_file(&CT,&FP,&EOF_IN_FILE,&EOLN_STATE);
X  
X! 	if (do_forwarding) {
X! 	  int prev,offset,Y,roffset,pagenum,pages;
X! 	  for (window_pos(WIN_TEXT,&Y,&offset,&roffset,&pagenum,&pages),
X! 	       prev=roffset; 
X! 	       window_rlines(WIN_TEXT) - roffset > lines -Y && 
X! 	       roffset - prev <lines;
X! 	       window_pos(WIN_TEXT,&Y,&offset,&roffset,&pagenum,&pages))
X! 	    scroll_window(WIN_TEXT); 
X! 	  do_forwarding = 0;
X! 	}
X  
X!       }
X  
X!     if (pager_state && !remove)
X!       update_prompt(have_error ? WIN_ERROR : WIN_TEXT,
X! 		    !quitflag ? 
X! 		       have_error ? 3 : 
X! 		         !EOF_IN_FILE ? 2 : 
X! 		           arg_left > 0 ? 1 : 
X!                            4 : 
X!                     0);
X  
X  
X! #ifdef _HPUX_SOURCE
X!     if (writefs & (1 << terminal))
X! #else
X!     if (FD_ISSET(terminal,&writefs)) 
X! #endif
X!       { 
X! 	int val = need_line_flush();
X! 	if (was_input && 2 != val) {
X! 	  if (DEBUG_BUFFER || DEBUG_LBUFFER) 
X! 	    print_debug("BUFFER: was_input=%d, "
X! 			"need_line_flush()=%d - no flush",
X! 			was_input,val);
X! 	} else {
X! 	  if (DEBUG_BUFFER || DEBUG_LBUFFER) 
X! 	    print_debug("BUFFER: was_input=%d, "
X! 			"need_line_flush()=%d - flushing...",
X! 			was_input,val);
X! 	  if (!flush_some_lines())
X! 	    flush_buffer(0);
X! 	}
X!       }
X    }
X  
X    if (-1 != FP) {
X      exit_content(&CT);
X      close_file(&FP);
X    }
X  
X    if (LAST_UNPARSED) {
X      FREE(LAST_UNPARSED); LAST_UNPARSED = NULL;
X    }
X--- 2013,2438 ----
X  static int auto_input = 1;
X  static CHAR *LAST_UNPARSED = NULL;
X  
X  
X! /* **** */
X  
X! static int remove_uncomplete = 0;
X! static int no_option = 0;
X! static int last_columns=0, last_lines = 0;
X  
X! static int file_callback_before(void) {
X!   
X!   int skip = 0;
X!   int tail_ptr;
X  
X!   cancel = 0;
X!   
X!   if (need_redraw) {
X!     need_redraw = 0;
X!     do_redraw();
X!   }
X  
X!   if (last_columns != columns) {
X!     last_columns = columns;
X!     if (!remove_uncomplete)
X!       update_prompt(have_error ? WIN_ERROR : WIN_TEXT, PROMPT_WRAP);
X!     rewrap_windows();
X!     skip = 1; /* Prompt need recalculating */
X!   } 
X  
X!   if (last_lines != lines) { 
X!     last_lines = lines;
X!     skip = 1; /* Prompt need recalculating */
X!   } 
X  
X!   /* With this way we can lost some messages 
X!    * but it is very diffuclt guarantee that message is really
X!    * printed before signal occurs (because messag can go out
X!    * of display in window anyway)
X!    */
X!   if (got_from_TAIL(&tail_ptr)) {
X!     print_errors(tail_ptr);
X!     skip = 1; /* Prompt need recalculating */
X!   }
X  
X!   return skip;
X! }
X  
X  
X! void file_callback_after(void) {
X  
X!   CHAR *R2=unparsed_printable();
X!   CHAR *T=composing();
X!   
X!   if (cancel) {
X!     clear_errors();
X!     key_group = G_PAGER; 
X!   }
X  
X!   if (T) {
X!     CHAR *TMP = concat_text(NULL,T);
X!     if (R2) {
X!       TMP = concat_text(TMP,rCs(" "));
X!       TMP = concat_text(TMP,R2);
X!       FREE(R2);
X      }
X+     R2 = TMP;
X+   }
X  
X!   if (R2) {
X!     int len = strlen(Cs(R2));
X!     
X!     if (LAST_UNPARSED && 0 == strcmp(Cs(R2),Cs(LAST_UNPARSED))) {
X!       FREE(R2);
X!       
X!     } else {
X!       CHAR_IDX *mapped = (CHAR_IDX *)MALLOC(len * sizeof(CHAR_IDX));
X!       
X!       if (LAST_UNPARSED) {
X! 	FREE(LAST_UNPARSED); LAST_UNPARSED = NULL;
X        }
X  	  
X!       clear_window(WIN_UNPARSED);
X!       set_window_status(WIN_UNPARSED,0,0,0,8,4,PRI_COMPLETE,0);
X!       map_window(WIN_UNPARSED,0,lines);
X!       
X!       map_input(MAP_ASCII,len,R2,mapped);
X!       print_to_window(WIN_UNPARSED,1,1,FL_BOLD,len,mapped);
X!       
X!       set_win_prompt(WIN_UNPARSED,len+1,1);
X!       FREE(mapped);
X!       LAST_UNPARSED = R2;
X!       remove_uncomplete = 1;
X      }
X!   } else if (remove_uncomplete) {
X!     if (LAST_UNPARSED) {
X!       FREE(LAST_UNPARSED); LAST_UNPARSED = NULL;
X!     }
X!     unmap_window(WIN_UNPARSED);
X!     remove_uncomplete = 0;
X!   }
X  
X!   if (get_next) {
X!     CHAR *name = NULL;
X!     
X!     set_win_prompt(-1,-1,-1);
X!     update_prompt(WIN_TEXT, 0);
X!     clear_window(WIN_TEXT);
X!     map_window(WIN_TEXT,1-down_line,1);
X        
X!     if (0 == arg_left) { 
X!       if (auto_input) {
X! 	if (!isatty(0)) name = rCs(STD_INPUT);
X! 	else {
X! 	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			    !enable_eatspc,input_tabstep,input_indentstep,
X! 			    PRI_NORMAL,enable_pages);
X! 	  copyright_page(WIN_TEXT);
X! 	  auto_input = 0;
X! 	  if (-1 != FP) {
X! 	    exit_content(&CT);
X! 	    close_file(&FP);
X  	  }
X! 	  EOF_IN_FILE = 1;
X! 	}
X!       } else quitflag = 1; 
X!     } else while(arg_left--> 0) {
X!       if ('-' == **arg_vec && !no_option) {
X! 	if (0 == strcmp("-",*arg_vec)) name = rCs(STD_INPUT);
X! 	else if (0 == strcmp("--",*arg_vec)) no_option = 1;
X! 	else if (0 == strcmp("-A",*arg_vec)) { map = MAP_ASCII;
X! 					       map_param = NULL; }
X! 	else if (0 == strcmp("-L",*arg_vec)) { map = MAP_LATIN1;
X! 					       map_param = NULL; }
X! 	else if (0 == strcmp("-L1",*arg_vec)) { map = MAP_LATIN1;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-L2",*arg_vec)) { map = MAP_LATIN2;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-L3",*arg_vec)) { map = MAP_LATIN3;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-L4",*arg_vec)) { map = MAP_LATIN4;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-L5",*arg_vec)) { map = MAP_LATIN5;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-M",*arg_vec)) { map = MAP_MULTINATIONAL;
X! 					       map_param = NULL; }
X! 	else if (0 == strcmp("-PC",*arg_vec)) { map = MAP_CP437;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-MAC",*arg_vec)) { map = MAP_MAC;
X  						 map_param = NULL; }
X! 	else if (0 == strcmp("-F",*arg_vec)) { map = MAP_FINNISH;
X! 					       map_param = NULL; }
X! 	else if (0 == strcmp("-UK",*arg_vec)) { map = MAP_UK;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-NR",*arg_vec)) { map = MAP_NOR;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-SW",*arg_vec)) { map = MAP_SWE;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-FR",*arg_vec)) { map = MAP_BEL;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-CA",*arg_vec)) { map = MAP_CAN;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-GR",*arg_vec)) { map = MAP_GER;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-SP",*arg_vec)) { map = MAP_SPA;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-IT",*arg_vec)) { map = MAP_ITAL;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-U7",*arg_vec)) { map = MAP_UTF7;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-U8",*arg_vec)) { map = MAP_UTF8;
X! 						map_param = NULL; }
X! 	else if (0 == strcmp("-MN",*arg_vec)) { map = MAP_Mnem;
X! 						map_param = rCs("29"); }
X! 	else if (0 == strncmp("-MN:",*arg_vec,4)) { map = MAP_Mnem;
X! 						    map_param = rCs(*arg_vec+4); }
X! 	else if (0 == strcmp("-t",*arg_vec)) enable_tab = 0;
X! 	else if (0 == strcmp("-t+",*arg_vec)) enable_tab = 1;
X! 	else if (0 == strncmp("-t",*arg_vec,2) && isdigit((*arg_vec)[2])) {
X! 	  input_tabstep = atoi((*arg_vec)+2);
X! 	}
X! 	else if (0 == strncmp("-i",*arg_vec,2) && isdigit((*arg_vec)[2])) {
X! 	  input_indentstep = atoi((*arg_vec)+2);
X! 	}
X! 	else if (0 == strcmp("-w",*arg_vec)) enable_wrapping = 0;
X! 	else if (0 == strcmp("-w+",*arg_vec)) enable_wrapping = 1;
X! 	else if (0 == strcmp("-sp",*arg_vec)) enable_eatspc = 0;
X! 	else if (0 == strcmp("-sp+",*arg_vec)) enable_eatspc = 1;
X! 	else if (0 == strcmp("-st",*arg_vec)) showtime = 0;
X! 	else if (0 == strcmp("-st+",*arg_vec)) showtime = 1;
X! 	else if (0 == strcmp("-j",*arg_vec)) enable_fulljust = 0;
X! 	else if (0 == strcmp("-j+",*arg_vec)) enable_fulljust = 1;
X! 	else if (0 == strcmp("-p",*arg_vec)) have_prompt = 0;
X! 	else if (0 == strcmp("-p+",*arg_vec)) have_prompt = 1;
X! 	else if (0 == strcmp("-pm",*arg_vec)) enable_pages = 0;
X! 	else if (0 == strcmp("-pm+",*arg_vec)) enable_pages = 1;
X! 	else if (0 == strcmp("-nu",*arg_vec)) eoln_type = EOLN_unix;
X! 	else if (0 == strcmp("-nn",*arg_vec)) eoln_type = EOLN_network;
X! 	else if (0 == strcmp("-pl",*arg_vec)) content_type = CT_plain;
X! 	else if (0 == strcmp("-tr",*arg_vec)) content_type = CT_terminal;
X! 	else if (0 == strcmp("-er",*arg_vec)) content_type = CT_enriched;
X! 	else if (0 == strcmp("-rt",*arg_vec)) content_type = CT_richtext;
X! 	else if (0 == strcmp("-H",*arg_vec)) {
X! 	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			    !enable_eatspc,input_tabstep,input_indentstep,
X! 			    PRI_NORMAL,enable_pages);
X! 	  help_page(WIN_TEXT);
X! 	  arg_vec++;
X! 	  auto_input = 0;
X! 	  if (-1 != FP) {
X! 	    exit_content(&CT);
X! 	    close_file(&FP);
X  	  }
X! 	  EOF_IN_FILE = 1;
X! 	  break;
X! 	} else if (0 == strcmp("-cs",*arg_vec)) {
X! 	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			    !enable_eatspc,input_tabstep,input_indentstep,
X! 			    PRI_NORMAL,enable_pages);
X! 	  charset_listing(WIN_TEXT);
X! 	  arg_vec++;
X! 	  auto_input = 0;
X! 	  if (-1 != FP) {
X! 	    exit_content(&CT);
X! 	    close_file(&FP);
X  	  }
X! 	  EOF_IN_FILE = 1;
X! 	  break;
X! 	} else if (0 == strcmp("-DS",*arg_vec)) {
X  	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X  			    !enable_eatspc,input_tabstep,input_indentstep,
X  			    PRI_NORMAL,enable_pages);
X! 	  debug_page(WIN_TEXT);
X  	  arg_vec++;
X+ 	  auto_input = 0;
X+ 	  if (-1 != FP) {
X+ 	    exit_content(&CT);
X+ 	    close_file(&FP);
X+ 	  }
X+ 	  EOF_IN_FILE = 1;
X  	  break;
X! 	} else if (0 == strcmp("-T",*arg_vec)) {
X! 	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			    !enable_eatspc,input_tabstep,input_indentstep,
X! 			    PRI_NORMAL,enable_pages);
X! 	  test_page(WIN_TEXT);
X! 	  arg_vec++;
X! 	  auto_input = 0;
X! 	  EOF_IN_FILE = 1;
X! 	  break;
X! 	} else if (0 == strcmp("-T2",*arg_vec)) {
X! 	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			    !enable_eatspc,input_tabstep,input_indentstep,
X! 			    PRI_NORMAL,enable_pages);
X! 	  test_page2(WIN_TEXT);
X! 	  arg_vec++;
X! 	  auto_input = 0;
X! 	  if (-1 != FP) {
X! 	    exit_content(&CT);
X! 	    close_file(&FP);
X! 	  }
X! 	  EOF_IN_FILE = 1;
X! 	  break;
X! 	} else if (0 == strcmp("-T3",*arg_vec)) {
X! 	  set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			    !enable_eatspc,input_tabstep,input_indentstep,
X! 			    PRI_NORMAL,enable_pages);
X! 	  test_page3(WIN_TEXT);
X! 	  arg_vec++;
X! 	  auto_input = 0;
X! 	  if (-1 != FP) {
X! 	    exit_content(&CT);
X! 	    close_file(&FP);
X! 	  }
X! 	  EOF_IN_FILE = 1;
X! 	  break;
X! 	} else if (0 == strcmp("-CS",*arg_vec)) {
X! 	  if (arg_left > 0) {
X! 	    if ('\0' == (*++arg_vec)[0]) {
X! 	      arg_left--;
X! 	      map = map_null_name;
X! 	      map_param = NULL;
X! 	    } else {
X! 	      int cs = find_map(rCs(*arg_vec));
X! 	      arg_left--;
X! 	      map = MAP_ASCII;
X! 	      map_param = NULL;
X! 	      if (cs >= 0) map = cs;
X! 	      else print_notify("Bad charset: %s",*arg_vec);
X! 	    }
X! 	  } else print_notify("Argument expected for -CS");
X! 	} else if (0 == strcmp("-ct",*arg_vec)) {
X! 	  if (arg_left > 0) {
X! 	    int ct = search_content(rCs(*++arg_vec),0);
X! 	    arg_left--;
X! 	    content_type = CT_plain;
X! 	    if (ct >= 0) content_type = ct;
X! 	    else print_notify("Bad content-type: %s",*arg_vec);
X! 	  } else print_notify("Argument expected for -ct");
X! 	} 
X! 	/* OBSOLETED: */
X! 	else if (0 == strcmp("-b",*arg_vec)) content_type = CT_plain;
X! 	else if (0 == strcmp("-b+",*arg_vec)) content_type = CT_terminal;
X! 	else if (0 == strcmp("-a",*arg_vec)) content_type  = CT_plain;
X! 	else if (0 == strcmp("-a+",*arg_vec)) content_type = CT_terminal;
X! 	else if (0 == strcmp("-nl",*arg_vec)) NOT_IN_USE = 0;
X! 	else if (0 == strcmp("-nl+",*arg_vec)) NOT_IN_USE = 0;
X! 	else print_notify("Bad option: %s",*arg_vec);
X  	
X+       } else {
X  	set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X  			  !enable_eatspc,input_tabstep,input_indentstep,
X  			  PRI_NORMAL,enable_pages);
X+ 	name = rCs(*arg_vec);
X+ 	arg_vec++;
X+ 	break;
X+       }
X+       arg_vec++;
X+     }
X  
X+     if (NULL == name && auto_input)
X+       name = rCs(STD_INPUT);
X+     
X+     if (name) {
X+       if (-1 != FP) {
X+ 	exit_content(&CT);
X+ 	close_file(&FP);
X        }
X+       auto_input = 0;
X+       read_file(name,&FP,&EOF_IN_FILE,&EOLN_STATE,
X+ 		&CT,map,map_param,
X+ 		content_type);
X        
X!       set_window_status(WIN_TEXT,enable_tab,enable_wrapping,
X! 			!enable_eatspc,input_tabstep,input_indentstep,
X! 			PRI_NORMAL,enable_pages);
X!       
X      }
X+       
X+     get_next = 0;
X+   }
X  
X!   if (!remove_uncomplete)
X!     update_prompt(have_error ? WIN_ERROR : WIN_TEXT,
X! 		  !quitflag ? 
X! 		  have_error ? PROMPT_NEXT_PAGE_MES : 
X! 		  !EOF_IN_FILE ? PROMPT_READ : 
X! 		  arg_left > 0 ? PROMPT_NEXT_PAGE : 
X! 		  PROMPT_NEXT_PAGE_LAS : 
X! 		  0);
X  
X! }
X  
X! static int file_timeout(long *value) {
X!   long res=-1;
X!   long a;
X!   int val = 1;
X!   
X!   if (ask_timeout(&a))
X!     res = a;
X!   
X!   if (showtime) {
X!     /* runs little in back ! */
X!     a = seconds_to_next_minute()*10+1;
X!     if (-1 == res || a < res) {
X!       res = a;
X!       val = 2;
X!     }
X!   }
X  
X!   if (res >= 0) {
X!     *value = res;
X!     return val;
X!   }
X!   return 0;
X! }
X  
X+ static void file_do_timeout(int key) {
X+   if (1 == key)
X+     do_timeout();
X  
X! }
X! 
X! static void file_handler(void) {
X! 
X!   handle_file(&CT,&FP,&EOF_IN_FILE,&EOLN_STATE);
X!   
X!   if (do_forwarding) {
X!     int prev,offset,Y,roffset,pagenum,pages;
X!     for (window_pos(WIN_TEXT,&Y,&offset,&roffset,&pagenum,&pages),
X! 	 prev=roffset; 
X! 	 window_rlines(WIN_TEXT) - roffset > lines -Y && 
X! 	 roffset - prev <lines;
X! 	 window_pos(WIN_TEXT,&Y,&offset,&roffset,&pagenum,&pages))
X!       scroll_window(WIN_TEXT); 
X!     do_forwarding = 0;
X    }
X+   
X+   if (!remove_uncomplete)
X+     update_prompt(have_error ? WIN_ERROR : WIN_TEXT,
X+ 		  !quitflag ? 
X+ 		  have_error ? PROMPT_NEXT_PAGE_MES : 
X+ 		  !EOF_IN_FILE ? PROMPT_READ : 
X+ 		  arg_left > 0 ? PROMPT_NEXT_PAGE : 
X+ 		  PROMPT_NEXT_PAGE_LAS : 
X+ 		  0);
X+ }
X  
X+ static void file_schedule(void) {
X+   last_columns = columns;
X+   last_lines = lines;
X+   real_schedule(&FP,&EOF_IN_FILE,&NOT_SELECTABLE,
X+ 		&file_handler,
X+ 		&file_timeout,&file_do_timeout,
X+ 		&quitflag,&file_callback_before,
X+ 		&file_callback_after,1);
X+   
X    if (-1 != FP) {
X      exit_content(&CT);
X      close_file(&FP);
X    }
X  
X+  
X    if (LAST_UNPARSED) {
X      FREE(LAST_UNPARSED); LAST_UNPARSED = NULL;
X    }
X***************
X*** 2685,2692 ****
X    }
X  
X    get_terminal_state();
X!   schedule();
X!   close_files();
X    reset_terminal_state();
X    close_terminal();
X    if (print_it) {
X--- 2598,2609 ----
X    }
X  
X    get_terminal_state();
X! 
X!   if (init_schedule()) {
X!     file_schedule();
X!     close_files();
X!   }
X! 
X    reset_terminal_state();
X    close_terminal();
X    if (print_it) {
Xdiff -c ../kehpager-1.2/terminal.c ./terminal.c
X*** ../kehpager-1.2/terminal.c	Sat Jul  9 13:28:58 1994
X--- ./terminal.c	Sat Oct 15 18:29:21 1994
X***************
X*** 45,51 ****
X  		      struct sigaction *oact);
X  #endif
X  
X! #if defined(SUNOS5) || defined(_HPUX_SOURCE) || defined(__386BSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
X  #define PID pid_t 
X  #else
X  #define PID int 
X--- 45,51 ----
X  		      struct sigaction *oact);
X  #endif
X  
X! #if defined(SUNOS5) || defined(_HPUX_SOURCE) || defined(__386BSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__sgi)
X  #define PID pid_t 
X  #else
X  #define PID int 
X***************
X*** 785,791 ****
X    termios_set =1;
X  
X  #ifdef VLNEXT
X! #ifdef __sgi
X    if (tty_state.c_line == LDISC1)
X      make_default(&key_compose,tty_state.c_cc[VLNEXT]);
X  #else
X--- 785,792 ----
X    termios_set =1;
X  
X  #ifdef VLNEXT
X! /* In Irix 4 termios and termio have same structure, but not in Irix 5 */
X! #if defined (__sgi) && !defined(_SVR4_SOURCE)
X    if (tty_state.c_line == LDISC1)
X      make_default(&key_compose,tty_state.c_cc[VLNEXT]);
X  #else
X***************
X*** 798,804 ****
X    make_default(&key_flush,tty_state.c_cc[VDISCARD]);
X  #else
X  #ifdef VFLUSHO
X! #ifdef __sgi
X    if (tty_state.c_line == LDISC1)
SHAR_EOF
echo "End of part 1, continue with part 2"
echo "2" > s2_seq_.tmp
exit 0
Technical Details
Message-ID: <37rcd8$bq5@kruuna.Helsinki.FI>
Path: arc1-ca.pugleaf.net!wupost!howland.reston.ans.net!EU.net!sunic!news.funet.fi!news.csc.fi!news.helsinki.fi!not-for-mail

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!wupost!howland.reston.ans.net!EU.net!sunic!news.funet.fi!news.csc.fi!news.helsinki.fi!not-for-mail
From: hurtta@cc.Helsinki.FI (Kari Hurtta)
Newsgroups: alt.sources.patch,alt.sources
Subject: kehpager V1.2 to kehpager V1.21 (part 1/2)
Followup-To: alt.sources.d
Date: 16 Oct 1994 16:12:56 +0200
Organization: University of Helsinki
Lines: 1947
Message-ID: <37rcd8$bq5@kruuna.Helsinki.FI>
Reply-To: "Kari E. Hurtta" <Kari.Hurtta@Helsinki.FI>
NNTP-Posting-Host: kruuna.helsinki.fi
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit