#ifndef __CONTEXT_H #define __CONTEXT_H #ifdef __cplusplus extern "C" { #endif #define CONTEXT_MEM_SIZE 524288 struct __context { void *_cur_brk; unsigned char _mem[CONTEXT_MEM_SIZE]; }; extern struct __context *pmctx; #define __cur_brk (*((void **)&(pmctx->_cur_brk))) #define __mem ((unsigned char *)&((pmctx->_mem)[0])) extern void __mctx_init( void ); extern void *__sbrk( int incr ); struct cgit_tmplt_vars { const char *css; const char *owner; const char *author; const char *description; const char *keywords; const char *title; const char *favicon_path; const char *syntax_highlight_css; const char *logo; const char *logo_alt; const char *logo_link; const char *home_page; const char *snapshots; const char *status_line; const char *main_menu_logo; const char *main_menu_item; const char *left_menu_items; const char *popup_menu_items; const char *right_menu_items; const char *copyright_notice; const char *copyright; const char *page_type; const char *page_size; const char *num_of_repos; }; #define CGIT_INFO_INIT (struct cgit_info) { .kind = GIT_OBJECT_INVALID, .revision = { 0 }, .oid = { 0 }, .mode = GIT_FILEMODE_TREE, .author = NULL, .date = -1, .offset = 0, .mime = NULL, .lang = NULL } struct cgit_info { git_object_t kind; char revision[GIT_OID_HEXSZ+1]; char oid[GIT_OID_HEXSZ+1]; git_filemode_t mode; const char *author; git_time_t date; int offset; const char *mime; const char *lang; }; struct cgit_repository { const char *name; struct cgit_info info; const char *git_root; const char *repo_root; const char *relative_path; struct cgit_info relative_info; const char *relative_html; const char *relative_href; const char *search_placeholder; const char *trunk; /* trunk directory name */ const char *clone_prefix; const char *clone_ro_prefix; int nbranches; /* number of branches */ int ncommits; /* number of commits (no more than 9999) */ int ntags; /* number of tags */ }; struct cgit_page { time_t modified; time_t expires; size_t size; const char *mimetype; const char *charset; int status; const char *status_message; const char *header; const char *footer; }; struct cgit_environment { const char *http_host; const char *https; const char *no_http; const char *path_info; const char *query_string; const char *request_uri; const char *request_scheme; const char *request_method; const char *script_name; const char *server_name; const char *server_port; const char *http_cookie; unsigned int content_lenght; const char *http_root; int authenticated; }; struct cgit_query { int ofs; const char *rev; const char *revision; const char *operation; const char *search; }; struct cgit_versions { const char *git; const char *nginx; const char *cgit; }; struct cgit_promotion { const char *analytic_links; const char *analytic_scripts; int donate; const char *donate_css; const char *donate_html; const char *donate_js; const char *donate_header; const char *donate_purpose; }; struct cgit_context { struct cgit_environment env; struct cgit_promotion promo; struct cgit_query query; struct cgit_page page; struct cgit_tmplt_vars vars; struct cgit_repository repo; struct cgit_versions vers; }; extern const char *ptype_repolist; extern const char *ptype_repo; extern struct cgit_context ctx; /* header/footer template variables: ================================ ${css} ${owner} ${author} ${description} ${keywords} ${title} ${favicon-path} ${syntax-highlight-css} ${logo} ${logo-alt} ${logo-link} ${home-page} ${snapshots} ${status-line} ${main-menu-logo} ${main-menu-item} ${left-menu-items} ${popup-menu-items} ${right-menu-items} ${relative-html} ${search-placeholder} ${analytic-links} ${analytic-scripts} ${donate-css} ${donate-html} ${donate-js} ${donate-header} ${donate-purpose} ${git-version} ${nginx-version} ${cgit-version} ${copyright-notice} ${copyright} ${page-type} ${page-size} ${num-of-repos} */ extern void cgit_prepare_context( void ); extern void cgit_prepare_template_variables( void ); extern void cgit_release_template_variables( void ); extern void cgit_parse_query( void ); extern int ctx_grab_int_query_param( const char *name ); extern const char *ctx_grab_str_query_param( const char *name ); extern const char *ctx_remove_query_param( const char *query_string, const char *name ); #ifdef __cplusplus } #endif #endif /* __CONTEXT_H */