static int scan(Expr_t* ex, Exnode_t* expr, void* env, Sfio_t* sp) { Extype_t v; Extype_t u; Fmt_t fmt; int n; if (!sp) { if (expr->data.scan.descriptor) { v = eval(ex, expr->data.scan.descriptor, env); if (expr->data.scan.descriptor->type == STRING) goto get; } else v.integer = 0; if (v.integer < 0 || v.integer >= elementsof(ex->file) || !(sp = ex->file[v.integer]) && !(sp = ex->file[v.integer] = sfnew(NiL, NiL, SF_UNBOUND, v.integer, SF_READ|SF_WRITE))) { exerror("scanf: %d: invalid descriptor", v.integer); return 0; } } get: memset(&fmt, 0, sizeof(fmt)); fmt.fmt.version = SFIO_VERSION; fmt.fmt.extf = scformat; fmt.expr = ex; fmt.env = env; u = eval(ex, expr->data.scan.format, env); fmt.fmt.form = u.string; fmt.actuals = expr->data.scan.args; n = sp ? sfscanf(sp, "%!", &fmt) : sfsscanf(v.string, "%!", &fmt); if (fmt.actuals && !*fmt.fmt.form) exerror("scanf: %s: too many arguments", fmt.actuals->data.operand.left->data.variable.symbol->name); return n; }
int main(int argc, char** argv) { char* op; char* s; int n; char name[80]; char passwd[PATH_MAX]; SERVICE_TABLE_ENTRY table[] = { {NULL, (LPSERVICE_MAIN_FUNCTION)csmain}, {NULL, NULL} }; OSVERSIONINFO osinfo; log_command = "ucs"; log_level = 1; osinfo.dwOSVersionInfoSize = sizeof(osinfo); if (!GetVersionEx(&osinfo) || osinfo.dwPlatformId != VER_PLATFORM_WIN32_NT) { logmsg(LOG_STDERR+0, "not supported for this windows release"); return 1; } logopen(log_command, 0); if ((s = *++argv) && (!_stricmp(s, "--quiet") || !_stricmp(s, "-q") || !_stricmp(s, "quiet"))) { quiet = 1; s = *++argv; } if ((op = s) && _stricmp(op, "start")) { if (s = *++argv) { strncpy(name, s, sizeof(name)); s = *++argv; } else { sfprintf(sfstderr, "Enter Account Name: "); sfscanf(sfstdin, "%s", name); } if (!_stricmp(op, "install")) { if (s && !strcmp(s, "-")) { passwd[0] = 0; if ((n = read(0, passwd, sizeof(passwd))) < 0) { logerr(LOG_STDERR+0, "read error"); return 1; } passwd[n] = 0; s = passwd; } if (!installservice(name, s)) { logerr(LOG_ALL+0, "install %s failed", name); return 1; } logmsg(1, "installed %s", name); } else if (!_stricmp(op, "delete")) { if (!deleteservice(name)) { logerr(LOG_ALL+0, "delete %s failed", name); return 1; } logmsg(1, "deleted %s", name); } else { logmsg(LOG_STDERR+LOG_USAGE+0, "[ --quiet ] [ start | [ delete | install [ name [ password ] ] ] ]"); return 2; } } else { getservname(); table[0].lpServiceName = servname; if (!StartServiceCtrlDispatcher(table)) eventlog("StartServiceCtrlDispatcher failed"); } logclose(); return 0; }