int main(int argc, char *argv[]) { int use_colour = isatty(1); int opt; while((opt = getopt(argc, argv, "c")) != -1) { switch(opt) { case 'c': use_colour = 1; break; } } const char *file = argv[optind++]; int fd; if(!file || streq(file, "-")) fd = 0; // stdin else { fd = open(file, O_RDONLY); if(fd == -1) { fprintf(stderr, "Cannot open %s - %s\n", file, strerror(errno)); exit(1); } } if(use_colour) { special_begin = "\x1b[7m{"; special_end = "}\x1b[m"; } /* Size matters not for the parser */ VTerm *vt = vterm_new(25, 80); vterm_set_utf8(vt, 1); vterm_parser_set_callbacks(vt, &parser_cbs, NULL); int len; char buffer[1024]; while((len = read(fd, buffer, sizeof(buffer))) > 0) { vterm_input_write(vt, buffer, len); } printf("\n"); close(fd); vterm_free(vt); return 0; }
GLTerminal* init_gl_term() { int rc=0; GLTerminal* term = (GLTerminal*)malloc(sizeof(GLTerminal)); term->fd_master = posix_openpt(O_RDWR); if(term->fd_master < 0) { fprintf(stderr,"Error %d in posix_openpt()\n",errno); free(term); return NULL; } rc = grantpt(term->fd_master); if(rc != 0) { fprintf(stderr,"Error %d on grantpt()\n",errno); free(term); return NULL; } rc = unlockpt(term->fd_master); if(rc != 0) { fprintf(stderr,"Error %d on unlockpt()\n",errno); free(term); return NULL; } term->fd_slave = open(ptsname(term->fd_master), O_RDWR); term->vt = vterm_new(25,80); vterm_set_utf8(term->vt, false); term->vts = vterm_obtain_screen(term->vt); vterm_screen_reset(term->vts,1); int i=0; for(i=0; i<80*25; i++) vterm_input_write(term->vt," ",1); term->render_target_fb=0; // setup font glGenTextures(1,&(term->font_texture)); glBindTexture(GL_TEXTURE_2D, term->font_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D,0, GL_RGB, Console_FontData.width, Console_FontData.height, 0, GL_RGB, GL_UNSIGNED_BYTE, Console_FontData.pixel_data); // configure render target glGenFramebuffers(1,&(term->render_target_fb)); glBindFramebuffer(GL_FRAMEBUFFER,term->render_target_fb); GLuint tex_id; glGenTextures(1,&tex_id); term->render_target = tex_id; glBindTexture(GL_TEXTURE_2D,tex_id); glTexImage2D(GL_TEXTURE_2D, 0,3, TERM_SIZE, TERM_SIZE, 0,GL_RGB, GL_UNSIGNED_BYTE,NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, term->render_target,0); GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0}; glDrawBuffers(1,DrawBuffers); glBindFramebuffer(GL_FRAMEBUFFER,0); return term; }