diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2006-04-16 20:34:26 +0000 |
|---|---|---|
| committer | Mike Frysinger <vapier@gentoo.org> | 2006-04-16 20:34:26 +0000 |
| commit | 3a2b103eea9f87fa476b1f8c4ed4a11b7422eab8 (patch) | |
| tree | 4ba65ff014a24b1e6295f618aa6fbbcf242a65e6 /miscutils | |
| parent | dbd8c3b2954f22b4d5221aa157153fec6f68ee57 (diff) | |
| download | busybox-w32-3a2b103eea9f87fa476b1f8c4ed4a11b7422eab8.tar.gz busybox-w32-3a2b103eea9f87fa476b1f8c4ed4a11b7422eab8.tar.bz2 busybox-w32-3a2b103eea9f87fa476b1f8c4ed4a11b7422eab8.zip | |
uncuddle brackets
Diffstat (limited to 'miscutils')
| -rw-r--r-- | miscutils/less.c | 147 |
1 files changed, 78 insertions, 69 deletions
diff --git a/miscutils/less.c b/miscutils/less.c index df55b50ac..ce34701d6 100644 --- a/miscutils/less.c +++ b/miscutils/less.c | |||
| @@ -130,19 +130,21 @@ static struct termios term_orig, term_vi; | |||
| 130 | static FILE *inp; | 130 | static FILE *inp; |
| 131 | 131 | ||
| 132 | /* Reset terminal input to normal */ | 132 | /* Reset terminal input to normal */ |
| 133 | static void set_tty_cooked(void) { | 133 | static void set_tty_cooked(void) |
| 134 | { | ||
| 134 | fflush(stdout); | 135 | fflush(stdout); |
| 135 | tcsetattr(fileno(inp), TCSANOW, &term_orig); | 136 | tcsetattr(fileno(inp), TCSANOW, &term_orig); |
| 136 | } | 137 | } |
| 137 | 138 | ||
| 138 | /* Set terminal input to raw mode (taken from vi.c) */ | 139 | /* Set terminal input to raw mode (taken from vi.c) */ |
| 139 | static void set_tty_raw(void) { | 140 | static void set_tty_raw(void) |
| 141 | { | ||
| 140 | tcsetattr(fileno(inp), TCSANOW, &term_vi); | 142 | tcsetattr(fileno(inp), TCSANOW, &term_vi); |
| 141 | } | 143 | } |
| 142 | 144 | ||
| 143 | /* Exit the program gracefully */ | 145 | /* Exit the program gracefully */ |
| 144 | static void tless_exit(int code) { | 146 | static void tless_exit(int code) |
| 145 | 147 | { | |
| 146 | /* TODO: We really should save the terminal state when we start, | 148 | /* TODO: We really should save the terminal state when we start, |
| 147 | and restore it when we exit. Less does this with the | 149 | and restore it when we exit. Less does this with the |
| 148 | "ti" and "te" termcap commands; can this be done with | 150 | "ti" and "te" termcap commands; can this be done with |
| @@ -155,8 +157,8 @@ static void tless_exit(int code) { | |||
| 155 | /* Grab a character from input without requiring the return key. If the | 157 | /* Grab a character from input without requiring the return key. If the |
| 156 | character is ASCII \033, get more characters and assign certain sequences | 158 | character is ASCII \033, get more characters and assign certain sequences |
| 157 | special return codes. Note that this function works best with raw input. */ | 159 | special return codes. Note that this function works best with raw input. */ |
| 158 | static int tless_getch(void) { | 160 | static int tless_getch(void) |
| 159 | 161 | { | |
| 160 | int input; | 162 | int input; |
| 161 | 163 | ||
| 162 | set_tty_raw(); | 164 | set_tty_raw(); |
| @@ -191,18 +193,20 @@ static int tless_getch(void) { | |||
| 191 | 193 | ||
| 192 | /* Move the cursor to a position (x,y), where (0,0) is the | 194 | /* Move the cursor to a position (x,y), where (0,0) is the |
| 193 | top-left corner of the console */ | 195 | top-left corner of the console */ |
| 194 | static void move_cursor(int x, int y) { | 196 | static void move_cursor(int x, int y) |
| 197 | { | ||
| 195 | printf("\033[%i;%iH", x, y); | 198 | printf("\033[%i;%iH", x, y); |
| 196 | } | 199 | } |
| 197 | 200 | ||
| 198 | static void clear_line(void) { | 201 | static void clear_line(void) |
| 202 | { | ||
| 199 | move_cursor(height, 0); | 203 | move_cursor(height, 0); |
| 200 | printf("\033[K"); | 204 | printf("\033[K"); |
| 201 | } | 205 | } |
| 202 | 206 | ||
| 203 | /* This adds line numbers to every line, as the -N flag necessitates */ | 207 | /* This adds line numbers to every line, as the -N flag necessitates */ |
| 204 | static void add_linenumbers(void) { | 208 | static void add_linenumbers(void) |
| 205 | 209 | { | |
| 206 | char current_line[256]; | 210 | char current_line[256]; |
| 207 | int i; | 211 | int i; |
| 208 | 212 | ||
| @@ -212,8 +216,8 @@ static void add_linenumbers(void) { | |||
| 212 | } | 216 | } |
| 213 | } | 217 | } |
| 214 | 218 | ||
| 215 | static void data_readlines(void) { | 219 | static void data_readlines(void) |
| 216 | 220 | { | |
| 217 | int i; | 221 | int i; |
| 218 | char current_line[256]; | 222 | char current_line[256]; |
| 219 | FILE *fp; | 223 | FILE *fp; |
| @@ -245,7 +249,8 @@ static void data_readlines(void) { | |||
| 245 | } | 249 | } |
| 246 | 250 | ||
| 247 | /* Turn a percentage into a line number */ | 251 | /* Turn a percentage into a line number */ |
| 248 | static int reverse_percent(int percentage) { | 252 | static int reverse_percent(int percentage) |
| 253 | { | ||
| 249 | double linenum = percentage; | 254 | double linenum = percentage; |
| 250 | linenum = ((linenum / 100) * num_flines) - 1; | 255 | linenum = ((linenum / 100) * num_flines) - 1; |
| 251 | return(linenum); | 256 | return(linenum); |
| @@ -255,13 +260,14 @@ static int reverse_percent(int percentage) { | |||
| 255 | 260 | ||
| 256 | /* Interestingly, writing calc_percent as a function and not a prototype saves around 32 bytes | 261 | /* Interestingly, writing calc_percent as a function and not a prototype saves around 32 bytes |
| 257 | * on my build. */ | 262 | * on my build. */ |
| 258 | static int calc_percent(void) { | 263 | static int calc_percent(void) |
| 264 | { | ||
| 259 | return ((100 * (line_pos + height - 2) / num_flines) + 1); | 265 | return ((100 * (line_pos + height - 2) / num_flines) + 1); |
| 260 | } | 266 | } |
| 261 | 267 | ||
| 262 | /* Print a status line if -M was specified */ | 268 | /* Print a status line if -M was specified */ |
| 263 | static void m_status_print(void) { | 269 | static void m_status_print(void) |
| 264 | 270 | { | |
| 265 | int percentage; | 271 | int percentage; |
| 266 | 272 | ||
| 267 | if (!past_eof) { | 273 | if (!past_eof) { |
| @@ -295,8 +301,8 @@ static void m_status_print(void) { | |||
| 295 | } | 301 | } |
| 296 | 302 | ||
| 297 | /* Print a status line if -m was specified */ | 303 | /* Print a status line if -m was specified */ |
| 298 | static void medium_status_print(void) { | 304 | static void medium_status_print(void) |
| 299 | 305 | { | |
| 300 | int percentage; | 306 | int percentage; |
| 301 | percentage = calc_percent(); | 307 | percentage = calc_percent(); |
| 302 | 308 | ||
| @@ -310,8 +316,8 @@ static void medium_status_print(void) { | |||
| 310 | #endif | 316 | #endif |
| 311 | 317 | ||
| 312 | /* Print the status line */ | 318 | /* Print the status line */ |
| 313 | static void status_print(void) { | 319 | static void status_print(void) |
| 314 | 320 | { | |
| 315 | /* Change the status if flags have been set */ | 321 | /* Change the status if flags have been set */ |
| 316 | #ifdef CONFIG_FEATURE_LESS_FLAGS | 322 | #ifdef CONFIG_FEATURE_LESS_FLAGS |
| 317 | if (flags & FLAG_M) | 323 | if (flags & FLAG_M) |
| @@ -340,8 +346,8 @@ static void status_print(void) { | |||
| 340 | } | 346 | } |
| 341 | 347 | ||
| 342 | /* Print the buffer */ | 348 | /* Print the buffer */ |
| 343 | static void buffer_print(void) { | 349 | static void buffer_print(void) |
| 344 | 350 | { | |
| 345 | int i; | 351 | int i; |
| 346 | 352 | ||
| 347 | printf("%s", CLEAR); | 353 | printf("%s", CLEAR); |
| @@ -360,8 +366,8 @@ static void buffer_print(void) { | |||
| 360 | } | 366 | } |
| 361 | 367 | ||
| 362 | /* Initialise the buffer */ | 368 | /* Initialise the buffer */ |
| 363 | static void buffer_init(void) { | 369 | static void buffer_init(void) |
| 364 | 370 | { | |
| 365 | int i; | 371 | int i; |
| 366 | 372 | ||
| 367 | if(buffer == NULL) { | 373 | if(buffer == NULL) { |
| @@ -385,8 +391,8 @@ static void buffer_init(void) { | |||
| 385 | } | 391 | } |
| 386 | 392 | ||
| 387 | /* Move the buffer up and down in the file in order to scroll */ | 393 | /* Move the buffer up and down in the file in order to scroll */ |
| 388 | static void buffer_down(int nlines) { | 394 | static void buffer_down(int nlines) |
| 389 | 395 | { | |
| 390 | int i; | 396 | int i; |
| 391 | 397 | ||
| 392 | if (!past_eof) { | 398 | if (!past_eof) { |
| @@ -415,8 +421,8 @@ static void buffer_down(int nlines) { | |||
| 415 | } | 421 | } |
| 416 | } | 422 | } |
| 417 | 423 | ||
| 418 | static void buffer_up(int nlines) { | 424 | static void buffer_up(int nlines) |
| 419 | 425 | { | |
| 420 | int i; | 426 | int i; |
| 421 | int tilde_line; | 427 | int tilde_line; |
| 422 | 428 | ||
| @@ -467,8 +473,8 @@ static void buffer_up(int nlines) { | |||
| 467 | } | 473 | } |
| 468 | } | 474 | } |
| 469 | 475 | ||
| 470 | static void buffer_line(int linenum) { | 476 | static void buffer_line(int linenum) |
| 471 | 477 | { | |
| 472 | int i; | 478 | int i; |
| 473 | 479 | ||
| 474 | past_eof = 0; | 480 | past_eof = 0; |
| @@ -499,8 +505,8 @@ static void buffer_line(int linenum) { | |||
| 499 | } | 505 | } |
| 500 | 506 | ||
| 501 | /* Reinitialise everything for a new file - free the memory and start over */ | 507 | /* Reinitialise everything for a new file - free the memory and start over */ |
| 502 | static void reinitialise(void) { | 508 | static void reinitialise(void) |
| 503 | 509 | { | |
| 504 | int i; | 510 | int i; |
| 505 | 511 | ||
| 506 | for (i = 0; i <= num_flines; i++) | 512 | for (i = 0; i <= num_flines; i++) |
| @@ -512,8 +518,8 @@ static void reinitialise(void) { | |||
| 512 | buffer_print(); | 518 | buffer_print(); |
| 513 | } | 519 | } |
| 514 | 520 | ||
| 515 | static void examine_file(void) { | 521 | static void examine_file(void) |
| 516 | 522 | { | |
| 517 | int newline_offset; | 523 | int newline_offset; |
| 518 | 524 | ||
| 519 | clear_line(); | 525 | clear_line(); |
| @@ -538,7 +544,8 @@ static void examine_file(void) { | |||
| 538 | * 0: go to the first file | 544 | * 0: go to the first file |
| 539 | * 1: go forward one file | 545 | * 1: go forward one file |
| 540 | */ | 546 | */ |
| 541 | static void change_file (int direction) { | 547 | static void change_file(int direction) |
| 548 | { | ||
| 542 | if (current_file != ((direction > 0) ? num_files : 1)) { | 549 | if (current_file != ((direction > 0) ? num_files : 1)) { |
| 543 | current_file = direction ? current_file + direction : 1; | 550 | current_file = direction ? current_file + direction : 1; |
| 544 | strcpy(filename, files[current_file - 1]); | 551 | strcpy(filename, files[current_file - 1]); |
| @@ -550,8 +557,8 @@ static void change_file (int direction) { | |||
| 550 | } | 557 | } |
| 551 | } | 558 | } |
| 552 | 559 | ||
| 553 | static void remove_current_file(void) { | 560 | static void remove_current_file(void) |
| 554 | 561 | { | |
| 555 | int i; | 562 | int i; |
| 556 | 563 | ||
| 557 | if (current_file != 1) { | 564 | if (current_file != 1) { |
| @@ -571,8 +578,8 @@ static void remove_current_file(void) { | |||
| 571 | } | 578 | } |
| 572 | } | 579 | } |
| 573 | 580 | ||
| 574 | static void colon_process(void) { | 581 | static void colon_process(void) |
| 575 | 582 | { | |
| 576 | int keypress; | 583 | int keypress; |
| 577 | 584 | ||
| 578 | /* Clear the current line and print a prompt */ | 585 | /* Clear the current line and print a prompt */ |
| @@ -616,13 +623,14 @@ static void colon_process(void) { | |||
| 616 | /* Get a regular expression from the user, and then go through the current | 623 | /* Get a regular expression from the user, and then go through the current |
| 617 | file line by line, running a processing regex function on each one. */ | 624 | file line by line, running a processing regex function on each one. */ |
| 618 | 625 | ||
| 619 | static char *insert_highlights (char *line, int start, int end) { | 626 | static char *insert_highlights(char *line, int start, int end) |
| 620 | 627 | { | |
| 621 | return bb_xasprintf("%.*s%s%.*s%s%s", start, line, HIGHLIGHT, | 628 | return bb_xasprintf("%.*s%s%.*s%s%s", start, line, HIGHLIGHT, |
| 622 | end - start, line + start, NORMAL, line + end); | 629 | end - start, line + start, NORMAL, line + end); |
| 623 | } | 630 | } |
| 624 | 631 | ||
| 625 | static char *process_regex_on_line(char *line, regex_t *pattern) { | 632 | static char *process_regex_on_line(char *line, regex_t *pattern) |
| 633 | { | ||
| 626 | /* This function takes the regex and applies it to the line. | 634 | /* This function takes the regex and applies it to the line. |
| 627 | Each part of the line that matches has the HIGHLIGHT | 635 | Each part of the line that matches has the HIGHLIGHT |
| 628 | and NORMAL escape sequences placed around it by | 636 | and NORMAL escape sequences placed around it by |
| @@ -658,8 +666,8 @@ static char *process_regex_on_line(char *line, regex_t *pattern) { | |||
| 658 | return line2; | 666 | return line2; |
| 659 | } | 667 | } |
| 660 | 668 | ||
| 661 | static void regex_process(void) { | 669 | static void regex_process(void) |
| 662 | 670 | { | |
| 663 | char uncomp_regex[100]; | 671 | char uncomp_regex[100]; |
| 664 | char current_line[256]; | 672 | char current_line[256]; |
| 665 | int i; | 673 | int i; |
| @@ -708,8 +716,8 @@ static void regex_process(void) { | |||
| 708 | buffer_init(); | 716 | buffer_init(); |
| 709 | } | 717 | } |
| 710 | 718 | ||
| 711 | static void goto_match(int match) { | 719 | static void goto_match(int match) |
| 712 | 720 | { | |
| 713 | /* This goes to a specific match - all line positions of matches are | 721 | /* This goes to a specific match - all line positions of matches are |
| 714 | stored within the match_lines[] array. */ | 722 | stored within the match_lines[] array. */ |
| 715 | if ((match < num_matches) && (match >= 0)) { | 723 | if ((match < num_matches) && (match >= 0)) { |
| @@ -718,8 +726,8 @@ static void goto_match(int match) { | |||
| 718 | } | 726 | } |
| 719 | } | 727 | } |
| 720 | 728 | ||
| 721 | static void search_backwards(void) { | 729 | static void search_backwards(void) |
| 722 | 730 | { | |
| 723 | int current_linepos = line_pos; | 731 | int current_linepos = line_pos; |
| 724 | int i; | 732 | int i; |
| 725 | 733 | ||
| @@ -740,8 +748,8 @@ static void search_backwards(void) { | |||
| 740 | } | 748 | } |
| 741 | #endif | 749 | #endif |
| 742 | 750 | ||
| 743 | static void number_process(int first_digit) { | 751 | static void number_process(int first_digit) |
| 744 | 752 | { | |
| 745 | int i = 1; | 753 | int i = 1; |
| 746 | int num; | 754 | int num; |
| 747 | char num_input[80]; | 755 | char num_input[80]; |
| @@ -803,8 +811,8 @@ END: | |||
| 803 | } | 811 | } |
| 804 | 812 | ||
| 805 | #ifdef CONFIG_FEATURE_LESS_FLAGCS | 813 | #ifdef CONFIG_FEATURE_LESS_FLAGCS |
| 806 | static void flag_change(void) { | 814 | static void flag_change(void) |
| 807 | 815 | { | |
| 808 | int keypress; | 816 | int keypress; |
| 809 | 817 | ||
| 810 | clear_line(); | 818 | clear_line(); |
| @@ -829,8 +837,8 @@ static void flag_change(void) { | |||
| 829 | } | 837 | } |
| 830 | } | 838 | } |
| 831 | 839 | ||
| 832 | static void show_flag_status(void) { | 840 | static void show_flag_status(void) |
| 833 | 841 | { | |
| 834 | int keypress; | 842 | int keypress; |
| 835 | int flag_val; | 843 | int flag_val; |
| 836 | 844 | ||
| @@ -864,8 +872,8 @@ static void show_flag_status(void) { | |||
| 864 | } | 872 | } |
| 865 | #endif | 873 | #endif |
| 866 | 874 | ||
| 867 | static void full_repaint(void) { | 875 | static void full_repaint(void) |
| 868 | 876 | { | |
| 869 | int temp_line_pos = line_pos; | 877 | int temp_line_pos = line_pos; |
| 870 | data_readlines(); | 878 | data_readlines(); |
| 871 | buffer_init(); | 879 | buffer_init(); |
| @@ -874,8 +882,8 @@ static void full_repaint(void) { | |||
| 874 | } | 882 | } |
| 875 | 883 | ||
| 876 | 884 | ||
| 877 | static void save_input_to_file(void) { | 885 | static void save_input_to_file(void) |
| 878 | 886 | { | |
| 879 | char current_line[256]; | 887 | char current_line[256]; |
| 880 | int i; | 888 | int i; |
| 881 | FILE *fp; | 889 | FILE *fp; |
| @@ -896,8 +904,8 @@ static void save_input_to_file(void) { | |||
| 896 | } | 904 | } |
| 897 | 905 | ||
| 898 | #ifdef CONFIG_FEATURE_LESS_MARKS | 906 | #ifdef CONFIG_FEATURE_LESS_MARKS |
| 899 | static void add_mark(void) { | 907 | static void add_mark(void) |
| 900 | 908 | { | |
| 901 | int letter; | 909 | int letter; |
| 902 | int mark_line; | 910 | int mark_line; |
| 903 | 911 | ||
| @@ -922,8 +930,8 @@ static void add_mark(void) { | |||
| 922 | } | 930 | } |
| 923 | } | 931 | } |
| 924 | 932 | ||
| 925 | static void goto_mark(void) { | 933 | static void goto_mark(void) |
| 926 | 934 | { | |
| 927 | int letter; | 935 | int letter; |
| 928 | int i; | 936 | int i; |
| 929 | 937 | ||
| @@ -949,8 +957,8 @@ static void goto_mark(void) { | |||
| 949 | 957 | ||
| 950 | #ifdef CONFIG_FEATURE_LESS_BRACKETS | 958 | #ifdef CONFIG_FEATURE_LESS_BRACKETS |
| 951 | 959 | ||
| 952 | static char opp_bracket (char bracket) { | 960 | static char opp_bracket(char bracket) |
| 953 | 961 | { | |
| 954 | switch (bracket) { | 962 | switch (bracket) { |
| 955 | case '{': case '[': | 963 | case '{': case '[': |
| 956 | return bracket + 2; | 964 | return bracket + 2; |
| @@ -970,8 +978,8 @@ static char opp_bracket (char bracket) { | |||
| 970 | } | 978 | } |
| 971 | } | 979 | } |
| 972 | 980 | ||
| 973 | static void match_right_bracket(char bracket) { | 981 | static void match_right_bracket(char bracket) |
| 974 | 982 | { | |
| 975 | int bracket_line = -1; | 983 | int bracket_line = -1; |
| 976 | int i; | 984 | int i; |
| 977 | 985 | ||
| @@ -995,8 +1003,8 @@ static void match_right_bracket(char bracket) { | |||
| 995 | } | 1003 | } |
| 996 | } | 1004 | } |
| 997 | 1005 | ||
| 998 | static void match_left_bracket (char bracket) { | 1006 | static void match_left_bracket(char bracket) |
| 999 | 1007 | { | |
| 1000 | int bracket_line = -1; | 1008 | int bracket_line = -1; |
| 1001 | int i; | 1009 | int i; |
| 1002 | 1010 | ||
| @@ -1025,7 +1033,8 @@ static void match_left_bracket (char bracket) { | |||
| 1025 | 1033 | ||
| 1026 | #endif /* CONFIG_FEATURE_LESS_BRACKETS */ | 1034 | #endif /* CONFIG_FEATURE_LESS_BRACKETS */ |
| 1027 | 1035 | ||
| 1028 | static void keypress_process(int keypress) { | 1036 | static void keypress_process(int keypress) |
| 1037 | { | ||
| 1029 | switch (keypress) { | 1038 | switch (keypress) { |
| 1030 | case KEY_DOWN: case 'e': case 'j': case '\015': | 1039 | case KEY_DOWN: case 'e': case 'j': case '\015': |
| 1031 | buffer_down(1); | 1040 | buffer_down(1); |
