{ name = 'library file for m.pp - command'; } procedure clear; begin for t:=0 to dis_cnt do if dis_e[t]=0 then write(dis[t],csi,'2J'); end; procedure grid; begin for t:=0 to dis_cnt do if dis_e[t]=0 then begin write(dis[t],ansigotoxy(1,1)+ansicolor(grey)); for yy:=0 to 3999 do write(dis[t],chr({250}197)); end; end; function indlaes:byte; var taeller : byte; begin fillchar(togveje,sizeof(togveje),0); fillchar(tgruppe,sizeof(tgruppe),0); taeller:=0; {writeln(mon,'Reading file ',togvfn);} assign(togvf,togvfn); reset(togvf); while not seekeof(togvf) do begin readln(togvf,togvp,s); with togveje[togvp] do begin while s[1]<'!' do delete(s,1,1); navn:=upcase(s); readln(togvf,gruppe,rh,cond,stop,end1,end2); { writeln(mon,'$',hexstr(togvp,2),^I,navn{,^I,hexstr(cond,8),^I,hexstr(end1,8),^I,hexstr(end2,8));} b:=0; while not eoln(togvf) do begin read(togvf,sporsk[b].num,sporsk[b].sid); inc(b); end; b:=0; readln(togvf); while not eoln(togvf) do begin read(togvf,isolat[b]); inc(b); end; end; inc(taeller); end; close(togvf); {writeln(mon,taeller,' read from ',togvfn);} indlaes:=5; end; function assign_dis(t:byte):byte; begin assign(dis[t],lowercase(dis_name[t])); {$i-} rewrite(dis[t]); {$i+} assign_dis:=ioresult; dis_name[t]:=ttyname(dis[t]); end; procedure init; begin directvideo:=false; writeln(csi,'2J',name,' ',vga_mode,' ',param,^J); assign(mon,mon_file); {$i-} rewrite(mon); {$i+} if bytebool(ioresult) then begin assign(mon,'/dev/null'); append(mon); end; writeln(mon,csi+'2J'+ansigotoxy(1,1)+name+' '+vga_mode,^J); { erase display } { fillchar(line_v,sizeof(line_v),vandret); { init line } dis_name[0]:=''; assign_dis(0); file_h:=fdopen(mark_path+'serial',open_rdwr or open_sync); { $i- reset(io); { $i+} writeln(^M^J,ttyname(file_h),^M^J^J); tcgetattr(file_h,tios); { cfsetispeed(tios,2400); cfsetospeed(tios,2400); } cfmakeraw(tios); tcsetattr(file_h,tcsanow,tios); with spsk[02] do begin x:=27; y:=14; ori:=3; s83:=72; end; with spsk[01] do begin x:=22; y:=15; ori:=3; s83:=70; end; with spsk[03] do begin x:=32; y:=14; ori:=1; s83:=71; end; with spsk[04] do begin x:=47; y:=14; ori:=1; s83:=40; end; with spsk[05] do begin x:=52; y:=12; ori:=1; s83:=74 ; end; with spsk[06] do begin x:=57; y:=11; ori:=1; s83:=76; end; with spsk[07] do begin x:=62; y:=10; ori:=1; s83:=73; end; with spsk[08] do begin x:=52; y:=14; ori:=0; s83:=38; end; with spsk[09] do begin x:=57; y:=15; ori:=0; s83:=37; end; with spsk[10] do begin x:=62; y:=14; ori:=1; s83:=75; end; with spsk[11] do begin x:=74; y:=15; ori:=3; s83:=39; s83b:=69; bx:=75; by:=16; bori:=1; end; with spsk[12] do begin x:=40; y:=09; ori:=6; s83:=77; end; with spsk[13] do begin x:=42; y:=09; ori:=1; s83:=78; end; with spsk[14] do begin x:=46; y:=09; ori:=1; s83:=80; end; with spsk[15] do begin x:=45; y:=08; ori:=5; s83:=87; end; with spsk[16] do begin x:=48; y:=09; ori:=1; s83:=79; end; with spsk[17] do begin x:=48; y:=08; ori:=6; s83:=88; end; with spsk[18] do begin x:=52; y:=09; ori:=1; s83:=86; end; with spsk[19] do begin x:=54; y:=09; ori:=1; s83:=85; end; with spsk[22] do begin x:=27; y:=09; ori:=3; s83:=67; s83b:=58; end; with spsk[23] do begin x:=22; y:=09; ori:=2; s83:=68; s83b:=57; end; with spsk[24] do begin x:=05; y:=09; ori:=3; s83:=62; s83b:=63; bx:=6; by:=10; bori:=1; end; with spsk[21] do begin x:=39; y:=3; ori:=3; s83:=61; s83b:=59; end; with spsk[26] do begin x:=22; y:=3; ori:=3; s83:=65; end; with spsk[25] do begin x:=27; y:=3; ori:=3; s83:=66; end; with spsk[31] do begin x:=32; y:=20; ori:=0; s83:=47; s83b:=41; bx:=31; by:=21; bori:=2; end; with spsk[32] do begin x:=27; y:=21; ori:=3; s83:=45; end; with spsk[33] do begin x:=22; y:=21; ori:=3; s83:=46; end; with spsk[34] do begin x:=5; y:=21; ori:=3; s83:=48; s83b:=42; bx:=6; by:=22; bori:=1; end; with spsk[35] do begin x:=36; y:=20; ori:=1; s83:=43; end; with spsk[36] do begin x:=39; y:=20; ori:=0; s83:=44; end; with spsk[37] do s83:=51; { blok Bern - AM } with spsk[38] do s83:=52; { blok Kehl - AM } with spsk[39] do begin x:=46; y:=4; ori:=4; kontrol:=2; bx:=5; by:=16; bori:=4; s83:=$ff; end; with spsk[40] do begin x:=5; y:=13; ori:=4; kontrol:=1; bx:=46; by:=23; bori:=4; s83:=$ff; end; with spsk[41] do s83:=$ff; { blokspaer Kh-B } writeio(96); { GO } end; { init } procedure skift(nr,side:byte;var spskfejl:byte); begin if spsk[nr].s83=0 then begin spskfejl:=2; exit; end; if boolean(spskfejl) or (spsk[nr].kontrol=side) then exit; if boolean(spsk[nr].fast) or boolean(spsk[nr].la) then begin spskfejl:=1; exit; end; if (nr=39) and boolean(s88w and $2000) then begin spskfejl:=4; exit; end; if (nr=40) and boolean(s88w and $5000) then begin spskfejl:=4; exit; end; if boolean(side) then begin spskfejl:=skiftmagnet(spsk[nr].s83,side); if (spskfejl=0) and boolean(spsk[nr].s83b) then spskfejl:=skiftmagnet(spsk[nr].s83b,side); spsk[nr].kontrol:=side; display2; end; if boolean(spskfejl) then spsk[nr].kontrol:=0; end; procedure starto; var p,e,sloc : byte; begin {init;} for p:=1 to 36 do begin e:=0; sloc:=spsk[p].kontrol; spsk[p].kontrol:=0; skift(p,sloc,e); end; clear; end; procedure sluk(x:byte;s:shortstring); begin err:=0; for t:=0 to 3 do if boolean(tgruppe[t]) then stopfald(tgruppe[t]); skift(37,1,err); { AM } skift(38,1,err); { AM } writeio(32); { off } writeio(97); { power } fdclose(file_h); if boolean(err) then x:=err; for t:=0 to dis_cnt do if dis_e[t]=0 then begin write(dis[t],ansicolor(normal)+csi+'2J'); close(dis[t]); end; close(mon); { if not boolean(x) then ********* file written error or not ! } begin assign(spskfile,mark_path+'spskfile.dat'); rewrite(spskfile); for b:=0 to spsk_cnt do write(spskfile,spsk[b]); close(spskfile); chmod(mark_path+'spskfile.dat',octal(666)); end; assign(mon,mark_path+'logfile.txt'); {$i-} append(mon); if boolean(ioresult) then begin rewrite(mon); write(mon,name,' ',vga_mode,^M^J); end; {$i+} write(mon,tal(tog_el+tog_diesel,2)+' tog, heraf ',tal(tog_diesel,2),' diesel '+ tal(dd,2)+'.'+tal(mm,2)+'.'+tal(yy,2)+' start '+start+' slut '+tal(hh,2)+':'+tal(min,2)); if boolean(pos('error',s)) then write(mon,' error'); write(mon,^M^J); close(mon); if boolean(x) then write(^G^G^G^G^G); writeln; writeln(name,' ',vga_mode,^J,tog_el,' el-tog og ',tog_diesel,' diesel siden ',start,^J,s); halt; end; function testtogv(const p:byte):byte; var error : byte; begin error:=0; with togveje[p] do begin if boolean(s88w and cond) then error:=4; for t:=0 to $f do if sporsk[t].num>0 then begin skift(sporsk[t].num,sporsk[t].sid,error); spsk[sporsk[t].num].fast:=rh; end; for t:=0 to $f do case rh of 1:isol[isolat[t]]:=yellow; 2:isol[isolat[t]]:=green; 3:isol[isolat[t]]:=magenta; 4:isol[isolat[t]]:=red; end; end; testtogv:=error; end; function settogvej(const togvp:byte):byte; var error : byte; begin error:=0; if tgruppe[togveje[togvp].gruppe]<>0 then error:=1 else error:=testtogv(togvp); if error=0 then begin tgruppe[togveje[togvp].gruppe]:=togvp; case togvp of $00..$10,$1a,$1b: skiftmagnet(82,2); { Kehl R } $51..$59 : skiftmagnet(84,1); { Kehl B } $61..$69 : skiftmagnet(84,2); { Kehl C } $71..$89 : skiftmagnet(81,2); { Kehl PuH } $31..$39 : skiftmagnet(82,1); { Kehl PuR } $d0..$d5 : ; { R A x } $d6..$d8 : skiftmagnet(49,2); { Ol } $d9..$de : skiftmagnet(50,2); { Ol } $df : skiftmagnet(60,2); $e0 : ; { BS } $ef..$f2 : skiftmagnet(54,2); { R D x } $f3..$f7 : skiftmagnet(56,2); { R x D } $f8..$fb : begin { H D x } skiftmagnet(54,2); skiftmagnet(53,2); end; $fc..$ff : begin { H x D } skiftmagnet(56,2); skiftmagnet(55,2); end; end; { case } tgruppe_koer[togveje[togvp].gruppe]:=true; end; settogvej:=error; end; procedure fjernmag(x:byte); begin for togvp:=0 to $ff do if togveje[togvp].gruppe=x then togveje[togvp].magasin:=false; end; function evaluer(s1:shortstring):byte; var s2 : shortstring; nr : byte; valerror : word; error : byte; begin s2:=''; nr:=0; error:=0; for togvp:=0 to $ff do if s1=togveje[togvp].navn then begin togveje[togvp].magasin:=true; evaluer:=0; exit; end; if (s1='S R') or (s1='S B') or (s1='S C') then begin tgruppe_n[1]:=ntid; fjernmag(1); end; if (s1='S A') or (s1='-SBO') then begin tgruppe_n[2]:=ntid; fjernmag(2); end; if s1='S D' then begin tgruppe_n[3]:=ntid; fjernmag(3); end; if s1='SMAG' then for togvp:=0 to $ff do togveje[togvp].magasin:=false; if copy(s1,1,4)='MON ' then begin inc(dis_cnt); dis_name[dis_cnt]:=copy(s1,5,$ff); if boolean(assign_dis(dis_cnt)) then dec(dis_cnt); end; while pos(' ',s1)>0 do { =================== line with spaces ======== } begin s2:=copy(s1,length(s1),1)+s2; delete(s1,length(s1),1); end; while pos(' ',s2)=1 do delete(s2,1,1); { leading space } while copy(s2,length(s2),1)=' ' do delete(s2,length(s2),1); val(s2,nr,valerror); if s1='SNR' then snr:=true; if s1='-SNR' then snr:=false; if s1='LA' then begin if (spsk[nr].kontrol=0) then error:=3; if boolean(spsk[nr].la) then error:=1; if spsk[nr].s83=0 then error:=2; if error=0 then spsk[nr].la:=1; end; if s1='-LA' then begin if spsk[nr].la=2 then error:=1; if error=0 then spsk[nr].la:=0; end; if s1='-BS' then tgruppe_n[4]:=ntid; if s1='O' then if spsk[nr].kontrol=1 then error:=evaluer('OV '+tal(nr,1)) else error:=evaluer('OH '+tal(nr,1)); if s1='OH' then skift(nr,1,error); if s1='OV' then skift(nr,2,error); if s1='X' then for hh:=0 to 25 do skiftmagnet(nr,hh and 1); if s1='GO' then writeio(96); if s1='NOT' then writeio(97); if s1='GRID' then grid; if (s1='TI') or (s1='-GRID') then clear; if s1='FS' then begin fillchar(isol,sizeof(isol),1); clear; display2; delay(1000); end; if s1='STARTO' then starto; if s1='TOGVEJE' then error:=indlaes; evaluer:=error; end;