ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/psign.c
(Generate patch)

Comparing ray/src/px/psign.c (file contents):
Revision 2.10 by greg, Tue Jul 7 18:24:34 1992 UTC vs.
Revision 2.20 by schorsch, Sun Jun 8 12:03:10 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1992 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  psign.c - produce picture from text.
6   *
# Line 11 | Line 8 | static char SCCSid[] = "$SunId$ LBL";
8   */
9  
10   #include  "standard.h"
11 <
11 > #include  "platform.h"
12   #include  "color.h"
16
13   #include  "font.h"
14  
15 < #ifndef  SSS
16 < #define  SSS                    3       /* super-sample size */
15 > #ifndef  SSS
16 > #define  SSS                    3       /* super-sample size */
17   #endif
18  
19 < #define  MAXLINE                512     /* longest allowable line */
19 > #define  MAXLINE                512     /* longest allowable line */
20  
25 #ifndef  DEFPATH
26 #define  DEFPATH                ":/usr/local/lib/ray"
27 #endif
28 #ifndef  ULIBVAR
29 #define  ULIBVAR                "RAYPATH"
30 #endif
31
21   char  *fontfile = "helvet.fnt";         /* our font file */
22  
23   COLOR  bgcolor = WHTCOLOR;              /* background color */
# Line 37 | Line 26 | COLOR  fgcolor = BLKCOLOR;             /* foreground color */
26   int  direct = 'r';                      /* direction (right, up, left, down) */
27  
28   int  cheight = 32*SSS;                  /* character height */
29 < double  aspect = 1.67;                  /* height/width character aspect */
30 < double  spacing = 0.0;                  /* character spacing */
29 > double  aspect = 1.67;                  /* height/width character aspect */
30 > double  spacing = 0.0;                  /* character spacing */
31   int  cwidth;                            /* computed character width */
32  
33   unsigned char  *ourbitmap;              /* our output bitmap */
34   int  xsiz, ysiz;                        /* bitmap dimensions */
35   int  xdim;                              /* size of horizontal scan (bytes) */
36  
37 < #define  bitop(x,y,op)          (ourbitmap[(y)*xdim+((x)>>3)] op (1<<((x)&7)))
38 < #define  tstbit(x,y)            bitop(x,y,&)
39 < #define  setbit(x,y)            bitop(x,y,|=)
40 < #define  clrbit(x,y)            bitop(x,y,&=~)
41 < #define  tglbit(x,y)            bitop(x,y,^=)
37 > #define  bitop(x,y,op)          (ourbitmap[(y)*xdim+((x)>>3)] op (1<<((x)&7)))
38 > #define  tstbit(x,y)            bitop(x,y,&)
39 > #define  setbit(x,y)            bitop(x,y,|=)
40 > #define  clrbit(x,y)            bitop(x,y,&=~)
41 > #define  tglbit(x,y)            bitop(x,y,^=)
42  
43   FONT  *ourfont;                         /* our font */
44  
56 char  *libpath;                         /* library search path */
57
45   typedef struct line {
46          char  *s;               /* line w/o LF */
47          short  *sp;             /* character spacing */
# Line 65 | Line 52 | LINE  *ourtext;                                /* our text */
52   int  nlines, maxline;                   /* text dimensions */
53   int  maxwidth;                          /* maximum line width (dvi) */
54  
68 extern char  *getenv();
55  
70
56   main(argc, argv)
57   int  argc;
58   char  *argv[];
59   {
60          int  an;
61 <
61 >        SET_FILE_BINARY(stdout);
62          for (an = 1; an < argc && argv[an][0] == '-'; an++)
63                  switch (argv[an][1]) {
64                  case 'c':                       /* color */
# Line 117 | Line 102 | char  *argv[];
102                          break;
103                  case 'h':                       /* height of characters */
104                          cheight = atoi(argv[++an])*SSS;
120                        xsiz = xsiz = 0;
105                          break;
106                  case 'a':                       /* aspect ratio */
107                          aspect = atof(argv[++an]);
# Line 132 | Line 116 | unkopt:
116                          exit(1);
117                  }
118                                          /* load font file */
135        if ((libpath = getenv(ULIBVAR)) == NULL)
136                libpath = DEFPATH;
119          ourfont = getfont(fontfile);
120                                          /* get text */
121          if (an == argc)
# Line 146 | Line 128 | unkopt:
128                                          /* convert text to bitmap */
129          maptext();
130                                          /* print header */
131 +        newheader("RADIANCE", stdout);
132          printargs(argc, argv, stdout);
133          fputformat(COLRFMT, stdout);
134          putchar('\n');
# Line 158 | Line 141 | unkopt:
141  
142   makemap()                       /* create the bit map */
143   {
144 <        double  pictaspect;
144 >        double  pictaspect;
145          
146          if (direct == 'r' || direct == 'l') {
147 <                if (xsiz == 0 || ysiz == 0) {
147 >                if (xsiz <= 0) {
148                          cwidth = cheight/aspect + 0.5;
149                          xsiz = (long)maxwidth*cwidth >> 8;
150                          ysiz = nlines*cheight;
151                  } else if (aspect > FTINY) {
152 +                        if (ysiz <= 0)
153 +                                ysiz = cheight*nlines;
154                          pictaspect = 256*nlines*aspect/maxwidth;
155                          if (pictaspect*xsiz < ysiz)
156                                  ysiz = pictaspect*xsiz + 0.5;
157                          else
158                                  xsiz = ysiz/pictaspect + 0.5;
159                          cheight = ysiz/nlines;
160 <                        cwidth = cheight/aspect + 0.5;
160 >                        cwidth = cheight/aspect;
161                  } else {
162 +                        if (ysiz <= 0)
163 +                                ysiz = cheight*nlines;
164                          pictaspect = (double)ysiz/xsiz;
165                          aspect = pictaspect*maxwidth/(256*nlines);
166                          cheight = ysiz/nlines;
167 <                        cwidth = cheight/aspect + 0.5;
167 >                        cwidth = cheight/aspect;
168                  }
169          } else {                        /* reverse orientation */
170 <                if (xsiz == 0 || ysiz == 0) {
170 >                if (ysiz <= 0) {
171                          cwidth = cheight/aspect + 0.5;
172                          xsiz = nlines*cheight;
173                          ysiz = (long)maxwidth*cwidth >> 8;
174                  } else if (aspect > FTINY) {
175 +                        if (xsiz <= 0)
176 +                                xsiz = cheight*nlines;
177                          pictaspect = maxwidth/(256*nlines*aspect);
178                          if (pictaspect*xsiz < ysiz)
179                                  ysiz = pictaspect*xsiz + 0.5;
180                          else
181                                  xsiz = ysiz/pictaspect + 0.5;
182                          cheight = xsiz/nlines;
183 <                        cwidth = cheight/aspect + 0.5;
183 >                        cwidth = cheight/aspect;
184                  } else {
185 +                        if (xsiz <= 0)
186 +                                xsiz = cheight*nlines;
187                          pictaspect = (double)ysiz/xsiz;
188                          aspect = maxwidth/(256*nlines*pictaspect);
189                          cheight = xsiz/nlines;
190 <                        cwidth = cheight/aspect + 0.5;
190 >                        cwidth = cheight/aspect;
191                  }
192          }
193          if (xsiz % SSS)
# Line 214 | Line 205 | makemap()                      /* create the bit map */
205   gettext(fp)                     /* get text from a file */
206   FILE  *fp;
207   {
217        char  *fgets();
208          char  buf[MAXLINE];
209          register LINE  *curl;
210          int  len;
# Line 227 | Line 217 | FILE  *fp;
217                  if (curl == NULL)
218                          goto memerr;
219                  len = strlen(buf);
220 <                curl->s = malloc(len);
220 >                curl->s = (char *)malloc(len);
221                  curl->sp = (short *)malloc(sizeof(short)*len--);
222                  if (curl->s == NULL | curl->sp == NULL)
223                          goto memerr;
# Line 237 | Line 227 | FILE  *fp;
227                  curl->s[len] = '\0';
228                  if (spacing < -1./256.)
229                          len = squeeztext(curl->sp, curl->s, ourfont,
230 <                                        (int)(spacing*-256.0));
230 >                                        (int)(spacing*-256.));
231                  else if (spacing > 1./256.)
232                          len = proptext(curl->sp, curl->s, ourfont,
233 <                                        (int)(spacing*256.0), 3);
233 >                                        (int)(spacing*256.), 3);
234                  else
235                          len = uniftext(curl->sp, curl->s, ourfont);
236                  if (len > maxwidth)
# Line 264 | Line 254 | char  *av[];
254          ourtext = (LINE *)malloc(sizeof(LINE));
255          if (ourtext == NULL)
256                  goto memerr;
257 <        ourtext->s = malloc(MAXLINE);
257 >        ourtext->s = (char *)malloc(MAXLINE);
258          if (ourtext->s == NULL)
259                  goto memerr;
260          for (cp = ourtext->s; ac-- > 0; av++) {
# Line 278 | Line 268 | char  *av[];
268          ourtext->sp = (short *)malloc(sizeof(short)*(maxline+1));
269          if (ourtext->sp == NULL)
270                  goto memerr;
271 <        if (spacing < 0.0)
271 >        if (spacing < -1./256.)
272                  maxwidth = squeeztext(ourtext->sp, ourtext->s, ourfont,
273 <                                (int)(spacing*-256.0));
274 <        else if (spacing > 0.0)
273 >                                (int)(spacing*-256.));
274 >        else if (spacing > 1./256.)
275                  maxwidth = proptext(ourtext->sp, ourtext->s, ourfont,
276 <                                (int)(spacing*256.0), 3);
276 >                                (int)(spacing*256.), 3);
277          else
278                  maxwidth = uniftext(ourtext->sp, ourtext->s, ourfont);
279          nlines = 1;
# Line 401 | Line 391 | FILE  *fp;
391   {
392          COLR  pixval[SSS*SSS+1];        /* possible pixel values */
393          COLOR  ctmp0, ctmp1;
394 <        double  d;
394 >        double  d;
395          COLR  *scanout;
396          int  x, y;
397          register int  i, j;
# Line 442 | Line 432 | FILE  *fp;
432                          exit(1);
433                  }
434          }
435 <        free((char *)scanout);
435 >        free((void *)scanout);
436   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines