Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2001-2002, David Janssens
  3.  * Copyright (c) 2003, Yannick Verschueren
  4.  * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in the
  14.  *    documentation and/or other materials provided with the distribution.
  15.  *
  16.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  17.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  20.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  21.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  22.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  23.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  24.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  25.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  26.  * POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. #include "cio.h"
  30. #include <setjmp.h>
  31.  
  32. static unsigned char *cio_start, *cio_end, *cio_bp;
  33.  
  34. extern jmp_buf j2k_error;
  35.  
  36. /// <summary>
  37. /// Number of bytes written.
  38. /// </summary>
  39. int cio_numbytes() {
  40.     return cio_bp-cio_start;
  41. }
  42.  
  43. /// <summary>
  44. /// Get position in byte stream.
  45. /// </summary>
  46. int cio_tell() {
  47.     return cio_bp-cio_start;
  48. }
  49.  
  50. /// <summary>
  51. /// Set position in byte stream.
  52. /// </summary>
  53. void cio_seek(int pos) {
  54.     cio_bp=cio_start+pos;
  55. }
  56.  
  57. /// <summary>
  58. /// Number of bytes left before the end of the stream.
  59. /// </summary>
  60. int cio_numbytesleft() {
  61.     return cio_end-cio_bp;
  62. }
  63.  
  64. /// <summary>
  65. /// Get pointer to the current position in the stream.
  66. /// </summary>
  67. unsigned char *cio_getbp() {
  68.     return cio_bp;
  69. }
  70.  
  71. /// <summary>
  72. /// Initialize byte IO.
  73. /// </summary>
  74. void cio_init(unsigned char *bp, int len) {
  75.     cio_start=bp;
  76.     cio_end=bp+len;
  77.     cio_bp=bp;
  78. }
  79.  
  80. /// <summary>
  81. /// Write a byte.
  82. /// </summary>
  83. void cio_byteout(unsigned char v) {
  84.   if (cio_bp>=cio_end) longjmp(j2k_error, 1);
  85.   *cio_bp++=v;
  86.    
  87. }
  88.  
  89. /// <summary>
  90. /// Read a byte.
  91. /// </summary>
  92. unsigned char cio_bytein() {
  93.     if (cio_bp>=cio_end) longjmp(j2k_error, 1);
  94.     return *cio_bp++;
  95. }
  96.  
  97. /// <summary>
  98. /// Write a byte.
  99. /// </summary>
  100. //void cio_write(unsigned int v, int n) {
  101. void cio_write(long long v, int n) {
  102.     int i;
  103.     for (i=n-1; i>=0; i--)
  104.       {
  105.         cio_byteout((unsigned char)((v>>(i<<3))&0xff));
  106.       }
  107. }
  108.  
  109. /// <summary>
  110. /// Read some bytes.
  111. /// </summary>
  112. /* unsigned int cio_read(int n) { */
  113. long long cio_read(int n) {
  114.     int i;
  115.     /*unsigned int v;*/
  116.     long long v;
  117.     v=0;
  118.     for (i=n-1; i>=0; i--) {
  119.       v+=cio_bytein()<<(i<<3);
  120.     }
  121.     return v;
  122. }
  123.  
  124. /// <summary>
  125. /// Write some bytes.
  126. /// </summary>
  127. void cio_skip(int n) {
  128.     cio_bp+=n;
  129. }
  130.