+++ /dev/null
-/************************************************************************
- ************************************************************************
- FAUST compiler
- Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
- ---------------------------------------------------------------------
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- ************************************************************************
- ************************************************************************/
-
-
-
-// PSDev.cpp
-
-#include "PSDev.h"
-#include "string.h"
-#include "math.h"
-#include "compatibility.hh"
-#include <iostream>
-
-using namespace std;
-
-static int gFileNum = 0;
-
-static char * addFileNum(const char* fname)
-{
- char f[256];
- char s[256];
- int i;
-
- // remove suffixes (.xxx.yyy)
- for (i=0; (fname[i] != 0) && (fname[i] != '.'); i++) {
- f[i] = fname[i];
- }
- f[i] = 0;
-
- // add number and .ps suffix
- snprintf(s, 255, "%s-%d.ps", f, ++gFileNum);
- //cerr << "file name " << s << endl;
- return strdup(s);
-}
-
-PSDev::PSDev(const char* ficName, double largeur, double hauteur)
-{
- if ((fic_repr = fopen(addFileNum(ficName),"w+")) == NULL) {
- //if ((fic_repr = fopen(ficName,"w+")) == NULL) {
- cout<<"Impossible de creer ou d'ouvrir "<<ficName<<endl;
- }
-
- if(largeur<hauteur)
- largeur=hauteur;
-
- fprintf(fic_repr,"%%!PS-Adobe-3.0 \n");
- //fprintf(fic_repr,"%%%%Pages: (atend) \n");
- fprintf(fic_repr,"%%%%BoundingBox: 0 0 450 %d\n",(int)floor((hauteur*450/largeur)+1));
-
- fprintf(fic_repr,"/unit {%f mul} def\n\n",450/largeur);
- fprintf(fic_repr,"0 %f unit translate\n",hauteur);
- fprintf(fic_repr,"1 -1 scale\n\n"); // postscript's origin = lower left corner (SVG:upper left)
- fprintf(fic_repr,"0.6 unit setlinewidth\n"); // lines' width
-
- fprintf(fic_repr,"/Times-Roman findfont %% Get the basic font for text\n");
- //fprintf(fic_repr,"15 unit scalefont %% Scale the font to 15 units\n");
- fprintf(fic_repr,"10 unit scalefont %% Scale the font to 10 units\n");
- fprintf(fic_repr,"setfont %% Make it the current font\n\n");
-}
-
-PSDev::~PSDev()
-{
- fprintf(fic_repr,"showpage\n"); //eject the page
- fclose(fic_repr);
-}
-
-void PSDev::rect(double x,double y,double l,double h, const char*, const char*)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- //fprintf(fic_repr,"1.5 unit setlinewidth\n");
- fprintf(fic_repr,"1.0 unit setlinewidth\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y);
- fprintf(fic_repr,"0 unit %f unit rlineto\n",h);
- fprintf(fic_repr,"%f unit 0 unit rlineto\n",l);
- fprintf(fic_repr,"0 unit %f unit rlineto\n",-h);
- fprintf(fic_repr,"closepath\n");
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::triangle(double x,double y,double l,double h, const char*, const char*, bool leftright)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- //fprintf(fic_repr,"1.5 unit setlinewidth\n");
- fprintf(fic_repr,"1.0 unit setlinewidth\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y);
- fprintf(fic_repr,"0 unit %f unit rlineto\n",h);
- fprintf(fic_repr,"%f unit 0 unit rlineto\n",l);
- fprintf(fic_repr,"0 unit %f unit rlineto\n",-h);
- fprintf(fic_repr,"closepath\n");
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::rond(double x,double y,double rayon)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"%f unit %f unit %f unit 0 360 arc\n",x,y,rayon);
- fprintf(fic_repr,"fill\n");
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::fleche(double x,double y,double rotation,int sens)
-{
- if(sens == 1)
- {
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"0.3 setgray\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y);
- fprintf(fic_repr,"%f rotate\n",rotation);
- fprintf(fic_repr,"%f unit %f unit rlineto\n",(double)-4,(double)-2);
- fprintf(fic_repr,"%f rotate\n",(double)-rotation);
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y);
- fprintf(fic_repr,"%f rotate\n",rotation);
- fprintf(fic_repr,"%f unit %f unit rlineto\n",(double)-4,(double)+2);
- fprintf(fic_repr,"closepath\n");
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
- }
- else //for the recursion
- {
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"0.3 setgray\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y);
- fprintf(fic_repr,"%f rotate\n",rotation);
- fprintf(fic_repr,"%f unit %f unit rlineto\n",(double)4,(double)-2);
- fprintf(fic_repr,"%f rotate\n",(double)-rotation);
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y);
- fprintf(fic_repr,"%f rotate\n",rotation);
- fprintf(fic_repr,"%f unit %f unit rlineto\n",(double)4,(double)+2);
- fprintf(fic_repr,"closepath\n");
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
- }
-}
-
-void PSDev::carre(double x,double y,double cote)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"0.3 setgray\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x-cote/2,y);
- fprintf(fic_repr,"0 unit %f unit rlineto\n",-cote);
- fprintf(fic_repr,"%f unit 0 unit rlineto\n",cote);
- fprintf(fic_repr,"0 unit %f unit rlineto\n",cote);
- fprintf(fic_repr,"closepath\n");
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::trait(double x1,double y1,double x2,double y2)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"0.3 setgray\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x1,y1);
- fprintf(fic_repr,"%f unit %f unit lineto\n",x2,y2);
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::dasharray(double x1,double y1,double x2,double y2)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"0.6 setgray\n");
- fprintf(fic_repr,"0.8 unit setlinewidth\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x1,y1);
- fprintf(fic_repr,"%f unit %f unit lineto\n",x2,y2);
- fprintf(fic_repr,"stroke\n");
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::text(double x,double y,const char* nom, const char* link)
-{
- fprintf(fic_repr,"newpath\n");
- //fprintf(fic_repr,"%f unit %f unit moveto\n",(x-4)-(strlen(nom)-1)*3.8,y+2);
- fprintf(fic_repr,"%f unit %f unit moveto\n",(x-0)-(strlen(nom)-1)*3.8,y+2);
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"1 -1 scale\n\n");
- fprintf(fic_repr,"(%s) show\n",nom);
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::label(double x,double y,const char* label)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"/Times-Roman findfont %% Get the basic font for text\n");
- fprintf(fic_repr,"7 unit scalefont %% Scale the font to 10 points\n");
- fprintf(fic_repr,"setfont %% Make it the current font\n\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",(x+2),y+1.2);
- fprintf(fic_repr,"1 -1 scale\n");
- fprintf(fic_repr,"(%s) show\n",label);
- fprintf(fic_repr,"grestore\n");
-}
-
-void PSDev::markSens(double x,double y,int sens)
-{
- if (sens==1)
- {
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y+4);
- fprintf(fic_repr,"%f unit %f unit rlineto\n",(double)4,(double)-4);
- fprintf(fic_repr,"closepath\n");
- }
- else //for the recursion
- {
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",x,y-4);
- fprintf(fic_repr,"%f unit %f unit rlineto\n",(double)-4,(double)4);
- fprintf(fic_repr,"closepath\n");
- }
- fprintf(fic_repr,"stroke\n");
-}
-
-void PSDev::Error(const char* message, const char* reason,int nb_error,double x,double y,double largeur)
-{
- fprintf(fic_repr,"gsave\n");
- fprintf(fic_repr,"/Times-Roman findfont %% Get the basic font for text\n");
- fprintf(fic_repr,"17 unit scalefont %% Scale the font to 10 points\n");
- fprintf(fic_repr,"setfont %% Make it the current font\n\n");
- fprintf(fic_repr,"newpath\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",(x-8)-(strlen(message)-1)*3.8,y-10);
- fprintf(fic_repr,"1 -1 scale\n");
- fprintf(fic_repr,"(%s) show\n",message);
- fprintf(fic_repr,"1 -1 scale\n");
- fprintf(fic_repr,"%f unit %f unit moveto\n",(x-8)-(strlen(reason)-1)*3.8,y+10);
- fprintf(fic_repr,"1 -1 scale\n");
- fprintf(fic_repr,"(%s) show\n",reason);
- fprintf(fic_repr,"grestore\n");
-
-}
-
-