Beispiel #1
0
function db_browse_main()
{
    if (isset($_REQUEST['url'])) {
        $url = ereg_replace('[^a-zA-Z0-9_-]', '', $_REQUEST['url']);
    } else {
        $url = '';
    }
    tem_set('url', $url);
    $row = db_get_column('tiles', 'url', 'where url like "%s_"', $url);
    if ($row) {
        foreach ($row as $sub_url) {
            tem_set('child_url', $sub_url);
            tem_set('child_name', substr($sub_url, -1));
            tem_show('child_link');
        }
    }
    if ($url != '') {
        tem_set('back_url', substr($url, 0, -1));
        tem_show('back_link');
    }
    $GLOBALS['debug_tiles'] = true;
    ob_start();
    create_random_square();
    create_random_square();
    create_random_square();
    create_random_square();
    ob_clean();
    ob_start();
    create_random_square();
    tem_set('pixels', ob_get_clean());
    ob_start();
    tile_get_128($url);
    # because it prints now
    tem_set('t128', ob_get_clean());
    ob_start();
    tile_get_64($url);
    # because it prints now
    tem_set('t64', ob_get_clean());
    ob_start();
    tile_get_32($url);
    # because it prints now
    tem_set('t32', ob_get_clean());
}
function test_get_initial_toggle_main()
{
    if (ENABLE_TEST_GET_INITIAL_TOGGLE !== true) {
        message('This page is disabled to prevent DOS attacks or accidental resource hogging. If you are the administratior you can follow the instructions at the top of the source file to enable this page.');
        return;
    }
    if (isset($_REQUEST['url'])) {
        $url = ereg_replace('[^a-zA-Z0-9._-]', '', $_REQUEST['url']);
        $pos = strpos($url, '.');
        if ($pos !== false) {
            $dots = substr($url, $pos);
            $url = substr($url, 0, $pos);
        } else {
            $dots = '';
        }
    } else {
        $url = '';
        $dots = '';
    }
    message("url: {$url}, dots: {$dots}");
    $t128 = tile_get_128($url);
    if ($t128 === false) {
        message("No tile at {$url}");
        return;
    }
    $shadows = make_t128_from_initial_toggles($url, $dots);
    if ($t128 == $shadows) {
        message('They Match!');
    } else {
        message("FAILED. They don't match.");
    }
    $shadows = t128_to_dotspace($shadows);
    tem_set('shadows', $shadows);
    $t128 = t128_to_dotspace($t128);
    tem_set('t128', $t128);
}
Beispiel #3
0
function save_main()
{
    header('Content-type: text/plain');
    if (!isset($_REQUEST['changes'])) {
        header('X-ZoomingArtError: ' + "parameter missing");
        return;
    }
    $changes = ereg_replace('[^a-zA-Z0-9._ -]', '', $_REQUEST['changes']);
    if (strlen($changes) == 0) {
        header('X-ZoomingArtError: ' + "no changes");
        return;
    }
    $rows = explode(' ', $changes);
    if (!$rows) {
        header('X-ZoomingArtError: ' + "splode error");
        return;
    }
    if (count($rows) > 5000) {
        header('X-ZoomingArtError: ' + count($rows) . ' is too many changes!');
        return;
    }
    $loaded = array();
    $loaded_ids = array();
    foreach ($rows as $change) {
        $letters = ereg_replace('[^a-zA-Z0-9_-]', '', $change);
        $dots = ereg_replace('[^.]', '', $change);
        $levels = strlen($letters) * 3 - strlen($dots);
        if ($levels > 7) {
            $tile_url_len = floor(($levels - 5) / 3);
        } else {
            $tile_url_len = 0;
        }
        $tile_url = substr($letters, 0, $tile_url_len);
        $letters = substr($letters, $tile_url_len);
        $levels -= $tile_url_len * 3;
        $x = 0;
        $y = 0;
        $size = 128;
        for ($i = 0; $i < strlen($letters); ++$i) {
            $pos = strpos(URL_CHARS, $letters[$i]);
            $size /= 2;
            $y += $size * floor($pos / 32);
            $x += $size * (floor($pos / 4) % 2);
            if (!--$levels) {
                break;
            }
            $size /= 2;
            $y += $size * (floor($pos / 16) % 2);
            $x += $size * (floor($pos / 2) % 2);
            if (!--$levels) {
                break;
            }
            $size /= 2;
            $y += $size * (floor($pos / 8) % 2);
            $x += $size * ($pos % 2);
            --$levels;
        }
        # echo "change: $change, tile_url: $tile_url, x: $x, y: $y, size: $size<br>";
        if (!isset($loaded[$tile_url])) {
            list($t128, $id) = tile_get_128($tile_url, true);
            # echo "id: $id<br>";
            $loaded[$tile_url] = $t128;
            $loaded_ids[$tile_url] = $id;
        }
        color_tile($x, $y, $size, $loaded[$tile_url]);
    }
    foreach ($loaded as $tile_url => $t128) {
        $id = $loaded_ids[$tile_url];
        list($t64, $t32) = create_64_and_32_from_128($t128);
        if ($id) {
            db_update('tiles', 't128,t64,t32', $t128, $t64, $t32, 'where id=%i', $id);
        } else {
            db_insert('tiles', 't128,t64,t32,url', $t128, $t64, $t32, $tile_url);
        }
        # echo "saved $tile_url (id $id) to database<br>";
    }
    if (isset($_REQUEST['z'])) {
        return 'binary';
    }
}
Beispiel #4
0
function tile_get_32($url)
{
    $tile = db_get_value('tiles', 't32', 'where url=%"', $url);
    if ($tile === false) {
        #return false;
        return str_repeat("", 32 * 32 / 8);
    }
    #$debug_binary = true;
    if ($debug_binary) {
        $GLOBALS['debug_tiles'] = true;
        tile_get_128($url);
        # because it prints now
        tile_get_64($url);
        # because it prints now
        print_full_table($tile, 32, 32 / 8);
        exit;
    }
    if ($GLOBALS['debug_tiles']) {
        print_full_table($tile, 32, 32 / 8);
    }
    return $tile;
}
Beispiel #5
0
function get_initial_toggle($url, $dots)
{
    $zooms = strlen($url) * 3 - strlen($dots);
    # after zooming 7 times, a single pixel from tile '' covers the whole picture.
    if ($zooms < 7) {
        header("X-Initial-Toggle-Note: Only {$zooms} zooms.");
        return 0;
    }
    $url_chars = 0;
    $toggle = 0;
    while ($zooms > 6) {
        # 6 because the lower zooms come to a single pixel below plane 0 where we have no data
        $zooms -= 3;
        $t128 = tile_get_128(substr($url, 0, $url_chars));
        # the next two bytes of the url tell us which pixel to take
        $ch1 = strpos(URL_CHARS, substr($url, $url_chars, 1));
        $ch2 = strpos(URL_CHARS, substr($url, $url_chars + 1, 1));
        $ch3 = strpos(URL_CHARS, substr($url, $url_chars + 2, 1));
        # there are 8x8 child tiles under this tile. Each sits under 16x16 pixels?
        $x = $ch1 % 8 * 16;
        $x += $ch2 % 8 * 2;
        $x += floor($ch3 % 8 / 4);
        $y = floor($ch1 / 8) * 16;
        $y += floor($ch2 / 8) * 2;
        $y += floor($ch3 / 8 / 4);
        $toggle ^= ord(substr($t128, $y * T128_RB + floor($x / 8), 1)) >> 7 - $x % 8 & 1;
        $url_chars += 1;
    }
    header("X-Initial-Toggle-Note: initial toggle: {$toggle}.");
    return $toggle;
}