Ejemplo n.º 1
0
/**
 * List all programs stored on the terminal host over the serial line.
 * DIR
 */
void cmd_dir(char *) {
  unsigned char first = 1;

  acia_puts("*DIR\n");

  for(;;) {
    acia_puts("*NEXT\n");
    acia_gets(readline_buffer, 255);

    if (strncmp("*EOF", readline_buffer, 4) == 0) {
      break;
    } else {
      if (first) {
        first = 0;
      } else {
        do {
          if (is_interrupted()) {
            acia_puts("*BREAK\n");
            print_interrupted();
            return;
          }
          keys_update();
        } while (keys_get_code() == KEY_NONE);
      }

      lcd_puts(readline_buffer);
      lcd_put_newline();
    }
  }
  print_ready();
}
Ejemplo n.º 2
0
/**
 * List the program.
 * LiST [<from>]
 */
void cmd_list(char *args) {
  unsigned char range = 0;
  unsigned int from_number;
  unsigned int to_number;
  program_line *line;
  unsigned char first = 1;

  if (isdigit(args[0])) {
    sscanf(args, "%u", &from_number);
    to_number = from_number;
    range = 1;
  }

  line = program;
  while (line) {
    if (range == 0 || (line->number >= from_number && line->number <= to_number)) {
      if (first) {
        first = 0;
      } else {
        do {
          if (is_interrupted()) {
            print_interrupted();
            return;
          }
          keys_update();
        } while (keys_get_code() == KEY_NONE);
      }
      sprintf(print_buffer, "%u %s %s\n", line->number, keywords[line->command], line->args);
      lcd_puts(print_buffer);
    }
    line = line->next;
  }

  print_ready();
}
Ejemplo n.º 3
0
/**
 * Run the program.
 * RUN
 */
void cmd_run(char *) {
  unsigned char command;
  error = 0;
  running = 1;
  current_line = program;
  current_line_changed = 0;
  while (current_line) {
    if (is_interrupted()) {
      print_interrupted();
      lcd_cursor_blink();
      break;
    }
    command = current_line->command;
    command_functions[command](current_line->args);
    if (error) {
      break;
    }
    if (current_line_changed) {
      current_line_changed = 0;
      if (! current_line) {
        break;
      }
    } else {
      current_line = current_line->next;
    }
  }
  print_ready();
}
Ejemplo n.º 4
0
 void run()
 {
     if (!is_interrupted())
     {
         boost::mutex::scoped_lock lock(m_mutex);
         m_state = 3;
     }
 }
Ejemplo n.º 5
0
/**
 * Pause the program for some specified amount of time.
 * SLEEP <milliseconds>
 */
void cmd_sleep(char *args) {
  static unsigned long delay;
  static unsigned long sleep_end_millis;
  if (isdigit(args[0])) {
    sscanf(args, "%ul", &delay);
    sleep_end_millis = time_millis() + delay;
    while (time_millis() < sleep_end_millis) {
      if (is_interrupted()) {
        break;
      }
    }
  } else {
    syntax_error();
  }
}
Ejemplo n.º 6
0
bool worker_check(const worker_options_t *options, const worker_snapshot_t *snapshot) {
	if (is_interrupted()) {
		return false;
	}

	if (likely(options->duration_type == TEST_TIME)) {
		if (likely(snapshot->now.tv_sec <= options->duration.time.end.tv_sec)) {
			return true;
		}
	} else {
		if (likely(snapshot->count < options->duration.count)) {
			return true;
		}
	}

	return false;
}
Ejemplo n.º 7
0
/**
 * Input a variable from the keyboard.
 * INPUT <variable> [ONERROR <command]
 */
void cmd_input(char *args) {
  unsigned int var_name;
  unsigned char var_type;

  args = parse_variable(args, &var_name, &var_type);
  if (args) {
    if (var_type == VAR_TYPE_STRING) {
      char *line = readline(INTERRUPTIBLE);
      create_variable(var_name, var_type, line);
    } else if (var_type == VAR_TYPE_INTEGER) {
      for (;;) {
        int value = 0;
        char *line = readline(INTERRUPTIBLE);
        if (is_interrupted()) {
          break;
        }
        if (parse_integer(line, &value)) {
          create_variable(var_name, var_type, &value);
          break;
        } else {
          if (next_token(args) == TOKEN_ONERROR) {
            args = consume_token(args, TOKEN_ONERROR);
            execute(args);
            break;
          } else {
            syntax_error_invalid_number();
            lcd_puts("Enter again: ");
          }
        }
      }
    } else {
      syntax_error_invalid_argument();
    }
  } else {
    syntax_error_invalid_argument();
  }
}
Ejemplo n.º 8
0
/*----------------------------------------------------------
LPRPort.eventLoop

   accept:      none
   perform:     periodically check for ParallelPortEvents
   return:      none
   exceptions:  none
   comments:    lots of work needed here.  Yes its a mess.
struct lp_stats
{
	unsigned long chars;
	unsigned long sleeps;
	unsigned int maxrun;
	unsigned int maxwait;
	unsigned int meanwait;
	unsigned int mdev;
};

----------------------------------------------------------*/
JNIEXPORT void JNICALL LPRPort(eventLoop)( JNIEnv *env,
	jobject jobj )
{
	int fd, ret;
	unsigned int pflags = 0;
	fd_set rfds;
	struct timeval sleep;
	jboolean interrupted = 0;

	fd = get_java_var( env, jobj,"fd","I" );

	interrupted = is_interrupted(env, jobj);

	FD_ZERO( &rfds );
	while( !interrupted )
	{
		FD_SET( fd, &rfds );
		/* Check every 1 second, or on receive data */
		sleep.tv_sec = 1;	
		sleep.tv_usec = 0;
		do {
			ret = select( fd + 1, &rfds, NULL, NULL, &sleep );
		}
		while (ret < 0 && errno == EINTR);
		if( ret < 0 ) break;
		interrupted = is_interrupted(env, jobj);
		if(interrupted) {
			return;
		}

#if defined(LPGETSTATUS)
		ioctl( fd, LPGETSTATUS, &pflags );
#elif defined(WIN32)
		pflags = getWin32ParallelStatusFlags(fd);
#else
	/*  FIXME??  */
	printf("ParallelImp.c LPGETSTATUS is undefined!\n");
#endif

/*
			PAR_EV_BUFFER:
			PAR_EV_ERROR:
*/

#if defined(PARALLEL_BUSY)
		if (pflags & PARALLEL_BUSY)
			send_event( env, jobj, PAR_EV_ERROR, JNI_TRUE );
#elif defined(LP_BUSY)
		if (pflags&LP_BUSY)    /* inverted input, active high */
			send_event( env, jobj, PAR_EV_ERROR, JNI_TRUE );
#elif defined(EBUSY)
		if (pflags&EBUSY)    /* inverted input, active high */
			send_event( env, jobj, PAR_EV_ERROR, JNI_TRUE );
#endif /* EBUSY LP_BUSY */
/*  FIXME  this has moved into the ifdef __kernel__?  Need to get the
           posix documentation on this.
		if (pflags&LP_ACK)
			send_event( env, jobj, PAR_EV_ERROR, JNI_TRUE );
*/


#if defined (__linux__)
		/* unchanged input, active low */
		if (pflags&LP_NOPA)   /* unchanged input, active high */
			send_event( env, jobj, PAR_EV_ERROR, 1 );
		if (pflags&LP_SELEC)  /* unchanged input, active high */
			send_event( env, jobj, PAR_EV_ERROR, 1 );
		if (pflags&LP_ERR)  /* unchanged input, active low */
			send_event( env, jobj, PAR_EV_ERROR, 1 );
#else
	/*  FIXME??  */
	printf("ParallelImp.c LPGETSTATUS is undefined!\n");
#endif
		usleep(1000);
	}
	return;
}