cSvn-UI for SVN Repositories

cGit-UI – is a web interface for Subversion (SVN) Repositories. cSvn CGI script is writen in C and therefore it's fast enough

6 Commits   0 Branches   2 Tags

#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 csvn_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 KIND_DIR     0
#define KIND_FILE    1
#define KIND_UNKNOWN 2
#define CSVN_INFO_INIT  (struct csvn_info) { .kind = KIND_UNKNOWN, .revision = 0, .author = NULL, .date = 0, .mime = NULL, .lang = NULL }

struct csvn_info {
  int kind;
  int revision;
  const char *author;
  time_t date;
  const char *mime;
  const char *lang;
};

struct csvn_repository {
  const char       *name;
  struct csvn_info  info;
  const char       *repo_root;
  const char       *relative_path;
  struct csvn_info  relative_info;
  const char       *relative_html;
  const char       *relative_href;
  const char       *search_placeholder;
  const char       *trunk;    /* trunk    directory name */
  const char       *branches; /* branches directory name */
  const char       *tags;     /* tags     directory name */
  const char       *checkout_prefix;
  const char       *checkout_ro_prefix;
  int               nbranches; /* number of branches */
  int               ntags;     /* number of tags     */
};

struct csvn_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 csvn_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 csvn_query {
  int ofs;
  int rev;
  const char *revision;
  const char *operation;
  const char *search;
};

struct csvn_versions {
  const char *subversion;
  const char *nginx;
  const char *csvn;
};

struct csvn_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 csvn_context {
  struct csvn_environment  env;
  struct csvn_promotion    promo;
  struct csvn_query        query;
  struct csvn_page         page;
  struct csvn_tmplt_vars   vars;
  struct csvn_repository   repo;
  struct csvn_versions     vers;
};


extern const char *ptype_repolist;
extern const char *ptype_repo;

extern struct csvn_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}

  ${svn-version}
  ${nginx-version}
  ${csvn-version}
  ${copyright-notice}
  ${copyright}

  ${page-type}
  ${page-size}
  ${num-of-repos}
 */

extern void csvn_prepare_context( void );
extern void csvn_prepare_template_variables( void );
extern void csvn_release_template_variables( void );

extern void csvn_parse_query( void );

extern int ctx_grab_int_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 */