<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://xinu.cs.mu.edu/index.php?action=history&amp;feed=atom&amp;title=Xinu_Compatability_Layer</id>
	<title>Xinu Compatability Layer - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://xinu.cs.mu.edu/index.php?action=history&amp;feed=atom&amp;title=Xinu_Compatability_Layer"/>
	<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Xinu_Compatability_Layer&amp;action=history"/>
	<updated>2026-06-15T16:34:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Xinu_Compatability_Layer&amp;diff=3687&amp;oldid=prev</id>
		<title>Amallen: Created page!</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Xinu_Compatability_Layer&amp;diff=3687&amp;oldid=prev"/>
		<updated>2010-08-27T19:36:01Z</updated>

		<summary type="html">&lt;p&gt;Created page!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Here is the full C source code for the Xinu Compatability Layer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdarg.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;device.h&amp;gt;&lt;br /&gt;
#include &amp;lt;tty.h&amp;gt;&lt;br /&gt;
#include &amp;lt;memory.h&amp;gt;&lt;br /&gt;
#include &amp;lt;thread.h&amp;gt;&lt;br /&gt;
#include &amp;lt;monitor.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syscall _readint(void)&lt;br /&gt;
{&lt;br /&gt;
    int i = 0, c = 0;&lt;br /&gt;
&lt;br /&gt;
    control(CONSOLE, TTY_CTRL_SET_IFLAG, TTY_ECHO, 0);&lt;br /&gt;
&lt;br /&gt;
    c = getchar();&lt;br /&gt;
    while (('\n' != c) &amp;amp;&amp;amp; ('\r' != c) &amp;amp;&amp;amp; (EOF != c))&lt;br /&gt;
    {&lt;br /&gt;
        if (('0' &amp;lt;= c) &amp;amp;&amp;amp; ('9' &amp;gt;= c))&lt;br /&gt;
        {&lt;br /&gt;
            i = i * 10 + c - '0';&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        c = getchar();&lt;br /&gt;
    }&lt;br /&gt;
    kprintf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
    if (EOF == c)&lt;br /&gt;
        return c;&lt;br /&gt;
&lt;br /&gt;
    return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _printint(int i)&lt;br /&gt;
{&lt;br /&gt;
    return kprintf(&amp;quot;%d\r\n&amp;quot;, i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _print(char *s)&lt;br /&gt;
{&lt;br /&gt;
    return kprintf(&amp;quot;%s&amp;quot;, s);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _println(void)&lt;br /&gt;
{&lt;br /&gt;
    return kprintf(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _yield(void)&lt;br /&gt;
{&lt;br /&gt;
    return yield();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _sleep(int time)&lt;br /&gt;
{&lt;br /&gt;
    return sleep(time);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int * _new(int n, int init)&lt;br /&gt;
{&lt;br /&gt;
    int size = (n + 2) * 4;&lt;br /&gt;
    int *p = (int *)memget(size);&lt;br /&gt;
    bzero(p, size);&lt;br /&gt;
    p[0] = moncreate(1);&lt;br /&gt;
    p[1] = init;&lt;br /&gt;
    return p + 2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _lock(int * objAdder)&lt;br /&gt;
{&lt;br /&gt;
    int * A = objAdder - 2;&lt;br /&gt;
    monitor m = (monitor) *A;&lt;br /&gt;
    return lock(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _unlock(int * objAdder)&lt;br /&gt;
{&lt;br /&gt;
    int * A = objAdder - 2;&lt;br /&gt;
    monitor m = (monitor) *A;&lt;br /&gt;
    return unlock(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
syscall _threadCreate(int * threadObjAdder)&lt;br /&gt;
{&lt;br /&gt;
    int * A = threadObjAdder - 1;&lt;br /&gt;
    int * B = (int*) *A;&lt;br /&gt;
    int * C = (int*) *B;&lt;br /&gt;
    void * procadder = (void *) C;&lt;br /&gt;
    return ready(create(procadder, INITSTK, INITPRIO, &amp;quot;MiniJavaThread&amp;quot;, 1, threadObjAdder), RESCHED_NO);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void _BADPTR(void)&lt;br /&gt;
{&lt;br /&gt;
    fprintf(CONSOLE, &amp;quot;FATAL ERROR: Null Pointer Exception!\n&amp;quot;);&lt;br /&gt;
    kill(thrcurrent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void _BADSUB(void)&lt;br /&gt;
{&lt;br /&gt;
        fprintf(CONSOLE, &amp;quot;FATAL ERROR: Index Out Of Bounds Exception!\n&amp;quot;);&lt;br /&gt;
        kill(thrcurrent);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Amallen</name></author>
		
	</entry>
</feed>