Exemple #1
0
pty_t * pty_new(struct winsize * size) {
	pty_t * pty = malloc(sizeof(pty_t));

	/* stdin linkage; characters from terminal → PTY slave */
	pty->in  = ring_buffer_create(TTY_BUFFER_SIZE);
	pty->out = ring_buffer_create(TTY_BUFFER_SIZE);

	/* Master endpoint - writes go to stdin, reads come from stdout */
	pty->master = pty_master_create(pty);

	/* Slave endpoint, reads come from stdin, writes go to stdout */
	pty->slave  = pty_slave_create(pty);

	/* TODO PTY name */
	pty->name   = 0;

	if (size) {
		memcpy(&pty->size, size, sizeof(struct winsize));
	} else {
		/* Sane defaults */
		pty->size.ws_row = 25;
		pty->size.ws_col = 80;
	}

	/* Controlling and foreground processes are set to 0 by default */
	pty->ct_proc = 0;
	pty->fg_proc = 0;

	pty->tios.c_iflag = ICRNL | BRKINT;
	pty->tios.c_oflag = ONLCR | OPOST;
	pty->tios.c_lflag = ECHO | ECHOE | ECHOK | ICANON | ISIG | IEXTEN;
	pty->tios.c_cflag = CREAD;
	pty->tios.c_cc[VEOF]   =  4; /* ^D */
	pty->tios.c_cc[VEOL]   =  0; /* Not set */
	pty->tios.c_cc[VERASE] = '\b';
	pty->tios.c_cc[VINTR]  =  3; /* ^C */
	pty->tios.c_cc[VKILL]  = 21; /* ^U */
	pty->tios.c_cc[VMIN]   =  1;
	pty->tios.c_cc[VQUIT]  = 28; /* ^\ */
	pty->tios.c_cc[VSTART] = 17; /* ^Q */
	pty->tios.c_cc[VSTOP]  = 19; /* ^S */
	pty->tios.c_cc[VSUSP] = 26; /* ^Z */
	pty->tios.c_cc[VTIME]  =  0;

	pty->canon_buffer  = malloc(TTY_BUFFER_SIZE);
	pty->canon_bufsize = TTY_BUFFER_SIZE;
	pty->canon_buflen  = 0;

	return pty;
}
Exemple #2
0
int main()
{
    struct ring_buffer rb;
    ring_buffer_create(&rb, 16);
    ring_buffer_free(&rb);
    return 0;
}
void init_buffer_socket(BufferSocket *bs, size_t item_count, size_t payload_len) {
    // Initialize a BufferSocket
    bs->buf = ring_buffer_create(item_count, payload_len);
    set_callback(bs, &default_callback);
    bs->run_threads = 0;
    bs->userdata = NULL;
}
Exemple #4
0
SEXP R_ring_buffer_create(SEXP r_size, SEXP r_stride) {
  size_t size = (size_t)INTEGER(r_size)[0], stride = INTEGER(r_stride)[0];
  if (size == 0) {
    Rf_error("Can't create ring buffer with size 0");
  }
  if (stride == 0) {
    Rf_error("Can't create ring buffer with stride 0");
  }
  return R_ring_buffer_build(ring_buffer_create(size, stride));
}
Exemple #5
0
//Start USART with user defined callback
void usart_start(void (*receive_cb)(void)) {
  //Set USART parameters (from setbaud.h)
  UBRR0H = UBRRH_VALUE;
  UBRR0L = UBRRL_VALUE;
  #if USE_2X
  UCSR0A |=  (1<<U2X0);
  #else
  UCSR0A &= ~(1<<U2X0);
  #endif

  //Promote callback
  usart_receive_cb = receive_cb;

  //Enable USART
  UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);
  UCSR0B = (1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0);

	rx_buff = ring_buffer_create(USART_BUFFER_SIZE);
  tx_buff = ring_buffer_create(USART_BUFFER_SIZE);
}
Exemple #6
0
fs_node_t * keyboard_create() {
  fs_node_t * keyboard;
  keyboard = (fs_node_t *)kmalloc(sizeof(keyboard));
  strcpy(keyboard->name, "keyboard");
  keyboard->mask = keyboard->uid = keyboard->gid = keyboard->inode = keyboard->length = 0;
  keyboard->flags = FS_CHARDEVICE;
  keyboard->buffer = ring_buffer_create(8);
  // dev_root
  keyboard->write = keyboard_write;
  keyboard->read = keyboard_read;

  return keyboard;
}
struct buffer *create_buffer(int size)
//@ requires true &*& size > 0 &*& size * sizeof(int) < INT_MAX &*& [_]ghost_cell<list<int> >(?id_contents, ?alltext);
/*@ ensures
  [_]ghost_cell(id_contents, alltext)
  &*& result == 0 ?
    emp
  :
    buffer(result, id_contents, ?id_progress_read, ?id_progress_write)
    &*& token(id_progress_read, 0)
    &*& token(id_progress_write, 0);
@*/
{
  struct buffer *buffer = malloc(sizeof(struct buffer));
  if (buffer == 0){
    return 0;
  }
  struct ring_buffer *ring_buffer = ring_buffer_create(size);
  if (ring_buffer == 0){
    free(buffer);
    return 0;
  }
  buffer->ring_buffer = ring_buffer;
  //@ int id_progress_read = create_ghost_cell(0);
  //@ int id_progress_write = create_ghost_cell(0); 
  //@ close create_mutex_ghost_arg(buffer_protected(buffer, id_contents, id_progress_read, id_progress_write));
  //@ close exists<list<int> >(nil);
  //@ close buffer_protected(buffer, id_contents, id_progress_read, id_progress_write)();
  buffer->mutex = create_mutex();
  //@ close create_mutex_cond_ghost_args(buffer->mutex);
  buffer->cond_can_push = create_mutex_cond();
  //@ close create_mutex_cond_ghost_args(buffer->mutex);
  buffer->cond_can_pop = create_mutex_cond();

  return buffer;
  //@ close buffer(buffer, id_contents, id_progress_read, id_progress_write);
  //@ close token(id_progress_read, 0);
  //@ close token(id_progress_write, 0);
}
static int
Buffer_init(Buffer *self, PyObject *args, PyObject *kwargs)
{
    static char *kwlist[] = {"order", NULL};

    if ( !PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, &self->order) ) {
        return -1;
    }

    if (self->order == 0) {
        self->order = 12; // the ring buffer size defaults to 4KB
    }

    if (self->order < 12) {
        PyErr_SetString (PyExc_ValueError, "Order is too small, which has to be at least 12");
        return NULL;
    }

    self->buffer = malloc(sizeof *self->buffer);
    ring_buffer_create (self->buffer, self->order);

    return 0;
}