mirror of
https://github.com/alsa-project/alsa-tools.git
synced 2025-10-29 05:40:25 -04:00
Compare commits
23 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
187eeecd14 | ||
|
|
ddc93b66b4 | ||
|
|
32495631b1 | ||
|
|
837033a108 | ||
|
|
65a201fed6 | ||
|
|
52e6481047 | ||
|
|
337768effa | ||
|
|
037ae73ab3 | ||
|
|
dcf1b94682 | ||
|
|
4522439faf | ||
|
|
6d2d500456 | ||
|
|
5eaadd15bd | ||
|
|
90c2aa2639 | ||
|
|
2420b2a6df | ||
|
|
cd9ee08dcb | ||
|
|
3bd780896e | ||
|
|
a2a0167ed9 | ||
|
|
48128777e0 | ||
|
|
9cb754084b | ||
|
|
6549725ec5 | ||
|
|
787857d61a | ||
|
|
97092591e0 | ||
|
|
54b5913cd5 |
42 changed files with 801 additions and 846 deletions
142
.github/workflows/build.yml
vendored
Normal file
142
.github/workflows/build.yml
vendored
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
name: Build alsa-tools
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
fedora_latest_build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: fedora:latest
|
||||
env:
|
||||
QTDIR: /usr/lib64/qt-3.3
|
||||
steps:
|
||||
- name: Prepare environment
|
||||
run: |
|
||||
dnf -y upgrade
|
||||
dnf -y install @development-tools gcc-c++ libtool bzip2 gtk2-devel gtk3-devel fltk-devel qt3-devel
|
||||
|
||||
- name: Checkout alsa-lib
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: alsa-project/alsa-lib
|
||||
ref: master
|
||||
path: alsa-lib
|
||||
- name: Configure alsa-lib
|
||||
run: |
|
||||
cd alsa-lib
|
||||
head -5 configure.ac
|
||||
libtoolize --force --copy --automake
|
||||
aclocal
|
||||
autoheader
|
||||
automake --foreign --copy --add-missing
|
||||
autoconf
|
||||
export CFLAGS="-O2 -Wall -W -Wunused-const-variable=0 -pipe -g"
|
||||
./configure
|
||||
echo "Version: $(cat version)"
|
||||
- name: Build alsa-lib
|
||||
run: |
|
||||
cd alsa-lib
|
||||
make
|
||||
- name: Install alsa-lib
|
||||
run: |
|
||||
cd alsa-lib
|
||||
make install
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: alsa-tools
|
||||
- name: Checkout all tags
|
||||
run: |
|
||||
cd alsa-tools
|
||||
git fetch --prune --tags --force
|
||||
git fetch --prune --unshallow --force
|
||||
- name: Modify version
|
||||
run: |
|
||||
cd alsa-tools
|
||||
mv Makefile Makefile.old
|
||||
version=$(git describe | sed -e 's/v//')
|
||||
if test -z "$version"; then version=$(git describe --tags | sed -e 's/v//'); fi
|
||||
if test -z "$version"; then version1=$(grep "VERSION = .*" Makefile.old | cut -d ' ' -f 3); version2=$(git rev-parse --short HEAD); version="${version1}-g${version2}"; fi
|
||||
echo "Version: ${version}"
|
||||
sed -r "s/VERSION = .*/VERSION = ${version}/" < Makefile.old > Makefile
|
||||
grep "VERSION =" Makefile
|
||||
- name: Compile and install as10k1 (dependency)
|
||||
run: |
|
||||
cd alsa-tools/as10k1
|
||||
./gitcompile --prefix=/usr
|
||||
make install
|
||||
- name: Compile and install ld10k1 (dependency)
|
||||
run: |
|
||||
cd alsa-tools/ld10k1
|
||||
./gitcompile --prefix=/usr
|
||||
make install
|
||||
- name: Configure and build
|
||||
run: |
|
||||
cd alsa-tools
|
||||
./gitcompile
|
||||
- name: Create package
|
||||
run: |
|
||||
cd alsa-tools
|
||||
make alsa-dist
|
||||
mkdir ../artifacts
|
||||
mv alsa-tools*.tar.bz2 ../artifacts
|
||||
- name: Archive package
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: alsa-tools-test-package
|
||||
path: artifacts/
|
||||
|
||||
ubuntu_last_build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
steps:
|
||||
- name: Prepare
|
||||
run: |
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update
|
||||
apt-get -y install apt-utils
|
||||
apt-get -y full-upgrade
|
||||
apt-get install -y git build-essential pkg-config m4 autoconf automake libtool ibgtk2.0-dev libgtk-3-dev libfltk1.3-dev
|
||||
|
||||
- name: Checkout alsa-lib
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: alsa-project/alsa-lib
|
||||
ref: master
|
||||
- name: Configure alsa-lib
|
||||
run: |
|
||||
libtoolize --force --copy --automake
|
||||
aclocal
|
||||
autoheader
|
||||
automake --foreign --copy --add-missing
|
||||
autoconf
|
||||
export CFLAGS="-O2 -Wall -W -Wunused-const-variable=0 -pipe -g"
|
||||
./configure
|
||||
- name: Build alsa-lib
|
||||
run: |
|
||||
make
|
||||
- name: Install alsa-lib
|
||||
run: |
|
||||
make install
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Remove qlo10k1
|
||||
run: |
|
||||
mv Makefile Makefile.old
|
||||
sed -e 's/qlo10k1//' < Makefile.old > Makefile
|
||||
- name: Compile and install as10k1 (dependency)
|
||||
run: |
|
||||
cd as10k1
|
||||
./gitcompile --prefix=/usr
|
||||
make install
|
||||
- name: Compile and install ld10k1 (dependency)
|
||||
run: |
|
||||
cd ld10k1
|
||||
./gitcompile --prefix=/usr
|
||||
make install
|
||||
- name: Configure and build
|
||||
run: |
|
||||
./gitcompile
|
||||
2
Makefile
2
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
VERSION = 1.2.11
|
||||
VERSION = 1.2.14
|
||||
TOP = .
|
||||
SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \
|
||||
mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \
|
||||
|
|
|
|||
|
|
@ -244,6 +244,7 @@ void asm_open(char *name)
|
|||
struct stat st;
|
||||
char *next;
|
||||
int backup_line_num,backup_file_num;
|
||||
size_t rsize;
|
||||
|
||||
|
||||
|
||||
|
|
@ -284,8 +285,10 @@ void asm_open(char *name)
|
|||
|
||||
buff[i].mem_end = buff[i].mem_start+st.st_size;
|
||||
|
||||
read(fd, buff[i].mem_start, st.st_size);
|
||||
rsize = read(fd, buff[i].mem_start, st.st_size);
|
||||
close(fd);
|
||||
if (rsize != st.st_size)
|
||||
as_exit("short read from input file\n");
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("File %s opened:\n",name);
|
||||
|
|
@ -383,13 +386,14 @@ void output_tram_line(struct list_head *line_head, int type)
|
|||
val = __cpu_to_le32(tram_sym->data.value);
|
||||
fwrite(&val,sizeof(u32),1,fp);
|
||||
if(listing){
|
||||
if(type==TYPE_TRAM_ADDR_READ)
|
||||
if(type==TYPE_TRAM_ADDR_READ) {
|
||||
fprintf(listfile,"\tRead");
|
||||
else
|
||||
} else {
|
||||
fprintf(listfile,"\tWrite");
|
||||
}
|
||||
|
||||
fprintf(listfile,": 0x3%02x/0x2%02x (%s), offset 0x%07x\n",tram_sym->data.address,tram_sym->data.address,
|
||||
(prev_sym((&tram_sym->list)))->data.name,tram_sym->data.value);
|
||||
fprintf(listfile,": 0x3%02x/0x2%02x (%s), offset 0x%07x\n",tram_sym->data.address,tram_sym->data.address,
|
||||
(prev_sym((&tram_sym->list)))->data.name,tram_sym->data.value);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include"types.h"
|
||||
#include"proto.h"
|
||||
#include"parse.h"
|
||||
|
||||
extern int dbg_opt;
|
||||
extern FILE *listfile;
|
||||
|
|
@ -45,7 +46,6 @@ void op(int op, int z,int w,int x,int y)
|
|||
int w0, w1;
|
||||
extern int dsp_code[DSP_CODE_SIZE];
|
||||
extern int ip;
|
||||
extern char op_codes[35][9];
|
||||
extern char listtemp[60];
|
||||
if (ip >= 0x200)
|
||||
as_exit("to many instructions");
|
||||
|
|
@ -306,7 +306,6 @@ void add_symbol(char *name, u16 type, u16 address, u32 value)
|
|||
|
||||
extern int gpr_input_count,gpr_output_count,gpr_static_count,gpr_dynamic_count,gpr_control_count,gpr_constant_count;
|
||||
struct sym *sym;
|
||||
struct tram *tmp_ptr;
|
||||
extern struct list_head sym_head;
|
||||
extern struct delay tram_delay[MAX_TANK_ADDR];
|
||||
extern struct lookup tram_lookup[MAX_TANK_ADDR];
|
||||
|
|
@ -356,10 +355,8 @@ void add_symbol(char *name, u16 type, u16 address, u32 value)
|
|||
else
|
||||
tram_delay[tmp].write++;
|
||||
}else{
|
||||
tmp_ptr=(struct tram *)sym;
|
||||
list_add_tail(&(((struct tram *)sym)->tram) , &(tram_lookup[tmp].tram) );
|
||||
tmp_ptr=(struct tram *)sym;
|
||||
if(type== TYPE_TRAM_ADDR_READ)
|
||||
if(type== TYPE_TRAM_ADDR_READ)
|
||||
tram_lookup[tmp].read++;
|
||||
else
|
||||
tram_lookup[tmp].write++;
|
||||
|
|
|
|||
|
|
@ -72,14 +72,11 @@ void new_macro(char *symbol, char *line, char *operand)
|
|||
void macro_expand(int macnum,char *operand )
|
||||
{
|
||||
char *line,*next;
|
||||
int done=0,i,old;
|
||||
int done=0,old;
|
||||
extern unsigned int macro_depth;
|
||||
extern int macro_line_num;
|
||||
char string[MAX_LINE_LENGTH];
|
||||
|
||||
//initialize macro use:
|
||||
i=0;
|
||||
|
||||
if(macro_depth+1> MAX_MAC_DEPTH)
|
||||
as_exit("Error exceeded maximum number of recursive macro calls");
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include<string.h>
|
||||
#include<stdio.h>
|
||||
#include"types.h"
|
||||
#define DECLARE_OP_CODES
|
||||
#include"parse.h"
|
||||
#include"proto.h"
|
||||
|
||||
|
|
@ -87,7 +88,7 @@ int parse( char line_string[MAX_LINE_LENGTH], char *line)
|
|||
if((tmp=ismacro(op_name_ptr)) != -1 ){
|
||||
if(defmacro==0)
|
||||
macro_expand(tmp,strtok(NULL,""));
|
||||
return(0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if( (op_num=op_decode(op_name_ptr))==-1) {
|
||||
|
|
|
|||
|
|
@ -63,7 +63,9 @@ enum foo {
|
|||
|
||||
};
|
||||
|
||||
|
||||
#ifndef DECLARE_OP_CODES
|
||||
extern char op_codes[NUM_OPS+1][9];
|
||||
#else
|
||||
char op_codes[NUM_OPS+1][9]=
|
||||
{
|
||||
"MACS",
|
||||
|
|
@ -110,6 +112,7 @@ char op_codes[NUM_OPS+1][9]=
|
|||
"con",
|
||||
"NotAnOp"
|
||||
};
|
||||
#endif
|
||||
|
||||
//extern int file_num,source_line_num
|
||||
|
||||
|
|
|
|||
|
|
@ -629,9 +629,7 @@ gint DrawMixer(gpointer unused) {
|
|||
int OutPeak[ECHO_MAXAUDIOOUTPUTS];
|
||||
int VirLevel[ECHO_MAXAUDIOOUTPUTS];
|
||||
int VirPeak[ECHO_MAXAUDIOOUTPUTS];
|
||||
static int InClip[ECHO_MAXAUDIOINPUTS];
|
||||
static int OutClip[ECHO_MAXAUDIOOUTPUTS];
|
||||
char str[8];
|
||||
char str[16];
|
||||
int i, o, dB;
|
||||
GdkColor Grid={0x787878, 0, 0, 0};
|
||||
GdkColor Labels={0x9694C4, 0, 0, 0};
|
||||
|
|
@ -647,13 +645,8 @@ gint DrawMixer(gpointer unused) {
|
|||
update_rect.height = Mixheight;
|
||||
GetVUmeters(InLevel, InPeak, OutLevel, OutPeak, VirLevel, VirPeak);
|
||||
|
||||
if (!gc) {
|
||||
if (!gc)
|
||||
gc=gdk_gc_new(gtk_widget_get_parent_window(Mixdarea));
|
||||
for (i=0; i<nIn; i++)
|
||||
InClip[i]=0;
|
||||
for (i=0; i<nLOut; i++)
|
||||
OutClip[i]=0;
|
||||
}
|
||||
|
||||
gdk_draw_rectangle(Mixpixmap, Mixdarea->style->black_gc, TRUE, 0, 0, Mixwidth, Mixheight);
|
||||
|
||||
|
|
@ -1693,7 +1686,7 @@ void ToggleWindow(GtkWidget *widget, gpointer window) {
|
|||
// Scan all controls and sets up the structures needed to access them.
|
||||
int OpenControls(const char *card, const char *cardname) {
|
||||
int err, i, o;
|
||||
int numid, count, items, item;
|
||||
int numid, items, item;
|
||||
snd_hctl_t *handle;
|
||||
snd_hctl_elem_t *elem;
|
||||
snd_ctl_elem_id_t *id;
|
||||
|
|
@ -1726,7 +1719,6 @@ int OpenControls(const char *card, const char *cardname) {
|
|||
continue;
|
||||
snd_hctl_elem_get_id(elem, id);
|
||||
numid=snd_ctl_elem_id_get_numid(id);
|
||||
count=snd_ctl_elem_info_get_count(info);
|
||||
if (!strcmp("Monitor Mixer Volume", snd_ctl_elem_id_get_name(id))) {
|
||||
if (!mixerId) {
|
||||
mixerId=numid;
|
||||
|
|
@ -1879,7 +1871,7 @@ int main(int argc, char *argv[]) {
|
|||
GtkWidget *label, *menu, *menuitem;
|
||||
GSList *bgroup;
|
||||
int err, i, o, n, cardnum, value;
|
||||
char hwname[8], cardname[32], load, save;
|
||||
char hwname[16], cardname[32], load, save;
|
||||
snd_ctl_card_info_t *hw_info;
|
||||
|
||||
load=save=1;
|
||||
|
|
@ -1900,8 +1892,8 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
if ((err=snd_ctl_card_info(ctlhandle, hw_info))>=0) {
|
||||
if (!strncmp(snd_ctl_card_info_get_driver(hw_info), "Echo_", 5)) {
|
||||
strncpy(card, hwname, 7);
|
||||
hwname[7]=0;
|
||||
strncpy(card, hwname, sizeof(hwname)-1);
|
||||
card[sizeof(hwname)-1]=0;
|
||||
strncpy(cardname, snd_ctl_card_info_get_name(hw_info), 31);
|
||||
cardname[31]=0;
|
||||
strncpy(cardId, snd_ctl_card_info_get_name(hw_info), 15);
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ void config_close()
|
|||
|
||||
void config_set_stereo(GtkWidget *but, gpointer data)
|
||||
{
|
||||
gint i=(gint)data;
|
||||
config_stereo[i]=GTK_TOGGLE_BUTTON(but)->active;
|
||||
gint i=GPOINTER_TO_INT(data);
|
||||
config_stereo[i]=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(but));
|
||||
}
|
||||
|
||||
void config_restore_stereo()
|
||||
|
|
|
|||
|
|
@ -5,6 +5,6 @@ AC_HEADER_STDC
|
|||
AM_INIT_AUTOMAKE
|
||||
AM_MAINTAINER_MODE([enable])
|
||||
|
||||
PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0)
|
||||
PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-3.0 alsa >= 0.9.0)
|
||||
|
||||
AC_OUTPUT(Makefile desktop/Makefile)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include "envy24control.h"
|
||||
|
||||
void control_input_callback(gpointer data, gint source, GdkInputCondition condition)
|
||||
gboolean control_input_callback(GIOChannel *source, GIOCondition condition, gpointer data)
|
||||
{
|
||||
snd_ctl_t *ctl = (snd_ctl_t *)data;
|
||||
snd_ctl_event_t *ev;
|
||||
|
|
@ -29,12 +29,12 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit
|
|||
|
||||
snd_ctl_event_alloca(&ev);
|
||||
if (snd_ctl_read(ctl, ev) < 0)
|
||||
return;
|
||||
return TRUE;
|
||||
name = snd_ctl_event_elem_get_name(ev);
|
||||
index = snd_ctl_event_elem_get_index(ev);
|
||||
mask = snd_ctl_event_elem_get_mask(ev);
|
||||
if (! (mask & (SND_CTL_EVENT_MASK_VALUE | SND_CTL_EVENT_MASK_INFO)))
|
||||
return;
|
||||
return TRUE;
|
||||
|
||||
switch (snd_ctl_event_elem_get_interface(ev)) {
|
||||
case SND_CTL_ELEM_IFACE_MIXER:
|
||||
|
|
@ -81,8 +81,13 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit
|
|||
else if (!strcmp(name, "Input Sensitivity Switch"))
|
||||
adc_sense_update(index);
|
||||
break;
|
||||
case SND_CTL_ELEM_IFACE_PCM:
|
||||
if (!strcmp(name, "IEC958 Playback Default"))
|
||||
spdif_output_update();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -85,7 +85,7 @@ extern ice1712_eeprom_t card_eeprom;
|
|||
extern GtkWidget *mixer_mix_drawing;
|
||||
extern GtkWidget *mixer_clear_peaks_button;
|
||||
extern GtkWidget *mixer_drawing[20];
|
||||
extern GtkObject *mixer_adj[20][2];
|
||||
extern GtkAdjustment *mixer_adj[20][2];
|
||||
extern GtkWidget *mixer_vscale[20][2];
|
||||
extern GtkWidget *mixer_solo_toggle[20][2];
|
||||
extern GtkWidget *mixer_mute_toggle[20][2];
|
||||
|
|
@ -108,7 +108,7 @@ extern GtkWidget *hw_master_clock_actual_rate_label;
|
|||
extern GtkWidget *hw_rate_locking_check;
|
||||
extern GtkWidget *hw_rate_reset_check;
|
||||
|
||||
extern GtkObject *hw_volume_change_adj;
|
||||
extern GtkAdjustment *hw_volume_change_adj;
|
||||
extern GtkWidget *hw_volume_change_spin;
|
||||
|
||||
extern GtkWidget *hw_spdif_profi_nonaudio_radio;
|
||||
|
|
@ -151,9 +151,9 @@ extern GtkWidget *input_interface_internal;
|
|||
extern GtkWidget *input_interface_front_input;
|
||||
extern GtkWidget *input_interface_rear_input;
|
||||
extern GtkWidget *input_interface_wavetable;
|
||||
extern GtkObject *av_dac_volume_adj[];
|
||||
extern GtkObject *av_adc_volume_adj[];
|
||||
extern GtkObject *av_ipga_volume_adj[];
|
||||
extern GtkAdjustment *av_dac_volume_adj[];
|
||||
extern GtkAdjustment *av_adc_volume_adj[];
|
||||
extern GtkAdjustment *av_ipga_volume_adj[];
|
||||
extern GtkLabel *av_dac_volume_label[];
|
||||
extern GtkLabel *av_adc_volume_label[];
|
||||
extern GtkLabel *av_ipga_volume_label[];
|
||||
|
|
@ -163,8 +163,7 @@ extern GtkWidget *av_adc_sense_radio[][4];
|
|||
/* flags */
|
||||
extern int card_is_dmx6fire;
|
||||
|
||||
gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event);
|
||||
gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event);
|
||||
gboolean level_meters_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data);
|
||||
gint level_meters_timeout_callback(gpointer data);
|
||||
void level_meters_reset_peaks(GtkButton *button, gpointer data);
|
||||
void level_meters_init(void);
|
||||
|
|
@ -238,6 +237,5 @@ void ipga_volume_adjust(GtkAdjustment *adj, gpointer data);
|
|||
void dac_sense_toggled(GtkWidget *togglebutton, gpointer data);
|
||||
void adc_sense_toggled(GtkWidget *togglebutton, gpointer data);
|
||||
|
||||
void control_input_callback(gpointer data, gint source, GdkInputCondition condition);
|
||||
void mixer_input_callback(gpointer data, gint source, GdkInputCondition condition);
|
||||
gboolean control_input_callback(GIOChannel *gio, GIOCondition condition, gpointer data);
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,14 @@ static inline int is_update_needed(void);
|
|||
|
||||
static int is_active(GtkWidget *widget)
|
||||
{
|
||||
return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0;
|
||||
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0;
|
||||
}
|
||||
|
||||
static void label_set(GtkWidget* widget, const char* str)
|
||||
{
|
||||
const char* old = gtk_label_get_text(GTK_LABEL(widget));
|
||||
if (strcmp(old, str))
|
||||
gtk_label_set_text(GTK_LABEL(widget), str);
|
||||
}
|
||||
|
||||
void master_clock_update(void)
|
||||
|
|
@ -170,8 +177,8 @@ gint master_clock_status_timeout_callback(gpointer data)
|
|||
snd_ctl_elem_value_set_name(sw, "Word Clock Status");
|
||||
if ((err = snd_ctl_elem_read(ctl, sw)) < 0)
|
||||
g_print("Unable to determine word clock status: %s\n", snd_strerror(err));
|
||||
gtk_label_set_text(GTK_LABEL(hw_master_clock_status_label),
|
||||
snd_ctl_elem_value_get_boolean(sw, 0) ? "No signal" : "Locked");
|
||||
label_set(hw_master_clock_status_label,
|
||||
snd_ctl_elem_value_get_boolean(sw, 0) ? "No signal" : "Locked");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -246,7 +253,7 @@ gint internal_clock_status_timeout_callback(gpointer data)
|
|||
}
|
||||
}
|
||||
}
|
||||
gtk_label_set_text(GTK_LABEL(hw_master_clock_actual_rate_label), label);
|
||||
label_set(hw_master_clock_actual_rate_label, label);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -354,7 +361,7 @@ void volume_change_rate_adj(GtkAdjustment *adj, gpointer data)
|
|||
{
|
||||
int err;
|
||||
|
||||
snd_ctl_elem_value_set_integer(volume_rate, 0, adj->value);
|
||||
snd_ctl_elem_value_set_integer(volume_rate, 0, gtk_adjustment_get_value(adj));
|
||||
if ((err = snd_ctl_elem_write(ctl, volume_rate)) < 0)
|
||||
g_print("Unable to write volume change rate: %s\n", snd_strerror(err));
|
||||
}
|
||||
|
|
@ -455,9 +462,9 @@ void profi_stream_toggled(GtkWidget *togglebutton, gpointer data)
|
|||
return;
|
||||
iec958.status[1] &= ~IEC958_AES1_PRO_MODE;
|
||||
if (!strcmp(str, "NOTID")) {
|
||||
iec958.status[0] |= IEC958_AES1_PRO_MODE_STEREOPHONIC;
|
||||
iec958.status[1] |= IEC958_AES1_PRO_MODE_NOTID;
|
||||
} else if (!strcmp(str, "Stereo")) {
|
||||
iec958.status[0] |= IEC958_AES1_PRO_MODE_NOTID;
|
||||
iec958.status[1] |= IEC958_AES1_PRO_MODE_STEREOPHONIC;
|
||||
}
|
||||
snd_ctl_elem_value_set_iec958(spdif_output, &iec958);
|
||||
spdif_output_write();
|
||||
|
|
@ -500,7 +507,7 @@ void consumer_copyright_toggled(GtkWidget *togglebutton, gpointer data)
|
|||
if (!strcmp(str, "Copyright")) {
|
||||
iec958.status[0] &= ~IEC958_AES0_CON_NOT_COPYRIGHT;
|
||||
} else if (!strcmp(str, "Permitted")) {
|
||||
iec958.status[1] |= IEC958_AES0_CON_NOT_COPYRIGHT;
|
||||
iec958.status[0] |= IEC958_AES0_CON_NOT_COPYRIGHT;
|
||||
}
|
||||
snd_ctl_elem_value_set_iec958(spdif_output, &iec958);
|
||||
spdif_output_write();
|
||||
|
|
@ -517,9 +524,9 @@ void consumer_copy_toggled(GtkWidget *togglebutton, gpointer data)
|
|||
if (iec958.status[0] & IEC958_AES0_PROFESSIONAL)
|
||||
return;
|
||||
if (!strcmp(str, "1st")) {
|
||||
iec958.status[0] |= IEC958_AES1_CON_ORIGINAL;
|
||||
} else if (!strcmp(str, "Original")) {
|
||||
iec958.status[1] &= ~IEC958_AES1_CON_ORIGINAL;
|
||||
} else if (!strcmp(str, "Original")) {
|
||||
iec958.status[1] |= IEC958_AES1_CON_ORIGINAL;
|
||||
}
|
||||
snd_ctl_elem_value_set_iec958(spdif_output, &iec958);
|
||||
spdif_output_write();
|
||||
|
|
@ -539,7 +546,7 @@ void consumer_emphasis_toggled(GtkWidget *togglebutton, gpointer data)
|
|||
if (!strcmp(str, "No")) {
|
||||
iec958.status[0] |= IEC958_AES0_CON_EMPHASIS_NONE;
|
||||
} else if (!strcmp(str, "5015")) {
|
||||
iec958.status[1] |= ~IEC958_AES0_CON_EMPHASIS_5015;
|
||||
iec958.status[0] |= IEC958_AES0_CON_EMPHASIS_5015;
|
||||
}
|
||||
snd_ctl_elem_value_set_iec958(spdif_output, &iec958);
|
||||
spdif_output_write();
|
||||
|
|
@ -555,15 +562,15 @@ void consumer_category_toggled(GtkWidget *togglebutton, gpointer data)
|
|||
return;
|
||||
if (iec958.status[0] & IEC958_AES0_PROFESSIONAL)
|
||||
return;
|
||||
iec958.status[0] &= ~IEC958_AES1_CON_CATEGORY;
|
||||
iec958.status[1] &= ~IEC958_AES1_CON_CATEGORY;
|
||||
if (!strcmp(str, "DAT")) {
|
||||
iec958.status[0] |= IEC958_AES1_CON_DAT;
|
||||
iec958.status[1] |= IEC958_AES1_CON_DAT;
|
||||
} else if (!strcmp(str, "PCM")) {
|
||||
iec958.status[0] |= IEC958_AES1_CON_PCM_CODER;
|
||||
iec958.status[1] |= IEC958_AES1_CON_PCM_CODER;
|
||||
} else if (!strcmp(str, "CD")) {
|
||||
iec958.status[0] |= IEC958_AES1_CON_IEC908_CD;
|
||||
iec958.status[1] |= IEC958_AES1_CON_IEC908_CD;
|
||||
} else if (!strcmp(str, "General")) {
|
||||
iec958.status[0] |= IEC958_AES1_CON_GENERAL;
|
||||
iec958.status[1] |= IEC958_AES1_CON_GENERAL;
|
||||
}
|
||||
snd_ctl_elem_value_set_iec958(spdif_output, &iec958);
|
||||
spdif_output_write();
|
||||
|
|
@ -598,7 +605,7 @@ void spdif_output_toggled(GtkWidget *togglebutton, gpointer data)
|
|||
page = 1;
|
||||
}
|
||||
spdif_output_write();
|
||||
gtk_notebook_set_page(GTK_NOTEBOOK(hw_spdif_output_notebook), page);
|
||||
gtk_notebook_set_current_page(GTK_NOTEBOOK(hw_spdif_output_notebook), page);
|
||||
spdif_output_update();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,13 +19,13 @@
|
|||
|
||||
#include "envy24control.h"
|
||||
|
||||
static GdkGC *penGreenShadow[21] = { NULL, };
|
||||
static GdkGC *penGreenLight[21] = { NULL, };
|
||||
static GdkGC *penOrangeShadow[21] = { NULL, };
|
||||
static GdkGC *penOrangeLight[21] = { NULL, };
|
||||
static GdkGC *penRedShadow[21] = { NULL, };
|
||||
static GdkGC *penRedLight[21] = { NULL, };
|
||||
static GdkPixmap *pixmap[21] = { NULL, };
|
||||
static GdkRGBA *penGreenShadow = NULL;
|
||||
static GdkRGBA *penGreenLight = NULL;
|
||||
static GdkRGBA *penOrangeShadow = NULL;
|
||||
static GdkRGBA *penOrangeLight = NULL;
|
||||
static GdkRGBA *penRedShadow = NULL;
|
||||
static GdkRGBA *penRedLight = NULL;
|
||||
static int level[22] = { 0 };
|
||||
static snd_ctl_elem_value_t *peaks;
|
||||
|
||||
extern int input_channels, output_channels, pcm_output_channels, spdif_channels, view_spdif_playback;
|
||||
|
|
@ -50,22 +50,19 @@ static void get_levels(int idx, int *l1, int *l2)
|
|||
}
|
||||
}
|
||||
|
||||
static GdkGC *get_pen(int idx, int nRed, int nGreen, int nBlue)
|
||||
static GdkRGBA *get_pen(int nRed, int nGreen, int nBlue)
|
||||
{
|
||||
GdkColor *c;
|
||||
GdkGC *gc;
|
||||
GdkRGBA *c;
|
||||
|
||||
c = (GdkColor *)g_malloc(sizeof(GdkColor));
|
||||
c->red = nRed;
|
||||
c->green = nGreen;
|
||||
c->blue = nBlue;
|
||||
gdk_color_alloc(gdk_colormap_get_system(), c);
|
||||
gc = gdk_gc_new(pixmap[idx]);
|
||||
gdk_gc_set_foreground(gc, c);
|
||||
return gc;
|
||||
c = (GdkRGBA *)g_malloc(sizeof(GdkRGBA));
|
||||
c->red = nRed / 65535.0;
|
||||
c->green = nGreen / 65535.0;
|
||||
c->blue = nBlue / 65535.0;
|
||||
c->alpha = 1.0;
|
||||
return c;
|
||||
}
|
||||
|
||||
static int get_index(gchar *name)
|
||||
static int get_index(const gchar *name)
|
||||
{
|
||||
int result;
|
||||
|
||||
|
|
@ -79,7 +76,7 @@ static int get_index(gchar *name)
|
|||
return result;
|
||||
}
|
||||
|
||||
static void redraw_meters(int idx, int width, int height, int level1, int level2)
|
||||
static void redraw_meters(int idx, int width, int height, int level1, int level2, cairo_t *cr)
|
||||
{
|
||||
int stereo = idx == 0;
|
||||
int segment_width = stereo ? (width / 2) - 8 : width - 12;
|
||||
|
|
@ -90,167 +87,156 @@ static void redraw_meters(int idx, int width, int height, int level1, int level2
|
|||
int seg;
|
||||
int segs_on1 = ((segments * level1) + 128) / 255;
|
||||
int segs_on2 = ((segments * level2) + 128) / 255;
|
||||
int end_seg;
|
||||
GdkRectangle clip;
|
||||
|
||||
// g_print("segs_on1 = %i (%i), segs_on2 = %i (%i)\n", segs_on1, level1, segs_on2, level2);
|
||||
for (seg = 0; seg < green_segments; seg++) {
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
segs_on1 > 0 ? penGreenLight[idx] : penGreenShadow[idx],
|
||||
TRUE,
|
||||
6, 3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
if (stereo)
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
segs_on2 > 0 ? penGreenLight[idx] : penGreenShadow[idx],
|
||||
TRUE,
|
||||
2 + (width / 2),
|
||||
3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_rectangle(cr, 0, 0, width, height);
|
||||
cairo_fill(cr);
|
||||
|
||||
gdk_cairo_get_clip_rectangle(cr, &clip);
|
||||
seg = segments - (clip.y + clip.height) / 4;
|
||||
if (seg < 0)
|
||||
seg = 0;
|
||||
segs_on1 -= seg;
|
||||
segs_on2 -= seg;
|
||||
end_seg = segments - (clip.y - 2) / 4;
|
||||
|
||||
for (; seg < green_segments && seg < end_seg; seg++) {
|
||||
gdk_cairo_set_source_rgba(cr,
|
||||
segs_on1 > 0 ? penGreenLight : penGreenShadow);
|
||||
cairo_rectangle(cr,
|
||||
6, 3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_fill(cr);
|
||||
if (stereo) {
|
||||
gdk_cairo_set_source_rgba(cr,
|
||||
segs_on2 > 0 ? penGreenLight : penGreenShadow);
|
||||
cairo_rectangle(cr,
|
||||
2 + (width / 2),
|
||||
3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_fill(cr);
|
||||
}
|
||||
segs_on1--;
|
||||
segs_on2--;
|
||||
}
|
||||
for (seg = green_segments; seg < green_segments + orange_segments; seg++) {
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
segs_on1 > 0 ? penOrangeLight[idx] : penOrangeShadow[idx],
|
||||
TRUE,
|
||||
6, 3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
if (stereo)
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
segs_on2 > 0 ? penOrangeLight[idx] : penOrangeShadow[idx],
|
||||
TRUE,
|
||||
2 + (width / 2),
|
||||
3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
for (; seg < green_segments + orange_segments && seg < end_seg; seg++) {
|
||||
gdk_cairo_set_source_rgba(cr,
|
||||
segs_on1 > 0 ? penOrangeLight : penOrangeShadow);
|
||||
cairo_rectangle(cr,
|
||||
6, 3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_fill(cr);
|
||||
if (stereo) {
|
||||
gdk_cairo_set_source_rgba(cr,
|
||||
segs_on2 > 0 ? penOrangeLight : penOrangeShadow);
|
||||
cairo_rectangle(cr,
|
||||
2 + (width / 2),
|
||||
3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_fill(cr);
|
||||
}
|
||||
segs_on1--;
|
||||
segs_on2--;
|
||||
}
|
||||
for (seg = green_segments + orange_segments; seg < segments; seg++) {
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
segs_on1 > 0 ? penRedLight[idx] : penRedShadow[idx],
|
||||
TRUE,
|
||||
6, 3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
if (stereo)
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
segs_on2 > 0 ? penRedLight[idx] : penRedShadow[idx],
|
||||
TRUE,
|
||||
2 + (width / 2),
|
||||
3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
for (; seg < segments && seg < end_seg; seg++) {
|
||||
gdk_cairo_set_source_rgba(cr,
|
||||
segs_on1 > 0 ? penRedLight : penRedShadow);
|
||||
cairo_rectangle(cr,
|
||||
6, 3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_fill(cr);
|
||||
if (stereo) {
|
||||
gdk_cairo_set_source_rgba(cr,
|
||||
segs_on2 > 0 ? penRedLight : penRedShadow);
|
||||
cairo_rectangle(cr,
|
||||
2 + (width / 2),
|
||||
3 + ((segments - seg - 1) * 4),
|
||||
segment_width,
|
||||
3);
|
||||
cairo_fill(cr);
|
||||
}
|
||||
segs_on1--;
|
||||
segs_on2--;
|
||||
}
|
||||
}
|
||||
|
||||
gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event)
|
||||
{
|
||||
int idx = get_index(gtk_widget_get_name(widget));
|
||||
|
||||
if (pixmap[idx] != NULL)
|
||||
gdk_pixmap_unref(pixmap[idx]);
|
||||
pixmap[idx] = gdk_pixmap_new(widget->window,
|
||||
widget->allocation.width,
|
||||
widget->allocation.height,
|
||||
-1);
|
||||
penGreenShadow[idx] = get_pen(idx, 0, 0x77ff, 0);
|
||||
penGreenLight[idx] = get_pen(idx, 0, 0xffff, 0);
|
||||
penOrangeShadow[idx] = get_pen(idx, 0xddff, 0x55ff, 0);
|
||||
penOrangeLight[idx] = get_pen(idx, 0xffff, 0x99ff, 0);
|
||||
penRedShadow[idx] = get_pen(idx, 0xaaff, 0, 0);
|
||||
penRedLight[idx] = get_pen(idx, 0xffff, 0, 0);
|
||||
gdk_draw_rectangle(pixmap[idx],
|
||||
widget->style->black_gc,
|
||||
TRUE,
|
||||
0, 0,
|
||||
widget->allocation.width,
|
||||
widget->allocation.height);
|
||||
// g_print("configure: %i:%i\n", widget->allocation.width, widget->allocation.height);
|
||||
redraw_meters(idx, widget->allocation.width, widget->allocation.height, 0, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event)
|
||||
gboolean level_meters_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data)
|
||||
{
|
||||
int idx = get_index(gtk_widget_get_name(widget));
|
||||
int l1, l2;
|
||||
|
||||
get_levels(idx, &l1, &l2);
|
||||
redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2);
|
||||
gdk_draw_pixmap(widget->window,
|
||||
widget->style->black_gc,
|
||||
pixmap[idx],
|
||||
event->area.x, event->area.y,
|
||||
event->area.x, event->area.y,
|
||||
event->area.width, event->area.height);
|
||||
redraw_meters(idx, gtk_widget_get_allocated_width(widget), gtk_widget_get_allocated_height(widget), l1, l2, cr);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void update_meter(int idx)
|
||||
{
|
||||
int stereo = idx == 0;
|
||||
GtkWidget *widget = stereo ? mixer_mix_drawing : mixer_drawing[idx - 1];
|
||||
int width = gtk_widget_get_allocated_width(widget);
|
||||
int height = gtk_widget_get_allocated_height(widget);
|
||||
int segments = (height - 6) / 4;
|
||||
int level_idx = stereo ? 20 : idx - 1;
|
||||
int l1, l2, segs_on, old_segs_on, h;
|
||||
|
||||
get_levels(idx, &l1, &l2);
|
||||
segs_on = ((segments * l1) + 128) / 255;
|
||||
old_segs_on = ((segments * level[level_idx]) + 128) / 255;
|
||||
h = abs(old_segs_on - segs_on);
|
||||
level[level_idx] = l1;
|
||||
|
||||
if (h > 0) {
|
||||
int y = segments - MAX(old_segs_on, segs_on);
|
||||
gtk_widget_queue_draw_area(widget,
|
||||
6, 4 * y + 3,
|
||||
stereo ? (width / 2) - 8 : width - 12,
|
||||
4 * h - 1);
|
||||
}
|
||||
|
||||
if (stereo) {
|
||||
level_idx++;
|
||||
segs_on = ((segments * l2) + 128) / 255;
|
||||
old_segs_on = ((segments * level[level_idx]) + 128) / 255;
|
||||
h = abs(old_segs_on - segs_on);
|
||||
level[level_idx] = l2;
|
||||
|
||||
if (h > 0) {
|
||||
int y = segments - MAX(old_segs_on, segs_on);
|
||||
gtk_widget_queue_draw_area(widget,
|
||||
2 + (width / 2), 4 * y + 3,
|
||||
(width / 2) - 8,
|
||||
4 * h - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gint level_meters_timeout_callback(gpointer data)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
int idx, l1, l2;
|
||||
int idx;
|
||||
|
||||
update_peak_switch();
|
||||
for (idx = 0; idx <= pcm_output_channels; idx++) {
|
||||
get_levels(idx, &l1, &l2);
|
||||
widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1];
|
||||
if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) {
|
||||
redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2);
|
||||
gdk_draw_pixmap(widget->window,
|
||||
widget->style->black_gc,
|
||||
pixmap[idx],
|
||||
0, 0,
|
||||
0, 0,
|
||||
widget->allocation.width, widget->allocation.height);
|
||||
}
|
||||
update_meter(idx);
|
||||
}
|
||||
if (view_spdif_playback) {
|
||||
for (idx = MAX_PCM_OUTPUT_CHANNELS + 1; idx <= MAX_OUTPUT_CHANNELS + spdif_channels; idx++) {
|
||||
get_levels(idx, &l1, &l2);
|
||||
widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1];
|
||||
if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) {
|
||||
redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2);
|
||||
gdk_draw_pixmap(widget->window,
|
||||
widget->style->black_gc,
|
||||
pixmap[idx],
|
||||
0, 0,
|
||||
0, 0,
|
||||
widget->allocation.width, widget->allocation.height);
|
||||
}
|
||||
update_meter(idx);
|
||||
}
|
||||
}
|
||||
for (idx = MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1; idx <= input_channels + MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS; idx++) {
|
||||
get_levels(idx, &l1, &l2);
|
||||
widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1];
|
||||
if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) {
|
||||
redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2);
|
||||
gdk_draw_pixmap(widget->window,
|
||||
widget->style->black_gc,
|
||||
pixmap[idx],
|
||||
0, 0,
|
||||
0, 0,
|
||||
widget->allocation.width, widget->allocation.height);
|
||||
}
|
||||
update_meter(idx);
|
||||
}
|
||||
for (idx = MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + 1; \
|
||||
idx <= spdif_channels + MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS; idx++) {
|
||||
get_levels(idx, &l1, &l2);
|
||||
widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1];
|
||||
if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) {
|
||||
redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2);
|
||||
gdk_draw_pixmap(widget->window,
|
||||
widget->style->black_gc,
|
||||
pixmap[idx],
|
||||
0, 0,
|
||||
0, 0,
|
||||
widget->allocation.width, widget->allocation.height);
|
||||
}
|
||||
update_meter(idx);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -270,6 +256,13 @@ void level_meters_init(void)
|
|||
/* older ALSA driver, using MIXER type */
|
||||
snd_ctl_elem_value_set_interface(peaks,
|
||||
SND_CTL_ELEM_IFACE_MIXER);
|
||||
|
||||
penGreenShadow = get_pen(0, 0x77ff, 0);
|
||||
penGreenLight = get_pen(0, 0xffff, 0);
|
||||
penOrangeShadow = get_pen(0xddff, 0x55ff, 0);
|
||||
penOrangeLight = get_pen(0xffff, 0x99ff, 0);
|
||||
penRedShadow = get_pen(0xaaff, 0, 0);
|
||||
penRedLight = get_pen(0xffff, 0, 0);
|
||||
}
|
||||
|
||||
void level_meters_postinit(void)
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ int midi_init(char *appname, int channel, int midi_enhanced)
|
|||
void mixer_adjust(GtkAdjustment *adj, gpointer data);
|
||||
void mixer_set_mute(int stream, int left, int right);
|
||||
|
||||
void midi_process(gpointer data, gint source, GdkInputCondition condition)
|
||||
gboolean midi_process(GIOChannel *gio, GIOCondition condition, gpointer data)
|
||||
{
|
||||
snd_seq_event_t *ev;
|
||||
static GtkAdjustment *adj=0;
|
||||
|
|
@ -306,6 +306,7 @@ void midi_process(gpointer data, gint source, GdkInputCondition condition)
|
|||
snd_seq_free_event(ev);
|
||||
}
|
||||
while (snd_seq_event_input_pending(seq, 0) > 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* ************************************************* */
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ int midi_init(char *appname, int channel, int midi_enhanced);
|
|||
int midi_close();
|
||||
void midi_maxstreams(int);
|
||||
int midi_controller(int c, int v);
|
||||
void midi_process(gpointer data, gint source, GdkInputCondition condition);
|
||||
gboolean midi_process(GIOChannel *gio, GIOCondition condition, gpointer data);
|
||||
int midi_button(int b, int v);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ extern int input_channels, output_channels, pcm_output_channels, spdif_channels,
|
|||
|
||||
static int is_active(GtkWidget *widget)
|
||||
{
|
||||
return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0;
|
||||
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0;
|
||||
}
|
||||
|
||||
void mixer_update_stream(int stream, int vol_flag, int sw_flag)
|
||||
|
|
@ -181,10 +181,10 @@ void mixer_adjust(GtkAdjustment *adj, gpointer data)
|
|||
int stereo = is_active(mixer_stereo_toggle[stream-1]) ? 1 : 0;
|
||||
int vol[2] = { -1, -1 };
|
||||
|
||||
vol[button] = 96 - adj->value;
|
||||
vol[button] = 96 - gtk_adjustment_get_value(adj);
|
||||
if (stereo) {
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][button ^ 1]), adj->value);
|
||||
vol[button ^ 1] = 96 - adj->value;
|
||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][button ^ 1]), gtk_adjustment_get_value(adj));
|
||||
vol[button ^ 1] = 96 - gtk_adjustment_get_value(adj);
|
||||
}
|
||||
set_volume1(stream, vol[0], vol[1]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ int new_process(char * const cmd_line[MAX_PARAM])
|
|||
struct stat file_status;
|
||||
|
||||
/* memory for storage of function pointers from the signal handling routines */
|
||||
void (*int_stat)();
|
||||
void (*quit_stat)();
|
||||
void (*usr2_stat)();
|
||||
void (*int_stat)(int);
|
||||
void (*quit_stat)(int);
|
||||
void (*usr2_stat)(int);
|
||||
|
||||
/*
|
||||
* check command file
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ extern int output_channels, input_channels, pcm_output_channels, spdif_channels;
|
|||
|
||||
static int is_active(GtkWidget *widget)
|
||||
{
|
||||
return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0;
|
||||
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0;
|
||||
}
|
||||
|
||||
static int get_toggle_index(int stream)
|
||||
|
|
|
|||
|
|
@ -54,9 +54,9 @@ void subst_tilde_in_filename(char * const filename)
|
|||
|
||||
if ((pos_after_tilde = strchr(filename, '~')) != NULL) {
|
||||
pos_after_tilde++;
|
||||
strncpy(new_filename, getenv("HOME"), MAX_FILE_NAME_LENGTH);
|
||||
strncpy(new_filename + strlen(new_filename), pos_after_tilde, MAX_FILE_NAME_LENGTH - strlen(new_filename));
|
||||
new_filename[MAX_FILE_NAME_LENGTH - 1] = '\0';
|
||||
strncpy(new_filename, getenv("HOME"), sizeof(new_filename) - 1);
|
||||
strncpy(new_filename + strlen(new_filename), pos_after_tilde, sizeof(new_filename) - strlen(new_filename) - 1);
|
||||
new_filename[sizeof(new_filename) - 1] = '\0';
|
||||
strncpy(filename, new_filename, MAX_FILE_NAME_LENGTH);
|
||||
}
|
||||
}
|
||||
|
|
@ -78,7 +78,9 @@ int which_cfgfile(char ** const cfgfile)
|
|||
(inputFile = fopen(SYS_PROFILERC, "r")) == NULL) {
|
||||
res = -ENOENT;
|
||||
} else {
|
||||
fclose(inputFile);
|
||||
if (inputFile != NULL) {
|
||||
fclose(inputFile);
|
||||
}
|
||||
*cfgfile = SYS_PROFILERC;
|
||||
res = EXIT_SUCCESS;
|
||||
}
|
||||
|
|
@ -94,7 +96,9 @@ int get_file_size(const char * const filename)
|
|||
{
|
||||
struct stat file_status;
|
||||
|
||||
strncpy(filename_without_tilde, filename, MAX_FILE_NAME_LENGTH);
|
||||
if (filename_without_tilde != filename) {
|
||||
strncpy(filename_without_tilde, filename, MAX_FILE_NAME_LENGTH);
|
||||
}
|
||||
filename_without_tilde[MAX_FILE_NAME_LENGTH - 1] = '\0';
|
||||
subst_tilde_in_filename(filename_without_tilde);
|
||||
if (stat(filename_without_tilde, &file_status) < 0) {
|
||||
|
|
@ -470,7 +474,8 @@ int get_pos_name_header_from_card(const char * const buffer, const int profile_n
|
|||
char place_holder;
|
||||
int pos_card_begin, pos_card_end, pos_name_header;
|
||||
|
||||
pos_card_begin = get_card_begin(buffer, profile_number, card_number);
|
||||
if ((pos_card_begin = get_card_begin(buffer, profile_number, card_number)) < 0)
|
||||
return pos_card_begin;
|
||||
pos_card_end = get_card_end(buffer, profile_number, card_number);
|
||||
place_holder = PLACE_HOLDER_STR;
|
||||
strncpy(header, PROFILE_NAME_TEMPL, MAX_SEARCH_FIELD_LENGTH);
|
||||
|
|
@ -522,7 +527,7 @@ int reorganize_profiles(char * const buffer, const int max_length)
|
|||
{
|
||||
int profile_number, card_number, card_number_max;
|
||||
int res;
|
||||
int pos_profile_begin, pos_profile_end, pos_card_begin, pos_card_end, pos_name_header;
|
||||
int pos_profile_begin, pos_card_begin, pos_card_end, pos_name_header;
|
||||
int pos_alsa_section_begin, pos_after_alsa_section;
|
||||
char header[MAX_SEARCH_FIELD_LENGTH];
|
||||
void *buffer_copy = NULL;
|
||||
|
|
@ -547,7 +552,6 @@ int reorganize_profiles(char * const buffer, const int max_length)
|
|||
compose_search_string(header, PROFILE_HEADER_TEMPL, profile_or_card_number_as_str, place_holder, MAX_SEARCH_FIELD_LENGTH);
|
||||
header[MAX_SEARCH_FIELD_LENGTH - 1] = '\0';
|
||||
snprintf(buffer_copy + strlen(buffer_copy), max_length - strlen(buffer_copy), "%s\n", header);
|
||||
pos_profile_end = get_profile_end(buffer, profile_number);
|
||||
/* search max card number in profile */
|
||||
card_number_max = get_max_card_number_in_profile(buffer, profile_number);
|
||||
for (card_number = 0; card_number <= card_number_max; card_number++)
|
||||
|
|
@ -641,9 +645,9 @@ int save_restore_alsactl_settings(char * const tmpfile, const int card_number, c
|
|||
|
||||
void compose_tmpfile_name(char * const tmpfile, const char * const cfgfile)
|
||||
{
|
||||
strncpy(tmpfile, cfgfile, MAX_FILE_NAME_LENGTH);
|
||||
strncpy(tmpfile, cfgfile, MAX_FILE_NAME_LENGTH - 1);
|
||||
tmpfile[MAX_FILE_NAME_LENGTH - 1] = '\0';
|
||||
strncpy(tmpfile + strlen(tmpfile), "_alsactl_tmp", MAX_FILE_NAME_LENGTH - strlen(tmpfile));
|
||||
strncpy(tmpfile + strlen(tmpfile), "_alsactl_tmp", MAX_FILE_NAME_LENGTH - strlen(tmpfile) - 1);
|
||||
tmpfile[MAX_FILE_NAME_LENGTH - 1] = '\0';
|
||||
}
|
||||
|
||||
|
|
@ -1145,13 +1149,16 @@ int save_restore(const char * const operation, const int profile_number, const i
|
|||
fprintf(stderr, "Cannot save settings for card '%d' in profile '%d'.\n", card_number, profile_number);
|
||||
return -errno;
|
||||
}
|
||||
close(res);
|
||||
unlink(cfgfile);
|
||||
} else {
|
||||
close(res);
|
||||
if ((res = open(cfgfile, O_RDWR | 0400000 /* O_NOFOLLOW */, FILE_CREA_MODE)) < 0) {
|
||||
fprintf(stderr, "Cannot open configuration file '%s' for writing.\n", cfgfile);
|
||||
fprintf(stderr, "Cannot save settings for card '%d' in profile '%d'.\n", card_number, profile_number);
|
||||
return -errno;
|
||||
}
|
||||
close(res);
|
||||
}
|
||||
res = save_profile(profile_number, card_number, profile_name, cfgfile);
|
||||
} else if (!strcmp(operation, ALSACTL_OP_RESTORE)) {
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
#define MAX_PROFILE_SIZE 32768
|
||||
#define MAX_SEARCH_FIELD_LENGTH 1024
|
||||
#define MAX_FILE_NAME_LENGTH 1024
|
||||
#define MAX_NUM_STR_LENGTH 10
|
||||
#define MAX_NUM_STR_LENGTH 11
|
||||
#define TOKEN_SEP "|"
|
||||
#define SEP_CHAR ' '
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ int strstr_icase_blank(const char * const string1, const char * const string2)
|
|||
char search_string[MAX_SEARCH_FIELD_LENGTH];
|
||||
char *pstr;
|
||||
int pos_first_non_blank;
|
||||
size_t len;
|
||||
|
||||
strncpy(search_string, string2, MAX_SEARCH_FIELD_LENGTH);
|
||||
search_string[MAX_SEARCH_FIELD_LENGTH - 1] = '\0';
|
||||
|
|
@ -84,7 +85,11 @@ int strstr_icase_blank(const char * const string1, const char * const string2)
|
|||
}
|
||||
}
|
||||
}
|
||||
strncpy(search_string, cmp_line, strlen(search_string));
|
||||
len = strlen(search_string);
|
||||
if (len > sizeof(search_string) - 1)
|
||||
len = sizeof(search_string) - 1;
|
||||
strncpy(search_string, cmp_line, len);
|
||||
search_string[len] = '\0';
|
||||
|
||||
position = 0;
|
||||
while (position < strlen(string1))
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ void dac_volume_adjust(GtkAdjustment *adj, gpointer data)
|
|||
{
|
||||
int idx = (int)(long)data;
|
||||
snd_ctl_elem_value_t *val;
|
||||
int err, ival = -(int)adj->value;
|
||||
int err, ival = -(int)gtk_adjustment_get_value(adj);
|
||||
char text[16];
|
||||
|
||||
snd_ctl_elem_value_alloca(&val);
|
||||
|
|
@ -235,7 +235,7 @@ void adc_volume_adjust(GtkAdjustment *adj, gpointer data)
|
|||
{
|
||||
int idx = (int)(long)data;
|
||||
snd_ctl_elem_value_t *val;
|
||||
int err, ival = -(int)adj->value;
|
||||
int err, ival = -(int)gtk_adjustment_get_value(adj);
|
||||
char text[16];
|
||||
|
||||
snd_ctl_elem_value_alloca(&val);
|
||||
|
|
@ -253,7 +253,7 @@ void ipga_volume_adjust(GtkAdjustment *adj, gpointer data)
|
|||
{
|
||||
int idx = (int)(long)data;
|
||||
snd_ctl_elem_value_t *val;
|
||||
int err, ival = -(int)adj->value;
|
||||
int err, ival = -(int)gtk_adjustment_get_value(adj);
|
||||
char text[16];
|
||||
|
||||
snd_ctl_elem_value_alloca(&val);
|
||||
|
|
|
|||
|
|
@ -213,9 +213,11 @@ cleanup:
|
|||
static gboolean restore_soundserver(struct soundserver* state, GError** err)
|
||||
{
|
||||
gboolean ok = FALSE;
|
||||
gchar* clientconf;
|
||||
|
||||
switch (state->type) {
|
||||
case PULSEAUDIO:
|
||||
gchar* clientconf = get_pulseaudio_client_conf();
|
||||
clientconf = get_pulseaudio_client_conf();
|
||||
if (state->was_killed && g_unlink(clientconf) != 0) {
|
||||
g_set_error(err, quark(), 0, "%s", g_strerror(errno));
|
||||
g_free(clientconf);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int
|
|||
|
||||
gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device,
|
||||
const char* model, const char* hints, GError** err);
|
||||
gboolean reset_changes_boot();
|
||||
gboolean reset_changes_boot(GError ** err);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public:
|
|||
HC_AboutText(int x, int y, int w, int h);
|
||||
void draw();
|
||||
private:
|
||||
char *text;
|
||||
const char *text;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
#pragma implementation
|
||||
#include "HC_Aeb.h"
|
||||
|
||||
static void setAebStatus(char *ctl_name, int val, int card_index)
|
||||
static void setAebStatus(const char *ctl_name, int val, int card_index)
|
||||
{
|
||||
int err;
|
||||
char card_name[6];
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
#pragma implementation
|
||||
#include "HC_SpdifOut.h"
|
||||
|
||||
static void setSpdifBit(char *ctl_name, int val, int card_index)
|
||||
static void setSpdifBit(const char *ctl_name, int val, int card_index)
|
||||
{
|
||||
int err;
|
||||
char card_name[6];
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public:
|
|||
void setAdatSyncStatus(unsigned char s);
|
||||
void setWCStatus(unsigned char s);
|
||||
private:
|
||||
char *adat_name;
|
||||
const char *adat_name;
|
||||
int h_step;
|
||||
Fl_Box_Draw_F *draw_box;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ static char const *labels_aio_ss_input[18] = {
|
|||
"AES.L", "AES.R",
|
||||
"A 1", "A 2", "A 3", "A 4",
|
||||
"A 5", "A 6", "A 7", "A 8",
|
||||
"AEB 1", "AEB 2", "AEB 3," "AEB 4"
|
||||
"AEB 1", "AEB 2", "AEB 3", "AEB 4"
|
||||
};
|
||||
|
||||
static char const *labels_aio_ss_playback[20] = {
|
||||
|
|
|
|||
|
|
@ -354,7 +354,7 @@ int dump_load(int audigy, char *file_name)
|
|||
fctrl = (ld10k1_ctl_dump_t *)ptr;
|
||||
memset(ctrl, 0, sizeof(emu10k1_fx8010_control_gpr_t) * header->ctl_count);
|
||||
for (i = 0; i < header->ctl_count; i++) {
|
||||
strcpy(ctrl[i].id.name, fctrl[i].name);
|
||||
strcpy((char *)ctrl[i].id.name, fctrl[i].name);
|
||||
ctrl[i].id.iface = EMU10K1_CTL_ELEM_IFACE_MIXER;
|
||||
ctrl[i].id.index = fctrl[i].index;
|
||||
ctrl[i].vcount = fctrl[i].vcount;
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ void error(const char *fmt, ...)
|
|||
va_end(va);
|
||||
}
|
||||
|
||||
static void log(const char *fmt, ...)
|
||||
static void alog(const char *fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
|
||||
|
|
@ -116,7 +116,7 @@ static void cleanup()
|
|||
{
|
||||
if (pidpath[0])
|
||||
unlink(pidpath);
|
||||
log("Exiting daemon");
|
||||
alog("Exiting daemon");
|
||||
}
|
||||
|
||||
static void term_handler(int i)
|
||||
|
|
@ -247,7 +247,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
pidfile = fopen(pidpath, "wt");
|
||||
if (!pidfile) {
|
||||
log("%s: pidfile (%s)\n", strerror(errno), pidpath);
|
||||
alog("%s: pidfile (%s)\n", strerror(errno), pidpath);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -263,7 +263,7 @@ int main(int argc, char *argv[])
|
|||
dup2(fileno(logfile), fileno(stdout));
|
||||
}
|
||||
|
||||
log("Starting daemon");
|
||||
alog("Starting daemon");
|
||||
}
|
||||
|
||||
params.type = uses_pipe ? COMM_TYPE_LOCAL : COMM_TYPE_IP;
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ int ld10k1_update_driver(ld10k1_dsp_mgr_t *dsp_mgr)
|
|||
if (!add_ctrl)
|
||||
return LD10K1_ERR_NO_MEM;
|
||||
for (i = 0, item = dsp_mgr->add_ctl_list; item != NULL; item = item->next, i++) {
|
||||
strcpy(add_ctrl[i].id.name, item->ctl.name);
|
||||
strcpy((char *)add_ctrl[i].id.name, item->ctl.name);
|
||||
add_ctrl[i].id.iface = EMU10K1_CTL_ELEM_IFACE_MIXER;
|
||||
add_ctrl[i].id.index = item->ctl.index;
|
||||
add_ctrl[i].vcount = item->ctl.vcount;
|
||||
|
|
@ -225,7 +225,7 @@ int ld10k1_update_driver(ld10k1_dsp_mgr_t *dsp_mgr)
|
|||
if (!del_ids)
|
||||
return LD10K1_ERR_NO_MEM;
|
||||
for (i = 0, item = dsp_mgr->del_ctl_list; item != NULL; item = item->next, i++) {
|
||||
strcpy(del_ids[i].name, item->ctl.name);
|
||||
strcpy((char *)del_ids[i].name, item->ctl.name);
|
||||
del_ids[i].iface = EMU10K1_CTL_ELEM_IFACE_MIXER;
|
||||
del_ids[i].index = item->ctl.index;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2152,7 +2152,7 @@ int ld10k1_conn_point_add(ld10k1_dsp_mgr_t *dsp_mgr, ld10k1_conn_point_t *point,
|
|||
int allocgprcount = 0;
|
||||
int allocinstrcount = 0;
|
||||
unsigned int reserved[2];
|
||||
unsigned int res[2];
|
||||
int res[2];
|
||||
int reservedcount = 0;
|
||||
int usedreserved = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -792,12 +792,9 @@ int ld10k1_fnc_name_find(int data_conn, int op, int size)
|
|||
int ld10k1_fnc_name_rename(int data_conn, int op, int size)
|
||||
{
|
||||
ld10k1_fnc_name_t name_info;
|
||||
int ret;
|
||||
int err;
|
||||
ld10k1_patch_t *patch;
|
||||
|
||||
ret = -1;
|
||||
|
||||
if ((err = receive_msg_data(data_conn, &name_info, sizeof(ld10k1_fnc_name_t))) < 0)
|
||||
return err;
|
||||
|
||||
|
|
|
|||
|
|
@ -473,8 +473,9 @@ static int transfer_patch(int udin, char *ctrl_opt, liblo10k1_emu_patch_t *ep, l
|
|||
if (*ctrl_opt != ',') {
|
||||
error("wrong ctrl option format - wrong separator beetwen subfunctions");
|
||||
return 1;
|
||||
} else
|
||||
*ctrl_opt++;
|
||||
} else {
|
||||
ctrl_opt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -691,8 +692,9 @@ static int transfer_native_patch(liblo10k1_dsp_patch_t *p, char *ctrl_opt)
|
|||
if (*ctrl_opt != ',') {
|
||||
error("wrong ctrl option format - wrong separator beetwen subfunctions");
|
||||
return 1;
|
||||
} else
|
||||
*ctrl_opt++;
|
||||
} else {
|
||||
ctrl_opt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1466,7 +1468,6 @@ int main(int argc, char *argv[])
|
|||
|
||||
int opt_list;
|
||||
int opt_setup;
|
||||
int opt_info;
|
||||
int opt_add;
|
||||
int opt_del;
|
||||
int opt_con_add;
|
||||
|
|
@ -1526,7 +1527,6 @@ int main(int argc, char *argv[])
|
|||
opt_add = 0;
|
||||
opt_del = 0;
|
||||
opt_list_patch = NULL;
|
||||
opt_info = 0;
|
||||
opt_con_add = 0;
|
||||
opt_con_del = 0;
|
||||
opt_debug = 0;
|
||||
|
|
@ -1618,7 +1618,7 @@ int main(int argc, char *argv[])
|
|||
opt_list_patch = optarg;
|
||||
break;
|
||||
case 'i':
|
||||
opt_info = 1;
|
||||
/* nothing */
|
||||
break;
|
||||
case 'q':
|
||||
opt_con_add = 1;
|
||||
|
|
|
|||
|
|
@ -89,7 +89,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname)
|
|||
for (p = buf + len; *p && isspace(*p); p++)
|
||||
;
|
||||
if (*p == '/') {
|
||||
strncpy(fname, p, MAX_PATH);
|
||||
strncpy(fname, p, MAX_PATH - 1);
|
||||
fname[MAX_PATH - 1] = '\0';
|
||||
} else {
|
||||
snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname)
|
|||
for (p = buf + len; *p && isspace(*p); p++)
|
||||
;
|
||||
if (*p == '/') {
|
||||
strncpy(fname, p, MAX_PATH);
|
||||
strncpy(fname, p, MAX_PATH - 1);
|
||||
fname[MAX_PATH - 1] = '\0';
|
||||
} else {
|
||||
snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ void destroy(GtkWidget *widget,gpointer data)
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
int card;
|
||||
char name[8],*err;
|
||||
char name[16],*err;
|
||||
snd_ctl_card_info_t *hw_info;
|
||||
card_type_t type;
|
||||
|
||||
|
|
|
|||
|
|
@ -225,7 +225,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname)
|
|||
for (p = buf + len; *p && isspace(*p); p++)
|
||||
;
|
||||
if (*p == '/') {
|
||||
strncpy(fname, p, MAX_PATH);
|
||||
strncpy(fname, p, MAX_PATH - 1);
|
||||
fname[MAX_PATH - 1] = '\0';
|
||||
} else {
|
||||
snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -214,7 +214,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname)
|
|||
for (p = buf + len; *p && isspace(*p); p++)
|
||||
;
|
||||
if (*p == '/') {
|
||||
strncpy(fname, p, MAX_PATH);
|
||||
strncpy(fname, p, MAX_PATH - 1);
|
||||
fname[MAX_PATH - 1] = '\0';
|
||||
} else {
|
||||
snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue