📄 control.c
字号:
if (*cmd_str2 == (char) NULL) { alloc_space = TRUE; cmd_str2 = get_string(file_read_prompt_str, TRUE); } tmp = cmd_str2; while ((*tmp != ' ') && (*tmp != '\t') && (*tmp != (char) NULL)) tmp++; *tmp = (char) NULL; tmp_file = resolve_name(cmd_str2); recv_file = TRUE; value = check_fp(); if (tmp_file != cmd_str2) free(tmp_file); if (alloc_space) free(cmd_str2); } else if (compare(cmd_str, SAVE_str, FALSE)) file_op(SAVE_FILE); else if (compare(cmd_str, LITERAL_str, FALSE)) literal = TRUE; else if (compare(cmd_str, NOLITERAL_str, FALSE)) literal = FALSE; else if (compare(cmd_str, STATUS_str, FALSE)) status_line = TRUE; else if (compare(cmd_str, NOSTATUS_str, FALSE)) status_line = FALSE; else if (compare(cmd_str, MARGINS_str, FALSE)) observ_margins = TRUE; else if (compare(cmd_str, NOMARGINS_str, FALSE)) observ_margins = FALSE; else if (compare(cmd_str, INDENT_str, FALSE)) indent = TRUE; else if (compare(cmd_str, NOINDENT_str, FALSE)) indent = FALSE; else if (compare(cmd_str, OVERSTRIKE_str, FALSE)) overstrike = TRUE; else if (compare(cmd_str, NOOVERSTRIKE_str, FALSE)) overstrike = FALSE; else if (compare(cmd_str, text_cmd, FALSE)) text_only = TRUE; else if (compare(cmd_str, binary_cmd, FALSE)) text_only = FALSE; else if (compare(cmd_str, info_win_height_cmd_str, FALSE)) { temp_int = info_win_height; tmp = next_word(cmd_str); if ((*tmp >= '0') && (*tmp <= '9')) { c_int = atoi(tmp); if ((c_int > 0) && (c_int <= MAX_HELP_LINES)) info_win_height = c_int + 1; else { wmove(com_win, 0, 0); werase(com_win); wprintw(com_win, info_win_height_err); wrefresh(com_win); } if ((info_win_height != temp_int) && (info_window)) { redo_win(); curr_buff->last_line = curr_buff->lines - 1; new_screen(); paint_info_win(); redraw(); } } else { werase(com_win); wmove(com_win, 0, 0); wprintw(com_win, "%s %d", info_win_height_msg_str, (info_win_height - 1)); wrefresh(com_win); } } else if ((compare(cmd_str, LEFTMARGIN_str, FALSE)) || (compare(cmd_str, RIGHTMARGIN_str, FALSE))) { tmp = next_word(cmd_str); if ((*tmp >= '0') && (*tmp <= '9')) { c_int = atoi(tmp); if (compare(cmd_str, LEFTMARGIN_str, FALSE)) { if (c_int > right_margin) { wmove(com_win, 0, 0); wclrtoeol(com_win); wprintw(com_win, left_mrg_err_msg); } else left_margin = c_int; } else if (compare(cmd_str, RIGHTMARGIN_str, FALSE)) { if (c_int < left_margin) { wmove(com_win, 0, 0); wclrtoeol(com_win); wprintw(com_win, right_mrg_err_msg); } else right_margin = c_int; } } else { wmove(com_win, 0, 0); wclrtoeol(com_win); if (compare(cmd_str, LEFTMARGIN_str, FALSE)) wprintw(com_win, left_mrg_setting, left_margin); else if (compare(cmd_str, RIGHTMARGIN_str, FALSE)) wprintw(com_win, right_mrg_setting, right_margin); } } else if (compare(cmd_str, LINE_str, FALSE)) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, line_num_str, curr_buff->curr_line->line_number); wprintw(com_win, lines_from_top, curr_buff->absolute_lin); wprintw(com_win, total_lines_str, curr_buff->num_of_lines); } else if (compare(cmd_str, FILE_str, FALSE)) { wmove(com_win,0,0); wclrtoeol(com_win); if (curr_buff->edit_buffer) { if (curr_buff->file_name != NULL) { wprintw(com_win, current_file_str, curr_buff->full_name); } else { wprintw(com_win, current_file_str, no_file_string ); } } else { if (first_buff->file_name != NULL) { wprintw(com_win, current_file_str, first_buff->full_name); } else { wprintw(com_win, current_file_str, no_file_string ); } } } else if (compare(cmd_str, COPYRIGHT_str, FALSE)) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, "%s", copyright_notice); } else if ((*cmd_str >= '0') && (*cmd_str <= '9')) goto_line(cmd_str); else if ((*cmd_str == '+') || (*cmd_str == '-')) { if (*cmd_str == '+') dir = 'd'; else dir = 'u'; cmd_str++; if ((*cmd_str == ' ') || (*cmd_str == '\t')) cmd_str = next_word(cmd_str); value = 0; while ((*cmd_str >='0') && (*cmd_str <= '9')) { value = value * 10 + (*cmd_str - '0'); cmd_str++; } move_rel(&dir, value); werase(com_win); wmove(com_win, 0,0); wprintw(com_win, line_num_str, curr_buff->curr_line->line_number); wrefresh(com_win); } else if (compare(cmd_str, CHARACTER_str, FALSE)) { wmove(com_win,0,0); wclrtoeol(com_win); if (*curr_buff->pointer >= 0) wprintw(com_win, char_str, *curr_buff->pointer); else wprintw(com_win, char_str, (*curr_buff->pointer+256)); } else if (compare(cmd_str, REDRAW_str, FALSE)) { clearok(curr_buff->win, TRUE); redraw(); } else if (compare(cmd_str, RESEQUENCE_str, FALSE)) { tmp_line = curr_buff->first_line->next_line; while (tmp_line != NULL) { tmp_line->line_number = tmp_line->prev_line->line_number + 1; tmp_line = tmp_line->next_line; } } else if (compare(cmd_str, AUTHOR_str, FALSE)) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, "written by Hugh Mahon"); } else if (compare(cmd_str, VERSION_str, FALSE)) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, version_string); } else if (compare(cmd_str, CASE_str, FALSE)) case_sen = TRUE; else if (compare(cmd_str, NOCASE_str, FALSE)) case_sen = FALSE; else if (compare(cmd_str, EIGHT_str, FALSE)) { eightbit = TRUE; new_screen(); } else if (compare(cmd_str, NOEIGHT_str, FALSE)) { eightbit = FALSE; new_screen(); } else if (compare(cmd_str, WINDOWS_str, FALSE)) make_win(); else if (compare(cmd_str, NOWINDOWS_str, FALSE)) no_windows(); else if (compare(cmd_str, DEFINE_str, FALSE)) { cmd_str = next_word(cmd_str); def_key(cmd_str); } else if (compare(cmd_str, SHOW_str, FALSE)) { cmd_str = next_word(cmd_str); if (compare(cmd_str, GOLD_str, FALSE)) { cmd_str = next_word(cmd_str); gold_flag = TRUE; } else gold_flag = FALSE; if (toupper(*cmd_str) == 'F') { cmd_str++; c_int = 0; while ((*cmd_str >= '0') && (*cmd_str <= '9')) { c_int = c_int * 10 + (*cmd_str - '0'); cmd_str++; } if (c_int < 65) { if (gold_flag) c_temp = g_f[c_int]; else c_temp = f[c_int]; werase(com_win); wmove(com_win, 0,0); wprintw(com_win, key_def_msg, c_temp); } else { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, unkn_syntax_msg, cmd_str); } } if (toupper(*cmd_str) == 'K') { cmd_str++; c_int = 0; while ((*cmd_str >= '0') && (*cmd_str <= '9')) { c_int = c_int * 10 + (*cmd_str - '0'); cmd_str++; } if (c_int < 5) { if (gold_flag) c_temp = g_keypads[c_int]; else c_temp = keypads[c_int]; werase(com_win); wmove(com_win, 0,0); wprintw(com_win, key_def_msg, c_temp); } else { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, unkn_syntax_msg, cmd_str); } } else if (*cmd_str == '^') { cmd_str++; if (*cmd_str == '?') c_int = 31; else c_int = toupper(*cmd_str) - 'A'; if ((c_int != 8)&& (c_int != 16) && (c_int != 18) && ((c_int >= 0) && (c_int < 32))) { if (gold_flag) c_temp = g_ctr[c_int]; else c_temp = ctr[c_int]; werase(com_win); wmove(com_win, 0,0); wprintw(com_win, key_def_msg, c_temp); } else { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, unkn_syntax_msg, cmd_str); } } wrefresh(com_win); } else if (compare(cmd_str, HELP_str, FALSE)) help(); else if (compare(cmd_str, PRINT_str, FALSE)) { print_buffer(); } else if ((*cmd_str == '<') && (!in_pipe)) { in_pipe = TRUE; shell_fork = FALSE; cmd_str++; if ((*cmd_str == ' ') || (*cmd_str == '\t')) cmd_str = next_word(cmd_str); c_int = 0; in_buff_name[c_int] = (char) NULL; while ((*cmd_str != '!') && (*cmd_str != '>') && (*cmd_str != '<') && (*cmd_str != ' ') && (*cmd_str != '\t') && (*cmd_str != (char) NULL)) { in_buff_name[c_int] = *cmd_str; cmd_str++; c_int++; } if (c_int == 0) { copy_str(curr_buff->name, in_buff_name); } else in_buff_name[c_int] = (char) NULL; if ((*cmd_str == ' ') || (*cmd_str == '\t')) cmd_str = next_word(cmd_str); command(cmd_str); in_pipe = FALSE; shell_fork = TRUE; } else if ((*cmd_str == '>') && (!out_pipe)) { out_pipe = TRUE; cmd_str++; if ((*cmd_str == ' ') || (*cmd_str == '\t')) cmd_str = next_word(cmd_str); c_int = 0; out_buff_name[c_int] = (char) NULL; while ((*cmd_str != '!') && (*cmd_str != '>') && (*cmd_str != '<') && (*cmd_str != ' ') && (*cmd_str != '\t') && (*cmd_str != (char) NULL)) { out_buff_name[c_int] = *cmd_str; cmd_str++; c_int++; } if (c_int == 0) { copy_str(curr_buff->name, out_buff_name); } else out_buff_name[c_int] = (char) NULL; if ((*cmd_str == ' ') || (*cmd_str == '\t')) cmd_str = next_word(cmd_str); command(cmd_str); out_pipe = FALSE; } else if (*cmd_str == '!') { cmd_str++; if ((*cmd_str == ' ') || (*cmd_str == 9)) cmd_str = next_word(cmd_str); sh_command(cmd_str); } else if (compare(cmd_str, BUFFER_str, FALSE)) { cmd_str = next_word(cmd_str); if (*cmd_str == (char) NULL) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, current_buff_msg, curr_buff->name); } else { tmp = cmd_str; while ((*tmp != ' ') && (*tmp != '\t') && (*tmp != (char) NULL)) tmp++; *tmp = (char) NULL; chng_buf(cmd_str); } } else if (compare(cmd_str, DELETE_str, FALSE)) { if (!strncmp(curr_buff->name, main_buffer_name, strlen(main_buffer_name))) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, cant_del_buf_msg, main_buffer_name); } else del_buf(); } else if (compare(cmd_str, CD_str, FALSE)) { if (restrict_mode()) { return; } cmd_str = next_word(cmd_str); if (change_dir_allowed != TRUE) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, no_chng_dir_msg); } else if ((curr_buff->orig_dir == NULL) && (*cmd_str == (char) NULL)) { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, no_dir_entered_msg); } else { if (*cmd_str != (char)NULL) c_temp = cmd_str; else c_temp = curr_buff->orig_dir; tmp = c_temp; while ((*tmp != ' ') && (*tmp != '\t') && (*tmp != (char) NULL)) tmp++; *tmp = (char) NULL; name = resolve_name(c_temp); retval = chdir(name); if (name != c_temp) free(name); if (retval == -1) { werase(com_win); wmove(com_win, 0, 0); if (errno == ENOTDIR) wprintw(com_win, path_not_dir_msg); else if (errno == EACCES) wprintw(com_win, path_not_permitted_msg); else wprintw(com_win, path_chng_failed_msg); } } } else if (compare(cmd_str, edit_cmd_str, FALSE)) { cmd_str2 = next_word(cmd_str); if (cmd_str2 != NULL) { if (*cmd_str != (char)NULL) c_temp = cmd_str2; tmp = c_temp; while ((*tmp != ' ') && (*tmp != '\t') && (*tmp != (char) NULL)) tmp++; *tmp = (char) NULL; if (*c_temp != (char) NULL) name = resolve_name(c_temp); else name = c_temp; retval = open_for_edit(name); if (name != c_temp) free(name); } } else if (compare(cmd_str, pwd_cmd_str, FALSE)) { show_pwd(); } else { wmove(com_win,0,0); wclrtoeol(com_win); wprintw(com_win, unkn_cmd_msg, cmd_str2); }}void init_keys() /* initialize control keys and function keys */{ int counter; ctr[0] = fn_AC_str; /* control a */ ctr[1] = fn_EOT_str; /* control b */ ctr[2] = fn_COPY_str; /* control c */ ctr[3] = fn_BOL_str; /* control d */ ctr[4] = fn_CMD_str; /* control e */ ctr[5] = fn_SRCH_str; /* control f */ ctr[6] = fn_GOLD_str; /* control g */ ctr[7] = fn_BCK_str; /* control h */ /* backspace */ ctr[8] = ""; /* control i */ /* tab */ ctr[9] = fn_CR_str; /* control j */ /* new-line */ ctr[10] = fn_DC_str; /* control k */ ctr[11] = fn_DL_str; /* control l */ ctr[12] = fn_CR_str; /* control m */ /* carriage-return */ ctr[13] = fn_NP_str; /* control n */ ctr[14] = fn_EOL_str; /* control o */ ctr[15] = fn_PP_str; /* control p */ ctr[16] = ""; /* control q */ ctr[17] = fn_RD_str; /* control r */ ctr[18] = ""; /* control s */ ctr[19] = fn_BOT_str; /* control t */ ctr[20] = fn_MARK_str; /* control u */ ctr[21] = fn_PST_str; /* control v */ ctr[22] = fn_DW_str; /* control w */ ctr[23] = fn_CUT_str; /* control x */ ctr[24] = fn_AW_str; /* control y */ ctr[25] = fn_RP_str; /* control z */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -