all repos — kuro @ 15fd5e6d59cb0cc5c6e8083ace8f7cea8175ebfe

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
#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>
#include <frame.h>

typedef enum {
  CTL = 0,
  CPU = 1,
  MEMORY = 2
} 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
} FrameType;

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

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

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

typedef struct {
  Rune* text;
  uint text_len;
  Frame* frame;
} SubFrame;

typedef struct {
  uvlong id;
  WindowStatus status;
  Image* img;
  Screen* screen;
  char filepath[512];
  SubFrame* editorState[TOTAL_SUBF];
} KuroMemory;

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

Image* tagcols[NCOL];
Image* textcols[NCOL];