ref: a0e7f7500b6b252fa15b28d0d0810a881e4766e2
parent: 2e939eac354f07bd26437ccce0fb446c6bbc3b7e
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sat Dec 30 19:53:53 EST 2023
add -N to disable optional modules (only "cd" and "snd" for now)
--- a/cd.c
+++ b/cd.c
@@ -3,7 +3,7 @@
cvar_t bgmvolume = {"bgmvolume", "0.5", true};
int cdtrk = 0, cdntrk = 0;
-bool cdloop = false;
+bool cdloop = false, cdenabled;
void
cdcmd(void)
@@ -10,6 +10,11 @@
{
char *c;
bool loop;
+
+ if(!cdenabled){
+ Con_Printf("cd disabled\n");
+ return;
+ }
if(Cmd_Argc() < 2){
usage:
--- a/cd_plan9.c
+++ b/cd_plan9.c
@@ -85,7 +85,7 @@
void
stepcd(void)
{
- if(bgmvolume.value <= 0.0 || cdread == 0)
+ if(!cdenabled || bgmvolume.value <= 0.0 || cdread == 0)
return;
cdread = bgmvolume.value > 0.0;
}
@@ -138,6 +138,12 @@
int
initcd(void)
{
+ Cvar_RegisterVariable(&bgmvolume);
+ Cmd_AddCommand("cd", cdcmd);
+
+ if(!(cdenabled = !isdisabled("cd")))
+ return 0;
+
if(cdinfo() < 0){
Con_DPrintf("cdinfo: %r\n");
return -1;
@@ -144,7 +150,5 @@
}
if(proccreate(cproc, nil, 16384) < 0)
sysfatal("proccreate: %r");
- Cvar_RegisterVariable(&bgmvolume);
- Cmd_AddCommand("cd", cdcmd);
return 0;
}
--- a/dat.h
+++ b/dat.h
@@ -59,7 +59,6 @@
extern cvar_t bgmvolume;
extern int cdtrk, cdntrk;
-extern bool cdloop;
-
+extern bool cdloop, cdenabled;
extern int debug;
--- a/quakedef.h
+++ b/quakedef.h
@@ -181,6 +181,8 @@
extern double realtime; // not bounded in any way, changed at
// start of every frame, never reset
+bool isdisabled(char *s);
+
#define opaque(p) ((p) != 0)
extern pixel_t q1pal[256];
--- a/snd_mix.c
+++ b/snd_mix.c
@@ -657,12 +657,6 @@
{
int i, j, *p;
- if(sndopen() != 0)
- return -1;
- ainit = 1;
- for(p=scalt[1], i=8; i<8*nelem(scalt); i+=8)
- for(j=0; j<256; j++)
- *p++ = (char)j * i;
Cmd_AddCommand("play", playsfx);
Cmd_AddCommand("playvol", playvolsfx);
Cmd_AddCommand("stopsound", stopallsfx);
@@ -673,12 +667,23 @@
Cvar_RegisterVariable(&ambient_level);
Cvar_RegisterVariable(&ambient_fade);
- chans = calloc(Nchan, sizeof(*chans));
- known_sfx = Hunk_Alloc(MAX_SOUNDS * sizeof *known_sfx);
- num_sfx = 0;
+ if(!isdisabled("snd")){
+ if(sndopen() != 0)
+ return -1;
+ ainit = 1;
- ambsfx[Ambwater] = precachesfx("ambience/water1.wav");
- ambsfx[Ambsky] = precachesfx("ambience/wind2.wav");
- stopallsfx();
+ for(p=scalt[1], i=8; i<8*nelem(scalt); i+=8){
+ for(j=0; j<256; j++)
+ *p++ = (char)j * i;
+ }
+
+ chans = calloc(Nchan, sizeof(*chans));
+ known_sfx = Hunk_Alloc(MAX_SOUNDS * sizeof *known_sfx);
+ num_sfx = 0;
+
+ ambsfx[Ambwater] = precachesfx("ambience/water1.wav");
+ ambsfx[Ambsky] = precachesfx("ambience/wind2.wav");
+ stopallsfx();
+ }
return 0;
}
--- a/snd_openal.c
+++ b/snd_openal.c
@@ -663,6 +663,9 @@
Sfx *sfx;
int i;
+ if(dev == nil)
+ return;
+
ambsfx[Ambwater] = precachesfx("ambience/water1.wav");
ambsfx[Ambsky] = precachesfx("ambience/wind2.wav");
for(i = 0, sfx = known_sfx; i < num_sfx; i++, sfx++){
@@ -678,6 +681,9 @@
void
stepcd(void)
{
+ if(dev == nil || !cdenabled)
+ return;
+
if(track.stop)
stopcd();
else if(track.playing){
@@ -748,6 +754,9 @@
pid_t pid;
FILE *f;
+ if(dev == nil || !cdenabled)
+ return;
+
stopcd();
if(qalBufferCallbackSOFT == nil)
return;
@@ -823,13 +832,19 @@
void
resumecd(void)
{
- alSourcePlay(track.src); ALERR();
+ if(track.playing){
+ alSourcePlay(track.src);
+ ALERR();
+ }
}
void
pausecd(void)
{
- alSourcePause(track.src); ALERR();
+ if(track.playing){
+ alSourcePause(track.src);
+ ALERR();
+ }
}
int
@@ -865,9 +880,6 @@
int
initsnd(void)
{
- s_al_dev.cb = s_al_hrtf.cb = alvarcb;
- s_al_doppler_factor.cb = aldopplercb;
-
Cvar_RegisterVariable(&volume);
Cvar_RegisterVariable(&bgmvolume);
Cvar_RegisterVariable(&ambient_level);
@@ -881,9 +893,14 @@
Cmd_AddCommand("soundlist", sfxlist);
Cmd_AddCommand("cd", cdcmd);
- alinit(nil);
- known_sfx = Hunk_Alloc(MAX_SOUNDS * sizeof *known_sfx);
- num_sfx = 0;
+ if(!isdisabled("snd")){
+ s_al_dev.cb = s_al_hrtf.cb = alvarcb;
+ s_al_doppler_factor.cb = aldopplercb;
+ alinit(nil);
+ known_sfx = Hunk_Alloc(MAX_SOUNDS * sizeof *known_sfx);
+ num_sfx = 0;
+ cdenabled = !isdisabled("cd");
+ }
return 0;
}
--- a/sys_plan9.c
+++ b/sys_plan9.c
@@ -5,7 +5,21 @@
char *netmtpt = "/net";
char *game;
int debug;
+static const char *disabled[32];
+static int ndisabled;
+bool
+isdisabled(char *s)
+{
+ int i;
+
+ for(i = 0; i < ndisabled; i++){
+ if(strcmp(disabled[i], s) == 0)
+ return true;
+ }
+ return false;
+}
+
int
sys_mkdir(char *path)
{
@@ -110,7 +124,7 @@
static void
usage(void)
{
- fprint(2, "usage: %s [-d] [-g game] [-m kB] [-x netmtpt]\n", argv0);
+ fprint(2, "usage: %s [-d] [-g game] [-m kB] [-x netmtpt] [-N cd|snd]\n", argv0);
exits("usage");
}
@@ -137,6 +151,10 @@
break;
case 'x':
netmtpt = EARGF(usage());
+ break;
+ case 'N':
+ if(ndisabled < nelem(disabled))
+ disabled[ndisabled++] = EARGF(usage());
break;
default: usage();
}ARGEND
--- a/sys_unix.c
+++ b/sys_unix.c
@@ -8,7 +8,21 @@
char *game;
int debug;
char lasterr[256] = {0};
+static const char *disabled[32];
+static int ndisabled;
+bool
+isdisabled(char *s)
+{
+ int i;
+
+ for(i = 0; i < ndisabled; i++){
+ if(strcmp(disabled[i], s) == 0)
+ return true;
+ }
+ return false;
+}
+
char *
lerr(void)
{
@@ -113,10 +127,14 @@
parg_init(&ps);
nargs = 0;
- while((c = parg_getopt(&ps, argc, argv, "Ddg:")) >= 0){
+ while((c = parg_getopt(&ps, argc, argv, "Ddg:N:")) >= 0){
switch(c){
case 1:
argv[nargs++] = (char*)ps.optarg;
+ break;
+ case 'N':
+ if(ndisabled < nelem(disabled))
+ disabled[ndisabled++] = ps.optarg;
break;
case 'D':
debug++;