summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-sheet/Excel.h
Side-by-side diff
Diffstat (limited to 'noncore/apps/opie-sheet/Excel.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-sheet/Excel.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/noncore/apps/opie-sheet/Excel.h b/noncore/apps/opie-sheet/Excel.h
new file mode 100644
index 0000000..0a581cf
--- a/dev/null
+++ b/noncore/apps/opie-sheet/Excel.h
@@ -0,0 +1,205 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <time.h>
+#include <sys/types.h>
+#include <strings.h>
+#include <qstring.h>
+#include <qarray.h>
+#include <qlist.h>
+
+#define DATEFORMAT 0x1
+#define NUMBERFORMAT 0x2
+
+#define BIFF8 0x600
+#define BIFF7 0x500
+#define WBKGLOBAL 0x5
+#define WRKSHEET 0x10
+
+#define XL_ARRAY 0x221
+#define XL_BOUNDSHEET 0x85
+#define XL_BOF 0x809
+#define XL_BOOLERR 0x205
+#define XL_CONTINUE 0x3c
+#define XL_DIMENSION 0x200
+#define XL_EOF 0x0a
+#define XL_EXTSST 0xff
+#define XL_FORMULA 0x406
+#define XL_FORMULA2 0x6
+#define XL_FORMAT 0x41e
+#define XL_INDEX 0x20b
+#define XL_LABEL 0x204
+#define XL_LABELSST 0xfd
+#define XL_MULRK 0xbd
+#define XL_NAME 0x18
+#define XL_NOTE 0x1c
+#define XL_NUMBER 0x203
+#define XL_RK 0x7e
+#define XL_RK2 0x27e
+#define XL_ROW 0x208
+#define XL_SST 0xfc
+#define XL_STRING 0x207
+#define XL_TXO 0x1b6
+#define XL_XF 0xe0
+#define XL_UNKNOWN 0xffff
+
+#define CELL_LABEL 0x2
+#define CELL_NUMBER 0x3
+#define CELL_DATE 0x4
+#define CELL_BOOLEAN 0x5
+#define CELL_ERROR 0x6
+
+
+
+class ExcelFormat
+{
+public:
+int code;
+int type;
+QString format;
+ExcelFormat();
+ExcelFormat(int c,int t, QString s);
+};
+
+struct xfrecord
+{
+int code;
+int type;
+QString format;
+};
+
+class ExcelCell
+{
+public:
+int type;
+int row,col;
+int xfindex; //xf format index of cell
+int valuei;
+double valued;
+QString valuec;
+
+};
+
+class ExcelBREC
+{
+public:
+ int code;
+ int length;
+ int position;
+ char* data;
+};
+
+class SSTList
+{
+public:
+ QArray <ExcelBREC*> rec;
+};
+
+class ExcelSheet
+{
+public:
+ QString name;
+ ExcelBREC BOFRecord;
+ int position;
+ int type;
+ int rows;
+ int cols;
+
+ int cellsize,rowalloc,cellalloc;
+ QArray <ExcelCell*> Cells;
+ bool InitCells(void); // true if ok
+ ExcelCell* Get(int row, int col);
+ void Set(int row, int col, ExcelCell* cell);
+
+};
+
+struct mulrk {
+ int row;
+ int first;
+ int last;
+ int numrks;
+ QArray<int> rknumbers;
+ QArray<double> rkdbls;
+ QArray<int> xfindices;
+};
+
+
+
+
+class ExcelBook
+{
+public:
+FILE *File;
+int Position;
+//int stringcount;
+QArray <QString*> SharedStrings;
+//int xfcount;
+QArray <ExcelFormat*> XFRecords;
+//int Sheetcount;
+QArray <ExcelSheet*> Sheets;
+//int name count;
+QArray <QString*> Names;
+
+QString dateformat;
+int Version;
+int endian;
+int Integer2Byte(int b1, int b2 );
+int Integer4Byte(int b1, int b2, int b3, int b4 );
+int Integer2ByteFile(FILE *f);
+float Float4Byte(int b1, int b2, int b3, int b4);
+double Double4Byte(int b1, int b2, int b3, int b4);
+double Double8Byte(int b1, int b2, int b3, int b4, int b5, int b6, int b7, int b8);
+void DetectEndian(void);
+
+bool OpenFile(char *Filename); // true if ok
+bool CloseFile(void); // true if ok
+void SeekPosition(int pos); // go to Pos
+void SeekSkip(int pos); // skips pos bytes.
+int FileEOF(void); //returns -1 if EOF else 0
+int Get2Bytes(void); //gets an int from the file
+char* Read(int pos, int length);
+QString ReadUnicodeChar(int pos, int length);
+QString* GetString(int num); //gets the num string from SharedStrings;
+int SeekBOF(void);
+ExcelBREC* GetBREC(void);
+ExcelBREC* PeekBREC(void);
+char* GetDataOfBREC(ExcelBREC* record);
+void ConvertCharToArray(ExcelBREC* record, char* chars, int length);
+int SheetHandleRecord(ExcelSheet* sheet, ExcelBREC* record);
+int ReadSheet(ExcelSheet* sheet); //read the sheet sheet*
+ExcelSheet* GetSheet(void);
+void ParseSheets(void);
+void GetSheets(void);
+
+bool ParseBook(char *file); // THIS IS THE MAIN PARSE FUNCTION of file
+QString GetASCII(char* inbytes, int pos, int chars);
+QString GetUnicode(char * inbytes, int pos, int chars);
+void HandleBoundSheet( ExcelBREC* rec);
+void HandleName(ExcelSheet* sheet, ExcelBREC* rec);
+ExcelFormat* GetFormatting(int xf);
+void HandleSetOfSST(ExcelBREC* rec/*, SSTList* cont*/, char* bytes);
+char* MergeBytesFromSSTs(ExcelBREC* rec,SSTList* cont);
+void HandleSST(ExcelBREC* rec);
+void HandleLabelSST(ExcelSheet* sheet, ExcelBREC* rec);
+ExcelCell* CellLabel(int row, int col, QString str);
+ExcelCell* CellNumber(int row, int col, int index, double d);
+QString* CellDataString(ExcelSheet* sh, int row, int col);
+int CellGetPrecision(double d);
+void CellSetDateFormat(char *d);
+void HandleMulrk(ExcelSheet* sheet, ExcelBREC* record);
+void MulrkRead(struct mulrk *mulrk, char* data);
+void HandleNumber(ExcelSheet* sheet, ExcelBREC* record);
+void HandleFormat(ExcelBREC* rec);
+void HandleXF(ExcelBREC* rec);
+void HandleRK(ExcelSheet* sheet, ExcelBREC* record);
+void HandleFormula(ExcelSheet* sheet, ExcelBREC* record);
+QString GetFormula(int row, int col, ExcelSheet* sheet, char* data, int sz);
+QString FindCellName(int row, int col);
+
+
+
+
+
+};
+