📄 talk.x
字号:
const int limit = 200;
const int limitbuffer = 70;
char[limit] outputmem, tempinput;
char* inputmem;
char[limitbuffer] buffer;
int outputstart, inputstart;
void sys_putchar(char c)
{
%asm {
%writereg("r2", c);
%asm("LI", "r0", "1");
%asm("INT", "3");
%asm("BNEZ", "r1", "-2");
%asm("NOP");
};
}
void puts(char *s)
{
int i;
for (i=0;*(s+i)!=0;i++)
sys_putchar(s[i]);
}
void puthex(int num)
{
int i,j;
for (i=0;i<4;i++)
{
j = ((num & 0xF000) >> 12);
num = (num << 4);
if (j < 10)
sys_putchar((char)(j+48));
else sys_putchar((char)(j+55));
}
}
int sys_getchar()
{
int ret;
%asm {
%asm("LI", "r0", "2");
%asm("INT", "3");
%asm("BNEZ", "r1", "-2");
%asm("NOP");
%readreg("r2", ret);
};
sys_putchar((char) ret);
return ret;
}
int getchar(char* c)
{
int ret, retch;
%asm {
%asm("LI", "r0", "2");
%asm("INT", "3");
%readreg("r1", ret);
%readreg("r2", retch);
};
*c = (char) retch;
return (int)(ret == 0);
}
int gethex()
{
char ch;
while ((ch = (char)sys_getchar()) <= 32);
int ret; ret = 0;
while (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F')
{
ret = (ret << 4);
if (ch >= '0' && ch <= '9')
ret = ret + (int)ch - 48;
else
ret = ret + (int)ch - 55;
ch = (char)sys_getchar();
}
return ret;
}
int main()
{
int i, cnt;
for (i = 0; i < limit; i ++) outputmem[i] = (char)0;
outputstart = 0; inputstart = 0;
puts("My uID = "); puthex((int)&outputmem);
puts("\nInput uID of correspondent = "); inputmem = (char *) gethex();
puts(">>"); buffer[i = 0] = (char)0;
while (1)
{
char ch;
if (getchar(&ch))
{
if (ch != '\n')
{
if (ch == 8)
{
if (i != 0)
{
i --;
sys_putchar((char)8);
sys_putchar(' ');
sys_putchar((char)8);
buffer[i] = (char)0;
}
}
else
{
if (i < limitbuffer - 1)
{
sys_putchar(ch);
buffer[i++] = ch;
buffer[i] = (char)0;
}
}
}
else if (i != 0)
{
int j;
j = outputstart; cnt = 0;
for (; buffer[cnt]; cnt ++)
{
outputmem[j] = (char)0;
j ++;
if (j == limit) j = 0;
};
outputmem[j] = (char)0; outputstart = j;
for (; cnt > 0; )
{
cnt --;
if (j == 0) j = limit - 1; else j --;
outputmem[j] = buffer[cnt];
}
puts("\nSend : ");
puts(buffer);
puts("\n>>");
buffer[i = 0] = (char)0;
}
}
if (inputmem[inputstart] != 0)
{
int j;
cnt = 0; j = inputstart;
for (; inputmem[j] && cnt < limit; cnt ++)
{
tempinput[cnt] = inputmem[j];
j ++;
if (j == limit) j = 0;
}
inputstart = j;
tempinput[cnt] = (char)0;
puts("\nReceived : ");
puts(tempinput);
puts("\n>>");
puts(buffer);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -