main() { int x; spopen(2400,'n',8,1); do { if(spcangetc()) printf("%c",spgetc()); if(kbhit()) { x=getch(); if(x==29) break; spputc(x); } } while(1); spclose(); return 0; }
/* Send the page to the printer. For now, just send the whole image. */ static int ljet5_print_page(gx_device_printer * pdev, FILE * prn_stream) { gs_memory_t *mem = pdev->memory; uint line_size = gdev_mem_bytes_per_scan_line((gx_device *) pdev); uint line_size_words = (line_size + W - 1) / W; uint out_size = line_size + (line_size / 127) + 1; word *line = (word *)gs_alloc_byte_array(mem, line_size_words, W, "ljet5(line)"); byte *out = gs_alloc_bytes(mem, out_size, "ljet5(out)"); int code = 0; int lnum; stream fs; stream *const s = &fs; byte buf[200]; /* arbitrary */ if (line == 0 || out == 0) { code = gs_note_error(gs_error_VMerror); goto done; } s_init(s, mem); swrite_file(s, prn_stream, buf, sizeof(buf)); /* Write the page header. */ { static const byte page_header[] = { pxtBeginPage, DUSP(0, 0), DA(pxaPoint), pxtSetCursor }; static const byte mono_header[] = { DUB(eGray), DA(pxaColorSpace), DUB(e8Bit), DA(pxaPaletteDepth), pxt_ubyte_array, pxt_ubyte, 2, 0xff, 0x00, DA(pxaPaletteData), pxtSetColorSpace }; static const byte gray_header[] = { DUB(eGray), DA(pxaColorSpace), pxtSetColorSpace }; px_write_page_header(s, (gx_device *)pdev); px_write_select_media(s, (gx_device *)pdev, NULL, NULL, 0, false, false); PX_PUT_LIT(s, page_header); if (pdev->color_info.depth == 1) PX_PUT_LIT(s, mono_header); else PX_PUT_LIT(s, gray_header); } /* Write the image header. */ { static const byte mono_image_header[] = { DA(pxaDestinationSize), DUB(eIndexedPixel), DA(pxaColorMapping), DUB(e1Bit), DA(pxaColorDepth), pxtBeginImage }; static const byte gray_image_header[] = { DA(pxaDestinationSize), DUB(eDirectPixel), DA(pxaColorMapping), DUB(e8Bit), DA(pxaColorDepth), pxtBeginImage }; px_put_us(s, pdev->width); px_put_a(s, pxaSourceWidth); px_put_us(s, pdev->height); px_put_a(s, pxaSourceHeight); px_put_usp(s, pdev->width, pdev->height); if (pdev->color_info.depth == 1) PX_PUT_LIT(s, mono_image_header); else PX_PUT_LIT(s, gray_image_header); } /* Write the image data, compressing each line. */ for (lnum = 0; lnum < pdev->height; ++lnum) { int ncompr; static const byte line_header[] = { DA(pxaStartLine), DUS(1), DA(pxaBlockHeight), DUB(eRLECompression), DA(pxaCompressMode), pxtReadImage }; code = gdev_prn_copy_scan_lines(pdev, lnum, (byte *) line, line_size); if (code < 0) goto fin; px_put_us(s, lnum); PX_PUT_LIT(s, line_header); ncompr = gdev_pcl_mode2compress_padded(line, line + line_size_words, out, true); px_put_data_length(s, ncompr); px_put_bytes(s, out, ncompr); } /* Finish up. */ fin: spputc(s, pxtEndImage); spputc(s, pxtEndPage); sflush(s); done: gs_free_object(mem, out, "ljet5(out)"); gs_free_object(mem, line, "ljet5(line)"); return code; }
main(int argc,char *argv[]) { long old; int sport= -1; /* Serial port number */ long baud= -1; /* Baud rate */ int vecno= -1; /* Vector number */ int port= -1; /* Printer port number */ unsigned short c; if(argc!=3) { oops: fprintf(stderr,"jterm COMx:[BAUD][,IRQ] LPy:\n"); exit(1); } sscanf(argv[1],"com%d:%ld,%d",&sport,&baud,&vecno); if(sport== -1) sscanf(argv[1],"COM%d:%ld,%d",&sport,&baud,&vecno); sscanf(argv[2],"lp%d:",&port); if(port== -1) sscanf(argv[2],"LP%d:",&port); --sport; if(port<0 || port>2 || sport<0 || sport>3) goto oops; /* Install break interrupt handler */ disable(); old= *(long far *)0x0000006C; *(long far *)0x0000006C=(long)brkint; enable(); if(vecno== -1) vecno=ints[sport]; else vecno+=8; if(baud!= -1) spbaud(ports[sport],baud); /* Open serial port */ spopen(ports[sport],vecno,1<<(vecno-8)); /* Open parallel port */ port=lports[port]; /* Initialize tty */ ttyinit(); loop: /* Print chracters */ if(psize) if(pcheck(port)) { pout(port,pbuf[pold++]); if(pold==pbufsiz) pold=0; psize--; } if(intflg) { intflg=0; spbreak(); } /* Check keyboard */ /* The trick here is to use the DOS interrupt 6 instead of the bios interrupt. * This eliminates untold numbers of problems with ^C and Ctrl-Break for * some microsoft's-programmers-only-know reason. */ _DL=0xFF; _AH=0x6; geninterrupt(0x21); __emit__(0x75,0x2,0x31,0xC0); /* Clear AX if no chars ready */ c=_AX; if(c) { c&=0xFF; if(!c) { _DL=0xFF; _AH=0x6; geninterrupt(0x21); c=_AX; c<<=8; } /* Check for exit key */ if((c&0xff)==']'-64) { spclose(); disable(); *(long far *)0x0000006C=old; enable(); bioscpos(0,height-1); exit(1); } if(c&0xff) spputc(c&0xff); /* ASCII code */ else switch(c) /* Xenix special keys */ { case 0x0300: spputc(0); break; case 0x4800: spputc('\033'); if(mapplication) spputc('O'), spputc('A'); else spputc('['), spputc('A'); break; case 0x5000: spputc('\033'); if(mapplication) spputc('O'), spputc('B'); else spputc('['), spputc('B'); break; case 0x4d00: spputc('\033'); if(mapplication) spputc('O'), spputc('C'); else spputc('['), spputc('C'); break; case 0x4b00: spputc('\033'); if(mapplication) spputc('O'), spputc('D'); else spputc('['), spputc('D'); break; case 0x4700: spputc('\033'), spputc('['), spputc('H'); break; case 0x4f00: spputc('\033'), spputc('['), spputc('F'); break; case 0x4900: spputc('\033'), spputc('['), spputc('I'); break; case 0x5100: spputc('\033'), spputc('['), spputc('G'); break; case 0x5200: spputc('\033'), spputc('['), spputc('L'); break; case 0x5300: spputc(127); break; case 0x0f00: spputc('\033'), spputc('['), spputc('Z'); break; case 0x3b00: spputc('\033'), spputc('['), spputc('M'); break; case 0x3c00: spputc('\033'), spputc('['), spputc('N'); break; case 0x3d00: spputc('\033'), spputc('['), spputc('O'); break; case 0x3e00: spputc('\033'), spputc('['), spputc('P'); break; case 0x3f00: spputc('\033'), spputc('['), spputc('Q'); break; case 0x4000: spputc('\033'), spputc('['), spputc('R'); break; case 0x4100: spputc('\033'), spputc('['), spputc('S'); break; case 0x4200: spputc('\033'), spputc('['), spputc('T'); break; case 0x4300: spputc('\033'), spputc('['), spputc('U'); break; case 0x4400: spputc('\033'), spputc('['), spputc('V'); break; case 0x5400: spputc('\033'), spputc('['), spputc('Y'); break; case 0x5500: spputc('\033'), spputc('['), spputc('Z'); break; case 0x5600: spputc('\033'), spputc('['), spputc('a'); break; case 0x5700: spputc('\033'), spputc('['), spputc('b'); break; case 0x5800: spputc('\033'), spputc('['), spputc('c'); break; case 0x5900: spputc('\033'), spputc('['), spputc('d'); break; case 0x5a00: spputc('\033'), spputc('['), spputc('e'); break; case 0x5b00: spputc('\033'), spputc('['), spputc('f'); break; case 0x5c00: spputc('\033'), spputc('['), spputc('g'); break; case 0x5d00: spputc('\033'), spputc('['), spputc('h'); break; case 0x5e00: spputc('\033'), spputc('['), spputc('k'); break; case 0x5f00: spputc('\033'), spputc('['), spputc('l'); break; case 0x6000: spputc('\033'), spputc('['), spputc('m'); break; case 0x6100: spputc('\033'), spputc('['), spputc('n'); break; case 0x6200: spputc('\033'), spputc('['), spputc('o'); break; case 0x6300: spputc('\033'), spputc('['), spputc('p'); break; case 0x6400: spputc('\033'), spputc('['), spputc('q'); break; case 0x6500: spputc('\033'), spputc('['), spputc('r'); break; case 0x6600: spputc('\033'), spputc('['), spputc('s'); break; case 0x6700: spputc('\033'), spputc('['), spputc('t'); break; case 0x6800: spputc('\033'), spputc('['), spputc('w'); break; case 0x6900: spputc('\033'), spputc('['), spputc('x'); break; case 0x6a00: spputc('\033'), spputc('['), spputc('y'); break; case 0x6b00: spputc('\033'), spputc('['), spputc('z'); break; case 0x6c00: spputc('\033'), spputc('['), spputc('@'); break; case 0x6d00: spputc('\033'), spputc('['), spputc('['); break; case 0x6e00: spputc('\033'), spputc('['), spputc('\\'); break; case 0x6f00: spputc('\033'), spputc('['), spputc(']'); break; case 0x7000: spputc('\033'), spputc('['), spputc('^'); break; case 0x7100: spputc('\033'), spputc('['), spputc('_'); break; } } /* Check serial port */ if(spcangetc()) ttyout(spgetc()); goto loop; }