//---------------------------------------------------- inline void ofImage::allocatePixels(ofPixels &pix, int width, int height, int bpp){ bool bNeedToAllocate = false; if (pix.bAllocated == true){ if ( (pix.width == width) && (pix.height == height) && (pix.bitsPerPixel == bpp)){ //ofLog(OF_LOG_NOTICE,"we are good, no reallocation needed"); bNeedToAllocate = false; } else { //delete[] pix.pixels; bNeedToAllocate = true; } } else { bNeedToAllocate = true; } int byteCount = bpp / 8; if (bNeedToAllocate == true){ pix.width = width; pix.height = height; pix.bitsPerPixel = bpp; pix.bytesPerPixel = bpp / 8; switch (pix.bitsPerPixel){ case 8: pix.glDataType = GL_LUMINANCE; pix.ofImageType = OF_IMAGE_GRAYSCALE; break; case 24: pix.glDataType = GL_RGB; pix.ofImageType = OF_IMAGE_COLOR; break; case 32: pix.glDataType = GL_RGBA; pix.ofImageType = OF_IMAGE_COLOR_ALPHA; break; } //pix.pixels = new unsigned char[pix.width*pix.height*byteCount]; pix.pixels = (unsigned char *) buffer_data(val_to_buffer(val_ocall1(handler, val_id("__newByteData"), alloc_int(pix.width*pix.height*byteCount)))); pix.bAllocated = true; } }
/* Callback when the menu item is clicked */ static void item_activate(GtkMenuItem *menuitem, gpointer gdata) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Run Module", GTK_WIDGET(geany->app->window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *m = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); value extras = hxGetExtrasInstance(); val_ocall1(extras,val_id("runModule"),alloc_string(m)); g_free(m); } gtk_widget_destroy (dialog); }
value api_val_ocall1(value arg1,int arg2,value arg3) { return val_ocall1(arg1,arg2,arg3); }
static void do_parse_xml( const char *xml, const char **lp, int *line, value callb, const char *parentname ) { STATE state = BEGIN; STATE next = BEGIN; field aname = (field)0; value attribs = NULL_VAL; value nodename = NULL_VAL; const char *start = NULL; const char *p = *lp; char c = *p; int nsubs = 0, nbrackets = 0; while( c ) { switch( state ) { case IGNORE_SPACES: switch( c ) { case '\n': case '\r': case '\t': case ' ': break; default: state = next; continue; } break; case BEGIN: switch( c ) { case '<': state = IGNORE_SPACES; next = BEGIN_NODE; break; default: start = p; state = PCDATA; continue; } break; case PCDATA: if( c == '<' ) { val_ocall1(callb,id_pcdata,copy_string(start,p-start)); nsubs++; state = IGNORE_SPACES; next = BEGIN_NODE; } break; case CDATA: if( c == ']' && p[1] == ']' && p[2] == '>' ) { val_ocall1(callb,id_cdata,copy_string(start,p-start)); nsubs++; p += 2; state = BEGIN; } break; case BEGIN_NODE: switch( c ) { case '!': if( p[1] == '[' ) { p += 2; if( (p[0] != 'C' && p[0] != 'c') || (p[1] != 'D' && p[1] != 'd') || (p[2] != 'A' && p[2] != 'a') || (p[3] != 'T' && p[3] != 't') || (p[4] != 'A' && p[4] != 'a') || (p[5] != '[') ) ERROR("Expected <![CDATA["); p += 5; state = CDATA; start = p + 1; break; } if( p[1] == 'D' || p[1] == 'd' ) { if( (p[2] != 'O' && p[2] != 'o') || (p[3] != 'C' && p[3] != 'c') || (p[4] != 'T' && p[4] != 't') || (p[5] != 'Y' && p[5] != 'y') || (p[6] != 'P' && p[6] != 'p') || (p[7] != 'E' && p[7] != 'e') ) ERROR("Expected <!DOCTYPE"); p += 7; state = DOCTYPE; start = p + 1; break; } if( p[1] != '-' || p[2] != '-' ) ERROR("Expected <!--"); p += 2; state = COMMENT; start = p + 1; break; case '?': state = HEADER; start = p; break; case '/': if( parentname == NULL ) ERROR("Expected node name"); start = p + 1; state = IGNORE_SPACES; next = CLOSE; break; default: state = TAG_NAME; start = p; continue; } break; case TAG_NAME: if( !is_valid_char(c) ) { if( p == start ) ERROR("Expected node name"); nodename = copy_string(start,p-start); attribs = alloc_empty_object(); state = IGNORE_SPACES; next = BODY; continue; } break; case BODY: switch( c ) { case '/': state = WAIT_END; nsubs++; val_ocall2(callb,id_xml,nodename,attribs); break; case '>': state = CHILDS; nsubs++; val_ocall2(callb,id_xml,nodename,attribs); break; default: state = ATTRIB_NAME; start = p; continue; } break; case ATTRIB_NAME: if( !is_valid_char(c) ) { value tmp; if( start == p ) ERROR("Expected attribute name"); tmp = copy_string(start,p-start); aname = val_id(val_string(tmp)); if( !val_is_null(val_field(attribs,aname)) ) ERROR("Duplicate attribute"); state = IGNORE_SPACES; next = EQUALS; continue; } break; case EQUALS: switch( c ) { case '=': state = IGNORE_SPACES; next = ATTVAL_BEGIN; break; default: ERROR("Expected ="); } break; case ATTVAL_BEGIN: switch( c ) { case '"': case '\'': state = ATTRIB_VAL; start = p; break; default: ERROR("Expected \""); } break; case ATTRIB_VAL: if( c == *start ) { value aval = copy_string(start+1,p-start-1); alloc_field(attribs,aname,aval); state = IGNORE_SPACES; next = BODY; } break; case CHILDS: *lp = p; do_parse_xml(xml,lp,line,callb,val_string(nodename)); p = *lp; start = p; state = BEGIN; break; case WAIT_END: switch( c ) { case '>': val_ocall0(callb,id_done); state = BEGIN; break; default : ERROR("Expected >"); } break; case WAIT_END_RET: switch( c ) { case '>': if( nsubs == 0 ) val_ocall1(callb,id_pcdata,alloc_string("")); val_ocall0(callb,id_done); *lp = p; return; default : ERROR("Expected >"); } break; case CLOSE: if( !is_valid_char(c) ) { if( start == p ) ERROR("Expected node name"); { value v = copy_string(start,p - start); if( _strcmpi(parentname,val_string(v)) != 0 ) { buffer b = alloc_buffer("Expected </"); buffer_append(b,parentname); buffer_append(b,">"); ERROR(buffer_data(b)); } } state = IGNORE_SPACES; next = WAIT_END_RET; continue; } break; case COMMENT: if( c == '-' && p[1] == '-' && p[2] == '>' ) { val_ocall1(callb,id_comment,copy_string(start,p-start)); p += 2; state = BEGIN; } break; case DOCTYPE: if( c == '[' ) nbrackets++; else if( c == ']' ) nbrackets--; else if( c == '>' && nbrackets == 0 ) { val_ocall1(callb,id_doctype,copy_string(start,p-start)); state = BEGIN; } break; case HEADER: if( c == '?' && p[1] == '>' ) { p++; val_ocall1(callb,id_comment,copy_string(start,p-start)); state = BEGIN; } break; } c = *++p; if( c == '\n' ) (*line)++; } if( state == BEGIN ) { start = p; state = PCDATA; } if( parentname == NULL && state == PCDATA ) { if( p != start || nsubs == 0 ) val_ocall1(callb,id_pcdata,copy_string(start,p-start)); return; } ERROR("Unexpected end"); }