Mercurial > hg > xemacs-beta
view etc/tests/external-widget/test-ew-motif.c @ 5307:c096d8051f89
Have NATNUMP give t for positive bignums; check limits appropriately.
src/ChangeLog addition:
2010-11-20 Aidan Kehoe <kehoea@parhasard.net>
* abbrev.c (Fexpand_abbrev):
* alloc.c:
* alloc.c (Fmake_list):
* alloc.c (Fmake_vector):
* alloc.c (Fmake_bit_vector):
* alloc.c (Fmake_byte_code):
* alloc.c (Fmake_string):
* alloc.c (vars_of_alloc):
* bytecode.c (UNUSED):
* bytecode.c (Fbyte_code):
* chartab.c (decode_char_table_range):
* cmds.c (Fself_insert_command):
* data.c (check_integer_range):
* data.c (Fnatnump):
* data.c (Fnonnegativep):
* data.c (Fstring_to_number):
* elhash.c (hash_table_size_validate):
* elhash.c (decode_hash_table_size):
* eval.c (Fbacktrace_frame):
* event-stream.c (lisp_number_to_milliseconds):
* event-stream.c (Faccept_process_output):
* event-stream.c (Frecent_keys):
* event-stream.c (Fdispatch_event):
* events.c (Fmake_event):
* events.c (Fevent_timestamp):
* events.c (Fevent_timestamp_lessp):
* events.h:
* events.h (struct command_builder):
* file-coding.c (gzip_putprop):
* fns.c:
* fns.c (check_sequence_range):
* fns.c (Frandom):
* fns.c (Fnthcdr):
* fns.c (Flast):
* fns.c (Fnbutlast):
* fns.c (Fbutlast):
* fns.c (Fmember):
* fns.c (Ffill):
* fns.c (Freduce):
* fns.c (replace_string_range_1):
* fns.c (Freplace):
* font-mgr.c (Ffc_pattern_get):
* frame-msw.c (msprinter_set_frame_properties):
* glyphs.c (check_valid_xbm_inline):
* indent.c (Fmove_to_column):
* intl-win32.c (mswindows_multibyte_to_unicode_putprop):
* lisp.h:
* lisp.h (ARRAY_DIMENSION_LIMIT):
* lread.c (decode_mode_1):
* mule-ccl.c (ccl_get_compiled_code):
* number.h:
* process-unix.c (unix_open_multicast_group):
* process.c (Fset_process_window_size):
* profile.c (Fstart_profiling):
* unicode.c (Funicode_to_char):
Change NATNUMP to return 1 for positive bignums; changes uses of
it and of CHECK_NATNUM appropriately, usually by checking for an
integer in an appropriate range.
Add array-dimension-limit and use it in #'make-vector,
#'make-string. Add array-total-size-limit, array-rank-limit while
we're at it, for the sake of any Common Lisp-oriented code that
uses these limits.
Rename check_int_range to check_integer_range, have it take
Lisp_Objects (and thus bignums) instead.
Remove bignum_butlast(), just set int_n to an appropriately large
integer if N is a bignum.
Accept bignums in check_sequence_range(), change the functions
that use check_sequence_range() appropriately.
Move the definition of NATNUMP() to number.h; document why it's a
reasonable name, contradicting an old comment.
tests/ChangeLog addition:
2010-11-20 Aidan Kehoe <kehoea@parhasard.net>
* automated/lisp-tests.el:
* automated/lisp-tests.el (featurep):
* automated/lisp-tests.el (wrong-type-argument):
* automated/mule-tests.el (featurep):
Check for args-out-of-range errors instead of wrong-type-argument
errors in various places when code is handed a large bignum
instead of a fixnum.
Also check for the wrong-type-argument errors when giving the same
code a non-integer value.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 20 Nov 2010 16:49:11 +0000 |
parents | ba07c880114a |
children | 6a8c6c6f6c8e |
line wrap: on
line source
/* Test external widget code in Motif. Copyright (C) 1993 Ben Wing. This file is part of XEmacs. XEmacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. XEmacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with XEmacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include <Xm/Xm.h> #include <Xm/RowColumn.h> #include <Xm/Scale.h> #include <Xm/PushB.h> #include <Xm/Label.h> #include <Xm/Text.h> #include <Xm/PanedW.h> #include "ExternalClient.h" #ifdef TOOLTALK #include <desktop/tt_c.h> char *HxProcID; #endif XtAppContext xt_app_con; void ScaleValueChangedCB(Widget scale, XtPointer app_data, XtPointer widget_data) { XmScaleCallbackStruct *xms = (XmScaleCallbackStruct *) widget_data; Widget label = (Widget) app_data; char labelarr[10]; XmString labelstr; #if 0 sprintf(labelarr, "%d", xms->value); labelstr = XmStringCreateLocalized(labelarr); XtVaSetValues(label, XmNlabelString, labelstr, NULL); XmStringFree(labelstr); #endif } #ifdef TOOLTALK static void handle_tt_input(XtPointer client_data, int *source, XtInputId *id) { Tt_message m = tt_message_receive(); if (m && !(tt_ptr_error(m))) { tt_message_destroy(m); } } Tt_status HxInitializeToolTalk() { static Boolean initialized = FALSE; if (!initialized) { int fd; Tt_status status; HxProcID = tt_open(); fd = tt_fd(); if (TT_OK != (status = tt_session_join( tt_default_session() ))) return status; (void)XtAppAddInput(xt_app_con, fd, (void *)XtInputReadMask, handle_tt_input, NULL); initialized = TRUE; } return TT_OK; } #endif main(int argc, char **argv) { Widget shell, rowcolumn, scale, pushbutton, label1, label2, text; Widget paned, text2; int n, i; Widget widlist[100]; Widget emacscli[100]; Arg args[100]; int no_ews = 1; char buf[100]; if (argc > 1) no_ews = atoi (argv[1]); shell = XtAppInitialize(&xt_app_con, "Testmotif", NULL, 0, &argc, argv, NULL, NULL, 0); #ifdef TOOLTALK HxInitializeToolTalk(); #endif rowcolumn = XmCreateRowColumn(shell, "rowcolumn", NULL, 0); XtManageChild(rowcolumn); n = 0; XtSetArg(args[n], XmNtraversalOn, TRUE); n++; #if 0 label1 = XmCreateLabel(rowcolumn, "label1", args, n); #endif label1 = XtVaCreateWidget("label1", xmLabelWidgetClass, rowcolumn, XmNwidth, 50, XmNheight, 30, XmNtraversalOn, TRUE, NULL); label2 = XmCreateLabel(rowcolumn, "label2", NULL, 0); scale = XmCreateScale(rowcolumn, "scale", NULL, 0); XtAddCallback(scale, XmNvalueChangedCallback, ScaleValueChangedCB, label1); paned = XmCreatePanedWindow(rowcolumn, "paned", NULL, 0); n = 0; widlist[n++] = label1; widlist[n++] = label2; widlist[n++] = scale; widlist[n++] = paned; XtManageChildren(widlist, n); pushbutton = XmCreatePushButton(paned, "pushbutton", NULL, 0); text = XmCreateText(paned, "text", NULL, 0); for (i=0; i<no_ews; i++) { sprintf (buf, "extcli%d", i); emacscli[i] = XtVaCreateWidget(buf, externalClientWidgetClass, paned, XmNwidth, 500, XmNheight, 200, XmNtraversalOn, TRUE, #ifdef TOOLTALK XtNuseToolTalk, TRUE, #endif NULL); } text2 = XmCreateText(paned, "text2", NULL, 0); n = 0; widlist[n++] = pushbutton; widlist[n++] = text; for (i=0; i<no_ews; i++) widlist[n++] = emacscli[i]; widlist[n++] = text2; XtManageChildren(widlist, n); XtRealizeWidget(shell); { XmString lab; char labarr[1000]; char tmpbuf[50]; strcpy (labarr, "window:"); for (i=0; i<no_ews; i++) { sprintf (tmpbuf, " %d", XtWindow(emacscli[i])); strcat (labarr, tmpbuf); } lab = XmStringCreateLocalized(labarr); XtVaSetValues(label2, XmNlabelString, lab, NULL); XmStringFree(lab); } XtAppMainLoop(xt_app_con); }