*** empty log message ***
[h316.git] / pc-tools / ldc2 / src / tape_block.cpp
index 30f9819971a600528b7b68950a2ddcdd605c24d9..0d011ebb0392b59635a3becec22f5c71eb3776c6 100644 (file)
@@ -1,14 +1,27 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
-
-#include <string>
-#include <vector>
+#include <stdio.h>
 
 #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<string> tape_block:: get_description(){
-  char buffer[100];
-  sprintf(buffer,"           (%0o-%02o) Untyped tape block",
-         get_type(),get_subtype());
   vector<string> 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);
+}
 
 /***************************************************************/
 /*!