2017-04-17 06:17:10 -06:00

54 lines
3.2 KiB
C
Executable File

/*
* thread_locals.h - thread locals for each interpreter thread in MAXScript
*
* Copyright © John Wainwright 1996
*
*/
/* thread locals and initial values */
def_thread_local( CharStream*, current_stdout, new (GC_IN_HEAP) WindowStream(_T("Script Output")));
def_thread_local( BOOL, force_listener_open, TRUE); // whether to force listener open on output to it
def_thread_local( Value**, current_frame, NULL); // current interpreter frame (for thunk evals)
def_thread_local( Value**, current_scan_frame, NULL); // current interpreter frame (for gc scanner)
def_thread_local( Value**, current_locals_frame, NULL); // C++ local frame
def_thread_local( Value*, current_result, NULL); // C++ current Value* function result
def_thread_local( long, stack_limit, 1024000); // max stack size to catch recurse loops, 1Mb to start
def_thread_local( LONG_PTR, stack_base, (LONG_PTR)_alloca(sizeof(int))); // current stack base
def_thread_local( MSPlugin*, current_plugin, NULL); // current scripted plugin (for plugin thunk evals)
def_thread_local( Struct*, current_struct, NULL); // current struct (for struct member thunk evals)
def_thread_local( Value*, current_container, NULL); // current container for nested property access
def_thread_local( int, container_index, 0); // current container index (if any)
def_thread_local( Value*, container_prop, NULL); // current container prop (if any)
def_thread_local( Value*, current_prop, NULL); // most recent prop access (if any)
def_thread_local( Value*, source_file, NULL); // current source file
def_thread_local( int, source_pos, 0); // current pos in source file
def_thread_local( BOOL, needs_redraw, 0);
def_thread_local( BOOL, redraw_mode, 1); // redraw on
def_thread_local( BOOL, pivot_mode, 0); // pivot off
def_thread_local( BOOL, undo_mode, 1); // undo on
def_thread_local( Value*, current_level, &all_objects); // $objects
def_thread_local( BOOL, use_time_context, 0); // use MAX time slider
def_thread_local( TimeValue, current_time, 0);
def_thread_local( Value*, current_coordsys, n_default);
def_thread_local( Value*, center_mode, n_default);
def_thread_local( int, rand_accum, 0); // for our own rand()
def_thread_local( HANDLE, message_event, NULL); // listener_message synch event
def_thread_local( int, stream_rand_accum, 0); // for stream_rand()
def_thread_local( MSZipPackage*, current_pkg, NULL); // currently open zip package, if any
def_thread_local( void*, alloc_frame, NULL); // top frame of allocator stack
def_thread_local( void*, alloc_tos, NULL); // top of allocator stack
def_thread_local( void*, alloc_stack_lim, NULL); // limit of allocator stack
def_thread_local( Control*, current_controller, NULL); // currently evaluating scripted controller
def_thread_local( String*, undo_label, new (GC_PERMANENT) String(_T("MAXScript"))); // current undo label
def_thread_local( BOOL, try_mode, 0); // try(...)
def_thread_local( MAXScriptException*, current_exception, NULL); // current exception that was thrown, if any. Non-null only in catch expression