/**
 * Processing code
 * (C) Nettle developers 2000-2002
 *
 * $Id: process,v 1.17 2002/02/01 23:56:54 ijeffray Exp $
 */

#ifndef PROCESS_H
#define PROCESS_H

#define TELNET_SE       240
#define TELNET_NOP      241
#define TELNET_DATAMARK 242
#define TELNET_BRK      243
#define TELNET_IP       244
#define TELNET_AO       245
#define TELNET_AYT      246
#define TELNET_EC       247
#define TELNET_EL       248
#define TELNET_GA       249
#define TELNET_SB       250
#define TELNET_WILL     251
#define TELNET_WONT     252
#define TELNET_DO       253
#define TELNET_DONT     254
#define TELNET_IAC      255

/* Leave these indented by 1 char until they're handled somewhere! */
 #define TELOPT_TRANSMIT_BINARY    0 /* RFC 856 */
#define TELOPT_ECHO               1 /* RFC 857 */
#define TELOPT_SUPPRESS_GO_AHEAD  3 /* RFC 858 */
 #define TELOPT_STATUS             5 /* RFC 859 */
 #define TELOPT_RTCE               7 /* RFC 726 */
 #define TELOPT_TIMING_MARK        6 /* RFC 860 */
 #define TELOPT_NAOCRD            10 /* RFC 652 */
 #define TELOPT_NAOHTS            11 /* RFC 653 */
 #define TELOPT_NAOHTD            12 /* RFC 654 */
 #define TELOPT_NAOFFD            13 /* RFC 655 */
 #define TELOPT_NAOVTS            14 /* RFC 656 */
 #define TELOPT_NAOVTD            15 /* RFC 657 */
 #define TELOPT_NAOFLD            16 /* RFC 658 */
 #define TELOPT_EXTEND_ASCII      17 /* RFC 698 */
 #define TELOPT_LOGOUT            18 /* RFC 727 */
 #define TELOPT_BM                19 /* RFC 735 */
 #define TELOPT_DET               20 /* RFC 1043 */
 #define TELOPT_SUPDUP            21 /* RFC 736 */
 #define TELOPT_SUPDUP_OUTPUT     22 /* RFC 749 */
 #define TELOPT_SEND_LOCATION     23 /* RFC 779 */
#define TELOPT_TERMINAL_TYPE     24 /* RFC 1091 */
 #define TELOPT_END_OF_RECORD     25 /* RFC 885 */
 #define TELOPT_TUID              26 /* RFC 927 */
 #define TELOPT_OUTMRK            27 /* RFC 933 */
 #define TELOPT_TTYLOC            28 /* RFC 946 */
 #define TELOPT_3270_REGIME       29 /* RFC 1041 */
 #define TELOPT_X3_PAD            30 /* RFC 1053 */
#define TELOPT_NAWS              31 /* RFC 1073 */
#define TELOPT_TERMINAL_SPEED    32 /* RFC 1079 */
 #define TELOPT_TOGGLE_FLOW_CONTROL 33 /* RFC 1372 */
 #define TELOPT_LINEMODE          34 /* RFC 1184 */
#define TELOPT_XDISPLOC          35 /* RFC 1096 */
 #define TELOPT_ENVIRON           36 /* RFC 1408 */
 #define TELOPT_AUTHENTICATION    37 /* RFC 1416 */
 #define TELOPT_NEW_ENVIRON       39 /* RFC 1572 */
 #define TELOPT_EXTENDED_OPTIONS_LIST 255 /* RFC 861 */

#define TELOPT_SUB_IS   0
#define TELOPT_SUB_SEND 1

extern void changedbox_init (struct session_struct *session);
extern void changedbox_update (int cx0, int cy0, int cx1, int cy1);
extern void changedbox_update_char (int cx0, int cy0);
extern void changedbox_update_offset (int calc);
extern void changedbox_update_whole (void);
extern void force_redraw_changedbox (void);
extern void clear_screen(struct session_struct *session, int calc, int calc2, char fg, char bg,
                  char flags, char character);
extern void clear_alt_screen(struct session_struct *session, int calc, int calc2, char fg,
                             char bg,char flags, char character);
extern void copy_main_alternate(struct session_struct *session);
extern void process_data(struct session_struct *session, char byte);
extern void process_wimp_key(struct session_struct *session, int key, int extra);
extern void process_line_editor(struct session_struct *session);
extern void process_data_transmission(struct session_struct *session,
                               const char *icon_text, int size_of_data);
extern struct coords get_cursor_position(struct session_struct *session);
extern void primary_da_request(struct session_struct *session);
extern void shuffle_up(struct session_struct *session, int start, int end);
extern void shuffle_down(struct session_struct *session, int start, int end);
extern void scroll_up(struct session_struct *session, bool wrap);
extern void scroll_down (struct session_struct *session, bool wrap);
extern void reprocess_position_scroll(struct session_struct *session);
extern void reprocess_position(struct session_struct *session);
extern void row_shift_right (struct session_struct *session, int chars);
extern void work_out_character_character_set(struct session_struct *session,int character_set,
                                      int xpos, int ypos, unsigned char byte);
extern void work_out_character(struct session_struct *session, int xpos, int ypos,
                        unsigned char byte);
extern void byte_null(struct session_struct *session);
extern void byte_enquiry(struct session_struct *session);
extern void byte_bell(struct session_struct *session);
extern void byte_backspace(struct session_struct *session);
extern void byte_horizontal_tabulation(struct session_struct *session);
extern void byte_reverse_horizontal_tabulation(struct session_struct *session);
extern void byte_linefeed(struct session_struct *session);
extern void byte_carriage_return(struct session_struct *session);
extern void byte_shift_out(struct session_struct *session);
extern void byte_shift_in(struct session_struct *session);
extern void byte_device_control_1(struct session_struct *session);
extern void byte_device_control_3(struct session_struct *session);
extern void byte_cancel(struct session_struct *session);
extern void byte_substitute(struct session_struct *session);
extern void byte_escape(struct session_struct *session);
extern void byte_delete(struct session_struct *session);
extern void byte_index(struct session_struct *session);
extern void byte_next_line(struct session_struct *session);
extern void byte_horizontal_tab_set(struct session_struct *session);
extern void byte_reverse_index(struct session_struct *session);
extern void byte_single_shift_g2(struct session_struct *session);
extern void byte_single_shift_g3(struct session_struct *session);
extern void byte_device_control_string(struct session_struct *session);
extern void byte_control_sequence_intro(struct session_struct *session);
extern void byte_string_terminator(struct session_struct *session);
extern void byte_telnet(struct session_struct *session);
extern void byte_default(struct session_struct *session, char byte);
extern void snap_cursor_to_terminal(struct session_struct *session);
extern void save_cursor_position (struct session_struct *session);
extern void restore_cursor_position (struct session_struct *session);
extern void swap_alternate_main(struct session_struct *session);
extern void copy_alternate_main(struct session_struct *session);
extern void clear_main_screen(struct session_struct *session);
extern void clear_alternate_screen(struct session_struct *session);
extern void determine_character_set(struct session_struct *session);
extern void append_paste_block (struct session_struct *session,
                         struct paste_buffer *paste, size_t size);
extern void process_handle_buffer(struct session_struct *session,
                                  struct paste_buffer *send_block,
                                  int size_of_send_block);

extern void handle_iac_will(struct session_struct *session);
extern void handle_iac_wont(struct session_struct *session);
extern void handle_iac_do(struct session_struct *session);
extern void handle_iac_dont(struct session_struct *session);
extern bool process_escape(struct session_struct *session);

#endif
