/* -*- Mode: C Scheme48 Stubber C Support Header This code is written by Taylor R. Campbell and placed in the Public Domain. All warranties are disclaimed. */ #include #include #define STD_UINT_SYSTEM_CALL(SYSCALL, RESULT_LOC, EXPRESSION) \ while (((RESULT_LOC) = (EXPRESSION)) < 0) \ if (errno != EINTR) \ s48_raise_os_error (errno) #define S48_ENUMERAND_MAPPER(NAME, TYPE, MAP) \ TYPE \ NAME (s48_value index_s48) \ { \ long index = (s48_extract_integer (index_s48)); \ if (((MAP) [index]) . available_p) \ return (((MAP) [index]) . value); \ else \ { \ /* This is really awful; we ought to do better. */ \ s48_raise_string_os_error ("No such enumerand"); \ /* NOT REACHED */ \ return ((TYPE) 0); \ } \ } #define S48_ENUMERAND_UNMAPPER(NAME, TYPE, MAP, BINDING, COUNT) \ s48_value \ NAME (TYPE value) \ { \ int index; \ s48_value vector; \ \ vector = (S48_SHARED_BINDING_REF (BINDING)); \ \ for (index = 0; (index < (COUNT)); index += 1) \ if ((((MAP) [index]) . available_p) \ && (value == (((MAP) [index]) . value))) \ return (s48_vector_ref (vector, index)); \ \ s48_raise_string_os_error ("No such enumerand"); \ /* NOT REACHED */ \ return S48_UNSPECIFIC; \ } /* Scheme48's c-mods.h */ #define PSTRUE (0 == 0) #define PSFALSE (0 != 0) #define psbool char /* Scheme48's event.h */ extern psbool s48_add_pending_fd (int fd, psbool input_p); /* Scheme48's fd-io.h */ extern int ps_close_fd (long fd); extern void s48_enter_channel (s48_value *channel_s48_loc, int fd, s48_value status_s48, s48_value id_s48); extern char * s48_extract_and_copy_string (s48_value string_s48); extern char * s48_extract_and_copy_byte_vector (s48_value bv_s48, size_t * length_loc); extern s48_value s48_enter_and_free_string (char * string); extern s48_value s48_enter_and_free_byte_vector (char * bv, long length);