MemoURL データベース仕様

MemoURL であなたのPalmwareがWEBとつながります。


現在の公開内容はVersion 1.5のものです。

MemoURL 最新版はこちらでダウンロード

MemoURLについてはこちら

1. MemoURLとPalmwareの連携

2. MemoURL Bookmarkデータベースの仕様

3. サンプル


1. MemoURLとPalmwareの連携

MemoURLの一般的な利用方法はメモしたURLを開く、Google等の検索サイトでワード検索する、の2つです。が、様々なURLを登録することで簡単にWEBサイトとの連携が可能になります

例えば、以下の手順でPalmOS上のゲームソフトに記録しているハイスコアを手軽にWEBサイトに登録する事が可能になります。

  • WEBサイトにハイスコアを登録するCGIを設置。
  • PalmwareでMemoURLのブックマークデータベースにハイスコアを登録するURLを追加。
    (URLの例 http://amsoft.co.jp/game.cgi?score=20430&name=amsoft )
  • PalmユーザがHotSyncを実行。
  • MemoURLがインストールされていれば上記のURLが実行されハイスコアが登録される。




    HotSyncによるURLの実行はMemoURLコンジットが行います。

    既存Palmwareへは「データベースにハイスコアを登録」する機能を追加する必要があります。


    上記の例のほかに、掲示板への書き込み、メール等の文章内のURLを開く、アドレス帳に登録されているURLを開く、といった機能も追加できます。


    最も手軽な利用方法はPalmware作家サイトの掲示板への書き込みでしょう。

    他にもいろいろと使い方があるかもしれません。


  • 2. MemoURL Bookmarkデータベースの仕様

    ○基本仕様

    CreaterID  asUR

    DB名  asDB_URL

    DBType  Data


    ○レコードデータ仕様

    1レコードで1ブックマークを表します。

    各レコードは可変長です。

    物理的にはⅠレコードの最大サイズは4096kbなので、URL + PageTitle < 4092 の制限があります。

    Field type size(byte) Meaning
    Key Short 2 任意の数値(以前使用していましたが現在は使用していないため、(Short)0 を入れておいてください。
    IsOpen Short 2 HotSync時のオープンフラグ。0:何もしない, 1:1回オープンすると0にする, 2:毎回オープン
    URL Char URLサイズ + 1(NULL) http で始まるURL。最終ByteはNULL。
    例)http://yahoo.co.jp + NULL
    PageTitle Char PageTitleサイズ + 1(NULL) ページ名。
    例)ヤフージャパン + NULL



    1レコードサイズ= 2 + 2 + (URL + 1) + (PageTitle + 1)

    ○注意点

  • PageTitleは空文字でも可能。
  • URLは空文字不可。

  • 3. サンプル

    ○サンプル

    MemoURLデータベースへの登録サンプルを紹介します。

    コメントが少なくて申し訳ないです。

    質問があればこちらへどうぞ

    (環境:Codewarrior7J)



    // hファイル
    #define DBType		'Data'
    #define MEMOURL_DBNAME	"asDB_URL"
    
    // ブックマークレコード - データベースの1レコードデータ
    typedef struct {
    	short key;
    	short openType;
    	char* url;
    	char* title;
    } BookmarkRec;
    
    
    // cファイル
    //	ブックマーク新規登録サンプル
    Boolean NewUrlFormOnOK() {
    	BookmarkRec bookmark = GetEmptyBookmark();
    	CharPtr pUrl, pTitle;
    	FormPtr frmP;
    	UInt	recordSize, index;
    	VoidHand recHdl;
    	VoidPtr recPtr;
    	short openType;
    	VoidPtr pEveryCheck, pOnceCheck;
    	
    	frmP = FrmGetActiveForm();
            // PageTitle 取得
    	pTitle = FldGetTextPtr(
    		ResourcePtrGet(frmP, NewUrlPageTitleField));
    	if( !pTitle || pTitle[0] == NULL ){
    		ResourceAlert1(CommonAlert, MessageStringList, MSG_INPUT_PAGE);
    		return false;
    	}
    
    	// URL 取得		
    	pUrl = FldGetTextPtr(
    		ResourcePtrGet(frmP, NewUrlInputUrlField));
    	if( !pUrl || pUrl[0] == NULL ){
    		ResourceAlert1(CommonAlert, MessageStringList, MSG_INPUT_URL);
    		return false;
    	}
    
    	// Set openType
    	pOnceCheck = ResourcePtrGet(FrmGetActiveForm(), NewUrlOpenOnceCheckbox);
    	pEveryCheck = ResourcePtrGet(FrmGetActiveForm(), NewUrlOpenEverytimeCheckbox);
    	if( CtlGetValue(pOnceCheck) == CHECK_ON )
    		openType = OPENTYPE_ONCE;
    	else if( CtlGetValue(pEveryCheck) == CHECK_ON )
    		openType = OPENTYPE_EVERY;
    	else
    		openType = OPENTYPE_NONE;
    	
    	// Bookmark構造体を作成
    	SetBookmark(&bookmark, 1, openType, pUrl, pTitle);
    	recordSize = GetBookmarkRecSize(&bookmark);
       	
       	if( geditMode == EDITMODE_NEW ){
    	   	index = DmNumRecords(gdbUrl);
       		recHdl = DmNewRecord(gdbUrl, &index, recordSize);// レコードを確保
       	}
       	else if( geditMode == EDITMODE_EDIT ){
       		index = grecSelectIndex;
       	   	recHdl = DmGetRecord(gdbUrl, index);// 既存レコードを取得
       	   	
       	   	// レコードサイズを変更
       	   	DmResizeRecord(gdbUrl, index, recordSize);
       	}
         	
       	if( recHdl ){
    		// レコードを新規追加
       		recPtr = MemHandleLock(recHdl);
       		DmSet( recPtr, 0, recordSize, 0);
       		
    		WriteBookmark(recPtr, &bookmark); 		
    		
       		MemHandleUnlock(recHdl);
       		DmReleaseRecord(gdbUrl, index, true);
       	}
       	else{
            	// レコード作成失敗
    		ResourceAlert1(CommonAlert, MessageStringList, MSG_UPDATE_MISS);
    		
    		InitBookmark(&bookmark);
       		return false;
       	}
       	
    	InitBookmark(&bookmark);
       	return true;
    }
    
    
    /**
    	レコードハンドルからデータベースを取得
    	この関数を利用して取得したBookmarkRecは InitBookmark を行ってはいけない
    */
    void BookmarkMemHandleLock(BookmarkRec *pBookmark, Handle recHdl)
    {
    	BookmarkRec* pBookmarkHandle = (BookmarkRec*)MemHandleLock( recHdl );
    	InitBookmark(pBookmark);
    	
    	pBookmark->key = pBookmarkHandle->key;
    	pBookmark->openType = pBookmarkHandle->openType;
    	
    	// url取得
    	pBookmark->url = (char*)(pBookmarkHandle) +
    		sizeof(pBookmarkHandle->key) + 
    		sizeof(pBookmarkHandle->openType);
    	
    	// title取得
    	pBookmark->title = pBookmark->url +
    				 StrLen(pBookmark->url) + 1;
    }
    
    /**
    	BookmarkRec 初期化処理
    */
    Boolean InitBookmark(BookmarkRec *pBookmarkRec){
    	
    	pBookmarkRec->key = 0;
    	pBookmarkRec->openType = 0;
    	if (pBookmarkRec->url != NULL) {
    		MemPtrFree(pBookmarkRec->url);
    		pBookmarkRec->url = NULL;
    	}
    	if (pBookmarkRec->title != NULL) {
    		MemPtrFree(pBookmarkRec->title);
    		pBookmarkRec->title = NULL;
    	}
    	return true;	
    }
    
    /**
    	Bookmark パラメータ設定関数
    */
    Boolean SetBookmark(BookmarkRec *pBookmarkRec, short key, short openType, char *pUrl, char *pTitle){
    	Word len;
    	
    	InitBookmark(pBookmarkRec);
    	pBookmarkRec->key = key;
    	pBookmarkRec->openType = openType;
    	
    	len = StrLen(pUrl);
    	/* もしURL長を制限する場合
    	if (len < URL_LEN)	
    	*/
    	pBookmarkRec->url = MemPtrNew(len+1);
    	MemSet(pBookmarkRec->url, NULL, sizeof(pBookmarkRec->url));
    	StrCopy(pBookmarkRec->url, pUrl);
    	
    	len = StrLen(pTitle);
    	pBookmarkRec->title = MemPtrNew(len+1);
    	MemSet(pBookmarkRec->title, NULL, sizeof(pBookmarkRec->title));
    	StrCopy(pBookmarkRec->title, pTitle);
    	
    	return true;
    }
    
    /**
    	Bookmark パラメータを安全に取得
    	通常はこの関数でBookmarkを取得する
    */
    BookmarkRec GetEmptyBookmark()
    {
    	BookmarkRec bookmark;
    	bookmark.key = 0;
    	bookmark.openType = 0;
    	bookmark.url = NULL;
    	bookmark.title = NULL;
    	
    	return bookmark;
    }
    
    /**
    	BookmarkRec のレコード格納サイズを取得
    */
    UInt GetBookmarkRecSize(BookmarkRec *pBookmark)
    {
    	UInt ret;
    	ret = sizeof(pBookmark->key) + 
    		  sizeof(pBookmark->openType) + 
    		  StrLen(pBookmark->url) + 1 +
    		  StrLen(pBookmark->title) + 1;
    		  
    	return ret;
    }
    
    
    /**
    	レコードにブックマークデータを登録
    */
    void WriteBookmark(VoidPtr recPtr, BookmarkRec* pBookmark)
    {     		
    	UInt offset = 0;
    
    	DmWrite(recPtr, offset, &pBookmark->key, sizeof(pBookmark->key));
    	offset += sizeof(pBookmark->key);
    	DmWrite(recPtr, offset,&pBookmark->openType, sizeof(pBookmark->openType));
    	offset += sizeof(pBookmark->openType);
    	DmWrite(recPtr, offset, pBookmark->url, StrLen(pBookmark->url) + 1);
    	offset += StrLen(pBookmark->url) + 1;
    	DmWrite(recPtr, offset, pBookmark->title, StrLen(pBookmark->title) + 1);
    }
    
    
    






    MemoURLはCodewarrior7Jで開発しましたが、NSBasic等他の環境でもMemoURL Bookmarkデータへのアクセスは可能です。


    <!-- text below generated by server. PLEASE REMOVE -->


    1