static void command_loop(void) { char c, more = FALSE, help = FALSE; int i; while (!ExitToMsdos) { if (sysReq && !loggedIn && !haveCarrier) { sysReq = FALSE; if (cfg.offhook) { offhook(); } else { drop_dtr(); } ringSystemREQ(); } if (parm.door) { if (!loggedIn && cfg.forcelogin) { for (i = 0; !loggedIn && i < 4; ++i) doLogin(2); if (!loggedIn) { ExitToMsdos = 1; break; } } } more = getCommand(&c); outFlag = IMPERVIOUS; if (chatkey) chat(); if (eventkey && !haveCarrier) { do_cron(CRON_TIMEOUT); eventkey = FALSE; } if (sysopkey) help = doSysop(); else help = doRegular(more, c); if (help) { if (!gl_user.expert) mPrintf("\n '?' for menu, 'H' for help.\n \n"); else mPrintf(" ?\n \n"); } } }
int main(void) { int cmd, ret; vfs_init(&vfs); // Set up filesystem create_dir(&vfs, "/etc"); crond = create_dir(&vfs, "/etc/crond"); create_dir(&vfs, "/home"); pwd = create_dir(&vfs, "/home/user"); pwd->owner = USER_UID; while (1) { // Simulate a period cron job do_cron(); if (read_all(STDIN, &cmd, sizeof(cmd)) != sizeof(cmd)) continue; if (cmd == -1) break; switch (cmd) { case CD: ret = do_cd(); break; case READ: ret = do_read(); break; case WRITE: ret = do_write(); break; case LN: ret = do_ln(); break; case RM: ret = do_rm(); break; default: continue; } write_all(STDOUT, &ret, sizeof(ret)); } vfs_destroy(&vfs); return 0; }