DECODE_REF copen (PVOID InStream, STREAM_TYPE SType, STREAM_MODE SMode) { MEM_HANDLE h; DWORD StreamLength; _StreamType = SType; _Stream = InStream; if (SMode == STREAM_WRITE) /* writing */ { OutChar (0); /* skip future StreamLength */ OutChar (0); OutChar (0); OutChar (0); StreamLength = 0; } else /* reading */ { BYTE lobyte, hibyte; UWORD loword, hiword; lobyte = (BYTE)InChar (); hibyte = (BYTE)InChar (); loword = MAKE_WORD (lobyte, hibyte); lobyte = (BYTE)InChar (); hibyte = (BYTE)InChar (); hiword = MAKE_WORD (lobyte, hibyte); StreamLength = MAKE_DWORD (loword, hiword); } h = 0; if (StreamLength == 0xFFFFFFFF || (h = AllocCodeDesc ()) == 0 || (_lpCurCodeDesc = LockCodeDesc (h)) == 0) { _lpCurCodeDesc = 0; FreeCodeDesc (h); } else { _lpCurCodeDesc->fh = h; _lpCurCodeDesc->Stream = _Stream; _lpCurCodeDesc->StreamType = _StreamType; _lpCurCodeDesc->StreamMode = SMode; _lpCurCodeDesc->StreamLength = StreamLength; _lpCurCodeDesc->buf_index = N - F; memset ((PBYTE)&_lpCurCodeDesc->text_buf[0], ' ', N - F); StartHuff (); } return ((DECODE_REF)_lpCurCodeDesc); }
DWORD cclose (PLZHCODE_DESC lpCodeDesc) { _lpCurCodeDesc = lpCodeDesc; if (_lpCurCodeDesc) { DWORD StreamIndex; if (_lpCurCodeDesc->CleanupFunc) (*_lpCurCodeDesc->CleanupFunc) (); StreamIndex = lpCodeDesc->StreamIndex; FreeCodeDesc (lpCodeDesc); _lpCurCodeDesc = NULL; return (StreamIndex); } return (0); }