function currency_main($use_headers = True, $return_output = FALSE)
{
    ob_start();
    try {
        $page = array();
        $currency = new currency($GLOBALS['currency_db_base'], $GLOBALS['currency_db_user'], $GLOBALS['currency_db_password']);
        if (!isset($_GET['command'])) {
            $command = 'get_note';
        } else {
            $command = $_GET['command'];
        }
        if (!isset($_GET['id'])) {
            $id = 0;
        } else {
            $id = $_GET['id'];
        }
        if ($command == 'get_note') {
            if (isset($_GET['count'])) {
                $count = $_GET['count'];
            } else {
                $count = 1;
            }
            $autocommit = FALSE;
            if (isset($_GET['autocommit'])) {
                $autocommit = $_GET['autocommit'];
            }
            for ($i = 0; $i < $count; $i++) {
                if ($autocommit == 'yes') {
                    $note = $currency->_get_note($_GET['value'], 'y', $id);
                } else {
                    $note = $currency->get_note($_GET['value'], $id);
                }
                array_push($page, join("\t", $note));
            }
        } elseif ($command == 'merge_notes') {
            if (isset($_GET['values'])) {
                if ($_GET['values'] == '') {
                    $_GET['values'] = array();
                }
            } else {
                $_GET['values'] = FALSE;
            }
            $notes = $currency->merge_notes_columns($_GET['serial'], $_GET['name'], $_GET['value'], $id, $_GET['values']);
            foreach ($notes as $note) {
                array_push($page, join("\t", $note));
            }
        } elseif ($command == 'break_note') {
            if (isset($_GET['values'])) {
                if ($_GET['values'] == '') {
                    $_GET['values'] = array();
                }
            } else {
                $_GET['values'] = FALSE;
            }
            $notes = $currency->break_note($_GET['serial'], $_GET['name'], $_GET['value'], $id, $_GET['values']);
            foreach ($notes as $note) {
                array_push($page, join("\t", $note));
            }
        } elseif ($command == 'change_note') {
            $note = $currency->change_note($_GET['serial'], $_GET['name'], $_GET['value'], $id);
            array_push($page, join("\t", $note));
        } elseif ($command == 'check_note') {
            $note = $currency->check_note($_GET['serial'], $_GET['name'], $_GET['value'], $id);
            array_push($page, join("\t", $note));
        } elseif ($command == 'commit') {
            array_push($page, $currency->commit($_GET['transaction_id']));
        } elseif ($command == 'put_note') {
            $currency->put_note($_GET['serial'], $_GET['name'], $_GET['value']);
            array_push($page, "OK");
        } else {
            throw new Exception("unknown command " . $command);
        }
        print join("\n", $page);
        $status = true;
    } catch (Exception $error) {
        print $error->getMessage();
        $status = FALSE;
    }
    if ($use_headers) {
        if ($status) {
            header('Content-type: text/plain');
        } else {
            header('HTTP/1.0 500 Internal Server Error');
            error_log(ob_get_contents());
        }
    }
    if ($return_output) {
        $status = ob_get_contents();
        error_log($status);
        ob_end_clean();
    } else {
        ob_end_flush();
    }
    return $status;
}