#!/usr/bin/perl ############################################ ## ## ## WebAdverts (Display) ## ## by Darryl Burgdorf ## ## (e-mail burgdorf@awsd.com) ## ## ## ## last modified: 5/27/97 ## ## copyright (c) 1997 ## ## ## ## latest version is available from ## ## http://awsd.com/scripts/ ## ## ## ############################################ require "/www/2000/ads/ads_configure.pl"; &ConfigureAdverts; $UseLocking = 1; $displayad = $ENV{'QUERY_STRING'}; srand(); if ($displayad) { &gotoad; } else { # print "Content-type: text/html\n\n"; $WrapCounter = 0; &displayad; } sub displayad { $WrapCounter++; open (COUNT, "+<$advertcount"); $lockerror = &LockFile(COUNT); if ($lockerror) { print "[ File Lock Error ($advertcount)! ]"; exit; } @lines = ; if ((@lines < 4) || ($WrapCounter > @lines-3)) { &UnlockFile(COUNT); close (COUNT); exit; } foreach $line (@lines) { chop ($line) if ($line =~ /\n$/); } $count = $lines[0]; $exposures = $lines[1]; $displayad = $lines[$count+2]; $exposures++; $count++; if ($count > @lines-3) { $count = 1; } $lines[0] = $count; unless ($shown > 0) { $lines[1] = $exposures; } truncate (COUNT,0); seek(COUNT, 0, 0); foreach $line (@lines) { print COUNT "$line\n"; } &UnlockFile(COUNT); close (COUNT); open (DISPLAY, "+<$adverts_dir/$displayad.txt"); $lockerror = &LockFile(DISPLAY); if ($lockerror) { print "[ File Lock Error ($displayad.txt)! ]"; exit; } @lines = ; foreach $line (@lines) { chop ($line) if ($line =~ /\n$/); } ($max,$shown,$visits,$url,$image,$height,$width,$alt,$pass,$text,$start,$weight) = @lines; unless ($weight) { $weight = 1; } unless ($text) { $text = "Please Visit Our Sponsor!"; } if ((($AdvertTracking < 2) && ($max <= $shown)) || (($AdvertTracking == 2) && ($max <= $visits)) || ((rand) > $weight)) { &UnlockFile(DISPLAY); close (DISPLAY); &displayad; exit; } print ""; print "\"$alt\""; print "
"; print "$text\n"; $shown += 1; truncate (DISPLAY,0); seek(DISPLAY, 0, 0); print DISPLAY "$max\n"; print DISPLAY "$shown\n"; print DISPLAY "$visits\n"; print DISPLAY "$url\n"; print DISPLAY "$image\n"; print DISPLAY "$height\n"; print DISPLAY "$width\n"; print DISPLAY "$alt\n"; print DISPLAY "$pass\n"; print DISPLAY "$text\n"; print DISPLAY "$start\n"; print DISPLAY "$weight\n"; &UnlockFile(DISPLAY); close (DISPLAY); exit; } sub gotoad { open (DISPLAY, "+<$adverts_dir/$displayad.txt"); $lockerror = &LockFile(DISPLAY); if ($lockerror) { exit; } @lines = ; foreach $line (@lines) { chop ($line) if ($line =~ /\n$/); } $lines[2] += 1; truncate (DISPLAY,0); seek(DISPLAY, 0, 0); foreach $line (@lines) { print DISPLAY ("$line\n"); } &UnlockFile(DISPLAY); close (DISPLAY); print ("Location: $lines[3]\n\n"); exit; } sub LockFile { local(*FILE) = @_; local($TrysLeft) = 10; if ($UseLocking) { while ($TrysLeft--) { $lockresult = eval("flock(FILE,6)"); if ($@) { $UseLocking = 0; last; } if (!$lockresult) { select(undef,undef,undef,0.1); } else { last; } } } if ($TrysLeft >= 0) { return 0; } else { return -1; } } sub UnlockFile { local(*FILE) = @_; if ($UseLocking) { flock(FILE,8); } }