📄 sysdep.c
字号:
#endif
/*====================================*/
/* Initialize the deffacts construct. */
/*====================================*/
#if DEFFACTS_CONSTRUCT
InitializeDeffacts(theEnvironment);
#endif
/*=====================================================*/
/* Initialize the defgeneric and defmethod constructs. */
/*=====================================================*/
#if DEFGENERIC_CONSTRUCT
SetupGenericFunctions(theEnvironment);
#endif
/*=======================================*/
/* Initialize the deffunction construct. */
/*=======================================*/
#if DEFFUNCTION_CONSTRUCT
SetupDeffunctions(theEnvironment);
#endif
/*=====================================*/
/* Initialize the defglobal construct. */
/*=====================================*/
#if DEFGLOBAL_CONSTRUCT
InitializeDefglobals(theEnvironment);
#endif
/*=======================================*/
/* Initialize the deftemplate construct. */
/*=======================================*/
#if DEFTEMPLATE_CONSTRUCT
InitializeDeftemplates(theEnvironment);
#endif
/*=============================*/
/* Initialize COOL constructs. */
/*=============================*/
#if OBJECT_SYSTEM
SetupObjectSystem(theEnvironment);
#endif
/*=====================================*/
/* Initialize the defmodule construct. */
/*=====================================*/
InitializeDefmodules(theEnvironment);
/*======================================================*/
/* Register commands and functions for development use. */
/*======================================================*/
#if DEVELOPER
DeveloperCommands(theEnvironment);
#endif
/*=========================================*/
/* Install the special function primitives */
/* used by procedural code in constructs. */
/*=========================================*/
InstallProcedurePrimitives(theEnvironment);
/*==============================================*/
/* Install keywords in the symbol table so that */
/* they are available for command completion. */
/*==============================================*/
InitializeKeywords(theEnvironment);
/*========================*/
/* Issue a clear command. */
/*========================*/
EnvClear(theEnvironment);
/*=============================*/
/* Initialization is complete. */
/*=============================*/
theEnvironment->initialized = TRUE;
}
/******************************************************/
/* SetRedrawFunction: Sets the redraw screen function */
/* for use with a user interface that may be */
/* overwritten by execution of a command. */
/******************************************************/
globle void SetRedrawFunction(
void *theEnv,
void (*theFunction)(void *))
{
SystemDependentData(theEnv)->RedrawScreenFunction = theFunction;
}
/******************************************************/
/* SetPauseEnvFunction: Set the normal state function */
/* which puts terminal in a normal state. */
/******************************************************/
globle void SetPauseEnvFunction(
void *theEnv,
void (*theFunction)(void *))
{
SystemDependentData(theEnv)->PauseEnvFunction = theFunction;
}
/*********************************************************/
/* SetContinueEnvFunction: Sets the continue environment */
/* function which returns the terminal to a special */
/* screen interface state. */
/*********************************************************/
globle void SetContinueEnvFunction(
void *theEnv,
void (*theFunction)(void *,int))
{
SystemDependentData(theEnv)->ContinueEnvFunction = theFunction;
}
/*******************************************************/
/* GetRedrawFunction: Gets the redraw screen function. */
/*******************************************************/
globle void (*GetRedrawFunction(void *theEnv))(void *)
{
return SystemDependentData(theEnv)->RedrawScreenFunction;
}
/*****************************************************/
/* GetPauseEnvFunction: Gets the normal state function. */
/*****************************************************/
globle void (*GetPauseEnvFunction(void *theEnv))(void *)
{
return SystemDependentData(theEnv)->PauseEnvFunction;
}
/*********************************************/
/* GetContinueEnvFunction: Gets the continue */
/* environment function. */
/*********************************************/
globle void (*GetContinueEnvFunction(void *theEnv))(void *,int)
{
return SystemDependentData(theEnv)->ContinueEnvFunction;
}
/*************************************************/
/* RerouteStdin: Processes the -f, -f2, and -l */
/* options available on machines which support */
/* argc and arv command line options. */
/*************************************************/
globle void RerouteStdin(
void *theEnv,
int argc,
char *argv[])
{
int i;
int theSwitch = NO_SWITCH;
/*======================================*/
/* If there aren't enough arguments for */
/* the -f argument, then return. */
/*======================================*/
if (argc < 3)
{ return; }
/*=====================================*/
/* If argv was not passed then return. */
/*=====================================*/
if (argv == NULL) return;
/*=============================================*/
/* Process each of the command line arguments. */
/*=============================================*/
for (i = 1 ; i < argc ; i++)
{
if (strcmp(argv[i],"-f") == 0) theSwitch = BATCH_SWITCH;
#if ! RUN_TIME
else if (strcmp(argv[i],"-f2") == 0) theSwitch = BATCH_STAR_SWITCH;
else if (strcmp(argv[i],"-l") == 0) theSwitch = LOAD_SWITCH;
#endif
else if (theSwitch == NO_SWITCH)
{
PrintErrorID(theEnv,"SYSDEP",2,FALSE);
EnvPrintRouter(theEnv,WERROR,"Invalid option\n");
}
if (i > (argc-1))
{
PrintErrorID(theEnv,"SYSDEP",1,FALSE);
EnvPrintRouter(theEnv,WERROR,"No file found for ");
switch(theSwitch)
{
case BATCH_SWITCH:
EnvPrintRouter(theEnv,WERROR,"-f");
break;
case BATCH_STAR_SWITCH:
EnvPrintRouter(theEnv,WERROR,"-f2");
break;
case LOAD_SWITCH:
EnvPrintRouter(theEnv,WERROR,"-l");
}
EnvPrintRouter(theEnv,WERROR," option\n");
return;
}
switch(theSwitch)
{
case BATCH_SWITCH:
OpenBatch(theEnv,argv[++i],TRUE);
break;
#if (! RUN_TIME) && (! BLOAD_ONLY)
case BATCH_STAR_SWITCH:
EnvBatchStar(theEnv,argv[++i]);
break;
case LOAD_SWITCH:
EnvLoad(theEnv,argv[++i]);
break;
#endif
}
}
}
/**************************************************/
/* SystemFunctionDefinitions: Sets up definitions */
/* of system defined functions. */
/**************************************************/
static void SystemFunctionDefinitions(
void *theEnv)
{
ProceduralFunctionDefinitions(theEnv);
MiscFunctionDefinitions(theEnv);
#if BASIC_IO || EXT_IO
IOFunctionDefinitions(theEnv);
#endif
PredicateFunctionDefinitions(theEnv);
BasicMathFunctionDefinitions(theEnv);
FileCommandDefinitions(theEnv);
SortFunctionDefinitions(theEnv);
#if DEBUGGING_FUNCTIONS
WatchFunctionDefinitions(theEnv);
#endif
#if MULTIFIELD_FUNCTIONS
MultifieldFunctionDefinitions(theEnv);
#endif
#if STRING_FUNCTIONS
StringFunctionDefinitions(theEnv);
#endif
#if EX_MATH
ExtendedMathFunctionDefinitions(theEnv);
#endif
#if TEXTPRO_FUNCTIONS || HELP_FUNCTIONS
HelpFunctionDefinitions(theEnv);
#endif
#if EMACS_EDITOR
EditorFunctionDefinition(theEnv);
#endif
#if CONSTRUCT_COMPILER && (! RUN_TIME)
ConstructsToCCommandDefinition(theEnv);
#endif
#if PROFILING_FUNCTIONS
ConstructProfilingFunctionDefinitions(theEnv);
#endif
ParseFunctionDefinitions(theEnv);
}
/*********************************************************/
/* gentime: A function to return a floating point number */
/* which indicates the present time. Used internally */
/* for timing rule firings and debugging. */
/*********************************************************/
globle double gentime()
{
#if MAC
UnsignedWide result;
Microseconds(&result);
return(((((double) result.hi) * kTwoPower32) + result.lo) / 1000000.0);
#elif IBM_MCW
unsigned long int result;
result = GetTickCount();
return((double) result / 1000.0);
#elif IBM_TBC && (! WINDOW_INTERFACE)
unsigned long int result;
result = biostime(0,(long int) 0);
return((double) result / 18.2);
#elif UNIX_V
#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
struct timespec now;
clock_gettime(
#if defined(_POSIX_MONOTONIC_CLOCK)
CLOCK_MONOTONIC,
#else
CLOCK_REALTIME,
#endif
&now);
return (now.tv_nsec / 1000000000.0) + now.tv_sec;
#else
struct timeval now;
gettimeofday(&now, 0);
return (now.tv_usec / 1000000.0) + now.tv_sec;
#endif
#else
return((double) clock() / (double) CLOCKS_PER_SEC);
#endif
}
/*****************************************************/
/* gensystem: Generic routine for passing a string */
/* representing a command to the operating system. */
/*****************************************************/
globle void gensystem(
void *theEnv)
{
char *commandBuffer = NULL;
int bufferPosition = 0;
unsigned bufferMaximum = 0;
int numa, i;
DATA_OBJECT tempValue;
char *theString;
/*===========================================*/
/* Check for the corret number of arguments. */
/*===========================================*/
if ((numa = EnvArgCountCheck(theEnv,"system",AT_LEAST,1)) == -1) return;
/*============================================================*/
/* Concatenate the arguments together to form a single string */
/* containing the command to be sent to the operating system. */
/*============================================================*/
for (i = 1 ; i <= numa; i++)
{
EnvRtnUnknown(theEnv,i,&tempValue);
if ((GetType(tempValue) != STRING) &&
(GetType(tempValue) != SYMBOL))
{
SetHaltExecution(theEnv,TRUE);
SetEvaluationError(theEnv,TRUE);
ExpectedTypeError2(theEnv,"system",i);
return;
}
theString = DOToString(tempValue);
commandBuffer = AppendToString(theEnv,theString,commandBuffer,&bufferPosition,&bufferMaximum);
}
if (commandBuffer == NULL) return;
/*=======================================*/
/* Execute the operating system command. */
/*=======================================*/
#if VAX_VMS
if (SystemDependentData(theEnv)->PauseEnvFunction != NULL) (*SystemDependentData(theEnv)->PauseEnvFunction)(theEnv);
VMSSystem(commandBuffer);
putchar('\n');
if (SystemDependentData(theEnv)->ContinueEnvFunction != NULL) (*SystemDependentData(theEnv)->ContinueEnvFunction)(theEnv,1);
if (SystemDependentData(theEnv)->RedrawScreenFunction != NULL) (*SystemDependentData(theEnv)->RedrawScreenFunction)(theEnv);
#endif
#if UNIX_7 || UNIX_V || IBM_MSC || IBM_TBC || IBM_ICB || IBM_ZTC || IBM_SC || IBM_MCW || IBM_GCC || MAC_XCD
if (SystemDependentData(theEnv)->PauseEnvFunction != NULL) (*SystemDependentData(theEnv)->PauseEnvFunction)(theEnv);
system(commandBuffer);
if (SystemDependentData(theEnv)->ContinueEnvFunction != NULL) (*SystemDependentData(theEnv)->ContinueEnvFunction)(theEnv,1);
if (SystemDependentData(theEnv)->RedrawScreenFunction != NULL) (*SystemDependentData(theEnv)->RedrawScreenFunction)(theEnv);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -