From 232c1f044b5bead2a46f77c77a19a2a19798abc6 Mon Sep 17 00:00:00 2001 From: koldo Date: Fri, 25 Feb 2011 16:28:55 +0000 Subject: [PATCH] Functions4U_Demo: New demo package git-svn-id: svn://ultimatepp.org/upp/trunk@3248 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- bazaar/Functions4U_Demo/Excel.cpp | 35 ++++++ bazaar/Functions4U_Demo/Functions4U_Demo.upp | 15 +++ bazaar/Functions4U_Demo/Open.cpp | 35 ++++++ bazaar/Functions4U_Demo/Spreadsheet.cpp | 19 +++ bazaar/Functions4U_Demo/Spreadsheet.h | 23 ++++ bazaar/Functions4U_Demo/init | 5 + bazaar/Functions4U_Demo/main.cpp | 119 +++++++++++++++++++ 7 files changed, 251 insertions(+) create mode 100644 bazaar/Functions4U_Demo/Excel.cpp create mode 100644 bazaar/Functions4U_Demo/Functions4U_Demo.upp create mode 100644 bazaar/Functions4U_Demo/Open.cpp create mode 100644 bazaar/Functions4U_Demo/Spreadsheet.cpp create mode 100644 bazaar/Functions4U_Demo/Spreadsheet.h create mode 100644 bazaar/Functions4U_Demo/init create mode 100644 bazaar/Functions4U_Demo/main.cpp diff --git a/bazaar/Functions4U_Demo/Excel.cpp b/bazaar/Functions4U_Demo/Excel.cpp new file mode 100644 index 000000000..c337bdf5e --- /dev/null +++ b/bazaar/Functions4U_Demo/Excel.cpp @@ -0,0 +1,35 @@ +#include + +using namespace Upp; + +#include "Spreadsheet.h" + +class ExcelSpreadsheet : public SpreadsheetPlugin { +private: + String filename; + +public: + Spreadsheet_METHOD_LIST + ExcelSpreadsheet() { + puts("ExcelSpreadsheet new"); + } + ~ExcelSpreadsheet() { + puts("ExcelSpreadsheet closing " + filename); + puts("ExcelSpreadsheet delete"); + } +}; + + +INITBLOCK { + PluginRegister(Spreadsheet, ExcelSpreadsheet, "Excel"); +} + +bool ExcelSpreadsheet::Open(const char *_filename) { + filename = _filename; + puts(Format("ExcelSpreadsheet::Open(%s)", filename)); + return false; +} + +void ExcelSpreadsheet::SetData(int row, int col, Value val) { + puts(Format("ExcelSpreadsheet::SetData(%d, %d, %s)", row, col, val.ToString())); +} \ No newline at end of file diff --git a/bazaar/Functions4U_Demo/Functions4U_Demo.upp b/bazaar/Functions4U_Demo/Functions4U_Demo.upp new file mode 100644 index 000000000..361a1db2a --- /dev/null +++ b/bazaar/Functions4U_Demo/Functions4U_Demo.upp @@ -0,0 +1,15 @@ +uses + Core, + Functions4U; + +file + main.cpp, + StaticPlugin readonly separator, + Spreadsheet.cpp, + Spreadsheet.h, + Open.cpp, + Excel.cpp; + +mainconfig + "" = ""; + diff --git a/bazaar/Functions4U_Demo/Open.cpp b/bazaar/Functions4U_Demo/Open.cpp new file mode 100644 index 000000000..7b947946f --- /dev/null +++ b/bazaar/Functions4U_Demo/Open.cpp @@ -0,0 +1,35 @@ +#include + +using namespace Upp; + +#include "Spreadsheet.h" + +class OpenSpreadsheet : public SpreadsheetPlugin { +private: + String filename; + +public: + Spreadsheet_METHOD_LIST + OpenSpreadsheet() { + puts("OpenSpreadsheet new"); + } + ~OpenSpreadsheet() { + puts("OpenSpreadsheet closing " + filename); + puts("OpenSpreadsheet delete"); + } +}; + + +INITBLOCK { + PluginRegister(Spreadsheet, OpenSpreadsheet, "Open"); +} + +bool OpenSpreadsheet::Open(const char *_filename) { + filename = _filename; + puts(Format("OpenSpreadsheet::Open(%s)", filename)); + return false; +} + +void OpenSpreadsheet::SetData(int row, int col, Value val) { + puts(Format("OpenSpreadsheet::SetData(%d, %d, %s)", row, col, val.ToString())); +} diff --git a/bazaar/Functions4U_Demo/Spreadsheet.cpp b/bazaar/Functions4U_Demo/Spreadsheet.cpp new file mode 100644 index 000000000..3fd5b9218 --- /dev/null +++ b/bazaar/Functions4U_Demo/Spreadsheet.cpp @@ -0,0 +1,19 @@ +#include + +using namespace Upp; + +#include +#include "Spreadsheet.h" + + +bool SpreadsheetPlugin::Open(const char *filename) {return false;}; +void SpreadsheetPlugin::SetData(int row, int col, Value val) {}; + + +bool Spreadsheet::Open(const char *filename) {return (static_cast(GetData()))->Open(filename);} +void Spreadsheet::SetData(int row, int col, Value val) {return (static_cast(GetData()))->SetData(row, col, val);} + + +INITBLOCK { + PluginRegister(Spreadsheet, SpreadsheetPlugin, ""); +} \ No newline at end of file diff --git a/bazaar/Functions4U_Demo/Spreadsheet.h b/bazaar/Functions4U_Demo/Spreadsheet.h new file mode 100644 index 000000000..58d16f8c0 --- /dev/null +++ b/bazaar/Functions4U_Demo/Spreadsheet.h @@ -0,0 +1,23 @@ +#ifndef _PluginDemo_Spreadsheet_h_ +#define _PluginDemo_Spreadsheet_h_ + +#include + +#define Spreadsheet_METHOD_LIST \ + virtual bool Open(const char *filename); \ + virtual void SetData(int row, int col, Value val); + + +class SpreadsheetPlugin { +public: + Spreadsheet_METHOD_LIST +}; + + +class Spreadsheet : public SpreadsheetPlugin, public StaticPlugin { +public: + Spreadsheet_METHOD_LIST +}; + + +#endif diff --git a/bazaar/Functions4U_Demo/init b/bazaar/Functions4U_Demo/init new file mode 100644 index 000000000..e86956df1 --- /dev/null +++ b/bazaar/Functions4U_Demo/init @@ -0,0 +1,5 @@ +#ifndef _Functions4U_Demo_icpp_init_stub +#define _Functions4U_Demo_icpp_init_stub +#include "Core/init" +#include "Functions4U/init" +#endif diff --git a/bazaar/Functions4U_Demo/main.cpp b/bazaar/Functions4U_Demo/main.cpp new file mode 100644 index 000000000..5a36e3b92 --- /dev/null +++ b/bazaar/Functions4U_Demo/main.cpp @@ -0,0 +1,119 @@ +#include + +using namespace Upp; + +#include "Spreadsheet.h" + + +static bool end = false; + +void TestGetchar() +{ + if (end) + getchar(); +} + +void Puts(String s) +{ + puts(s); + String file = AppendFileName(GetDesktopFolder(), "log"); + SaveFile(file, LoadFile(file) + "\n" + s); +} + +void SpreadsheetDemo(Spreadsheet &spreadsheet) { + spreadsheet.Open("myfile.xls"); + spreadsheet.SetData(4, 6, "Hello world"); +} + +void PluginDemo() { + Spreadsheet spreadsheet; + + if (!PluginInit(spreadsheet, "Open")) { + Puts("Impossible to init OpenOffice/LibreOffice"); + return; + } + SpreadsheetDemo(spreadsheet); + if (!PluginInit(spreadsheet, "Excel")) { + Puts("Impossible to init Excel"); + return; + } + SpreadsheetDemo(spreadsheet); +} + +void FilesDemo() { + String filename1 = AppendFileName(GetDesktopFolder(), "Demo", "file1.txt"); + RealizePath(filename1); + String str1 = "This is the First string"; + SaveFile(filename1, str1); + String filename2 = AppendFileName(GetDesktopFolder(), "Demo", "file2.txt"); + String str2 = "This is the Second string"; + SaveFile(filename2, str2); + + FileCat(filename1, filename2); + Puts(Format("\nFileCat(%s, %s)", filename1, filename2)); + +// LaunchFile(filename1); +// Puts(Format("LaunchFile(%s)", filename1)); + + int intres = FileCompare(filename1, filename2); + Puts(Format("\nFileCompare(%s, %s) = %d (has to be -1)", filename1, filename2, intres)); + + int64 pos = FindStringInFile(filename1, "Second"); + Puts(Format("\nFindStringInFile(%s, %s) = %d (has to be 35)", filename1, filename2, pos)); + + bool boolres = FileStrAppend(filename1, ". Text appended at the end."); + Puts(Format("\nFileStrAppend(%s, \". Text appended at the end.\") = %s (has to be true)", + filename1, boolres ? "true" : "false")); + + boolres = UpperFolder(GetFileDirectory(filename1)); + Puts(Format("\nUpperFolder(%s) = %s (has to be true)", filename1, boolres ? "true" : "false")); + + String upperFolder = GetUpperFolder(GetFileDirectory(filename1)); + Puts(Format("\nGetUpperFolder(%s) = %s (has to be %s)", filename1, upperFolder, GetDesktopFolder())); + + String stringres = GetNextFolder(GetUpperFolder(GetDesktopFolder()), GetFileDirectory(filename1)); + Puts(Format("\nGetNextFolder(%s, %s) = %s (has to be %s)", GetUpperFolder(GetDesktopFolder()), + GetFileDirectory(filename1), stringres, GetDesktopFolder())); + + String lfilename1 = ToLower(filename1); + filename1 = FileRealName(lfilename1); + Puts(Format("\nFileRealName(%s) = %s", lfilename1, filename1)); + +} + +void NonReentrantDemo() { + Puts("Trying to enter Non reentrant."); + NON_REENTRANT_V; + + Puts("Entered in Non reentrant. It has to be once."); + NonReentrantDemo(); + NonReentrantDemo(); +} + +void Test() { + Puts("Files demo"); + FilesDemo(); + + Puts("\nPlugin demo"); + PluginDemo(); + + Puts("\nNonReentrant demo"); + NonReentrantDemo(); + + Puts("\nPress enter to end..."); TestGetchar(); +} + +CONSOLE_APP_MAIN +{ + FileDelete(AppendFileName(GetDesktopFolder(), "log")); + + Puts("Introduce number of test cycles or just type enter to run it once: "); + char str[50]; + fgets(str, 49, stdin); + int numTests = atoi(str); + for (int i = 0; i < numTests; ++i) + Test(); + end = true; + Test(); +} +