/* See if qserve and nserve are running. If not, start them. */ if ((qnx_name_locate (0, "qserve", 0) == nil) && (access ("/dev/qserve", 0) != 0)) { system("qserve"); } if ((qnx_name_locate (0, "sc/nserve", 0) == nil) && (access ("/dev/nserve", 0) != 0)) { system("nserve"); } /* Create a unique name based on the process ID for this program, and then initialize IPC (necessary for timers) based on that name.*/ uniq_name = string(getnid(), ".", getpid()); init_ipc(uniq_name, uniq_name); function set_every(frequency, label) { cancel(car(timers_every)); cancel(cadr(timers_every)); label.set_text(string("This message\nblinks on and off", "\nevery ", format("%2.1f", frequency), " seconds.")); timer1 = every(frequency, `(@label).show()); timer2 = every((frequency * 2), `(@label).hide()); timers_every = list(timer1, timer2); timers_every; } function set_after(time, label) { cancel(timer_after); label.set_text(string("This message\nwill disappear\nafter ", format("%2.1f", time), " seconds.")); label.show(); timer_after = after(time, `(@label).hide()); } function make_at_spinner(tag, lower, upper, column, val) { label = new(GtkLabel); label.set_text(tag); table.attach_defaults(label, column, (column + 1), 1, 2); adj = gtk_adjustment_new (0, lower, upper, 1, 1, 0); spinner = new(GtkSpinButton); spinner.configure(adj, 1, 0); spinner.set_value(val); spinner.set_wrap(TRUE); spinner.set_shadow_type(GTK_SHADOW_IN); table.attach_defaults(spinner, column, (column + 1), 2, 3); button = new(GtkToggleButton); button.label = "Any"; button.signal("clicked", `toggle_any(@spinner, @button)); spinner.signal("changed", `untoggle_any(@spinner, @button)); table.attach_defaults(button, column, (column + 1), 3, 4); list(spinner, button); } function toggle_any(spinner, button) { local time; if (button.get_active() == TRUE) { time = -1; spinner.set_visibility(FALSE); } else { spinner.set_visibility(TRUE); time = spinner.get_value_as_int(); } time; } function untoggle_any(spinner, button) { spinner.set_visibility(TRUE); button.set_active(FALSE); } function time_string(time_period) { local print_string; if (time_period) print_string = format("%02d", time_period); else print_string = "**"; print_string; } function set_at(day, month, year, hour, minute, second, label) { local tm; cancel(timer_at); time_values = list(day, month, year, hour, minute, second); with v in time_values time_values = collect { tm = toggle_any (car(v),cadr(v)); if (tm == -1) tm = nil; tm; } day = car(time_values); month = cadr(time_values); year = caddr(time_values); hour = car(cdddr(time_values)); minute = cadr(cdddr(time_values)); second = caddr(cdddr(time_values)); label.set_text(string("This message will disappear on ", time_string(day), "\/", time_string(month), "\/", time_string(year), "\/", " at ", time_string(hour), ":", time_string(minute), ":", time_string(second), ".")); label.show(); timer_at = at(day, month, year, hour, minute, second, `(@label).hide()); if (timer_at == nil) { label.set_text("That time is past or invalid, try again."); label.show(); timer_at = at(31,12,2026,23,59,59,`(@label).hide()); } timer_at; } function month_number(month) { switch (month) { case "Jan": 1; case "Feb": 2; case "Mar": 3; case "Apr": 4; case "May": 5; case "Jun": 6; case "Jul": 7; case "Aug": 8; case "Sep": 9; case "Oct": 10; case "Nov": 11; case "Dec": 12; } } function make_adj (low, up, step, pg_inc, pg_size) { adj = new(GtkAdjustment); adj.lower = low; adj.upper = up; adj.step_increment = step; adj.page_increment = pg_inc; adj.page_size = pg_size; adj; } function cancel_timers(timerlist...) { with tmr in timerlist do if (tmr != nil) cancel(tmr); } function create_timertest () { local box1, box2, box3, frame, at_label, every_label, label, t1, t2, table, now, adj, spinner, frequency, separator; win_timertest = new (GtkWindow); win_timertest.signal ("destroy", #cancel_timers(timer_clock, timer_at, (car(timers_every)), (cadr(timers_every)), timer_after)); win_timertest.signal ("destroy", #win_timertest = nil); win_timertest.title = "Timer Test"; win_timertest.border_width = 0; win_timertest.set_color(1, GTK_STATE_NORMAL, 0xbbdbcc); box1 = new (GtkVBox); win_timertest.add (box1); box2 = new (GtkHBox); box1.pack_start (box2, TRUE, TRUE, 0); /* every() test */ box3 = new(GtkVBox); box3.spacing = 5; box3.border_width = 20; frame = new(GtkFrame); frame.border_width = 0; frame.set_usize(140, 100); frame.set_label("Test of every ( ) : "); frame.set_shadow_type(GTK_SHADOW_IN); box3.pack_start(frame, FALSE, FALSE, 0); every_label = new(GtkLabel); every_label.set_text(string("This message\nblinks on and off", "\nevery 2 seconds.")); frame.add(every_label); t1 = every(2, `(@every_label).show()); t2 = every(4, `(@every_label).hide()); timers_every = list(t1, t2); table = new(GtkTable); table.n_columns = 3; table.n_rows = 3; table.set_row_spacings(5); table.set_col_spacings(5); table.set_homogeneous(TRUE); box3.pack_start(table, FALSE, FALSE, 0); label = new(GtkLabel); label.set_text("Set frequency:"); table.attach_defaults(label, 0, 3, 0, 1); adj = make_adj(0.2, 10.0, 0.1, 1.0, 0.0); spinner = new(GtkSpinButton); spinner.configure(adj, 0.1, 1); spinner.set_value(2.0); spinner.set_wrap(TRUE); spinner.set_shadow_type(GTK_SHADOW_IN); table.attach_defaults(spinner, 1, 2, 1, 2); frequency = 10; button = new(GtkButton); button.label = "Restart"; button.signal("clicked", `(timers_every = set_every((@spinner).get_value_as_float(), @every_label))); table.attach_defaults(button, 1, 2, 2, 3); box2.pack_start(box3, FALSE, FALSE, 0); /* after() test */ separator = new(GtkVSeparator); separator.width = 0; box2.pack_start(separator, TRUE, TRUE, 0); box3 = new(GtkVBox); box3.spacing = 5; box3.border_width = 20; frame = new(GtkFrame); frame.border_width = 0; frame.set_usize(160, 100); frame.set_label("Test of after ( ) : "); frame.set_shadow_type(GTK_SHADOW_IN); after_label = new(GtkLabel); after_label.set_text("This message\nwill disappear\nafter 5 seconds."); frame.add(after_label); box3.pack_start(frame, FALSE, FALSE, 0); timer_after = after(5, `(@after_label).hide()); table = new(GtkTable); table.n_columns = 3; table.n_rows = 3; table.set_row_spacings(5); table.set_col_spacings(5); table.set_homogeneous(TRUE); box3.pack_start(table, FALSE, FALSE, 0); label = new(GtkLabel); label.set_text("Set time:"); table.attach_defaults(label, 0, 3, 0, 1); adj = make_adj(0.1, 60.0, 1.0, 1.0, 0.0); spinner = new(GtkSpinButton); spinner.configure(adj, 0.1, 1); spinner.set_value(5.0); spinner.set_wrap(TRUE); spinner.set_shadow_type(GTK_SHADOW_IN); table.attach_defaults(spinner, 1, 2, 1, 2); button = new(GtkButton); button.label = "Restart"; button.signal("clicked", `(timer_after = set_after((@spinner).get_value_as_float(), @after_label))); table.attach_defaults(button, 1, 2, 2, 3); box2.pack_start(box3, FALSE, FALSE, 0); /* at() test */ separator = new(GtkHSeparator); box1.pack_start(separator, TRUE, TRUE, 0); box2 = new (GtkHBox); box2.border_width = 20; box1.pack_start (box2, TRUE, TRUE, 0); box3 = new(GtkVBox); box3.spacing = 5; frame = new(GtkFrame); frame.border_width = 0; frame.set_usize(345, 60); frame.set_label("Test of at ( ) : "); frame.set_shadow_type(GTK_SHADOW_IN); at_label = new(GtkLabel); at_label.set_text("Set a date and time to make a message disappear."); frame.add(at_label); box3.pack_start(frame, FALSE, FALSE, 0); timer_at = at(nil, nil, nil, nil, nil, nil, `(@at_label).show()); table = new(GtkTable); table.n_columns = 6; table.n_rows = 5; table.set_row_spacings(5); table.set_row_spacing(0, 0); table.set_row_spacing(1, 0); table.set_col_spacings(5); table.set_homogeneous(TRUE); table.set_usize(140, 130); box3.pack_start(table, FALSE, FALSE, 0); label = new(GtkLabel); label.set_text("Set a new date and time for a message to disappear:"); table.attach_defaults(label, 0, 6, 0, 1); now = string(date()); now = cdr(string_split(now, " :", 0)); princ(now, "\n"); spin_day_value = make_at_spinner("Day: ", 1, 31, 0, number(cadr(now))); spin_month_value = make_at_spinner("Month: ", 1, 12, 1, month_number(car(now))); spin_year_value = make_at_spinner("Year: ", 1994, 2026, 2, number(car(nth_cdr(now, 5)))); spin_hour_value = make_at_spinner("Hour: ", 0, 24, 3, number(caddr(now))); spin_minute_value = make_at_spinner("Minute: ", 0, 59, 4, number(car(nth_cdr(now, 3)))); spin_second_value = make_at_spinner("Second: ", 0, 59, 5, number(car(nth_cdr(now, 4))) + 10); button = new(GtkButton); button.label = "Restart"; button.signal("clicked", `(timer_at = set_at((spin_day_value), (spin_month_value), (spin_year_value), (spin_hour_value), (spin_minute_value), (spin_second_value), @at_label))); table.attach_defaults(button, 2, 4, 4, 5); button.clicked(); box2.pack_start(box3, FALSE, FALSE, 0); separator = new(GtkHSeparator); box1.pack_start(separator, TRUE, TRUE, 0); box3 = new(GtkHBox); box3.border_width = 10; label = new(GtkLabel); label.set_text(string("System Time: ", date())); box3.add(label); timer_clock = every(1, `(@label).set_text(string("System Time: ", date()))); box1.pack_start(box3, TRUE, TRUE, 0); separator = new(GtkHSeparator); box1.pack_start(separator, TRUE, TRUE, 0); box3 = new(GtkHBox); button = new (GtkButton); button.label = "Cancel timers"; button.signal ("clicked", #cancel_timers(timer_at, (car(timers_every)), (cadr(timers_every)), timer_after)); button.signal ("clicked", `(@every_label).set_text("Cancelled.")); button.signal ("clicked", `(@after_label).set_text("Cancelled.")); button.signal ("clicked", `(@at_label).set_text("Cancelled.")); box3.pack_start(button, TRUE, TRUE, 10); button = new (GtkButton); button.label = "Close"; button.signal ("clicked", #cancel_timers(timer_clock, timer_at, (car(timers_every)), (cadr(timers_every)), timer_after)); button.signal ("clicked", `(@win_timertest).destroy()); box3.pack_start(button, TRUE, TRUE, 10); box2 = new (GtkVBox); box2.border_width = 10; box2.spacing = 10; box2.pack_start(box3, FALSE, FALSE, 0); box1.pack_start (box2, TRUE, TRUE, 0); win_timertest.show_all(); win_timertest; } function main () { local window, win_timertest; TRUE=1; FALSE=0; window = create_timertest(); window.signal ("destroy", #exit_program(0)); init_ipc("timertest", "timertestq"); gtk_main (); }
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.