update PrintInt and change PutString to PutInt
This commit is contained in:
@@ -173,10 +173,12 @@ ConsoleOutput::PutChar(char ch)
|
||||
}
|
||||
|
||||
void
|
||||
ConsoleOutput::PutString(char *str)
|
||||
ConsoleOutput::PutInt(int value)
|
||||
{
|
||||
ASSERT(putBusy == FALSE);
|
||||
WriteFile(writeFileNo, str, strlen(str));
|
||||
char *printStr = (char*)malloc(sizeof(char)*15);
|
||||
sprintf(printStr, "%d\n", value);
|
||||
WriteFile(writeFileNo, printStr, strlen(printStr)*sizeof(char));
|
||||
putBusy = TRUE;
|
||||
kernel->interrupt->Schedule(this, ConsoleTime, ConsoleWriteInt);
|
||||
}
|
||||
@@ -76,7 +76,7 @@ class ConsoleOutput : public CallBackObj {
|
||||
void PutChar(char ch); // Write "ch" to the console display,
|
||||
// and return immediately. "callWhenDone"
|
||||
// will called when the I/O completes.
|
||||
void PutString(char *str);
|
||||
void PutInt(int n);
|
||||
void CallBack(); // Invoked when next character can be put
|
||||
// out to the display.
|
||||
|
||||
|
||||
@@ -359,3 +359,8 @@ Interrupt::DumpState()
|
||||
cout << "\nEnd of pending interrupts\n";
|
||||
}
|
||||
|
||||
void
|
||||
Interrupt::PrintInt(int value)
|
||||
{
|
||||
return kernel->PrintInt(value);
|
||||
}
|
||||
@@ -308,4 +308,7 @@ int Kernel::CreateFile(char *filename)
|
||||
return fileSystem->Create(filename);
|
||||
}
|
||||
|
||||
|
||||
void Kernel::PrintInt(int value)
|
||||
{
|
||||
return synchConsoleOut->PutInt(value);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,9 @@ class Kernel {
|
||||
|
||||
void ConsoleTest(); // interactive console self test
|
||||
void NetworkTest(); // interactive 2-machine network test
|
||||
Thread* getThread(int threadID){return t[threadID];}
|
||||
Thread* getThread(int threadID){return t[threadID];}
|
||||
|
||||
void PrintInt(int n);
|
||||
|
||||
int CreateFile(char* filename); // fileSystem call
|
||||
|
||||
|
||||
@@ -37,33 +37,7 @@ int SysCreate(char *filename)
|
||||
}
|
||||
|
||||
void SysPrintInt(int value) {
|
||||
static char zero[2] = "0";
|
||||
|
||||
if (value == 0) {
|
||||
kernel->synchConsoleOut->PutString(zero);
|
||||
return;
|
||||
}
|
||||
|
||||
char outputBuf[INT_BUF_LENGTH];
|
||||
bool isNeg = false;
|
||||
int curPos = INT_BUF_LENGTH;
|
||||
outputBuf[--curPos] = '\0';
|
||||
outputBuf[--curPos] = '\n';
|
||||
|
||||
if (value < 0) {
|
||||
isNeg = true;
|
||||
value = -value;
|
||||
}
|
||||
|
||||
while (value > 0) {
|
||||
outputBuf[--curPos] = '0' + (value % 10);
|
||||
value /= 10;
|
||||
}
|
||||
|
||||
if (isNeg)
|
||||
outputBuf[--curPos] = '-';
|
||||
|
||||
kernel->synchConsoleOut->PutString(&outputBuf[curPos]);
|
||||
kernel->interrupt->PrintInt(value);
|
||||
}
|
||||
|
||||
OpenFileId SysOpen(char *name) {
|
||||
|
||||
@@ -107,10 +107,10 @@ SynchConsoleOutput::PutChar(char ch)
|
||||
}
|
||||
|
||||
void
|
||||
SynchConsoleOutput::PutString(char *str)
|
||||
SynchConsoleOutput::PutInt(int value)
|
||||
{
|
||||
lock->Acquire();
|
||||
consoleOutput->PutString(str);
|
||||
consoleOutput->PutInt(value);
|
||||
waitFor->P();
|
||||
lock->Release();
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ class SynchConsoleOutput : public CallBackObj {
|
||||
~SynchConsoleOutput();
|
||||
|
||||
void PutChar(char ch); // Write a character, waiting if necessary
|
||||
void PutString(char *ch);
|
||||
void PutInt(int value);
|
||||
|
||||
private:
|
||||
ConsoleOutput *consoleOutput;// the hardware display
|
||||
|
||||
Reference in New Issue
Block a user