#!/usr/bin/perl ################################################################### # reitti.cgi or reitti.pl # ################################################################### # Reittihärveli - Sovellus suunnistuksen reittipiirrosten # # keräykseen ja esittämiseen tämiseen # # Distributed by: jryyppo@welho.com # # ================================================================# # Copyright (c) 2003-2005 Jarkko Ryyppö - All Rights Reserved. # # Software by: Jarkko Ryyppö # # Sponsored by: - # ################################################################### # The software is free for non-commercial use. The software can # # be used only for purposes related to the sport of orienteering. # # # # This program comes as it is. Use it at your own risk. This is # # software with ABSOLUTELY NO WARRANTY. This program is # # distributed in the hope that it will be useful, but # # WITHOUT ANY WARRANTY; without even the implied warranty of # # FITNESS FOR A PARTICULAR PURPOSE. # # # # Developers of this software are not responsible for what the # # user does with help of this software. # # # # THE USER MUST NOT USE SOFTWARE FOR ILLEGAL ACTIONS. # # # # By installing and/or using our software, you agree with these # # terms of use. # ################################################################### use Fcntl ":flock"; use POSIX; use CGI qw(:cgi-lib); $CGI::POST_MAX=1024 * 500; # max 500K posts ReadParse(); ######################################################################################### $RG_version='RouteGadget reitti.cgi version: 20.12.2005'; ## @languages=('ca','de','ee','en','es','fr','no','fi','se'); ## You can add new languages by (1)adding new item here, (2) adding language texts with ## correct parameter names to map.txt (like ) ## and making new file "lang_YOURLANGUAGE.txt" ## (you can figure it out with these examples I guess) ## ## 1. Default language: (choices are currently 'ca','de','ee','en','es','fr','no','fi','se') $default_lang='fi'; ## ## Default charset: $charset_default='ISO-8859-1'; # Language spesific charsets: ## $charset{'fi'}='ISO-8859-1'; ## example ## ## 2. File locking (turn this off if you get lock errors or 500 errors no matter what you do) ## #$locking=1; # locking is on $locking=0; # locking is off ## ## 3. Paths ## For UNIX, Linux: $path='../kartat/'; ## file path to "kartat" folder $httppath='../'; ## http path to the folder of reitti.jar ## ## For IIS (Windows): # $path='C:/inetpub/wwwroot/gadget/kartat/'; ## file path to "kartat" folder # $httppath='../'; ## http path to the folder reitti.jar is located ## ## 4. View animation of runners without route: 0=no, 1=yes $norouteanim=1; ## ## 5. OGraphApplet: 1=yes, 0 =no $OGraphApplet=0; ## ## 7. Splitsbrowser : 1=yes, 0 =no $Splitsbrowser=0; ## ## 8. Event level names: # Default event level names $eLevel{'I'}='International'; $eLevel{'N'}='National'; $eLevel{'R'}='Regional'; $eLevel{'L'}='Local'; $eLevel{'T'}='Training'; # default Club name (for pre-opening the menu tree); $defaultClub=''; #$menuStyle='list'; ## Language specifics ## Finnish if($in{'kieli'} eq 'fi'){ $eLevel{'I'}='Kansainvälinen'; $eLevel{'N'}='Kansallinen'; $eLevel{'R'}='Alueellinen'; $eLevel{'L'}='Paikallinen'; $eLevel{'T'}='Harjoitus'; } # menu texts if not in Finnish: $latestRoutes='Latest routes'; $events='Events:'; $latestEvents='Latest events'; $eventsByOrg='Events by club'; $eventsByDate='Events by date'; ######################################################################################### if($httppath eq ''){$httppath='./';} $gadgeticon=$httppath.'logo6.ico'; if($in{'act'} eq 'help'){ if($charset{$in{'kieli'}} ne ''){ $charset_default=$charset{$in{'kieli'}}; } } print "Content-Type: text/html; charset=".$charset_default."\n\n"; if($default_lang ne 'fi'){ $logo=$httppath.'gadget.gif'; }else{ $logo=$httppath.'harveli.gif'; } $piste=$httppath.'piste.gif'; ## Check extension $apu=$0; $apu=~ s/\\/\//g; @apu = split (/\//,$apu); ($remove,$extension)= split(/\./,$apu[$#apu]); ##################### Version #############################3 if($in{'act'} eq 'version'){ print $RG_version; exit; } ##################### OGraphAppletJar #############################3 if($in{'act'} eq 'OGraphAppletJar'){ open(SISAAN, "<".$path."EmitGraph3.jar"); binmode SISAAN; @data=; close(SISAAN); binmode STDOUT; print @data; exit; } ##################### OGraphApplet #############################3 if($in{'act'} eq 'OGraphApplet'){ print " OGraphApplet on RouteGadget
"; #EmitGraph3.jar open(SISAAN, "<".$path."kisat.txt"); @kilpailut=; close(SISAAN); $i=0; foreach $rec (@kilpailut){ chomp($rec); @field=split(/\|/,$rec); if($field[2] != 3){ $i++; print " \n"; } } print"
"; exit; } ##################### OGraphAppletSplits #############################3 if($in{'act'} eq 'ographsplits'){ $in{'id'}=1*$in{'id'}; open(SISAAN, "<".$path."kilpailijat_$in{'id'}.txt"); @data=; close(SISAAN); @data = sort { (split '\|', $a, 9)[1] <=> (split '\|', $b, 9)[1] } @data; $sarja=''; foreach $rec (@data){ chomp($rec); @field=split(/\|/,$rec); if($sarja ne $field[2]){ $sarja=$field[2]; print "#Sarja $sarja\n"; } # $field[8] =~ s/\;/\|/g; if($field[8] ne '' && $field[5]>0){ @row=split(/\;/,$field[8]); print " $field[3]|"; foreach $sp (@row){ $sec=floor(60*($sp/60-floor($sp/60))); if($sec<10){$sec='0'.$sec;} $hou=''; $min=floor($sp/60); if($min>59){ $hou=floor($min/60); $min=$min-$hou*60; if($hou<10){$hou='0'.$hou;} if($min<10){$min='0'.$min;} } print ''.$hou.$min.$sec.'|'; } print "\n"; } } } ##################### splitsbrowserjar #############################3 if($in{'act'} eq 'splitsbrowserJar'){ open(SISAAN, "<".$path."splitsbrowser.jar"); binmode SISAAN; @data=; close(SISAAN); binmode STDOUT; print @data; exit; } ##################### splitsbrowser #############################3 if($in{'act'} eq 'splitsbrowser'){ $eventid=1*$in{'id'}; open(SISAAN, "<".$path."kisat.txt"); @kilpailut=; close(SISAAN); $i=0; foreach $rec (@kilpailut){ chomp($rec); @field=split(/\|/,$rec); $i++; if($field[0] == $eventid){ $ename=$field[3]; } } print " $ename A Java enabled browser is required to view this page  "; } ##################### splitsbrowser splits #############################3 if($in{'act'} eq 'splitsbrowsercsv'){ $in{'id'}=1*$in{'id'}; open(SISAAN, "<".$path."kilpailijat_$in{'id'}.txt"); @data=; close(SISAAN); @data = sort { (split '\|', $a, 9)[1] <=> (split '\|', $b, 9)[1] } @data; foreach $rec (@data){ chomp($rec); @field=split(/\|/,$rec); if($sarja ne $field[2]){ $srjccuont{$sarja}=$lkmmax; $sarja=$field[2]; $sarja =~s/\,/ /g; $lkmmax=0; } @row=split(/\;/,$field[8]); if($lkmmax<$#row+1){$lkmmax=$#row+1;} } $srjccuont{$sarja}=$lkmmax; $sarja=''; $lkm=0; $tmp=''; $firsclass=1; foreach $rec (@data){ chomp($rec); @field=split(/\|/,$rec); if($sarja ne $field[2]){ if($srjccuont{$sarja}>1 && $sarja ne ''){ if($firsclass==0){ print "\n"; } $firsclass=0; $sarjout=$sarja; $sarjout =~ s/\:/ /g; $sarjout =~ s/\,/ /g; print "$sarjout,".($srjccuont{$sarja}-1)."\n"; print $tmp; } $lkm=0; $tmp=''; $sarja=$field[2]; $sarja =~s/\,/ /g; } $hour=floor($field[4] /60); $min=$field[4]-60*floor($field[4]/60); if($hour<10 && $hour>-1){$hour='0'.(1*$hour);} if($min<10 && $min>-1){$min='0'.(1*$min);} $stime=$hour.':'.$min; # $field[8] =~ s/\;/\|/g; if($field[8] ne '' ){ @row=split(/\;/,$field[8]); $field[3] =~s/\,/ /g; $tmp2= "$field[3], , ,$stime"; $lkm=0; $sp_prev=0; foreach $spcum (@row){ $sp=$spcum-$sp_prev; $sp_prev=$spcum; $newrow=0; if($sp>0){ $newrow=1; $sec=floor($sp-60*floor($sp/60)); if($sec<10 && $sec>-1){$sec='0'.(1*$sec);} $min=floor($sp/60); if($min<10 && $min>-1){$min='0'.(1*$min);} $lkm++; if($lkm-1<$srjccuont{$sarja}){ $tmp2.= ','.$min.':'.$sec; } } } while($lkm<$srjccuont{$sarja}){ $lkm++; $tmp2.= ',15:00'; } $tmp2.= "\n"; $tmp.=$tmp2; } } if( $tmp ne '' && $srjccuont{$sarja}>1 && $sarja ne ''){ if($firsclass==0){ print "\n"; } $sarjout=$sarja; $sarjout =~ s/\:/ /g; $sarjout =~ s/\,/ /g; print "$sarjout,".($srjccuont{$sarja}-1)."\n"; print $tmp; } print "\n"; } ##################### viimeiset ############################# if($in{'act'} eq 'viimeiset5'){ open (SISAAN,"<$path"."sarjat_$in{'eventid'}.txt"); @class=; close(SISAAN); foreach $rec (@class){ chomp($rec); ($id,$name)=split(/\|/,$rec,2); $classname{$id}=$name; } open (SISAAN,"<$path"."kommentit_$in{'eventid'}.txt"); @kommentit=; close(SISAAN); print "
"; if($default_lang ne 'fi'){ print "

List of latest routes (".(1+$#kommentit)." routes):

    "; }else{ print "

    Uusimmat reittipiirrokset (piirroksia yhteensä ".(1+$#kommentit)." kpl):

      "; } $i=0; while($i<20 && $#kommentit >= $i){ ($idkilp,$id,$nimi,$aika,$kommentit)=split(/\|/,$kommentit[$#kommentit-$i]); print "
    • ($classname{$idkilp}) $nimi"; $i++; } if($default_lang ne 'fi'){ print "

    View routes

"; }else{ print "

Reittisivulle

"; } exit; } ##################### menu #############################3 if($in{'act'} eq 'mobile'){ open(SISAAN, "<".$path."kisat.txt"); @data=; close(SISAAN); $out= " mRouteGadget Events:
"; foreach $rec (@data){ chomp($rec); ($id,$karttaid,$tyyppi,$nimi,$paiva,$seura,$taso,$notes)=split(/\|/,$rec,8); $out=$out."
$nimi\n"; } $out=$out.""; $out =~s/ä/\ä\;/g; $out =~s/ö/\ö\;/g; $out =~s/å/\å\;/g; $out =~s/Ä/\Ä\;/g; $out =~s/Ö/\Ö\;/g; $out =~s/Å/\Å\;/g; print $out; exit; } if($in{'act'} eq 'valitsesarja'){ $out=" mRouteGadget Select Class:
"; open (SISAAN,"<$path"."sarjat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($id,$nimi)=split(/\|/,$rec); $out=$out."
$nimi\n"; } close(SISAAN); $out =~s/ä/\ä\;/g; $out =~s/ö/\ö\;/g; $out =~s/å/\å\;/g; $out =~s/Ä/\Ä\;/g; $out =~s/Ö/\Ö\;/g; $out =~s/Å/\Å\;/g; print $out; exit; exit; } if($in{'act'} eq 'valitsereitit'){ $out= " mRouteGadget
Select map part:
Whole map
NE
SE
SW
NW
Select routes: (max 3)
"; open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); $j=0; while (defined ($rec = )) { chomp($rec); ($idkilp,$id,$nimi,$aika,$viivat,$rastit)=split(/\|/,$rec); $i++; if($idkilp eq $in{"sarja"}){ ## eli on tässä sarjassa $j++; @ulos[$j]="$id,$nimi
\n"; } } close(SISAAN); @ulos = sort { (split '\,', $a, 2)[0] <=> (split '\,', $b, 2)[0] } @ulos; $out= $out.join('',@ulos)."

"; $out =~s/ä/\ä\;/g; $out =~s/ö/\ö\;/g; $out =~s/å/\å\;/g; $out =~s/Ä/\Ä\;/g; $out =~s/Ö/\Ö\;/g; $out =~s/Å/\Å\;/g; print $out; exit; } ##################### menu #############################3 if($in{'get'} eq 'table'){ open(SISAAN, "<".$path."kisat.txt"); @data=; close(SISAAN); @data = sort { (split /\|/, $a, 6)[4] cmp (split /\|/, $b, 6)[4] } @data; print @data; exit; } ##################### RG index interface ############################ if($in{'info'} eq 'csv'){ open(SISAAN, "<".$path."kisat.txt"); @data=; close(SISAAN); @data = sort { (split /\|/, $a, 6)[4] cmp (split /\|/, $b, 6)[4] } @data; if($in{'first'}!=1){ @data = reverse @data; } foreach $rec (@data){ chomp($rec); ($id,$karttaid,$tyyppi,$nimi,$paiva,$seura,$taso,$notes)=split(/\|/,$rec,8); open(SISAAN, "<".$path."kommentit_".$id.".txt"); @d=; close(SISAAN); $count=1+$#d; print "$id|$tyyppi|$nimi|$paiva|$seura|$taso|$count\n"; } exit; } ##################### menu #############################3 if($in{'act'} eq 'menu' || $in{'act'} eq ''){ if($menuStyle eq 'list'){ open(SISAAN, "<".$path."kisat.txt"); @data=; close(SISAAN); $out= "

; close(SISAAN); $lang=join('',@lang); ($lang, $langkiitos)=split(/####/,join('',@lang)); if($in{'kohdistus'}eq "1"){ $muu="\n\n"; } if($in{'piirrarastit'}eq "1"){ $muu=$muu."\n\n"; } if($in{'eipiirtaneet'} eq "1" || $norouteanim==1){ $muu=$muu.="\n"; } $muu=$muu."\n"; $muu=$muu."\n"; if($in{'width'} eq''){$in{'width'}=775; } if($in{'height'} eq''){$in{'height'}=500; } $in{'width'}=1*$in{'width'}; $in{'height'}=1*$in{'height'}; open (SISAAN,"<".$path."kisat.txt"); @kartat=; close(SISAAN); foreach $rec (@kartat) { chomp($rec); ($id,$karttaid,$tyyppi,$nimi,$paiva,$seura,$taso,$notes)=split(/\|/,$rec,8); $nimi=$paiva.' '.$nimi; if($id eq $in{'id'}){ $muu=$muu."\n"; open (SISAAN,"<".$path."../map.txt"); @sivu=; close(SISAAN); $sivu= join('',@sivu); $sivu =~ s/##httppath##/${httppath}/g; $sivu =~ s/##extension##/${extension}/g; $sivu =~ s/##logo##/${logo}/g; $sivu =~ s/##icon##/${gadgeticon}/g; $sivu =~ s/##piste##/${piste}/g; $sivu =~ s/##kieli##/${kieli}/g; $sivu =~ s/##nimi##/${nimi}/g; $sivu =~ s/##status##/2/; $sivu =~ s/##id##/${in{'id'}}/; $sivu =~ s/##karttaid##/${karttaid}/; $sivu =~ s/##ratapiirto##/${in{'ratapiirto'}}/; $sivu =~ s/##muu##/${muu}/; $sivu =~ s/##ohjeet##/${lang}/; $sivu =~ s/##width##/${in{'width'}}/g; $sivu =~ s/##height##/${in{'height'}}/g; $temp=''; foreach $rec (@languages){ $temp=$temp."|$rec"; } $temp=~ s/\|//; $sivu =~ s/##languages##/${temp}/; print $sivu; exit; }} } ################# animaatio #################### if ($in{"act"} eq "anim"){ # Tästä apletti pyytää animaatiopisteet $raika=3; ## step - aika sekunteina open (SISAAN,"<".$path."kisat.txt"); @kartat=; close(SISAAN); $viesti=0; foreach $rec (@kartat) { chomp($rec); ($id,$karttaid,$tyyppi,$nimi)=split(/\|/,$rec,4); if($id==$in{'eventid'} && $tyyppi ==3){ $viesti=1; } } ## haetaan suora reitti open (SISAAN,"<".$path."ratapisteet_$in{'eventid'}.txt"); @ratap=; close(SISAAN); foreach $rec (@ratap){ chomp($rec); ($id,$data)=split(/\|/,$rec,2); @temp=split(/N/,$data); $data=""; foreach $recb (@temp){ chomp($recb); ($x,$y)=split(/\;/,$recb,2); $data=$data.($x).";".($y)."N"; } $suorareitti{$id}=$data; ($pis,$data)=split(/N/,$data,2); $suorarastit{$id}=$data; } ## suora reitti ok ## haetaan valiajat $kilp=1;$laikaMin=99999999; #while($in{"k".$kilp} ne''){ open (SISAAN,"<$path"."kilpailijat_$in{'eventid'}.txt"); if($in{"k".$kilp}<100000){ ## gps $ok=0; while (defined ($rec = ) && $in{"k".$kilp} ne'') { chomp($rec); ($id,$sarjanro,$sarjanimi,$nimi,$laika,$aika,$sija,$tulos,$valiajat)=split(/\|/,$rec); if($id eq $in{'k'.$kilp}){ $lahtoaika[$kilp]=$laika; if($laika<$laikaMin){ $laikaMin=$laika; } $vajat[$kilp]=$valiajat; $srj{$kilp}=$sarjanro; if($viesti ==1){ $srj{$kilp}=$sija; } $kilp++;$ok=1; } } }else{ $kilp++;$ok=1; ## GPS -tallenne } if($ok==0){exit;} #} close(SISAAN); # valiajat nyt muuttujassa $vajat[] $kilp=1; while($in{"k".$kilp} ne''){ open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); $ok=0; while (defined ($rec = )) { chomp($rec); ($idkilp,$id,$nimi,$aika,$viivat,$rastit)=split(/\|/,$rec); if ($in{"k".$kilp} eq $id){ $viiva[$kilp]=$viivat; $rast[$kilp]=$rastit; $kilp++;$ok=1; } } if($ok==0){ # ei ollut piirtänyt, tilalle suora reitti $viiva[$kilp]="N".$suorareitti{$srj{$kilp}}; $rast[$kilp]="N".$suorarastit{$srj{$kilp}}; $kilp++; #exit; } } close(SISAAN); ## nyt on valiajat, reittipiirros ja rastipisteet selvillä ## nyt lasketaan animaatioille pisteet ## tämä pitäisi tehdä clientissä serveriä säästääksemme, mutta ## ei nyt jaksa javalla väsätä, ehkä sitten joskus $kilp=1; while($in{"k".$kilp} ne''){ $aikasiirto=0; if($in{"k".$kilp}<100000){ print ''.($lahtoaika[$kilp]-$laikaMin).';'; @reitti=split(/N/,$viiva[$kilp]); @valiajat=split(/\;/,$vajat[$kilp]); @rastit=split(/N/,$rast[$kilp]); $i=0; $viiva[$kilp]=$viiva[$kilp]."N"; $viivatemp=""; foreach $rec (@rastit){ $i++; if($rec ne ""){ $j="NC".$i."N";$k="N".$rec."N"; ($temp,$viiva[$kilp])=split(/${k}/,$viiva[$kilp],2); $viiva[$kilp]="N".$viiva[$kilp]; $viivatemp=$viivatemp.$temp.$j; } } $viiva[$kilp]=$viivatemp; $i=0; foreach $rec (@rastit){ $i++;$j="NC".$i."N";$k="N".$rec.'|'.$rec."N"; $viiva[$kilp]=~ s/${j}/${k}/; } $viiva[$kilp]=~ s/^\|//; $viiva[$kilp]=~ s/NN/N/g; $viiva[$kilp]=~ s/NN/N/g; $viiva[$kilp]=~ s/NN/N/g; @rastivalit=split(/\|/,$viiva[$kilp]); $ulos=join("\n",@rastivalit); $i=0; $matkasiirto=0; foreach $rec (@rastivalit){ $rec=~ s/^N//; $matkasiirto=0; $i++; } $i_rastit=0; $i_reitti=0; $i_valiajat=0; $i_piste=0; $aika=0; $matka=0; while ($valiajat[$i_rastit] ne '' && ($i_rastit==0 || $valiajat[$i_rastit]>$valiajat[$i_rastit-1])){ $rastivalit[$i_rastit]=~ s/^N//; @viivab=split(/N/,$rastivalit[$i_rastit]); # lasketaan pituus $x0=0; $y0=0; $pituus=0; $i=0; $lisaaika=0; foreach $rec (@viivab){ ($x1,$y1)=split(/\;/,$rec); if($i>0){ $pituus=$pituus+sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1)); if($x0 == $x1 && $y0 == $y1){ ## 2 peräkkäistä klikkausta = pysähdys 3 sec $lisaaika=$lisaaika+3; } } $x0=$x1;$y0=$y1; $i++; } $valiaika=$valiajat[$i_rastit]-$valiajat[$i_rastit-1]; if($i_rastit==0){ $valiaika=$valiajat[$i_rastit]; } ## hyomioidaan pysähdykset $valiaika=$valiaika-$lisaaika; if($valiaika ==0 || $valiaika<0 ){ $valiaika=0.00001; } $step=($pituus/($valiaika/$raika)); $matkasiirto=$aikasiirto*$step; # pisteet polylinen varrelle $i=0;$seis=0; foreach $rec (@viivab){ ($x1,$y1)=split(/\;/,$rec); if($i>0){ if($x0 == $x1 && $y0 == $y1){ $seis++; ## ei kahta peräkkäistä klikkausta samaan pisteeseen }else{ $plkm=1; while($matka+$step*$plkm-$matkasiirto < $matka+sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1))){ $i_piste++; #lasketaan animaatioreittipiste $ax=floor((($step*$plkm-$matkasiirto)*$x1+$x0*(sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1))-($step*$plkm-$matkasiirto)))/(sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1)))); $ay=floor((($step*$plkm-$matkasiirto)*$y1+$y0*(sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1))-($step*$plkm-$matkasiirto)))/(sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1)))); $info=""; print "$ax;".$ay.",".$info."N"; if($seis > 0){ for($ii=0;$ii<$seis;$ii++){ print "$ax;$ay,".$info."N"; } $seis=0; } $plkm++; } $matkasiirto=$matka+sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1))-($matka+$step*($plkm-1)-$matkasiirto); $matka=$matka+sqrt(($x0-$x1)*($x0-$x1)+($y0-$y1)*($y0-$y1)); $aikasiirto=$matkasiirto/$step*1; } } $x0=$x1;$y0=$y1; $i++; } $i_rastit++; } }else{ print "0;0;0,0N"; } $kilp++; print "\n"; } } ################# viivat #################### if ($in{"act"} eq "viivat"){ ## tästä appletti lataa viivat ## gps muunnosparametrit valmiiksi open (SISAAN,"<$path"."gpsvastinpisteet_$in{'eventid'}.txt"); @d=; close(SISAAN); $d=join('',@d); $d =~ s/ //g; $d =~ s/\n//g; $d =~ s/\r//g; ## 3 pistetta ja niiden vastinpisteet ($o1x,$o1y,$o2x,$o2y,$o3x,$o3y,$s1x,$s1y,$s2x,$s2y,$s3x,$s3y)=split(/\|/,$d); $s1y=-$s1y; $s2y=-$s2y; $s3y=-$s3y; #lasketaan muunnos $xnolla1=$o1x; $ynolla1=$o1y; $xi=$o2x-$xnolla1; $yi=$o2y-$ynolla1; $xj=$o3x-$xnolla1; $yj=$o3y-$ynolla1; $xnolla=$s1x; $ynolla=$s1y; $x1 = $s2x-$xnolla; $y1 = $s2y-$ynolla; $x2 = $s3x-$xnolla; $y2 = $s3y-$ynolla; if($o1x==0 && $o1y==0 &&$o2x==0 &&$o2y==0){ ## ei ole annettu vastinpisteitä ei lasketa parametreja }else{ # nollalla jakamisen esto if($xj==0){$xj=0.000000000001;} if($yj==0){$yj=0.000000000001;} if(($xj * $yi - $yj * $xi)==0){$xj=$xj+0.000000000001;} if(($yj * $xi - $xj * $yi)==0){$yj=$yj+0.0000000000001;} #muunnosparametrit $b = ($x1 * $xj - $x2 * $xi) / ($xj * $yi - $yj * $xi); $a = ($x2 - $b * $yj) / $xj; $d = ($y1 * $yj - $y2 * $yi) / ($yj * $xi - $xj * $yi); $c = ($y2 - $d * $xj) / $yj; ## valmis } open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); @merkinnat=; close(SISAAN); open (SISAAN,"<$path"."gps_$in{'eventid'}.txt"); @GPS=; close(SISAAN); $kilp=1; while($in{"k".$kilp} ne''){ $in{"id"}=$in{"k".$kilp}; if($in{"id"}< 100000){ $i=0;$loytyi=0; foreach $rec (@merkinnat) { chomp($rec); ($idkilp,$id,$nimi,$aika,$viivat,$rastit)=split(/\|/,$rec); $i++; if ($in{"id"} eq $id){ $i++; $loytyi=1; $viivat =~ s/N/\n/g; $viivat =~ s/R/\r/g; $viivat =~ s/#/g/; print "\n1".$viivat; } } }else{ $i=0; foreach $rec (@GPS) { chomp($rec); ($id,$date,$datum,$nimi,$A,$B,$C,$gps)=split(/\|/,$rec,8); $i++; if ($in{"id"} eq $id){ $i++; ## parsitaan koordinaatit ja affiininen muunnos perään, appletin viivaformaatissa ulos ($header,$points)=split(/\[POINTS\]/,$gps); $pisteet=""; @temp=split(/\|/,$points); $i_ed=$0; $p_ed=$0; $sec_ed=$0; $i_ed2=$0; $p_ed2=$0; $sec_ed2=$0; $gpsplkm=0; foreach $rec (@temp){ if($rec ne ""){ ($pois,$rec)=split(/\"\,/,$rec,2); @rivi=split(/\,/,$rec); ## hour min sec ($h,$m)=split(/\:/,$rivi[1]); ($m,$s)=split(/\./,$m); if($h < $hed){ # vuorokausi on vaihtunut $h=$h+24; } $hed=$h; # edellisen tunti talteen vuorokauden testaamiseksi - yösuunnistuskisat # sekunteina $sec=24*60*$h+60*$m+$s; ## sekunnit laskettu - mutta nyt niitä ei vielä käytetä missään $i=$rivi[3]; $p=$rivi[2]; ## tsekataan ettei ole häröpiste $r=6370000; $nopeusmax=105.5; $ok=0; $pi=3.1415926535897932384626433832795; $y1=($p-$p_ed)/360*2*$pi*$r; $x1=($i-$i_ed)/360*cos($p/180)*2*$r*$pi; $y2=($p_ed-$p_ed2)/360*2*$pi*$r; $x2=($i_ed-$i_ed2)/360*cos($p/180)*2*$r*$pi; $x=sqrt($y1*$y1 + $x1*$x1)/($sec-$sec_ed+0.0001); $y=sqrt($y2*$y2 + $x2*$x2)/($sec_ed-$sec_ed2+0.0001); if($x < $nopeusmax*2.5 && $y < $nopeusmax*2.5 ){$ok=1;} if($x < $nopeusmax && $y < $nopeusmax){ ## muunnos $x=floor(0.5+$xnolla+($a*($i_ed-$xnolla1) + $b*($p_ed-$ynolla1))); $y=floor(0.5+$ynolla+($c*($p_ed-$ynolla1) + $d*($i_ed-$xnolla1))); $i_ed2=$i_ed; $p_ed2=$p_ed; $sec_ed2=$sec_ed; $i_ed=$i; $p_ed=$p; $sec_ed=$sec; }else{ ## muunnos if($x < $nopeusmax*1.2 && $y < $nopeusmax*1.2){ $apu_i=($i_ed2+2*$i_ed+$i)/4; $apu_p=($p_ed2+2*$p_ed+$p)/4; $x=floor(0.5+$xnolla+($a*($apu_i-$xnolla1) + $b*($apu_p-$ynolla1))); $y=floor(0.5+$ynolla+($c*($apu_p-$ynolla1) + $d*($apu_i-$xnolla1))); $i_ed2=$i_ed; $p_ed2=$p_ed; $sec_ed2=$sec_ed; $i_ed=$i; $p_ed=$p; $sec_ed=$sec; }else{ $apu_i=(2*$i_ed2+$i_ed+2*$i)/5; $apu_p=(2*$p_ed2+$p_ed+2*$p)/5; $x=floor(0.5+$xnolla+($a*($apu_i-$xnolla1) + $b*($apu_p-$ynolla1))); $y=floor(0.5+$ynolla+($c*($apu_p-$ynolla1) + $d*($apu_i-$xnolla1))); $i_ed2=$i_ed; $p_ed2=$p_ed; $sec_ed2=$sec_ed; $i_ed=$i; $p_ed=$p; $sec_ed=$sec; } } $gpsplkm++; if($gpsplkm>2 && ( $gpsplkm*1<7 || $ok==1)){ $pisteet=$pisteet.$x.";".$y."\n"; } }} ##printtataan 2viimeistä pistettä $x=floor(0.5+$xnolla+($a*($i_ed2-$xnolla1) + $b*($p_ed2-$ynolla1))); $y=floor(0.5+$ynolla+($c*($p_ed2-$ynolla1) + $d*($i_ed2-$xnolla1))); $pisteet=$pisteet.$x.";".$y."\n"; $x=floor(0.5+$xnolla+($a*($i_ed-$xnolla1) + $b*($p_ed-$ynolla1))); $y=floor(0.5+$ynolla+($c*($p_ed-$ynolla1) + $d*($i_ed-$xnolla1))); $pisteet=$pisteet.$x.";".$y."\n"; print "\n1\n".$pisteet; } } } if($i==0){ print " "; } if($loytyi==0){ print "\n1\n0;0"; } print "\n"; $kilp++; } } ################# kommentit #################### if ($in{"act"} eq "kommentit"){ ## Tästä apletti pyytää kommentit open (SISAAN,"<$path"."kommentit_$in{'eventid'}.txt"); @kommentit=; close(SISAAN); $kilp=1; while($in{"k".$kilp} ne''){ $in{"id"}=$in{"k".$kilp}; $i=0; foreach $rec (@kommentit) { chomp($rec); ($idkilp,$id,$nimi,$aika,$kommentit)=split(/\|/,$rec); $i++; if ($in{"id"} eq $id){ $kommentit =~ s/#nl#/\n/g; $kommentit =~ s/#cr#/\r/g; #$kommentit=~ s/\;/#chsmcl#/g; print "\n\n$nimi:\n".$kommentit; } } $kilp++; } } # ####### TALLENNUKSET########################################## ############# Reittipiirroksen tallennus ###################### if($in{'act'} eq "tallennapiirros"){ open (HANDLE,"<".$path."kilpailijat_$in{'eventid'}.txt"); @d=; close HANDLE; if($in{'lisaa'} eq '1'){ ## if add mode ## get ID foreach $rec (@d){ ($id,$rest)=split(/\|/,$rec,2); if($in{'id'} < $id){$in{'id'}=$id;} } $in{'id'}=(1*$in{'id'})+1; }else{ ## read original version on name, to avoid some charset trouble foreach $rec (@d){ @r=split(/\|/,$rec); if($in{'id'} == $r[0] && $r[3] ne ''){$in{'suunnistaja'}=$r[3];} } } ## input $in{'suunnistaja'}=~ s/#chsmcl#/\;/g; $in{'suunnistaja'}=~ s/#chnd#/\&/g; $in{'kommentit'}=~ s/#chsmcl#/\;/g; $in{'kommentit'}=~ s/#chnd#/\&/g; open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); @merkinnat=; close(SISAAN); $ok=1; foreach $rec (@merkinnat) { chomp($rec); ($idkilp,$id,$nimi,$hajonta,$viivat,$rastit)=split(/\|/,$rec); if($id eq $in{'id'}){ $ok=0; ## eli piirros oli jo olemassa, ei tallenneta } } #$in{'rdata'}=~ s/\;/N/g; $in{'rdata'}=~ s/\,/\;/g; ($reitti,$rastit)=split(/\|/,$in{'rdata'}); if($ok == 1){ open (HANDLE,">>".$path."merkinnat_$in{'eventid'}.txt"); &lock_file; print HANDLE $in{'rataid'}."|".$in{'id'}."| $in{'suunnistaja'}|$in{'hajonta'}|$reitti|$rastit\n"; &unlock_file; close HANDLE; $in{'kommentit'}=~ s/\n/#nl#/g; $in{'kommentit'}=~ s/\r/#cr#/g; open (HANDLE,">>".$path."kommentit_$in{'eventid'}.txt"); &lock_file; print HANDLE $in{'rataid'}."|".$in{'id'}."|$in{'suunnistaja'}||$in{'kommentit'}\n"; &unlock_file; close HANDLE; if($in{'lisaa'} eq '1'){ ## if add mode ## leg lengths ($pois,$lahto,$muut)=split(/N/,$reitti,3); $sLength=0; @aControls=split(/N/,($lahto.$rastit)); $ai=0; foreach $aControl (@aControls){ $ai++; if($ai>1){ ($ax1,$ay1)=split(/\;/,$aControls[$ai-2]); ($ax2,$ay2)=split(/\;/,$aControls[$ai-1]); $aleg[$ai-1]=sqrt(($ax1-$ax2)*($ax1-$ax2)+($ay1-$ay2)*($ay1-$ay2)); # Pythagoras } } ## $usersplits=''; $splitnro=0;$splitmissing=0; @splits=split(/m/,$in{'usersplits'}); foreach $split (@splits){ $splitnro++; ($min,$sec)=split(/s/,$split); if(floor(60*$min+(1*$sec))>0 && $splitmissing==0){ $usersplits.=floor(60*$min+(1*$sec)).';'; $lastsplit=floor(60*$min+(1*$sec)); } if(floor(60*$min+(1*$sec))==0){# a split is missing if($splitmissing==0){ $splitmissing=$splitnro; } } if(floor(60*$min+(1*$sec))>0 && $splitmissing>0){ # there has been missing split before this split $sLength=0; for($j=$splitmissing;$j<$splitnro+1;$j++){ $sLength=$sLength+$aleg[$j]; } $averagespeed=(floor(60*$min+(1*$sec))-$lastsplit)/$sLength; $sLength=0; for($j=$splitmissing;$j<$splitnro+1;$j++){ $sLength=$sLength+$aleg[$j]; $usersplits.=floor($lastsplit+$sLength*$averagespeed).';'; } $splitmissing=0; $lastsplit=floor(60*$min+(1*$sec)); } } $result=$min.':'.$sec; open (HANDLE,">>".$path."kilpailijat_$in{'eventid'}.txt"); &lock_file; print HANDLE $in{'id'}."|".$in{'rataid'}."||$in{'suunnistaja'}|0|||$result|$usersplits\n"; &unlock_file; close HANDLE; } } print "\n"; exit; } ###################### tallennusonnistui-sivu ################# if ($in{"act"} eq "tallennettu"){ ## language check $kieli="fi"; foreach $rec (@languages){ if($rec eq $in{'kieli'}){ $kieli=$rec; } } open (SISAAN,"<".$path."../lang_".$kieli.".txt"); @lang=; close(SISAAN); $lang=join('',@lang); ($lang, $langkiitos)=split(/####/,join('',@lang)); print " OK







$langkiitos
"; exit; } ################# radat #################### if ($in{"act"} eq "rata"){ if($in{'kohdistus'} ne '1'){ ## tästä appletti kysyy radan ratapiirrokset ## jos viestimoodi if($in{"hajonnat"} ne''){ open (SISAAN,"<$path"."radat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($id,$status,$nimi,$viivat)=split(/\|/,$rec); if ($in{"id"} eq $id || index($in{"hajonnat"},'¤'.$id.'¤')>-1){ $viivat =~ s/N/\n/g; $viivat =~ s/R/\r/g; $viivat =~ s/#//g; print "$viivat\n"; } } close(SISAAN); }else{#henk koht open (SISAAN,"<$path"."radat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($id,$status,$nimi,$viivat)=split(/\|/,$rec); if ($in{"id"} == $id || $in{"id"} eq '99999'){ $viivat =~ s/N/\n/g; $viivat =~ s/R//g; $viivat =~ s/#//g; if($in{"id"} ne '99999'){ print "$viivat\n"; }else{ $count++; $out.=$viivat."\n"; } } } close(SISAAN); if($in{"id"} eq '99999'){ ## vain ympyrät kaikkien ratojen systeemiin if($count > 10){ @d=split(/\n/,$out); $out=''; foreach $rec (@d){ ($type,$rest)=split(/\;/,$rec,2); if($e{$rec} eq'' && $type eq '1'){ $e{$rec}=1; print "$rec\n"; } } }else{ print $out; } } }# henkkoht moodi }else{ open (SISAAN,"<$path"."rastikanta_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($id,$x,$y)=split(/\|/,$rec); $x=floor($x*10); $y=floor($y*10); print "1;$x;$y;0;0\n"; } close(SISAAN); } } ################# ratapisteet #################### if ($in{"act"} eq "ratapisteet"){ ## tästä appletti kysyy radan ratapiirrokset open (SISAAN,"<$path"."ratapisteet_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($id,$pisteet)=split(/\|/,$rec); if ($in{"id"} == $id ){ $pisteet =~ s/N/\n/g; print "$pisteet\n"; } } close(SISAAN); } ############################################################### sub lock_file{ if($locking eq '1'){ $exit=15; # max yritykset/sekunnit $lock_i=0; if (!flock (HANDLE,LOCK_EX) ){ $released=FALSE; until ($released eq TRUE || $lock_i>$exit) { $lock_i++; sleep 1; if (flock(HANDLE,2)) { $released=TRUE; } } } if ($lock_i>$exit) { print "Lock error. - Virhe lukituksessa.
If this is new insall: path is wrong, there is no enough permissios or locking should be turned of on this server."; exit; } } } sub unlock_file { if($locking eq '1'){ flock(HANDLE,LOCK_UN); } }
"; if($default_lang ne 'fi'){ $out=$out."

$events

"; }else{ $out=$out."

Tapahtumat:

"; } $out=$out.""; $count=0; @data = sort { (split /\|/, $a, 6)[4] cmp (split /\|/, $b, 6)[4] } @data; if($in{'first'}!=1){ @data = reverse @data; } foreach $rec (@data){ $count++; chomp($rec); ($id,$karttaid,$tyyppi,$nimi,$paiva,$seura,$taso,$notes)=split(/\|/,$rec,8); if($in{'count'}<$count && $in{'count'}+30>=$count ){ $out=$out.""; $bcolor="#f8f8ff"; if($count % 2 == 0){$bcolor="#E8E8F0";} if($default_lang ne 'fi'){ $out=$out.""; }else{ $out=$out.""; } if($Splitsbrowser==1 && $tyyppi != 3){ $out=$out. "\n"; }else{ $out=$out. "\n"; } } } $out=$out. "
$paiva$nimi$seura$eLevel{$taso}[$latestRoutes]$paiva$nimi$seura$eLevel{$taso}[Uusimmat piirrokset][SplitsBrowser]
 
\n"; if($OGraphApplet ==1 && $tyyppi != 3){ if($default_lang eq 'fi'){ $out=$out."

Väliaika-graafit: OGraphApplet

"; }else{ $out=$out."

Split graphics: OGraphApplet

"; } } $out=$out."
"; if($in{'count'}>0){ $out=$out."<<<"; } if($in{'count'}+30 < $count){ $out=$out." >>>"; } $out=$out."

"; $out =~s/ä/\ä\;/g; $out =~s/ö/\ö\;/g; $out =~s/å/\å\;/g; $out =~s/Ä/\Ä\;/g; $out =~s/Ö/\Ö\;/g; $out =~s/Å/\Å\;/g; print $out; }else{ $plusgif=""; $minusgif=""; $perloadimages=""; $igif=""; ## event tree menu #### open(SISAAN, "<".$path."kisat.txt"); @data=; close(SISAAN); $out= "
"; #if($default_lang ne 'fi'){ #$out.="

$events"; #}else{ #$out.="

Tapahtumat:"; #} $out.="


                                                          "; $out.="

"; if($OGraphApplet ==1 && $tyyppi != 3){ if($default_lang eq 'fi'){ $out.="

Väliaika-graafit: OGraphApplet

"; }else{ $out.="

Split graphics: OGraphApplet

"; } } $out.="
$perloadimages
"; print $out; } exit; } ################# sarjat #################### if ($in{"act"} eq "sarjat"){ ## lasketaan montako piirrosta on missäkin sarjassa open (SISAAN,"<$path"."kommentit_$in{'eventid'}.txt"); @kommentit=; close(SISAAN); foreach $rec (@kommentit) { chomp($rec); ($idkilp,$id,$nimi,$aika,$kommentit)=split(/\|/,$rec); $i++; $lkm{$idkilp}++; } ## luetaan saarjat open (SISAAN,"<$path"."sarjat_$in{'eventid'}.txt"); if($in{'kohdistus'}eq "1"){ print "1;Koko rastikanta\n"; }else{ while (defined ($rec = )) { chomp($rec); ($id,$nimi)=split(/\|/,$rec); print "$id;$nimi (".(1*$lkm{$id}).")\n"; } close(SISAAN); print "99999;kaikki\n"; #print "99998;GPS\n"; } } ################# kilpailijat/sarja############## if ($in{"act"} eq "kilpailijat"){ if($in{'sarja'} ne "99999"){ open (SISAAN,"<$path"."kilpailijat_$in{'eventid'}.txt"); if($in{'viesti'} ne '1'){ while (defined ($rec = )) { chomp($rec); ($id,$sarjanro,$sarja,$nimi,$laika,$aika,$sija,$tulos,$valiajat)=split(/\|/,$rec); if($sarjanro eq $in{'sarja'}){ print "$id;$sija $nimi $tulos\n"; } } }else{ while (defined ($rec = )) { chomp($rec); ($id,$sarjanro,$sarja,$nimi,$laika,$osuus,$hajonta,$tulos,$valiajat)=split(/\|/,$rec); if($sarjanro eq $in{'sarja'}){ print "$id;$hajonta;$sija $nimi $tulos\n"; } } } close(SISAAN); open (SISAAN,"<$path"."gps_$in{'eventid'}.txt"); $j=0;$i=0; while (defined ($rec = )) { chomp($rec); ($idkilp,$date,$datum,$nimi,$loput)=split(/\|/,$rec); $i++; print "$idkil;$nimi GPS\n"; $j++; } close(SISAAN); }else{ $j=0;$i=0; open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($idkilp,$id,$nimi,$aika,$viivat,$rastit)=split(/\|/,$rec); $i++; print $id.";$nimi\n"; $j++; } close(SISAAN); if($in{'sarja'} ne "99998"){ open (SISAAN,"<$path"."gps_$in{'eventid'}.txt"); $j=0;$i=0; while (defined ($rec = )) { chomp($rec); ($idkilp,$date,$datum,$nimi,$loput)=split(/\|/,$rec); $i++; print "$idkil;$nimi GPS\n"; $j++; } close(SISAAN); } } } ################# piirtaneetkilpailijat/sarja############## ############# kilpailijalista ############## if ($in{"act"} eq "piirtaneetkilpailijat"){ ## Tästä appletti kysyy piirtaneetkilpailijat if($in{'kaikki'} eq "1" && $in{"rata"} ne "99999"){ ## tarkistetan piirtäneet tähtimerkintää varten open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($idkilp,$id,$nimi,$aika,$viivat,$rastit)=split(/\|/,$rec); $tahti{$id}="*"; } close(SISAAN); ### open (SISAAN,"<$path"."kilpailijat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($id,$sarjanro,$sarja,$nimi,$laika,$aika,$sijahajonta,$tulos,$valiajat)=split(/\|/,$rec); if($sarjanro eq $in{'rata'}){ if($in{'viesti'} ne '1'){ print "$tahti{$id}$sijahajonta $nimi $tulos ;$id\n"; }else{ print "$tahti{$id} $nimi $tulos;$sijahajonta;$id\n"; } } } close(SISAAN); if($in{"rata"} eq "99998"){#GPS open (SISAAN,"<$path"."gps_$in{'eventid'}.txt"); $j=0;$i=0; while (defined ($rec = )) { chomp($rec); ($idkilp,$date,$datum,$nimi,$loput)=split(/\|/,$rec); $i++; print "$nimi GPS;".$idkilp."\n"; $j++; } close(SISAAN); } }else{ $j=0;$i=0; if($in{'viesti'} ne '1'){ open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($idkilp,$id,$nimi,$aika,$viivat,$rastit)=split(/\|/,$rec); $i++; if($idkilp eq $in{"rata"} || $in{"rata"} eq "99999"){ ## eli on tässä sarjassa @ulos[$j]=$nimi.";".$id."\n"; $j++; } } close(SISAAN); @ulos = sort { (split '\;', $a, 2)[1] <=> (split '\;', $b, 2)[1] } @ulos; print @ulos; }else{ # viesti open (SISAAN,"<$path"."merkinnat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($idkilp,$id,$nimi,$hajonta,$viivat,$rastit)=split(/\|/,$rec); $i++; if($idkilp eq $in{"rata"} || $in{"rata"} eq "99999"){ ## eli on tässä sarjassa @ulos[$j]=$nimi.';'.$hajonta.';'.$id."\n"; $j++; } } close(SISAAN); @ulos = sort { (split '\;', $a, 3)[2] <=> (split '\;', $b, 3)[2] } @ulos; print @ulos; } } #if($in{"rata"} eq "99998" || $in{"rata"} eq "99999"){#GPS #open (SISAAN,"<$path"."gps_$in{'eventid'}.txt"); #$j=0;$i=0; # #while (defined ($rec = )) { # chomp($rec); # ($idkilp,$date,$datum,$nimi,$loput)=split(/\|/,$rec); #$i++; # #print "$nimi GPS :;".$idkilp."\n"; # $j++; # } #close(SISAAN); #print @ulos; #} } ################# rastit kohdistuksee ############## if ($in{"act"} eq "rastisto"){ open (SISAAN,"<$path"."sarjojenkoodit_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($sarjaid,$koodit)=split(/\|/,$rec,2); $codes=$codes."|".$koodit; } @dat=split(/\|/,$codes); $ulos=""; $rastilkm=1; foreach $rec (@dat){ if($rec ne ''){ if($koodi{$rec}!=1){ $koodi{$rec}=1; $ulos=$ulos.$rec."\n"; } } } print $ulos; } ################# fotot ############# if ($in{"act"} eq "valokuvat"){ open (SISAAN,"<$path"."valokuvat_$in{'eventid'}.txt"); while (defined ($rec = )) { chomp($rec); ($x,$y,$url)=split(/\|/,$rec,3); if($x ne '' && $y ne '' && $url ne '' ){ $x=floor($x); $y=floor($y); print "$x;$y;$url\n"; } } } ################# valiajat ############## if ($in{"act"} eq "valiajat"){ $nro=1;$otsikko="-------------------"; open (SISAAN,"<$path"."kilpailijat_$in{'eventid'}.txt"); #while($in{'k'.$nro} ne ''){ while (defined ($rec = )) { chomp($rec); ($id,$sarjanro,$sarjanimi,$nimi,$laika,$aika,$sija,$tulos,$valiajat)=split(/\|/,$rec); if($id eq $in{'k'.$nro}){ @splits=split(/\;/,$valiajat); $old=0;$i=1; $ulos=substr($nimi." ",0,20); foreach $rec (@splits){ chomp($rec); if($nro==1){ $otsikko=$otsikko.substr("--".$i."----",0,6); $i++; } $min=floor(($rec-$old)/60); $sec=($rec-$old)-60*floor(($rec-$old)/60); if ($sec <10){$sec='0'.$sec;} $old=$rec; $ulos=$ulos.substr("$min.$sec ",0,6); } if($nro==1){ print "$otsikko\n"; } print "$ulos\n"; $nro++; } } #} close(SISAAN); print "$otsikko\n"; } ############################################# if ($in{'act'} eq 'help' ){ # tsekataan kieli $kieli=$default_lang; foreach $rec (@languages){ if($in{'kieli'} eq $rec){$kieli=$rec;} } open (SISAAN,"<".$path."../lang_".$kieli.".txt"); @lang=; close(SISAAN); $lang=join('',@lang); ($lang, $langkiitos)=split(/####/,join('',@lang)); open (SISAAN,"<".$path."../map.txt"); @sivu=; close(SISAAN); $sivu= join('',@sivu); ($head,$applet,$end)=split(/applet/i,$sivu); $head=$head.'table width=100% height=94% cellpadding=25 cellspacing=1>
'.$lang.'