Exemple #1
0
extern void
disp_packet(			/* display a packet */
	register PACKHEAD	*p
)
{
	disp_result(DS_BUNDLE, packsiz(p->nr), (char *)p);
}
Exemple #2
0
Fichier : 021.c Projet : githubix/c
int main(void)
{
    int judge;
    int retry;
    
    initialize();
    
    do {
        jyanken();
        
        printf("I am %s and you are %s. \n", hd[comp], hd[human]);
        
        judge = (human - comp + 3) % 3;
        
        count_no(judge);
        
        disp_result(judge);
        
        retry = confirm_retry();
    } while (retry == 1);
    
    printf("%d win, %d lose, %d even. \n", win_no, lose_no, draw_no);
    
    return (0);
}
Exemple #3
0
extern int
disp_close(void)			/* close our display process */
{
	if (dpout == NULL)
		return(-1);
	myeye.rng = 0;
	disp_result(DS_SHUTDOWN, 0, NULL);
	fclose(dpout);
	dpout = NULL;
	return(dpd.running ? close_process(&dpd) : 0);

}
Exemple #4
0
int main(void)
{
    int judge;

    initialize();

    do {
        jyanken();
        printf("I choose %s, you choose %s.\n", hd[comp], hd[human]);
        judge = (human - comp + 3) % 3;
        count_no(judge);
        disp_result(judge);
    } while (win_no < 3 && lose_no < 3);
    printf(win_no == 3 ? "\n You win.\n" : "\n I win.\n");
    printf("%d win %d lose %d draw.\n", win_no, lose_no, draw_no);
    return 0;
}
Exemple #5
0
int main(void)
{
	int judge,retry;
	
	initialized();
	
	do{
		jyanken();
		
		printf("私は%sで、あなたは%sです\n",hd[comp],hd[human]);
		
		judge = (human - comp+3)%3;
		count_no(judge);
		disp_result(judge);
		retry = confirm_retry();
	}while(retry == 1);
	
	printf("%d勝 %d負 %d引き分け \n",win_no,lose_no,draw_no);
	
	return(0);
}
Exemple #6
0
int jm(void)
{
  int judge;
  int retry;

  initialize();

  do{

    jyanken();

           switch(ship){
	   case 0 : printf("雷は%sで、しれーかんは%sよ!\n", hd[comp], hd[human]);               break;
	   case 1 : printf("夕立は%sで、てーとくさんは%sだったっぽい~\n", hd[comp], hd[human]);  break;
	   case 2 : printf("私は%sで、提督は%sデース!\n", hd[comp], hd[human]);                 break;
	   case 3 : printf("私は%sで、貴様は%sだな\n", hd[comp], hd[human]);                     break; 
	   case 4 : printf("私は%sで、あなたは%sね\n", hd[comp], hd[human]);                     break;
	   case 5 : printf("あたしが%sで、提督は%sだな!\n", hd[comp], hd[human]);               break;
     }   

	
	judge = (human - comp + 3)% 3;

	count_no(judge);

	disp_result(judge);
  
	do{ retry = confirm_retry();
	}while(retry < 1 || retry > 2);
       
  }while(retry == 1);

  printf("\n\nクマー。審判役の球磨クマ。総合結果をお知らせするクマ。\n%d勝%d敗%d分けだったクま。\n",win_no,lose_no,draw_no); 
       return(0);
       
}
Exemple #7
0
extern void
disp_open(		/* open the named display driver */
	char	*dname
)
{
	char	buf[sizeof(HDGRID)+512], fd0[8], fd1[8], *cmd[5], *sfn;
	int	i, n, len;

	if (!strcmp(dname, SLAVENAME)) {
		dpd.r = 0;		/* read from stdin */
		dpout = stdout;		/* write to stdout */
		dpd.running = 0; /* we're the slave procees */
	} else {
					/* get full display program name */
#ifdef DEVPATH
		sprintf(buf, "%s/%s%s", DEVPATH, dname, HDSUF);
#else
		sprintf(buf, "dev/%s%s", dname, HDSUF);
#endif
					/* dup stdin and stdout */
		if (readinp)
			sprintf(fd0, "%d", dup(0));
		else
			strcpy(fd0, "-1");
		sprintf(fd1, "%d", dup(1));
					/* start the display process */
		cmd[0] = buf;
		cmd[1] = froot; cmd[2] = fd1; cmd[3] = fd0;
		cmd[4] = NULL;
		i = open_process(&dpd, cmd);
		if (i <= 0)
			error(USER, "cannot start display process");
		if ((dpout = fdopen(dpd.w, "w")) == NULL)
			error(SYSTEM, "problem opening display pipe");
					/* close dup'ed stdin and stdout */
		if (readinp)
			close(atoi(fd0));
		close(atoi(fd1));
	}
	dpd.w = -1;		/* causes ignored error in close_process() */
	inp_flags = 0;
				/* check if outside */
	if (vdef(OBSTRUCTIONS) && vbool(OBSTRUCTIONS))
		disp_result(DS_OUTSECT, 0, NULL);
				/* send eye separation if specified */
	if (vdef(EYESEP)) {
		sprintf(buf, "%.9e", vflt(EYESEP));
		disp_result(DS_EYESEP, strlen(buf)+1, buf);
	}
				/* write out hologram grids & octrees */
	for (i = 0; hdlist[i] != NULL; i++) {
		memcpy(buf, (void *)hdlist[i], sizeof(HDGRID));
		len = sizeof(HDGRID);
		n = vdef(GEOMETRY);
		sfn = i<n ? nvalue(GEOMETRY,i) :
				n ? nvalue(GEOMETRY,n-1) : vval(OCTREE);
		strcpy(buf+len, sfn);
		len += strlen(sfn) + 1;
		n = vdef(PORTS);
		sfn = i<n ? nvalue(PORTS,i) : n ? nvalue(PORTS,n-1) : "";
		strcpy(buf+len, sfn);
		len += strlen(sfn) + 1;
		disp_result(DS_ADDHOLO, len, buf);
	}
	disp_flush();
}
Exemple #8
0
extern int
disp_check(		/* check display process */
	int	block
)
{
	MSGHEAD	msg;
	int	n;
	char	*buf = NULL;

	if (dpout == NULL)
		return(-1);
					/* flush display output */
	disp_flush();
					/* check read blocking */
	if (block != (inp_flags == 0)) {
		inp_flags = block ? 0 : FNONBLK;
		if (fcntl(dpd.r, F_SETFL, inp_flags) < 0)
			goto fcntlerr;
	}
					/* read message header */
	n = read(dpd.r, (char *)&msg, sizeof(MSGHEAD));
	if (n != sizeof(MSGHEAD)) {
		if (n >= 0) {
			dpout = NULL;
			error(USER, "display process died");
		}
		if ((errno != EAGAIN) & (errno != EINTR))
			goto readerr;
		return(2);		/* acceptable failure */
	}
	if (msg.nbytes) {		/* get the message body */
		if (msg.nbytes < 0)
			error(INTERNAL, "anti-message from display process");
		buf = (char *)malloc(msg.nbytes);
		if (buf == NULL)
			error(SYSTEM, "out of memory in disp_check");
		if (inp_flags != 0 && fcntl(dpd.r, F_SETFL, inp_flags=0) < 0)
			goto fcntlerr;
		if (readbuf(dpd.r, buf, msg.nbytes) != msg.nbytes)
			goto readerr;
	}
	switch (msg.type) {		/* take appropriate action */
	case DR_BUNDLE:		/* new bundle to calculate */
		if (msg.nbytes != sizeof(PACKHEAD))
			error(INTERNAL, "bad DR_BUNDLE from display process");
		bundle_set(BS_ADD, (PACKHEAD *)buf, 1);
		break;
	case DR_NEWSET:		/* new calculation set */
		if (msg.nbytes % sizeof(PACKHEAD))
			error(INTERNAL, "bad DR_NEWSET from display process");
		if (msg.nbytes)
			disp_result(DS_STARTIMM, 0, NULL);
		bundle_set(BS_NEW, (PACKHEAD *)buf, msg.nbytes/sizeof(PACKHEAD));
		if (msg.nbytes) {
			disp_result(DS_ENDIMM, 0, NULL);
			disp_flush();
		}
		break;
	case DR_ADDSET:		/* add to calculation set */
		if (!msg.nbytes)
			break;
		if (msg.nbytes % sizeof(PACKHEAD))
			error(INTERNAL, "bad DR_ADDSET from display process");
		disp_result(DS_STARTIMM, 0, NULL);
		bundle_set(BS_ADD, (PACKHEAD *)buf, msg.nbytes/sizeof(PACKHEAD));
		disp_result(DS_ENDIMM, 0, NULL);
		disp_flush();
		break;
	case DR_ADJSET:		/* adjust calculation set members */
		if (!msg.nbytes)
			break;
		if (msg.nbytes % sizeof(PACKHEAD))
			error(INTERNAL, "bad DR_ADJSET from display process");
		disp_result(DS_STARTIMM, 0, NULL);
		bundle_set(BS_ADJ, (PACKHEAD *)buf, msg.nbytes/sizeof(PACKHEAD));
		disp_result(DS_ENDIMM, 0, NULL);
		disp_flush();
		break;
	case DR_DELSET:		/* delete from calculation set */
		if (!msg.nbytes)
			break;
		if (msg.nbytes % sizeof(PACKHEAD))
			error(INTERNAL, "bad DR_DELSET from display process");
		bundle_set(BS_DEL, (PACKHEAD *)buf, msg.nbytes/sizeof(PACKHEAD));
		break;
	case DR_VIEWPOINT:	/* set target eye position */
		if (msg.nbytes != sizeof(VIEWPOINT))
			error(INTERNAL, "bad DR_VIEWPOINT from display process");
		myeye = *((VIEWPOINT *)buf);
		break;
	case DR_ATTEN:		/* block for priority request */
		if (msg.nbytes)
			error(INTERNAL, "bad DR_ATTEN from display process");
					/* send acknowledgement */
		disp_result(DS_ACKNOW, 0, NULL);
		return(disp_check(1));	/* block on following request */
	case DR_KILL:		/* kill computation process(es) */
		if (msg.nbytes)
			error(INTERNAL, "bad DR_KILL from display process");
		if (nprocs > 0)
			done_rtrace();
		else
			error(WARNING, "no rtrace process to kill");
		break;
	case DR_RESTART:	/* restart computation process(es) */
		if (msg.nbytes)
			error(INTERNAL, "bad DR_RESTART from display process");
		if (ncprocs > nprocs)
			new_rtrace();
		else if (nprocs > 0)
			error(WARNING, "rtrace already runnning");
		else
			error(WARNING, "holodeck not open for writing");
		break;
	case DR_CLOBBER:	/* clobber holodeck */
		if (msg.nbytes)
			error(INTERNAL, "bad DR_CLOBBER from display process");
		if ((force <= 0) | (ncprocs <= 0))
			error(WARNING, "request to clobber holodeck denied");
		else {
			error(WARNING, "clobbering holodeck contents");
			hdclobber(NULL);
		}
		break;
	case DR_SHUTDOWN:	/* shut down program */
		if (msg.nbytes)
			error(INTERNAL, "bad DR_SHUTDOWN from display process");
		return(0);		/* zero return signals shutdown */
	case DR_NOOP:		/* do nothing */
		break;
	default:
		error(INTERNAL, "unrecognized request from display process");
	}
	if (msg.nbytes)			/* clean up */
		free(buf);
	return(1);			/* normal return value */
fcntlerr:
	error(SYSTEM, "cannot change display blocking mode");
readerr:
	error(SYSTEM, "error reading from display process");
	return -1; /* pro forma return */
}
int main(int argc,char **argv)
{
  cimg_usage("Search Path");
  
  const char* file_i  = cimg_option("-i","input.bmp","Input image");
  const int blur      = cimg_option("-blur",2,"CImg blur value");
  //   float sigma         = cimg_option("-s", 1.0,"Sigma");
  
  CImg<unsigned char> image_in(file_i);
  CImg<unsigned char> image_gray = image_in.get_resize(-100,-100,-100,1); 
  CImg<unsigned char> image_rgb  = image_in.get_resize(-100,-100,-100,3); 
  
  CImg<unsigned char> blur_img = image_gray.get_blur(blur);
  //   CImg<unsigned char> blur_img(image);
  //   blur_img.fill(0);
  //   PGaussianFiltering2D(image, blur_img, sigma);
  CImg<unsigned char> gradient = gradient_cimg(blur_img, 2);
  CImg<unsigned char> gradient_norm = gradient.get_normalize(10,255);
  CImg<unsigned char> gradient_colr = gradient_cimg( image_rgb.get_blur(blur) , 2);
  
  int Dx = image_in.width();
  int Dy = image_in.height();
  CImg<unsigned char> canvas(image_rgb);
  CImg<unsigned char> gcanvas(gradient_colr);
  CImg<unsigned char> marker(Dx,Dy,1,1,0);
  CImg<unsigned char> marker_neg(Dx,Dy,1,1,0);
  CImg<unsigned char> gradmarker(Dx,Dy,1,1,0);
  
  CImg<signed int>    result(Dx,Dy,1,1,-1);
  CImg<unsigned char> result_ok0(Dx,Dy,1,1,0);
  CImg<unsigned char> result_ok1(Dx,Dy,1,3,0);
  CImg<unsigned char> result_ok2(Dx,Dy,1,1,0);
  
  CImgDisplay disp_canvas( cimg_fitscreen(canvas.width(),canvas.height(),canvas.depth()),  "Usage: L,R mouse, F1,F2,c" );
  CImgDisplay disp_result( cimg_fitscreen(canvas.width(),canvas.height(),canvas.depth()),  "Result" );
  CImgDisplay disp_gcanvas( cimg_fitscreen(canvas.width(),canvas.height(),canvas.depth()), "Gradient" );
  
  canvas.display(disp_canvas);
  gcanvas.display(disp_gcanvas);
  result_ok0.display(disp_result);
  
  CImg<unsigned char> marker_disp(disp_canvas.width(), disp_canvas.height(), 1, 3, 0);
  int circle_size1a = 3;
  int circle_size1b = (float) Dx / (float)disp_canvas.width() * circle_size1a + 0.5f;
  int circle_size2a = 5;
  int circle_size2b = (float) Dx / (float)disp_canvas.width() * circle_size2a + 0.5f;
  
  randomColorForLabels();
  
  int draw_type=1;
  bool clicked=false;
  volatile unsigned int btt=0;
  int mx=0, my=0, px=0, py=0, mouse_x=0, mouse_y=0, prev_x=0, prev_y=0;
  while (!disp_canvas.is_closed()) {
    disp_canvas.wait();
    
    if (disp_canvas.key()) {
      switch (disp_canvas.key()) {
        case cimg::keyF1:  draw_type=1; break;
        case cimg::keyF2:  draw_type=2; break;
        case cimg::keyC:
          marker.fill(0); marker_disp.fill(0);
          canvas.assign(image_rgb).display(disp_canvas);
          gcanvas.assign(gradient_colr).display(disp_gcanvas);
          break;
      }
      disp_canvas.set_key();
    }
    
    if (disp_canvas.mouse_x()>=0 && disp_canvas.mouse_y()>=0) {
      
      mx = disp_canvas.mouse_x(), 
      my = disp_canvas.mouse_y();
      mouse_x = mx*Dx/disp_canvas.width();
      mouse_y = my*Dy/disp_canvas.height();
      
      btt = disp_canvas.button();
      
      if (btt == 1) {
        if (draw_type==1) {
          marker.draw_line(mouse_x,mouse_y,prev_x,prev_y,white);
          marker_disp.draw_line(mx,my,px,py,red);
        }
        else {
          marker.draw_circle(mouse_x,mouse_y,circle_size1b,white);
          marker_disp.draw_circle(mx,my,circle_size1a,red);
        }
        draw_results(canvas,marker,red);  //canvas = canvas | marker;
        draw_results(gcanvas,marker,red); //gcanvas = gcanvas | marker;
        clicked=true;
      } else
        if (btt == 2) {
          marker.draw_circle(mouse_x,mouse_y,circle_size2b,black);
          marker_disp.draw_circle(mx,my,circle_size2a,white);
          canvas.assign(image_rgb); //.resize(disp_canvas);
          draw_results(canvas,marker,red);
          draw_results(canvas,result_ok2,yellow);
          gcanvas.assign(gradient_colr); //.resize(disp_gcanvas);
          draw_results(gcanvas,marker,red);
          draw_results(gcanvas,result_ok2,yellow);
          clicked=true;
        } else
          if (clicked) {
            cimg_forXY(marker,x,y) marker_neg(x,y) = 255-marker(x,y); // Invert marker images (lines should to be black)
            gradmarker = gradient_norm & marker_neg;                  // Add marker image to gradient image
            
            result.fill(-1);
            WatershedSegmentation(gradmarker, &result, 1, 0);         // Run marker-based watershed algorithm
            
            //result_ok0 = result.equalize(256,0,255);
            result_ok1 = colorizeLabelImage( result );
            result_ok2 = gradient_cimg(result,2);                     // Boundary detection
            cimg_forXY(result_ok2,x,y) result_ok2(x,y) = result_ok2(x,y)>0?255:0;
            canvas.assign(image_rgb); //.resize(disp_canvas);
            draw_results(canvas,marker,red);
            draw_results(canvas,result_ok2,yellow);
            gcanvas.assign(gradient_colr); //.resize(disp_gcanvas);
            draw_results(gcanvas,marker,red);
            draw_results(gcanvas,result_ok2,yellow);
            clicked=false;
          }
          
          prev_x = mouse_x; prev_y = mouse_y;
          px = mx; py = my;
          
          canvas.display(disp_canvas);
          gcanvas.display(disp_gcanvas);
          result_ok1.display(disp_result);
    }
  }

  return 0;
}