from os import makedirs, walk, sep, remove
from os.path import join, dirname, basename, exists
from shutil import rmtree, copy, rmtree
from itertools import chain
from zipfile import ZipFile

import py2exe

from Setup import Setup

class SetupWin(Setup):

    def __init__(self):
        Setup.__init__(self)
        self.replace_isSystemDLL()

    def replace_isSystemDLL(self):
        origIsSystemDLL = py2exe.build_exe.isSystemDLL
        def isSystemDLL(pathname):
            if basename(pathname).lower() in ("libogg-0.dll", "sdl_ttf.dll"):
                return 0
            return origIsSystemDLL(pathname)
        py2exe.build_exe.isSystemDLL = isSystemDLL

    def setup(self):
        config = self.config.get_section("setup")
	windows = [{}]
	if config["init-script"]:
	    windows[0]["script"] = config["init-script"]
	if config["windows-icon-path"]:
	    windows[0]["icon-resources"] = [(1, config["windows-icon-path"])]
        Setup.setup(self, windows,
                    {"py2exe": {"packages": self.build_package_list(),
                                "dist_dir": config["windows-dist-path"]}})
        rmtree("build")
        self.copy_data_files()
        self.create_archive()

    def copy_data_files(self):
	root = self.config.get("setup", "windows-dist-path")
        for path in chain(*zip(*self.build_data_map())[1]):
            dest = join(root, dirname(path))
            if not exists(dest):
                makedirs(dest)
            copy(path, dest)
	self.include_readme(root)

    def include_readme(self, root):
	name = "README"
	if exists(name):
	    readme = open(name, "r")
	    reformatted = open(join(root, name + ".txt"), "w")
	    for line in open(name, "r"):
	    	reformatted.write(line.rstrip() + "\r\n")

    def create_archive(self):
        config = self.config.get_section("setup")
        title = self.translate_title() + "-" + config["version"] + "-win"
        archive_name = title + ".zip"
        archive = ZipFile(archive_name, "w")
        destination = config["windows-dist-path"]
        for root, dirs, names in walk(destination):
            for name in names:
                path = join(root, name)
                archive.write(path, path.replace(destination, title + sep))
        archive.close()
        copy(archive_name, "dist")
        remove(archive_name)
        rmtree(destination)
from random import randint
from math import sin, log, pi
from array import array

from pygame.mixer import Sound, get_init

class Samples(Sound):

    def __init__(self):
        self.set_amplitude()
        Sound.__init__(self, self.build())
        # samples = array('h')
        # for x in xrange(44100):
        #     samples.append(randint(-128 * 256, 127 * 256))
        # Sound.__init__(self, samples)

    def set_amplitude(self):
        self.amplitude = (1 << (self.get_sample_width() * 8 - 1)) - 1

    def get_sample_width(self):
        return abs(get_init()[1] / 8)

    def build(self):
        pass

    def get_empty_array(self, length):
        return array(self.get_array_typecode(), [0] * length)

    def get_array_typecode(self):
        return [None, "b", "h"][self.get_sample_width()]


class Note(Samples):

    base_frequency = 440.0
    base_octave = 4
    base_name = "A"
    names = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
    SQUARE, TRIANGLE, SAW, SINE, DIRTY = range(5)

    def __init__(self, name=None, octave=4, frequency=None, shape=SQUARE,
                 volume=1.0):
        names = self.names
        self.shape = shape
        if frequency is None:
            self.name = name
            self.octave = octave
            self.set_frequency()
        elif name is None:
            self.frequency = float(frequency)
            self.set_name_and_octave()
        Samples.__init__(self)
        self.set_volume(volume)

    def set_frequency(self):
        name, octave = self.name, self.octave
        names = self.names
        octave_length = len(names)
        offset = (octave - self.base_octave) * octave_length + \
                 names.index(name) - names.index(self.base_name)
        self.frequency = self.base_frequency * 2 ** \
                         (offset / float(octave_length))

    def set_name_and_octave(self):
        names = self.names
        octave_length = len(names)
        offset = int(round(log(self.frequency / self.base_frequency, 2) * \
                           octave_length)) + names.index(self.base_name)
        self.octave = self.base_octave + offset / octave_length
        self.name = names[offset % octave_length]

    def __repr__(self):
        return "%s%i %.2f" % (self.name, self.octave, self.frequency)

    def build(self):
        period = int(round(get_init()[0] / self.frequency))
        samples = self.get_empty_array(period)
        shape = self.shape
        if shape == self.TRIANGLE:
            self.store_triangle_wave(samples, period)
        elif shape == self.SAW:
            self.store_saw_wave(samples, period)
        elif shape == self.SINE:
            self.store_sine_wave(samples, period)
        elif shape == self.DIRTY:
            self.store_dirty_wave(samples)
        else:
            self.store_square_wave(samples, period)
        return samples

    def store_triangle_wave(self, samples, period):
        amplitude = self.amplitude
        coefficient = 4 * amplitude / float(period - 1)
        for time in xrange(int(round(period / 2.0))):
            y = int((coefficient * time) - amplitude)
            samples[time] = y
            samples[-time - 1] = y

    def store_saw_wave(self, samples, period):
        amplitude = self.amplitude
        for time in xrange(period):
            samples[time] = int(2 * amplitude / float(period - 1) * time - \
                              amplitude)

    def store_sine_wave(self, samples, period):
        amplitude = self.amplitude
        for time in xrange(period):
            samples[time] = int(round(sin(time / (period / pi / 2)) * \
                                      amplitude))

    def store_dirty_wave(self, samples):
        amplitude = self.amplitude
        for time in xrange(len(samples)):
            samples[time] = randint(-amplitude, amplitude)

    def store_square_wave(self, samples, period):
        amplitude = self.amplitude
        for time in xrange(period):
            if time < period / 2:
                samples[time] = amplitude
            else:
                samples[time] = -amplitude

    def play(self, maxtime=0, fadeout=None, panning=None, fade_in=0):
        channel = Samples.play(self, -1, maxtime, fade_in)
        if fadeout:
            self.fadeout(fadeout)
        if channel and panning:
            channel.set_volume(*panning)
        return channel
3.149.244.45
3.149.244.45
3.149.244.45
 
March 22, 2020

The chicken nugget business starter kit is now available online! Send me any amount of money through Venmo or PayPal, and I will mail you a package which will enable you to start a chicken nugget business of your own, play a video game any time you want, introduce a new character into your Animal Crossing village, and start collecting the chicken nugget trading cards.

The kit includes:

  • jellybean
  • instruction manual
  • limited edition trading card

By following the instructions you'll learn how to cook your own chicken or tofu nugget and be well on your way to financial success. I'm also throwing in one randomly selected card from the limited edition trading card set. Collect them, trade them, and if you get all eighteen and show me your set, I will give you an exclusive video game product.

All orders are processed within a day, so you can have your kit on your doorstep as quickly as possible. Don't sleep on this offer! Click the PayPal button or send a Venmo payment of any amount to @ohsqueezy, and in a matter of days you'll be counting money and playing video games.

PayPal me