OSDN Git Service

Fix filename case conversion on utf8 system
[lha/lha.git] / src / larc.c
1 /* ------------------------------------------------------------------------ */
2 /* LHa for UNIX                                                             */
3 /*              larc.c -- extra *.lzs                                       */
4 /*                                                                          */
5 /*      Modified                Nobutaka Watazaki                           */
6 /*                                                                          */
7 /*  Ver. 1.14   Source All chagned              1995.01.14  N.Watazaki      */
8 /* ------------------------------------------------------------------------ */
9 #include "lha.h"
10
11 /* ------------------------------------------------------------------------ */
12 static int      flag, flagcnt, matchpos;
13 /* ------------------------------------------------------------------------ */
14 /* lzs */
15 unsigned short
16 decode_c_lzs( /*void*/ )
17 {
18     if (getbits(1)) {
19         return getbits(8);
20     }
21     else {
22         matchpos = getbits(11);
23         return getbits(4) + 0x100;
24     }
25 }
26
27 /* ------------------------------------------------------------------------ */
28 /* lzs */
29 unsigned short
30 decode_p_lzs( /*void*/ )
31 {
32     return (loc - matchpos - MAGIC0) & 0x7ff;
33 }
34
35 /* ------------------------------------------------------------------------ */
36 /* lzs */
37 void
38 decode_start_lzs( /*void*/ )
39 {
40     init_getbits();
41     init_code_cache();
42 }
43
44 /* ------------------------------------------------------------------------ */
45 /* lz5 */
46 unsigned short
47 decode_c_lz5( /*void*/ )
48 {
49     int             c;
50
51     if (flagcnt == 0) {
52         flagcnt = 8;
53         flag = getc(infile);
54     }
55     flagcnt--;
56     c = getc(infile);
57     if ((flag & 1) == 0) {
58         matchpos = c;
59         c = getc(infile);
60         matchpos += (c & 0xf0) << 4;
61         c &= 0x0f;
62         c += 0x100;
63     }
64     flag >>= 1;
65     return c;
66 }
67
68 /* ------------------------------------------------------------------------ */
69 /* lz5 */
70 unsigned short
71 decode_p_lz5( /*void*/ )
72 {
73     return (loc - matchpos - MAGIC5) & 0xfff;
74 }
75
76 /* ------------------------------------------------------------------------ */
77 /* lz5 */
78 void
79 decode_start_lz5( /*void*/ )
80 {
81     int             i;
82
83     flagcnt = 0;
84     for (i = 0; i < 256; i++)
85         memset(&dtext[i * 13 + 18], i, 13);
86     for (i = 0; i < 256; i++)
87         dtext[256 * 13 + 18 + i] = i;
88     for (i = 0; i < 256; i++)
89         dtext[256 * 13 + 256 + 18 + i] = 255 - i;
90     memset(&dtext[256 * 13 + 512 + 18], 0, 128);
91     memset(&dtext[256 * 13 + 512 + 128 + 18], ' ', 128 - 18);
92 }