/* objects - Additional object functions                               */
/* XLISP-STAT 2.1 Copyright (c) 1990, by Luke Tierney                  */
/* Additions to Xlisp 2.1, Copyright (c) 1989 by David Michael Betz    */
/* You may give out copies of this software; for conditions see the    */
/* file COPYING included with this distribution.                       */
 
#include "xlisp.h"
#include "xlstat.h"

/* external variables */
extern LVAL s_true, s_selecting;

VOID init_objects(V)
{
  LVAL root_object = init_root_object();
  LVAL hardware_object, window;
#ifdef MACINTOSH
  LVAL edit_window, listener;
#endif /* MACINTOSH */
  LVAL menu;
#ifdef MACINTOSH
  LVAL apple_menu;
#endif /* MACINTOSH */
  LVAL menu_item, dialog, dialog_item, button_item, toggle_item;
  LVAL text_item, choice_item, scroll_item, list_item;
  LVAL iview_window, iview, iview_spin, iview_scatmat, iview_list;
  LVAL iview_hist, scatterplot, compound_data;
  
  /* *OBJECT* */
  xsaddmsg(root_object, ":GET-METHOD");
  xsaddmsg(root_object, ":REPARENT");
  xsaddmsg(root_object, ":HAS-SLOT");
  xsaddmsg(root_object, ":HAS-METHOD");
  xsaddmsg(root_object, ":ADD-SLOT");
  xsaddmsg(root_object, ":DELETE-SLOT");
  xsaddmsg(root_object, ":ADD-METHOD");
  xsaddmsg(root_object, ":DELETE-METHOD");
  xsaddmsg(root_object, ":SHOW");
  xsaddmsg(root_object, ":ISNEW");
  xsaddmsg(root_object, ":PARENTS");
  xsaddmsg(root_object, ":PRECEDENCE-LIST");
  xsaddmsg(root_object, ":OWN-SLOTS");
  xsaddmsg(root_object, ":OWN-METHODS");
  xsaddmsg(root_object, ":INTERNAL-DOC");
  xsaddmsg(root_object, ":MAKE-PROTOTYPE");
  
#ifndef NOGRAPHICS
  /* HARDWARE-OBJECT-PROTO */
  hardware_object = xsnewproto("HARDWARE-OBJECT-PROTO", root_object);
  xsaddinstanceslot(hardware_object, "HARDWARE-ADDRESS");
  xsaddinstanceslot(hardware_object, "SUBORDINATES");
  xsaddmsg(hardware_object, ":CLOBBER");
  xsaddmsg(hardware_object, ":ALLOCATE");
  xsaddmsg(hardware_object, ":DISPOSE");
  
  /* WINDOW-PROTO */
  window = xsnewproto("WINDOW-PROTO", hardware_object);
  xsaddinstanceslot(window, "GO-AWAY");
  xsaddinstanceslot(window, "SIZE");
  xsaddinstanceslot(window, "LOCATION");
  xsaddinstanceslot(window, "TITLE");
  xsaddmsg(window, ":SHOW-WINDOW");
  xsaddmsg(window, ":HIDE-WINDOW");
  xsaddmsg(window, ":CLOSE");
  xsaddmsg(window, ":TITLE");
  xsaddmsg(window, ":LOCATION");
  xsaddmsg(window, ":SIZE");
  xsaddmsg(window, ":FRAME-LOCATION");
  xsaddmsg(window, ":FRAME-SIZE");
  xsaddmsg(window, ":UNDO");
  xsaddmsg(window, ":CUT-TO-CLIP");
  xsaddmsg(window, ":COPY-TO-CLIP");
  xsaddmsg(window, ":PASTE-FROM-CLIP");
  xsaddmsg(window, ":CLEAR");
  xsaddmsg(window, ":PASTE-STREAM");
  xsaddmsg(window, ":PASTE-STRING");
  xsaddmsg(window, ":SELECTION-STREAM");
  xsaddmsg(window, ":ACTIVATE");
  xsaddmsg(window, ":UPDATE");
  xsaddmsg(window, ":FIND");
  
#ifdef MACINTOSH  
  /* EDIT-WINDOW-PROTO */
  edit_window = xsnewproto("EDIT-WINDOW-PROTO", window);
  xsaddinstanceslot(edit_window, "BIND-TO-FILE");
  xsaddinstanceslot(edit_window, "OUTPUT-STREAM");
  xsaddinstanceslot(edit_window, "INPUT-ENABLED");
  xsaddmsg(edit_window, ":ISNEW");
  xsaddmsg(edit_window, ":ALLOCATE");
  xsaddmsg(edit_window, ":CUT-TO-CLIP");
  xsaddmsg(edit_window, ":COPY-TO-CLIP");
  xsaddmsg(edit_window, ":PASTE-FROM-CLIP");
  xsaddmsg(edit_window, ":REVERT");
  xsaddmsg(edit_window, ":SAVE");
  xsaddmsg(edit_window, ":SAVE-AS");
  xsaddmsg(edit_window, ":SAVE-COPY");
  xsaddmsg(edit_window, ":PASTE-STREAM");
  xsaddmsg(edit_window, ":PASTE-STRING");
  xsaddmsg(edit_window, ":FLUSH-WINDOW");
  xsaddmsg(edit_window, ":SELECTION-STREAM");
  xsaddmsg(edit_window, ":CLOSE");
  xsaddmsg(edit_window, ":REMOVE");
  xsaddmsg(edit_window, ":DISPOSE");
  xsaddmsg(edit_window, ":ACTIVATE");
  xsaddmsg(edit_window, ":UPDATE");
  xsaddmsg(edit_window, ":FIND-STRING");

  /* LISTENER-PROTO */
  listener = xsnewproto("LISTENER-PROTO", edit_window);
  xsaddinstanceslot(listener, "INPUT-STREAM");
  xsaddmsg(listener, ":ISNEW");
  xsaddmsg(listener, ":ALLOCATE");
  xsaddmsg(listener, ":CLOSE");
  xsaddmsg(listener, ":REMOVE");
  xsaddmsg(listener, ":DISPOSE");
#endif /* MACINTOSH */

  /* MENU-PROTO */
  menu = xsnewproto("MENU-PROTO", hardware_object);
  xsaddinstanceslot(menu, "ID");
  xsaddinstanceslot(menu, "ENABLED");
  xsaddinstanceslot(menu, "ITEMS");
  xsaddinstanceslot(menu, "TITLE");
  xsaddslot(menu, "MENU-LIST");
  xsaddmsg(menu, ":ISNEW");
  xsaddmsg(menu, ":ALLOCATE");
  xsaddmsg(menu, ":DISPOSE");
  xsaddmsg(menu, ":INSTALL");
  xsaddmsg(menu, ":REMOVE");
  xsaddmsg(menu, ":ENABLED");
  xsaddmsg(menu, ":UPDATE");
  xsaddmsg(menu, ":ALLOCATED-P");
  xsaddmsg(menu, ":TITLE");
  xsaddmsg(menu, ":ITEMS");
  xsaddmsg(menu, ":INSTALLED-P");
  xsaddmsg(menu, ":APPEND-ITEMS");
  xsaddmsg(menu, ":DELETE-ITEMS");
  xsaddmsg(menu, ":SELECT");
  xsaddmsg(menu, ":POPUP");

#ifdef MACINTOSH
  /* APPLE-MENU-PROTO */
  apple_menu = xsnewproto("APPLE-MENU-PROTO", menu);
  xsaddmsg(apple_menu, ":ISNEW");
  xsaddmsg(apple_menu, ":SELECT");
#endif /* MACINTOSH */

  /* MENU-ITEM-PROTO */
  menu_item = xsnewproto("MENU-ITEM-PROTO", root_object);
  xsaddinstanceslot(menu_item, "MENU");
  xsaddinstanceslot(menu_item, "ENABLED");
  xsaddinstanceslot(menu_item, "ACTION");
  xsaddinstanceslot(menu_item, "STYLE");
  xsaddinstanceslot(menu_item, "MARK");
  xsaddinstanceslot(menu_item, "KEY");
  xsaddinstanceslot(menu_item, "TITLE");
  xsaddmsg(menu_item, ":ISNEW");
  xsaddmsg(menu_item, ":TITLE");
  xsaddmsg(menu_item, ":KEY");
  xsaddmsg(menu_item, ":MARK");
  xsaddmsg(menu_item, ":STYLE");
  xsaddmsg(menu_item, ":ACTION");
  xsaddmsg(menu_item, ":ENABLED");
  xsaddmsg(menu_item, ":INSTALLED-P");
  xsaddmsg(menu_item, ":UPDATE");
  xsaddmsg(menu_item, ":DO-ACTION");

  /* DIALOG-PROTO */
  dialog = xsnewproto("DIALOG-PROTO", window);
  xsaddinstanceslot(dialog, "DEFAULT-BUTTON");
  xsaddinstanceslot(dialog, "ITEMS");
  xsaddinstanceslot(dialog, "TYPE");
  xsaddslot(dialog, "DIALOG-LIST");
  xsaddmsg(dialog, ":ISNEW");
  xsaddmsg(dialog, ":ALLOCATE");
  xsaddmsg(dialog, ":REMOVE");
  xsaddmsg(dialog, ":DISPOSE");
  xsaddmsg(dialog, ":CLOSE");
  xsaddmsg(dialog, ":ALLOCATED-P");
  xsaddmsg(dialog, ":DEFAULT-BUTTON");
  xsaddmsg(dialog, ":MODAL-DIALOG");

  /* DIALOG-ITEM-PROTO */
  dialog_item = xsnewproto("DIALOG-ITEM-PROTO", root_object);
  xsaddinstanceslot(dialog_item, "DIALOG");
  xsaddinstanceslot(dialog_item, "ACTION");
  xsaddinstanceslot(dialog_item, "SIZE");
  xsaddinstanceslot(dialog_item, "LOCATION");
  xsaddinstanceslot(dialog_item, "TEXT");
#ifdef X11WINDOWS
  xsaddinstanceslot(dialog_item, "WINDOW-ID");
#endif /* X11WINDOWS */
  xsaddmsg(dialog_item, ":DO-ACTION");
  xsaddmsg(dialog_item, ":ACTION");

  /* BUTTON-ITEM-PROTO */
  button_item = xsnewproto("BUTTON-ITEM-PROTO", dialog_item);
  xsaddmsg(button_item, ":ISNEW");

  /* TOGGLE-ITEM-PROTO */
  toggle_item = xsnewproto("TOGGLE-ITEM-PROTO", dialog_item);
  xsaddinstanceslot(toggle_item, "VALUE");
  xsaddmsg(toggle_item, ":ISNEW");
  xsaddmsg(toggle_item, ":VALUE");

  /* TEXT-ITEM-PROTO */
  text_item = xsnewproto("TEXT-ITEM-PROTO", dialog_item);
  xsaddinstanceslot(text_item, "TEXT-LENGTH");
  xsaddinstanceslot(text_item, "EDITABLE");
  xsaddmsg(text_item, ":ISNEW");
  xsaddmsg(text_item, ":TEXT");

  /* CHOICE-ITEM-PROTO */
  choice_item = xsnewproto("CHOICE-ITEM-PROTO", dialog_item);
  xsaddinstanceslot(choice_item, "VALUE");
  xsaddmsg(choice_item, ":ISNEW");
  xsaddmsg(choice_item, ":VALUE");

  /* SCROLL-ITEM-PROTO */
  scroll_item = xsnewproto("SCROLL-ITEM-PROTO", dialog_item);
  xsaddinstanceslot(scroll_item, "VALUE");
  xsaddinstanceslot(scroll_item, "PAGE-INCREMENT");
  xsaddinstanceslot(scroll_item, "MAX-VALUE");
  xsaddinstanceslot(scroll_item, "MIN-VALUE");
  xsaddmsg(scroll_item, ":ISNEW");
  xsaddmsg(scroll_item, ":VALUE");
  xsaddmsg(scroll_item, ":MAX-VALUE");
  xsaddmsg(scroll_item, ":MIN-VALUE");
  xsaddmsg(scroll_item, ":SCROLL-ACTION");

  /* LIST-ITEM-PROTO */
  list_item = xsnewproto("LIST-ITEM-PROTO", dialog_item);
  xsaddinstanceslot(list_item, "COLUMNS");
  xsaddinstanceslot(list_item, "LIST-DATA");
  xsaddinstanceslot(list_item, "MULTIPLE");
  xsaddinstanceslot(list_item, "INTERNALS");
  xsaddmsg(list_item, ":ISNEW");
  xsaddmsg(list_item, ":DO-ACTION");
  xsaddmsg(list_item, ":SET-TEXT");
  xsaddmsg(list_item, ":SELECTION");

  /* GRAPH-WINDOW-PROTO */
  iview_window = xsnewproto("GRAPH-WINDOW-PROTO", window);
  xsaddinstanceslot(iview_window, "INTERNALS");
  xsaddinstanceslot(iview_window, "MENU-TITLE");
  xsaddinstanceslot(iview_window, "HAS-V-SCROLL");
  xsaddinstanceslot(iview_window, "HAS-H-SCROLL");
  xsaddinstanceslot(iview_window, "BLACK-ON-WHITE");
  xsaddinstanceslot(iview_window, "MENU");
  xssetslotval(iview_window, "GO-AWAY", s_true);
  xssetslotval(iview_window, "BLACK-ON-WHITE", s_true);
  initialize_graph_window(iview_window);

  xsaddmsg(iview_window, ":ISNEW");
  xsaddmsg(iview_window, ":ALLOCATE");

  xsaddmsg(iview_window, ":IDLE-ON");

  xsaddmsg(iview_window, ":MENU");

  xsaddmsg(iview_window, ":UPDATE");
  xsaddmsg(iview_window, ":ACTIVATE");
  xsaddmsg(iview_window, ":REMOVE");
  xsaddmsg(iview_window, ":DISPOSE");
  xsaddmsg(iview_window, ":CLOSE");
  xsaddmsg(iview_window, ":WHILE-BUTTON-DOWN");
  xsaddmsg(iview_window, ":SHOW-WINDOW");
  xsaddmsg(iview_window, ":NEW-MENU");
  xsaddmsg(iview_window, ":RESIZE");
  xsaddmsg(iview_window, ":REDRAW");
  xsaddmsg(iview_window, ":DO-IDLE");
  xsaddmsg(iview_window, ":DO-CLICK");
  xsaddmsg(iview_window, ":DO-MOTION");
  xsaddmsg(iview_window, ":DO-KEY");
  xsaddmsg(iview_window, ":DO-BUTTON-DOWN");
  
  xsaddmsg(iview_window, ":CANVAS-WIDTH");
  xsaddmsg(iview_window, ":CANVAS-HEIGHT");
  xsaddmsg(iview_window, ":LINE-TYPE");
  xsaddmsg(iview_window, ":DRAW-MODE");
  xsaddmsg(iview_window, ":DRAW-COLOR");
  xsaddmsg(iview_window, ":BACK-COLOR");
  xsaddmsg(iview_window, ":USE-COLOR");
  xsaddmsg(iview_window, ":REVERSE-COLORS");
  xsaddmsg(iview_window, ":VIEW-RECT");
  xsaddmsg(iview_window, ":LINE-WIDTH");
  xsaddmsg(iview_window, ":CLIP-RECT");
  xsaddmsg(iview_window, ":CURSOR");

  xsaddmsg(iview_window, ":HAS-H-SCROLL");
  xsaddmsg(iview_window, ":HAS-V-SCROLL");
  xsaddmsg(iview_window, ":SCROLL");
  xsaddmsg(iview_window, ":H-SCROLL-INCS");
  xsaddmsg(iview_window, ":V-SCROLL-INCS");

  xsaddmsg(iview_window, ":DRAW-LINE");
  xsaddmsg(iview_window, ":DRAW-POINT");
  xsaddmsg(iview_window, ":ERASE-RECT");
  xsaddmsg(iview_window, ":FRAME-RECT");
  xsaddmsg(iview_window, ":PAINT-RECT");
  xsaddmsg(iview_window, ":ERASE-OVAL");
  xsaddmsg(iview_window, ":FRAME-OVAL");
  xsaddmsg(iview_window, ":PAINT-OVAL");
  xsaddmsg(iview_window, ":ERASE-ARC");
  xsaddmsg(iview_window, ":FRAME-ARC");
  xsaddmsg(iview_window, ":PAINT-ARC");
  xsaddmsg(iview_window, ":ERASE-POLY");
  xsaddmsg(iview_window, ":FRAME-POLY");
  xsaddmsg(iview_window, ":PAINT-POLY");

  xsaddmsg(iview_window, ":TEXT-ASCENT");
  xsaddmsg(iview_window, ":TEXT-DESCENT");
  xsaddmsg(iview_window, ":TEXT-WIDTH");
  xsaddmsg(iview_window, ":DRAW-STRING");
  xsaddmsg(iview_window, ":DRAW-STRING-UP");
  xsaddmsg(iview_window, ":DRAW-TEXT");
  xsaddmsg(iview_window, ":DRAW-TEXT-UP");

  xsaddmsg(iview_window, ":DRAW-SYMBOL");
  xsaddmsg(iview_window, ":REPLACE-SYMBOL");

  xsaddmsg(iview_window, ":START-BUFFERING");
  xsaddmsg(iview_window, ":BUFFER-TO-SCREEN");

#ifdef MACINTOSH
  xsaddmsg(iview_window, ":COPY-TO-CLIP");
#endif /* MACINTOSH */
  xsaddmsg(iview_window, ":DRAG-GREY-RECT");
  xsaddmsg(iview_window, ":IMAGE-TO-FILE");
  xsaddmsg(iview_window, ":DRAW-BITMAP");
  
  /* GRAPH-PROTO */
  iview = xsnewproto("GRAPH-PROTO", iview_window);
  xsaddinstanceslot(iview, "SLICERS");
  xsaddinstanceslot(iview, "MOUSE-MODE");
  xsaddinstanceslot(iview, "FIXED-ASPECT");
  xsaddinstanceslot(iview, "SHOWING-LABELS");
  xsaddinstanceslot(iview, "VARIABLE-LABELS");
  xsaddinstanceslot(iview, "NUMBER-OF-VARIABLES");
  xsaddinstanceslot(iview, "MENU-TEMPLATE");
  xsaddinstanceslot(iview, "OPTIONS-TEMPLATE");
  xsaddinstanceslot(iview, "SCALE-TYPE");
  xsaddinstanceslot(iview, "OVERLAYS");
  xssetslotval(iview, "MOUSE-MODE", s_selecting);
  xsaddslot(iview, "MODE-LIST");
  initialize_graph(iview);

  xsaddmsg(iview, ":ISNEW");
  xsaddmsg(iview, ":ALLOCATE");

  xsaddmsg(iview, ":RESIZE");
  xsaddmsg(iview, ":REDRAW");
  xsaddmsg(iview, ":REDRAW-BACKGROUND");
  xsaddmsg(iview, ":CLEAR-CONTENT");
  xsaddmsg(iview, ":REDRAW-CONTENT");
  xsaddmsg(iview, ":REDRAW-OVERLAYS");
  xsaddmsg(iview, ":RESIZE-OVERLAYS");
  xsaddmsg(iview, ":OVERLAY-CLICK");
  xsaddmsg(iview, ":ADJUST-SCREEN");
  xsaddmsg(iview, ":ADJUST-POINTS-IN-RECT");
  xsaddmsg(iview, ":ADJUST-SCREEN-POINT");
  xsaddmsg(iview, ":MARK-POINTS-IN-RECT");

  xsaddmsg(iview, ":CONTENT-RECT");
  xsaddmsg(iview, ":CONTENT-ORIGIN");
  xsaddmsg(iview, ":CONTENT-VARIABLES");
  xsaddmsg(iview, ":CLICK-RANGE");
  xsaddmsg(iview, ":MOUSE-MODE");
  xsaddmsg(iview, ":SHOWING-LABELS");
  xsaddmsg(iview, ":MARGIN");
  xsaddmsg(iview, ":FIXED-ASPECT");
  xsaddmsg(iview, ":NEEDS-ADJUSTING");

  xsaddmsg(iview, ":X-AXIS");
  xsaddmsg(iview, ":Y-AXIS");

  xsaddmsg(iview, ":BRUSH");
  xsaddmsg(iview, ":ERASE-BRUSH");
  xsaddmsg(iview, ":DRAW-BRUSH");
  xsaddmsg(iview, ":MOVE-BRUSH");
  xsaddmsg(iview, ":RESIZE-BRUSH");

  xsaddmsg(iview, ":DO-CLICK");
  xsaddmsg(iview, ":DO-MOTION");
  xsaddmsg(iview, ":DO-SELECT-CLICK");
  xsaddmsg(iview, ":DO-BRUSH-CLICK");
  xsaddmsg(iview, ":DO-BRUSH-MOTION");
  xsaddmsg(iview, ":UNSELECT-ALL-POINTS");
  xsaddmsg(iview, ":ERASE-SELECTION");
  xsaddmsg(iview, ":MASK-SELECTION");
  xsaddmsg(iview, ":UNMASK-ALL-POINTS");
  xsaddmsg(iview, ":POINTS-SHOWING");
  xsaddmsg(iview, ":POINTS-HILITED");
  xsaddmsg(iview, ":POINTS-SELECTED");
  xsaddmsg(iview, ":SELECTION");
  xsaddmsg(iview, ":SHOW-ALL-POINTS");
  xsaddmsg(iview, ":ALL-POINTS-SHOWING-P");
  xsaddmsg(iview, ":ALL-POINTS-UNMASKED-P");
  xsaddmsg(iview, ":ANY-POINTS-SELECTED-P");

  xsaddmsg(iview, ":LINKED");
  xsaddmsg(iview, ":LINKS");

  xsaddmsg(iview, ":NUM-VARIABLES");
  xsaddmsg(iview, ":VARIABLE-LABEL");
  xsaddmsg(iview, ":RANGE");
  xsaddmsg(iview, ":SCALED-RANGE");
  xsaddmsg(iview, ":CANVAS-RANGE");
  xsaddmsg(iview, ":TRANSFORMATION");
  xsaddmsg(iview, ":APPLY-TRANSFORMATION");

  xsaddmsg(iview, ":ADD-POINTS");
  xsaddmsg(iview, ":CLEAR-POINTS");
  xsaddmsg(iview, ":NUM-POINTS");
  xsaddmsg(iview, ":POINT-COORDINATE");
  xsaddmsg(iview, ":POINT-CANVAS-COORDINATE");
  xsaddmsg(iview, ":POINT-TRANSFORMED-COORDINATE");
  xsaddmsg(iview, ":POINT-MASKED");
  xsaddmsg(iview, ":POINT-COLOR");
  xsaddmsg(iview, ":POINT-STATE");
  xsaddmsg(iview, ":LAST-POINT-STATE");
  xsaddmsg(iview, ":POINT-MARKED");
  xsaddmsg(iview, ":POINT-LABEL");
  xsaddmsg(iview, ":POINT-SYMBOL");
  xsaddmsg(iview, ":POINT-SELECTED");
  xsaddmsg(iview, ":POINT-HILITED");
  xsaddmsg(iview, ":POINT-SHOWING");

  xsaddmsg(iview, ":ADD-LINES");
  xsaddmsg(iview, ":CLEAR-LINES");
  xsaddmsg(iview, ":NUM-LINES");
  xsaddmsg(iview, ":LINESTART-COORDINATE");
  xsaddmsg(iview, ":LINESTART-CANVAS-COORDINATE");
  xsaddmsg(iview, ":LINESTART-TRANSFORMED-COORDINATE");
  xsaddmsg(iview, ":LINESTART-MASKED");
  xsaddmsg(iview, ":LINESTART-COLOR");
  xsaddmsg(iview, ":LINESTART-NEXT");
  xsaddmsg(iview, ":LINESTART-TYPE");
  xsaddmsg(iview, ":LINESTART-WIDTH");

#ifdef USESTRINGS
  xsaddmsg(iview, ":ADD-STRINGS");
  xsaddmsg(iview, ":CLEAR-STRINGS");
  xsaddmsg(iview, ":NUM-STRINGS");
  xsaddmsg(iview, ":STRING-COORDINATE");
  xsaddmsg(iview, ":STRING-CANVAS-COORDINATE");
  xsaddmsg(iview, ":STRING-TRANSFORMED-COORDINATE");
  xsaddmsg(iview, ":STRING-MASKED");
  xsaddmsg(iview, ":STRING-COLOR");
  xsaddmsg(iview, ":STRING-MODIFIERS");
#endif /* USESTRINGS */
  
  xsaddmsg(iview, ":DRAW-DATA-POINTS");
  xsaddmsg(iview, ":DRAW-DATA-LINES");
#ifdef USESTRINGS
  xsaddmsg(iview, ":DRAW-DATA-STRINGS");
#endif /* USESTRINGS */

  xsaddmsg(iview, ":ROTATE-2");

  xsaddmsg(iview, ":ADJUST-TO-DATA");
  xsaddmsg(iview, ":VISIBLE-RANGE");
  xsaddmsg(iview, ":SCALE-TO-RANGE");
  xsaddmsg(iview, ":SCALE");
  xsaddmsg(iview, ":SHIFT");

  xsaddmsg(iview, ":CLEAR-MASKS");
  xsaddmsg(iview, ":SLICE-VARIABLE");
  xsaddmsg(iview, ":REAL-TO-CANVAS");
  xsaddmsg(iview, ":CANVAS-TO-REAL");
  xsaddmsg(iview, ":SCALED-TO-CANVAS");
  xsaddmsg(iview, ":CANVAS-TO-SCALED");
  xsaddmsg(iview, ":POINTS-IN-RECT");
  xsaddmsg(iview, ":ADJUST-DEPTH-CUING");

  /* SPIN-PROTO */
  iview_spin = xsnewproto("SPIN-PROTO", iview);
  xsaddinstanceslot(iview_spin, "SHOWING-AXES");
  xsaddinstanceslot(iview_spin, "DEPTH-CUING");
  xsaddinstanceslot(iview_spin, "CONTENT-VARIABLES");
  xsaddinstanceslot(iview_spin, "ROTATION-TYPE");
  xsaddinstanceslot(iview_spin, "ROTATION-ANGLE");
  xsaddinstanceslot(iview_spin, "ROTATION-CONTROLS");
  initialize_graph(iview_spin);

  xsaddmsg(iview_spin, ":ALLOCATE");

  xsaddmsg(iview_spin, ":CONTENT-VARIABLES");
  xsaddmsg(iview_spin, ":SHOWING-AXES");
  xsaddmsg(iview_spin, ":DEPTH-CUING");
  xsaddmsg(iview_spin, ":RESIZE");
  xsaddmsg(iview_spin, ":REDRAW-CONTENT");  
  xsaddmsg(iview_spin, ":DO-IDLE");
  xsaddmsg(iview_spin, ":ANGLE");
  xsaddmsg(iview_spin, ":ROTATE");
  xsaddmsg(iview_spin, ":DRAW-AXES");

  /* SCATMAT-PROTO */
  iview_scatmat = xsnewproto("SCATMAT-PROTO", iview);
  initialize_graph(iview_scatmat);

  xsaddmsg(iview_scatmat, ":ALLOCATE");

  xsaddmsg(iview_scatmat, ":RESIZE");
  xsaddmsg(iview_scatmat, ":REDRAW-BACKGROUND");
  xsaddmsg(iview_scatmat, ":REDRAW-CONTENT");
  xsaddmsg(iview_scatmat, ":DO-CLICK");
  xsaddmsg(iview_scatmat, ":DO-MOTION");
  xsaddmsg(iview_scatmat, ":ADD-POINTS");
  xsaddmsg(iview_scatmat, ":ADD-LINES");
#ifdef USESTRINGS
  xsaddmsg(iview_scatmat, ":ADD-STRINGS");
#endif /* USESTRINGS */
  xsaddmsg(iview_scatmat, ":ADJUST-SCREEN-POINT");
  xsaddmsg(iview_scatmat, ":ADJUST-POINTS-IN-RECT");
  xsaddmsg(iview_scatmat, ":MARK-POINTS-IN-RECT");
  
  /* NAME-LIST-PROTO */
  iview_list = xsnewproto("NAME-LIST-PROTO", iview);
  initialize_graph(iview_list);

  xsaddmsg(iview_list, ":ALLOCATE");

  xsaddmsg(iview_list, ":REDRAW-BACKGROUND");
  xsaddmsg(iview_list, ":REDRAW-CONTENT");
  xsaddmsg(iview_list, ":ADD-POINTS");
  xsaddmsg(iview_list, ":ADJUST-SCREEN-POINT");
  xsaddmsg(iview_list, ":ADJUST-POINTS-IN-RECT");
  xsaddmsg(iview_list, ":MARK-POINTS-IN-RECT");

  /* HISTOGRAM-PROTO */
  iview_hist = xsnewproto("HISTOGRAM-PROTO", iview);
  xsaddinstanceslot(iview_hist, "HISTOGRAM-INTERNALS");
  initialize_graph(iview_hist);
  newhistinternals(iview_hist);

  xsaddmsg(iview_hist, ":ISNEW");
  xsaddmsg(iview_hist, ":ALLOCATE");

  xsaddmsg(iview_hist, ":ADD-POINTS");
  xsaddmsg(iview_hist, ":CLEAR-POINTS");
  xsaddmsg(iview_hist, ":RESIZE");
  xsaddmsg(iview_hist, ":REDRAW-CONTENT");
  xsaddmsg(iview_hist, ":ADJUST-SCREEN");
  xsaddmsg(iview_hist, ":NUM-BINS");
  xsaddmsg(iview_hist, ":BIN-COUNTS");
  xsaddmsg(iview_hist, ":ADJUST-TO-DATA");
  xsaddmsg(iview_hist, ":ADJUST-SCREEN-POINT");
  xsaddmsg(iview_hist, ":ADJUST-POINTS-IN-RECT");
  xsaddmsg(iview_hist, ":MARK-POINTS-IN-RECT");

  /* SCATTERPLOT-PROTO */
  scatterplot = xsnewproto("SCATTERPLOT-PROTO", iview);
  initialize_graph(scatterplot);

  xsaddmsg(scatterplot, ":ADD-POINTS");
  xsaddmsg(scatterplot, ":ADD-LINES");
#ifdef USESTRINGS
  xsaddmsg(scatterplot, ":ADD-STRINGS");
#endif /* USESTRINGS */
  xsaddmsg(scatterplot, ":ADJUST-TO-DATA");
#endif /* NOGRAPHICS */

  /* COMPOUND-DATA-PROTO */
  compound_data = xsnewproto("COMPOUND-DATA-PROTO", root_object);
  xsaddmsg(compound_data, ":DATA-LENGTH");
  xsaddmsg(compound_data, ":DATA-SEQ");
  xsaddmsg(compound_data, ":MAKE-DATA");
  xsaddmsg(compound_data, ":SELECT-DATA");
}


syntax highlighted by Code2HTML, v. 0.9.1