9fans.net/go@v0.0.7/cmd/sam/sam.h.go (about) 1 package main 2 3 import ( 4 "os" 5 "unsafe" 6 ) 7 8 /* 9 * BLOCKSIZE is relatively small to keep memory consumption down. 10 */ 11 12 const ( 13 BLOCKSIZE = 2048 14 NDISC = 5 15 NBUFFILES = 3 + 2*NDISC /* plan 9+undo+snarf+NDISC*(transcript+buf) */ 16 NSUBEXP = 10 17 18 RUNESIZE = int(unsafe.Sizeof(rune(0))) 19 INFINITY = 0x7FFFFFFF 20 INCR = 25 21 STRSIZE = 2 * BLOCKSIZE /* TODO(rsc): Is that 2 a stale RUNESIZE? */ 22 ) 23 24 type Posn = int /* file position or address */ 25 type Mod int /* modification number */ 26 27 type State int 28 29 const ( 30 Clean State = ' ' 31 Dirty State = '\'' 32 Unread State = '-' 33 ) 34 35 type Range struct { 36 p1 Posn 37 p2 Posn 38 } 39 40 type Rangeset struct { 41 p [NSUBEXP]Range 42 } 43 44 type Address struct { 45 r Range 46 f *File 47 } 48 49 type String struct { 50 s []rune // n was len(s), size was cap(s) 51 } 52 53 func (s String) String() string { return string(s.s) } 54 55 type List struct { 56 type_ int 57 nalloc int 58 nused int 59 g struct { 60 listp *[0]byte 61 voidp **[0]byte 62 posnp *Posn 63 stringp **String 64 filep **File 65 } 66 } 67 68 // #define listptr g.listp 69 // #define voidpptr g.voidp 70 // #define posnptr g.posnp 71 // #define stringpptr g.stringp 72 // #define filepptr g.filep 73 74 const ( 75 Blockincr = 256 76 Maxblock = 8 * 1024 77 BUFSIZE = Maxblock 78 RBUFSIZE = BUFSIZE / RUNESIZE 79 ) 80 81 /* size from fbufalloc() */ 82 83 const ( 84 Null = '-' 85 Delete = 'd' 86 Insert = 'i' 87 Filename = 'f' 88 Dot = 'D' 89 Mark = 'm' 90 ) 91 92 type Block struct { 93 addr int64 94 u struct { 95 n int 96 next *Block 97 } 98 } 99 100 type Disk struct { 101 fd *os.File 102 addr int64 103 free [Maxblock/Blockincr + 1]*Block 104 } 105 106 type Buffer struct { 107 nc int 108 c []rune // cnc was len(c), cmax was cap(c) 109 cq int 110 cdirty bool 111 cbi int 112 bl []*Block // nbl was len(bl) == cap(bl) 113 } 114 115 type File struct { 116 b Buffer 117 delta Buffer 118 epsilon Buffer 119 name String 120 info os.FileInfo 121 unread bool 122 seq int 123 cleanseq int 124 mod bool 125 rescuing int8 126 hiposn Posn 127 dot Address 128 ndot Address 129 tdot Range 130 mark Range 131 rasp *PosnList 132 tag int 133 closeok bool 134 deleted bool 135 prevdot Range 136 prevmark Range 137 prevseq int 138 prevmod bool 139 } 140 141 /*File* fileaddtext(File*, Text*); */ 142 143 /*void filedeltext(File*, Text*); */ 144 145 /* 146 * acme fns 147 */ 148 149 // #define runemalloc(a) (Rune*)emalloc((a)*sizeof(Rune)) 150 // #define runerealloc(a, b) (Rune*)realloc((a), (b)*sizeof(Rune)) 151 // #define runemove(a, b, c) memmove((a), (b), (c)*sizeof(Rune)) 152 153 /* extern var samname [unknown]Rune */ /* compiler dependent */ 154 /* extern var left [unknown]*Rune */ 155 /* extern var right [unknown]*Rune */ 156 157 /* extern var RSAM [unknown]C.char */ /* system dependent */ 158 /* extern var SAMTERM [unknown]C.char */ 159 /* extern var HOME [unknown]C.char */ 160 /* extern var TMPDIR [unknown]C.char */ 161 /* extern var SH [unknown]C.char */ 162 /* extern var SHPATH [unknown]C.char */ 163 /* extern var RX [unknown]C.char */ 164 /* extern var RXPATH [unknown]C.char */ 165 166 /* 167 * acme globals 168 */ 169 /* extern var seq int */ 170 /* extern var disk *Disk */ 171 172 /* extern var rsamname *C.char */ /* globals */ 173 /* extern var samterm *C.char */ 174 /* extern var genbuf [unknown]Rune */ 175 /* extern var genc *C.char */ 176 /* extern var io int */ 177 /* extern var patset int */ 178 /* extern var quitok int */ 179 /* extern var addr Address */ 180 /* extern var snarfbuf Buffer */ 181 /* extern var plan9buf Buffer */ 182 /* extern var file List */ 183 /* extern var tempfile List */ 184 /* extern var cmd *File */ 185 /* extern var curfile *File */ 186 /* extern var lastfile *File */ 187 /* extern var modnum Mod */ 188 /* extern var cmdpt Posn */ 189 /* extern var cmdptadv Posn */ 190 /* extern var sel Rangeset */ 191 /* extern var curwd String */ 192 /* extern var cmdstr String */ 193 /* extern var genstr String */ 194 /* extern var lastpat String */ 195 /* extern var lastregexp String */ 196 /* extern var plan9cmd String */ 197 /* extern var downloaded int */ 198 /* extern var eof int */ 199 /* extern var bpipeok int */ 200 /* extern var panicking int */ 201 /* extern var empty [unknown]Rune */ 202 /* extern var termlocked int */ 203 /* extern var outbuffered int */ 204 205 // #include "mesg.h"