aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorepoch <epoch@hack.thebackupbox.net>2020-04-14 11:50:30 +0000
committerepoch <epoch@hack.thebackupbox.net>2020-04-14 11:50:30 +0000
commit459bff40e078a3979573000a903b288bcc9a8d3f (patch)
treecd8e75a66129042803729924352de80d7a5f5041
parentede4c08f4f15a516a748f8ed89b4f6b06b845c2a (diff)
parent9f5c79eff1a3fae473bbdd12afcb77875d8548af (diff)
downloadhackvr-459bff40e078a3979573000a903b288bcc9a8d3f.tar.gz
hackvr-459bff40e078a3979573000a903b288bcc9a8d3f.zip
Merge branch 'master' of /var/git/hackvr
-rw-r--r--.gitignore2
-rwxr-xr-xbin/hackvr (renamed from src/hackvr)0
-rwxr-xr-xbin/hackvr_coproc2
-rwxr-xr-xbin/hackvr_open4
-rw-r--r--share/hackvr/examples/calendar/Makefile3
-rwxr-xr-xshare/hackvr/examples/calendar/hackvr_coproc2
-rwxr-xr-xshare/hackvr/examples/hackvr_term/hackvr_data_decode.sh3
-rw-r--r--share/hackvr/examples/hackvr_term/hackvr_term.c2
-rw-r--r--share/hackvr/examples/tictactoe/board18
-rw-r--r--share/hackvr/examples/tictactoe/board_orig18
-rwxr-xr-xshare/hackvr/examples/tictactoe/game.sh52
-rwxr-xr-xshare/hackvr/examples/tictactoe/run2
-rw-r--r--share/hackvr/examples/uristart.conf2
-rw-r--r--src/Makefile39
-rw-r--r--src/graphics_c3.c11
-rw-r--r--src/graphics_c3.h1
-rw-r--r--src/graphics_cs_fb.c232
-rw-r--r--src/graphics_fb.h5
-rw-r--r--src/hackvr.c29
l---------src/hackvr_xdie.c1
-rw-r--r--src/input.c19
-rw-r--r--src/input.h14
-rw-r--r--src/keyboard.c2
-rw-r--r--src/keyboard_die.c22
-rw-r--r--src/math.c5
-rw-r--r--src/math.h1
-rw-r--r--src/mouse_die.c55
-rw-r--r--src/mouse_x11.c3
28 files changed, 218 insertions, 331 deletions
diff --git a/.gitignore b/.gitignore
index 00dfa6b..7b6a851 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,7 @@ src/hackvr_fb
src/hackvr_freeglut
src/hackvr_headless
src/hackvr_x11
+src/hackvr_xdie
src/hackvr_opengl
src/slowcat
+src/nonblocktail
diff --git a/src/hackvr b/bin/hackvr
index 1c9d16c..1c9d16c 100755
--- a/src/hackvr
+++ b/bin/hackvr
diff --git a/bin/hackvr_coproc b/bin/hackvr_coproc
new file mode 100755
index 0000000..d79de92
--- /dev/null
+++ b/bin/hackvr_coproc
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec socat "exec:hackvr_uri" "exec:$*"
diff --git a/bin/hackvr_open b/bin/hackvr_open
new file mode 100755
index 0000000..3121f46
--- /dev/null
+++ b/bin/hackvr_open
@@ -0,0 +1,4 @@
+#!/bin/sh
+### you may want to force this pipeline through a new x-terminal-emulator if you want to be able to write to stdin by hand.
+### for debugging purposes? I'll probably do that soon.
+nonblocktail "$1" /dev/stdin | hackvr
diff --git a/share/hackvr/examples/calendar/Makefile b/share/hackvr/examples/calendar/Makefile
index 2027b18..1646279 100644
--- a/share/hackvr/examples/calendar/Makefile
+++ b/share/hackvr/examples/calendar/Makefile
@@ -1,8 +1,7 @@
PREFIX:=/usr/local
-all: calvr hackvr_coproc
+all: calvr
@echo using PREFIX: $(PREFIX)
install:
install -t $(PREFIX)/bin calvr
- install -t $(PREFIX)/bin hackvr_coproc
diff --git a/share/hackvr/examples/calendar/hackvr_coproc b/share/hackvr/examples/calendar/hackvr_coproc
deleted file mode 100755
index 8d2e127..0000000
--- a/share/hackvr/examples/calendar/hackvr_coproc
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-exec socat exec:hackvr "exec:$*"
diff --git a/share/hackvr/examples/hackvr_term/hackvr_data_decode.sh b/share/hackvr/examples/hackvr_term/hackvr_data_decode.sh
index 307b6ff..85c64af 100755
--- a/share/hackvr/examples/hackvr_term/hackvr_data_decode.sh
+++ b/share/hackvr/examples/hackvr_term/hackvr_data_decode.sh
@@ -1,2 +1,3 @@
-#!/bin/sh
+#!/usr/bin/env bash
+set -eo pipefail
exec grep --line-buffered '^[^ ]* data ' | stdbuf -oL tr -s ' ' | stdbuf -oL cut '-d ' -f3- | stdbuf -o0 xxd -r -p
diff --git a/share/hackvr/examples/hackvr_term/hackvr_term.c b/share/hackvr/examples/hackvr_term/hackvr_term.c
index 40df2d1..b044498 100644
--- a/share/hackvr/examples/hackvr_term/hackvr_term.c
+++ b/share/hackvr/examples/hackvr_term/hackvr_term.c
@@ -60,7 +60,7 @@ void preload_glyphs() {
void hackvr_draw_character(int c,int r,const TMTCHAR *ch) {
char *line;
int i,ret=0;
- printf("term_%02d_%02d addshape %d 4 -1 -3 0 5 -3 0 5 7 0 -1 7 0\n",c,r,ch->a.bg+15);
+ //printf("term_%02d_%02d addshape %d 4 -1 -3 0 5 -3 0 5 7 0 -1 7 0\n",c,r,ch->a.bg+15);
for(i=0,line=glyphs[ch->c][0];line[0];i++,line=glyphs[ch->c][i]) {
ret=1;
printf("term_%02d_%02d addshape %d %s",c,r,ch->a.fg == -1 ? 17 : ch->a.fg + 15,line+strlen("XX addshape X"));
diff --git a/share/hackvr/examples/tictactoe/board b/share/hackvr/examples/tictactoe/board
index 607ebf3..e7494fd 100644
--- a/share/hackvr/examples/tictactoe/board
+++ b/share/hackvr/examples/tictactoe/board
@@ -1,13 +1,13 @@
_reset addshape 2 3 -4 6 4 -5 6 4 -4 5 4
-topleft addshape 2 4 -3 13 4 -1 13 4 -1 11 4 -3 11 4
-topcenter addshape 2 4 -1 13 4 1 13 4 1 11 4 -1 11 4
-topright addshape 2 4 1 13 4 3 13 4 3 11 4 1 11 4
+boardtopleft addshape 2 4 -3 13 4 -1 13 4 -1 11 4 -3 11 4
+boardtopcenter addshape 2 4 -1 13 4 1 13 4 1 11 4 -1 11 4
+boardtopright addshape 2 4 1 13 4 3 13 4 3 11 4 1 11 4
-middleleft addshape 2 4 -3 11 4 -1 11 4 -1 9 4 -3 9 4
-middlecenter addshape 2 4 -1 11 4 1 11 4 1 9 4 -1 9 4
-middleright addshape 2 4 1 11 4 3 11 4 3 9 4 1 9 4
+boardmiddleleft addshape 2 4 -3 11 4 -1 11 4 -1 9 4 -3 9 4
+boardmiddlecenter addshape 2 4 -1 11 4 1 11 4 1 9 4 -1 9 4
+boardmiddleright addshape 2 4 1 11 4 3 11 4 3 9 4 1 9 4
-bottomleft addshape 2 4 -3 9 4 -1 9 4 -1 7 4 -3 7 4
-bottomcenter addshape 2 4 -1 9 4 1 9 4 1 7 4 -1 7 4
-bottomright addshape 2 4 1 9 4 3 9 4 3 7 4 1 7 4
+boardbottomleft addshape 2 4 -3 9 4 -1 9 4 -1 7 4 -3 7 4
+boardbottomcenter addshape 2 4 -1 9 4 1 9 4 1 7 4 -1 7 4
+boardbottomright addshape 2 4 1 9 4 3 9 4 3 7 4 1 7 4
diff --git a/share/hackvr/examples/tictactoe/board_orig b/share/hackvr/examples/tictactoe/board_orig
index bc97ee4..2fff3ba 100644
--- a/share/hackvr/examples/tictactoe/board_orig
+++ b/share/hackvr/examples/tictactoe/board_orig
@@ -1,14 +1,14 @@
_reset addshape 2 3 -4 -4 4 -5 -4 4 -4 -5 4
_exit addshape 2 3 4 -4 4 5 -4 4 4 -5 4
-topleft addshape 2 4 -3 3 4 -1 3 4 -1 1 4 -3 1 4
-topcenter addshape 2 4 -1 3 4 1 3 4 1 1 4 -1 1 4
-topright addshape 2 4 1 3 4 3 3 4 3 1 4 1 1 4
+boardtopleft addshape 2 4 -3 3 4 -1 3 4 -1 1 4 -3 1 4
+boardtopcenter addshape 2 4 -1 3 4 1 3 4 1 1 4 -1 1 4
+boardtopright addshape 2 4 1 3 4 3 3 4 3 1 4 1 1 4
-middleleft addshape 2 4 -3 1 4 -1 1 4 -1 -1 4 -3 -1 4
-middlecenter addshape 2 4 -1 1 4 1 1 4 1 -1 4 -1 -1 4
-middleright addshape 2 4 1 1 4 3 1 4 3 -1 4 1 -1 4
+boardmiddleleft addshape 2 4 -3 1 4 -1 1 4 -1 -1 4 -3 -1 4
+boardmiddlecenter addshape 2 4 -1 1 4 1 1 4 1 -1 4 -1 -1 4
+boardmiddleright addshape 2 4 1 1 4 3 1 4 3 -1 4 1 -1 4
-bottomleft addshape 2 4 -3 -1 4 -1 -1 4 -1 -3 4 -3 -3 4
-bottomcenter addshape 2 4 -1 -1 4 1 -1 4 1 -3 4 -1 -3 4
-bottomright addshape 2 4 1 -1 4 3 -1 4 3 -3 4 1 -3 4
+boardbottomleft addshape 2 4 -3 -1 4 -1 -1 4 -1 -3 4 -3 -3 4
+boardbottomcenter addshape 2 4 -1 -1 4 1 -1 4 1 -3 4 -1 -3 4
+boardbottomright addshape 2 4 1 -1 4 3 -1 4 3 -3 4 1 -3 4
diff --git a/share/hackvr/examples/tictactoe/game.sh b/share/hackvr/examples/tictactoe/game.sh
index b4187dd..92192cc 100755
--- a/share/hackvr/examples/tictactoe/game.sh
+++ b/share/hackvr/examples/tictactoe/game.sh
@@ -4,30 +4,34 @@ BOARDFILE=board_orig
cat camera.pos $BOARDFILE
echo "go. player: $turn" >&2
grep --line-buffered action \
- | while read user derp group;do
-# echo FUCK >&2
- if grep "_reset" <<<$group >/dev/null;then
- printf "%s deleteallexcept .\n" "$user"
- cat $BOARDFILE
- continue
- elif grep "_exit" <<<$group >/dev/null;then #this doesn't work in local games. :/
- exit 0
- elif grep "_" <<<$group >/dev/null;then
-# xmessage "CUT IT OUT"
- echo CUT IT OUT > /dev/stderr
- continue
- else
- turn=$(expr \( $turn + 1 \) % 2)
- #printf "# turn: %d\n" "$turn" > /dev/stderr
- printf "$user deletegroup %s\n" "$group"
- #printf "$user deletegroup %s\n" "$group" > /dev/stderr
+ | while read user action group;do
+ if [ $action = "action" ];then
+ if grep "_reset" <<<$group >/dev/null;then
+ printf "%s deleteallexcept %s\n" "$user" "$user"
+ cat $BOARDFILE
+ continue
+ elif grep "_exit" <<<$group >/dev/null;then
+ #if a program wants to exit, it should just exit.
+ #the program may have been ran by some other program.
+ #maybe just filter out server-side quit messages for your own username?
+ #any user quit will cause any hackvr to quit?
+ #printf "%s quit\n" "$user"
+ exit 0
+ elif grep "_" <<<$group >/dev/null;then
+ echo CUT IT OUT > /dev/stderr
+ continue
+ elif grep "^board" <<<$group >/dev/null;then
+ turn=$(expr \( $turn + 1 \) % 2)
+ #printf "# turn: %d\n" "$turn" > /dev/stderr
+ printf "%s deletegroup %s\n" "$user" "$group"
+ #printf "$user deletegroup %s\n" "$group" > /dev/stderr
#need to get the first point of the group clicked and translate the new shape by that much
- translatex="$(grep "$group" $BOARDFILE | grep -v '^#' | tr -s ' ' | cut '-d ' -f5)"
- translatey="$(grep "$group" $BOARDFILE | grep -v '^#' | tr -s ' ' | cut '-d ' -f6)"
- cat "marker$turn" | offsetshape.sh $translatex "$(expr "$translatey" - 2 )" 0
-# printf "%s move %s %s 2\n" "_marker" "$(expr "$translatex")" "$(expr "$translatey" - 2 )"
- #printf "%s move %s %s 2\n" "_marker" "$(expr "$translatex")" "$(expr "$translatey" - 2 )" >/dev/stderr
- grep "$group" $BOARDFILE | sed "s/$group/_marker2/g" #this is to make it still show the square around it.
- printf "%s renamegroup _marker _marker%s%s\n" "$user" "$(date +%s)" "$RANDOM"
+ translatex="$(grep "$group" $BOARDFILE | grep -v '^#' | tr -s ' ' | cut '-d ' -f5)"
+ translatey="$(grep "$group" $BOARDFILE | grep -v '^#' | tr -s ' ' | cut '-d ' -f6)"
+ cat "marker$turn" | offsetshape.sh $translatex "$(expr "$translatey" - 2 )" 0
+ grep "$group" $BOARDFILE | sed "s/$group/_marked/g"
+ else
+ xmessage "what? $group"
+ fi
fi
done
diff --git a/share/hackvr/examples/tictactoe/run b/share/hackvr/examples/tictactoe/run
index bf9c87a..54d712a 100755
--- a/share/hackvr/examples/tictactoe/run
+++ b/share/hackvr/examples/tictactoe/run
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
turn=$( expr $RANDOM % 2)
-echo "go. player: $turn"
+echo "# go. player: $turn" >&2
hackvr_coproc ./game.sh
diff --git a/share/hackvr/examples/uristart.conf b/share/hackvr/examples/uristart.conf
new file mode 100644
index 0000000..d48e8d1
--- /dev/null
+++ b/share/hackvr/examples/uristart.conf
@@ -0,0 +1,2 @@
+hackvr: if [ "%u" ];then USER="%u";fi;ncat '%d' '%P' -c "echo $USER action %p;hackvr_uri"
+hackvr+ssh: if [ '%u' ];then u='%u@';fi ; if [ "%P" ];then P='-p %P';fi; hackvr_coproc ssh "$u"'%d' $P "/var/hackvr/hackvr-subsystem" '%p'
diff --git a/src/Makefile b/src/Makefile
index 5c83e45..5803a1a 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2,7 +2,7 @@
PREFIX:=/usr/local/
-BASE_CFLAGS=-Wall -pedantic -std=c99 -ffast-math -I$(PREFIX)/include
+BASE_CFLAGS=-g -Wall -pedantic -std=c99 -ffast-math -I$(PREFIX)/include
CFLAGS+=$(BASE_CFLAGS)
CFLAGS+=-DGRAPHICAL
@@ -10,9 +10,12 @@ CFLAGS+=-DGRAPHICAL
LDFLAGS+=-L$(PREFIX)/lib
#all: hackvr_headless hackvr_x11 hackvr_opengl slowcat ### when hackvr_opengl gets useful at all I'll start including it in default build.
-all: hackvr_headless hackvr_x11 slowcat nonblocktail
+all: hackvr_fb hackvr_xdie hackvr_headless hackvr_x11 slowcat nonblocktail
# hackvr_fb hackvr_freeglut slowcat
+hackvr_xdie: override LDLIBS+=-lm -lidc -lX11 -lhashtable
+hackvr_xdie: hackvr_xdie.o graphics_c3.o graphics_c2.o graphics_cs_x11.o math.o physics.o keyboard.o mouse_die.o keyboard_die.o
+
nonblocktail: override LDLIBS+=-lidc
nonblocktail: nonblocktail.c
@@ -20,7 +23,8 @@ hackvr_headless: override LDLIBS+=-lm -lidc -lhashtable
hackvr_headless: hackvr_headless.o math.o physics.o
hackvr_x11: override LDLIBS+=-lm -lidc -lX11 -lhashtable
-hackvr_x11: hackvr_x11.o graphics_c3.o graphics_c2.o graphics_cs_x11.o math.o physics.o keyboard.o mouse_x11.o keyboard_x11.o input.o
+hackvr_x11: hackvr_x11.o graphics_c3.o graphics_c2.o graphics_cs_x11.o math.o physics.o keyboard.o mouse_x11.o keyboard_x11.o
+
#notice how all the targets have generic graphics objects up until a specific one.
hackvr_fb: override LDLIBS+=-lm -lidc -lhashtable
@@ -34,33 +38,40 @@ hackvr_freeglut: hackvr_freeglut.o graphics_c3_freeglut.o math.o physics.o keybo
hackvr_fb.o: CFLAGS+='-DHVR_VERSION="framebuffer"'
hackvr_x11.o: CFLAGS+='-DHVR_VERSION="x11"'
+hackvr_xdie.o: CFLAGS+='-DHVR_VERSION="x11+die"'
hackvr_headless.o: CFLAGS=$(BASE_CFLAGS)
hackvr_headless.o: CFLAGS+='-DHVR_VERSION="headless"'
install: all
mkdir -p $(PREFIX)/bin
- install hackvr $(PREFIX)/bin/hackvr
- install hackvr_headless $(PREFIX)/bin/hackvr_headless
- install hackvr_x11 $(PREFIX)/bin/hackvr_x11
- install slowcat $(PREFIX)/bin/slowcat
- install nonblocktail $(PREFIX)/bin/nonblocktail
-# install hackvr_fb $(PREFIX)/bin/hackvr_fb
-# install hackvr_freeglut $(PREFIX)/bin/hackvr_freeglut
+ install -t $(PREFIX)/bin hackvr_headless
+ install -t $(PREFIX)/bin hackvr_x11
+ install -t $(PREFIX)/bin slowcat
+ install -t $(PREFIX)/bin nonblocktail
+ install -t $(PREFIX)/bin hackvr_xdie
+ install -t $(PREFIX)/bin hackvr_fb
+# install -t $(PREFIX)/bin hackvr_freeglut
uninstall:
rm $(PREFIX)/bin/hackvr
rm $(PREFIX)/bin/hackvr_headless
rm $(PREFIX)/bin/hackvr_x11
- rm $(PREFIX)/bin/hackvr_fb
rm $(PREFIX)/bin/slowcat
+ rm $(PREFIX)/bin/nonblocktail
+ rm $(PREFIX)/bin/hackvr_xdie
+ rm $(PREFIX)/bin/hackvr_fb
+# rm $(PREFIX)/bin/hackvr_freeglut
clean:
- rm -f hackvr_freeglut
+# do *not* rm hackvr. it is a script which doesn't actually belong in this dir so...
rm -f hackvr_headless
- rm -f hackvr_opengl
rm -f hackvr_x11
- rm -f hackvr_fb
rm -f slowcat
+ rm -f nonblocktail
+ rm -f hackvr_xdie
+# rm -f hackvr_opengl
+ rm -f hackvr_fb
+# rm -f hackvr_freeglut
rm -f *.o
status:
diff --git a/src/graphics_c3.c b/src/graphics_c3.c
index 98c2c25..2af58d7 100644
--- a/src/graphics_c3.c
+++ b/src/graphics_c3.c
@@ -483,11 +483,16 @@ void draw_screen() {
//this should be minimap shit
//draw a line from the center to 80 away from the center in the angle of what should point at the mouse.
- /*draw_c2_line((c2_t){0,0},gra_global.mouse);
+ //draw_c2_line((c2_t){0,0},gra_global.mouse);
+ set_color();
+ draw_c2_line(c2_add(gra_global.mouse,(c2_t){0,1}) , c2_add(gra_global.mouse,(c2_t){0,5}) );
+ draw_c2_line(c2_add(gra_global.mouse,(c2_t){0,-1}) , c2_add(gra_global.mouse,(c2_t){0,-5}) );
+ draw_c2_line(c2_add(gra_global.mouse,(c2_t){1,0}) , c2_add(gra_global.mouse,(c2_t){5,0}) );
+ draw_c2_line(c2_add(gra_global.mouse,(c2_t){-1,0}) , c2_add(gra_global.mouse,(c2_t){-5,0}) );
set_color();
//if(points_on_same_side_of_line(gra_global.mouse,(c2_t){80,80},(c2_t){0,0},(c2_t){0,80})) {
- draw_c2_line((c2_t){0,0},rotate_c2((c2_t){80,0},(c2_t){0,0},points_to_angle((c2_t){0,0},gra_global.mouse)));
- //}*/
+ //draw_c2_line((c2_t){0,0},rotate_c2((c2_t){80,0},(c2_t){0,0},points_to_angle((c2_t){0,0},gra_global.mouse)));
+ //}
flipscreen();
}
diff --git a/src/graphics_c3.h b/src/graphics_c3.h
index 3f9fb78..7ea5c74 100644
--- a/src/graphics_c3.h
+++ b/src/graphics_c3.h
@@ -2,6 +2,7 @@
#define _HACKVR_GRAPHICS_H_
#include <idc.h>
+#include "common.h"
struct gra_global {
unsigned int width;
diff --git a/src/graphics_cs_fb.c b/src/graphics_cs_fb.c
index b566302..d8bb133 100644
--- a/src/graphics_cs_fb.c
+++ b/src/graphics_cs_fb.c
@@ -30,7 +30,7 @@
//Pixmap skypixmap;
//char sky[SKYH][SKYW];
-extern struct global global;
+extern struct hvr_global global;
extern struct gra_global gra_global;
struct fb_global fb_global;
@@ -67,7 +67,7 @@ void draw_cs_point(int x,int y) {//this should write to a backbuffer then I can
if(y > fb_global.info.yres) return;
if(i > fb_global.fblen) return;
//hack to test it with. remove me later.
- fb_global.current_color=-1;
+ //fb_global.current_color=-1;
int derp;
derp=(fb_global.current_color == -1) ? (rand()) : fb_global.current_color;
switch(fb_global.draw_mode) {
@@ -102,11 +102,13 @@ void draw_cs_line(cs_t p1,cs_t p2) {//error somewhere in here. derp...
for(y=min(p1.y,p2.y);y<max(p1.y,p2.y);y++) {
draw_cs_point(p1.x,y);
}
+ return;
}
if(p1.y == p2.y) {
for(x=min(p1.x,p2.x);x<max(p1.x,p2.x);x++) {
draw_cs_point(x,p1.y);
}
+ return;
}
xd=p1.x<p2.x?1:-1;
yd=p1.y<p2.y?1:-1;
@@ -330,11 +332,13 @@ void set_demands_attention() {
#endif
+//this should be returning an fd to something that'll be readable when events happen...
+//what kind of events would the fb ever have?
+//none?
int graphics_sub_init() {//some of this is keyboard init... should it be moved out? probably.
//int i;
int x,y;
fb_global.fb=open("/dev/fb0",O_RDWR);
- fb_global.kb=open("/dev/input/event0",O_RDWR);
memset(fb_global.keystate,0,sizeof(fb_global.keystate));
fcntl(fb_global.kb,F_SETFL,O_NONBLOCK);
assert(fb_global.fb > 0);
@@ -354,7 +358,8 @@ int graphics_sub_init() {//some of this is keyboard init... should it be moved o
flipscreen();
gra_global.width=fb_global.info.xres;
gra_global.height=fb_global.info.yres;
- return 0;
+ fprintf(stderr,"# width: %d height: %d\n",gra_global.width,gra_global.height);
+ return -1;//don't return a usable fd!
}
/* this need a framebuffer equivalent
@@ -370,221 +375,6 @@ int graphics_sub_init() {//some of this is keyboard init... should it be moved o
#define KEY_IS_DOWN(a) (fb_global.keystate[a/8] & (1<< (a % 8)))
-int graphics_event_handler(int world_changed) { //should calling draw_screen be in here?
-#if 0
- int redraw=0;
- char line[2048];
- char line2[1025];
- int len;
- struct input_event ie;
- memset(&ie,0,sizeof(ie));
- int l;
- real tmpx;
- real tmpz;
- radians tmprad;
- radians tmprad2;
- int i;
- //update the keystates...
- ioctl(fb_global.kb,EVIOCGKEY(sizeof(fb_global.keystate)),fb_global.keystate);//update keystate
- read(fb_global.kb,&ie,sizeof(ie));//????
-//need to not be using KEY_IS_DOWN so that it gets these events instead of just checking when it gets to this loop.
- if(KEY_IS_DOWN(KEY_ESC)) exit(0);
- if(KEY_IS_DOWN(KEY_ENTER)) {
- snprintf(line,sizeof(line)-1,"%s action %s\n",global.user,global.selected_object);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_UP)) {
- tmprad=d2r((degrees){global.camera.r.y.d});//if the angle is 0...
- tmprad2=d2r((degrees){global.camera.r.y.d});
- tmpx=WALK_SPEED*sin(tmprad.r);//cos(0)==1
- tmpz=WALK_SPEED*cos(tmprad2.r);//sin(0)==0
- snprintf(line,sizeof(line)-1,"%s move +%f +0 +%f\n",global.user,tmpx,tmpz);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_DOWN)) {
- tmprad=d2r((degrees){global.camera.r.y.d+180});
- tmprad2=d2r((degrees){global.camera.r.y.d+180});
- tmpx=WALK_SPEED*sin(tmprad.r);
- tmpz=WALK_SPEED*cos(tmprad2.r);
- snprintf(line,sizeof(line)-1,"%s move +%f +0 +%f\n",global.user,tmpx,tmpz);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_LEFT)) {
- tmprad=d2r((degrees){global.camera.r.y.d+90});
- tmprad2=d2r((degrees){global.camera.r.y.d+90});
- tmpx=WALK_SPEED*sin(tmprad.r);
- tmpz=WALK_SPEED*cos(tmprad2.r);
- snprintf(line,sizeof(line)-1,"%s move +%f +0 +%f\n",global.user,tmpx,tmpz);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_RIGHT)) {
- tmprad=d2r((degrees){global.camera.r.y.d+270});
- tmprad2=d2r((degrees){global.camera.r.y.d+270});
- tmpx=WALK_SPEED*sin(tmprad.r);
- tmpz=WALK_SPEED*cos(tmprad2.r);
- snprintf(line,sizeof(line)-1,"%s move +%f +0 +%f\n",global.user,tmpx,tmpz);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_W)) {
- snprintf(line,sizeof(line)-1,"%s move +0 +1 +0\n",global.user);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_S)) {
- snprintf(line,sizeof(line)-1,"%s move +0 +-1 +0\n",global.user);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_R)) {
- snprintf(line,sizeof(line)-1,"%s rotate +%d +0 +0\n",global.user,ROTATE_STEP);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_Y)) {
- snprintf(line,sizeof(line)-1,"%s rotate +%d +0 +0\n",global.user,-ROTATE_STEP);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_Q)) {
- snprintf(line,sizeof(line)-1,"%s rotate +0 +%d +0\n",global.user,ROTATE_STEP);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_E)) {
- snprintf(line,sizeof(line)-1,"%s rotate +0 +%d +0\n",global.user,-ROTATE_STEP);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_U)) {
- snprintf(line,sizeof(line)-1,"%s rotate +0 +0 +%d\n",global.user,ROTATE_STEP);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_O)) {
- snprintf(line,sizeof(line)-1,"%s rotate +0 +0 +%d\n",global.user,-ROTATE_STEP);
- selfcommand(line);
- }
- if(KEY_IS_DOWN(KEY_P)) gra_global.split+=.1;
- if(KEY_IS_DOWN(KEY_L)) gra_global.split-=.1;
- if(KEY_IS_DOWN(KEY_Z)) global.zoom+=1;
- if(KEY_IS_DOWN(KEY_X)) {
- global.zoom-=1;
- if(global.zoom < 1) global.zoom=1;
- }
- if(KEY_IS_DOWN(KEY_C)) global.mmz*=1.1;
- if(KEY_IS_DOWN(KEY_V)) global.mmz/=1.1;
- if(KEY_IS_DOWN(KEY_H)) global.split+=1;
- if(KEY_IS_DOWN(KEY_J)) global.split-=1;
- if(KEY_IS_DOWN(KEY_6)) gra_global.maxshapes+=10;
- if(KEY_IS_DOWN(KEY_7)) gra_global.maxshapes-=10;
- if(KEY_IS_DOWN(KEY_D)) global.debug ^= 1;
- if(KEY_IS_DOWN(KEY_F)) global.derp ^= 1;
- if(KEY_IS_DOWN(KEY_M)) {
- gra_global.drawminimap += 1;
- gra_global.drawminimap %= 4;
- }
- if(KEY_IS_DOWN(KEY_A)) gra_global.drawsky ^= 1;
- if(KEY_IS_DOWN(KEY_3)) {
- gra_global.draw3d += 1;
- gra_global.draw3d %= 4;
- }
-//LONG comment. then rest of function. don't end it too early, derp.
-/*
- }
- break;
- default:
- switch(sym) {
- case XK_Return:
- strcpy(line,"\n");
- len=1;
- break;
- case XK_Left://hack. probably just replace this with printf()s
- strcpy(line,"\x1b[D");
- len=3;
- break;
- case XK_Right:
- strcpy(line,"\x1b[C");
- len=3;
- break;
- case XK_Down:
- strcpy(line,"\x1b[B");
- len=3;
- break;
- case XK_Up:
- strcpy(line,"\x1b[A");
- len=3;
- break;
- default:
- len=XLookupString(xkey,line,1023,NULL,NULL);
- break;
- }
- for(i=0;i/2 < len;i++) line2[i]="0123456789abcdef"[(line[i/2]>>(4*(1-(i%2)))) % 16];
- line2[i]=0;
- printf("%s data %s\n",global.user,line2);
- break;
- }
-
- //then do stuff based on what keystates are set.
- //... loop over the whole array?
- //have an array of deltas?
- //what sets mask?
- char motionnotify=0;
- unsigned int mask;
- if(global.beep) {
- global.beep=0;
- XBell(x11_global.dpy,1000);
- set_demands_attention();
- }
- while(XPending(x11_global.dpy)) {//these are taking too long?
- XNextEvent(x11_global.dpy, &e);
-// fprintf(stderr,"# handling event with type: %d\n",e.type);
- switch(e.type) {
-// case Expose:
-// if(e.xexpose.count == 0) redraw=1;
-// break;
- case MotionNotify:
- if(global.debug >= 2) fprintf(stderr,"# MotionNotify\n");
- motionnotify=1;
- break;
- case ButtonPress:
- if(global.debug >= 2) fprintf(stderr,"# ButtonPress\n");
- redraw=1;
- gra_global.buttonpressed=e.xbutton.button;//what's this for? mouse?
- break;
- case ButtonRelease:
- if(global.debug >= 2) fprintf(stderr,"# ButtonRelease\n");
- redraw=1;
- gra_global.buttonpressed=0;//what's this for???
- break;
- case ConfigureNotify:
- if(global.debug >= 2) fprintf(stderr,"# ConfigureNotify\n");
- redraw=1;
- XGetGeometry(x11_global.dpy,x11_global.w,&root,&global.x,&global.y,&gra_global.width,&gra_global.height,&gra_global.border_width,&gra_global.depth);
- if(gra_global.height * AR_W / AR_H != gra_global.width / (gra_global.split_screen / (gra_global.red_and_blue ? gra_global.split_screen : 1))) {
- // height / AR_H * AR_W = width / (ss / (rab ? ss : 1))
- if(global.debug >= 2) {
- fprintf(stderr,"# %d != %d for some reason. probably your WM not respecting aspect ratio hints or calculating based on them differently. (would cause an off-by-one or so)\n",gra_global.height * AR_W / AR_H , gra_global.width / (gra_global.split_screen / (gra_global.red_and_blue ? gra_global.split_screen : 1)));
- }
- if(gra_global.width / (gra_global.red_and_blue ? 1 : gra_global.split_screen) * AR_H / AR_W < gra_global.height) {
- gra_global.height=gra_global.width / (gra_global.red_and_blue ? 1 : gra_global.split_screen) * AR_H / AR_W;
- } else {
- gra_global.width=gra_global.height * AR_W / AR_H * (gra_global.red_and_blue ? 1 : gra_global.split_screen);
- }
- }
- gra_global.mapxoff=gra_global.width/(gra_global.split_screen / (gra_global.red_and_blue ? gra_global.split_screen : 1))/2;
- gra_global.mapyoff=gra_global.height/2;
- break;
- case KeyPress:
- if(global.debug >= 2) fprintf(stderr,"# KeyPress\n");
- redraw=1;
- x11_keypress_handler(&e.xkey,gra_global.mousex,gra_global.mousey);
- break;
- default:
-// fprintf(stderr,"# received unknown event with type: %d\n",e.type);
- break;
- }
- }
- if(motionnotify) {
- XQueryPointer(x11_global.dpy,x11_global.w,&root,&child,&gra_global.rmousex,&gra_global.rmousey,&gra_global.mousex,&gra_global.mousey,&mask);
- redraw=1;
- }
-*/
-#endif
- if(world_changed) {
- draw_screen();//includes its own flip.
- }
- return 1;//redraw;
+void graphics_event_handler(struct shit *me,char *line) {
+ return;//fuck if i know. nothing to do?
}
diff --git a/src/graphics_fb.h b/src/graphics_fb.h
index d6e8d7c..0c3a753 100644
--- a/src/graphics_fb.h
+++ b/src/graphics_fb.h
@@ -1,9 +1,6 @@
#ifndef _HACKVR_GRAPHICS_FB_H_
#define _HACKVR_GRAPHICS_FB_H_
-//find this with trial and error or X11 log or... I don't care.
-#define FB_KEYB "/dev/input/event0"
-
#include <linux/input.h>
#define DRAW_MODE_CLEAR 0x0
@@ -16,7 +13,7 @@ struct fb_global {
int kb;
int draw_mode;
unsigned int current_color;
- unsigned int *backbuf;
+ unsigned int *backbuf;//this is assuming unsigned int is 4 bytes and color depth is 32.
struct fb_var_screeninfo info;
unsigned int *buf;
unsigned int fblen;
diff --git a/src/hackvr.c b/src/hackvr.c
index 9ffcaf7..80991dd 100644
--- a/src/hackvr.c
+++ b/src/hackvr.c
@@ -49,6 +49,8 @@ int lum_based_on_distance(c3_s_t *s) {
//might be able to make this faster by just using fgets() and not using recursion and malloc.
/* does not return the newline. */
+
+//this isn't being used anymore afaict.
char *read_line_hack(FILE *fp,int len) {
short in;
char *t;
@@ -133,6 +135,7 @@ int hackvr_handler(char *line);
void hackvr_handler_idc(struct shit *me,char *line) {
switch(hackvr_handler(line)) {
case -1://quit
+ fprintf(stderr,"# exiting due to EOF\n");
exit(0);
case 0://don't redraw
break;
@@ -330,7 +333,11 @@ int hackvr_handler(char *line) {
return ret;
}
if(!strcmp(command,"quit")) {
- return -1;
+ if(!strcmp(id,global.user)) {//only exit hackvr if *we* are quitting
+ return -1;
+ } else {
+ fprintf(stderr,"# %s has quit hackvr\n",id);
+ }
}
if(!strcmp(command,"set")) { //set variable //TODO: add more things to this.
if(len != 3 && len != 4) return ret;
@@ -610,6 +617,9 @@ int hackvr_handler(char *line) {
return ret;
}
fprintf(stderr,"# I don't know what command you're talking about. %s\n",command);
+ for(i=0;a[i];i++) {
+ fprintf(stderr,"# a[%d] = %s\n",i,a[i]);
+ }
//I used to have free(line) here, but this place is never gotten to if a command is found so it wasn't getting released.
return ret;
}
@@ -640,6 +650,7 @@ void alarm_handler(int sig) {
int main(int argc,char *argv[]) {
int i;
+ int fd;
if(argc == 2) {
if(!strcmp(argv[1],"-v") || !strcmp(argv[1],"--version")) {
hvr_version();
@@ -662,7 +673,6 @@ int main(int argc,char *argv[]) {
inittable(&global.ht_group,65536);
- fcntl(1,F_SETFL,O_NONBLOCK);//won't work
setbuf(stdin,0);
setbuf(stdout,0);
global.debug=DEBUG;
@@ -676,11 +686,20 @@ int main(int argc,char *argv[]) {
idc.shitlen=0;
#ifdef GRAPHICAL
- i=add_fd(graphics_init(),graphics_event_handler);
+ if((fd=graphics_init()) == -1) {
+ fprintf(stderr,"# graphics system in use doesn't generate events.\n");
+ } else {
+ i=add_fd(graphics_init(),graphics_event_handler);
+ fprintf(stderr,"# graphics fd: %d\n",idc.fds[i].fd);
+ idc.fds[i].read_lines_for_us=0;
+ }
+
+ i=add_fd(mouse_init(),mouse_event_handler);//this should probably be split to keyboard_init, and mouse_init
+ fprintf(stderr,"# mouse fd: %d\n",idc.fds[i].fd);
idc.fds[i].read_lines_for_us=0;
- fprintf(stderr,"# x11 fd: %d\n",input_init());
- i=add_fd(input_init(),input_event_handler);
+ i=add_fd(keyboard_init(),keyboard_event_handler);
+ fprintf(stderr,"# keyboard fd: %d\n",idc.fds[i].fd);
idc.fds[i].read_lines_for_us=0;
pipe(gra_global.redraw);
diff --git a/src/hackvr_xdie.c b/src/hackvr_xdie.c
new file mode 120000
index 0000000..e4c9ddd
--- /dev/null
+++ b/src/hackvr_xdie.c
@@ -0,0 +1 @@
+hackvr.c \ No newline at end of file
diff --git a/src/input.c b/src/input.c
deleted file mode 100644
index 8c1b99b..0000000
--- a/src/input.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <idc.h>
-#include "common.h"
-#include "graphics_x11.h"
-#include "keyboard_x11.h"