00001 /********************************************************************** 00002 * File: legoJump.H 00003 * 00004 * Designer: Willie Glover 00005 * 00006 * Description: legoJump is the LEGO IR jump table structure. 00007 * 00008 * 4/8/97 WAH: Fixed destructors. 00009 * 7/29/97 WAH: Added isDefault field and associated methods to 00010 * jumpList. 00011 * 1/9/98 WAH: Fixed SetTableName to handle NULL. 00012 **********************************************************************/ 00013 #ifndef LEGOJUMP_H 00014 #define LEGOJUMP_H 00015 00016 class jumpList; 00017 00018 class jumpTable { 00019 int tableId; 00020 char *tableName; 00021 int entries; 00022 int reserve; 00023 int align; 00024 jumpList *jumpEntryPtr; 00025 jumpTable *nextTablePtr; 00026 00027 public: 00028 jumpTable() 00029 { 00030 // fprintf(stderr,"Creating JUMPTABLE %p\n",this); 00031 tableId = 0; // undefined 00032 tableName = NULL; 00033 entries = 0; // default value 00034 reserve = 0; // default value 00035 align = 0; // undefined 00036 jumpEntryPtr = NULL; 00037 nextTablePtr = NULL; 00038 } 00039 ~jumpTable(void) 00040 { 00041 delete[] tableName; 00042 jumpTable* tmpTablePtr; 00043 while (nextTablePtr != NULL) { 00044 tmpTablePtr = nextTablePtr; 00045 nextTablePtr = tmpTablePtr->nextTablePtr; 00046 tmpTablePtr->nextTablePtr = NULL; 00047 delete tmpTablePtr; 00048 } 00049 // fprintf(stderr,"Deleting JUMPTABLE %p\n",this); 00050 } 00051 00052 /*------------------------------------------------------- 00053 * Get table ID 00054 *-------------------------------------------------------*/ 00055 int GetTableId(void) { return tableId; } 00056 00057 /*------------------------------------------------------- 00058 * Get jump table name 00059 *-------------------------------------------------------*/ 00060 char *GetTableName(void) { return tableName; } 00061 00062 /*------------------------------------------------------- 00063 * Get number of entries in table 00064 *-------------------------------------------------------*/ 00065 int GetEntries(void) { return entries; } 00066 00067 /*------------------------------------------------------- 00068 * Get total number of bytes reserved for table 00069 *-------------------------------------------------------*/ 00070 int GetReserve(void) { return reserve; } 00071 00072 /*------------------------------------------------------- 00073 * Get address alignment 00074 *-------------------------------------------------------*/ 00075 int GetAlign(void) { return align; } 00076 00077 /*------------------------------------------------------- 00078 * Get pointer to jump table entries 00079 *-------------------------------------------------------*/ 00080 jumpList *GetJumpEntryPtr(void) { return jumpEntryPtr; } 00081 00082 /*------------------------------------------------------- 00083 * Get pointer to next jump table 00084 *-------------------------------------------------------*/ 00085 jumpTable *GetNextTablePtr(void) { return nextTablePtr; } 00086 00087 /*------------------------------------------------------- 00088 * Update table ID 00089 *-------------------------------------------------------*/ 00090 void SetTableId(int newTableId) { tableId = newTableId; } 00091 00092 /*------------------------------------------------------- 00093 * Update jump table name 00094 *-------------------------------------------------------*/ 00095 void SetTableName(char *newName) 00096 { 00097 delete[] tableName; 00098 if (newName != NULL) 00099 { 00100 tableName = new char[strlen(newName)+1]; 00101 (void)strcpy(tableName,newName); 00102 } // end if 00103 else tableName = NULL; 00104 } 00105 00106 /*------------------------------------------------------- 00107 * Update number of entries in table 00108 *-------------------------------------------------------*/ 00109 void SetEntries(int newEntries) { entries = newEntries; } 00110 00111 /*------------------------------------------------------- 00112 * Update total number of bytes reserved for table 00113 *-------------------------------------------------------*/ 00114 void SetReserve(int newReserve) { reserve = newReserve; } 00115 00116 /*------------------------------------------------------- 00117 * Update address alignment 00118 *-------------------------------------------------------*/ 00119 void SetAlign(int newAlign) { align = newAlign; } 00120 00121 /*------------------------------------------------------- 00122 * Update pointer to jump table entries 00123 *-------------------------------------------------------*/ 00124 void SetJumpEntryPtr(jumpList* newPtr) { jumpEntryPtr = newPtr; } 00125 00126 /*------------------------------------------------------- 00127 * Update pointer to next jump table 00128 *-------------------------------------------------------*/ 00129 void SetNextTablePtr(jumpTable* newPtr) { nextTablePtr = newPtr; } 00130 00131 }; 00132 // --------------------------------------------------------------------------- 00133 00134 class jumpList { 00135 int offset; // address offset into table 00136 int ccValue; // either 0 for DFLT, or value 00137 int isDefault; // 1 if DFLT case, 0 otherwise 00138 int opId; // op ID 00139 legoOp* opPtr; // pointer to op (for op ID above) 00140 jumpList *nextListPtr; // pointer to next entry in list 00141 00142 public: 00143 jumpList() 00144 { 00145 // fprintf(stderr,"Creating JUMPLIST %p\n",this); 00146 offset = 0; // default value 00147 ccValue = 0; // default value 00148 isDefault = 0; // default value 00149 opId = 0; // default value 00150 opPtr = NULL; 00151 nextListPtr = NULL; 00152 } 00153 ~jumpList(void) 00154 { 00155 jumpList* tmpListPtr; 00156 while (nextListPtr != NULL) { 00157 tmpListPtr = nextListPtr; 00158 nextListPtr = tmpListPtr->GetNextListPtr(); 00159 tmpListPtr->nextListPtr = NULL; 00160 delete tmpListPtr; 00161 } 00162 // fprintf(stderr,"Deleting JUMPLIST %p\n",this); 00163 } 00164 00165 /*------------------------------------------------------- 00166 * Get offset 00167 *-------------------------------------------------------*/ 00168 int GetOffset(void) { return offset; } 00169 00170 /*------------------------------------------------------- 00171 * Get ccValue 00172 *-------------------------------------------------------*/ 00173 int GetCcValue(void) { return ccValue; } 00174 00175 /*------------------------------------------------------- 00176 * Get isDefault 00177 *-------------------------------------------------------*/ 00178 int IsDefault(void) { return isDefault; } 00179 00180 /*------------------------------------------------------- 00181 * Get op ID 00182 *-------------------------------------------------------*/ 00183 int GetOpId(void) { return opId; } 00184 00185 /*------------------------------------------------------- 00186 * Get op pointer 00187 *-------------------------------------------------------*/ 00188 legoOp *GetOpPtr(void) { return opPtr; } 00189 00190 /*------------------------------------------------------- 00191 * Get pointer to next jump table entry 00192 *-------------------------------------------------------*/ 00193 jumpList *GetNextListPtr(void) { return nextListPtr; } 00194 00195 /*------------------------------------------------------- 00196 * Update offset 00197 *-------------------------------------------------------*/ 00198 void SetOffset(int newOffset) { offset = newOffset; } 00199 00200 /*------------------------------------------------------- 00201 * Update ccValue 00202 *-------------------------------------------------------*/ 00203 void SetCcValue(int newCcValue) { ccValue = newCcValue; } 00204 00205 /*------------------------------------------------------- 00206 * Update isDefault 00207 *-------------------------------------------------------*/ 00208 void SetIsDefault(int newIsDefault) { isDefault = newIsDefault; } 00209 00210 /*------------------------------------------------------- 00211 * Update op ID 00212 *-------------------------------------------------------*/ 00213 void SetOpId(int newOpId) { opId = newOpId; } 00214 00215 /*------------------------------------------------------- 00216 * Update op pointer 00217 *-------------------------------------------------------*/ 00218 void SetOpPtr(legoOp *newOpPtr) { opPtr = newOpPtr; } 00219 00220 /*------------------------------------------------------- 00221 * Update pointer to next jump table entry 00222 *-------------------------------------------------------*/ 00223 void SetNextListPtr(jumpList *newListPtr) 00224 { nextListPtr = newListPtr; } 00225 00226 }; 00227 // -------------------------------------------------------------- 00228 #endif // LEGOJUMP_H 00229 00230 00231
1.3.2