Lines Matching +full:a +full:- +full:m

2  * Copyright (C) 1984-2025  Mark Nudelman
20 * A mark is an ifile (input file) plus a position within the file.
38 * Each mark is identified by a lowercase or uppercase letter.
41 #define NMARKS ((2*26)+2) /* a-z, A-Z, mousemark, lastmark */
43 #define MOUSEMARK (NMARKS-2)
44 #define LASTMARK (NMARKS-1)
50 * Initialize a mark struct.
52 static void cmark(struct mark *m, IFILE ifile, POSITION pos, int ln) in cmark() argument
54 m->m_ifile = ifile; in cmark()
55 m->m_scrpos.pos = pos; in cmark()
56 m->m_scrpos.ln = ln; in cmark()
57 if (m->m_filename != NULL) in cmark()
58 /* Normally should not happen but a corrupt lesshst file can do it. */ in cmark()
59 free(m->m_filename); in cmark()
60 m->m_filename = NULL; in cmark()
76 default: letter = (char) ((i < 26) ? 'a'+i : 'A'+i-26); break; in init_mark()
79 cmark(&marks[i], NULL_IFILE, NULL_POSITION, -1); in init_mark()
86 static void mark_set_ifile(struct mark *m, IFILE ifile) in mark_set_ifile() argument
88 m->m_ifile = ifile; in mark_set_ifile()
90 free(m->m_filename); in mark_set_ifile()
91 m->m_filename = NULL; in mark_set_ifile()
95 * Populate the m_ifile member of a mark struct from m_filename.
97 static void mark_get_ifile(struct mark *m) in mark_get_ifile() argument
99 if (m->m_ifile != NULL_IFILE) in mark_get_ifile()
101 mark_set_ifile(m, get_ifile(m->m_filename, prev_ifile(NULL_IFILE))); in mark_get_ifile()
105 * Return the user mark struct identified by a character.
110 if (c >= 'a' && c <= 'z') in getumark()
111 return (&marks[c-'a']); in getumark()
112 if (c >= 'A' && c <= 'Z') in getumark()
113 return (&marks[c-'A'+26]); in getumark()
124 * Get the mark structure identified by a character.
130 struct mark *m; in getmark() local
139 m = &sm; in getmark()
140 cmark(m, curr_ifile, ch_zero(), 0); in getmark()
151 m = &sm; in getmark()
152 cmark(m, curr_ifile, ch_tell(), sc_height); in getmark()
158 m = &sm; in getmark()
159 get_scrpos(&m->m_scrpos, TOP); in getmark()
160 cmark(m, curr_ifile, m->m_scrpos.pos, m->m_scrpos.ln); in getmark()
166 m = &marks[LASTMARK]; in getmark()
170 * Must be a user-defined mark. in getmark()
172 m = getumark(c); in getmark()
173 if (m == NULL) in getmark()
175 if (m->m_scrpos.pos == NULL_POSITION) in getmark()
182 return (m); in getmark()
186 * Is a mark letter invalid?
194 * Set a user-defined mark.
198 struct mark *m; in setmark() local
201 m = getumark(c); in setmark()
202 if (m == NULL) in setmark()
210 cmark(m, curr_ifile, scrpos.pos, scrpos.ln); in setmark()
215 * Clear a user-defined mark.
219 struct mark *m; in clrmark() local
221 m = getumark(c); in clrmark()
222 if (m == NULL) in clrmark()
224 if (m->m_scrpos.pos == NULL_POSITION) in clrmark()
229 m->m_scrpos.pos = NULL_POSITION; in clrmark()
250 * Go to a mark.
254 struct mark *m; in gomark() local
257 m = getmark(c); in gomark()
258 if (m == NULL) in gomark()
267 if (m == &marks[LASTMARK] && m->m_scrpos.pos == NULL_POSITION) in gomark()
268 cmark(m, curr_ifile, ch_zero(), jump_sline); in gomark()
270 mark_get_ifile(m); in gomark()
273 scrpos = m->m_scrpos; in gomark()
274 if (m->m_ifile != curr_ifile) in gomark()
279 if (edit_ifile(m->m_ifile)) in gomark()
287 * Return the position associated with a given mark letter.
291 * because it's always the first non-blank line on the screen.
295 struct mark *m; in markpos() local
297 m = getmark(c); in markpos()
298 if (m == NULL) in markpos()
301 if (m->m_ifile != curr_ifile) in markpos()
306 return (m->m_scrpos.pos); in markpos()
310 * Return the mark associated with a given position, if any.
321 if (i < 26) return (char) ('a' + i); in posmark()
322 if (i < 26*2) return (char) ('A' + (i - 26)); in posmark()
330 * Clear the marks associated with a specified ifile.
342 * Check if any marks refer to a specified ifile vi m_filename
352 struct mark *m = &marks[i]; in mark_check_ifile() local
353 char *mark_filename = m->m_filename; in mark_check_ifile()
358 mark_set_ifile(m, ifile); in mark_check_ifile()
380 struct mark *m = &marks[i]; in save_marks() local
381 char pos_str[INT_STRLEN_BOUND(m->m_scrpos.pos) + 2]; in save_marks()
382 if (m->m_scrpos.pos == NULL_POSITION) in save_marks()
384 postoa(m->m_scrpos.pos, pos_str, 10); in save_marks()
385 filename = m->m_filename; in save_marks()
387 filename = get_real_filename(m->m_ifile); in save_marks()
388 if (strcmp(filename, "-") != 0) in save_marks()
389 fprintf(fout, "m %c %d %s %s\n", in save_marks()
390 m->m_letter, m->m_scrpos.ln, pos_str, filename); in save_marks()
399 struct mark *m; in restore_mark() local
404 if (*line++ != 'm') in restore_mark()
407 m = getumark(*line++); in restore_mark()
408 if (m == NULL) in restore_mark()
423 cmark(m, NULL_IFILE, pos, ln); in restore_mark()
424 m->m_filename = save(line); in restore_mark()