⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpix.shar

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 SHAR
📖 第 1 页 / 共 2 页
字号:
XX/*ARGSUSED*/Xvoid TimeOutCallback(data)X     caddr_t data;X{X  /* If there's another grid available draw it */XX  if (GetNextGrid(grid))X    DrawGrid(grid);X  X  /* Always restore the call back */XX  timer = XtAddTimeOut(interval, TimeOutCallback, NULL);XX}  XX/*ARGSUSED*/Xvoid StartStop(widget, data, event)X     Widget widget;X     caddr_t data;X     XEvent *event;X{X  /* Toggle propagation of display */XX  if (working) {X    XtRemoveTimeOut(timer);X    working = False;X    XtSetArg(arg[0], XtNlabel, "Start");   /* Reset button label */X    XtSetValues(start_button,arg,1);X    XFlush(display);X  }X  else {X    XtSetArg(arg[0], XtNlabel, "Stop");   /* Reset button label */X    XtSetValues(start_button,arg,1);X    timer = XtAddTimeOut(interval, TimeOutCallback, NULL);X    working = True;X    XFlush(display);X  }X}  XXvoid HSVtoRGB(h, s, v, r, g, b)X     double h, s, v, *r, *g, *b;X/*X  hue (0-360), s&v (0-1), r&g&b (0-1)X*/X{X  int ih;X  double rh, x, y, z;XX  /* Zero saturation means gray */XX  if (s < 0.0001) {X    *r = v; *g = v; *b = v;X    return;X  }XX  /* Put hue in [0,6) */XX  if (h > 359.999)X    h = 0.0;X  elseX    h = h/60.0;XX  ih = h; rh = h - ih;     /* Integer and fractional parts */XX  x = v*(1.0 - s);X  y = v*(1.0-s*rh);X  z = v*(1.0-s*(1.0-rh));XX  switch (ih) {X  case 0:X    *r = v; *g = z; *b = x; break;X  case 1:X    *r = y; *g = v; *b = x; break;X  case 2:X    *r = x; *g = v; *b = z; break;X  case 3:X    *r = x; *g = y; *b = v; break;X  case 4:X    *r = z; *g = x; *b = v; break;X  case 5:X    *r = v; *g = x; *b = y; break;X  default:X    Error("HLStoRGB: invalid hue", ih);X  }X}XXvoid Setcmap()X/*X  Make the color map ... scheme base on linear interpolation of hsv.X*/X{X  int i;X  XColor color;X  Colormap colormap;X  double scale = 1.0 / ((double) (MAX_COL-1));X  double hue, saturation, value, red, green, blue;XX  colormap = DefaultColormap(display, screen);XX  for (i=0; i<MAX_COL; i++) {XX    saturation = scale * i;X    hue = 360.0 * saturation;X    value = 1.0;XX    HSVtoRGB(hue, saturation, value, &red, &green, &blue);XX    color.red   = (short) (red   * 65535.0);X    color.green = (short) (green * 65535.0);X    color.blue  = (short) (blue  * 65535.0);XX    if (XAllocColor(display, colormap, &color) == 0)X      Error("couldn't assign color",i);XX    cmap[i] = color.pixel;X/*X    (void) printf("Colour %d red=%x, green=%x, blue=%x, pixel=%x\n",X		  i, color.red, color.green, color.blue, color.pixel);X*/X  }XX  /* Unused */X  /* Get rgb color from ascii name */X  /*    if (XParseColor(display, colormap, colors[i], &color) == 0)X	Error("Setcmap: error parsing color number ",i); */XX}XXint main(argc, argv)X     unsigned int argc;X     char **argv;X{X  int n;X  Dimension frame_size;XX  /* First input is the MAXIMUM grid size ... can't do anythingX     without this */XX  if (fread(&max_grid_size, sizeof(int), 1, stdin) != 1)X    Error("Failed to get max_grid_size", -1);XX  max_grid_size = ntohl(max_grid_size);  /* Convert to machine format */XX  frame_size = MAX(max_grid_size, 256);XX  /* Create top level shell widget */X  X  top_level_widget = XtInitialize("toplevel", "TopLevel",X				  NULL, 0, &argc, argv);XX  /* Create form widget to hold everything else */XX  n = 0;X  box_widget = XtCreateManagedWidget("box", formWidgetClass, X				     top_level_widget, arg, n);XX  /* Create the label to hold the title */XX  (void) strcpy(title, "2-D Grid Display");X  n = 0;X  XtSetArg(arg[n], XtNx, 10); n++;X  XtSetArg(arg[n], XtNy, 10); n++;X  XtSetArg(arg[n], XtNwidth, frame_size); n++;X  XtSetArg(arg[n], XtNlabel, title); n++;X  XtSetArg(arg[n], XtNborderWidth, (Dimension) 0); n++;X  title_widget = XtCreateManagedWidget("title", labelWidgetClass,X				       box_widget, arg, n);XX  /* Create the label to hold the grid data */XX  (void) strcpy(grid_data, " ");X  n = 0;X  XtSetArg(arg[n], XtNvertDistance, 10); n++;X  XtSetArg(arg[n], XtNfromVert, title_widget); n++;X  XtSetArg(arg[n], XtNjustify, XtJustifyLeft); n++;X  XtSetArg(arg[n], XtNwidth, frame_size); n++;X  XtSetArg(arg[n], XtNlabel, " "); n++;X  grid_data_widget = XtCreateManagedWidget("grid data", labelWidgetClass,X					   box_widget, arg, n);XX  /* Create the file menu button and the menu ... also a bitX     further down make and add the check mark */XX  n = 0;X  XtSetArg(arg[n], XtNvertDistance, 10); n++;X  XtSetArg(arg[n], XtNfromVert, grid_data_widget); n++;X  XtSetArg(arg[n], XtNlabel, "File"); n++;X  XtSetArg(arg[n], XtNmenuName, "file menu"); n++;X  XtSetArg(arg[n], XtNshapeStyle, XmuShapeOval); n++;X  file_menu_button = XtCreateManagedWidget("file", menuButtonWidgetClass,X				      box_widget, arg, n);X  file_menu = XtCreatePopupShell("file menu", simpleMenuWidgetClass,X				 file_menu_button, NULL, 0);XX  for (n=0; n<n_file_menu_entries; n++) {X    String item = file_menu_entries[n];X    file_menu_widgets[n] = XtCreateManagedWidget(item, smeBSBObjectClass, X					      file_menu, NULL, 0);X    XtAddCallback(file_menu_widgets[n], XtNcallback,X		  FileMenuCallback, (caddr_t) n);X  }XX  /* Create the Start/Stop command button */XX  n = 0;X  XtSetArg(arg[n], XtNvertDistance, 10); n++;X  XtSetArg(arg[n], XtNfromVert, grid_data_widget); n++;X  XtSetArg(arg[n], XtNhorizDistance, 10); n++;X  XtSetArg(arg[n], XtNfromHoriz, file_menu_button); n++;X  XtSetArg(arg[n], XtNlabel, "Start"); n++;X  XtSetArg(arg[n], XtNshapeStyle, XmuShapeOval); n++;X  start_button = XtCreateManagedWidget("start/stop", commandWidgetClass,X				       box_widget, arg, n);X  XtAddCallback(start_button, XtNcallback, StartStop, NULL);XX  /* Create the scroll bar for the interval */XX  n = 0;X  XtSetArg(arg[n], XtNvertDistance, 10); n++;X  XtSetArg(arg[n], XtNfromVert, grid_data_widget); n++;X  XtSetArg(arg[n], XtNhorizDistance, 10); n++;X  XtSetArg(arg[n], XtNfromHoriz, start_button); n++;X  XtSetArg(arg[n], XtNorientation, XtorientHorizontal); n++;X  XtSetArg(arg[n], XtNlength, 100); n++;X  XtSetArg(arg[n], XtNthickness, 15); n++;X  scroll_widget = XtCreateManagedWidget("scroll", scrollbarWidgetClass,X					box_widget, arg, n);X  XtAddCallback(scroll_widget, XtNscrollProc, ScrollProc, NULL);X  XtAddCallback(scroll_widget, XtNjumpProc, JumpProc, NULL);XX  /* Create the label widget which displays the interval valueX     associated with the scrollbar. */XX  n = 0;X  (void) sprintf(interval_string, "%4d ms", interval);X  XtSetArg(arg[n], XtNvertDistance, 10); n++;X  XtSetArg(arg[n], XtNfromVert, grid_data_widget); n++;X  XtSetArg(arg[n], XtNhorizDistance, 10); n++;X  XtSetArg(arg[n], XtNfromHoriz, scroll_widget); n++;X  XtSetArg(arg[n], XtNjustify, XtJustifyRight); n++;X  XtSetArg(arg[n], XtNlabel, interval_string); n++;X  XtSetArg(arg[n], XtNborderWidth, (Dimension) 0); n++;X  interval_widget = XtCreateManagedWidget("interval", labelWidgetClass,X					   box_widget, arg, n);X  X  /* Now add the actual canvas ... PICT_SIZE square pixels*/XX  n=0;X  XtSetArg(arg[n],XtNheight, PICT_SIZE); n++;X  XtSetArg(arg[n],XtNwidth,  PICT_SIZE); n++;X  XtSetArg(arg[n], XtNvertDistance, 10); n++;X  XtSetArg(arg[n], XtNfromVert, file_menu_button); n++;X  canvas_widget = XtCreateManagedWidget("canvas", compositeWidgetClass,X					box_widget, arg, n);XX  /* Add callback for exposure */XX  XtAddEventHandler(canvas_widget,ExposureMask,False,Exposed,NULL);XX  /* Realize everything */XX  XtRealizeWidget(top_level_widget);XX  /* Set up the drawing environment */XX  display = XtDisplay(canvas_widget);X  window = XtWindow(canvas_widget); X  screen = DefaultScreen(display);X  visual = DefaultVisual(display, screen);X  depth = DisplayPlanes(display, screen);X  (void) printf("depth = %d\n",depth);X  gc = XCreateGC(display, window, 0, (XGCValues *) NULL); X  X  Setcmap();XX  /* Make the pixmap for the check mark for a selected menu itemX     and mark the cycle item as selected */XX  check_mark = XCreateBitmapFromData(display, window, X				     check_bits, check_width, check_height);X  n=0;X  XtSetArg(arg[n], XtNrightBitmap, check_mark); n++;X  XtSetValues(file_menu_widgets[1], arg, n);XX  /* Make image to match the size of our canvas .. PICT_SIZExPICT_SIZE */XX  pict  = (u_char *) malloc(PICT_SIZE*PICT_SIZE);X  image = XCreateImage(display, visual, depth, ZPixmap, 0,X		       pict, PICT_SIZE, PICT_SIZE, 8, 0);XX  /* Make the byte array which will hold the frames */XX  grid = (u_char *) malloc(max_grid_size*max_grid_size);XX  /* Enter the event loop */XX  XtMainLoop();XX  return 0;  /* Never actually does this */X}//E*O*F xpix.c//exit 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -