条件とプログラム - SHIORI『真絵(mae)』仕様書
■基礎
-
リテラル
整数と文字列を使用できます。整数は符号ありの4バイトです。文字列の最大長は整数の最大値です。 文字列は""で囲う必要があります。また文字列の中で以下の制御コードが使用できます。
制御コード 意味 \" "" で囲まれた中での " \\ "" で囲まれた中での \ \n 改行コード \t タブコード \x整数 10進数の文字コードを指定 -
演算子
C言語と同様の書式で演算、比較、代入が可能です。演算の順序は演算優先度に従いますが、 ()で囲まれた演算は優先して処理されます。
演算子の種類と演算優先度は以下の通りです。演算子 意味 優先度 ( ) 演算優先度の変更 1 (高い) * / % 乗算、除算(小数切捨て)、剰余 2 + - 加算、減算 3 == != >= <= > < 比較 4 && 論理積 5 || 論理和 6 = 代入 7 (低い) -
一時的な自動型変換
乗算、除算、剰余、加算、演算、比較はすべて整数として演算されます。 演算の中で文字列変数が指定された場合、一時的に整数に変換をして演算します。 その際一時的な変換なので、変数の内容は変わりません。 整数への変換が失敗した場合は0として演算されます。 文字列として加算したい場合にはsprint()関数、比較したい場合は strcmp(), strncmp()関数を使用してください。
-
プログラム文
プログラムはプログラム文の集まりです。プログラム文は、変数とリテラルを使用して、代入や関数の実行を記述したものです。 プログラム文は最後に;(セミコロン)を付けなくてはいけません。
例) counter = 100; startup_count = startup_count + 1; ave = ( counter + startup_count ) / 2; rc = split( dim, ":", "one:two:three" );
すべての変数は事前に宣言されている必要があります。 変数の宣言については、こちらを参照してください。
-
条件文
条件文は主に比較演算子と論理積、論理和演算子を使用して記述します。 条件文には2つの使用方法があります。1つ目はプログラムの中の制御において、条件によって実行内容を変える場合に使用します。具体的には制御構造の解説を参照してください。 2つ目はタグが持つ条件としてcase命令に条件を与える場合に使用します。
#イベント名:case 条件
(プログラム)
:end例) #OnBoot:case month == 1 && day == 1 :end あけましておめでとうございます。
この例では、OnBootイベントが発生したときに1月1日ならば「あけましておめでとうございます。」という文章を出力します。
-
制御構造
通常、プログラム文はプログラム中で上から順番に実行されますが、その順番を変更するための方法があります。分岐方法としてifがあります。
if 条件文 then
プログラム文1
:
end else
プログラム文2
:
:end条件文が真(正しい)ならば、プログラム文1のみが実行されます。 偽(正しくない)ならば、プログラム文2のみが実行されます。else以降は省略可能で真の場合のみの記述もできます。
ループ方法としてwhileがある。
例) while 条件文 do プログラム文1 : end
条件文が真(正しい)ならば、プログラム文1を実行し、その後再び条件文を検証します。結果が真である限り何度でもプログラム文1を実行します。 ループの先頭に戻るcoutinue命令と、条件文の検証結果に関係なくすぐにループを抜けるbreak命令があります。
例) data = ""; i = 0; while i < 10 do i = i + 1; if i == 3 then continue; end data = sprintf( data, i ); if i == 7 then data = sprint( data, "end" ); break; end end
sprint()関数は第1引数の文字列に第2引数以降の値を連結した結果を戻す関数です。このプログラムの実行結果、 dataの中は以下のようになります。
12456end
-
予約語
予約語とはSHIORI真絵のプログラム命令が使用している文字列で、これらは変数名には使用できません。 すでにいくつかの命令が解説されていますが、SHIORI真絵の予約語には以下のものがあります。
var if then else while do break continue return case def begin end
-
関数への値渡しと参照渡し
関数とは、まとまった機能に名前(関数名)を付けて、その機能を使用できるようにした仕組みのことです。 関数にはSHIORI真絵が提供するシステム関数と、ユーザーがプログラム文で作成するユーザー関数があります。 関数は「引数」と「戻り値」を持っています。関数名の後ろに(引数1, 引数2,...)と記述することで、 引数を使って関数に対してデータを渡すことができます。戻り値とは関数が返してくる結果の1つとして関数を変数とみなして使用することで、 戻り値を取得できます。引数の数や戻り値の有無は関数によって決まっており、なしや無制限という関数もあります。
例で説明します。システム関数にsplit()という文字列を分割する関数があります。 この関数は引数を3つとるので、引数が3つないとエラーになります。第1引数は分割した結果を格納する配列、第2引数は分割の区切り子となる文字列、 第3引数は分割したい文字列です。型に合わない場合は自動的に変換されます。 戻り値は整数で、実際に分割された数が返ってきます。次のようなプログラムを記述した場合を考えます。
var output[10]; var input; input = "a,b,c,d,e,f"; rc = split( output, ",", input);
この結果、rcには6が入ります。配列の内容は以下のようになっています。
output[0] は "a"
output[1] は "b"
output[2] は "c"
output[3] は "d"
output[4] は "e"
output[5] は "f"
この場合、outputという配列を関数に渡した結果、引数の内容が変わって返ってきています。 関数に渡した引数に対して、関数の中で結果を入れて返してくる引数の渡し方を「参照渡し」といいます。 inputのように引数を関数に渡すだけの一方通行の渡し方を「値渡し」といいます。 関数を呼び出す側は特にプログラムの記述上で考慮をすることはありません。 この参照渡しと値渡しを記述上考慮しなくてはならないのは、ユーザー関数を定義するときのみです。
-
変数のスコープとローカル変数
宣言した変数がプログラムの中で使用できる範囲を、その変数のスコープといいます。 #Declarationタグで宣言をしたユーザー変数は原則としてどこでも使用できますが、 ユーザー関数の定義中と以下のようにbeginとendで囲まれたブロック内はスコープ外なので使用できません。
begin var temp; // ローカル変数 プログラム文 // #Declarationタグで宣言したユーザー変数のスコープ外 : end
ユーザー関数の定義中やbegin~endブロックの中では、その中でのみ使用できるユーザー変数を宣伝して使用できます。 このように局所的に使用できる変数のことをローカル変数といいます。
■システム関数
-
SHIORI真絵が提供する関数一覧です。
変数の内容が整数、文字列に関わらず、関数は自分が必要とする型に一時的に変換をして変数を使用します。 ここでは引数と戻り値において、整数として解釈される場合はint、文字列として解釈される場合はstring、 解釈をしない場合はint/string、なしの場合はvoidを変数名や関数名の前につけて表現します。また引数が参照渡しの場合は変数名の最後に"&"をつけます。 関数を使用するときには、intやstringや&をつけてはいけません。
-
システム関数一覧
deletenews Newsの削除
getini 初期設定パラメータの取得
getnews News内容の取得
getnewsdate News登録時間の取得
getnewselapasedtime News登録からの経過時間の取得
getsenti 気分の取得
join 文字列の結合
saori SAORIの呼び出し
saoriload SAORIの初期化
saoriunload SAORIの解放
setindex 文章インデックスの設定
setini 初期設定パラメータの設定
setnews News の登録
setrandindex 文章選出モードの設定
setsenti 気分の設定
size 配列のサイズを取得
split 文字列の分割
sprint 文字列の整形
strcmp 文字列の比較
strncmp 部分文字列の比較
print(デバック用) デバッグ目的での標準出力
-
int deletenews( string headline, int revisionid, int mode )
- 概要
Newsを削除します。
- 引数
headline
削除対象となるヘッドライン。
revisionid
削除したいリビジョン番号。0を指定すると最新のリビジョンを削除します。
mode
削除モード。
0 … 対象となるヘッドラインの全リビジョンを削除します。revisionidは無視されます。
1 … 指定されたリビジョンを削除します。
2 … 対象となるヘッドラインの一番古いリビジョンを除いて削除します。
3 … 対象となるヘッドラインの最新リビジョンを除いて削除します。
- 戻り値
整数を返します。削除したNewsの件数を返します。
- 補足解説
ファイル・サイズが大きくなり過ぎないように、Newsデータを削除をする必要があります。
- 関連
- 例
deletenews( "Shutdown", 0, 1 );
ヘッドライン"Shutdown"の最新リビジョンを削除します。
- 概要
- string getini( string keyword )
-
int getnews( string headline, int revisionid, string result& )
- 概要
Newsの内容を取得します。
- 引数
headline
取得対象となるヘッドライン。
revisionid
取得したいリビジョン番号。0を指定すると最新のリビジョンを取得します。
result
取得結果ががセットされます。 - 戻り値
整数を返します。内容を取得したリビジョン番号を返します。0の場合は取得に失敗しています。
- 補足解説
指定したリビジョンが存在しない等の理由でエラーになった場合、取得結果は空の文字列は設定されます。 ただしエラーかどうかは戻り値が0かどうかで判断してください。
- 関連
- 例
rc = getnews( "Shutdown", 0, message );
if rc == 0 then
message = "メッセージなし";
endヘッドライン"Shutdown"の最新リビジョンの内容をmessageに取得します。 "Shutdown"が存在しない場合、messageに「メッセージなし」を設定します。
- 概要
-
int getnewsdate( string headline, int revisionid, int nyear&, int nmonth&, int nday&, int nhour&, int nminute&, int nsecond&)
- 概要
Newsの登録時間を取得します。
- 引数
headline
取得対象となるヘッドライン。
revisionid
取得したいリビジョン番号。0を指定すると最新のリビジョンを取得します。
nyear
登録した年がセットされます。西暦です。
nmonth
登録した月がセットされます。1~12です。
nday
登録した日がセットされます。1~31です。
nhour
登録した時がセットされます。0~23です。
nminute
登録した分がセットされます。0~59です
nsecond
登録した秒がセットされます。0~59です。
- 戻り値
整数を返します。内容を取得したリビジョン番号を返します。0の場合は取得に失敗しています。
- 補足解説
指定したリビジョンが存在しない等の理由でエラーになった場合、取得結果は空の文字列は設定されます。 ただしエラーかどうかは戻り値が0かどうかで判断してください。
- 関連
- 例
rc = getnewsdate( "Shutdown", 0, nyear, nmonth, nday, nhour, nminute, nsecond );
if rc == 0 then
nyear = -1;
end
ヘッドライン"Shutdown"の最新リビジョンが登録された時間を取得します。"Shutdown"が存在しない場合、nyearに-1を設定します。
- 概要
-
int getnewselapsedtime( string headline, int revisionid, int ehour&;, int eminute&;, int esecond& )
- 概要
Newsからの経過時間を取得します。
- 引数
headline
取得対象となるヘッドライン。
revisionid
取得したいリビジョン番号。0を指定すると最新のリビジョンを取得します。
ehour
登録からの経過時がセットされます。0~です。
eminute
登録からの経過分がセットされます。0~59です。
esecond
登録からの経過秒がセットされます。0~59です。 - 戻り値
整数を返します。内容を取得したリビジョン番号を返します。0の場合は取得に失敗しています。
- 補足解説
指定したリビジョンが存在しない等の理由でエラーになった場合、取得結果は空の文字列は設定されます。 ただしエラーかどうかは戻り値が0かどうかで判断してください。
- 関連
- 例
rc = getnewsdate( "Shutdown", 0, ehour, eminute, esecond );
if rc == 0 then
ehour = -1;
end
ヘッドライン"Shutdown"の最新リビジョンが登録された時からの経過時間を取得します。"Shutdown"が存在しない場合、ehourに-1を設定します。
- 概要
-
int getsenti( void )
- 概要
現在の気分を取得します。
- 引数
なし
- 戻り値
整数を返します。気分の値は-MAX_SENTI~MAX_SENTIの範囲です。
- 補足解説
原則として気分の値ではなく、感情レベルを持つシステム変数emotionを参照するようにしてください。
- 関連
- 例
sentiment = getsenti();
変数sentimentに現在の気分の値が整数で入ります。
- 概要
-
string join( int number, string delim, string input )
- 概要
配列の要素を順番に区切り子を挟んで結合します。
- 引数
number
結合する要素数。入力された配列の先頭から何要素結合するか指定します。size()で配列の要素数は取得できます。
delim
区切り子を指定する文字列。配列の要素を結合する際に、間に挟む文字列を指定します。
input
入力配列。結合の対象となります。整数と文字列のどちらでも構いません。変数の場合は内容を文字列で返すだけになります。 - 戻り値
文字列を返します。結合した結果の文字列です。
- 補足解説
結合する要素数の指定が入力配列の要素数以上の場合、配列の要素をすべて結合します。
- 関連
- 例
var input[3], output;
input[0] = "abc";
input[1] = "def";
input[2] = "ghi";
output = join(2, "/", input);変数outputは"abc/def"になります。
- 概要
-
int rand( int number )
- 概要
整数の乱数を取得します。
- 引数
number
乱数の最大値。 - 戻り値
整数を返します。1~numberの間の整数になります。
- 補足解説
戻り値に0が含まれていないことに注意してください。
- 関連
なし。
- 例
age = rand(3) - 1;
変数ageには、0か1か2が入ります。
- 概要
-
int saori( string module, string result&, string output&, string input, int number )
- 概要
SAORIへ処理を要求します。
- 引数
module
SAORIのモジュール名。saoriloadで定義したものを使用する。
result
SAORIのResultを格納する変数。
output
SAORIのValueを格納する文字列配列。変数だと要素数1の配列とみなされます。
input
SAORIへ渡すArgumentを格納した配列。整数と文字列のどちらでも構いません。変数だと要素数1の配列とみなされます。
number
SAORIへ渡すArgumentを格納した配列要素の先頭([0])から実際に渡す数を指定します。配列要素すべてを渡す場合は、size()関数を使用してください。 - 戻り値
整数を返します。SAORIからのリターンコード(正常の場合は200)が返ります。
- 補足解説
SAORIへrequest()を発行します。事前にsaoriloadでSAORIをload()する必要があります。 指定したモジュール名が利用できない場合、戻り値に-1が返ります。
- 関連
- 例
var input[3], result, output;
saoriload( "aya1", result, "saori\\math.dll" );
input[0] = "sqrt";
input[1] = 16;
saori("aya1", result, output, input, 2);
saoriunload("aya1");変数resultには、4が入ります。
- 概要
-
int saoriload( string module, string result&, string dllpath )
- 概要
SAORIを初期化します。
- 引数
module
SAORIのモジュール名。SAORIを呼び出すときに使用します。すでに登録済みの場合はエラーとなり、戻り値が-1になります。
result
SAORIのResultを格納する変数。
dllpath
初期化したいSAORIファイルのmasterフォルダからの相対パス。読み込みエラーの場合は、戻り値が-1になります。 - 戻り値
整数を返します。SAORIからのリターンコード(正常の場合は200)が返ります。
- 補足解説
SAORIへload()を発行します。unload()はsaoriunload()関数で発行されます。 unload()はSHIORI真絵の終了時にも自動的に呼ばれます。SAORI側からの返答内容が正しくない場合、負値が返ります。 Resultが返ってこなかった場合、空の文字列になります。
- 関連
- 概要
- int saoriunload( string module )
-
int setindex( int number )
- 概要
文章書式のタグのインデックスを変更します。
- 引数
number
設定するインデックスの値。 - 戻り値
整数を返します。設定されたインデックスの値を返します。負値を渡したときに0へ変更される以外は、設定した値がそのまま戻ります。
- 補足解説
現在の価値観のインデックスを変更します。文章数よりも大きい値が設定された場合は、その値を文章数で割った余りが設定されます。
- 関連
- 例
#起動した:
startupcount = 100;
setindex(startupcount);
:endプログラムが属するタグのインデックスが、100を「このタグに登録されている文章数」で割った余りに変更されます。
- 概要
-
int setini( string keyword, string param )
- 概要
初期設定のパラメータを変更します。
- 引数
keyword
初期設定のキーワード名。
param
初期設定のパラメータ。(整数を指定しても自動的に文字列に変換) - 戻り値
整数を返します。正常に変更できた場合は0、指定したキーワードが存在しない場合、-1を返します。
- 補足解説
ゴースト作者が初期設定を変更する唯一の方法です。 初期設定ファイルを変更して、ネットワーク更新で配布はしないでください。 ユーザーによって設定されたユーザー名を失うことになります。 初期設定のデフォルト値はmae.iniを削除した後にSHIORI真絵を起動して、生成されたmae.iniの内容を確認してください。 この関数による変更はSHIORI真絵の終了時にメモリー上から初期設定ファイルに保存されます。実行中は保存されません。
- 関連
- 例
setini("TALK_INTERVAL", 20);
約20分に1度、発話するようになります。
- 概要
-
int setnews( string headline, string message, int mode )
- 概要
Newsを登録します。
- 引数
headline
登録するヘッドライン。
messege
登録したい内容。空の文字列でも構いません。
mode
登録モード。
0 … リビジョンアップをする。
1 … リビジョンアップをせずに最新リビジョンを上書きする。 - 戻り値
整数を返します。登録したリビジョン番号を返します。
- 補足解説
ファイル・サイズが大きくなり過ぎないように、履歴が必要ない場合は上書きモードにする必要があります。
- 関連
- 例
setnews( "Shutdown", "終了しました", 1 );
ヘッドライン"Shutdown"の最新リビジョンを「終了しました」という内容で上書きします。
- 概要
-
int setrandindex( int mode )
- 概要
文章書式のタグ内の文書選出モードを変更します。
- 引数
mode
設定するモードの値。
0: 重複なしのランダム選出
1: 重複ありのランダム選出
2: インデックスを使用した順次選出(デフォルト) - 戻り値
整数を返します。設定された結果のモードです。modeに0と1以外を設定すると2が返ります。
- 補足解説
この関数によって設定されたモードは1回の発話の間のみ有効です。 その後は順次選出に戻ります。しかし重複なしのランダム選出においては、どの文章を発話したかはプログラムが終了するまで保持します。
- 関連
- 例
#Mae.Talk
setrandindex( 0 );
:endプログラムが属するタグ内の文章はランダムで選出されます。タグ内のすべての文章が発話完了するまで、同じ文章は選出されません。
- 概要
- int setsenti( int number )
-
int size( int/string input )
- 概要
配列の要素数を返します。
- 引数
input
配列名。変数名だと要素数 1 の配列とみなされます。 - 戻り値
整数を返します。配列の要素数です。
- 補足解説
特になし。
- 関連
なし。
- 例
var input, output[10], count;
input = ”abc,def,ghi";
count = split(output, ","" input);output[0]は"abc"、output[1]は"def"、output[2]は”ghi"、countは3になります。
- 概要
-
int size( int/string input )
- 概要
配列の要素数を返します。
- 引数
input
配列名。変数名だと要素数 1 の配列とみなされます。 - 戻り値
整数を返します。配列の要素数です。
- 補足解説
特になし。
- 関連
なし。
- 例
var array[20], arraysize;
arraysize = size(array);arraysizeは20になります。
- 概要
-
int split( string output&, string delim, string input )
- 概要
文字列を指定した区切り子で分割して、配列に格納します。
- 引数
output
分割した文字列を格納する配列。配列名だけを指定。変数だと要素数1の配列とみなされます。
delim
区切り子を指定する文字列。この文字列に含まれるすべての文字が区切り子となります。
input
入力文字列。分割の対象となります。 - 戻り値
整数を返します。分割して格納された文字列の個数が返ります。
- 補足解説
分割結果が格納する配列の要素数よりも多かった場合、配列の要素数しか分割結果は返りません。
- 関連
- 例
var input, output[10], count;
input = ”abc,def,ghi";
count = split(output, ","" input);output[0]は"abc"、output[1]は"def"、output[2]は”ghi"、countは3になります。
- 概要
-
string sprint( string input1, string input2, ... )
- 概要
整数や文字列を連結して文字列を生成します。
- 引数
input1, input2, ...
整数や文字列を指定します。引数の数に制限はありません。 - 戻り値
文字列を返します。引数を連結させた文字列です。
- 補足解説
整数は文字列へ変換します。整形はできません。
- 関連
- 例
var count, output;
count = 5;
output = sprint( "回数は", count, "回になります。\n");変数outputは"回数は5回になります。\n"になります。
- 概要
-
int strcmp( string str1, string str2 )
- 概要
2つの変数を文字列として比較します。
- 引数
str1, str2
比較対象の変数。整数の場合は一時的に文字列へ変換して比較をします。 - 戻り値
整数を返します。0の場合、str1とstr2が等しいことを意味しています。 負値の場合、str1 < str2で、 正値の場合は、str1 > str2を意味しています。
- 補足解説
C言語のstrcmp()へバイパスしているだけです。
- 関連
- 概要
-
int strncmp( string str1, string str2, int n )
- 概要
2つの変数を文字列として部分的に比較します。
- 引数
str1, str2
比較対象の変数。整数の場合は一時的に文字列へ変換して比較をします。
n
文字列の先頭からカウントして、比較する文字数。 - 戻り値
整数を返します。0の場合、str1とstr2の部分文字列が等しいことを意味しています。 負値の場合、str1 < str2で、 正値の場合は、str1 > str2を意味しています。
- 補足解説
C言語のstrncmp()へバイパスしているだけです。
- 関連
- 概要
-
void print string input1, string input2, ...
- 概要
SHIORI真絵の開発デバッグ用です。SHIORI真絵の呼び出し側が標準出力を表示できる場合、文字列として連結して出力します。
- 引数
input1, input2, ...
整数や文字列を指定します。引数の数に制限はありません。 - 戻り値
なし。
- 補足解説
使用しても負荷が発生するだけです。
- 概要
■ユーザー関数
-
ユーザー関数とはmae_commonfunc.txtの中でプログラム文を記述してユーザーが定義する関数のことです。 def命令で関数名を定義して、その後に引数を記述します。 その際、参照渡しの場合は引数の最後に&を付け足します。
関数からの戻り値はreturn命令の後ろにつけます。 return命令の後ろに何も付けなかったり、retuen命令自体記述しなかった場合、戻り値はなしになります。 関数はendで閉じている必要があります。
引数においてユーザー関数がシステム関数と違うところは、引数の数に無制限はなく、関数の使用側が配列か変数かを正しく使用しなくてはならないことです。 ユーザー関数側が配列を必要としているところに変数を渡してしまった場合、ユーザー関数の中で配列要素の1以上を参照したときに ランタイム・エラーになります。また配列はすべて参照渡しにしてください。
-
ユーザー関数の定義例
def getdisp( disp&, card )
var return_code;
disp = ";";
if card[1] == 1 then
disp = sprint( disp, "\\i[1]" );
return_code = 1;
end
if card[2] == 1 then
disp = sprint( disp, "\\i[2]" );
return_code = 2;
end
if card[3] == 1 then
disp = sprint( disp, "\\i[3] );
return_code = 3;
end
return return_code;
endreturn_code はローカル変数です。
-
ユーザー関数の使用例
var cardinfo[4];
var dispinfo, rc;
cardinfo[1] = 1;
cardinfo[2] = 0;
cardinfo[3] = 1;
dispinfo = "test";
rc = getdisp( dispinfo, cardinfo );
実行結果は以下のようになります。
変数rcは整数の3。
変数dispは文字列"\\i[1]\\i[3]"。
配列cardinfoの内容はユーザー関数を呼んだ後も変わりません。
■News機能
-
News機能とは、あるNewsの「登録した時間」、「内容」、「リビジョン」を指示に従って保存し、 「Newsを登録した時間」、「Newsの登録から現在まで経過した時間」、「Newsの内容」を取得できたり、リビジョン管理が可能な機能のことです。 これらの機能はシステム関数を使用して利用できます。
Newsはmae_news.txtファイルに保存されます。起動時にメモリー内に読み込まれ、起動中はメモリー内の情報にNewsを登録、削除、参照します。 Newsが登録された場合、リアルタイムでファイルにも登録されますが、Newsが削除された場合は、リアルタイムには反映せず、終了時にファイルを更新します。 Newsが削除されていない限り、終了時にファイルへは書き出しません。ファイルへ登録をすれば、削除をしない限りファイルサイズは増えつづけます。 適当なタイミングで一部を削除したり、ファイルサイズが増加しない指定をして登録をする必要があります。詳しくは各システム関数の機能を参照してください。
News は以下の構成で成り立っています。
- ヘッドライン
- リビジョン
- 登録時間
- 内容
ヘッドラインはNewsのキーとなる情報です。登録、削除、参照はキーを使用します。 例えば、ヘッドラインを"Shutdown"にして、終了をする度に登録をすることで、いつ終了をしたかの履歴をNewsに残すことができます。 起動時に最後に登録された"Shutdown"からの経過時間を取得すれば、終了してから起動するまでにどれくらい時間が経過していたかがわかります。
リビジョンは、そのNewsの更新履歴に番号を付けて管理されたものです。1から始まり、原則として更新される度に+1されます。 登録すると最新のリビジョンとなります。登録のタイミングでリビジョンを+1する場合、「リビジョンアップする」といいます。 最新のリビジョンを上書き指示することで、リビジョンアップせずに登録もできます。 また任意のリビジョンを削除することも可能です。最新リビジョンまたは一番古いリビジョンのみを残して一括削除する機能があります。 また任意のヘッドラインのNewsをすべて削除することも可能です。
登録時間はNewsを登録した時間です。登録時に自動的にローカルのPCから時間を取得して登録します。 その時間そのものやその時間からの経過時間を取得することができます。