void FreeMyAppResources() { cleanup_default_balloons(); destroy_asdatabase(); mystyle_destroy_all(); mylook_init( &(ASDefaultScr->Look), True, ASFLAGS_EVERYTHING ); destroy_image_manager( ASDefaultScr->image_manager, False ); destroy_font_manager( ASDefaultScr->font_manager, False ); clientprops_cleanup (); destroy_wmprops (ASDefaultScr->wmprops, False); wmprops_cleanup (); free_func_hash(); flush_keyword_ids(); purge_asimage_registry(); asxml_var_cleanup(); custom_color_cleanup(); build_xpm_colormap( NULL ); destroy_screen_gcs(ASDefaultScr); if( ASDefaultScr->RootImage ) { safe_asimage_destroy( ASDefaultScr->RootImage ); ASDefaultScr->RootImage = NULL ; } destroy_asvisual( ASDefaultScr->asv, False ); free_as_app_args(); destroy_assession( Session ); Session = NULL ; destroy_asenvironment( &Environment ); is_executable_in_path ( NULL ); #ifdef XSHMIMAGE flush_shm_cache(); #endif free( ASDefaultScr ); flush_default_asstorage(); flush_asbidirlist_memory_pool(); flush_ashash_memory_pool(); }
int main(int argc, char* argv[]) { char *image_file = "rose512.jpg" ; ASImage *im ; ASVisual *asv ; int screen = 0, depth = 24; Display *dpy = NULL; /* see ASView.1 : */ set_application_name( argv[0] ); #if (HAVE_AFTERBASE_FLAG==1) set_output_threshold(OUTPUT_LEVEL_DEBUG); #ifdef DEBUG_ALLOCS fprintf( stderr, "have DEBUG_ALLOCS\n"); #endif #ifdef AFTERBASE_DEBUG_ALLOCS fprintf( stderr, "have AFTERBASE_DEBUG_ALLOCS\n"); #endif #endif if( argc > 1 ) { if( strcmp( argv[1], "-h" ) == 0 ) { usage(); return 0; } image_file = argv[1] ; }else { show_warning( "Image filename was not specified. " "Using default: \"%s\"", image_file ); usage(); } #ifndef X_DISPLAY_MISSING dpy = XOpenDisplay(NULL); XSynchronize (dpy, True); _XA_WM_DELETE_WINDOW = XInternAtom( dpy, "WM_DELETE_WINDOW", False); screen = DefaultScreen(dpy); depth = DefaultDepth( dpy, screen ); #endif /* see ASView.3 : */ asv = create_asvisual( dpy, screen, depth, NULL ); /* asv = create_asvisual_for_id( dpy, screen, depth, 0x28, None, NULL ); */ /* see ASView.2 : */ im = file2ASImage( image_file, 0xFFFFFFFF, SCREEN_GAMMA, 0, getenv("IMAGE_PATH"), NULL ); /* The following could be used to dump JPEG version of the image into * stdout : */ /* ASImage2file( im, NULL, NULL, ASIT_Jpeg, NULL ); ASImage2file( im, NULL, "asview.png", ASIT_Png, NULL ); ASImage2file( im, NULL, "asview.gif", ASIT_Gif, NULL ); */ if( im != NULL ) { #ifndef X_DISPLAY_MISSING Window w ; #if 0 /* test example for get_asimage_channel_rects() : */ XRectangle *rects ; unsigned int rects_count =0; int i ; rects = get_asimage_channel_rects( im, IC_ALPHA, 10, &rects_count ); fprintf( stderr, " %d rectangles generated : \n", rects_count ); for( i = 0 ; i < rects_count ; ++i ) fprintf( stderr, "\trect[%d]=%dx%d%+d%+d;\n", i, rects[i].width, rects[i].height, rects[i].x, rects[i].y ); #endif #if 0 /* test example for fill_asimage : */ fill_asimage(asv, im, 0, 0, 50, 50, 0xFFFF0000); fill_asimage(asv, im, 50, 50, 100, 50, 0xFFFF0000); fill_asimage(asv, im, 0, 100, 200, 50, 0xFFFF0000); fill_asimage(asv, im, 150, 0, 50, 50, 0xFFFF0000); #endif #if 0 /* test example for conversion to argb32 :*/ { ASImage *tmp = tile_asimage( asv, im, 0, 0, im->width, im->height, TINT_NONE, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT ); destroy_asimage( &im ); set_flags( tmp->flags, ASIM_DATA_NOT_USEFUL|ASIM_XIMAGE_NOT_USEFUL ); im = tmp ; } #endif /* see ASView.4 : */ w = create_top_level_window( asv, DefaultRootWindow(dpy), 32, 32, im->width, im->height, 1, 0, NULL, "ASView", image_file ); if( w != None ) { Pixmap p ; XMapRaised (dpy, w); XSync(dpy,False); /* see ASView.5 : */ p = create_visual_pixmap( asv, DefaultRootWindow(dpy), im->width, im->height, 0 ); { START_TIME(started); /* for( int i = 0 ; i < 100 ; ++i ) To test performance! */ asimage2drawable( asv, p, im, NULL, 0, 0, 0, 0, im->width, im->height, False); SHOW_TIME("", started); } /* print_storage(NULL); */ destroy_asimage( &im ); /* see common.c:set_window_background_and_free(): */ p = set_window_background_and_free( w, p ); } /* see common.c: wait_closedown() : */ wait_closedown(w); dpy = NULL; /* no longer need this - lets clean it up :*/ destroy_asvisual( asv, False ); asv = NULL ; #else /* writing result into the file */ ASImage2file( im, NULL, "asview.png", ASIT_Png, NULL ); #endif } #ifdef DEBUG_ALLOCS /* different cleanups of static memory pools : */ flush_ashash_memory_pool(); asxml_var_cleanup(); custom_color_cleanup(); build_xpm_colormap( NULL ); flush_default_asstorage(); /* requires libAfterBase */ print_unfreed_mem(); #endif return 0 ; }
void Done (Bool restart, char *command ) { int restart_screen = get_flags( AfterStepState, ASS_SingleScreen)?Scr.screen:-1; Bool restart_self = False ; char *local_command = NULL ; { static int already_dead = False ; if( already_dead ) return;/* non-reentrant function ! */ already_dead = True ; } /* lets duplicate the string so we don't accidental;y delete it while closing self down */ if( restart ) { int my_name_len = strlen(MyName); if( command ) { if( strncmp(command, MyName, my_name_len )==0 ) restart_self = (command[my_name_len] == ' '|| command[my_name_len] == '\0'); local_command = mystrdup(command); }else { local_command = mystrdup(MyName); restart_self = True ; } if (!is_executable_in_path(local_command)) { if (!restart_self || MyArgs.saved_argv[0] == NULL) { show_error("Cannot restart with command \"%s\" - application is not in PATH!", local_command); return; } free(local_command); if (command) { local_command = safemalloc(strlen(command) + 1+ strlen(MyArgs.saved_argv[0])+1); sprintf( local_command, "%s %s", MyArgs.saved_argv[0], command + my_name_len); }else local_command = mystrdup(MyArgs.saved_argv[0]); } } #ifdef XSHMIMAGE /* may not need to do that as server may still have some of the shared * memory and work in it */ flush_shm_cache(); #endif LOCAL_DEBUG_CALLER_OUT( "%s restart, cmd=\"%s\"", restart?"Do":"Don't", command?command:""); XSelectInput( dpy, Scr.Root, 0 ); SendPacket (-1, M_SHUTDOWN, 0); FlushAllQueues(); sleep_a_millisec(1000); LOCAL_DEBUG_OUT( "local_command = \"%s\", restart_self = %s", local_command, restart_self?"Yes":"No"); set_flags( AfterStepState, ASS_Shutdown ); if( restart ) set_flags( AfterStepState, ASS_Restarting ); clear_flags( AfterStepState, ASS_NormalOperation ); #ifndef NO_VIRTUAL MoveViewport (0, 0, False); #endif #ifndef NO_SAVEWINDOWS if (!restart) { char *fname = make_session_file( Session, AFTER_SAVE, False ); save_aswindow_list( Scr.Windows, NULL ); free( fname ); } #endif /* Close all my pipes */ ShutdownModules(False); desktop_cover_cleanup(); /* remove window frames */ CleanupScreen(); /* Really make sure that the connection is closed and cleared! */ XSync (dpy, 0); if (ASDBus_fd>=0) asdbus_shutdown(); #ifdef XSHMIMAGE flush_shm_cache(); #endif if (restart) { set_flags( MyArgs.flags, ASS_Restarting ); spawn_child( local_command, -1, restart_screen, original_DISPLAY_string, None, C_NO_CONTEXT, False, restart_self, NULL ); } else { XCloseDisplay (dpy); dpy = NULL ; /* freeing up memory */ DestroyPendingFunctionsQueue(); DestroyCategories(); cleanup_default_balloons(); destroy_asdatabase(); destroy_assession( Session ); destroy_asenvironment( &Environment ); /* pixmap references */ build_xpm_colormap (NULL); free_scratch_ids_vector(); free_scratch_layers_vector(); clientprops_cleanup (); wmprops_cleanup (); free_func_hash(); flush_keyword_ids(); purge_asimage_registry(); asxml_var_cleanup(); custom_color_cleanup(); free_as_app_args(); free( ASDefaultScr ); flush_default_asstorage(); flush_asbidirlist_memory_pool(); flush_ashash_memory_pool(); #ifdef DEBUG_ALLOCS print_unfreed_mem (); #endif /*DEBUG_ALLOCS */ #ifdef XSHMIMAGE flush_shm_cache(); #endif } exit(0); }