summaryrefslogtreecommitdiff
path: root/sys/src/games
diff options
context:
space:
mode:
authorqwx <qwx@sciops.net>2023-02-28 23:37:21 +0000
committerqwx <qwx@sciops.net>2023-02-28 23:37:21 +0000
commitcb5b36f7c62545b92bbe577175de82c6c6cc9be9 (patch)
tree7b8625ad555d0b74ff2fda80b04d2950b6ee1eb0 /sys/src/games
parent53d55013598d7cd214d01cbf0b026844fe7ca8d2 (diff)
games/dmid: fix running status for streams
regression from previous commits; better handling
Diffstat (limited to 'sys/src/games')
-rw-r--r--sys/src/games/dmid.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/sys/src/games/dmid.c b/sys/src/games/dmid.c
index fb4213275..7e8e5d4f4 100644
--- a/sys/src/games/dmid.c
+++ b/sys/src/games/dmid.c
@@ -149,13 +149,12 @@ get8(Trk *x)
{
u8int v;
- if(x == nil){
+ if(x == nil || x->p == nil)
Bread(ib, &v, 1);
- return v;
- }
- if(x->p >= x->e || x->ended)
+ else if(x->p >= x->e || x->ended)
sysfatal("track overflow");
- v = *x->p++;
+ else
+ v = *x->p++;
dprint("%02ux", v);
return v;
}
@@ -397,17 +396,17 @@ ev(Trk *x, vlong t)
dprint(" [%zd] ", x - tr);
e = get8(x);
- if(x != nil){
- if((e & 0x80) == 0){
+ if((e & 0x80) == 0){
+ if(x->p != nil)
x->p--;
- e = x->ev;
- if((e & 0x80) == 0)
- sysfatal("invalid event");
- }else
- x->ev = e;
- }
+ e = x->ev;
+ dprint(" *%02ux ", e);
+ if((e & 0x80) == 0)
+ sysfatal("invalid event %#ux", e);
+ }else
+ x->ev = e;
c = chan + (e & 15);
- dprint("(%02ux) ", e);
+ dprint("| %02ux ", e);
n = get8(x);
switch(e >> 4){
case 0x8: noteoff(c, n, get8(x)); break;
@@ -562,13 +561,16 @@ main(int argc, char **argv)
putcmd(Rop3, 1, 0);
trace = debug;
if(stream){
+ Trk ☺;
+ memset(&☺, 0, sizeof ☺);
+ tr = &☺;
for(;;){
- getvar(nil);
- if(ev(nil, 0) < 0)
+ getvar(&☺);
+ if(ev(&☺, 0) < 0)
exits(nil);
}
}
- for(end=0; !end;){
+ for(;;){
end = 1;
for(x=tr; x<tr+ntrk; x++){
if(x->ended)
@@ -584,6 +586,8 @@ main(int argc, char **argv)
x->Δ = getvar(x);
}
}
+ if(end)
+ break;
samp(1);
}
exits(nil);