SDK(Software Depelopment Kit)に関する情報

ここでは、私がプログラムしているときに気がついた情報を提供します。
基本的に、プログラミング初心者の私が嵌った所です。(上級者に対して有用な情報は少ないかも・・・)

1.DsSDK仕様書の補足事項 (UpDate:2002.02.19)

ドングルの認識

EW Z80のインストールマニュアルにはドングルが認識しないとき、環境変数SSI_ACTをAutoexec.batで変更するように記載されていますが、アドイン開発手順書に記載されているAddin.batの中にset SSI_ACT 10,10,20と記載されており、この数値を変更したほうが早いようです。
ちなみに私の環境(K6-2 500MHz)は70,70,100で動いています。
(10,10,20の時はまったく認識せず。50,50,100でも稀に認識しなくなります)

DsSleep(int time)

timeの値を0にすると無限ループに突入するみたいです。
また、timeの値をn/TIME_CLOCKTICKとした場合、nの値を15以下に指定する同じような状態になります。
この事から、TIME_CLOCKTICK=16であることが判りました。

DsPrintf(...)

う〜ん・・・そのままでは数値を表示することが出来ません。
私はソースの中に次のような関数を用意し、数値をテキストコードに変換して表示させています。(面倒なので桁数を決め打ちしています。)

/*3桁の整数表示関数*/
void DsPrtnumf(char x,char y,char z,int num){
char a[4],i;
//3桁なのにa[4]としているのは、文字列の最後にnullを
//入れて文字列が終了している事を示すためです。

DsDisplayBlockClear(x,y,18,12);  //表示範囲の消去

//ここからのif文で各桁の数値の取得と+−の変換を行っています。
if(num < 0){
    num=num*-1;
    a[2]=num%10;
    a[1]=(num%100)/10;
    a[0]=45;    //45はマイナス記号のASCIIコードです
}
else{
    a[2]=num%10;
    a[1]=(num%100)/10;
    a[0]=(num%1000)/100;
}

//ここからのif文で先頭に0がの時表示されないようにしてます。
//ついでに数値をASCIIコードに変換しています。
if (a[0]==0) {
   a[0]=32;            //32はスペースのASCIIコードです
        if(a[1]==0){
           a[1]=32;
        }
        else {
        a[1]=a[1]+48;  //48は0のASCIIコードです
        }
}
else {
   a[1]=a[1]+48;
   a[0]=a[0]+48;
}
   a[2]=a[2]+48;

//この状態で、DsPrintf()にa[0]のアドレスを指定すれば数値の表示
ができます。
DsPrintf(x,y,z,&[0]);
return;
}
データベースAPIの戻り値について

カレントレコードの無い時の戻り値がDB_NO_CURRENT_RECORDとなっていますが、DB_NO_CURRENT_RECの間違いのようです。

数字の表示

int sprintf(*char,*format,...)と言う数字をASCIIコードに変換する関数を使用すれば上記のようにややこしいルーチンを作らずに済みます。
ただしSDKの標準では%%,%d,%o,%c,%s,%x識別子しか認識しないsmall formatterが採用されています。
使い方はICCユーザーズガイド1-108を参照して下さい。

ANSI 標準のformatterを使用する時は、DsSdkフォルダーの下のlnkフォルダー内に有るaddin.xclファイル内に書かれてある下記項目を削除すれば使用できます。
-e_small_write=_formatted_write
ただし、ANSI 標準のformatterを使用した時は標準に比べて約3.5kbytほど余分にメモリーを消費します。

テキストボタン

DsTextButton()の最後のテキストを入力する引数ですが、マニュアルでは char *str となっていますが、const char *str でないといけないようです。

データベース削除時の注意

DbDestroy()でデータベースのテーブルを削除した直後に、データベーステーブルを作成するとDataSlim2が不安定になるみたいです。
(データが表面上は書き換わるが、実は書き換わっていないと言う症状が「縦めも」で発生しました。)
「縦めも」では、DbDestroy()でデータベースのテーブルを削除したらアドインを終了する事で回避しています。

Copyright 2001-2002 Hideo Morotomi
感想、要望は、moro@deneb.freemail.ne.jp又は、掲示板へお願いします。
個人的にはMAILより掲示板に書きこんでもらえた方が嬉しいです。
当Web Site に関する補足事項