On Sun, Feb 02, 2020 at 03:48:22PM -0500, George Koehler wrote: > On Sun, 2 Feb 2020 15:12:29 +0100 > Charlene Wendling <juliana...@posteo.jp> wrote: > > > It works fine on amd64, has no further regressions on powerpc, and > > i'm fine with your clang fix. Obviously, powerpc issues should not > > hinder the x86 fix, and i've no objection to see that diff committed > > after devel/p5-SDL is committed. > > > > For everyone's convenience, here is a diff with the Perl 5.30 fixes > > and the clang one combined. > > The combined diff is ok gkoehler@
OK afresh1@ on both p5-SDL and this frozen-bubble change. It works much better (at all) on my i386 and amd64 and apparently not any worse on macppc. > I have no opinion about whether your games/frozen-bubble commit will > happen before or after my devel/p5-SDL commit. --George > > > > > Charlène. > > > > > > Index: Makefile > > =================================================================== > > RCS file: /cvs/ports/games/frozen-bubble/Makefile,v > > retrieving revision 1.28 > > diff -u -p -u -p -r1.28 Makefile > > --- Makefile 17 Jul 2019 14:49:22 -0000 1.28 > > +++ Makefile 2 Feb 2020 14:05:17 -0000 > > @@ -6,7 +6,7 @@ COMMENT-server = server for the frozen-b > > VER = 2.2.0 > > DISTNAME = frozen-bubble-${VER} > > PKGNAME-main = ${DISTNAME} > > -REVISION-main = 14 > > +REVISION-main = 15 > > PKGNAME-server = frozen-bubble-server-${VER} > > REVISION-server = 10 > > CATEGORIES = games > > @@ -29,6 +29,9 @@ BUILD_DEPENDS = devel/p5-SDL \ > > devel/p5-Locale-gettext \ > > devel/gettext,-tools > > > > +# Needed for post-patch deinterlacing > > +BUILD_DEPENDS += graphics/ImageMagick > > + > > RUN_DEPENDS-main = devel/p5-SDL \ > > devel/p5-Locale-gettext \ > > ${BASE_PKGPATH},-server > > @@ -46,5 +49,14 @@ WANTLIB-main = SDL SDL_Pango SDL_mixer > > WANTLIB-server = c glib-2.0 intl pthread > > > > MULTI_PACKAGES = -main -server > > + > > +# fix "Interlace handling should be turned on when using png_read_image" > > +post-patch: > > + @cd ${WRKSRC} && for interlaced in gfx/flags/flag-de.png \ > > + gfx/flags/flag-fi.png \ > > + gfx/flags/flag-no.png; \ > > + do \ > > + ${LOCALBASE}/bin/mogrify -interlace none $${interlaced} ;\ > > + done > > > > .include <bsd.port.mk> > > Index: patches/patch-c_stuff_fb_c_stuff_xs > > =================================================================== > > RCS file: patches/patch-c_stuff_fb_c_stuff_xs > > diff -N patches/patch-c_stuff_fb_c_stuff_xs > > --- /dev/null 1 Jan 1970 00:00:00 -0000 > > +++ patches/patch-c_stuff_fb_c_stuff_xs 2 Feb 2020 14:05:17 -0000 > > @@ -0,0 +1,125 @@ > > +$OpenBSD$ > > + > > +Fix build with clang: it errors when functions are inside other > > +functions. Rename sqr(int) to prevent conflict with sqr(float). > > + > > +Index: c_stuff/fb_c_stuff.xs > > +--- c_stuff/fb_c_stuff.xs.orig > > ++++ c_stuff/fb_c_stuff.xs > > +@@ -94,17 +94,17 @@ int rand_(double val) { return 1+(int) (val*rand()/(RA > > + > > + /* -------------- Double Store ------------------ */ > > + > > ++static void copy_line(int l, SDL_Surface * s, SDL_Surface * img) { > > ++ memcpy(s->pixels + l*img->pitch, img->pixels + l*img->pitch, > > img->pitch); > > ++} > > ++static void copy_column(int c, SDL_Surface * s, SDL_Surface * img) { > > ++ int bpp = img->format->BytesPerPixel; > > ++ for (y=0; y<YRES; y++) > > ++ memcpy(s->pixels + y*img->pitch + c*bpp, img->pixels + > > y*img->pitch + c*bpp, bpp); > > ++} > > ++ > > + void store_effect(SDL_Surface * s, SDL_Surface * img) > > + { > > +- void copy_line(int l) { > > +- memcpy(s->pixels + l*img->pitch, img->pixels + l*img->pitch, > > img->pitch); > > +- } > > +- void copy_column(int c) { > > +- int bpp = img->format->BytesPerPixel; > > +- for (y=0; y<YRES; y++) > > +- memcpy(s->pixels + y*img->pitch + c*bpp, img->pixels + > > y*img->pitch + c*bpp, bpp); > > +- } > > +- > > + int step = 0; > > + int store_thickness = 15; > > + > > +@@ -116,8 +116,8 @@ void store_effect(SDL_Surface * s, SDL_Surface * img) > > + for (i=0; i<=YRES/2/store_thickness; i++) { > > + int v = step - i; > > + if (v >= 0 && v < store_thickness) { > > +- copy_line(i*store_thickness + v); > > +- copy_line(YRES - 1 - (i*store_thickness > > + v)); > > ++ copy_line(i*store_thickness + v, s, > > img); > > ++ copy_line(YRES - 1 - (i*store_thickness > > + v), s, img); > > + } > > + } > > + step++; > > +@@ -133,8 +133,8 @@ void store_effect(SDL_Surface * s, SDL_Surface * img) > > + for (i=0; i<=XRES/2/store_thickness; i++) { > > + int v = step - i; > > + if (v >= 0 && v < store_thickness) { > > +- copy_column(i*store_thickness + v); > > +- copy_column(XRES - 1 - > > (i*store_thickness + v)); > > ++ copy_column(i*store_thickness + v, s, > > img); > > ++ copy_column(XRES - 1 - > > (i*store_thickness + v), s, img); > > + } > > + } > > + step++; > > +@@ -176,21 +176,22 @@ void bars_effect(SDL_Surface * s, SDL_Surface * img) > > + > > + /* -------------- Squares ------------------ */ > > + > > ++static const int squares_size = 32; > > ++ > > ++static int fillrect(int i, int j, SDL_Surface * s, SDL_Surface * img, int > > bpp) { > > ++ int c, v; > > ++ if (i >= XRES/squares_size || j >= YRES/squares_size) > > ++ return 0; > > ++ v = i*squares_size*bpp + j*squares_size*img->pitch; > > ++ for (c=0; c<squares_size; c++) > > ++ memcpy(s->pixels + v + c*img->pitch, img->pixels + v + > > c*img->pitch, squares_size*bpp); > > ++ return 1; > > ++} > > ++ > > + void squares_effect(SDL_Surface * s, SDL_Surface * img) > > + { > > + int bpp = img->format->BytesPerPixel; > > +- const int squares_size = 32; > > + > > +- int fillrect(int i, int j) { > > +- int c, v; > > +- if (i >= XRES/squares_size || j >= YRES/squares_size) > > +- return 0; > > +- v = i*squares_size*bpp + j*squares_size*img->pitch; > > +- for (c=0; c<squares_size; c++) > > +- memcpy(s->pixels + v + c*img->pitch, img->pixels + v + > > c*img->pitch, squares_size*bpp); > > +- return 1; > > +- } > > +- > > + int still_moving = 1; > > + > > + for (i=0; still_moving; i++) { > > +@@ -200,7 +201,7 @@ void squares_effect(SDL_Surface * s, SDL_Surface * img > > + > > + still_moving = 0; > > + for (j=i; j>=0; j--) { > > +- if (fillrect(j, k)) > > ++ if (fillrect(j, k, s, img, bpp)) > > + still_moving = 1; > > + k++; > > + } > > +@@ -212,20 +213,20 @@ void squares_effect(SDL_Surface * s, SDL_Surface * > > img > > + > > + /* -------------- Circle ------------------ */ > > + > > ++static int sqi(int v) { return v*v; } > > ++ > > + int * circle_steps; > > + const int circle_max_steps = 40; > > + void circle_init(void) > > + { > > +- int sqr(int v) { return v*v; } > > +- > > + circle_steps = malloc(XRES * YRES * sizeof(int)); > > + if (!circle_steps) > > + fb__out_of_memory(); > > + > > + for (y=0; y<YRES; y++) > > + for (x=0; x<XRES; x++) { > > +- int max = sqrt(sqr(XRES/2) + sqr(YRES/2)); > > +- int value = sqrt(sqr(x-XRES/2) + sqr(y-YRES/2)); > > ++ int max = sqrt(sqi(XRES/2) + sqi(YRES/2)); > > ++ int value = sqrt(sqi(x-XRES/2) + sqi(y-YRES/2)); > > + circle_steps[x+y*XRES] = > > (max-value)*circle_max_steps/max; > > + } > > + } > > Index: patches/patch-c_stuff_lib_FBLE_pm > > =================================================================== > > RCS file: patches/patch-c_stuff_lib_FBLE_pm > > diff -N patches/patch-c_stuff_lib_FBLE_pm > > --- /dev/null 1 Jan 1970 00:00:00 -0000 > > +++ patches/patch-c_stuff_lib_FBLE_pm 2 Feb 2020 14:05:17 -0000 > > @@ -0,0 +1,34 @@ > > +$OpenBSD$ > > + > > +Perl 5.30+ prohibits using my() in false conditionals > > + > > +Index: c_stuff/lib/FBLE.pm > > +--- c_stuff/lib/FBLE.pm.orig > > ++++ c_stuff/lib/FBLE.pm > > +@@ -31,6 +31,8 @@ > > + > > + package FBLE; > > + > > ++use feature qw(state); > > ++ > > + use POSIX(qw(floor ceil)); > > + use SDL; > > + use SDL::App; > > +@@ -1405,7 +1407,7 @@ sub display_levelset_screenshot { > > + $rect{middle}->y + $rect{middle}->height/2 - > > $rect{screenshot}->height/8 - 3 + $widgetMove); > > + > > + > > +- my %shrinks if 0; > > ++ state %shrinks; > > + my $current_nb = $start_level || 1; > > + if (!exists $shrinks{$name}{$current_nb}) { > > + my $surf = SDL::Surface->new(-name => > > "$FPATH/gfx/menu/please_wait.png"); > > +@@ -1417,7 +1419,7 @@ sub display_levelset_screenshot { > > + $app->update($rect{middle}); > > + > > + #- sorta "read ahead": will compute next 10 levels screenshots as > > well > > +- my $s_save if 0; > > ++ state $s_save; > > + if (!$s_save) { > > + $s_save = SDL::Surface->new(-name => > > "$FPATH/gfx/level_editor.png"); > > + } > > Index: patches/patch-frozen-bubble > > =================================================================== > > RCS file: patches/patch-frozen-bubble > > diff -N patches/patch-frozen-bubble > > --- /dev/null 1 Jan 1970 00:00:00 -0000 > > +++ patches/patch-frozen-bubble 2 Feb 2020 14:05:17 -0000 > > @@ -0,0 +1,52 @@ > > +$OpenBSD$ > > + > > +Perl 5.30+ prohibits using my() in false conditionals > > + > > +Index: frozen-bubble > > +--- frozen-bubble.orig > > ++++ frozen-bubble > > +@@ -47,6 +47,8 @@ use vars qw($TARGET_ANIM_SPEED $BUBBLE_SIZE $ROW_SIZE > > + $lev_number $playermalus $mptrainingdiff $loaded_levelset > > $direct_levelset $chainreaction %chains %img_mini $frame $sock $gameserver > > $mynick > > + $continuegamewhenplayersleave $singleplayertargetting > > $mylatitude $mylongitude %autokick $replayparam $autorecord $comment > > $saveframes $saveframesbase $saveframescounter); > > + > > ++use feature qw(state); > > ++ > > + use Getopt::Long; > > + use Data::Dumper; > > + use Locale::gettext; > > +@@ -269,7 +271,7 @@ sub play_music($) { > > + $app->delay(400); > > + $app->delay(10) while $mixer->playing_music; #- mikmod will segfault > > if we try to load a music while old one is still fading out > > + my %musics = (intro => '/snd/introzik.ogg', main1p => > > '/snd/frozen-mainzik-1p.ogg', main2p => '/snd/frozen-mainzik-2p.xm'); > > +- my $mus if 0; #- I need to keep a > > reference on the music or it will be collected at the end of this function, > > thus I manually collect previous music > > ++ state $mus; #- I need to keep a > > reference on the music or it will be collected at the end of this function, > > thus I manually collect previous music > > + if (@playlist) { > > + my $tryanother = sub { > > + my $elem = chomp_(shift @playlist); > > +@@ -3488,7 +3490,7 @@ sub choose_1p_game_mode() { > > + }; > > + > > + my $img = $imgbin{'1p_panel'}; > > +- my $save if 0; > > ++ state $save; > > + my $drect = SDL::Rect->new(-width => $img->width, -height => > > $img->height, > > + -x => $MENUPOS{xpos_panel}, '-y' => > > $MENUPOS{ypos_panel}); > > + if ($save) { > > +@@ -5573,7 +5575,7 @@ sub menu { > > + 'highscores' => { pos => 8, type => 'run', > > + run => sub { > > $menu_display_highscores->() } }, > > + ); > > +- my $current_pos if 0; $current_pos ||= 1; > > ++ state $current_pos; $current_pos ||= 1; > > + my @menu_invalids; > > + $invalidate_all = sub { push @menu_invalids, $menu_entries{$_}->{pos} > > foreach keys %menu_entries }; > > + > > +@@ -5724,7 +5726,7 @@ sub menu { > > + } > > + > > + if ($graphics_level > 1) { > > +- my $banner_pos if 0; > > ++ state $banner_pos; > > + $banner_pos ||= 670; > > + foreach my $b (keys %banners) { > > + my $xpos = $banners{$b} - $banner_pos; > > > > > > > > > > > > > > > > > -- > George Koehler <kern...@gmail.com> > -- andrew - http://afresh1.com Whatever happened to the days when hacking started at the cerebral cortex and not the keyboard? -- Sid from UserFriendly.org