update PrintInt and change PutString to PutInt

This commit is contained in:
ChenYen-Yen
2024-10-22 16:27:49 +08:00
parent 486f032cf0
commit b18dbf056f
8 changed files with 21 additions and 35 deletions

View File

@@ -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);
}

View File

@@ -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.

View File

@@ -359,3 +359,8 @@ Interrupt::DumpState()
cout << "\nEnd of pending interrupts\n";
}
void
Interrupt::PrintInt(int value)
{
return kernel->PrintInt(value);
}

View File

@@ -308,4 +308,7 @@ int Kernel::CreateFile(char *filename)
return fileSystem->Create(filename);
}
void Kernel::PrintInt(int value)
{
return synchConsoleOut->PutInt(value);
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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();
}

View File

@@ -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