diff -u less-354/command.c less-354.mod/command.c --- less-354/command.c Wed Mar 22 12:36:33 2000 +++ less-354.mod/command.c Mon May 22 02:03:24 2000 @@ -35,6 +35,7 @@ extern int secure; extern int hshift; extern int show_attn; +extern int more_mode; extern char *every_first_cmd; extern char *curr_altfilename; extern char version[]; @@ -468,12 +469,16 @@ flag = 0; switch (c) { - case CONTROL('E'): /* ignore END of file */ case '*': + if (more_mode) + break; + case CONTROL('E'): /* ignore END of file */ flag = SRCH_PAST_EOF; break; - case CONTROL('F'): /* FIRST file */ case '@': + if (more_mode) + break; + case CONTROL('F'): /* FIRST file */ flag = SRCH_FIRST_FILE; break; case CONTROL('K'): /* KEEP position */ diff -u less-354/forwback.c less-354.mod/forwback.c --- less-354/forwback.c Wed Mar 22 12:36:35 2000 +++ less-354.mod/forwback.c Mon May 22 02:12:45 2000 @@ -27,6 +27,7 @@ extern int quiet; extern int sc_width, sc_height; extern int quit_at_eof; +extern int more_mode; extern int plusoption; extern int forw_scroll; extern int back_scroll; @@ -142,9 +143,12 @@ pos_clear(); add_forw_pos(pos); force = 1; - if (top_scroll == OPT_ONPLUS || first_time) - clear(); - home(); + if (more_mode == 0) + { + if (top_scroll == OPT_ONPLUS || first_time) + clear(); + home(); + } } else { clear_bot(); diff -u less-354/main.c less-354.mod/main.c --- less-354/main.c Wed Mar 22 12:36:37 2000 +++ less-354.mod/main.c Mon May 22 02:16:31 2000 @@ -29,6 +29,7 @@ public int quitting; public int secure; public int dohelp; +public int more_mode = 0; #if LOGFILE public int logfile = -1; @@ -60,6 +61,7 @@ { IFILE ifile; char *s; + extern char *__progname; #ifdef __EMX__ _response(&argc, &argv); @@ -99,6 +101,9 @@ * Process command line arguments and LESS environment arguments. * Command line arguments override environment arguments. */ + if (strcmp(__progname, "more") == 0) + more_mode = 1; + is_tty = isatty(1); get_term(); init_cmds(); @@ -106,7 +111,16 @@ init_charset(); init_line(); init_option(); - s = lgetenv("LESS"); + + if (more_mode) { + scan_option("-E"); + scan_option("-m"); + scan_option("-G"); + scan_option("-f"); + s = lgetenv("MORE"); + } else { + s = lgetenv("LESS"); + } if (s != NULL) scan_option(save(s)); @@ -197,7 +211,7 @@ quit(QUIT_OK); } - if (missing_cap && !know_dumb) + if (missing_cap && !know_dumb && !more_mode) error("WARNING: terminal is not fully functional", NULL_PARG); init_mark(); raw_mode(1); diff -u less-354/screen.c less-354.mod/screen.c --- less-354/screen.c Wed Mar 22 12:36:38 2000 +++ less-354.mod/screen.c Mon May 22 02:18:22 2000 @@ -223,6 +223,8 @@ extern int no_back_scroll; extern int swindow; extern int no_init; +extern int quit_at_eof; +extern int more_mode; extern int sigs; extern int wscroll; extern int screen_trashed; @@ -1108,11 +1110,19 @@ if (sc_e_keypad == NULL) sc_e_keypad = ""; - sc_init = ltgetstr("ti", &sp); + /* + * This loses for terminals with termcap entries with ti/te strings + * that switch to/from an alternate screen, and we're in quit_at_eof + * (eg, more(1)). + */ + if (!quit_at_eof && !more_mode) { + sc_init = ltgetstr("ti", &sp); + sc_deinit = ltgetstr("te", &sp); + } + if (sc_init == NULL) sc_init = ""; - sc_deinit= ltgetstr("te", &sp); if (sc_deinit == NULL) sc_deinit = ""; diff -u less-354/search.c less-354.mod/search.c --- less-354/search.c Wed Mar 22 12:44:04 2000 +++ less-354.mod/search.c Mon May 22 02:09:26 2000 @@ -22,7 +22,7 @@ #if HAVE_POSIX_REGCOMP #include #ifdef REG_EXTENDED -#define REGCOMP_FLAG REG_EXTENDED +#define REGCOMP_FLAG (more_mode ? 0 : REG_EXTENDED) #else #define REGCOMP_FLAG 0 #endif @@ -52,6 +52,7 @@ extern int sc_height; extern int jump_sline; extern int bs_mode; +extern int more_mode; extern POSITION start_attnpos; extern POSITION end_attnpos; #if HILITE_SEARCH