Example #1
0
/*---------------------------------------------------------------------------*/
void
lcd_write_char(char c)
{
  char string[2];

  if(WITH_LCD) {
    if(c == '\n') {
      inc_y();
    } else {
      string[0] = c;
      string[1] = 0;

      if(ypos == Y_MAX) {
	lcd_clear();
	ypos = xpos = 0;
      }

      halLcdPrintXY(string, xpos * X_CHAR_SIZE, ypos * Y_CHAR_SIZE, 0);

      if(xpos == X_MAX) {
	inc_y();
      } else {
	xpos++;
      }
    }
  }
}
Example #2
0
char				*wrong(t_client *client)
{
	attron(COLOR_PAIR(1));
	mvprintw(client->y, 0, "ERROR: wrong command\n");
	attron(COLOR_PAIR(2));
	inc_y(client);
	wmove(client->win, client->y, 0);
	return (0);
}
Example #3
0
void				put_error(t_client *client, char *error)
{
	if (error)
	{
		attron(COLOR_PAIR(1));
		mvprintw(client->y, 0, "ERROR: %s\n", error);
		attron(COLOR_PAIR(2));
		inc_y(client);
		wmove(client->win, client->y, 0);
	}
}
Example #4
0
void le_step_y(le_task *t)
{
	assert(t->stype == ST_AOS);
	/*
	 * The same way as step_x.
	 * WARNING: Not cache friendly!
	 */
	int i, j;
	const real k1 = t->dt * t->mat.c1 / t->h.y;
	const real k2 = t->dt * t->mat.c2 / t->h.y;
	int num_of_threads = omp_get_num_threads();
	
	#pragma omp parallel for shared(t) private(i,j)
	    for (i = 0; i < t->n.x; i++) {
		    le_w w_2, w_1, w, w1, w2;
		    omega_y(&t->mat, &gind(i, 0), &w);
		    omega_y(&t->mat, &gind(i, 1), &w1);
		    omega_y(&t->mat, &gind(i, 2), &w2);
		    w_2 = w_1 = w;
		    //printf("i = %d\n", i);
		    for (j = 0; j < t->n.y; j++) {
		        //if(j > 3) printf("1\n");
			    le_w d;
			    reconstruct(w_2, w_1, w, w1, w2, k1, k2, &d);
			    //if(j > 3) printf("2\n");
			    inc_y(&t->mat, &gind(i, j), &d);
			    //if(j > 3) printf("3\n");
			    w_2 = w_1;
			    w_1 = w;
			    w   = w1;
			    w1  = w2;
			    if (j < t->n.y - 3) omega_y(&t->mat, &gind(i, j + 3), &w2);
		    }
	    }
	
}
Example #5
0
void le_step_y_cf(le_task *t, const int_t cfs)
{
	assert(t->stype == ST_AOS);
	assert(cfs > 0 && cfs <= t->n.x);
	
	/*
	 * Cache friendly version of function le_step_y.
	 */
	int i, j, k;
	const real k1 = t->dt * t->mat.c1 / t->h.y;
	const real k2 = t->dt * t->mat.c2 / t->h.y;
	
	le_w *w_2, *w_1, *w, *w1, *w2;
	w_2 = (le_w*)malloc(sizeof(le_w) * cfs);
	w_1 = (le_w*)malloc(sizeof(le_w) * cfs);
	w   = (le_w*)malloc(sizeof(le_w) * cfs);
	w1  = (le_w*)malloc(sizeof(le_w) * cfs);
	w2  = (le_w*)malloc(sizeof(le_w) * cfs);
	

	for (k = 0; k < t->n.x; k += cfs) {
		int cfs_n = (k + cfs > t->n.x) ? t->n.x - k : cfs;
		/* Prepare values and copy it to w[] */
		for (i = 0; i < cfs_n; i++) {
			omega_y(&t->mat, &gind(i + k, 0), w  + i);
			omega_y(&t->mat, &gind(i + k, 1), w1 + i);
			omega_y(&t->mat, &gind(i + k, 2), w2 + i);
		}
		memcpy(w_2, w, sizeof(le_w) * cfs_n);
		memcpy(w_1, w, sizeof(le_w) * cfs_n);
		
		/*
		 * Iterate throw cached arrays of values.
		 */
		for (j = 0; j < t->n.y; j++) {
			for (i = 0; i < cfs_n; i++) {
				le_w d;
				reconstruct(w_2[i], w_1[i], w[i], w1[i], w2[i], k1, k2, &d);
				inc_y(&t->mat, &gind(i + k, j), &d);
			}
			/*
			 * Swap values.
			 */
			le_w *wt = w_2;
			w_2 = w_1;
			w_1 = w;
			w   = w1;
			w1  = w2;
			w2  = wt;
			if (j < t->n.y - 3) {
				for (i = 0; i < cfs_n; i++) {
					omega_y(&t->mat, &gind(i + k, j + 3), w2 + i);
				}
			}
		}
	}
	
	free(w_2);
	free(w_1);
	free(w);
	free(w1);
	free(w2);
}