home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / SRC / lharc.lzh / LHARC / lhio.h < prev    next >
Text File  |  1991-07-29  |  2KB  |  89 lines

  1. /*----------------------------------------------------------------------*/
  2. /*        File I/O module for LHarc UNIX                */
  3. /*                                    */
  4. /*        Copyright(C) MCMLXXXIX  Yooichi.Tagawa            */
  5. /*                                    */
  6. /*  V0.00  Original                1989.06.25  Y.Tagawa    */
  7. /*  V0.03  Release #3  Beta Version        1989.07.02  Y.Tagawa    */
  8. /*----------------------------------------------------------------------*/
  9.  
  10. extern int        text_mode;
  11.  
  12. extern unsigned int    crc_table[0x100];
  13. extern unsigned int    crc_value;
  14. extern int        crc_getc_cashe;
  15. extern FILE        *crc_infile, *crc_outfile;
  16. extern long        crc_size;
  17.  
  18.  
  19. #define CRC_CHAR(c)                        \
  20. { register unsigned int ctmp = crc_value ^ c;             \
  21.     crc_value = (ctmp >> 8) ^ crc_table [ ctmp & 0xff ]; }
  22.  
  23.  
  24.  
  25. #if defined (__GNUC__)
  26. /*#define inline*/
  27.  
  28. static inline fastputc(char ch,register FILE *file)
  29. {        
  30.     if (file->_ptr != NULL && file->_ptr < file->_end-1)
  31.            *(file->_ptr)++ = ch;
  32.     else
  33.        putc(ch,file);
  34. }
  35.  
  36. static inline int fastgetc(register FILE *file)
  37. {        
  38.     if (file->_ptr != NULL && file->_ptr < file->_end)
  39.            return(*((unsigned char *) file->_ptr)++);
  40.     else
  41.        return(getc(file));
  42. }
  43.  
  44. /* DECODING */
  45. /* '0D0A' -> '0A' conversion and strip '1A' when text_mode */
  46. static inline putc_crc (int c)
  47. {
  48.   CRC_CHAR (c);
  49.   if (!text_mode || (c != 0x0d && c != 0x1a))
  50.     {
  51. #ifdef OSK
  52.       fastputc (c, crc_outfile);
  53. #else
  54.       putc (c, crc_outfile);
  55. #endif
  56.     }
  57. }
  58.  
  59. /* ENCODING */
  60. /* '0A' -> '0D0A' conversion when text_mode */
  61. static inline int getc_crc ()
  62. {
  63.   int    c;
  64.  
  65.   if (crc_getc_cashe != EOF)
  66.     {
  67.       c = crc_getc_cashe;
  68.       crc_getc_cashe = EOF;
  69.       CRC_CHAR (c);
  70.       crc_size++;
  71.     }
  72. #ifdef OSK
  73.   else if ((c = getc (crc_infile)) != EOF)
  74. #else
  75.   else if ((c = fastgetc (crc_infile)) != EOF)
  76. #endif
  77.     {
  78.       if (text_mode && c == 0x0a)
  79.     {
  80.       crc_getc_cashe = c;
  81.       c = 0x0d;
  82.     }
  83.       CRC_CHAR (c);
  84.       crc_size++;
  85.     }
  86.   return c;
  87. }
  88. #endif
  89.