diff options
author | kx <kx@radix.pro> | 2023-03-24 03:51:10 +0300 |
---|---|---|
committer | kx <kx@radix.pro> | 2023-03-24 03:51:10 +0300 |
commit | 05d292b208dfe01324826b4c87bbc4da3389a0d5 (patch) | |
tree | b10a2269e9320785f3b61189e75f6778fa167986 /cgitcgi/ctx.h | |
parent | 40ab18a661ff6ada40e73969be293918d346a2f5 (diff) | |
download | cgit-ui-05d292b208dfe01324826b4c87bbc4da3389a0d5.tar.xz |
Version 0.1.7
Diffstat (limited to 'cgitcgi/ctx.h')
-rw-r--r-- | cgitcgi/ctx.h | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/cgitcgi/ctx.h b/cgitcgi/ctx.h new file mode 100644 index 0000000..999acb0 --- /dev/null +++ b/cgitcgi/ctx.h @@ -0,0 +1,216 @@ + +#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 */ |