=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/less/mark.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/less/mark.c 2001/11/19 19:02:14 1.3 --- src/usr.bin/less/mark.c 2003/04/13 18:26:26 1.4 *************** *** 1,34 **** - /* $OpenBSD: mark.c,v 1.3 2001/11/19 19:02:14 mpech Exp $ */ - /* ! * Copyright (c) 1984,1985,1989,1994,1995 Mark Nudelman ! * All rights reserved. * ! * Redistribution and use in source and binary forms, with or without ! * modification, are permitted provided that the following conditions ! * are met: ! * 1. Redistributions of source code must retain the above copyright ! * notice, this list of conditions and the following disclaimer. ! * 2. Redistributions in binary form must reproduce the above copyright ! * notice in the documentation and/or other materials provided with ! * the distribution. * ! * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY ! * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE ! * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ! * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT ! * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ! * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ! * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE ! * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN ! * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "less.h" - #include "position.h" extern IFILE curr_ifile; extern int sc_height; --- 1,15 ---- /* ! * Copyright (C) 1984-2002 Mark Nudelman * ! * You may distribute under the terms of either the GNU General Public ! * License or the Less License, as specified in the README file. * ! * For more information about less, or for information on how to ! * contact the author, see the README file. */ #include "less.h" extern IFILE curr_ifile; extern int sc_height; *************** *** 45,60 **** /* * The table of marks. * Each mark is identified by a lowercase or uppercase letter. */ ! #define NMARKS (2*26) /* a-z, A-Z */ static struct mark marks[NMARKS]; /* - * Special mark for the "last mark"; addressed by the apostrophe. - */ - static struct mark lmark; - - /* * Initialize the mark table to show no marks are set. */ public void --- 26,38 ---- /* * The table of marks. * Each mark is identified by a lowercase or uppercase letter. + * The final one is lmark, for the "last mark"; addressed by the apostrophe. */ ! #define NMARKS ((2*26)+1) /* a-z, A-Z, lastmark */ ! #define LASTMARK (NMARKS-1) static struct mark marks[NMARKS]; /* * Initialize the mark table to show no marks are set. */ public void *************** *** 64,70 **** for (i = 0; i < NMARKS; i++) marks[i].m_scrpos.pos = NULL_POSITION; - lmark.m_scrpos.pos = NULL_POSITION; } /* --- 42,47 ---- *************** *** 93,99 **** getmark(c) int c; { ! struct mark *m; static struct mark sm; switch (c) --- 70,76 ---- getmark(c) int c; { ! register struct mark *m; static struct mark sm; switch (c) *************** *** 126,140 **** * Current position in the current file. */ m = &sm; ! m->m_scrpos.pos = ch_tell(); ! m->m_scrpos.ln = 0; m->m_ifile = curr_ifile; break; case '\'': /* * The "last mark". */ ! m = &lmark; break; default: /* --- 103,116 ---- * Current position in the current file. */ m = &sm; ! get_scrpos(&m->m_scrpos); m->m_ifile = curr_ifile; break; case '\'': /* * The "last mark". */ ! m = &marks[LASTMARK]; break; default: /* *************** *** 170,176 **** setmark(c) int c; { ! struct mark *m; struct scrpos scrpos; m = getumark(c); --- 146,152 ---- setmark(c) int c; { ! register struct mark *m; struct scrpos scrpos; m = getumark(c); *************** *** 189,199 **** { struct scrpos scrpos; get_scrpos(&scrpos); if (scrpos.pos == NULL_POSITION) return; ! lmark.m_scrpos = scrpos; ! lmark.m_ifile = curr_ifile; } /* --- 165,177 ---- { struct scrpos scrpos; + if (ch_getflags() & CH_HELPFILE) + return; get_scrpos(&scrpos); if (scrpos.pos == NULL_POSITION) return; ! marks[LASTMARK].m_scrpos = scrpos; ! marks[LASTMARK].m_ifile = curr_ifile; } /* *************** *** 203,209 **** gomark(c) int c; { ! struct mark *m; struct scrpos scrpos; m = getmark(c); --- 181,187 ---- gomark(c) int c; { ! register struct mark *m; struct scrpos scrpos; m = getmark(c); *************** *** 215,221 **** * it has not been set to anything yet, * set it to the beginning of the current file. */ ! if (m == &lmark && m->m_scrpos.pos == NULL_POSITION) { m->m_ifile = curr_ifile; m->m_scrpos.pos = ch_zero(); --- 193,199 ---- * it has not been set to anything yet, * set it to the beginning of the current file. */ ! if (m == &marks[LASTMARK] && m->m_scrpos.pos == NULL_POSITION) { m->m_ifile = curr_ifile; m->m_scrpos.pos = ch_zero(); *************** *** 251,257 **** markpos(c) int c; { ! struct mark *m; m = getmark(c); if (m == NULL) --- 229,235 ---- markpos(c) int c; { ! register struct mark *m; m = getmark(c); if (m == NULL) *************** *** 263,266 **** --- 241,258 ---- return (NULL_POSITION); } return (m->m_scrpos.pos); + } + + /* + * Clear the marks associated with a specified ifile. + */ + public void + unmark(ifile) + IFILE ifile; + { + int i; + + for (i = 0; i < NMARKS; i++) + if (marks[i].m_ifile == ifile) + marks[i].m_scrpos.pos = NULL_POSITION; }