Lunatic Sol

IT Tips

SxGetDbClassID & SxGetDbClassName

2004-01-27 18:18:52 | LotusScript
久々に LotusScript ネタです。このネタは前からあったのですが、整理していたら時間が経過しすぎてしまいました。

NSFDbClassGet というファンクションが Notes C API Toolkit で公開されているのですが、このファンクション Notes データベースのクラスを返してくれる便利なファンクションです。

NotesPeek を使えば確認できるのですが、LotusScript アプリケーション上でチェックしたい場合には NSFDbClassGet を直接 Call してしまうのが良いです。

実際に返してくれる値は Integer 型のデータなのですが、Toolkit の中の nsfdb.h を見ると以下のように定義されていることがわかります。
#define  DBCLASS_NOTEFILE  0xff01

なので、nsfdb.h のマクロを参考にして LotusScript でも NSFDbClassGet の戻り値から DBCLASS_xxx を返すようにしてみました。hDB は NSFDbOpen を直接 Call してあらかじめ取得して....ん?あー、そういえば NSFDbOpen() を Call するサンプルってまだやってなかったですね。最後にサンプル書いておくので、それを参考にしてくださいです。後日あらためて NSFDbOpen と NSFDbClose だけについても記事書きます。
Function SxGetDbClassID(hDB As Integer) As Integer
    Dim retClass As Integer
    Call NSFDbClassGet(hDB, retClass)
    SxGetDbClassID = retClass
End Function

Function SxGetDbClassName(dbClassId As Integer) As String
    Const DBCLASS_VALID_MASK = &HFF00
    Select Case dbClassId Xor DBCLASS_VALID_MASK
    Case 0:    SxGetDbClassName = "DBCLASS_NSFTESTFILE"
    Case 1:    SxGetDbClassName = "DBCLASS_NOTEFILE"
    Case 2:    SxGetDbClassName = "DBCLASS_DESKTOP"
    Case 3:    SxGetDbClassName = "DBCLASS_NOTECLIPBOARD"
    Case 4:    SxGetDbClassName = "DBCLASS_TEMPLATEFILE"
    Case 5:    SxGetDbClassName = "DBCLASS_GIANTNOTEFILE"
    Case 6:    SxGetDbClassName = "DBCLASS_HUGENOTEFILE"
    Case 7:    SxGetDbClassName = "DBCLASS_ONEDOCFILE"
    Case 8:    SxGetDbClassName = "DBCLASS_V2NOTEFILE"
    Case 9:    SxGetDbClassName = "DBCLASS_ENCAPSMAILFILE"
    Case 10:   SxGetDbClassName = "DBCLASS_LRGENCAPSMAILFILE"
    Case 11:   SxGetDbClassName = "DBCLASS_V3NOTEFILE"
    Case 12:   SxGetDbClassName = "DBCLASS_OBJSTORE"
    Case 13:   SxGetDbClassName = "DBCLASS_V3ONEDOCFILE"
    Case 14:   SxGetDbClassName = "DBCLASS_V4NOTEFILE"
    Case 15:   SxGetDbClassName = "DBCLASS_V5NOTEFILE"
    Case 16:   SxGetDbClassName = "DBCLASS_V6NOTEFILE"
    Case Else:  SxGetDbClassName = "DBCLASS_UNKNOWN"
    End Select
End Function

実際に使う場合は (Declarations) に以下の3行を追加して、Initialize イベントなどで以下のように Call してみてください。ちなみにこのサンプルは Notes 6 (W32) を前提にしているので、R5 の場合などは path を desktop5.dsk のように変更してください。尚、このサンプルを実行してなんらかの障害が出たとしても当方、一切責任は負えませんのでその点もあらかじめご了承ください。
Declare Function NSFDbOpen Lib "nnotes" (Byval PathName As String, rethDB As Integer) As Integer
Declare Function NSFDbClose Lib "nnotes" (Byval hDB As Integer) As Integer
Declare Function NSFDbClassGet Lib "nnotes" (Byval hDB As Integer, retClass As Integer) As Integer

Sub Initialize
    Dim path As String
    path = "desktop6.ndk"
    Dim ret As Long
    Dim hDB As Integer
    Dim dbClassID As Integer
    Dim dbClassName As String
    ret = NSFDbOpen(path, hDB)
    If ret = 0 Then
        dbClassID = SxGetDbClassID(hDB)
        dbClassName = SxGetDbClassName(dbClassID)
        ret = NSFDbClose(hDB)
        Msgbox "DBCLASS NAME:" & Chr(9) & dbClassName,,"Lotus Notes"
    End If
End Sub

リッピングソフトに依存しているのかも

2004-01-27 17:25:40 | Computer Tech Info
iMP-350 の ID3 タグ表示とずーっと格闘しているわけですが、どうやら Creative の Media Organizer (名前間違っているかも) っていう SoundBlaster Audigy についてきたアプリケーションで MP3 リッピングした際のタグが正しく表示できないようです。もしかしたら、Creative のソフトで出力している ID3 タグのバージョンを iMP-350 がサポートしていないだけなのかもしれませんが、ちょっと詳細は不明。

で、今回は dB power AMP というフリーウェアを使って LAME mp3 codec を使って MP3 にしてみたところ、日本語 ID3 タグは文字化けしているんですが、ASCII はちゃんと表示されました!そう、Creative のでリッピングしたファイル、なぜか ASCII 文字も NG だったんですよー。日本語が化けているのは dB power AMP が日本語に対応していないからだと思うので、日本語に対応した MP3 リッピングソフトを使ってまたやってみようと思います。道のり長いなぁー。でも、収穫あった。

Enhanced CD 対応 - WinCDR vs B's Recorder GOLD

2004-01-06 05:46:10 | Computer Tech Info
CD-R/RW を最初に使用しはじめたのは USB の外付けモデルで2年ほど前かと思う。その際のメインのライティングソフトは Aplix WinCDR であり、何気なくそれを使っていた。

新しいバージョンがリリースされ、アップグレードするかどうしようか迷っている際、新宿西口ビックカメラのオープンで B's Recorder GOLD v3 のパッケージ版が 980円 という破格だったのと、プラス v5 への無償アップグレード付きだったので乗り換えた。

で何気なーく、B's を使いつづけていたわけだが、一点欠点を見つけてしまった。個人的には致命的な欠点。それは Enhanced CD に対応していないこと。

B's が Enhanced CD 形式に全く対応していないわけではなく、Track at Once 形式で Audio トラックを書き込み、一度焼いたあとに再度データトラックを Track at Once で書き込めば良いとのこと。。。。えー、これで対応って言うのでしょうか?というのが個人的な感想。このようなライティング形式でのデメリットは以下の3つ

  • 2回ライティング処理をしないといけない
  • Audio トラックのプリギャップを 0 にできない
  • CD Text 形式の Enhanced CD にできない

特に困ってしまうのがプリギャップ設定ができないこと。プリギャップ設定は Disk at Once 形式でのみ 0 にできるので、ライブ音源などの場合は 0 にできないと厳しい。

WinCDR は 7 SE を利用しているが Enhanced CD に対応している。Disk at Once で Enhanced CD ができるのでプリギャップ設定も CD Text も設定できる。以前バージョン 5 を利用していたが、そのときから利用できていた。WinCDR 7 の唯一の欠点は winaspi.dll を書き換えることでしょうが、競合するものがなければ支障はないし、最新の 8 ではこの欠点も改善されたらしい。

ちなみに Mixed CD 形式であれば B's も対応しているようなのであるが、データトラックが前にきてしまうためオーディオ機器での再生に向いていないので、正直この機能は個人的には要らない。(そういえば、Skinny Puppy の2枚組の CD がこの形式だったような気がしたなぁ。)

NotesMIMEEntity::Headers プロパティを各ヘッダフィールドごとに分割する

2004-01-04 06:03:36 | LotusScript
今回のネタは全然たいしたものではありません。ただ、個人的に毎回書くのが面倒なのと 13 10 という組み合わせを時々忘れてネットを検索してしまうので、そういうのを防止するために SxSplitMIMEHeaders() というファンクションにしただけのものです。

このファンクションでは Split 関数が必要なのですが、ノーツ R5 の場合はそれがありません。なのでノーツ R5 で Split で紹介した方法を使います。Notes 6 の場合は Split 関数を使えば OK です。SxSplitMIMEHeaders() の引数に NotesMIMEEntity クラスの Headers プロパティの値を入れてください。

ノーツ R5 の場合
Function SxSplitMIMEHeaders(expression As String) As Variant
    SxSplitMIMEHeaders = SxSplit(expression, Chr(13) + Chr(10))
End Function

Notes 6 の場合
Function SxSplitMIMEHeaders(expression As String) As Variant
    SxSplitMIMEHeaders = Split(expression, Chr(13) + Chr(10))
End Function

HighPoint RocketRAID133

2004-01-03 05:03:29 | Computer Tech Info
昨年の10月か11月ごろに秋葉原ソフマップの中古店で新品特価 1,800- (これは本当に安かった) で売っていた RAID カード、HighPoint RocketRAID 133 なるものを自分の PC に搭載している。が、ディスクの整理が終わっていないのでまだ RAID は組んでいなかったりする。

その手始めにまずはシステム用のドライブを別ディスクで構成しようと壊れたノート PC の 2.5 inch ディスクをプライマリ・マスタにして、残りの2ディスク (従来使っていたもの) を RAID カードのプライマリ・セカンダリの両マスターにつなげてみた。まぁ、無事起動はしたのだが、いかんせん 2.5インチディスクのスピードが遅く、システムのブートがやたらと遅くなってしまった。。。。

確か RocketRAID は RAID ブートができるのでまるごと RAID にしてもいいのだが、ライティングソフトでシステムドライブのバックアップが RAID 非対応らしくやはりシステムは単一ドライブかなと。ちゅうことで、ATA133 の 7,200 回転の数十ギガドライブの購入も検討しないとなぁと重いつつ、でも財布をみては断念な状態。うー、またオークションで稼がないと。。。