shithub: hexen

Download patch

ref: 1c9458bd4fb64dcc74c08041c59a5088ccee9dd8
parent: 54bb991f273c0f4daff122226eec8a11e3f894be
author: Jacob Moody <moody@posixcafe.org>
date: Mon Jan 23 21:24:26 EST 2023

simplify process management and bring in better clip check from heretic

--- a/i_main.c
+++ b/i_main.c
@@ -9,5 +9,6 @@
 {
 	myargc = argc; 
 	myargv = argv; 
+	rfork(RFNOTEG);
 	H2_Main ();
 } 
--- a/i_sound.c
+++ b/i_sound.c
@@ -77,7 +77,6 @@
 #define BUF_LEN		(256 * 2 * 4)
 
 static int audiofd;
-static int audiopid = -1;
 
 static QLock audiolk;
 
@@ -93,13 +92,14 @@
 	SAMPLE_TYPE *begin;
 	SAMPLE_TYPE *end;
 	unsigned int sample;
-	register int dl;
-	register int dr;
+	register int dl, ml;
+	register int dr, mr;
 	int i;
 
 	end = (SAMPLE_TYPE *) (buf + BUF_LEN);
 	cend = channel + CHAN_COUNT;
 
+	procsetname("hexen audioproc");
 	for(;;){
 		memset(buf, 0, sizeof buf);
 		if(mpfd[0]>=0 && !mus_paused && readn(mpfd[0], buf, sizeof buf) < 0){
@@ -138,16 +138,19 @@
 			}
 			qunlock(&audiolk);
 			for(i=0; i < TARGET_RATE/SAMPLE_RATE; i++){
-				if (dl > 0x7fff)
-					dl = 0x7fff;
-				else if (dl < -0x8000)
-					dl = -0x8000;
-				if (dr > 0x7fff)
-					dr = 0x7fff;
-				else if (dr < -0x8000)
-					dr = -0x8000;
-				*begin++ += dl;
-				*begin++ += dr;
+				ml = dl + *begin;
+				if (ml > 0x7fff)
+					ml = 0x7fff;
+				else if (ml < -0x8000)
+					ml = -0x8000;
+				*begin++ = ml;
+
+				mr = dr + *begin;
+				if (mr > 0x7fff)
+					mr = 0x7fff;
+				else if (mr < -0x8000)
+					mr = -0x8000;
+				*begin++ = mr;
 			}
 		}
 		write(audiofd, buf, BUF_LEN);
@@ -318,7 +321,7 @@
 
 	snd_SfxAvail = true;
 
-	if((audiopid = rfork(RFPROC|RFMEM)) == 0){
+	if(rfork(RFPROC|RFMEM) == 0){
 		audioproc();
 		exits(nil);
 	}
@@ -329,10 +332,6 @@
 {
 	snd_SfxAvail = false;
 
-	if(audiopid != -1){
-		postnote(PNPROC, audiopid, "shutdown");
-		audiopid = -1;
-	}
 	I_ShutdownMusic();
 }
 
--- a/i_system.c
+++ b/i_system.c
@@ -44,6 +44,7 @@
 	I_ShutdownSound();
 	M_SaveDefaults ();
 	I_ShutdownGraphics();
+	postnote(PNGROUP, getpid(), "I_Quit");
 	exits(nil);
 }
 
--- a/i_video.c
+++ b/i_video.c
@@ -25,9 +25,6 @@
 
 static uchar cmap[3*256];
 
-static int kbdpid = -1;
-static int mousepid = -1;
-
 static void
 catch(void *, char *msg)
 {
@@ -39,7 +36,6 @@
 
 void I_InitGraphics(void)
 {
-	int pid;
 
 	notify(catch);
 
@@ -51,17 +47,15 @@
 	center = addpt(screen->r.min, Pt(Dx(screen->r)/2, Dy(screen->r)/2));
 	grabout = insetrect(screen->r, Dx(screen->r)/8);
 
-	if((pid = rfork(RFPROC|RFMEM)) == 0){
+	if(rfork(RFPROC|RFMEM) == 0){
 		kbdproc();
 		exits(nil);
 	}
-	kbdpid = pid;
 
-	if((pid = rfork(RFPROC|RFMEM)) == 0){
+	if(rfork(RFPROC|RFMEM) == 0){
 		mouseproc();
 		exits(nil);
 	}
-	mousepid = pid;
 
 	I_SetPalette ((byte *)W_CacheLumpName("PLAYPAL", PU_CACHE));
 }
@@ -68,14 +62,7 @@
 
 void I_ShutdownGraphics(void)
 {
-	if(kbdpid != -1){
-		postnote(PNPROC, kbdpid, "shutdown");
-		kbdpid = -1;
-	}
-	if(mousepid != -1){
-		postnote(PNPROC, mousepid, "shutdown");
-		mousepid = -1;
-	}
+	closedisplay(display);
 }
 
 void I_SetPalette(byte *palette)
@@ -309,6 +296,7 @@
 	buf2[0] = 0;
 	buf2[1] = 0;
 	buf[0] = 0;
+	procsetname("hexen kbdproc");
 	for(;;){
 		if(buf[0] != 0){
 			n = strlen(buf)+1;
@@ -380,6 +368,7 @@
 	memset(&m, 0, sizeof m);
 	memset(&om, 0, sizeof om);
 	nerr = 0;
+	procsetname("hexen mouseproc");
 	for(;;){
 		n = read(fd, buf, sizeof buf);
 		if(n != 1+4*12){