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"