Path: utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!lll-winken!xanth!cs.odu.edu!Amiga-Request From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) Newsgroups: comp.sources.amiga Subject: v90i007: plplot 2.6 - C library for making scientific plots, Part06/12 Message-ID: <10979@xanth.cs.odu.edu> Date: 14 Jan 90 23:29:27 GMT Sender: tadguy@cs.odu.edu Reply-To: Anthony M. Richardson Lines: 1276 Approved: tadguy@cs.odu.edu (Tad Guy) Submitted-by: Anthony M. Richardson Posting-number: Volume 90, Issue 007 Archive-name: applications/plplot-2.6/part06 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'Amiga/Amiga.c' <<'END_OF_FILE' X /* Amiga PLPLOT window routines. */ X X#include "plplot.h" X#include "plamiga.h" X#include X#ifdef AZTEC_C X /* Psuedo-ANSI compatibility */ X #define remove(name) unlink(name) X /* Lattice defines these for you */ X struct IntuitionBase *IntuitionBase; X struct GfxBase *GfxBase; X#endif X XPLINT XOffset, YOffset, PLWidth, PLHeight; XPLINT MaxPLWidth, MaxPLHeight; XPLINT InitPLWidth, InitPLHeight; Xextern PLINT MaxColors; X XFILE *PlotFile; Xshort fbuffer; Xstatic PLINT CurColor; X Xvoid amisetup(xmm, ymm, xpg, ypg) XPLINT xpg, ypg; XPLFLT xmm, ymm; X{ X} X Xvoid amiselect(ori, file) XPLINT ori; Xchar *file; X{ X} X X/* amiini is the PLPLOT window initialization routine. It opens the X necessary libraries and the window. */ Xvoid amiinit() X{ X PLFLT Initdpmx, Initdpmy; X X /* Scan defaults file */ X GetPLDefs(); X /* Open the required libraries. */ X OpenLibs(); X /* Open window for graphics */ X OpenPLWind(); X /* Set up virtual screen width and height */ X /* Virtual screen is 25 times the actual one. */ X MaxPLWidth = PLScreen->Width - PLWindow->BorderLeft - PLWindow->BorderRight - 16; X MaxPLHeight = PLScreen->Height - PLWindow->BorderTop - PLWindow->BorderBottom - 16; X InitPLWidth = MaxPLWidth*25; X InitPLHeight = MaxPLHeight*25; X Initdpmx = GfxBase->NormalDPMX; X Initdpmy = GfxBase->NormalDPMY; X if(PLScreen->ViewPort.Modes & HIRES) X Initdpmx *= 2.; X if(PLScreen->ViewPort.Modes & LACE) X Initdpmy *= 2.; X setpxl((PLFLT)(Initdpmx/40.),(PLFLT)(Initdpmy/40.)); X setphy(0, (InitPLWidth-1), 0, (InitPLHeight-1)); X scol(1); X swid(1); X smod(1); X X SetAPen(PLWRPort,1); X SetDrMd(PLWRPort,JAM1); X setlimits(); X} X Xvoid setlimits() X{ X XOffset = PLWindow->BorderLeft+8; X YOffset = PLWindow->BorderTop+8; X PLWidth = PLWindow->Width - XOffset - PLWindow->BorderRight - 8; X PLHeight = PLWindow->Height - YOffset - PLWindow->BorderBottom - 8; X if(PLCurPrefs.WinType & PLASP) { X if(PLWidth*MaxPLHeight > PLHeight*MaxPLWidth) { X PLWidth = (MaxPLWidth*PLHeight)/MaxPLHeight; X XOffset += (PLWindow->Width - PLWidth - PLWindow->BorderLeft - X PLWindow->BorderRight)/2; X } X else { X PLHeight = (MaxPLHeight*PLWidth)/MaxPLWidth; X YOffset += (PLWindow->Height - PLHeight - PLWindow->BorderTop - X PLWindow->BorderBottom)/2; X } X } X} X Xvoid amitidy() X{ X void beepw(); X X beepw(); X ClosePLWind(); X CloseLibs(); X if(fbuffer) { X fclose(PlotFile); X remove(PLOTBFFR); X } X} X Xvoid OpenLibs() X{ X IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0L); X if( IntuitionBase == NULL ) { X puts("\nError opening Intuition library."); X goto IntError; X } X X GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0L); X if( GfxBase == NULL ) { X puts("\nError opening Graphics library."); X goto GfxError; X } X X return; X XGfxError: X CloseLibrary((struct Library *)IntuitionBase); XIntError: X pl_exit(); X} X Xvoid CloseLibs() X{ X CloseLibrary((struct Library *)GfxBase); X CloseLibrary((struct Library *)IntuitionBase); X} X Xvoid amitext() X{ X} X Xvoid amigraph() X{ X} X Xvoid amiclear() X{ X void beepw(), setpen(); X X beepw(); X setpen(0); X RectFill(PLWRPort,XOffset,YOffset,PLWidth+XOffset,PLHeight+YOffset); X setpen(CurColor); X if(fbuffer) { X fclose(PlotFile); X remove(PLOTBFFR); X } X} X Xstatic PLINT xold, yold; X Xvoid amipage() X{ X fbuffer = 0; X if(PLCurPrefs.WinType & PLBUFF) { X PlotFile = fopen(PLOTBFFR,"w+"); X if(PlotFile == NULL) { X fprintf(stderr,"\nError opening plot data storage file.\n"); X ClosePLWind(); X CloseLibs(); X exit(1); X } X fbuffer = 1; X } X xold = -100000; yold = -100000; X} X X Xvoid amiline(x1, y1, x2, y2) XPLINT x1, y1, x2, y2; X{ X short comm, xshrt, yshrt; X X /* Check for intuition messages */ X procmess(); X if(x1 == xold && y1 == yold) { X comm = PEND; X xshrt = x2; X yshrt = y2; X if(fbuffer) { X (void)fwrite((char *)&comm,sizeof(short),1,PlotFile); X (void)fwrite((char *)&xshrt,sizeof(short),1,PlotFile); X (void)fwrite((char *)&yshrt,sizeof(short),1,PlotFile); X } X PLDraw((PLWidth*x2)/InitPLWidth,(PLHeight*y2)/InitPLHeight); X } X else { X comm = PENU; X xshrt = x1; X yshrt = y1; X if(fbuffer) { X (void)fwrite((char *)&comm,sizeof(short),1,PlotFile); X (void)fwrite((char *)&xshrt,sizeof(short),1,PlotFile); X (void)fwrite((char *)&yshrt,sizeof(short),1,PlotFile); X } X comm = PEND; X xshrt = x2; X yshrt = y2; X if(fbuffer) { X (void)fwrite((char *)&comm,sizeof(short),1,PlotFile); X (void)fwrite((char *)&xshrt,sizeof(short),1,PlotFile); X (void)fwrite((char *)&yshrt,sizeof(short),1,PlotFile); X } X PLMove((PLWidth*x1)/InitPLWidth,(PLHeight*y1)/InitPLHeight); X PLDraw((PLWidth*x2)/InitPLWidth,(PLHeight*y2)/InitPLHeight); X } X xold = x2; X yold = y2; X} X Xvoid PLMove(x, y) XPLINT x, y; X{ X PLINT xsc, ysc; X X xsc = XOffset + x; X ysc = YOffset + PLHeight - y; X Move(PLWRPort,xsc,ysc); X} X Xvoid PLDraw(x, y) XPLINT x, y; X{ X PLINT xsc, ysc; X X xsc = XOffset + x; X ysc = YOffset + PLHeight - y; X Draw(PLWRPort,xsc,ysc); X} X Xvoid remakeplot() X{ X long cxy, x1, y1; X long x, y; X void setpen(); X X setpen(0); X RectFill(PLWRPort,PLWindow->BorderLeft,PLWindow->BorderTop, X PLWindow->Width-PLWindow->BorderRight, X PLWindow->Height-PLWindow->BorderBottom); X X setpen(1); X X if(fbuffer == 0) X return; X prepupdate(); X X while(!getpoint(&cxy, &x1, &y1)) { X if(cxy == PENU) { X x = ((long)PLWidth*(long)x1)/InitPLWidth; X y = ((long)PLHeight*(long)y1)/InitPLHeight; X PLMove((PLINT)x, (PLINT)y); X } X else if(cxy == PEND) { X x = ((long)PLWidth*(long)x1)/InitPLWidth; X y = ((long)PLHeight*(long)y1)/InitPLHeight; X PLDraw((PLINT)x, (PLINT)y); X } X else if(cxy == SPEN) { X CurColor = x1; X if(x1 >= MaxColors) X CurColor = 1; X setpen((PLINT)CurColor); X } X } X X finiupdate(); X DisplayBeep(PLScreen); X} X Xvoid amiwidth(width) XPLINT width; X{ X short shwid, comm; X X if(width>=1 && width <=3) { X comm = PWID; X shwid = width; X if(fbuffer) { X fwrite((char *)&comm,sizeof(short),1,PlotFile); X fwrite((char *)&shwid,sizeof(short),1,PlotFile); X } X } X} X Xvoid amicolor(color) XPLINT color; X{ X short shcol, comm; X void setpen(); X X if(color >= 0 && color < 16) { X shcol = color; X comm = SPEN; X if(fbuffer) { X fwrite((char *)&comm,sizeof(short),1,PlotFile); X fwrite((char *)&shcol,sizeof(short),1,PlotFile); X } X if(color >= MaxColors) X color = 1; X CurColor = color; X setpen(color); X } X} X Xstatic void setpen(color) XPLINT color; X{ X SetAPen(PLWRPort,color); X} X Xstatic void beepw() X{ X DisplayBeep(PLScreen); X eventwait(); X} END_OF_FILE if test 6991 -ne `wc -c <'Amiga/Amiga.c'`; then echo shar: \"'Amiga/Amiga.c'\" unpacked with wrong size! fi # end of 'Amiga/Amiga.c' fi if test -f 'drivers/postscript.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'drivers/postscript.c'\" else echo shar: Extracting \"'drivers/postscript.c'\" \(9517 characters\) sed "s/^X//" >'drivers/postscript.c' <<'END_OF_FILE' X/* This file contains the PostScript device dependent subroutines for */ X/* use with plplot. */ X X#include "plplot.h" X#include X X#define LINELENGTH 70 X#define COPIES 1 X#define XSIZE 540 X#define YSIZE 720 X#define XPSSIZE 3000 X#define YPSSIZE 2250 X#define XOFFSET 576 X#define YOFFSET 36 X#define XSCALE 100 X#define YSCALE 100 X#define LINESCALE 100 X#define ANGLE 90 X#define PSX XPSSIZE-1 X#define PSY YPSSIZE-1 X Xchar *getdate(); Xstatic int numpages = 0; Xstatic int linepos = 0; X Xstatic FILE *OutFile; Xstatic PLINT orient; Xstatic PLINT select=0; Xstatic char FileName[80]; X Xvoid pssetup(xdpi, ydpi, xwid, ywid) XPLINT xwid, ywid; XPLFLT xdpi, ydpi; X{ X} X Xvoid psselect(ori, name) XPLINT ori; Xchar *name; X{ X orient = ori; X strncpy(FileName,name,sizeof(FileName)-1); X FileName[sizeof(FileName)-1] = '\0'; X select = 1; X} X X X/* Open file. Set up for graphics. */ Xvoid psinit() X{ X char line[80]; X X if(!select) { X printf("Landscape or portrait orientation? (0 or 1) "); X fgets(line,sizeof(line),stdin); X if(sscanf(line,"%d",&orient) != 1) X orient = 0; X } X X /* setpxl() sets the dots/mm in the x and y directions */ X setpxl((PLFLT)11.81,(PLFLT)11.81); /* 300 dpi */ X X /* setphy() sets the device coordinates. These are integer */ X /* values. Set up for landscape orientation (long axis of page in the */ X /* x direction). Origin is in the lower left hand corner. */ X if(!orient) X setphy(0,PSX,0,PSY); X else X setphy(0,PSY,0,PSX); X X /* Set default pen color using scol(color). */ X /* Any default pen color can be used but a black pen is probably best. */ X scol(1); X X /* Set default pen width using swid(width) */ X swid(1); X X /* Set device interaction mode using smod(mode). Set mode to 0 for */ X /* a noninteractive device, Unless you are writing your */ X /* own Amiga screen driver mode should be 0. */ X smod(0); X X /* Well that's all the information plplot needs. Let's prompt for a */ X /* graphics file name. */ X for(;;) { X if(!select) { X printf("Enter PostScript graphics file name. "); X fgets(line,sizeof(line),stdin); X if(sscanf(line,"%s",FileName)!=1) X continue; X } X X if (!(OutFile = fopen(FileName,"w"))) { X fprintf(stderr,"Can't open %s.\n",FileName); X select = 0; X } X else X break; X } X select = 0; X X /* Header comments into PostScript file */ X X fprintf(OutFile,"%%!PS-Adobe-2.0 EPSF-2.0\n"); X fprintf(OutFile,"%%%%BoundingBox: 36 36 540 720\n"); X fprintf(OutFile,"%%%%Title: %s\n", FileName); X fprintf(OutFile,"%%%%Creator: PLPLOT Version 2.0\n"); X fprintf(OutFile,"%%%%CreationDate: %s\n", getdate()); X fprintf(OutFile,"%%%%Pages: (atend)\n"); X fprintf(OutFile,"%%%%EndComments\n\n"); X X /* Definitions */ X X fprintf(OutFile, "/PSSave save def\n"); /* save VM state */ X fprintf(OutFile, "/PSDict 200 dict def\n"); /* define a dictionary */ X fprintf(OutFile, "PSDict begin\n"); /* start using it */ X fprintf(OutFile, "/@restore /restore load def\n"); X fprintf(OutFile, "/restore\n"); X fprintf(OutFile, " {vmstatus pop\n"); X fprintf(OutFile, " dup @VMused lt {pop @VMused} if\n"); X fprintf(OutFile, " exch pop exch @restore /@VMused exch def\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@pri\n"); X fprintf(OutFile, " {\n"); X fprintf(OutFile, " ( ) print\n"); X fprintf(OutFile, " ( ) cvs print\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@copies\n"); /* n @copies - */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " /#copies exch def\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@start\n"); /* - @start - -- start everything */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " vmstatus pop /@VMused exch def pop\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@end\n"); /* - @end - -- finished */ X fprintf(OutFile, " {(VM Used: ) print @VMused @pri\n"); X fprintf(OutFile, " (. Unused: ) print vmstatus @VMused sub @pri pop pop\n"); X fprintf(OutFile, " (\\n) print flush\n"); X fprintf(OutFile, " end\n"); X fprintf(OutFile, " PSSave restore\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/bop\n"); /* bop - -- begin a new page */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " /SaveImage save def\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/eop\n"); /* - eop - -- end a page */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " showpage\n"); X fprintf(OutFile, " SaveImage restore\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@line\n"); /* set line parameters */ X fprintf(OutFile, " {0 setlinecap\n"); X fprintf(OutFile, " 0 setlinejoin\n"); X fprintf(OutFile, " 1 setmiterlimit\n"); X fprintf(OutFile, " } def\n"); X /* d @hsize - horizontal clipping dimension */ X fprintf(OutFile, "/@hsize {/hs exch def} def\n"); X fprintf(OutFile, "/@vsize {/vs exch def} def\n"); X /* d @hoffset - shift for the plots */ X fprintf(OutFile, "/@hoffset {/ho exch def} def\n"); X fprintf(OutFile, "/@voffset {/vo exch def} def\n"); X /* s @hscale - scale factors */ X fprintf(OutFile, "/@hscale {100 div /hsc exch def} def\n"); X fprintf(OutFile, "/@vscale {100 div /vsc exch def} def\n"); X /* s @lscale - linewidth scale factor */ X fprintf(OutFile, "/@lscale {100 div /lin exch def} def\n"); X /* a @angle - rotation angle */ X fprintf(OutFile, "/@angle {/ang exch def} def\n"); X fprintf(OutFile, "/@SetPlot\n"); /* setup user specified offsets, */ X fprintf(OutFile, " {\n"); /* scales, sizes for clipping */ X fprintf(OutFile, " ho vo translate\n"); X fprintf(OutFile, " XScale YScale scale\n"); X fprintf(OutFile, " ang rotate\n"); X fprintf(OutFile, " lin lw mul setlinewidth\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/XScale\n"); /* setup x scale */ X fprintf(OutFile, " {hsc hs mul %d div} def\n", YPSSIZE); X fprintf(OutFile, "/YScale\n"); /* setup y scale */ X fprintf(OutFile, " {vsc vs mul %d div} def\n", XPSSIZE); X fprintf(OutFile, "/lw 3 def\n"); /* default line width */ X fprintf(OutFile, "/M {moveto} def\n"); X fprintf(OutFile, "/D {lineto} def\n"); X fprintf(OutFile, "/S {stroke} def\n"); X fprintf(OutFile, "/Z {stroke newpath} def\n"); X fprintf(OutFile, "end\n\n"); /* end of dictionary definition */ X X /* Set up the plots */ X X fprintf(OutFile, "PSDict begin\n"); X fprintf(OutFile, "@start\n"); X fprintf(OutFile, "%d @copies\n", COPIES); X fprintf(OutFile, "@line\n"); X fprintf(OutFile, "%d @hsize\n", XSIZE); X fprintf(OutFile, "%d @vsize\n", YSIZE); X fprintf(OutFile, "%d @hoffset\n", XOFFSET); X fprintf(OutFile, "%d @voffset\n", YOFFSET); X fprintf(OutFile, "%d @hscale\n", XSCALE); X fprintf(OutFile, "%d @vscale\n", YSCALE); X fprintf(OutFile, "%d @lscale\n", LINESCALE); X fprintf(OutFile, "%d @angle\n", ANGLE); X fprintf(OutFile, "@SetPlot\n\n"); X fprintf(OutFile, "bop\n"); X fprintf(OutFile, "%%%%Page: %d %d\n", numpages+1, numpages+1); X} X X/* Sets the printer to text mode */ Xvoid pstext() X{ X} X X/* Sets the printer to graphics mode */ Xvoid psgraph() X{ X} X X/* Form feed */ Xvoid psclear() X{ X fprintf(OutFile," S\neop\nbop\n"); X} X Xstatic PLINT xlast, ylast; X Xvoid pspage() X{ X numpages++; X fprintf(OutFile, "%%%%Page: %d %d\n", numpages+1, numpages+1); X linepos = 0; X xlast = -100000; ylast = -100000; X} X X/* May put something here someday */ Xvoid pscolor(colour) Xint colour; X{ X} X X/* I don't know what to put here - Tony */ Xvoid pswidth() X{ X} X Xvoid psline(x1,y1,x2,y2) XPLINT x1,y1,x2,y2; X{ X if (linepos + 21 > LINELENGTH) { X putc('\n', OutFile); X linepos = 0; X } else X putc(' ', OutFile); X X if(!orient) { X if(x1 == xlast && y1 == ylast) X fprintf(OutFile, "%ld %ld D", x2, y2); X else X fprintf(OutFile, "Z %ld %ld M %ld %ld D", x1, y1, x2, y2); X } X else { X if(x1 == xlast && y1 == ylast) X fprintf(OutFile, "%ld %ld D", PSX-y2, x2); X else X fprintf(OutFile, "Z %ld %ld M %ld %ld D", PSX-y1,x1,PSX-y2,x2); X } X X xlast = x2; X ylast = y2; X linepos += 21; X} X X/* Close graphics file */ Xvoid pstidy() X{ X fprintf(OutFile," S\neop\n"); X numpages++; X fprintf(OutFile, "@end\n\n"); X fprintf(OutFile, "%%%%Trailer\n"); X fprintf(OutFile, "%%%%Pages: %d\n", numpages); X fclose(OutFile); X numpages = 0; X linepos = 0; X} X X/* Get the date and time */ Xstatic char *getdate() X{ X int len; X long t, time(); X char *p, *ctime(); X X t = time((long *) 0); X p = ctime(&t); X len = strlen(p); X *(p + len - 1) = '\0'; /* zap the newline character */ X return p; X} END_OF_FILE if test 9517 -ne `wc -c <'drivers/postscript.c'`; then echo shar: \"'drivers/postscript.c'\" unpacked with wrong size! fi # end of 'drivers/postscript.c' fi if test -f 'fonts/plstnd.fnt.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts/plstnd.fnt.uu'\" else echo shar: Extracting \"'fonts/plstnd.fnt.uu'\" \(8058 characters\) sed "s/^X//" >'fonts/plstnd.fnt.uu' <<'END_OF_FILE' Xbegin 644 plstnd.fnt XM"R_W#/<)``SX]T````P(]T``^_X%_D!`]PSU"OD,^?=``/D,`@P%"P8*!P@'_ XM!@8$!0,"`D``^0("`@4!!@`'_@?[!OD%^`+W^?=`0/<,]@L(!P<)!0L##/\,@ XM_0O["?H'^03Y__K\^_K]^/_W`_<%^`?Z"/Q`0/<,]0KY#/GW0`#Y#``,`PL%O XM"08'!P0'_P;\!?H#^`#W^?=`0/<,]@GZ#/KW0`#Z#`<,0`#Z`@("0`#Z]P?W+ XM0$#W#/8(^@SZ]T``^@P'#$``^@("`D!`]PSV"P@'!PD%"P,,_PS]"_L)^@?YD XM!/G_^OS[^OWX__<#]P7X!_H(_`C_0``#_PC_0$#W#/4+^0SY]T``!PP']T``G XM^0('`D!`]PS\!``,`/=`0/<,^`@$#`3\`_D"^`#W_O?\^/OY^OSZ_D!`]PSU- XM"OD,^?=```<,^?Y``/X#!_=`0/<,]@?Z#/KW0`#Z]P;W0$#W#/0,^`SX]T``C XM^`P`]T``"`P`]T``"`P(]T!`]PSU"_D,^?=``/D,!_=```<,!_=`0/<,]0O^F XM#/P+^@GY!_@$^/_Y_/KZ_/C^]P+W!/@&^@?\"/\(!`<'!@D$"P(,_@Q`0/<,M XM]0KY#/GW0`#Y#`(,!0L&"@<(!P4&`P4"`@'Y`4!`]PSU"_X,_`OZ"?D'^`3X: XM__G\^OK\^/[W`O<$^`;Z!_P(_P@$!P<&"00+`@S^#$```?L']4!`]PSU"OD,? XM^?=``/D,`@P%"P8*!P@'!@8$!0,"`OD"0````@?W0$#W#/8*!PD%"P(,_@S[& XM"_D)^0?Z!?L$_0,#`04`!O\'_0?Z!?@"]_[W^_CY^D!`]PSX"``,`/=``/D,Z XM!PQ`0/<,]0OY#/G]^OK\^/_W`?<$^`;Z!_T'#$!`]PSW"?@,`/=```@,`/=`# XM0/<,]`SV#/OW0```#/OW0```#`7W0``*#`7W0$#W#/8*^0P']T``!PSY]T!`8 XM]PSW"?@,``(`]T``"`P``D!`]PSV"@<,^?=``/D,!PQ``/GW!_=`0/<,]PD`E XM#/CW0```#`CW0`#[_@7^0$#W#/4*^0SY]T``^0P"#`4+!@H'"`<&!@0%`P("> XM0`#Y`@("!0$&``?^!_L&^07X`O?Y]T!`]PSV!_H,^O=``/H,!@Q`0/<,]PD`) XM#/CW0```#`CW0`#X]PCW0$#W#/8)^@SZ]T``^@P'#$``^@("`D``^O<']T!`U XM]PSV"@<,^?=``/D,!PQ``/GW!_=`0/<,]0OY#/GW0``'#`?W0`#Y`@<"0$#W0 XM#/4+_@S\"_H)^0?X!/C_^?SZ^OSX_O<"]P3X!OH'_`C_"`0'!P8)!`L"#/X,T XM0`#]`@,"0$#W#/P$``P`]T!`]PSU"OD,^?=```<,^?Y``/X#!_=`0/<,]PD`- XM#/CW0```#`CW0$#W#/0,^`SX]T``^`P`]T``"`P`]T``"`P(]T!`]PSU"_D,= XM^?=``/D,!_=```<,!_=`0/<,]PGY#`<,0`#]`@,"0`#Y]P?W0$#W#/4+_@S\: XM"_H)^0?X!/C_^?SZ^OSX_O<"]P3X!OH'_`C_"`0'!P8)!`L"#/X,0$#W#/4+E XM^0SY]T``!PP']T``^0P'#$!`]PSU"OD,^?=``/D,`@P%"P8*!P@'!08#!0("U XM`?D!0$#W#/<)^0P``OGW0`#Y#`<,0`#Y]P?W0$#W#/@(``P`]T``^0P'#$!`9 XM]PSW"?D'^0GZ"_L,_0S^"_\)``4`]T``!P<'"08+!0P##`(+`0D`!4!`]PSV+ XM"@`,`/=``/X'^P;Z!?D#^0#Z_OO]_OP"_`7]!OX'``<#!@4%!@('_@=`0/<,M XM]@KY#`?W0`#Y]P<,0$#W#/4+``P`]T``]P;X!OD%^@'[__S^__T!_03^!?\&Z XM`0<%"`8)!D!`]PSV"OGW_??Z_OD"^0;Z"?P+_PP!#`0+!@D'!@<"!OX#]P?W5 XM0$#W#/<*!@4&]T``!@($!`(%_P7]!/L"^O_Z_?OZ_?C_]P+W!/@&^D!`]PSVC XM"?H,^O=``/H"_`3^!0$%`P0%`@;_!OT%^@/X`??^]_SX^OI`0/<,]PD&`@0$] XM`@7_!?T$^P+Z__K]^_K]^/_W`O<$^`;Z0$#W#/<*!@P&]T``!@($!`(%_P7]Y XM!/L"^O_Z_?OZ_?C_]P+W!/@&^D!`]PSW"?K_!O\&`04#!`0"!?\%_03[`OK_@ XM^OW[^OWX__<"]P3X!OI`0/<,^P<%#`,,`0L`"`#W0`#]!00%0$#W#/<*!@4&< XM]07R!/$"\/_P_?%```8"!`0"!?\%_03[`OK_^OW[^OWX__<"]P3X!OI`0/<,1 XM]PK[#/OW0`#[`?X$``4#!04$!@$&]T!`]PS\!/\,``L!#``-_PQ````%`/=`, XM0/<,^P4`#`$+`@P!#0`,0``!!0'T`/'^\/SP0$#W#/<(^PS[]T``!07[^T``$ XM__\&]T!`]PS\!``,`/=`0/<,\0_U!?7W0`#U`?@$^@7]!?\$``$`]T````$#< XM!`4%"`4*!`L!"_=`0/<,]PK[!?OW0`#[`?X$``4#!04$!@$&]T!`]PSW"O\%- XM_03[`OK_^OW[^OWX__<"]P3X!OH'_0?_!@($!`(%_P5`0/<,]@GZ!?KP0`#Z- XM`OP$_@4!!0,$!0(&_P;]!?H#^`'W_O?\^/KZ0$#W#/<*!@4&\$``!@($!`(%, XM_P7]!/L"^O_Z_?OZ_?C_]P+W!/@&^D!`]PSY!OT%_?=``/W__@(`!`(%!05`0 XM0/<,^`D&`@4$`@7_!?P$^P+\`/[_`_X%_0;[!OH%^`+W__?\^/OZ0$#W#/L'T XM``P`^P'X`_<%]T``_04$!4!`]PSW"OL%^_O\^/[W`?<#^`;[0``&!0;W0$#W7 XM#/@(^@4`]T``!@4`]T!`]PSU"_@%_/=````%_/=````%!/=```@%!/=`0/<,Z XM^`G[!0;W0``&!?OW0$#W#/@(^@4`]T``!@4`]_[S_/'Z\/GP0$#W#/@)!@7[Q XM]T``^P4&!4``^_<&]T!`]PSV"_\%_03[`OH`^?WY^OKX_/?^]P#X`_L%_@<"V XM"`5``/\%`04"!`,"!?H&^`?W"/=`0/<,]PH##`$+_PG]!?P"^_[Z^/GP0``#: XM#`4,!PH'!P8%!00#`P`#0````P("!``%_@7[!/D#^`'W__?]^/SY^_Q`0/<,Q XM]PKX`OH$_`7]!?\$``,!``'\`/=```@%!P(&``#W_O/]\$!`]PSW"0(%_P7]S XM!/L"^O_Z_/OY_/C^]P#W`O@$^@7]!0`$`P(%``?_"?\+``P"#`0+!@E`0/<,E XM^`<"#``+_PK_"0`(`P<&!T``!@<"!?\#_`#[_?O[_/G^]P'U`O,"\0'P__#^N XM\D!`]PSV"OWYZ_[J`NH'ZPOM#N\1% XM\A/U%?D6_A8"%0<3"Q$.#A$+$P<5`A;^%D!`]PS7*?TI]RCS)^XEZ2+E'^$;2 XMWA?;$MD-V`G7`]?]V/?9\]ONWNGAY>7AZ=[NV_/9]]C]UP/7"=@-V1+;%]X;K XMX1_E(NDE[B?S*/ X+#`#V0`#U`0L!0$#_# X`` Xend Xsize 5726 END_OF_FILE if test 8058 -ne `wc -c <'fonts/plstnd.fnt.uu'`; then echo shar: \"'fonts/plstnd.fnt.uu'\" unpacked with wrong size! fi # end of 'fonts/plstnd.fnt.uu' fi if test -f 'fonts/plxtnd.idx.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts/plxtnd.idx.uu'\" else echo shar: Extracting \"'fonts/plxtnd.idx.uu'\" \(8444 characters\) sed "s/^X//" >'fonts/plxtnd.idx.uu' <<'END_OF_FILE' Xbegin 644 plxtnd.idx XM"[@``0`,`!X`*P`Y`$<`4@!C`&X`#^D/[A`#$!`0)!`X$$P05Q!K$'80@Q"+$)D0H1"M$+@0TA#S@ XM$081(!$U$4X18Q&`$8L1H!&K$<(1TA'Q$@42%!(I$CT21Q)9$G`2@!*6$J\2- XMQQ+@$O`3"A,=$S<351-T$X83G!._$],3]A0/%"@40A1?%'`4@A24%*D4O!37L XM%.T5!A4?`````````````!4W%5,5915^%94````````````````````````50 XMIQ6K%:\5LQ7'%\%\07S!?2%^88K XM"1@E&#L8;1BF````````&-\8\QD%&1`9+AE*&5H99AES&8(9CQF8&:`9J1FR' XM&DP``````% XM`````````````````````````````````````````````````````````!ZD" XM'JP>N![('MP>\!\('RP?4!^$'Z@?RP``````````````````````````````# XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````'^P@K XM`"`O(%$@<2")()\@R2#F(/0A"B$G(3RN,*Z8KO2O5*^0-Y@WHC>P-\`WT3?S-_LX"3@9."0X*3@_.%4X8SAQ.(TXW XMJ3BO.+4XNCC".,.JHZS#L`.QP[S XM/CMQ.ZL[USOE/!4\-3QO```\?3RE/-0\\3T//3`]3CUN/9P]PSWD/?X^&SXIJ XM/EL^C3ZC^L/]Y`"4`I0$Q`;T"5``````````!`( XMQT#50.E`_4$C04E!;4&!095!L$'$0=A""T(G0G]"Z```````````````````F XM````````````````````````````````````````````````````````````` XM````````````0PA#%D,J0SY#8$.&0ZI#OD/20^U$`4051#M$5T2O10H`````K XM``````````````````````````````````````````!%845X19%%KT7-1=U%F XM[4851CU&7T:!1I$`````````````````````````````````````````````. XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM`````````$;,1N)'$$.1[Q'U$?>1_1(#$@<2#A(3DAX2)5(QTCKO XM21A)*4E#25-);TF!290`````````````````````````````````````````: XM``````````````````````!)JDG22AI*14IR2J5*U4L,2T5+:$N,2\E+\TPF` XM3$Y,%.%TY#````````````````````````````9 XM````````````````````````````````````3G%.ETZ]3M]/!4\K3T5/=T^2E XM3ZQ/QD_>3^A0%%`O4%50>U"A4+A0[%#^41E1*5%%45=1:@``````````````G XM`````````````````````````````````````````````````%&`4:-1O%'4W XM4?=2$%(M4E52=5**4J12Q5+84P=3*5-(4VA3C5.G4[]3U5/R5`M4,51=5'\`7 XM````````````````````````````````````````````````````5*=4JU2O] XM5+-4WU3M51%50U5758Y5SE7<5B)68E9T5HY6L%;:5O17,%=*5V17K5?B5^Q8U XM!E@@6$E84UAE6'=8A%B<````````````````````````````````````````F XM`````%B\6,!8Q%C(6/19!5DQ6659<5F:6->`EXD7C9>4%Z"7IE>ME[47O1?&E\[7V9?A5^N7^L`````L XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````8!I@: XM0V!U8)Q@K&#$8.5A(F%.86MADF&Z8=)A\F(/8C5B3&)R8I!BHF*Z8O!C!V,@V XM8SYC7F.`8YUCQ&/?9`-D.```````````````````````````````````````Q XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` X1````````````````````````` X`` Xend Xsize 6002 END_OF_FILE if test 8444 -ne `wc -c <'fonts/plxtnd.idx.uu'`; then echo shar: \"'fonts/plxtnd.idx.uu'\" unpacked with wrong size! fi # end of 'fonts/plxtnd.idx.uu' fi if test -f 'unix/postscript.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'unix/postscript.c'\" else echo shar: Extracting \"'unix/postscript.c'\" \(9503 characters\) sed "s/^X//" >'unix/postscript.c' <<'END_OF_FILE' X/* This file contains the PostScript device dependent subroutines for */ X/* use with plplot. */ X X#include "plplot.h" X#include X X#define LINELENGTH 70 X#define COPIES 1 X#define XSIZE 540 X#define YSIZE 720 X#define XPSSIZE 3000 X#define YPSSIZE 2250 X#define XOFFSET 576 X#define YOFFSET 36 X#define XSCALE 100 X#define YSCALE 100 X#define LINESCALE 100 X#define ANGLE 90 X#define PSX XPSSIZE-1 X#define PSY YPSSIZE-1 X Xchar *getdate(); Xstatic int numpages = 0; Xstatic int linepos = 0; X Xstatic FILE *OutFile; Xstatic PLINT orient; Xstatic PLINT select=0; Xstatic char FileName[80]; X Xvoid pssetup(xdpi, ydpi, xwid, ywid) XPLINT xwid, ywid; XPLFLT xdpi, ydpi; X{ X} X Xvoid psselect(ori, name) XPLINT ori; Xchar *name; X{ X orient = ori; X strncpy(FileName,name,sizeof(FileName)-1); X FileName[sizeof(FileName)-1] = '\0'; X select = 1; X} X X X/* Open file. Set up for graphics. */ Xvoid psinit() X{ X char line[80]; X X if(!select) { X printf("Landscape or portrait orientation? (0 or 1) "); X fgets(line,sizeof(line),stdin); X if(sscanf(line,"%d",&orient) != 1) X orient = 0; X } X X /* setpxl() sets the dots/mm in the x and y directions */ X setpxl(11.81,11.81); /* 300 dpi */ X X /* setphy() sets the device coordinates. These are integer */ X /* values. Set up for landscape orientation (long axis of page in the */ X /* x direction). Origin is in the lower left hand corner. */ X if(!orient) X setphy(0,PSX,0,PSY); X else X setphy(0,PSY,0,PSX); X X /* Set default pen color using scol(color). */ X /* Any default pen color can be used but a black pen is probably best. */ X scol(1); X X /* Set default pen width using swid(width) */ X swid(1); X X /* Set device interaction mode using smod(mode). Set mode to 0 for */ X /* a noninteractive device, Unless you are writing your */ X /* own Amiga screen driver mode should be 0. */ X smod(0); X X /* Well that's all the information plplot needs. Let's prompt for a */ X /* graphics file name. */ X for(;;) { X if(!select) { X printf("Enter PostScript graphics file name. "); X fgets(line,sizeof(line),stdin); X if(sscanf(line,"%s",FileName)!=1) X continue; X } X X if (!(OutFile = fopen(FileName,"w"))) { X fprintf(stderr,"Can't open %s.\n",FileName); X select = 0; X } X else X break; X } X select = 0; X X /* Header comments into PostScript file */ X X fprintf(OutFile,"%%!PS-Adobe-2.0 EPSF-2.0\n"); X fprintf(OutFile,"%%%%BoundingBox: 36 36 540 720\n"); X fprintf(OutFile,"%%%%Title: %s\n", FileName); X fprintf(OutFile,"%%%%Creator: PLPLOT Version 2.0\n"); X fprintf(OutFile,"%%%%CreationDate: %s\n", getdate()); X fprintf(OutFile,"%%%%Pages: (atend)\n"); X fprintf(OutFile,"%%%%EndComments\n\n"); X X /* Definitions */ X X fprintf(OutFile, "/PSSave save def\n"); /* save VM state */ X fprintf(OutFile, "/PSDict 200 dict def\n"); /* define a dictionary */ X fprintf(OutFile, "PSDict begin\n"); /* start using it */ X fprintf(OutFile, "/@restore /restore load def\n"); X fprintf(OutFile, "/restore\n"); X fprintf(OutFile, " {vmstatus pop\n"); X fprintf(OutFile, " dup @VMused lt {pop @VMused} if\n"); X fprintf(OutFile, " exch pop exch @restore /@VMused exch def\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@pri\n"); X fprintf(OutFile, " {\n"); X fprintf(OutFile, " ( ) print\n"); X fprintf(OutFile, " ( ) cvs print\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@copies\n"); /* n @copies - */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " /#copies exch def\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@start\n"); /* - @start - -- start everything */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " vmstatus pop /@VMused exch def pop\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@end\n"); /* - @end - -- finished */ X fprintf(OutFile, " {(VM Used: ) print @VMused @pri\n"); X fprintf(OutFile, " (. Unused: ) print vmstatus @VMused sub @pri pop pop\n"); X fprintf(OutFile, " (\\n) print flush\n"); X fprintf(OutFile, " end\n"); X fprintf(OutFile, " PSSave restore\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/bop\n"); /* bop - -- begin a new page */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " /SaveImage save def\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/eop\n"); /* - eop - -- end a page */ X fprintf(OutFile, " {\n"); X fprintf(OutFile, " showpage\n"); X fprintf(OutFile, " SaveImage restore\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/@line\n"); /* set line parameters */ X fprintf(OutFile, " {0 setlinecap\n"); X fprintf(OutFile, " 0 setlinejoin\n"); X fprintf(OutFile, " 1 setmiterlimit\n"); X fprintf(OutFile, " } def\n"); X /* d @hsize - horizontal clipping dimension */ X fprintf(OutFile, "/@hsize {/hs exch def} def\n"); X fprintf(OutFile, "/@vsize {/vs exch def} def\n"); X /* d @hoffset - shift for the plots */ X fprintf(OutFile, "/@hoffset {/ho exch def} def\n"); X fprintf(OutFile, "/@voffset {/vo exch def} def\n"); X /* s @hscale - scale factors */ X fprintf(OutFile, "/@hscale {100 div /hsc exch def} def\n"); X fprintf(OutFile, "/@vscale {100 div /vsc exch def} def\n"); X /* s @lscale - linewidth scale factor */ X fprintf(OutFile, "/@lscale {100 div /lin exch def} def\n"); X /* a @angle - rotation angle */ X fprintf(OutFile, "/@angle {/ang exch def} def\n"); X fprintf(OutFile, "/@SetPlot\n"); /* setup user specified offsets, */ X fprintf(OutFile, " {\n"); /* scales, sizes for clipping */ X fprintf(OutFile, " ho vo translate\n"); X fprintf(OutFile, " XScale YScale scale\n"); X fprintf(OutFile, " ang rotate\n"); X fprintf(OutFile, " lin lw mul setlinewidth\n"); X fprintf(OutFile, " } def\n"); X fprintf(OutFile, "/XScale\n"); /* setup x scale */ X fprintf(OutFile, " {hsc hs mul %d div} def\n", YPSSIZE); X fprintf(OutFile, "/YScale\n"); /* setup y scale */ X fprintf(OutFile, " {vsc vs mul %d div} def\n", XPSSIZE); X fprintf(OutFile, "/lw 3 def\n"); /* default line width */ X fprintf(OutFile, "/M {moveto} def\n"); X fprintf(OutFile, "/D {lineto} def\n"); X fprintf(OutFile, "/S {stroke} def\n"); X fprintf(OutFile, "/Z {stroke newpath} def\n"); X fprintf(OutFile, "end\n\n"); /* end of dictionary definition */ X X /* Set up the plots */ X X fprintf(OutFile, "PSDict begin\n"); X fprintf(OutFile, "@start\n"); X fprintf(OutFile, "%d @copies\n", COPIES); X fprintf(OutFile, "@line\n"); X fprintf(OutFile, "%d @hsize\n", XSIZE); X fprintf(OutFile, "%d @vsize\n", YSIZE); X fprintf(OutFile, "%d @hoffset\n", XOFFSET); X fprintf(OutFile, "%d @voffset\n", YOFFSET); X fprintf(OutFile, "%d @hscale\n", XSCALE); X fprintf(OutFile, "%d @vscale\n", YSCALE); X fprintf(OutFile, "%d @lscale\n", LINESCALE); X fprintf(OutFile, "%d @angle\n", ANGLE); X fprintf(OutFile, "@SetPlot\n\n"); X fprintf(OutFile, "bop\n"); X fprintf(OutFile, "%%%%Page: %d %d\n", numpages+1, numpages+1); X} X X/* Sets the printer to text mode */ Xvoid pstext() X{ X} X X/* Sets the printer to graphics mode */ Xvoid psgraph() X{ X} X X/* Form feed */ Xvoid psclear() X{ X fprintf(OutFile," S\neop\nbop\n"); X} X Xstatic PLINT xlast, ylast; X Xvoid pspage() X{ X numpages++; X fprintf(OutFile, "%%%%Page: %d %d\n", numpages+1, numpages+1); X linepos = 0; X xlast = -100000; ylast = -100000; X} X X/* May put something here someday */ Xvoid pscolor(colour) Xint colour; X{ X} X X/* I don't know what to put here - Tony */ Xvoid pswidth() X{ X} X Xvoid psline(x1,y1,x2,y2) XPLINT x1,y1,x2,y2; X{ X if (linepos + 21 > LINELENGTH) { X putc('\n', OutFile); X linepos = 0; X } else X putc(' ', OutFile); X X if(!orient) { X if(x1 == xlast && y1 == ylast) X fprintf(OutFile, "%ld %ld D", x2, y2); X else X fprintf(OutFile, "Z %ld %ld M %ld %ld D", x1, y1, x2, y2); X } X else { X if(x1 == xlast && y1 == ylast) X fprintf(OutFile, "%ld %ld D", PSX-y2, x2); X else X fprintf(OutFile, "Z %ld %ld M %ld %ld D", PSX-y1,x1,PSX-y2,x2); X } X X xlast = x2; X ylast = y2; X linepos += 21; X} X X/* Close graphics file */ Xvoid pstidy() X{ X fprintf(OutFile," S\neop\n"); X numpages++; X fprintf(OutFile, "@end\n\n"); X fprintf(OutFile, "%%%%Trailer\n"); X fprintf(OutFile, "%%%%Pages: %d\n", numpages); X fclose(OutFile); X numpages = 0; X linepos = 0; X} X X/* Get the date and time */ Xstatic char *getdate() X{ X int len; X long t, time(); X char *p, *ctime(); X X t = time((long *) 0); X p = ctime(&t); X len = strlen(p); X *(p + len - 1) = '\0'; /* zap the newline character */ X return p; X} END_OF_FILE if test 9503 -ne `wc -c <'unix/postscript.c'`; then echo shar: \"'unix/postscript.c'\" unpacked with wrong size! fi # end of 'unix/postscript.c' fi echo shar: End of archive 6 \(of 12\). cp /dev/null ark6isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 12 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Submissions to comp.sources.amiga and comp.binaries.amiga should be sent to: amiga@cs.odu.edu or amiga@xanth.cs.odu.edu ( obsolescent mailers may need this address ) or ...!uunet!xanth!amiga ( very obsolescent mailers need this address ) Comments, questions, and suggestions s should be addressed to ``amiga-request'' (only use ``amiga'' for submissions) at the above addresses.