# translation of ja.po to Japanese # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Kiyoto Hashida , 2009, 2010. # Hyu_gabaru Ryu_ichi , 2009. # Noriko Mizumoto , 2010. msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" "POT-Creation-Date: 2010-06-30 17:40+0200\n" "PO-Revision-Date: 2010-07-03 12:38+0900\n" "Last-Translator: Raina Otoni \n" "Language-Team: Japanese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=1; plural=0;\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" #: lib/Plugins/ReportUploader.cpp:97 lib/Plugins/FileTransfer.cpp:53 msgid "FileTransfer: URL not specified" msgstr "ファイル転送: URL が示されていません" #: lib/Plugins/ReportUploader.cpp:101 lib/Plugins/FileTransfer.cpp:57 #, c-format msgid "Sending archive %s to %s" msgstr "アーカイブ %s を %s に送信中" #: lib/Plugins/ReportUploader.cpp:130 #, c-format msgid "Sending failed, trying again. %s" msgstr "送信に失敗。再試行しています。%s" #: lib/Plugins/ReportUploader.cpp:192 #, fuzzy msgid "Creating a ReportUploader report..." msgstr "TicketUploader 報告を作成しています..." #: lib/Plugins/RHTSupport.cpp:231 msgid "Creating a new case..." msgstr "新しいケースを作成中..." #: src/CLI/CLI.cpp:49 #, c-format msgid "" "\tUID : %s\n" "\tUUID : %s\n" "\tPackage : %s\n" "\tExecutable : %s\n" "\tCrash Time : %s\n" "\tCrash Count: %s\n" msgstr "" "\tUID : %s\n" "\tUUID : %s\n" "\tパッケージ : %s\n" "\t実行ファイル : %s\n" "\tクラッシュの時刻 : %s\n" "\tクラッシュ数: %s\n" #: src/CLI/CLI.cpp:172 #, c-format msgid "" "Usage: %s [OPTION]\n" "\n" "Startup:\n" "\t-V, --version\t\tdisplay the version of %s and exit\n" "\t-?, --help\t\tprint this help\n" "\n" "Actions:\n" "\t-l, --list\t\tprint list of crashes which are not reported yet\n" "\t -f, --full\tlist all crashes, including already reported ones\n" "\t-r, --report CRASH_ID\tcreate and send a report\n" "\t -y, --always\tcreate and send a report without asking\n" "\t-d, --delete CRASH_ID\tremove crash\n" "CRASH_ID can be:\n" "\tUID:UUID pair,\n" "\tunique UUID prefix - the crash with matching UUID will be acted upon\n" "\t@N - N'th crash (as displayed by --list --full) will be acted upon\n" msgstr "" "使用法: %s [オプション]\n" "\n" "起動:\n" "\t-V, --version\t\t%s のバージョンを出力して終了\n" "\t-?, --help\t\t本ヘルプを出力\n" "\n" "動作:\n" "\t--get-list\t\tまだ報告されていないクラッシュの一覧を出力\n" "\t--get-list-full\t\t全クラッシュの一覧を出力\n" "\t--report CRASH_ID\tレポートを作成して送信\n" "\t--report-always CRASH_ID 動作の確認を求めずにレポートを作成して送信\n" "\t--delete CRASH_ID\tクラッシュの削除\n" "CRASH_ID とは:\n" "\tUID:UUID の組み合わせ、\n" "\tUUID 固有プレフィックス - 一致する UUID を持つクラッシュが作動\n" "\t@N - N 回目のクラッシュが作動 (--get-list-full で表示)\n" #: src/CLI/CLI.cpp:215 msgid "You must specify exactly one operation" msgstr "操作を1つだけ指定する必要があります。" #: src/CLI/report.cpp:179 #, c-format msgid "# This field is read only.\n" msgstr "# このフィールドは読み込み専用です。\n" #: src/CLI/report.cpp:199 msgid "# Describe the circumstances of this crash below." msgstr "# このクラッシュの状況を下に説明して下さい。" #: src/CLI/report.cpp:201 msgid "# How to reproduce the crash?" msgstr "# このクラッシュを再現する方法は ?" #: src/CLI/report.cpp:203 msgid "" "# Backtrace\n" "# Check that it does not contain any sensitive data such as passwords." msgstr "" "# Backtrace\n" "# パスワードなどの内密情報がそこに入っていないことを確認して下さい。" #: src/CLI/report.cpp:205 msgid "# Architecture" msgstr "# アーキテクチャ" #: src/CLI/report.cpp:206 msgid "# Command line" msgstr "# コマンドライン" #: src/CLI/report.cpp:207 msgid "# Component" msgstr "# コンポーネント" #: src/CLI/report.cpp:208 msgid "# Core dump" msgstr "# コアダンプ" #: src/CLI/report.cpp:209 msgid "# Executable" msgstr "# 実行可能ファイル" #: src/CLI/report.cpp:210 msgid "# Kernel version" msgstr "# カーネルバージョン" #: src/CLI/report.cpp:211 msgid "# Package" msgstr "# パッケージ" #: src/CLI/report.cpp:212 msgid "# Reason of crash" msgstr "# クラッシュの理由" #: src/CLI/report.cpp:213 msgid "# Release string of the operating system" msgstr "# オペレーティングシステムのリリース文字列" #: src/CLI/report.cpp:336 msgid "Can't run vi: $TERM, $VISUAL and $EDITOR are not set" msgstr "viを実行できません: $TERM, $VISUAL, 及び $EDITOR が定義されていません。" #: src/CLI/report.cpp:424 msgid "" "\n" "The report has been updated." msgstr "" "\n" "この報告は更新されました。" #: src/CLI/report.cpp:426 msgid "" "\n" "No changes were detected in the report." msgstr "" "\n" "報告の中に変更は検出されませんでした。" #: src/CLI/report.cpp:646 #, c-format msgid "Wrong settings were detected for plugin %s.\n" msgstr "プラグイン %s には不適切な設定が検出されました。\n" #: src/CLI/report.cpp:650 msgid "Enter your login: " msgstr "ログインを入力:" #: src/CLI/report.cpp:656 msgid "Enter your password: " msgstr "パスワードを入力:" #: src/CLI/report.cpp:700 msgid "Reporting..." msgstr "報告中..." #: src/CLI/report.cpp:719 #, c-format msgid "Report using %s? [y/N]: " msgstr "%s を使用して報告しますか?[y/N]: " #: src/CLI/report.cpp:722 msgid "Skipping..." msgstr "スキップ中..." #: src/CLI/report.cpp:739 #, c-format msgid "Crash reported via %d plugins (%d errors)\n" msgstr "クラッシュは %d 個のプラグインを介して報告済み (%d エラー)\n" #: src/Daemon/CommLayerServerDBus.cpp:234 msgid "Comment is too long" msgstr "コメントが長すぎます" #: src/Daemon/CommLayerServerDBus.cpp:238 msgid "'How to reproduce' is too long" msgstr "「再現の方法」が長すぎます" #: src/Gui/ABRTExceptions.py:6 msgid "Another client is already running, trying to wake it." msgstr "別のクライアントが稼働していますので、それを呼び出しています。" #: src/Gui/ABRTExceptions.py:13 msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "" "デーモンから予想外のデータを受け取りました(データベースは正常に更新されてい" "ますか?)。" #: src/Gui/ABRTPlugin.py:62 msgid "Not loaded plugins" msgstr "ロードした plugins ではありません" #: src/Gui/ABRTPlugin.py:63 msgid "Analyzer plugins" msgstr "アナライザー plugin" #: src/Gui/ABRTPlugin.py:64 msgid "Action plugins" msgstr "アクション plugin" #: src/Gui/ABRTPlugin.py:65 msgid "Reporter plugins" msgstr "レポーター plugin" #: src/Gui/ABRTPlugin.py:66 msgid "Database plugins" msgstr "データベース plugin" #: src/Gui/CCDBusBackend.py:74 src/Gui/CCDBusBackend.py:97 msgid "Can't connect to system dbus" msgstr "システム dbus に接続できません。" #: src/Gui/CCDBusBackend.py:120 src/Gui/CCDBusBackend.py:123 msgid "Please check if abrt daemon is running" msgstr "abrt デーモンが稼働しているかどうかチェックして下さい" #: src/Gui/CCDBusBackend.py:174 msgid "" "Daemon didn't return valid report info\n" "Debuginfo is missing?" msgstr "" "デーモンは有効な報告情報を返しませんでした。\n" "Debuginfo が無いですか?" #: src/Gui/ccgui.glade:7 msgid "About ABRT" msgstr "ABRT について" #: src/Gui/ccgui.glade:15 msgid "(C) 2009, 2010 Red Hat, Inc." msgstr "(C) 2009, 2010 Red Hat, Inc." #: src/Gui/ccgui.glade:17 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see ." msgstr "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see ." #: src/Gui/ccgui.glade:28 src/Applet/CCApplet.cpp:105 msgid "translator-credits" msgstr "翻訳者クレジット" #: src/Gui/ccgui.glade:58 src/Gui/CCMainWindow.py:8 src/Gui/report.glade:7 msgid "Automatic Bug Reporting Tool" msgstr "自動バグ報告ツール(ABRT)" #: src/Gui/ccgui.glade:71 msgid "_File" msgstr "ファイル(_F)" #: src/Gui/ccgui.glade:92 msgid "_Edit" msgstr "編集(_E)" #: src/Gui/ccgui.glade:100 src/Gui/settings.glade:6 msgid "Plugins" msgstr "プラグイン" #: src/Gui/ccgui.glade:119 msgid "_Help" msgstr "ヘルプ(_H)" #: src/Gui/ccgui.glade:126 msgid "View log" msgstr "ログを表示" #: src/Gui/ccgui.glade:237 msgid "Bug Reports:" msgstr "バグレポート:" #: src/Gui/ccgui.glade:278 msgid "Latest Crash:" msgstr "最新のクラッシュ:" #: src/Gui/ccgui.glade:291 msgid "Command:" msgstr "コマンド:" #: src/Gui/ccgui.glade:306 msgid "User:" msgstr "ユーザー:" #: src/Gui/ccgui.glade:321 msgid "Crash Count:" msgstr "クラッシュカウント:" #: src/Gui/ccgui.glade:437 msgid "Reason:" msgstr "理由:" #: src/Gui/ccgui.glade:463 msgid "Comment:" msgstr "コメント:" #: src/Gui/ccgui.glade:543 msgid "Copy to Clipboard" msgstr "クリップボードにコピー" #: src/Gui/ccgui.glade:555 src/Gui/ccgui.glade:683 src/Applet/CCApplet.cpp:253 msgid "Report" msgstr "報告" #: src/Gui/CCMainWindow.py:63 msgid "Reported" msgstr "報告済み" #: src/Gui/CCMainWindow.py:71 msgid "Application" msgstr "アプリケーション" #: src/Gui/CCMainWindow.py:73 msgid "Hostname" msgstr "ホスト名" #: src/Gui/CCMainWindow.py:75 msgid "Latest Crash" msgstr "最新のクラッシュ" #: src/Gui/CCMainWindow.py:143 #, python-format msgid "" "Can't show the settings dialog\n" "%s" msgstr "" "セッティングのダイアログを表示できません\n" "%s" #: src/Gui/CCMainWindow.py:148 #, python-format msgid "" "Unable to finish current task!\n" "%s" msgstr "" "現在のタスクを終了できません! \n" "%s" #: src/Gui/CCMainWindow.py:183 #, python-format msgid "" "Error while loading the dumplist.\n" "%s" msgstr "" "dumplist のロード中にエラーが発生。\n" " %s" #: src/Gui/CCMainWindow.py:241 #, python-format msgid "" "%s Crash\n" "%s" msgstr "" "%sクラッシュ\n" "%s" #: src/Gui/CCMainWindow.py:337 msgid "You have to select a crash to copy." msgstr "コピーするクラッシュを選択する必要があります。" #: src/Gui/CCMainWindow.py:422 msgid "" "Usage: abrt-gui [OPTIONS]\n" "\t-v[vv]\t\t\tVerbose\n" "\t--report=CRASH_ID\tDirectly report crash with CRASH_ID" msgstr "" "使用法: abrt-gui [OPTIONS]\n" "\t-v[vv]\t\t\tVerbose\n" "\t--report=CRASH_ID\tDirectly report crash with CRASH_ID" #: src/Gui/CCMainWindow.py:445 #, python-format msgid "" "No such crash in database, probably wrong crashid.\n" "crashid=%s" msgstr "" "データベースにそんなクラッシュはありません、たぶん crashid 間違いです。\n" "crashid=%s" #: src/Gui/CCReporterDialog.py:22 src/Gui/CReporterAssistant.py:19 msgid "Brief description how to reproduce this or what you did..." msgstr "この問題の再現手順、または実行したことの簡単な説明..." #: src/Gui/CCReporterDialog.py:107 msgid "You must check backtrace for sensitive data" msgstr "バックトレースで内密データをチェックする必要があります" #: src/Gui/CCReporterDialog.py:118 src/Gui/CReporterAssistant.py:304 #, python-format msgid "" "Reporting disabled because the backtrace is unusable.\n" "Please try to install debuginfo manually using command: debuginfo-install " "%s \n" "then use Refresh button to regenerate the backtrace." msgstr "" "バックトレースが使用できませんので、報告ができません。\n" "コマンド : debuginfo-install %s を使用して手動で debuginfo を インス" "トールしてから \n" "リフレッシュボタンを使用してバックトレースを再生成して下さい。" #: src/Gui/CCReporterDialog.py:120 src/Gui/CReporterAssistant.py:306 msgid "The backtrace is unusable, you can't report this!" msgstr "バックトレースが使用不可です。これを報告しないで下さい!" #: src/Gui/CCReporterDialog.py:124 src/Gui/CReporterAssistant.py:310 msgid "" "The backtrace is incomplete, please make sure you provide good steps to " "reproduce." msgstr "" "バックトレースが不完全です。再生するために確実に正しい手順に従って 下さい。 " #: src/Gui/CCReporterDialog.py:130 msgid "Reporting disabled, please fix the problems shown above." msgstr "レポート機能が無効になっています。上記の問題を修復して下さい。" #: src/Gui/CCReporterDialog.py:132 msgid "Sends the report using selected plugin." msgstr "選択した plugin を使用してレポートを送信します。" #: src/Gui/CCReporterDialog.py:398 msgid "" "No reporter plugin available for this type of crash\n" "Please check abrt.conf." msgstr "" "このタイプのクラッシュには使用できるレポーター plugin がありません。\n" "abrt.conf をチェックして下さい。" #: src/Gui/CCReporterDialog.py:418 src/Gui/PluginsSettingsDialog.py:169 #: src/Gui/CReporterAssistant.py:201 #, python-format msgid "" "Can't save plugin settings:\n" " %s" msgstr "" "plugin のセッティングを保存できません:\n" " %s" #: src/Gui/CCReporterDialog.py:448 src/Gui/CReporterAssistant.py:231 #, python-format msgid "Configure %s options" msgstr "%s オプションを設定" #: src/Gui/CCReporterDialog.py:498 src/Gui/CReporterAssistant.py:837 msgid "" "Unable to get report!\n" "Debuginfo is missing?" msgstr "" "報告を取得できません\n" "Debuginfo が無いですか ?" #: src/Gui/CCReporterDialog.py:527 src/Gui/CReporterAssistant.py:400 #, python-format msgid "" "Reporting failed!\n" "%s" msgstr "" "報告が失敗しました!\n" "%s" #: src/Gui/CCReporterDialog.py:553 src/Gui/CCReporterDialog.py:574 #: src/Gui/CReporterAssistant.py:876 #, python-format msgid "Error getting the report: %s" msgstr "報告の取得中にエラーです: %s" #: src/Gui/ConfBackend.py:77 msgid "Can't connect to Gnome Keyring daemon" msgstr "Gnome Keyring デーモンに接続できません。" #: src/Gui/ConfBackend.py:83 msgid "Can't get default keyring" msgstr "デフォルトキーリングを取れません" #: src/Gui/ConfBackend.py:102 src/Gui/ConfBackend.py:118 msgid "" "Access to gnome-keyring has been denied, plugins settings won't be saved." msgstr "" "gnome-keyring へのアクセスが拒否されました。プラグインの設定は保存されませ" "ん。" #: src/Gui/ConfBackend.py:152 #, python-format msgid "" "Access to gnome-keyring has been denied, can't load the settings for %s!" msgstr "" "gnome-keyring へのアクセスが拒否されました。%s の設定をロード出来ません !" #: src/Gui/ConfBackend.py:205 msgid "Access to gnome-keyring has been denied, can't load settings" msgstr "gnome-keyring へのアクセスが拒否されました。設定をロードできません" #: src/Gui/dialogs.glade:7 msgid "Report done" msgstr "報告完了" #: src/Gui/dialogs.glade:79 msgid "Log" msgstr "ログ" #: src/Gui/PluginsSettingsDialog.py:24 msgid "Can't load gui description for SettingsDialog!" msgstr "SettingsDialog の gui 記述をロードできません !" #: src/Gui/PluginsSettingsDialog.py:41 msgid "Name" msgstr "名前" #: src/Gui/PluginsSettingsDialog.py:148 msgid "Please select a plugin from the list to edit it's options." msgstr "一覧からプラグインを選択してそのオプションを編集して下さい。" #: src/Gui/PluginsSettingsDialog.py:156 #, python-format msgid "" "Error while opening plugin settings UI: \n" "\n" "%s" msgstr "" "プラグイン設定 UI を開く際にエラーが発生: \n" "\n" "%s" #: src/Gui/PluginSettingsUI.py:17 msgid "Can't find PluginDialog widget in UI description!" msgstr "UI 説明の中で PluginDialog ウィジェットを見つけることが出来ません!" #: src/Gui/PluginSettingsUI.py:24 #, python-format msgid "" "No UI for the plugin %s, this is probably a bug.\n" "Please report it at https://fedorahosted.org/abrt/newticket" msgstr "" "プラグインの %s に UI がありません。 これは恐らくバグです。\n" "https://fedorahosted.org/" "abrt/newticket で報告をお願いします。" #: src/Gui/PluginSettingsUI.py:59 src/Gui/PluginSettingsUI.py:85 msgid "combo box is not implemented" msgstr "combo box が実装されていません" #: src/Gui/PluginSettingsUI.py:68 msgid "Nothing to hydrate!" msgstr "表示するデータはありません!" #: src/Gui/report.glade:54 msgid "Package:" msgstr "パッケージ:" #: src/Gui/report.glade:65 msgid "Component:" msgstr "コンポーネント:" #: src/Gui/report.glade:76 msgid "Executable:" msgstr "実行可能ファイル:" #: src/Gui/report.glade:87 msgid "Cmdline:" msgstr "Cmdline:" #: src/Gui/report.glade:111 src/Gui/report.glade:124 src/Gui/report.glade:137 #: src/Gui/report.glade:150 src/Gui/report.glade:228 src/Gui/report.glade:241 #: src/Gui/report.glade:254 src/Gui/report.glade:267 msgid "N/A" msgstr "N/A" #: src/Gui/report.glade:172 msgid "Architecture:" msgstr "アーキテクチャ:" #: src/Gui/report.glade:183 msgid "Kernel:" msgstr "カーネル:" #: src/Gui/report.glade:194 msgid "Release:" msgstr "リリース:" #: src/Gui/report.glade:205 msgid "Reason:" msgstr "理由:" #: src/Gui/report.glade:331 msgid "I checked backtrace and removed sensitive data (passwords, etc)" msgstr "" "バックトレースをチェックして、内密のデータ(パスワードなど)を削除しました。" #: src/Gui/report.glade:369 src/Gui/CReporterAssistant.py:741 msgid "Backtrace" msgstr "バックトレース" #: src/Gui/report.glade:426 msgid "How to reproduce (in a few simple steps)" msgstr "(2、3の簡単なステップで)再生の方法" #: src/Gui/report.glade:464 msgid "Comment" msgstr "コメント" #: src/Gui/report.glade:512 msgid "Attachments" msgstr "アタッチメント" #: src/Gui/report.glade:561 msgid "Please fix the following problems" msgstr "以下の問題を修復して下さい" #: src/Gui/report.glade:571 msgid " " msgstr " " #: src/Gui/report.glade:622 msgid "Show log" msgstr "ログを表示" #: src/Gui/report.glade:654 msgid "Forces ABRT to regenerate the backtrace" msgstr "バックトレースを再生成するように ABRT を強制します" #: src/Gui/report.glade:665 msgid "Send report" msgstr "レポートを送信" #: src/Gui/report.glade:693 msgid "Reporter Selector" msgstr "レポーターセクター" #: src/Gui/report.glade:706 msgid "Where do you want to report this incident?" msgstr "この発生をどこに報告したいですか ?" #: src/Gui/report.glade:764 src/Gui/progress_window.glade:8 msgid "Please wait.." msgstr "お待ち下さい..." #: src/Gui/report.glade:816 src/Gui/progress_window.glade:59 msgid "Details" msgstr "詳細" #: src/Gui/SettingsDialog.py:33 src/Gui/SettingsDialog.py:50 msgid "Select plugin" msgstr "plugin を選択" #: src/Gui/SettingsDialog.py:36 msgid "Select database backend" msgstr "データベースバックエンドを選択" #: src/Gui/SettingsDialog.py:169 msgid "Remove this job" msgstr "このジョブを取り除く" #: src/Gui/SettingsDialog.py:213 msgid "Remove this action" msgstr "このアクションを取り除く" #: src/Gui/settings.glade:64 msgid "Web Site:" msgstr "ウェブサイト:" #: src/Gui/settings.glade:76 msgid "Author:" msgstr "著者:" #: src/Gui/settings.glade:88 msgid "Version:" msgstr "バージョン:" #: src/Gui/settings.glade:142 msgid "Description:" msgstr "説明:" #: src/Gui/settings.glade:154 msgid "Name:" msgstr "名前:" #: src/Gui/settings.glade:198 msgid "Plugin details" msgstr "Plugin の詳細" #: src/Gui/settings.glade:221 msgid "C_onfigure Plugin" msgstr "plugin を設定(_O)" #: src/Gui/settings.glade:258 msgid "Preferences" msgstr "個人設定" #: src/Gui/settings.glade:285 msgid "Check package GPG signature" msgstr "パッケージの GPG 署名をチェック" #: src/Gui/settings.glade:301 msgid "Database backend: " msgstr "データベースバックエンド:" #: src/Gui/settings.glade:327 msgid "Blacklisted packages: " msgstr "ブラックリスト内のパッケージ:" #: src/Gui/settings.glade:341 msgid "Max coredump storage size(MB):" msgstr "コアダンプ格納の最大サイズ (MB):" #: src/Gui/settings.glade:355 msgid "GPG keys: " msgstr "GPG キー: " #: src/Gui/settings.glade:458 msgid "Common" msgstr "共通" #: src/Gui/settings.glade:491 msgid "Plugin" msgstr "Plugin" #: src/Gui/settings.glade:501 msgid "Time (or period)" msgstr "時間 (又は、期間)" #: src/Gui/settings.glade:569 msgid "Cron" msgstr "Cron" #: src/Gui/settings.glade:603 msgid "Analyzer plugin" msgstr "アナライザー plugin" #: src/Gui/settings.glade:613 msgid "Associated action" msgstr "関連したアクション" #: src/Gui/settings.glade:692 msgid "Analyzers, Actions, Reporters" msgstr "アナライザ、アクション、レポーター" #: src/Gui/settings.glade:753 msgid "GPG Keys" msgstr "GPG キー" #: src/Gui/CReporterAssistant.py:20 msgid "Crash info doesn't contain a backtrace" msgstr "" #: src/Gui/CReporterAssistant.py:280 #, python-format msgid "Rating is required by %s plugin" msgstr "%s プラグインによる評価が必要です" #: src/Gui/CReporterAssistant.py:282 msgid "Rating is not required by any plugin, skipping the check.." msgstr "" "いずれのプラグインによる評価も必要ありません、 チェックを省略しています.." #: src/Gui/CReporterAssistant.py:292 msgid "You should check backtrace for sensitive data" msgstr "バックトレースで内密データをチェックする必要があります" #: src/Gui/CReporterAssistant.py:293 msgid "You must agree with sending the backtrace" msgstr "バックトレースの送信に同意する必要があります" #: src/Gui/CReporterAssistant.py:325 #, fuzzy msgid "Only one reporter plugin is configured" msgstr "" "レポーターとして設定されているプラグインはひとつだけです、 選択ダイアログを省" "略しています" #: src/Gui/CReporterAssistant.py:357 msgid "You didn't provide any steps to reproduce." msgstr "再現する手順がまだ提供されていません。" #: src/Gui/CReporterAssistant.py:371 msgid "You didn't provide any comments." msgstr "コメントがまだ提示されていません。" #: src/Gui/CReporterAssistant.py:449 #, python-format msgid "" "It looks like an application from the package %s has crashed on your " "system. It's a good idea to send a bug report about this issue. The report " "will provide software maintainers with information essential in figuring out " "how to provide a bug fix for you\n" "\n" "Please review the information that follows and modify it as needed to ensure " "your bug report does not contain any sensitive date you'd rather not share\n" "\n" "Select where you would like to report the bug, and press 'Forward' to " "continue." msgstr "" "ご使用のシステム上でパッケージ %s 内のアプリケーションがクラッシュした" "ようです。 この問題についてバグレポートを提出される方が良いでしょう。レポート" "はソフトウェア管理者に バグ修正の手段を見つけるための基本的な情報を提供するこ" "とになります。\n" "\n" "以下にある情報を再確認して、他人と共有すべきでない機密データが収納されないよ" "うに 必要であれば修正して下さい。\n" "\n" "このバグの報告先を選択してから、「進む」を押して続けて下さい。" #: src/Gui/CReporterAssistant.py:508 msgid "Send a bug report" msgstr "バグレポートを送信" #: src/Gui/CReporterAssistant.py:546 msgid "" "Below is the backtrace associated with your crash. A crash backtrace " "provides developers with details about how a crash happen, helping them " "track down the source of the problem\n" "\n" "Please review the backtrace below and modify it as needed to ensure your bug " "report does not contain any sensitive date you'd rather not share:" msgstr "" "現在のクラッシュに関連したバックトレースを以下に示します。クラッシュ バックト" "レースは開発者に対してクラッシュが発生した状況を提供して、その 問題の根源を見" "つけ出す手助けになります。\n" "\n" "以下のバックトレースを再確認して他人と共有すべきでない機密データが 収納されな" "いように、必要であればバグレポートを修正して下さい:" #: src/Gui/CReporterAssistant.py:587 msgid "Refresh" msgstr "リフレッシュ" #: src/Gui/CReporterAssistant.py:589 msgid "Copy" msgstr "コピー" #: src/Gui/CReporterAssistant.py:595 msgid "I agree with submitting the backtrace" msgstr "バックトレースの提出に同意します" #: src/Gui/CReporterAssistant.py:600 msgid "Approve backtrace" msgstr "バックトレースを承認する" #: src/Gui/CReporterAssistant.py:623 msgid "How this crash happen, step-by-step? How would you reproduce it?" msgstr "" "どのような手順でこのクラッシュが発生しましたか? どのように再現できますか?" #: src/Gui/CReporterAssistant.py:641 msgid "" "Are there any comments you'd like to share with the software maintainers?" msgstr "ソフトウェア管理者と共有したいコメントがありますか?" #: src/Gui/CReporterAssistant.py:660 msgid "Provide additional details" msgstr "その他の情報を提供する" #: src/Gui/CReporterAssistant.py:667 msgid "" "Tip: Your comments are not private. Please monitor what you say " "accordingly." msgstr "" "ヒント: コメントは公開されます。 そのつもりで発言に注意して下さい。" #: src/Gui/CReporterAssistant.py:708 msgid "Confirm and send report" msgstr "レポートを確認して送信する" #: src/Gui/CReporterAssistant.py:710 msgid "" "Below is a summary of your bug report. Please click 'Apply' to submit it." msgstr "" "バグレポートの要約を以下に示します。提出するには「適用」をクリックして下さ" "い。" #: src/Gui/CReporterAssistant.py:715 msgid "Basic details" msgstr "基本的詳細" #: src/Gui/CReporterAssistant.py:722 msgid "Component" msgstr "コンポーネント" #: src/Gui/CReporterAssistant.py:723 msgid "Package" msgstr "パッケージ" #: src/Gui/CReporterAssistant.py:724 msgid "Executable" msgstr "実行可能ファイル" #: src/Gui/CReporterAssistant.py:725 msgid "Cmdline" msgstr "コマンドライン" #: src/Gui/CReporterAssistant.py:727 msgid "Architecture" msgstr "アーキテクチャ" #: src/Gui/CReporterAssistant.py:728 msgid "Kernel" msgstr "カーネル" #: src/Gui/CReporterAssistant.py:729 msgid "Release" msgstr "リリース" #: src/Gui/CReporterAssistant.py:730 msgid "Reason" msgstr "理由" #: src/Gui/CReporterAssistant.py:744 msgid "Click to view ..." msgstr "クリックして表示 ..." #: src/Gui/CReporterAssistant.py:756 msgid "Steps to reproduce:" msgstr "再現するための手順:" #: src/Gui/CReporterAssistant.py:777 msgid "Comments:" msgstr "コメント:" #: src/Gui/CReporterAssistant.py:780 msgid "No comment provided!" msgstr "コメントがありません!" #: src/Gui/CReporterAssistant.py:816 msgid "Finished sending the bug report" msgstr "バグレポート送信を終了しました" #: src/Gui/CReporterAssistant.py:820 msgid "Bug reports:" msgstr "バグレポート:" #: src/Gui/settings_wizard.glade:7 msgid "Wrong Settings Detected" msgstr "不適切な設定を検出しました" #: src/Gui/settings_wizard.glade:40 msgid "" "Wrong settings detected for some of the enabled reporter plugins, please use " "the buttons below to open respective configuration and fix it before you " "proceed, otherwise the reporting process can fail.\n" msgstr "" "有効になっているレポータープラグインの一部に不適切な設定が検出されました。 以" "下のボタンを使用して各設定を開き、それを修正してから進んで下さい。 そうしない" "と、報告のプロセスは失敗します。\n" #: src/Gui/settings_wizard.glade:71 msgid "Do you want to continue?" msgstr "継続したいですか ?" #: src/Applet/Applet.cpp:88 #, c-format msgid "A crash in package %s has been detected" msgstr "パッケージ %s のクラッシュが検出されました" #: src/Applet/Applet.cpp:90 msgid "A crash has been detected" msgstr "クラッシュが検出されました" #: src/Applet/Applet.cpp:266 msgid "ABRT service is not running" msgstr "ABRT サービスは稼働していません。" #: src/Applet/CCApplet.cpp:39 src/Applet/CCApplet.cpp:260 #: src/Applet/CCApplet.cpp:287 msgid "Warning" msgstr "警告" #: src/Applet/CCApplet.cpp:89 msgid "Notification area applet to notify user about issues detected by ABRT" msgstr "" "ABRT によって検出された問題についてユーザーに通知するための通知エリアのアプ" "レット" #: src/Applet/CCApplet.cpp:115 msgid "Hide" msgstr "隠す" #: src/Daemon/Daemon.cpp:517 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." msgstr "" "報告のサイズが割り当て超過です。abrt.conf の中で MaxCrashReportsSize の値を " "チェックして下さい。" #: lib/Plugins/Bugzilla.cpp:466 #, c-format msgid "New bug id: %i" msgstr "新しいバグ id: %i" #: lib/Plugins/Bugzilla.cpp:681 msgid "" "Empty login or password.\n" "Please check " msgstr "" "ログインかパスワードが空です。\n" "確認して下さい。" #: lib/Plugins/Bugzilla.cpp:690 msgid "Logging into bugzilla..." msgstr "bugzilla にログインしています..." #: lib/Plugins/Bugzilla.cpp:693 msgid "Checking for duplicates..." msgstr "重複をチェックしています..." #: lib/Plugins/Bugzilla.cpp:705 lib/Plugins/Bugzilla.cpp:743 msgid "Missing mandatory member 'bugs'" msgstr "必須のメンバー「バグ」の欠如" #: lib/Plugins/Bugzilla.cpp:725 lib/Plugins/Bugzilla.cpp:759 #: lib/Plugins/Bugzilla.cpp:835 msgid "get_bug_info() failed. Could not collect all mandatory information" msgstr "get_bug_info() は失敗です。全ての必須情報を収集できませんでした" #: lib/Plugins/Bugzilla.cpp:775 msgid "Creating new bug..." msgstr "新しいバグを作成中..." #: lib/Plugins/Bugzilla.cpp:780 msgid "Bugzilla entry creation failed" msgstr "Bugzilla エントリ作成に失敗しました" #: lib/Plugins/Bugzilla.cpp:790 lib/Plugins/Bugzilla.cpp:885 msgid "Logging out..." msgstr "ログアウトしています..." #: lib/Plugins/Bugzilla.cpp:809 #, c-format msgid "Bug is already reported: %i" msgstr "バグは既に報告済みです: %i" #: lib/Plugins/Bugzilla.cpp:820 #, fuzzy, c-format msgid "Bugzilla couldn't find parent of bug %d" msgstr "Bugzilla はバグ (%d) の親を見つけることが出来ません。" #: lib/Plugins/Bugzilla.cpp:849 lib/Plugins/Bugzilla.cpp:850 #, c-format msgid "Adding %s to CC list" msgstr "CC 一覧に %s を追加" #: lib/Plugins/Bugzilla.cpp:874 #, c-format msgid "Adding new comment to bug %d" msgstr "バグ (%d) に新規コメントを追加" #: lib/Plugins/CCpp.cpp:185 msgid "Generating backtrace" msgstr "バックトレース生成中" #: lib/Plugins/CCpp.cpp:353 msgid "Starting debuginfo installation" msgstr "debuginfo のインストールをスタート中" #: lib/Plugins/CCpp.cpp:561 msgid "Getting global universal unique identification..." msgstr "グローバルで普遍的な独自の識別を取得しています..." #: lib/Plugins/CCpp.cpp:737 msgid "Skipping debuginfo installation" msgstr "debuginfo のインストールをスキップします" #: lib/Plugins/KerneloopsReporter.cpp:94 msgid "Creating and submitting a report..." msgstr "報告の作成と提出をしています..." #: lib/Plugins/Logger.cpp:73 #, c-format msgid "Writing report to '%s'" msgstr " %s へのレポートを書き込み中" #: lib/Plugins/FileTransfer.cpp:298 msgid "FileTransfer: Creating a report..." msgstr "ファイル転送: 報告を作成中..." #: lib/Plugins/FileTransfer.cpp:322 #, c-format msgid "Can't create and send an archive: %s" msgstr "アーカイブを作成して送信できません: %s" #: lib/Plugins/FileTransfer.cpp:351 #, c-format msgid "Can't create and send an archive %s" msgstr "アーカイブを作成して送信できません: %s" #: lib/Plugins/Mailx.cpp:135 msgid "Sending an email..." msgstr "電子メールを送信中..." #: lib/Plugins/SOSreport.cpp:98 #, c-format msgid "Running sosreport: %s" msgstr "sosreport を実行中: %s" #: lib/Plugins/SOSreport.cpp:103 msgid "Done running sosreport" msgstr "sosreport の実行終了" #~ msgid "ABRT notification applet" #~ msgstr "ABRT 通知アプレット" #~ msgid "View and report application crashes" #~ msgstr "アプリケーションクラッシュの表示とレポート" #~ msgid "Jump to bug %d" #~ msgstr "バグ %d にジャンプ" #~ msgid "Getting local universal unique identification" #~ msgstr "ローカルで普遍的な独特の識別を取得しています" 62' href='#n962'>962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134
/*-
 * Copyright (c) 1990, 1993
 *	The Regents of the University of California.  All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Chris Torek.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/*
 * IMPORTANT NOTE:
 * --------------
 * From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
 * paragraph 3 above is now null and void.
 */

/* SNPRINTF.C  
 * fjc 7-31-97 Modified by Mib Software to be a standalone snprintf.c module.
 *      http://www.mibsoftware.com
 * Mib Software does not warrant this software any differently than the
 * University of California, Berkeley as described above.  All warranties
 * are disclaimed.  Use this software at your own risk.
 *
 *      All code referencing FILE * functions was eliminated, since it could
 *      never be called.  All header files and necessary files are collapsed
 *      into one file, internal functions are declared static.  This should
 *      allow inclusion into libraries with less chance of namespace collisions.
 *
 *      snprintf should be the only externally visible item.
 *     
 *      As of 7-31-97 FLOATING_POINT is NOT provided.  The code is somewhat
 *        non-portable, so it is disabled.
 */

/* Define FLOATING_POINT to get floating point. */
/*
#define	FLOATING_POINT
*/

#include <sys/types.h>
#define u_long unsigned long
#define u_short unsigned short
#define u_int unsigned int

#undef __P
#if defined(__STDC__)
# include <stdarg.h>
# if !defined(__P)
#  define __P(x) x
# endif
#else
# define __P(x) ()
# if !defined(const)
#  define const
# endif
# include <varargs.h>
#endif
#ifndef _BSD_VA_LIST_ 
#define	_BSD_VA_LIST_ va_list
#endif

#ifdef __STDC__
# include <limits.h>
#else
# ifndef LONG_MAX
#  ifdef HAVE_LIMITS_H
#   include <limits.h>
#  else
    /* assuming 32bit(2's compliment) long */
#   define LONG_MAX 2147483647
#  endif
# endif
#endif

#if defined(__hpux) && !defined(__GNUC__)
#define const
#endif

#if defined(sgi)
#undef __const
#define __const
#endif /* People who don't like const sys_error */

#include <stddef.h>

#ifndef NULL
#define	NULL	0
#endif

/*
 * NB: to fit things in six character monocase externals, the stdio
 * code uses the prefix `__s' for stdio objects, typically followed
 * by a three-character attempt at a mnemonic.
 */

/* stdio buffers */
struct __sbuf {
	unsigned char *_base;
	int	_size;
};


/*
 * stdio state variables.
 *
 * The following always hold:
 *
 *	if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
 *		_lbfsize is -_bf._size, else _lbfsize is 0
 *	if _flags&__SRD, _w is 0
 *	if _flags&__SWR, _r is 0
 *
 * This ensures that the getc and putc macros (or inline functions) never
 * try to write or read from a file that is in `read' or `write' mode.
 * (Moreover, they can, and do, automatically switch from read mode to
 * write mode, and back, on "r+" and "w+" files.)
 *
 * _lbfsize is used only to make the inline line-buffered output stream
 * code as compact as possible.
 *
 * _ub, _up, and _ur are used when ungetc() pushes back more characters
 * than fit in the current _bf, or when ungetc() pushes back a character
 * that does not match the previous one in _bf.  When this happens,
 * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
 * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
 *
 * NB: see WARNING above before changing the layout of this structure!
 */
typedef	struct __sFILE {
	unsigned char *_p;	/* current position in (some) buffer */
	int	_r;		/* read space left for getc() */
	int	_w;		/* write space left for putc() */
	short	_flags;		/* flags, below; this FILE is free if 0 */
	short	_file;		/* fileno, if Unix descriptor, else -1 */
	struct	__sbuf _bf;	/* the buffer (at least 1 byte, if !NULL) */
	int	_lbfsize;	/* 0 or -_bf._size, for inline putc */
} FILE;


#define	__SLBF	0x0001		/* line buffered */
#define	__SNBF	0x0002		/* unbuffered */
#define	__SRD	0x0004		/* OK to read */
#define	__SWR	0x0008		/* OK to write */
	/* RD and WR are never simultaneously asserted */
#define	__SRW	0x0010		/* open for reading & writing */
#define	__SEOF	0x0020		/* found EOF */
#define	__SERR	0x0040		/* found error */
#define	__SMBF	0x0080		/* _buf is from malloc */
#define	__SAPP	0x0100		/* fdopen()ed in append mode */
#define	__SSTR	0x0200		/* this is an sprintf/snprintf string */
#define	__SOPT	0x0400		/* do fseek() optimisation */
#define	__SNPT	0x0800		/* do not do fseek() optimisation */
#define	__SOFF	0x1000		/* set iff _offset is in fact correct */
#define	__SMOD	0x2000		/* true => fgetln modified _p text */


#define	EOF	(-1)


#define	__sfeof(p)	(((p)->_flags & __SEOF) != 0)
#define	__sferror(p)	(((p)->_flags & __SERR) != 0)
#define	__sclearerr(p)	((void)((p)->_flags &= ~(__SERR|__SEOF)))
#define	__sfileno(p)	((p)->_file)

#define	feof(p)		__sfeof(p)
#define	ferror(p)	__sferror(p)
#define	clearerr(p)	__sclearerr(p)

#ifndef _ANSI_SOURCE
#define	fileno(p)	__sfileno(p)
#endif


#if defined(__hpux) && !defined(__GNUC__) || defined(__DECC)
#include <string.h>
#endif

/*
 * I/O descriptors for __sfvwrite().
 */
struct __siov {
	void	*iov_base;
	size_t	iov_len;
};
struct __suio {
	struct	__siov *uio_iov;
	int	uio_iovcnt;
	int	uio_resid;
};

/*
 * Write some memory regions.  Return zero on success, EOF on error.
 *
 * This routine is large and unsightly, but most of the ugliness due
 * to the three different kinds of output buffering is handled here.
 */
static BSD__sfvwrite(fp, uio)
	register FILE *fp;
	register struct __suio *uio;
{
	register size_t len;
	register char *p;
	register struct __siov *iov;
	register int w;

	if ((len = uio->uio_resid) == 0)
		return (0);
#ifndef __hpux
#define	MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#define	COPY(n)	  (void)memcpy((void *)fp->_p, (void *)p, (size_t)(n))

	iov = uio->uio_iov;
	p = iov->iov_base;
	len = iov->iov_len;
	iov++;
#define GETIOV(extra_work) \
	while (len == 0) { \
		extra_work; \
		p = iov->iov_base; \
		len = iov->iov_len; \
		iov++; \
	}
	if (fp->_flags & __SNBF) {
	/* fjc 7-31-97 Will never happen.  We are working with
					   strings only
	*/
	} else if ((fp->_flags & __SLBF) == 0) {
	/*
		 * Fully buffered: fill partially full buffer, if any,
		 * and then flush.  If there is no partial buffer, write
		 * one _bf._size byte chunk directly (without copying).
		 *
		 * String output is a special case: write as many bytes
		 * as fit, but pretend we wrote everything.  This makes
		 * snprintf() return the number of bytes needed, rather
		 * than the number used, and avoids its write function
		 * (so that the write function can be invalid).
		 */
		do {
			GETIOV(;);
			w = fp->_w;
			if (fp->_flags & __SSTR) {
				if (len < w)
					w = len;
				COPY(w);	/* copy MIN(fp->_w,len), */
				fp->_w -= w;
				fp->_p += w;
				w = len;	/* but pretend copied all */
			} else {
				/* fjc 7-31-97 Will never happen.  We are working with
								   strings only
				*/
			}
			p += w;
			len -= w;
		} while ((uio->uio_resid -= w) != 0);
	} else {
		/* fjc 7-31-97 Will never happen.  We are working with
						   strings only
		*/
	}
	return (0);

err:
	fp->_flags |= __SERR;
	return (EOF);
}

/*
 * Actual printf innards.
 *
 * This code is large and complicated...
 */

#if !defined(__CYGWIN32__) && defined(__hpux) && !defined(__GNUC__)
#include <stdlib.h>
#endif

/*
 * Flush out all the vectors defined by the given uio,
 * then reset it so that it can be reused.
 */
static int
BSD__sprint(fp, uio)
	FILE *fp;
	register struct __suio *uio;
{
	register int err;

	if (uio->uio_resid == 0) {
		uio->uio_iovcnt = 0;
		return (0);
	}
	err = BSD__sfvwrite(fp, uio);
	uio->uio_resid = 0;
	uio->uio_iovcnt = 0;
	return (err);
}


/*
 * Helper function for `fprintf to unbuffered unix file': creates a
 * temporary buffer.  We only work on write-only files; this avoids
 * worries about ungetc buffers and so forth.
 */
static int
BSD__sbprintf(fp, fmt, ap)
	register FILE *fp;
	const char *fmt;
	va_list ap;
{
/* We don't support files. */
	return 0;
}


/*
 * Macros for converting digits to letters and vice versa
 */
#define	to_digit(c)	((c) - '0')
#define is_digit(c)	((unsigned)to_digit(c) <= 9)
#define	to_char(n)	((n) + '0')

/*
 * Convert an unsigned long to ASCII for printf purposes, returning
 * a pointer to the first character of the string representation.
 * Octal numbers can be forced to have a leading zero; hex numbers
 * use the given digits.
 */
static char *
BSD__ultoa(val, endp, base, octzero, xdigs)
	register u_long val;
	char *endp;
	int base, octzero;
	char *xdigs;
{
	register char *cp = endp;
	register long sval;

	/*
	 * Handle the three cases separately, in the hope of getting
	 * better/faster code.
	 */
	switch (base) {
	case 10:
		if (val < 10) {	/* many numbers are 1 digit */
			*--cp = to_char(val);
			return (cp);
		}
		/*
		 * On many machines, unsigned arithmetic is harder than
		 * signed arithmetic, so we do at most one unsigned mod and
		 * divide; this is sufficient to reduce the range of
		 * the incoming value to where signed arithmetic works.
		 */
		if (val > LONG_MAX) {
			*--cp = to_char(val % 10);
			sval = val / 10;
		} else
			sval = val;
		do {
			*--cp = to_char(sval % 10);
			sval /= 10;
		} while (sval != 0);
		break;

	case 8:
		do {
			*--cp = to_char(val & 7);
			val >>= 3;
		} while (val);
		if (octzero && *cp != '0')
			*--cp = '0';
		break;

	case 16:
		do {
			*--cp = xdigs[val & 15];
			val >>= 4;
		} while (val);
		break;

	default:			/* oops */
		/* 
		abort();
		*/
		break;	/* fjc 7-31-97.  Don't reference abort() here */
	}
	return (cp);
}

#ifdef FLOATING_POINT
#include <math.h>
/* #include "floatio.h" */

#ifndef MAXEXP
# define MAXEXP 1024
#endif

#ifndef MAXFRACT
# define MAXFRACT 64
#endif

#define	BUF		(MAXEXP+MAXFRACT+1)	/* + decimal point */
#define	DEFPREC		6

static char *cvt __P((double, int, int, char *, int *, int, int *));
static int exponent __P((char *, int, int));

#else /* no FLOATING_POINT */

#define	BUF		68

#endif /* FLOATING_POINT */


/*
 * Flags used during conversion.
 */
#define	ALT		0x001		/* alternate form */
#define	HEXPREFIX	0x002		/* add 0x or 0X prefix */
#define	LADJUST		0x004		/* left adjustment */
#define	LONGDBL		0x008		/* long double; unimplemented */
#define	LONGINT		0x010		/* long integer */

#ifdef _HAVE_SANE_QUAD_
#define	QUADINT		0x020		/* quad integer */
#endif /* _HAVE_SANE_QUAD_ */

#define	SHORTINT	0x040		/* short integer */
#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
#define FPT		0x100		/* Floating point number */
static int
BSD_vfprintf(fp, fmt0, ap)
	FILE *fp;
	const char *fmt0;
	va_list ap;
{
	register char *fmt;	/* format string */
	register int ch;	/* character from fmt */
	register int n;		/* handy integer (short term usage) */
	register char *cp;	/* handy char pointer (short term usage) */
	register struct __siov *iovp;/* for PRINT macro */
	register int flags;	/* flags as above */
	int ret;		/* return value accumulator */
	int width;		/* width from format (%8d), or 0 */
	int prec;		/* precision from format (%.3d), or -1 */
	char sign;		/* sign prefix (' ', '+', '-', or \0) */
#ifdef FLOATING_POINT
	char softsign;		/* temporary negative sign for floats */
	double _double;		/* double precision arguments %[eEfgG] */
	int expt;		/* integer value of exponent */
	int expsize;		/* character count for expstr */
	int ndig;		/* actual number of digits returned by cvt */
	char expstr[7];		/* buffer for exponent string */
#endif
	u_long	ulval;		/* integer arguments %[diouxX] */
#ifdef _HAVE_SANE_QUAD_
	u_quad_t uqval;		/* %q integers */
#endif /* _HAVE_SANE_QUAD_ */
	int base;		/* base for [diouxX] conversion */
	int dprec;		/* a copy of prec if [diouxX], 0 otherwise */
	int fieldsz;		/* field size expanded by sign, etc */
	int realsz;		/* field size expanded by dprec */
	int size;		/* size of converted field or string */
	char *xdigs;		/* digits for [xX] conversion */
#define NIOV 8
	struct __suio uio;	/* output information: summary */
	struct __siov iov[NIOV];/* ... and individual io vectors */
	char buf[BUF];		/* space for %c, %[diouxX], %[eEfgG] */
	char ox[2];		/* space for 0x hex-prefix */

	/*
	 * Choose PADSIZE to trade efficiency vs. size.  If larger printf
	 * fields occur frequently, increase PADSIZE and make the initialisers
	 * below longer.
	 */
#define	PADSIZE	16		/* pad chunk size */
	static char blanks[PADSIZE] =
	 {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
	static char zeroes[PADSIZE] =
	 {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};

	/*
	 * BEWARE, these `goto error' on error, and PAD uses `n'.
	 */
#define	PRINT(ptr, len) { \
	iovp->iov_base = (ptr); \
	iovp->iov_len = (len); \
	uio.uio_resid += (len); \
	iovp++; \
	if (++uio.uio_iovcnt >= NIOV) { \
		if (BSD__sprint(fp, &uio)) \
			goto error; \
		iovp = iov; \
	} \
}
#define	PAD(howmany, with) { \
	if ((n = (howmany)) > 0) { \
		while (n > PADSIZE) { \
			PRINT(with, PADSIZE); \
			n -= PADSIZE; \
		} \
		PRINT(with, n); \
	} \
}
#define	FLUSH() { \
	if (uio.uio_resid && BSD__sprint(fp, &uio)) \
		goto error; \
	uio.uio_iovcnt = 0; \
	iovp = iov; \
}

	/*
	 * To extend shorts properly, we need both signed and unsigned
	 * argument extraction methods.
	 */
#define	SARG() \
	(flags&LONGINT ? va_arg(ap, long) : \
	    flags&SHORTINT ? (long)(short)va_arg(ap, int) : \
	    (long)va_arg(ap, int))
#define	UARG() \
	(flags&LONGINT ? va_arg(ap, u_long) : \
	    flags&SHORTINT ? (u_long)(u_short)va_arg(ap, int) : \
	    (u_long)va_arg(ap, u_int))

	/* optimise fprintf(stderr) (and other unbuffered Unix files) */
	if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
	    fp->_file >= 0)
		return (BSD__sbprintf(fp, fmt0, ap));

	fmt = (char *)fmt0;
	uio.uio_iov = iovp = iov;
	uio.uio_resid = 0;
	uio.uio_iovcnt = 0;
	ret = 0;

	/*
	 * Scan the format for conversions (`%' character).
	 */
	for (;;) {
		for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
			/* void */;
		if ((n = fmt - cp) != 0) {
			PRINT(cp, n);
			ret += n;
		}
		if (ch == '\0')
			goto done;
		fmt++;		/* skip over '%' */

		flags = 0;
		dprec = 0;
		width = 0;
		prec = -1;
		sign = '\0';

rflag:		ch = *fmt++;
reswitch:	switch (ch) {
		case ' ':
			/*
			 * ``If the space and + flags both appear, the space
			 * flag will be ignored.''
			 *	-- ANSI X3J11
			 */
			if (!sign)
				sign = ' ';
			goto rflag;
		case '#':
			flags |= ALT;
			goto rflag;
		case '*':
			/*
			 * ``A negative field width argument is taken as a
			 * - flag followed by a positive field width.''
			 *	-- ANSI X3J11
			 * They don't exclude field widths read from args.
			 */
			if ((width = va_arg(ap, int)) >= 0)
				goto rflag;
			width = -width;
			/* FALLTHROUGH */
		case '-':
			flags |= LADJUST;
			goto rflag;
		case '+':
			sign = '+';
			goto rflag;
		case '.':
			if ((ch = *fmt++) == '*') {
				n = va_arg(ap, int);
				prec = n < 0 ? -1 : n;
				goto rflag;
			}
			n = 0;
			while (is_digit(ch)) {
				n = 10 * n + to_digit(ch);
				ch = *fmt++;
			}
			prec = n < 0 ? -1 : n;
			goto reswitch;
		case '0':
			/*
			 * ``Note that 0 is taken as a flag, not as the
			 * beginning of a field width.''
			 *	-- ANSI X3J11
			 */
			flags |= ZEROPAD;
			goto rflag;
		case '1': case '2': case '3': case '4':
		case '5': case '6': case '7': case '8': case '9':
			n = 0;
			do {
				n = 10 * n + to_digit(ch);
				ch = *fmt++;
			} while (is_digit(ch));
			width = n;
			goto reswitch;
#ifdef FLOATING_POINT
		case 'L':
			flags |= LONGDBL;
			goto rflag;
#endif
		case 'h':
			flags |= SHORTINT;
			goto rflag;
		case 'l':
			flags |= LONGINT;
			goto rflag;
#ifdef _HAVE_SANE_QUAD_
		case 'q':
			flags |= QUADINT;
			goto rflag;
#endif /* _HAVE_SANE_QUAD_ */
		case 'c':
			*(cp = buf) = va_arg(ap, int);
			size = 1;
			sign = '\0';
			break;
		case 'D':
			flags |= LONGINT;
			/*FALLTHROUGH*/
		case 'd':
		case 'i':
#ifdef _HAVE_SANE_QUAD_
			if (flags & QUADINT) {
				uqval = va_arg(ap, quad_t);
				if ((quad_t)uqval < 0) {
					uqval = -uqval;
					sign = '-';
				}
			} else {
#else /* _HAVE_SANE_QUAD_ */
			{
#endif /* _HAVE_SANE_QUAD_ */
				ulval = SARG();
				if ((long)ulval < 0) {
					ulval = -ulval;
					sign = '-';
				}
			}
			base = 10;
			goto number;
#ifdef FLOATING_POINT
		case 'e':		/* anomalous precision */
		case 'E':
			prec = (prec == -1) ?
				DEFPREC + 1 : prec + 1;
			/* FALLTHROUGH */
			goto fp_begin;
		case 'f':		/* always print trailing zeroes */
			if (prec != 0)
				flags |= ALT;
		case 'g':
		case 'G':
			if (prec == -1)
				prec = DEFPREC;
fp_begin:		_double = va_arg(ap, double);
			/* do this before tricky precision changes */
			if (isinf(_double)) {
				if (_double < 0)
					sign = '-';
				cp = "Inf";
				size = 3;
				break;
			}
			if (isnan(_double)) {
				cp = "NaN";
				size = 3;
				break;
			}
			flags |= FPT;
			cp = cvt(_double, prec, flags, &softsign,
				&expt, ch, &ndig);
			if (ch == 'g' || ch == 'G') {
				if (expt <= -4 || expt > prec)
					ch = (ch == 'g') ? 'e' : 'E';
				else
					ch = 'g';
			} 
			if (ch <= 'e') {	/* 'e' or 'E' fmt */
				--expt;
				expsize = exponent(expstr, expt, ch);
				size = expsize + ndig;
				if (ndig > 1 || flags & ALT)
					++size;
			} else if (ch == 'f') {		/* f fmt */
				if (expt > 0) {
					size = expt;
					if (prec || flags & ALT)
						size += prec + 1;
				} else	/* "0.X" */
					size = prec + 2;
			} else if (expt >= ndig) {	/* fixed g fmt */
				size = expt;
				if (flags & ALT)
					++size;
			} else
				size = ndig + (expt > 0 ?
					1 : 2 - expt);

			if (softsign)
				sign = '-';
			break;
#endif /* FLOATING_POINT */
		case 'n':
#ifdef _HAVE_SANE_QUAD_
			if (flags & QUADINT)
				*va_arg(ap, quad_t *) = ret;
			else if (flags & LONGINT)
#else /* _HAVE_SANE_QUAD_ */
			if (flags & LONGINT)
#endif /* _HAVE_SANE_QUAD_ */
				*va_arg(ap, long *) = ret;
			else if (flags & SHORTINT)
				*va_arg(ap, short *) = ret;
			else
				*va_arg(ap, int *) = ret;
			continue;	/* no output */
		case 'O':
			flags |= LONGINT;
			/*FALLTHROUGH*/
		case 'o':
#ifdef _HAVE_SANE_QUAD_
			if (flags & QUADINT)
				uqval = va_arg(ap, u_quad_t);
			else
#endif /* _HAVE_SANE_QUAD_ */
				ulval = UARG();
			base = 8;
			goto nosign;
		case 'p':
			/*
			 * ``The argument shall be a pointer to void.  The
			 * value of the pointer is converted to a sequence
			 * of printable characters, in an implementation-
			 * defined manner.''
			 *	-- ANSI X3J11
			 */
			ulval = (u_long)va_arg(ap, void *);
			base = 16;
			xdigs = "0123456789abcdef";
#ifdef _HAVE_SANE_QUAD_
			flags = (flags & ~QUADINT) | HEXPREFIX;
#else /* _HAVE_SANE_QUAD_ */
			flags = (flags) | HEXPREFIX;
#endif /* _HAVE_SANE_QUAD_ */
			ch = 'x';
			goto nosign;
		case 's':
			if ((cp = va_arg(ap, char *)) == NULL)
				cp = "(null)";
			if (prec >= 0) {
				/*
				 * can't use strlen; can only look for the
				 * NUL in the first `prec' characters, and
				 * strlen() will go further.
				 */
				char *p = (char *)memchr(cp, 0, prec);

				if (p != NULL) {
					size = p - cp;
					if (size > prec)
						size = prec;
				} else
					size = prec;
			} else
				size = strlen(cp);
			sign = '\0';
			break;
		case 'U':
			flags |= LONGINT;
			/*FALLTHROUGH*/
		case 'u':
#ifdef _HAVE_SANE_QUAD_
			if (flags & QUADINT)
				uqval = va_arg(ap, u_quad_t);
			else
#endif /* _HAVE_SANE_QUAD_ */
				ulval = UARG();
			base = 10;
			goto nosign;
		case 'X':
			xdigs = "0123456789ABCDEF";
			goto hex;
		case 'x':
			xdigs = "0123456789abcdef";
hex:
#ifdef _HAVE_SANE_QUAD_
			if (flags & QUADINT)
				uqval = va_arg(ap, u_quad_t);
			else
#endif /* _HAVE_SANE_QUAD_ */
				ulval = UARG();
			base = 16;
			/* leading 0x/X only if non-zero */
			if (flags & ALT &&
#ifdef _HAVE_SANE_QUAD_
			    (flags & QUADINT ? uqval != 0 : ulval != 0))
#else /* _HAVE_SANE_QUAD_ */
			    ulval != 0)
#endif /* _HAVE_SANE_QUAD_ */
				flags |= HEXPREFIX;

			/* unsigned conversions */
nosign:			sign = '\0';
			/*
			 * ``... diouXx conversions ... if a precision is
			 * specified, the 0 flag will be ignored.''
			 *	-- ANSI X3J11
			 */
number:			if ((dprec = prec) >= 0)
				flags &= ~ZEROPAD;

			/*
			 * ``The result of converting a zero value with an
			 * explicit precision of zero is no characters.''
			 *	-- ANSI X3J11
			 */
			cp = buf + BUF;
#ifdef _HAVE_SANE_QUAD_
			if (flags & QUADINT) {
				if (uqval != 0 || prec != 0)
					cp = __uqtoa(uqval, cp, base,
					    flags & ALT, xdigs);
			} else {
#else /* _HAVE_SANE_QUAD_ */
			{
#endif /* _HAVE_SANE_QUAD_ */
				if (ulval != 0 || prec != 0)
					cp = BSD__ultoa(ulval, cp, base,
					    flags & ALT, xdigs);
			}
			size = buf + BUF - cp;
			break;
		default:	/* "%?" prints ?, unless ? is NUL */
			if (ch == '\0')
				goto done;
			/* pretend it was %c with argument ch */
			cp = buf;
			*cp = ch;
			size = 1;
			sign = '\0';
			break;
		}

		/*
		 * All reasonable formats wind up here.  At this point, `cp'
		 * points to a string which (if not flags&LADJUST) should be
		 * padded out to `width' places.  If flags&ZEROPAD, it should
		 * first be prefixed by any sign or other prefix; otherwise,
		 * it should be blank padded before the prefix is emitted.
		 * After any left-hand padding and prefixing, emit zeroes
		 * required by a decimal [diouxX] precision, then print the
		 * string proper, then emit zeroes required by any leftover
		 * floating precision; finally, if LADJUST, pad with blanks.
		 *
		 * Compute actual size, so we know how much to pad.
		 * fieldsz excludes decimal prec; realsz includes it.
		 */
		fieldsz = size;
		if (sign)
			fieldsz++;
		else if (flags & HEXPREFIX)
			fieldsz += 2;
		realsz = dprec > fieldsz ? dprec : fieldsz;

		/* right-adjusting blank padding */
		if ((flags & (LADJUST|ZEROPAD)) == 0)
			PAD(width - realsz, blanks);

		/* prefix */
		if (sign) {
			PRINT(&sign, 1);
		} else if (flags & HEXPREFIX) {
			ox[0] = '0';
			ox[1] = ch;
			PRINT(ox, 2);
		}

		/* right-adjusting zero padding */
		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
			PAD(width - realsz, zeroes);

		/* leading zeroes from decimal precision */
		PAD(dprec - fieldsz, zeroes);

		/* the string or number proper */
#ifdef FLOATING_POINT
		if ((flags & FPT) == 0) {
			PRINT(cp, size);
		} else {	/* glue together f_p fragments */
			if (ch >= 'f') {	/* 'f' or 'g' */
				if (_double == 0) {
				/* kludge for __dtoa irregularity */
					if (prec == 0 ||
					    (flags & ALT) == 0) {
						PRINT("0", 1);
					} else {
						PRINT("0.", 2);
						PAD(ndig - 1, zeroes);
					}
				} else if (expt <= 0) {
					PRINT("0.", 2);
					PAD(-expt, zeroes);
					PRINT(cp, ndig);
				} else if (expt >= ndig) {
					PRINT(cp, ndig);
					PAD(expt - ndig, zeroes);
					if (flags & ALT)
						PRINT(".", 1);
				} else {
					PRINT(cp, expt);
					cp += expt;
					PRINT(".", 1);
					PRINT(cp, ndig-expt);
				}
			} else {	/* 'e' or 'E' */
				if (ndig > 1 || flags & ALT) {
					ox[0] = *cp++;
					ox[1] = '.';
					PRINT(ox, 2);
					if (_double || flags & ALT == 0) {
						PRINT(cp, ndig-1);
					} else	/* 0.[0..] */
						/* __dtoa irregularity */
						PAD(ndig - 1, zeroes);
				} else	/* XeYYY */
					PRINT(cp, 1);
				PRINT(expstr, expsize);
			}
		}
#else
		PRINT(cp, size);
#endif
		/* left-adjusting padding (always blank) */
		if (flags & LADJUST)
			PAD(width - realsz, blanks);

		/* finally, adjust ret */
		ret += width > realsz ? width : realsz;

		FLUSH();	/* copy out the I/O vectors */
	}
done:
	FLUSH();
error:
	return (__sferror(fp) ? EOF : ret);
	/* NOTREACHED */
}

#ifdef FLOATING_POINT

extern char *BSD__dtoa __P((double, int, int, int *, int *, char **));

static char *
cvt(value, ndigits, flags, sign, decpt, ch, length)
	double value;
	int ndigits, flags, *decpt, ch, *length;
	char *sign;
{
	int mode, dsgn;
	char *digits, *bp, *rve;

	if (ch == 'f')
		mode = 3;
	else {
		mode = 2;
	}
	if (value < 0) {
		value = -value;
		*sign = '-';
	} else if (value == 0.0 && 1.0/value < 0) {
	    *sign = '-';
	} else {
	    *sign = '\000';
	}
	digits = BSD__dtoa(value, mode, ndigits, decpt, &dsgn, &rve);
	if (flags & ALT) {	/* Print trailing zeros */
		bp = digits + ndigits;
		if (ch == 'f') {
			if (*digits == '0' && value)
				*decpt = -ndigits + 1;
			bp += *decpt;
		}
		if (value == 0)	/* kludge for __dtoa irregularity */
			rve = bp;
		while (rve < bp)
			*rve++ = '0';
	}
	*length = rve - digits;
	return (digits);
}

static int
exponent(p0, exp, fmtch)
	char *p0;
	int exp, fmtch;
{
	register char *p, *t;
	char expbuf[MAXEXP];

	p = p0;
	*p++ = fmtch;
	if (exp < 0) {
		exp = -exp;
		*p++ = '-';
	}
	else
		*p++ = '+';
	t = expbuf + MAXEXP;
	if (exp > 9) {
		do {
			*--t = to_char(exp % 10);
		} while ((exp /= 10) > 9);
		*--t = to_char(exp);
		for (; t < expbuf + MAXEXP; *p++ = *t++);
	}
	else {
		*p++ = '0';
		*p++ = to_char(exp);
	}
	return (p - p0);
}
#endif /* FLOATING_POINT */

int
vsnprintf(str, n, fmt, ap)
	char *str;
	size_t n;
	const char *fmt;
	_BSD_VA_LIST_ ap;
{
	int ret;
	FILE f;

	if ((int)n < 1)
		return (EOF);
	f._flags = __SWR | __SSTR;
	f._bf._base = f._p = (unsigned char *)str;
	f._bf._size = f._w = n - 1;
	ret = BSD_vfprintf(&f, fmt, ap);
	*f._p = 0;
	return (ret);
}

#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)snprintf.c	8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */

#if defined(__STDC__)
# include <stdarg.h>
#else
# include <varargs.h>
#endif

int
#if defined(__STDC__)
snprintf(char *str, size_t n, char const *fmt, ...)
#else
snprintf(str, n, fmt, va_alist)
char *str, *fmt;
size_t n;
va_dcl
#endif
{
	int ret;
	va_list ap;
	FILE f;

	if ((int)n < 1)
		return (EOF);

#if defined(__STDC__)
	va_start(ap, fmt);
#else
	va_start(ap);
#endif
	f._flags = __SWR | __SSTR;
	f._bf._base = f._p = (unsigned char *)str;
	f._bf._size = f._w = n - 1;
	ret = BSD_vfprintf(&f, fmt, ap);
	*f._p = 0;
	va_end(ap);
	return (ret);
}