::: °­ÁÂ/¼Ò½º/¹®¼­ :::

°­ÁÂ/¼Ò½º/¹®¼­ ¼º°Ý¿¡ ¸ÂÁö ¾Ê´Â ±¤°í,ºñ¹æ,Áú¹®ÀÇ ±ÛÀº Áï½Ã »èÁ¦Çϸç
³»¿ëÀ» º¹»çÇÏ¿© »ç¿ëÇÒ °æ¿ì ¹Ýµå½Ã À̰÷(http://www.howto.pe.kr)À» Ãâó·Î ¸í½ÃÇÏ¿© ÁÖ¼¼¿ä


Category

  ±è¿µ´ë(2003-03-18 22:35:57, Hit : 6515, Vote : 1523
 [¼Ò½º] CompuServe RLE Encoder

// Á¦  ¸ñ: CompuServe RLE Encoder
// ÀÛ¼ºÀÚ: ±è¿µ´ë ( http://www.howto.pe.kr )

#include <stdio.h>
#include <fcntl.h>

main(int argc, char **argv) {
  int ifd, ofd, i, j, rl, bk, fo;
  char buffer[4];
  
  if (argc != 4) {
    fprintf(stderr, "»ç¿ë¹ý: %s [-e/-d] source targetn", argv[0]);
    exit(1);
  }

  if (strcmp(argv[1], "-e") == 0) { // encode
    if ((ifd = open(argv[2], O_RDONLY)) < 0) {
      fprintf(stderr, "%s ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ùn", argv[2]);
      exit(1);
    }

    if ((ofd = creat(argv[3], 0644)) < 0) {
      fprintf(stderr, "%s ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ùn", argv[3]);
      exit(1);
    }

    // header <ESC><G><H>
    buffer[0] = 0x1B;
    buffer[1] = 0x47;
    buffer[2] = 0x48;
    write(ofd, buffer, 3);
    
    rl = 0;
    while (1) {  
      bk = 32+rl; // rl Àº ÀÌÀüÀÇ look ahead
      rl = 0;
      fo = 32;

      while (read(ifd, buffer, 1) > 0) {
        if (buffer[0] == '0') {
          if (fo > 32) { // bk, fo ÇѽÖÀÌ ÀÌ¹Ì ¸¸µé¾îÁü
            rl = 1; // look ahead À̹ǷΠ´ÙÀ½¿¡ °¡»êÇϱâ À§ÇØ Ç¥½ÃÇØµÒ
            break;
          }
                  
          bk++;
          if (bk == 126)
            break;
        } else if (buffer[0] == '1') {
          fo++;
          if (fo == 126)
            break;
        }
      }

      if (bk == 32 && fo == 32)
        break;
        
      write(ofd, &bk, 1); // background(black)ÀÇ Run Length
      write(ofd, &fo, 1); // foreground(while)ÀÇ Run Length
    }
    
    // end of RLE <ESC><G><H> or <BEL><ESC><G><N>
    buffer[0] = 0x07;
    buffer[1] = 0x1B;
    buffer[2] = 0x47;
    buffer[3] = 0x4E;
    write(ofd, buffer, 4);
    
  } else if (strcmp(argv[1], "-d") == 0) { // decode
    if ((ifd = open(argv[2], O_RDONLY)) < 0) {
      fprintf(stderr, "%s ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ùn", argv[2]);
      exit(1);
    }

    if ((ofd = creat(argv[3], 0644)) < 0) {
      fprintf(stderr, "%s ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ùn", argv[3]);
      exit(1);
    }
  
    read(ifd, buffer, 3); // header <ESC><G><H>
    if (buffer[0] != 0x1B ||
        buffer[1] != 0x47 ||
        buffer[2] != 0x48) {
      fprintf(stderr, "%s ÆÄÀÏÀº RLE ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ùn", argv[1]);
      exit(1);
    }

    while (read(ifd, buffer, 2) > 0) {
      if ((buffer[0] == 0x07 && buffer[1] == 0x1B) ||
          (buffer[0] == 0x1B && buffer[1] == 0x47))
        break;
        
      for (i=0; i <= 1; i++) {
        rl = buffer[i] - 32; // 0x20
        for (j=1; j <= rl; j++)
          if (i)
            write(ofd, "1", 1); // foreground(while)
          else
            write(ofd, "0", 1); // background(black)
      }          
    }
            
  } else {
    fprintf(stderr, "¿É¼ÇÀº -e: encoding ¶Ç´Â -d:decoding ÀÔ´Ï´Ùn");
    exit(1);
  }
  
  close(ifd);
  close(ofd);
}





13   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] SIC/XE ¾î¼Àºí·¯ ±¸Çö  ±è¿µ´ë 2003/03/13 21943 1975
12   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] Recursive-Descent ÆÄ½ÌÀ» ÀÌ¿ëÇÑ °è»ê±â ±¸Çö  ±è¿µ´ë 2003/03/13 12134 1717
11   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] °è»ê±â¸¦ À§ÇÑ Lex & Yacc  ±è¿µ´ë 2003/03/15 10415 1700
10   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] MASM °£´ÜÇÑ °è»ê±â ¾î¼Àºí¸® ÇÁ·Î±×·¥ ¼Ò½º  ±è¿µ´ë 2003/07/11 10405 1597
9   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] ÀÌÁø Æ®¸®(Binary Tree)  ±è¿µ´ë 2004/06/18 10373 1922
8   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] 0/1 ¹è³¶ ¹®Á¦(Knapsack Problem)  ±è¿µ´ë 2003/03/13 9682 1720
7   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] ANSI-C ÆÄ¼­¸¦ À§ÇÑ Lex & Yacc  ±è¿µ´ë 2003/03/13 9237 2033
6   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] Huffman Code Encoder  ±è¿µ´ë 2003/03/18 8266 1615
5   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] Windows RLE(BMP) Encoder  ±è¿µ´ë 2003/03/18 8182 1428
4   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] PL/0 Compiler ±¸Çö  ±è¿µ´ë 2003/03/13 8079 1808
3   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] Top-down parsing by Recursive-Descent À» ÀÌ¿ëÇÑ °è»ê±â MASM ¾î¼Àºí¸® »ý¼º±â  ±è¿µ´ë 2003/07/11 8030 1735
2   [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] POSIX thread¸¦ »ç¿ëÇÑ Çà·Ä°è»ê  ±è¿µ´ë 2003/03/13 7892 1607
  [ÄÄÇ»ÅÍ Àü°ø] [¼Ò½º] CompuServe RLE Encoder  ±è¿µ´ë 2003/03/18 6515 1523

1
 

Copyright 1999-2021 Zeroboard / skin by zero