wmpager: add missing Makefile.am
[dockapps.git] / wmix / misc.c
blob3c7e854d2a546b2355ab513d00e14ec17bdcefe2
1 /* WMix 3.0 -- a mixer using the OSS mixer API.
2 * Copyright (C) 2000, 2001
3 * Daniel Richard G. <skunk@mit.edu>,
4 * timecop <timecop@japan.co.jp>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
25 #include <stdio.h>
26 #include <assert.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <sys/time.h>
31 #include "include/common.h"
32 #include "include/misc.h"
34 typedef struct {
35 int enable;
36 int x;
37 int y;
38 int width;
39 int height;
40 } MRegion;
41 MRegion mr[16];
43 extern Config config;
45 /* Converts separate left and right channel volumes (each in [0, 1]) to
46 * volume and balance values. (Volume is in [0, 1], balance is in [-1, 1])
48 void lr_to_vb(float left, float right, float *volume, float *balance)
50 assert((left >= 0.0) && (right >= 0.0));
52 *volume = MAX(left, right);
54 if (left > right)
55 *balance = -1.0 + right / left;
56 else if (right > left)
57 *balance = 1.0 - left / right;
58 else
59 *balance = 0.0;
62 /* Performs the reverse calculation of lr_to_vb()
64 void vb_to_lr(float volume, float balance, float *left, float *right)
66 /* *left = volume; *right = volume; return; // XXX */
68 *left = volume * (1.0 - MAX(0.0, balance));
69 *right = volume * (1.0 + MIN(0.0, balance));
72 double get_current_time(void)
74 struct timeval tv;
75 double t;
77 gettimeofday(&tv, NULL);
79 t = (double)tv.tv_sec;
80 t += (double)tv.tv_usec / 1.0e6;
82 return t;
85 void add_region(int index, int x, int y, int width, int height)
87 mr[index].enable = 1;
88 mr[index].x = x;
89 mr[index].y = y;
90 mr[index].width = width;
91 mr[index].height = height;
94 int check_region(int x, int y)
96 register int i;
97 bool found = false;
99 for (i = 0; i < 16 && !found; i++) {
100 if (mr[i].enable && x >= mr[i].x &&
101 x <= mr[i].x + mr[i].width &&
102 y >= mr[i].y && y <= mr[i].y + mr[i].height)
103 found = true;
105 if (!found)
106 return -1;
107 return (i - 1);
110 void config_read(void)
112 FILE *fp;
113 char buf[512];
114 char *ptr;
116 if (config.file == NULL)
117 return;
119 fp = fopen(config.file, "r");
120 if (!fp)
121 return;
123 while (fgets(buf, 512, fp)) {
124 if ((ptr = strstr(buf, "mousewheel="))) {
125 ptr += 11;
126 config.mousewheel = atoi(ptr);
128 if ((ptr = strstr(buf, "scrolltext="))) {
129 ptr += 11;
130 config.scrolltext = atoi(ptr);
132 if ((ptr = strstr(buf, "osd="))) {
133 ptr += 4;
134 config.osd = atoi(ptr);
136 if ((ptr = strstr(buf, "osdcolor="))) {
137 char *end;
138 ptr += 9;
139 end = strchr(ptr, '\n');
140 ptr[end - ptr] = '\0';
141 if (config.osd_color)
142 free(config.osd_color);
143 config.osd_color = strdup(ptr);
145 if ((ptr = strstr(buf, "wheelstep="))) {
146 ptr += 10;
147 /* detect old style config */
148 if (atoi(ptr) > 1)
149 config.scrollstep = (float)atoi(ptr) / 100.0;
150 else
151 config.scrollstep = atof(ptr);
153 if ((ptr = strstr(buf, "wheelbtn1="))) {
154 ptr += 10;
155 config.wheel_button_up = atoi(ptr);
157 if ((ptr = strstr(buf, "wheelbtn2="))) {
158 ptr += 10;
159 config.wheel_button_down = atoi(ptr);
162 fclose(fp);