home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume17 / lypnvxlb / part02 < prev    next >
Encoding:
Text File  |  1992-03-31  |  45.6 KB  |  1,618 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!usc!zaphod.mps.ohio-state.edu!mips!msi!dcmartin
  3. From: Renaldo Recuerdo <rr@sco.COM>
  4. Subject: v17i049: Xlib only lyapunov, Part02/02
  5. Message-ID: <1992Apr1.144608.5211@msi.com>
  6. Originator: dcmartin@snoopy
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. References: <csx-17i048-lyapunov-xlib@uunet.UU.NET>
  10. Date: Wed, 1 Apr 1992 14:46:08 GMT
  11. Approved: dcmartin@msi.com
  12. Lines: 1604
  13.  
  14. Submitted-by: Renaldo Recuerdo <rr@sco.COM>
  15. Posting-number: Volume 17, Issue 49
  16. Archive-name: lyapunov-xlib/part02
  17.  
  18. # this is part.02 (part 2 of a multipart archive)
  19. # do not concatenate these parts, unpack them in order with /bin/sh
  20. # file lyap.c continued
  21. #
  22. if test ! -r _shar_seq_.tmp; then
  23.     echo 'Please unpack part 1 first!'
  24.     exit 1
  25. fi
  26. (read Scheck
  27.  if test "$Scheck" != 2; then
  28.     echo Please unpack part "$Scheck" next!
  29.     exit 1
  30.  else
  31.     exit 0
  32.  fi
  33. ) < _shar_seq_.tmp || exit 1
  34. if test ! -f _shar_wnt_.tmp; then
  35.     echo 'x - still skipping lyap.c'
  36. else
  37. echo 'x - continuing file lyap.c'
  38. sed 's/^X//' << 'SHAR_EOF' >> 'lyap.c' &&
  39. X               init_color(); 
  40. X               XSetWindowColormap(dpy, canvas, cmap);
  41. X           }
  42. X           break;
  43. X    case 'w': if (numwheels > 0)
  44. X            numwheels--;
  45. X           else
  46. X            numwheels = MAXWHEELS;
  47. X           if (displayplanes > 1) {
  48. X               init_color(); 
  49. X               XSetWindowColormap(dpy, canvas, cmap);
  50. X           }
  51. X           break;
  52. X    case 'x': Clear(); break;
  53. X    case 'X': Destroy_frame(); break;
  54. X    case 'z': Cycle_frames(); redraw(exponents[frame], expind[frame], 1);
  55. X          break;
  56. X    case 'Z': while (!XPending(dpy)) Cycle_frames(); 
  57. X          redraw(exponents[frame], expind[frame], 1); break;
  58. X    case 'q':
  59. X    case 'Q': exit(0); break;
  60. X    case '?':
  61. X    case 'h':
  62. X    case 'H': print_help(); break;
  63. X    default:  break;
  64. X    }
  65. }
  66. X
  67. /* Here's where we index into a color map. After the Lyapunov exponent is
  68. X * calculated, it is used to determine what color to use for that point.
  69. X * I suppose there are a lot of ways to do this. I used the following :
  70. X * if it's non-negative then there's a reserved area at the lower range
  71. X * of the color map that i index into. The ratio of some "minimum exponent
  72. X * value" and the calculated value is used as a ratio of how high to index
  73. X * into this reserved range. Usually these colors are dark red (see init_color).
  74. X * If the exponent is negative, the same ratio (expo/minlyap) is used to index
  75. X * into the remaining portion of the colormap (which is usually some light
  76. X * shades of color or a rainbow wheel). The coloring scheme can actually make
  77. X * a great deal of difference in the quality of the picture. Different colormaps
  78. X * bring out different details of the dynamics while different indexing
  79. X * algorithms also greatly effect what details are seen. Play around with this.
  80. X */
  81. sendpoint(expo)
  82. double expo;
  83. {
  84. X    static int index;
  85. X    static double tmpexpo;
  86. X    extern double exp();
  87. X
  88. X    point.x++;
  89. X    tmpexpo = (negative) ? expo : -1.0 * expo;
  90. X    if (tmpexpo > 0) {
  91. X        if (displayplanes >1) {
  92. X            index = (int)(tmpexpo*lowrange/maxexp);
  93. X            index = (index % lowrange) + startcolor;
  94. X        }
  95. X        else
  96. X            index = 0;
  97. X    }
  98. X    else {
  99. X        if (displayplanes >1) {
  100. X            index = (int)(tmpexpo*numfreecols/minexp);
  101. X            index = (index % numfreecols) + mincolindex;
  102. X        }
  103. X        else
  104. X            index = 1;
  105. X    }
  106. X      BufferPoint(dpy, canvas, index, point.x, point.y);
  107. X    if (save)
  108. X        exponents[frame][expind[frame]++] = expo;
  109. X    if (point.x >= width) {
  110. X        point.y++;
  111. X        point.x = 0;
  112. X        if (save) {
  113. X            b += b_inc;
  114. X            a = min_a;
  115. X        }
  116. X        if (point.y >= height)
  117. X            return FALSE;
  118. X        else
  119. X            return TRUE;
  120. X    }
  121. X    return TRUE;
  122. }
  123. X
  124. void 
  125. redisplay (w, event)
  126. Window          w;
  127. XXExposeEvent    *event;
  128. {
  129. X    /*
  130. X     * Extract the exposed area from the event and copy
  131. X     * from the saved pixmap to the window.
  132. X     */
  133. X    XCopyArea(dpy, pixmap, canvas, Data_GC[0], 
  134. X           event->x, event->y, event->width, event->height, 
  135. X           event->x, event->y);
  136. }
  137. X
  138. void
  139. resize()
  140. {
  141. X    Window r;
  142. X    int n, x, y;
  143. X    unsigned int bw, d, new_w, new_h;
  144. X    extern void Clear(), Redraw();
  145. X
  146. X    XGetGeometry(dpy,canvas,&r,&x,&y,&new_w,&new_h,&bw,&d);
  147. X    if ((new_w == width) && (new_h == height))
  148. X        return;
  149. X    width = new_w; height = new_h;
  150. X    XClearWindow(dpy, canvas);
  151. X    if (pixmap)
  152. X        XFreePixmap(dpy, pixmap);
  153. X    pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), 
  154. X            width, height, DefaultDepth(dpy, screen));
  155. X    a_inc = a_range / (double)width;
  156. X    b_inc = b_range / (double)height;
  157. X    point.x = -1;
  158. X    point.y = 0;
  159. X    run = 1;
  160. X    a = rubber_data.p_min = min_a;
  161. X    b = rubber_data.q_min = min_b;
  162. X    rubber_data.p_max = max_a;
  163. X    rubber_data.q_max = max_b;
  164. X    freemem();
  165. X    setupmem();
  166. X        for (n=0;n<MAXFRAMES;n++)
  167. X      if ((n <= maxframe) && (n != frame))
  168. X          resized[n] = 1;
  169. X    InitBuffer();
  170. X    Clear();
  171. X    Redraw();
  172. }
  173. X
  174. void
  175. redraw(exparray, index, cont)
  176. double *exparray;
  177. int index, cont;
  178. {
  179. X    static int i;
  180. X    static int x_sav, y_sav;
  181. X
  182. X    x_sav = point.x;
  183. X    y_sav = point.y;
  184. X
  185. X    point.x = -1;
  186. X    point.y = 0;
  187. X
  188. X    save=0;
  189. X    for (i=0;i<index;i++)
  190. X        sendpoint(exparray[i]);
  191. X    save=1;
  192. X    
  193. X    if (cont) {
  194. X        point.x = x_sav;
  195. X        point.y = y_sav;
  196. X    }
  197. X    else {
  198. X        a = point.x * a_inc + min_a;
  199. X        b = point.y * b_inc + min_b;
  200. X    }
  201. X    FlushBuffer();
  202. }
  203. X
  204. void
  205. Redraw() 
  206. {
  207. X    FlushBuffer();
  208. X        point.x = -1;
  209. X        point.y = 0;
  210. X    run = 1;
  211. X        a = min_a;
  212. X        b = min_b;
  213. X    expind[frame] = 0;
  214. X    resized[frame] = 0;
  215. }
  216. X
  217. /* Store color pics in PPM format and monochrome in PGM */
  218. void
  219. save_to_file() 
  220. {
  221. X    FILE *outfile;
  222. X    unsigned char c;
  223. X    XImage *ximage;
  224. X    static int i,j;
  225. X    struct Colormap {
  226. X        unsigned char red;
  227. X        unsigned char green;
  228. X        unsigned char blue;
  229. X    };
  230. X    struct Colormap *colormap=NULL;
  231. X
  232. X    if (colormap)
  233. X        free(colormap);
  234. X    if ((colormap=
  235. X        (struct Colormap *)malloc(sizeof(struct Colormap)*maxcolor))
  236. X            == NULL) {
  237. X        fprintf(stderr,"Error malloc'ing colormap array\n");
  238. X        exit(-1);
  239. X    }
  240. X    outfile = fopen(outname,"w");
  241. X    if(!outfile) {
  242. X        perror(outname);
  243. X        exit(-1);
  244. X    }
  245. X
  246. X    ximage=XGetImage(dpy, pixmap, 0, 0, width, height, AllPlanes, XYPixmap);
  247. X
  248. X    if (displayplanes > 1) {
  249. X        for (i=0;i<maxcolor;i++) {
  250. X            colormap[i].red=(unsigned char)(Colors[i].red >> 8);
  251. X            colormap[i].green=(unsigned char)(Colors[i].green >> 8);
  252. X            colormap[i].blue =(unsigned char)(Colors[i].blue >> 8);
  253. X        }
  254. X        fprintf(outfile,"P%d %d %d\n",6,width,height);
  255. X    }
  256. X    else
  257. X        fprintf(outfile,"P%d %d %d\n",5,width,height);
  258. X    fprintf(outfile,"# settle=%d  dwell=%d start_x=%f\n",settle,dwell,
  259. X                start_x);
  260. X    fprintf(outfile,"# min_a=%f  a_rng=%f  max_a=%f\n",min_a,a_range,max_a);
  261. X    fprintf(outfile,"# min_b=%f  b_rng=%f  max_b=%f\n",min_b,b_range,max_b);
  262. X    if (Rflag)
  263. X         fprintf(outfile,"# pseudo-random forcing\n");
  264. X     else if (force) {
  265. X         fprintf(outfile,"# periodic forcing=");
  266. X         for (i=0;i<maxindex;i++) {
  267. X             fprintf(outfile,"%d",forcing[i]);
  268. X         }
  269. X         fprintf(outfile,"\n");
  270. X     }
  271. X     else
  272. X         fprintf(outfile,"# periodic forcing=01\n");
  273. X     if (Force) {
  274. X         fprintf(outfile,"# function forcing=");
  275. X         for (i=0;i<funcmaxindex;i++) {
  276. X             fprintf(outfile,"%d",Forcing[i]);
  277. X         }
  278. X         fprintf(outfile,"\n");
  279. X     }
  280. X    fprintf(outfile,"%d\n",numcolors-1);
  281. X
  282. X    for (j=0;j<height;j++)
  283. X        for (i=0;i<width;i++) {
  284. X        c = (unsigned char)XGetPixel(ximage,i,j);
  285. X        if (displayplanes > 1)
  286. X            fwrite((char *)&colormap[c],sizeof colormap[0],1,outfile);
  287. X        else
  288. X            fwrite((char *)&c,sizeof c,1,outfile);
  289. X        }
  290. X    fclose(outfile);
  291. }
  292. X
  293. void
  294. recalc() 
  295. {
  296. X    static int i, index, x, y;
  297. X    
  298. X    minexp = maxexp = 0.0;
  299. X    x = y = 0;
  300. X    for (i=0;i<expind[frame];i++) {
  301. X        if (exponents[frame][i] < minexp)
  302. X            minexp = exponents[frame][i];
  303. X        if (exponents[frame][i] > maxexp)
  304. X            maxexp = exponents[frame][i];
  305. X    }
  306. }
  307. X
  308. void
  309. Clear() 
  310. {
  311. X         XClearWindow(dpy, canvas);
  312. X    XCopyArea(dpy, canvas, pixmap, Data_GC[0], 
  313. X                0, 0, width, height, 0, 0);
  314. X    InitBuffer();
  315. }
  316. X
  317. void
  318. show_defaults() 
  319. {
  320. X
  321. X    printf("Width=%d  Height=%d  numcolors=%d  settle=%d  dwell=%d\n",
  322. X        width,height,numcolors,settle,dwell);
  323. X    printf("min_a=%f  a_range=%f  max_a=%f\n", min_a,a_range,max_a);
  324. X    printf("min_b=%f  b_range=%f  max_b=%f\n", min_b,b_range,max_b);
  325. X    printf("minlyap=%f  minexp=%f  maxexp=%f\n", minlyap,minexp,maxexp);
  326. X    exit(0);
  327. }
  328. X
  329. void
  330. CreateXorGC()
  331. {
  332. X    XGCValues values;
  333. X
  334. X    values.foreground = foreground;
  335. X    values.line_style = LineSolid;
  336. X    values.function = GXxor;
  337. X    RubberGC = XCreateGC(dpy, DefaultRootWindow(dpy),
  338. X          GCForeground | GCBackground | GCFunction | GCLineStyle, &values);
  339. }
  340. X
  341. void 
  342. StartRubberBand(w, data, event)
  343. Window w;
  344. image_data_t *data;
  345. XXEvent *event;
  346. {
  347. X    XPoint corners[5];
  348. X    extern void SetupCorners();
  349. X
  350. X    nostart = 0;
  351. X    data->rubber_band.last_x = data->rubber_band.start_x = event->xbutton.x;
  352. X    data->rubber_band.last_y = data->rubber_band.start_y = event->xbutton.y;
  353. X    SetupCorners(corners, data);
  354. X    XDrawLines(dpy, canvas, RubberGC,
  355. X        corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin);
  356. }
  357. X
  358. void
  359. SetupCorners(corners, data)
  360. XXPoint *corners;
  361. image_data_t *data;
  362. {
  363. X    corners[0].x = data->rubber_band.start_x;
  364. X    corners[0].y = data->rubber_band.start_y;
  365. X    corners[1].x = data->rubber_band.start_x;
  366. X    corners[1].y = data->rubber_band.last_y;
  367. X    corners[2].x = data->rubber_band.last_x;
  368. X    corners[2].y = data->rubber_band.last_y;
  369. X    corners[3].x = data->rubber_band.last_x;
  370. X    corners[3].y = data->rubber_band.start_y;
  371. X    corners[4] = corners[0];
  372. }
  373. X
  374. void 
  375. TrackRubberBand(w, data, event)
  376. Window w;
  377. image_data_t *data;
  378. XXEvent *event;
  379. {
  380. X    XPoint corners[5];
  381. X    int xdiff, ydiff, diff;
  382. X    extern void SetupCorners();
  383. X
  384. X    if (nostart)
  385. X        return;
  386. X    SetupCorners(corners, data);
  387. X    XDrawLines(dpy, canvas, RubberGC,
  388. X        corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin);
  389. X    ydiff = event->xbutton.y - data->rubber_band.start_y;
  390. X    xdiff = event->xbutton.x - data->rubber_band.start_x;
  391. X    data->rubber_band.last_x = data->rubber_band.start_x + xdiff;
  392. X    data->rubber_band.last_y = data->rubber_band.start_y + ydiff;
  393. X    if (data->rubber_band.last_y < data->rubber_band.start_y ||
  394. X        data->rubber_band.last_x < data->rubber_band.start_x)
  395. X    {
  396. X        data->rubber_band.last_y = data->rubber_band.start_y;
  397. X        data->rubber_band.last_x = data->rubber_band.start_x;
  398. X    }
  399. X    SetupCorners(corners, data);
  400. X    XDrawLines(dpy, canvas, RubberGC,
  401. X        corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin);
  402. }
  403. X
  404. void 
  405. EndRubberBand(w, data, event)
  406. Window w;
  407. image_data_t *data;
  408. XXEvent *event;
  409. {
  410. X    XPoint corners[5];
  411. X    XPoint top, bot;
  412. X    double delta, diff;
  413. X    extern void set_new_params(), SetupCorners();
  414. X
  415. X    nostart = 1;
  416. X    SetupCorners(corners, data);
  417. X    XDrawLines(dpy, canvas, RubberGC,
  418. X        corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin);
  419. X    if (data->rubber_band.start_x >= data->rubber_band.last_x ||
  420. X        data->rubber_band.start_y >= data->rubber_band.last_y)
  421. X        return;
  422. X    top.x = data->rubber_band.start_x;
  423. X    bot.x = data->rubber_band.last_x;
  424. X    top.y = data->rubber_band.start_y;
  425. X    bot.y = data->rubber_band.last_y;
  426. X    diff = data->q_max - data->q_min;
  427. X    delta = (double)top.y / (double)height;
  428. X    data->q_min += diff * delta;
  429. X    delta = (double)(height - bot.y) / (double)height;
  430. X    data->q_max -= diff * delta;
  431. X    diff = data->p_max - data->p_min;
  432. X    delta = (double)top.x / (double)width;
  433. X    data->p_min += diff * delta;
  434. X    delta = (double)(width - bot.x) / (double)width;
  435. X    data->p_max -= diff * delta;
  436. X    fflush(stdout);
  437. X    set_new_params(w, data);
  438. }
  439. X
  440. void
  441. set_new_params(w, data)
  442. Window w;
  443. image_data_t *data;
  444. {
  445. X    extern void Clear();
  446. X
  447. X    frame = (maxframe + 1) % MAXFRAMES;
  448. X    if (frame > maxframe)
  449. X        maxframe = frame;
  450. X    a_range = data->p_max - data->p_min;
  451. X    b_range = data->q_max - data->q_min;
  452. X        a_minimums[frame] = min_a = data->p_min;
  453. X        b_minimums[frame] = min_b = data->q_min;
  454. X        a_inc = a_range / (double)width;
  455. X        b_inc = b_range / (double)height;
  456. X        point.x = -1;
  457. X        point.y = 0;
  458. X    run = 1;
  459. X        a = min_a;
  460. X        b = min_b;
  461. X        a_maximums[frame] = max_a = data->p_max;
  462. X        b_maximums[frame] = max_b = data->q_max;
  463. X    expind[frame] = 0;;
  464. X    Clear();
  465. }
  466. X
  467. void
  468. go_down() 
  469. {
  470. X    static int i;
  471. X    
  472. X    frame++;
  473. X    if (frame > maxframe)
  474. X        frame = 0;
  475. X    jumpwin();
  476. }
  477. X
  478. void
  479. go_back() 
  480. {
  481. X    static int i;
  482. X    
  483. X    frame--;
  484. X    if (frame < 0)
  485. X        frame = maxframe;
  486. X    jumpwin();
  487. }
  488. X
  489. jumpwin()
  490. {
  491. X    rubber_data.p_min = min_a = a_minimums[frame];
  492. X    rubber_data.q_min = min_b = b_minimums[frame];
  493. X    rubber_data.p_max = max_a = a_maximums[frame];
  494. X    rubber_data.q_max = max_b = b_maximums[frame];
  495. X    a_range = max_a - min_a;
  496. X    b_range = max_b - min_b;
  497. X        a_inc = a_range / (double)width;
  498. X        b_inc = b_range / (double)height;
  499. X        point.x = -1;
  500. X        point.y = 0;
  501. X        a = min_a;
  502. X        b = min_b;
  503. X    Clear();
  504. X    if (resized[frame])
  505. X        Redraw();
  506. X    else
  507. X        redraw(exponents[frame], expind[frame], 0);
  508. }
  509. X
  510. void
  511. go_init() 
  512. {
  513. X    static int i;
  514. X    
  515. X    frame = 0;
  516. X    jumpwin();
  517. }
  518. X
  519. Destroy_frame()
  520. {
  521. X    static int i;
  522. X
  523. X    for (i=frame; i<maxframe; i++) {
  524. X        exponents[frame] = exponents[frame+1];
  525. X        expind[frame] = expind[frame+1];
  526. X        a_minimums[frame] = a_minimums[frame+1];
  527. X        b_minimums[frame] = b_minimums[frame+1];
  528. X        a_maximums[frame] = a_maximums[frame+1];
  529. X        b_maximums[frame] = b_maximums[frame+1];
  530. X    }
  531. X    maxframe--;
  532. X    go_back();
  533. }
  534. X
  535. void
  536. InitBuffer()
  537. {
  538. X    int i;
  539. X
  540. X    for (i = 0 ; i < maxcolor; ++i)
  541. X        Points.npoints[i] = 0;
  542. }
  543. X
  544. void
  545. BufferPoint(display, window, color, x, y)
  546. Display *display;
  547. Window window;
  548. int color;
  549. int x, y;
  550. {
  551. X    if (Points.npoints[color] == MAXPOINTS)
  552. X    {
  553. X        XDrawPoints(display, window, Data_GC[color],
  554. X            Points.data[color], Points.npoints[color], CoordModeOrigin);
  555. X        XDrawPoints(display, pixmap, Data_GC[color],
  556. X            Points.data[color], Points.npoints[color], CoordModeOrigin);
  557. X        Points.npoints[color] = 0;
  558. X    }
  559. X    Points.data[color][Points.npoints[color]].x = x;
  560. X    Points.data[color][Points.npoints[color]].y = y;
  561. X    ++Points.npoints[color];
  562. }
  563. X
  564. void
  565. FlushBuffer()
  566. {
  567. X    int color;
  568. X
  569. X    for (color = 0; color < maxcolor; ++color)
  570. X        if (Points.npoints[color])
  571. X        {
  572. X            XDrawPoints(dpy, canvas, Data_GC[color],
  573. X                Points.data[color], Points.npoints[color],
  574. X                CoordModeOrigin);
  575. X            XDrawPoints(dpy, pixmap, Data_GC[color],
  576. X                Points.data[color], Points.npoints[color],
  577. X                CoordModeOrigin);
  578. X            Points.npoints[color] = 0;
  579. X        }
  580. }
  581. X
  582. void
  583. print_help() 
  584. {
  585. X    printf("During run-time, interactive control can be exerted via : \n");
  586. X    printf("Mouse buttons allow rubber-banding of a zoom box\n");
  587. X    printf("< halves the 'dwell', > doubles the 'dwell'\n");
  588. X    printf("[ halves the 'settle', ] doubles the 'settle'\n");
  589. X    printf("D flushes the drawing buffer\n");
  590. X    printf("e or E recalculates color indices\n");
  591. X    printf("f or F saves exponents to a file\n");
  592. X    printf("h or H or ? displays this message\n");
  593. X    printf("i decrements, I increments the stripe interval\n");
  594. X    printf("KJMN increase/decrease minimum negative exponent\n");
  595. X    printf("m increments the map index, changing maps\n");
  596. X    printf("p or P reverses the colormap for negative/positive exponents\n");
  597. X    printf("r redraws without recalculating\n");
  598. X    printf("R redraws, recalculating with new dwell and settle values\n");
  599. X    printf("s or S spins the colorwheel\n");
  600. X    printf("u pops back up to the last zoom\n");
  601. X    printf("U pops back up to the first picture\n");
  602. X    printf("v or V displays the values of various settings\n");
  603. X    printf("w decrements, W increments the color wheel index\n");
  604. X    printf("x or X clears the window\n");
  605. X    printf("q or Q exits\n");
  606. }
  607. X
  608. void
  609. print_values() 
  610. {
  611. X    static int i;
  612. X
  613. X    printf("\nminlyap=%f minexp=%f maxexp=%f\n",minlyap,minexp,maxexp);
  614. X    printf("width=%d height=%d\n",width,height);
  615. X    printf("settle=%d  dwell=%d start_x=%f\n",settle,dwell, start_x);
  616. X    printf("min_a=%f  a_rng=%f  max_a=%f\n",min_a,a_range,max_a);
  617. X    printf("min_b=%f  b_rng=%f  max_b=%f\n",min_b,b_range,max_b);
  618. X    if (Rflag)
  619. X     printf("pseudo-random forcing\n");
  620. X    else if (force) {
  621. X    printf("periodic forcing=");
  622. X     for (i=0;i<maxindex;i++)
  623. X         printf("%d",forcing[i]);
  624. X     printf("\n");
  625. X    }
  626. X    else
  627. X     printf("periodic forcing=01\n");
  628. X    if (Force) {
  629. X     printf("function forcing=");
  630. X     for (i=0;i<funcmaxindex;i++) {
  631. X         printf("%d",Forcing[i]);
  632. X     }
  633. X     printf("\n");
  634. X    }
  635. X    printf("numcolors=%d\n",numcolors-1);
  636. }
  637. X
  638. freemem()
  639. {
  640. X    static int i;
  641. X
  642. X        for (i=0;i<MAXFRAMES;i++)
  643. X                free(exponents[i]);
  644. }
  645. X
  646. setupmem()
  647. {
  648. X    static int i;
  649. X
  650. X        for (i=0;i<MAXFRAMES;i++) {
  651. X                if((exponents[i]=
  652. X                    (double *)malloc(sizeof(double)*width*height))==NULL){
  653. X                    fprintf(stderr,"Error malloc'ing exponent array.\n");
  654. X                    exit(-1);
  655. X                }
  656. X        }
  657. }
  658. X
  659. setforcing()
  660. {
  661. X    static int i;
  662. X    extern double drand48();
  663. X
  664. X        for (i=0;i<MAXINDEX;i++)
  665. X        forcing[i] = (drand48() > prob) ? 0 : 1;
  666. }
  667. SHAR_EOF
  668. echo 'File lyap.c is complete' &&
  669. chmod 0644 lyap.c ||
  670. echo 'restore of lyap.c failed'
  671. Wc_c="`wc -c < 'lyap.c'`"
  672. test 40245 -eq "$Wc_c" ||
  673.     echo 'lyap.c: original size 40245, current size' "$Wc_c"
  674. rm -f _shar_wnt_.tmp
  675. fi
  676. # ============= lyap.h ==============
  677. if test -f 'lyap.h' -a X"$1" != X"-c"; then
  678.     echo 'x - skipping lyap.h (File already exists)'
  679.     rm -f _shar_wnt_.tmp
  680. else
  681. > _shar_wnt_.tmp
  682. echo 'x - extracting lyap.h (Text)'
  683. sed 's/^X//' << 'SHAR_EOF' > 'lyap.h' &&
  684. /*
  685. X *    @(#) lyap.h
  686. X */
  687. /*
  688. X *    Written by Ron Record (rr@sco.com) 03 Sep 1991.
  689. X */
  690. X
  691. #include "patchlevel.h"
  692. #include <assert.h>
  693. #include <math.h>
  694. #include <memory.h>
  695. #include <stdio.h>
  696. #include <X11/Xlib.h> 
  697. #include <X11/StringDefs.h> 
  698. #include <X11/keysym.h> 
  699. #include <X11/cursorfont.h> 
  700. #include <X11/Xutil.h>
  701. #include <X11/Xatom.h>
  702. X
  703. #define ABS(a)    (((a)<0) ? (0-(a)) : (a) )
  704. #define Min(x,y) ((x < y)?x:y)
  705. #define Max(x,y) ((x > y)?x:y)
  706. X
  707. #ifdef SIXTEEN_COLORS
  708. #define MAXPOINTS  128
  709. #define MAXFRAMES 4
  710. #define MAXCOLOR 16
  711. int maxcolor=16, startcolor=0, color_offset=0, mincolindex=1;
  712. int dwell=50, settle=25;
  713. int width=128, height=128, xposition=128, yposition=128;
  714. #else
  715. #define MAXPOINTS  256
  716. #define MAXFRAMES 8
  717. #define MAXCOLOR 256
  718. int maxcolor=256, startcolor=17, color_offset=96, mincolindex=33;
  719. int dwell=100, settle=50;
  720. int width=256, height=256, xposition=256, yposition=256;
  721. #endif
  722. X
  723. #ifndef TRUE
  724. #define TRUE 1
  725. #define FALSE 0
  726. #endif
  727. X
  728. int bottom, screen;
  729. Display*    dpy;
  730. char*        displayname = 0;
  731. X
  732. extern double log();
  733. extern double fabs();
  734. extern long time();
  735. extern int optind;
  736. extern char *optarg;
  737. X
  738. unsigned long foreground, background;
  739. X
  740. Window canvas;
  741. X
  742. void     resize();
  743. void     redisplay();
  744. void     quit();
  745. void     Spin();
  746. void     start_iterate();
  747. void     stop_iterate();
  748. void     show_defaults();
  749. void     StartRubberBand();
  750. void     TrackRubberBand();
  751. void     EndRubberBand();
  752. void     CreateXorGC();
  753. void     InitBuffer();
  754. void     BufferPoint();
  755. void     FlushBuffer();
  756. X
  757. typedef struct {
  758. X    int x, y;
  759. } xy_t;
  760. X
  761. typedef struct {
  762. X    int start_x, start_y;
  763. X    int last_x, last_y;
  764. X    } rubber_band_data_t;
  765. X
  766. typedef struct {
  767. X    Cursor band_cursor;
  768. X    double p_min, p_max, q_min, q_max;
  769. X    rubber_band_data_t rubber_band;
  770. X    } image_data_t;
  771. X
  772. typedef struct points_t {
  773. X    XPoint data[MAXCOLOR][MAXPOINTS];
  774. X    int npoints[MAXCOLOR];
  775. X    } points_t;
  776. X
  777. points_t Points;
  778. image_data_t rubber_data;
  779. X
  780. #ifndef TRUE
  781. #define TRUE 1
  782. #define FALSE 0
  783. #endif
  784. X
  785. GC Data_GC[MAXCOLOR], RubberGC;
  786. X
  787. #define MAXINDEX 64
  788. #define FUNCMAXINDEX 16
  789. #define MAXWHEELS 7
  790. #define NUMMAPS 5
  791. X
  792. typedef double (*PFD)();
  793. X
  794. double logistic(), circle(), leftlog(), rightlog(), doublelog();
  795. double dlogistic(), dcircle(), dleftlog(), drightlog(), ddoublelog();
  796. PFD map, deriv;
  797. PFD Maps[NUMMAPS] = { logistic, circle, leftlog, rightlog, doublelog };
  798. PFD Derivs[NUMMAPS] = { dlogistic, dcircle, dleftlog, drightlog, ddoublelog };
  799. X
  800. int aflag=0, bflag=0, wflag=0, hflag=0, Rflag=0;
  801. double pmins[NUMMAPS] = { 2.0, 0.0, 0.0, 0.0, 0.0 };
  802. double pmaxs[NUMMAPS] = { 4.0, 1.0, 6.75, 6.75, 16.0 };
  803. double amins[NUMMAPS] = { 2.0, 0.0, 0.0, 0.0, 0.0 };
  804. double aranges[NUMMAPS] = { 2.0, 1.0, 6.75, 6.75, 16.0 };
  805. double bmins[NUMMAPS] = { 2.0, 0.0, 0.0, 0.0, 0.0 };
  806. double branges[NUMMAPS] = { 2.0, 1.0, 6.75, 6.75, 16.0 };
  807. X
  808. int   forcing[MAXINDEX] = { 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
  809. X            0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
  810. X            0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1 };
  811. int   Forcing[FUNCMAXINDEX] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
  812. X
  813. int   maxindex = MAXINDEX;
  814. int   funcmaxindex = FUNCMAXINDEX;
  815. double    min_a=2.0, min_b=2.0, a_range=2.0, b_range=2.0, minlyap=1.0;
  816. double  max_a=4.0, max_b=4.0;
  817. double  start_x=0.65, lyapunov, a_inc, b_inc, a, b;
  818. int    numcolors=16, numfreecols, displayplanes, lowrange;
  819. xy_t    point, velocity;
  820. Pixmap  pixmap;
  821. Colormap cmap;
  822. XXColor    Colors[MAXCOLOR];
  823. double  *exponents[MAXFRAMES];
  824. double  a_minimums[MAXFRAMES], b_minimums[MAXFRAMES];
  825. double  a_maximums[MAXFRAMES], b_maximums[MAXFRAMES];
  826. double  minexp, maxexp, prob=0.5;
  827. int     expind[MAXFRAMES]={0}, resized[MAXFRAMES]={0};
  828. int    numwheels=MAXWHEELS, force=0, Force=0, negative=1;
  829. int     rgb_max=65000, nostart=1, stripe_interval=7;
  830. int    save=1, show=0, useprod=1, spinlength=256, savefile=0;
  831. int    maxframe=0, frame=0, dorecalc=0, mapindex=0, run=1;
  832. char    *outname="lyap.out";
  833. SHAR_EOF
  834. chmod 0644 lyap.h ||
  835. echo 'restore of lyap.h failed'
  836. Wc_c="`wc -c < 'lyap.h'`"
  837. test 3798 -eq "$Wc_c" ||
  838.     echo 'lyap.h: original size 3798, current size' "$Wc_c"
  839. rm -f _shar_wnt_.tmp
  840. fi
  841. # ============= lyap.man ==============
  842. if test -f 'lyap.man' -a X"$1" != X"-c"; then
  843.     echo 'x - skipping lyap.man (File already exists)'
  844.     rm -f _shar_wnt_.tmp
  845. else
  846. > _shar_wnt_.tmp
  847. echo 'x - extracting lyap.man (Text)'
  848. sed 's/^X//' << 'SHAR_EOF' > 'lyap.man' &&
  849. .TH LYAP 6X
  850. .SH NAME
  851. lyap \- display an array of Lyapunov exponents graphically
  852. .SH SYNOPSIS
  853. .in +8n
  854. .ti -8n
  855. \fIlyap\fR
  856. [-BLps][-W width][-H height][-o filename][-a 
  857. \fIn\fR ]
  858. [-b 
  859. \fIn\fR ]
  860. [-w 
  861. \fIn\fR ]
  862. [-h 
  863. \fIn\fR ]
  864. [-i xstart]
  865. [-M 
  866. \fIn\fR ]
  867. [-R 
  868. \fIp\fR ]
  869. [-S 
  870. \fIn\fR ]
  871. [-D 
  872. \fIn\fR ]
  873. [-F string][-f string][-r 
  874. \fIn\fR ]
  875. [-O 
  876. \fIn\fR ]
  877. [-C 
  878. \fIn\fR ]
  879. [-c 
  880. \fIn\fR ]
  881. [-m 
  882. \fIn\fR ]
  883. [-x xpos]
  884. [-y ypos]
  885. .in -8n
  886. .SH DESCRIPTION
  887. \fIlyap\fR
  888. generates and graphically displays an array of Lyapunov exponents for a 
  889. variety of iterated periodically forced non-linear maps of the unit interval.
  890. .SH OPTIONS
  891. .TP 8
  892. -C \fIn\fP
  893. Specifies the minimum color index to be used for negative exponents
  894. .TP
  895. -D \fIn\fP
  896. Specifies the "dwell" or number of iterations over which to average in order
  897. to calculate the Lyapunov exponent. Default is 400.
  898. .TP
  899. -B 
  900. Causes the stop, go, spin and quit buttons to be displayed.
  901. .TP
  902. -H \fIn\fP
  903. Specifies the height of the window. Default is 256.
  904. .TP
  905. -L 
  906. Indicates use log(x) + log(y) rather than log(xy).
  907. .TP
  908. -M \fIr\fP
  909. Specifies the real value to compare exponent values to for indexing into
  910. a color wheel. The default value is 1.0.
  911. .TP
  912. -O \fIn\fP
  913. Specifies the minimum color index to be used for positive exponents
  914. .TP
  915. -R \fIp\fP
  916. Specifies pseudo-random forcing with probability \fIp\fP of using parameter
  917. value 'a'.
  918. .TP
  919. -S \fIn\fP
  920. Specifies the "settle" or number of iterations prior to the beginning of
  921. the calculation of the Lyapunov exponent. Default is 200.
  922. .TP
  923. -W \fIn\fP
  924. Specifies the width of the window. Default is 256.
  925. .TP
  926. -a \fIr\fP
  927. Specifies the real value to use as the minimum parameter value of the 
  928. horizontal axis. Default is 3.0 for the logistic map.
  929. .TP
  930. -b \fIn\fP
  931. Specifies the real value to use as the minimum parameter value of the 
  932. vertical axis. Default is 3.0 for the logistic map.
  933. .TP
  934. -c \fIn\fP
  935. Selects one of six different color wheels to use. The default color
  936. wheel is a rainbow palette.
  937. .TP
  938. -F \fI10101010\fP
  939. Specifies the "Function" forcing function to use. The example above would 
  940. alternate between iterating the circle and logistic maps. An argument of
  941. "-F 2323" would alternate between left and right logistic maps. The default
  942. is to only use the single specified map (see the description of -m).
  943. .TP
  944. -f \fIabbabaab\fP
  945. Specifies the forcing function to use. The default is to alternate between
  946. the "a" parameter and the "b" parameter.
  947. .TP
  948. -h \fIr\fP
  949. Specifies the real value to be used as the range over which the vertical
  950. parameter values vary. The default is 1.0.
  951. .TP
  952. -i \fIr\fP
  953. Specifies the real value of the initial condition to use. Default is 0.05.
  954. .TP
  955. -m \fIn\fP
  956. Selects between available non-linear maps of the unit interval. A value of
  957. 0 specifies the logistic map. A value of 1, the circle map. A value of 2,
  958. the left-logistic. A value of 3, the right-logistic. A value of 4, the
  959. double-logistic. The default is 0, the logistic map.
  960. .TP
  961. -o \fIfilename\fP
  962. Specifies the output filename to be used. If the -o option is given, this
  963. file will automatically be written out at the completion of the drawing.
  964. If it is not specified, a default filename of lyap.out is used and only
  965. written if the 'f' or 'F' keys are pressed during a run. The format of the
  966. output file is PPM for color and PGM for monochrom. The parameters used to
  967. calculate the picture are included as comments at the beginning of the output
  968. file.
  969. .TP
  970. -p
  971. Switches color indices for negative and positive exponents. Generally,
  972. causes negative exponents to be displayed in more detail while darkening
  973. and narrowing the color range for positive exponents. This can be toggled
  974. during runtime by pressing the 'p' key.
  975. .TP
  976. -r \fIn\fP
  977. Specifies the maximum rgb value to be used. Default is 35000.
  978. .TP
  979. -s \fIn\fP
  980. Specifies the length of the color wheel spin.
  981. .TP
  982. -u
  983. Produces a usage message.
  984. .TP
  985. -v 
  986. Prints out the various values to be used and exits.
  987. .TP
  988. -w \fIr\fP
  989. Specifies the real value to be used as the range over which the horizontal
  990. parameter values vary. The default is 1.0.
  991. .TP
  992. -x \fIn\fP
  993. Specifies the x screen coordinate of the window (default is 256).
  994. .TP
  995. -y \fIn\fP
  996. Specifies the y screen coordinate of the window (default is 256).
  997. .sp 2
  998. .SH NOTES
  999. .sp
  1000. During display, pressing any mouse button allows you to select the area to
  1001. be investigated with the mouse. The upper left hand corner of the desired
  1002. area is the location of the cursor when the button is pressed. The lower
  1003. right hand corner is specified by the cursor when the button is released.
  1004. .sp 2
  1005. Use of the keys 
  1006. \fIbBeEfFkKjJmnrRsSwWxXqQ\fP
  1007. indicates:
  1008. .sp
  1009. .ti 10
  1010. (<) Halve dwell value.
  1011. .ti 10
  1012. (>) Double dwell value.
  1013. .ti 10
  1014. ([) Halve settle value.
  1015. .ti 10
  1016. (]) Double settle value.
  1017. .ti 10
  1018. (B or b) Toggle button display on/off
  1019. .ti 10
  1020. (E or e) Recalculate the indices into the color wheel using a different method
  1021. .ti 10
  1022. (F or f) Save current screen to ouput file (not yet implemented)
  1023. .ti 10
  1024. (H or h or ?) Display brief help message
  1025. .ti 10
  1026. (i) Decrement the interval between stripes for the striped color map.
  1027. .ti 10
  1028. (I) Increment the interval between stripes for the striped color map.
  1029. .ti 10
  1030. (K) Decrease value exponents are compared against by 0.05.
  1031. .ti 10
  1032. (J) Increase value exponents are compared against by 0.05.
  1033. .ti 10
  1034. (M) Decrease value exponents are compared against by 0.005.
  1035. .ti 10
  1036. (N) Increase value exponents are compared against by 0.005.
  1037. .ti 10
  1038. (m) Increment the map index, changing the map to be iterated.
  1039. .ti 10
  1040. (P or p) Toggle positive/negative exponent display.
  1041. .ti 10
  1042. (r) Redraw the window using previously calculated exponents.
  1043. .ti 10
  1044. (R) Redraw the window using the newly set dwell and/or settle values.
  1045. .ti 10
  1046. (S) Spin the color wheel
  1047. .ti 10
  1048. (s) Halve the length of the spin and spin the color wheel
  1049. .ti 10
  1050. (u) Go up to the window just prior to the most recent zoom.
  1051. .ti 10
  1052. (U) Go all the way up to the original window.
  1053. .ti 10
  1054. (V or v) Display values of various parameters currently in use
  1055. .ti 10
  1056. (W or w) Use next color map.
  1057. .ti 10
  1058. (X or x) Clear window
  1059. .ti 10
  1060. (Q or q) quit
  1061. .sp 2
  1062. .SH AUTHOR
  1063. .nf
  1064. X        Ronald Joe Record
  1065. X     The Santa Cruz Operation 
  1066. X          P.O. Box 1900
  1067. X       Santa Cruz, CA 95061
  1068. X            rr@sco.com
  1069. .fi
  1070. .sp 2
  1071. .SH ACKNOWLEDGEMENTS
  1072. .PP
  1073. The algorithm was taken from the September 1991 Scientific American article
  1074. by A. K. Dewdney who gives credit to Mario Markus of the Max Planck Institute
  1075. for its creation. Additional information and ideas were gleaned from the
  1076. discussion on alt.fractals involving Stephen Hall, Ed Kubaitis, Dave Platt
  1077. and Baback Moghaddam. Assistance with colormaps and spinning color wheels
  1078. and X was gleaned from Hiram Clawson. Rubber banding code was adapted from
  1079. an existing Mandelbrot program written by Stacey Campbell.
  1080. SHAR_EOF
  1081. chmod 0644 lyap.man ||
  1082. echo 'restore of lyap.man failed'
  1083. Wc_c="`wc -c < 'lyap.man'`"
  1084. test 6696 -eq "$Wc_c" ||
  1085.     echo 'lyap.man: original size 6696, current size' "$Wc_c"
  1086. rm -f _shar_wnt_.tmp
  1087. fi
  1088. # ============= params/asharpe.1 ==============
  1089. if test ! -d 'params'; then
  1090.     echo 'x - creating directory params'
  1091.     mkdir 'params'
  1092. fi
  1093. if test -f 'params/asharpe.1' -a X"$1" != X"-c"; then
  1094.     echo 'x - skipping params/asharpe.1 (File already exists)'
  1095.     rm -f _shar_wnt_.tmp
  1096. else
  1097. > _shar_wnt_.tmp
  1098. echo 'x - extracting params/asharpe.1 (Text)'
  1099. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.1' &&
  1100. /usr/games/X11/lyap -a3.75 -b3.299999 -w0.05 -h0.05 -D200 -S100 -fabaabbaaabbb -H480 -W640
  1101. SHAR_EOF
  1102. chmod 0644 params/asharpe.1 ||
  1103. echo 'restore of params/asharpe.1 failed'
  1104. Wc_c="`wc -c < 'params/asharpe.1'`"
  1105. test 91 -eq "$Wc_c" ||
  1106.     echo 'params/asharpe.1: original size 91, current size' "$Wc_c"
  1107. rm -f _shar_wnt_.tmp
  1108. fi
  1109. # ============= params/asharpe.2 ==============
  1110. if test -f 'params/asharpe.2' -a X"$1" != X"-c"; then
  1111.     echo 'x - skipping params/asharpe.2 (File already exists)'
  1112.     rm -f _shar_wnt_.tmp
  1113. else
  1114. > _shar_wnt_.tmp
  1115. echo 'x - extracting params/asharpe.2 (Text)'
  1116. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.2' &&
  1117. /usr/games/X11/lyap -a3.8 -b3.2 -h.05 -w.05 -fbbbbbaaaaa
  1118. SHAR_EOF
  1119. chmod 0644 params/asharpe.2 ||
  1120. echo 'restore of params/asharpe.2 failed'
  1121. Wc_c="`wc -c < 'params/asharpe.2'`"
  1122. test 57 -eq "$Wc_c" ||
  1123.     echo 'params/asharpe.2: original size 57, current size' "$Wc_c"
  1124. rm -f _shar_wnt_.tmp
  1125. fi
  1126. # ============= params/asharpe.3 ==============
  1127. if test -f 'params/asharpe.3' -a X"$1" != X"-c"; then
  1128.     echo 'x - skipping params/asharpe.3 (File already exists)'
  1129.     rm -f _shar_wnt_.tmp
  1130. else
  1131. > _shar_wnt_.tmp
  1132. echo 'x - extracting params/asharpe.3 (Text)'
  1133. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.3' &&
  1134. /usr/games/X11/lyap -a 3.4 -b 3.04 -w .5 -h .5 -f abbbbbbbbb -W640 -H480 -S500 -D1000
  1135. SHAR_EOF
  1136. chmod 0644 params/asharpe.3 ||
  1137. echo 'restore of params/asharpe.3 failed'
  1138. Wc_c="`wc -c < 'params/asharpe.3'`"
  1139. test 86 -eq "$Wc_c" ||
  1140.     echo 'params/asharpe.3: original size 86, current size' "$Wc_c"
  1141. rm -f _shar_wnt_.tmp
  1142. fi
  1143. # ============= params/asharpe.4 ==============
  1144. if test -f 'params/asharpe.4' -a X"$1" != X"-c"; then
  1145.     echo 'x - skipping params/asharpe.4 (File already exists)'
  1146.     rm -f _shar_wnt_.tmp
  1147. else
  1148. > _shar_wnt_.tmp
  1149. echo 'x - extracting params/asharpe.4 (Text)'
  1150. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.4' &&
  1151. /usr/games/X11/lyap -a3.5 -b3.0 -w0.2 -h0.2 -D600 -S300 -faaabbbab -H480 -W640
  1152. SHAR_EOF
  1153. chmod 0644 params/asharpe.4 ||
  1154. echo 'restore of params/asharpe.4 failed'
  1155. Wc_c="`wc -c < 'params/asharpe.4'`"
  1156. test 79 -eq "$Wc_c" ||
  1157.     echo 'params/asharpe.4: original size 79, current size' "$Wc_c"
  1158. rm -f _shar_wnt_.tmp
  1159. fi
  1160. # ============= params/asharpe.5 ==============
  1161. if test -f 'params/asharpe.5' -a X"$1" != X"-c"; then
  1162.     echo 'x - skipping params/asharpe.5 (File already exists)'
  1163.     rm -f _shar_wnt_.tmp
  1164. else
  1165. > _shar_wnt_.tmp
  1166. echo 'x - extracting params/asharpe.5 (Text)'
  1167. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.5' &&
  1168. /usr/games/X11/lyap -a3.55667 -b3.2 -h.05 -w.05 -fbbbbbaaaaa -H480 -W640
  1169. SHAR_EOF
  1170. chmod 0644 params/asharpe.5 ||
  1171. echo 'restore of params/asharpe.5 failed'
  1172. Wc_c="`wc -c < 'params/asharpe.5'`"
  1173. test 73 -eq "$Wc_c" ||
  1174.     echo 'params/asharpe.5: original size 73, current size' "$Wc_c"
  1175. rm -f _shar_wnt_.tmp
  1176. fi
  1177. # ============= params/asharpe.6 ==============
  1178. if test -f 'params/asharpe.6' -a X"$1" != X"-c"; then
  1179.     echo 'x - skipping params/asharpe.6 (File already exists)'
  1180.     rm -f _shar_wnt_.tmp
  1181. else
  1182. > _shar_wnt_.tmp
  1183. echo 'x - extracting params/asharpe.6 (Text)'
  1184. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.6' &&
  1185. /usr/games/X11/lyap -a3.79 -b3.22 -h.02999 -w.02999 -fbbbbbaaaaa -H480 -W640
  1186. SHAR_EOF
  1187. chmod 0644 params/asharpe.6 ||
  1188. echo 'restore of params/asharpe.6 failed'
  1189. Wc_c="`wc -c < 'params/asharpe.6'`"
  1190. test 77 -eq "$Wc_c" ||
  1191.     echo 'params/asharpe.6: original size 77, current size' "$Wc_c"
  1192. rm -f _shar_wnt_.tmp
  1193. fi
  1194. # ============= params/asharpe.7 ==============
  1195. if test -f 'params/asharpe.7' -a X"$1" != X"-c"; then
  1196.     echo 'x - skipping params/asharpe.7 (File already exists)'
  1197.     rm -f _shar_wnt_.tmp
  1198. else
  1199. > _shar_wnt_.tmp
  1200. echo 'x - extracting params/asharpe.7 (Text)'
  1201. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.7' &&
  1202. /usr/games/X11/lyap -a3.7999 -b3.299999 -w0.2 -h0.2 -D300 -S150 -fabaabbaaabbb -H480 -W640
  1203. SHAR_EOF
  1204. chmod 0644 params/asharpe.7 ||
  1205. echo 'restore of params/asharpe.7 failed'
  1206. Wc_c="`wc -c < 'params/asharpe.7'`"
  1207. test 91 -eq "$Wc_c" ||
  1208.     echo 'params/asharpe.7: original size 91, current size' "$Wc_c"
  1209. rm -f _shar_wnt_.tmp
  1210. fi
  1211. # ============= params/asharpe.8 ==============
  1212. if test -f 'params/asharpe.8' -a X"$1" != X"-c"; then
  1213.     echo 'x - skipping params/asharpe.8 (File already exists)'
  1214.     rm -f _shar_wnt_.tmp
  1215. else
  1216. > _shar_wnt_.tmp
  1217. echo 'x - extracting params/asharpe.8 (Text)'
  1218. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.8' &&
  1219. /usr/games/X11/lyap -a3.89 -b3.22 -h.028 -w.02999 -fbbbbbaaaaa -S600 -D1000 -H480 -W640
  1220. SHAR_EOF
  1221. chmod 0644 params/asharpe.8 ||
  1222. echo 'restore of params/asharpe.8 failed'
  1223. Wc_c="`wc -c < 'params/asharpe.8'`"
  1224. test 88 -eq "$Wc_c" ||
  1225.     echo 'params/asharpe.8: original size 88, current size' "$Wc_c"
  1226. rm -f _shar_wnt_.tmp
  1227. fi
  1228. # ============= params/asharpe.9 ==============
  1229. if test -f 'params/asharpe.9' -a X"$1" != X"-c"; then
  1230.     echo 'x - skipping params/asharpe.9 (File already exists)'
  1231.     rm -f _shar_wnt_.tmp
  1232. else
  1233. > _shar_wnt_.tmp
  1234. echo 'x - extracting params/asharpe.9 (Text)'
  1235. sed 's/^X//' << 'SHAR_EOF' > 'params/asharpe.9' &&
  1236. /usr/games/X11/lyap -a3.2 -b3.7 -w0.05 -h.005 -f abbbbaa -H700 -W800 -o asharpe9.out &
  1237. SHAR_EOF
  1238. chmod 0644 params/asharpe.9 ||
  1239. echo 'restore of params/asharpe.9 failed'
  1240. Wc_c="`wc -c < 'params/asharpe.9'`"
  1241. test 87 -eq "$Wc_c" ||
  1242.     echo 'params/asharpe.9: original size 87, current size' "$Wc_c"
  1243. rm -f _shar_wnt_.tmp
  1244. fi
  1245. # ============= params/circle-12 ==============
  1246. if test -f 'params/circle-12' -a X"$1" != X"-c"; then
  1247.     echo 'x - skipping params/circle-12 (File already exists)'
  1248.     rm -f _shar_wnt_.tmp
  1249. else
  1250. > _shar_wnt_.tmp
  1251. echo 'x - extracting params/circle-12 (Text)'
  1252. sed 's/^X//' << 'SHAR_EOF' > 'params/circle-12' &&
  1253. X
  1254. /usr/games/X11/lyap -f aaaaaabbbbbb -m 1 -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1255. SHAR_EOF
  1256. chmod 0644 params/circle-12 ||
  1257. echo 'restore of params/circle-12 failed'
  1258. Wc_c="`wc -c < 'params/circle-12'`"
  1259. test 81 -eq "$Wc_c" ||
  1260.     echo 'params/circle-12: original size 81, current size' "$Wc_c"
  1261. rm -f _shar_wnt_.tmp
  1262. fi
  1263. # ============= params/circle-12test ==============
  1264. if test -f 'params/circle-12test' -a X"$1" != X"-c"; then
  1265.     echo 'x - skipping params/circle-12test (File already exists)'
  1266.     rm -f _shar_wnt_.tmp
  1267. else
  1268. > _shar_wnt_.tmp
  1269. echo 'x - extracting params/circle-12test (Text)'
  1270. sed 's/^X//' << 'SHAR_EOF' > 'params/circle-12test' &&
  1271. X
  1272. ./lyap -f aaaaaabbbbbb -m 1 -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1273. SHAR_EOF
  1274. chmod 0644 params/circle-12test ||
  1275. echo 'restore of params/circle-12test failed'
  1276. Wc_c="`wc -c < 'params/circle-12test'`"
  1277. test 68 -eq "$Wc_c" ||
  1278.     echo 'params/circle-12test: original size 68, current size' "$Wc_c"
  1279. rm -f _shar_wnt_.tmp
  1280. fi
  1281. # ============= params/circle-2 ==============
  1282. if test -f 'params/circle-2' -a X"$1" != X"-c"; then
  1283.     echo 'x - skipping params/circle-2 (File already exists)'
  1284.     rm -f _shar_wnt_.tmp
  1285. else
  1286. > _shar_wnt_.tmp
  1287. echo 'x - extracting params/circle-2 (Text)'
  1288. sed 's/^X//' << 'SHAR_EOF' > 'params/circle-2' &&
  1289. X
  1290. /usr/games/X11/lyap -m 1 -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1291. SHAR_EOF
  1292. chmod 0644 params/circle-2 ||
  1293. echo 'restore of params/circle-2 failed'
  1294. Wc_c="`wc -c < 'params/circle-2'`"
  1295. test 65 -eq "$Wc_c" ||
  1296.     echo 'params/circle-2: original size 65, current size' "$Wc_c"
  1297. rm -f _shar_wnt_.tmp
  1298. fi
  1299. # ============= params/circle-4 ==============
  1300. if test -f 'params/circle-4' -a X"$1" != X"-c"; then
  1301.     echo 'x - skipping params/circle-4 (File already exists)'
  1302.     rm -f _shar_wnt_.tmp
  1303. else
  1304. > _shar_wnt_.tmp
  1305. echo 'x - extracting params/circle-4 (Text)'
  1306. sed 's/^X//' << 'SHAR_EOF' > 'params/circle-4' &&
  1307. X
  1308. /usr/games/X11/lyap -f abbb -m 1 -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1309. SHAR_EOF
  1310. chmod 0644 params/circle-4 ||
  1311. echo 'restore of params/circle-4 failed'
  1312. Wc_c="`wc -c < 'params/circle-4'`"
  1313. test 73 -eq "$Wc_c" ||
  1314.     echo 'params/circle-4: original size 73, current size' "$Wc_c"
  1315. rm -f _shar_wnt_.tmp
  1316. fi
  1317. # ============= params/circle-8 ==============
  1318. if test -f 'params/circle-8' -a X"$1" != X"-c"; then
  1319.     echo 'x - skipping params/circle-8 (File already exists)'
  1320.     rm -f _shar_wnt_.tmp
  1321. else
  1322. > _shar_wnt_.tmp
  1323. echo 'x - extracting params/circle-8 (Text)'
  1324. sed 's/^X//' << 'SHAR_EOF' > 'params/circle-8' &&
  1325. X
  1326. /usr/games/X11/lyap -f abbabaab -m 1 -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1327. SHAR_EOF
  1328. chmod 0644 params/circle-8 ||
  1329. echo 'restore of params/circle-8 failed'
  1330. Wc_c="`wc -c < 'params/circle-8'`"
  1331. test 77 -eq "$Wc_c" ||
  1332.     echo 'params/circle-8: original size 77, current size' "$Wc_c"
  1333. rm -f _shar_wnt_.tmp
  1334. fi
  1335. # ============= params/manray ==============
  1336. if test -f 'params/manray' -a X"$1" != X"-c"; then
  1337.     echo 'x - skipping params/manray (File already exists)'
  1338.     rm -f _shar_wnt_.tmp
  1339. else
  1340. > _shar_wnt_.tmp
  1341. echo 'x - extracting params/manray (Text)'
  1342. sed 's/^X//' << 'SHAR_EOF' > 'params/manray' &&
  1343. /usr/games/X11/lyap -f abbabaab -D 800 -S 200 -W 400 -H 350 -M -0.85 -x 0.05 -a 3.91 -w 0.0899999999 -b 3.28 -h 0.35 &
  1344. SHAR_EOF
  1345. chmod 0644 params/manray ||
  1346. echo 'restore of params/manray failed'
  1347. Wc_c="`wc -c < 'params/manray'`"
  1348. test 119 -eq "$Wc_c" ||
  1349.     echo 'params/manray: original size 119, current size' "$Wc_c"
  1350. rm -f _shar_wnt_.tmp
  1351. fi
  1352. # ============= params/period-12 ==============
  1353. if test -f 'params/period-12' -a X"$1" != X"-c"; then
  1354.     echo 'x - skipping params/period-12 (File already exists)'
  1355.     rm -f _shar_wnt_.tmp
  1356. else
  1357. > _shar_wnt_.tmp
  1358. echo 'x - extracting params/period-12 (Text)'
  1359. sed 's/^X//' << 'SHAR_EOF' > 'params/period-12' &&
  1360. X
  1361. /usr/games/X11/lyap -f aaaaaabbbbbb -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1362. SHAR_EOF
  1363. chmod 0644 params/period-12 ||
  1364. echo 'restore of params/period-12 failed'
  1365. Wc_c="`wc -c < 'params/period-12'`"
  1366. test 76 -eq "$Wc_c" ||
  1367.     echo 'params/period-12: original size 76, current size' "$Wc_c"
  1368. rm -f _shar_wnt_.tmp
  1369. fi
  1370. # ============= params/period-2 ==============
  1371. if test -f 'params/period-2' -a X"$1" != X"-c"; then
  1372.     echo 'x - skipping params/period-2 (File already exists)'
  1373.     rm -f _shar_wnt_.tmp
  1374. else
  1375. > _shar_wnt_.tmp
  1376. echo 'x - extracting params/period-2 (Text)'
  1377. sed 's/^X//' << 'SHAR_EOF' > 'params/period-2' &&
  1378. X
  1379. /usr/games/X11/lyap -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1380. SHAR_EOF
  1381. chmod 0644 params/period-2 ||
  1382. echo 'restore of params/period-2 failed'
  1383. Wc_c="`wc -c < 'params/period-2'`"
  1384. test 60 -eq "$Wc_c" ||
  1385.     echo 'params/period-2: original size 60, current size' "$Wc_c"
  1386. rm -f _shar_wnt_.tmp
  1387. fi
  1388. # ============= params/period-4 ==============
  1389. if test -f 'params/period-4' -a X"$1" != X"-c"; then
  1390.     echo 'x - skipping params/period-4 (File already exists)'
  1391.     rm -f _shar_wnt_.tmp
  1392. else
  1393. > _shar_wnt_.tmp
  1394. echo 'x - extracting params/period-4 (Text)'
  1395. sed 's/^X//' << 'SHAR_EOF' > 'params/period-4' &&
  1396. X
  1397. /usr/games/X11/lyap -f abbb -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1398. SHAR_EOF
  1399. chmod 0644 params/period-4 ||
  1400. echo 'restore of params/period-4 failed'
  1401. Wc_c="`wc -c < 'params/period-4'`"
  1402. test 68 -eq "$Wc_c" ||
  1403.     echo 'params/period-4: original size 68, current size' "$Wc_c"
  1404. rm -f _shar_wnt_.tmp
  1405. fi
  1406. # ============= params/period-8 ==============
  1407. if test -f 'params/period-8' -a X"$1" != X"-c"; then
  1408.     echo 'x - skipping params/period-8 (File already exists)'
  1409.     rm -f _shar_wnt_.tmp
  1410. else
  1411. > _shar_wnt_.tmp
  1412. echo 'x - extracting params/period-8 (Text)'
  1413. sed 's/^X//' << 'SHAR_EOF' > 'params/period-8' &&
  1414. X
  1415. /usr/games/X11/lyap -f abbabaab -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1416. SHAR_EOF
  1417. chmod 0644 params/period-8 ||
  1418. echo 'restore of params/period-8 failed'
  1419. Wc_c="`wc -c < 'params/period-8'`"
  1420. test 72 -eq "$Wc_c" ||
  1421.     echo 'params/period-8: original size 72, current size' "$Wc_c"
  1422. rm -f _shar_wnt_.tmp
  1423. fi
  1424. # ============= params/skewed-12 ==============
  1425. if test -f 'params/skewed-12' -a X"$1" != X"-c"; then
  1426.     echo 'x - skipping params/skewed-12 (File already exists)'
  1427.     rm -f _shar_wnt_.tmp
  1428. else
  1429. > _shar_wnt_.tmp
  1430. echo 'x - extracting params/skewed-12 (Text)'
  1431. sed 's/^X//' << 'SHAR_EOF' > 'params/skewed-12' &&
  1432. X
  1433. /usr/games/X11/lyap -m 2 -f aaaaaabbbbbb -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1434. SHAR_EOF
  1435. chmod 0644 params/skewed-12 ||
  1436. echo 'restore of params/skewed-12 failed'
  1437. Wc_c="`wc -c < 'params/skewed-12'`"
  1438. test 81 -eq "$Wc_c" ||
  1439.     echo 'params/skewed-12: original size 81, current size' "$Wc_c"
  1440. rm -f _shar_wnt_.tmp
  1441. fi
  1442. # ============= params/skewed-2 ==============
  1443. if test -f 'params/skewed-2' -a X"$1" != X"-c"; then
  1444.     echo 'x - skipping params/skewed-2 (File already exists)'
  1445.     rm -f _shar_wnt_.tmp
  1446. else
  1447. > _shar_wnt_.tmp
  1448. echo 'x - extracting params/skewed-2 (Text)'
  1449. sed 's/^X//' << 'SHAR_EOF' > 'params/skewed-2' &&
  1450. X
  1451. /usr/games/X11/lyap -m 2 -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1452. SHAR_EOF
  1453. chmod 0644 params/skewed-2 ||
  1454. echo 'restore of params/skewed-2 failed'
  1455. Wc_c="`wc -c < 'params/skewed-2'`"
  1456. test 65 -eq "$Wc_c" ||
  1457.     echo 'params/skewed-2: original size 65, current size' "$Wc_c"
  1458. rm -f _shar_wnt_.tmp
  1459. fi
  1460. # ============= params/skewed-4 ==============
  1461. if test -f 'params/skewed-4' -a X"$1" != X"-c"; then
  1462.     echo 'x - skipping params/skewed-4 (File already exists)'
  1463.     rm -f _shar_wnt_.tmp
  1464. else
  1465. > _shar_wnt_.tmp
  1466. echo 'x - extracting params/skewed-4 (Text)'
  1467. sed 's/^X//' << 'SHAR_EOF' > 'params/skewed-4' &&
  1468. X
  1469. /usr/games/X11/lyap -m 2 -f abbb -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1470. SHAR_EOF
  1471. chmod 0644 params/skewed-4 ||
  1472. echo 'restore of params/skewed-4 failed'
  1473. Wc_c="`wc -c < 'params/skewed-4'`"
  1474. test 73 -eq "$Wc_c" ||
  1475.     echo 'params/skewed-4: original size 73, current size' "$Wc_c"
  1476. rm -f _shar_wnt_.tmp
  1477. fi
  1478. # ============= params/skewed-8 ==============
  1479. if test -f 'params/skewed-8' -a X"$1" != X"-c"; then
  1480.     echo 'x - skipping params/skewed-8 (File already exists)'
  1481.     rm -f _shar_wnt_.tmp
  1482. else
  1483. > _shar_wnt_.tmp
  1484. echo 'x - extracting params/skewed-8 (Text)'
  1485. sed 's/^X//' << 'SHAR_EOF' > 'params/skewed-8' &&
  1486. X
  1487. /usr/games/X11/lyap -m 2 -f abbabaab  -D 400 -S 200 -W 256 -H 256 -M -0.85 &
  1488. SHAR_EOF
  1489. chmod 0644 params/skewed-8 ||
  1490. echo 'restore of params/skewed-8 failed'
  1491. Wc_c="`wc -c < 'params/skewed-8'`"
  1492. test 78 -eq "$Wc_c" ||
  1493.     echo 'params/skewed-8: original size 78, current size' "$Wc_c"
  1494. rm -f _shar_wnt_.tmp
  1495. fi
  1496. # ============= patchlevel.h ==============
  1497. if test -f 'patchlevel.h' -a X"$1" != X"-c"; then
  1498.     echo 'x - skipping patchlevel.h (File already exists)'
  1499.     rm -f _shar_wnt_.tmp
  1500. else
  1501. > _shar_wnt_.tmp
  1502. echo 'x - extracting patchlevel.h (Text)'
  1503. sed 's/^X//' << 'SHAR_EOF' > 'patchlevel.h' &&
  1504. X
  1505. #ifndef PATCHLEVEL_H
  1506. #define PATCHLEVEL_H
  1507. X
  1508. #define LYAP_PATCHLEVEL 4
  1509. X
  1510. #define LYAP_VERSION "#(@) lyap 2.3 2/20/92"
  1511. #endif
  1512. SHAR_EOF
  1513. chmod 0644 patchlevel.h ||
  1514. echo 'restore of patchlevel.h failed'
  1515. Wc_c="`wc -c < 'patchlevel.h'`"
  1516. test 123 -eq "$Wc_c" ||
  1517.     echo 'patchlevel.h: original size 123, current size' "$Wc_c"
  1518. rm -f _shar_wnt_.tmp
  1519. fi
  1520. # ============= tags ==============
  1521. if test -f 'tags' -a X"$1" != X"-c"; then
  1522.     echo 'x - skipping tags (File already exists)'
  1523.     rm -f _shar_wnt_.tmp
  1524. else
  1525. > _shar_wnt_.tmp
  1526. echo 'x - extracting tags (Text)'
  1527. sed 's/^X//' << 'SHAR_EOF' > 'tags' &&
  1528. ABS    lyap.h    /^#define ABS(a)    (((a)<0) ? (0-(a)) : (a) )$/
  1529. BufferPoint    lyap.c    /^BufferPoint(display, window, color, x, y)$/
  1530. Clear    lyap.c    /^Clear() $/
  1531. CreateXorGC    lyap.c    /^CreateXorGC()$/
  1532. Cycle_frames    lyap.c    /^Cycle_frames()$/
  1533. Destroy_frame    lyap.c    /^Destroy_frame()$/
  1534. EndRubberBand    lyap.c    /^void $/
  1535. FlushBuffer    lyap.c    /^FlushBuffer()$/
  1536. Getkey    lyap.c    /^Getkey(event)$/
  1537. InitBuffer    lyap.c    /^InitBuffer()$/
  1538. Max    lyap.h    /^#define Max(x,y) ((x > y)?x:y)$/
  1539. Min    lyap.h    /^#define Min(x,y) ((x < y)?x:y)$/
  1540. Mlyap    lyap.c    /^main(ac, av)$/
  1541. Redraw    lyap.c    /^Redraw() $/
  1542. SetupCorners    lyap.c    /^SetupCorners(corners, data)$/
  1543. Spin    lyap.c    /^Spin(w)$/
  1544. StartRubberBand    lyap.c    /^void $/
  1545. TrackRubberBand    lyap.c    /^void $/
  1546. check_params    lyap.c    /^check_params(mapnum, parnum)$/
  1547. circle    lyap.c    /^circle(x, r)            \/* sin() hump or sorta like the cir/
  1548. complyap    lyap.c    /^complyap()$/
  1549. dcircle    lyap.c    /^dcircle(x, r)            \/* derivative of the "sin() hump" /
  1550. ddoublelog    lyap.c    /^ddoublelog(x, r)        \/* derivative of the double logi/
  1551. dleftlog    lyap.c    /^dleftlog(x, r)            \/* derivative of the left skewed /
  1552. dlogistic    lyap.c    /^dlogistic(x, r)            \/* the derivative of logistic ma/
  1553. doublelog    lyap.c    /^doublelog(x, r)            \/* double logistic *\/$/
  1554. drightlog    lyap.c    /^drightlog(x, r)            \/* derivative of the right skewe/
  1555. freemem    lyap.c    /^freemem()$/
  1556. go_back    lyap.c    /^go_back() $/
  1557. go_down    lyap.c    /^go_down() $/
  1558. go_init    lyap.c    /^go_init() $/
  1559. hls2rgb    hls2rgb.c    /^void hls2rgb( hue_light_sat, rgb )$/
  1560. hue_value    hls2rgb.c    /^static double hue_value( n1, n2, hue )$/
  1561. init_canvas    lyap.c    /^init_canvas()$/
  1562. init_color    lyap.c    /^init_color()$/
  1563. init_data    lyap.c    /^init_data()$/
  1564. jumpwin    lyap.c    /^jumpwin()$/
  1565. leftlog    lyap.c    /^leftlog(x, r)            \/* left skewed logistic *\/$/
  1566. logistic    lyap.c    /^logistic(x, r)            \/* the familiar logistic map *\/$/
  1567. main_event    lyap.c    /^main_event()$/
  1568. parseargs    lyap.c    /^parseargs(ac, av)$/
  1569. print_help    lyap.c    /^print_help() $/
  1570. print_values    lyap.c    /^print_values() $/
  1571. recalc    lyap.c    /^recalc() $/
  1572. redisplay    lyap.c    /^void $/
  1573. redraw    lyap.c    /^redraw(exparray, index, cont)$/
  1574. resize    lyap.c    /^resize()$/
  1575. rightlog    lyap.c    /^rightlog(x, r)            \/* right skewed logistic *\/$/
  1576. save_to_file    lyap.c    /^save_to_file() $/
  1577. sendpoint    lyap.c    /^sendpoint(expo)$/
  1578. set_new_params    lyap.c    /^set_new_params(w, data)$/
  1579. setforcing    lyap.c    /^setforcing()$/
  1580. setupmem    lyap.c    /^setupmem()$/
  1581. show_defaults    lyap.c    /^show_defaults() $/
  1582. usage    lyap.c    /^usage()$/
  1583. SHAR_EOF
  1584. chmod 0644 tags ||
  1585. echo 'restore of tags failed'
  1586. Wc_c="`wc -c < 'tags'`"
  1587. test 2381 -eq "$Wc_c" ||
  1588.     echo 'tags: original size 2381, current size' "$Wc_c"
  1589. rm -f _shar_wnt_.tmp
  1590. fi
  1591. # ============= testit ==============
  1592. if test -f 'testit' -a X"$1" != X"-c"; then
  1593.     echo 'x - skipping testit (File already exists)'
  1594.     rm -f _shar_wnt_.tmp
  1595. else
  1596. > _shar_wnt_.tmp
  1597. echo 'x - extracting testit (Text)'
  1598. sed 's/^X//' << 'SHAR_EOF' > 'testit' &&
  1599. X
  1600. ./lyap -S 4 -D 8 -W 128 -H 120
  1601. X
  1602. SHAR_EOF
  1603. chmod 0644 testit ||
  1604. echo 'restore of testit failed'
  1605. Wc_c="`wc -c < 'testit'`"
  1606. test 33 -eq "$Wc_c" ||
  1607.     echo 'testit: original size 33, current size' "$Wc_c"
  1608. rm -f _shar_wnt_.tmp
  1609. fi
  1610. rm -f _shar_seq_.tmp
  1611. echo You have unpacked the last part
  1612. exit 0
  1613. -- 
  1614. --
  1615. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  1616. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  1617. Sunnyvale, California 94086            at&t: 408/522-9236
  1618.