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.22 by schorsch, Mon Jun 30 14:59:12 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   *
7   *      7/1/87
8   */
9  
10 < #include  "standard.h"
10 > #include  "copyright.h"
11  
12 < #include  "color.h"
12 > #include  <string.h>
13  
14 + #include  "standard.h"
15 + #include  "platform.h"
16 + #include  "color.h"
17   #include  "font.h"
18  
19 < #ifndef  SSS
20 < #define  SSS                    3       /* super-sample size */
19 > #ifndef  SSS
20 > #define  SSS                    3       /* super-sample size */
21   #endif
22  
23 < #define  MAXLINE                512     /* longest allowable line */
23 > #define  MAXLINE                512     /* longest allowable line */
24  
25 #ifndef  DEFPATH
26 #define  DEFPATH                ":/usr/local/lib/ray"
27 #endif
28 #ifndef  ULIBVAR
29 #define  ULIBVAR                "RAYPATH"
30 #endif
31
25   char  *fontfile = "helvet.fnt";         /* our font file */
26  
27   COLOR  bgcolor = WHTCOLOR;              /* background color */
# Line 37 | Line 30 | COLOR  fgcolor = BLKCOLOR;             /* foreground color */
30   int  direct = 'r';                      /* direction (right, up, left, down) */
31  
32   int  cheight = 32*SSS;                  /* character height */
33 < double  aspect = 1.67;                  /* height/width character aspect */
34 < double  spacing = 0.0;                  /* character spacing */
33 > double  aspect = 1.67;                  /* height/width character aspect */
34 > double  spacing = 0.0;                  /* character spacing */
35   int  cwidth;                            /* computed character width */
36  
37   unsigned char  *ourbitmap;              /* our output bitmap */
38   int  xsiz, ysiz;                        /* bitmap dimensions */
39   int  xdim;                              /* size of horizontal scan (bytes) */
40  
41 < #define  bitop(x,y,op)          (ourbitmap[(y)*xdim+((x)>>3)] op (1<<((x)&7)))
42 < #define  tstbit(x,y)            bitop(x,y,&)
43 < #define  setbit(x,y)            bitop(x,y,|=)
44 < #define  clrbit(x,y)            bitop(x,y,&=~)
45 < #define  tglbit(x,y)            bitop(x,y,^=)
41 >                                /* conflicting def's in param.h */
42 > #undef  tstbit
43 > #undef  setbit
44 > #undef  clrbit
45 > #undef  tglbit
46  
47 + #define  bitop(x,y,op)          (ourbitmap[(y)*xdim+((x)>>3)] op (1<<((x)&7)))
48 + #define  tstbit(x,y)            bitop(x,y,&)
49 + #define  setbit(x,y)            bitop(x,y,|=)
50 + #define  clrbit(x,y)            bitop(x,y,&=~)
51 + #define  tglbit(x,y)            bitop(x,y,^=)
52 +
53   FONT  *ourfont;                         /* our font */
54  
56 char  *libpath;                         /* library search path */
57
55   typedef struct line {
56          char  *s;               /* line w/o LF */
57          short  *sp;             /* character spacing */
# Line 65 | Line 62 | LINE  *ourtext;                                /* our text */
62   int  nlines, maxline;                   /* text dimensions */
63   int  maxwidth;                          /* maximum line width (dvi) */
64  
68 extern char  *getenv();
65  
70
66   main(argc, argv)
67   int  argc;
68   char  *argv[];
69   {
70          int  an;
71 <
71 >        SET_FILE_BINARY(stdout);
72          for (an = 1; an < argc && argv[an][0] == '-'; an++)
73                  switch (argv[an][1]) {
74                  case 'c':                       /* color */
# Line 117 | Line 112 | char  *argv[];
112                          break;
113                  case 'h':                       /* height of characters */
114                          cheight = atoi(argv[++an])*SSS;
120                        xsiz = xsiz = 0;
115                          break;
116                  case 'a':                       /* aspect ratio */
117                          aspect = atof(argv[++an]);
# Line 132 | Line 126 | unkopt:
126                          exit(1);
127                  }
128                                          /* load font file */
135        if ((libpath = getenv(ULIBVAR)) == NULL)
136                libpath = DEFPATH;
129          ourfont = getfont(fontfile);
130                                          /* get text */
131          if (an == argc)
# Line 146 | Line 138 | unkopt:
138                                          /* convert text to bitmap */
139          maptext();
140                                          /* print header */
141 +        newheader("RADIANCE", stdout);
142          printargs(argc, argv, stdout);
143          fputformat(COLRFMT, stdout);
144          putchar('\n');
# Line 158 | Line 151 | unkopt:
151  
152   makemap()                       /* create the bit map */
153   {
154 <        double  pictaspect;
154 >        double  pictaspect;
155          
156          if (direct == 'r' || direct == 'l') {
157 <                if (xsiz == 0 || ysiz == 0) {
157 >                if (xsiz <= 0) {
158                          cwidth = cheight/aspect + 0.5;
159                          xsiz = (long)maxwidth*cwidth >> 8;
160                          ysiz = nlines*cheight;
161                  } else if (aspect > FTINY) {
162 +                        if (ysiz <= 0)
163 +                                ysiz = cheight*nlines;
164                          pictaspect = 256*nlines*aspect/maxwidth;
165                          if (pictaspect*xsiz < ysiz)
166                                  ysiz = pictaspect*xsiz + 0.5;
167                          else
168                                  xsiz = ysiz/pictaspect + 0.5;
169                          cheight = ysiz/nlines;
170 <                        cwidth = cheight/aspect + 0.5;
170 >                        cwidth = cheight/aspect;
171                  } else {
172 +                        if (ysiz <= 0)
173 +                                ysiz = cheight*nlines;
174                          pictaspect = (double)ysiz/xsiz;
175                          aspect = pictaspect*maxwidth/(256*nlines);
176                          cheight = ysiz/nlines;
177 <                        cwidth = cheight/aspect + 0.5;
177 >                        cwidth = cheight/aspect;
178                  }
179          } else {                        /* reverse orientation */
180 <                if (xsiz == 0 || ysiz == 0) {
180 >                if (ysiz <= 0) {
181                          cwidth = cheight/aspect + 0.5;
182                          xsiz = nlines*cheight;
183                          ysiz = (long)maxwidth*cwidth >> 8;
184                  } else if (aspect > FTINY) {
185 +                        if (xsiz <= 0)
186 +                                xsiz = cheight*nlines;
187                          pictaspect = maxwidth/(256*nlines*aspect);
188                          if (pictaspect*xsiz < ysiz)
189                                  ysiz = pictaspect*xsiz + 0.5;
190                          else
191                                  xsiz = ysiz/pictaspect + 0.5;
192                          cheight = xsiz/nlines;
193 <                        cwidth = cheight/aspect + 0.5;
193 >                        cwidth = cheight/aspect;
194                  } else {
195 +                        if (xsiz <= 0)
196 +                                xsiz = cheight*nlines;
197                          pictaspect = (double)ysiz/xsiz;
198                          aspect = maxwidth/(256*nlines*pictaspect);
199                          cheight = xsiz/nlines;
200 <                        cwidth = cheight/aspect + 0.5;
200 >                        cwidth = cheight/aspect;
201                  }
202          }
203          if (xsiz % SSS)
# Line 207 | Line 208 | makemap()                      /* create the bit map */
208          ourbitmap = (BYTE *)bmalloc(ysiz*xdim);
209          if (ourbitmap == NULL)
210                  error(SYSTEM, "Out of memory in makemap");
211 <        bzero((char *)ourbitmap, ysiz*xdim);
211 >        memset((char *)ourbitmap, '\0', ysiz*xdim);
212   }
213  
214  
215   gettext(fp)                     /* get text from a file */
216   FILE  *fp;
217   {
217        char  *fgets();
218          char  buf[MAXLINE];
219          register LINE  *curl;
220          int  len;
# Line 227 | Line 227 | FILE  *fp;
227                  if (curl == NULL)
228                          goto memerr;
229                  len = strlen(buf);
230 <                curl->s = malloc(len);
230 >                curl->s = (char *)malloc(len);
231                  curl->sp = (short *)malloc(sizeof(short)*len--);
232                  if (curl->s == NULL | curl->sp == NULL)
233                          goto memerr;
# Line 237 | Line 237 | FILE  *fp;
237                  curl->s[len] = '\0';
238                  if (spacing < -1./256.)
239                          len = squeeztext(curl->sp, curl->s, ourfont,
240 <                                        (int)(spacing*-256.0));
240 >                                        (int)(spacing*-256.));
241                  else if (spacing > 1./256.)
242                          len = proptext(curl->sp, curl->s, ourfont,
243 <                                        (int)(spacing*256.0), 3);
243 >                                        (int)(spacing*256.), 3);
244                  else
245                          len = uniftext(curl->sp, curl->s, ourfont);
246                  if (len > maxwidth)
# Line 264 | Line 264 | char  *av[];
264          ourtext = (LINE *)malloc(sizeof(LINE));
265          if (ourtext == NULL)
266                  goto memerr;
267 <        ourtext->s = malloc(MAXLINE);
267 >        ourtext->s = (char *)malloc(MAXLINE);
268          if (ourtext->s == NULL)
269                  goto memerr;
270          for (cp = ourtext->s; ac-- > 0; av++) {
# Line 278 | Line 278 | char  *av[];
278          ourtext->sp = (short *)malloc(sizeof(short)*(maxline+1));
279          if (ourtext->sp == NULL)
280                  goto memerr;
281 <        if (spacing < 0.0)
281 >        if (spacing < -1./256.)
282                  maxwidth = squeeztext(ourtext->sp, ourtext->s, ourfont,
283 <                                (int)(spacing*-256.0));
284 <        else if (spacing > 0.0)
283 >                                (int)(spacing*-256.));
284 >        else if (spacing > 1./256.)
285                  maxwidth = proptext(ourtext->sp, ourtext->s, ourfont,
286 <                                (int)(spacing*256.0), 3);
286 >                                (int)(spacing*256.), 3);
287          else
288                  maxwidth = uniftext(ourtext->sp, ourtext->s, ourfont);
289          nlines = 1;
# Line 401 | Line 401 | FILE  *fp;
401   {
402          COLR  pixval[SSS*SSS+1];        /* possible pixel values */
403          COLOR  ctmp0, ctmp1;
404 <        double  d;
404 >        double  d;
405          COLR  *scanout;
406          int  x, y;
407          register int  i, j;
# Line 442 | Line 442 | FILE  *fp;
442                          exit(1);
443                  }
444          }
445 <        free((char *)scanout);
445 >        free((void *)scanout);
446   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines