| File src/filehandling_functions.c changed (mode: 100644) (index 9a4c62e..100c4d0) |
| ... |
... |
dirpage_lookup(char **type, char ***message, long *lines, |
| 139 |
139 |
char name[256]; |
char name[256]; |
| 140 |
140 |
char file[256]; |
char file[256]; |
| 141 |
141 |
int i; |
int i; |
|
142 |
|
char *nameend, *filestart, *fileend, *dot; |
| 142 |
143 |
|
|
| 143 |
144 |
id = opendirfile(0); |
id = opendirfile(0); |
| 144 |
145 |
if (!id) |
if (!id) |
| |
| ... |
... |
dirpage_lookup(char **type, char ***message, long *lines, |
| 146 |
147 |
|
|
| 147 |
148 |
read_item(id, type, message, lines); |
read_item(id, type, message, lines); |
| 148 |
149 |
|
|
| 149 |
|
char *nameend, *filestart, *fileend, *dot; |
|
| 150 |
|
|
|
| 151 |
150 |
/* search for node-links in every line */ |
/* search for node-links in every line */ |
| 152 |
151 |
for (i = 1; i < Lines; i++) |
for (i = 1; i < Lines; i++) |
| 153 |
152 |
{ |
{ |
| |
| ... |
... |
dirpage_lookup(char **type, char ***message, long *lines, |
| 160 |
159 |
&& (strncasecmp(filename, Message[i] + 2, filenamelen) == 0) |
&& (strncasecmp(filename, Message[i] + 2, filenamelen) == 0) |
| 161 |
160 |
) |
) |
| 162 |
161 |
{ |
{ |
|
162 |
|
char *tmp; |
| 163 |
163 |
|
|
| 164 |
164 |
/* skip this hit if it is not a perfect match and |
/* skip this hit if it is not a perfect match and |
| 165 |
165 |
* we have already found a previous partial match */ |
* we have already found a previous partial match */ |
| |
| ... |
... |
dirpage_lookup(char **type, char ***message, long *lines, |
| 170 |
170 |
} |
} |
| 171 |
171 |
|
|
| 172 |
172 |
/* find the name of the node link */ |
/* find the name of the node link */ |
| 173 |
|
char *tmp = name; |
|
|
173 |
|
tmp = name; |
| 174 |
174 |
strncpy(file, filestart + 1, fileend - filestart - 1); |
strncpy(file, filestart + 1, fileend - filestart - 1); |
| 175 |
175 |
file[fileend - filestart - 1] = 0; |
file[fileend - filestart - 1] = 0; |
| 176 |
176 |
strncpy(name, fileend + 1, dot - fileend - 1); |
strncpy(name, fileend + 1, dot - fileend - 1); |
| File src/manual.c changed (mode: 100644) (index 51866cb..aefbecc) |
| ... |
... |
man_initializelinks(char *tmp, int carry) |
| 797 |
797 |
if ((!strchr(p_t1, '(')) &&(!is_in_manlinks(manlinks, p_t1))) |
if ((!strchr(p_t1, '(')) &&(!is_in_manlinks(manlinks, p_t1))) |
| 798 |
798 |
{ |
{ |
| 799 |
799 |
char tempchar; |
char tempchar; |
| 800 |
|
int breakpos; |
|
|
800 |
|
int breakpos, cols_before_link; |
| 801 |
801 |
i = mylink - tmp - 1; |
i = mylink - tmp - 1; |
| 802 |
802 |
if (i < 0) |
if (i < 0) |
| 803 |
803 |
i++; |
i++; |
| |
| ... |
... |
man_initializelinks(char *tmp, int carry) |
| 830 |
830 |
*/ |
*/ |
| 831 |
831 |
|
|
| 832 |
832 |
/* calculate the number of columns in front of the link */ |
/* calculate the number of columns in front of the link */ |
| 833 |
|
int cols_before_link = width_of_string(tmp, i-1); |
|
|
833 |
|
cols_before_link = width_of_string(tmp, i-1); |
| 834 |
834 |
|
|
| 835 |
835 |
/* a small check */ |
/* a small check */ |
| 836 |
836 |
if (!((use_apropos) &&(manualhistorylength == 0))) |
if (!((use_apropos) &&(manualhistorylength == 0))) |
| File src/utils.c changed (mode: 100644) (index 8da99a4..610ee2d) |
| ... |
... |
handlewinch() |
| 558 |
558 |
int |
int |
| 559 |
559 |
check_node_name( const char * const node_name, const char * const node_header) |
check_node_name( const char * const node_name, const char * const node_header) |
| 560 |
560 |
{ |
{ |
|
561 |
|
size_t header_len; |
|
562 |
|
char *header, *str_start, *c; |
|
563 |
|
int res; |
|
564 |
|
|
| 561 |
565 |
/* if either one of node_name or node_header is NULL or a zero |
/* if either one of node_name or node_header is NULL or a zero |
| 562 |
566 |
* sized string, we have nothing to check, so return success */ |
* sized string, we have nothing to check, so return success */ |
| 563 |
567 |
if ( (node_name==NULL) || (node_header==NULL) |
if ( (node_name==NULL) || (node_header==NULL) |
| |
| ... |
... |
check_node_name( const char * const node_name, const char * const node_header) |
| 566 |
570 |
return 1; |
return 1; |
| 567 |
571 |
} |
} |
| 568 |
572 |
|
|
| 569 |
|
size_t header_len = strlen(node_header); |
|
|
573 |
|
header_len = strlen(node_header); |
| 570 |
574 |
|
|
| 571 |
575 |
/* copy node_header to a local string which can be mutilated */ |
/* copy node_header to a local string which can be mutilated */ |
| 572 |
576 |
/* don't use strdup here, as xmalloc handles all errors */ |
/* don't use strdup here, as xmalloc handles all errors */ |
| 573 |
|
char *header = xmalloc( header_len + 1 ); |
|
|
577 |
|
header = xmalloc( header_len + 1 ); |
| 574 |
578 |
strcpy(header, node_header); |
strcpy(header, node_header); |
| 575 |
579 |
|
|
| 576 |
580 |
/* search for "Node: foobar," in node_header */ |
/* search for "Node: foobar," in node_header */ |
| 577 |
|
char *str_start = strstr(header, "Node: "); |
|
|
581 |
|
str_start = strstr(header, "Node: "); |
| 578 |
582 |
if (str_start==NULL) /* no match */ |
if (str_start==NULL) /* no match */ |
| 579 |
583 |
{ |
{ |
| 580 |
584 |
return 0; |
return 0; |
| |
| ... |
... |
check_node_name( const char * const node_name, const char * const node_header) |
| 582 |
586 |
/* advance str_start to the start of the node name */ |
/* advance str_start to the start of the node name */ |
| 583 |
587 |
str_start += strlen("Node: "); |
str_start += strlen("Node: "); |
| 584 |
588 |
/* and search for the next comma, tab, or newline */ |
/* and search for the next comma, tab, or newline */ |
| 585 |
|
char *c = str_start; |
|
|
589 |
|
c = str_start; |
| 586 |
590 |
while ( (*c!=',') && (*c!='\t') && (*c!='\n') && (*c!='\0') ) c++; |
while ( (*c!=',') && (*c!='\t') && (*c!='\n') && (*c!='\0') ) c++; |
| 587 |
591 |
*c = '\0'; |
*c = '\0'; |
| 588 |
592 |
|
|
| 589 |
593 |
/* so, now str_start point to a \0-terminated string containing the |
/* so, now str_start point to a \0-terminated string containing the |
| 590 |
594 |
* node name from the header. |
* node name from the header. |
| 591 |
595 |
* Let's compare it with the node_name we're looking for */ |
* Let's compare it with the node_name we're looking for */ |
| 592 |
|
int res = strcmp(str_start, node_name); |
|
|
596 |
|
res = strcmp(str_start, node_name); |
| 593 |
597 |
|
|
| 594 |
598 |
/* we're done, so free alloc'ed vars */ |
/* we're done, so free alloc'ed vars */ |
| 595 |
599 |
xfree(header); |
xfree(header); |
| |
| ... |
... |
wcswidth(const wchar_t *wstr, size_t max_len) |
| 642 |
646 |
int |
int |
| 643 |
647 |
width_of_string( const char * const mbs, const int len) |
width_of_string( const char * const mbs, const int len) |
| 644 |
648 |
{ |
{ |
|
649 |
|
int width; |
|
650 |
|
char *str; |
|
651 |
|
#ifdef USE_WCHAR |
|
652 |
|
wchar_t *wstr; |
|
653 |
|
#endif /* USE_WCHAR */ |
|
654 |
|
|
| 645 |
655 |
if (len<0) return -1; |
if (len<0) return -1; |
| 646 |
656 |
if (len==0) return 0; |
if (len==0) return 0; |
| 647 |
657 |
|
|
| 648 |
|
int width; |
|
| 649 |
|
|
|
| 650 |
658 |
/* copy the string to a local buffer, because we only want to |
/* copy the string to a local buffer, because we only want to |
| 651 |
659 |
* compare the first len bytes */ |
* compare the first len bytes */ |
| 652 |
|
char *str = xmalloc(len+1); |
|
|
660 |
|
str = xmalloc(len+1); |
| 653 |
661 |
memcpy(str, mbs, len); |
memcpy(str, mbs, len); |
| 654 |
662 |
|
|
| 655 |
663 |
#ifdef USE_WCHAR |
#ifdef USE_WCHAR |
| 656 |
664 |
|
|
| 657 |
665 |
/* allocate a widestring */ |
/* allocate a widestring */ |
| 658 |
|
wchar_t *wstr = xmalloc( (len+1)*sizeof(wchar_t) ); |
|
|
666 |
|
wstr = xmalloc( (len+1)*sizeof(wchar_t) ); |
| 659 |
667 |
|
|
| 660 |
668 |
mbstowcs(wstr, str, len); |
mbstowcs(wstr, str, len); |
| 661 |
669 |
width = wcswidth(wstr, len); |
width = wcswidth(wstr, len); |
| File src/video.c changed (mode: 100644) (index be684b2..cfcd417) |
| ... |
... |
showscreen(char **message, char *type, long lines, long pos, long cursor, int co |
| 88 |
88 |
attrset(normal); |
attrset(normal); |
| 89 |
89 |
for (i = pos;(i < lines) &&(i < pos + maxy - 2); i++) |
for (i = pos;(i < lines) &&(i < pos + maxy - 2); i++) |
| 90 |
90 |
{ |
{ |
| 91 |
|
if (!message[i]) continue; |
|
|
91 |
|
int tmp; |
| 92 |
92 |
|
|
| 93 |
|
int tmp = strlen(message[i]) - 1; |
|
|
93 |
|
if (!message[i]) continue; |
|
94 |
|
tmp = strlen(message[i]) - 1; |
| 94 |
95 |
message[i][tmp] = 0; |
message[i][tmp] = 0; |
| 95 |
96 |
if (tmp>column) |
if (tmp>column) |
| 96 |
97 |
mvaddstr(i + 1 - pos, 0, message[i]+column); |
mvaddstr(i + 1 - pos, 0, message[i]+column); |
| |
| ... |
... |
info_add_highlights(int pos, int cursor, long lines, int column, char **message) |
| 263 |
264 |
{ |
{ |
| 264 |
265 |
regmatch_t pmatch[1]; |
regmatch_t pmatch[1]; |
| 265 |
266 |
long maxpos = pos +(maxy - 2); |
long maxpos = pos +(maxy - 2); |
|
267 |
|
int maxregexp; |
| 266 |
268 |
if (maxpos > lines) |
if (maxpos > lines) |
| 267 |
269 |
{ |
{ |
| 268 |
270 |
maxpos = lines; |
maxpos = lines; |
| 269 |
271 |
} |
} |
| 270 |
272 |
|
|
| 271 |
|
int maxregexp = aftersearch ? h_regexp_num + 1 : h_regexp_num; |
|
|
273 |
|
maxregexp = aftersearch ? h_regexp_num + 1 : h_regexp_num; |
| 272 |
274 |
/* |
/* |
| 273 |
275 |
* if it is after search, then we have user defined regexps+ |
* if it is after search, then we have user defined regexps+ |
| 274 |
276 |
* a searched regexp to highlight |
* a searched regexp to highlight |
| |
| ... |
... |
info_add_highlights(int pos, int cursor, long lines, int column, char **message) |
| 285 |
287 |
/* check if this regexp is present on this line */ |
/* check if this regexp is present on this line */ |
| 286 |
288 |
while (!regexec(&h_regexp[j], str, 1, pmatch, 0)) |
while (!regexec(&h_regexp[j], str, 1, pmatch, 0)) |
| 287 |
289 |
{ |
{ |
|
290 |
|
int x, y; |
|
291 |
|
char tmp; |
|
292 |
|
|
| 288 |
293 |
/* yes, found something, so highlight it */ |
/* yes, found something, so highlight it */ |
| 289 |
294 |
int n = pmatch[0].rm_eo - pmatch[0].rm_so; |
int n = pmatch[0].rm_eo - pmatch[0].rm_so; |
| 290 |
295 |
|
|
| |
| ... |
... |
info_add_highlights(int pos, int cursor, long lines, int column, char **message) |
| 292 |
297 |
str += pmatch[0].rm_so; |
str += pmatch[0].rm_so; |
| 293 |
298 |
|
|
| 294 |
299 |
/* calculate position on screen */ |
/* calculate position on screen */ |
| 295 |
|
int x = calculate_len(message[i], str); |
|
| 296 |
|
int y = i - pos + 1; |
|
|
300 |
|
x = calculate_len(message[i], str); |
|
301 |
|
y = i - pos + 1; |
| 297 |
302 |
|
|
| 298 |
303 |
/* save the char after the end of the match, |
/* save the char after the end of the match, |
| 299 |
304 |
* and replace it by \0 */ |
* and replace it by \0 */ |
| 300 |
|
char tmp = str[n]; |
|
|
305 |
|
tmp = str[n]; |
| 301 |
306 |
str[n] = 0; |
str[n] = 0; |
| 302 |
307 |
|
|
| 303 |
308 |
/* write out the highlighted match to screen */ |
/* write out the highlighted match to screen */ |