#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 */