#include "lazy/common.h"
#include "lazy/main.h"
#include "lazy/io.h"
#include "lazy/log.h"
#include "lazy/tcl.h"
static tcl_t tcl = { 0 };
static index_t id = 0;
static io_vfs_t vfs = { 0 };
COM_BLOB_IMPORT( tk_vfs );
static status_t Init( void ) {
if( !IO_Init() !TCL_Init() || !IO_VFSMount( &vfs, "",
IO_MEM( COM_BLOB_PTR( tk_vfs ), COM_BLOB_SIZE( tk_vfs ) ),
IO_VFSTYPE_ZIP
) ||
!TCL_Setup( &tcl, &vfs,
IO_FILE( NULL, "/main.tcl" ), MAIN_Handler(), TCL_FLAG_TK
)
) {
return STATUS_ERROR;
}
return STATUS_CONTINUE;
}
static status_t Frame( void ) {
return STATUS_CONTINUE;
}
static status_t Event( void *source, uint_t type, void *data ) {
if( source == &tcl ) {
switch( type ) {
case TCL_EVENT_SCRIPT: {
mem_pack_t *args = data;
if( !MEM_PACK_COUNT( args ) ) {
LOG_ERROR( "empty script event" );
return STATUS_ERROR;
}
if( STR_Match( MEM_PACK_PTRARG( args, 0 ), "exit" ) ) {
return STATUS_OK;
} else if( STR_Match( MEM_PACK_PTRARG( args, 0 ), "input" ) ) {
uint32_t hash;
if( MEM_PACK_COUNT( args ) != 2 ) {
LOG_ERROR( "bad argument count for input" );
return STATUS_ERROR;
}
hash = CRYPT_DJBString( MEM_PACK_PTRARG( args, 1 ) );
TCL_EvalPack( &tcl,
MEM_PACKINFO(
MEM_PACKINFO_VALUE( "additem", MEM_TYPE_STRING ),
MEM_PACKINFO_VALUE( &id, MEM_TYPE_UINT32 ),
MEM_PACKINFO_VALUE(
MEM_PACK_PTRARG( args, 1 ), MEM_TYPE_STRING
),
MEM_PACKINFO_VALUE( &hash, MEM_TYPE_UINT32 )
), 0
);
++id;
TCL_VarSet( &tcl, "count", &id, MEM_TYPE_GUESSINT( id ), 0 );
}else {
LOG_ERROR( "bad script event" );
return STATUS_ERROR;
}
break; }
default:
LOG_ERROR( "bad event type" );
return STATUS_ERROR;
}
} else {
LOG_ERROR( "bad source" );
return STATUS_ERROR;
}
return STATUS_CONTINUE;
}
MAIN_Loop( Init, Frame, 25, NULL, 0, Event, 0 );