14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  pstream.h  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef _PORTSTREAM_H_
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define _PORTSTREAM_H_
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef __cplusplus
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectextern "C"
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h>
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptypes.h"
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef PFILE_VIRTUAL_SUPPORT
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  struct FileBufferFrame;
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  typedef struct PORT_FILE_HANDLE
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const char              *filename;
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    struct FileBufferFrame  *startFrame;
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    struct FileBufferFrame  *endFrame;
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    struct FileBufferFrame  *curFrame;  /* current buffer; useful for writable file */
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const unsigned char     *curPos;
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const unsigned char     *endPos;
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unsigned int            size;       /* total buffer size; useful for writable file */
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unsigned int            frame_size; /* buffer size in current frame; useful for writable file */
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int                     eof;
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int                     mode;      /* 0 readonly text; 1 readonly binary; 2 writable text; 3 writalbe binary */
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORT_FILE_HANDLE;
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  typedef PORT_FILE_HANDLE* PORT_FILE;
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  typedef struct _FileRecord
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    char name[80];
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    unsigned char *start;
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int end;              /* offset of the end of the file */
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int size;             /* total buffer size */
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    int mode;
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FileRecord;
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  typedef struct VirtualFileTable_t
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const FileRecord* pFileTable;
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    const unsigned char* pFirstFile;
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  VirtualFileTable;
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* Function prototypes */
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API void    PortFileInit(void);
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API PORT_FILE PortFopen(const char* filename, const char* mode);
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFclose(PORT_FILE PortFile);
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API size_t  PortFread(void* buffer, size_t size, size_t count, PORT_FILE PortFile);
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API size_t  PortFwrite(const void* buffer, size_t size, size_t count, PORT_FILE PortFile);
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFseek(PORT_FILE PortFile, long offset, int origin);
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API long    PortFtell(PORT_FILE PortFile);
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFprintf(PORT_FILE PortFile, const char* format, ...);
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API char*  PortFgets(char* string, int n, PORT_FILE PortFile);
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFflush(PORT_FILE PortFile);
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFeof(PORT_FILE PortFile);
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFgetc(PORT_FILE PortFile);
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFscanf(PORT_FILE PortFile, const char *format, ...);
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int   PortFerror(PORT_FILE PortFile);
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API void   PortClearerr(PORT_FILE PortFile);
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API void    PortRewind(PORT_FILE PortFile);
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API PORT_FILE PortFreopen(const char *path, const char *mode, PORT_FILE PortFile);
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API char*    PortGetcwd(char *buffer, int maxlen);
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int      PortMkdir(const char *dirname);
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* this function is to create a file with the limit size */
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API int      PortFcreate(const char *fname, void *pBuffer, int size);
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API void     PortFdelete(const char *fname);
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PORTABLE_API void     PortSetFileTable(const FileRecord* pFileTable, const unsigned char* pFirstFile);
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  void     SetFileTable(VirtualFileTable *table);
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif /* #ifdef PFILE_VIRTUAL_SUPPORT */
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef __cplusplus
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif /* _PORTSTREAM_H */
106