Пример #1
0
void
Y_timestamp(int argc)
{
  time_t n_time = time((void *)0);
  char *time = ctime(&n_time);
  long index = yget_ref(0);
  if (argc != 1) y_error("timestamp takes exactly one argument");
  if (index >= 0) {
    ypush_long((long)n_time);
    yput_global(index, 0);
  }
  if (!yarg_subroutine()) {
    char **q = ypush_q(0);
    q[0] = p_strcpy(strtok(time, "\n"));
  }
}
Пример #2
0
Файл: yusb.c Проект: emmt/yusb
 static void do_transfer(int argc,
                         int (*transfer)(struct libusb_device_handle* handle,
                                         unsigned char endpoint,
                                         unsigned char* data,
                                         int length,
                                         int* transferred,
                                         unsigned int timeout))
{
  ydev_instance_t* obj;
  int ret, iarg;
  int endpoint, length, transferred, offset;
  long size;
  unsigned char* data;
  unsigned int timeout;
  long transferred_index;

  /* Get arguments. */
  if (argc != 6 && argc != 7) {
    y_error("expecting 6 or 7 arguments");
  }
  iarg = argc;
  obj = get_device(--iarg);
  endpoint = ygets_i(--iarg) & 0xff; /* uint8_t */
  data = (unsigned char*)get_data(--iarg, &size);
  length = ygets_i(--iarg);
  if (length < 0) {
    y_error("invalid length");
  }
  if (length > size) {
    y_error("length must be at most the size of the data");
  }
  transferred_index = yget_ref(--iarg);
  if (transferred_index < 0L) {
    y_error("expecting a simple variable reference");
  }
  timeout = (unsigned int)(ygets_l(--iarg) & 0xffffffffL);
  if (iarg > 0) {
    offset = ygets_i(--iarg);
    if (offset < 0 || offset > length) {
      y_error("invalid offset");
    }
  } else {
    offset = 0;
  }

  /* Apply operation. */
  if (length > offset) {
    ret = transfer(obj->handle, endpoint, data + offset,
                   length - offset, &transferred, timeout);
    if (!(ret == 0 || (ret == LIBUSB_ERROR_TIMEOUT && transferred > 0))) {
      /* No data has been transferred. */
      transferred = 0;
      if (yarg_subroutine()) {
        /* Some error has occured. */
        failure(NULL, ret);
      }
    }
  } else {
    /* Nothing to do. */
    transferred = 0;
    ret = 0;
  }
  if (transferred_index >= 0L) {
    /* Store total number of transferred bytes so far. */
    ypush_int(offset + transferred);
    yput_global(transferred_index, 0);
  }
  ypush_int(ret);
}
Пример #3
0
Файл: yusb.c Проект: emmt/yusb
static void define_global_int(const char* name, int value)
{
  ypush_int(value);
  yput_global(yget_global(name, 0), 0);
  yarg_drop(1);
}