OSDN Git Service

・プラグインに板を管理する TBoardItem クラスを追加したのに対応。
[gikonavigoeson/gikonavi.git] / ExternalBoardManager.pas
index 2c6a24e..1d175bf 100644 (file)
@@ -8,6 +8,45 @@ uses
        AbonUnit;
 
 type
+       // =========================================================================
+       // PlugInMain \8aÖ\98A
+       // =========================================================================
+
+       // \83_\83E\83\93\83\8d\81[\83h\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
+       TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
+
+       // *************************************************************************
+       // \83v\83\89\83O\83C\83\93\82Ì\83o\81[\83W\83\87\83\93
+       // *************************************************************************
+       TOnVersionInfo = procedure(
+               var outAgent            : PChar;        // \83o\81[\83W\83\87\83\93\82ð\88ê\90Ø\8aÜ\82Ü\82È\82¢\8f\83\90\88\82È\96¼\8fÌ
+               var outMajor            : DWORD;        // \83\81\83W\83\83\81[\83o\81[\83W\83\87\83\93
+               var outMinor            : DWORD;        // \83}\83C\83i\81[\83o\81[\83W\83\87\83\93
+               var outRelease  : PChar;        // \83\8a\83\8a\81[\83X\92i\8aK\96¼
+               var outRevision : DWORD         // \83\8a\83r\83W\83\87\83\93\83i\83\93\83o\81[
+       ); stdcall;
+
+       // *************************************************************************
+       // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
+       // *************************************************************************
+       TOnAcceptURL = function(
+               inURL : PChar                                           // \94»\92f\82ð\8bÂ\82¢\82Å\82¢\82é URL
+       ): Boolean; stdcall;                    // \8eó\82¯\95t\82¯\82é\82È\82ç True
+
+       // *************************************************************************
+       // \83X\83\8c\88ê\97\97\82Ì URL \82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\93±\82«\8fo\82·
+       // *************************************************************************
+       TOnListURL2ThreadURL = function(
+               inListURL               : PChar;        // \83X\83\8c\88ê\97\97\82ð\8e¦\82µ\82½ URL
+               inFileName      : PChar         // \83X\83\8c\83b\83h\83t\83@\83C\83\8b\96¼
+       ) : PChar; stdcall;                     // \83X\83\8c\83b\83h\82Ì URL
+
+
+
+       // =========================================================================
+       // TThreadItem \8aÖ\98A
+       // =========================================================================
+
        // TThreadItem \82Ì\83v\83\8d\83p\83e\83B\90Ý\92è\81^\8eæ\93¾ ID
        TThreadItemProperty = (
                tipContext,                                                     // : DWORD                      // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
@@ -35,24 +74,6 @@ type
        );
 
        // *************************************************************************
-       // \83v\83\89\83O\83C\83\93\82Ì\83o\81[\83W\83\87\83\93
-       // *************************************************************************
-       TOnVersionInfo = procedure(
-               var outAgent            : PChar;        // \83o\81[\83W\83\87\83\93\82ð\88ê\90Ø\8aÜ\82Ü\82È\82¢\8f\83\90\88\82È\96¼\8fÌ
-               var outMajor            : DWORD;        // \83\81\83W\83\83\81[\83o\81[\83W\83\87\83\93
-               var outMinor            : DWORD;        // \83}\83C\83i\81[\83o\81[\83W\83\87\83\93
-               var outRelease  : PChar;        // \83\8a\83\8a\81[\83X\92i\8aK\96¼
-               var outRevision : DWORD         // \83\8a\83r\83W\83\87\83\93\83i\83\93\83o\81[
-       ); stdcall;
-
-       // *************************************************************************
-       // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
-       // *************************************************************************
-       TOnAcceptURL = function(
-               inURL : PChar                                           // \94»\92f\82ð\8bÂ\82¢\82Å\82¢\82é URL
-       ): Boolean; stdcall;                    // \8eó\82¯\95t\82¯\82é\82È\82ç True
-
-       // *************************************************************************
        // TThreadItem \82ª\90\90¬\82³\82ê\82½
        // *************************************************************************
        TThreadItemCreate = procedure(
@@ -69,9 +90,9 @@ type
        // *************************************************************************
        // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦\82³\82ê\82½
        // *************************************************************************
-       TThreadItemOnDownload = procedure(
-               inInstance      : DWORD                 // \83C\83\93\83X\83^\83\93\83X
-       ); stdcall;                                                             // \83_\83E\83\93\83\8d\81[\83h\82³\82ê\82½\83X\83\8c\83b\83h
+       TThreadItemOnDownload = function(
+               inInstance      : DWORD                                 // \83C\83\93\83X\83^\83\93\83X
+       ) : TDownloadState; stdcall;    // \83_\83E\83\93\83\8d\81[\83h\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
 
        // *************************************************************************
        // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81\82³\82ê\82½
@@ -100,6 +121,67 @@ type
 
 
        // =========================================================================
+       // TBoardItem \8aÖ\98A
+       // =========================================================================
+
+       // TBoardItem \82Ì\83v\83\8d\83p\83e\83B\90Ý\92è\81^\8eæ\93¾ ID
+       TBoardItemProperty = (
+               bipContext,                                                     // : DWORD                              // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
+               bipItems,                                                               // : TThreadItem        // \94Â\82É\8cq\82ª\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h
+               bipNo,                                                                  // : Integer                    // \94Ô\8d\86
+               bipTitle,                                                               // : string                             // \94Â\83^\83C\83g\83\8b
+               bipRoundDate,                                           // : TDateTime          // \94Â\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
+               bipLastModified,                                // : TDateTime          // \94Â\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
+               bipLastGetTime,                                 // : TDateTime          // \83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
+               bipRound,                                                               // : Boolean                    // \8f\84\89ñ\97\\96ñ
+               bipRoundName,                                           // : string                             // \8f\84\89ñ\96¼
+               bipIsLogFile,                                           // : Boolean                    // \83\8d\83O\91\8dÝ\83t\83\89\83O
+               bipUnRead,                                                      // : Integer                    // \83X\83\8c\83b\83h\96¢\93Ç\90\94
+               bipURL,                                                                 // : string                             // \94Â\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
+               bipFilePath                                                     // : string                             // \82±\82Ì\94Â\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
+       );
+
+       // *************************************************************************
+       // TBoardItem \82ª\90\90¬\82³\82ê\82½
+       // *************************************************************************
+       TBoardItemCreate = procedure(
+               inInstance : DWORD
+       ); stdcall;
+
+       // *************************************************************************
+       // TBoardItem \82ª\94j\8aü\82³\82ê\82½
+       // *************************************************************************
+       TBoardItemDispose = procedure(
+               inInstance : DWORD
+       ); stdcall;
+
+       // *************************************************************************
+       // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦\82³\82ê\82½
+       // *************************************************************************
+       TBoardItemOnDownload = function(
+               inInstance      : DWORD                                 // \83C\83\93\83X\83^\83\93\83X
+       ) : TDownloadState; stdcall;    // \83_\83E\83\93\83\8d\81[\83h\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
+
+       // *************************************************************************
+       // \8ae\83X\83\8c\82Ì\8fî\95ñ\82ð\95Ô\8bp
+       // *************************************************************************
+       TBoardItemEnumThreadCallBack = function(
+               inURL           : PChar;                        // \83X\83\8c\83b\83h\82Ì URL
+               inTitle : PChar;                        // \83X\83\8c\83^\83C
+               inCount : DWORD                         // \83\8c\83X\82Ì\90\94
+       ) : Boolean; stdcall;                                   // \97ñ\8b\93\82ð\91±\82¯\82é\82È\82ç True
+
+       // *************************************************************************
+       // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
+       // *************************************************************************
+       TBoardItemOnEnumThread = procedure(
+               inInstance      : DWORD;                                                                                                // \83C\83\93\83X\83^\83\93\83X
+               inCallBack      : TBoardItemEnumThreadCallBack  // \95Ô\8bp\82·\82×\82«\83R\81[\83\8b\83o\83b\83N
+       ); stdcall;
+
+
+
+       // =========================================================================
        // \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
        // =========================================================================
        TBoardPlugIn = class( TObject )
@@ -109,13 +191,19 @@ type
 
                FVersionInfo                            : TOnVersionInfo;
                FAcceptURL                                      : TOnAcceptURL;
+
                FCreateThreadItem               : TThreadItemCreate;
                FDisposeThreadItem      : TThreadItemDispose;
-               FDownload                                               : TThreadItemOnDownload;
+               FDownloadThread                 : TThreadItemOnDownload;
                FGetRes                                                 : TThreadItemOnGetRes;
                FGetHeader                                      : TThreadItemOnGetHeader;
                FGetFooter                                      : TThreadItemOnGetFooter;
 
+               FCreateBoardItem                : TBoardItemCreate;
+               FDisposeBoardItem               : TBoardItemDispose;
+               FDownloadBoard                  : TBoardItemOnDownload;
+               FEnumThread                                     : TBoardItemOnEnumThread;
+
        public
                // \83R\83\93\83X\83g\83\89\83N\83^
                constructor     Create;
@@ -132,18 +220,22 @@ type
                procedure       LoadFromName( inName : string );
                // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
                procedure       LoadFromModule( inModule : HMODULE );
+
+               //===== PlugInMain \8aÖ\98A
                // \83o\81[\83W\83\87\83\93\8fî\95ñ
                procedure       VersionInfo(    var outAgent : string;
                        var outMajor : DWORD; var outMinor : DWORD;
                        var outRelease : string; var outRevision : DWORD );
                // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
                function        AcceptURL( inURL : string ) : Boolean;
+
+               //===== TThreadItem \8aÖ\98A
                // TThreadItem \82ª\90\90¬\82³\82ê\82½
                procedure       CreateThreadItem( threadItem : DWORD );
                // TThreadItem \82ª\94j\8aü\82³\82ê\82½
                procedure       DisposeThreadItem( threadItem : DWORD );
                // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
-               procedure       Download( threadItem: DWORD );
+               function        DownloadThread( threadItem : DWORD ) : TDownloadState;
                // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
                function        GetRes( threadItem : DWORD; inNo : DWORD ) : string;
                // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
@@ -151,6 +243,16 @@ type
                // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
                function        GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
 
+               //===== TBoardItem \8aÖ\98A
+               // TBoard \82ª\90\90¬\82³\82ê\82½
+               procedure       CreateBoardItem( boardItem : DWORD );
+               // TBoardItem \82ª\94j\8aü\82³\82ê\82½
+               procedure       DisposeBoardItem( boardItem : DWORD );
+               // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
+               function        DownloadBoard( boardItem : DWORD ) : TDownloadState;
+               // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
+               procedure EnumThread( inInstance : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
+
        private
                procedure       LoadPlugInAPI;
 
@@ -187,10 +289,6 @@ implementation
 
 uses GikoSystem, BoardGroup;
 
-// =========================================================================
-// \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
-// =========================================================================
-
 // *************************************************************************
 // BoardPlugin \83t\83H\83\8b\83_\82É\82 \82é\83v\83\89\83O\83C\83\93\82ð\91S\82Ä\83\8d\81[\83h
 // *************************************************************************
@@ -230,13 +328,19 @@ begin
 
        FVersionInfo                            := nil;
        FAcceptURL                                      := nil;
+
        FCreateThreadItem               := nil;
        FDisposeThreadItem      := nil;
-       FDownload                                               := nil;
+       FDownloadThread                 := nil;
        FGetRes                                                 := nil;
        FGetHeader                                      := nil;
        FGetFooter                                      := nil;
 
+       FCreateBoardItem                := nil;
+       FDisposeBoardItem               := nil;
+       FDownloadBoard                  := nil;
+       FEnumThread                                     := nil;
+
 end;
 
 // *************************************************************************
@@ -398,11 +502,15 @@ end;
 // *************************************************************************
 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
 // *************************************************************************
-procedure      TBoardPlugIn.Download( threadItem: DWORD );
+function       TBoardPlugIn.DownloadThread(
+       threadItem : DWORD
+) : TDownloadState;
 begin
 
-       if Assigned( FDownload ) then
-               FDownload( threadItem );
+       if Assigned( FDownloadThread ) then
+               Result := FDownloadThread( threadItem )
+       else
+               Result := dsError;
 
 end;
 
@@ -464,6 +572,61 @@ begin
 end;
 
 // *************************************************************************
+// TBoardItem \82ª\90\90¬\82³\82ê\82½
+// *************************************************************************
+procedure      TBoardPlugIn.CreateBoardItem(
+       BoardItem : DWORD
+);
+begin
+
+       if Assigned( FCreateBoardItem ) then
+               FCreateBoardItem( BoardItem );
+
+end;
+
+// *************************************************************************
+// TBoardItem \82ª\94j\8aü\82³\82ê\82½
+// *************************************************************************
+procedure      TBoardPlugIn.DisposeBoardItem(
+       BoardItem : DWORD
+);
+begin
+
+       if Assigned( FDisposeBoardItem ) then
+               FDisposeBoardItem( BoardItem );
+
+end;
+
+// *************************************************************************
+// \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
+// *************************************************************************
+function       TBoardPlugIn.DownloadBoard(
+       BoardItem : DWORD
+) : TDownloadState;
+begin
+
+       if Assigned( FDownloadBoard ) then
+               Result := FDownloadBoard( BoardItem )
+       else
+               Result := dsError;
+
+end;
+
+// *************************************************************************
+// \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
+// *************************************************************************
+procedure TBoardPlugIn.EnumThread(
+       inInstance      : DWORD;
+       inCallBack      : TBoardItemEnumThreadCallBack
+);
+begin
+
+       if Assigned( FEnumThread ) then
+               FEnumThread( inInstance, inCallBack );
+
+end;
+
+// *************************************************************************
 // \83v\83\89\83O\83C\83\93\82Ì API \82ð\8eæ\93¾
 // *************************************************************************
 procedure TBoardPlugIn.LoadPlugInAPI;
@@ -473,12 +636,18 @@ begin
                if Assigned( Pointer( FModule ) ) then begin
                        FVersionInfo                            := GetProcAddress( FModule, 'OnVersionInfo' );
                        FAcceptURL                                      := GetProcAddress( FModule, 'OnAcceptURL' );
+
                        FCreateThreadItem               := GetProcAddress( FModule, 'ThreadItemCreate' );
                        FDisposeThreadItem      := GetProcAddress( FModule, 'ThreadItemDispose' );
-                       FDownload                                               := GetProcAddress( FModule, 'ThreadItemOnDownload' );
+                       FDownloadThread                 := GetProcAddress( FModule, 'ThreadItemOnDownload' );
                        FGetRes                                                 := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
                        FGetHeader                                      := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
                        FGetFooter                                      := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
+
+                       FCreateBoardItem                := GetProcAddress( FModule, 'BoardItemCreate' );
+                       FDisposeBoardItem               := GetProcAddress( FModule, 'BoardItemDispose' );
+                       FDownloadBoard                  := GetProcAddress( FModule, 'BoardItemOnDownload' );
+                       FEnumThread                                     := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
                end;
        except
        end;
@@ -1141,7 +1310,7 @@ begin
 end;
 
 // *************************************************************************
-// \83_\83E\83\93\83\8d\81[\83h\82ª\90i\8ds\82µ\82½
+// \83X\83\8c\83b\83h\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\90i\8ds\82µ\82½
 // *************************************************************************
 procedure ThreadItemWork(
        inInstance      : DWORD;                        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
@@ -1155,7 +1324,7 @@ begin
 end;
 
 // *************************************************************************
-// \83_\83E\83\93\83\8d\81[\83h\82ª\8en\82Ü\82Á\82½
+// \83X\83\8c\83b\83h\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8en\82Ü\82Á\82½
 // *************************************************************************
 procedure ThreadItemWorkBegin(
        inInstance                      : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
@@ -1169,7 +1338,7 @@ begin
 end;
 
 // *************************************************************************
-// \83_\83E\83\93\83\8d\81[\83h\82ª\8fI\82í\82Á\82½
+// \83X\83\8c\83b\83h\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8fI\82í\82Á\82½
 // *************************************************************************
 procedure ThreadItemWorkEnd(
        inInstance      : DWORD                         // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
@@ -1181,6 +1350,218 @@ begin
 
 end;
 
+
+
+// =========================================================================
+// BoardItem
+// =========================================================================
+
+// *************************************************************************
+// TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\8eæ\93¾\82·\82é
+// *************************************************************************
+function BoardItemGetLong(
+       instance                : DWORD;
+       propertyID      : TBoardItemProperty
+) : DWORD; stdcall;
+var
+       boardItem : TBoard;
+begin
+
+       boardItem := TBoard( instance );
+       case propertyID of
+               bipContext:                                                     // : DWORD                              // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
+                       Result := boardItem.Context;
+               bipNo:                                                                  // : Integer                    // \94Ô\8d\86
+                       Result := boardItem.No;
+               bipTitle:                                                               // : string                             // \83X\83\8c\83b\83h\83^\83C\83g\83\8b
+                       Result := DWORD( CreateResultString( boardItem.Title ) );
+               bipRound:                                                               // : Boolean                    // \8f\84\89ñ\83t\83\89\83O
+                       Result := DWORD( boardItem.Round );
+               bipRoundName:                                           // : string                             // \8f\84\89ñ\96¼
+                       Result := DWORD( CreateResultString( boardItem.RoundName ) );
+               bipIsLogFile:                                           // : Boolean                    // \83\8d\83O\91\8dÝ\83t\83\89\83O
+                       Result := DWORD( boardItem.IsLogFile );
+               bipUnRead:                                                      // : Integer                    // \83X\83\8c\83b\83h\96¢\93Ç\90\94
+                       Result := DWORD( boardItem.UnRead );
+               bipURL:                                                                 // : string                             // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
+                       Result := DWORD( CreateResultString( boardItem.URL ) );
+               bipFilePath:                                                                                                                    // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
+                       Result := DWORD( CreateResultString( boardItem.FilePath ) );
+       else
+               Result := 0;
+       end;
+end;
+
+// *************************************************************************
+// TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\90Ý\92è\82·\82é
+// *************************************************************************
+procedure BoardItemSetLong(
+       instance                : DWORD;
+       propertyID      : TBoardItemProperty;
+       param : DWORD
+); stdcall;
+var
+       boardItem       : TBoard;
+begin
+
+       boardItem := TBoard( instance );
+       case propertyID of
+               bipContext:                                                     // : DWORD                      // \8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l
+                       boardItem.Context                       := param;
+               bipNo:                                                                  // : Integer            // \94Ô\8d\86
+                       boardItem.No                                            := param;
+               bipTitle:                                                               // : string                     // \83X\83\8c\83b\83h\83^\83C\83g\83\8b
+                       boardItem.Title                         := string( PChar( param ) );
+               bipRound:                                                               // : Boolean            // \8f\84\89ñ\83t\83\89\83O
+                       boardItem.Round                         := Boolean( param );
+               bipRoundName:                                           // : string                     // \8f\84\89ñ\96¼
+                       boardItem.RoundName             := string( PChar( param ) );
+               bipIsLogFile:                                           // : Boolean            // \83\8d\83O\91\8dÝ\83t\83\89\83O
+                       boardItem.IsLogFile             := Boolean( param );
+               bipUnRead:                                                      // : Integer            // \83X\83\8c\83b\83h\96¢\93Ç\90\94
+                       boardItem.UnRead                                := Integer( param );
+               bipURL:                                                                 // : string                     // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
+                       boardItem.URL                                   := string( PChar( param ) );
+               bipFilePath:                                            // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
+                       boardItem.FilePath                      := string( PChar( param ) );
+       end;
+
+end;
+
+// *************************************************************************
+// TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\8eæ\93¾\82·\82é
+// *************************************************************************
+function BoardItemGetDouble(
+       instance                : DWORD;
+       propertyID      : TBoardItemProperty
+) : Double; stdcall;
+var
+       boardItem : TBoard;
+begin
+
+       boardItem := TBoard( instance );
+       case propertyID of
+               bipRoundDate:                                           // : TDateTime  // \83X\83\8c\83b\83h\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
+                       Result := boardItem.RoundDate;
+               bipLastModified:                                // : TDateTime  // \83X\83\8c\83b\83h\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
+                       Result := boardItem.LastModified;
+               bipLastGetTime:                                 // : TDateTime  // \83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
+                       Result := boardItem.LastGetTime;
+       else
+               Result := 0;
+       end;
+
+end;
+
+// *************************************************************************
+// TBoardItem \83N\83\89\83X\82Ì\83v\83\8d\83p\83e\83B\82ð\90Ý\92è\82·\82é
+// *************************************************************************
+procedure BoardItemSetDouble(
+       instance                : DWORD;
+       propertyID      : TBoardItemProperty;
+       param                           : Double
+); stdcall;
+var
+       boardItem : TBoard;
+begin
+
+       boardItem := TBoard( instance );
+       case propertyID of
+               bipRoundDate:                                           // : TDateTime  // \83X\83\8c\83b\83h\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
+                       boardItem.RoundDate             := param;
+               bipLastModified:                                // : TDateTime  // \83X\83\8c\83b\83h\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
+                       boardItem.LastModified  := param;
+               bipLastGetTime:                                 // : TDateTime  // \83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
+                       boardItem.LastGetTime   := param;
+       end;
+
+end;
+
+// *************************************************************************
+// \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\90i\8ds\82µ\82½
+// *************************************************************************
+procedure BoardItemWork(
+       inInstance      : DWORD;                        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+       inWorkCount     : Integer                       // \8c»\8dÝ\82Ì\90i\95à\8fó\8bµ(\83J\83E\83\93\83g)
+); stdcall;
+begin
+
+       if Assigned( OnWork ) then
+               OnWork( TObject( inInstance ), wmRead, inWorkCount );
+
+end;
+
+// *************************************************************************
+// \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8en\82Ü\82Á\82½
+// *************************************************************************
+procedure BoardItemWorkBegin(
+       inInstance                      : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+       inWorkCountMax  : Integer       // \92Ê\90M\82Ì\8fI\82í\82è\82ð\8e¦\82·\83J\83E\83\93\83g
+); stdcall;
+begin
+
+       if Assigned( OnWorkBegin ) then
+               OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax );
+
+end;
+
+// *************************************************************************
+// \94Â\82Ì\83_\83E\83\93\83\8d\81[\83h\82ª\8fI\82í\82Á\82½
+// *************************************************************************
+procedure BoardItemWorkEnd(
+       inInstance      : DWORD                         // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+); stdcall;
+begin
+
+       if Assigned( OnWorkEnd ) then
+               OnWorkEnd( TObject( inInstance ), wmRead );
+
+end;
+
+// *************************************************************************
+// \94Â\82ª\95Û\97L\82·\82é\83X\83\8c\88ê\97\97\82Ì\97ñ\8b\93\8f\88\97\9d\82ð\83v\83\8d\83O\83\89\83\80\96{\91Ì\82É\94C\82³\82ê\82½
+// *************************************************************************
+procedure BoardItemEnumThread(
+       inInstance              : DWORD;
+       inCallBack              : TBoardItemEnumThreadCallBack;
+       inSubjectText   : PChar
+); stdcall;
+var
+       board                                   : TBoard;
+       subject                         : TStringList;
+       i                                                       : Integer;
+       rec                                             : TSubjectRec;
+  isContinue           : Boolean;
+begin
+
+       try
+               board           := TBoard( inInstance );
+               subject := TStringList.Create;
+               try
+                       subject.Text := inSubjectText;
+
+                       for i := 0 to subject.Count - 1 do begin
+                               rec                                             := GikoSys.DivideSubject( subject[i] );
+                               rec.FFileName   := Trim(rec.FFileName);
+                               if (rec.FTitle = '') and (rec.FCount = 0) then
+                                       Continue;
+
+                               isContinue := inCallBack(
+                                       PChar( GikoSys.GetURL( board.BBSID, rec.FFileName ) ),
+                                       PChar( rec.FTitle ),
+                                       DWORD( rec.FCount ) );
+
+        if ( not isContinue ) then
+               Break;
+                       end;
+               finally
+                       subject.Free;
+               end;
+       except
+       end;
+
+end;
+
 exports
        CreateResultString,
        DisposeResultString,
@@ -1206,7 +1587,15 @@ exports
        ThreadItemGetFooter,
        ThreadItemWork,
        ThreadItemWorkBegin,
-       ThreadItemWorkEnd;
+       ThreadItemWorkEnd,
+       BoardItemGetLong,
+       BoardItemSetLong,
+       BoardItemGetDouble,
+       BoardItemSetDouble,
+       BoardItemEnumThread,
+       BoardItemWork,
+       BoardItemWorkBegin,
+       BoardItemWorkEnd;
 
 end.