X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;ds=sidebyside;f=pc-tools%2Fldc2%2Fsrc%2Ftape_block.cpp;h=0d011ebb0392b59635a3becec22f5c71eb3776c6;hb=09cb0f4f1082875e0e87d169c0cd373a7d3f9d80;hp=30f9819971a600528b7b68950a2ddcdd605c24d9;hpb=6c06db96fb1c7482f8cb7e1d14eee91603fbb894;p=h316.git diff --git a/pc-tools/ldc2/src/tape_block.cpp b/pc-tools/ldc2/src/tape_block.cpp index 30f9819..0d011eb 100644 --- a/pc-tools/ldc2/src/tape_block.cpp +++ b/pc-tools/ldc2/src/tape_block.cpp @@ -1,14 +1,27 @@ #include #include #include - -#include -#include +#include #include "tape_block.hh" #include "data_block.hh" #include "data_block_0.hh" +#include "data_block_0_0.hh" +#include "data_block_0_1.hh" +#include "data_block_0_2.hh" +#include "data_block_0_3.hh" +#include "data_block_0_4.hh" +#include "data_block_0_10.hh" +#include "data_block_0_14.hh" +#include "data_block_0_24.hh" +#include "data_block_0_44.hh" +#include "data_block_0_30.hh" +#include "data_block_0_54.hh" +#include "data_block_0_60.hh" +#include "data_block_0_50.hh" +#include "eot_block.hh" +#include "discard_block.hh" #include "silent_code.hh" #include "hw_constants.hh" @@ -101,11 +114,9 @@ int tape_block::get_subtype(){ *\return ldc style descriptive line for the block */ vector tape_block:: get_description(){ - char buffer[100]; - sprintf(buffer," (%0o-%02o) Untyped tape block", - get_type(),get_subtype()); vector result; - result.insert(result.end(),buffer); + result.insert(result.end(), + "***** "+get_typestring()+"Untyped tape block"); return result; } @@ -135,7 +146,7 @@ unsigned char * tape_block::get_raw_data(){ *\brief Static factory method with file descriptor support. * * This method creates a tape_block by using the private - * constructor with file descriptor support.\t + * constructor with file descriptor support.\n * It always returns a valid pointer, errors * or exceptional conditions during creation are marked in the * object's state.\n @@ -147,30 +158,31 @@ unsigned char * tape_block::get_raw_data(){ * This allows for easy use of the object using it's virtual * interface methods or a cast of the pointer to a sub type pointer * according to the type information, and then using the subtype's - * methods not already present in tape_block.\t - * Objects of the following subclasses are automagically generated:\t + * methods not already present in tape_block.\n + * Objects of the following subclasses are automagically generated:\n * - eot_block + * - discard_block * - data_block - * -data_block_0 - * -data_block_0_0 - * -data_block_0_1 - * -data_block_0_2 - * -data_block_0_3 - * -data_block_0_4 - * -data_block_0_10 - * -data_block_0_14 - * -data_block_0_24 - * -data_block_0_30 - * -data_block_0_50 - * -data_block_0_54 - * -data_block_0_60 - * -data_block_1 - * -data_block_2 - * -data_block_3 - * -data_block_4 - * -data_block_5 - * -data_block_6 - * -data_block_7 + * - data_block_0 + * - data_block_0_0 + * - data_block_0_1 + * - data_block_0_2 + * - data_block_0_3 + * - data_block_0_4 + * - data_block_0_10 + * - data_block_0_14 + * - data_block_0_24 + * - data_block_0_30 + * - data_block_0_50 + * - data_block_0_54 + * - data_block_0_60 + * - data_block_1 + * - data_block_2 + * - data_block_3 + * - data_block_4 + * - data_block_5 + * - data_block_6 + * - data_block_7 * *\return Pointer to an object of type tape_block or a subclass. *\param fd A file descriptor where the read is taken from. @@ -189,9 +201,11 @@ tape_block * tape_block::gen_from_fd(int fd, { tape_block * res_block; res_block=new tape_block(fd,input_start,input_stop,start_stop_arg); - data_block * d_block; - data_block_0 * d0_block; - + data_block * d_block; + data_block_0 * d0_block; + eot_block * e_block; + discard_block * di_block; + // Retype to data_block if possible switch(res_block->get_type()){ case tape_block::TBT_DATA: // Make pointer a data block @@ -199,6 +213,16 @@ tape_block * tape_block::gen_from_fd(int fd, delete res_block; res_block=d_block; break; + case tape_block::TBT_EOT: + e_block=new eot_block(*res_block); + delete res_block; + res_block=e_block; + break; + case tape_block::TBT_DISCARD: + di_block=new discard_block(*res_block); + delete res_block; + res_block=di_block; + break; default: // All other cases return res_block; } @@ -224,18 +248,19 @@ tape_block * tape_block::gen_from_fd(int fd, res_block=d_block; if (res_block->get_type()==0) switch(d0_block->get_subtype()){ -// case 000: d0_block=new data_block_0_00(d0_block); break; -// case 001: d0_block=new data_block_0_01(d0_block); break; -// case 002: d0_block=new data_block_0_02(d0_block); break; -// case 003: d0_block=new data_block_0_03(d0_block); break; -// case 004: d0_block=new data_block_0_04(d0_block); break; -// case 010: d0_block=new data_block_0_10(d0_block); break; -// case 014: d0_block=new data_block_0_14(d0_block); break; -// case 024: d0_block=new data_block_0_24(d0_block); break; -// case 030: d0_block=new data_block_0_30(d0_block); break; -// case 054: d0_block=new data_block_0_54(d0_block); break; -// case 060: d0_block=new data_block_0_60(d0_block); break; -// case 060: d0_block=new data_block_0_50(d0_block); break; + case 000: d0_block=new data_block_0_0(*d0_block); break; + case 001: d0_block=new data_block_0_1(*d0_block); break; + case 002: d0_block=new data_block_0_2(*d0_block); break; + case 003: d0_block=new data_block_0_3(*d0_block); break; + case 004: d0_block=new data_block_0_4(*d0_block); break; + case 010: d0_block=new data_block_0_10(*d0_block); break; + case 014: d0_block=new data_block_0_14(*d0_block); break; + case 024: d0_block=new data_block_0_24(*d0_block); break; + case 044: d0_block=new data_block_0_44(*d0_block); break; + case 030: d0_block=new data_block_0_30(*d0_block); break; + case 054: d0_block=new data_block_0_54(*d0_block); break; + case 060: d0_block=new data_block_0_60(*d0_block); break; + case 050: d0_block=new data_block_0_50(*d0_block); break; default: return res_block; } @@ -251,6 +276,20 @@ tape_block * tape_block::gen_from_fd(int fd, */ tape_block::tape_block(){} +/***************************************************************/ +/*! + *\brief get a short type description string. + *\return A small string to be used in description methods. + * + * The string is always 19 characters long.\n + * An example is "(99-99) ". + */ +string tape_block::get_typestring(){ + char buffer[13]; + sprintf(buffer,"(%o-%o) ",get_type(),get_subtype()); + buffer[10]=0; + return string(buffer); +} /***************************************************************/ /*!