00079 {
00080 int argCount;
00081 char* debugArgs = "";
00082 bool randomYield = FALSE;
00083
00084 #ifdef USER_PROGRAM
00085 bool debugUserProg = FALSE;
00086 #endif
00087 #ifdef FILESYS_NEEDED
00088 bool format = FALSE;
00089 #endif
00090 #ifdef NETWORK
00091 double rely = 1;
00092 int netname = 0;
00093 #endif
00094
00095 for (argc--, argv++; argc > 0; argc -= argCount, argv += argCount) {
00096 argCount = 1;
00097 if (!strcmp(*argv, "-d")) {
00098 if (argc == 1)
00099 debugArgs = "+";
00100 else {
00101 debugArgs = *(argv + 1);
00102 argCount = 2;
00103 }
00104 } else if (!strcmp(*argv, "-rs")) {
00105 ASSERT(argc > 1);
00106 RandomInit(atoi(*(argv + 1)));
00107
00108 randomYield = TRUE;
00109 argCount = 2;
00110 }
00111 #ifdef USER_PROGRAM
00112 if (!strcmp(*argv, "-s"))
00113 debugUserProg = TRUE;
00114 #endif
00115 #ifdef FILESYS_NEEDED
00116 if (!strcmp(*argv, "-f"))
00117 format = TRUE;
00118 #endif
00119 #ifdef NETWORK
00120 if (!strcmp(*argv, "-l")) {
00121 ASSERT(argc > 1);
00122 rely = atof(*(argv + 1));
00123 argCount = 2;
00124 } else if (!strcmp(*argv, "-m")) {
00125 ASSERT(argc > 1);
00126 netname = atoi(*(argv + 1));
00127 argCount = 2;
00128 }
00129 #endif
00130 }
00131
00132 DebugInit(debugArgs);
00133 stats = new Statistics();
00134 interrupt = new Interrupt;
00135 scheduler = new Scheduler();
00136 if (randomYield)
00137 timer = new Timer(TimerInterruptHandler, 0, randomYield);
00138
00139 threadToBeDestroyed = NULL;
00140
00141
00142
00143
00144 currentThread = new Thread("main");
00145 currentThread->setStatus(RUNNING);
00146
00147 interrupt->Enable();
00148 CallOnUserAbort(Cleanup);
00149
00150 #ifdef USER_PROGRAM
00151 machine = new Machine(debugUserProg);
00152 #endif
00153
00154 #ifdef FILESYS
00155 synchDisk = new SynchDisk("DISK");
00156 #endif
00157
00158 #ifdef FILESYS_NEEDED
00159 fileSystem = new FileSystem(format);
00160 #endif
00161
00162 #ifdef NETWORK
00163 postOffice = new PostOffice(netname, rely, 10);
00164 #endif
00165 }