2007年5月29日火曜日

内部エラー報告詳細化スクリプト

EXEにすると内部エラーの報告がおおざっぱになってしまうのを補助するスクリプト。
OnErrorFlagというフラグを利用、本体側ではonerrorを使用しないこと。

userdef.as内に埋め込んでもいいかも。

der.as// 内部エラー報告 詳細化 (DetailErrorReport)
// OnErrorFlagというフラグをグローバル空間にて使用しています。

#ifndef __DetailErrorReport__
#define __DetailErrorReport__
    onerror goto *OnErrorFlag
    goto *@f
#module
#deffunc derSetTitle str p1
    sTitle = p1
    return

#deffunc derSetURL str p1
    sURL = p1
    return

#deffunc derSetMail str p1
    sAddress = p1
    return

#deffunc derReport int p1, int p2, local sMessage
    sMessage = {"プログラムの実行中にエラーを発見しました。プログラムは強制終了致します。
申し訳ありません。
プログラムの改善のため、以下のエラー情報を発行元にご報告ください。

*エラー情報
\tKind : "}

    switch p1
    case 1
        sMessage += "システムエラーが発生しました"
        swbreak
    case 2
        sMessage += "文法が間違っています"
        swbreak
    case 3
        sMessage += "パラメータの値が異常です"
        swbreak
    case 4
        sMessage += "計算式でエラーが発生しました"
        swbreak
    case 5
        sMessage += "パラメータの省略はできません"
        swbreak
    case 6
        sMessage += "パラメータの型が違います"
        swbreak
    case 7
        sMessage += "配列の要素が無効です"
        swbreak
    case 8
        sMessage += "有効なラベルが指定されていません"
        swbreak
    case 9
        sMessage += "サブルーチンやループのネストが深すぎます"
        swbreak
    case 10
        sMessage += "サブルーチン外でのreturnは無効です"
        swbreak
    case 11
        sMessage += "repeat外でのloopは無効です"
        swbreak
    case 12
        sMessage += "ファイルが見つからないか、無効な名前です"
        swbreak
    case 13
        sMessage += "画像ファイルがありません"
        swbreak
    case 14
        sMessage += "外部ファイル呼び出し中のエラーが発生しました"
        swbreak
    case 15
        sMessage += "計算式でカッコの記述が違います"
        swbreak
    case 16
        sMessage += "パラメータの数が多すぎます"
        swbreak
    case 17
        sMessage += "文字列式で扱える文字数を超えました"
        swbreak
    case 18
        sMessage += "代入できない変数名を指定しています"
        swbreak
    case 19
        sMessage += "0で除算しました"
        swbreak
    case 20
        sMessage += "バッファオーバーフローが発生しました"
        swbreak
    case 21
        sMessage += "サポートされない機能を選択しました"
        swbreak
    case 22
        sMessage += "計算式のカッコが深すぎます"
        swbreak
    case 23
        sMessage += "変数名が指定されていません"
        swbreak
    case 24
        sMessage += "整数以外が指定されています"
        swbreak
    case 25
        sMessage += "配列の要素書式が間違っています"
        swbreak
    case 26
        sMessage += "メモリの確保ができませんでした"
        swbreak
    case 27
        sMessage += "タイプの初期化に失敗しました"
        swbreak
    case 28
        sMessage += "関数に引数が設定されていません"
        swbreak
    case 29
        sMessage += "スタック領域のオーバーフローが発生しました"
        swbreak
    case 30
        sMessage += "無効な名前がパラメーターに指定されています"
        swbreak
    case 31
        sMessage += "異なる型を持つ配列変数に代入しました"
        swbreak
    case 32
        sMessage += "関数のパラメーター記述が不正です"
        swbreak
    case 33
        sMessage += "オブジェクト数が多すぎます"
        swbreak
    case 34
        sMessage += "配列・関数として使用できない型です"
        swbreak
    case 35
        sMessage += "モジュール変数が指定されていません"
        swbreak
    case 36
        sMessage += "モジュール変数の指定が無効です"
        swbreak
    case 37
        sMessage += "変数型の変換に失敗しました"
        swbreak
    case 38
        sMessage += "外部DLLの呼び出しに失敗しました"
        swbreak
    case 39
        sMessage += "外部オブジェクトの呼び出しに失敗しました"
        swbreak
    case 40
        sMessage += "関数の戻り値が設定されていません"
        swbreak
    default
        sMessage += "未知のエラーです"
    swend
    sMessage += "(Error No. " + str(p1) + ")\n\tLine : " + str(p2)

    if (sURL != "")|(sAddress != "") {
        // URL またはアドレスが設定されている場合
        sMessage += "\n\n*連絡先"
    }

    if sURL != "" {
        sMessage += "\n\tURL : " + sURL
    }

    if sAddress != "" {
        sMessage += "\n\tMail : " + sAddress
    }

    if sTitle = "" {
        sTitle = "エラー"
    } else {
        sTitle = "エラー - " + sTitle
    }
    dialog sMessage, 1, sTitle
    return
#global
*OnErrorFlag
    onerror 0
    derReport wparamlparam
    end

*@
    derSetTitle ""
    derSetURL   ""
    derSetMail  ""
#endif
/*  [sample]
    derSetTitle "サンプルツール 人柱版"
    derSetURL   "http://www.sample.hsp/"
    derSetMail  "master@sample.hsp"

    derReport 11, 0
    end
*/

0 件のコメント: