Release 941122
[wine/multimedia.git] / debugger / break.c
blob705528c76b68ae0f770e98d895cdf3ea7e426560
2 #include <stdio.h>
3 #include <stdlib.h>
5 #define N_BP 25
7 struct wine_bp{
8 unsigned long addr;
9 char in_use;
10 char enabled;
11 unsigned char databyte;
14 static struct wine_bp wbp[N_BP] = {{0,},};
16 void info_break()
18 int j;
19 fprintf(stderr,"Breakpoint status\n");
20 for(j=0; j<N_BP; j++)
21 if(wbp[j].in_use)
22 fprintf(stderr,"%d: %c %8.8x\n", j, (wbp[j].enabled ? 'y' : 'n'),
23 wbp[j].addr);
26 void disable_break(int bpnum)
28 if(bpnum >= N_BP || bpnum < 0)
29 fprintf(stderr,"Breakpoint number out of range\n");
31 wbp[bpnum].enabled = 0;
34 void enable_break(int bpnum)
36 if(bpnum >= N_BP || bpnum < 0)
37 fprintf(stderr,"Breakpoint number out of range\n");
39 wbp[bpnum].enabled = 1;
42 void add_break(unsigned long addr)
44 int j;
45 for(j=0; j<N_BP; j++)
46 if(!wbp[j].in_use)
48 wbp[j].in_use = 1;
49 wbp[j].enabled = 1;
50 wbp[j].addr = addr;
51 return;
53 fprintf(stderr,"No more breakpoints\n");
56 void insert_break(int flag)
58 unsigned char * pnt;
59 int j;
61 for(j=0; j<N_BP; j++)
62 if(wbp[j].enabled)
64 pnt = (unsigned char *) wbp[j].addr;
65 if(flag) {
66 wbp[j].databyte = *pnt;
67 *pnt = 0xcc; /* Change to an int 3 instruction */
68 } else {
69 *pnt = wbp[j].databyte;
74 /* Get the breakpoint number that we broke upon */
75 int get_bpnum(unsigned int addr)
77 int j;
79 for(j=0; j<N_BP; j++)
80 if(wbp[j].enabled)
81 if(wbp[j].addr == addr) return j;
83 return -1;