2 * packer/unpacker code derived from JavaScript O Lait library (jsolait)
3 * JavaScript O Lait library(jsolait): Copyright (c) 2003-2006 Jan-Klaas Kollhof, GNU LGPL v2.1+
5 * modified by Ketmar // Avalon Group
7 function LZWPack (str
) {
9 var data
= (str
+"").split("");
15 for (var i
= 1; i
< data
.length
; i
++) {
17 if (dict
[phrase
+currChar
] != null) phrase
+= currChar
;
19 out
.push(phrase
.length
>1?dict
[phrase
]:phrase
.charCodeAt(0));
20 dict
[phrase
+currChar
] = code
;
25 out
.push(phrase
.length
>1?dict
[phrase
]:phrase
.charCodeAt(0));
29 function AddCode (c
) {
30 if (c
>= 32 && c
<= 126) {
31 if (c
== 34 || c
== 92) res
+= '\\';
32 res
+= String
.fromCharCode(c
);
34 var h
= c
.toString(16).toLowerCase();
35 while (h
.length
< 2) h
= "0"+h
;
36 if (h
.length
== 2) res
+= "\\x"+h
;
38 while (h
.length
< 4) h
= "0"+h
;
44 for (var i
= 0; i
< out
.length
; i
++) AddCode(out
[i
]);
49 function LZWUnpack (str
) {
51 var data
= (str
+"").split("");
52 var currChar
= data
[0];
53 var oldPhrase
= currChar
;
57 for (var i
= 1; i
< data
.length
; i
++) {
58 var currCode
= data
[i
].charCodeAt(0);
59 if (currCode
< 256) phrase
= data
[i
];
60 else phrase
= dict
[currCode
]?dict
[currCode
]:(oldPhrase
+currChar
);
62 currChar
= phrase
.charAt(0);
63 dict
[code
] = oldPhrase
+currChar
;
69 for (var f
= 0; f
< s
.length
; f
++) res
.push(s
.charCodeAt(f
));
74 function PackArray (arr
) {
76 for (var f
= 0; f
< arr
.length
; f
++) s
+= String
.fromCharCode(arr
[f
]);
81 function DUnpackStr (s
) {