static void intrin_apropos (void) { int num_args; char *pat; char *namespace_name; unsigned int flags; SLang_Array_Type *at; num_args = SLang_Num_Function_Args; if (-1 == SLang_pop_uinteger (&flags)) return; if (-1 == SLang_pop_slstring (&pat)) return; namespace_name = NULL; at = NULL; if (num_args == 3) { if (-1 == SLang_pop_slstring (&namespace_name)) goto free_and_return; } at = _pSLang_apropos (namespace_name, pat, flags); if (num_args == 3) { (void) SLang_push_array (at, 0); goto free_and_return; } /* Maintain compatibility with old version of the function. That version * did not take three arguments and returned everything to the stack. * Yuk. */ (void) push_string_array_elements (at); free_and_return: /* NULLs ok */ SLang_free_slstring (namespace_name); SLang_free_slstring (pat); SLang_free_array (at); }
static void sleep_cmd (void) { unsigned int secs; #if SLANG_HAS_FLOAT unsigned long usecs; double x; if (-1 == SLang_pop_double (&x)) return; if (x < 0.0) x = 0.0; secs = (unsigned int) x; sleep (secs); x -= (double) secs; usecs = (unsigned long) (1e6 * x); if (usecs > 0) _pSLusleep (usecs); #else if (-1 == SLang_pop_uinteger (&secs)) return; if (secs != 0) sleep (secs); #endif }