Beispiel #1
0
bool init_button(button_t *btn, widget_t *parent,
    const char *caption, uint16_t points, pixel_t background, pixel_t foreground)
{
	widget_init(&btn->widget, parent);

	btn->widget.destroy = button_destroy;
	btn->widget.reconfigure = button_reconfigure;
	btn->widget.rearrange = button_rearrange;
	btn->widget.repaint = button_repaint;
	btn->widget.handle_keyboard_event = button_handle_keyboard_event;
	btn->widget.handle_position_event = button_handle_position_event;

	source_init(&btn->background);
	source_set_color(&btn->background, background);
	source_init(&btn->foreground);
	source_set_color(&btn->foreground, foreground);

	if (caption == NULL) {
		btn->caption = NULL;
	} else {
		btn->caption = str_dup(caption);
	}
	font_init(&btn->font, FONT_DECODER_EMBEDDED, NULL, points);

	sysarg_t cpt_width;
	sysarg_t cpt_height;
	font_get_box(&btn->font, btn->caption, &cpt_width, &cpt_height);
	btn->widget.width_min = cpt_width + 8;
	btn->widget.height_min = cpt_height + 8;
	btn->widget.width_ideal = cpt_width + 28;
	btn->widget.height_ideal = cpt_height + 8;

	return true;
}
Beispiel #2
0
static int get_glyph_surface(bitmap_backend_data_t *data, glyph_id_t glyph_id,
    surface_t **result)
{
	if (glyph_id >= data->glyph_count)
		return ENOENT;
	
	if (data->glyph_cache[glyph_id].surface != NULL) {
		*result = data->glyph_cache[glyph_id].surface;
		return EOK;
	}
	
	surface_t *raw_surface;
	int rc = data->decoder->load_glyph_surface(data->decoder_data, glyph_id,
	    &raw_surface);
	if (rc != EOK)
		return rc;
	
	sysarg_t w;
	sysarg_t h;
	surface_get_resolution(raw_surface, &w, &h);
	
	if (!data->scale) {
		*result = raw_surface;
		return EOK;
	}
	
	source_t source;
	source_init(&source);
	source_set_texture(&source, raw_surface, PIXELMAP_EXTEND_TRANSPARENT_BLACK);

	transform_t transform;
	transform_identity(&transform);
	transform_translate(&transform, 0.5, 0.5);
	transform_scale(&transform, data->scale_ratio, data->scale_ratio);
	source_set_transform(&source, transform);

	surface_coord_t scaled_width = (data->scale_ratio * ((double) w) + 0.5);
	surface_coord_t scaled_height = (data->scale_ratio * ((double) h) + 0.5);

	surface_t *scaled_surface = surface_create(scaled_width, scaled_height,
	    NULL, 0);
	if (!scaled_surface) {
		surface_destroy(raw_surface);
		return ENOMEM;
	}

	drawctx_t context;
	drawctx_init(&context, scaled_surface);
	drawctx_set_source(&context, &source);
	drawctx_transfer(&context, 0, 0, scaled_width, scaled_height);

	surface_destroy(raw_surface);
	
	data->glyph_cache[glyph_id].surface = scaled_surface;
	*result = scaled_surface;
	return EOK;
}
Beispiel #3
0
static int a2dp_source_probe(struct btd_service *service)
{
	struct btd_device *dev = btd_service_get_device(service);

	DBG("path %s", device_get_path(dev));

	source_init(service);

	return 0;
}
Beispiel #4
0
static void untagged_0() {

	i32 local_DEBUG;

	source_init();
	local_DEBUG = DEBUG;
	if (local_DEBUG) {
		printf("Source ACTION: initialize\n");
		printf("Source STATE: ReadInit\n");
		printf("-------------------------\n");
	}

	// Update ports indexes

}
Beispiel #5
0
void graphics_draw_tile(const context_t* ctx, window_t* window,
    uint16_t tile_id, size_t x, size_t y)
{
    palette_t palette = {
        {0, 1, 2, 3}
    };

    for (size_t tile_y = 0; tile_y < TILE_HEIGHT; tile_y++) {
        source_t src;
        dest_t dst;

        dest_init(&dst, window->surface, x, y + tile_y, window->surface->w - x);
        source_init(&src, &ctx->mem.gfx.tiles.data[tile_id], 0, tile_y);
        draw_tile(&dst, &src, palette);
    }
}
Beispiel #6
0
void sound_play(int id, float volume, float panning, float pitch) {
    // Get sample data
    char *buf;
    int len;
    if(sounds_loader_get(id, &buf, &len) != 0) {
        return;
    }

    // Play
    audio_source *src = malloc(sizeof(audio_source));
    source_init(src);
    raw_source_init(src, buf, len);
    unsigned int sound_id = sink_play_set(audio_get_sink(), src, volume, panning, pitch);
    sink_set_stream_volume(audio_get_sink(), sound_id, sound_volume);

}
Beispiel #7
0
int
main(int argc, const char *argv[])
{
    int result = 0;
    apr_pool_t *mp;
    apr_status_t status;
    char next_char;
    Source *source = NULL;

    apr_initialize();

    status = apr_pool_create(&mp, NULL);
    handle_and_display_error(status);

    source_init(&source, mp);

    status = source_set_options(source, argc, argv, mp);
    handle_and_display_error(status);

    status = source_open(source, mp);
    handle_and_display_error(status);

    while (source_shift_character(source, &next_char) == APR_SUCCESS) {
        printf("%c", next_char);
    }

    goto cleanup;

error:
    result = 1;

cleanup:
    if (source) { source_cleanup(source); }
    apr_pool_destroy(mp);
    apr_terminate();

    return result;
}
Beispiel #8
0
void main_open_window()
{
	main_freemem_hook = freemem_alloc_hook();

	char *initdir = getenv("DB101_LASTDIR");
	if(initdir)
		strcpy(lastdir, initdir);

	variables_init();
	console_init();
	stacktrace_init();
	source_init();
	disassembler_init();
	sourcelist_init();
	
	pipe_init();

   AppPort = IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE);

    /* Create the window object. */
    if(( MainWinObj = WindowObject,
            WA_ScreenTitle, "Debug 101",
            WA_Title, "Debug 101 v1.1.0 BETA - secret edition ;)",
            WA_Width, 1024,
			WA_Height, 768,
            WA_DepthGadget, TRUE,
			WA_SizeGadget, TRUE,
            WA_DragBar, TRUE,
            WA_CloseGadget, TRUE,
            WA_Activate, TRUE,
            
            WINDOW_NewMenu, mynewmenu,
            WINDOW_MenuUserData, WGUD_IGNORE,
            
            WINDOW_IconifyGadget, TRUE,
            WINDOW_IconTitle, "Debug 101",
            WINDOW_AppPort, AppPort,
            
            WINDOW_Position, WPOS_CENTERSCREEN,
            /* there is no HintInfo array set up here, instead we define the 
            ** strings directly when each gadget is created (OM_NEW)
            */
            WINDOW_GadgetHelp, TRUE,
	        WINDOW_ParentGroup, MainObj[GAD_TOPLAYOUT] = VLayoutObject,
				LAYOUT_AddChild, HLayoutObject,
	                LAYOUT_AddChild, MainObj[GAD_SELECT_BUTTON] = ButtonObject,
	                    GA_ID, GAD_SELECT_BUTTON,
	                    GA_Text, "Select file",
	                    GA_RelVerify, TRUE,
	                    GA_HintInfo, "Push to select file",
	                ButtonEnd,
	                CHILD_WeightedWidth, 0,
	                
	                LAYOUT_AddChild, MainObj[GAD_RELOAD_BUTTON] = ButtonObject,
	                	GA_ID, GAD_RELOAD_BUTTON,
	                	GA_Text, "Reload",
	                	GA_RelVerify, TRUE,
	                    GA_Disabled, TRUE,
	                	GA_HintInfo, "Push to reload previously executed file",
	                ButtonEnd,
	                CHILD_WeightedWidth, 0,
	                
	                LAYOUT_AddChild, MainObj[GAD_FILENAME_STRING] = StringObject,
	                    GA_ID, GAD_FILENAME_STRING,
	                    GA_RelVerify, TRUE,
	                    GA_HintInfo, "Filename",
						GA_Disabled, TRUE,
						GA_ReadOnly, TRUE,
						STRINGA_MinVisible, 10,
						STRINGA_TextVal, "Select File",
	                StringEnd,

	                LAYOUT_AddChild, MainObj[GAD_ATTACH_BUTTON] = ButtonObject,
	                    GA_ID, GAD_ATTACH_BUTTON,
	                    GA_Text, "Attach",
	                    GA_RelVerify, TRUE,
	                    GA_HintInfo, "Push to attach to process",
	                ButtonEnd,
	                CHILD_WeightedWidth, 0,
	
					LAYOUT_AddChild, SpaceObject,
						SPACE_MinWidth, 24,
					SpaceEnd,
					
					LAYOUT_AddChild, MainObj[GAD_START_BUTTON] = ButtonObject,
						GA_ID, GAD_START_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Continue",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                
					LAYOUT_AddChild, MainObj[GAD_PAUSE_BUTTON] = ButtonObject,
						GA_ID, GAD_PAUSE_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Pause",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                
					LAYOUT_AddChild, MainObj[GAD_KILL_BUTTON] = ButtonObject,
						GA_ID, GAD_KILL_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Kill",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
#if 0
					LAYOUT_AddChild, CrashButtonObj = ButtonObject,
						GA_ID, GAD_CRASH_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Crash",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
#endif
					LAYOUT_AddChild, MainObj[GAD_STEPOVER_BUTTON] = ButtonObject,
						GA_ID, GAD_STEPOVER_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Step Over",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                
					LAYOUT_AddChild, MainObj[GAD_STEPINTO_BUTTON] = ButtonObject,
						GA_ID, GAD_STEPINTO_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Step Into",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                
					LAYOUT_AddChild, MainObj[GAD_STEPOUT_BUTTON] = ButtonObject,
						GA_ID, GAD_STEPOUT_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Step Out",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                	                
					LAYOUT_AddChild, SpaceObject,
						SPACE_MinWidth, 24,
					SpaceEnd,
					
					LAYOUT_AddChild, MainObj[GAD_SETBREAK_BUTTON] = ButtonObject,
						GA_ID, GAD_SETBREAK_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Breaks",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,

					LAYOUT_AddChild, MainObj[GAD_HEX_BUTTON] = ButtonObject,
						GA_ID, GAD_HEX_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Hex",
						GA_Disabled, TRUE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,

				EndMember,
				CHILD_WeightedHeight, 0,

				LAYOUT_AddChild, HLayoutObject,
		            LAYOUT_AddChild, MainObj[GAD_STACKTRACE_LISTBROWSER] = ListBrowserObject,
	    	            GA_ID,                     GAD_STACKTRACE_LISTBROWSER,
	        	        GA_RelVerify,              TRUE,
	            	    GA_TabCycle,               TRUE,
	                	LISTBROWSER_AutoFit,       TRUE,
	                    LISTBROWSER_Labels,        &stacktrace_list,
//	                    LISTBROWSER_ColumnInfo,    columninfo,
 	             	    LISTBROWSER_ColumnTitles,  FALSE,
		               	LISTBROWSER_ShowSelected,  FALSE,
	                    LISTBROWSER_Striping,      LBS_ROWS,
					ListBrowserEnd,
				
	                LAYOUT_AddChild, MainObj[GAD_VARIABLES_LISTBROWSER] = ListBrowserObject,
    	                GA_ID,                      GAD_VARIABLES_LISTBROWSER,
        	            GA_RelVerify,               TRUE,
	                    GA_TabCycle,                TRUE,
						LISTBROWSER_Hierarchical,	TRUE,
	                    //LISTBROWSER_AutoFit,        TRUE,
	                    LISTBROWSER_Labels,         &variable_list,
	                    LISTBROWSER_ColumnInfo,     variablescolumninfo,
	                    LISTBROWSER_ColumnTitles,   TRUE,
	                    //LISTBROWSER_ShowSelected,   TRUE, /* not really needed yet */
	                    LISTBROWSER_Striping,       LBS_ROWS,
	                    LISTBROWSER_SortColumn,     0,
	                    LISTBROWSER_TitleClickable, TRUE,
	                ListBrowserEnd,
	            EndMember,
	            
	            LAYOUT_AddChild, HLayoutObject,
		            LAYOUT_AddChild, MainObj[GAD_CLICKTAB] = ClickTabObject,
		            	GA_Text, PageLabels_1,

		            	CLICKTAB_Current,	0,
		            	CLICKTAB_PageGroup,	PageObject,
				    		PAGE_Add, VLayoutObject,
				    			//LAYOUT_SpaceOuter,	TRUE,
				    			//LAYOUT_DeferLayout,	TRUE,
				    			LAYOUT_AddChild, MainObj[GAD_SOURCE_LISTBROWSER] = ListBrowserObject,
				    	        	GA_ID,                     GAD_SOURCE_LISTBROWSER,
		        			    	GA_RelVerify,              TRUE,
		            				GA_TabCycle,               TRUE,
		                			LISTBROWSER_AutoFit,       TRUE,
		                    		LISTBROWSER_Labels,        &source_list,
		                    		LISTBROWSER_ColumnInfo,    sourcecolumninfo,
		              	    		LISTBROWSER_ColumnTitles,  TRUE,
		                			LISTBROWSER_ShowSelected,  TRUE,
									//LISTBROWSER_Striping,      LBS_ROWS,
								ListBrowserEnd,
							EndMember,
						
							PAGE_Add, VLayoutObject,
								LAYOUT_AddChild, MainObj[GAD_DISASSEMBLER_LISTBROWSER] = ListBrowserObject,
			    	        	    GA_ID,                     GAD_DISASSEMBLER_LISTBROWSER,
	    		    	    	    GA_RelVerify,              TRUE,
	        		    		    GA_TabCycle,               TRUE,
									//GA_TextAttr,			   &courier_font,
	        	    	    		LISTBROWSER_AutoFit,       TRUE,
	        	    		  	    LISTBROWSER_Labels,        &disassembly_list,
	        	  		    	  	LISTBROWSER_ShowSelected,  TRUE,
	        	        		    LISTBROWSER_Striping,      LBS_ROWS,
								ListBrowserEnd,
							
								LAYOUT_AddChild, HLayoutObject,
									LAYOUT_AddChild, MainObj[GAD_DISASSEMBLER_STEP_BUTTON] = ButtonObject,
	    	            			    GA_ID, GAD_DISASSEMBLER_STEP_BUTTON,
										GA_RelVerify, TRUE,
	            	    			    GA_Text, "Step",
	            			    	ButtonEnd,
				                	CHILD_WeightedHeight, 0,

		                			LAYOUT_AddChild, MainObj[GAD_DISASSEMBLER_SKIP_BUTTON] = ButtonObject,
	    	            			    GA_ID, GAD_DISASSEMBLER_SKIP_BUTTON,
										GA_RelVerify, TRUE,
	            	        			GA_Text, "Skip",
    	        				   	ButtonEnd,
				                	CHILD_WeightedHeight, 0,
								EndMember,
			                	CHILD_WeightedHeight, 0,
							EndMember,
						PageEnd,
					EndMember,
					
					LAYOUT_WeightBar,	TRUE,
					LAYOUT_AddChild, VLayoutObject,
						LAYOUT_AddChild, MainObj[GAD_SOURCELIST_LISTBROWSER] = ListBrowserObject,
							GA_ID,                     GAD_SOURCELIST_LISTBROWSER,
	    		    		GA_RelVerify,              TRUE,
	        		    	GA_TabCycle,               TRUE,
							LISTBROWSER_AutoFit,       TRUE,
	        	    		LISTBROWSER_Labels,        &sourcelist_list,
	        	  			LISTBROWSER_ShowSelected,  TRUE,
	        	        	LISTBROWSER_Striping,      LBS_ROWS,
						ListBrowserEnd,
						
						LAYOUT_AddChild, MainObj[GAD_IMPORT_BUTTON] = ButtonObject,
							GA_ID, GAD_IMPORT_BUTTON,
							GA_RelVerify, TRUE,
							GA_Text, "Import externals",
						ButtonEnd,
						CHILD_WeightedHeight, 0,
					EndMember,
					CHILD_WeightedWidth,		20,
				EndMember,
				
				LAYOUT_AddChild, HLayoutObject,
		            LAYOUT_AddChild, MainObj[GAD_CONSOLE_LISTBROWSER] = ListBrowserObject,
    		            GA_ID,                     GAD_CONSOLE_LISTBROWSER,
        		        GA_RelVerify,              TRUE,
            		    GA_TabCycle,               TRUE,
                		LISTBROWSER_AutoFit,       TRUE,
                	    LISTBROWSER_Labels,        &console_list,
					ListBrowserEnd,
				EndMember,
				
				LAYOUT_AddChild, HLayoutObject,
	                LAYOUT_AddChild, MainObj[GAD_AREXX_STRING] = StringObject,
    	                GA_ID, GAD_AREXX_STRING,
        	            GA_RelVerify, TRUE,
						GA_Disabled, FALSE,
						GA_ReadOnly, FALSE,
						STRINGA_TextVal, "",
        	        StringEnd,

					LAYOUT_AddChild, MainObj[GAD_AREXX_BUTTON] = ButtonObject,
						GA_ID, GAD_AREXX_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Send",
						GA_Disabled, FALSE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                CHILD_WeightedWidth, 0,
	                
	                LAYOUT_AddChild, MainObj[GAD_SIGNAL_BUTTON] = ButtonObject,
						GA_ID, GAD_SIGNAL_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "Signal",
						GA_Disabled, FALSE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
	                CHILD_WeightedWidth, 0,
	                
					LAYOUT_AddChild, MainObj[GAD_X_BUTTON] = ButtonObject,
						GA_ID, GAD_X_BUTTON,
	                    GA_RelVerify, TRUE,
						GA_Text, "X",
						GA_Disabled, FALSE,
					ButtonEnd,
	                CHILD_WeightedHeight, 0,
					CHILD_WeightedWidth, 0,
				EndMember,
				CHILD_WeightedHeight, 0,

	        EndMember,

        EndWindow))
    {
        /*  Open the window. */
        if( mainwin = (struct Window *) RA_OpenWindow(MainWinObj) )
        {
			main_window_is_open = TRUE;
			button_set_start();
		}
	}

	return;
}
Beispiel #9
0
void
draw_line(context_t *ctx) {
    gfx_t* gfx = &ctx->gfx;
    uint8_t screen_y = ctx->mem.io.LY;

    map_t src;
    dest_t dest;
    palette_t palette;

    if (!graphics_lock(ctx))
    {
        return;
    }
    
    // Background
    if (lcdc_background_enabled(&ctx->mem))
    {
        palette = palette_decode(ctx->mem.io.BGP);

        map_init(
            &src, &ctx->mem,
            lcdc_background_tile_map(&ctx->mem),
            ctx->mem.io.SCX, screen_y + ctx->mem.io.SCY
        );

        dest_init(
            &dest,
            gfx->background,
            0, screen_y, SCREEN_WIDTH
        );
        
        draw_tiles(&dest, &src, palette);
    }

    // Window
    uint8_t window_y = ctx->mem.io.WY;
    // TODO: What happens on underflow?
    uint8_t window_x = ctx->mem.io.WX - 7;
    
    if (lcdc_window_enabled(&ctx->mem) && screen_y >= window_y &&
        window_x < SCREEN_WIDTH)
    {
        palette = palette_decode(ctx->mem.io.BGP);

        map_init(
            &src, &ctx->mem,
            lcdc_window_tile_map(&ctx->mem),
            window_x, screen_y + gfx->window_y
        );

        dest_init(
            &dest,
            gfx->background,
            window_x, screen_y, SCREEN_WIDTH - window_x
        );

        draw_tiles(&dest, &src, palette);
        gfx->window_y += 1;
    }
    
    // Sprites
    if (lcdc_sprites_enabled(&ctx->mem))
    {
        size_t sprite_height = lcdc_sprite_height(&ctx->mem);

        sprite_table_t sprites = { .length = 0 };
        
        for (size_t i = 0; i < MAX_SPRITES; i++)
        {
            sprite_t sprite;
            sprite_decode(&sprite, &ctx->mem.gfx.oam[i]);

            if (!sprite.visible) {
                continue;
            }
            
            if (screen_y >= sprite.y && screen_y < sprite.y + sprite_height)
            {
                graphics_sprite_table_add(&sprites, &sprite);
            }
        }

        palette_t spp_high, spp_low;
        spp_high = palette_decode(ctx->mem.io.SPP_HIGH);
        spp_low  = palette_decode(ctx->mem.io.SPP_LOW);

        // <sprites> holds the 10 sprites with highest priority,
        // sorted by ascending x coordinate. Since sprites
        // with lower x coords write over tiles with higher x coords
        // we draw in reverse order.
        for (int i = sprites.length - 1; i >= 0; i--)
        {
            const sprite_t* sprite = &sprites.data[i];
            source_t src;
            dest_t dst;

            if (sprite->x >= SCREEN_WIDTH) {
                continue;
            }

            source_init(
                &src,
                &ctx->mem.gfx.tiles.data[sprite->tile_id],
                sprite->tile_x, sprite->tile_y + (screen_y - sprite->y)
            );

            dest_init(
                &dst,
                sprite->in_background ? gfx->sprites_bg : gfx->sprites_fg,
                sprite->x, screen_y, TILE_WIDTH
            );

            draw_tile(
                &dst,
                &src,
                sprite->high_palette ? spp_high : spp_low
            );
        }
    }

    graphics_unlock(ctx);
}
Beispiel #10
0
int main() {

	Py_Initialize(); // start Python interpreter
	PyObject* sysPath = PySys_GetObject((char*)"path"); 
	// sysPath has a borrowed reference, no need to decref it
	PyObject* curDir = PyString_FromString(".");
	PyList_Append(sysPath, curDir);
	Py_DECREF(curDir);

	FILE * fp;
	time_t current_time;
	char* c_time_string;
	int i, j, k, cnt;
	
	LUC_sim_pars *simp;
	LUC_fields *fields;
	LUC_diel_mat *diel;
	LUC_abc_fields *abc_fields;
	LUC_source **src;

	printf("------------------------------ LUCIFER v0.3 ------------------------------\n\n");	

	simp = par_config("luc");//<----fix name
	if(!simp){
		printf(C_RED "[ERROR]" C_RES " failed to read configuration file %s\n","luc");
		return 0;
	}
	printf(C_GREEN "[MSG]" C_RES " configuration file read successfully\n");

	fields = allocate_fields(simp);
	if(!fields){
		printf(C_RED "[ERROR]" C_RES " failed to allocate fields (out of memory?)\n");
		return 0;
	}
	printf(C_GREEN "[MSG]" C_RES " e.m. fields are allocated\n");

	diel = allocate_diel(simp);
	if(!diel){
		printf(C_RED "[ERROR]" C_RES " failed to allocate materials (out of memory?)\n");
		return 0;
	}
	printf(C_GREEN "[MSG]" C_RES " materials and geometry are allocated\n");

	abc_fields = allocate_abc(simp);
	if(!abc_fields){
		printf(C_RED "[ERROR]" C_RES " failed to allocate abc fields (out of memory?)\n");
		return 0;
	}
	printf(C_GREEN "[MSG]" C_RES " fields for ABC are allocated\n");

	src = malloc((*simp).n_sources*sizeof(LUC_source**));
	if(!src){
		printf(C_RED "[ERROR]" C_RES " failed to allocate sources (out of memory?)\n");
		return 0;
	}

	for(cnt = 0; cnt < (*simp).n_sources; cnt++)
		if(!source_init((*simp).src_files[cnt], &src[cnt], simp))			
			printf(C_RED "[ERROR]" C_RES "source_init: failed to allocated source %d\n",cnt);

	printf(C_GREEN "[MSG]" C_RES " sources are allocated\n");

	printf(C_GREEN "[MSG]" C_RES " building geometry...\n");
	printf(C_GREEN "[MSG]" C_RES " msgs from " C_BLUE "%s.py" C_RES " begin\n",(*simp).geom_file);
	build_geometry((*simp).geom_file, simp, diel);
	printf(C_GREEN "[MSG]" C_RES " msgs from " C_BLUE "%s.py" C_RES " end\n",(*simp).geom_file);
	printf(C_GREEN "[MSG]" C_RES " geometry done\n\n");
	
	
	printf(C_GREEN "[MSG]" C_RES " simulated domain: x = %g m; y = %g m; z = %g m;\n",(*simp).size_x*(*simp).cell_size,(*simp).size_y*(*simp).cell_size,(*simp).size_z*(*simp).cell_size);
	printf(C_GREEN "[MSG]" C_RES " simulated time: %g s\n", (*simp).sim_time);
	printf(C_GREEN "[MSG]" C_RES " total number of time steps: %d\n", (*simp).max_time);
	//'data will be saved in: ',data_file
	
	// ask if OK	
	
	//--------------------------------
	//---------- START SIM -----------
	//--------------------------------
		
	fp = fopen ("test.dat", "w");

	write_header(fp, simp);
	
	current_time = time(NULL);
    c_time_string = ctime(&current_time);
	printf(C_GREEN "[MSG]" C_RES " simulation started on: %s", c_time_string);
	
	for ((*simp).t_step = 0; (*simp).t_step < (*simp).max_time; (*simp).t_step++) {	
	    				
		updateH(fields, diel, simp);
		updateE(fields, diel, simp);
	
		// add source
		for(cnt = 0; cnt < (*simp).n_sources; cnt++)
		   	add_source(src[cnt], fields, simp);
	       	
    	// apply abc
    	abc(fields, abc_fields, simp);
		    	
    	// apply pbc
    	//pbc(pbc_k,pbc_f,pbc_l,pbc_r,pbc_b,pbc_t);
    	
		write_field_views(fp, fields, simp);
		    	
    	printf(C_GREEN "[MSG]" C_RES " completed: %.2f%%\r", ((float)(*simp).t_step/(float)(*simp).max_time)*100);
    	
	}

	current_time = time(NULL);
    c_time_string = ctime(&current_time);
	printf(C_GREEN "[MSG]" C_RES " simulation finished on: %s\n", c_time_string);
	printf("----------------------------------- END ----------------------------------\n");

	fclose(fp);
	Py_Finalize();

	return 1;
}
Beispiel #11
0
static void *start_relay_stream (void *arg)
{
    client_t *client = arg;
    relay_server *relay;
    source_t *src;
    int failed = 1, sources;

    global_lock();
    sources = ++global.sources;
    stats_event_args (NULL, "sources", "%d", global.sources);
    global_unlock();
    /* set the start time, because we want to decrease the sources on all failures */
    client->connection.con_time = time (NULL);
    do
    {
        ice_config_t *config = config_get_config();
        mount_proxy *mountinfo;

        relay = client->shared_data;
        src = relay->source;

        thread_rwlock_wlock (&src->lock);
        src->flags |= SOURCE_PAUSE_LISTENERS;
        if (sources > config->source_limit)
        {
            config_release_config();
            WARN1 ("starting relayed mountpoint \"%s\" requires a higher sources limit", relay->localmount);
            break;
        }
        config_release_config();
        INFO1("Starting relayed source at mountpoint \"%s\"", relay->localmount);

        if (open_relay (relay) < 0)
            break;
        if (connection_complete_source (src) < 0)
        {
            WARN1 ("Failed to complete initialisation on %s", relay->localmount);
            break;
        }
        stats_event_inc (NULL, "source_relay_connections");
        source_init (src);
        config = config_get_config();
        mountinfo = config_find_mount (config, src->mount);
        source_update_settings (config, src, mountinfo);
        INFO1 ("source %s is ready to start", src->mount);
        config_release_config();
        failed = 0;
    } while (0);

    client->ops = &relay_client_ops;
    client->schedule_ms = timing_get_time();

    if (failed)
    {
        /* failed to start any connection, better clean up and reset */
        if (relay->on_demand == 0)
        {
            yp_remove (relay->localmount);
            src->yp_public = -1;
        }
        relay->in_use = NULL;
        INFO2 ("listener count remaining on %s is %d", src->mount, src->listeners);
        src->flags &= ~(SOURCE_PAUSE_LISTENERS|SOURCE_RUNNING);
    }
    thread_rwlock_unlock (&src->lock);

    thread_spin_lock (&relay_start_lock);
    relays_connecting--;
    thread_spin_unlock (&relay_start_lock);

    client->flags |= CLIENT_ACTIVE;
    worker_wakeup (client->worker);
    return NULL;
}
Beispiel #12
0
void source_main (source_t *source)
{
    refbuf_t *refbuf;
    client_t *client;
    avl_node *client_node;

    source_init (source);

    while (global.running == ICE_RUNNING && source->running) {
        int remove_from_q;

        refbuf = get_next_buffer (source);

        remove_from_q = 0;
        source->short_delay = 0;

        if (refbuf)
        {
            /* append buffer to the in-flight data queue,  */
            if (source->stream_data == NULL)
            {
                source->stream_data = refbuf;
                source->burst_point = refbuf;
            }
            if (source->stream_data_tail)
                source->stream_data_tail->next = refbuf;
            source->stream_data_tail = refbuf;
            source->queue_size += refbuf->len;
            /* new buffer is referenced for burst */
            refbuf_addref (refbuf);

            /* new data on queue, so check the burst point */
            source->burst_offset += refbuf->len;
            while (source->burst_offset > source->burst_size)
            {
                refbuf_t *to_release = source->burst_point;

                if (to_release->next)
                {
                    source->burst_point = to_release->next;
                    source->burst_offset -= to_release->len;
                    refbuf_release (to_release);
                    continue;
                }
                break;
            }

            /* save stream to file */
            if (source->dumpfile && source->format->write_buf_to_file)
                source->format->write_buf_to_file (source, refbuf);
        }
        /* lets see if we have too much data in the queue, but don't remove it until later */
        if (source->queue_size > source->queue_size_limit)
            remove_from_q = 1;

        /* acquire write lock on pending_tree */
        avl_tree_wlock(source->pending_tree);

        /* acquire write lock on client_tree */
        avl_tree_wlock(source->client_tree);

        client_node = avl_get_first(source->client_tree);
        while (client_node) {
            client = (client_t *)client_node->key;

            send_to_listener (source, client, remove_from_q);

            if (client->con->error) {
                client_node = avl_get_next(client_node);
                if (client->respcode == 200)
                    stats_event_dec (NULL, "listeners");
                avl_delete(source->client_tree, (void *)client, _free_client);
                source->listeners--;
                DEBUG0("Client removed");
                continue;
            }
            client_node = avl_get_next(client_node);
        }

        /** add pending clients **/
        client_node = avl_get_first(source->pending_tree);
        while (client_node) {

            if(source->max_listeners != -1 && 
                    source->listeners >= (unsigned long)source->max_listeners) 
            {
                /* The common case is caught in the main connection handler,
                 * this deals with rarer cases (mostly concerning fallbacks)
                 * and doesn't give the listening client any information about
                 * why they were disconnected
                 */
                client = (client_t *)client_node->key;
                client_node = avl_get_next(client_node);
                avl_delete(source->pending_tree, (void *)client, _free_client);

                INFO0("Client deleted, exceeding maximum listeners for this "
                        "mountpoint.");
                continue;
            }
            
            /* Otherwise, the client is accepted, add it */
            avl_insert(source->client_tree, client_node->key);

            source->listeners++;
            DEBUG0("Client added");
            stats_event_inc(source->mount, "connections");

            client_node = avl_get_next(client_node);
        }

        /** clear pending tree **/
        while (avl_get_first(source->pending_tree)) {
            avl_delete(source->pending_tree, 
                    avl_get_first(source->pending_tree)->key, 
                    source_remove_client);
        }

        /* release write lock on pending_tree */
        avl_tree_unlock(source->pending_tree);

        /* update the stats if need be */
        if (source->listeners != source->prev_listeners)
        {
            source->prev_listeners = source->listeners;
            INFO2("listener count on %s now %lu", source->mount, source->listeners);
            if (source->listeners > source->peak_listeners)
            {
                source->peak_listeners = source->listeners;
                stats_event_args (source->mount, "listener_peak", "%lu", source->peak_listeners);
            }
            stats_event_args (source->mount, "listeners", "%lu", source->listeners);
            if (source->listeners == 0 && source->on_demand)
                source->running = 0;
        }

        /* lets reduce the queue, any lagging clients should of been
         * terminated by now
         */
        if (source->stream_data)
        {
            /* normal unreferenced queue data will have a refcount 1, but
             * burst queue data will be at least 2, active clients will also
             * increase refcount */
            while (source->stream_data->_count == 1)
            {
                refbuf_t *to_go = source->stream_data;

                if (to_go->next == NULL || source->burst_point == to_go)
                {
                    /* this should not happen */
                    ERROR0 ("queue state is unexpected");
                    source->running = 0;
                    break;
                }
                source->stream_data = to_go->next;
                source->queue_size -= to_go->len;
                to_go->next = NULL;
                refbuf_release (to_go);
            }
        }

        /* release write lock on client_tree */
        avl_tree_unlock(source->client_tree);
    }
    source_shutdown (source);
}
Beispiel #13
0
int
main(int argc, char **argv, char **envp)
{
	tnfctl_errcode_t	err = TNFCTL_ERR_NONE;
	int			sys_err;
	tnfctl_trace_attrs_t	trace_attrs;
	tnfctl_event_t		event = TNFCTL_EVENT_EINTR;
	pid_t			prex_pid;

	/* internationalization stuff */
	(void) setlocale(LC_ALL, "");
#if !defined(TEXT_DOMAIN)	/* Should be defined by cc -D */
#define	TEXT_DOMAIN "SYS_TEST"	/* Use this only if it weren't */
#endif
	(void) textdomain(TEXT_DOMAIN);

	g_argv = argv;

	prex_pid = getpid();
#if defined(DEBUG)
	fprintf(stderr, "### prex_pid = %d ###\n", prex_pid);
#endif
	prex_dmodel = get_data_model(prex_pid);
#if defined(DEBUG)
	fprintf(stderr, "### prex_dmodel = %d ###\n", prex_dmodel);
#endif
	scanargs(argc, argv);

	if (g_kernelmode) {
		/* prexing the kernel */
		err = tnfctl_kernel_open(&g_hndl);
		if (err) {
			err_fatal(gettext(
				"%s: trouble attaching to the kernel: %s\n"),
				argv[0], tnfctl_strerror(err));
		}
	} else {
		/* prexing a user process */
		if (g_targetpid != 0) {
			/* check data model */
			check_pid_model(argv, envp);
			/* attach case */
			err = tnfctl_pid_open(g_targetpid, &g_hndl);
			if (err == TNFCTL_ERR_NOLIBTNFPROBE) {
				err_fatal(gettext(
					"%s: missing symbols, is "
					"libtnfprobe.so loaded in target?\n"),
					argv[0], tnfctl_strerror(err));
			} else if (err) {
				err_fatal(gettext(
					"%s: trouble attaching to target "
					"process: %s\n"),
					argv[0], tnfctl_strerror(err));
			}
		} else {
			/* check elf class model */
			check_exec_model(argv, envp);
			/* exec case */
			err = tnfctl_exec_open(g_cmdname, g_cmdargs, NULL,
					g_preload, NULL, &g_hndl);
			if (err == TNFCTL_ERR_NONE)
				err = tnfctl_trace_attrs_get(g_hndl,
						&trace_attrs);
			if (err) {
				err_fatal(gettext(
					"%s: trouble creating target process: "
					"%s\n"),
					argv[0], tnfctl_strerror(err));
			}
			g_targetpid = trace_attrs.targ_pid;
		}

		sys_err = set_signal();
		if (sys_err)
			err_fatal(gettext(
				"%s: trouble setting up signal handler: %s\n"),
				argv[0], strerror(err));
	}

	/* initialize the source stack for the parser */
	source_init();

	if (!g_kernelmode) {
		/* set the tracefile name and size */
		err = set_tracefile(g_hndl);
		if (err) {
			(void) fprintf(stderr, gettext(
				"%s: trouble initializing tracefile: %s\n"),
				argv[0], tnfctl_strerror(err));
			goto Cleanup;
		}
		err = check_trace_error(g_hndl);
		if (err) {
			(void) fprintf(stderr, gettext(
				"%s: cannot read tracing status : %s\n"),
				argv[0], tnfctl_strerror(err));
			goto Cleanup;
		}
	}

	/* accept commands from stdin the first time through */
	g_getcmds = B_TRUE;

	/* set up default aliases */
	set_default_cmd();

	/* set up creator/destructor function to call for new probes */
	err = set_probe_discovery_callback(g_hndl);
	if (err) {
		(void) fprintf(stderr, gettext(
			"%s: error in probe discovery : %s\n"),
			argv[0], tnfctl_strerror(err));
		goto Cleanup;
	}

	if (g_kernelmode) {
		prbk_warn_pfilter_empty();
	}

	while (err == TNFCTL_ERR_NONE) {

		if (g_kernelmode || g_getcmds) {
			g_getcmds = B_FALSE;
			get_commands();
		}

		if (!g_kernelmode && (g_getcmds == B_FALSE)) {
		    err = tnfctl_continue(g_hndl, &event, NULL);
		    if (err) {
			(void) fprintf(stderr, gettext(
				"%s: cannot continue target : %s\n"),
				argv[0], tnfctl_strerror(err));
			goto Cleanup;
		    }
		}
		err = check_trace_error(g_hndl);
		if (err) {
			(void) fprintf(stderr, gettext(
				"%s: cannot read tracing status : %s\n"),
				argv[0], tnfctl_strerror(err));
			goto Cleanup;
		}
		if (!g_kernelmode) {
			if (event == TNFCTL_EVENT_EXEC) {
			    (void) printf(gettext(
				"Target process exec'd\n"));
			    quit(B_FALSE, B_TRUE);	/* quit resume */
			} else if (event == TNFCTL_EVENT_EXIT) {
			    /* target exited */
			    (void) fprintf(stderr, gettext(
				"%s: target process exited\n"),
				g_argv[0]);
			    goto Cleanup;
			} else if (event == TNFCTL_EVENT_TARGGONE) {
				/* target terminated */
			    (void) fprintf(stderr,
	gettext("%s: target process disappeared (without calling exit)\n"),
				g_argv[0]);
			    goto Cleanup;
			}
		}
	}

Cleanup:
	err = tnfctl_close(g_hndl, TNFCTL_TARG_DEFAULT);
	if (err)
		(void) fprintf(stderr, gettext(
			"%s: error on closing : %s\n"),
			argv[0], tnfctl_strerror(err));

	exit(0);

	return (0);

}
Beispiel #14
0
static void handle_uuid(const char *uuidstr, struct audio_device *device)
{
	uuid_t uuid;
	uint16_t uuid16;

	if (bt_string2uuid(&uuid, uuidstr) < 0) {
		error("%s not detected as an UUID-128", uuidstr);
		return;
	}

	if (!sdp_uuid128_to_uuid(&uuid) && uuid.type != SDP_UUID16) {
		error("Could not convert %s to a UUID-16", uuidstr);
		return;
	}

	uuid16 = uuid.value.uuid16;

	if (!server_is_enabled(&device->src, uuid16)) {
		DBG("server not enabled for %s (0x%04x)", uuidstr, uuid16);
		return;
	}

	switch (uuid16) {
	case HEADSET_SVCLASS_ID:
		DBG("Found Headset record");
		if (device->headset)
			headset_update(device, uuid16, uuidstr);
		else
			device->headset = headset_init(device, uuid16,
							uuidstr);
		break;
	case HEADSET_AGW_SVCLASS_ID:
		DBG("Found Headset AG record");
		break;
	case HANDSFREE_SVCLASS_ID:
		DBG("Found Handsfree record");
		if (device->headset)
			headset_update(device, uuid16, uuidstr);
		else
			device->headset = headset_init(device, uuid16,
								uuidstr);
		break;
	case HANDSFREE_AGW_SVCLASS_ID:
		DBG("Found Handsfree AG record");
		if (enabled.gateway && (device->gateway == NULL))
			device->gateway = gateway_init(device);
		break;
	case AUDIO_SINK_SVCLASS_ID:
		DBG("Found Audio Sink");
		if (device->sink == NULL)
			device->sink = sink_init(device);
		break;
	case AUDIO_SOURCE_SVCLASS_ID:
		DBG("Found Audio Source");
		if (device->source == NULL)
			device->source = source_init(device);
		break;
	case AV_REMOTE_SVCLASS_ID:
	case AV_REMOTE_TARGET_SVCLASS_ID:
		DBG("Found AV %s", uuid16 == AV_REMOTE_SVCLASS_ID ?
							"Remote" : "Target");
		if (device->control)
			control_update(device, uuid16);
		else
			device->control = control_init(device, uuid16);
		/* SS_Bluetooth(sunjo4.kim) 2012.2.16 - add for a2dp connect fail */
		//if (device->sink && sink_is_active(device))
		//	avrcp_connect(device);
                /* SS_Bluetooth(sunjo4.kim) End */
		break;
	default:
		DBG("Unrecognized UUID: 0x%04X", uuid16);
		break;
	}
}