1 /********************************************************************** 2 Copyright (c) 2000, 2002 IBM Corp. and others. 3 All rights reserved. This program and the accompanying materials 4 are made available under the terms of the Common Public License v1.0 5 which accompanies this distribution, and is available at 6 http://www.eclipse.org/legal/cpl-v10.html 7 8 Contributors: 9 Vicente Fernando - www.alfersoft.com.ar - Initial implementation 10 **********************************************************************/ 11 package net.sourceforge.phpdt.internal.debug.core; 12 13 public class PHPDBGBase { 14 15 // Constants 16 // php-engine commands/events 17 public static final int DBGC_REPLY = 0x0000; // reply to previous DBGA_REQUEST request 18 public static final int DBGC_STARTUP = 0x0001; // script startup 19 public static final int DBGC_END = 0x0002; // script done 20 public static final int DBGC_BREAKPOINT = 0x0003; // user definded breakpoint occured 21 public static final int DBGC_STEPINTO_DONE = 0x0004; // step to the next statement is completed 22 public static final int DBGC_STEPOVER_DONE = 0x0005; // step to the next statement is completed 23 public static final int DBGC_STEPOUT_DONE = 0x0006; // step to the next statement is completed 24 public static final int DBGC_EMBEDDED_BREAK = 0x0007; // breakpoint caused by DebugBreak() function 25 public static final int DBGC_ERROR = 0x0010; // error occured 26 public static final int DBGC_LOG = 0x0011; // logging support 27 public static final int DBGC_SID = 0x0012; // send SID 28 public static final int DBGC_PAUSE = 0x0013; // pause current session as soon as possible 29 30 public static final char[] DBGA_CONTINUE = IntToChar4(0x8001); // php should continue run 31 public static final char[] DBGA_STOP = IntToChar4(0x8002); 32 public static final char[] DBGA_STEPINTO = IntToChar4(0x8003); 33 public static final char[] DBGA_STEPOVER = IntToChar4(0x8004); 34 public static final char[] DBGA_STEPOUT = IntToChar4(0x8005); 35 public static final char[] DBGA_IGNORE = IntToChar4(0x8006); 36 public static final char[] DBGA_REQUEST = IntToChar4(0x8010); // debugger client requests some information from PHP engine 37 38 public static final int FRAME_STACK = 100000; // "call:stack" - e.g. backtrace 39 public static final int FRAME_SOURCE = 100100; // source text 40 public static final int FRAME_SRC_TREE = 100200; // tree of source files 41 public static final int FRAME_RAWDATA = 100300; // raw data or string 42 public static final int FRAME_ERROR = 100400; // error notification 43 public static final int FRAME_EVAL = 100500; // evaluating/watching 44 public static final int FRAME_BPS = 100600; // set/remove breakpoint 45 public static final int FRAME_BPL = 100700; // breakpoint(s) request = get the list 46 public static final int FRAME_VER = 100800; // version request 47 public static final int FRAME_SID = 100900; // session id info 48 public static final int FRAME_SRCLINESINFO = 101000; // source lines info 49 public static final int FRAME_SRCCTXINFO = 101100; // source contexts info 50 public static final int FRAME_LOG = 101200; // logging 51 public static final int FRAME_PROF = 101300; // profiler 52 public static final int FRAME_PROF_C = 101400; // profiler counter/accuracy 53 public static final int FRAME_SET_OPT = 101500; // set/update options 54 55 public static final int CURLOC_SCOPE_ID = 1; // nested locations are 2,3... and so on in backward order, 56 // so 2 represents most out-standing stack context 57 public static final int GLOBAL_SCOPE_ID = -1; // it is global context, not stacked 58 59 public static final char[] DBGSYNC = { 0, 0, (char) 89, (char) 83 }; // DBG syncronization chars 60 61 // Session Types 62 public static final int DBG_COMPAT = 0x0001; 63 public static final int DBG_JIT = 0x0002; 64 public static final int DBG_REQ = 0x0003; 65 public static final int DBG_EMB = 0x0004; 66 67 public static final int BPS_DELETED = 0; 68 public static final int BPS_DISABLED = 1; 69 public static final int BPS_ENABLED = 2; 70 public static final int BPS_UNRESOLVED = 0x100; 71 72 public static final int E_ERROR = (1<<0L); 73 public static final int E_WARNING = (1<<1L); 74 public static final int E_PARSE = (1<<2L); 75 public static final int E_NOTICE = (1<<3L); 76 public static final int E_CORE_ERROR = (1<<4L); 77 public static final int E_CORE_WARNING = (1<<5L); 78 public static final int E_COMPILE_ERROR = (1<<6L); 79 public static final int E_COMPILE_WARNING = (1<<7L); 80 public static final int E_USER_ERROR = (1<<8L); 81 public static final int E_USER_WARNING = (1<<9L); 82 public static final int E_USER_NOTICE = (1<<10L); 83 PHPDBGBase()84 public PHPDBGBase() { 85 } 86 87 88 /** 89 * Copies the number of bytes from a source buffer to a destination buffer 90 * Destination index starts with 0 + tostart, 91 * and source index starts with 0. 92 * 93 * @param to The destination buffer. 94 * @param from The source buffer. 95 * @param bytes The number of bytes which are to copy. 96 * @param tostart The start index for the destination buffer. 97 */ copyCharsTo(char[] to, char[] from, int bytes, int tostart)98 public static void copyCharsTo (char[] to, char[] from, int bytes, int tostart) { 99 int i; 100 101 for (i = 0; i < bytes; i++) { // For the number of bytes which are to copy 102 to[i + tostart] = from[i]; // Copy from destination to source (+startindex) 103 } 104 } 105 106 /** 107 * Copies the number of bytes from a source buffer to a destination buffer 108 * Destination index starts with 0, 109 * and source index starts with 0. 110 * 111 * @param to The destination buffer. 112 * @param from The source buffer. 113 * @param bytes The number of bytes which are to copy. 114 */ copyChars(char[] to, char[] from, int bytes)115 public static void copyChars (char[] to, char[] from, int bytes) { 116 copyCharsTo (to, from, bytes, 0); 117 } 118 119 /** 120 * Converts a four chars big endian value into 121 * an integer value 122 * 123 * @param ch The buffer which contains the four chars which are to convert. 124 * @param startPos The start position (of the four bytes) within the buffer. 125 */ Char4ToInt(char[] ch, int startPos)126 public static int Char4ToInt (char[] ch, int startPos) { 127 int pos = startPos; 128 int ret = 0; 129 130 ret += CharToInt (ch[pos++]) << 24; 131 ret += CharToInt (ch[pos++]) << 16; 132 ret += CharToInt (ch[pos++]) << 8; 133 ret += CharToInt (ch[pos++]) << 0; 134 135 return ret; 136 } 137 138 /** 139 * @return The character which is converted to an integer value. 140 */ CharToInt(char ch)141 public static int CharToInt (char ch) { 142 return (int) (ch & 0x00FF); 143 } 144 145 /** 146 * Converts an integer value into a four char big endian number 147 * 148 * @param num The integer value which is to convert to a four char big endian number. 149 * @return The four byte buffer with the big endian number. 150 */ IntToChar4(int num)151 public static char[] IntToChar4 (int num) { 152 char[] ret = new char[4]; 153 154 ret[0] = (char) ((num >> 24) & 0x00FF); 155 ret[1] = (char) ((num >> 16) & 0x00FF); 156 ret[2] = (char) ((num >> 8) & 0x00FF); 157 ret[3] = (char) ((num >> 0) & 0x00FF); 158 159 return ret; 160 } 161 162 /** 163 * Converts the chars of an array into a string in form of 164 * (byte value string) (byte value string) (byte value string) ... 165 * 166 * @param cha The input buffer which contains the chars which are to convert. 167 * @return The string which contains the bytes as strings. 168 * E.g.: (123) (11) (46) (213) ... 169 */ CharArrayToString(char[] cha)170 public static String CharArrayToString (char[] cha) { 171 String ret = new String (); 172 int i; 173 int p; 174 175 for (i = 0; i < cha.length; i++) { // For all bytes within the input buffer 176 p = (int) cha[i]; // Convert the byte into an integer value 177 ret = ret + "(" + String.valueOf (p) + ") "; // Add the value 178 } 179 180 return ret; 181 } 182 183 /** 184 * 185 * @param cha The input buffer which contains the chars which are to convert. 186 * @return The byte array which contains the converted chars. 187 */ CharArrayToByteArray(char[] cha)188 public static byte[] CharArrayToByteArray (char[] cha) { 189 byte[] ret = new byte[cha.length]; // The resulting byte array 190 int i; // The index for the buffers 191 192 for (i = 0; i < cha.length; i++) { // For all chars within the input buffer 193 ret[i] = (byte) cha[i]; // Convert the character to a byte and store to buffer 194 } 195 196 return ret; // Return the byte array 197 } 198 } 199