From 798b0c1d967a7d8ac3c7a867d41bfa7b8e824048 Mon Sep 17 00:00:00 2001 From: hachti Date: Mon, 20 Nov 2006 05:27:32 +0000 Subject: [PATCH] *** empty log message *** --- pc-tools/ldc2/src/argread.cpp | 136 ++++++++++++++++++++++++++ pc-tools/ldc2/src/argread.hh | 76 ++++++++++++++ pc-tools/ldc2/src/data_block_0_64.cpp | 21 ++++ pc-tools/ldc2/src/data_block_0_64.hh | 26 +++++ pc-tools/ldc2/src/data_block_1.cpp | 22 +++++ pc-tools/ldc2/src/data_block_1.hh | 26 +++++ pc-tools/ldc2/src/data_block_2.cpp | 21 ++++ pc-tools/ldc2/src/data_block_2.hh | 26 +++++ pc-tools/ldc2/src/data_block_3.cpp | 22 +++++ pc-tools/ldc2/src/data_block_3.hh | 26 +++++ pc-tools/ldc2/src/data_block_4.cpp | 22 +++++ pc-tools/ldc2/src/data_block_4.hh | 26 +++++ pc-tools/ldc2/src/data_block_5.cpp | 22 +++++ pc-tools/ldc2/src/data_block_5.hh | 26 +++++ pc-tools/ldc2/src/data_block_6.cpp | 22 +++++ pc-tools/ldc2/src/data_block_6.hh | 26 +++++ pc-tools/ldc2/src/data_block_7.cpp | 22 +++++ pc-tools/ldc2/src/data_block_7.hh | 26 +++++ pc-tools/ldc2/src/main.cpp | 45 +++++++-- 19 files changed, 632 insertions(+), 7 deletions(-) create mode 100644 pc-tools/ldc2/src/argread.cpp create mode 100644 pc-tools/ldc2/src/argread.hh create mode 100644 pc-tools/ldc2/src/data_block_0_64.cpp create mode 100644 pc-tools/ldc2/src/data_block_0_64.hh create mode 100644 pc-tools/ldc2/src/data_block_1.cpp create mode 100644 pc-tools/ldc2/src/data_block_1.hh create mode 100644 pc-tools/ldc2/src/data_block_2.cpp create mode 100644 pc-tools/ldc2/src/data_block_2.hh create mode 100644 pc-tools/ldc2/src/data_block_3.cpp create mode 100644 pc-tools/ldc2/src/data_block_3.hh create mode 100644 pc-tools/ldc2/src/data_block_4.cpp create mode 100644 pc-tools/ldc2/src/data_block_4.hh create mode 100644 pc-tools/ldc2/src/data_block_5.cpp create mode 100644 pc-tools/ldc2/src/data_block_5.hh create mode 100644 pc-tools/ldc2/src/data_block_6.cpp create mode 100644 pc-tools/ldc2/src/data_block_6.hh create mode 100644 pc-tools/ldc2/src/data_block_7.cpp create mode 100644 pc-tools/ldc2/src/data_block_7.hh diff --git a/pc-tools/ldc2/src/argread.cpp b/pc-tools/ldc2/src/argread.cpp new file mode 100644 index 0000000..116dbb8 --- /dev/null +++ b/pc-tools/ldc2/src/argread.cpp @@ -0,0 +1,136 @@ +#include "argread.hh" +#include + +argreader::argreader(string n_name){ + progname=n_name; +} + +void argreader::add_param (string shortname, string longname, + string description, int * status, + string * target, string placeholder){ + if (target!=NULL) if(status!=NULL) + arguments.insert(arguments.end(),parameter(shortname,longname,description,status,target,placeholder)); +} + +void argreader::add_free_param(string placeholder, string description, int * status, string * target){ + if (target!=NULL) if(status!=NULL) + free_arguments.insert(free_arguments.end(),free_parameter(placeholder,description,status,target)); +} + +vector argreader::read_args(int argc, char ** args){ + vector result; + vector argv; + for (char ** akt=args; *akt ;akt++) argv.insert(argv.end(),string(*akt)); + + unsigned int free_parms_count=0; + for (vector::iterator akt_p=argv.begin()+1;akt_psubstr(0,2)=="--")&&(free_parms_count==0)){ + int found=0; + for (vector::iterator parm_p=arguments.begin();parm_psubstr(2,parm_p->longname.length())==parm_p->longname){ + found=1; + *(parm_p->status)=1; + if (parm_p->target){ + if (akt_p->length()>2+parm_p->longname.length()){ + *(parm_p->target)=akt_p->substr(2+parm_p->longname.length()); + + } else // Word not long enough + if (akt_p+1status)=1; + *(parm_p->target)=*(++akt_p); + } else { // No next word :-( + result.insert(result.end(), + "Parameter --"+parm_p->longname+parm_p->placeholder+" needs an Argument!"); + } + } // arg needed + } + } // search for loop + if (!found) result.insert(result.end(),"Unknown parameter: "+*akt_p); + } else { // No -- param, now look for switches + if (((*akt_p)[0]=='-')&&(free_parms_count==0)){ + int stop_char_loop=0; + for (unsigned int pos=1; poslength()&& !stop_char_loop ;pos++){ + int found=0; + for (vector::iterator parm_p=arguments.begin();parm_pshortname[0]==(*akt_p)[pos]){ + found=1; + (*parm_p->status)=1; + if (parm_p->target){ // Need argument + if (akt_p->length()>pos+1){ + *(parm_p->target)=akt_p->substr(pos+1); + stop_char_loop=1; + } else { // Word not long enough + printf("s word next\n"); + if (akt_p+1target)=*(++akt_p); + stop_char_loop=1; + } else { // No next word :-( + result.insert(result.end(), + "Parameter --"+parm_p->longname+parm_p->placeholder+" needs an Argument!"); + } + } + } // arg needed + } //if match + } //args loop + if (!found) result.insert(result.end(),"Unknown switch: "+akt_p->substr(pos,1)); + } // char loop + }// switch found + else{ // no switch found + if (free_parms_countfree_arguments.size()) result.insert(result.begin(),"Too many arguments!"); + if (!result.empty()) get_help(result); + return result; +} + + +void argreader::get_help(vector & result){ + result.insert(result.end(),"Usage:"); + string line=" "+progname+" "; + for (vector::iterator parm_p=arguments.begin();parm_pshortname; + if (parm_p->target!=0) line+=parm_p->placeholder; + line+="] "; + } + result.insert(result.end(),line); +} + +vector argreader::get_help(){ + vector result; + get_help(result); + return result; +} + + +/**************************************************/ + +argreader::parameter::parameter(string n_shortname, string n_longname,string n_description, int * n_status, + string * n_target, string n_placeholder){ + shortname=n_shortname; + longname=n_longname; + description=n_description; + status=n_status; + target=n_target; + placeholder=n_placeholder; + if (status) *status=0; +} + +argreader::free_parameter::free_parameter( string n_placeholder, string n_description, + int * n_status, string * n_target){ + description=n_description; + status=n_status; + target=n_target; + placeholder=n_placeholder; + if (status) *status=0; +} + + + + diff --git a/pc-tools/ldc2/src/argread.hh b/pc-tools/ldc2/src/argread.hh new file mode 100644 index 0000000..7cd3aff --- /dev/null +++ b/pc-tools/ldc2/src/argread.hh @@ -0,0 +1,76 @@ +#ifndef ARGREAD_H +#define ARGREAD_H + +#include +#include + +using namespace std; + +#ifndef NULL +#define NULL (void*)0 +#endif + +class argreader{ +public: + argreader(string n_name); + + /*! + *\brief add a parameter to be looked for + *\param shortname A character for the short form. For example the 'h' in -h + *\param longname The double dash longname. For example 'input_file=' in --input_file= or + * 'ignore_errors' in --ignore--errors + *\param description A parameter description. + *\param status Pointer to an integer. Will be set to 1 if arg found. + *\target Pointer to a value should be read. If no value is needed, pass NULL. + *\placeholder A placeholder for the documentation. For example "" in -f + */ + void add_param (string shortname, string longname, string description, int * status, + string * target=NULL, string placeholder=string("")); + + /*! + * Read in the args passed to main(). + *\returns empty vector on success or the error messages to be output. + */ + vector read_args(int argc, char ** args); + + + vector & get_free_args(); + + void get_help(vector & ); + vector get_help(); + + void add_free_param(string placeholder, string description, int * status, string * target); + + + +private: + class parameter{ + public: + parameter (string shortname, string longname,string description, int * status, + string * target=NULL, string placeholder=string("")); + string shortname; + string longname; + int * status; + string * target; + string description; + string placeholder; + }; + + class free_parameter{ + public: + free_parameter (string placeholder,string description, + int * status, string * target); + int * status; + string * target; + string description; + string placeholder; + }; + + vectorarguments; + vectorfree_arguments; + + string progname; +}; + + +#endif diff --git a/pc-tools/ldc2/src/data_block_0_64.cpp b/pc-tools/ldc2/src/data_block_0_64.cpp new file mode 100644 index 0000000..629b034 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_0_64.cpp @@ -0,0 +1,21 @@ +#include "data_block_0_64.hh" + +#include + +/*! + *\brief Parent class copy constructor. + */ +data_block_0_64::data_block_0_64(data_block_0 & org) + :data_block_0(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_0_64::get_description(){ + vector result; + result.insert(result.end()," "+get_typestring()+"Set Base Sector"); + return result; +} + diff --git a/pc-tools/ldc2/src/data_block_0_64.hh b/pc-tools/ldc2/src/data_block_0_64.hh new file mode 100644 index 0000000..41b9f8f --- /dev/null +++ b/pc-tools/ldc2/src/data_block_0_64.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_0_64_H +#define DATA_BLOCK_0_64_H + +#include +#include + +#include "data_block_0.hh" + +/*! + *\brief Class for block type (0-0). + */ +class data_block_0_64 + : public data_block_0 +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +public: + vector get_description(); + +protected: + data_block_0_64(data_block_0&); + + +}; + +#endif diff --git a/pc-tools/ldc2/src/data_block_1.cpp b/pc-tools/ldc2/src/data_block_1.cpp new file mode 100644 index 0000000..b6b0efa --- /dev/null +++ b/pc-tools/ldc2/src/data_block_1.cpp @@ -0,0 +1,22 @@ +#include "data_block_1.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_1::data_block_1(data_block & org) + :data_block(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_1::get_description(){ + vector result; + result.insert(result.end()," "+get_typestring()+"Absolute program words"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_1.hh b/pc-tools/ldc2/src/data_block_1.hh new file mode 100644 index 0000000..b1b1c9b --- /dev/null +++ b/pc-tools/ldc2/src/data_block_1.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_1_H +#define DATA_BLOCK_1_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (1). + */ +class data_block_1 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_1(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/data_block_2.cpp b/pc-tools/ldc2/src/data_block_2.cpp new file mode 100644 index 0000000..8fad9ee --- /dev/null +++ b/pc-tools/ldc2/src/data_block_2.cpp @@ -0,0 +1,21 @@ +#include "data_block_2.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_2::data_block_2(data_block & org) + :data_block(org){} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_2::get_description(){ + vector result; + result.insert(result.end()," "+get_typestring()+"Relative program words"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_2.hh b/pc-tools/ldc2/src/data_block_2.hh new file mode 100644 index 0000000..2c8b919 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_2.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_2_H +#define DATA_BLOCK_2_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (2). + */ +class data_block_2 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_2(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/data_block_3.cpp b/pc-tools/ldc2/src/data_block_3.cpp new file mode 100644 index 0000000..3ae67a9 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_3.cpp @@ -0,0 +1,22 @@ +#include "data_block_3.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_3::data_block_3(data_block & org) + :data_block(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_3::get_description(){ + vector result; + result.insert(result.end()," "+get_typestring()+"End Jump, absolute address"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_3.hh b/pc-tools/ldc2/src/data_block_3.hh new file mode 100644 index 0000000..7a5b902 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_3.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_3_H +#define DATA_BLOCK_3_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (3). + */ +class data_block_3 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_3(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/data_block_4.cpp b/pc-tools/ldc2/src/data_block_4.cpp new file mode 100644 index 0000000..b325ed7 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_4.cpp @@ -0,0 +1,22 @@ +#include "data_block_4.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_4::data_block_4(data_block & org) + :data_block(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_4::get_description(){ + vector result; + result.insert(result.end()," "+get_typestring()+"End Jump, relative address"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_4.hh b/pc-tools/ldc2/src/data_block_4.hh new file mode 100644 index 0000000..702f33d --- /dev/null +++ b/pc-tools/ldc2/src/data_block_4.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_4_H +#define DATA_BLOCK_4_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (4). + */ +class data_block_4 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_4(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/data_block_5.cpp b/pc-tools/ldc2/src/data_block_5.cpp new file mode 100644 index 0000000..408759a --- /dev/null +++ b/pc-tools/ldc2/src/data_block_5.cpp @@ -0,0 +1,22 @@ +#include "data_block_5.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_5::data_block_5(data_block & org) + :data_block(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_5::get_description(){ + vector result; + result.insert(result.end(),extract_label(3)+" "+get_typestring()+"Subroutine call"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_5.hh b/pc-tools/ldc2/src/data_block_5.hh new file mode 100644 index 0000000..83faa06 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_5.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_5_H +#define DATA_BLOCK_5_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (5). + */ +class data_block_5 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_5(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/data_block_6.cpp b/pc-tools/ldc2/src/data_block_6.cpp new file mode 100644 index 0000000..f4124af --- /dev/null +++ b/pc-tools/ldc2/src/data_block_6.cpp @@ -0,0 +1,22 @@ +#include "data_block_6.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_6::data_block_6(data_block & org) + :data_block(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_6::get_description(){ + vector result; + result.insert(result.end(),extract_label(3)+" "+get_typestring()+"Subroutine or Common Block Definition"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_6.hh b/pc-tools/ldc2/src/data_block_6.hh new file mode 100644 index 0000000..4d5afbe --- /dev/null +++ b/pc-tools/ldc2/src/data_block_6.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_6_H +#define DATA_BLOCK_6_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (6). + */ +class data_block_6 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_6(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/data_block_7.cpp b/pc-tools/ldc2/src/data_block_7.cpp new file mode 100644 index 0000000..9481bee --- /dev/null +++ b/pc-tools/ldc2/src/data_block_7.cpp @@ -0,0 +1,22 @@ +#include "data_block_7.hh" + +/*! + *\brief Specialisation constructor. + */ +data_block_7::data_block_7(data_block & org) + :data_block(org) +{} + +/*! + *\brief Describe the block. + *\return A vector of text lines describing this block. + */ +vector data_block_7::get_description(){ + vector result; + result.insert(result.end(),extract_label(3)+" "+get_typestring()+"Reference to Item In Common"); + return result; +} + + + + diff --git a/pc-tools/ldc2/src/data_block_7.hh b/pc-tools/ldc2/src/data_block_7.hh new file mode 100644 index 0000000..59446f8 --- /dev/null +++ b/pc-tools/ldc2/src/data_block_7.hh @@ -0,0 +1,26 @@ +#ifndef DATA_BLOCK_7_H +#define DATA_BLOCK_7_H + +#include +#include + +#include "data_block.hh" + +/*! + *\brief Class for block type (7). + */ +class data_block_7 + : public data_block +{ + friend tape_block * tape_block::gen_from_fd(int,void(*)(void*), + void(*)(void*),void*); +protected: + data_block_7(data_block&); + +public: + vector get_description(); +}; + +#endif + + diff --git a/pc-tools/ldc2/src/main.cpp b/pc-tools/ldc2/src/main.cpp index e8f6092..f827410 100644 --- a/pc-tools/ldc2/src/main.cpp +++ b/pc-tools/ldc2/src/main.cpp @@ -1,16 +1,18 @@ -/* -$Id: main.cpp,v 1.3 2006/11/20 01:19:48 hachti Exp $ -$Log: main.cpp,v $ -Revision 1.3 2006/11/20 01:19:48 hachti -Another revision +/* ldc2 preliminary main program */ + +#include +#include -*/ #include #include #include "tape_block.hh" #include "data_block.hh" +#include "argread.hh" + +using namespace std; + void tape_start(void* m){ printf("tape_start\n"); } @@ -19,7 +21,35 @@ void tape_stop(void* m){ printf("tape_stop\n"); } -int main(){ + + + +void dump_vector(vector arguments){ + for (vector::iterator iter=arguments.begin();iter"); + ar.add_param("h","help","Give help",&help_needed); + ar.add_free_param("","File to read data from",&file_set,&filename); + + + + dump_vector(ar.read_args(argc,args)); + + if (help_needed==1) dump_vector(ar.get_help()); + + printf("Hallo %s!\n",name.c_str()); + exit(0); tape_block * myblock=0; do{ if (myblock) delete myblock; @@ -32,3 +62,4 @@ int main(){ } while (myblock->get_state()==tape_block::TBS_OK); return 0; } + -- 2.32.0