=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/less/mark.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.2 diff -u -r1.1.1.1 -r1.1.1.2 --- src/usr.bin/less/mark.c 1996/09/21 05:39:42 1.1.1.1 +++ src/usr.bin/less/mark.c 2003/04/13 18:21:21 1.1.1.2 @@ -1,32 +1,15 @@ /* - * Copyright (c) 1984,1985,1989,1994,1995 Mark Nudelman - * All rights reserved. + * Copyright (C) 1984-2002 Mark Nudelman * - * 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. + * You may distribute under the terms of either the GNU General Public + * License or the Less License, as specified in the README file. * - * 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. + * For more information about less, or for information on how to + * contact the author, see the README file. */ #include "less.h" -#include "position.h" extern IFILE curr_ifile; extern int sc_height; @@ -43,16 +26,13 @@ /* * 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) /* a-z, A-Z */ +#define NMARKS ((2*26)+1) /* a-z, A-Z, lastmark */ +#define LASTMARK (NMARKS-1) 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 @@ -62,7 +42,6 @@ for (i = 0; i < NMARKS; i++) marks[i].m_scrpos.pos = NULL_POSITION; - lmark.m_scrpos.pos = NULL_POSITION; } /* @@ -124,15 +103,14 @@ * Current position in the current file. */ m = &sm; - m->m_scrpos.pos = ch_tell(); - m->m_scrpos.ln = 0; + get_scrpos(&m->m_scrpos); m->m_ifile = curr_ifile; break; case '\'': /* * The "last mark". */ - m = &lmark; + m = &marks[LASTMARK]; break; default: /* @@ -187,11 +165,13 @@ { struct scrpos scrpos; + if (ch_getflags() & CH_HELPFILE) + return; get_scrpos(&scrpos); if (scrpos.pos == NULL_POSITION) return; - lmark.m_scrpos = scrpos; - lmark.m_ifile = curr_ifile; + marks[LASTMARK].m_scrpos = scrpos; + marks[LASTMARK].m_ifile = curr_ifile; } /* @@ -213,7 +193,7 @@ * 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) + if (m == &marks[LASTMARK] && m->m_scrpos.pos == NULL_POSITION) { m->m_ifile = curr_ifile; m->m_scrpos.pos = ch_zero(); @@ -261,4 +241,18 @@ 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; }