home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume24 / gnuplot3 / part11 < prev    next >
Text File  |  1991-10-27  |  49KB  |  1,778 lines

  1. Newsgroups: comp.sources.misc
  2. From: gershon%gr@cs.utah.edu (Elber Gershon)
  3. Subject:  v24i033:  gnuplot3 - interactive function plotting utility, Part11/26
  4. Message-ID: <1991Oct28.002139.12134@sparky.imd.sterling.com>
  5. X-Md4-Signature: 4fef2995497b6a848484ce063ddaf813
  6. Date: Mon, 28 Oct 1991 00:21:39 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: gershon%gr@cs.utah.edu (Elber Gershon)
  10. Posting-number: Volume 24, Issue 33
  11. Archive-name: gnuplot3/part11
  12. Environment: UNIX, MS-DOS, VMS
  13. Supersedes: gnuplot2: Volume 11, Issue 65-79
  14.  
  15. #!/bin/sh
  16. # this is Part.11 (part 11 of a multipart archive)
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file gnuplot/docs/titlepage.tex continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 11; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping gnuplot/docs/titlepage.tex'
  34. else
  35. echo 'x - continuing file gnuplot/docs/titlepage.tex'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'gnuplot/docs/titlepage.tex' &&
  37. X   {\huge\bf GNUPLOT}\\
  38. X   \vspace{3ex}
  39. X   {\Large An Interactive Plotting Program}\\
  40. X   \vspace{2ex}
  41. X   \large
  42. X   Thomas Williams \& Colin Kelley\\
  43. X   \vspace{2ex}
  44. X   Version 3.0 organized by: Gershon Elber \\
  45. X   Version 3.0 major contributors (alphabetic order):\\
  46. X  John Campbell\\
  47. X  Gershon Elber\\
  48. X  David Kotz\\
  49. X  Ed Kubaitis\\
  50. X  Russell Lang\\
  51. X  Tom Tkacik\\
  52. X  Alex Woo\\
  53. X
  54. X   \vspace{3ex}
  55. X   Mailing list for comments: \verb+pixar!info-gnuplot@sun.com+\\
  56. X   Mailing list for bug reports: \verb+pixar!bug-gnuplot@sun.com+
  57. X
  58. X   \vfill
  59. X   {\small This manual is for GNUPLOT version 3.0.}
  60. X
  61. X   \end{center}
  62. \newpage
  63. X
  64. \tableofcontents
  65. \newpage
  66. X
  67. \setcounter{page}{1}
  68. \pagestyle{myheadings}
  69. \markboth{GNUPLOT 3.0}{GNUPLOT 3.0}
  70. SHAR_EOF
  71. echo 'File gnuplot/docs/titlepage.tex is complete' &&
  72. chmod 0644 gnuplot/docs/titlepage.tex ||
  73. echo 'restore of gnuplot/docs/titlepage.tex failed'
  74. Wc_c="`wc -c < 'gnuplot/docs/titlepage.tex'`"
  75. test 1027 -eq "$Wc_c" ||
  76.     echo 'gnuplot/docs/titlepage.tex: original size 1027, current size' "$Wc_c"
  77. rm -f _shar_wnt_.tmp
  78. fi
  79. # ============= gnuplot/docs/toc_entry.sty ==============
  80. if test -f 'gnuplot/docs/toc_entry.sty' -a X"$1" != X"-c"; then
  81.     echo 'x - skipping gnuplot/docs/toc_entry.sty (File already exists)'
  82.     rm -f _shar_wnt_.tmp
  83. else
  84. > _shar_wnt_.tmp
  85. echo 'x - extracting gnuplot/docs/toc_entry.sty (Text)'
  86. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/docs/toc_entry.sty' &&
  87. %
  88. % TOC_ENTRY.STY of 13 Dec 90
  89. % written by Stefan Timphus
  90. %
  91. % Will produce the right space for sectionnumbers in the tableofcontents
  92. % Necessary for entries where the number for each kind of section
  93. % is greater 10 (e.g. "12.14.18 Sectionname")
  94. % When using the original definition the first letter of the sectionname
  95. % overwrites the last number of the sectionnumber
  96. %
  97. % call adjustments with command \adjustSTYLENAME
  98. %
  99. \typeout{`toc_entry.sty' 1.0 of 13 Dec 90}
  100. %
  101. % HERE ARE THE ORIGINAL DEFINITIONS
  102. %
  103. % article.sty
  104. %
  105. %\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
  106. %\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
  107. %\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
  108. %\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
  109. % report.sty and book.sty
  110. %
  111. %\def\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
  112. %\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
  113. %\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
  114. %\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
  115. %\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
  116. %
  117. % MODIFICATIONS
  118. %
  119. \newlength{\twonum}
  120. X        \settowidth{\twonum}{99.99.}
  121. \newlength{\threenum}
  122. X        \settowidth{\threenum}{99.99.99.}
  123. \newlength{\fournum}
  124. X        \settowidth{\fournum}{99.99.99.99.}
  125. \newlength{\fivenum}
  126. X        \settowidth{\fivenum}{99.99.99.99.99.}
  127. \newlength{\sixnum}
  128. X        \settowidth{\sixnum}{99.99.99.99.99.99.}
  129. \newcommand{\adjustarticle}
  130. {\def\l@subsection{\@dottedtocline{2}{1.5em}{\twonum}}
  131. \def\l@subsubsection{\@dottedtocline{3}{4.0em}{\threenum}}
  132. \def\l@paragraph{\@dottedtocline{4}{7.8em}{\fournum}}
  133. \def\l@subparagraph{\@dottedtocline{5}{10.4em}{\fivenum}}}
  134. \newcommand{\adjustreport}
  135. {\def\l@section{\@dottedtocline{1}{1.5em}{\twonum}}
  136. \def\l@subsection{\@dottedtocline{2}{4.0em}{\threenum}}
  137. \def\l@subsubsection{\@dottedtocline{3}{7.8em}{\fournum}}
  138. \def\l@paragraph{\@dottedtocline{4}{10.4em}{\fivenum}}
  139. \def\l@subparagraph{\@dottedtocline{5}{12.6em}{\sixnum}}}
  140. \newcommand{\adjustbook}{\adjustreport}
  141. % end of TOC_ENTRY.STY
  142. SHAR_EOF
  143. chmod 0644 gnuplot/docs/toc_entry.sty ||
  144. echo 'restore of gnuplot/docs/toc_entry.sty failed'
  145. Wc_c="`wc -c < 'gnuplot/docs/toc_entry.sty'`"
  146. test 2009 -eq "$Wc_c" ||
  147.     echo 'gnuplot/docs/toc_entry.sty: original size 2009, current size' "$Wc_c"
  148. rm -f _shar_wnt_.tmp
  149. fi
  150. # ============= gnuplot/docs/Makefile.ami ==============
  151. if test -f 'gnuplot/docs/Makefile.ami' -a X"$1" != X"-c"; then
  152.     echo 'x - skipping gnuplot/docs/Makefile.ami (File already exists)'
  153.     rm -f _shar_wnt_.tmp
  154. else
  155. > _shar_wnt_.tmp
  156. echo 'x - extracting gnuplot/docs/Makefile.ami (Text)'
  157. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/docs/Makefile.ami' &&
  158. #
  159. # Makefile for GNUPLOT documentation (Aztec C v5.xx Version)
  160. #
  161. # Note that the top-level file for documentation is gnuplot.doc.
  162. # See README.
  163. #
  164. # To print manual:
  165. #    make gnuplot.dvi             (for latex)
  166. #    (print or view gnuplot.dvi)
  167. # OR
  168. #    make gnuplot.nroff           (for nroff)
  169. #    (print or view gnuplot.nroff)
  170. #   or
  171. #    make "TROFF=itroff" troff    (for troff; use your troff for itroff here)
  172. #
  173. # $Id: Makefile,v 1.1 90/01/11 15:43:03 dfk Exp Locker: dfk $
  174. X
  175. # usually overridden by ../Makefile
  176. HELPDEST = /usr/local/lib/
  177. X
  178. # substitute your troff command (and any flags) for this one
  179. TROFF=itroff
  180. X  
  181. # substitute cp if you do not have the install program
  182. INSTALL=install
  183. X
  184. # Compiler flags
  185. # -DSYSV if att sys V
  186. # -DMSDOS if MSDOS PS
  187. # -traditional -g -O if gcc (set 'CC = gcc')
  188. # no extra flags for BSD
  189. CFLAGS = 
  190. CC = cc
  191. LN =ln
  192. LFLAGS = -lm -lc
  193. X
  194. # default is what is needed for interactive gnuplot
  195. default: gnuplot.hlp gnuplot.gih
  196. X
  197. ### [tn]roff documentation
  198. troff: gnuplot.ms titlepage.ms
  199. X    tbl gnuplot.ms | eqn | $(TROFF) -ms
  200. X
  201. # for screen viewing, or printers with backspace/overstrike, remove the -Tlpr
  202. nroff gnuplot.nroff: gnuplot.ms titlepage.ms
  203. X    tbl gnuplot.ms | neqn | nroff -ms -Tlpr > gnuplot.nroff
  204. X
  205. ms gnuplot.ms: doc2ms gnuplot.doc
  206. X    doc2ms < gnuplot.doc > gnuplot.ms
  207. X
  208. doc2ms: doc2ms.c
  209. X    $(CC) $(CFLAGS) -o doc2ms.o doc2ms.c
  210. X    $(LN) -o doc2ms doc2ms.o $(LFLAGS)
  211. X
  212. ### LaTeX documentation
  213. tex gnuplot.tex: doc2tex gnuplot.doc
  214. X    doc2tex < gnuplot.doc > gnuplot.tex
  215. X
  216. dvi gnuplot.dvi: gnuplot.tex titlepage.tex
  217. X    latex gnuplot.tex
  218. X    latex gnuplot.tex
  219. X
  220. doc2tex: doc2tex.c
  221. X    $(CC) $(CFLAGS) -o doc2tex.o doc2tex.c
  222. X    $(LN) -o doc2tex doc2tex.o $(LFLAGS)
  223. X
  224. # this is how to make gnuplot.hlp
  225. hlp gnuplot.hlp: doc2hlp gnuplot.doc
  226. X    doc2hlp < gnuplot.doc > gnuplot.hlp
  227. X
  228. doc2hlp: doc2hlp.c
  229. X    $(CC) $(CFLAGS) -o doc2hlp.o doc2hlp.c
  230. X    $(LN) -o doc2hlp doc2hlp.o $(LFLAGS)
  231. X
  232. # this is how to make gnuplot.gih
  233. gih gnuplot.gih: doc2gih gnuplot.doc
  234. X    doc2gih < gnuplot.doc > gnuplot.gih
  235. X
  236. doc2gih: doc2gih.c
  237. X    $(CC) $(CFLAGS) -o doc2gih.o doc2gih.c
  238. X    $(LN) -o doc2gih doc2gih.o $(LFLAGS)
  239. X
  240. # this is how to check the gnuplot.doc file
  241. check: checkdoc gnuplot.doc
  242. X    checkdoc < gnuplot.doc
  243. X
  244. checkdoc: checkdoc.c
  245. X    $(CC) $(CFLAGS) -o checkdoc.o checkdoc.c
  246. X    $(LN) -o checkdoc checkdoc.o $(LFLAGS)
  247. X
  248. # For Unix and MSDOS only
  249. install-unix: gnuplot.gih
  250. X    $(INSTALL) gnuplot.gih $(HELPDEST)
  251. X
  252. # for VMS only
  253. install-vms: gnuplot.hlp
  254. X    $(INSTALL) gnuplot.hlp $(HELPDEST)
  255. X
  256. # remove all derived files
  257. clean:
  258. X    rm -f doc2ms gnuplot.nroff gnuplot.ms
  259. X    rm -f doc2tex gnuplot.tex gnuplot.dvi gnuplot.aux gnuplot.log gnuplot.toc
  260. X    rm -f doc2hlp gnuplot.hlp
  261. X    rm -f doc2gih gnuplot.gih
  262. X    rm -f checkdoc *~ *.o core a.out
  263. SHAR_EOF
  264. chmod 0644 gnuplot/docs/Makefile.ami ||
  265. echo 'restore of gnuplot/docs/Makefile.ami failed'
  266. Wc_c="`wc -c < 'gnuplot/docs/Makefile.ami'`"
  267. test 2688 -eq "$Wc_c" ||
  268.     echo 'gnuplot/docs/Makefile.ami: original size 2688, current size' "$Wc_c"
  269. rm -f _shar_wnt_.tmp
  270. fi
  271. # ============= gnuplot/corgraph.asm ==============
  272. if test -f 'gnuplot/corgraph.asm' -a X"$1" != X"-c"; then
  273.     echo 'x - skipping gnuplot/corgraph.asm (File already exists)'
  274.     rm -f _shar_wnt_.tmp
  275. else
  276. > _shar_wnt_.tmp
  277. echo 'x - extracting gnuplot/corgraph.asm (Text)'
  278. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/corgraph.asm' &&
  279. TITLE    Corona graphics module
  280. ;    Colin Kelley
  281. ;    January 1987
  282. X
  283. include header.mac
  284. X
  285. if1
  286. include lineproc.mac
  287. endif
  288. X
  289. X
  290. _text    segment
  291. X
  292. public    _GrInit,_GrReset,_GrOnly,_TxOnly,_GrandTx,_Cor_line,_Cor_mask
  293. X
  294. corpixel proc near
  295. X    ror word ptr linemask,1
  296. X    jc cont
  297. X    ret
  298. cont:    push bp
  299. X    mov bp,sp
  300. X    push ax
  301. X    push bx
  302. X    push cx
  303. X    mov es,ScSeg
  304. X    shl bx,1            ; y
  305. X    mov bx,word ptr LookUp[bx] ; bx has y mem address
  306. X    mov cl,al            ; x
  307. X    and cl,7
  308. X    shr ax,1
  309. X    shr ax,1
  310. X    shr ax,1            ; ax /= 8
  311. X    add bx,ax
  312. X    mov al,1
  313. X    shl al,cl            ; al contains bit mask
  314. X    or byte ptr es:[bx],al
  315. X    pop cx
  316. X    pop bx
  317. X    pop ax
  318. X    pop bp
  319. X    ret
  320. X
  321. lineproc _Cor_line, corpixel
  322. X
  323. beginproc _GrInit
  324. X    push bp
  325. X    mov bp,sp
  326. X    push di
  327. X    mov ax, [bp+X]            ; screen number (0 - 7)
  328. X    mov cl,11
  329. X    shl ax,cl            ; multiply by 2048 to get segment
  330. X    mov ScSeg,ax            ; save segment for later
  331. X    push ax
  332. X    mov es, ax
  333. X    xor ax,ax
  334. X    mov di,ax
  335. X    mov cx, 4000h
  336. X    cld
  337. X    rep stosw
  338. X    pop cx
  339. X    call near ptr GrAddr
  340. X    mov ax,es
  341. X    pop di
  342. X    pop bp
  343. X    ret
  344. _GrInit    endp
  345. X
  346. beginproc _GrReset
  347. X    mov cx, 0
  348. X    call near ptr GrAddr
  349. X    ret
  350. _GrReset endp
  351. X
  352. GrAddr    proc near
  353. X    mov dx,3b4h            ; address of 6845
  354. X    mov al,0ch            ; register 12
  355. X    out dx,al
  356. X    inc dx
  357. X    mov al,ch            ; Graphics Segment High
  358. X    out dx,al
  359. X    dec dx
  360. X    mov al,0dh            ; register 13
  361. X    out dx,al
  362. X    mov al,cl            ; Graphics Segment Low
  363. X    inc dx
  364. X    out dx,al
  365. X    ret
  366. GrAddr    endp
  367. X
  368. beginproc _GrOnly
  369. X    mov dx,3b8h
  370. X    mov al,0a0h
  371. X    out dx,al
  372. X    ret
  373. _GrOnly    endp
  374. X
  375. beginproc _TxOnly
  376. X    mov dx,3b8h
  377. X    mov al,28h
  378. X    out dx,al
  379. X    ret
  380. _TxOnly    endp
  381. X
  382. beginproc _GrandTx
  383. X    mov dx,3b8h
  384. X    mov al,0a8h
  385. X    out dx,al
  386. X    ret
  387. _GrandTx endp
  388. X
  389. beginproc _Cor_mask
  390. X    push bp
  391. X    mov bp,sp
  392. X    mov ax,[bp+x]            ; mask
  393. X    mov linemask,ax
  394. X    pop bp
  395. X    ret
  396. _Cor_mask endp
  397. X
  398. corpixel endp
  399. X
  400. _text    ends
  401. X
  402. _data    segment
  403. linemask dw -1
  404. ScSeg    dw 0
  405. _data    ends
  406. X
  407. const    segment
  408. X
  409. K    equ 1024
  410. X
  411. mem_mac    MACRO x
  412. X    dw x,2*K+x,4*K+x,6*K+x,8*K+x,10*K+x,12*K+x,14*K+x,16*K+x
  413. X    dw 18*K+x,20*K+x,22*K+x,24*K+x
  414. X    ENDM
  415. LookUp    equ $
  416. X    mem_mac 0
  417. X    mem_mac 80
  418. X    mem_mac (80*2)
  419. X    mem_mac (80*3)
  420. X    mem_mac (80*4)
  421. X    mem_mac (80*5)
  422. X    mem_mac (80*6)
  423. X    mem_mac (80*7)
  424. X    mem_mac (80*8)
  425. X    mem_mac (80*9)
  426. X    mem_mac (80*10)
  427. X    mem_mac (80*11)
  428. X    mem_mac (80*12)
  429. X    mem_mac (80*13)
  430. X    mem_mac (80*14)
  431. X    mem_mac (80*15)
  432. X    mem_mac (80*16)
  433. X    mem_mac (80*17)
  434. X    mem_mac (80*18)
  435. X    mem_mac (80*19)
  436. X    mem_mac (80*20)
  437. X    mem_mac (80*21)
  438. X    mem_mac (80*22)
  439. X    mem_mac (80*23)
  440. X    mem_mac (80*24)
  441. X
  442. const    ends
  443. X
  444. X    end
  445. SHAR_EOF
  446. chmod 0666 gnuplot/corgraph.asm ||
  447. echo 'restore of gnuplot/corgraph.asm failed'
  448. Wc_c="`wc -c < 'gnuplot/corgraph.asm'`"
  449. test 2272 -eq "$Wc_c" ||
  450.     echo 'gnuplot/corgraph.asm: original size 2272, current size' "$Wc_c"
  451. rm -f _shar_wnt_.tmp
  452. fi
  453. # ============= gnuplot/corplot.c ==============
  454. if test -f 'gnuplot/corplot.c' -a X"$1" != X"-c"; then
  455.     echo 'x - skipping gnuplot/corplot.c (File already exists)'
  456.     rm -f _shar_wnt_.tmp
  457. else
  458. > _shar_wnt_.tmp
  459. echo 'x - extracting gnuplot/corplot.c (Text)'
  460. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/corplot.c' &&
  461. /* GNUPLOT - corplot.c */
  462. /*
  463. X * Copyright (C) 1986, 1987, 1990, 1991   Thomas Williams, Colin Kelley
  464. X *
  465. X * Permission to use, copy, and distribute this software and its
  466. X * documentation for any purpose with or without fee is hereby granted, 
  467. X * provided that the above copyright notice appear in all copies and 
  468. X * that both that copyright notice and this permission notice appear 
  469. X * in supporting documentation.
  470. X *
  471. X * Permission to modify the software is granted, but not the right to
  472. X * distribute the modified code.  Modifications are to be distributed 
  473. X * as patches to released version.
  474. X *  
  475. X * This software is provided "as is" without express or implied warranty.
  476. X * 
  477. X *
  478. X * AUTHORS
  479. X * 
  480. X *   Original Software:
  481. X *     Thomas Williams,  Colin Kelley.
  482. X * 
  483. X *   Gnuplot 2.0 additions:
  484. X *       Russell Lang, Dave Kotz, John Campbell.
  485. X *
  486. X *   Gnuplot 3.0 additions:
  487. X *       Gershon Elber and many others.
  488. X * 
  489. X * Send your comments or suggestions to 
  490. X *  pixar!info-gnuplot@sun.com.
  491. X * This is a mailing list; to join it send a note to 
  492. X *  pixar!info-gnuplot-request@sun.com.  
  493. X * Send bug reports to
  494. X *  pixar!bug-gnuplot@sun.com.
  495. X */
  496. #include <stdio.h>
  497. #include <process.h>
  498. #include <dos.h>
  499. X
  500. #define BOUNDARY 32768
  501. #define segment(addr) (FP_SEG(m) + ((FP_OFF(m)+15) >> 4));
  502. #define round(value,boundary) (((value) + (boundary) - 1) & ~((boundary) - 1))
  503. X
  504. char *malloc(),*realloc();
  505. X
  506. char prog[] = "gnuplot";
  507. char corscreen[] = "CORSCREEN=0";
  508. X
  509. main()
  510. {
  511. register unsigned int segm,start;
  512. char *m;
  513. X    if (!(m = malloc(BOUNDARY))) {
  514. X        printf("malloc() failed\n");
  515. X        exit(1);
  516. X    }
  517. X    segm = segment(m);
  518. X    start = round(segm,BOUNDARY/16);
  519. X
  520. X    if (realloc(m,BOUNDARY+(start-segm)*16) != m) {
  521. X        printf("can't realloc() memory\n");
  522. X        exit(2);
  523. X    }
  524. X
  525. X    if ((segm = start >> 11) >= 8) {
  526. X        printf("not enough room in first 256K\n");
  527. X        exit(3);
  528. X    }
  529. X
  530. X    corscreen[sizeof(corscreen)-2] = '0' + segm;
  531. X    if (putenv(corscreen))
  532. X        perror("putenv");
  533. X
  534. X    if (spawnlp(P_WAIT,prog,prog,NULL))
  535. X        perror("spawnlp");
  536. }
  537. SHAR_EOF
  538. chmod 0666 gnuplot/corplot.c ||
  539. echo 'restore of gnuplot/corplot.c failed'
  540. Wc_c="`wc -c < 'gnuplot/corplot.c'`"
  541. test 1979 -eq "$Wc_c" ||
  542.     echo 'gnuplot/corplot.c: original size 1979, current size' "$Wc_c"
  543. rm -f _shar_wnt_.tmp
  544. fi
  545. # ============= gnuplot/eval.c ==============
  546. if test -f 'gnuplot/eval.c' -a X"$1" != X"-c"; then
  547.     echo 'x - skipping gnuplot/eval.c (File already exists)'
  548.     rm -f _shar_wnt_.tmp
  549. else
  550. > _shar_wnt_.tmp
  551. echo 'x - extracting gnuplot/eval.c (Text)'
  552. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/eval.c' &&
  553. /* GNUPLOT - eval.c */
  554. /*
  555. X * Copyright (C) 1986, 1987, 1990, 1991   Thomas Williams, Colin Kelley
  556. X *
  557. X * Permission to use, copy, and distribute this software and its
  558. X * documentation for any purpose with or without fee is hereby granted, 
  559. X * provided that the above copyright notice appear in all copies and 
  560. X * that both that copyright notice and this permission notice appear 
  561. X * in supporting documentation.
  562. X *
  563. X * Permission to modify the software is granted, but not the right to
  564. X * distribute the modified code.  Modifications are to be distributed 
  565. X * as patches to released version.
  566. X *  
  567. X * This software is provided "as is" without express or implied warranty.
  568. X * 
  569. X *
  570. X * AUTHORS
  571. X * 
  572. X *   Original Software:
  573. X *     Thomas Williams,  Colin Kelley.
  574. X * 
  575. X *   Gnuplot 2.0 additions:
  576. X *       Russell Lang, Dave Kotz, John Campbell.
  577. X *
  578. X *   Gnuplot 3.0 additions:
  579. X *       Gershon Elber and many others.
  580. X * 
  581. X * Send your comments or suggestions to 
  582. X *  pixar!info-gnuplot@sun.com.
  583. X * This is a mailing list; to join it send a note to 
  584. X *  pixar!info-gnuplot-request@sun.com.  
  585. X * Send bug reports to
  586. X *  pixar!bug-gnuplot@sun.com.
  587. X */
  588. X
  589. #include <stdio.h>
  590. #include "plot.h"
  591. X
  592. extern int c_token;
  593. extern struct ft_entry ft[];
  594. extern struct udvt_entry *first_udv;
  595. extern struct udft_entry *first_udf;
  596. extern struct at_type at;
  597. extern struct lexical_unit token[];
  598. X
  599. struct value *integer();
  600. X
  601. X
  602. X
  603. struct udvt_entry *
  604. add_udv(t_num)  /* find or add value and return pointer */
  605. int t_num;
  606. {
  607. register struct udvt_entry **udv_ptr = &first_udv;
  608. X
  609. X    /* check if it's already in the table... */
  610. X
  611. X    while (*udv_ptr) {
  612. X        if (equals(t_num,(*udv_ptr)->udv_name))
  613. X            return(*udv_ptr);
  614. X        udv_ptr = &((*udv_ptr)->next_udv);
  615. X    }
  616. X
  617. X    *udv_ptr = (struct udvt_entry *)
  618. X      alloc((unsigned int)sizeof(struct udvt_entry), "value");
  619. X    (*udv_ptr)->next_udv = NULL;
  620. X    copy_str((*udv_ptr)->udv_name,t_num);
  621. X    (*udv_ptr)->udv_value.type = INT;    /* not necessary, but safe! */
  622. X    (*udv_ptr)->udv_undef = TRUE;
  623. X    return(*udv_ptr);
  624. }
  625. X
  626. X
  627. struct udft_entry *
  628. add_udf(t_num)  /* find or add function and return pointer */
  629. int t_num; /* index to token[] */
  630. {
  631. register struct udft_entry **udf_ptr = &first_udf;
  632. X
  633. X    while (*udf_ptr) {
  634. X        if (equals(t_num,(*udf_ptr)->udf_name))
  635. X            return(*udf_ptr);
  636. X        udf_ptr = &((*udf_ptr)->next_udf);
  637. X    }
  638. X     *udf_ptr = (struct udft_entry *)
  639. X      alloc((unsigned int)sizeof(struct udft_entry), "function");
  640. X    (*udf_ptr)->next_udf = (struct udft_entry *) NULL;
  641. X    (*udf_ptr)->definition = NULL;
  642. X    (*udf_ptr)->at = NULL;
  643. X    copy_str((*udf_ptr)->udf_name,t_num);
  644. X    (void) integer(&((*udf_ptr)->dummy_values[0]), 0);
  645. X    (void) integer(&((*udf_ptr)->dummy_values[1]), 0);
  646. X    return(*udf_ptr);
  647. }
  648. X
  649. X
  650. union argument *
  651. add_action(sf_index)
  652. enum operators sf_index;        /* index of p-code function */
  653. {
  654. X    if (at.a_count >= MAX_AT_LEN)
  655. X        int_error("action table overflow",NO_CARET);
  656. X    at.actions[at.a_count].index = sf_index;
  657. X    return(&(at.actions[at.a_count++].arg));
  658. }
  659. X
  660. X
  661. int standard(t_num)  /* return standard function index or 0 */
  662. {
  663. register int i;
  664. X    for (i = (int)SF_START; ft[i].f_name != NULL; i++) {
  665. X        if (equals(t_num,ft[i].f_name))
  666. X            return(i);
  667. X    }
  668. X    return(0);
  669. }
  670. X
  671. X
  672. execute_at(at_ptr)
  673. struct at_type *at_ptr;
  674. {
  675. register int i,index,count,offset;
  676. X
  677. X    count = at_ptr->a_count;
  678. X    for (i = 0; i < count;) {
  679. X        index = (int)at_ptr->actions[i].index;
  680. X        offset = (*ft[index].func)(&(at_ptr->actions[i].arg));
  681. X        if (is_jump(index))
  682. X            i += offset;
  683. X        else
  684. X            i++;
  685. X    }
  686. }
  687. X
  688. /*
  689. X
  690. X 'ft' is a table containing C functions within this program. 
  691. X
  692. X An 'action_table' contains pointers to these functions and arguments to be
  693. X passed to them. 
  694. X
  695. X at_ptr is a pointer to the action table which must be executed (evaluated)
  696. X
  697. X so the iterated line exectues the function indexed by the at_ptr and 
  698. X passes the address of the argument which is pointed to by the arg_ptr 
  699. X
  700. */
  701. SHAR_EOF
  702. chmod 0666 gnuplot/eval.c ||
  703. echo 'restore of gnuplot/eval.c failed'
  704. Wc_c="`wc -c < 'gnuplot/eval.c'`"
  705. test 3799 -eq "$Wc_c" ||
  706.     echo 'gnuplot/eval.c: original size 3799, current size' "$Wc_c"
  707. rm -f _shar_wnt_.tmp
  708. fi
  709. # ============= gnuplot/gnuplot.el ==============
  710. if test -f 'gnuplot/gnuplot.el' -a X"$1" != X"-c"; then
  711.     echo 'x - skipping gnuplot/gnuplot.el (File already exists)'
  712.     rm -f _shar_wnt_.tmp
  713. else
  714. > _shar_wnt_.tmp
  715. echo 'x - extracting gnuplot/gnuplot.el (Text)'
  716. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/gnuplot.el' &&
  717. ; gnu-plot.el - Definitions of GNU-PLOT mode for emacs editor.
  718. ; Author:    Gershon Elber
  719. ;         Computer Science Dept.
  720. ;         University of Utah
  721. ; Date:    Tue May 14 1991
  722. ; Copyright (c) 1991, Gershon Elber
  723. ;
  724. ; This file defines an environment to run edit and execute GNU-PLOT programs.
  725. ; Such a program should have a '.gp' extension in order it to be in
  726. ; gnu-plot-mode major mode. Two new functions are provided to communicate
  727. ; between the editted file and the plotting program:
  728. ; 1. send-line-to-gnu-plot - sends a single line to the plotting program for
  729. ;    execution. The line sent is the line the cursor is on,
  730. ;    Bounded to Meta-E be default.
  731. ; 2. send-region-to-gnu-plot - sends the region from the current mark
  732. ;    (mark-marker) to current position (point-marker) to the plotting program.
  733. ;    This function is convenient for sending a large block of commands.
  734. ;    Bounded to Meta-R be default.
  735. ; Both functions checks for existance of a buffer named gnu-plot-program
  736. ; and a process named "gnu-plot" hooked to it, and will restart a new process
  737. ; or buffer if none exists. The program to execute as process "gnu-plot" is
  738. ; defined by the gnu-plot-program constant below.
  739. ;
  740. X
  741. (defvar gnu-plot-program "gnuplot"
  742. X  "*The executable to run for gnu-plot-program buffer.")
  743. X
  744. (defvar gnu-plot-echo-program t
  745. X  "*Control echo of executed commands to gnu-plot-program buffer.")
  746. X
  747. (defvar gnu-plot-mode-map nil "")
  748. (if gnu-plot-mode-map
  749. X    ()
  750. X  (setq gnu-plot-mode-map (make-sparse-keymap))
  751. X  (define-key gnu-plot-mode-map "\M-e" 'send-line-to-gnu-plot)
  752. X  (define-key gnu-plot-mode-map "\M-r" 'send-region-to-gnu-plot))
  753. X
  754. ;;;
  755. ;;; Define the gnu-plot-mode
  756. ;;;
  757. (defun gnu-plot-mode ()
  758. X  "Major mode for editing and executing GNU-PLOT files.
  759. X
  760. see send-line-to-gnu-plot and send-region-to-gnu-plot for more."
  761. X  (interactive)
  762. X  (use-local-map gnu-plot-mode-map)
  763. X  (setq major-mode 'gnu-plot-mode)
  764. X  (setq mode-name "Gnu-Plot")
  765. X  (run-hooks 'gnu-plot-mode-hook))
  766. X
  767. ;;;
  768. ;;; Define send-line-to-gnu-plot - send from current cursor position to next
  769. ;;; semicolin detected.
  770. ;;;
  771. (defun send-line-to-gnu-plot ()
  772. X  "Sends one line of code from current buffer to the GNU-PLOT program.
  773. X
  774. Use to execute a line in the GNU-PLOT plotting program. The line send is
  775. the line the cursor (point) is on.
  776. X
  777. The GNU-PLOT plotting program buffer name is gnu-plot-program and the 
  778. process name is 'gnu-plot'. If none exists, a new one is created.
  779. X
  780. The name of the gnu-plot program program to execute is stored in
  781. gnu-plot-program variable and may be changed."
  782. X  (interactive)
  783. X  (if (equal major-mode 'gnu-plot-mode)
  784. X    (progn
  785. X      (make-gnu-plot-buffer)        ; In case we should start a new one.
  786. X      (beginning-of-line)
  787. X      (let ((start-mark (point-marker)))
  788. X    (next-line 1)
  789. X    (let* ((crnt-buffer (buffer-name))
  790. X           (end-mark (point-marker))
  791. X           (string-copy (buffer-substring start-mark end-mark)))
  792. X      (switch-to-buffer-other-window (get-buffer "gnu-plot-program"))
  793. X      (end-of-buffer)
  794. X      (if gnu-plot-echo-program
  795. X        (insert string-copy))
  796. X      (set-marker (process-mark (get-process "gnu-plot")) (point-marker))
  797. X      (if (not (pos-visible-in-window-p))
  798. X        (recenter 3))
  799. X      (switch-to-buffer-other-window (get-buffer crnt-buffer))
  800. X      (process-send-region "gnu-plot" start-mark end-mark)
  801. X      (goto-char end-mark))))
  802. X    (message "Should be invoked in gnu-plot-mode only.")))
  803. X
  804. ;;;
  805. ;;; Define send-region-to-gnu-plot - send from current cursor position to
  806. ;;; current marker.
  807. ;;;
  808. (defun send-region-to-gnu-plot ()
  809. X  "Sends a region of code from current buffer to the GNU-PLOT program.
  810. X
  811. When this function is invoked on an GNU-PLOT file it send the region
  812. from current point to current mark to the gnu-plot plotting program.
  813. X
  814. The GNU-PLOT plotting program buffer name is gnu-plot-program and the
  815. process name is 'gnu-plot'. If none exists, a new one is created.
  816. X
  817. The name of the gnu-plot program program to execute is stored in
  818. gnu-plot-program variable and may be changed."
  819. X  (interactive)
  820. X  (if (equal major-mode 'gnu-plot-mode)
  821. X    (progn
  822. X      (make-gnu-plot-buffer)     ; In case we should start a new one.
  823. X      (copy-region-as-kill (mark-marker) (point-marker))
  824. X      (let ((crnt-buffer (buffer-name)))
  825. X    (switch-to-buffer-other-window (get-buffer "gnu-plot-program"))
  826. X    (end-of-buffer)
  827. X    (if gnu-plot-echo-program
  828. X      (yank))
  829. X    (set-marker (process-mark (get-process "gnu-plot")) (point-marker))
  830. X    (if (not (pos-visible-in-window-p))
  831. X      (recenter 3))
  832. X    (switch-to-buffer-other-window (get-buffer crnt-buffer))
  833. X    (process-send-region "gnu-plot" (mark-marker) (point-marker))))
  834. X    (message "Should be invoked in gnu-plot-mode only.")))
  835. X
  836. ;;;
  837. ;;; Switch to "gnu-plot-program" buffer if exists. If not, creates one and
  838. ;;; execute the program defined by gnu-plot-program.
  839. ;;;
  840. (defun make-gnu-plot-buffer ()
  841. X  "Switch to iris-program buffer or create one if none exists"
  842. X  (interactive)
  843. X  (if (get-buffer "gnu-plot-program")
  844. X    (if (not (get-process "gnu-plot"))
  845. X      (progn
  846. X    (message "Starting GNU-PLOT plotting program...")
  847. X    (start-process "gnu-plot" "gnu-plot-program" gnu-plot-program)
  848. X    (process-send-string "gnu-plot" "\n")
  849. X    (message "Done.")))
  850. X    (progn
  851. X      (message "Starting GNU-PLOT plotting program...")
  852. X      (start-process "gnu-plot" "gnu-plot-program" gnu-plot-program)
  853. X      (process-send-string "gnu-plot" "\n")
  854. X      (message "Done."))))
  855. X
  856. ;;;
  857. ;;; Autoload gnu-plot-mode on any file with gp extension. 
  858. ;;;
  859. (setq auto-mode-alist (append '(("\\.gp$" . gnu-plot-mode))
  860. X                  auto-mode-alist))
  861. SHAR_EOF
  862. chmod 0666 gnuplot/gnuplot.el ||
  863. echo 'restore of gnuplot/gnuplot.el failed'
  864. Wc_c="`wc -c < 'gnuplot/gnuplot.el'`"
  865. test 5487 -eq "$Wc_c" ||
  866.     echo 'gnuplot/gnuplot.el: original size 5487, current size' "$Wc_c"
  867. rm -f _shar_wnt_.tmp
  868. fi
  869. # ============= gnuplot/gnuplot_x11.c ==============
  870. if test -f 'gnuplot/gnuplot_x11.c' -a X"$1" != X"-c"; then
  871.     echo 'x - skipping gnuplot/gnuplot_x11.c (File already exists)'
  872.     rm -f _shar_wnt_.tmp
  873. else
  874. > _shar_wnt_.tmp
  875. echo 'x - extracting gnuplot/gnuplot_x11.c (Text)'
  876. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/gnuplot_x11.c' &&
  877. /*-----------------------------------------------------------------------------
  878. X *   gnuplot_x11 - X11 outboard terminal driver for gnuplot 3
  879. X *
  880. X *   Requires installation of companion inboard x11 driver in gnuplot/term.c
  881. X *
  882. X *   Acknowledgements: 
  883. X *      Chris Peterson (MIT) - original Xlib gnuplot support (and Xaw examples)
  884. X *      Dana Chee (Bellcore)  - mods to original support for gnuplot 2.0
  885. X *      Arthur Smith (Cornell) - graphical-label-widget idea (xplot)
  886. X *      Hendri Hondorp (University of Twente, The Netherlands) - Motif xgnuplot
  887. X *
  888. X *   This code is provided as is and with no warranties of any kind.
  889. X *       
  890. X *   Ed Kubaitis - Computing Services Office -  University of Illinois, Urbana
  891. X *---------------------------------------------------------------------------*/
  892. #include <stdio.h>
  893. #include <signal.h>
  894. #include <X11/Intrinsic.h>
  895. #include <X11/StringDefs.h>
  896. #include <Label.h>          /* use -Idir for location on your system */
  897. #ifdef MOTIF
  898. #include <Xm.h>             /* use -Idir for location on your system */
  899. #define LabelWC xmLabelWidgetClass
  900. #define LabelBPM XmNbackgroundPixmap
  901. #else
  902. #define LabelWC labelWidgetClass
  903. #define LabelBPM XtNbitmap
  904. #endif
  905. X
  906. #define Color (D>1)
  907. #define Ncolors 11
  908. unsigned long colors[Ncolors];
  909. char color_keys[Ncolors][30] =   { "text", "border", "axis", 
  910. X   "line1", "line2", "line3", "line4", "line5", "line6", "line7", "line8" };
  911. char color_values[Ncolors][30] = { "black", "black", "black", 
  912. X   "red",  "green", "blue",  "magenta", "cyan", "sienna", "orange", "coral" };
  913. X
  914. char dashes[10][5] = { {0}, {1,6,0}, 
  915. X   {0}, {4,2,0}, {1,3,0}, {4,4,0}, {1,5,0}, {4,4,4,1,0}, {4,2,0}, {1,3,0}
  916. X   };
  917. X
  918. Widget w_top, w_label; Window win; Display *dpy;
  919. Pixmap pixmap;  GC gc = (GC)NULL;
  920. Dimension W = 640 , H = 450;  int D;
  921. Arg args[5];
  922. static void gnuplot(), resize();
  923. X
  924. int cx=0, cy=0, vchar, nc = 0, ncalloc = 0;
  925. double xscale, yscale;
  926. #define X(x) (Dimension) (x * xscale)
  927. #define Y(y) (Dimension) ((4095-y) * yscale)
  928. enum JUSTIFY { LEFT, CENTRE, RIGHT } jmode;
  929. #define Nbuf 1024
  930. char buf[Nbuf];
  931. String *commands = NULL;
  932. X
  933. typedef struct {       /* See "X Toolkit Intrinsics Programming Manual"      */
  934. X  XFontStruct *font;   /* Nye and O'Reilly, O'Reilly & Associates, pp. 80-85 */
  935. X  unsigned long fg;
  936. X  unsigned long bg;
  937. X  } RValues, *RVptr; 
  938. RValues rv;
  939. X
  940. XXtResource resources[] = {
  941. X   { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), 
  942. X     XtOffset(RVptr, font), XtRString, "fixed" },
  943. X   { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), 
  944. X     XtOffset(RVptr, fg), XtRString, XtDefaultForeground },
  945. X   { XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel), 
  946. X     XtOffset(RVptr, bg), XtRString, XtDefaultBackground },
  947. X   };
  948. X
  949. /*-----------------------------------------------------------------------------
  950. X *   main program - fire up application and callbacks
  951. X *---------------------------------------------------------------------------*/
  952. X
  953. main(argc, argv) int argc; char *argv[]; {
  954. X
  955. X   signal(SIGINT, SIG_IGN);
  956. #ifdef SIGTSTP
  957. X   signal(SIGTSTP, SIG_IGN);
  958. #endif
  959. X
  960. X   /* initialize application */
  961. X   w_top = XtInitialize("gnuplot", "Gnuplot", NULL, 0, &argc, argv);
  962. X   XtSetArg(args[0], XtNwidth, W);
  963. X   XtSetArg(args[1], XtNheight, H);
  964. X   w_label = XtCreateManagedWidget ("", LabelWC, w_top, args, (Cardinal)2);
  965. X   XtRealizeWidget(w_top);
  966. X
  967. X   /* extract needed information */
  968. X   dpy = XtDisplay(w_top); win = XtWindow(w_label);
  969. X   D = DisplayPlanes(dpy,DefaultScreen(dpy));
  970. X   if (Color) {
  971. X      char option[20], *value; 
  972. X      XColor used, exact; int n;
  973. X
  974. X      for(n=0; n<Ncolors; n++) {
  975. X     strcpy(option, color_keys[n]);
  976. X     strcat(option, "Color");
  977. X     value = XGetDefault(dpy, "gnuplot", option);
  978. X     if (!value) { value = color_values[n]; }
  979. X     if (XAllocNamedColor(dpy, DefaultColormap(dpy,0), value, &used,&exact))
  980. X        colors[n] = used.pixel; 
  981. X     else {
  982. X        fprintf(stderr, "gnuplot: cannot allocate %s:%s\n", option, value);
  983. X        fprintf(stderr, "gnuplot: assuming %s:black\n", option);
  984. X        colors[n] = BlackPixel(dpy,0);
  985. X        }
  986. X     }
  987. X      }
  988. X   XtSetArg(args[0], XtNwidth, &W);
  989. X   XtSetArg(args[1], XtNheight,&H);
  990. X   XtGetValues(w_label, args, (Cardinal)2);
  991. X   XtGetApplicationResources(w_top, &rv, resources, XtNumber(resources),NULL,0);
  992. X   vchar = (rv.font->ascent + rv.font->descent);
  993. X
  994. X   /* add callbacks on input-from-gnuplot-on-stdin & window-resized */
  995. X   XtAddInput(0, XtInputReadMask, gnuplot, NULL);
  996. X   XtAddEventHandler(w_label, StructureNotifyMask, FALSE, resize, NULL);
  997. X
  998. X   XtMainLoop();
  999. X   }
  1000. X
  1001. /*-----------------------------------------------------------------------------
  1002. X *   display - display accumulated commands from inboard driver
  1003. X *---------------------------------------------------------------------------*/
  1004. X
  1005. display() {
  1006. X   int n, x, y, sw, sl, lt, width, type;
  1007. X   char *buf, *str;
  1008. X
  1009. X   /* set scaling factor between internal driver & window geometry */
  1010. X   xscale = (double)W / 4096.;  yscale = (double)H / 4096.;  
  1011. X
  1012. X   /* create new pixmap & GC */
  1013. X   if (gc) { XFreeGC(dpy, gc); XFreePixmap(dpy, pixmap); }
  1014. X   pixmap = XCreatePixmap(dpy, RootWindow(dpy,DefaultScreen(dpy)), W, H, D);
  1015. X   gc = XCreateGC(dpy, pixmap, 0, NULL);
  1016. X   XSetFont(dpy, gc, rv.font->fid);
  1017. X
  1018. X   /* erase pixmap */
  1019. #ifndef MOTIF
  1020. X   if (Color) { /* Athena needs different erase for color and mono */
  1021. #endif
  1022. X      XSetForeground(dpy, gc, rv.bg);
  1023. X      XFillRectangle(dpy, pixmap, gc, 0, 0, W, H);
  1024. X      XSetForeground(dpy, gc, rv.fg);
  1025. X      XSetBackground(dpy, gc, rv.bg);
  1026. #ifndef MOTIF
  1027. X      }
  1028. X   else {  
  1029. X      XSetFunction(dpy, gc, GXxor);
  1030. X      XCopyArea(dpy, pixmap, pixmap, gc, 0, 0, W, H, 0, 0);
  1031. X      XSetFunction(dpy, gc, GXcopyInverted);
  1032. X      }
  1033. #endif
  1034. X
  1035. X   /* connect new pixmap to label widget */
  1036. X   XtSetArg(args[0], LabelBPM, pixmap);
  1037. X   XtSetValues(w_label, args, (Cardinal)1);
  1038. X
  1039. X   /* loop over accumulated commands from inboard driver */
  1040. X   for (n=0; n<nc; n++) {
  1041. X      buf = commands[n];
  1042. X
  1043. X      /*   X11_vector(x,y) - draw vector  */
  1044. X      if (*buf == 'V') { 
  1045. X     sscanf(buf, "V%4d%4d", &x, &y);  
  1046. X     XDrawLine(dpy, pixmap, gc, X(cx), Y(cy), X(x), Y(y));
  1047. X     cx = x; cy = y;
  1048. X     }
  1049. X
  1050. X      /*   X11_move(x,y) - move  */
  1051. X      else if (*buf == 'M') 
  1052. X     sscanf(buf, "M%4d%4d", &cx, &cy);  
  1053. X
  1054. X      /*   X11_put_text(x,y,str) - draw text   */
  1055. X      else if (*buf == 'T') { 
  1056. X     sscanf(buf, "T%4d%4d", &x, &y);  
  1057. X     str = buf + 9; sl = strlen(str) - 1;
  1058. X     sw = XTextWidth(rv.font, str, sl);
  1059. X     switch(jmode) {
  1060. X        case LEFT:   sw = 0;     break;
  1061. X        case CENTRE: sw = -sw/2; break;
  1062. X        case RIGHT:  sw = -sw;   break;
  1063. X        }
  1064. X     if (!Color) 
  1065. X        XDrawString(dpy, pixmap, gc, X(x)+sw, Y(y)+vchar/3, str, sl);
  1066. X     else { 
  1067. X        XSetForeground(dpy, gc, colors[0]);
  1068. X        XDrawString(dpy, pixmap, gc, X(x)+sw, Y(y)+vchar/3, str, sl);
  1069. X        XSetForeground(dpy, gc, colors[lt+1]);
  1070. X        }
  1071. X     }
  1072. X
  1073. X      /*   X11_justify_text(mode) - set text justification mode  */
  1074. X      else if (*buf == 'J') 
  1075. X     sscanf(buf, "J%4d", &jmode);
  1076. X
  1077. X      /*   X11_linetype(type) - set line type  */
  1078. X      else if (*buf == 'L') { 
  1079. X     sscanf(buf, "L%4d", <);
  1080. X     lt = (lt%8)+2;
  1081. X     width = (lt == 0) ? 2 : 0;
  1082. X     if (Color) {
  1083. X        if (lt != 1) 
  1084. X           type = LineSolid;
  1085. X        else {
  1086. X           type = LineOnOffDash;
  1087. X           XSetDashes(dpy, gc, 0, dashes[lt], strlen(dashes[lt]));
  1088. X           }
  1089. X        XSetForeground(dpy, gc, colors[lt+1]);
  1090. X        }
  1091. X     else {
  1092. X        type  = (lt == 0 || lt == 2) ? LineSolid : LineOnOffDash;
  1093. X        if (dashes[lt][0])
  1094. X           XSetDashes(dpy, gc, 0, dashes[lt], strlen(dashes[lt]));
  1095. X        }
  1096. X     XSetLineAttributes( dpy,gc, width, type, CapButt, JoinBevel);
  1097. X     }
  1098. X      }
  1099. X
  1100. X   /* trigger expose events to display pixmap */
  1101. X   XClearArea(dpy, win, 0, 0, 0, 0, True);
  1102. X   }
  1103. X
  1104. /*-----------------------------------------------------------------------------
  1105. X *   gnuplot - Xt callback on input from gnuplot inboard X11 driver
  1106. X *   resize - Xt callback when window resized
  1107. X *---------------------------------------------------------------------------*/
  1108. X
  1109. static void
  1110. gnuplot(cd, s, id) char *cd; int *s; XtInputId *id; {
  1111. X
  1112. X   while (fgets(buf, Nbuf, stdin)) {
  1113. X     if (*buf == 'G') {                           /* enter graphics mode */
  1114. X     if (commands) {
  1115. X        int n; for (n=0; n<nc; n++) XtFree(commands[n]);
  1116. X        XtFree(commands);
  1117. X        }
  1118. X     commands = NULL; nc = ncalloc = 0;
  1119. X         }
  1120. X      else if (*buf == 'E') { display(); break; } /* leave graphics mode */
  1121. X      else if (*buf == 'R') { exit(0); }          /* leave X11/x11 mode  */
  1122. X      else {
  1123. X     if (nc >= ncalloc) {
  1124. X        ncalloc = ncalloc*2 + 1;
  1125. X        commands = (String *)XtRealloc(commands, ncalloc * sizeof(String));
  1126. X        }
  1127. X     commands[nc++] = XtNewString(buf);
  1128. X     }
  1129. X      }
  1130. X   if (feof(stdin) || ferror(stdin)) exit(0);
  1131. X   }
  1132. X
  1133. static void
  1134. resize(w, cd, e) Widget w; char *cd; XConfigureEvent *e; {
  1135. X   if (e->type != ConfigureNotify) return;
  1136. X   W = e->width; H = e->height;
  1137. X   display(); 
  1138. X   }
  1139. SHAR_EOF
  1140. chmod 0644 gnuplot/gnuplot_x11.c ||
  1141. echo 'restore of gnuplot/gnuplot_x11.c failed'
  1142. Wc_c="`wc -c < 'gnuplot/gnuplot_x11.c'`"
  1143. test 8774 -eq "$Wc_c" ||
  1144.     echo 'gnuplot/gnuplot_x11.c: original size 8774, current size' "$Wc_c"
  1145. rm -f _shar_wnt_.tmp
  1146. fi
  1147. # ============= gnuplot/linkopt.tc ==============
  1148. if test -f 'gnuplot/linkopt.tc' -a X"$1" != X"-c"; then
  1149.     echo 'x - skipping gnuplot/linkopt.tc (File already exists)'
  1150.     rm -f _shar_wnt_.tmp
  1151. else
  1152. > _shar_wnt_.tmp
  1153. echo 'x - extracting gnuplot/linkopt.tc (Text)'
  1154. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/linkopt.tc' &&
  1155. c:\tc\lib\C0l +
  1156. bitmap command eval graphics graph3d help internal misc parse +
  1157. plot scanner setshow standard term util version contour +
  1158. egavgaf hercf cgaf attf +
  1159. ,gnuplot,gnuplot, +
  1160. c:\tc\lib\emu +
  1161. c:\tc\lib\mathl +
  1162. c:\tc\lib\cl +
  1163. c:\tc\lib\graphics
  1164. SHAR_EOF
  1165. chmod 0666 gnuplot/linkopt.tc ||
  1166. echo 'restore of gnuplot/linkopt.tc failed'
  1167. Wc_c="`wc -c < 'gnuplot/linkopt.tc'`"
  1168. test 252 -eq "$Wc_c" ||
  1169.     echo 'gnuplot/linkopt.tc: original size 252, current size' "$Wc_c"
  1170. rm -f _shar_wnt_.tmp
  1171. fi
  1172. # ============= gnuplot/lasergnu ==============
  1173. if test -f 'gnuplot/lasergnu' -a X"$1" != X"-c"; then
  1174.     echo 'x - skipping gnuplot/lasergnu (File already exists)'
  1175.     rm -f _shar_wnt_.tmp
  1176. else
  1177. > _shar_wnt_.tmp
  1178. echo 'x - extracting gnuplot/lasergnu (Text)'
  1179. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/lasergnu' &&
  1180. #!/bin/csh -f
  1181. #
  1182. # Print gnuplot output on an Imagen or Postscript laser printer.
  1183. X
  1184. set print_banner = on    # Print a banner page unless told otherwise.
  1185. set input_files = ()    # the plot input command files
  1186. set lpr_opts = ()        # options to lpr
  1187. X
  1188. # Default printer set by shell variable PRINTER.
  1189. if (! $?PRINTER) then 
  1190. X    if ($?LASER) then
  1191. X          set PRINTER=$LASER
  1192. X    else
  1193. X           set PRINTER="lw0"
  1194. X    endif
  1195. endif
  1196. set printer = (-P$PRINTER)
  1197. X
  1198. # File for plot commands, and for plot output
  1199. set TMP=/tmp/plot$$
  1200. set outfile=$TMP.out    # the output file
  1201. onintr cleanup
  1202. X
  1203. # default is Imagen mode for Imagen printer; see -p option
  1204. set setterm="set terminal imagen"
  1205. set LANG="-Limpress"
  1206. X
  1207. set usage="usage: lasergnu [-Pprinter] [-b] [-p] [-t title] [-f file] ['plot command']...."
  1208. X
  1209. # Loop through the command-line arguments.
  1210. X
  1211. top:
  1212. X    if ($#argv > 0) then
  1213. X
  1214. X        switch ("$argv[1]")
  1215. X
  1216. X        case -b*:    # Do not print a banner page.
  1217. X        case -J*:    # Compatible with imprint.
  1218. X            set print_banner = off
  1219. X                     set lpr_opts=($lpr_opts -h)
  1220. X            shift argv
  1221. X            goto top
  1222. X
  1223. X        case -f?*:    # Specify file containing plot commands
  1224. X            set input_files = ($input_files `echo $argv[1] | sed 's/^-f//'`)
  1225. X            shift argv
  1226. X            goto top
  1227. X
  1228. X        case -f:    # Specify file containing plot commands
  1229. X            shift argv
  1230. X            if ($#argv > 0) then
  1231. X                set input_files = ($input_files $argv[1])
  1232. X                shift argv
  1233. X            else
  1234. X                echo "Usage: -f file ..."
  1235. X                echo "Type    lasergnu -help    for help."
  1236. X                exit (1)
  1237. X            endif
  1238. X            goto top
  1239. X
  1240. X        case -t?*:    # Specify title of plot
  1241. X            echo set title \""`echo $argv[1] | sed 's/^-t//'`"\" >> $TMP
  1242. X            shift argv
  1243. X            goto top
  1244. X
  1245. X        case -t:    # Specify title of plot
  1246. X            shift argv
  1247. X            if ($#argv > 0) then
  1248. X                echo set title \""$1"\" >> $TMP
  1249. X                shift argv
  1250. X            else
  1251. X                echo "Usage: -t title ..."
  1252. X                echo "Type    lasergnu -help    for help."
  1253. X                exit (1)
  1254. X            endif
  1255. X            goto top
  1256. X          case -help:
  1257. X            echo "$usage"
  1258. X            exit(1)
  1259. X
  1260. X        case -P?*:    # Set the printer, exactly as by itroff.
  1261. X            set printer = $argv[1]
  1262. X            shift argv
  1263. X            goto top
  1264. X
  1265. X        case -P:    # Set the printer, exactly as by itroff.
  1266. X            shift argv
  1267. X            if ($#argv > 0) then
  1268. X                set printer = (-P$argv[1])
  1269. X                shift argv
  1270. X            else
  1271. X                echo "Usage: -P printer ..."
  1272. X                echo "Type    lasergnu -help    for help."
  1273. X                exit (1)
  1274. X            endif
  1275. X            goto top
  1276. X
  1277. X                # use impress 
  1278. X           case -I:
  1279. X                echo Imagen is the default mode now
  1280. X             shift argv
  1281. X                goto top
  1282. X
  1283. X                # use postscript instead of impress language
  1284. X           case -p:
  1285. X                set setterm="set term postscript"
  1286. X                set LANG="-Lpostscript"
  1287. X             shift argv
  1288. X                goto top
  1289. X
  1290. X        case -?*:
  1291. X            echo "I do not recognize option $argv[1]."
  1292. X            echo "$usage"
  1293. X            exit (1)
  1294. X
  1295. X        default:
  1296. X              echo "$argv[1]"    >> $TMP
  1297. X            shift argv
  1298. X            goto top
  1299. X
  1300. X        endsw
  1301. X    endif
  1302. X
  1303. # try to devine the printer type
  1304. if ($printer =~ -Plw*) then
  1305. X    set setterm="set term postscript"
  1306. X    set LANG="-Lpostscript"
  1307. endif
  1308. X
  1309. if ($printer =~ -Pim*) then
  1310. X    set setterm="set term imagen"
  1311. X    set LANG="-Limpress"
  1312. endif
  1313. X
  1314. # Set up input file
  1315. echo $setterm > $TMP.plt
  1316. echo set output \"$outfile\" >> $TMP.plt
  1317. if (-e $TMP) cat $TMP >> $TMP.plt
  1318. X
  1319. # If input file is specified AND command line contains plot commands, then
  1320. #    do command line args first, then plot commands in input file.
  1321. gnuplot $TMP.plt $input_files
  1322. X
  1323. if ($status == 0 && -e $outfile && ! -z $outfile) then
  1324. X    # The printer is whatever printer was last specified,
  1325. X    # or the default printer if none was specified.
  1326. X    if ($LANG == -Limpress) then
  1327. X        /usr/local/bin/ipr $LANG $printer \
  1328. X           -D"jobheader $print_banner" \
  1329. X           -D"pagereversal on" \
  1330. X           -D"program lasergnu" $outfile
  1331. X    else if ($LANG == -Lpostscript) then
  1332. X           lpr $lpr_opts $printer $outfile
  1333. X    endif
  1334. else
  1335. X    echo "lasergnu: error in plotting or empty plot; nothing printed."
  1336. endif
  1337. X
  1338. cleanup:
  1339. rm -f $TMP* $outfile
  1340. SHAR_EOF
  1341. chmod 0644 gnuplot/lasergnu ||
  1342. echo 'restore of gnuplot/lasergnu failed'
  1343. Wc_c="`wc -c < 'gnuplot/lasergnu'`"
  1344. test 3801 -eq "$Wc_c" ||
  1345.     echo 'gnuplot/lasergnu: original size 3801, current size' "$Wc_c"
  1346. rm -f _shar_wnt_.tmp
  1347. fi
  1348. # ============= gnuplot/header.mac ==============
  1349. if test -f 'gnuplot/header.mac' -a X"$1" != X"-c"; then
  1350.     echo 'x - skipping gnuplot/header.mac (File already exists)'
  1351.     rm -f _shar_wnt_.tmp
  1352. else
  1353. > _shar_wnt_.tmp
  1354. echo 'x - extracting gnuplot/header.mac (Text)'
  1355. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/header.mac' &&
  1356. if1
  1357. LARGE    equ 1            ; define your memory model here
  1358. X
  1359. ifdef    SMALL
  1360. X    ; default, so do nothing
  1361. X    else
  1362. X
  1363. ifdef    MEDIUM
  1364. X    LARGE_CODE equ 1
  1365. X    else
  1366. X
  1367. ifdef    COMPACT
  1368. X    LARGE_DATA equ 1
  1369. X    else
  1370. X
  1371. ifdef    LARGE
  1372. X    LARGE_DATA equ 1
  1373. X    LARGE_CODE equ 1
  1374. X
  1375. else
  1376. X    %out No memory model defined--assuming SMALL
  1377. X
  1378. endif    ; LARGE
  1379. endif    ; COMPACT
  1380. endif    ; MEDIUM
  1381. endif    ; SMALL
  1382. X
  1383. X
  1384. beginproc macro procname
  1385. X
  1386. ifdef    LARGE_CODE
  1387. X    procname proc far
  1388. else
  1389. X    procname proc near
  1390. endif    ; LARGE_CODE
  1391. X
  1392. X    endm    ; beginproc
  1393. X
  1394. X
  1395. endif    ; if1
  1396. X
  1397. X
  1398. _TEXT    SEGMENT    BYTE PUBLIC 'CODE'
  1399. _TEXT    ENDS
  1400. _DATA    SEGMENT WORD PUBLIC 'DATA'
  1401. _DATA    ENDS
  1402. CONST    SEGMENT WORD PUBLIC 'CONST'
  1403. CONST    ENDS
  1404. _BSS    SEGMENT WORD PUBLIC 'BSS'
  1405. _BSS    ENDS
  1406. X
  1407. DGROUP    GROUP    CONST, _BSS, _DATA
  1408. X    assume cs:_text, ds:dgroup, ss:dgroup, es:dgroup
  1409. X
  1410. ; define X as the offset of first argument on stack frame
  1411. X
  1412. ifdef LARGE_CODE
  1413. X    X    equ 6            ; return offset and segment + old BP
  1414. else
  1415. X    X    equ 4            ; return offset + old BP
  1416. endif    ; LARGE_CODE
  1417. SHAR_EOF
  1418. chmod 0666 gnuplot/header.mac ||
  1419. echo 'restore of gnuplot/header.mac failed'
  1420. Wc_c="`wc -c < 'gnuplot/header.mac'`"
  1421. test 918 -eq "$Wc_c" ||
  1422.     echo 'gnuplot/header.mac: original size 918, current size' "$Wc_c"
  1423. rm -f _shar_wnt_.tmp
  1424. fi
  1425. # ============= gnuplot/readline.c ==============
  1426. if test -f 'gnuplot/readline.c' -a X"$1" != X"-c"; then
  1427.     echo 'x - skipping gnuplot/readline.c (File already exists)'
  1428.     rm -f _shar_wnt_.tmp
  1429. else
  1430. > _shar_wnt_.tmp
  1431. echo 'x - extracting gnuplot/readline.c (Text)'
  1432. sed 's/^X//' << 'SHAR_EOF' > 'gnuplot/readline.c' &&
  1433. /* GNUPLOT - readline.c */
  1434. /*
  1435. X * Copyright (C) 1986, 1987, 1990, 1991   Thomas Williams, Colin Kelley
  1436. X *
  1437. X * Permission to use, copy, and distribute this software and its
  1438. X * documentation for any purpose with or without fee is hereby granted, 
  1439. X * provided that the above copyright notice appear in all copies and 
  1440. X * that both that copyright notice and this permission notice appear 
  1441. X * in supporting documentation.
  1442. X *
  1443. X * Permission to modify the software is granted, but not the right to
  1444. X * distribute the modified code.  Modifications are to be distributed 
  1445. X * as patches to released version.
  1446. X *  
  1447. X * This software is provided "as is" without express or implied warranty.
  1448. X * 
  1449. X *
  1450. X * AUTHORS
  1451. X *
  1452. X *   Original Software:
  1453. X *     Tom Tkacik
  1454. X *
  1455. X *   Msdos port and some enhancements:
  1456. X *     Gershon Elber and many others.
  1457. X * 
  1458. X * Send your comments or suggestions to 
  1459. X *  pixar!info-gnuplot@sun.com.
  1460. X * This is a mailing list; to join it send a note to 
  1461. X *  pixar!info-gnuplot-request@sun.com.  
  1462. X * Send bug reports to
  1463. X *  pixar!bug-gnuplot@sun.com.
  1464. X */
  1465. X
  1466. #ifdef READLINE
  1467. X
  1468. /* a small portable version of GNU's readline */
  1469. X
  1470. /* do not need any terminal capabilities except backspace,
  1471. /* and space overwrites a character */
  1472. X
  1473. /* NANO-EMACS line editing facility */
  1474. /* printable characters print as themselves (insert not overwrite) */
  1475. /* ^A moves to the beginning of the line */
  1476. /* ^B moves back a single character */
  1477. /* ^E moves to the end of the line */
  1478. /* ^F moves forward a single character */
  1479. /* ^K kills from current position to the end of line */
  1480. /* ^P moves back through history */
  1481. /* ^N moves forward through history */
  1482. /* ^H and DEL delete the previous character */
  1483. /* ^D deletes the current character, or EOF if line is empty */
  1484. /* ^L/^R redraw line in case it gets trashed */
  1485. /* ^U kills the entire line */
  1486. /* ^W kills last word */
  1487. /* LF and CR return the entire line regardless of the cursor postition */
  1488. /* EOF with an empty line returns (char *)NULL */
  1489. X
  1490. /* all other characters are ignored */
  1491. X
  1492. #include <stdio.h>
  1493. #include <ctype.h>
  1494. #include <signal.h>
  1495. X
  1496. /* SIGTSTP defines job control */
  1497. /* if there is job control then we need termios.h instead of termio.h */
  1498. #ifdef SIGTSTP
  1499. #define TERMIOS
  1500. #endif
  1501. X
  1502. X
  1503. #ifndef MSDOS
  1504. X
  1505. /* UNIX specific stuff */
  1506. #ifdef TERMIOS
  1507. #include <termios.h>
  1508. static struct termios orig_termio, rl_termio;
  1509. #else
  1510. #include <termio.h>
  1511. static struct termio orig_termio, rl_termio;
  1512. #endif /* TERMIOS */
  1513. static int term_set = 0;    /* =1 if rl_termio set */
  1514. X
  1515. #else
  1516. X
  1517. /* MSDOS specific stuff */
  1518. #define getc(stdin) msdos_getch()
  1519. static char msdos_getch();
  1520. X
  1521. #endif /* MSDOS */
  1522. X
  1523. X
  1524. /* is it <string.h> or <strings.h>?   just declare what we need */
  1525. extern int strlen();
  1526. extern char *strcpy();
  1527. extern char *malloc();
  1528. X
  1529. #define MAXBUF    1024
  1530. #define BACKSPACE 0x08    /* ^H */
  1531. #define SPACE    ' '
  1532. X
  1533. struct hist {
  1534. X    char *line;
  1535. X    struct hist *prev;
  1536. X    struct hist *next;
  1537. };
  1538. X
  1539. static struct hist *history = NULL;  /* no history yet */
  1540. static struct hist *cur_entry = NULL;
  1541. X
  1542. static char cur_line[MAXBUF];  /* current contents of the line */
  1543. static int cur_pos = 0;    /* current position of the cursor */
  1544. static int max_pos = 0;    /* maximum character position */
  1545. X
  1546. X
  1547. void add_history();
  1548. static void fix_line();
  1549. static void redraw_line();
  1550. static void clear_line();
  1551. static void clear_eoline();
  1552. static void copy_line();
  1553. static void set_termio();
  1554. static void reset_termio();
  1555. X
  1556. char *
  1557. readline(prompt)
  1558. char *prompt;
  1559. {
  1560. X
  1561. X    char cur_char;
  1562. X    char *new_line;
  1563. X
  1564. X    /* set the termio so we can do our own input processing */
  1565. X    set_termio();
  1566. X
  1567. X    /* print the prompt */
  1568. X    fputs(prompt, stderr);
  1569. X    cur_line[0] = '\0';
  1570. X    cur_pos = 0;
  1571. X    max_pos = 0;
  1572. X    cur_entry = NULL;
  1573. X
  1574. X    /* get characters */
  1575. X    for(;;) {
  1576. X        cur_char = getc(stdin);
  1577. X        if(isprint(cur_char)) {
  1578. X            int i;
  1579. X            for(i=max_pos; i>cur_pos; i--) {
  1580. X                cur_line[i] = cur_line[i-1];
  1581. X            }
  1582. X            putc(cur_char, stderr);
  1583. X            cur_line[cur_pos] = cur_char;
  1584. X            cur_pos += 1;
  1585. X            max_pos += 1;
  1586. X            if (cur_pos < max_pos)
  1587. X                fix_line();
  1588. X            cur_line[max_pos] = '\0';
  1589. X
  1590. X        /* else interpret unix terminal driver characters */
  1591. #ifdef VERASE
  1592. X        } else if(cur_char == orig_termio.c_cc[VERASE] ){  /* DEL? */
  1593. X            if(cur_pos > 0) {
  1594. X                int i;
  1595. X                cur_pos -= 1;
  1596. X                putc(BACKSPACE, stderr);
  1597. X                for(i=cur_pos; i<max_pos; i++)
  1598. X                    cur_line[i] = cur_line[i+1];
  1599. X                max_pos -= 1;
  1600. X                fix_line();
  1601. X            }
  1602. #endif /* VERASE */
  1603. #ifdef VEOF
  1604. X        } else if(cur_char == orig_termio.c_cc[VEOF] ){   /* ^D? */
  1605. X            if(max_pos == 0) {
  1606. X                reset_termio();
  1607. X                return((char *)NULL);
  1608. X            }
  1609. X            if((cur_pos < max_pos)&&(cur_char == 004)) { /* ^D */
  1610. X                int i;
  1611. X                for(i=cur_pos; i<max_pos; i++)
  1612. X                    cur_line[i] = cur_line[i+1];
  1613. X                max_pos -= 1;
  1614. X                fix_line();
  1615. X            }
  1616. #endif /* VEOF */
  1617. #ifdef VKILL
  1618. X        } else if(cur_char == orig_termio.c_cc[VKILL] ){  /* ^U? */
  1619. X            clear_line(prompt);
  1620. #endif /* VKILL */
  1621. #ifdef VWERASE
  1622. X        } else if(cur_char == orig_termio.c_cc[VWERASE] ){  /* ^W? */
  1623. X            while((cur_pos > 0) &&
  1624. X                  (cur_line[cur_pos-1] == SPACE)) {
  1625. X                cur_pos -= 1;
  1626. X                putc(BACKSPACE, stderr);
  1627. X            }
  1628. X            while((cur_pos > 0) &&
  1629. X                  (cur_line[cur_pos-1] != SPACE)) {
  1630. X                cur_pos -= 1;
  1631. X                putc(BACKSPACE, stderr);
  1632. X            }
  1633. X            clear_eoline();
  1634. X            max_pos = cur_pos;
  1635. #endif /* VWERASE */
  1636. #ifdef VREPRINT
  1637. X        } else if(cur_char == orig_termio.c_cc[VREPRINT] ){  /* ^R? */
  1638. X            putc('\n',stderr); /* go to a fresh line */
  1639. X            redraw_line(prompt);
  1640. #else
  1641. #ifdef VRPRNT   /* on Ultrix VREPRINT is VRPRNT */
  1642. X        } else if(cur_char == orig_termio.c_cc[VRPRNT] ){  /* ^R? */
  1643. X            putc('\n',stderr); /* go to a fresh line */
  1644. X            redraw_line(prompt);
  1645. #endif /* VRPRNT */
  1646. #endif /* VREPRINT */
  1647. #ifdef VSUSP
  1648. X        } else if(cur_char == orig_termio.c_cc[VSUSP]) {
  1649. X            reset_termio();
  1650. X            kill(0, SIGTSTP);
  1651. X
  1652. X            /* process stops here */
  1653. X
  1654. X            set_termio();
  1655. X            /* print the prompt */
  1656. X            redraw_line(prompt);
  1657. #endif /* VSUSP */
  1658. X        } else {
  1659. X            /* do normal editing commands */
  1660. X            /* some of these are also done above */
  1661. X            int i;
  1662. X            switch(cur_char) {
  1663. X                case EOF:
  1664. X                reset_termio();
  1665. X                return((char *)NULL);
  1666. X                case 001: /* ^A */
  1667. X                while(cur_pos > 0) {
  1668. X                    cur_pos -= 1;
  1669. X                    putc(BACKSPACE, stderr);
  1670. X                }
  1671. X                break;
  1672. X                case 002: /* ^B */
  1673. X                if(cur_pos > 0) {
  1674. X                    cur_pos -= 1;
  1675. X                    putc(BACKSPACE, stderr);
  1676. X                }
  1677. X                break;
  1678. X                case 005: /* ^E */
  1679. X                while(cur_pos < max_pos) {
  1680. X                    putc(cur_line[cur_pos], stderr);
  1681. X                    cur_pos += 1;
  1682. X                }
  1683. X                break;
  1684. X                case 006: /* ^F */
  1685. X                if(cur_pos < max_pos) {
  1686. X                    putc(cur_line[cur_pos], stderr);
  1687. X                    cur_pos += 1;
  1688. X                }
  1689. X                break;
  1690. X                case 013: /* ^K */
  1691. X                clear_eoline();
  1692. X                max_pos = cur_pos;
  1693. X                break;
  1694. X                case 020: /* ^P */
  1695. X                if(history != NULL) {
  1696. X                    if(cur_entry == NULL) {
  1697. X                        cur_entry = history;
  1698. X                        clear_line(prompt);
  1699. X                        copy_line(cur_entry->line);
  1700. X                    } else if(cur_entry->prev != NULL) {
  1701. X                        cur_entry = cur_entry->prev;
  1702. X                        clear_line(prompt);
  1703. X                        copy_line(cur_entry->line);
  1704. X                    }
  1705. X                }
  1706. X                break;
  1707. X                case 016: /* ^N */
  1708. X                if(cur_entry != NULL) {
  1709. X                    cur_entry = cur_entry->next;
  1710. X                    clear_line(prompt);
  1711. X                    if(cur_entry != NULL) 
  1712. X                        copy_line(cur_entry->line);
  1713. X                    else
  1714. X                        cur_pos = max_pos = 0;
  1715. X                }
  1716. X                break;
  1717. X                case 014: /* ^L */
  1718. X                case 022: /* ^R */
  1719. X                putc('\n',stderr); /* go to a fresh line */
  1720. X                redraw_line(prompt);
  1721. X                break;
  1722. X                case 0177: /* DEL */
  1723. X                case 010: /* ^H */
  1724. X                if(cur_pos > 0) {
  1725. X                    cur_pos -= 1;
  1726. X                    putc(BACKSPACE, stderr);
  1727. X                    for(i=cur_pos; i<max_pos; i++)
  1728. X                        cur_line[i] = cur_line[i+1];
  1729. X                    max_pos -= 1;
  1730. X                    fix_line();
  1731. X                }
  1732. X                break;
  1733. X                case 004: /* ^D */
  1734. X                if(max_pos == 0) {
  1735. X                    reset_termio();
  1736. X                    return((char *)NULL);
  1737. X                }
  1738. X                if(cur_pos < max_pos) {
  1739. X                    for(i=cur_pos; i<max_pos; i++)
  1740. X                        cur_line[i] = cur_line[i+1];
  1741. X                    max_pos -= 1;
  1742. X                    fix_line();
  1743. X                }
  1744. X                break;
  1745. X                case 025:  /* ^U */
  1746. X                clear_line(prompt);
  1747. X                break;
  1748. X                case 027:  /* ^W */
  1749. SHAR_EOF
  1750. true || echo 'restore of gnuplot/readline.c failed'
  1751. fi
  1752. echo 'End of  part 11'
  1753. echo 'File gnuplot/readline.c is continued in part 12'
  1754. echo 12 > _shar_seq_.tmp
  1755. exit 0
  1756.  
  1757. exit 0 # Just in case...
  1758. -- 
  1759. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1760. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1761. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1762. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1763.