#!/usr/bin/perl require strict; require "/home/shroom/public_html/cgi-lib.pl"; &ReadParse; # THIS SCRIPT NAME $SCRIPTNAME = "index.cgi"; # FILE NAME OF POSTS FILE (MIGHT HAVE TO chmod ugo+w) $DB_FILE = "spokes.db"; ## GET THE DATE A LA SHELL $DATE = `date`; chop $DATE; ## FORM VARIALBES $SUBMIT = $in{submit}; $Choice = $in{Choice}; ### LOAD EXISTING WHEEL FROM DATABASE if ($SUBMIT eq "load") { open (FP, "$DB_FILE"); flock (FP, LOCK_EX); while ($Choice > 0) { $_ = ; $Choice = $Choice - 1;} ($a, $a, $Desc, $a, $in{EffRimDia}, $in{SpokeCount}, $in{FlangeDiaFront}, $in{FlangeFlangeFront}, $in{FlangeDiaRearLeft}, $in{FlangeDiaRearRight}, $in{DropoutWidth}, $in{LeftNutLeftFlange}, $in{FlangeFlangeRear}) = split ('\t', , 13); flock(FP, LOCK_UN); close(FP); } $Desc = $Desc ? $Desc : $in{Desc} ? $in{Desc} : "Untitled"; $EffRimDia = &tomilli('EffRimDia'); $SpokeCount = $in{SpokeCount}; $FlangeDiaFront = &tomilli('FlangeDiaFront'); $FlangeFlangeFront = &tomilli('FlangeFlangeFront'); $FlangeDiaRearLeft = &tomilli('FlangeDiaRearLeft'); $FlangeDiaRearRight = &tomilli('FlangeDiaRearRight'); $DropoutWidth = &tomilli('DropoutWidth'); $LeftNutLeftFlange = &tomilli('LeftNutLeftFlange'); $FlangeFlangeRear = &tomilli('FlangeFlangeRear'); $FlangeFlange1 = $FlangeFlangeFront; $FlangeFlange2 = (($DropoutWidth / 2) - $LeftNutLeftFlange) * 2; $FlangeFlange3 = ($FlangeFlangeRear - ($FlangeFlange2 / 2)) *2; sub tomilli { $a = @_[0]; $in{$a} =~ s/"/"/; $_ = $in{$a}; (/"$/ ? 25.4 : 1) * ($_ + 0); } $pi = 3.14159; $HoleRadius = 1.4; # # APPEND TO MESSAGES FILE THE SUBMITTTED DATA PLUS SOME HTML SO IT RENDERES # NICE WHEN DUMPED RAW # if ($SUBMIT eq "save") { ## OPEN DB FILE THAT HOLDS ALL THE PREFORMATTED MESSAGES open (FP, "+< $DB_FILE"); flock (FP, LOCK_EX); # THE FIRST LINE AND FIELD HOLDS THE MESSAGE COUNT, SO GRAB/UPDATE IT seek (FP, 0, 0); $num = + 1; seek (FP, 0, 0); print FP $num; # SEEK TO END OF DB FILE AND WRITE NEW POST seek (FP, 0, 2); print FP qq[$num\t$DATE\t$Desc\t$ENV{REMOTE_ADDR} $ENV{REMOTE_HOST}\t$in{EffRimDia}\t$in{SpokeCount}\t$in{FlangeDiaFront}\t$in{FlangeFlangeFront}\t$in{FlangeDiaRearLeft}\t$in{FlangeDiaRearRight}\t$in{DropoutWidth}\t$in{LeftNutLeftFlange}\t$in{FlangeFlangeRear}\n]; flock (FP, LOCK_UN); close (FP); } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # MESSAGE BOARD MIME AND HTML HEADER STUFF HERE # print qq{Content-type: text/html A SPOKE LENGTH CALCULATOR A SPOKE LENGTH CALCULATOR
$THREAD   reset   message board  

-- $Desc --
X-pattern     0       1       2       3       4       5       6       7       8       9
---------  ------  ------  ------  ------  ------  ------  ------  ------  ------  ------
Front mm };
for ($a=0; $a<10; $a++) {
	printf ("%8.2f", &computelength($FlangeDiaFront, $FlangeFlange1, $a));
}

print qq{
Left  mm };
for ($a=0; $a<10; $a++) {
	printf ("%8.2f", &computelength($FlangeDiaRearLeft, $FlangeFlange2, $a));
}

print qq{
Right mm };
for ($a=0; $a<10; $a++) {
	printf ("%8.2f", &computelength($FlangeDiaRearRight, $FlangeFlange3, $a));
}

print qq {
}; sub computelength { my ($FlangeDia, $FlangeFlange, $Pattern) = @_; my ($SpokePosOffset, $RadialComp, $HubHalfWidth, $SpokeAngle, $SpokeLength, $HubRadius, $RimRadius); if ($SpokeCount == 0) {$SpokeCount = 1}; $HubRadius = $FlangeDia / 2; $RimRadius = $EffRimDia / 2; $HubHalfWidth = $FlangeFlange / 2; $SpokeAngle = 4 * $pi * $Pattern / $SpokeCount; $SpokePosOffset = $HubRadius * sin($SpokeAngle); $RadialComp = $RimRadius - ($HubRadius * cos($SpokeAngle)); $SpokeLength = sqrt($SpokePosOffset * $SpokePosOffset + $RadialComp * $RadialComp + $HubHalfWidth * $HubHalfWidth) - $HoleRadius; } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # FORM INPUT HERE # print qq{
COMMON MEASUREMENTS
Effective rim diameter
Spoke count
FRONT WHEEL
Flange diameter
Flange to flange
REAR WHEEL
Flange diameter left
Flange diameter right
Dropout width
Left nut to left flange
Flange to flange
Note: All units assumed millimeters unless appended with a quote (ie: 123.4") for inches
Description/Name


Written by Shrewm
}; #print &PrintVariables;