4 #include "data_block.hh"
5 #include "data_block_0.hh"
12 *\brief Specialisation constructor.
14 data_block::data_block(tape_block
& org
)
19 *\brief Determine block type.
20 *\return the block type extracted from the block's data.
22 int data_block::get_type(){
23 return (word_data
[0]&0xf000)>>12;
27 *\brief Get the block's size in 16 bit words.
28 *\return The block's 16-bit data buffer's size including
29 * header and checksum.
31 int data_block::get_word_size(){
36 *\brief Describe the block.
37 *\return A vector of text lines describing this block.
39 vector
<string
> data_block::get_description(){
40 vector
<string
> result
;
41 string r_string
="***** "+get_typestring()+"Untyped data block, this \
42 is an illegal condition!";
43 result
.insert(result
.end(),r_string
);
48 *\brief Determine if the block marks the end of an object
49 *\retval true The block marks the end of an object.
50 *\retval false The block does not mark the end of an object.
52 bool data_block::get_obj_end(){
57 *\brief Extract 6 byte symbol name from word memory.
59 *\param firstbyte the first byte of the desired symbol name
60 *\return a string containing the symbol name.
61 * Trailing spaces are included.
62 *\note The word_data is handled system-intependently big endian!
64 string
data_block::extract_label(int firstbyte
){
65 string result
=""; // Start with empty string
67 // We don't accept negative arguments!
68 if (firstbyte
<0) return result
;
70 // We also don't want segmentation faults!
71 if (word_size
<(firstbyte
/2+1)) return result
;
73 // Here we pick out the characters.
74 for (int posi
=firstbyte
;posi
<firstbyte
+6;posi
++)
75 result
+=(word_data
[posi
/2]>>(8*(1-posi
%2)))&0x7f;