1*37da2899SCharles.Forsythimplement Ir; 2*37da2899SCharles.Forsyth 3*37da2899SCharles.Forsythinclude "sys.m"; 4*37da2899SCharles.ForsythFD, Dir: import Sys; 5*37da2899SCharles.Forsythinclude "ir.m"; 6*37da2899SCharles.Forsyth 7*37da2899SCharles.Forsythsys: Sys; 8*37da2899SCharles.Forsyth 9*37da2899SCharles.Forsythinit(keys, pid: chan of int): int 10*37da2899SCharles.Forsyth{ 11*37da2899SCharles.Forsyth sys = load Sys Sys->PATH; 12*37da2899SCharles.Forsyth 13*37da2899SCharles.Forsyth cfd := sys->open("#t/eia1ctl", sys->OWRITE); 14*37da2899SCharles.Forsyth if(cfd == nil) 15*37da2899SCharles.Forsyth return -1; 16*37da2899SCharles.Forsyth sys->fprint(cfd, "b9600"); 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth dfd := sys->open("#t/eia1", sys->OREAD); 19*37da2899SCharles.Forsyth cfd = nil; 20*37da2899SCharles.Forsyth 21*37da2899SCharles.Forsyth spawn reader(keys, pid, dfd); 22*37da2899SCharles.Forsyth return 0; 23*37da2899SCharles.Forsyth} 24*37da2899SCharles.Forsyth 25*37da2899SCharles.Forsythreader(keys, pid: chan of int, dfd: ref FD) 26*37da2899SCharles.Forsyth{ 27*37da2899SCharles.Forsyth n, ta, tb: int; 28*37da2899SCharles.Forsyth dir: Dir; 29*37da2899SCharles.Forsyth b1:= array[1] of byte; 30*37da2899SCharles.Forsyth b2:= array[1] of byte; 31*37da2899SCharles.Forsyth 32*37da2899SCharles.Forsyth pid <-= sys->pctl(0,nil); 33*37da2899SCharles.Forsyth (n, dir) = sys->fstat(dfd); 34*37da2899SCharles.Forsyth if(n >= 0 && dir.length > big 0) { 35*37da2899SCharles.Forsyth while(dir.length > big 0) { 36*37da2899SCharles.Forsyth l := int dir.length; 37*37da2899SCharles.Forsyth n = sys->read(dfd, array[l] of byte, l); 38*37da2899SCharles.Forsyth if(n < 0) 39*37da2899SCharles.Forsyth break; 40*37da2899SCharles.Forsyth dir.length -= big n; 41*37da2899SCharles.Forsyth } 42*37da2899SCharles.Forsyth } 43*37da2899SCharles.Forsyth 44*37da2899SCharles.Forsythout: for(;;) { 45*37da2899SCharles.Forsyth n = sys->read(dfd, b1, len b1); 46*37da2899SCharles.Forsyth if(n <= 0) 47*37da2899SCharles.Forsyth break; 48*37da2899SCharles.Forsyth ta = sys->millisec(); 49*37da2899SCharles.Forsyth for(;;) { 50*37da2899SCharles.Forsyth n = sys->read(dfd, b2, 1); 51*37da2899SCharles.Forsyth if(n <= 0) 52*37da2899SCharles.Forsyth break out; 53*37da2899SCharles.Forsyth tb = sys->millisec(); 54*37da2899SCharles.Forsyth if(tb - ta <= 200) 55*37da2899SCharles.Forsyth break; 56*37da2899SCharles.Forsyth ta = tb; 57*37da2899SCharles.Forsyth b1[0] = b2[0]; 58*37da2899SCharles.Forsyth } 59*37da2899SCharles.Forsyth case ((int b1[0]&16r1f)<<5) | (int b2[0]&16r1f) { 60*37da2899SCharles.Forsyth 71 => n = Ir->ChanDN; 61*37da2899SCharles.Forsyth 95 => n = Ir->Seven; 62*37da2899SCharles.Forsyth 135 => n = Ir->VolDN; 63*37da2899SCharles.Forsyth 207 => n = Ir->Three; 64*37da2899SCharles.Forsyth 215 => n = Ir->Select; 65*37da2899SCharles.Forsyth 263 => n = Ir->Dn; 66*37da2899SCharles.Forsyth 335 => n = Ir->Five; 67*37da2899SCharles.Forsyth 343 => n = Ir->Rew; 68*37da2899SCharles.Forsyth 399 => n = Ir->Nine; 69*37da2899SCharles.Forsyth 407 => n = Ir->Enter; 70*37da2899SCharles.Forsyth 455 => n = Ir->Power; 71*37da2899SCharles.Forsyth 479 => n = Ir->One; 72*37da2899SCharles.Forsyth 591 => n = Ir->Six; 73*37da2899SCharles.Forsyth 599 => n = Ir->ChanUP; 74*37da2899SCharles.Forsyth 663 => n = Ir->VolUP; 75*37da2899SCharles.Forsyth 711 => n = Ir->Up; 76*37da2899SCharles.Forsyth 735 => n = Ir->Two; 77*37da2899SCharles.Forsyth 791 => n = Ir->Mute; 78*37da2899SCharles.Forsyth 839 => n = Ir->FF; 79*37da2899SCharles.Forsyth 863 => n = Ir->Four; 80*37da2899SCharles.Forsyth 903 => n = Ir->Record; 81*37da2899SCharles.Forsyth 927 => n = Ir->Eight; 82*37da2899SCharles.Forsyth 975 => n = Ir->Zero; 83*37da2899SCharles.Forsyth 983 => n = Ir->Rcl; 84*37da2899SCharles.Forsyth * => n = Ir->Error; 85*37da2899SCharles.Forsyth } 86*37da2899SCharles.Forsyth 87*37da2899SCharles.Forsyth keys <-= n; 88*37da2899SCharles.Forsyth } 89*37da2899SCharles.Forsyth keys <-= Ir->Error; 90*37da2899SCharles.Forsyth} 91*37da2899SCharles.Forsyth 92*37da2899SCharles.Forsythtranslate(c: int): int 93*37da2899SCharles.Forsyth{ 94*37da2899SCharles.Forsyth return c; 95*37da2899SCharles.Forsyth} 96