📄 sysdep.c
字号:
/*=====================================*/#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#elif UNIX_7 struct timeval now; gettimeofday(&now, 0); return (now.tv_usec / 1000000.0) + now.tv_sec; #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; size_t bufferPosition = 0; size_t 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_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);#else#if ! VAX_VMS EnvPrintRouter(theEnv,WDIALOG, "System function not fully defined for this system.\n");#endif#endif /*==================================================*/ /* Return the string buffer containing the command. */ /*==================================================*/ rm(theEnv,commandBuffer,bufferMaximum); return; }#if VAX_VMS/*************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -