home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume16 / hman / part04 < prev    next >
Text File  |  1992-03-07  |  20KB  |  721 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!munnari.oz.au!mips!mips!msi!dcmartin
  3. From: mab@ecmwf.co.uk (Baudouin Raoult)
  4. Subject: v16i146: hyperwidget & manual browser, Part04/06
  5. Message-ID: <1992Mar6.204843.8779@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. References: <csx-16i143-hman@uunet.UU.NET>
  10. Date: Fri, 6 Mar 1992 20:48:43 GMT
  11. Approved: dcmartin@msi.com
  12.  
  13. Submitted-by: mab@ecmwf.co.uk (Baudouin Raoult)
  14. Posting-number: Volume 16, Issue 146
  15. Archive-name: hman/part04
  16.  
  17. #!/bin/sh
  18. # this is part 4 of a multipart archive
  19. # do not concatenate these parts, unpack them in order with /bin/sh
  20. # file Hyper.c continued
  21. #
  22. CurArch=4
  23. if test ! -r s2_seq_.tmp
  24. then echo "Please unpack part 1 first!"
  25.      exit 1; fi
  26. ( read Scheck
  27.   if test "$Scheck" != $CurArch
  28.   then echo "Please unpack part $Scheck next!"
  29.        exit 1;
  30.   else exit 0; fi
  31. ) < s2_seq_.tmp || exit 1
  32. echo "x - Continuing file Hyper.c"
  33. sed 's/^X//' << 'SHAR_EOF' >> Hyper.c
  34. X/*-----------------------------------------------------------------------*/
  35. X
  36. Xstatic void show_selection(h)
  37. XHyperWidget h;
  38. X{
  39. X#ifdef MOTIF
  40. X#define SetArg(a,b)  XtSetArg(al[ac],a,b);ac++
  41. X#define GetValues(w) XtGetValues(w,al,ac);ac=0
  42. X#define SetValues(w) XtSetValues(w,al,ac);ac=0
  43. X
  44. X    Widget clip = XtParent(h);
  45. X    Widget swin;
  46. X
  47. X    Widget h_scroll;
  48. X    Widget v_scroll;
  49. X
  50. X    int ac = 0;
  51. X
  52. X    Position    x_parent,y_parent;
  53. X    Position    x_grep,y_grep;
  54. X    Dimension   h_grep,w_grep;
  55. X    Position    x_clip,y_clip;
  56. X    Dimension   h_clip,w_clip;
  57. X    Position    dv=0,dh=0;
  58. X    int min,max;
  59. X    int v_val,v_size,v_inc,v_page;
  60. X    int h_val,h_size,h_inc,h_page;
  61. X    Position x,y;
  62. X
  63. X    Arg al[5];
  64. X
  65. X
  66. X
  67. X    /* check if selection exists */
  68. X
  69. X    if(!h->hyper.grep_seg) return;
  70. X
  71. X    /* check if the widget is in a scrolled window */
  72. X    /* the XnScrolledWindow creates a clip window  */
  73. X    /* The widget's parent is the clip window      */
  74. X
  75. X
  76. X    if(!clip) return;
  77. X    swin = XtParent(clip);
  78. X
  79. X    if(!swin || !XmIsScrolledWindow(swin)) return;
  80. X
  81. X
  82. X    /* Get window scroll bars */
  83. X
  84. X    SetArg(XmNhorizontalScrollBar, &h_scroll);
  85. X    SetArg(XmNverticalScrollBar  , &v_scroll);
  86. X    GetValues(swin);
  87. X
  88. X    /* Get size of clip window and selection rect */
  89. X
  90. X    w_clip = clip->core.width;
  91. X    h_clip = clip->core.height;
  92. X
  93. X    w_grep = h->hyper.grep_width;
  94. X    h_grep = h->hyper.grep_height;
  95. X
  96. X    /* Get global coordinates of clip and selection rect */
  97. X
  98. X    XtTranslateCoords(clip,0,0,&x_clip,&y_clip);
  99. X    XtTranslateCoords(h,h->hyper.grep_x,h->hyper.grep_y,&x_grep,&y_grep);
  100. X
  101. X    /* offset of selection within clip window */
  102. X
  103. X    x = x_grep - x_clip;
  104. X    y = y_grep - y_clip;
  105. X
  106. X
  107. X    /* selection y coordinate is not visible */
  108. X
  109. X    if( y < 0 || y + h_grep > h_clip)
  110. X    {
  111. X        /* the widget must be moved verticaly by dv pixels */
  112. X
  113. X        dv = (y + h_grep / 2)  - h_clip / 2;
  114. X
  115. X        SetArg(XmNminimum,&min);
  116. X        SetArg(XmNmaximum,&max);
  117. X
  118. X        GetValues(v_scroll);
  119. X
  120. X        XmScrollBarGetValues(v_scroll,&v_val,&v_size,&v_inc,&v_page);
  121. X
  122. X        max -= v_size;
  123. X
  124. X        if( dv + v_val > max ) dv = max - v_val;
  125. X        if( dv + v_val < min ) dv = min - v_val;
  126. X
  127. X
  128. X    }
  129. X
  130. X    /* selection x coordinate is not visible */
  131. X
  132. X    if( x < 0 || x + w_grep > w_clip)
  133. X    {
  134. X        /* the widget must be moved horizontaly by dh pixels */
  135. X
  136. X        dh = (x + w_grep / 2)  - w_clip / 2;
  137. X
  138. X        SetArg(XmNminimum,&min);
  139. X        SetArg(XmNmaximum,&max);
  140. X        GetValues(h_scroll);
  141. X
  142. X        XmScrollBarGetValues(h_scroll,&h_val,&h_size,&h_inc,&h_page);
  143. X
  144. X        max -= h_size;
  145. X
  146. X        if( dh + h_val > max ) dh = max - h_val;
  147. X        if( dh + h_val < min ) dh = min - h_val;
  148. X
  149. X    }
  150. X
  151. X    /* if the widget must be moved */
  152. X
  153. X    if(dv || dh)
  154. X    {
  155. X        Position x = h->core.x-dh;
  156. X        Position y = h->core.y-dv;
  157. X
  158. X        /* move it */
  159. X
  160. X        SetArg(XmNx,x);
  161. X        SetArg(XmNy,y);
  162. X        SetValues(h);
  163. X
  164. X        /* update scroll bars */
  165. X
  166. X        if(dv) XmScrollBarSetValues(v_scroll,v_val+dv,v_size,v_inc,
  167. X            v_page,TRUE);
  168. X        if(dh) XmScrollBarSetValues(h_scroll,h_val+dh,h_size,h_inc,
  169. X            h_page,TRUE);
  170. X
  171. X
  172. X    }
  173. X
  174. X
  175. X#endif /* MOTIF */
  176. X}
  177. X
  178. X/*-----------------------------------------------------------------------*/
  179. X/* Clear previous selection                                              */
  180. X/*-----------------------------------------------------------------------*/
  181. X
  182. Xstatic void clear_selection(w)
  183. XHyperWidget w;
  184. X{
  185. X    if(w->hyper.grep_seg)
  186. X    {
  187. X        if(XtIsRealized(w))
  188. X
  189. X            /* force a redraw */
  190. X
  191. X            XClearArea(XtDisplay(w),XtWindow(w),
  192. X                w->hyper.grep_x,
  193. X                w->hyper.grep_y,
  194. X                w->hyper.grep_width,
  195. X                w->hyper.grep_height,
  196. X                TRUE);
  197. X
  198. X    }
  199. X    w->hyper.grep_seg = NULL;
  200. X}
  201. X
  202. X/*-----------------------------------------------------------------------*/
  203. X/* Set the new selection                                                 */
  204. X/*-----------------------------------------------------------------------*/
  205. X
  206. Xstatic void set_selection(w)
  207. XHyperWidget w;
  208. X{
  209. X    if(w->hyper.grep_seg)
  210. X    {
  211. X        text_segment *s = w->hyper.grep_seg;
  212. X        char *p = s->text;
  213. X        XCharStruct   char_info;
  214. X        int dir,ascent,desc;
  215. X
  216. X        /* get size of the begining of
  217. X           the segment, up to the found string */
  218. X
  219. X        XTextExtents(
  220. X            (s->type == HIGHLIGHT ? 
  221. X            w->hyper.highlight_font : 
  222. X            w->hyper.normal_font),
  223. X            s->text,
  224. X            w->hyper.grep_off,
  225. X            &dir,&ascent,&desc,&char_info);
  226. X
  227. X        w->hyper.grep_x      = s->x + char_info.width;
  228. X        w->hyper.grep_y      = s->y + desc;
  229. X        w->hyper.grep_height = s->height;
  230. X
  231. X        /* Get size of the selection */
  232. X
  233. X        XTextExtents(
  234. X            (s->type == HIGHLIGHT ? 
  235. X            w->hyper.highlight_font : 
  236. X            w->hyper.normal_font),
  237. X            w->hyper.grep_txt,
  238. X            w->hyper.grep_len,
  239. X            &dir,&ascent,&desc,&char_info);
  240. X
  241. X
  242. X        w->hyper.grep_width  = char_info.width;
  243. X
  244. X        /* force update */
  245. X
  246. X        if(XtIsRealized(w))
  247. X            XClearArea(XtDisplay(w),XtWindow(w),
  248. X                w->hyper.grep_x,
  249. X                w->hyper.grep_y,
  250. X                w->hyper.grep_width,
  251. X                w->hyper.grep_height,
  252. X                TRUE);
  253. X    }
  254. X}
  255. X
  256. X/* size of regexp buffer */
  257. X
  258. X#define ESIZE 1024
  259. X
  260. X/*-----------------------------------------------------------------------*/
  261. X/* if you have regexp, define USE_REGEXP                                 */
  262. X/* NOTE : since regexp variables and functions are not static            */
  263. X/* you can have some problems if you use the same names or include       */
  264. X/* regexp somewhere else                                                 */
  265. X/*-----------------------------------------------------------------------*/
  266. X#ifdef USE_REGEXP
  267. X
  268. X/* regexp macros ... see "man regexp" */
  269. X
  270. X#define INIT        register char *sp = instring;
  271. X#define GETC()      (*sp++)
  272. X#define PEEKC()     (*sp)
  273. X#define UNGETC(c)   (--sp)
  274. X#define RETURN(c)   return;
  275. X#define ERROR(c)    printf(stderr,"Warning regexp error %d\n",c)
  276. X
  277. X
  278. X#include <regexp.h>
  279. X
  280. X
  281. X#else 
  282. X
  283. X/*-----------------------------------------------------------------------*/
  284. X/* If we don't have regexp mimic it.                                     */
  285. X/* Just find plain text using strncmp. no regular expression matching    */
  286. X/*-----------------------------------------------------------------------*/
  287. X
  288. Xstatic char *loc1,*loc2;
  289. Xstatic int len;
  290. X
  291. Xstatic compile(w,buf,end)
  292. Xchar *w,*buf;
  293. Xint end;
  294. X{
  295. X    strcpy(buf,w);
  296. X    len = strlen(w);
  297. X}
  298. X
  299. Xstatic step(w,buf)
  300. Xchar *w;
  301. Xchar *buf;
  302. X{
  303. X    loc1 = w;
  304. X    while(*loc1)
  305. X    {
  306. X        if(strncmp(loc1,buf,len) == 0)
  307. X        {
  308. X            loc2 = loc1+len;
  309. X            return TRUE;
  310. X        }
  311. X        loc1++;
  312. X    }
  313. X    return FALSE;
  314. X}
  315. X
  316. X
  317. X#endif
  318. X
  319. X/*-----------------------------------------------------------------------*/
  320. X/* Select a word in the hyper widget                                     */
  321. X/* word : word to find ( or regular expression if USE_REGEX is defined)  */
  322. X/* ignore_case : if TRUE ignore case in comparaison                      */
  323. X/* from_start : if TRUE search from start of text, else search from      */
  324. X/* current selection                                                     */
  325. X/* wrap: if TRUE, continue search from the begining of text if the end   */
  326. X/* is reached                                                            */
  327. X/*-----------------------------------------------------------------------*/
  328. X
  329. X#ifdef _NO_PROTO
  330. X
  331. XBoolean HyperGrep(widget,word,ignore_case,from_start,wrap)
  332. XWidget   widget;
  333. Xchar     *word;
  334. XBoolean  ignore_case;
  335. XBoolean  from_start;
  336. XBoolean  wrap;
  337. X
  338. X#else
  339. X
  340. XBoolean HyperGrep(Widget widget,
  341. X                  char *word,
  342. X                  Boolean ignore_case,
  343. X                  Boolean from_start,
  344. X                  Boolean wrap)
  345. X
  346. X#endif
  347. X
  348. X{
  349. X    HyperWidget  h = (HyperWidget)widget;
  350. X    char         *w = word;
  351. X    char         *p;
  352. X    int          offset,from,to;
  353. X    text_segment *s;
  354. X    char          expbuf[ESIZE];
  355. X
  356. X    if(!h->hyper.first_seg) return;
  357. X
  358. X    if(ignore_case)
  359. X    {
  360. X        /* if ignore case, change word to lower case */
  361. X        w = XtNewString(word);
  362. X        lowcase(w);
  363. X    }
  364. X
  365. X    /* compile the regular expression */
  366. X    compile(w,expbuf,&expbuf[ESIZE],'\0');
  367. X
  368. X
  369. X    if(ignore_case) XtFree(w);
  370. X
  371. X    /* if from_start or no previous selection, 
  372. X       start from first segment */
  373. X
  374. X    if(from_start || h->hyper.grep_seg == NULL)
  375. X    {
  376. X        offset=0;
  377. X        wrap = FALSE;
  378. X        s = h->hyper.first_seg;
  379. X    }
  380. X    else 
  381. X    {
  382. X        /* start from last selection */
  383. X
  384. X        offset = h->hyper.grep_off + h->hyper.grep_len;
  385. X        s = h->hyper.grep_seg;
  386. X    }
  387. X
  388. X    for(;;)
  389. X    {
  390. X        if(s->text)
  391. X        {
  392. X            if(ignore_case)
  393. X            {
  394. X                /* if ignore case, change segment to lower case */
  395. X                p = XtNewString(s->text);
  396. X                lowcase(p);
  397. X            }
  398. X
  399. X            /* search the string */
  400. X
  401. X            if(step(p+offset,expbuf))
  402. X            {
  403. X                /* if found ...*/
  404. X
  405. X                /* clear previous selection */
  406. X                clear_selection(h);
  407. X
  408. X                h->hyper.grep_seg = s;
  409. X                h->hyper.grep_off = offset + (loc1-(p+offset));
  410. X                h->hyper.grep_txt = s->text + h->hyper.grep_off;
  411. X                h->hyper.grep_len = loc2-loc1;
  412. X
  413. X                /* set new selection */
  414. X
  415. X                set_selection(h);
  416. X
  417. X                /* make it visible */
  418. X
  419. X                show_selection(h);
  420. X
  421. X                if(ignore_case) XtFree(p);
  422. X
  423. X                return TRUE;
  424. X            }
  425. X
  426. X            if(ignore_case) XtFree(p);
  427. X        }
  428. X
  429. X        offset = 0;
  430. X        s = s->next;
  431. X
  432. X        /* if end of text and wrap mode, go to start of text */
  433. X        if(!s)
  434. X            if(wrap)
  435. X            {
  436. X                wrap = FALSE;
  437. X                s = h->hyper.first_seg;
  438. X            }
  439. X            else break;
  440. X
  441. X    }
  442. X
  443. X
  444. X    return FALSE;
  445. X
  446. X}
  447. SHAR_EOF
  448. echo "File Hyper.c is complete"
  449. chmod 0644 Hyper.c || echo "restore of Hyper.c fails"
  450. set `wc -c Hyper.c`;Sum=$1
  451. if test "$Sum" != "39179"
  452. then echo original size 39179, current size $Sum;fi
  453. echo "x - extracting Hyper.h (Text)"
  454. sed 's/^X//' << 'SHAR_EOF' > Hyper.h &&
  455. X/*==================================================================*/
  456. X/*                                                                  */
  457. X/* HyperWidget                                                      */
  458. X/*                                                                  */
  459. X/* B.Raoult (mab@ecmwf.co.uk)                              Oct.91   */
  460. X/*                                                                  */
  461. X/* Hyper text like widget.                                          */
  462. X/*                                                                  */
  463. X/*==================================================================*/
  464. X
  465. X#ifndef  HYPER_H
  466. X#define  HYPER_H
  467. X
  468. X/* 
  469. X    If you define MOTIF, the widget will inherit proprieties 
  470. X   from the XmPrimitive class : Help Callback, user data, ...
  471. X*/
  472. X
  473. X/*
  474. X#define MOTIF
  475. X*/
  476. X
  477. X/*
  478. X   If your machine got regexp.h
  479. X*/
  480. X/*#define USE_REGEXP*/
  481. X
  482. Xextern WidgetClass hyperWidgetClass;
  483. Xtypedef struct _HyperClassRec * HyperWidgetClass;
  484. Xtypedef struct _HyperRec      * HyperWidget;
  485. X
  486. X/*
  487. X * Define resource strings for the Hyper widget.
  488. X */
  489. X
  490. X#define XtNhighlightFont     "highlightFont"
  491. X#define XtNnormalFont        "normalFont"
  492. X#define XtNhighlightColor    "highlightColor"
  493. X#define XtNselectColor       "selectColor"
  494. X#define XtNnormalColor       "normalColor"
  495. X#define XtNactivateCallback  "activateCallback"
  496. X#define XtNzoomEffect        "zoomEffect"
  497. X#define XtCZoom              "Zoom"
  498. X#define XtNstartHighlight    "startHighlight"
  499. X#define XtNendHighlight      "endHighlight"
  500. X#define XtCTagChar           "TagChar"
  501. X#define XtNzoomSpeed         "zoomSpeed"
  502. X#define XtCZoomSpeed         "ZoomSpeed"
  503. X#define XtCMargin            "Margin"
  504. X#define XtNmargin            "margin"
  505. X
  506. X/*
  507. X  Callback structure
  508. X*/
  509. X
  510. X#define HYPER_REASON 1
  511. X
  512. Xtypedef struct {
  513. X    int     reason;   /* always = HYPER_REASON                            */
  514. X    XEvent *event;    /* event                                            */
  515. X    char     *text;     /* pointer on highlighted text selected (read only) */
  516. X    int  length;    /* length of selected text                          */
  517. X}  hyperCallbackStruct;
  518. X
  519. X#ifdef _NO_PROTO
  520. X
  521. Xextern Widget CreateHyper();
  522. Xextern void HyperLoadFile();
  523. Xextern void HyperSetText();
  524. Xextern void HyperSetTags();
  525. Xextern Boolean HyperFind();
  526. Xextern char    *HyperGetText();
  527. X
  528. X#else
  529. X
  530. X#if defined(__cplusplus) || defined(c_plusplus)
  531. Xextern "C" {
  532. X#endif
  533. X
  534. X    extern Widget CreateHyper(Widget parent,
  535. X        char *name,
  536. X        ArgList al,
  537. X        int ac);
  538. X
  539. X    extern void HyperLoadFile(Widget widget,
  540. X        char *fname);
  541. X
  542. X    extern void HyperSetText(Widget widget,
  543. X        char *text);
  544. X
  545. X    extern void HyperSetTags (Widget widget,
  546. X        unsigned char start_highlight,
  547. X        unsigned char end_highlight);
  548. X
  549. X    Boolean HyperGrep(Widget  widget,
  550. X        char    *word,
  551. X        Boolean ignore_case,
  552. X        Boolean from_start,
  553. X        Boolean wrap);
  554. X
  555. X        char *HyperGetText(Widget widget,Boolean include_tags);
  556. X
  557. X
  558. X#if defined(__cplusplus) || defined(c_plusplus)
  559. X}
  560. X#endif
  561. X
  562. X#endif /* _NO_PROTO */
  563. X
  564. X#define XtIsHyper(w)     XtIsSubclass(w,hyperWidgetClass)
  565. X
  566. X#endif HYPER_H
  567. SHAR_EOF
  568. chmod 0644 Hyper.h || echo "restore of Hyper.h fails"
  569. set `wc -c Hyper.h`;Sum=$1
  570. if test "$Sum" != "3108"
  571. then echo original size 3108, current size $Sum;fi
  572. echo "x - extracting HyperP.h (Text)"
  573. sed 's/^X//' << 'SHAR_EOF' > HyperP.h &&
  574. X/*==================================================================*/
  575. X/*                                                                  */
  576. X/* HyperWidget                                                      */
  577. X/*                                                                  */
  578. X/* B.Raoult (mab@ecmwf.co.uk)                              Oct.91   */
  579. X/*                                                                  */
  580. X/* Hyper text like widget.                                          */
  581. X/*                                                                  */
  582. X/*==================================================================*/
  583. X
  584. X#ifndef HYPERP_H
  585. X#define HYPERP_H
  586. X
  587. X#ifdef MOTIF
  588. X#include <Xm/XmP.h>
  589. X#endif
  590. X
  591. X/* Hyper class : no new fileds */
  592. X
  593. Xtypedef struct _HyperClassPart{
  594. X    int ignore;
  595. X} HyperClassPart;
  596. X
  597. Xtypedef struct _HyperClassRec{
  598. X    CoreClassPart    core_class;
  599. X#ifdef MOTIF
  600. X    XmPrimitiveClassPart  primitive_class;
  601. X#endif
  602. X    HyperClassPart  hyper_class;
  603. X} HyperClassRec;
  604. X
  605. Xextern HyperClassRec hyperClassRec;
  606. X
  607. X/* Text segment */
  608. X
  609. Xtypedef struct text_segment {
  610. X
  611. X    struct text_segment *next; /* Next segment */
  612. X    int          type;         /* NEWLINE, NORMAL or HIGHLIGHT */
  613. X    char         *text;        /* pointer to text */
  614. X    int          length;       /* length of text */
  615. X    int          desc;         /* font descent */
  616. X    GC           gc;           /* GC used to draw text */
  617. X    Position     x,y;          /* Position of drawn text */
  618. X    Dimension    width,height; /* Size of drawn text */
  619. X
  620. X} text_segment;
  621. X
  622. Xtypedef struct _HyperPart {
  623. X
  624. X    Cursor    hand;               /* Selecting cursor shape */
  625. X
  626. X    Pixel     normal_color;       /* Color of the normal text */
  627. X    Pixel     highlight_color;    /* Color of the highlighted text */
  628. X    Pixel     select_color;       /* Color of the selected text */
  629. X
  630. X    XFontStruct  *normal_font;    /* Font of the normal text */
  631. X    XFontStruct  *highlight_font; /* Font of the highlighted text */
  632. X
  633. X    GC        normal_gc;          /* Gc for the normal text */
  634. X    GC        highlight_gc;       /* Gc for the highlighted text */
  635. X
  636. X    GC        xor_gc;             /* Gc for zoom  */
  637. X    GC        select_gc;          /* Gc for select */
  638. X
  639. X    Boolean  zoom;               /* zoom effect when selected */
  640. X    int      speed;              /* zoom speed                */
  641. X    char         start_of_highlight; /* start of highlighted text mark */
  642. X    char         end_of_highlight;   /* end of highlighted text mark */
  643. X
  644. X    int      margin;             /* margins size */
  645. X
  646. X
  647. X    text_segment         *grep_seg;  /* segment where found text is */
  648. X
  649. X    char                 *grep_txt;  /* pointer to found text */
  650. X    int              grep_len;   /* length of found text */
  651. X    int              grep_off;   /* offset of found text */
  652. X
  653. X    Position          grep_x;    /* rectangle of founf text*/
  654. X    Position          grep_y;
  655. X    Dimension        grep_width;
  656. X    Dimension        grep_height;
  657. X
  658. X    text_segment        *first_seg;     /* the text segments         */
  659. X    text_segment        *last_selected; /* last selected segment     */
  660. X    text_segment        *last_cursor;   /* last under cursor segment */
  661. X
  662. X
  663. X    XtCallbackList activate;         /* callback list             */
  664. X
  665. X} HyperPart;
  666. X
  667. Xtypedef struct _HyperRec {
  668. X    CorePart          core;
  669. X#ifdef MOTIF
  670. X    XmPrimitivePart  primitive;
  671. X#endif
  672. X    HyperPart        hyper;
  673. X} HyperRec;
  674. X
  675. X#endif HYPERP_H
  676. SHAR_EOF
  677. chmod 0644 HyperP.h || echo "restore of HyperP.h fails"
  678. set `wc -c HyperP.h`;Sum=$1
  679. if test "$Sum" != "3432"
  680. then echo original size 3432, current size $Sum;fi
  681. echo "x - extracting hman.xbm (Text)"
  682. sed 's/^X//' << 'SHAR_EOF' > hman.xbm &&
  683. X#define hman_width 32
  684. X#define hman_height 32
  685. Xstatic char hman_bits[] = {
  686. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
  687. X   0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, 0x30, 0x08,
  688. X   0x00, 0x00, 0x0c, 0x0b, 0xff, 0xff, 0x03, 0x78, 0x01, 0x80, 0x60, 0x48,
  689. X   0x01, 0x80, 0x0c, 0xc8, 0x3d, 0x8d, 0x60, 0xcb, 0x01, 0x80, 0x0c, 0xc8,
  690. X   0xcd, 0x99, 0xe0, 0xc8, 0x01, 0x80, 0x0c, 0xc8, 0x3d, 0x87, 0x00, 0xc9,
  691. X   0x01, 0x80, 0x98, 0xc8, 0x2d, 0x89, 0x04, 0xc8, 0x01, 0x80, 0x00, 0xc8,
  692. X   0x9d, 0x9b, 0xcc, 0xcf, 0x01, 0x80, 0x40, 0xc4, 0x9d, 0x8e, 0x40, 0xc2,
  693. X   0x01, 0x80, 0x4c, 0xc1, 0x75, 0x86, 0xc0, 0xc8, 0x01, 0x80, 0x40, 0xc0,
  694. X   0xe5, 0x9c, 0x30, 0xc5, 0x01, 0x80, 0x0c, 0xc0, 0x01, 0x80, 0x03, 0xc0,
  695. X   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
  696. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  697. SHAR_EOF
  698. chmod 0644 hman.xbm || echo "restore of hman.xbm fails"
  699. set `wc -c hman.xbm`;Sum=$1
  700. if test "$Sum" != "875"
  701. then echo original size 875, current size $Sum;fi
  702. echo "x - extracting Imakefile (Text)"
  703. sed 's/^X//' << 'SHAR_EOF' > Imakefile &&
  704. X# Where is your motif stuff
  705. X
  706. XMOTIF_HOME=/vol/motif
  707. X
  708. X# If you don't have regexp, remove -DUSE_REGEXP
  709. X
  710. XDEFINES=-DUSE_REGEXP -DMOTIF
  711. SHAR_EOF
  712. echo "End of part 4"
  713. echo "File Imakefile is continued in part 5"
  714. echo "5" > s2_seq_.tmp
  715. exit 0
  716. -- 
  717. --
  718. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  719. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  720. Sunnyvale, California 94086            at&t: 408/522-9236
  721.