/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ /* * The head file for Bin Hex 4.0 encode/decode * ------------------------------------------- * * 10sep95 mym created */ #ifndef binhex_h #define binhex_h #ifdef XP_MAC #if PRAGMA_ALIGN_SUPPORTED #pragma options align=mac68k #endif #endif /* XP_MAC */ #define BINHEX_STATE_START 0 #define BINHEX_STATE_FNAME 1 #define BINHEX_STATE_HEADER 2 #define BINHEX_STATE_HCRC 3 #define BINHEX_STATE_DFORK 4 #define BINHEX_STATE_DCRC 5 #define BINHEX_STATE_RFORK 6 #define BINHEX_STATE_RCRC 7 #define BINHEX_STATE_FINISH 8 #define BINHEX_STATE_DONE 9 /* #define BINHEX_STATE_ERROR 10 */ /* ** The Definitions for the binhex encoder */ typedef struct _binhex_header { uint32 type, creator; uint16 flags; int32 dlen, rlen ; } binhex_header; typedef struct _binhex_encode_object { int state; /* progress state. */ int state86; /* binhex encode state. */ unsigned long CRC; /* accumulated CRC */ int line_length; /* the line length count */ char saved_bits; int s_inbuff; /* the inbuff size */ int pos_inbuff; /* the inbuff position */ char* inbuff; /* the inbuff pool */ int s_outbuff; /* the outbuff size */ int pos_outbuff; /* the outbuff position */ char* outbuff; /* the outbuf pool */ int s_overflow; /* the real size of overflow */ char overflow[32]; /* a small overflow buffer */ char c[2]; char newline[4]; /* the new line char seq. */ /* -- for last fix up. -- */ char name[64]; binhex_header head; } binhex_encode_object; /* ** The defination for the binhex decoder. ** NOTE: This define is for Mac only. */ typedef union { unsigned char c[4]; uint32 val; } longbuf; #define MAX_BUFF_SIZE 256 typedef struct _binhex_decode_object { int state; /* current state */ uint16 CRC; /* cumulative CRC */ uint16 fileCRC; /* CRC value from file */ longbuf octetbuf; /* buffer for decoded 6-bit values */ int16 octetin; /* current input position in octetbuf */ int16 donepos; /* ending position in octetbuf */ int16 inCRC; /* flag set when reading a CRC */ int32 count; /* generic counter */ int16 marker; /* flag indicating maker */ unsigned char rlebuf; /* buffer for last run length encoding value */ binhex_header head; /* buffer for header */ #ifdef XP_MAC FSSpec* mSpec; char name[64]; /* fsspec for the output file */ int16 vRefNum; int32 parID ; int16 fileId; /* the refnum of the output file */ #else char *name; /* file name for the output file in non-mac OS */ XP_File fileId; /* the file if for the outpur file. non-mac OS */ #endif MWContext* context; /* context for call back function. */ int32 s_inbuff; /* the valid size of the inbuff */ int32 pos_inbuff; /* the index of the inbuff. */ char* inbuff; /* the inbuff pointer. */ int32 pos_outbuff; /* the position of the out buff. */ char outbuff[MAX_BUFF_SIZE]; } binhex_decode_object; XP_BEGIN_PROTOS /* ** The binhex file encode prototypes. */ int binhex_encode_init(binhex_encode_object *p_bh_encode_obj); int binhex_encode_next(binhex_encode_object *p_bh_encode_obj, char *in_buff, int32 in_size, char *out_buff, int32 buff_size, int32 *real_size); int binhex_encode_end (binhex_encode_object *p_bh_encode_obj, XP_Bool is_aborting); int binhex_reencode_head( binhex_encode_object *p_bh_encode_obj, char* outbuff, int32 buff_size, int32* real_size); /* ** The binhex stream decode prototypes. */ int binhex_decode_init(binhex_decode_object *p_bh_decode_env, MWContext *context); int binhex_decode_next(binhex_decode_object *p_bh_decode_env, const char *in_buff, int32 buff_size); int binhex_decode_end (binhex_decode_object *p_bh_decode_env, XP_Bool is_aborting); XP_END_PROTOS #ifdef XP_MAC #if PRAGMA_ALIGN_SUPPORTED #pragma options align=reset #endif #endif /* XP_MAC */ #endif /* binhex_h */