Main Page   Compound List   File List   Compound Members   File Members   Related Pages  

misc.h

Go to the documentation of this file.
00001 
00006 #ifndef GALE_MISC_H
00007 #define GALE_MISC_H
00008 
00009 #include <stdio.h>
00010 #include <string.h>
00011 #include <stddef.h>
00012 
00013 #include "gale/types.h"
00014 #include "gale/core.h"
00015 #include "oop.h"
00016 
00019 
00021 enum gale_print_flags {
00023         gale_print_bold = 1,
00025         gale_print_clobber_left = 2,
00027         gale_print_clobber_right = 4
00028 };
00029 
00034 void gale_print(FILE *fp,int attr,struct gale_text str);
00035 
00038 void gale_print_line(FILE *fp,int attr,struct gale_text);
00039 
00041 int gale_column(int start,wch);
00042 
00046 int gale_text_width(struct gale_text str);
00047 
00050 void gale_beep(FILE *fp);
00051 
00055 int gale_columns(FILE *fp);
00056 
00057 struct gale_text gale_read_line(FILE *fp);
00062 
00063 void gale_exec(oop_source *,struct gale_text prog,
00064         int count,const struct gale_text *,
00065         int *in,int *out,
00066         int (*)(int count,const struct gale_text *,void *user),
00067         void *(*)(int status,void *user),
00068         void *user);
00069 
00073 void gale_restart(void);
00074 
00081 void gale_kill(struct gale_text class,int do_kill);
00082 
00087 void gale_cleanup(void (*cleanup)(void *),void *);
00088 
00092 void gale_do_cleanup();
00093 
00099 void gale_watch_tty(oop_source *oop,int fd);
00100 
00101 void gale_daemon(oop_source *);
00102 void gale_detach(oop_source *);
00107 
00109 extern const struct gale_data null_data;
00110 
00113 void *gale_malloc(size_t size);
00115 void *gale_malloc_atomic(size_t size);
00117 void *gale_malloc_safe(size_t size);
00123 void *gale_realloc(void *mem,size_t len);
00127 void gale_free(void *);
00128 
00133 void gale_finalizer(void *ptr,void (*fun)(void *ptr,void *user),void *user);
00134 
00137 void gale_check_mem(void);
00138 
00142 #define gale_create(x) ((x) = gale_malloc(sizeof(*(x))))
00143 
00147 #define gale_create_array(x,count) ((x) = gale_malloc(sizeof(*(x)) * (count)))
00148 
00152 #define gale_resize_array(x,count) ((x) = gale_realloc(x,sizeof(*(x)) * (count)))
00153 
00157 struct gale_data gale_data_copy(struct gale_data data);
00158 
00162 int gale_data_compare(struct gale_data a,struct gale_data b);
00163 
00164 struct gale_ptr;
00165 
00173 struct gale_ptr *gale_make_weak(void *ptr);
00174 
00181 struct gale_ptr *gale_make_ptr(void *);
00182 
00188 void *gale_get_ptr(struct gale_ptr *wp);
00196 
00198 extern const struct gale_text null_text;
00199 struct gale_encoding;
00200 
00203 #define G_(x) (_gale_text_literal(L##x,sizeof(L##x) / sizeof(wch) - 1))
00204 
00206 struct gale_text _gale_text_literal(const wchar_t *,size_t len); /* internal */
00207 
00208 struct gale_text gale_text_concat(int count,...);
00209 struct gale_text gale_text_concat_array(int count,struct gale_text *array);
00210 
00213 struct gale_text_accumulator {
00214         int count;
00215         struct gale_text array[100];
00216 };
00217 
00219 extern const struct gale_text_accumulator null_accumulator;
00220 void gale_text_accumulate(struct gale_text_accumulator *,struct gale_text);
00221 int gale_text_accumulator_empty(const struct gale_text_accumulator *);
00222 struct gale_text gale_text_collect(const struct gale_text_accumulator *);
00223 
00224 struct gale_text gale_text_left(struct gale_text,int len);
00225 struct gale_text gale_text_right(struct gale_text,int len);
00226 
00227 int gale_text_token(struct gale_text string,wch sep,struct gale_text *token);
00228 struct gale_text gale_text_replace(
00229         struct gale_text original,
00230         struct gale_text find,
00231         struct gale_text replace);
00232 
00233 int gale_text_compare(struct gale_text a,struct gale_text b);
00234 
00235 int gale_text_to_number(struct gale_text str);
00236 struct gale_text gale_text_from_number(int n,int base,int pad);
00237 
00238 struct gale_data gale_text_as_data(struct gale_text);
00239 struct gale_text gale_text_from_data(struct gale_data);
00240 
00247 struct gale_encoding *gale_make_encoding(struct gale_text enc);
00248 
00255 struct gale_text gale_text_from(struct gale_encoding *enc,const char *str,int len);
00256 
00262 char *gale_text_to(struct gale_encoding *enc,struct gale_text str);
00267 
00268 struct gale_map;
00269 
00276 struct gale_map *gale_make_map(int weak);
00277 
00284 void gale_map_add(struct gale_map *map,struct gale_data key,void *data);
00285 
00290 void *gale_map_find(const struct gale_map *map,struct gale_data key);
00291 
00307 int gale_map_walk(const struct gale_map *map,const struct gale_data *after,
00308                   struct gale_data *key,void **data);
00313 struct timeval; /* from Unix */
00314 
00316 struct gale_time gale_time_zero(void);
00318 struct gale_time gale_time_now(void);
00320 struct gale_time gale_time_forever(void);
00322 struct gale_time gale_time_seconds(int sec);
00323 
00327 int gale_time_compare(struct gale_time a,struct gale_time b);
00328 
00331 struct gale_time gale_time_diff(struct gale_time a,struct gale_time b);
00332 
00335 struct gale_time gale_time_add(struct gale_time a,struct gale_time b);
00336 
00340 void gale_time_to(struct timeval *tv,struct gale_time time);
00341 
00345 void gale_time_from(struct gale_time *time,const struct timeval *tv);
00346 
00350 struct gale_text gale_time_format(struct gale_time time); 
00359 
00361 struct gale_group gale_group_empty(void);
00362 
00367 void gale_group_add(struct gale_group *group,struct gale_fragment frag);
00368 
00372 void gale_group_append(struct gale_group *a,struct gale_group b);
00373 
00375 struct gale_group gale_group_find(struct gale_group,
00376         struct gale_text name,
00377         enum gale_fragment_type);
00378 
00384 int gale_group_remove(struct gale_group *group,
00385         struct gale_text name,
00386         enum gale_fragment_type type);
00387 
00393 void gale_group_replace(struct gale_group *group,struct gale_fragment frag);
00394 
00396 int gale_group_null(struct gale_group);
00397 
00399 struct gale_fragment gale_group_first(struct gale_group);
00400 
00403 struct gale_group gale_group_rest(struct gale_group);
00404 
00406 void gale_group_prefix(struct gale_group *,struct gale_group tail);
00407 
00414 int gale_group_lookup(
00415         struct gale_group group,struct gale_text name,
00416         enum gale_fragment_type type,
00417         struct gale_fragment *frag);
00418 
00420 struct gale_text gale_print_fragment(struct gale_fragment,int indent);
00421 
00423 struct gale_text gale_print_group(struct gale_group,int indent);
00424 
00428 int gale_fragment_compare(struct gale_fragment a,struct gale_fragment b);
00429 
00433 int gale_group_compare(struct gale_group a,struct gale_group b);
00455 int gale_unpack_copy(struct gale_data *,void *,size_t);
00456 int gale_unpack_compare(struct gale_data *,const void *,size_t);
00457 void gale_pack_copy(struct gale_data *,const void *,size_t);
00458 #define gale_copy_size(s) (s)
00459 
00460 int gale_unpack_skip(struct gale_data *);
00461 void gale_pack_skip(struct gale_data *,size_t);
00462 #define gale_skip_size(sz) ((sz) + gale_u32_size())
00463 
00464 int gale_unpack_rle(struct gale_data *,void *,size_t);
00465 void gale_pack_rle(struct gale_data *,const void *,size_t);
00466 #define gale_rle_size(s) (((s)+127)/128+(s))
00467 
00468 int gale_unpack_u32(struct gale_data *,u32 *);
00469 void gale_pack_u32(struct gale_data *,u32);
00470 #define gale_u32_size() (sizeof(u32))
00471 
00472 int gale_unpack_wch(struct gale_data *,wch *);
00473 void gale_pack_wch(struct gale_data *,wch);
00474 #define gale_wch_size() (sizeof(u16))
00475 
00476 /* ANSI; deprecated! */
00477 int gale_unpack_str(struct gale_data *,const char **);
00478 void gale_pack_str(struct gale_data *,const char *);
00479 #define gale_str_size(t) (strlen(t) + 1)
00480 
00481 int gale_unpack_text(struct gale_data *,struct gale_text *);
00482 void gale_pack_text(struct gale_data *,struct gale_text);
00483 #define gale_text_size(t) (gale_text_len_size(t) + gale_u32_size())
00484 
00485 int gale_unpack_text_len(struct gale_data *,size_t len,
00486                          /*in,out*/ struct gale_text *);
00487 void gale_pack_text_len(struct gale_data *,struct gale_text);
00488 #define gale_text_len_size(t) ((t).l * gale_wch_size())
00489 
00490 int gale_unpack_time(struct gale_data *,struct gale_time *);
00491 void gale_pack_time(struct gale_data *,struct gale_time);
00492 #define gale_time_size() (sizeof(u32) * 4)
00493 
00494 int gale_unpack_fragment(struct gale_data *,struct gale_fragment *);
00495 void gale_pack_fragment(struct gale_data *,struct gale_fragment);
00496 size_t gale_fragment_size(struct gale_fragment);
00497 
00498 int gale_unpack_group(struct gale_data *,struct gale_group *);
00499 void gale_pack_group(struct gale_data *,struct gale_group);
00500 size_t gale_group_size(struct gale_group);
00505 /* global.h has these preinitialized pathnames, set by gale_init. 
00506    dot_gale  -> ~/.gale
00507    home_dir  -> ~
00508    sys_dir   -> etc/gale */
00509 
00510 void make_dir(struct gale_text path,int mode);
00511 struct gale_text sub_dir(struct gale_text path,struct gale_text sub);
00512 struct gale_text submk_dir(struct gale_text path,struct gale_text sub,int mode);
00513 struct gale_text up_dir(struct gale_text path);
00514 struct gale_text dir_file(struct gale_text path,struct gale_text file);
00515 struct gale_text dir_search(struct gale_text name,int cwd,struct gale_text,...);
00516 
00517 struct gale_data gale_read_from(int fd,int size_limit);
00518 int gale_write_to(int fd,struct gale_data data);
00519 
00520 struct gale_file_state;
00521 struct gale_data gale_read_file(
00522         struct gale_text name,
00523         int size_limit,int do_paranoia,
00524         struct gale_file_state **state);
00525 int gale_write_file(
00526         struct gale_text name,
00527         struct gale_data data,
00528         int is_private,
00529         struct gale_file_state **state);
00530 
00531 int gale_erase_file(const struct gale_file_state *state);
00532 int gale_file_changed(const struct gale_file_state *since);
00533 struct gale_time gale_get_file_time(const struct gale_file_state *state);
00534 void gale_set_file_time(struct gale_file_state *state,struct gale_time);
00535 
00541 enum gale_error { GALE_NOTICE, GALE_WARNING, GALE_ERROR };
00542 
00549 typedef void *gale_call_error(int severity,struct gale_text msg,void *user);
00550 
00551 void gale_alert(int severity,struct gale_text str,int err);
00552 void gale_on_error(oop_source *oop,gale_call_error *func,void *user);
00557 struct gale_report;
00558 
00564 typedef struct gale_text gale_report_call(void *user);
00565 
00572 struct gale_report *gale_make_report(struct gale_report *outer);
00573 
00579 void gale_report_add(struct gale_report *outer,gale_report_call *func,void *user);
00580 
00586 void gale_report_remove(struct gale_report *,gale_report_call *,void *);
00587 
00593 struct gale_text gale_report_run(struct gale_report *);
00594 
00597 void gale_dprintf(int level,const char *fmt,...);
00598 
00601 void gale_diprintf(int level,int indent,const char *fmt,...);
00607 
00615 typedef void *gale_connect_call(int fd,
00616         struct gale_text hostname,struct sockaddr_in addr,
00617         int found_local,void *user);
00618 
00619 struct gale_text gale_connect_text(struct gale_text host,struct sockaddr_in);
00620 
00621 struct gale_connect;
00622 struct gale_connect *gale_make_connect(
00623         oop_source *source,struct gale_text host,int avoid_local_port,
00624         gale_connect_call *,void *);
00625 
00626 void gale_abort_connect(struct gale_connect *);
00629 #endif

Generated at Sun Sep 7 13:55:26 2003 for Gale by doxygen1.2.1 written by Dimitri van Heesch, © 1997-2000