1 /*
2  * all prototypes
3  */
4 /*---------------------------------------- main.c ------------*/
5 
6 extern XtInputId register_X_input(	/* tell X about new server connection*/
7 	int		fd);		/* new connection */
8 extern void unregister_X_input(		/* tell X when server conn. is down */
9 	XtInputId	x_id);		/* closed connection */
10 extern void resynchronize_daemon(void);	/* tell daemon to re-read database */
11 extern void set_color(			/* set foregnd color to one of COL_* */
12 	int		col);
13 extern void print_pixmap(		/* prints pixmap into a Pixmap label */
14 	Widget		w,		/* button to draw into */
15 	int		n,		/* pixmap #, one of PIC_* */
16 	BOOL		b);		/* true: black, false: grayed*/
17 extern void do_get_rsrc(		/* read resource */
18 	XtPointer	ret,
19 	char		*res_name,
20 	char		*res_class_name,
21 	char		*res_type,
22 	int		minvalue);
23 extern char *mystrdup(			/* strdup replacement for Ultrix */
24 	char		*s);
25 extern void exit(			/* local version of exit w/ writeback*/
26 	int		ret);
27 extern void fatal(			/* print error message and exits */
28 	char		*fmt, ...);
29 extern void print_button(		/* print a string into label or but */
30 	Widget		w,
31 	char		*fmt, ...);
32 extern void print_text_button(		/* print a string into a Text button */
33 	Widget		w,
34 	char		*fmt, ...);
35 #ifdef MIPS
36 extern char *getenv(const char *);
37 extern char *malloc(size_t);
38 extern char *realloc(void *, size_t);
39 #endif
40 
41 /*---------------------------------------- convert.c ------------*/
42 
43 extern char *mkdatestring(		/* convert # of seconds to a date */
44 	time_t		time);		/* date in seconds */
45 extern char *mktimestring(		/* convert # of seconds to a t-o-d */
46 	time_t		time,		/* date in seconds */
47 	BOOL		dur);		/* duration, not time-of-day */
48 extern time_t parse_datestring(		/* convert date string to # of secs */
49 	char		*text,		/* input string */
50 	time_t		dtime);		/* appt start time, 0=today */
51 extern time_t parse_timestring(		/* convert time string to # of secs */
52 	char		*text,		/* input string */
53 	BOOL		duration);	/* time-of-day or duration? */
54 extern time_t parse_datetimestring(	/* convert date+time to # of secs */
55 	char		*text);		/* input string */
56 extern void parse_warnstring(		/* early/late warning time, noalarm */
57 	char		*text,		/* input string */
58 	time_t		*early,		/* early warning in minutes */
59 	time_t		*late,		/* late warning in minutes */
60 	BOOL		*noalarm);	/* final alarm too? */
61 
62 /*---------------------------------------- cyccalc.c ------------*/
63 
64 extern time_t length_of_month(		/* # of days in the month <time> */
65 	time_t		time);		/* some date in the month */
66 extern BOOL recycle_all(		/* recycle all entries in <list> */
67 	struct plist	*list,		/* list to scan */
68 	BOOL		del,		/* auto-remove obsolete? */
69 	int		days);		/* if del, keep if age < days*/
70 extern int  recycle(			/* get next repeating trigger time */
71 	struct entry	*entry,		/* entry to test */
72 	time_t		today,		/* today (time is ignored) */
73 	time_t		*ret);		/* returned next trigger time*/
74 extern BOOL move_todo_entry(		/* if it's a todo entry, move it */
75 	struct entry	*entry,		/* entry to test */
76 	time_t		today);		/* today (time is ignored) */
77 
78 /*---------------------------------------- dayedit.c ------------*/
79 
80 extern void got_entry_press(		/* pressed on list menu button array */
81 	struct listmenu	*lw,		/* which menu */
82 	int		x,		/* which column/row */
83 	int		y,
84 	int		on,		/* enable radio but: on/off */
85 	int		shift);		/* arrow but: 1=shift key */
86 extern void confirm_new_entry(void);	/* put edited row back into mainlist */
87 extern void undo_new_entry(void);	/* Kill the edit buffer, undo */
88 extern void got_entry_text(		/* user entered text into text button*/
89 	struct listmenu	*lw,		/* which menu */
90 	int		x,		/* which column/row */
91 	int		y,
92 	char		*text);		/* text input by user */
93 extern void sensitize_edit_buttons(void); /* change bottom row */
94 
95 /*---------------------------------------- dbase.c ------------*/
96 
97 extern int  name_to_user(		/* user name to index into user[] */
98 	char		*name);		/* name to look up */
99 extern int  add_entry(			/* add an entry to a list */
100 	struct plist	**list,		/* list to add to */
101 	struct entry	*entry);	/* entry to add */
102 extern int  resort_entry(		/* move an entry to its proper place */
103 	struct plist	*list,		/* list to re-sort */
104 	int		n);		/* index to changed entry */
105 extern int  find_next_trigger( 		/* find next alarm/warn trigger time */
106 	struct plist	*list,		/* list of entries */
107 	time_t		time,		/* time to locate */
108 	struct entry	**entryp,	/* ret: entry that was found */
109 	time_t		*wait_time);	/* ret: how long until triggr*/
110 extern void create_list(		/* start a new list */
111 	struct plist	**list);	/* pointer to list pointer */
112 extern void destroy_list(		/* delete a list. */
113 	struct plist	**list);	/* pointer to list pointer */
114 extern void delete_entry(		/* delete an entry from the list. */
115 	struct plist	*list,		/* list to delete from */
116 	int		n);		/* index to entry to delete */
117 extern void clone_entry(		/* copy one entry to another */
118 	struct entry	*new,		/* entry to fill in */
119 	struct entry	*old);		/* entry to clone, or 0 */
120 extern void rebuild_repeat_chain(	/* chain all repeating entries */
121 	struct plist	*list);		/* list to delete from */
122 extern void destroy_entry(		/* free all strings of an entry */
123 	struct entry	*entry);	/* entry to destroy */
124 extern BOOL lookup_entry( 		/* find an entry in the list by date */
125 	struct lookup	*lookup,	/* return struct */
126 	struct plist	*list,		/* list of entries */
127 	time_t		time,		/* time to locate */
128 	BOOL		exact,		/* need entry, not insert pt */
129 	BOOL		norep,		/* ignore instances */
130 	char		which,		/* 'mywod': mon,yr,wk,yov,day*/
131 	int		usr);		/* user number or -1 */
132 extern BOOL lookup_next_entry(		/* find the next entry */
133 	struct lookup	*lookup);	/* previously found entry */
134 extern void delete_entry_by_id(
135 	struct plist	*list,		/* list to delete from */
136 	unsigned int	file,		/* file ID from server */
137 	int		id);		/* row ID from server */
138 
139 /*---------------------------------------- file_r.c ------------*/
140 
141 extern char *find_pub_path(		/* return the calendar path */
142         char            *path);		/* resolve ~ and make absolute */
143 extern BOOL read_mainlist(void);	/* read all files into mainlist */
144 extern void parse_file_line(		/* parse one line from appt file */
145 	struct plist	**list,		/* list to add to */
146 	char		*path,		/* file/server to read from */
147 	char		*name,		/* user name, 0=not yet known*/
148 	char		*line);		/* line to be parsed */
149 
150 /*---------------------------------------- file_w.c ------------*/
151 
152 extern BOOL copyfile(			/* copy one file to another */
153 	char		*source,
154 	char		*target);
155 extern void write_mainlist(void);	/* write all modified files */
156 extern int  write_one_entry(		/* write one entry to file or server */
157 	int		(*callback)(char*),	/* function that writes line */
158 	struct entry	*ep);		/* list entry to write */
159 
160 /*---------------------------------------- vcalendar_r.c ------------*/
161 
162 extern void read_vcal_file(
163 	struct plist	**list,		/* list to add to */
164 	FILE		*fp,		/* file to read list from */
165 	int		u);		/* user number */
166 
167 /*---------------------------------------- vcalendar_w.c ------------*/
168 
169 extern void write_vcal_mainlist(
170 	char		*path);		/* write vCalendar data to this file */
171 
172 /*---------------------------------------- help.c ------------*/
173 
174 extern void help_callback(		/* print help for a topic */
175 	Widget		parent,
176 	char		*topic);
177 
178 /*---------------------------------------- holiday.c ------------*/
179 
180 extern char *parse_holidays(		/* eval holiday defs for <year> */
181 	int		year,		/* year to parse for, 0=1970 */
182 	BOOL		force);		/* file has changed, re-read */
183 extern void reset_all_hdays(void);	/* delete all known holidays */
184 extern void seteaster(			/* set a holiday relative to Easter */
185 	int		off,		/* offset in days */
186 	int		length,		/* length in days */
187 	int		pascha);	/* 0=Easter, 1=Christian Orthodox */
188 extern void setdate(			/* set holiday by date */
189 	int		month,		/* 1..12, ANY, or LAST */
190 	int		day,		/* 1..31, ANY, or LAST */
191 	int		year,		/* 1..2069, or ANY */
192 	int		off,		/* offset in days */
193 	int		length);	/* length in days */
194 extern void setwday(			/* set holiday by weekday */
195 	int		num,		/* which, 1st..5th, ANY, or LAST */
196 	int		wday,		/* 1=monday..7=sunday */
197 	int		month,		/* month, 1..12, ANY, or LAST */
198 	int		off,		/* offset in days */
199 	int		length);	/* length in days */
200 extern void setdoff(			/* set holiday by weekday date offset*/
201 	int		rel,		/* -1=before, -2=after */
202 	int		wday,		/* 1=monday..7=sunday */
203 	int		month,		/* month, 1..12, ANY, or LAST */
204 	int		day,		/* 1..31, ANY, or LAST */
205 	int		year,		/* 1..2069, or ANY */
206 	int		off,		/* offset in days */
207 	int		length);	/* length in days */
208 extern int day_from_name(
209 	char		*str);
210 extern int day_from_easter(void);
211 extern int day_from_monthday(
212 	int		m,
213 	int		d);
214 extern void monthday_from_day(
215 	int		day,
216 	int		*m,
217 	int		*d,
218 	int		*y);
219 extern int day_from_wday(
220 	int		day,
221 	int		wday,
222 	int		num);
223 extern void dump_holiday(
224 	int		year);
225 
226 /*---------------------------------------- util.c ------------*/
227 
228 extern char *resolve_tilde(		/* return path with ~ replaced */
229 	char		*path);		/* path with ~ */
230 extern BOOL find_file(			/* find file <name> and store path */
231 	char		*buf,		/* buffer for returned path */
232 	char		*name,		/* file name to locate */
233 	BOOL		exec);		/* must be executable? */
234 extern BOOL startup_lock(		/* make sure program runs only once */
235 	BOOL		pland,		/* is this plan or pland? */
236 	BOOL		force);		/* kill competitor */
237 extern BOOL refresh_lock(
238 	char		*pathtmp);	/* PLANDLOCK or PLANLOCK */
239 extern void lockfile(
240 	FILE		*fp,		/* file to lock */
241 	BOOL		lock);		/* TRUE=lock, FALSE=unlock */
242 extern int mystrcasecmp(		/* local version of strcasecmp */
243 	char		*a,
244 	char		*b);
245 void mybzero(
246 	void		*p,
247 	int		n);
248 void print_info_line(void);
249 char to_ascii(
250 	char		*str,		/* string to convert to ascii */
251 	int		def);		/* default if string is empty */
252 
253 /*---------------------------------------- xutil.c ------------*/
254 
255 extern void init_pixmaps(void);		/* intialize pixmaps for mode buttons*/
256 extern void print_icon_name(void);	/* change the name below the icon */
257 extern void set_icon(			/* set icon for the application */
258 	Widget		shell,
259 	int		sub);		/* 0=main, 1=submenu */
260 extern int strlen_in_pixels(		/* return length of string in pixels */
261 	char		*string,	/* string to truncate */
262 	int		sfont);		/* FONT_* */
263 extern void truncate_string(		/* truncate string to fit into n pixs*/
264 	char		*string,	/* string to truncate */
265 	int		len,		/* max len in pixels */
266 	int		sfont);		/* font of string */
267 extern void drag_init(
268 	int		view,		/* 'm', 'd', 'w', or 'o' */
269 	Widget		canvas,		/* drawing area to initialize */
270 	Widget		info,		/* label widget for info messages */
271 	void		(*rcb)(),	/* redraw callback */
272 	MOUSE		(*lcb)());	/* locate position in canvas */
273 extern void drag_destroy(
274 	int		view);		/* 'm', 'd', 'w', or 'o' */
275 
276 /*---------------------------------------- popup.c ------------*/
277 
278 extern void create_about_popup(void);	/* create About info popup */
279 extern void create_nodaemon_popup(void);/* create no-daemon warning popup */
280 extern void create_multiple_popup(	/* create multiple-plan's warning */
281 	BOOL		nolock);	/* tried to kill competitor */
282 extern void multiple_writer_warning_popup( /* create write warning popup */
283 	Widget		widget);	/* install near this widget */
284 extern void new_language_popup(		/* selected new language */
285 	Widget		widget);	/* install near this widget */
286 extern void create_error_popup(
287 	Widget		widget,
288 	int		error,
289 	char		*fmt, ...);
290 
291 /*---------------------------------------- print.c ------------*/
292 
293 extern void create_print_popup(void);	/* create a print popup */
294 
295 /*---------------------------------------- sublist.c ------------*/
296 
297 extern void create_sublist(		/* create a sublist for list menu */
298 	struct plist	*list,		/* main list with all entries*/
299 	struct listmenu	*w);		/* menu we are doing this for*/
300 extern void destroy_sublist(		/* destroy the sublist of a list menu*/
301 	struct listmenu	*w);		/* menu we are doing this for*/
302 
303 /*---------------------------------------- time.c ------------*/
304 
305 extern void set_tzone(void);		/* figure out current timezone */
306 extern void guess_tzone(void);		/* guess timezone from $TZ */
307 extern time_t tm_to_time(		/* convert tm struct to seconds */
308 	struct tm	*tm);		/* time/date to convert */
309 extern time_t get_time(void);		/* current time in seconds */
310 extern time_t date_to_time(		/* day/month/year as # of secs */
311 	int		day,
312 	int		month,
313 	int		year,
314 	int		*wkday,
315 	int		*julian,
316 	int		*weeknum);
317 extern struct tm *time_to_tm(		/* seconds to tm struct */
318 	time_t		t);		/* time to convert */
319 
320 /*---------------------------------------- weekcalc.c ------------*/
321 
322 extern void build_week(			/* week node tree for curr_week */
323 	BOOL		omit_priv,	/* ignore private (padlocked) entries*/
324 	BOOL		omit_all);	/* ignore all ent (not very useful) */
325 extern void destroy_week(void);		/* release the week node trees. */
326 
327 /*---------------------------------------- yovcalc.c ------------*/
328 
329 extern void build_yov(			/* week node tree for curr_week */
330 	BOOL		omit_priv);	/* ignore private (padlocked) entries*/
331 extern void destroy_yov(void);		/* release the week node trees. */
332 
333 /*---------------------------------------- daycalc.c ------------*/
334 
335 extern void build_day(			/* week node tree for curr_day */
336 	BOOL		omit_priv,	/* ignore private (padlocked) entries*/
337 	BOOL		omit_all);	/* ignore all ent (not very useful) */
338 extern void destroy_day(void);		/* release the day node trees. */
339 
340 /*---------------------------------------- adjmenu.c ------------*/
341 
342 extern void create_adjust_popup(void);	/* create an adjust popup */
343 
344 /*---------------------------------------- calmenu.c ------------*/
345 
346 extern void create_cal_widgets(		/* create the main calendar window */
347 	Widget		toplevel);
348 extern void create_view(		/* create a new month/week/... view */
349 	int		view);		/* m, w, y, o, d */
350 extern Widget create_view_form(		/* make a window or form for a view */
351 	Widget		*shell,		/* if shell exists, widget, else &0 */
352 	Widget		parent,		/* parent widget (mainview) if share */
353 	int		view,		/* m, w, y, o, d */
354 	int		xs,		/* requested form width */
355 	int		ys,		/* requested form height */
356 	char		*name);		/* window name */
357 extern void redraw_all_views(void);	/* refraw all existing views */
358 extern void get_widget_size(		/* get the size of a widget */
359 	Widget		w,
360 	Dimension	*xs,
361 	Dimension	*ys);
362 extern void set_widget_size(		/* set the size of a widget */
363 	Widget		w,
364 	Dimension	xs,
365 	Dimension	ys);
366 
367 /*---------------------------------------- cnfmenu.c ------------*/
368 
369 extern void create_config_popup(void);	/* create a config popup */
370 
371 /*---------------------------------------- cycmenu.c ------------*/
372 
373 extern void destroy_recycle_popup(void);/* destroy a popup */
374 extern void create_recycle_popup(void);	/* create a recycle popup */
375 
376 /*---------------------------------------- daymenu.c ------------*/
377 
378 extern void destroy_all_listmenus(void);/* destroy all list menus */
379 extern void update_all_listmenus(BOOL);	/* redraw (opt.reeval) all list menus*/
380 extern void create_entry_widgets(	/* creates all widgets in a list menu*/
381 	struct listmenu	*w,
382 	int		nentries);
383 extern void edit_list_button(		/* turn text button to label or back */
384 	int		doedit,		/* 1=edit, 0=unedit, 2=del */
385 	struct listmenu	*w,		/* create which menu */
386 	int		x,		/* column, SC_* */
387 	int		y);		/* row, y=0: title */
388 extern void create_list_popup(		/* create a list popup */
389 	struct plist	*list,
390 	time_t		time,		/* for what day? */
391 	time_t		period,		/* for how many days? */
392 	char		*key,		/* keyword lookup? */
393 	struct entry	*entry,		/* just this one entry? */
394 	int		user_plus_1,	/* which user file */
395 	BOOL		private);	/* only private */
396 extern BOOL prepare_for_modify(		/* check if user file is writable */
397 	char		*name);		/* user name or 0 */
398 
399 /*---------------------------------------- excmenu.c ------------*/
400 
401 extern void destroy_except_popup(void);	/* destroy a popup */
402 extern void create_except_popup(void);	/* create an exception */
403 
404 /*---------------------------------------- gotomenu.c ------------*/
405 
406 extern void create_goto_popup(void);	/* create a goto popup */
407 
408 /*---------------------------------------- holmenu.c ------------*/
409 
410 extern void create_holiday_popup(void);	/* create a holiday popup */
411 
412 /*---------------------------------------- keymenu.c ------------*/
413 
414 extern void create_keyword_popup(void);	/* create a keyword popup */
415 
416 /*---------------------------------------- monmenu.c ------------*/
417 
418 extern void destroy_month_view(void);	/* destroy month view */
419 extern void create_month_view(		/* create month view */
420 	Widget		parent);
421 
422 /*---------------------------------------- msgmenu.c ------------*/
423 
424 extern void destroy_text_popup(void);	/* destroy a popup */
425 extern void create_text_popup(		/* create a message or script popup */
426 	char		*title,		/* menu title string */
427 	char		**initial,	/* initial default text */
428 	int		x,		/* button pressed, SC_* */
429 	BOOL		readonly);	/* just show, no editing */
430 
431 /*---------------------------------------- notmenu.c ------------*/
432 
433 extern void create_widgets(
434 	Widget		toplevel,
435 	char		*title,		/* title string */
436 	char		*subtitle,	/* subtitle string */
437 	char		*msg);		/* message text */
438 
439 /*---------------------------------------- rangemenu.c ------------*/
440 
441 extern void create_calconfig_popup(void);/* create a week view range popup */
442 
443 /*---------------------------------------- usermenu.c ------------*/
444 
445 extern BOOL all_files_served(void);	/* all files read from IP servers? */
446 extern void create_user_popup(void);	/* create user popup */
447 extern void create_user_rows(void);	/* make enough rows in user menu list*/
448 extern void draw_user_row(int);		/* redraw a row in the user menu list*/
449 
450 /*---------------------------------------- servmenu.c ------------*/
451 
452 extern void destroy_serv_popup(void);
453 extern void create_serv_popup(void);
454 
455 /*---------------------------------------- weekmenu.c ------------*/
456 
457 extern void destroy_week_menu(void);
458 extern void create_week_menu(		/* create the week menu for curr_week*/
459 	Widget		parent);
460 
461 /*---------------------------------------- yearmenu.c ------------*/
462 
463 extern void destroy_year_menu(void);	/* destroy the year window */
464 extern void create_year_menu(		/* create year calendar for curr_year*/
465 	Widget		parent);
466 
467 /*---------------------------------------- yearmenu.c ------------*/
468 
469 extern void destroy_yov_menu(void);
470 extern void create_yov_menu(
471 	Widget		parent);
472 
473 /*---------------------------------------- daymenu.c ------------*/
474 
475 extern void destroy_day_menu(void);
476 extern void create_day_menu(		/* create the day menu for curr_day */
477 	Widget		parent);
478 
479 /*---------------------------------------- editdraw.c ------------*/
480 
481 extern void draw_list(			/* draw or redraw a list of entries */
482 	struct listmenu	*w);		/* draw into which menu */
483 extern char *mkbuttonstring(		/* string to draw into a text button */
484 	struct listmenu	*lw,		/* menu the button is in */
485 	int		x,		/* column and row (y >= 1) */
486 	int		y);
487 extern char *mknotestring(		/* return string to draw into note */
488 	struct entry	*ep);		/* entry pointer */
489 extern BOOL show_except_pixmap(		/* should appt show PIC_EXCEPT? */
490 	struct entry	*ep);
491 
492 /*---------------------------------------- mondraw.c ------------*/
493 
494 extern MOUSE locate_in_month_calendar(	/* press in calendar day box */
495 	struct entry	**epp,		/* returned entry or 0 */
496 	BOOL		*warn,		/* is *epp an n-days-ahead w?*/
497 	time_t		*time,		/* if *epp=0, clicked where */
498 	time_t		*trigger,	/* if *epp=0, entry trigger */
499 	int		*xp,		/* if M_INSIDE, rubber box position */
500 	int		*yp,
501 	int		*xsp,		/* and size */
502 	int		*ysp,
503 	int		xc,		/* pixel pos clicked */
504 	int		yc);
505 extern void draw_month_year(void);	/* draw month and year into calendar */
506 extern void draw_calendar(		/* draw day grid into main calendar */
507 	Region		region);
508 extern void draw_day(			/* draw one day box into the day grid*/
509 	int		day);		/* 1..31 : current month */
510 					/* < 1 : previous month */
511 					/* > monthlen : next month */
512 
513 /*---------------------------------------- weekdraw.c ------------*/
514 
515 extern MOUSE locate_in_week_calendar(	/* press on the week display detected*/
516 	struct entry	**epp,		/* returned entry or 0 */
517 	BOOL		*warn,		/* is *epp an n-days-ahead w?*/
518 	time_t		*time,		/* if *epp=0, clicked where */
519 	time_t		*trigger,	/* if *epp=0, entry trigger */
520 	int		*xp,		/* if M_INSIDE, rubber box */
521 	int		*yp,
522 	int		*xsp,		/* position and size */
523 	int		*ysp,
524 	int		xc,		/* pixel pos clicked */
525 	int		yc);
526 extern void draw_week_day(		/* day d/m/y has changed, redraw week*/
527 	int		day,
528 	int		month,
529 	int		year);
530 extern void draw_week_calendar(		/* resize and redraw week menu */
531 	Region		region);
532 extern void print_week_calendar(	/* print PostScript week to fp */
533 	FILE		*fp,
534 	BOOL		landscape);
535 
536 /*---------------------------------------- daydraw.c ------------*/
537 
538 extern MOUSE locate_in_day_calendar(	/* press on the day display detected */
539 	struct entry	**epp,		/* returned entry or 0 */
540 	BOOL		*warn,		/* is *epp an n-days-ahead w?*/
541 	time_t		*time,		/* if *epp=0, clicked where */
542 	time_t		*trigger,	/* if *epp=0, entry trigger */
543 	int		*xp,		/* if M_INSIDE, rubber box */
544 	int		*yp,
545 	int		*xsp,		/* position and size */
546 	int		*ysp,
547 	int		xc,		/* pixel pos clicked */
548 	int		yc);
549 extern void draw_day_calendar(		/* resize and redraw day menu */
550 	Region		region);
551 extern void print_day_calendar(		/* print PostScript day to fp */
552 	FILE		*fp,
553 	BOOL		landscape);
554 
555 /*---------------------------------------- yovdraw.c ------------*/
556 
557 extern MOUSE locate_in_yov_calendar(	/* press on the yov display detected */
558 	struct entry	**epp,		/* returned entry or 0 */
559 	BOOL		*warn,		/* is *epp an n-days-ahead w?*/
560 	time_t		*time,		/* if *epp=0, clicked where */
561 	time_t		*trigger,	/* if *epp=0, entry trigger */
562 	int		*xp,		/* if M_INSIDE, rubber box */
563 	int		*yp,
564 	int		*xsp,		/* position and size */
565 	int		*ysp,
566 	int		xc,		/* pixel pos clicked */
567 	int		yc);
568 extern void draw_yov_calendar(		/* resize and redraw yov menu */
569 	Region		region);
570 extern void print_yov_calendar(		/* print PostScript yov to fp */
571 	FILE		*fp);
572 
573 /*---------------------------------------- yeardraw.c ------------*/
574 
575 extern void draw_year_calendar(		/* draw day grid into year cal */
576 	Region		region);
577 extern void draw_year_day(		/* draw one day box into year cal */
578 	int		day,		/* 1..31 */
579 	int		month,		/* 0..11 */
580 	int		year);		/* year since 1900 */
581 extern int clicked_year_calendar(	/* got a click in the calendar area */
582 	int		x,		/* pixel pos clicked */
583 	int		y);
584 
585 /*---------------------------------------- psdraw.c ------------*/
586 
587 extern BOOL g_init_window(		/* init week/yov window drawing */
588 	struct week	*week,		/* either &week or &yov */
589 	Region		newregion);	/* draw only here */
590 extern void g_exit_window(void);	/* finish week/yov window drawing */
591 extern void g_init_ps(			/* init week/yov PostScript drawing */
592 	struct week	*week,		/* either &week or &yov */
593 	FILE		*newfp,
594 	BOOL		landscape);
595 extern void g_exit_ps(void);		/* finish week/yov PostScript drawing*/
596 extern void g_setcolor(			/* select COL_* color */
597 	int		color);
598 extern void g_setfont(			/* select FONT_* font */
599 	int		fonti);
600 extern void g_fillrect(			/* draw filled rectangle */
601 	int		x,
602 	int		y,
603 	int		xs,
604 	int		ys);
605 extern void g_drawtext(			/* draw latin text string */
606 	int		x,
607 	int		y,
608 	char		*text,
609 	int		len);
610 extern void g_drawtext16(		/* draw Japanese text string */
611 	int		x,
612 	int		y,
613 	char		*text,
614 	int		len);
615 extern void g_drawpoly(			/* draw filled polygon */
616 	XPoint		*point,
617 	int		num,
618 	BOOL		checker);
619 extern void g_drawlines(		/* draw connected lines */
620 	XPoint		*point,
621 	int		num);
622 
623 /*---------------------------------------- usersel.c ------------*/
624 
625 extern void destroy_user_sel_popup(void);
626 extern void create_user_sel_popup(
627 	Widget		widget,		/* install popup near this button */
628 	int		curr,		/* current user ID (default) */
629 	BOOL		(*callb)(int));	/* function to call with new user ID */
630 
631 /*---------------------------------------- network.c ------------*/
632 
633 extern BOOL can_edit_appts(void);	/* ok to edit appointments? */
634 extern int connect_netplan_server(
635 	char		*uhost,		/* requested server host name */
636 	char		*uname,		/* user file name req'd from server */
637 	char		*msg);		/* for appending error message */
638 extern char *attach_to_network(void);	/* (re)connect to net, reread appts */
639 extern void detach_from_network(void);	/* disconnect from all servers */
640 extern int  name_to_file(		/* convert file/user name to file ID */
641 	char		*name);		/* name to locate */
642 extern BOOL server_entry_op(		/* link, unlink, delete, send entry */
643 	struct entry	*entry,		/* entry to lock/unlock/delete */
644 	char		op);		/* l=lock, u=unlock, d=del, w=write */
645 extern void read_from_server(		/* read one or all appointments */
646 	struct plist	**list,		/* list to add to */
647 	int		uid,		/* user[] index or -1 */
648 	int		rid);		/* entry ID, or 0 for all */
649 extern BOOL puts_server(		/* send message to a server */
650 	int		fd,		/* socket descriptor to send to */
651 	char		*msg);		/* message string to send, 0-term */
652 extern BOOL gets_server(		/* receive message from server */
653 	int		fd,		/* socket descriptor to send to */
654 	char		*msg,		/* buffer for incoming message */
655 	int		num,		/* size of msg buffer (paranoia...) */
656 	BOOL		wait,		/* need reply, not just '?' and 'R' */
657 	BOOL		cont);		/* expecting a continuation line? */
658 extern int open_and_count_rows_on_server(
659 	int		uid);		/* user[] index */
660 extern BOOL get_netplan_filelist(
661 	char		*uhost,		/* server host to request from */
662 	char		***list,	/* returned list */
663 	int		*num);		/* returned # of entries in list */
664 extern void obtain_netplan_users(
665 	char		*uhost);	/* server host to request from */
666 
667 /*---------------------------------------- language.c ------------*/
668 
669 extern char *_(char *);			/* translate a string to current lang*/
670 extern char *get_language_name(		/* return name of n-th language */
671 	int		n);		/* number of language */
672 
673 
674 /*
675  * grok prototypes
676  */
677 
678 /*---------------------------------------- g_dbase.c ------------*/
679 
680 extern struct dbase *dbase_create(void);
681 extern void dbase_delete(
682 	struct dbase	*dbase);	/* dbase to delete */
683 extern BOOL dbase_addrow(
684 	int		*rowp,		/* ptr to returned row number */
685 	struct dbase	*dbase);	/* database to add row to */
686 extern void dbase_delrow(
687 	int		nrow,		/* row to delete */
688 	struct dbase	*dbase);	/* database to delete row in */
689 extern char *dbase_get(
690 	struct dbase	*dbase,		/* database to get string from */
691 	int		nrow,		/* row to get */
692 	int		ncolumn);	/* column to get */
693 extern BOOL dbase_put(
694 	struct dbase	*dbase,		/* database to put into */
695 	int		nrow,		/* row to put into */
696 	int		ncolumn,	/* column to put into */
697 	char		*data);		/* string to store */
698 
699 /*---------------------------------------- g_dbfile.c ------------*/
700 
701 extern BOOL write_dbase(
702 	struct dbase	*dbase,		/* form and items to write */
703 	struct form	*form,		/* contains column delimiter */
704 	BOOL		force);		/* write even if not modified*/
705 extern BOOL read_dbase(
706 	struct dbase	*dbase,		/* form and items to write */
707 	struct form	*form,		/* contains column delimiter */
708 	char		*path);		/* file to read list from */
709 
710 /*---------------------------------------- g_formfile.c ------------*/
711 
712 extern BOOL write_form(
713 	struct form	*form);		/* form and items to write */
714 extern BOOL read_form(
715 	struct form	*form,		/* form and items to write */
716 	char		*path);		/* file to read list from */
717 
718 /*---------------------------------------- g_formop.c ------------*/
719 
720 extern struct form *form_create(void);
721 extern struct form *form_clone(
722 	struct form	*parent);	/* old form */
723 extern void form_delete(
724 	struct form	*form);		/* form to delete */
725 extern BOOL verify_form(
726 	struct form	*form,		/* form to verify */
727 	int		*bug,		/* retuirned buggy item # */
728 	Widget		shell);		/* error popup parent */
729 extern void form_edit_script(
730 	struct form	*form,		/* form to edit */
731 	Widget		shell,		/* error popup parent */
732 	char		*fname);	/* file name of script (dbase name) */
733 extern void form_sort(
734 	struct form	*form);		/* form to sort */
735 extern void item_deselect(
736 	struct form	*form);		/* describes form and all items in it*/
737 extern BOOL item_create(
738 	struct form	*form,		/* describes form and all items in it*/
739 	int		nitem);		/* the current item, insert point */
740 extern void item_delete(
741 	struct form	*form,		/* describes form and all items in it*/
742 	int		nitem);		/* the current item, insert point */
743 extern struct item *item_clone(
744 	struct item	*parent);	/* item to clone */
745