ftp.nice.ch/pub/next/graphics/3d/geomview.1.4.1.s.tar.gz#/Geomview/src/bin/clipboard/clipboard.c

This is clipboard.c in view mode; [Download] [Up]

#include <stdio.h>
#include <math.h>
#include "geom.h"
#include "mibload.h"
#include "clipboard.mib"
#include "clip.h"

void cut_callback(Widget , XtPointer,
	XmPushButtonCallbackStruct *);
void copy_callback(Widget , XtPointer,
	XmPushButtonCallbackStruct *);
void paste_callback(Widget , XtPointer,
	XmPushButtonCallbackStruct *);
void delete_callback(Widget , XtPointer,
	XmPushButtonCallbackStruct *);


char  obj_name[1000];
Geom *theObject;
int   clipfull;

main(int argc, char **argv)
{
  XtAppContext	App;
  Widget	TopLevel,
		MainWindow,
		CutButton,
		CopyButton,
		PasteButton,
		DeleteButton,
		DrawArea;

  int		no_mi;

  mib_Widget   *MainForm;
  static String	fallbacks[] = {
	"myprog*Foreground:			gray20", /*15*/
	"myprog*Background:			gray70", /*80*/
	"myprog*XmTextField.background:	       DeepSkyBlue",
	"myprog*fontList:\
	-adobe-helvetica-medium-r-normal--14-100-100-100-p-76-iso8859-1",
	NULL};

  no_mi = 0;				/* no motif interface if no_mi = 1 */

  clipfull = 0;
  obj_name[0] = '\0';


  /* initialize application top level widget */

  TopLevel = XtVaAppInitialize(&App, "myprog", NULL, 0,
	&argc, argv, fallbacks, NULL);


  /* configure resize policy of window */

  XtVaSetValues(TopLevel, XmNminWidth, 272, XmNminHeight, 172, NULL);

  /* create the application main window widget */

  MainWindow = XtCreateManagedWidget("MainWindow",
	xmMainWindowWidgetClass, TopLevel, NULL, 0);


  /* load the interface via the mib library */

  MainForm = mib_load_interface(MainWindow,
	Root, MI_FROMSTRING);
/*  MainForm = mib_load_interface(MainWindow, "mib/clipboard.mib", MI_FROMFILE);
*/

  if (MainForm == NULL)
    exit(0);

  /* Set widget pointers to null before trying to find their instances */

  CutButton  = NULL;
  CopyButton  = NULL;
  PasteButton  = NULL;
  DeleteButton  = NULL;
  DrawArea = NULL;

  /* Do similarly when trying to find a widget named "CutButton" */

  if (!(CutButton = XtNameToWidget(MainForm->me, "CutButton")))
    no_mi = 1;
  if (!(CopyButton = XtNameToWidget(MainForm->me, "CopyButton")))
    no_mi = 1;
  if (!(PasteButton = XtNameToWidget(MainForm->me, "PasteButton")))
    no_mi = 1;
  if (!(DeleteButton = XtNameToWidget(MainForm->me, "DeleteButton")))
    no_mi = 1;
  if (!(DrawArea = XtNameToWidget(MainForm->me, "DrawingArea")))
    no_mi = 1;

  /* if we found both widgets then add a callback to the button. This
     is called whenever the user clicks the button. If there was no
     button and/or no text box then we avoid adding the callback. */

  if (!no_mi)
  {
    XtAddCallback(CutButton, XmNactivateCallback, cut_callback, NULL);
    XtAddCallback(CopyButton, XmNactivateCallback, copy_callback, NULL);
    XtAddCallback(PasteButton, XmNactivateCallback, paste_callback, NULL);
    XtAddCallback(DeleteButton, XmNactivateCallback, delete_callback, NULL);
  }


  /* Bring the application window up on the screen. */

  XtRealizeWidget(TopLevel);

  /* initialize visual clipboard  - mg library stuff (gl or vanilla-x)*/

  clipboard_init(MainForm->me);

  /* Begin main Intrinsics event loop */

  XtAppMainLoop (App);

}

void cut_callback(Widget w, XtPointer data, XmPushButtonCallbackStruct *cbs)
{
  char tmp;
  int  count;

  fprintf(stdout,"(echo (real-id target))\n");
  fflush(stdout);
  tmp = '\0';
  while (tmp != '\"')
    tmp = (char)fgetc(stdin);
  tmp = '\0';
  count = 0;
  while (tmp != '\"')
  {
    tmp = (char)fgetc(stdin);
    obj_name[count] = tmp;
    count++;
  }

  obj_name[count-1] = '\0';
   
  fprintf(stdout,"(write geometry - target)\n");
  fflush(stdout);
  theObject = GeomFLoad(stdin, obj_name);

  fprintf(stdout,"(delete target)\n");
  fflush(stdout);

  clipfull = 1;
  redraw(w);

}
void copy_callback(Widget w, XtPointer data, XmPushButtonCallbackStruct *cbs)
{
  char tmp;
  int  count;

  fprintf(stdout,"(echo (real-id target))\n");
  fflush(stdout);
  tmp = '\0';
  while (tmp != '\"')
    tmp = (char)fgetc(stdin);
  tmp = '\0';
  count = 0;
  while (tmp != '\"')
  {
    tmp = (char)fgetc(stdin);
    obj_name[count] = tmp;
    count++;
  }

  obj_name[count-1] = '\0';

  fprintf(stdout,"(write geometry - target)");
  fflush(stdout);
  theObject = GeomFLoad(stdin, obj_name);

  clipfull = 1;
  redraw(w);

}

void paste_callback(Widget w, XtPointer data, XmPushButtonCallbackStruct *cbs)
{
  if (clipfull == 0)
    return;

  fprintf(stdout,"(new-geometry %s {",obj_name);
  GeomFSave(theObject, stdout, obj_name);
  fprintf(stdout,"})");
  fflush(stdout);

}

void delete_callback(Widget w, XtPointer data, XmPushButtonCallbackStruct *cbs)
{
  char		tmp;

  fprintf(stdout,"(delete target)\n");
  fflush(stdout);

}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.