home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2771 < prev    next >
Internet Message Format  |  1991-02-16  |  51KB

  1. From: wht@n4hgf.Mt-Park.GA.US (Warren Tucker)
  2. Newsgroups: alt.sources
  3. Subject: X386MON part 02/06
  4. Message-ID: <322@n4hgf.Mt-Park.GA.US>
  5. Date: 16 Feb 91 19:33:49 GMT
  6.  
  7. Submitted-by: wht@n4hgf
  8. Archive-name: x386monx100/part02
  9.  
  10. #!/bin/sh
  11. # This is part 02 of x386monx100
  12. # ============= x386mon/Button.c ==============
  13. if test ! -d 'x386mon'; then
  14.     echo 'x - creating directory x386mon'
  15.     mkdir 'x386mon'
  16. fi
  17. if test -f 'x386mon/Button.c' -a X"$1" != X"-c"; then
  18.     echo 'x - skipping x386mon/Button.c (File already exists)'
  19. else
  20. echo 'x - extracting x386mon/Button.c (Text)'
  21. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/Button.c' &&
  22. X/* #define MyDebug */
  23. X/*+-------------------------------------------------------------------------
  24. X    Button.c - XwtButton widget (derived from Xaw code)
  25. X
  26. X  Defined functions:
  27. X    Button_Destroy(w)
  28. X    Button_alloc_armed_GC(bw)
  29. X    Button_alloc_label_GC(bw)
  30. X    Button_Initialize(request,new)
  31. X    Button_EventHandler(w,event,arg,argcount)
  32. X    Button_QueryGeometry(w,intended,preferred)
  33. X    Button_Realize(w,valueMask,attributes)
  34. X    Button_Redisplay(w,event,region)
  35. X    Button_Resize(w)
  36. X    Button_Calculations(bw)
  37. X    Button_SetValues(current,request,new)
  38. X    XwtCreateButton(parent,name,arglist,argcount)
  39. X    _Reposition(bw,width,height,dx,dy)
  40. X
  41. X--------------------------------------------------------------------------*/
  42. X/*+:EDITS:*/
  43. X/*:01-12-1991-04:34-wht@n4hgf-x1.00 (flush old edit notes) */
  44. X
  45. X/***********************************************************
  46. XCopyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts,
  47. Xand the Massachusetts Institute of Technology, Cambridge, Massachusetts.
  48. X
  49. X                        All Rights Reserved
  50. X
  51. XPermission to use, copy, modify, and distribute this software and its 
  52. Xdocumentation for any purpose and without fee is hereby granted, 
  53. Xprovided that the above copyright notice appear in all copies and that
  54. Xboth that copyright notice and this permission notice appear in 
  55. Xsupporting documentation, and that the names of Digital or MIT not be
  56. Xused in advertising or publicity pertaining to distribution of the
  57. Xsoftware without specific, written prior permission.  
  58. X
  59. XDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  60. XALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  61. XDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  62. XANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  63. XWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  64. XARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  65. XSOFTWARE.
  66. X
  67. X******************************************************************/
  68. X
  69. X#define XtStrlen(s)        ((s) ? strlen(s): 0)
  70. X
  71. X#include <X11/IntrinsicP.h>
  72. X#include <X11/StringDefs.h>
  73. X#include <stdio.h>
  74. X#include <ctype.h>
  75. X#include "ButtonP.h"
  76. X
  77. X#define offset(field) XtOffset(XwtButtonWidget,b.field)
  78. Xstatic XtResource resources[] = 
  79. X{
  80. X    {XwtNlabelColor,XwtCLabelColor,XtRPixel,sizeof(Pixel),
  81. X        offset(label_color),XtRString,"black"},
  82. X    {XwtNunarmedColor,XwtCUnarmedColor,XtRPixel,sizeof(Pixel),
  83. X        offset(unarmed_color),XtRString,"slate"},
  84. X    {XwtNarmedColor,XwtCArmedColor,XtRPixel,sizeof(Pixel),
  85. X        offset(armed_color),XtRString,"yellow"},
  86. X    {XwtNfont,XwtCFont,XtRFontStruct,sizeof(XFontStruct *),
  87. X        offset(font),XtRString,"fixed"},
  88. X    {XwtNlabel,XwtCLabel,XtRString,sizeof(String),
  89. X        offset(label),XtRString,NULL},
  90. X    {XwtNinternalWidth,XwtCWidth,XtRDimension,sizeof(Dimension),
  91. X        offset(internal_width),XtRImmediate,(caddr_t)1},
  92. X    {XwtNinternalHeight,XwtCHeight,XtRDimension,sizeof(Dimension),
  93. X        offset(internal_height),XtRImmediate,(caddr_t)1},
  94. X    {XwtNactivateCallback,XtCCallback,XtRCallback,sizeof(caddr_t),
  95. X        offset(cb_list), XtRCallback,NULL}
  96. X};
  97. X
  98. Xstatic void Button_Initialize();
  99. Xstatic void Button_Realize();
  100. Xstatic void Button_Resize();
  101. Xstatic void Button_Redisplay();
  102. Xstatic Boolean Button_SetValues();
  103. Xstatic void Button_Destroy();
  104. Xstatic void Button_EventHandler();
  105. Xstatic XtGeometryResult Button_QueryGeometry();
  106. X
  107. Xstatic char defaultTranslations[] =
  108. X    "<Btn1Down>: event()\n\
  109. X     <Btn1Up>: event()\n\
  110. X     <EnterWindow>: event()\n\
  111. X     <LeaveWindow>: event()\n";
  112. X
  113. Xstatic XtActionsRec actionsList[] =
  114. X{
  115. X    { "event",(XtActionProc)Button_EventHandler }
  116. X};
  117. X
  118. XXwtButtonClassRec ButtonClassRec = 
  119. X{
  120. X    {
  121. X        /* core_class fields */
  122. X#define superclass              (&xmPrimitiveClassRec)
  123. X        /* superclass           */      (WidgetClass)superclass,
  124. X        /* class_name           */      "Button",
  125. X        /* widget_size          */      sizeof(XwtButtonRec),
  126. X        /* class_initialize     */      NULL,
  127. X        /* class_part_initialize*/      NULL,
  128. X        /* class_inited         */      FALSE,
  129. X        /* initialize           */      Button_Initialize,
  130. X        /* initialize_hook      */      NULL,
  131. X        /* realize              */      Button_Realize,
  132. X        /* actions              */      actionsList,
  133. X        /* num_actions          */      XtNumber(actionsList),
  134. X        /* resources            */      resources,
  135. X        /* num_resources        */      XtNumber(resources),
  136. X        /* xrm_class            */      NULLQUARK,
  137. X        /* compress_motion      */      TRUE,
  138. X        /* compress_exposure    */      TRUE,
  139. X        /* compress_enterleave  */      TRUE,
  140. X        /* visible_interest     */      TRUE,
  141. X        /* destroy              */      Button_Destroy,
  142. X        /* resize               */      Button_Resize,
  143. X        /* expose               */      Button_Redisplay,
  144. X        /* set_values           */      Button_SetValues,
  145. X        /* set_values_hook      */      NULL,
  146. X        /* set_values_almost    */      XtInheritSetValuesAlmost,
  147. X        /* get_values_hook      */      NULL,
  148. X        /* accept_focus         */      NULL,
  149. X        /* version              */      XtVersion,
  150. X        /* callback_private     */      NULL,
  151. X        /* tm_table             */      defaultTranslations,
  152. X        /* query_geometry       */      Button_QueryGeometry,
  153. X        /* display_accelerator  */      XtInheritDisplayAccelerator,
  154. X        /* extension            */      NULL
  155. X    }
  156. X};
  157. X
  158. XWidgetClass XwtbuttonWidgetClass = (WidgetClass) &ButtonClassRec;
  159. X
  160. X/*+-------------------------------------------------------------------------
  161. X    Button_Calculations(bw) - Calculate placements and sizes
  162. X--------------------------------------------------------------------------*/
  163. Xstatic void
  164. XButton_Calculations(bw)
  165. XXwtButtonWidget bw;
  166. X{
  167. X    register XFontStruct    *fs = bw->b.font;
  168. X
  169. X    if(bw->b.internal_height < 2)
  170. X        bw->b.internal_height = 2;
  171. X    if(bw->b.internal_width < 2)
  172. X        bw->b.internal_width = 2;
  173. X    bw->b.label_len = XtStrlen(bw->b.label);
  174. X    bw->b.label_width = XTextWidth(fs,bw->b.label,(int)bw->b.label_len) + 1;
  175. X    bw->b.label_height = fs->max_bounds.ascent + fs->max_bounds.descent;
  176. X
  177. X}    /* end of Button_Calculations */
  178. X
  179. X/*+-------------------------------------------------------------------------
  180. X    Button_alloc_label_GC(bw)
  181. X--------------------------------------------------------------------------*/
  182. Xstatic void
  183. XButton_alloc_label_GC(bw)
  184. XXwtButtonWidget bw;
  185. X{
  186. X    XGCValues    values;
  187. X
  188. X    values.foreground    = bw->b.label_color;
  189. X    values.font            = bw->b.font->fid;
  190. X    values.line_width    = 1;
  191. X    values.line_style    = LineSolid;
  192. X    values.cap_style    = CapButt;
  193. X    values.join_style    = JoinMiter;
  194. X
  195. X    bw->b.label_GC = XtGetGC((Widget)bw,
  196. X        (unsigned)GCForeground | GCFont | GCLineWidth | GCLineStyle |
  197. X        GCCapStyle | GCJoinStyle,&values);
  198. X
  199. X}    /* end of Button_alloc_label_GC */
  200. X
  201. X/*+-------------------------------------------------------------------------
  202. X    Button_alloc_armed_GC(bw)
  203. X--------------------------------------------------------------------------*/
  204. Xstatic void
  205. XButton_alloc_armed_GC(bw)
  206. XXwtButtonWidget bw;
  207. X{
  208. X    XGCValues    values;
  209. X
  210. X    values.foreground = bw->b.armed_color;
  211. X    values.background = bw->b.label_color;
  212. X    bw->b.armed_GC = XtGetGC((Widget)bw,
  213. X        (unsigned)GCForeground | GCBackground,&values);
  214. X
  215. X}    /* end of Button_alloc_armed_GC */
  216. X
  217. X/*+-------------------------------------------------------------------------
  218. X    Button_alloc_unarmed_GC(bw)
  219. X--------------------------------------------------------------------------*/
  220. Xstatic void
  221. XButton_alloc_unarmed_GC(bw)
  222. XXwtButtonWidget bw;
  223. X{
  224. X    XGCValues    values;
  225. X
  226. X    values.foreground = bw->b.unarmed_color;
  227. X    values.background = bw->b.label_color;
  228. X    bw->b.unarmed_GC = XtGetGC((Widget)bw,
  229. X        (unsigned)GCForeground | GCBackground,&values);
  230. X
  231. X}    /* end of Button_alloc_unarmed_GC */
  232. X
  233. X/*+-------------------------------------------------------------------------
  234. X    Button_Initialize(request,new)
  235. X--------------------------------------------------------------------------*/
  236. X/*ARGSUSED*/
  237. Xstatic void
  238. XButton_Initialize(request,new)
  239. XWidget request,new;
  240. X{
  241. X    XwtButtonWidget bw = (XwtButtonWidget)new;
  242. X
  243. X    if(bw->b.label == NULL)
  244. X        bw->b.label = bw->core.name;
  245. X    else 
  246. X        bw->b.label = strcpy(XtMalloc(strlen(bw->b.label) + 1),bw->b.label);
  247. X
  248. X    Button_alloc_label_GC(bw);
  249. X    Button_alloc_armed_GC(bw);
  250. X    Button_alloc_unarmed_GC(bw);
  251. X
  252. X    Button_Calculations(bw);
  253. X
  254. X    bw->core.width = bw->b.label_width + (2 * bw->b.internal_width) + 2;
  255. X    bw->core.height = bw->b.label_height + (2 * bw->b.internal_height) + 2;
  256. X
  257. X    (*XtClass(new)->core_class.resize)((Widget)bw);
  258. X
  259. X}    /* end of Button_Initialize */
  260. X
  261. X/*+-------------------------------------------------------------------------
  262. X    Button_Realize(w,valueMask,attributes)
  263. X--------------------------------------------------------------------------*/
  264. Xstatic void
  265. XButton_Realize(w,valueMask,attributes)
  266. Xregister Widget w;
  267. XMask *valueMask;
  268. XXSetWindowAttributes *attributes;
  269. X{
  270. X    *valueMask |= CWBitGravity;
  271. X    attributes->bit_gravity = NorthWestGravity;
  272. X    (*superclass->core_class.realize)(w,valueMask,attributes);
  273. X
  274. X}    /* end of Button_Realize */
  275. X
  276. X/*+-------------------------------------------------------------------------
  277. X    Button_Redisplay(w,event,region) - expose
  278. X--------------------------------------------------------------------------*/
  279. X/*ARGSUSED*/
  280. Xstatic void
  281. XButton_Redisplay(w,event,region)
  282. XWidget w;
  283. XXEvent *event;
  284. XRegion region;
  285. X{
  286. X    register XwtButtonWidget bw = (XwtButtonWidget)w;
  287. X    GC background_gc;
  288. X
  289. X    if(region && XRectInRegion(region,bw->b.label_x,bw->b.label_y,
  290. X        bw->b.label_width,bw->b.label_height) == RectangleOut)
  291. X    {
  292. X        return;
  293. X    }
  294. X
  295. X#if defined(MyDebug)
  296. X    printf("Button_Redisplay armed=%d in_window=%d\n",
  297. X        bw->b.armed,bw->b.in_window);
  298. X#endif
  299. X
  300. X    background_gc = (bw->b.armed) ? bw->b.armed_GC : bw->b.unarmed_GC;
  301. X    XFillRectangle(XtDisplay(w),XtWindow(w),background_gc,
  302. X        0,0,bw->core.width,bw->core.height);
  303. X
  304. X    if(bw->b.in_window)
  305. X    {
  306. X        XDrawRectangle(XtDisplay(w),XtWindow(w),bw->b.label_GC,
  307. X            1,1,bw->core.width - 2,bw->core.height - 2);
  308. X    }
  309. X
  310. X    XDrawString(XtDisplay(w),XtWindow(w),bw->b.label_GC,
  311. X        bw->b.label_x,bw->b.label_y + bw->b.font->max_bounds.ascent,
  312. X        bw->b.label,(int)bw->b.label_len);
  313. X
  314. X}    /* end of Button_Redisplay */
  315. X
  316. X/*+-------------------------------------------------------------------------
  317. X    _Reposition(bw,width,height,dx,dy)
  318. X--------------------------------------------------------------------------*/
  319. Xstatic void
  320. X_Reposition(bw,width,height,dx,dy)
  321. Xregister XwtButtonWidget bw;
  322. XDimension width,height;
  323. XPosition *dx,*dy;
  324. X{
  325. X    Position newPos = bw->b.internal_width;
  326. X    if(newPos < (Position)bw->b.internal_width)
  327. X        newPos = bw->b.internal_width;
  328. X    *dx = newPos - bw->b.label_x;
  329. X    bw->b.label_x = newPos;
  330. X    *dy = (newPos = (height - bw->b.label_height) / 2) - bw->b.label_y;
  331. X    bw->b.label_y = newPos;
  332. X
  333. X}    /* end of _Reposition */
  334. X
  335. X/*+-------------------------------------------------------------------------
  336. X    Button_Resize(w)
  337. X--------------------------------------------------------------------------*/
  338. Xstatic void
  339. XButton_Resize(w)
  340. XWidget w;
  341. X{
  342. X    XwtButtonWidget bw = (XwtButtonWidget)w;
  343. X    Position dx,dy;
  344. X
  345. X    _Reposition(bw,w->core.width,w->core.height,&dx,&dy);
  346. X    if((dx || dy) && XtIsRealized(w))
  347. X    {
  348. X        int old_x = bw->b.label_x - dx;
  349. X        int old_y = bw->b.label_y - dy;
  350. X        XCopyArea(XtDisplay(w),XtWindow(w),XtWindow(w),bw->b.label_GC,
  351. X            (int)old_x,(int)old_y,
  352. X            (unsigned)bw->b.label_width,(unsigned)bw->b.label_height,
  353. X            (int)bw->b.label_x,(int)bw->b.label_y);
  354. X        if(dx)
  355. X        {
  356. X            XClearArea(XtDisplay(w),XtWindow(w),
  357. X                (dx > 0) ? old_x : (int)bw->b.label_x + bw->b.label_width,
  358. X                old_y,(unsigned)((dx < 0) ? -dx : dx),
  359. X                (unsigned)bw->b.label_height,False);
  360. X        }
  361. X        if(dy)
  362. X        {
  363. X            XClearArea(XtDisplay(w),XtWindow(w),
  364. X                old_x,
  365. X                (dy > 0) ? old_y : (int)bw->b.label_y + bw->b.label_height,
  366. X                (unsigned)bw->b.label_width,
  367. X                (unsigned)((dy < 0) ? -dy : dy),False);
  368. X        }
  369. X    }
  370. X}    /* end of Button_Resize */
  371. X
  372. X/*+-------------------------------------------------------------------------
  373. X    Button_SetValues(current,request,new) - Set specified arguments into widget
  374. X--------------------------------------------------------------------------*/
  375. X/*ARGSUSED*/
  376. Xstatic Boolean
  377. XButton_SetValues(current,request,new)
  378. XWidget current,request,new;
  379. X{
  380. X    XwtButtonWidget curb = (XwtButtonWidget)current;
  381. X    XwtButtonWidget reqb = (XwtButtonWidget)request;
  382. X    XwtButtonWidget newb = (XwtButtonWidget)new;
  383. X    Boolean changed = False;
  384. X
  385. X    if(!newb->b.label)
  386. X        newb->b.label = newb->core.name;
  387. X
  388. X    if(curb->b.label != newb->b.label)
  389. X    {
  390. X        if(curb->b.label != curb->core.name)
  391. X            XtFree((char *)curb->b.label );
  392. X
  393. X        if(newb->b.label != newb->core.name)
  394. X        {
  395. X            newb->b.label = strcpy(
  396. X                XtMalloc((unsigned)XtStrlen(newb->b.label) + 1),
  397. X                newb->b.label);
  398. X        }
  399. X        changed = True;
  400. X    }
  401. X
  402. X    if(changed || (curb->b.font != newb->b.font) ||
  403. X      (curb->b.internal_width != newb->b.internal_width) ||
  404. X      (curb->b.internal_height != newb->b.internal_height))
  405. X    {
  406. X        Button_Calculations(newb);
  407. X        changed = True;
  408. X    }
  409. X
  410. X    /* calculate the window size */
  411. X    if(newb->b.resize)
  412. X    {
  413. X        if(curb->core.width == reqb->core.width)
  414. X        {
  415. X            newb->core.width =
  416. X                newb->b.label_width + (2 * newb->b.internal_width) + 2;
  417. X        }
  418. X
  419. X        if(curb->core.height == reqb->core.height)
  420. X        {
  421. X            newb->core.height =
  422. X                newb->b.label_height + (2 * newb->b.internal_height);
  423. X        }
  424. X    }
  425. X
  426. X    if(curb->b.label_color != newb->b.label_color
  427. X        || curb->b.font->fid != newb->b.font->fid)
  428. X    {
  429. X        XtReleaseGC(newb,curb->b.label_GC);
  430. X        Button_alloc_label_GC(newb);
  431. X        changed = True;
  432. X    }
  433. X
  434. X    if(curb->b.armed_color != newb->b.armed_color)
  435. X    {
  436. X        XtReleaseGC(newb,curb->b.armed_GC);
  437. X        Button_alloc_armed_GC(newb);
  438. X        changed |= curb->b.armed;
  439. X    }
  440. X
  441. X    if(curb->b.unarmed_color != newb->b.unarmed_color)
  442. X    {
  443. X        XtReleaseGC(newb,curb->b.unarmed_GC);
  444. X        Button_alloc_unarmed_GC(newb);
  445. X        changed |= !curb->b.armed;
  446. X    }
  447. X
  448. X    if((curb->b.internal_width != newb->b.internal_width) ||
  449. X       (curb->b.internal_height != newb->b.internal_height) || changed)
  450. X    {
  451. X        Position dx,dy;
  452. X        _Reposition(newb,curb->core.width,curb->core.height,&dx,&dy);
  453. X    }
  454. X
  455. X    return(changed);
  456. X
  457. X}    /* end of Button_SetValues */
  458. X
  459. X/*+-------------------------------------------------------------------------
  460. X    Button_Destroy(w)
  461. X--------------------------------------------------------------------------*/
  462. Xstatic void
  463. XButton_Destroy(w)
  464. XWidget w;
  465. X{
  466. X    XwtButtonWidget bw = (XwtButtonWidget)w;
  467. X
  468. X    XtReleaseGC(w,bw->b.label_GC);
  469. X    XtReleaseGC(w,bw->b.armed_GC);
  470. X    XtReleaseGC(w,bw->b.unarmed_GC);
  471. X    if(bw->b.label != bw->core.name)
  472. X        XtFree((char *)bw->b.label);
  473. X
  474. X    XtRemoveAllCallbacks(w,XwtNactivateCallback,bw->b.cb_list);
  475. X
  476. X}    /* end of Button_Destroy */
  477. X
  478. X/*+-------------------------------------------------------------------------
  479. X    Button_QueryGeometry(w,intended,preferred)
  480. X--------------------------------------------------------------------------*/
  481. Xstatic XtGeometryResult
  482. XButton_QueryGeometry(w,intended,preferred)
  483. XWidget w;
  484. XXtWidgetGeometry *intended,*preferred;
  485. X{
  486. X    register XwtButtonWidget bw = (XwtButtonWidget)w;
  487. X
  488. X    preferred->request_mode = CWWidth | CWHeight;
  489. X    preferred->width = bw->b.label_width + (2 * bw->b.internal_width) + 2;
  490. X    preferred->height = bw->b.label_height + (2 * bw->b.internal_height) + 2;
  491. X
  492. X    if( ((intended->request_mode & (CWWidth | CWHeight)) ==
  493. X        (CWWidth | CWHeight)) &&
  494. X        intended->width == preferred->width &&
  495. X        intended->height == preferred->height)
  496. X    {
  497. X        return(XtGeometryYes);
  498. X    }
  499. X    else if((preferred->width == w->core.width) &&
  500. X        (preferred->height == w->core.height))
  501. X    {
  502. X        return(XtGeometryNo);
  503. X    }
  504. X    else
  505. X        return(XtGeometryAlmost);
  506. X
  507. X}    /* end of Button_QueryGeometry */
  508. X
  509. X/*+-------------------------------------------------------------------------
  510. X    event_type_text(type)
  511. X--------------------------------------------------------------------------*/
  512. X#if defined(MyDebug)
  513. Xstatic char *
  514. Xevent_type_text(type)
  515. Xint type;
  516. X{
  517. Xstatic char errant[32];
  518. X
  519. X    switch(type)
  520. X    {
  521. X        case KeyPress: return("KeyPress");
  522. X        case KeyRelease: return("KeyRelease");
  523. X        case ButtonPress: return("ButtonPress");
  524. X        case ButtonRelease: return("ButtonRelease");
  525. X        case MotionNotify: return("MotionNotify");
  526. X        case EnterNotify: return("EnterNotify");
  527. X        case LeaveNotify: return("LeaveNotify");
  528. X        case FocusIn: return("FocusIn");
  529. X        case FocusOut: return("FocusOut");
  530. X        case KeymapNotify: return("KeymapNotify");
  531. X        case Expose: return("Expose");
  532. X        case GraphicsExpose: return("GraphicsExpose");
  533. X        case NoExpose: return("NoExpose");
  534. X        case VisibilityNotify: return("VisibilityNotify");
  535. X        case CreateNotify: return("CreateNotify");
  536. X        case DestroyNotify: return("DestroyNotify");
  537. X        case UnmapNotify: return("UnmapNotify");
  538. X        case MapNotify: return("MapNotify");
  539. X        case MapRequest: return("MapRequest");
  540. X        case ReparentNotify: return("ReparentNotify");
  541. X        case ConfigureNotify: return("ConfigureNotify");
  542. X        case ConfigureRequest: return("ConfigureRequest");
  543. X        case GravityNotify: return("GravityNotify");
  544. X        case ResizeRequest: return("ResizeRequest");
  545. X        case CirculateNotify: return("CirculateNotify");
  546. X        case CirculateRequest: return("CirculateRequest");
  547. X        case PropertyNotify: return("PropertyNotify");
  548. X        case SelectionClear: return("SelectionClear");
  549. X        case SelectionRequest: return("SelectionRequest");
  550. X        case SelectionNotify: return("SelectionNotify");
  551. X        case ColormapNotify: return("ColormapNotify");
  552. X        case ClientMessage: return("ClientMessage");
  553. X        case MappingNotify: return("MappingNotify");
  554. X        default:
  555. X            sprintf(errant,"event %u?",type);
  556. X            return(errant);
  557. X    }
  558. X
  559. X}    /* end of event_type_text */
  560. X#endif
  561. X
  562. X/*+-------------------------------------------------------------------------
  563. X    Button_EventHandler(w,event,arg,argcount)
  564. X--------------------------------------------------------------------------*/
  565. X/*ARGSUSED*/
  566. Xstatic void
  567. XButton_EventHandler(w,event,arg,argcount)
  568. XWidget w;
  569. XXEvent *event;
  570. Xchar **arg;
  571. Xint argcount;
  572. X{
  573. X    register XwtButtonWidget bw = (XwtButtonWidget)w;
  574. X    XwtButtonCallbackStruct cb;
  575. X
  576. X#if defined(MyDebug)
  577. X    printf("Button event %s\n",event_type_text(event->type));
  578. X#endif
  579. X
  580. X    cb.reason = -1;
  581. X    switch(event->type)
  582. X    {
  583. X        case ButtonPress:
  584. X            if(!bw->b.armed)
  585. X            {
  586. X                bw->b.armed = 1;
  587. X                Button_Redisplay(w,event,(Region)0);
  588. X            }
  589. X            break;
  590. X
  591. X        case ButtonRelease:
  592. X            if(bw->b.armed)
  593. X            {
  594. X                bw->b.armed = 0;
  595. X                Button_Redisplay(w,event,(Region)0);
  596. X                cb.reason = XwtRC_ACTIVATE;
  597. X            }
  598. X            break;
  599. X
  600. X        case LeaveNotify:
  601. X            bw->b.in_window = 0;
  602. X            bw->b.armed = 0;
  603. X            Button_Redisplay(w,event,(Region)0);
  604. X            break;
  605. X
  606. X        case EnterNotify:
  607. X            bw->b.in_window = 1;
  608. X            Button_Redisplay(w,event,(Region)0);
  609. X            break;
  610. X    }
  611. X
  612. X    /* invoke callbacks if indicated */
  613. X    if(cb.reason != -1)
  614. X    {
  615. X        cb.event = event;
  616. X        XtCallCallbacks(bw,XwtNactivateCallback,&cb);
  617. X    }
  618. X
  619. X}    /* end of Button_EventHandler */
  620. X
  621. X/*+-------------------------------------------------------------------------
  622. X    XwtCreateButton(parent,name,arglist,argcount) - convenience routine
  623. X--------------------------------------------------------------------------*/
  624. XWidget
  625. XXwtCreateButton(parent,name,arglist,argcount)
  626. XWidget parent;
  627. XString name;
  628. XArgList arglist;
  629. XCardinal argcount;
  630. X{
  631. X    return(XtCreateManagedWidget(name,XwtbuttonWidgetClass,
  632. X        parent,arglist,argcount));
  633. X
  634. X}    /* end of XwtCreateButton */
  635. X
  636. X/*+-------------------------------------------------------------------------
  637. X    XwtButtonSize(w,width,height)
  638. X--------------------------------------------------------------------------*/
  639. Xvoid
  640. XXwtButtonSize(w,width,height)
  641. XWidget w;
  642. XDimension *width;
  643. XDimension *height;
  644. X{
  645. X    register XwtButtonWidget bw = (XwtButtonWidget)w;
  646. X
  647. X    if(!XtIsRealized(w))
  648. X    {
  649. X        Button_Calculations(w);
  650. X        *width = bw->b.label_width + (2 * bw->b.internal_width) + 2;
  651. X        *height = bw->b.label_height + (2 * bw->b.internal_height) + 2;
  652. X    }
  653. X    else
  654. X    {
  655. X        *width = bw->core.width;
  656. X        *height = bw->core.height;
  657. X    }
  658. X
  659. X}    /* end of XwtButtonSize */
  660. X
  661. X/* vi: set tabstop=4 shiftwidth=4: */
  662. X/* end of Button.c */
  663. SHAR_EOF
  664. chmod 0644 x386mon/Button.c ||
  665. echo 'restore of x386mon/Button.c failed'
  666. Wc_c="`wc -c < 'x386mon/Button.c'`"
  667. test 19633 -eq "$Wc_c" ||
  668.     echo 'x386mon/Button.c: original size 19633, current size' "$Wc_c"
  669. fi
  670. # ============= x386mon/Button.h ==============
  671. if test -f 'x386mon/Button.h' -a X"$1" != X"-c"; then
  672.     echo 'x - skipping x386mon/Button.h (File already exists)'
  673. else
  674. echo 'x - extracting x386mon/Button.h (Text)'
  675. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/Button.h' &&
  676. X/*+-------------------------------------------------------------------------
  677. X    Button.h - Public definitions for Button widget
  678. X    wht@n4hgf.Mt-Park.GA.US
  679. X--------------------------------------------------------------------------*/
  680. X/*+:EDITS:*/
  681. X/*:01-12-1991-04:34-wht@n4hgf-x1.00 (flush old edit notes) */
  682. X
  683. X#ifndef _Button_h
  684. X#define _Button_h
  685. X#include "XwtStrings.h"
  686. X
  687. X#define XwtRC_ACTIVATE        1
  688. X
  689. Xextern WidgetClass XwtbuttonWidgetClass;
  690. X
  691. Xtypedef struct _XwtButtonClassRec *XwtButtonWidgetClass;
  692. Xtypedef struct _XwtButtonRec      *XwtButtonWidget;
  693. X
  694. Xtypedef struct XwtButtonCallbackStruct
  695. X{
  696. X    int reason;
  697. X    XEvent *event;
  698. X} XwtButtonCallbackStruct;
  699. X
  700. X#ifdef __STDC__
  701. XWidget XwtCreateButton(
  702. X    Widget parent,
  703. X    String name,
  704. X    ArgList arglist,
  705. X    Cardinal argcount
  706. X    );
  707. Xvoid XwtButtonSize(
  708. X    Widget w,
  709. X    Dimension *width,
  710. X    Dimension *height
  711. X    );
  712. X#else
  713. XWidget XwtCreateButton();
  714. Xvoid XwtButtonSize();
  715. X#endif
  716. X
  717. X#endif /* _XwtButton_h */
  718. X
  719. X/* vi: set tabstop=4 shiftwidth=4: */
  720. X/* end of Button.h */
  721. SHAR_EOF
  722. chmod 0644 x386mon/Button.h ||
  723. echo 'restore of x386mon/Button.h failed'
  724. Wc_c="`wc -c < 'x386mon/Button.h'`"
  725. test 975 -eq "$Wc_c" ||
  726.     echo 'x386mon/Button.h: original size 975, current size' "$Wc_c"
  727. fi
  728. # ============= x386mon/ButtonP.h ==============
  729. if test -f 'x386mon/ButtonP.h' -a X"$1" != X"-c"; then
  730.     echo 'x - skipping x386mon/ButtonP.h (File already exists)'
  731. else
  732. echo 'x - extracting x386mon/ButtonP.h (Text)'
  733. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/ButtonP.h' &&
  734. X/*+-------------------------------------------------------------------------
  735. X    ButtonP.h - XwtButton widget
  736. X    wht@n4hgf.Mt-Park.GA.US
  737. X--------------------------------------------------------------------------*/
  738. X/*+:EDITS:*/
  739. X/*:01-12-1991-04:34-wht@n4hgf-x1.00 (flush old edit notes) */
  740. X
  741. X#ifndef _XwtButtonP_h
  742. X#define _XwtButtonP_h
  743. X
  744. X#include <Xm/XmP.h>
  745. X#include "Button.h"
  746. X
  747. Xtypedef struct _XwtButtonClassPart
  748. X{
  749. X    int dummy;
  750. X} XwtButtonClassPart;
  751. X
  752. Xtypedef struct _XwtButtonClassRec
  753. X{
  754. X    CoreClassPart core_class;
  755. X    XmPrimitiveClassPart primitive_class;
  756. X    XwtButtonClassPart Button_class;
  757. X} XwtButtonClassRec;
  758. X
  759. Xextern XwtButtonClassRec ButtonClassRec;
  760. X
  761. Xtypedef struct _XwtButtonPart
  762. X{
  763. X    Pixel label_color;
  764. X    Pixel armed_color;
  765. X    Pixel unarmed_color;
  766. X    XFontStruct *font;
  767. X    char *label;
  768. X    Dimension internal_width;
  769. X    Dimension internal_height;
  770. X    XtCallbackList cb_list;
  771. X    Pixmap pixmap;
  772. X    Boolean resize;
  773. X    GC label_GC;
  774. X    GC armed_GC;
  775. X    GC unarmed_GC;
  776. X    Position label_x;
  777. X    Position label_y;
  778. X    Dimension label_width;
  779. X    Dimension label_height;
  780. X    Dimension label_len;
  781. X    unsigned char armed;
  782. X    unsigned char in_window;
  783. X} XwtButtonPart;
  784. X
  785. Xtypedef struct _XwtButtonRec 
  786. X{
  787. X    CorePart core;
  788. X    XmPrimitivePart primitive;
  789. X    XwtButtonPart b;
  790. X} XwtButtonRec;
  791. X
  792. X#endif /* _XwtButtonP_h */
  793. X
  794. X/* vi: set tabstop=4 shiftwidth=4: */
  795. X/* end of ButtonP.h */
  796. SHAR_EOF
  797. chmod 0644 x386mon/ButtonP.h ||
  798. echo 'restore of x386mon/ButtonP.h failed'
  799. Wc_c="`wc -c < 'x386mon/ButtonP.h'`"
  800. test 1303 -eq "$Wc_c" ||
  801.     echo 'x386mon/ButtonP.h: original size 1303, current size' "$Wc_c"
  802. fi
  803. # ============= x386mon/XwtStrings.h ==============
  804. if test -f 'x386mon/XwtStrings.h' -a X"$1" != X"-c"; then
  805.     echo 'x - skipping x386mon/XwtStrings.h (File already exists)'
  806. else
  807. echo 'x - extracting x386mon/XwtStrings.h (Text)'
  808. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/XwtStrings.h' &&
  809. X/*+-------------------------------------------------------------------------
  810. X    XwtStrings.h -Xwt widget string definitions
  811. X    wht@n4hgf.Mt-Park.GA.US
  812. X--------------------------------------------------------------------------*/
  813. X/*+:EDITS:*/
  814. X/*:01-12-1991-04:34-wht@n4hgf-x1.00 (flush old edit notes) */
  815. X
  816. X#if !defined(_XwtStringdefs_h)
  817. X#define _XwtStringdefs_h
  818. X
  819. X#define XwtNactivateCallback    "activateCallback"
  820. X#define XwtNarmedColor          "armedColor"
  821. X#define XwtNfont                "font"
  822. X#define XwtNinternalHeight      "internalHeight"
  823. X#define XwtNinternalWidth       "internalWidth"
  824. X#define XwtNlabel               "label"
  825. X#define XwtNlabelColor          "labelColor"
  826. X#define XwtNlabelFont           "labelFont"
  827. X#define XwtNlabelWidth          "labelWidth"
  828. X#define XwtNunarmedColor        "unarmedColor"
  829. X#define XwtNvalue               "value"
  830. X#define XwtNvalueFont           "valueFont"
  831. X#define XwtNvalueColor          "valueColor"
  832. X#define XwtNvalueWidth          "valueWidth"
  833. X
  834. X#define XwtCArmedColor          "ArmedColor"
  835. X#define XwtCFont                "Font"
  836. X#define XwtCHeight              "Height"
  837. X#define XwtCLabel               "Label"
  838. X#define XwtCLabelColor          "LabelColor"
  839. X#define XwtCLabelWidth          "LabelWidth"
  840. X#define XwtCUnarmedColor        "UnarmedColor"
  841. X#define XwtCValue               "Value"
  842. X#define XwtCValueColor          "ValueColor"
  843. X#define XwtCValueFont           "ValueFont"
  844. X#define XwtCValueWidth          "ValueWidth"
  845. X#define XwtCWidth               "Width"
  846. X
  847. X#endif /* _XwtStringdefs_h */
  848. X
  849. X/* vi: set tabstop=4 shiftwidth=4: */
  850. X/* end of XwtStrings.h */
  851. SHAR_EOF
  852. chmod 0644 x386mon/XwtStrings.h ||
  853. echo 'restore of x386mon/XwtStrings.h failed'
  854. Wc_c="`wc -c < 'x386mon/XwtStrings.h'`"
  855. test 1597 -eq "$Wc_c" ||
  856.     echo 'x386mon/XwtStrings.h: original size 1597, current size' "$Wc_c"
  857. fi
  858. # ============= x386mon/bootinfo.c ==============
  859. if test -f 'x386mon/bootinfo.c' -a X"$1" != X"-c"; then
  860.     echo 'x - skipping x386mon/bootinfo.c (File already exists)'
  861. else
  862. echo 'x - extracting x386mon/bootinfo.c (Text)'
  863. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/bootinfo.c' &&
  864. X/*+-------------------------------------------------------------------------
  865. X    bootinfo.c - x386mon bootinfo struct display
  866. X
  867. X  Defined functions:
  868. X    bmemf_text(flags)
  869. X    draw_Bootinfo(x,y)
  870. X
  871. X--------------------------------------------------------------------------*/
  872. X/*+:EDITS:*/
  873. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  874. X
  875. X#include "unixincs.h"
  876. X#define WANT_MON_EXTERNS
  877. X#include "x386mon.h"
  878. X#include "buttons.h"
  879. X#include "utoa.h"
  880. X#include "disp_info.h"
  881. X
  882. X#if defined(HAS_BOOTINFO)
  883. X
  884. Xstatic int line_style = LineSolid;
  885. Xstatic int cap_style = CapButt;
  886. Xstatic int join_style = JoinMiter;
  887. X
  888. X/*+-------------------------------------------------------------------------
  889. X    bmemf_text(flags)
  890. X--------------------------------------------------------------------------*/
  891. Xchar *
  892. Xbmemf_text(flags)
  893. Xulong flags;
  894. X{
  895. Xstatic char hex_errant[16];
  896. Xulong orig_flags = flags;
  897. X
  898. X#if defined(B_MEM_DOWN)        /* SCO only */
  899. X    flags &= ~B_MEM_DOWN;
  900. X#endif
  901. X#if defined(B_MEM_BASE)        /* ISC only (or is it SVR3.2.2?) */
  902. X    flags &= ~B_MEM_BASE;
  903. X#endif
  904. X#if defined(B_MEM_EXPANS)    /* ISC */
  905. X    flags &= ~B_MEM_EXPANS;
  906. X#endif
  907. X#if defined(B_MEM_SHADOW)    /* ISC */
  908. X    flags &= ~B_MEM_SHADOW;
  909. X#endif
  910. X#if defined(B_MEM_TREV)        /* ISC */
  911. X    flags &= ~B_MEM_TREV;
  912. X#endif
  913. X
  914. X    if(!flags)
  915. X        return("    ");
  916. X    switch(flags)
  917. X    {
  918. X#if defined(B_MEM_RSRVD)
  919. X        case B_MEM_RSRVD: return("RSVD");
  920. X#endif
  921. X#if defined(B_MEM_KBSS)
  922. X        case B_MEM_KBSS:  return("KBSS");
  923. X#endif
  924. X#if defined(B_MEM_KTEXT)
  925. X        case B_MEM_KTEXT: return("KTXT");
  926. X#endif
  927. X#if defined(B_MEM_KDATA)
  928. X        case B_MEM_KDATA: return("KDTA");
  929. X#endif
  930. X#if defined(B_MEM_NODMA)
  931. X        case B_MEM_NODMA: return("NODM");
  932. X#endif
  933. X#if defined(B_MEM_CANTDMA)
  934. X        case B_MEM_CANTDMA: return("NODM");
  935. X#endif
  936. X    }
  937. X    sprintf(hex_errant,"%04x",(ushort)orig_flags);
  938. X    return(hex_errant);
  939. X}    /* end of bmemf_text */
  940. X
  941. X/*+-------------------------------------------------------------------------
  942. X    ISC_machinetype_text(machine)
  943. X--------------------------------------------------------------------------*/
  944. X#if defined(ME_COMPAQVGA)    /* ISC machdep.h */
  945. Xchar *
  946. XISC_machinetype_text(machine)
  947. Xunsigned char machine;
  948. X{
  949. X    switch(machine)
  950. X    {
  951. X#if defined(M_UNKNOWN)    /* some ISC bootinfo.h do not have these */
  952. X        case M_UNKNOWN:
  953. X            return("");
  954. X            break;
  955. X#endif
  956. X#if defined(M_COMPAQ)
  957. X        case M_COMPAQ:
  958. X            return("Compaq");
  959. X            break;
  960. X#endif
  961. X#if defined(M_PS2)
  962. X        case M_PS2:
  963. X            return("PS/2");
  964. X            break;
  965. X#endif
  966. X#if defined(M_AT)
  967. X        case M_AT:
  968. X            return("Generic 386");
  969. X            break;
  970. X#endif
  971. X#if defined(M_ATT)
  972. X        case M_ATT:
  973. X            return("AT&T 6386");
  974. X            break;
  975. X#endif
  976. X#if defined(M_ATT5)
  977. X        case M_ATT5:
  978. X            return("AT&T 6386");
  979. X            break;
  980. X#endif
  981. X#if defined(M_M380)
  982. X        case M_M380:
  983. X            return("Olivetti M380");
  984. X            break;
  985. X#endif
  986. X#if defined(M_DELL)
  987. X        case M_DELL:
  988. X            return("Dell 386");
  989. X            break;
  990. X#endif
  991. X#if defined(M_D325)
  992. X        case M_D325:
  993. X            return("Dell 325");
  994. X            break;
  995. X#endif
  996. X#if defined(M_ALR)
  997. X        case M_ALR:
  998. X            return("Adv Logic Res");
  999. X            break;
  1000. X#endif
  1001. X#if defined(M_ZDS)
  1002. X        case M_ZDS:
  1003. X            return("Zenith Data");
  1004. X            break;
  1005. X#endif
  1006. X    }
  1007. X    return("i386");
  1008. X}    /* end of ISC_machinetype_text */
  1009. X#endif
  1010. X
  1011. X/*+-------------------------------------------------------------------------
  1012. X    ISC_displaytype_text(adapter)
  1013. X--------------------------------------------------------------------------*/
  1014. X#if defined(ME_COMPAQVGA)    /* ISC machdep.h */
  1015. Xchar *
  1016. XISC_displaytype_text(adapter)
  1017. Xunsigned char adapter;
  1018. X{
  1019. X
  1020. X    switch(adapter)
  1021. X    {
  1022. X        case ME_UNKNOWN:
  1023. X            return("unknown to sys");
  1024. X            break;
  1025. X        case ME_EGA:
  1026. X            return("EGA");
  1027. X            break;
  1028. X        case ME_CGA80:
  1029. X            return("CGA");
  1030. X            break;
  1031. X        case ME_MONO:
  1032. X            return("MONO");
  1033. X            break;
  1034. X        case ME_COMPAQHR:
  1035. X            return("Compaq mono");
  1036. X            break;
  1037. X        case ME_Z449:
  1038. X            return("Zenith Z449");
  1039. X            break;
  1040. X        case ME_T5100:
  1041. X            return("Toshiba T5100");
  1042. X            break;
  1043. X        case ME_COMPAQVGA:
  1044. X            return("Compaq VGA");
  1045. X            break;
  1046. X        case ME_OTHERVGA:
  1047. X            return("VGA");
  1048. X            break;
  1049. X#if defined(ME_PVGA1)
  1050. X        case ME_PVGA1:
  1051. X            return("Paradise VGA1");
  1052. X            break;
  1053. X#endif /*ME_PVGA1*/
  1054. X#if defined(ME_V7VGA)
  1055. X        case ME_V7VGA:
  1056. X            return("Video 7 VGA");
  1057. X            break;
  1058. X#endif /*ME_V7VGA*/
  1059. X    }
  1060. X    return("???");
  1061. X}    /* end of ISC_displaytype_text */
  1062. X#endif
  1063. X
  1064. X/*+-------------------------------------------------------------------------
  1065. X    draw_Bootinfo(x,y)
  1066. X--------------------------------------------------------------------------*/
  1067. Xvoid
  1068. Xdraw_Bootinfo(x,y)
  1069. Xint x;
  1070. Xint y;
  1071. X{
  1072. Xregister itmp;
  1073. Xregister struct bootmem *bmem;
  1074. Xchar *cptr;
  1075. Xchar s80[80];
  1076. Xint fwidth = FWIDTH;
  1077. Xint fheight = FHEIGHT;
  1078. Xint len;
  1079. Xint x2 = x;
  1080. Xint yl1 = y + (FASCENT / 2);
  1081. Xint yl2 = y + (fheight / 2) - 1;
  1082. Xint ys  = y + FASCENT;
  1083. X
  1084. X    switch(current_display_mode)
  1085. X    {
  1086. X        case BUTTON_main:
  1087. X            break;
  1088. X        default:
  1089. X            return;
  1090. X    }
  1091. X
  1092. X    if(DrawAreaXYWH.height < (y + (fheight * 2)))
  1093. X        return;
  1094. X
  1095. X    cptr = "---Bootinfo-----------";
  1096. X    len = strlen(cptr);
  1097. X    /* the "background" bar */
  1098. X    XSetForeground(display,gc,colorSlate.pixel);
  1099. X    XSetLineAttributes(display,gc,fheight,line_style,cap_style,join_style);
  1100. X    XDrawLine(display,window,gc, x,yl1, x + (len * fwidth),yl1);
  1101. X
  1102. X    /* draw the black line before "Bootinfo" */
  1103. X    XSetForeground(display,gc,foreground);
  1104. X    XSetLineAttributes(display,gc,FASCENT / 2, line_style,cap_style,join_style);
  1105. X    XDrawLine(display,window,gc,
  1106. X        x2,yl1,
  1107. X        x2 + (len = (fwidth * 3)) - FGAP,yl1);
  1108. X    x2 += len;
  1109. X
  1110. X    /* draw "Bootinfo" */
  1111. X    cptr = "Bootinfo";
  1112. X    XDrawString(display,window,gc, x2,  ys, cptr,len = strlen(cptr));
  1113. X    XDrawString(display,window,gc, x2+1,ys, cptr,len);
  1114. X    x2 += fwidth * len;
  1115. X
  1116. X    /* draw the black line after "Bootinfo" */
  1117. X    XDrawLine(display,window,gc,
  1118. X        x2 + FGAP + 1,yl1,
  1119. X        x2 + (len = (fwidth * 11)),yl1);
  1120. X    x2 += len;
  1121. X    y += fheight;
  1122. X
  1123. X#if defined(M_UNIX)    /* ISC doesn't have this in struct */
  1124. X    disp_static_long_units(x,y,"basemem  ",7,"k",bootinfo.basemem / 1024);
  1125. X    y += fheight;
  1126. X    disp_static_long_units(x,y,"extmem   ",7,"k",bootinfo.extmem / 1024);
  1127. X    y += fheight;
  1128. X#endif
  1129. X#if defined(ME_COMPAQVGA)    /* ISC machdep.h */
  1130. X    sprintf(s80,"machine %14.14s",
  1131. X        ISC_machinetype_text(bootinfo.machenv.machine));
  1132. X    XDrawString(display,window,gc, x,y + FASCENT,s80,strlen(s80));
  1133. X    y += fheight;
  1134. X    sprintf(s80,"disp %17.17s",
  1135. X        ISC_displaytype_text(bootinfo.machenv.adapter));
  1136. X    XDrawString(display,window,gc, x,y + FASCENT,s80,strlen(s80));
  1137. X    y += fheight;
  1138. X#endif
  1139. X    strcpy(s80,"bflags   ");
  1140. X    ultoda_lz(s80 + strlen(s80),8,bootinfo.bootflags);
  1141. X    disp_static_text(x,y,s80);
  1142. X    y += fheight;
  1143. X
  1144. X    cptr = "memory available      ";
  1145. X    XDrawString(display,window,gc, x,y + FASCENT, cptr,strlen(cptr));
  1146. X    y += fheight;
  1147. X
  1148. X    for(itmp = 0; itmp < bootinfo.memavailcnt; itmp++)
  1149. X    {
  1150. X        bmem = &bootinfo.memavail[itmp];
  1151. X#if defined(B_MEM_DOWN)
  1152. X        if(bmem->flags & B_MEM_DOWN)
  1153. X        {
  1154. X            bmem->base -= bmem->extent;
  1155. X            bmem->flags &= ~B_MEM_DOWN;
  1156. X        }
  1157. X#endif
  1158. X        sprintf(s80,"%08lx %08lx %s",bmem->base,bmem->extent,
  1159. X            bmemf_text(bmem->flags));
  1160. X        XDrawString(display,window,gc, x,y + FASCENT,s80,strlen(s80));
  1161. X        y += fheight;
  1162. X    }
  1163. X
  1164. X    cptr = "memory used           ";
  1165. X    XDrawString(display,window,gc, x,y + FASCENT, cptr,strlen(cptr));
  1166. X    y += fheight;
  1167. X    for(itmp = 0; itmp < bootinfo.memusedcnt; itmp++)
  1168. X    {
  1169. X        bmem = &bootinfo.memused[itmp];
  1170. X#if defined(B_MEM_DOWN)
  1171. X        if(bmem->flags & B_MEM_DOWN)
  1172. X        {
  1173. X            bmem->base -= bmem->extent;
  1174. X            bmem->flags &= ~B_MEM_DOWN;
  1175. X        }
  1176. X#endif
  1177. X        sprintf(s80,"%08lx %08lx %s",bmem->base,bmem->extent,
  1178. X            bmemf_text(bmem->flags));
  1179. X        XDrawString(display,window,gc, x,y + FASCENT,s80,strlen(s80));
  1180. X        y += fheight;
  1181. X    }
  1182. X
  1183. X}    /* end of draw_Bootinfo */
  1184. X
  1185. X#endif /* HAS_BOOTINFO */
  1186. X
  1187. X/* vi: set tabstop=4 shiftwidth=4: */
  1188. X/* end of bootinfo.c */
  1189. SHAR_EOF
  1190. chmod 0644 x386mon/bootinfo.c ||
  1191. echo 'restore of x386mon/bootinfo.c failed'
  1192. Wc_c="`wc -c < 'x386mon/bootinfo.c'`"
  1193. test 7379 -eq "$Wc_c" ||
  1194.     echo 'x386mon/bootinfo.c: original size 7379, current size' "$Wc_c"
  1195. fi
  1196. # ============= x386mon/buttons.c ==============
  1197. if test -f 'x386mon/buttons.c' -a X"$1" != X"-c"; then
  1198.     echo 'x - skipping x386mon/buttons.c (File already exists)'
  1199. else
  1200. echo 'x - extracting x386mon/buttons.c (Text)'
  1201. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/buttons.c' &&
  1202. X/*+-------------------------------------------------------------------------
  1203. X    buttons.c - X386MON button and status message handler
  1204. X    wht@n4hgf.Mt-Park.GA.US
  1205. X
  1206. X  Defined functions:
  1207. X    disp_msg(pixel,msg)
  1208. X    draw_MyButton(num,pixel,init_struct)
  1209. X    invalidate_last_DispMsg()
  1210. X    place_MyButtons_all_off()
  1211. X    point_to_MyButton(x,y)
  1212. X    turn_off_MyButton(button_number)
  1213. X    turn_off_all_MyButtons()
  1214. X    turn_on_MyButton(button_number,pixel)
  1215. X
  1216. X--------------------------------------------------------------------------*/
  1217. X/*+:EDITS:*/
  1218. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  1219. X
  1220. X#include "unixincs.h"
  1221. X#define WANT_MON_EXTERNS
  1222. X#include "x386mon.h"
  1223. X#include <X11/StringDefs.h>
  1224. X#define WANT_MyButton_PRIVATES
  1225. X#include "buttons.h"
  1226. X#include "Button.h"
  1227. X
  1228. X/*
  1229. X * the ordering of this struct is dependent on
  1230. X * assignment of BUTTON_... defines in button.h
  1231. X */
  1232. XMyButton MyButtons[] =
  1233. X{
  1234. X    { "main",0,&colorCyan,   0},
  1235. X    { "ps",  0,&colorYellow, 0},
  1236. X    { "Ps",  0,&colorYellow, 0},
  1237. X    { "quit",0,&colorRed,    0},
  1238. X};
  1239. X
  1240. X#define MyButtons_QUAN XtNumber(MyButtons)
  1241. X
  1242. Xint MyButtons_next_tlx;
  1243. Xint DispMsg_tlx;
  1244. X
  1245. X#if defined(__STDC__)
  1246. XWidget
  1247. Xcreate_button(
  1248. X    Widget parent,
  1249. X    Dimension x,
  1250. X    Dimension y,
  1251. X    char *label,
  1252. X    Pixel armedColor,
  1253. X    caddr_t callback,
  1254. X    caddr_t client_data,
  1255. X    Dimension *pWidth
  1256. X    );
  1257. X#endif
  1258. X
  1259. X/*+-------------------------------------------------------------------------
  1260. X    create_button(parent,x,y,label,armedColor,callback,client_data,pWidth)
  1261. X
  1262. XReturn widget id and width of widget
  1263. X--------------------------------------------------------------------------*/
  1264. XWidget
  1265. Xcreate_button(parent,x,y,label,armedColor,callback,client_data,pWidth)
  1266. XWidget parent;
  1267. XDimension x;
  1268. XDimension y;
  1269. Xchar *label;
  1270. XPixel armedColor;
  1271. Xcaddr_t callback;
  1272. Xcaddr_t client_data;
  1273. XDimension *pWidth;
  1274. X{
  1275. XArg args[64];
  1276. Xint argcount = 0;
  1277. XWidget w;
  1278. XDimension height;
  1279. X
  1280. X    XtSetArg(args[argcount],XtNx,x);
  1281. X    argcount++;
  1282. X    XtSetArg(args[argcount],XtNy,y);
  1283. X    argcount++;
  1284. X    XtSetArg(args[argcount],XwtNlabel,label);
  1285. X    argcount++;
  1286. X    XtSetArg(args[argcount],XwtNfont,currentMyFont->font_struct);
  1287. X    argcount++;
  1288. X    XtSetArg(args[argcount],XwtNlabelColor,colorBlack.pixel);
  1289. X    argcount++;
  1290. X    XtSetArg(args[argcount],XwtNarmedColor,armedColor);
  1291. X    argcount++;
  1292. X    XtSetArg(args[argcount],XwtNunarmedColor,colorSlate.pixel);
  1293. X    argcount++;
  1294. X
  1295. X    w = XwtCreateButton(parent,label,args,argcount);
  1296. X    XtAddCallback(w,XwtNactivateCallback,
  1297. X        (XtCallbackProc)callback,(caddr_t)client_data);
  1298. X
  1299. X    XtManageChild(w);
  1300. X    XwtButtonSize(w,pWidth,&height);
  1301. X    return(w);
  1302. X
  1303. X}    /* end of create_button */
  1304. X
  1305. X/*+-------------------------------------------------------------------------
  1306. X    turn_on_MyButton(button_number,pixel)
  1307. X--------------------------------------------------------------------------*/
  1308. Xvoid
  1309. Xturn_on_MyButton(button_number,pixel)
  1310. Xint button_number;
  1311. Xunsigned long pixel;
  1312. X{
  1313. XArg args[1];
  1314. Xint argcount = 0;
  1315. X
  1316. X    XtSetArg(args[argcount],XwtNunarmedColor,pixel);
  1317. X    argcount++;
  1318. X
  1319. X    XtSetValues(MyButtons[button_number].w,args,argcount);
  1320. X    MyButtons[button_number].state = 1;
  1321. X
  1322. X}    /* end of turn_on_MyButton */
  1323. X
  1324. X/*+-------------------------------------------------------------------------
  1325. X    turn_off_MyButton(button_number)
  1326. X--------------------------------------------------------------------------*/
  1327. Xvoid
  1328. Xturn_off_MyButton(button_number)
  1329. Xint button_number;
  1330. X{
  1331. X    turn_on_MyButton(button_number,colorSlate.pixel);
  1332. X    MyButtons[button_number].state = 0;
  1333. X
  1334. X}    /* end of turn_off_MyButton */
  1335. X
  1336. X/*+-------------------------------------------------------------------------
  1337. X    turn_off_all_MyButtons()
  1338. X--------------------------------------------------------------------------*/
  1339. Xvoid
  1340. Xturn_off_all_MyButtons()
  1341. X{
  1342. Xint ibutt;
  1343. X
  1344. X    for(ibutt = 0; ibutt < MyButtons_QUAN; ibutt++)
  1345. X    {
  1346. X        if(MyButtons[ibutt].state)
  1347. X            turn_off_MyButton(ibutt);
  1348. X    }
  1349. X
  1350. X}    /* end of turn_off_all_MyButtons */
  1351. X
  1352. X/*+-------------------------------------------------------------------------
  1353. X    _Button_callback(w,client_data,call_data)
  1354. X--------------------------------------------------------------------------*/
  1355. Xvoid
  1356. X_Button_callback(w,client_data,call_data)
  1357. XWidget    w;                /* widget id */
  1358. Xcaddr_t    client_data;    /* data from application */
  1359. Xcaddr_t    call_data;        /* data from widget class */
  1360. X{
  1361. XXwtButtonCallbackStruct *cs = (XwtButtonCallbackStruct *)call_data;
  1362. X
  1363. X    set_display_mode((int)client_data);
  1364. X
  1365. X}    /* end of _Button_callback */
  1366. X
  1367. X/*+-------------------------------------------------------------------------
  1368. X    place_MyButtons_all_off()
  1369. X--------------------------------------------------------------------------*/
  1370. Xvoid
  1371. Xplace_MyButtons_all_off()
  1372. X{
  1373. Xint ibutt;
  1374. XDimension width;
  1375. Xstatic char MyButtons_inited = 0;
  1376. X
  1377. X    if(MyButtons_inited)
  1378. X    {
  1379. X        turn_off_all_MyButtons();
  1380. X        return;
  1381. X    }
  1382. X
  1383. X    MyButtons_inited = 1;
  1384. X    MyButtons_next_tlx = MyButton_TLX;
  1385. X    for(ibutt = 0; ibutt < MyButtons_QUAN; ibutt++)
  1386. X    {
  1387. X        MyButtons[ibutt].w = create_button(DrawAreaW,
  1388. X            MyButtons_next_tlx,MyButton_TLY,
  1389. X            MyButtons[ibutt].label,
  1390. X            MyButtons[ibutt].armedColor->pixel,
  1391. X            (caddr_t)_Button_callback,
  1392. X            (caddr_t)ibutt,&width);
  1393. X        MyButtons_next_tlx += width + 2;
  1394. X    }
  1395. X
  1396. X    DispMsg_tlx = MyButtons_next_tlx + (FWIDTH * 2);
  1397. X
  1398. X}    /* end of place_MyButtons_all_off */
  1399. X
  1400. Xunsigned long last_DispMsg_pixel = -1;
  1401. Xchar last_DispMsg_msg[80] = {0x01,0x00};
  1402. X
  1403. X/*+-------------------------------------------------------------------------
  1404. X    disp_msg(pixel,msg)
  1405. X
  1406. XThis is put in here because the message area is on the second
  1407. X"line" of the window from the right of the buttons to the right hand
  1408. Xside of the window
  1409. X--------------------------------------------------------------------------*/
  1410. Xvoid
  1411. Xdisp_msg(pixel,msg)
  1412. Xunsigned long pixel;
  1413. Xchar *msg;
  1414. X{
  1415. Xregister int y = (FHEIGHT * 1);
  1416. X
  1417. X    if(!window)
  1418. X        return;
  1419. X    if((pixel == last_DispMsg_pixel) && !strcmp(msg,last_DispMsg_msg))
  1420. X        return;
  1421. X    XClearArea(display,window,
  1422. X        DispMsg_tlx,y,DrawAreaXYWH.width - DispMsg_tlx,FHEIGHT,0);
  1423. X    XSetForeground(display,gc,pixel);
  1424. X    XDrawString(display,window,gc,
  1425. X        DispMsg_tlx,y + FASCENT,msg,strlen(msg));
  1426. X    last_DispMsg_pixel = pixel;
  1427. X    strcpy(last_DispMsg_msg,msg);
  1428. X}    /* end of disp_msg */
  1429. X
  1430. X/*+-------------------------------------------------------------------------
  1431. X    invalidate_last_DispMsg()
  1432. X--------------------------------------------------------------------------*/
  1433. Xvoid
  1434. Xinvalidate_last_DispMsg()
  1435. X{
  1436. X    last_DispMsg_pixel = -1;
  1437. X    last_DispMsg_msg[0] = 0x01;
  1438. X    last_DispMsg_msg[1] = 0x00;
  1439. X}    /* end of invalidate_last_DispMsg */
  1440. X
  1441. X/* vi: set tabstop=4 shiftwidth=4: */
  1442. X/* end of buttons.c */
  1443. SHAR_EOF
  1444. chmod 0644 x386mon/buttons.c ||
  1445. echo 'restore of x386mon/buttons.c failed'
  1446. Wc_c="`wc -c < 'x386mon/buttons.c'`"
  1447. test 6315 -eq "$Wc_c" ||
  1448.     echo 'x386mon/buttons.c: original size 6315, current size' "$Wc_c"
  1449. fi
  1450. # ============= x386mon/buttons.h ==============
  1451. if test -f 'x386mon/buttons.h' -a X"$1" != X"-c"; then
  1452.     echo 'x - skipping x386mon/buttons.h (File already exists)'
  1453. else
  1454. echo 'x - extracting x386mon/buttons.h (Text)'
  1455. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/buttons.h' &&
  1456. X
  1457. X/*+-------------------------------------------------------------------------
  1458. X    buttons.h
  1459. X    wht@n4hgf.Mt-Park.GA.US
  1460. X--------------------------------------------------------------------------*/
  1461. X/*+:EDITS:*/
  1462. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  1463. X
  1464. X/*
  1465. X * the order of these defines are dependent on
  1466. X * the order of the MyButtons declaration in buttons.c
  1467. X */
  1468. X#define BUTTON_main    0
  1469. X#define BUTTON_ps    1
  1470. X#define BUTTON_Ps    2
  1471. X#define BUTTON_quit    3
  1472. X
  1473. X#if defined(WANT_MyButton_PRIVATES)
  1474. Xtypedef struct MyButtonStruct
  1475. X{
  1476. X    char *label;                /* Button label */
  1477. X    Widget w;                    /* Button widget ID */
  1478. X    XColor *armedColor;            /* background color when button pushed */
  1479. X    char state;                    /* on or off */
  1480. X} MyButton;
  1481. X#endif
  1482. X
  1483. X/* vi: set tabstop=4 shiftwidth=4: */
  1484. X/* end of buttons.h */
  1485. SHAR_EOF
  1486. chmod 0644 x386mon/buttons.h ||
  1487. echo 'restore of x386mon/buttons.h failed'
  1488. Wc_c="`wc -c < 'x386mon/buttons.h'`"
  1489. test 782 -eq "$Wc_c" ||
  1490.     echo 'x386mon/buttons.h: original size 782, current size' "$Wc_c"
  1491. fi
  1492. # ============= x386mon/config.h ==============
  1493. if test -f 'x386mon/config.h' -a X"$1" != X"-c"; then
  1494.     echo 'x - skipping x386mon/config.h (File already exists)'
  1495. else
  1496. echo 'x - extracting x386mon/config.h (Text)'
  1497. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/config.h' &&
  1498. X
  1499. X/*+-------------------------------------------------------------------------
  1500. X    config.h - X386MON configuration
  1501. X    wht@n4hgf.Mt-Park.GA.US
  1502. X--------------------------------------------------------------------------*/
  1503. X/*+:EDITS:*/
  1504. X/*:01-12-1991-04:36-wht-creation */
  1505. X
  1506. X#if !defined(M_UNIX)
  1507. X#include "in.this.release.you.have.some.work.to.do"
  1508. X/* assuming SCO ODT 1.0/UNIX 3.2.1 or later/MOTIF 1.0/X11R3 */
  1509. X#endif
  1510. X
  1511. X#define SVR32
  1512. X#define HAS_BOOTINFO
  1513. X#define HAS_FTIME
  1514. X
  1515. X/*
  1516. X * SCO UNIX 3.2.0 has unusual user struct process segment size values
  1517. X * (here we assume * 3.2.1 or later; non-SCO ignores this)
  1518. X */
  1519. X/* #define SCO_USIZE_BROKEN */    /* define this for 3.2.0 */
  1520. X
  1521. X/* vi: set tabstop=4 shiftwidth=4: */
  1522. X/* end of config.h */
  1523. SHAR_EOF
  1524. chmod 0644 x386mon/config.h ||
  1525. echo 'restore of x386mon/config.h failed'
  1526. Wc_c="`wc -c < 'x386mon/config.h'`"
  1527. test 718 -eq "$Wc_c" ||
  1528.     echo 'x386mon/config.h: original size 718, current size' "$Wc_c"
  1529. fi
  1530. # ============= x386mon/disp_info.c ==============
  1531. if test -f 'x386mon/disp_info.c' -a X"$1" != X"-c"; then
  1532.     echo 'x - skipping x386mon/disp_info.c (File already exists)'
  1533. else
  1534. echo 'x - extracting x386mon/disp_info.c (Text)'
  1535. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/disp_info.c' &&
  1536. X/*+-------------------------------------------------------------------------
  1537. X    disp_info.c - X386MON display several types of fixed width fields
  1538. X    wht@n4hgf.Mt-Park.GA.US
  1539. X
  1540. X  Defined functions:
  1541. X    disp_info(x,y,label,flen,value)
  1542. X    disp_info_units_color(x,y,label,flen,units,value,pixel)
  1543. X    disp_info_text(x,y,pixel,textstr)
  1544. X    disp_info_units(x,y,label,flen,units,value)
  1545. X    disp_static(x,y,label,flen,value)
  1546. X    disp_static_text(x,y,pixel,textstr)
  1547. X    disp_static_units(x,y,label,flen,units,value)
  1548. X
  1549. X--------------------------------------------------------------------------*/
  1550. X/*+:EDITS:*/
  1551. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  1552. X
  1553. X#include "unixincs.h"
  1554. X#include "x386mon.h"
  1555. X#include "utoa.h"
  1556. X#include "disp_info.h"
  1557. X
  1558. X/*+-------------------------------------------------------------------------
  1559. X    disp_info(x,y,label,flen,value)
  1560. X--------------------------------------------------------------------------*/
  1561. Xvoid
  1562. Xdisp_info(x,y,label,flen,value)
  1563. Xregister x,y;
  1564. Xchar *label;
  1565. Xint flen;
  1566. Xlong value;
  1567. X{
  1568. Xregister fwidth = FWIDTH;
  1569. Xint llen = strlen(label);
  1570. Xchar s32[32];
  1571. X
  1572. X    if(redrawing_entire_DrawArea)
  1573. X    {
  1574. X        XSetForeground(display,gc,colorBlue.pixel);
  1575. X        XDrawString(display,window,gc,x,y + FASCENT,label,llen);
  1576. X    }
  1577. X    x += (llen * fwidth);
  1578. X    ultoda(s32,flen,value);
  1579. X    llen = strlen(s32);
  1580. X    XClearArea(display,window,x,y,fwidth * llen,FHEIGHT,0);
  1581. X    XSetForeground(display,gc,colorGreen.pixel);
  1582. X    XDrawString(display,window,gc,x,y + FASCENT,s32,llen);
  1583. X
  1584. X}    /* end of disp_info */
  1585. X
  1586. X/*+-------------------------------------------------------------------------
  1587. X    disp_static(x,y,label,flen,value)
  1588. X--------------------------------------------------------------------------*/
  1589. Xvoid
  1590. Xdisp_static(x,y,label,flen,value)
  1591. Xregister x,y;
  1592. Xchar *label;
  1593. Xint flen;
  1594. Xlong value;
  1595. X{
  1596. Xregister fwidth;
  1597. Xint llen;
  1598. Xchar s32[32];
  1599. X
  1600. X    if(redrawing_entire_DrawArea)
  1601. X    {
  1602. X        fwidth = FWIDTH;
  1603. X        llen = strlen(label);
  1604. X
  1605. X        XSetForeground(display,gc,colorBlue.pixel);
  1606. X        XDrawString(display,window,gc,x,y + FASCENT,label,llen);
  1607. X        x += (llen * fwidth);
  1608. X        ultoda(s32,flen,value);
  1609. X        XDrawString(display,window,gc,x,y + FASCENT,s32,strlen(s32));
  1610. X    }
  1611. X
  1612. X}    /* end of disp_static */
  1613. X
  1614. X/*+-------------------------------------------------------------------------
  1615. X    disp_info_units_color(x,y,label,flen,units,value,pixel)
  1616. X--------------------------------------------------------------------------*/
  1617. Xvoid
  1618. Xdisp_info_units_color(x,y,label,flen,units,value,pixel)
  1619. Xregister x,y;
  1620. Xchar *label;
  1621. Xint flen;
  1622. Xchar *units;
  1623. Xlong value;
  1624. XPixel pixel;
  1625. X{
  1626. Xregister fwidth = FWIDTH;
  1627. Xregister itmp;
  1628. Xint llen = strlen(label);
  1629. Xchar s32[32];
  1630. X
  1631. X    if(redrawing_entire_DrawArea)
  1632. X    {
  1633. X        XSetForeground(display,gc,colorBlue.pixel);
  1634. X        XDrawString(display,window,gc,x,y + FASCENT,label,llen);
  1635. X    }
  1636. X    x += (llen * fwidth);
  1637. X    ultoda(s32,flen,value);
  1638. X    llen = strlen(s32);
  1639. X    XClearArea(display,window,x,y,itmp = fwidth * llen,FHEIGHT,0);
  1640. X    XSetForeground(display,gc,pixel);
  1641. X    XDrawString(display,window,gc,x,y + FASCENT,s32,llen);
  1642. X    if(redrawing_entire_DrawArea)
  1643. X        XDrawString(display,window,gc,x + itmp,y + FASCENT,units,strlen(units));
  1644. X
  1645. X}    /* end of disp_info_units_color */
  1646. X
  1647. X/*+-------------------------------------------------------------------------
  1648. X    disp_info_units(x,y,label,flen,units,value)
  1649. X--------------------------------------------------------------------------*/
  1650. Xvoid
  1651. Xdisp_info_units(x,y,label,flen,units,value)
  1652. Xregister x,y;
  1653. Xchar *label;
  1654. Xint flen;
  1655. Xchar *units;
  1656. Xlong value;
  1657. X{
  1658. X    disp_info_units_color(x,y,label,flen,units,value,colorGreen.pixel);
  1659. X}    /* end of disp_info_units */
  1660. X
  1661. X/*+-------------------------------------------------------------------------
  1662. X    disp_static_units(x,y,label,flen,units,value)
  1663. X--------------------------------------------------------------------------*/
  1664. Xvoid
  1665. Xdisp_static_units(x,y,label,flen,units,value)
  1666. Xregister x,y;
  1667. Xchar *label;
  1668. Xint flen;
  1669. Xchar *units;
  1670. Xlong value;
  1671. X{
  1672. Xregister fwidth;
  1673. Xregister len;
  1674. Xchar s32[32];
  1675. X
  1676. X    if(redrawing_entire_DrawArea)
  1677. X    {
  1678. X        fwidth = FWIDTH;
  1679. X        len = strlen(label);
  1680. X        XSetForeground(display,gc,colorBlue.pixel);
  1681. X        XDrawString(display,window,gc,x,y + FASCENT,label,len);
  1682. X        x += (len * fwidth);
  1683. X        ultoda(s32,flen,value);
  1684. X        XDrawString(display,window,gc,x,y + FASCENT,s32,strlen(s32));
  1685. X        len = strlen(s32);
  1686. X        x += (len * fwidth);
  1687. X        XDrawString(display,window,gc,x,y + FASCENT,units,strlen(units));
  1688. X    }
  1689. X
  1690. X}    /* end of disp_static_units */
  1691. X
  1692. X/*+-------------------------------------------------------------------------
  1693. X    disp_info_text(x,y,pixel,textstr)
  1694. X
  1695. Xreturns length of string
  1696. X--------------------------------------------------------------------------*/
  1697. Xint
  1698. Xdisp_info_text(x,y,pixel,textstr)
  1699. Xint x;
  1700. Xint y;
  1701. Xunsigned long pixel;
  1702. Xchar *textstr;
  1703. X{
  1704. Xregister len = strlen(textstr);
  1705. X
  1706. X    XClearArea(display,window,x,y,FWIDTH * len,FHEIGHT,0);
  1707. X    XSetForeground(display,gc,pixel);
  1708. X    XDrawString(display,window,gc,x,y + FASCENT,textstr,len);
  1709. X    return(len * FWIDTH);
  1710. X}    /* end of disp_info_text */
  1711. X
  1712. X/*+-------------------------------------------------------------------------
  1713. X    disp_static_text(x,y,pixel,textstr)
  1714. X--------------------------------------------------------------------------*/
  1715. Xvoid
  1716. Xdisp_static_text(x,y,textstr)
  1717. Xint x;
  1718. Xint y;
  1719. Xchar *textstr;
  1720. X{
  1721. X    XSetForeground(display,gc,colorBlue.pixel);
  1722. X    XDrawString(display,window,gc,x,y + FASCENT,textstr,strlen(textstr));
  1723. X}    /* end of disp_static_text */
  1724. X
  1725. X/* vi: set tabstop=4 shiftwidth=4: */
  1726. X/* end of disp_static.c */
  1727. SHAR_EOF
  1728. chmod 0644 x386mon/disp_info.c ||
  1729. echo 'restore of x386mon/disp_info.c failed'
  1730. Wc_c="`wc -c < 'x386mon/disp_info.c'`"
  1731. test 5281 -eq "$Wc_c" ||
  1732.     echo 'x386mon/disp_info.c: original size 5281, current size' "$Wc_c"
  1733. fi
  1734. true || echo 'restore of x386mon/disp_info.h failed'
  1735. echo End of part 2, continue with part 3
  1736. exit 0
  1737.  
  1738. -----------------------------------------------------------------------
  1739. Warren Tucker, TuckerWare   gatech!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
  1740. Many [Nobel physics] prizes  have been given  to people for  telling us
  1741. the universe is not as simple as we thought it was. -Stephen Hawking in
  1742. A Brief History of Time     In computing, there are no such prizes. -me
  1743.