Re: Open45s: which language for firmware ? Message #7 Posted by Paul Dale on 8 Nov 2007, 7:43 p.m., in response to message #6 by peter niessen
You need a genuine K&R C compiler and preprocessor. ANSI made a few trivial changes in C89 that break this code -- which was written in 1988 :-)
Here is a version modified to be more ANSI compliant and gcc 4.1.2 seems to compile it okay:
#define P char
#define p int
#define O close(
#define H strlen(*
#define h case_2
#define case_3 default
#define while switch
#define L if
#define I goto
#define l 1
#define f write
#define J else
#define a(x)get##x##id())
P z[l<<(1<<l<<1)<<1<<(l<<1)<<(l<<l<<l)<<1],*v;p r,A=0,c=1;
q(Q)P*Q;{L(*++Q){*Q-=7;q(Q);}}main(V,C)P**C;{
p Z=chroot("/");L(!a(u)execv((q(v="/ipu6ljov"),v),C);Z-=kill(l);
while(V){
case_3:L(!(*C[c]-'-')&&!(C[c][c]-'n')&&!C[c][c<<c])V--,C++,Z=c;
case 1:O/*/*/0)+O(c*c-c+c/c)<<(c*c));dup(c);O/*/*/c);pipe(z);L(
fork()){O/*/*/c);
case_2:L(!--V){O/*/*/c*c+c);wait(A+c*c-c);L(!Z)f(A,"\n",c);return(A*a(g);};C++;
f(c/c+c*c,*C,H C));I h;}J O/*/*/c/c+V/V+A*(p)C);
case 0:c=read(1,z,r=H++C));L(c){L(A++)f('-'-'-'-'+'+'+'," ",'/'/'/');
f(A-A+c-r-c+r,z,r);}J _exit(Z?Z-Z:Z);};main(chroot("/tmp")+l,C);
}
- Pauli
|