annotate include/urweb/urweb.h @ 1739:c414850f206f

Add support for -boot flag, which allows in-tree execution of Ur/Web The boot flag rewrites most hardcoded paths to point to the build directory, and also forces static compilation. This is convenient for developing Ur/Web, or if you cannot 'sudo make install' Ur/Web. The following changes were made: * Header files were moved to include/urweb instead of include; this lets FFI users point their C_INCLUDE_PATH at this directory at write <urweb/urweb.h>. For internal Ur/Web executables, we simply pass -I$PATH/include/urweb as normal. * Differentiate between LIB and SRCLIB; SRCLIB is Ur and JavaScript source files, while LIB is compiled products from libtool. For in-tree compilation these live in different places. * No longer reference Config for paths; instead use Settings; these settings can be changed dynamically by Compiler.enableBoot () (TODO: add a disableBoot function.) * config.h is now generated directly in include/urweb/config.h, for consistency's sake (especially since it gets installed along with the rest of the headers!) * All of the autotools build products got updated. * The linkStatic field in protocols now only contains the name of the build product, and not the absolute path. Future users have to be careful not to reference the Settings files to early, lest they get an old version (this was the source of two bugs during development of this patch.)
author Edward Z. Yang <ezyang@mit.edu>
date Wed, 02 May 2012 17:17:57 -0400
parents
children e9587120831a
rev   line source
ezyang@1739 1 #ifndef URWEB_H
ezyang@1739 2 #define URWEB_H
ezyang@1739 3
ezyang@1739 4 #include <sys/types.h>
ezyang@1739 5
ezyang@1739 6 #include "types.h"
ezyang@1739 7
ezyang@1739 8 int uw_really_send(int sock, const void *buf, ssize_t len);
ezyang@1739 9 int uw_really_write(int fd, const void *buf, size_t len);
ezyang@1739 10
ezyang@1739 11 extern uw_unit uw_unit_v;
ezyang@1739 12
ezyang@1739 13 void uw_global_init(void);
ezyang@1739 14 void uw_app_init(uw_app*);
ezyang@1739 15
ezyang@1739 16 void uw_client_connect(unsigned id, int pass, int sock,
ezyang@1739 17 int (*send)(int sockfd, const void *buf, size_t len),
ezyang@1739 18 int (*close)(int fd),
ezyang@1739 19 void *logger_data, uw_logger log_error);
ezyang@1739 20 void uw_prune_clients(uw_context);
ezyang@1739 21 failure_kind uw_initialize(uw_context);
ezyang@1739 22
ezyang@1739 23 uw_context uw_init(int id, void *logger_data, uw_logger log_debug);
ezyang@1739 24 void uw_close(uw_context);
ezyang@1739 25 int uw_set_app(uw_context, uw_app*);
ezyang@1739 26 uw_app *uw_get_app(uw_context);
ezyang@1739 27 void uw_set_db(uw_context, void*);
ezyang@1739 28 void *uw_get_db(uw_context);
ezyang@1739 29 void uw_free(uw_context);
ezyang@1739 30 void uw_reset(uw_context);
ezyang@1739 31 void uw_reset_keep_request(uw_context);
ezyang@1739 32 void uw_reset_keep_error_message(uw_context);
ezyang@1739 33 char *uw_get_url_prefix(uw_context);
ezyang@1739 34
ezyang@1739 35 failure_kind uw_begin_init(uw_context);
ezyang@1739 36 void uw_set_on_success(char *);
ezyang@1739 37 void uw_set_headers(uw_context, char *(*get_header)(void *, const char *), void *get_header_data);
ezyang@1739 38 failure_kind uw_begin(uw_context, char *path);
ezyang@1739 39 failure_kind uw_begin_onError(uw_context, char *msg);
ezyang@1739 40 void uw_login(uw_context);
ezyang@1739 41 void uw_commit(uw_context);
ezyang@1739 42 int uw_rollback(uw_context, int will_retry);
ezyang@1739 43
ezyang@1739 44 __attribute__((noreturn)) void uw_error(uw_context, failure_kind, const char *fmt, ...);
ezyang@1739 45 char *uw_error_message(uw_context);
ezyang@1739 46 void uw_set_error_message(uw_context, const char *fmt, ...);
ezyang@1739 47 uw_Basis_string uw_dup_and_clear_error_message(uw_context);
ezyang@1739 48 int uw_has_error(uw_context);
ezyang@1739 49 void uw_push_cleanup(uw_context, void (*func)(void *), void *arg);
ezyang@1739 50 void uw_pop_cleanup(uw_context);
ezyang@1739 51
ezyang@1739 52 void *uw_malloc(uw_context, size_t);
ezyang@1739 53 void uw_begin_region(uw_context);
ezyang@1739 54 void uw_end_region(uw_context);
ezyang@1739 55 void uw_memstats(uw_context);
ezyang@1739 56
ezyang@1739 57 int uw_send(uw_context, int sock);
ezyang@1739 58 int uw_print(uw_context, int fd);
ezyang@1739 59 int uw_output(uw_context ctx, int (*output)(void *data, const char *buf, size_t len), void *data);
ezyang@1739 60
ezyang@1739 61 int uw_set_input(uw_context, const char *name, char *value);
ezyang@1739 62 int uw_set_file_input(uw_context, char *name, uw_Basis_file);
ezyang@1739 63
ezyang@1739 64 char *uw_get_input(uw_context, int name);
ezyang@1739 65 char *uw_get_optional_input(uw_context, int name);
ezyang@1739 66 uw_Basis_file uw_get_file_input(uw_context, int name);
ezyang@1739 67 void uw_enter_subform(uw_context, int name);
ezyang@1739 68 void uw_leave_subform(uw_context);
ezyang@1739 69 int uw_enter_subforms(uw_context, int name);
ezyang@1739 70 int uw_next_entry(uw_context);
ezyang@1739 71
ezyang@1739 72 void uw_write(uw_context, const char*);
ezyang@1739 73
ezyang@1739 74 uw_Basis_source uw_Basis_new_client_source(uw_context, uw_Basis_string);
ezyang@1739 75 uw_unit uw_Basis_set_client_source(uw_context, uw_Basis_source, uw_Basis_string);
ezyang@1739 76
ezyang@1739 77 void uw_set_script_header(uw_context, const char*);
ezyang@1739 78 char *uw_Basis_get_settings(uw_context, uw_unit);
ezyang@1739 79 char *uw_get_real_script(uw_context);
ezyang@1739 80
ezyang@1739 81 uw_Basis_string uw_Basis_maybe_onload(uw_context, uw_Basis_string);
ezyang@1739 82 uw_Basis_string uw_Basis_maybe_onunload(uw_context, uw_Basis_string);
ezyang@1739 83
ezyang@1739 84 void uw_set_needs_push(uw_context, int);
ezyang@1739 85 void uw_set_needs_sig(uw_context, int);
ezyang@1739 86
ezyang@1739 87 char *uw_Basis_htmlifyInt(uw_context, uw_Basis_int);
ezyang@1739 88 char *uw_Basis_htmlifyFloat(uw_context, uw_Basis_float);
ezyang@1739 89 char *uw_Basis_htmlifyString(uw_context, uw_Basis_string);
ezyang@1739 90 char *uw_Basis_htmlifyBool(uw_context, uw_Basis_bool);
ezyang@1739 91 char *uw_Basis_htmlifyTime(uw_context, uw_Basis_time);
ezyang@1739 92 char *uw_Basis_htmlifySpecialChar(uw_context, unsigned char);
ezyang@1739 93 char *uw_Basis_htmlifySource(uw_context, uw_Basis_source);
ezyang@1739 94
ezyang@1739 95 uw_unit uw_Basis_htmlifyInt_w(uw_context, uw_Basis_int);
ezyang@1739 96 uw_unit uw_Basis_htmlifyFloat_w(uw_context, uw_Basis_float);
ezyang@1739 97 uw_unit uw_Basis_htmlifyString_w(uw_context, uw_Basis_string);
ezyang@1739 98 uw_unit uw_Basis_htmlifyBool_w(uw_context, uw_Basis_bool);
ezyang@1739 99 uw_unit uw_Basis_htmlifyTime_w(uw_context, uw_Basis_time);
ezyang@1739 100 uw_unit uw_Basis_htmlifySpecialChar_w(uw_context, unsigned char);
ezyang@1739 101 uw_unit uw_Basis_htmlifySource_w(uw_context, uw_Basis_source);
ezyang@1739 102
ezyang@1739 103 char *uw_Basis_attrifyInt(uw_context, uw_Basis_int);
ezyang@1739 104 char *uw_Basis_attrifyFloat(uw_context, uw_Basis_float);
ezyang@1739 105 char *uw_Basis_attrifyString(uw_context, uw_Basis_string);
ezyang@1739 106 char *uw_Basis_attrifyChar(uw_context, uw_Basis_char);
ezyang@1739 107 char *uw_Basis_attrifyTime(uw_context, uw_Basis_time);
ezyang@1739 108 char *uw_Basis_attrifyChannel(uw_context, uw_Basis_channel);
ezyang@1739 109 char *uw_Basis_attrifyClient(uw_context, uw_Basis_client);
ezyang@1739 110 char *uw_Basis_attrifyCss_class(uw_context, uw_Basis_css_class);
ezyang@1739 111
ezyang@1739 112 uw_unit uw_Basis_attrifyInt_w(uw_context, uw_Basis_int);
ezyang@1739 113 uw_unit uw_Basis_attrifyFloat_w(uw_context, uw_Basis_float);
ezyang@1739 114 uw_unit uw_Basis_attrifyString_w(uw_context, uw_Basis_string);
ezyang@1739 115 uw_unit uw_Basis_attrifyChar_w(uw_context, uw_Basis_char);
ezyang@1739 116
ezyang@1739 117 char *uw_Basis_urlifyInt(uw_context, uw_Basis_int);
ezyang@1739 118 char *uw_Basis_urlifyFloat(uw_context, uw_Basis_float);
ezyang@1739 119 char *uw_Basis_urlifyString(uw_context, uw_Basis_string);
ezyang@1739 120 char *uw_Basis_urlifyBool(uw_context, uw_Basis_bool);
ezyang@1739 121 char *uw_Basis_urlifyTime(uw_context, uw_Basis_time);
ezyang@1739 122 char *uw_Basis_urlifyChannel(uw_context, uw_Basis_channel);
ezyang@1739 123 char *uw_Basis_urlifySource(uw_context, uw_Basis_source);
ezyang@1739 124
ezyang@1739 125 uw_unit uw_Basis_urlifyInt_w(uw_context, uw_Basis_int);
ezyang@1739 126 uw_unit uw_Basis_urlifyFloat_w(uw_context, uw_Basis_float);
ezyang@1739 127 uw_unit uw_Basis_urlifyString_w(uw_context, uw_Basis_string);
ezyang@1739 128 uw_unit uw_Basis_urlifyBool_w(uw_context, uw_Basis_bool);
ezyang@1739 129 uw_unit uw_Basis_urlifyTime_w(uw_context, uw_Basis_time);
ezyang@1739 130 uw_unit uw_Basis_urlifyChannel_w(uw_context, uw_Basis_channel);
ezyang@1739 131 uw_unit uw_Basis_urlifySource_w(uw_context, uw_Basis_source);
ezyang@1739 132
ezyang@1739 133 uw_Basis_unit uw_Basis_unurlifyUnit(uw_context ctx, char **s);
ezyang@1739 134 uw_Basis_int uw_Basis_unurlifyInt(uw_context, char **);
ezyang@1739 135 uw_Basis_float uw_Basis_unurlifyFloat(uw_context, char **);
ezyang@1739 136 uw_Basis_string uw_Basis_unurlifyString(uw_context, char **);
ezyang@1739 137 uw_Basis_string uw_Basis_unurlifyString_fromClient(uw_context, char **);
ezyang@1739 138 uw_Basis_bool uw_Basis_unurlifyBool(uw_context, char **);
ezyang@1739 139 uw_Basis_time uw_Basis_unurlifyTime(uw_context, char **);
ezyang@1739 140
ezyang@1739 141 uw_Basis_int uw_Basis_strlen(uw_context, const char *);
ezyang@1739 142 uw_Basis_bool uw_Basis_strlenGe(uw_context, uw_Basis_string, uw_Basis_int);
ezyang@1739 143 uw_Basis_char uw_Basis_strsub(uw_context, const char *, uw_Basis_int);
ezyang@1739 144 uw_Basis_string uw_Basis_strsuffix(uw_context, const char *, uw_Basis_int);
ezyang@1739 145 uw_Basis_string uw_Basis_strcat(uw_context, const char *, const char *);
ezyang@1739 146 uw_Basis_string uw_Basis_mstrcat(uw_context ctx, ...);
ezyang@1739 147 uw_Basis_int *uw_Basis_strindex(uw_context, const char *, uw_Basis_char);
ezyang@1739 148 uw_Basis_int *uw_Basis_strsindex(uw_context, const char *, const char *needle);
ezyang@1739 149 uw_Basis_string uw_Basis_strchr(uw_context, const char *, uw_Basis_char);
ezyang@1739 150 uw_Basis_int uw_Basis_strcspn(uw_context, const char *, const char *);
ezyang@1739 151 uw_Basis_string uw_Basis_substring(uw_context, const char *, uw_Basis_int, uw_Basis_int);
ezyang@1739 152 uw_Basis_string uw_Basis_str1(uw_context, uw_Basis_char);
ezyang@1739 153
ezyang@1739 154 uw_Basis_string uw_strdup(uw_context, const char *);
ezyang@1739 155 uw_Basis_string uw_maybe_strdup(uw_context, const char *);
ezyang@1739 156 char *uw_memdup(uw_context, const char *, size_t);
ezyang@1739 157
ezyang@1739 158 uw_Basis_string uw_Basis_sqlifyInt(uw_context, uw_Basis_int);
ezyang@1739 159 uw_Basis_string uw_Basis_sqlifyFloat(uw_context, uw_Basis_float);
ezyang@1739 160 uw_Basis_string uw_Basis_sqlifyString(uw_context, uw_Basis_string);
ezyang@1739 161 uw_Basis_string uw_Basis_sqlifyChar(uw_context, uw_Basis_char);
ezyang@1739 162 uw_Basis_string uw_Basis_sqlifyBool(uw_context, uw_Basis_bool);
ezyang@1739 163 uw_Basis_string uw_Basis_sqlifyTime(uw_context, uw_Basis_time);
ezyang@1739 164 uw_Basis_string uw_Basis_sqlifyBlob(uw_context, uw_Basis_blob);
ezyang@1739 165 uw_Basis_string uw_Basis_sqlifyChannel(uw_context, uw_Basis_channel);
ezyang@1739 166 uw_Basis_string uw_Basis_sqlifyClient(uw_context, uw_Basis_client);
ezyang@1739 167
ezyang@1739 168 uw_Basis_string uw_Basis_sqlifyIntN(uw_context, uw_Basis_int*);
ezyang@1739 169 uw_Basis_string uw_Basis_sqlifyFloatN(uw_context, uw_Basis_float*);
ezyang@1739 170 uw_Basis_string uw_Basis_sqlifyStringN(uw_context, uw_Basis_string);
ezyang@1739 171 uw_Basis_string uw_Basis_sqlifyBoolN(uw_context, uw_Basis_bool*);
ezyang@1739 172 uw_Basis_string uw_Basis_sqlifyTimeN(uw_context, uw_Basis_time*);
ezyang@1739 173
ezyang@1739 174 char *uw_Basis_ensqlBool(uw_Basis_bool);
ezyang@1739 175 char *uw_Basis_ensqlTime(uw_context ctx, uw_Basis_time);
ezyang@1739 176
ezyang@1739 177 char *uw_Basis_jsifyString(uw_context, uw_Basis_string);
ezyang@1739 178 char *uw_Basis_jsifyChar(uw_context, uw_Basis_char);
ezyang@1739 179 char *uw_Basis_jsifyChannel(uw_context, uw_Basis_channel);
ezyang@1739 180 char *uw_Basis_jsifyTime(uw_context, uw_Basis_time);
ezyang@1739 181
ezyang@1739 182 uw_Basis_string uw_Basis_intToString(uw_context, uw_Basis_int);
ezyang@1739 183 uw_Basis_string uw_Basis_floatToString(uw_context, uw_Basis_float);
ezyang@1739 184 uw_Basis_string uw_Basis_charToString(uw_context, uw_Basis_char);
ezyang@1739 185 uw_Basis_string uw_Basis_boolToString(uw_context, uw_Basis_bool);
ezyang@1739 186 uw_Basis_string uw_Basis_timeToString(uw_context, uw_Basis_time);
ezyang@1739 187
ezyang@1739 188 uw_Basis_int *uw_Basis_stringToInt(uw_context, uw_Basis_string);
ezyang@1739 189 uw_Basis_float *uw_Basis_stringToFloat(uw_context, uw_Basis_string);
ezyang@1739 190 uw_Basis_char *uw_Basis_stringToChar(uw_context, uw_Basis_string);
ezyang@1739 191 uw_Basis_bool *uw_Basis_stringToBool(uw_context, uw_Basis_string);
ezyang@1739 192 uw_Basis_time *uw_Basis_stringToTime(uw_context, const char *);
ezyang@1739 193
ezyang@1739 194 uw_Basis_int uw_Basis_stringToInt_error(uw_context, uw_Basis_string);
ezyang@1739 195 uw_Basis_float uw_Basis_stringToFloat_error(uw_context, uw_Basis_string);
ezyang@1739 196 uw_Basis_char uw_Basis_stringToChar_error(uw_context, uw_Basis_string);
ezyang@1739 197 uw_Basis_bool uw_Basis_stringToBool_error(uw_context, uw_Basis_string);
ezyang@1739 198 uw_Basis_time uw_Basis_stringToTime_error(uw_context, const char *);
ezyang@1739 199 uw_Basis_blob uw_Basis_stringToBlob_error(uw_context, uw_Basis_string, size_t);
ezyang@1739 200 uw_Basis_channel uw_Basis_stringToChannel_error(uw_context, uw_Basis_string);
ezyang@1739 201 uw_Basis_client uw_Basis_stringToClient_error(uw_context, uw_Basis_string);
ezyang@1739 202
ezyang@1739 203 uw_Basis_time uw_Basis_unsqlTime(uw_context, uw_Basis_string);
ezyang@1739 204
ezyang@1739 205 uw_Basis_string uw_Basis_requestHeader(uw_context, uw_Basis_string);
ezyang@1739 206
ezyang@1739 207 void uw_write_header(uw_context, uw_Basis_string);
ezyang@1739 208 void uw_clear_headers(uw_context);
ezyang@1739 209
ezyang@1739 210 uw_Basis_string uw_Basis_get_cookie(uw_context, uw_Basis_string c);
ezyang@1739 211 uw_unit uw_Basis_set_cookie(uw_context, uw_Basis_string prefix, uw_Basis_string c, uw_Basis_string v, uw_Basis_time *expires, uw_Basis_bool secure);
ezyang@1739 212 uw_unit uw_Basis_clear_cookie(uw_context, uw_Basis_string prefix, uw_Basis_string c);
ezyang@1739 213
ezyang@1739 214 uw_Basis_channel uw_Basis_new_channel(uw_context, uw_unit);
ezyang@1739 215 uw_unit uw_Basis_send(uw_context, uw_Basis_channel, uw_Basis_string);
ezyang@1739 216
ezyang@1739 217 uw_Basis_client uw_Basis_self(uw_context);
ezyang@1739 218
ezyang@1739 219 uw_Basis_string uw_Basis_bless(uw_context, uw_Basis_string);
ezyang@1739 220 uw_Basis_string uw_Basis_blessMime(uw_context, uw_Basis_string);
ezyang@1739 221 uw_Basis_string uw_Basis_blessRequestHeader(uw_context, uw_Basis_string);
ezyang@1739 222 uw_Basis_string uw_Basis_blessResponseHeader(uw_context, uw_Basis_string);
ezyang@1739 223
ezyang@1739 224 uw_Basis_string uw_Basis_checkUrl(uw_context, uw_Basis_string);
ezyang@1739 225 uw_Basis_string uw_Basis_checkMime(uw_context, uw_Basis_string);
ezyang@1739 226 uw_Basis_string uw_Basis_checkRequestHeader(uw_context, uw_Basis_string);
ezyang@1739 227 uw_Basis_string uw_Basis_checkResponseHeader(uw_context, uw_Basis_string);
ezyang@1739 228
ezyang@1739 229 uw_Basis_string uw_Basis_getHeader(uw_context, uw_Basis_string name);
ezyang@1739 230 uw_unit uw_Basis_setHeader(uw_context, uw_Basis_string name, uw_Basis_string value);
ezyang@1739 231
ezyang@1739 232 uw_Basis_string uw_unnull(uw_Basis_string);
ezyang@1739 233 uw_Basis_string uw_Basis_makeSigString(uw_context, uw_Basis_string);
ezyang@1739 234 int uw_streq(uw_Basis_string, uw_Basis_string);
ezyang@1739 235 uw_Basis_string uw_Basis_sigString(uw_context, uw_unit);
ezyang@1739 236
ezyang@1739 237 uw_Basis_string uw_Basis_fileName(uw_context, uw_Basis_file);
ezyang@1739 238 uw_Basis_string uw_Basis_fileMimeType(uw_context, uw_Basis_file);
ezyang@1739 239 uw_Basis_blob uw_Basis_fileData(uw_context, uw_Basis_file);
ezyang@1739 240 uw_Basis_int uw_Basis_blobSize(uw_context, uw_Basis_blob);
ezyang@1739 241 uw_Basis_blob uw_Basis_textBlob(uw_context, uw_Basis_string);
ezyang@1739 242
ezyang@1739 243 uw_Basis_string uw_Basis_postType(uw_context, uw_Basis_postBody);
ezyang@1739 244 uw_Basis_string uw_Basis_postData(uw_context, uw_Basis_postBody);
ezyang@1739 245 void uw_noPostBody(uw_context);
ezyang@1739 246 void uw_postBody(uw_context, uw_Basis_postBody);
ezyang@1739 247 int uw_hasPostBody(uw_context);
ezyang@1739 248 uw_Basis_postBody uw_getPostBody(uw_context);
ezyang@1739 249
ezyang@1739 250 void uw_mayReturnIndirectly(uw_context);
ezyang@1739 251 __attribute__((noreturn)) void uw_return_blob(uw_context, uw_Basis_blob, uw_Basis_string mimeType);
ezyang@1739 252 __attribute__((noreturn)) void uw_redirect(uw_context, uw_Basis_string url);
ezyang@1739 253
ezyang@1739 254 uw_Basis_time uw_Basis_now(uw_context);
ezyang@1739 255 uw_Basis_time uw_Basis_addSeconds(uw_context, uw_Basis_time, uw_Basis_int);
ezyang@1739 256 uw_Basis_int uw_Basis_diffInSeconds(uw_context, uw_Basis_time, uw_Basis_time);
ezyang@1739 257 uw_Basis_int uw_Basis_toSeconds(uw_context, uw_Basis_time);
ezyang@1739 258 uw_Basis_int uw_Basis_diffInMilliseconds(uw_context, uw_Basis_time, uw_Basis_time);
ezyang@1739 259 uw_Basis_int uw_Basis_toMilliseconds(uw_context, uw_Basis_time);
ezyang@1739 260 extern const uw_Basis_time uw_Basis_minTime;
ezyang@1739 261
ezyang@1739 262 void uw_register_transactional(uw_context, void *data, uw_callback commit, uw_callback rollback, uw_callback_with_retry free);
ezyang@1739 263
ezyang@1739 264 void uw_check_heap(uw_context, size_t extra);
ezyang@1739 265 char *uw_heap_front(uw_context);
ezyang@1739 266 void uw_set_heap_front(uw_context, char*);
ezyang@1739 267
ezyang@1739 268 uw_Basis_string uw_Basis_unAs(uw_context, uw_Basis_string);
ezyang@1739 269
ezyang@1739 270 extern char *uw_sqlfmtInt;
ezyang@1739 271 extern char *uw_sqlfmtFloat;
ezyang@1739 272 extern int uw_Estrings;
ezyang@1739 273 extern char *uw_sqlsuffixString;
ezyang@1739 274 extern char *uw_sqlsuffixChar;
ezyang@1739 275 extern char *uw_sqlsuffixBlob;
ezyang@1739 276 extern char *uw_sqlfmtUint4;
ezyang@1739 277
ezyang@1739 278 void *uw_get_global(uw_context, char *name);
ezyang@1739 279 void uw_set_global(uw_context, char *name, void *data, uw_callback free);
ezyang@1739 280
ezyang@1739 281 uw_Basis_bool uw_Basis_isalnum(uw_context, uw_Basis_char);
ezyang@1739 282 uw_Basis_bool uw_Basis_isalpha(uw_context, uw_Basis_char);
ezyang@1739 283 uw_Basis_bool uw_Basis_isblank(uw_context, uw_Basis_char);
ezyang@1739 284 uw_Basis_bool uw_Basis_iscntrl(uw_context, uw_Basis_char);
ezyang@1739 285 uw_Basis_bool uw_Basis_isdigit(uw_context, uw_Basis_char);
ezyang@1739 286 uw_Basis_bool uw_Basis_isgraph(uw_context, uw_Basis_char);
ezyang@1739 287 uw_Basis_bool uw_Basis_islower(uw_context, uw_Basis_char);
ezyang@1739 288 uw_Basis_bool uw_Basis_isprint(uw_context, uw_Basis_char);
ezyang@1739 289 uw_Basis_bool uw_Basis_ispunct(uw_context, uw_Basis_char);
ezyang@1739 290 uw_Basis_bool uw_Basis_isspace(uw_context, uw_Basis_char);
ezyang@1739 291 uw_Basis_bool uw_Basis_isupper(uw_context, uw_Basis_char);
ezyang@1739 292 uw_Basis_bool uw_Basis_isxdigit(uw_context, uw_Basis_char);
ezyang@1739 293 uw_Basis_char uw_Basis_tolower(uw_context, uw_Basis_char);
ezyang@1739 294 uw_Basis_char uw_Basis_toupper(uw_context, uw_Basis_char);
ezyang@1739 295
ezyang@1739 296 uw_Basis_int uw_Basis_ord(uw_context, uw_Basis_char);
ezyang@1739 297 uw_Basis_char uw_Basis_chr(uw_context, uw_Basis_int);
ezyang@1739 298
ezyang@1739 299 uw_Basis_string uw_Basis_currentUrl(uw_context);
ezyang@1739 300 void uw_set_currentUrl(uw_context, char *);
ezyang@1739 301
ezyang@1739 302 extern size_t uw_messages_max, uw_clients_max, uw_headers_max, uw_page_max, uw_heap_max, uw_script_max;
ezyang@1739 303 extern size_t uw_inputs_max, uw_cleanup_max, uw_subinputs_max, uw_deltas_max, uw_transactionals_max, uw_globals_max;
ezyang@1739 304
ezyang@1739 305 extern size_t uw_database_max;
ezyang@1739 306
ezyang@1739 307 extern int uw_time;
ezyang@1739 308
ezyang@1739 309 void uw_set_deadline(uw_context, int);
ezyang@1739 310 void uw_check_deadline(uw_context);
ezyang@1739 311
ezyang@1739 312 uw_Basis_unit uw_Basis_debug(uw_context, uw_Basis_string);
ezyang@1739 313 uw_Basis_int uw_Basis_naughtyDebug(uw_context, uw_Basis_string);
ezyang@1739 314
ezyang@1739 315 void uw_set_client_data(uw_context, void *);
ezyang@1739 316
ezyang@1739 317 uw_Basis_int uw_Basis_rand(uw_context);
ezyang@1739 318
ezyang@1739 319 extern int uw_time_max, uw_supports_direct_status, uw_min_heap;
ezyang@1739 320
ezyang@1739 321 failure_kind uw_runCallback(uw_context, void (*callback)(uw_context));
ezyang@1739 322
ezyang@1739 323 uw_Basis_string uw_Basis_timef(uw_context, const char *fmt, uw_Basis_time);
ezyang@1739 324 uw_Basis_time uw_Basis_stringToTimef(uw_context, const char *fmt, uw_Basis_string);
ezyang@1739 325 uw_Basis_time uw_Basis_stringToTimef_error(uw_context, const char *fmt, uw_Basis_string);
ezyang@1739 326
ezyang@1739 327 uw_Basis_string uw_Basis_crypt(uw_context, uw_Basis_string key, uw_Basis_string salt);
ezyang@1739 328
ezyang@1739 329 uw_Basis_bool uw_Basis_eq_time(uw_context, uw_Basis_time, uw_Basis_time);
ezyang@1739 330 uw_Basis_bool uw_Basis_lt_time(uw_context, uw_Basis_time, uw_Basis_time);
ezyang@1739 331 uw_Basis_bool uw_Basis_le_time(uw_context, uw_Basis_time, uw_Basis_time);
ezyang@1739 332
ezyang@1739 333 void uw_buffer_init(size_t max, uw_buffer *, size_t initial);
ezyang@1739 334 void uw_buffer_free(uw_buffer *);
ezyang@1739 335 void uw_buffer_reset(uw_buffer *);
ezyang@1739 336 int uw_buffer_check(uw_buffer *, size_t extra);
ezyang@1739 337 size_t uw_buffer_used(uw_buffer *);
ezyang@1739 338 size_t uw_buffer_avail(uw_buffer *);
ezyang@1739 339 int uw_buffer_append(uw_buffer *, const char *, size_t);
ezyang@1739 340
ezyang@1739 341 void uw_setQueryString(uw_context, uw_Basis_string);
ezyang@1739 342 uw_Basis_string uw_queryString(uw_context);
ezyang@1739 343
ezyang@1739 344 uw_Basis_time *uw_Basis_readUtc(uw_context, uw_Basis_string);
ezyang@1739 345
ezyang@1739 346 void uw_isPost(uw_context);
ezyang@1739 347 uw_Basis_bool uw_Basis_currentUrlHasPost(uw_context);
ezyang@1739 348 uw_Basis_bool uw_Basis_currentUrlHasQueryString(uw_context);
ezyang@1739 349
ezyang@1739 350 void uw_cutErrorLocation(char *);
ezyang@1739 351
ezyang@1739 352 uw_Basis_string uw_Basis_fresh(uw_context);
ezyang@1739 353
ezyang@1739 354 uw_Basis_float uw_Basis_floatFromInt(uw_context, uw_Basis_int);
ezyang@1739 355 uw_Basis_int uw_Basis_ceil(uw_context, uw_Basis_float);
ezyang@1739 356 uw_Basis_int uw_Basis_trunc(uw_context, uw_Basis_float);
ezyang@1739 357 uw_Basis_int uw_Basis_round(uw_context, uw_Basis_float);
ezyang@1739 358
ezyang@1739 359 #endif