void csPrevious() { if (pop_history (&his)) { jumpTo(his.filename, his.lineno); } return; }
static void do_app(void) { if (ui.key == KEY_F4 && ui.mod == GLFW_MOD_ALT) quit(); if (ui.down || ui.middle || ui.right || ui.key) showinfo = 0; if (!ui.focus && ui.key) { switch (ui.key) { case 'q': quit(); break; case 'm': if (number == 0) push_history(); else if (number > 0 && number < nelem(marks)) marks[number] = currentpage; break; case 't': if (number == 0) { if (history_count > 0) pop_history(); } else if (number > 0 && number < nelem(marks)) { jump_to_page(marks[number]); } break; case 'T': if (number == 0) { if (future_count > 0) pop_future(); } break; case 'N': search_dir = -1; if (search_hit_page == currentpage) search_page = currentpage + search_dir; else search_page = currentpage; if (search_page >= 0 && search_page < fz_count_pages(ctx, doc)) { search_hit_page = -1; if (search_needle) search_active = 1; } break; case 'n': search_dir = 1; if (search_hit_page == currentpage) search_page = currentpage + search_dir; else search_page = currentpage; if (search_page >= 0 && search_page < fz_count_pages(ctx, doc)) { search_hit_page = -1; if (search_needle) search_active = 1; } break; case 'f': toggle_fullscreen(); break; case 'w': shrinkwrap(); break; case 'r': reload(); break; case 'o': toggle_outline(); break; case 'W': auto_zoom_w(); break; case 'H': auto_zoom_h(); break; case 'Z': auto_zoom(); break; case 'z': currentzoom = number > 0 ? number : DEFRES; break; case '<': currentpage -= 10 * fz_maxi(number, 1); break; case '>': currentpage += 10 * fz_maxi(number, 1); break; case ',': case KEY_PAGE_UP: currentpage -= fz_maxi(number, 1); break; case '.': case KEY_PAGE_DOWN: currentpage += fz_maxi(number, 1); break; case 'b': number = fz_maxi(number, 1); while (number--) smart_move_backward(); break; case ' ': number = fz_maxi(number, 1); while (number--) smart_move_forward(); break; case 'g': jump_to_page(number - 1); break; case 'G': jump_to_page(fz_count_pages(ctx, doc) - 1); break; case '+': currentzoom = zoom_in(currentzoom); break; case '-': currentzoom = zoom_out(currentzoom); break; case '[': currentrotate += 90; break; case ']': currentrotate -= 90; break; case 'l': showlinks = !showlinks; break; case 'i': showinfo = !showinfo; break; case '/': search_dir = 1; showsearch = 1; search_input.p = search_input.text; search_input.q = search_input.end; break; case '?': search_dir = -1; showsearch = 1; search_input.p = search_input.text; search_input.q = search_input.end; break; case KEY_UP: scroll_y -= 10; break; case KEY_DOWN: scroll_y += 10; break; case KEY_LEFT: scroll_x -= 10; break; case KEY_RIGHT: scroll_x += 10; break; } if (ui.key >= '0' && ui.key <= '9') number = number * 10 + ui.key - '0'; else number = 0; currentpage = fz_clampi(currentpage, 0, fz_count_pages(ctx, doc) - 1); currentzoom = fz_clamp(currentzoom, MINRES, MAXRES); while (currentrotate < 0) currentrotate += 360; while (currentrotate >= 360) currentrotate -= 360; if (search_hit_page != currentpage) search_hit_page = -1; /* clear highlights when navigating */ ui_needs_update = 1; ui.key = 0; /* we ate the key event, so zap it */ } }
int main(int argc, char *argv[]) { int i; char line[1024], *uri; /* copy defaults */ init_config(); uri = &config.start_uri[0]; /* parse command line */ for (i = 1; i < argc; i++) { if (argv[i][0] == '-') switch(argv[i][1]) { case 'H': usage(); break; case 'v': banner(stderr); exit(EXIT_FAILURE); default: usage(); } else { uri = argv[i]; } } /* parse uri */ banner(stdout); if (! parse_uri(uri)) { banner(stderr); fprintf(stderr, "invalid gopher URI: %s", argv[i]); exit(EXIT_FAILURE); } /* main loop */ view_directory(parsed_host, parsed_port, parsed_selector, 0); for (;;) { printf("\033[%sm%s:%s%s\033[0m ", config.color_prompt, current_host, current_port, current_selector); fflush(stdout); /* to display the prompt */ if (! read_line(0, line, sizeof(line))) { puts("QUIT"); return EXIT_SUCCESS; } i = strlen(line); switch (line[0]) { case '?': puts( "? - help\n" "* - reload directory\n" "< - go back in history\n" ".LINK - download the given link\n" "h - show history\n" "hLINK - jump to the specified history item\n" "gURI - jump to the given gopher URI\n" "b - show bookmarks\n" "bLINK - jump to the specified bookmark item\n" "C^d - quit"); break; case '<': pop_history(); break; case '*': view_directory(current_host, current_port, current_selector, 0); break; case '.': download_link(make_key(line[1], line[2])); break; case 'h': if (i == 1 || i == 3) view_history(make_key(line[1], line[2])); else follow_link(make_key(line[0], line[1])); break; case 'g': if (i != 2) { if (parse_uri(&line[1])) view_directory(parsed_host, parsed_port, parsed_selector, 1); else puts("invalid gopher URI"); } else follow_link(make_key(line[0], line[1])); break; case 'b': if (i == 1 || i == 3) view_bookmarks(make_key(line[1], line[2])); else follow_link(make_key(line[0], line[1])); break; default: follow_link(make_key(line[0], line[1])); break; } } return EXIT_SUCCESS; /* never get's here but stops cc complaining */ }