20#define DPRINTF(fmt, x...) printf(MODNAME ": " fmt, ##x)
25static int tty_sema = -1;
27extern void tty_puts(
const char *str);
32 DPRINTF(
"FS Init()\n");
33 if ((tty_sema = CreateMutex(IOP_MUTEX_UNLOCKED)) < 0)
35 DPRINTF(
"Failed to create mutex\n");
44 DPRINTF(
"FS Deinit()\n");
49static int ttyfs_write(
iop_file_t *file,
void *ptr,
int size) {
55 DPRINTF(
"FS Write()\n");
62 toWrite = (size - bCount);
66 memcpy(temp, &(((u8 *)ptr)[bCount]), toWrite);
77IOMAN_RETURN_VALUE_IMPL(0);
78IOMAN_RETURN_VALUE_IMPL(
EPERM);
84 IOMAN_RETURN_VALUE(
EPERM),
85 IOMAN_RETURN_VALUE(0),
86 IOMAN_RETURN_VALUE(0),
87 IOMAN_RETURN_VALUE(
EPERM),
89 IOMAN_RETURN_VALUE(
EPERM),
90 IOMAN_RETURN_VALUE(
EPERM),
91 IOMAN_RETURN_VALUE(
EPERM),
92 IOMAN_RETURN_VALUE(
EPERM),
93 IOMAN_RETURN_VALUE(
EPERM),
94 IOMAN_RETURN_VALUE(0),
95 IOMAN_RETURN_VALUE(0),
96 IOMAN_RETURN_VALUE(
EPERM),
97 IOMAN_RETURN_VALUE(
EPERM),
98 IOMAN_RETURN_VALUE(
EPERM),
104 IOP_DT_CHAR | IOP_DT_CONS,
111void sprintf_putchar(
void *context,
int c)
113 char **
string = (
char **)context;
115 if(c < 0x100) { ((*string)++)[0] = c; }
116 else { (*string)[0] = 0; }
119extern int _vsprintf(
char * str,
const char * format, va_list ap);
121static char kprint_buffer[1024];
123int _kPrintf(
void *context,
const char * format, va_list ap)
127 int r = prnt(&sprintf_putchar, &format, format, ap);
128 tty_puts(kprint_buffer);
135 DelDrv(tty_fsd.name);
138 if(AddDrv(&tty_fsd) != 0) {
return(-1); }
142 open(
"tty:", O_RDONLY);
145 open(
"tty:", O_WRONLY);
147 printf(
"PPCTTY: KprintfSet\n");
148 KprintfSet(&_kPrintf, NULL);