int main(int argc, char** argv) { Image* img = I_new(640, 480); I_fill(img, C_new(0, 0, 0)); I_changeColor(img, C_new(255, 255, 255)); // Try horizontal lines, from left to right and right to left draw_line_bresenham(img, 100, 100, 200, 100); draw_line_bresenham(img, 200, 200, 100, 200); for(int i = 100 ; i <= 200 ; ++i) { assert(img->_buffer[i][100]._blue == 255); assert(img->_buffer[i][100]._red == 255); assert(img->_buffer[i][100]._green == 255); assert(img->_buffer[i][200]._blue == 255); assert(img->_buffer[i][200]._red == 255); assert(img->_buffer[i][200]._green == 255); } // Try vertical lines, from top to bottom and bottom to top draw_line_bresenham(img, 100, 100, 100, 200); draw_line_bresenham(img, 200, 200, 200, 100); for(int i = 100 ; i <= 200 ; ++i) { assert(img->_buffer[100][i]._blue == 255); assert(img->_buffer[100][i]._red == 255); assert(img->_buffer[100][i]._green == 255); assert(img->_buffer[200][i]._blue == 255); assert(img->_buffer[200][i]._red == 255); assert(img->_buffer[200][i]._green == 255); } }
int main(int argc, char **argv) { red = C_new(1.0, 0.0, 0.0); green = C_new(0.0, 1.0, 0.0); black = C_new(0.0, 0.0, 0.0); white = C_new(1.0, 1.0, 1.0); if((argc!=3)&&(argc!=2)) { fprintf(stderr,"\n\nUsage \t: %s <width> <height>\nou",argv[0]); fprintf(stderr,"\t: %s <ppmfilename> \n\n",argv[0]); exit(1); } else { if(argc==2) { img = I_read(argv[1]); largeur = img->_width; hauteur = img->_height; } else { largeur = atoi(argv[1]); hauteur = atoi(argv[2]); img = I_new(largeur,hauteur); //Color rouge = C_new(100,0,0); //Color blanc = C_new(1.0, 1.0, 1.0); //I_checker(img,rouge,blanc,50); } int windowPosX = 100, windowPosY = 100; glutInitWindowSize(largeur,hauteur); glutInitWindowPosition(windowPosX,windowPosY); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE ); glutInit(&argc, argv); glutCreateWindow(argv[0]); glViewport(0, 0, largeur, hauteur); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glOrtho(0,largeur,0,hauteur,-1,1); glutDisplayFunc(display_CB); glutKeyboardFunc(keyboard_CB); glutSpecialFunc(special_CB); glutMouseFunc(mouse_CB); // glutMotionFunc(mouse_move_CB); // glutPassiveMotionFunc(passive_mouse_move_CB); glutMainLoop(); return 0; } }
c_fortune_db_t *C_fortune_opendb(const char *basename) { c_fortune_db_t *db; struct stat stbuf; char *buf; size_t len; len = strlen(basename) + strlen(C_FORTUNE_INDEX_EXT) + 2; buf = C_newstr(len); snprintf(buf, len, "%s.%s", basename, C_FORTUNE_INDEX_EXT); if(access(basename, (F_OK | R_OK)) || access(buf, (F_OK | R_OK))) { C_free(buf); return(NULL); } db = C_new(c_fortune_db_t); db->data = fopen(basename, "r"); db->index = fopen(buf, "r"); stat(basename, &stbuf); db->filelen = stbuf.st_size; stat(buf, &stbuf); db->count = (stbuf.st_size / sizeof(long)); C_free(buf); return(db); }
void I_draw(Image *img) { glBegin(GL_POINTS); int xwin, ywin, ximg, yimg; for(xwin=0;xwin<img->_width;xwin++) for(ywin=0;ywin<img->_height;ywin++) { _windowToImage(img, xwin, ywin, &ximg, &yimg); Color c; if((ximg>=0)&&(ximg<img->_width)&& (yimg>=0)&&(yimg<img->_height)) c = img->_buffer[ximg][yimg]; else c = C_new(0,0,0); glColor3f(c._red,c._green,c._blue); glVertex2i(xwin,ywin); } glEnd(); }
Image* I_new(int width, int height) { Image *img_new = (Image*)malloc(sizeof(Image)); img_new->_width = width; img_new->_height = height; img_new->_xzoom = 0; img_new->_yzoom = 0; img_new->_zoom = 1.0; img_new->_xoffset=0; img_new->_yoffset=0; img_new->_current_color = C_new(255,255,255); img_new->_buffer = (Color**)calloc(width,sizeof(Color*)); int x; for(x=0;x<width;x++) img_new->_buffer[x] = (Color*)calloc(height,sizeof(Color)); return img_new; }
uint_t C_random(uint_t range) { uint_t r; #ifdef THREADED_LIBRARY uint_t *seed; pthread_once(&__C_random_once, __C_random_init_once); seed = (uint_t *)pthread_getspecific(__C_random_key); if(! seed) { seed = C_new(uint_t); *seed = (time(NULL) + (long)pthread_self()); pthread_setspecific(__C_random_key, (void *)seed); } r = (uint_t)rand_r(seed); #else r = (uint_t)rand(); #endif /* THREADED_LIBRARY */ return((int)((float)range * r / RAND_MAX)); }
Image* I_read(char *imagefilename) { Image *img; char command[100]; if(_isPpm(imagefilename)) sprintf(command,"cp %s input.ppm",imagefilename); else sprintf(command,"convert %s input.ppm",imagefilename); int stat = system(command); if(stat!=0) { fprintf(stderr,"Convert : %s -> input.ppm impossible conversion.\n", imagefilename); exit(1); } else { Ppm ppm = PPM_nouv("input.ppm", PPM_LECTURE); system("rm input.ppm"); fprintf(stderr,"%d x %d\n",PPM_largeur(ppm),PPM_hauteur(ppm)); if(ppm!=NULL) { img = I_new(PPM_largeur(ppm),PPM_hauteur(ppm)); int nb_bits=ppm->_nb_bits; int valmax = ppm->_valmax; int nb_pixels = img->_width*img->_height; if(nb_bits <= 8) { unsigned char *donnees = (unsigned char*)calloc(3*nb_pixels,sizeof(unsigned char)); PPM_lectureDonneesChar(ppm, donnees); int x,y; for(y=0;y<img->_height;y++) for(x=0;x<img->_width;x++) { int indice = (img->_height-y)*img->_width + x; Color c = C_new((1.0*donnees[3*indice ])/valmax, (1.0*donnees[3*indice+1])/valmax, (1.0*donnees[3*indice+2])/valmax); _plot(img,x,y,c); } } else { unsigned short *donnees = (unsigned short*)calloc(3*nb_pixels,sizeof(unsigned short)); PPM_lectureDonneesShort(ppm, donnees); int x,y; for(y=0;y<img->_height;y++) for(x=0;x<img->_width;x++) { int indice = (img->_height-y)*img->_width + x; Color c = C_new((1.0*donnees[3*indice ])/valmax, (1.0*donnees[3*indice+1])/valmax, (1.0*donnees[3*indice+2])/valmax); img->_buffer[x][y] = c; } } PPM_fermeture(ppm); return(img); } else return(NULL); } }
c_pty_t *C_pty_create(void) { int mfd, sfd; c_pty_t *pty; char pts_name[11] = "", *pts = NULL; #if defined HAVE_STROPTS_H c_bool_t ok = FALSE; /* open master */ if((mfd = open(C_TERM_MASTER, O_RDWR)) >= 0) if(grantpt(mfd) >= 0) if(unlockpt(mfd) >= 0) ok = TRUE; if(! ok) { C_error_set_errno(C_EGETPTY); return(NULL); } /* open slave */ pts = (char *)ptsname(mfd); if(pts == NULL) { C_error_set_errno(C_EGETPTY); return(NULL); } if((sfd = open(pts, O_RDWR)) < 0) { C_error_set_errno(C_EOPEN); return(NULL); } ok = FALSE; if(ioctl(sfd, I_PUSH, "ptem") >= 0) if(ioctl(sfd, I_PUSH, "ldterm") >= 0) ok = TRUE; if(! ok) { C_error_set_errno(C_EIOCTL); return(NULL); } #elif defined HAVE_OPENPTY if(openpty(&mfd, &sfd, pts_name, NULL, NULL) < 0) { C_error_set_errno(C_EGETPTY); return(NULL); } pts = pts_name; #else /* fall back on the old crude BSD way */ if((mfd = __C_pty_open_master_BSD(pts_name)) < 0) { C_error_set_errno(C_EOPEN); return(NULL); } if((sfd = __C_pty_open_slave_BSD(mfd, pts_name)) < 0) { C_error_set_errno(C_EOPEN); return(NULL); } pts = pts_name; #endif pty = C_new(c_pty_t); pty->master_fd = mfd; pty->slave_fd = sfd; strcpy(pty->pts_name, pts_name); return(pty); }