diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Main.cc | 430 | ||||
-rw-r--r-- | src/misc.cc | 132 | ||||
-rw-r--r-- | src/paq.cc | 330 |
3 files changed, 446 insertions, 446 deletions
diff --git a/src/Main.cc b/src/Main.cc index 7cc062e..ecec54e 100644 --- a/src/Main.cc +++ b/src/Main.cc @@ -1,215 +1,215 @@ -#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <unistd.h>
-#include <list>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include "Handle.h"
-#include "Task.h"
-#include "TaskMan.h"
-#include "HttpServ.h"
-#include "Socket.h"
-#include "config.h"
-#include "Message.h"
-#include "Menu.h"
-#include "Exceptions.h"
-#include "Form.h"
-#include "Confirm.h"
-#include "Table.h"
-#include "InPipe.h"
-#include "Image.h"
-#include "CopyJob.h"
-#include "IRC.h"
-#include "Main.h"
-#include "gettext.h"
-
-InPipe * in;
-
-class ad_run : public Task {
- public:
- ad_run(Variables * av, Variables * ahds, Handle * ah) : v(*av), hds(*ahds), h(ah) {
- SetBurst();
- }
- virtual ~ad_run() {}
- virtual String GetName() { return "Action dynamique"; }
- protected:
- virtual int Do() throw (GeneralException) {
- pid_t p;
-
- switch (current) {
- case 0:
- if (!(p = fork())) {
- execlp("uptime", "uptime", NULL);
- }
- current = 1;
- WaitFor(p);
- Suspend(TASK_ON_HOLD);
-
- case 1:
- (*in) >> ut;
- if (!(p = fork())) {
- execlp("uname", "uname", "-a", NULL);
- }
- current = 2;
- WaitFor(p);
- Suspend(TASK_ON_HOLD);
-
- case 2:
- (*in) >> un;
- for (int i = 0; i < hds.GetNb(); i++) {
- shds += hds[i] + "<BR>\n";
- }
-
- m = new Message("Action dynamique",
- String("Vous avez choisi l'action dynamique. L'uptime de la machine est '") +
- ut + "' et sa définition complète est '" + un + "'<BR><BR><BR>Voici la liste des entêtes:<BR><BR>" + shds, "");
-
- current = 3;
- WaitFor(m->Do(&v, &hds, h));
- Suspend(TASK_ON_HOLD);
-
- case 3:
- delete m;
- testimg = new Image(100, 100);
- testimg->Prepare();
-
- testoutput = new Output("TestImg.tga");
-
- current = 4;
- WaitFor(new CopyJob(testimg, testoutput, -1, true, true));
- Suspend(TASK_ON_HOLD);
-
- case 4:
- return TASK_DONE;
- }
- return TASK_DONE;
- }
- private:
- Variables v, hds;
- Handle * h;
- String ut, un, shds;
- Action * m;
- Image * testimg;
- Output * testoutput;
-};
-
-class ad_t : public Action {
- public:
- ad_t() : Action("menu6") { }
- virtual ~ad_t() { }
- virtual String GetTitle() { return "Action dynamique"; }
- virtual Task * Do(Variables * v, Variables * hds, Handle * h) {
- return new ad_run(v, hds, h);
- }
-};
-Action * ad = new ad_t();
-
-class dostop_t : public Action {
- public:
- dostop_t() : Action("dostop") { }
- virtual ~dostop_t() { }
- virtual String GetTitle() { return "Arret du serveur"; }
- virtual Task * Do(Variables * v, Variables * hds, Handle * h) {
- TaskMan::Stop();
- return 0;
- }
-};
-Action * dostop = new dostop_t();
-
-String Noms[] = {"Champ1", "Champ2", "Champ3"};
-String Defaults[] = {"Default1", "Default2", 0};
-String Invites[] = {"Champ 1:", "Champ 2:", "Champ 3:"};
-String Options[] = {"Option1", "Option2", ""};
-String ODescs[] = {"Description 1", "Description 2", ""};
-String * Lists[] = {0, 0, Options};
-String * Descs[] = {0, 0, ODescs};
-String Titres[] = {"Titre 1", "Titre 2", "Titre 3"};
-String Cells[] = {"L1C1", "L1C2", "L1C3", "L2C1", "L2C2", "L2C3", "L3C1", "L3C2", "L3C3", "L4C1", "L4C2", "L4C3"};
-Action * a1 = new Message("Action 1", "Vous avez cliqué sur l'option 1 du menu", "menu1");
-Action * a2 = new Table("Petite table", "menu2", Titres, Cells, 3, 4);
-Action * a3 = new Message("Test d'image",
-"Voici un test d'affichage d'image:"
-"<center><table border=0><td><tr><img src=\"/image/nobis-logo-small.jpg\"></tr></td></table></center>",
-"menu3");
-Action * a4 = new Form("Test de formulaire...", "menu4", "Rentrez des trucs...", Noms, Invites, Defaults, Lists, Descs, 3);
-Action * a5 = new Confirm("Confirmation", "Oui ou non?", "menu5", 0, 0);
-Action * java = new Message("Applet JAVA",
-"\n"
-"<center>\n"
-"<APPLET CODE = \"TestApplet.class\" CODEBASE =\"/image\" WIDTH = 400 HEIGHT = 50>\n"
-"</APPLET>\n"
-"</center>\n", "java");
-
-Action * up = new Message("Test d'upload",
-"\n"
-"<FORM ENCTYPE=\"multipart/form-data\" ACTION=\"/bin/start\" METHOD=POST>\n"
-"<INPUT TYPE=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"1000\">\n"
-"Send this file: <INPUT NAME=\"userfile\" TYPE=\"file\">\n"
-"<INPUT TYPE=\"submit\" VALUE=\"Send File\">\n"
-"</FORM>\n", "upload");
-
-Action * stop = new Confirm("Stopper", "Stopper le serveur?", "stop", dostop, 0);
-
-Action * Liste[] = {a1, a2, a3, a4, a5, ad, java, up, stop};
-String Labels[] = {"Action 1", "Action 2", "Action 3", "Action 4", "Action 5", "Action dynamique", "Essai de java", "Test d'upload", "Stop"};
-
-CODE_BEGINS
-
-Action * buildmenu(void) {
- Action * m = new Menu("Menu Principal", "start", Labels, Liste, 9);
- return m;
-}
-
-int startup() throw (GeneralException) {
- int c;
- String port = "1500";
-
- std::list<String> testlist;
- testlist.push_front("poide");
-
- in = new InPipe();
-
- in->Hook();
-
- String test = "poide\n", r;
- std::cout << test;
- std::cout.flush();
- (*in) >> r;
- if (r != "poide") {
- printm(M_ERROR, "The stdout redirect has failed.\n");
- exit(-1);
- }
-
- while ((c = getopt(argc, argv, "p:")) != EOF) {
- switch (c) {
- case 'p':
- port = optarg;
- break;
- default:
- printm(M_BARE, String(_("Usage: ")) + argv[0] + " [-p port]\n");
- exit(-1);
- }
- }
-
- try {
- HttpServ h(buildmenu(), port.to_int(), "testing");
-// IRC i("botalacon");
-// i.Connect();
-// i.MainLoop();
- TaskMan::MainLoop();
- }
- catch (GeneralException e) {
- std::cerr << "Main function got an exception: '" << e.GetMsg() << "'.\n";
- exit(-1);
- }
-
- catch (...) {
- std::cerr << "Unknow exception.\n" << std::endl;
- exit(-1);
- }
-
- delete in;
- return 0;
-}
-CODE_ENDS
+#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include <unistd.h> +#include <list> +#include <sys/types.h> +#include <sys/wait.h> +#include "Handle.h" +#include "Task.h" +#include "TaskMan.h" +#include "HttpServ.h" +#include "Socket.h" +#include "config.h" +#include "Message.h" +#include "Menu.h" +#include "Exceptions.h" +#include "Form.h" +#include "Confirm.h" +#include "Table.h" +#include "InPipe.h" +#include "Image.h" +#include "CopyJob.h" +#include "IRC.h" +#include "Main.h" +#include "gettext.h" + +InPipe * in; + +class ad_run : public Task { + public: + ad_run(Variables * av, Variables * ahds, Handle * ah) : v(*av), hds(*ahds), h(ah) { + SetBurst(); + } + virtual ~ad_run() {} + virtual String GetName() { return "Action dynamique"; } + protected: + virtual int Do() throw (GeneralException) { + pid_t p; + + switch (current) { + case 0: + if (!(p = fork())) { + execlp("uptime", "uptime", NULL); + } + current = 1; + WaitFor(p); + Suspend(TASK_ON_HOLD); + + case 1: + (*in) >> ut; + if (!(p = fork())) { + execlp("uname", "uname", "-a", NULL); + } + current = 2; + WaitFor(p); + Suspend(TASK_ON_HOLD); + + case 2: + (*in) >> un; + for (int i = 0; i < hds.GetNb(); i++) { + shds += hds[i] + "<BR>\n"; + } + + m = new Message("Action dynamique", + String("Vous avez choisi l'action dynamique. L'uptime de la machine est '") + + ut + "' et sa définition complète est '" + un + "'<BR><BR><BR>Voici la liste des entêtes:<BR><BR>" + shds, ""); + + current = 3; + WaitFor(m->Do(&v, &hds, h)); + Suspend(TASK_ON_HOLD); + + case 3: + delete m; + testimg = new Image(100, 100); + testimg->Prepare(); + + testoutput = new Output("TestImg.tga"); + + current = 4; + WaitFor(new CopyJob(testimg, testoutput, -1, true, true)); + Suspend(TASK_ON_HOLD); + + case 4: + return TASK_DONE; + } + return TASK_DONE; + } + private: + Variables v, hds; + Handle * h; + String ut, un, shds; + Action * m; + Image * testimg; + Output * testoutput; +}; + +class ad_t : public Action { + public: + ad_t() : Action("menu6") { } + virtual ~ad_t() { } + virtual String GetTitle() { return "Action dynamique"; } + virtual Task * Do(Variables * v, Variables * hds, Handle * h) { + return new ad_run(v, hds, h); + } +}; +Action * ad = new ad_t(); + +class dostop_t : public Action { + public: + dostop_t() : Action("dostop") { } + virtual ~dostop_t() { } + virtual String GetTitle() { return "Arret du serveur"; } + virtual Task * Do(Variables * v, Variables * hds, Handle * h) { + TaskMan::Stop(); + return 0; + } +}; +Action * dostop = new dostop_t(); + +String Noms[] = {"Champ1", "Champ2", "Champ3"}; +String Defaults[] = {"Default1", "Default2", 0}; +String Invites[] = {"Champ 1:", "Champ 2:", "Champ 3:"}; +String Options[] = {"Option1", "Option2", ""}; +String ODescs[] = {"Description 1", "Description 2", ""}; +String * Lists[] = {0, 0, Options}; +String * Descs[] = {0, 0, ODescs}; +String Titres[] = {"Titre 1", "Titre 2", "Titre 3"}; +String Cells[] = {"L1C1", "L1C2", "L1C3", "L2C1", "L2C2", "L2C3", "L3C1", "L3C2", "L3C3", "L4C1", "L4C2", "L4C3"}; +Action * a1 = new Message("Action 1", "Vous avez cliqué sur l'option 1 du menu", "menu1"); +Action * a2 = new Table("Petite table", "menu2", Titres, Cells, 3, 4); +Action * a3 = new Message("Test d'image", +"Voici un test d'affichage d'image:" +"<center><table border=0><td><tr><img src=\"/image/nobis-logo-small.jpg\"></tr></td></table></center>", +"menu3"); +Action * a4 = new Form("Test de formulaire...", "menu4", "Rentrez des trucs...", Noms, Invites, Defaults, Lists, Descs, 3); +Action * a5 = new Confirm("Confirmation", "Oui ou non?", "menu5", 0, 0); +Action * java = new Message("Applet JAVA", +"\n" +"<center>\n" +"<APPLET CODE = \"TestApplet.class\" CODEBASE =\"/image\" WIDTH = 400 HEIGHT = 50>\n" +"</APPLET>\n" +"</center>\n", "java"); + +Action * up = new Message("Test d'upload", +"\n" +"<FORM ENCTYPE=\"multipart/form-data\" ACTION=\"/bin/start\" METHOD=POST>\n" +"<INPUT TYPE=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"1000\">\n" +"Send this file: <INPUT NAME=\"userfile\" TYPE=\"file\">\n" +"<INPUT TYPE=\"submit\" VALUE=\"Send File\">\n" +"</FORM>\n", "upload"); + +Action * stop = new Confirm("Stopper", "Stopper le serveur?", "stop", dostop, 0); + +Action * Liste[] = {a1, a2, a3, a4, a5, ad, java, up, stop}; +String Labels[] = {"Action 1", "Action 2", "Action 3", "Action 4", "Action 5", "Action dynamique", "Essai de java", "Test d'upload", "Stop"}; + +CODE_BEGINS + +Action * buildmenu(void) { + Action * m = new Menu("Menu Principal", "start", Labels, Liste, 9); + return m; +} + +int startup() throw (GeneralException) { + int c; + String port = "1500"; + + std::list<String> testlist; + testlist.push_front("poide"); + + in = new InPipe(); + + in->Hook(); + + String test = "poide\n", r; + std::cout << test; + std::cout.flush(); + (*in) >> r; + if (r != "poide") { + printm(M_ERROR, "The stdout redirect has failed.\n"); + exit(-1); + } + + while ((c = getopt(argc, argv, "p:")) != EOF) { + switch (c) { + case 'p': + port = optarg; + break; + default: + printm(M_BARE, String(_("Usage: ")) + argv[0] + " [-p port]\n"); + exit(-1); + } + } + + try { + HttpServ h(buildmenu(), port.to_int(), "testing"); +// IRC i("botalacon"); +// i.Connect(); +// i.MainLoop(); + TaskMan::MainLoop(); + } + catch (GeneralException e) { + std::cerr << "Main function got an exception: '" << e.GetMsg() << "'.\n"; + exit(-1); + } + + catch (...) { + std::cerr << "Unknow exception.\n" << std::endl; + exit(-1); + } + + delete in; + return 0; +} +CODE_ENDS diff --git a/src/misc.cc b/src/misc.cc index d79204d..ea72572 100644 --- a/src/misc.cc +++ b/src/misc.cc @@ -1,66 +1,66 @@ -#include <list>
-#include "Handle.h"
-#include "String.h"
-
-void GeneDeroul(Handle * h, String * & l1, String * & l2) {
- int count;
- list<String> result;
- String r1, r2;
-
- count = 0;
-
- while (1) {
- (*h) >> r1;
- (*h) >> r2;
- if ((r1 == "") && (r2 == "")) break;
- result.push_back(r1);
- result.push_back(r2);
- count++;
- }
-
- l1 = new String[count + 1];
- l2 = new String[count + 1];
-
- for (int i = 0; i < count; i++) {
- r1 = result.front();
- result.pop_front();
- r2 = result.front();
- result.pop_front();
- l1[i] = r1;
- l2[i] = r2;
- }
-
- l1[count] = "";
- l2[count] = "";
-}
-
-int GeneList(Handle * h, int nbcol, String * & l) {
- int nblig;
- list<String> result;
- String r;
- bool is_null;
-
- nblig = 0;
- while (1) {
- is_null = true;
- for (int i = 0; i < nbcol; i++) {
- (*h) >> r;
- result.push_back(r);
- if (r != "") is_null = false;
- }
- if (is_null) break;
- nblig++;
- }
-
- l = new String[nbcol * nblig + 1];
-
- for (int i = 0; i < (nbcol * nblig); i++) {
- r = result.front();
- result.pop_front();
- l[i] = r;
- }
-
- l[nbcol * nblig] = "";
-
- return nblig;
-}
+#include <list> +#include "Handle.h" +#include "String.h" + +void GeneDeroul(Handle * h, String * & l1, String * & l2) { + int count; + list<String> result; + String r1, r2; + + count = 0; + + while (1) { + (*h) >> r1; + (*h) >> r2; + if ((r1 == "") && (r2 == "")) break; + result.push_back(r1); + result.push_back(r2); + count++; + } + + l1 = new String[count + 1]; + l2 = new String[count + 1]; + + for (int i = 0; i < count; i++) { + r1 = result.front(); + result.pop_front(); + r2 = result.front(); + result.pop_front(); + l1[i] = r1; + l2[i] = r2; + } + + l1[count] = ""; + l2[count] = ""; +} + +int GeneList(Handle * h, int nbcol, String * & l) { + int nblig; + list<String> result; + String r; + bool is_null; + + nblig = 0; + while (1) { + is_null = true; + for (int i = 0; i < nbcol; i++) { + (*h) >> r; + result.push_back(r); + if (r != "") is_null = false; + } + if (is_null) break; + nblig++; + } + + l = new String[nbcol * nblig + 1]; + + for (int i = 0; i < (nbcol * nblig); i++) { + r = result.front(); + result.pop_front(); + l[i] = r; + } + + l[nbcol * nblig] = ""; + + return nblig; +} @@ -1,165 +1,165 @@ -#include <dirent.h>
-#include <unistd.h>
-#include <iostream.h>
-#include <list>
-#include <Main.h>
-#include <Input.h>
-#include <Output.h>
-#include <Regex.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef WORDS_BIGENDIAN
-#define SIGNATURE 0x4e504151
-#else
-#define SIGNATURE 0x5141504e
-#endif
-
-String current_dir;
-
-extern "C" int sortdir(const void * d1, const void * d2) {
- struct stat fstats1, fstats2;
- String n;
-
- n = current_dir + "/" + (**((const dirent **)d1)).d_name;
- stat(n.to_charp(), &fstats1);
-
- n = current_dir + "/" + (**((const dirent **)d2)).d_name;
- stat(n.to_charp(), &fstats2);
-
- if (!((S_ISDIR(fstats1.st_mode) ? 1 : 0) ^ (S_ISDIR(fstats2.st_mode) ? 1 : 0))) {
- return alphasort(d1, d2);
- } else {
- if (S_ISDIR(fstats1.st_mode))
- return -1;
- else
- return 1;
- }
-}
-
-CODE_BEGINS
-
-private:
-
-struct couple {
- String p, v;
-};
-
-Output * Archive;
-
-std::list<String> filelist;
-
-void finalize(void) {
- int size;
- Input * file;
- for (std::list<String>::iterator i = filelist.begin(); i != filelist.end(); i++) {
- cerr << "Finalize file " << *i << endl;
- file = new Input(*i);
- size = file->GetSize();
- Archive->writeU32(size);
- delete file;
- file = new Input(*i + ".gz");
- copy(file, Archive);
- delete file;
- unlink((*i + ".gz").to_charp());
- }
-}
-
-void process_file(const String & filename) {
- char t;
- int size, old_size;
- cerr << "Processing file " << filename << "... ";
-
- Input * from = new Input(filename);
- Output * to = new Output(filename + ".gz");
-
- to->SetZ();
-
- old_size = from->GetSize();
-
- copy(from, to);
-
- delete to;
- delete from;
-
- filelist.push_back(filename);
-
- from = new Input(filename + ".gz");
- size = from->GetSize() + 4;
- cerr << old_size << " --> " << from->GetSize() << " (" << 100 * from->GetSize() / old_size << "%)\n";
-
- Archive->writeU32(size);
-
- delete from;
-
- t = 0;
- Archive->writeU8(t);
-}
-
-void process_directory(const String & dirname) throw (GeneralException) {
- struct dirent ** namelist;
- int n, i;
- Uint32 t;
- struct stat fstats;
- String fname;
-
- current_dir = dirname;
- n = scandir(dirname.to_charp(), &namelist, NULL, sortdir);
- cerr << "Processing directory " << dirname << endl;
-
- if (n < 0) {
- throw GeneralException("Unable to open directory " + dirname);
- }
-
- for (i = 0; i < n; i++) {
- fname = dirname + "/" + namelist[i]->d_name;
- stat(fname.to_charp(), &fstats);
- if (S_ISDIR(fstats.st_mode)) {
- if (!Regex("^\\.{1,2}$").Match(namelist[i]->d_name)) {
- t = strlen(namelist[i]->d_name);
- Archive->writeU8(t);
- Archive->write(namelist[i]->d_name, t);
- t = 0;
- Archive->writeU32(t);
- t = 1;
- Archive->writeU8(t);
- process_directory(dirname + "/" + namelist[i]->d_name);
- }
- } else {
- if (!Regex("\\.gz$").Match(namelist[i]->d_name)) {
- t = strlen(namelist[i]->d_name);
- Archive->writeU8(t);
- Archive->write(namelist[i]->d_name, t);
- process_file(dirname + "/" + namelist[i]->d_name);
- }
- }
- free((void *)namelist[i]);
- }
-
- free((void *)namelist);
-
- t = 0;
- Archive->writeU8(t);
-}
-
-void build_archive(const String & dirname) {
- char buff[4];
-
- *((int *) buff) = SIGNATURE;
-
- Archive->write(buff, 4);
-
- process_directory(dirname);
-
- finalize();
-}
-
-public:
-
-virtual int startup(void) throw (GeneralException) {
- Archive = new Output("/tmp/bleh.paq");
- build_archive(".");
- return 0;
-}
-CODE_ENDS
+#include <dirent.h> +#include <unistd.h> +#include <iostream.h> +#include <list> +#include <Main.h> +#include <Input.h> +#include <Output.h> +#include <Regex.h> +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef WORDS_BIGENDIAN +#define SIGNATURE 0x4e504151 +#else +#define SIGNATURE 0x5141504e +#endif + +String current_dir; + +extern "C" int sortdir(const void * d1, const void * d2) { + struct stat fstats1, fstats2; + String n; + + n = current_dir + "/" + (**((const dirent **)d1)).d_name; + stat(n.to_charp(), &fstats1); + + n = current_dir + "/" + (**((const dirent **)d2)).d_name; + stat(n.to_charp(), &fstats2); + + if (!((S_ISDIR(fstats1.st_mode) ? 1 : 0) ^ (S_ISDIR(fstats2.st_mode) ? 1 : 0))) { + return alphasort(d1, d2); + } else { + if (S_ISDIR(fstats1.st_mode)) + return -1; + else + return 1; + } +} + +CODE_BEGINS + +private: + +struct couple { + String p, v; +}; + +Output * Archive; + +std::list<String> filelist; + +void finalize(void) { + int size; + Input * file; + for (std::list<String>::iterator i = filelist.begin(); i != filelist.end(); i++) { + cerr << "Finalize file " << *i << endl; + file = new Input(*i); + size = file->GetSize(); + Archive->writeU32(size); + delete file; + file = new Input(*i + ".gz"); + copy(file, Archive); + delete file; + unlink((*i + ".gz").to_charp()); + } +} + +void process_file(const String & filename) { + char t; + int size, old_size; + cerr << "Processing file " << filename << "... "; + + Input * from = new Input(filename); + Output * to = new Output(filename + ".gz"); + + to->SetZ(); + + old_size = from->GetSize(); + + copy(from, to); + + delete to; + delete from; + + filelist.push_back(filename); + + from = new Input(filename + ".gz"); + size = from->GetSize() + 4; + cerr << old_size << " --> " << from->GetSize() << " (" << 100 * from->GetSize() / old_size << "%)\n"; + + Archive->writeU32(size); + + delete from; + + t = 0; + Archive->writeU8(t); +} + +void process_directory(const String & dirname) throw (GeneralException) { + struct dirent ** namelist; + int n, i; + Uint32 t; + struct stat fstats; + String fname; + + current_dir = dirname; + n = scandir(dirname.to_charp(), &namelist, NULL, sortdir); + cerr << "Processing directory " << dirname << endl; + + if (n < 0) { + throw GeneralException("Unable to open directory " + dirname); + } + + for (i = 0; i < n; i++) { + fname = dirname + "/" + namelist[i]->d_name; + stat(fname.to_charp(), &fstats); + if (S_ISDIR(fstats.st_mode)) { + if (!Regex("^\\.{1,2}$").Match(namelist[i]->d_name)) { + t = strlen(namelist[i]->d_name); + Archive->writeU8(t); + Archive->write(namelist[i]->d_name, t); + t = 0; + Archive->writeU32(t); + t = 1; + Archive->writeU8(t); + process_directory(dirname + "/" + namelist[i]->d_name); + } + } else { + if (!Regex("\\.gz$").Match(namelist[i]->d_name)) { + t = strlen(namelist[i]->d_name); + Archive->writeU8(t); + Archive->write(namelist[i]->d_name, t); + process_file(dirname + "/" + namelist[i]->d_name); + } + } + free((void *)namelist[i]); + } + + free((void *)namelist); + + t = 0; + Archive->writeU8(t); +} + +void build_archive(const String & dirname) { + char buff[4]; + + *((int *) buff) = SIGNATURE; + + Archive->write(buff, 4); + + process_directory(dirname); + + finalize(); +} + +public: + +virtual int startup(void) throw (GeneralException) { + Archive = new Output("/tmp/bleh.paq"); + build_archive("."); + return 0; +} +CODE_ENDS |