(phixonline)--> -- -- demo\rosetta\Compiler\js_io.e -- ============================= -- -- Fake file i/o for running under pwa/p2js in a browser -- Does not cover the human readable reload parts of extra.e -- with javascript_semantics sequence {known_files,kfc} = columnize({ {"test3.c",split(""" /* All lexical tokens - not syntactically correct, but that will have to wait until syntax analysis */ /* Print */ print /* Sub */ - /* Putc */ putc /* Lss */ < /* If */ if /* Gtr */ > /* Else */ else /* Leq */ <= /* While */ while /* Geq */ >= /* Lbrace */ { /* Eq */ == /* Rbrace */ } /* Neq */ != /* Lparen */ ( /* And */ && /* Rparen */ ) /* Or */ || /* Uminus */ - /* Semi */ ; /* Not */ ! /* Comma */ , /* Mul */ * /* Assign */ = /* Div */ / /* Integer */ 42 /* Mod */ % /* String */ "String literal" /* Add */ + /* Ident */ variable_name /* character literal */ '\n' /* character literal **/ '\\' /* character literal */ ' ' ""","\n")}, {"test4.c",split(""" /*** test printing, embedded \n and comments with lots of '*' ***/ print(42); print("\nHello World\nGood Bye\nok\n"); print("Print a slash n - \\n.\n"); ""","\n")}, {"primes.c",split(""" /* Simple prime number generator */ count = 1; n = 1; limit = 100; while (n < limit) { k=3; p=1; n=n+2; while ((k*k<=n) && (p)) { p=n/k*k!=n; k=k+2; } if (p) { print(n, " is prime\n"); count = count + 1; } } print("Total primes found: ", count, "\n"); ""","\n")}, {"gcd.c",split(""" /* Compute the gcd of 1071, 1029: 21 */ a = 1071; b = 1029; while (b != 0) { new_a = b; b = a % b; a = new_a; } print(a); ""","\n")}, {"Header.h",split(""" #define area(h, w) h * w ""","\n")}, {"Source.t",split(""" #include "Header.h" #define width 5 #define height 6 area = #area(height, width)#; ""","\n")}}) sequence linenos = repeat(-1,length(known_files)) global function js_open(string filename) integer fn = find(filename,known_files) assert(fn!=0) linenos[fn] = 0 return fn end function global function js_gets(integer fn) integer lineno = linenos[fn]+1 if lineno<=length(kfc[fn]) then linenos[fn] = lineno return kfc[fn][lineno] end if return EOF end function