1 #include "snd.h" 2 #include "snd-menu.h" 3 #include "snd-file.h" 4 5 void cleanup_file_monitor(void) {} 6 void *unmonitor_file(void *watcher) {return(NULL);} 7 void monitor_sound(snd_info *sp) {} 8 9 bool find_dialog_is_active(void) {return(false);} 10 void snd_help_back_to_top(void) {} 11 color_t get_in_between_color(color_t fg, color_t bg) {return(0);} 12 void save_find_dialog_state(FILE *fd) {} 13 void check_menu_labels(int key, int state, bool extended) {} 14 int add_channel_window(snd_info *sound, int channel, int chan_y, int insertion, widget_t main, fw_button_t arrows, bool with_events) {return(0);} 15 int snd_help(const char *subject, const char *help, with_word_wrap_t with_wrap) {fprintf(stdout, "%s", help); return(0);} 16 int snd_help_with_xrefs(const char *subject, const char *helpstr, with_word_wrap_t with_wrap, const char **xrefs, const char **urls) {return(0);} 17 void snd_help_append(const char *text) {fprintf(stdout, "%s", text);} 18 int help_text_width(const char *txt, int start, int end) {return(0);} 19 widget_t post_it(const char *subject, const char *str) {fprintf(stdout, "%s", str); return(0);} 20 void save_post_it_dialog_state(FILE *fd) {} 21 void reflect_just_sounds(void) {} 22 void reflect_save_as_src(bool val) {} 23 void reflect_save_as_auto_comment(bool val) {} 24 void reflect_save_as_sound_selection(const char *sound_name) {} 25 void save_file_dialog_state(FILE *fd) {} 26 void draw_line(graphics_context *ax, int x0, int y0, int x1, int y1) {} 27 void fill_rectangle(graphics_context *ax, int x0, int y0, int width, int height) {} 28 void fill_polygon(graphics_context *ax, int points, ...) {} 29 void fill_polygons(graphics_context *ax, point_t *points, int num, int y0) {} 30 void fill_two_sided_polygons(graphics_context *ax, point_t *points, point_t *points1, int num) {} 31 void draw_string(graphics_context *ax, int x0, int y0, const char *str, int len) {} 32 void draw_dot(graphics_context *ax, int x, int y, int size) {} 33 void save_colors(FILE *Fp) {} 34 void erase_rectangle(chan_info *cp, graphics_context *ax, int x0, int y0, int width, int height) {} 35 void setup_graphics_context(chan_info *cp, graphics_context *ax) {} 36 void draw_spectro_line(graphics_context *ax, int color, int x0, int y0, int x1, int y1) {} 37 void allocate_color_map(int colormap) {} 38 void allocate_sono_rects(int size) {} 39 void set_with_gl(bool val, bool dpys) {} 40 void set_sono_rectangle(int j, int color, int x, int y, int width, int height) {} 41 void draw_sono_rectangles(graphics_context *ax, int color, int jmax) {} 42 void draw_colored_lines(chan_info *cp, graphics_context *ax, point_t *points, int num, int *colors, int axis_y0, color_t default_color) {} 43 widget_t make_color_orientation_dialog(bool managed) {return(0);} 44 void set_color_scale(mus_float_t val) {} 45 void set_color_inverted(bool val) {} 46 void set_color_cutoff(mus_float_t val) {} 47 void set_spectro_hop(int val) {} 48 void set_spectro_x_angle(mus_float_t val) {} 49 void set_spectro_y_angle(mus_float_t val) {} 50 void set_spectro_z_angle(mus_float_t val) {} 51 void set_spectro_x_scale(mus_float_t val) {} 52 void set_spectro_y_scale(mus_float_t val) {} 53 void set_spectro_z_scale(mus_float_t val) {} 54 void set_spectrum_end(mus_float_t val) {} 55 void set_spectrum_start(mus_float_t val) {} 56 bool color_orientation_dialog_is_active(void) {return(false);} 57 void reflect_spectro(void) {} 58 void reflect_peaks_in_transform_dialog(void) {} 59 void reflect_log_freq_start_in_transform_dialog(void) {} 60 void reflect_min_db_in_transform_dialog(void) {} 61 void listener_append_and_prompt(const char *msg) {fprintf(stderr, "%s", msg);} 62 void goto_listener(void) {} 63 int save_listener_text(FILE *fp) {return(0);} 64 void append_listener_text(int end, const char *msg) {} 65 void listener_append(const char *msg) {fprintf(stderr, "%s", msg);} 66 void handle_listener(bool new_state) {} 67 bool listener_exists(void) {return(false);} 68 int listener_height(void) {return(0);} 69 int listener_width(void) {return(0);} 70 void set_button_label(int label, const char *str) {} 71 int g_add_to_main_menu(const char *label, int slot) {return(0);} 72 widget_t g_add_to_menu(int which_menu, const char *label, int callb, int position) {return(0);} 73 int g_remove_from_menu(int which_menu, const char *label) {return(0);} 74 void reflect_play_selection_stop(void) {} 75 int make_transform_dialog(bool managed) {return(0);} 76 bool transform_dialog_is_active(void) {return(false);} 77 void set_show_transform_peaks(bool val) {} 78 void set_fft_log_magnitude(bool val) {} 79 void set_fft_with_phases(bool val) {} 80 void set_fft_log_frequency(bool val) {} 81 void set_transform_normalization(fft_normalize_t val) {} 82 void set_show_selection_transform(bool show) {} 83 void reflect_regions_in_region_browser(void) {} 84 void reflect_selection_in_save_as_dialog(bool on) {} 85 void reflect_no_regions_in_region_browser(void) {} 86 int update_region_browser(bool grf_too) {return(0);} 87 bool region_browser_is_active(void) {return(false);} 88 void delete_region_and_update_browser(int n) {} 89 void reflect_play_region_stop(int n) {} 90 bool region_dialog_is_active(void) {return(false);} 91 void allocate_region_rows(int n) {} 92 void reflect_region_graph_style(void) {} 93 bool set_tiny_font(const char *font) {if (ss->Tiny_Font) free(ss->Tiny_Font); ss->Tiny_Font = mus_strdup(font); return(false);} 94 bool set_listener_font(const char *font) {if (ss->Listener_Font) free(ss->Listener_Font); ss->Listener_Font = mus_strdup(font); return(false);} 95 bool set_peaks_font(const char *font) {if (ss->Peaks_Font) free(ss->Peaks_Font); ss->Peaks_Font = mus_strdup(font); return(false);} 96 bool set_bold_peaks_font(const char *font) {if (ss->Bold_Peaks_Font) free(ss->Bold_Peaks_Font); ss->Bold_Peaks_Font = mus_strdup(font); return(false);} 97 bool set_axis_label_font(const char *font) {if (ss->Axis_Label_Font) free(ss->Axis_Label_Font); ss->Axis_Label_Font = mus_strdup(font); return(false);} 98 bool set_axis_numbers_font(const char *font) {if (ss->Axis_Numbers_Font) free(ss->Axis_Numbers_Font); ss->Axis_Numbers_Font = mus_strdup(font); return(false);} 99 int label_width(const char *txt, bool use_tiny_font) {return(0);} 100 int number_width(const char *num, bool use_tiny_font) {return(0);} 101 int number_height(int fnt) {return(0);} 102 int label_height(bool use_tiny_font) {return(0);} 103 int mark_name_width(const char *txt) {return(0);} 104 void clear_window(graphics_context *ax) {} 105 void set_title(const char *title) {} 106 void goto_window(int text) {} 107 void check_for_event(void) {} 108 void recolor_graph(chan_info *cp, bool selected) {} 109 void set_sensitive(int wid, bool val) {} 110 void set_toggle_button(int wid, bool val, bool passed, void *data) {} 111 int widget_height(int w) {return(0);} 112 int widget_width(int w) {return(0);} 113 void set_widget_size(int w, int width, int height) {} 114 int widget_x(int w) {return(0);} 115 int widget_y(int w) {return(0);} 116 void set_widget_x(int w, int x) {} 117 void set_widget_y(int w, int y) {} 118 void set_open_file_play_button(bool val) {} 119 int channel_w(chan_info *cp) {return(0);} 120 int channel_f(chan_info *cp) {return(0);} 121 int channel_graph(chan_info *cp) {return(0);} 122 bool channel_graph_is_visible(chan_info *cp) {return(false);} /* maybe this should be true? */ 123 void change_gzy(mus_float_t val, chan_info *cp) {} 124 mus_float_t gsy_value(chan_info *cp) {return(0.0);} 125 mus_float_t gsy_size(chan_info *cp) {return(0.0);} 126 void initialize_scrollbars(chan_info *cp) {} 127 void set_z_scrollbars(chan_info *cp, axis_info *ap) {} 128 void resize_sx(chan_info *cp) {} 129 void resize_sy(chan_info *cp) {} 130 void resize_sy_and_zy(chan_info *cp) {} 131 void resize_sx_and_zx(chan_info *cp) {} 132 void channel_open_pane(chan_info *cp) {} 133 void reflect_edit_history_change(chan_info *cp) {} 134 void reflect_edit_counter_change(chan_info *cp) {} 135 void set_peak_numbers_font(chan_info *cp, graphics_context *ax) {} 136 void set_bold_peak_numbers_font(chan_info *cp, graphics_context *ax) {} 137 void set_tiny_numbers_font(chan_info *cp, graphics_context *ax) {} 138 color_t get_foreground_color(graphics_context *ax) {return(0);} 139 void set_foreground_color(graphics_context *ax, int color) {} 140 void change_channel_style(snd_info *sp, channel_style_t new_style) {} 141 void cleanup_cw(chan_info *cp) {} 142 void set_status(snd_info *sp, const char *str, bool update) {if ((str) && (*str)) fprintf(stderr, "%s", str);} 143 void snd_info_cleanup(snd_info *sp) {} 144 void toggle_expand_button(snd_info *sp, bool state) {} 145 void toggle_contrast_button(snd_info *sp, bool state) {} 146 void toggle_reverb_button(snd_info *sp, bool state) {} 147 void toggle_filter_button(snd_info *sp, bool state) {} 148 void toggle_direction_arrow(snd_info *sp, bool state) {} 149 void filter_env_changed(snd_info *sp, env *e) {} 150 void set_play_button(snd_info *sp, bool val) {} 151 void play_button_pause(bool pausing) {} 152 void syncb(snd_info *sp, int on) {sp->sync = on; if (on > ss->sound_sync_max) ss->sound_sync_max = on;} 153 void show_lock(snd_info *sp) {} 154 void hide_lock(snd_info *sp) {} 155 void start_bomb(snd_info *sp) {} 156 void stop_bomb(snd_info *sp) {} 157 void set_sound_pane_file_label(snd_info *sp, const char *str) {} 158 void reflect_sound_selection(snd_info *sp) {} 159 void show_controls(snd_info *sp) {} 160 void hide_controls(snd_info *sp) {} 161 bool showing_controls(snd_info *sp) {return(false);} 162 void start_progress_report(chan_info *cp) {} 163 void finish_progress_report(chan_info *cp) {} 164 void progress_report(chan_info *cp, mus_float_t pct) {} 165 char *get_file_dialog_sound_attributes(file_data *fdat, int *srate, int *chans, mus_header_t *header_type, 166 mus_sample_t *sample_type, mus_long_t *location, mus_long_t *samples, int min_chan) {return(NULL);} 167 widget_t make_new_file_dialog(bool managed) {return(0);} 168 int edit_header(snd_info *sp) {return(0);} 169 void save_edit_header_dialog_state(FILE *fd) {} 170 widget_t make_selection_save_as_dialog(bool managed) {return(0);} 171 widget_t make_region_save_as_dialog(bool managed) {return(0);} 172 widget_t make_sound_save_as_dialog(bool managed) {return(0);} 173 widget_t make_file_print_dialog(bool managed, bool direct_to_printer) {return(0);} 174 axis_info *enved_make_axis(const char *name, graphics_context *ax, int ex0, int ey0, int width, int height, 175 mus_float_t xmin, mus_float_t xmax, mus_float_t ymin, mus_float_t ymax, printing_t printing) {return(NULL);} 176 void display_enved_env_with_selection(env *e, const char *name, int x0, int y0, int width, int height, bool dots, printing_t printing) {} 177 void set_enved_redo_sensitive(bool val) {} 178 void set_enved_revert_sensitive(bool val) {} 179 void set_enved_undo_sensitive(bool val) {} 180 void set_enved_save_sensitive(bool val) {} 181 void set_enved_show_sensitive(bool val) {} 182 void enved_reflect_selection(bool on) {} 183 void make_scrolled_env_list(void) {} 184 void enved_reflect_peak_env_completion(snd_info *sp) {} 185 void new_active_channel_alert(void) {} 186 void env_redisplay(void) {} 187 void env_redisplay_with_print(void) {} 188 void update_enved_background_waveform(chan_info *cp) {} 189 int create_envelope_editor(void) {return(0);} 190 void set_enved_clipping(bool val) {} 191 void reflect_enved_style(void) {} 192 void set_enved_base(mus_float_t val) {} 193 void set_enved_target(enved_target_t val) {} 194 void set_enved_with_wave(bool val) {} 195 void set_enved_in_dB(bool val) {} 196 bool enved_dialog_is_active(void) {return(false);} 197 void set_enved_filter_order(int order) {} 198 widget_t make_open_file_dialog(read_only_t read_only, bool managed) {return(0);} 199 widget_t make_mix_file_dialog(bool managed) {return(0);} 200 widget_t make_insert_file_dialog(bool managed) {return(0);} 201 void clear_listener(void) {} 202 int menu_widget(int which_menu) {return(0);} 203 void get_current_color(int colormap, int j, rgb_t *r, rgb_t *g, rgb_t *b) {} 204 void set_filter_text(snd_info *sp, const char *str) {} 205 void display_filter_env(snd_info *sp) {} 206 void reflect_mix_change(int mix_id) {} 207 int make_mix_dialog(void) {return(0);} 208 void reflect_mix_play_stop(void) {} 209 void set_mix_color(int color) {} 210 int mix_dialog_mix(void) {return(0);} 211 void mix_dialog_set_mix(int id) {} 212 void set_fft_window_alpha(mus_float_t val) {in_set_fft_window_alpha(val);} 213 void set_fft_window_beta(mus_float_t val) {in_set_fft_window_beta(val);} 214 void set_transform_size(mus_long_t val) {in_set_transform_size(val);} 215 void set_fft_window(mus_fft_window_t val) {in_set_fft_window(val);} 216 void set_transform_type(int val) {in_set_transform_type(val);} 217 void set_wavelet_type(int val) {in_set_wavelet_type(val);} 218 void make_transform_type_list(void) {} 219 void set_transform_graph_type(graph_type_t val) {in_set_transform_graph_type(val);} 220 void set_amp(snd_info *sp, mus_float_t val) {sp->amp_control = val;} 221 void set_expand(snd_info *sp, mus_float_t val) {sp->expand_control = val;} 222 void set_contrast(snd_info *sp, mus_float_t val) {sp->contrast_control = val;} 223 void set_speed(snd_info *sp, mus_float_t val) {sp->speed_control = val;} 224 void set_revlen(snd_info *sp, mus_float_t val) {sp->reverb_control_length = val;} 225 void set_revscl(snd_info *sp, mus_float_t val) {sp->reverb_control_scale = val;} 226 void set_filter_order(snd_info *sp, int val) {sp->filter_control_order = val;} 227 void set_filter_in_dB(snd_info *sp, bool val) {sp->filter_control_in_dB = val;} 228 void set_filter_in_hz(snd_info *sp, bool val) {sp->filter_control_in_hz = val;} 229 void post_basic_popup_menu(void *ev) {} 230 void post_lisp_popup_menu(void *ev) {} 231 void post_fft_popup_menu(void *ev) {} 232 void post_selection_popup_menu(void *ev) {} 233 void ensure_scrolled_window_row_visible(widget_t list, int pos, int num_rows) {} 234 widget_t make_preferences_dialog(void) {return(NULL_WIDGET);} 235 void update_sound_label(snd_info *sp) {} 236 237 void auto_update_restart(void) {} 238 239 #if HAVE_SCHEME 240 static s7_pointer top_level_let = NULL; 241 static s7_pointer g_top_level_let(s7_scheme *sc, s7_pointer args) 242 { 243 return(top_level_let); 244 } 245 246 static s7_pointer g_set_top_level_let(s7_scheme *sc, s7_pointer args) 247 { 248 top_level_let = s7_car(args); 249 return(top_level_let); 250 } 251 #endif 252 253 snd_info *add_sound_window(char *filename, read_only_t read_only, file_info *hdr) 254 { 255 snd_info *sp; 256 int snd_slot, nchans, i; 257 bool free_filename = false; 258 259 if (ss->translated_filename) 260 { 261 filename = ss->translated_filename; 262 free_filename = true; 263 ss->translated_filename = NULL; 264 } 265 266 nchans = hdr->chans; 267 if (nchans <= 0) nchans = 1; 268 269 if (nchans > MUS_MAX_CHANS) 270 { 271 /* either a screwed up header, or Snd was built with wrong endianness */ 272 /* this kind of error is trapped by raw_data_explanation in make_file_info in the motif cases */ 273 fprintf(stderr, "%s has %d channels? ", filename, nchans); 274 if (mus_char_to_bint((unsigned char *)&nchans) < 8) 275 fprintf(stderr, "byte swap problem: chans should be %d", mus_char_to_bint((unsigned char *)&nchans)); 276 if (mus_char_to_lint((unsigned char *)&nchans) < 8) 277 fprintf(stderr, "byte swap problem: chans should be %d", mus_char_to_lint((unsigned char *)&nchans)); 278 nchans = 1; /* ?? */ 279 } 280 281 snd_slot = find_free_sound_slot(nchans); /* expands sound list if needed */ 282 ss->sounds[snd_slot] = make_snd_info(ss->sounds[snd_slot], filename, hdr, snd_slot, read_only); 283 sp = ss->sounds[snd_slot]; 284 285 sp->write_date = file_write_date(filename); /* needed early in this process by the peak-env handlers */ 286 for (i = 0; i < nchans; i++) sp->chans[i] = make_chan_info(sp->chans[i], i, sp); 287 add_sound_data(filename, sp, WITHOUT_GRAPH); 288 after_open(sp); 289 290 if (free_filename) free(filename); 291 return(sp); 292 } 293 294 #if USE_NOTCURSES 295 #include "nrepl.c" 296 #endif 297 298 static char **auto_open_file_names = NULL; 299 static int auto_open_files = 0; 300 static bool noglob = false, noinit = false, nostdin = false; 301 302 #ifndef _MSC_VER 303 #include <setjmp.h> 304 305 static jmp_buf top_level_jump; 306 void top_level_catch(int ignore); 307 void top_level_catch(int ignore) 308 { 309 siglongjmp(top_level_jump, 1); 310 } 311 #endif 312 313 314 #define FALLBACK_FONT "9x15" 315 static Xen colormap_temp[16]; /* static for Ruby's sake */ 316 317 void snd_doit(int argc, char **argv) 318 { 319 static int auto_open_ctr = 0; 320 int i; 321 ss->axis_color_set = false; 322 323 #if HAVE_SCHEME 324 xen_s7_set_repl_prompt("snd> "); 325 #endif 326 327 Xen_define_variable("black-and-white-colormap", colormap_temp[0], C_int_to_Xen_integer(0)); 328 Xen_define_variable("gray-colormap", colormap_temp[1], C_int_to_Xen_integer(1)); 329 Xen_define_variable("hot-colormap", colormap_temp[2], C_int_to_Xen_integer(2)); 330 Xen_define_variable("cool-colormap", colormap_temp[3], C_int_to_Xen_integer(3)); 331 Xen_define_variable("bone-colormap", colormap_temp[4], C_int_to_Xen_integer(4)); 332 Xen_define_variable("copper-colormap", colormap_temp[5], C_int_to_Xen_integer(5)); 333 Xen_define_variable("pink-colormap", colormap_temp[6], C_int_to_Xen_integer(6)); 334 Xen_define_variable("jet-colormap", colormap_temp[7], C_int_to_Xen_integer(7)); 335 Xen_define_variable("prism-colormap", colormap_temp[8], C_int_to_Xen_integer(8)); 336 Xen_define_variable("autumn-colormap", colormap_temp[9], C_int_to_Xen_integer(9)); 337 Xen_define_variable("winter-colormap", colormap_temp[10], C_int_to_Xen_integer(10)); 338 Xen_define_variable("spring-colormap", colormap_temp[11], C_int_to_Xen_integer(11)); 339 Xen_define_variable("summer-colormap", colormap_temp[12], C_int_to_Xen_integer(12)); 340 Xen_define_variable("rainbow-colormap", colormap_temp[13], C_int_to_Xen_integer(13)); 341 Xen_define_variable("flag-colormap", colormap_temp[14], C_int_to_Xen_integer(14)); 342 Xen_define_variable("phases-colormap", colormap_temp[15], C_int_to_Xen_integer(15)); 343 344 #if HAVE_SCHEME 345 Xen_eval_C_string("(define " S_color_hook " (make-hook))"); 346 Xen_eval_C_string("(define " S_drop_hook " (make-hook 'name))"); 347 Xen_eval_C_string("(define " S_listener_click_hook " (make-hook 'position)) "); 348 Xen_eval_C_string("(define " S_mouse_enter_graph_hook " (make-hook 'snd 'chn))"); 349 Xen_eval_C_string("(define " S_mouse_enter_label_hook " (make-hook 'type 'position 'label))"); 350 Xen_eval_C_string("(define " S_mouse_enter_listener_hook " (make-hook 'widget))"); 351 Xen_eval_C_string("(define " S_mouse_enter_text_hook " (make-hook 'widget))"); 352 Xen_eval_C_string("(define " S_mouse_leave_graph_hook " (make-hook 'snd 'chn))"); 353 Xen_eval_C_string("(define " S_mouse_leave_label_hook " (make-hook 'type 'position 'label))"); 354 Xen_eval_C_string("(define " S_mouse_leave_listener_hook " (make-hook 'widget))"); 355 Xen_eval_C_string("(define " S_mouse_leave_text_hook " (make-hook 'widget))"); 356 Xen_eval_C_string("(define " S_new_widget_hook " (make-hook 'widget))"); 357 Xen_eval_C_string("(define " S_orientation_hook " (make-hook))"); 358 359 Xen_eval_C_string("(define " S_copy_context " 0)"); 360 Xen_eval_C_string("(define " S_cursor_context " 3)"); 361 Xen_eval_C_string("(define " S_lisp_graph " 2)"); 362 Xen_eval_C_string("(define " S_mark_context " 4)"); 363 Xen_eval_C_string("(define " S_selection_context " 2)"); 364 Xen_eval_C_string("(define " S_time_graph " 0)"); 365 Xen_eval_C_string("(define " S_transform_graph " 1)"); 366 367 Xen_eval_C_string("(define " S_basic_color " (dilambda (lambda () #f) (lambda (val) val)))"); 368 Xen_eval_C_string("(define " S_colormap " (dilambda (lambda () #f) (lambda (val) val)))"); 369 Xen_eval_C_string("(define " S_colormap_size " (dilambda (lambda () #f) (lambda (val) val)))"); 370 Xen_eval_C_string("(define " S_cursor_color " (dilambda (lambda () #f) (lambda (val) val)))"); 371 Xen_eval_C_string("(define " S_data_color " (dilambda (lambda () #f) (lambda (val) val)))"); 372 Xen_eval_C_string("(define " S_enved_envelope " (dilambda (lambda () #f) (lambda (val) val)))"); 373 Xen_eval_C_string("(define " S_enved_filter " (dilambda (lambda () #f) (lambda (val) val)))"); 374 Xen_eval_C_string("(define " S_enved_waveform_color " (dilambda (lambda () #f) (lambda (val) val)))"); 375 Xen_eval_C_string("(define " S_filter_control_waveform_color " (dilambda (lambda () #f) (lambda (val) val)))"); 376 Xen_eval_C_string("(define " S_graph_color " (dilambda (lambda () #f) (lambda (val) val)))"); 377 Xen_eval_C_string("(define " S_graph_cursor " (dilambda (lambda () #f) (lambda (val) val)))"); 378 Xen_eval_C_string("(define " S_listener_color " (dilambda (lambda () #f) (lambda (val) val)))"); 379 Xen_eval_C_string("(define " S_listener_text_color " (dilambda (lambda () #f) (lambda (val) val)))"); 380 Xen_eval_C_string("(define " S_axis_color " (dilambda (lambda () #f) (lambda (val) val)))"); 381 Xen_eval_C_string("(define " S_mark_color " (dilambda (lambda args #f) (lambda args #f)))"); 382 Xen_eval_C_string("(define " S_mix_color " (dilambda (lambda args #f) (lambda args #f)))"); 383 Xen_eval_C_string("(define " S_combined_data_color " (dilambda (lambda args #f) (lambda args #f)))"); 384 Xen_eval_C_string("(define " S_position_color " (dilambda (lambda () #f) (lambda (val) val)))"); 385 Xen_eval_C_string("(define " S_foreground_color " (dilambda (lambda args #f) (lambda args (car args))))"); 386 Xen_eval_C_string("(define " S_sash_color " (dilambda (lambda () #f) (lambda (val) val)))"); 387 Xen_eval_C_string("(define " S_selected_data_color " (dilambda (lambda () #f) (lambda (val) val)))"); 388 Xen_eval_C_string("(define " S_selected_graph_color " (dilambda (lambda () #f) (lambda (val) val)))"); 389 Xen_eval_C_string("(define " S_text_focus_color " (dilambda (lambda () #f) (lambda (val) val)))"); 390 Xen_eval_C_string("(define " S_x_axis_label " (dilambda (lambda args \"\") (lambda args \"\")))"); 391 Xen_eval_C_string("(define " S_y_axis_label " (dilambda (lambda args \"\") (lambda args \"\")))"); 392 Xen_eval_C_string("(define " S_zoom_color " (dilambda (lambda () #f) (lambda (val) val)))"); 393 Xen_eval_C_string("(define " S_widget_size " (dilambda (lambda (w) #f) (lambda (w val) val)))"); 394 Xen_eval_C_string("(define " S_widget_position " (dilambda (lambda (w) #f) (lambda (w val) val)))"); 395 396 Xen_eval_C_string("(define (" S_axis_info " . args) #f)"); 397 Xen_eval_C_string("(define (" S_channel_widgets " . args) #f)"); 398 Xen_eval_C_string("(define (" S_is_color " obj) #f)"); 399 Xen_eval_C_string("(define (" S_color_to_list " obj) #f)"); 400 Xen_eval_C_string("(define (" S_is_colormap " obj) #f)"); 401 Xen_eval_C_string("(define (" S_current_font " . args) #f)"); 402 Xen_eval_C_string("(define (" S_dialog_widgets ") #f)"); 403 Xen_eval_C_string("(define (" S_graph_data " . args) #f)"); 404 405 Xen_eval_C_string("(define (" S_in " . args) #f)"); 406 Xen_eval_C_string("(define (" S_main_widgets ") #f)"); 407 Xen_eval_C_string("(define (" S_make_color " . args) #f)"); 408 Xen_eval_C_string("(define (" S_make_graph_data " . args) #f)"); 409 Xen_eval_C_string("(define (" S_menu_widgets " . args) #f)"); 410 Xen_eval_C_string("(define (" S_reset_listener_cursor ") #f)"); 411 Xen_eval_C_string("(define (" S_sound_widgets " . args) #f)"); 412 Xen_eval_C_string("(define (" S_view_regions_dialog " . args) #f)"); 413 Xen_eval_C_string("(define (" S_find_dialog " . args) #f)"); 414 Xen_eval_C_string("(define (" S_widget_text " . args) \"\")"); 415 Xen_eval_C_string("(define (" S_goto_listener_end ") #f)"); 416 Xen_eval_C_string("(define (" S_y_to_position " . args) #f)"); 417 Xen_eval_C_string("(define (" S_x_to_position " . args) #f)"); 418 Xen_eval_C_string("(define (" S_snd_gcs " . args) #f)"); 419 Xen_eval_C_string("(define (" S_show_widget " . args) #f)"); 420 Xen_eval_C_string("(define (" S_position_to_y " . args) #f)"); 421 Xen_eval_C_string("(define (" S_position_to_x " . args) #f)"); 422 Xen_eval_C_string("(define (" S_listener_selection " . args) #f)"); 423 Xen_eval_C_string("(define (" S_hide_widget " arg) #f)"); 424 Xen_eval_C_string("(define (" S_focus_widget " arg) #f)"); 425 Xen_eval_C_string("(define (" S_fill_rectangle " . args) #f)"); 426 Xen_eval_C_string("(define (" S_fill_polygon " . args) #f)"); 427 Xen_eval_C_string("(define (" S_draw_string " . args) #f)"); 428 Xen_eval_C_string("(define (" S_draw_lines " . args) #f)"); 429 Xen_eval_C_string("(define (" S_draw_line " . args) #f)"); 430 Xen_eval_C_string("(define (" S_draw_dots " . args) #f)"); 431 Xen_eval_C_string("(define (" S_draw_dot " . args) #f)"); 432 Xen_eval_C_string("(define (" S_draw_axes " . args) #f)"); 433 Xen_eval_C_string("(define (" S_delete_colormap " . args) #f)"); 434 Xen_eval_C_string("(define (" S_colormap_ref " . args) #f)"); 435 Xen_eval_C_string("(define (" S_colormap_name " arg) #f)"); 436 Xen_eval_C_string("(define (" S_add_colormap " . args) #f)"); 437 438 Xen_eval_C_string("(define " S_x_bounds " (dilambda (lambda args #f) (lambda args #f)))"); 439 Xen_eval_C_string("(define " S_y_bounds " (dilambda (lambda args #f) (lambda args #f)))"); 440 #endif 441 442 #if HAVE_RUBY 443 Xen_eval_C_string("def axis_info (s, c, a) false end"); 444 Xen_eval_C_string("def channel_widgets (s, c) false end"); 445 Xen_eval_C_string("def color? (a) false end"); 446 Xen_eval_C_string("def color_to_list (a) false end"); 447 Xen_eval_C_string("def current_font () false end"); 448 Xen_eval_C_string("def dialog_widgets () false end"); 449 Xen_eval_C_string("def enved_filter () false end"); 450 Xen_eval_C_string("def main_widgets (s) false end"); 451 Xen_eval_C_string("def make_color (r, g, b) false end"); 452 Xen_eval_C_string("def menu_widgets (s) false end"); 453 Xen_eval_C_string("def reset_listener_cursor () false end"); 454 Xen_eval_C_string("def sound_widgets (s) false end"); 455 Xen_eval_C_string("def view_regions_dialog () false end"); 456 Xen_eval_C_string("def find_dialog () false end"); 457 Xen_eval_C_string("def x_axis_label () false end"); 458 Xen_eval_C_string("def y_axis_label () false end"); 459 460 Xen_eval_C_string("def basic_color () false end"); 461 Xen_eval_C_string("def set_basic_color (a) false end"); 462 Xen_eval_C_string("def colormap () false end"); 463 Xen_eval_C_string("def set_colormap (a) false end"); 464 Xen_eval_C_string("def colormap_size () false end"); 465 Xen_eval_C_string("def set_colormap_size (a) false end"); 466 Xen_eval_C_string("def cursor_color () false end"); 467 Xen_eval_C_string("def set_cursor_color (a) false end"); 468 Xen_eval_C_string("def data_color () false end"); 469 Xen_eval_C_string("def set_data_color (a) false end"); 470 Xen_eval_C_string("def enved_envelope () false end"); 471 Xen_eval_C_string("def set_enved_envelope (a) false end"); 472 Xen_eval_C_string("def enved_waveform_color () false end"); 473 Xen_eval_C_string("def set_enved_waveform_color (a) false end"); 474 Xen_eval_C_string("def filter_control_waveform_color () false end"); 475 Xen_eval_C_string("def set_filter_control_waveform_color (a) false end"); 476 Xen_eval_C_string("def graph_color () false end"); 477 Xen_eval_C_string("def set_graph_color (a) false end"); 478 Xen_eval_C_string("def graph_cursor () false end"); 479 Xen_eval_C_string("def set_graph_cursor (a) false end"); 480 Xen_eval_C_string("def listener_color () false end"); 481 Xen_eval_C_string("def set_listener_color (a) false end"); 482 Xen_eval_C_string("def listener_text_color () false end"); 483 Xen_eval_C_string("def set_listener_text_color (a) false end"); 484 Xen_eval_C_string("def mark_color () false end"); 485 Xen_eval_C_string("def set_mark_color (m) false end"); 486 Xen_eval_C_string("def mix_color () false end"); 487 Xen_eval_C_string("def set_mix_color (m) false end"); 488 Xen_eval_C_string("def combined_data_color (a, b) false end"); 489 Xen_eval_C_string("def set_combined_data_color (a, b, c) false end"); 490 Xen_eval_C_string("def position_color () false end"); 491 Xen_eval_C_string("def set_position_color (a) false end"); 492 Xen_eval_C_string("def foreground_color () false end"); 493 Xen_eval_C_string("def set_foreground_color (a) false end"); 494 Xen_eval_C_string("def sash_color () false end"); 495 Xen_eval_C_string("def set_sash_color (a) false end"); 496 Xen_eval_C_string("def selected_data_color () false end"); 497 Xen_eval_C_string("def set_selected_data_color (a) false end"); 498 Xen_eval_C_string("def selected_graph_color () false end"); 499 Xen_eval_C_string("def set_selected_graph_color (a) false end"); 500 Xen_eval_C_string("def text_focus_color () false end"); 501 Xen_eval_C_string("def set_text_focus_color (a) false end"); 502 Xen_eval_C_string("def zoom_color () false end"); 503 Xen_eval_C_string("def set_zoom_color (a) false end"); 504 Xen_eval_C_string("def widget_size () false end"); 505 Xen_eval_C_string("def set_widget_size (a) false end"); 506 Xen_eval_C_string("def widget_position () false end"); 507 Xen_eval_C_string("def set_widget_position (a) false end"); 508 Xen_eval_C_string("def colormap? (a) false end"); 509 Xen_eval_C_string("def in (a, b) false end"); 510 Xen_eval_C_string("def widget_text (a) false end"); 511 512 Xen_eval_C_string("def y2position (a) false end"); 513 Xen_eval_C_string("def x2position (a) false end"); 514 Xen_eval_C_string("def position2y (a) false end"); 515 Xen_eval_C_string("def position2x (a) false end"); 516 Xen_eval_C_string("def snd_gcs (a) false end"); 517 Xen_eval_C_string("def show_widget (a) false end"); 518 Xen_eval_C_string("def listener_selection (a) false end"); 519 Xen_eval_C_string("def hide_widget (a) false end"); 520 Xen_eval_C_string("def focus_widget (a) false end"); 521 Xen_eval_C_string("def fill_rectangle (a) false end"); 522 Xen_eval_C_string("def fill_polygon (a) false end"); 523 Xen_eval_C_string("def draw_string (a) false end"); 524 Xen_eval_C_string("def draw_lines (a) false end"); 525 Xen_eval_C_string("def draw_line (a) false end"); 526 Xen_eval_C_string("def draw_dots (a) false end"); 527 Xen_eval_C_string("def draw_dot (a) false end"); 528 Xen_eval_C_string("def draw_axes (a) false end"); 529 Xen_eval_C_string("def delete_colormap (a) false end"); 530 Xen_eval_C_string("def colormap_ref (a) false end"); 531 Xen_eval_C_string("def colormap_name (a) false end"); 532 Xen_eval_C_string("def add_colormap (a) false end"); 533 534 Xen_eval_C_string("def make_graph_data (a, b, c) false end"); 535 Xen_eval_C_string("def graph_data (a, b, c) false end"); 536 537 Xen_eval_C_string("$drop_hook = false"); 538 Xen_eval_C_string("$listener_click_hook = false"); 539 Xen_eval_C_string("$mouse_enter_graph_hook = false"); 540 Xen_eval_C_string("$mouse_enter_label_hook = false"); 541 Xen_eval_C_string("$mouse_enter_listener_hook = false"); 542 Xen_eval_C_string("$mouse_enter_text_hook = false"); 543 Xen_eval_C_string("$mouse_leave_graph_hook = false"); 544 Xen_eval_C_string("$mouse_leave_label_hook = false"); 545 Xen_eval_C_string("$mouse_leave_listener_hook = false"); 546 Xen_eval_C_string("$mouse_leave_text_hook = false"); 547 Xen_eval_C_string("$new_widget_hook = false"); 548 Xen_eval_C_string("$orientation_hook = false"); 549 550 Xen_eval_C_string("Copy_context = 0"); 551 Xen_eval_C_string("Cursor_context = 3"); 552 Xen_eval_C_string("Lisp_graph = 2"); 553 Xen_eval_C_string("Mark_context = 4"); 554 Xen_eval_C_string("Selection_context = 2"); 555 Xen_eval_C_string("Time_graph = 0"); 556 Xen_eval_C_string("Transform_graph = 1"); 557 558 Xen_eval_C_string("def x_bounds (s, c, a) false end"); 559 Xen_eval_C_string("def set_x_bounds (s, c, ax, a) false end"); 560 Xen_eval_C_string("def y_bounds (s, c, a) false end"); 561 Xen_eval_C_string("def set_y_bounds (s, c, ax, a) false end"); 562 #endif 563 564 #if HAVE_FORTH 565 Xen_eval_C_string("\ 566 0 #f create-hook " S_color_hook "\n\ 567 1 #f create-hook " S_drop_hook "\n\ 568 1 #f create-hook " S_listener_click_hook "\n\ 569 2 #f create-hook " S_mouse_enter_graph_hook "\n\ 570 3 #f create-hook " S_mouse_enter_label_hook "\n\ 571 1 #f create-hook " S_mouse_enter_listener_hook "\n\ 572 1 #f create-hook " S_mouse_enter_text_hook "\n\ 573 2 #f create-hook " S_mouse_leave_graph_hook "\n\ 574 3 #f create-hook " S_mouse_leave_label_hook "\n\ 575 1 #f create-hook " S_mouse_leave_listener_hook "\n\ 576 1 #f create-hook " S_mouse_leave_text_hook "\n\ 577 1 #f create-hook " S_new_widget_hook "\n\ 578 0 #f create-hook " S_orientation_hook "\n"); 579 580 Xen_eval_C_string("\ 581 0 constant " S_copy_context "\n\ 582 3 constant " S_cursor_context "\n\ 583 2 constant " S_lisp_graph "\n\ 584 4 constant " S_mark_context "\n\ 585 2 constant " S_selection_context "\n\ 586 0 constant " S_time_graph "\n\ 587 1 constant " S_transform_graph "\n"); 588 589 Xen_eval_C_string("\ 590 : " S_basic_color " #f ;\n\ 591 : set-" S_basic_color " { a } #f ;\n\ 592 : " S_colormap " #f ;\n\ 593 : set-" S_colormap " { a } #f ;\n\ 594 : " S_colormap_size " #f ;\n\ 595 : set-" S_colormap_size " { a } #f ;\n\ 596 : " S_cursor_color " #f ;\n\ 597 : set-" S_cursor_color " { a } #f ;\n\ 598 : " S_data_color " #f ;\n\ 599 : set-" S_data_color " { a } #f ;\n\ 600 : " S_enved_envelope " #f ;\n\ 601 : set-" S_enved_envelope " { a } #f ;\n\ 602 : " S_enved_filter " #f ;\n\ 603 : set-" S_enved_filter " { a } #f ;\n\ 604 : " S_enved_waveform_color " #f ;\n\ 605 : set-" S_enved_waveform_color " { a } #f ;\n\ 606 : " S_filter_control_waveform_color " #f ;\n\ 607 : set-" S_filter_control_waveform_color " { a } #f ;\n\ 608 : " S_graph_color " #f ;\n\ 609 : set-" S_graph_color " { a } #f ;\n\ 610 : " S_graph_cursor " #f ;\n\ 611 : set-" S_graph_cursor " { a } #f ;\n\ 612 : " S_listener_color " #f ;\n\ 613 : set-" S_listener_color " { a } #f ;\n\ 614 : " S_listener_text_color " #f ;\n\ 615 : set-" S_listener_text_color " { a } #f ;\n\ 616 : " S_mark_color " #f ;\n\ 617 : set-" S_mark_color " { a } #f ;\n\ 618 : " S_mix_color " #f ;\n\ 619 : set-" S_mix_color " { a } #f ;\n\ 620 : " S_combined_data_color " #f ;\n\ 621 : set-" S_combined_data_color " { a } #f ;\n\ 622 : " S_position_color " #f ;\n\ 623 : set-" S_position_color " { a } #f ;\n\ 624 : " S_sash_color " #f ;\n\ 625 : set-" S_sash_color " { a } #f ;\n\ 626 : " S_selected_data_color " #f ;\n\ 627 : set-" S_selected_data_color " { a } #f ;\n\ 628 : " S_selected_graph_color " #f ;\n\ 629 : set-" S_selected_graph_color " { a } #f ;\n\ 630 : " S_text_focus_color " #f ;\n\ 631 : set-" S_text_focus_color " { a } #f ;\n\ 632 : " S_x_axis_label " #f ;\n\ 633 : set-" S_x_axis_label " { a } #f ;\n\ 634 : " S_y_axis_label " #f ;\n\ 635 : set-" S_y_axis_label " { a } #f ;\n\ 636 : " S_zoom_color " #f ;\n\ 637 : set-" S_zoom_color " { a } #f ;\n\ 638 : " S_axis_info " { s c a } #f ;\n\ 639 : " S_x_bounds " { s c a } #f ;\n\ 640 : set-" S_x_bounds " { a } #f ;\n\ 641 : " S_y_bounds " { s c a } #f ;\n\ 642 : set-" S_y_bounds " { a } #f ;\n\ 643 : " S_channel_widgets " { s c } #f ;\n\ 644 : " S_is_color " { a } #f ;\n\ 645 : " S_color_to_list " { a } #f ;\n\ 646 : " S_is_colormap " { a } #f ;\n\ 647 : " S_current_font " #f ;\n\ 648 : " S_dialog_widgets " #f ;\n\ 649 : " S_focus_widget " #f ;\n\ 650 : " S_graph_data " { a b c } #f ;\n\ 651 : " S_in " { a b } #f ;\n\ 652 : " S_main_widgets " { s } #f ;\n\ 653 : " S_make_color " { r g b } #f ;\n\ 654 : " S_make_graph_data " { a b c } #f ;\n\ 655 : " S_menu_widgets " { s } #f ;\n\ 656 : " S_reset_listener_cursor " #f ;\n\ 657 : " S_sound_widgets " { s } #f ;\n\ 658 : " S_view_regions_dialog " #f ;\n\ 659 : " S_widget_text " { a } #f ;\n\ 660 : " S_goto_listener_end " #f ;\n"); 661 #endif 662 663 set_peaks_font(FALLBACK_FONT); 664 set_tiny_font(FALLBACK_FONT); 665 set_bold_peaks_font(FALLBACK_FONT); 666 set_axis_label_font(FALLBACK_FONT); 667 set_axis_numbers_font(FALLBACK_FONT); 668 set_listener_font(FALLBACK_FONT); 669 ss->startup_title = mus_strdup("snd"); 670 671 for (i = 1; i < argc; i++) 672 { 673 if (mus_strcmp(argv[i], "-noglob")) 674 noglob = true; 675 else 676 if (mus_strcmp(argv[i], "-noinit")) 677 noinit = true; 678 else 679 if (mus_strcmp(argv[i], "-nostdin")) 680 nostdin = true; 681 else 682 if ((mus_strcmp(argv[i], "-b")) || (mus_strcmp(argv[i], "-batch"))) 683 ss->batch_mode = true; 684 else 685 if (mus_strcmp(argv[i], "--features")) /* testing (compsnd) */ 686 check_features_list(argv[i + 1]); 687 } 688 snd_load_init_file(noglob, noinit); 689 690 #if (!_MSC_VER) && !__MINGW32__ 691 signal(SIGTTIN, SIG_IGN); /* disallow terminal read/write if a background job */ 692 signal(SIGTTOU, SIG_IGN); 693 #endif 694 695 #ifndef _MSC_VER 696 if (sigsetjmp(top_level_jump, 1)) 697 { 698 if (!(ss->jump_ok)) 699 snd_error_without_format("Caught top level error (will try to continue):\n"); 700 else ss->jump_ok = false; 701 } 702 else 703 { 704 #endif 705 706 auto_open_files = argc - 1; 707 if (argc > 1) auto_open_file_names = (char **)(argv + 1); 708 while (auto_open_ctr < auto_open_files) 709 auto_open_ctr = handle_next_startup_arg(auto_open_ctr, auto_open_file_names, false, auto_open_files); 710 711 #ifndef _MSC_VER 712 } 713 #endif 714 715 if ((ss->sounds) && (ss->sounds[0]) && ((ss->sounds[0])->inuse == SOUND_NORMAL)) 716 select_channel(ss->sounds[0], 0); 717 718 #if HAVE_SCHEME 719 top_level_let = s7_nil(s7); 720 s7_define_variable(s7, "top-level-let", s7_dilambda(s7, "top-level-let", g_top_level_let, 0, 0, g_set_top_level_let, 1, 0, "listener environment")); 721 #endif 722 723 #if HAVE_SCHEME && (!defined(__sun)) && (!defined(_MSC_VER)) 724 if (!nostdin) 725 { 726 if (noinit) goto DUMB_REPL; 727 #if USE_NOTCURSES 728 if (nrepl(s7)) /* nrepl.c -- loads nrepl.scm, 0=success */ 729 #else 730 if (s7_load(s7, "repl.scm")) /* returns NULL if can't find repl.scm */ 731 { 732 if ((listener_prompt(ss)) && (strcmp(listener_prompt(ss), DEFAULT_LISTENER_PROMPT) != 0)) 733 s7_eval_c_string(s7, "(set! (*repl* 'prompt) \ 734 (lambda (num) \ 735 (with-let (sublet (*repl* 'repl-let) :num num) \ 736 (set! prompt-string (format #f \"(~D)~A\" num *listener-prompt*)) \ 737 (set! prompt-length (length prompt-string)))))"); 738 s7_eval_c_string(s7, "((*repl* 'run))"); 739 } 740 else 741 #endif 742 { 743 DUMB_REPL: 744 while (true) 745 { 746 char buffer[512]; 747 fprintf(stdout, "\n> "); 748 if (!fgets(buffer, 512, stdin)) break; /* error or ctrl-D */ 749 if (((buffer[0] != '\n') || (strlen(buffer) > 1))) 750 { 751 char response[1024]; 752 snprintf(response, 1024, "(write %s)", buffer); 753 s7_eval_c_string(s7, response); 754 } 755 } 756 fprintf(stdout, "\n"); 757 if (ferror(stdin)) 758 fprintf(stderr, "read error on stdin\n"); 759 } 760 } 761 #else /* not scheme */ 762 if (!nostdin) 763 xen_repl(1, argv); 764 #endif 765 } 766