|
|
1.1 root 1: #ifndef lint
2: static char *rcsid = "$Header: /f/osi/others/quipu/uips/pod/RCS/photo.c,v 7.0 90/06/12 13:15:50 mrose Exp $";
3: #endif
4:
5: /*
6: * $Header: /f/osi/others/quipu/uips/pod/RCS/photo.c,v 7.0 90/06/12 13:15:50 mrose Exp $
7: */
8:
9: /*
10: * $Log: photo.c,v $
11: * Revision 7.0 90/06/12 13:15:50 mrose
12: * *** empty log message ***
13: *
14: * Revision 1.5 90/04/26 10:21:15 emsrdsm
15: * *** empty log message ***
16: *
17: * Revision 1.4 90/04/25 13:47:26 emsrdsm
18: * i) lint'ed
19: *
20: * Revision 1.3 90/04/20 10:28:20 emsrdsm
21: * (i) fixed form bug
22: *
23: * Revision 1.2 90/04/18 18:48:19 emsrdsm
24: * i) added logging
25: *
26: * Revision 1.1 90/04/10 16:44:23 emsrdsm
27: * Initial revision
28: *
29: */
30:
31: #include "quipu/photo.h"
32: #include "pod.h"
33:
34: extern Widget toplevel;
35: extern Widget PhotoWindow;
36:
37: extern GC XCreateGC();
38: GC gc;
39: char photo_name[1024];
40: Pixmap photo_pixmap = 0;
41: Display *dpy;
42: Screen *scr;
43: int winX, winY, winW, winH;
44: extern int NUMLINES,PIC_LINESIZE;
45: extern unsigned position;
46: unsigned long XorVal;
47:
48: static int passno = 1;
49: static int x, y;
50: int px, py, maxx;
51:
52: extern int two_passes;
53:
54: /*ARGSUSED*/
55: photo_start (name)
56: char *name;
57: {
58: x = y = 0;
59: if (passno == 1)
60: maxx = 0, two_passes = 1;
61: return 0;
62: }
63:
64: photo_end (name)
65: char *name;
66: {
67: if (passno == 1) {
68: passno = 2;
69: px = x = maxx;
70: py = --y;
71:
72: if (photo_pixmap) {
73: XFreePixmap(XtDisplay(toplevel), photo_pixmap);
74: photo_pixmap = 0;
75: }
76:
77: kill_photo();
78: make_photo_widget();
79:
80: dpy = XtDisplay(toplevel);
81: scr = DefaultScreenOfDisplay(dpy);
82:
83: winW = x;
84: winH = y;
85:
86: photo_pixmap = XCreatePixmap(dpy, XtWindow(PhotoWindow),
87: x, y, DefaultDepthOfScreen(scr));
88: gc = XCreateGC(dpy, photo_pixmap, 0, NULL);
89:
90: XSetFunction(dpy, gc, GXclear);
91:
92: XSetForeground(dpy, gc, WhitePixelOfScreen(scr));
93: XSetBackground(dpy, gc, BlackPixelOfScreen(scr));
94:
95: XFillRectangle(dpy, photo_pixmap, gc, 0, 0, winW,winH);
96:
97: XSetFunction(dpy, gc, GXcopy);
98:
99: XSetForeground(dpy, gc, BlackPixelOfScreen(scr));
100: XSetBackground(dpy, gc, WhitePixelOfScreen(scr));
101:
102: XFillRectangle(dpy, photo_pixmap, gc, 0, 0, winW,winH);
103:
104: XSetForeground(dpy, gc, WhitePixelOfScreen(scr));
105: XSetBackground(dpy, gc, BlackPixelOfScreen(scr));
106:
107: XorVal = WhitePixelOfScreen(scr) ^ BlackPixelOfScreen(scr);
108:
109: return 0;
110: }
111: if (name && *name) (void) strcpy(photo_name, name);
112: passno = 1;
113: x = y = maxx = 0;
114: return 0;
115: }
116:
117: /*ARGSUSED*/
118: photo_line_end (line)
119: bit_string * line;
120: {
121: /* the end of a line has been reached */
122: /* A bit string is stored in line->dbuf_top */
123:
124: if (passno == 1 && x > maxx)
125: maxx = x;
126: x = 0, y++;
127:
128: return 0;
129: }
130:
131: photo_black (length)
132: int length;
133: {
134: if (passno == 1) {
135: x += length;
136: return 0;
137: }
138: /* draw a black line of 'length' pixels */
139:
140: return 0;
141: }
142:
143: photo_white (length)
144: int length;
145: {
146: if (passno == 1) {
147: x += length;
148: return 0;
149: }
150:
151: /* draw a white line of 'length' pixels */
152: XDrawLine (dpy, photo_pixmap, gc,
153: position, NUMLINES, length+position-1, NUMLINES);
154:
155: return 0;
156: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.