//-----------------------------------
//--- 010 Editor v1.0 Script File
//
// File:     IsASCII.1sc
// Author:   SweetScape Software
// Revision: 2.0
// Purpose:  Identifies if any bytes
//    in the file are greater than
//    127.
//-----------------------------------

// Define variables
const int BLOCK_SIZE = 1024;
uchar buffer[ BLOCK_SIZE ];
quad  size, pos;
int   i, bufsize;

// Check that a file is open
if( FileCount() == 0 )
{
    MessageBox( idOk, "IsASCII", "IsASCII can only be executed when a file is loaded." );
    return -1;
}

// Read file as a set of blocks
//  - more efficient this way
pos  = 0;
size = FileSize();
while( size > 0 )
{
    // Read set of bytes from the file
    bufsize = size < BLOCK_SIZE ? size : BLOCK_SIZE;
    ReadBytes( buffer, pos, bufsize );

    // Check all bytes for ASCII value
    for( i = 0; i < bufsize; i++ )
    {
        if( buffer[i] >= 128 )
        {
            pos += (quad)i;
            MessageBox( idOk, "IsASCII", 
               "Non-ASCII character found at address %Ld [%LXh]", pos, pos );
            SetCursorPos( pos );
            return 0;
        }
    }        

    // Advance to next block
    pos  += bufsize;
    size -= bufsize;
}

// Only ASCII characters found
MessageBox( idOk, "IsASCII",
    "File contains only ASCII characters." );
return 1;
