annotate src/termlib.c @ 34686:83875247fbc0 v9.1.0224

patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text Commit: https://github.com/vim/vim/commit/515f734e687f28f7199b2a8042197624d9f3ec15 Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Date: Thu Mar 28 12:01:14 2024 +0100 patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text Problem: If a line has "right" & "below" virtual text properties, where the "below" property may be stored first due to lack of ordering between them, then the line height is calculated to be 1 more and causes the cursor to far over the line. Solution: Remove some unnecessary setting of a `next_right_goes_below = TRUE` flag for "below" and "above" text properties. (Dylan Thacker-Smith) I modified a regression test I recently added to cover this case, leveraging the fact that "after", "right" & "below" text properties are being stored in the reverse of the order they are added in. The previous version of this regression test was crafted to workaround this issue so it can be addressed by this separate patch. closes: #14317 Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 28 Mar 2024 12:15:03 +0100
parents 50555279168b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 8340
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet: */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * The following software is (C) 1984 Peter da Silva, the Mad Australian, in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 * the public domain. It may be re-distributed for any purpose with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * inclusion of this notice.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
8 // Modified by Bram Moolenaar for use with VIM - Vi Improved.
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
9 // A few bugs removed by Olaf 'Rhialto' Seibert.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
11 // TERMLIB: Terminal independent database.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include "termlib.pro"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
16 #if !defined(AMIGA) && !defined(VMS)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 # include <sgtty.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 2823
diff changeset
20 static int getent(char *, char *, FILE *, int);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 2823
diff changeset
21 static int nextent(char *, FILE *, int);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 2823
diff changeset
22 static int _match(char *, char *);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 2823
diff changeset
23 static char *_addfmt(char *, char *, int);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 2823
diff changeset
24 static char *_find(char *, char *);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 * Global variables for termlib
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
30 char *tent; // Pointer to terminal entry, set by tgetent
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
31 char PC = 0; // Pad character, default NULL
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
32 char *UP = 0, *BC = 0; // Pointers to UP and BC strings from database
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
33 short ospeed; // Baud rate (1-16, 1=300, 16=19200), as in stty
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 * Module: tgetent
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 * Purpose: Get termcap entry for <term> into buffer at <tbuf>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 * Calling conventions: char tbuf[TBUFSZ+], term=canonical name for terminal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 * Returned values: 1 = success, -1 = can't open file,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 * 0 = can't find terminal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 * Notes:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 * - Should probably supply static buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 * - Uses environment variables "TERM" and "TERMCAP". If TERM = term (that is,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 * if the argument matches the environment) then it looks at TERMCAP.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 * - If TERMCAP begins with a slash, then it assumes this is the file to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 * search rather than /etc/termcap.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 * - If TERMCAP does not begin with a slash, and it matches TERM, then this is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 * used as the entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 * - This could be simplified considerably for non-UNIX systems.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 #ifndef TERMCAPFILE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 # ifdef AMIGA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 # define TERMCAPFILE "s:termcap"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 # ifdef VMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 # define TERMCAPFILE "VIMRUNTIME:termcap"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 # define TERMCAPFILE "/etc/termcap"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 int
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
69 tgetent(
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
70 char *tbuf, // Buffer to hold termcap entry, TBUFSZ bytes max
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
71 char *term) // Name of terminal
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
73 char tcbuf[32]; // Temp buffer to handle
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
74 char *tcptr = tcbuf; // extended entries
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
75 char *tcap = TERMCAPFILE; // Default termcap file
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 char *tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 FILE *termcap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 int retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 if ((tmp = (char *)mch_getenv((char_u *)"TERMCAP")) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
83 if (*tmp == '/') // TERMCAP = name of termcap file
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 tcap = tmp ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 #if defined(AMIGA)
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
87 // Convert /usr/share/lib/termcap to usr:share/lib/termcap
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 tcap++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 tmp = strchr(tcap, '/');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 if (tmp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 *tmp = ':';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 }
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
94 else // TERMCAP = termcap entry itself
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 int tlen = strlen(term);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
98 while (*tmp && *tmp != ':') // Check if TERM matches
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 char *nexttmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 while (*tmp == '|')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 tmp++;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
104 nexttmp = _find(tmp, ":|"); // Rhialto
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 if (tmp+tlen == nexttmp && _match(tmp, term) == tlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 strcpy(tbuf, tmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 tent = tbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 tmp = nexttmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 if (!(termcap = mch_fopen(tcap, "r")))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 strcpy(tbuf, tcap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 while (getent(tbuf + len, term, termcap, TBUFSZ - len))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
125 tcptr = tcbuf; // Rhialto
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
126 if ((term = tgetstr("tc", &tcptr))) // extended entry
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 rewind(termcap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 len = strlen(tbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 retval = 1;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
134 tent = tbuf; // reset it back to the beginning
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 fclose(termcap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 static int
8340
c66e1f50c142 commit https://github.com/vim/vim/commit/2f6271b1e7cff985cac66f6850116bcf3fcccd58
Christian Brabandt <cb@256bit.org>
parents: 7835
diff changeset
143 getent(char *tbuf, char *term, FILE *termcap, int buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 char *tptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 int tlen = strlen(term);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
148 while (nextent(tbuf, termcap, buflen)) // For each possible entry
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 tptr = tbuf;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
151 while (*tptr && *tptr != ':') // : terminates name field
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 char *nexttptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
155 while (*tptr == '|') // | separates names
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 tptr++;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
157 nexttptr = _find(tptr, ":|"); // Rhialto
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 if (tptr + tlen == nexttptr &&
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
159 _match(tptr, term) == tlen) // FOUND!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 tent = tbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 }
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
164 else // Look for next name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 tptr = nexttptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
171 /*
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
172 * Read 1 entry from TERMCAP file.
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
173 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 static int
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
175 nextent(char *tbuf, FILE *termcap, int buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
177 char *lbuf = tbuf; // lbuf=line buffer
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
178 // read lines straight into buffer
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
180 while (lbuf < tbuf+buflen && // There's room and
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
181 fgets(lbuf, (int)(tbuf+buflen-lbuf), termcap)) // another line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 int llen = strlen(lbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
185 if (*lbuf == '#') // eat comments
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 continue;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
187 if (lbuf[-1] == ':' && // and whitespace
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 lbuf[0] == '\t' &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 lbuf[1] == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 {
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1341
diff changeset
191 STRMOVE(lbuf, lbuf + 2);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 llen -= 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 }
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
194 if (lbuf[llen-2] == '\\') // and continuations
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 lbuf += llen-2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
198 lbuf[llen-1]=0; // no continuation, return
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
203 return 0; // ran into end of file
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 * Module: tgetflag
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 * Purpose: returns flag true or false as to the existence of a given entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 * used with 'bs', 'am', etc...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 * Calling conventions: id is the 2 character capability id.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 * Returned values: 1 for success, 0 for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 int
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
218 tgetflag(char *id)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 char buf[256], *ptr = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 return tgetstr(id, &ptr) ? 1 : 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 * Module: tgetnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 * Purpose: get numeric value such as 'li' or 'co' from termcap.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 * Calling conventions: id = 2 character id.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 * Returned values: -1 for failure, else numerical value.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 int
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
236 tgetnum(char *id)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 char *ptr, buf[256];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 ptr = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 if (tgetstr(id, &ptr))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 return atoi(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 * Module: tgetstr
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 * Purpose: get terminal capability string from database.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 * Calling conventions: id is the two character capability id.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 * (*buf) points into a hold buffer for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 * id. the capability is copied into the buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 * and (*buf) is advanced to point to the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 * free byte in the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 * Returned values: 0 = no such entry, otherwise returns original
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 * (*buf) (now a pointer to the string).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 * Notes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 * It also decodes certain escape sequences in the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 * they should be obvious from the code:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 * \E = escape.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 * \n, \r, \t, \f, \b match the 'c' escapes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 * ^x matches control-x (^@...^_).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 * \nnn matches nnn octal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 * \x, where x is anything else, matches x. I differ
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 * from the standard library here, in that I allow ^: to match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 * :.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 char *
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
275 tgetstr(char *id, char **buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 int len = strlen(id);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 char *tmp=tent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 char *hold;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 do {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
283 tmp = _find(tmp, ":"); // For each field
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
284 while (*tmp == ':') // skip empty fields
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 tmp++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 if (!*tmp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
289 if (_match(id, tmp) == len)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
290 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
291 tmp += len; // find '=' '@' or '#'
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
292 if (*tmp == '@') // :xx@: entry for tc
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
293 return 0; // deleted entry
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 hold= *buf;
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
295 while (*++tmp && *tmp != ':') // not at end of field
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
296 {
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
297 switch(*tmp)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
298 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
299 case '\\': // Expand escapes here
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
300 switch(*++tmp)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
301 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
302 case 0: // ignore backslashes
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
303 tmp--; // at end of entry
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
304 break; // shouldn't happen
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 case 'e':
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
306 case 'E': // ESC
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 *(*buf)++ = ESC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
309 case 'n': // \n
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 *(*buf)++ = '\n';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
312 case 'r': // \r
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 *(*buf)++ = '\r';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
315 case 't': // \t
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 *(*buf)++ = '\t';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
318 case 'b': // \b
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 *(*buf)++ = '\b';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
321 case 'f': // \f
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 *(*buf)++ = '\f';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
324 case '0': // \nnn
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 case '1':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 case '2':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 case '3':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 case '4':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 case '5':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 case '6':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 case '7':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 case '8':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 case '9':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 **buf = 0;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
335 // get up to three digits
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 for (i = 0; i < 3 && VIM_ISDIGIT(*tmp); ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 **buf = **buf * 8 + *tmp++ - '0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 (*buf)++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 tmp--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
341 default: // \x, for all other x
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 *(*buf)++= *tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
345 case '^': // control characters
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 ++tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 *(*buf)++ = Ctrl_chr(*tmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 *(*buf)++ = *tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 *(*buf)++ = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 return hold;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 } while (*tmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 * Module: tgoto
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 * Purpose: decode cm cursor motion string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 * Calling conventions: cm is cursor motion string. line, col, are the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 * desired destination.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 * Returned values: a string pointing to the decoded string, or "OOPS" if it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 * cannot be decoded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 * Notes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 * The accepted escapes are:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 * %d as in printf, 0 origin.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 * %2, %3 like %02d, %03d in printf.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 * %. like %c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 * %+x adds <x> to value, then %.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 * %>xy if value>x, adds y. No output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 * %i increments line& col, no output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 * %r reverses order of line&col. No output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 * %% prints as a single %.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 * %n exclusive or row & col with 0140.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 * %B BCD, no output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 * %D reverse coding (x-2*(x%16)), no output.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 char *
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
388 tgoto(
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
389 char *cm, // cm string, from termcap
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
390 int col, // column, x position
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
391 int line) // line, y position
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
393 char gx, gy, // x, y
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
394 *ptr, // pointer in 'cm'
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
395 reverse = 0, // reverse flag
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
396 *bufp, // pointer in returned string
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
397 addup = 0, // add upline
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
398 addbak = 0, // add backup
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 static char buffer[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 if (!cm)
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
403 return "OOPS"; // Kludge, but standard
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 bufp = buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 ptr = cm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
408 while (*ptr)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
409 {
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
410 if ((c = *ptr++) != '%') // normal char
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
411 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 *bufp++ = c;
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
413 }
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
414 else
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
415 { // % escape
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
416 switch(c = *ptr++)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
417 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
418 case 'd': // decimal
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 bufp = _addfmt(bufp, "%d", line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 line = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
422 case '2': // 2 digit decimal
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 bufp = _addfmt(bufp, "%02d", line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 line = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
426 case '3': // 3 digit decimal
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 bufp = _addfmt(bufp, "%03d", line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 line = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
430 case '>': // %>xy: if >x, add y
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 gx = *ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 gy = *ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 if (col>gx) col += gy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 if (line>gx) line += gy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
436 case '+': // %+c: add c
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 line += *ptr++;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
438 case '.': // print x/y
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
439 if (line == '\t' || // these are
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
440 line == '\n' || // chars that
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
441 line == '\004' || // UNIX hates
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
442 line == '\0')
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
443 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
444 line++; // so go to next pos
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 if (reverse == (line == col))
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
446 addup=1; // and mark UP
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 else
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
448 addbak=1; // or BC
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 *bufp++=line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 line = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
453 case 'r': // r: reverse
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 gx = line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 line = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 col = gx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 reverse = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
459 case 'i': // increment (1-origin screen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 col++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 line++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
463 case '%': // %%=% literally
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 *bufp++='%';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
466 case 'n': // magic DM2500 code
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 line ^= 0140;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 col ^= 0140;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
470 case 'B': // bcd encoding
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 line = line/10<<4+line%10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 col = col/10<<4+col%10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
474 case 'D': // magic Delta Data code
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 line = line-2*(line&15);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 col = col-2*(col&15);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 break;
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
478 default: // Unknown escape
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 return "OOPS";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
484 if (addup) // add upline
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
485 if (UP)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
486 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 ptr=UP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 while (VIM_ISDIGIT(*ptr) || *ptr == '.')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 if (*ptr == '*')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 while (*ptr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 *bufp++ = *ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
496 if (addbak) // add backspace
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
497 if (BC)
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
498 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 ptr=BC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 while (VIM_ISDIGIT(*ptr) || *ptr == '.')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 if (*ptr == '*')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 while (*ptr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 *bufp++ = *ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 *bufp++='\b';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 *bufp = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 return(buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 * Module: tputs
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 * Purpose: decode padding information
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 * Calling conventions: cp = string to be padded, affcnt = # of items affected
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 * (lines, characters, whatever), outc = routine to output 1 character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 * Returned values: none
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 * Notes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 * cp has padding information ahead of it, in the form
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 * nnnTEXT or nnn*TEXT. nnn is the number of milliseconds to delay,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 * and may be a decimal (nnn.mmm). If the asterisk is given, then
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 * the delay is multiplied by afcnt. The delay is produced by outputting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 * a number of nulls (or other padding char) after printing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 * TEXT.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 long _bauds[16]={
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 0, 50, 75, 110,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 134, 150, 200, 300,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 600, 1200, 1800, 2400,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 4800, 9600, 19200, 19200 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 int
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
542 tputs(
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
543 char *cp, // string to print
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
544 int affcnt, // Number of lines affected
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
545 void (*outc)(unsigned int)) // routine to output 1 character
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 {
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
547 long frac, // 10^(#digits after decimal point)
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
548 counter, // digits
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 2823
diff changeset
549 atol(const char *);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
551 if (VIM_ISDIGIT(*cp))
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
552 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 counter = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 frac = 1000;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 while (VIM_ISDIGIT(*cp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 counter = counter * 10L + (long)(*cp++ - '0');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 if (*cp == '.')
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
558 while (VIM_ISDIGIT(*++cp))
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
559 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 counter = counter * 10L + (long)(*cp++ - '0');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 frac = frac * 10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 }
31804
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
563 if (*cp!='*') // multiply by affected lines
50555279168b patch 9.0.1234: the code style has to be checked manually
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
564 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 if (affcnt>1) affcnt = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 cp++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
570 // Calculate number of characters for padding counter/frac ms delay
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 if (ospeed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 counter = (counter * _bauds[ospeed] * (long)affcnt) / frac;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
574 while (*cp) // output string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 (*outc)(*cp++);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 if (ospeed)
18814
7e7ec935e7c8 patch 8.1.2395: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 12716
diff changeset
577 while (counter--) // followed by pad characters
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 (*outc)(PC);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 while (*cp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 (*outc)(*cp++);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 * Module: tutil.c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 * Purpose: Utility routines for TERMLIB functions.
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
590 * Returns length of text common to s1 and s2.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 static int
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
593 _match(char *s1, char *s2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 int i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 while (s1[i] && s1[i] == s2[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 i++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 * finds next c in s that's a member of set, returns pointer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 static char *
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
607 _find(char *s, char *set)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 {
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 18814
diff changeset
609 for (; *s; s++)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 char *ptr = set;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 while (*ptr && *s != *ptr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 ptr++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 if (*ptr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 * add val to buf according to format fmt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 static char *
7835
4d7ce6c03fda commit https://github.com/vim/vim/commit/764b23c8fd3369cb05ae9122abf3ca16fec539d7
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
627 _addfmt(char *buf, char *fmt, int val)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 sprintf(buf, fmt, val);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 while (*buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 buf++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 }