static GLboolean insert_binding (slang_uniform_bindings *bind, slang_export_data_quant *q, char *name, slang_atom_pool *atoms, GLuint index, GLuint addr) { GLuint count, i; slang_string_concat (name, slang_atom_pool_id (atoms, q->name)); if (q->array_len == 0) count = 1; else count = q->array_len; for (i = 0; i < count; i++) { GLuint save; save = slang_string_length (name); if (q->array_len != 0) _mesa_sprintf (name + slang_string_length (name), "[%d]", i); if (q->structure != NULL) { GLuint save, i; slang_string_concat (name, "."); save = slang_string_length (name); for (i = 0; i < q->u.field_count; i++) { if (!insert_binding (bind, &q->structure[i], name, atoms, index, addr)) return GL_FALSE; name[save] = '\0'; addr += q->structure[i].size; } } else { if (!slang_uniform_bindings_add (bind, q, name, index, addr)) return GL_FALSE; addr += q->size; } name[save] = '\0'; } return GL_TRUE; }
static GLboolean gather_uniform_bindings (slang_uniform_bindings *bind, slang_export_data_table *tbl, GLuint index) { GLuint i; for (i = 0; i < tbl->count; i++) if (tbl->entries[i].access == slang_exp_uniform) { char name[1024] = ""; if (!insert_binding (bind, &tbl->entries[i].quant, name, tbl->atoms, index, tbl->entries[i].address)) return GL_FALSE; } return GL_TRUE; }
SG_EXTENSION_ENTRY void CDECL Sg_Init_sagittarius__zlib() { SgLibrary *lib; SG_INIT_EXTENSION(sagittarius__zlib); lib = SG_LIBRARY(Sg_FindLibrary(SG_SYMBOL(SG_INTERN("(rfc zlib)")), FALSE)); Sg__Init_zlib_stub(lib); #define insert_binding_rec(n, v) \ Sg_MakeBinding(lib, SG_SYMBOL(SG_INTERN(#n)), SG_MAKE_INT(v), TRUE) #define insert_binding(v) \ Sg_MakeBinding(lib, SG_SYMBOL(SG_INTERN(#v)), SG_MAKE_INT(v), TRUE) insert_binding(Z_NO_FLUSH ); insert_binding(Z_PARTIAL_FLUSH); insert_binding(Z_SYNC_FLUSH ); insert_binding(Z_FULL_FLUSH ); insert_binding(Z_FINISH ); insert_binding(Z_BLOCK ); /* as far as I know this is after 1.2.3 and some platform (say OpenBSD) is using 1.2.3 so check it.*/ #ifdef Z_TREES insert_binding(Z_TREES ); #else /* ok not sure if this should be default... */ insert_binding_rec(Z_TREES, Z_NO_FLUSH); #endif insert_binding(Z_OK ); insert_binding(Z_STREAM_END ); insert_binding(Z_NEED_DICT ); insert_binding(Z_ERRNO ); insert_binding(Z_STREAM_ERROR ); insert_binding(Z_DATA_ERROR ); insert_binding(Z_MEM_ERROR ); insert_binding(Z_BUF_ERROR ); insert_binding(Z_VERSION_ERROR); insert_binding(Z_NO_COMPRESSION ); insert_binding(Z_BEST_SPEED ); insert_binding(Z_BEST_COMPRESSION ); insert_binding(Z_DEFAULT_COMPRESSION); insert_binding(Z_FILTERED ); insert_binding(Z_HUFFMAN_ONLY ); insert_binding(Z_RLE ); insert_binding(Z_FIXED ); insert_binding(Z_DEFAULT_STRATEGY); insert_binding(Z_BINARY ); insert_binding(Z_TEXT ); insert_binding(Z_ASCII ); insert_binding(Z_UNKNOWN); #undef insert_binding z_version = SG_MAKE_STRING(ZLIB_VERSION); /* well this class should not be used, but for consistancy */ Sg_InitStaticClassWithMeta(SG_CLASS_ZSTREAM, UC("<z-stream>"), lib, NULL, SG_FALSE, NULL, 0); }