e5d7c000e7fdae467639804a31264fe68a9c7b6c
[h316.git] / pc-tools / ldc2 / src / data_block.cpp
1 #include <stdlib.h>
2 #include <string.h>
3
4 #include "data_block.hh"
5 #include "data_block_0.hh"
6
7 #include <stdio.h>
8
9 using namespace std;
10
11 /*!
12 *\brief Specialisation constructor.
13 */
14 data_block::data_block(tape_block& org)
15 :tape_block(org)
16 {}
17
18 /*!
19 *\brief Determine block type.
20 *\return the block type extracted from the block's data.
21 */
22 int data_block::get_type(){
23 if ((init_state==TBS_OK)&&word_data)
24 return (word_data[0]&0xf000)>>12;
25 else
26 return block_type;
27 }
28
29 /*!
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.
33 */
34 int data_block::get_word_size(){
35 return word_size;
36 }
37
38 /*!
39 *\brief Describe the block.
40 *\return A vector of text lines describing this block.
41 */
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);
47 return result;
48 }
49
50 /*!
51 *\brief Determine if the block marks the end of an object
52 *\retval true The block marks the end of an object.
53 *\retval false The block does not mark the end of an object.
54 */
55 bool data_block::get_obj_end(){
56 return false;
57 }
58
59 /*!
60 *\brief Extract 6 byte symbol name from word memory.
61 *
62 *\param firstbyte the first byte of the desired symbol name
63 *\return a string containing the symbol name.
64 * Trailing spaces are included.
65 *\note The word_data is handled system-intependently big endian!
66 */
67 string data_block::extract_label(int firstbyte){
68 string result=""; // Start with empty string
69
70 // We don't accept negative arguments!
71 if (firstbyte<0) return result;
72
73 // We also don't want segmentation faults!
74 if (word_size<(firstbyte/2+1)) return result;
75
76 // Here we pick out the characters.
77 for (int posi=firstbyte;posi<firstbyte+6;posi++)
78 result+=(word_data[posi/2]>>(8*(1-posi%2)))&0x7f;
79 return result;
80 }
81