all repos — kuro @ 6fa747864efcb84863d09a9a937315e748a9f040

multiwindow text editor thing for plan9 with simple client VM and 9p interface

dat.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <u.h>
#include <libc.h>
#include <stdio.h>
#include <fcall.h>
#include <thread.h>
#include <9p.h>
#include <draw.h>
#include <cursor.h>
#include <mouse.h>
#include <keyboard.h>

typedef enum {
  CTL = 1
} FileType;

typedef enum {
  KURO_RUNS = 0,
  KURO_QUITS
} WindowStatus;

typedef enum {
  PORT_MOUSE,
  PORT_RESIZE,
  PORT_KBD,
  PORT_STATUS,
  TOTAL_PORTS
} Port;

typedef enum {
  INIT,
  OPEN_FILE,
  SAVE_FILE,
  MOUSE,
  KEYBOARD,
  SCROLL,
  CURSOR,
  SELECT,
  INSERT,
  DELETE,
  CUT,
  COPY,
  PASTE,
  EXEC,
  PLUMB,
  INDICATE,
  SPLIT,
  PARTITION,
  TOTAL_OPCODES
} Opcode;

typedef enum {
  TAGF,
  BODYF,
  SHELLF,
  TOTAL_SUBF
} SubFrame;

typedef struct Aux {
	FileType type;
	char* data;
	int count;
} Aux;

typedef struct {
  Opcode opcode;
  void* data;
} Instruction;

typedef void (*Handler)(void*, void*);

typedef struct {
  uvlong id;
  WindowStatus status;
  Image* img;
  Screen* screen;
  char filepath[512];
  Rune* tag;
  uint tag_len;
  Rune* body;
  uint body_len;
} KuroMemory;

typedef struct {
  uvlong id;
  int fd;
  Channel* cpu; /* chan(Instruction) */
  Handler* handlers;
  KuroMemory* memory;
  Channel* status; /* chan(WidowStatus) */
} Node;

typedef struct NodeRef NodeRef;

struct NodeRef {
  int fd[2];
  uvlong id;
  NodeRef* next;
};

typedef struct {
  NodeRef* data[256];
} NodeTable;