EnglishРусский  

   ..

   debug.c

   debug.dsp

   debug.dsw

   debug.exe

Ads

Perfect Automation tool
All-In-One: Script editor, Launcher, Scheduler, Keyboard & Mouse Recorder. Try now!

CreateInstall
Freeware and commercial installers.

Cell Phone Batteries
Batteries Plus offers batteries for laptop, camcorder, cell phone, camera.

Gentee needs your help!
How to advertise with us
 
laptop battery

  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2008, The Gentee Group. All rights reserved. 
  4 * This file is part of the Gentee open source project - http://www.gentee.com. 
  5 * 
  6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT"). 
  7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS 
  8 * ACCEPTANCE OF THE AGREEMENT.
  9 *
 10 * ID: gentee 15.01.08 0.0.A.
 11 *
 12 * Author: Alexey Krivonogov
 13 *
 14 * Summary: 
 15 *
 16 ******************************************************************************/
 17 
 18 #include "windows.h"
 19 #include "windowsx.h"
 20 #include "../../src/genteeapi/gentee.h"
 21 #include "../../src/bytecode/cmdlist.h"
 22 #include "../../src/vm/vmrun.h"
 23 #include "../../src/vm/vmload.h"
 24 #include "../../src/common/arr.h"
 25 #include "stdio.h"
 26 
 27 ubyte   curfile[MAX_PATH];   // The current file
 28 pubyte  out;
 29 pubyte  filetext;
 30 uint    vid;
 31 
 32 void printline( uint line )
 33 {
 34    uint i = 0;
 35    uint k = 0;
 36    uint count = 1;
 37    
 38    while ( filetext[ i ] && line >= count )
 39    {
 40       if ( count == line )
 41       {
 42          out[ k++ ] = filetext[i];
 43       }
 44       if ( filetext[ i++ ] == 0xa )
 45       {
 46          count++;
 47       }
 48    }
 49    out[ k ] = 0;
 50    printf("%03i:%s", line, out );
 51 }
 52 
 53 void  funccheck( pubyte name )
 54 {
 55    if ( mem_cmpign( curfile, name, mem_len( name )))
 56    {
 57       pvoid handle;
 58       uint  read;
 59 
 60       mem_copyuntilzero( curfile, name );
 61 
 62       handle = CreateFile( curfile, GENERIC_READ | GENERIC_WRITE,
 63                              FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
 64                              OPEN_EXISTING, 0, NULL );
 65       ReadFile( handle, filetext, GetFileSize( handle, NULL ), &read, NULL ); 
 66       filetext[ read ] = 0;
 67 //            printf( filetext );
 68       CloseHandle( handle );
 69    }
 70 }
 71 
 72 void printvar( pvartype pvar, uint count, pstackpos curpos, uint off )
 73 {
 74    ubyte  name[64];
 75    uint   cur;
 76    puint  top;
 77 
 78    for ( cur = 0; cur < count; cur++ )
 79    {
 80       if ( curpos )
 81       {
 82          if ( pvar->flag & VAR_NAME )
 83             mem_copyuntilzero( name, pvar->name );
 84          else
 85             sprintf( name, "tmp%i", vid++ );
 86       }
 87       else  // Global varaiable
 88          mem_copyuntilzero( name, ((pvmobj)off)->name );
 89 
 90       printf( "%s[%i]: ", name, pvar->type );
 91 
 92       if ( curpos )
 93       {
 94          if ( cur + off < curpos->func->parcount )
 95             top = curpos->start + pvar->off;
 96          else
 97             top = ( puint )*( curpos->start + curpos->func->parsize ) +
 98                    pvar->off;
 99       }
100       else  // Global varaiable
101          top = ( puint )(( povmglobal )off)->pval;
102 
103       switch ( pvar->type )
104       {
105          case TUint:
106             printf("%i ", *top );
107             break;
108          case TStr:
109             if ( pvar->flag & VAR_PARAM )
110                top = ( puint )*top;
111             printf("%s ", (pubyte)*top );
112             break;
113          default:
114             printf("%i ", *top );
115             break;
116       }
117       pvar++;
118    }
119 }
120 
121 void printvars( pstackpos curpos )
122 {
123    povmbcode  bcode;
124    uint       i;
125    
126    vid = 0;
127    bcode = ( povmbcode )curpos->func;
128    if ( bcode->vmf.parcount )
129    {
130       printf("------>Params: ");
131       printvar( bcode->vmf.params, bcode->vmf.parcount, curpos, 0 );
132       printf("\n");
133    }
134    if ( bcode->setcount )
135       printf("------>Vars: ");
136    
137    for ( i = 0; i < bcode->setcount; i++ )
138    {
139       if ( *( curpos->start + curpos->func->parsize + 1 + i ))
140          printvar( bcode->vars + bcode->sets[i].first, bcode->sets[i].count, 
141                    curpos, bcode->sets[i].first + bcode->vmf.parcount );
142    }
143    printf("\n");
144 }
145 
146 void  debugdemo( pstackpos curpos )
147 {
148    funccheck( (pubyte)(( puint )curpos->func->func + 3 ));
149 
150    switch ( *curpos->cmd )
151    {
152       case CDbgTrace:
153          printf("Line ");
154          printline( curpos->nline );
155          printvars( curpos );
156          break;
157       case CDbgFunc:
158          printf("===> File: %s\n", (pubyte)(( puint )curpos->func->func + 3 ) );
159          printf("Line ");
160          printline( curpos->nline );
161          break;
162       case CReturn:
163          printf("===> Return\n");
164          printvars( curpos );
165          break;
166    }
167 }
168 
169 uint arr_count( parr pa )
170 {
171    return pa->data.use / pa->isize;
172 }
173 
174 void globalvars()
175 {
176    pvm vm;
177    uint i;
178    povmglobal pglobal;
179 
180    vm = ( pvm )gentee_ptr( GPTR_VM );
181    printf("------>Global vars: ");
182    
183    for ( i = 1024; i < arr_count( &vm->objtbl ); i++ )
184    {  
185       pglobal = ( povmglobal )*(( puint )vm->objtbl.data.data + i );
186       if ( pglobal->vmo.type == OVM_GLOBAL )
187       {
188          printvar( pglobal->type, 1, 0, ( uint )pglobal );
189       }
190    }
191 }
192 /*
193 typedef struct funcinfo
194 {
195    uint    line;
196    uint    reserve[32];
197 } funcinfo, * pfuncinfo;
198 */
199 int __cdecl main( int argc, char *argv[] )
200 {
201    compileinfo cmplinfo;
202    uint        flag = G_CONSOLE | G_CHARPRN;
203 //   uint        i;
204 
205    printf( "\nDebug Demo\n\
206 Copyright (C) 2008 The Gentee Group. All rights reserved.\n\
207 Internet: http://www.gentee.com  Email: info@gentee.com\n\n" );
208 //   for ( i = 0; i < 50; i++ )
209 //   {
210    gentee_init( flag );
211    gentee_set( GSET_DEBUG, &debugdemo );
212 
213    mem_zero( &cmplinfo, sizeof( compileinfo ));
214 
215    cmplinfo.flag = CMPL_DEBUG;// | CMPL_THREAD;
216    cmplinfo.defargs = "";
217    cmplinfo.libdirs = "";
218    cmplinfo.include = "..\\..\\exe\\lib\\stdlib.ge\0\0"; 
219    cmplinfo.defargs = ""; 
220    cmplinfo.output = "";  
221    cmplinfo.input = "..\\debug.g";
222    
223    out = ( pubyte )mem_alloc( 0xFFFF );
224    filetext = ( pubyte )mem_alloc( 0xFFFF );
225 
226    gentee_compile( &cmplinfo );
227 
228    printf("Ret=%i\n", cmplinfo.result );
229    globalvars();  // you can call it in any moment
230    mem_free( out );
231    mem_free( filetext );
232    gentee_deinit();
233 //   }
234    getch();
235    
236    return 0;
237 }
Edit