xref: /openbsd-src/usr.bin/mg/bell.c (revision f1dd7b858388b4a23f4f67a4957ec5ff656ebbe8)
1 /*	$OpenBSD: bell.c,v 1.6 2021/05/06 12:44:21 lum Exp $	*/
2 
3 /*
4  * This file is in the public domain.
5  *
6  * Author: Mark Lumsden <mark@showcomplex.com>
7  *
8  */
9 
10 /*
11  * Control how mg communicates with the user.
12  */
13 
14 #include <sys/queue.h>
15 #include <signal.h>
16 #include <stdio.h>
17 #include <unistd.h>
18 
19 #include "def.h"
20 #include "macro.h"
21 
22 void
23 bellinit(void)
24 {
25 	doaudiblebell = 1;
26 	dovisiblebell = 0;
27 }
28 
29 int
30 dobeep_num(const char *msg, int n)
31 {
32 	ewprintf("%s %d", msg, n);
33 	dobeep();
34 	return (FALSE);
35 }
36 
37 int
38 dobeep_msgs(const char *msg, const char *s)
39 {
40 	ewprintf("%s %s", msg, s);
41 	dobeep();
42 	return (FALSE);
43 }
44 
45 int
46 dobeep_msg(const char *msg)
47 {
48 	ewprintf("%s", msg);
49 	dobeep();
50 	return (FALSE);
51 }
52 
53 void
54 dobeep(void)
55 {
56 	if (doaudiblebell) {
57 		ttbeep();
58 	}
59 	if (dovisiblebell) {
60 		sgarbf = TRUE;
61 		update(CNONE);
62 		if (inmacro)	/* avoid delaying macro execution. */
63 			return;
64 		usleep(50000);
65 	}
66 }
67 
68 /* ARGSUSED */
69 int
70 toggleaudiblebell(int f, int n)
71 {
72 	if (f & FFARG)
73 		doaudiblebell = n > 0;
74 	else
75 		doaudiblebell = !doaudiblebell;
76 
77 	return (TRUE);
78 }
79 
80 /* ARGSUSED */
81 int
82 togglevisiblebell(int f, int n)
83 {
84 	if (f & FFARG)
85 		dovisiblebell = n > 0;
86 	else
87 		dovisiblebell = !dovisiblebell;
88 
89 	return (TRUE);
90 }
91