1 /*
2     ACfax - Fax reception with X11-interface for amateur radio
3     Copyright (C) 1995-1998 Andreas Czechanowski, DL4SDC
4 
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9 
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14 
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software Foundation,
17     Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 
19     andreas.czechanowski@ins.uni-stuttgart.de
20 */
21 
22 /*
23  * fax_funcs.h : function declarations and external variable declarations
24  *	for all fax-related computing
25  */
26 
27 /* This is the size of the internal raw image storage. Adjust it so that
28    the largest picture to expect can fit into memory (4000 * time_in_sec) */
29 #define CORESIZE (4560 << 10)
30 #define COREMAX (CORESIZE - 1)
31 
32 /* set this to pre-define a directory for saving fax-pictures */
33 #define FAX_SAVEDIR "."
34 /* #define FAX_SAVEDIR "/usr/local/faxsave" */
35 
36 /* define this if you run on 8-bit X-displays only, it can speed up the
37    image-redrawing by replacing XPutPixel by direct access to memory : */
38 /* #define FAST8BIT */
39 
40 /* debugging flags */
41 #define DEBUG 0
42 #define DBG_APT 2
43 #define DBG_SYN 4
44 
45 /* decoding function: initialisation types (see fax_funcs.c) */
46 #define D_CPINIT	0x00000001
47 #define D_WDINIT	0x00000002
48 #define D_LDINIT	0x00000004
49 #define D_INITS		0x00000007
50 #define D_ALLOWX	0x00000008
51 #define D_FLUSHIMG	0x00000010
52 
53 /* inverting of color- or grayscale-map, color-flip and rotation possibilities */
54 #define FAX_CNOR	0x00000001
55 #define FAX_CINV	0x00000002
56 #define FAX_POL		0x00000003
57 
58 #define FAX_CUNFL	0x00000004
59 #define FAX_CFLIP	0x00000008
60 #define FAX_CFLS	0x0000000c
61 
62 #define FAX_CROT0	0x00000010
63 #define FAX_CROT1	0x00000020
64 #define FAX_CROT2	0x00000030
65 #define FAX_CROTS	0x00000030
66 #define FAX_CMODS	(FAX_CROTS | FAX_CFLS | FAX_POL)
67 
68 /* writing directions for the FAX transmission and reception */
69 #define FAX_DIR		0x00000f00
70 #define FAX_TOP2BOT	0x00000100
71 #define FAX_BOT2TOP	0x00000200
72 #define FAX_LEF2RIG	0x00000400
73 #define FAX_RIG2LEF	0x00000800
74 
75 /* direction order / line direction */
76 #define FAX_ROT		0x00003000
77 #define FAX_HOR		0x00001000
78 #define FAX_VER		0x00002000
79 
80 /* phase-signal polarity */
81 #define FAX_PHS		0x0000c000
82 #define FAX_PWHT	0x00004000
83 #define FAX_PBLK	0x00008000
84 
85 /* color mode definitions */
86 #define FAX_CMODE	0x000f0000
87 #define FAX_GRAY	0x00010000
88 #define FAX_COLOR	0x00020000
89 
90 /* fax receiver/transmitter status flag */
91 #define FAX_APT         1
92 #define FAX_PHAS        2
93 #define FAX_RX          3
94 #define FATX_APTA	16
95 #define FATX_PHAS	17
96 #define FATX_TX		18
97 #define FATX_APTB	19
98 
99 /* fax file-save opearations */
100 #define F_DOSAVE	0	/* save image with captured parameters & close */
101 #define F_OPEN		1	/* open new savefile, write header */
102 #define F_CLOSE		2	/* close savefile, correct header */
103 #define F_GETDIM	3	/* capture current parameters for saving */
104 /* fax file-save return values */
105 #define SAVE_OK		0
106 #define SAVE_NPERM	1
107 #define SAVE_BUSY	2
108 #define SAVE_NFILE	3
109 /* fax apt-transmit initialisation commands */
110 #define APTX_ISTART	1
111 #define	APTX_ISTOP	2
112 
113 struct fax_savestruct {
114     char *name;
115     int width;
116     int height;
117 };
118 
119 /*
120  * NOTE : these variables are made global for read-only purposes !
121  * to change any of these, use setup_fax().
122  */
123 extern int lpm;		/* current lines-per-minute */
124 extern int ixoc;	/* current index-of-cooperation */
125 extern int devi;	/* current selected deviation (for FM) */
126 extern int mod_mode;	/* current filter and mod.mode (see mod_demod.h) */
127 extern int vertical;	/* writing direction order vertical first */
128 extern int right2left;	/* writing direction horizontal */
129 extern int bot2top;	/* writing direction vertical */
130 extern int invphase;	/* inverse phase detection */
131 extern int invimage;	/* inverse image display */
132 /*
133  * these may be changed directly :
134  */
135 extern int aptstart;	/* current APT start frequency */
136 extern int aptstop;	/* current APT stop frequency */
137 
138 extern void (*update_area)(XImage *, int, int, int, int, unsigned, unsigned);
139 extern void (*mode_notify)(int);
140 extern FILE *fsfile;
141 
142 void	init_fax(void);
143 void	exit_fax(void);
144 void	setup_fax(int, int, unsigned,
145 	Widget, unsigned, unsigned,
146 	int, unsigned);
147 void	receive_on(void);
148 void	receive_off(void);
149 #ifdef DSP_SELECT
150 void	fax_rx_backgnd(XtPointer, int *, XtInputId *);
151 #else
152 void	fax_rx_backgnd(XtPointer, XtIntervalId *);
153 #endif
154 void	decode_fax_gray(int);
155 int	save_faxfile(char *, int);
156 void	close_faxsave(void);
157 int	save_fax_gray(int, int);
158 void	faxsave_complete(int);
159 void	sync_phase(int);
160 void	decode_apt(int);
161 void	apt_control(int);
162 void	fax_rx_start(int);
163 void	fax_rx_phase(int);
164 void	fax_rx_stop(int);
165 void	shift_fax_coords(unsigned, unsigned);
166 void	correct_fax_azimut(int, int);
167 
168 void	fax_tx_stop(int);
169 void	fax_tx_start(int);
170 void	fax_tx_apta(int);
171 void	fax_tx_aptb(int);
172 void	fax_tx_phase(int);
173 int	load_txfile(char *name);
174 #ifdef DSP_SELECT
175 void	fax_tx_backgnd(XtPointer client_data, int *, XtInputId *xid);
176 #else
177 void	fax_tx_backgnd(XtPointer client_data, XtIntervalId *xid);
178 #endif
179 void	transmit_fax_gray(int init);
180 void	transmit_apt(int init);
181 void	transmit_phase(int init);
182