Last changed: -


Suspend/break a long running script

This patch adds the ability to interrpt or suspend a long running script. If suspended, the script can be resumed with standard API at a later point.

One can also do some application work (like driving a C++ GUI) inside the app QuerySuspend function.

Diff file (against Squirrel 2.5 work sources): QuerySuspend.p0

Source files:

How to use:

  int SQMyQuerySuspend( SQVM *vm ){ 
     if( /* too long time */ ){
       return SQ_QUERY_BREAK;
       // or return SQ_QUERY_SUSPEND; 
     /* Do some processing / nothing */
     return SQ_QUERY_CONTINUE;
  // In init section 
  SQVM *vm = /* from somewhere */;
  vm->SetQuerySuspendFn( SQMyQuerySuspend );
  // ... continue 

UTF8 encoded Squirrel strings

The patch modifies squirrel so that strings are stored with UTF8 encoding internally. This is useful particularly on Unix systems where sizeof(wchar_t)==4.

Apply to your sources and define SQUTF8 to activate it when building.

Patch file: squtf8.patch

Endian-Swapping Byte-Code While Saving

Allows you to perform endian-swapping to your byte-code. Primary benefit is for offline byte-code generation happening on a PC, and then loading on a console with a different endianness.

How to use:

  // store previous endian-swapping state
  SQBool savedState = sq_getendianswapenabled();

  // enable endian-swapping prior to calling sq_writeclosure

  // now write closure, as normal
  // reset endian-swapping state to previous

Zip file with modified source files and corresponding diffs (Squirrel 2.2):