📄 xwaves.c
字号:
Version, registry_name); xv_set(daddy, XV_LABEL, frame_label, NULL); (void) exv_attach_icon(daddy, ERL_NOBORD_ICON, "xwaves", TRANSPARENT); control_panel = xv_create(daddy, PANEL, XV_X, 0, XV_Y, 0, XV_WIDTH, WIN_EXTEND_TO_EDGE, XV_HEIGHT, WIN_EXTEND_TO_EDGE, OPENWIN_SHOW_BORDERS, FALSE, 0); window_wash(control_panel); pause_item = xv_create(control_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "PAUSE", PANEL_NOTIFY_PROC, pause_proc, XV_X, 206, XV_Y, 16,/* XV_HELP_DATA, "xwaves:pause_item", */ XV_WIDTH, 57, XV_HEIGHT, 19, 0); resume_item = xv_create(control_panel, PANEL_BUTTON, PANEL_LABEL_STRING, "CONTINUE", PANEL_NOTIFY_PROC, resume_proc, XV_X, 310, XV_Y, 16, XV_HELP_DATA, "xwaves:resume_item", XV_WIDTH, 83, XV_HEIGHT, 25, 0); newFile_item = xv_create(control_panel, PANEL_TEXT, XV_HELP_DATA, "xwaves:newFile_item", XV_X, 12, XV_Y, 52, XV_WIDTH, 306, XV_HEIGHT, 15, PANEL_VALUE_X, 94, PANEL_VALUE_Y, 52, PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_VALUE_DISPLAY_LENGTH, 29, PANEL_VALUE_STORED_LENGTH, 120, PANEL_READ_ONLY, FALSE, PANEL_LABEL_STRING, "INPUT file:", PANEL_VALUE, inputname, PANEL_NOTIFY_PROC, newText_proc, 0); outputFile_item = xv_create( control_panel, PANEL_TEXT, XV_HELP_DATA, "xwaves:outputFile_item", XV_X, 344, XV_Y, 52, XV_WIDTH, 297, XV_HEIGHT, 15, PANEL_LABEL_STRING, "OUTPUT file:", PANEL_VALUE_X, 441, PANEL_VALUE_Y, 52, PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_VALUE_DISPLAY_LENGTH, 25, PANEL_VALUE_STORED_LENGTH, 120, PANEL_READ_ONLY, FALSE, PANEL_VALUE, outputname, PANEL_NOTIFY_PROC, newText_proc, PANEL_EVENT_PROC, show_output_proc, 0); newObj_item = xv_create( control_panel, PANEL_TEXT, XV_HELP_DATA, "wtest:newObj_item", XV_X, 12, XV_Y, 20, XV_WIDTH, 170, XV_HEIGHT, 15, PANEL_LABEL_STRING, "OBJECT name:", PANEL_VALUE_X, 118, PANEL_VALUE_Y, 20, PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_VALUE_DISPLAY_LENGTH, 8, PANEL_VALUE_STORED_LENGTH, 80, PANEL_READ_ONLY, FALSE, PANEL_VALUE, objectname, 0); attach_panel = add_attach_choices(control_panel, 344, 80, attachments); overlay_item = xv_create(control_panel, PANEL_TEXT, XV_HELP_DATA, "xwaves:overlay_item", XV_X, 12, XV_Y, 80, XV_WIDTH, 316, XV_HEIGHT, 15, PANEL_LABEL_STRING, "Overlay name:", PANEL_VALUE_X, 120, PANEL_VALUE_Y, 80, PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_VALUE_DISPLAY_LENGTH, 26, PANEL_VALUE_STORED_LENGTH, 120, PANEL_READ_ONLY, FALSE, PANEL_NOTIFY_PROC, newText_proc, PANEL_VALUE, overlayname, 0);/* help_item = xv_create(control_panel, PANEL_BUTTON, XV_HELP_DATA, "xwaves:help_item", XV_X, 382, XV_Y, 16, XV_WIDTH, 51, XV_HEIGHT, 19, PANEL_LABEL_STRING, "HELP!", XV_KEY_DATA, EXVK_HELP_NAME, FIND_WAVES_LIB(NULL, "xwaves.help"), XV_KEY_DATA, EXVK_HELP_TITLE, "xwaves help", PANEL_NOTIFY_PROC, exv_get_help, 0);*/ help_item = xv_create(control_panel, PANEL_BUTTON, XV_HELP_DATA, "xwaves:man_help_item", XV_X, 451, XV_Y, 16, XV_WIDTH, 119, XV_HEIGHT, 25, PANEL_LABEL_STRING, "xwaves MANUAL", XV_KEY_DATA, EXVK_HELP_NAME, FIND_WAVES_LIB(NULL, "xwaves.man"), XV_KEY_DATA, EXVK_HELP_TITLE, "xwaves manual page", PANEL_NOTIFY_PROC, exv_get_help, 0); quit_item = xv_create(control_panel, PANEL_BUTTON, XV_HELP_DATA, "xwaves:quit_item", XV_X, 588, XV_Y, 16, XV_WIDTH, 52, XV_HEIGHT, 25, PANEL_LABEL_STRING, "QUIT!", PANEL_NOTIFY_PROC, quit_proc, 0); newControl_item = xv_create(control_panel, PANEL_TEXT, XV_HELP_DATA, "xwaves:newControl_item", XV_X, 12, XV_Y, 108, XV_WIDTH, 631, XV_HEIGHT, 15, PANEL_VALUE_X, 163, PANEL_VALUE_Y, 108, PANEL_LAYOUT, PANEL_HORIZONTAL, PANEL_VALUE_DISPLAY_LENGTH, 60, PANEL_VALUE_STORED_LENGTH, 200, PANEL_READ_ONLY, FALSE, PANEL_NOTIFY_PROC, newText_proc, PANEL_LABEL_STRING, "COMMAND (or @file):", PANEL_VALUE, commandname, 0); init_print_setup_window(); identify_visual(); /* change to hard wire in waves as the initial object name */ if((program.name = savestring("waves"))) { program.methods = &bmeth1; window_fit(control_panel); window_fit(daddy); /* Process funcname before init_file; otherwise, if init_file starts an attachment, funcname gets set as a side effect, and the attachment gets started twice. */ if(*funcname) start_external_function(funcname); if(server_mode) (void)meth_enable_server(NULL,NULL); if(*init_file && strcmp(init_file, "/dev/null")) { char *act_init_file = malloc(MAXPATHLEN); if (FIND_WAVES_COMMAND(act_init_file,init_file)) { strcpy(commandname, "@"); strcat(commandname, act_init_file); panel_set_value(newControl_item, commandname); command_proc(newControl_item, EVENT_NULL); } else { sprintf(notice_msg, "Cannot find init_file %s", init_file); show_notice(0,notice_msg); } free(act_init_file); } if(ac > optind + 50) ac = optind + 50; /* some protection against */ /* too many windows... */ for(i = optind; i < ac; i++) if((av[i][0] == '-') && !av[i][1]) { strcpy(commandname, "@stdin"); panel_set_value(newControl_item, commandname); command_proc(newControl_item, EVENT_NULL); break; } else { char *cmd_file = FIND_WAVES_COMMAND(NULL, av[i]); if(cmd_file && is_a_command_file(cmd_file)) { strcpy(commandname, "@"); strcat(commandname, cmd_file); panel_set_value(newControl_item, commandname); command_proc(newControl_item, EVENT_NULL); } else { strcpy(inputname, av[i]); (void)apply_waves_input_path(inputname, inputname); panel_set_value(newFile_item, inputname); create_new_signal_view(inputname); } if(cmd_file) free(cmd_file); } if (ctlwin_iconized) { xv_set(daddy, FRAME_CLOSED, TRUE, 0); } window_main_loop(daddy); } else { printf("Problems initializing main program object\n");#ifndef NO_LIC lm_quit();#endif exit(-1); }}/*************************************************************************/void doub_proc(item, event) Panel_item item; Event *event;{ double val; #define PNZ_VAL(x) (x = (val > 0.0)? val : x) sscanf((char*)panel_get_value(item),"%lf", &val); }/*********************************************************************/voidrescale_it(c, w, h) Canvas c; int w, h;{ View *v; if (debug_level) { Frame frame; Xv_Window pw; fprintf(stderr, "rescale_it(c, %d, %d)\n", w, h); pw = canvas_paint_window(c); fprintf(stderr, "Paint window has XV_WIDTH %d, XV_HEIGHT %d.\n", (int) xv_get(pw, XV_WIDTH), (int) xv_get(pw, XV_HEIGHT)); fprintf(stderr, "Canvas has XV_WIDTH %d, XV_HEIGHT %d.\n", (int) xv_get(c, XV_WIDTH), (int) xv_get(c, XV_HEIGHT)); frame = (Frame) xv_get(c, XV_OWNER); fprintf(stderr, "Frame has XV_WIDTH %d, XV_HEIGHT %d.\n", (int) xv_get(frame, XV_WIDTH), (int) xv_get(frame, XV_HEIGHT)); } if (w && (v = (View*)xv_get(c, WIN_CLIENT_DATA))) { *(v->x_scale) *= ((double) (v->width - *v->x_offset))/(w - *v->x_offset); v->width = w; v->height = h; }}/*********************************************************************/View *create_new_signal_view(name) char *name;{ static Frame frame, sfr; Canvas canvas; Scrollbar scrollbar; Xv_Cursor cursor; Rect *rec; char head[100]; Signal *sig, *get_any_signal(); Object *ob; int fd; extern int cmap_depth; double dur; View *v; int width, height; Object *find_object(); S_bar *new_scrollbar(); char *remove_ext(); extern Visual *visual_ptr; if (debug_level) (void) fprintf(stderr, "create_new_signal_view: function entered\n"); /* get object name (if any) *//* objectname[0] = '\0'; /* re-init name string */ sscanf((char *)panel_get_value(newObj_item),"%s",objectname); if (!objectname[0]) { /* defaults filename - extension */ strncpy(objectname,remove_ext(name),99); panel_set_value(newObj_item,objectname); } if((sig = get_any_signal(expand_name(NULL,name),ref_start,ref_size,NULL))) { close_sig_file(sig); /* to conserve open file numbers */ if(!(ob = find_object(objectname))) { if(!(ob = new_object(objectname, sig))) { show_notice(1,"Cannot create a new object in create_new_signal_view"); return(NULL); } link_new_object(ob); } else link_new_signal(ob,sig); strcpy(inputname,name); /* check for special types */ if ((sig->type & SPECIAL_SIGNALS) == SIG_SPECTROGRAM) { return((View*)new_spect_display(sig)); } width = (new_width > 0) ? new_width : def_w_width; height = (new_height > 0) ? new_height : def_w_height; if (debug_level) fprintf(stderr, "Creating frame with XV_WIDTH %d, XV_HEIGHT %d.\n", width, height); if(do_color) frame = xv_create(XV_NULL, FRAME, XV_VISUAL, visual_ptr, XV_WIDTH, width + 2*FRAME_MARGIN, XV_HEIGHT, height + FRAME_HEADER + FRAME_MARGIN, FRAME_INHERIT_COLORS, FALSE, XV_SHOW, FALSE, FRAME_NO_CONFIRM, TRUE, XV_X, next_x, XV_Y, next_y, 0); else frame = xv_create(XV_NULL, FRAME, XV_WIDTH, width + 2*FRAME_MARGIN, XV_HEIGHT, height + FRAME_HEADER + FRAME_MARGIN, XV_LABEL, head, XV_SHOW, FALSE, FRAME_INHERIT_COLORS, TRUE, FRAME_NO_CONFIRM, TRUE, XV_X, next_x, XV_Y, next_y, 0); if(!window_check_return(frame)) return(NULL); next_x += w_x_incr; next_y += w_y_incr; if((next_y+def_w_height) > SCREEN_HEIGHT) { next_y = 120; next_x = 10; } canvas = xv_create(frame, CANVAS, CANVAS_RETAINED, FALSE, CANVAS_FIXED_IMAGE, FALSE,/* WIN_DEPTH, cmap_depth, */ CANVAS_AUTO_SHRINK, TRUE, CANVAS_AUTO_EXPAND, TRUE, OPENWIN_NO_MARGIN, TRUE, XV_WIDTH, WIN_EXTEND_TO_EDGE, XV_HEIGHT, WIN_EXTEND_TO_EDGE, WIN_MENU, wave_menu, XV_KEY_DATA, menu_item_key, find_operator(wave_get_ops(),"play between marks"), CANVAS_CMS_REPAINT, FALSE, CANVAS_PAINTWINDOW_ATTRS, XV_VISUAL, visual_ptr, WIN_DEPTH, cmap_depth, 0, CANVAS_NO_CLIPPING, TRUE, 0); xv_set(canvas_paint_window(canvas), WIN_CONSUME_EVENTS, LOC_DRAG, WIN_IN_TRANSIT_EVENTS, WIN_MOUSE_BUTTONS, LOC_MOVE, LOC_WINEXIT, LOC_WINENTER, KBD_USE, KBD_DONE, WIN_ASCII_EVENTS, 0, WIN_EVENT_PROC, doit, WIN_BIT_GRAVITY, ForgetGravity, 0); if(!window_check_return(canvas )) { dt_xv_destroy_safe(16,frame); return(NULL); } cmap(canvas); /* kill_signal_view wasn't getting called when interposed on canvas, so * interpose on frame. But function has to be able to find canvas to * get its WIN_CLIENT_DATA. */ notify_interpose_destroy_func(frame, kill_signal_view); xv_set(frame, WIN_CLIENT_DATA, (caddr_t) canvas, 0); if((v = setup_view(sig, canvas))) { v->next = sig->views; sig->views = v; update_window_titles(sig); xv_set(canvas, WIN_CLIENT_DATA, sig->views, /* Don't set repaint and resize procs in original xv_create since xv_create might call the repaint proc prematurely. */ CANVAS_REPAINT_PROC, repaint, CANVAS_RESIZE_PROC, rescale_it, 0); (void) exv_attach_icon(frame, SINE_ICON, basename(name), TRANSPARENT); xv_set(frame, XV_SHOW, TRUE, 0); sig->views->scrollbar = new_scrollbar(sig->views); return(v); } else show_notice(1, "Cannot setup signal views in create_new_signal_view"); } else { sprintf(notice_msg,"Cannot open file %s in create_new_signal_view",name); show_notice(1,notice_msg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -