File: clip.c

package info (click to toggle)
aoeui 1.7%2B20160302.git4e5dee9-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 532 kB
  • sloc: ansic: 6,860; makefile: 294; sh: 11
file content (44 lines) | stat: -rw-r--r-- 1,115 bytes parent folder | download | duplicates (3)
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
/* Copyright 2007, 2008 Peter Klausler.  See COPYING for license. */
#include "all.h"

static struct buffer **clip_buffer;
static unsigned clip_buffers;

void clip_init(unsigned reg)
{
	if (reg < clip_buffers)
		buffer_delete(clip_buffer[reg], 0, ~(size_t)0);
}

size_t clip(unsigned reg, struct view *view, position_t offset,
	    size_t bytes, Boolean_t append)
{
	char *raw;

	if (reg >= clip_buffers) {
		clip_buffer = reallocate(clip_buffer,
					 (reg+1) * sizeof *clip_buffer);
		memset(clip_buffer + clip_buffers, 0,
		       (reg + 1 - clip_buffers) * sizeof *clip_buffer);
		clip_buffers = reg + 1;
	}

	if (!clip_buffer[reg])
		clip_buffer[reg] = buffer_create(NULL);
	bytes = view_raw(view, &raw, offset, bytes);
	return buffer_insert(clip_buffer[reg], raw,
			     append ? buffer_bytes(clip_buffer[reg]) : 0,
			     bytes);
}

size_t clip_paste(struct view *view, position_t offset, unsigned reg)
{
	char *raw;
	size_t bytes;

	if (reg >= clip_buffers)
		return 0;
	bytes = buffer_raw(clip_buffer[reg], &raw, 0,
			   buffer_bytes(clip_buffer[reg]));
	return view_insert(view, raw, offset, bytes);
}