diff options
author | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
---|---|---|
committer | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
commit | 094ca96844842928810f14844413109fc6cdd890 (patch) | |
tree | e60efbb980f38ba9308ccb4fb2b77b87bbc115f3 /pith/state.h | |
download | alpine-094ca96844842928810f14844413109fc6cdd890.tar.xz |
Initial Alpine Version
Diffstat (limited to 'pith/state.h')
-rw-r--r-- | pith/state.h | 374 |
1 files changed, 374 insertions, 0 deletions
diff --git a/pith/state.h b/pith/state.h new file mode 100644 index 00000000..93db4f4b --- /dev/null +++ b/pith/state.h @@ -0,0 +1,374 @@ +/* + * $Id: state.h 1074 2008-06-04 00:08:43Z hubert@u.washington.edu $ + * + * ======================================================================== + * Copyright 2006-2008 University of Washington + * Copyright 2013 Eduardo Chappa + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * ======================================================================== + */ + +#ifndef PITH_STATE_INCLUDED +#define PITH_STATE_INCLUDED + + +#include "../pith/conftype.h" +#include "../pith/indxtype.h" +#include "../pith/bitmap.h" +#include "../pith/charset.h" +#include "../pith/context.h" +#include "../pith/keyword.h" +#include "../pith/atttype.h" +#include "../pith/msgno.h" +#include "../pith/pattern.h" +#include "../pith/pipe.h" +#include "../pith/send.h" +#include "../pith/sorttype.h" +#include "../pith/stream.h" +#include "../pith/color.h" +#include "../pith/user.h" + + +/* + * Printing control structure + */ +typedef struct print_ctrl { +#ifndef DOS + PIPE_S *pipe; /* control struct for pipe to write text */ + FILE *fp; /* file pointer to write printed text into */ + char *result; /* file containing print command's output */ +#endif +#ifdef OS2 + int ispipe; +#endif + int err; /* bit indicating something went awry */ +} PRINT_S; + + +/* + * Keeps track of display dimensions + */ +struct ttyo { + int screen_rows, + screen_cols, + header_rows, /* number of rows for titlebar and whitespace */ + footer_rows; /* number of rows for status and keymenu */ +}; + +/* + * HEADER_ROWS is always 2. 1 for the titlebar and 1 for the + * blank line after the titlebar. We should probably make it go down + * to 0 when the screen shrinks but instead we're just figuring out + * if there is enough room by looking at screen_rows. + * FOOTER_ROWS is either 3 or 1. Normally it is 3, 2 for the keymenu plus 1 + * for the status line. If the NoKeyMenu command has been given, then it is 1. + */ +#define HEADER_ROWS(X) ((X)->ttyo->header_rows) +#define FOOTER_ROWS(X) ((X)->ttyo->footer_rows) + + +/*---------------------------------------------------------------------- + This structure sort of takes the place of global variables or perhaps +is the global variable. (It can be accessed globally as ps_global. One +advantage to this is that as soon as you see a reference to the structure +you know it is a global variable. + In general it is treated as global by the lower level and utility +routines, but it is not treated so by the main screen driving routines. +Each of them receives it as an argument and then sets ps_global to the +argument they received. This is sort of with the thought that things +might be coupled more loosely one day and that Pine might run where there +is more than one window and more than one instance. But we haven't kept +up with this convention very well. + ----*/ + +struct pine { + void (*next_screen)(struct pine *); /* See loop at end of main() for how */ + void (*prev_screen)(struct pine *); /* these are used... */ + void (*redrawer)(void); /* NULL means stay in current screen */ + + CONTEXT_S *context_list; /* list of user defined contexts */ + CONTEXT_S *context_current; /* default open context */ + CONTEXT_S *context_last; /* most recently open context */ + + SP_S s_pool; /* stream pool */ + + char inbox_name[MAXFOLDER+1]; + char pine_pre_vers[10]; /* highest version previously run */ + char vers_internal[10]; + + MAILSTREAM *mail_stream; /* ptr to current folder stream */ + MSGNO_S *msgmap; /* ptr to current message map */ + + unsigned read_predicted:1; + + char cur_folder[MAXPATH+1]; + QUOTALIST *quota; + char last_unambig_folder[MAXPATH+1]; + char last_save_folder[MAXPATH+1]; + CONTEXT_S *last_save_context; + ATTACH_S *atmts; + int atmts_allocated; + int remote_abook_validity; /* minutes, -1=never, 0=only on opens */ + + INDEX_COL_S *index_disp_format; + + char *folders_dir; + + unsigned mangled_footer:1; /* footer needs repainting */ + unsigned mangled_header:1; /* header needs repainting */ + unsigned mangled_body:1; /* body of screen needs repainting */ + unsigned mangled_screen:1; /* whole screen needs repainting */ + + unsigned in_init_seq:1; /* executing initial cmd list */ + unsigned save_in_init_seq:1; + unsigned dont_use_init_cmds:1; /* use keyboard input when true */ + + unsigned give_fixed_warning:1; /* warn user about "fixed" vars */ + unsigned fix_fixed_warning:1; /* offer to fix it */ + + unsigned user_says_cancel:1; /* user typed ^C to abort open */ + + unsigned unseen_in_view:1; + unsigned start_in_context:1; /* start fldr_scrn in current cntxt */ + unsigned def_sort_rev:1; /* true if reverse sort is default */ + unsigned restricted:1; + + unsigned save_msg_rule:5; + unsigned fcc_rule:3; + unsigned ab_sort_rule:3; + unsigned color_style:3; + unsigned index_color_style:3; + unsigned titlebar_color_style:3; + unsigned fld_sort_rule:3; + unsigned inc_startup_rule:3; + unsigned pruning_rule:3; + unsigned reopen_rule:4; + unsigned goto_default_rule:3; + unsigned thread_disp_style:3; + unsigned thread_index_style:3; + + unsigned full_header:2; /* display full headers */ + /* 0 means normal */ + /* 1 means display all quoted text */ + /* 2 means full headers */ + unsigned some_quoting_was_suppressed:1; + unsigned orig_use_fkeys:1; + unsigned try_to_create:1; /* Save should try mail_create */ + unsigned low_speed:1; /* various opt's 4 low connect speed */ + unsigned postpone_no_flow:1; /* don't set flowed when we postpone */ + /* and don't reflow when we resume. */ + unsigned mm_log_error:1; + unsigned show_new_version:1; + unsigned pre441:1; + unsigned first_time_user:1; + unsigned intr_pending:1; /* received SIGINT and haven't acted */ + unsigned expunge_in_progress:1; /* don't want to re-enter c-client */ + unsigned never_allow_changing_from:1; /* not even for roles */ + unsigned newthread:1; /* start a new thread on composing */ + + unsigned readonly_pinerc:1; + unsigned view_all_except:1; + unsigned start_in_index:1; /* cmd line flag modified on startup */ + unsigned noshow_error:1; /* c-client error callback controls */ + unsigned noshow_warn:1; + unsigned noshow_timeout:1; + unsigned conceal_sensitive_debugging:1; + unsigned turn_off_threading_temporarily:1; + unsigned view_skipped_index:1; + unsigned a_format_contains_score:1; + unsigned ugly_consider_advancing_bit:1; + unsigned dont_count_flagchanges:1; + unsigned in_folder_screen:1; + unsigned noticed_change_in_unseen:1; + unsigned first_open_was_attempted:1; + unsigned force_prefer_plain:1; + unsigned force_no_prefer_plain:1; + + unsigned phone_home:1; + unsigned painted_body_on_startup:1; + unsigned painted_footer_on_startup:1; + unsigned open_readonly_on_startup:1; + unsigned exit_if_no_pinerc:1; + unsigned pass_ctrl_chars:1; + unsigned pass_c1_ctrl_chars:1; + unsigned display_keywords_in_subject:1; + unsigned display_keywordinits_in_subject:1; + unsigned beginning_of_month:1; + unsigned beginning_of_year:1; + + unsigned viewer_overlap:8; + unsigned scroll_margin:8; + unsigned remote_abook_history:8; + +#if defined(DOS) || defined(OS2) + unsigned blank_user_id:1; + unsigned blank_personal_name:1; + unsigned blank_user_domain:1; +#ifdef _WINDOWS + unsigned update_registry:2; + unsigned install_flag:1; +#endif +#endif + + unsigned debug_malloc:6; + unsigned debug_timestamp:1; + unsigned debug_flush:1; + unsigned debug_tcp:1; + unsigned debug_imap:3; + unsigned debug_nfiles:5; + unsigned debugmem:1; +#ifdef LOCAL_PASSWD_CACHE + unsigned nowrite_password_cache:1; +#endif + + unsigned convert_sigs:1; + unsigned dump_supported_options:1; + + unsigned noexpunge_on_close:1; + + unsigned no_newmail_check_from_optionally_enter:1; + + unsigned post_utf8:1; + + unsigned start_entry; /* cmd line arg: msg # to start on */ + + bitmap_t feature_list; /* a bitmap of all the features */ + char **feat_list_back_compat; + + SPEC_COLOR_S *hdr_colors; /* list of configed colors for view */ + + short init_context; + + int *initial_cmds; /* cmds to execute on startup */ + int *free_initial_cmds; /* used to free when done */ + + char c_client_error[300]; /* when nowhow_error is set and PARSE */ + + struct ttyo *ttyo; + + USER_S ui; /* system derived user info */ + + POST_S *post; + + char *home_dir, + *hostname, /* Fully qualified hostname */ + *localdomain, /* The (DNS) domain this host resides in */ + *userdomain, /* The per user domain from .pinerc or */ + *maildomain, /* Domain name for most uses */ +#if defined(DOS) || defined(OS2) + *pine_dir, /* argv[0] as provided by DOS */ + *aux_files_dir, /* User's auxiliary files directory */ +#endif +#ifdef PASSFILE + *passfile, +#endif /* PASSFILE */ + *pinerc, /* Location of user's pinerc */ + *exceptions, /* Location of user's exceptions */ + *pine_name; /* name we were invoked under */ + PINERC_S *prc, /* structure for personal pinerc */ + *post_prc, /* structure for post-loaded pinerc */ + *pconf; /* structure for global pinerc */ + + EditWhich ew_for_except_vars; + EditWhich ew_for_role_take; + EditWhich ew_for_score_take; + EditWhich ew_for_filter_take; + EditWhich ew_for_incol_take; + EditWhich ew_for_other_take; + EditWhich ew_for_srch_take; + + SortOrder def_sort, /* Default sort type */ + sort_types[22]; + + int last_expire_year, last_expire_month; + + int printer_category; + + int status_msg_delay; + + int active_status_interval; + + int composer_fillcol; + + int nmw_width; + + int hours_to_timeout; + + int tcp_query_timeout; + + int inc_check_timeout; + int inc_check_interval; /* for local and IMAP */ + int inc_second_check_interval; /* for other */ + + time_t check_interval_for_noncurr; + + time_t last_nextitem_forcechk; + + MAILSTREAM *cur_uid_stream; + imapuid_t cur_uid; + + int deadlets; + + int quote_suppression_threshold; + + char *display_charmap; /* needs to be freed */ + char *keyboard_charmap; /* needs to be freed */ + void *input_cs; + + char *posting_charmap; /* needs to be freed */ + + CONV_TABLE *conv_table; + + /* + * Optional tools Pine Data Engine caller might provide + */ + struct { + char *(*display_filter)(char *, STORE_S *, gf_io_t, FILTLIST_S *); + char *(*display_filter_trigger)(BODY *, char *, size_t); + } tools; + + KEYWORD_S *keywords; + SPEC_COLOR_S *kw_colors; + + ACTION_S *default_role; /* pointer to one of regular roles */ + + char last_error[500]; + INIT_ERR_S *init_errs; + + PRINT_S *print; + +#ifdef SMIME + SMIME_STUFF_S *smime; +#endif /* SMIME */ + + struct variable *vars; +}; + + +/*---------------------------------------------------------------------- + The few global variables we use in Pine Data Engine + ----*/ + +extern struct pine *ps_global; + +#define SIZEOF_20KBUF (20480) +extern char tmp_20k_buf[]; + + +/* exported protoypes */ +struct pine *new_pine_struct(void); +void free_pine_struct(struct pine **); +void free_pinerc_strings(struct pine **); +void free_vars(struct pine *); +void free_variable_values(struct variable *); +PINERC_S *new_pinerc_s(char *); +void free_pinerc_s(PINERC_S **); + + +#endif /* PITH_STATE_INCLUDED */ |