Jump to content

quetions about C/C++ convert to AUTOIT


zerozha
 Share

Recommended Posts

C/C++ code like this

/* try to open filename for reading */

FILE *fp;

if(!(fp=fopen(filename,"rb")))
    {
    printf("Cannot open '%s' for reading. Exit.\n",filename);
    exit(1);
    }

/* get file size */

fseek (fp, 0, SEEK_END);
filesize = ftell(fp);
fseek (fp, 0, SEEK_SET);

/* read file in buf */

buf = (unsigned char *) malloc(filesize+1);
if(!buf)
    {
    printf("Cannot allocate %lu bytes. Exit.\n",filesize);
    exit(1);
    }
unsigned long int readed=fread(buf,1,filesize,fp);
if(readed!=filesize)
    {
    printf("By some reason i cant read '%s'. I want to read %lu bytes, but can read only %lu bytes.Exit.\n", filename, filesize, readed);
    exit(1);
    }
fclose(fp);

if(debug)printf("File read complete\n");

/* Ready? All seems to be in order? Go! */

int messageflag=0;
unsigned long int messagestart=0;
unsigned long int messageend=0;

for(unsigned long int i=0;i<(filesize-6);i++)
    {
    if(buf[i]==0x1B) 
     if(buf[i+1]==0x54) /* TrSM signarure. */
      if(buf[i+2]==0x72)
       if(buf[i+3]==0x53)
        if(buf[i+4]==0x4D)
         {
     if(debug)printf("'TrSM' signarure found at %lX\n",i);
     if(messageflag) /* message begin */
        {
        messageflag=1;
        messagestart=i;
        }
        else
        { /* we just skip the message. now we know address of last byte of message. */
        messageflag=0;
        messageend=i;
        if(messagestart) /* in additional we need to skip 'garbage' at begin of the file */
        {
        processmessage(messagestart,messageend);
        }
        messagestart=i;
        }
     }
    }
    processmessage(messageend,filesize); /* and dont forget the last one */
free(buf);
return 0;
}

I convert to Autoit like this

#AutoIt3Wrapper_Run_Tidy=y

$debug = 0

$smsfile = "MessagesDatabase.pdb"

$file = FileOpen($smsfile, 16)

$tmpbuf = FileRead($file)

$filesize = BinaryLen($tmpbuf)
If $debug Then ConsoleWrite($filesize & @CRLF)

Dim $buf[$filesize]
For $j = 0 To $filesize - 1
    $buf[$j] = BinaryMid($tmpbuf, $j, 1)
    If $debug Then ConsoleWrite($buf[$j] & @CRLF)
Next

If $debug Then ConsoleWrite("Done" & @CRLF)



$messageflag = 0
$messagestart = 0
$messageend = 0

$i = 0
Do
    If ($buf[$i] = 0x1B) And ($buf[$i + 1] = 0x54) And ($buf[$i + 2] = 0x72) And ($buf[$i + 3] = 0x53) And ($buf[$i + 4] = 0x4D) Then

        If $debug Then ConsoleWrite($i & @CRLF)

        If $messageflag Then;/* message begin */

            $messageflag = 1
            $messagestart = $i
        EndIf
    Else
    ;/* we just skip the message. now we know address of last byte of message. */
        $messageflag = 0
        $messageend = $i
        If $messagestart Then _processmessage($messagestart, $messageend);;/* in additional we need to skip 'garbage' at begin of the file */
        $messagestart = $i

    EndIf

    _processmessage($messageend, $filesize); /* and dont forget the last one */
    $i += 1
Until $i < ($filesize - 6)




FileClose($file)

Now , this step

Dim $buf[$filesize]

For $j = 0 To $filesize - 1

$buf[$j] = BinaryMid($tmpbuf, $j, 1)

If $debug Then ConsoleWrite($buf[$j] & @CRLF)

Next

take me hours to run this scripts.

what's wrong with this script?

Link to comment
Share on other sites

Unless im missing something (i could be im tired) you could use the function _FileReadToArray or fileread and then use stringsplit($read,@crlf,1).

[quote name='PsaltyDS' post='635433' date='Jan 27 2009, 07:04 AM']Larry is a mass murderer?! It's always the quiet, clean cut, bald guys... [/quote]

Link to comment
Share on other sites

$smsfile = "MessagesDatabase.pdb"

$filesize = FileGetSize($smsfile)



$file = FileOpen($smsfile, 16)

Dim $aArray, $bArray
_FileReadToArray($smsfile, $aArray)

ConsoleWrite($aArray[0] & @CRLF)
$buf = FileRead($file)

$bArray = StringSplit($buf, @CRLF, 1)
ConsoleWrite($bArray[0] & @CRLF)

It do not work wright. the results is: $aArray[0]=1 and $bArray[0]=1

Edited by zerozha
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...