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 if ((init_state
==TBS_OK
)&&word_data
)
24 return (word_data
[0]&0xf000)>>12;
30 *\brief Get the block's size in 16 bit words.
31 *\return The block's 16-bit data buffer's size including
32 * header and checksum.
34 int data_block::get_word_size(){
39 *\brief Describe the block.
40 *\return A vector of text lines describing this block.
42 vector
<string
> data_block::get_description(){
43 vector
<string
> result
;
44 string r_string
="***** "+get_typestring()+"Untyped data block, this \
45 is an illegal condition!";
46 result
.insert(result
.end(),r_string
);
51 *\brief Extract 6 byte symbol name from word memory.
53 *\param firstbyte the first byte of the desired symbol name
54 *\return a string containing the symbol name.
55 * Trailing spaces are included.
56 *\note The word_data is handled system-intependently big endian!
58 string
data_block::extract_label(int firstbyte
){
59 string result
=""; // Start with empty string
61 // We don't accept negative arguments!
62 if (firstbyte
<0) return result
;
64 // We also don't want segmentation faults!
65 if (word_size
<(firstbyte
/2+1)) return result
;
67 // Here we pick out the characters.
68 for (int posi
=firstbyte
;posi
<firstbyte
+6;posi
++)
69 result
+=(word_data
[posi
/2]>>(8*(1-posi
%2)))&0x7f;