ref: 89551236f63043869f9f6aa6d030cb72f7a6cc00
parent: c2ef159ea62d1d4c9188624809e9741fc469537d
author: qwx <>
date: Wed Dec 12 18:28:18 EST 2018
qw: use bio for qwsv input
--- a/qw/in.c
+++ b/qw/in.c
@@ -33,45 +33,11 @@
static int mΔx, mΔy, mb, oldmb;
void
-conscmd(void)
-{
- char *p;
-
- if(cls.state != ca_dedicated)
- return;
- while(p = nbrecvp(inchan), p != nil){
- Cbuf_AddText(p);
- free(p);
- }
-}
-
-static void
-cproc(void *)
-{
- char *s;
- Biobuf *bf;
-
- if(bf = Bfdopen(0, OREAD), bf == nil)
- sysfatal("Bfdopen: %r");
- for(;;){
- if(s = Brdstr(bf, '\n', 1), s == nil)
- break;
- if(sendp(inchan, s) < 0){
- free(s);
- break;
- }
- }
- Bterm(bf);
-}
-
-void
Sys_SendKeyEvents(void)
{
Kev ev;
int r;
- if(cls.state == ca_dedicated)
- return;
if(oldmwin != (int)m_windowed.value){
oldmwin = (int)m_windowed.value;
IN_Grabm(oldmwin);
@@ -88,7 +54,7 @@
{
int b, i, k, r;
- if(!mouseon || cls.state == ca_dedicated)
+ if(!mouseon)
return;
qlock(&mlck);
b = mb;
@@ -332,13 +298,6 @@
void
IN_Init(void)
{
- if(cls.state == ca_dedicated){
- if(inchan = chancreate(sizeof(void *), 2), inchan == nil)
- sysfatal("chancreate: %r");
- if(proccreate(cproc, nil, 8192) < 0)
- sysfatal("proccreate iproc: %r");
- return;
- }
Cvar_RegisterVariable(&m_windowed);
Cvar_RegisterVariable(&m_filter);
if(inchan = chancreate(sizeof(Kev), Nbuf), inchan == nil)
--- a/qw/qwsv.c
+++ b/qw/qwsv.c
@@ -2,6 +2,7 @@
#include <libc.h>
#include <stdio.h>
#include <thread.h>
+#include <bio.h>
#include "quakedef.h"
mainstacksize = 256*1024;
@@ -11,7 +12,7 @@
quakeparms_t q;
-static int iop = -1, pfd[2];
+static Channel *inchan;
/* FIXME: stupid-ass linking kludges */
client_static_t cls;
@@ -22,47 +23,27 @@
char *
Sys_ConsoleInput(void)
{
- static char buf[256];
-
- if(iop < 0)
- return nil;
- if(flen(pfd[1]) < 1) /* only poll for input */
- return nil;
- if(read(pfd[1], buf, sizeof buf) < 0)
- sysfatal("Sys_ConsoleInput:read: %r");
- return buf;
+ return nbrecvp(inchan);
}
-void
-killiop(void)
-{
- if(iop < 0)
- return;
- threadkillgrp(THin);
- close(pfd[0]);
- close(pfd[1]);
- iop = -1;
-}
-
static void
-iproc(void *)
+cproc(void *)
{
- int n;
- char s[256];
+ char *s;
+ Biobuf *bf;
- threadsetgrp(THin);
-
- if((iop = pipe(pfd)) < 0)
- sysfatal("iproc:pipe: %r");
+ if(bf = Bfdopen(0, OREAD), bf == nil)
+ sysfatal("Bfdopen: %r");
for(;;){
- if((n = read(0, s, sizeof s)) <= 0)
+ if(s = Brdstr(bf, '\n', 1), s == nil)
break;
- s[n-1] = 0;
- if((write(pfd[0], s, n)) != n)
+ if(sendp(inchan, s) < 0){
+ free(s);
break;
+ }
send(echan, nil);
}
- iop = -1;
+ Bterm(bf);
}
void
@@ -74,10 +55,11 @@
svonly = 1;
COM_InitArgv (argc, argv);
initparm(&q);
- if((echan = chancreate(sizeof(int), 1)) == nil)
+ if((echan = chancreate(sizeof(int), 1)) == nil
+ || (inchan = chancreate(sizeof(void *), 2)) == nil)
sysfatal("chancreate: %r");
SV_Init(&q);
- if(proccreate(iproc, nil, 8192) < 0)
+ if(proccreate(cproc, nil, 8192) < 0)
sysfatal("proccreate iproc: %r");
SV_Frame(0.1); /* run one frame immediately for first heartbeat */
oldtime = Sys_DoubleTime() - 0.1;
--- a/qw/sv_main.c
+++ b/qw/sv_main.c
@@ -77,7 +77,6 @@
*/
void SV_Shutdown (void)
{
- killiop();
Master_Shutdown ();
if (sv_logfile)
{
@@ -1086,14 +1085,11 @@
*/
void SV_GetConsoleCommands (void)
{
- char *cmd;
+ char *p;
- while (1)
- {
- cmd = Sys_ConsoleInput ();
- if (!cmd)
- break;
- Cbuf_AddText (cmd);
+ while((p = Sys_ConsoleInput()) != nil){
+ Cbuf_AddText(p);
+ free(p);
}
}
--- a/qw/sys.h
+++ b/qw/sys.h
@@ -26,5 +26,4 @@
void Sys_Init(void);
void initparm(quakeparms_t *);
-void killiop(void);
void* emalloc(ulong);