亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? c2070.c

?? Lexmark 2070 Color Jetprinter 打印機(jī)驅(qū)動(dòng)例子
?? C
字號(hào):
/* * Project:    CMYK Color Driver for the Lexmark 2070 Color Jetprinter *             in 300dpi mode. * * Author:     Christian Kornblum * * Version:    0.99, 06.10.1999 * * License:    GPL (GNU Public License) */#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>/* various constants */#define MAX_LINES 600#define PAGE_HEIGHT 3520#define PAGE_WIDTH 2420#define GS_PAGE_WIDTH 2480#define GS_PAGE_HEIGHT 3508#define CARTRIDGE_PENS 104 #define BLACK_PENS 64#define COLOR_PENS 32#define COLOR_GAP 13#define BYTES_PER_COLUMN 12#define BYTES_PER_HEADER 26#define STD_PAGE_MOVE 2*COLOR_PENS#define LEFT_MARGIN 10#define UPPER_MARGIN 100#define COLOR_BUFFERS 6/* the ghostscript color identifiers */#define BLACK   0x10#define CYAN    0x80#define MAGENTA 0x40#define YELLOW  0x20/* the structure for the pixmaps */struct tSweepBuffer {  int bytepos;  int bitpos;  int bufpos;        /* this is used for the colors! */  int unprinted;     /* does this buffer contain data? */  char *buffer;};/* * This writes a number of zeros to a string. */void ClearBuffer(char *data, int bytes){  register i;  for(i = 0; i < bytes; data[i++] = 0);} /* ClearBuffer *//*  * Initialize a sweep buffer */SweepBuffer_Init (struct tSweepBuffer *SweepBuffer, int bytesize){  SweepBuffer->bytepos = 0;  SweepBuffer->bitpos = 0;  SweepBuffer->bufpos = 0;  SweepBuffer->unprinted = 0;  SweepBuffer->buffer = (char *) malloc(bytesize);  ClearBuffer(SweepBuffer->buffer, bytesize);} /* SweepBuffer_Init *//* * This puts an unterminated amount of any chars to "out". The first  * byte of the "string" has to give the correct number of the following bytes. */void fPutLString (FILE *out, char *data) {  int i;  for (i = 1; i <= data[0]; putc(data[i++], out));} /* fPutLString *//* * This moves the paper by a defined number of lines (600lpi!). */void LexMove(FILE *out, long int pixel){  char command[] = {5,0x1b,0x2a,0x03,0x00,0x00};  command[5] = (char) pixel;  command[4] = (char) (pixel >> 8);  fPutLString(out, command);} /* LexMove *//* * This initializes the printer and sets the upper margin. */void LexInit(FILE *out){   char command[] = {12, 0x1B,0x2A,0x80,0x1B,0x2A,0x07,		         0x73,0x30,0x1B,0x2A,0x07,0x63};   fPutLString(out, command);   LexMove(out, UPPER_MARGIN);} /* LexInit *//* * This tells the printer to throw out his current page. */void LexEOP(FILE *out){   char command[] = {4, 0x1B,0x2A,0x07,0x65};   fPutLString(out, command);}/* * This confusing bit of code removes empty columns from the printbuffer. * It returns the byte of the buffer where the important data starts and * changes all referencered arguments accordingly. */int ReduceBytes(char *buffer, int bytespercolumn, 		int *leftmargin, int *breite, int *bytesize) {  register int redleft = 0;   register int redright = 0;   int bstart = 0;  while ((buffer[redleft] == 0) && (redleft < *bytesize)) redleft++;  while ((buffer[*bytesize - 1 - redright] == 0) && 	 (redright < *bytesize)) redright++;  *breite -= redleft / bytespercolumn + redright / bytespercolumn;  *leftmargin += redleft / bytespercolumn;  bstart = redleft - (redleft % bytespercolumn);  if (bstart < 0) bstart = 0;    return bstart;} /* ReduceBytes *//* * This sends a complete sweep to the printer. Black or color, no difference. */void PrintSweep(char *buffer, char *header, int bytesize, int width, FILE *out){  int bstart;  int leftmargin = LEFT_MARGIN;  register i;  /* Remove zeros and set a margin instead. Faster Printing. */  bstart = ReduceBytes(buffer, BYTES_PER_COLUMN, &leftmargin,		       &width, &bytesize);    /* Calculate the number of bytes for the checksum */  bytesize = BYTES_PER_HEADER + BYTES_PER_COLUMN * width;   header[6] = (char) bytesize;  header[5] = (char) (bytesize >> 8);  header[4] = (char) (bytesize >> 16);  /* The number of columns */  header[14] = (char) width;  header[13] = (char) (width >> 8);  /* The left margin */  header[16] = (char) leftmargin;  header[15] = (char) (leftmargin >> 8);        if (width > 0) { /* do not print empty sweeps */    for(i=0; i<BYTES_PER_HEADER; i++) putc(header[i], out);    for(i=0; i<(bytesize);i++) putc(buffer[i+bstart], out);  }} /* PrintSweep */	/* * This finds out if there is anything but zeros in a string */int LineSum(char line[], int length){  register i = 0;  while (i < length)    if(line[i++] != 0) return 1;  return 0;} /* LineSum *//* * This is the main printing routine. Wicked and insane. Nonetheless working. */void LexPrint(FILE *in, FILE *out) {  char line[GS_PAGE_WIDTH / 2];  int done_page, cur_height = 0, page_height = 0, numpages = 0;  char lex_blkhd[BYTES_PER_HEADER] = {0x1b,0x2a,0x04,0x00,0x00,0xFF,0xFF,				      0x00,0x01,0x02,0x01,0x0c,0x31,0xFF,0xFF,				      0x00,0x30,0x01,0x97,0x00,0x00,0x00,0x00,				      0x00,0x32,0x33};  char lex_colhd[BYTES_PER_HEADER] = {0x1b,0x2a,0x04,0x00,0x00,0xFF,0xFF,				      0x00,0x01,0x01,0x00,0x0c,0x31,0xFF,0xFF,				      0x00,0x30,0x01,0x97,0x00,0x00,0x00,0x00,				      0x00,0x32,0x33};  long bytesize;   register int i=0;  struct tSweepBuffer blkbuffer, colbuffer[COLOR_BUFFERS];   int CurrentColBuffer = 0;  int width;  int empty_lines;  char nibble;  int cyancounter = 0;  /* The printer may not be able to print every GhostScript pixel */  if (GS_PAGE_WIDTH <= PAGE_WIDTH) width = GS_PAGE_WIDTH;   else width = PAGE_WIDTH;  /* Calculating the size for the buffers */  bytesize = BYTES_PER_COLUMN * width;   /* As long as we get input... */  while((line[0] = getc(in)) != EOF)  {    /* Get memory and clear it. */    SweepBuffer_Init(&blkbuffer, bytesize);    for (i=0; i<COLOR_BUFFERS; i++) {      SweepBuffer_Init(&colbuffer[i], bytesize);      colbuffer[i].bufpos = i;    }    /* Initialize the printer, load a page  */    LexInit(out);    /* Reset all variables */    done_page   = 0;    page_height = 0;    cur_height  = 0;    empty_lines = 0;    cyancounter = 0;    /* ... we do the pages. */    while(!done_page)    {       /* Read a CMYK line (GS -sDEVICE=bitcmyk) from the input */      if (page_height == 0) {	for (i = 1; i < (GS_PAGE_WIDTH / 2); line[i++] = getc(in));      } else {	for (i = 0; i < (GS_PAGE_WIDTH / 2); line[i++] = getc(in));      }            /* optimize for empty lines, if buffers are empty */      if ((cur_height == 0) 	  && !LineSum(line, GS_PAGE_WIDTH / 2)	  && (page_height < PAGE_HEIGHT)	  && (page_height < GS_PAGE_HEIGHT)	  && !(blkbuffer.unprinted | colbuffer[0].unprinted 	       | colbuffer[1].unprinted | colbuffer[3].unprinted))	{	  empty_lines++;	}      else /* This line does not seem to be empty or there is still data */	{	  if (empty_lines) {	    LexMove(out, empty_lines * 2);	    empty_lines = 0;	    cyancounter = 0;	  }	  /* count lines and set values */	  /* black is somewhat misaligned in the printer. not my fault.*/	  blkbuffer.bitpos  = 7 - ((cyancounter % BLACK_PENS) + 4) % 8;	  blkbuffer.bytepos = 1 + ((cyancounter % BLACK_PENS) + 4) / 8;	  	  /* yellow */	  colbuffer[0].bitpos  = 7 - (cur_height % 8);	  colbuffer[0].bytepos = 8 + (cur_height / 8) % 4;	  colbuffer[0].bufpos  = cur_height / COLOR_PENS;	  	  /* magenta */	  colbuffer[1].bitpos  	    = 7 - ((cur_height + COLOR_GAP + COLOR_PENS) % 8);	  colbuffer[1].bytepos 	    = 4 + ((cur_height + COLOR_GAP + COLOR_PENS) / 8) % 4;	  colbuffer[1].bufpos  	    = ((cur_height + COLOR_GAP + COLOR_PENS) / COLOR_PENS) % 3;	  /* cyan has 6 buffers, so that it is not mapped to buffers	     which have not been printed by yellow yet. The Buffers	     > 2 are mapped to the right corresponding buffer 	     after it has been sent to the printer. */	  colbuffer[2].bitpos  	    = 7 - ((cur_height + 2 * (COLOR_GAP + COLOR_PENS)) % 8);	  colbuffer[2].bytepos 	    = ((cur_height + 2 * (COLOR_GAP + COLOR_PENS)) / 8) % 4;	  colbuffer[2].bufpos  	    = ((cur_height + 2 * (COLOR_GAP + COLOR_PENS)) / COLOR_PENS) % 3;	  if (colbuffer[2].bufpos == colbuffer[0].bufpos)	    colbuffer[2].bufpos += 3;	  /* This extracts the nibbles and transforms them to the bits	     in the output stream. */	  for(i=0; (i <= width); i++)	    {                              	      nibble = (line[i/2] << (4 * (i % 2))) & 0xF0;	      if (nibble & BLACK) {		blkbuffer.buffer[(i * BYTES_PER_COLUMN) + blkbuffer.bytepos] 		  |= 0x01 << blkbuffer.bitpos; 		blkbuffer.unprinted = 1;	      }	      if (nibble & CYAN) {		colbuffer[colbuffer[2].bufpos].buffer		  [(i * BYTES_PER_COLUMN) + colbuffer[2].bytepos] 		  |= 0x01 << colbuffer[2].bitpos; 		colbuffer[colbuffer[2].bufpos].unprinted = 1;	      }	      if (nibble & MAGENTA) {		colbuffer[colbuffer[1].bufpos].buffer		  [(i * BYTES_PER_COLUMN) + colbuffer[1].bytepos] 		  |= 0x01 << colbuffer[1].bitpos; 		colbuffer[colbuffer[1].bufpos].unprinted = 1;	      }	      if (nibble & YELLOW) {		colbuffer[colbuffer[0].bufpos].buffer		  [(i * BYTES_PER_COLUMN) + colbuffer[0].bytepos] 		  |= 0x01 << colbuffer[0].bitpos; 		colbuffer[colbuffer[1].bufpos].unprinted = 1;	      }	    }	  cur_height++;	  cyancounter++;	  /* Buffer is full or page is over. Print it. Color first...*/	  if (!(cur_height % COLOR_PENS) || (page_height >= GS_PAGE_HEIGHT))	    {	      PrintSweep(colbuffer[CurrentColBuffer].buffer, 			 lex_colhd, bytesize, width, out);	      ClearBuffer(colbuffer[CurrentColBuffer].buffer, bytesize);	      LexMove(out, 2*COLOR_PENS);	      /* now handle the cyan stuff */	      for(i = 0; i < bytesize; i++) 		colbuffer[CurrentColBuffer].buffer[i] 		  |= colbuffer[CurrentColBuffer + 3].buffer[i];	      ClearBuffer(colbuffer[CurrentColBuffer + 3].buffer, bytesize);	      colbuffer[CurrentColBuffer].unprinted = 		colbuffer[CurrentColBuffer + 3].unprinted;	      colbuffer[CurrentColBuffer + 3].unprinted = 0;	      /* switch to the next buffer */	      CurrentColBuffer = ++CurrentColBuffer % 3;	    }	  /* ...then finally black */	  if (!(cyancounter % BLACK_PENS) || (page_height >= GS_PAGE_HEIGHT))	    {	      PrintSweep(blkbuffer.buffer, lex_blkhd, bytesize, width, out);	      ClearBuffer(blkbuffer.buffer, bytesize);	      blkbuffer.unprinted = 0;	    }	  if (cur_height == 3 * COLOR_PENS) cur_height = 0; 	  if (cyancounter >= 128) cyancounter = 0;	}            /* this page has found an end */       if ((page_height++ >= PAGE_HEIGHT)||	  (page_height >= GS_PAGE_HEIGHT)) done_page = 1;     }    /* hand out the page */    LexEOP(out);    /* eat any remaining whitespace so process will not hang */    if (PAGE_HEIGHT < GS_PAGE_HEIGHT)       for(i=0; 	  i < ((GS_PAGE_HEIGHT - PAGE_HEIGHT) * GS_PAGE_WIDTH / 2);	  line[i++] = getc(in));    /* count the pages and free memory */    numpages++;    free(blkbuffer.buffer);    for (i=0; i < COLOR_BUFFERS; free(colbuffer[i++].buffer));  }  if (numpages == 0) fprintf(stderr, "c2070: No pages printed!");} /* LexPrint *//* * The main program. Sets input and output streams. */int main(int argc, char *argv[]) {  FILE *InputFile;  FILE *OutPutFile;    InputFile  = stdin;  OutPutFile = stdout;  LexPrint(InputFile, OutPutFile);  fclose(OutPutFile);  fclose(InputFile);}    

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看30秒视频久久| 亚洲欧美一区二区久久| 91精品一区二区三区久久久久久| 国产白丝精品91爽爽久久| 激情综合色综合久久| 日韩av在线播放中文字幕| 日韩va欧美va亚洲va久久| 丝袜诱惑制服诱惑色一区在线观看| 依依成人精品视频| 亚洲成av人影院在线观看网| 亚洲va韩国va欧美va精品| 丝袜美腿亚洲色图| 日本vs亚洲vs韩国一区三区 | 精品久久久久久久久久久久久久久久久| 91麻豆精品国产91久久久使用方法 | 亚洲伊人色欲综合网| 麻豆精品一区二区三区| 国产九色sp调教91| 欧美精品久久99久久在免费线| 久久综合九色欧美综合狠狠| 国产精品美女久久久久aⅴ| 亚洲午夜电影在线观看| 国产乱子伦一区二区三区国色天香| 成人黄色av网站在线| 欧美男女性生活在线直播观看| 精品久久久久久久人人人人传媒| 日本一区二区电影| 免费亚洲电影在线| 高清日韩电视剧大全免费| 欧美日韩在线精品一区二区三区激情| 欧美剧在线免费观看网站 | 国产女主播在线一区二区| 麻豆免费看一区二区三区| 91美女视频网站| 一区二区三区四区在线免费观看| 日韩av电影天堂| 91麻豆.com| 亚洲综合视频在线| 91黄色免费看| 亚洲图片有声小说| 欧美网站大全在线观看| 亚洲一区二区三区在线| 国产99久久久久久免费看农村| 欧美群妇大交群中文字幕| 亚洲最大成人网4388xx| 日本道免费精品一区二区三区| 国产欧美日韩在线视频| 日本成人中文字幕在线视频| 99精品欧美一区| 91视频www| 欧美群妇大交群中文字幕| 欧美电视剧免费全集观看| 国产日韩欧美麻豆| 国产精品污网站| 亚洲品质自拍视频网站| 午夜久久久影院| 麻豆成人av在线| av电影在线不卡| 欧美理论电影在线| 日韩三级中文字幕| 亚洲国产经典视频| 亚洲精品免费电影| 丝瓜av网站精品一区二区| 久久99精品久久久久久| 懂色中文一区二区在线播放| 成人欧美一区二区三区白人| 91免费国产在线观看| 亚洲综合一区二区精品导航| 国产精品久久久久桃色tv| 欧美视频你懂的| 99久久精品国产导航| 99re亚洲国产精品| 奇米一区二区三区| 亚洲国产经典视频| 在线欧美一区二区| 亚洲国产精品一区二区尤物区| 在线视频一区二区免费| 蜜桃av一区二区在线观看| 日韩一级片网站| 国产精品亚洲第一区在线暖暖韩国| 久久久三级国产网站| 国产精品888| 日日夜夜精品视频免费| 日韩女优制服丝袜电影| 福利一区在线观看| 日韩在线卡一卡二| 亚洲国产成人自拍| 欧美另类videos死尸| 久久99精品网久久| 亚洲国产乱码最新视频| 日韩欧美国产系列| 欧美日韩一级片在线观看| 性做久久久久久久久| 久久久久一区二区三区四区| 色国产综合视频| 国产成人免费9x9x人网站视频| 一区二区三区日韩精品视频| 精品国产一区二区亚洲人成毛片| 国产综合色精品一区二区三区| 国产三级欧美三级| 日韩美女一区二区三区| 91免费看`日韩一区二区| 亚洲国产一区二区在线播放| 国产午夜亚洲精品不卡| 欧美性受极品xxxx喷水| 成人福利视频网站| 经典三级一区二区| 裸体健美xxxx欧美裸体表演| 亚洲激情图片一区| 最近日韩中文字幕| 日韩欧美国产小视频| 91麻豆精品91久久久久久清纯| 午夜精品免费在线| 午夜精品国产更新| 亚洲精品日韩专区silk | 一区二区三区中文免费| 国产精一品亚洲二区在线视频| 日韩三级中文字幕| 激情久久五月天| 欧美军同video69gay| 亚洲一区二区视频在线观看| 欧美日韩免费在线视频| 日韩黄色免费电影| 日韩精品自拍偷拍| 国产激情一区二区三区| 国产精品久久久久精k8| 91在线免费播放| 亚洲二区在线观看| 日韩一区二区三区电影在线观看 | 精品国产乱码久久久久久浪潮| 日韩电影免费一区| 久久久国产精品不卡| 国产一区在线看| 国模娜娜一区二区三区| 国产一区二区0| a4yy欧美一区二区三区| 99re66热这里只有精品3直播| 国产传媒一区在线| 91视频免费看| 久久综合九色综合久久久精品综合 | 欧美精品日韩精品| 欧美日韩国产高清一区二区 | 精品裸体舞一区二区三区| 337p亚洲精品色噜噜| 日韩视频免费直播| 国产日本一区二区| 亚洲乱码国产乱码精品精的特点 | 国产日韩影视精品| 亚洲欧洲日韩av| 一区二区三区电影在线播| 亚洲另类在线制服丝袜| 亚洲一区二区三区小说| 蜜臀va亚洲va欧美va天堂| 视频一区免费在线观看| 国产剧情在线观看一区二区| 成人av先锋影音| 一本大道久久精品懂色aⅴ| 色综合夜色一区| 欧美大片在线观看| 夜夜嗨av一区二区三区四季av| 亚洲精品写真福利| 国产电影精品久久禁18| 不卡的av电影| 欧美精品久久一区二区三区| 精品国产凹凸成av人网站| 一区二区三区在线视频免费观看| 成人一区二区三区在线观看| 日韩影院免费视频| 亚洲情趣在线观看| 国产亚洲一本大道中文在线| 97精品超碰一区二区三区| 久久se精品一区二区| 亚洲第一在线综合网站| 中文字幕一区二区三区视频| 精品国产乱码久久| 欧美一区二区私人影院日本| 在线亚洲+欧美+日本专区| 成人高清视频免费观看| 激情都市一区二区| 麻豆一区二区在线| 麻豆一区二区三区| 日本视频中文字幕一区二区三区| 亚洲日本成人在线观看| 国产精品美女一区二区三区| 久久丝袜美腿综合| 久久精品这里都是精品| 精品久久国产97色综合| 蜜臀av亚洲一区中文字幕| 色综合天天综合在线视频| 国产精品无遮挡| 国产a视频精品免费观看| 日韩精品一区二区在线| 亚洲成a天堂v人片| 日韩欧美一区二区在线视频| 亚洲电影第三页| 欧美日本一区二区三区四区| ...av二区三区久久精品| 国产在线播放一区| 久久久影视传媒| 国产不卡视频在线播放|