Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/ExternalBoardPlugInMain.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.18 - (hide annotations) (download) (as text)
Wed Nov 23 13:46:26 2005 UTC (18 years, 4 months ago) by h677
Branch: MAIN
CVS Tags: v1_51_1_639, v1_53_0_671, v1_54_0_677, v1_54_0_676, v1_54_0_678, v1_51_0_626, b51, v1_52_1_658, v1_51_0_622, v1_52_0_646, v1_52_0_644, v1_52_0_643, v1_54_0_687, v1_51_0_634, v1_51_0_635, v1_51_0_636, v1_51_0_637, v1_54_0_688, v1_54_0_689, v1_51_0_632, v1_51_0_633, v1_54_0_684, v1_54_0_685, v1_53_0_664, v1_52_0_647, v1_51_0_638, v1_52_0_648, v1_53_0_661, v1_53_0_663, v1_53_0_662, v1_53_0_665, v1_53_0_667, v1_53_0_666, v1_53_0_669, v1_53_0_668, v1_55_0_692, v1_55_0_693, v1_52_0_645, v1_52_0_651, v1_54_1_691, v1_52_0_650, v1_52_0_652, v1_52_0_642, v1_52_0_654, v1_53_0_672, v1_53_0_670, v1_51_1_640, v1_54_0_686, v1_54_0_680, v1_54_0_681, v1_54_0_682, v1_51_0_630, v1_54_0_683, v1_51_0_631, v1_54_0_679, v1_54_0_675, v1_51_0_628, root-of-Bb51, root-of-Bb53, v1_52_1_657, v1_54_0_674, v1_52_0_660, v1_51_0_629, v1_54_0_690, v1_51_0_627, v1_51_0_625, v1_51_0_623, v1_52_0_655, v1_52_0_656, v1_52_0_649, v1_53_1_673, v1_51_0_624, v1_51_1_641, v1_51_0_621
Branch point for: Bb53, Bb52, Bb51, Bb54
Changes since 1.17: +2 -7 lines
File MIME type: text/x-pascal
レスエディタ表示時にプラグイン利用BBSのDLができない不具合の修正

1 yoffy 1.1 unit ExternalBoardPlugInMain;
2    
3     interface
4    
5     uses
6 yoffy 1.8 Windows, Classes, SysUtils, Menus,
7 yoffy 1.1 IdHTTP, IdComponent, IdGlobal, IdException,
8 h677 1.17 AbonUnit, IdAntiFreezeBase;
9 yoffy 1.1
10     type
11    
12     // ?????潟???若????????????????????
13     TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
14    
15 yoffy 1.4 // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
16     TAcceptType = (atNoAccept, atBBS, atBoard, atThread);
17    
18 yoffy 1.8 // ?<???ャ?若??潟????/span>
19     TMenuHandler = procedure(
20     inHandle : HMENU // ?<???ャ?若??潟????/span>
21     ); stdcall;
22    
23     // *************************************************************************
24     // ?????違?ゃ?潟??(罩c???????若????????
25     // *************************************************************************
26     TOnLoad = procedure (
27     inInstance : DWORD // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
28     ); stdcall;
29    
30 yoffy 1.1 // *************************************************************************
31     // ?????違?ゃ?潟?????若?吾?с??/span>
32     // *************************************************************************
33     TOnVersionInfo = procedure(
34     var outAgent : PChar; // ???若?吾?с?潟??筝??????障????膣?膕?????腱?/span>
35     var outMajor : DWORD; // ?<?吾?c?若???若?吾?с??/span>
36     var outMinor : DWORD; // ???ゃ???若???若?吾?с??/span>
37     var outRelease : PChar; // ?????若?号?????
38     var outRevision : DWORD // ?????吾?с?潟???潟????/span>
39     ); stdcall;
40    
41     // *************************************************************************
42     // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
43     // *************************************************************************
44     TOnAcceptURL = function(
45     inURL : PChar // ?ゆ????篁違???с???? URL
46 yoffy 1.4 ): TAcceptType; stdcall; // URL ??┏蕁?
47 yoffy 1.1
48     // *************************************************************************
49 h677 1.16 // ??絎?????URL???上????RL?????????
50     // *************************************************************************
51     TOnExtractBoardURL = procedure(
52     inURL : PChar; // 紊???????URL;
53     var outURL: PChar // 紊?????????URL
54     ); stdcall; // 紊?????????URL
55    
56     // *************************************************************************
57 yoffy 1.8 // ?<???ャ?若??潟????/span>
58     // *************************************************************************
59     TOnPlugInMenu = procedure(
60     inInstance : DWORD // ?<???ャ?若??潟????/span>
61     ); stdcall;
62    
63     // *************************************************************************
64 yoffy 1.1 // ?鴻???荀с? URL ?????鴻??????? URL ??絨????冴??
65     // *************************************************************************
66     TOnListURL2ThreadURL = function(
67     inListURL : PChar; // ?鴻???荀с??腓冴???? URL
68     inFileName : PChar // ?鴻?????????<?ゃ????
69     ) : PChar; stdcall; // ?鴻??????? URL
70    
71 h677 1.11
72 yoffy 1.1 function CreateResultString(
73     resultStr : string
74     ) : PChar; stdcall;
75    
76     procedure DisposeResultString(
77     resultStr : PChar
78     ); stdcall;
79    
80 h677 1.11 var
81     socket : TIdHTTP;
82    
83 yoffy 1.1 implementation
84    
85 yoffy 1.6 uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
86 yoffy 1.1
87     // *************************************************************************
88     // ?祉???ゃ?? PChar ?с???? API ???<?≪????腆坂?????
89     // *************************************************************************
90     function CreateResultString(
91     resultStr : string
92     ) : PChar; stdcall;
93     var
94     tmp : PChar;
95     begin
96    
97     tmp := PChar( resultStr );
98     GetMem( Result, Length( tmp ) + 1 );
99     Move( tmp^, Result^, Length( tmp ) + 1 );
100    
101     end;
102    
103     // *************************************************************************
104     // ?祉???ゃ?? PChar ?с???? API ???<?≪???????障????
105     // *************************************************************************
106     procedure DisposeResultString(
107     resultStr : PChar
108     ); stdcall;
109     begin
110    
111     FreeMem( resultStr );
112    
113     end;
114    
115     // *************************************************************************
116     // ?????違????????????若?吾?с?潟????緇?????
117     // *************************************************************************
118     procedure VersionInfo(
119     var outAgent : PChar; // ???若?吾?с?潟??筝??????障????膣?膕?????腱?/span>
120     var outMajor : DWORD; // ?<?吾?c?若???若?吾?с??/span>
121     var outMinor : DWORD; // ???ゃ???若???若?吾?с??/span>
122     var outRelease : PChar; // ?????若?号?????
123     var outRevision : DWORD // ?????吾?с?潟???潟????/span>
124     ); stdcall;
125     begin
126    
127     {$IFDEF DEBUG}
128     Writeln('ExternalBoardManager.VersionInfo');
129     {$ENDIF}
130     outAgent := CreateResultString( PChar( APP_NAME ) );
131     outMajor := 1;
132     outMinor := 0;
133     outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
134     outRevision := BETA_VERSION;
135    
136     end;
137    
138     // *************************************************************************
139 yoffy 1.6 // ?<???祉?若?吾??茵?ず????
140     // *************************************************************************
141     procedure InternalPrint(
142     inMessage : PChar // ?<???祉?若??/span>
143     ); stdcall;
144     begin
145    
146     GikoForm.AddMessageList( inMessage, nil, gmiWhat );
147    
148     end;
149    
150     // *************************************************************************
151     // ???????違?<???祉?若?吾??茵?ず????
152     // *************************************************************************
153     procedure InternalDebugPrint(
154     inMessage : PChar // ?<???祉?若??/span>
155     ); stdcall;
156     begin
157    
158     {$IFDEF DEBUG}
159     Writeln( inMessage );
160     {$ENDIF}
161    
162     end;
163    
164     // *************************************************************************
165 yoffy 1.2 // ?純?宴????????????????(?????∽??
166 yoffy 1.1 // *************************************************************************
167 yoffy 1.2 procedure InitializeSocket(
168     inSocket : TIdHTTP
169     );
170 yoffy 1.1 begin
171    
172 yoffy 1.2 if inSocket <> nil then begin
173 yoffy 1.1 // ?ゃ???潟????┃絎?
174     if Assigned( OnWork ) then
175 yoffy 1.2 inSocket.OnWork := OnWork;
176 yoffy 1.1 if Assigned( OnWorkBegin ) then
177 yoffy 1.2 inSocket.OnWorkBegin := OnWorkBegin;
178 yoffy 1.1 if Assigned( OnWorkEnd ) then
179 yoffy 1.2 inSocket.OnWorkEnd := OnWorkEnd;
180 yoffy 1.1
181     // ??篆<???≪????荐??
182 yoffy 1.2 inSocket.Request.CustomHeaders.Clear;
183     inSocket.Response.Clear;
184     inSocket.Request.Clear;
185    
186     inSocket.Request.UserAgent := GikoSys.GetUserAgent;
187     inSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
188     inSocket.ProxyParams.BasicAuthentication := False;
189 h677 1.15 inSocket.ReadTimeout := GikoSys.Setting.ReadTimeOut;
190 yoffy 1.1 {$IFDEF DEBUG}
191     Writeln('------------------------------------------------------------');
192     {$ENDIF}
193 yoffy 1.2 //inSocket.AllowCookies := False;
194 yoffy 1.1 if GikoSys.Setting.ReadProxy then begin
195     if GikoSys.Setting.ProxyProtocol then
196 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
197 yoffy 1.1 else
198 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
199     inSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
200     inSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
201     inSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
202     inSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
203 yoffy 1.1 if GikoSys.Setting.ReadProxyUserID <> '' then
204 yoffy 1.2 inSocket.ProxyParams.BasicAuthentication := True;
205 yoffy 1.1 {$IFDEF DEBUG}
206     Writeln('???????決┃絎?????');
207     Writeln('???鴻??: ' + GikoSys.Setting.ReadProxyAddress);
208     Writeln('???若??: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
209     {$ENDIF}
210     end else begin
211     if GikoSys.Setting.Protocol then
212 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
213 yoffy 1.1 else
214 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
215     inSocket.ProxyParams.ProxyServer := '';
216     inSocket.ProxyParams.ProxyPort := 80;
217     inSocket.ProxyParams.ProxyUsername := '';
218     inSocket.ProxyParams.ProxyPassword := '';
219 yoffy 1.1 {$IFDEF DEBUG}
220     Writeln('???????決┃絎?????');
221     {$ENDIF}
222     end;
223 yoffy 1.2 end;
224    
225     end;
226    
227     // *************************************************************************
228     // ??絎????? URL ???????潟???若?????????
229     // *************************************************************************
230     function InternalDownload(
231     inURL : PChar; // ?????潟???若?????? URL
232     var ioModified : Double; // ??緇??????????ユ??
233     var outResultData : PChar; // ?????潟???若??????????絖???
234     inRangeStart : DWORD; // ??紮?篏?臀?/span>
235     inRangeEnd : DWORD // 腟?篋?篏?臀?/span>
236     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
237     var
238 h677 1.11 // httpSocket : TIdHTTP;
239 yoffy 1.2 resStream : TMemoryStream;
240     content : string;
241 h677 1.14 const
242     LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
243 yoffy 1.2 begin
244    
245 h677 1.17
246 yoffy 1.2 {$IFDEF DEBUG}
247     Writeln('ExternalBoardManager.InternalDownload');
248     {$ENDIF}
249 h677 1.11 // Result := -1;
250 yoffy 1.2
251 h677 1.11 socket := TIdHTTP.Create( nil );
252 yoffy 1.2 try
253 h677 1.11 InitializeSocket( socket );
254     socket.Request.ContentRangeStart := inRangeStart;
255     socket.Request.ContentRangeEnd := inRangeEnd;
256 yoffy 1.1 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
257 h677 1.11 socket.Request.LastModified := ioModified - OffsetFromUTC;
258 yoffy 1.1 if inRangeStart = 0 then
259 h677 1.11 socket.Request.AcceptEncoding := 'gzip'
260 yoffy 1.1 else
261 h677 1.11 socket.Request.AcceptEncoding := '';
262     socket.Request.Accept := 'text/html';
263 yoffy 1.1
264     resStream := TMemoryStream.Create;
265     try
266     try
267     resStream.Clear;
268     {$IFDEF DEBUG}
269     Writeln('URL: ' + inURL);
270     {$ENDIF}
271 h677 1.18 //AntiFreeze??DL?????炊???鴻???????????с???潟?潟?с?????с?????荀?
272     socket.Get( inURL, resStream );
273 yoffy 1.1 {$IFDEF DEBUG}
274     Writeln('??緇??т?紊?????');
275     {$ENDIF}
276    
277 h677 1.11 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
278 yoffy 1.1
279 h677 1.11 ioModified := socket.Response.LastModified;
280    
281     Result := socket.ResponseCode;
282 yoffy 1.1 if (Length( content ) = 0) and (Result = 206) then
283     Result := 304;
284 h677 1.17 //????????BBS???????????????惹???宴??莠????????????с???????с???с????/span>
285 h677 1.14 if ( AnsiPos(LIVEDOOR_URL, inURL) > 0 ) and (Result = 200) then begin
286 h677 1.13 if( AnsiPos('STORAGE IN', socket.Response.RawHeaders.Text) > 0 ) then begin
287     Result := 302;
288     end;
289     end;
290 yoffy 1.1 outResultData := CreateResultString( content );
291     except
292     on E: EIdSocketError do begin
293     ioModified := ZERO_DATE;
294     outResultData := nil;
295 h677 1.11 Result := socket.ResponseCode;
296 yoffy 1.1 end;
297     on E: EIdConnectException do begin
298     ioModified := ZERO_DATE;
299     outResultData := nil;
300 h677 1.11 Result := socket.ResponseCode;
301 yoffy 1.1 //Item.ErrText := E.Message;
302     end;
303 h677 1.11 //筝??????????????潟?潟???ャ??
304     on E: EIdClosedSocket do begin
305     ioModified := ZERO_DATE;
306     outResultData := nil;
307     Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
308     //???c?????障?????с????ず?????????若?潟?若????菴???
309     end;
310 yoffy 1.1 on E: Exception do begin
311     {$IFDEF DEBUG}
312     Writeln('??緇??т?紊?????');
313     Writeln('E.Message: ' + E.Message);
314     {$ENDIF}
315     ioModified := ZERO_DATE;
316     outResultData := nil;
317 h677 1.11 Result := socket.ResponseCode;
318 yoffy 1.1 //Item.ErrText := E.Message;
319     end;
320     end;
321     finally
322     resStream.Free;
323     end;
324    
325     finally
326 h677 1.11 socket.Free;
327     socket := nil;
328 yoffy 1.1 end;
329    
330     end;
331    
332     // *************************************************************************
333 yoffy 1.2 // ??絎????? URL ?吾???若?帥????篆<????
334     // *************************************************************************
335     function InternalPost(
336     inURL : PChar; // ??篆<???? URL
337     inSource : PChar; // ??篆<??????絎?/span>
338 h677 1.16 inReferer : PChar; // Referer
339 yoffy 1.2 var outResultData : PChar // 菴??c????????絖???
340     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
341     var
342     httpSocket : TIdHTTP;
343     content : string;
344     resStream : TStringStream;
345     sourceStream : TStringStream;
346 h677 1.16
347 yoffy 1.2 begin
348    
349     {$IFDEF DEBUG}
350     Writeln('ExternalBoardManager.InternalPost');
351     {$ENDIF}
352     Result := -1;
353    
354     httpSocket := TIdHTTP.Create( nil );
355     try
356     InitializeSocket( httpSocket );
357     httpSocket.Request.CustomHeaders.Add('Pragma: no-cache');
358     httpSocket.Request.AcceptLanguage := 'ja';
359     httpSocket.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
360     httpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
361 h677 1.16 httpSocket.Request.Referer := string(inReferer);
362 yoffy 1.2 resStream := TStringStream.Create( content );
363     sourceStream := TStringStream.Create( string( inSource ) );
364     try
365     try
366     {$IFDEF DEBUG}
367     Writeln('URL: ' + inURL);
368     Writeln('Source: ' + inSource);
369     {$ENDIF}
370     httpSocket.Post( string( inURL ), sourceStream, resStream );
371     {$IFDEF DEBUG}
372     Writeln('??緇??т?紊?????');
373     {$ENDIF}
374    
375     Result := httpSocket.ResponseCode;
376    
377     outResultData := CreateResultString( resStream.DataString );
378     except
379     on E: EIdSocketError do begin
380     outResultData := nil;
381     end;
382     on E: EIdConnectException do begin
383     outResultData := nil;
384     end;
385     on E: Exception do begin
386     {$IFDEF DEBUG}
387     Writeln('??緇??т?紊?????');
388     Writeln('E.Message: ' + E.Message);
389     {$ENDIF}
390 yoffy 1.6 outResultData := CreateResultString( resStream.DataString );
391 yoffy 1.2 Result := httpSocket.ResponseCode;
392     end;
393     end;
394     finally
395     resStream.Free;
396     sourceStream.Free;
397     end;
398     finally
399     httpSocket.Free;
400     end;
401    
402     end;
403    
404     // *************************************************************************
405 yoffy 1.1 // 鐚??<????????? dat 綵√??????若???????若??????????
406     // *************************************************************************
407 h677 1.5
408 yoffy 1.1 function InternalAbon(
409 yoffy 1.3 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
410 h677 1.5 inDatPath : PChar // dat ???<?ゃ????????????/span>
411    
412 yoffy 1.7 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
413 yoffy 1.1 var
414     datList : TStringList;
415 yoffy 1.6 FileName : String;
416 yoffy 1.1 begin
417    
418     datList := TStringList.Create;
419 h677 1.9 try
420     datList.Text := string( inDatText );
421     FileName := string( inDatPath );
422     GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
423     GikoSys.FAbon.Execute( datList );
424     GikoSys.FSelectResFilter.Execute( datList );
425    
426     Result := CreateResultString( datList.Text );
427     finally
428     datList.Free;
429     end;
430 yoffy 1.1
431    
432     end;
433 h677 1.5 // *************************************************************************
434     // 鐚??<????????? dat 綵√??????若???????若??????????
435     // ????????鐚????鴻????/span>
436     // *************************************************************************
437    
438     function InternalAbonForOne(
439 yoffy 1.6 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
440     inDatPath : PChar; // dat ???<?ゃ????????????/span>
441     inNo : Integer // 荀?羆??????????合???/span>
442 h677 1.5 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
443     var
444     datString : String;
445 yoffy 1.6 FileName : String;
446 h677 1.5 begin
447    
448     datString := string( inDatText );
449 yoffy 1.6 FileName := string( inDatPath );
450 h677 1.5 GikoSys.FAbon.IndividualAbon( datString, ChangeFileExt(FileName,'.NG'), inNo);
451     GikoSys.FAbon.Execute( datString , inNo);
452     GikoSys.FSelectResFilter.Execute( datString , inNo );
453    
454     Result := CreateResultString( datString );
455    
456     end;
457 yoffy 1.1
458     // *************************************************************************
459     // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
460     // *************************************************************************
461     function InternalDat2HTML(
462 yoffy 1.6 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
463     inResNo : DWORD; // ???合???/span>
464     inIsNew : Boolean // ?亥?????鴻???? True
465 yoffy 1.1 ) : PChar; stdcall; // ?翫就?????? HTML
466     var
467     board : TBoard;
468     threadItem : TThreadItem;
469     begin
470    
471     // ?????若????????/span>
472 yoffy 1.7 board := TBoard.Create( nil, 'about://dummy/' );
473 h677 1.16 threadItem := TThreadItem.Create( nil, board, 'about://dummy/test/read.cgi/dummy/' );
474 yoffy 1.1 try
475 yoffy 1.7 try
476     board.Add( threadItem );
477 yoffy 1.1
478 yoffy 1.7 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
479     except
480     Result := nil;
481     end;
482     finally
483     board.Free;
484 yoffy 1.1 end;
485    
486     end;
487    
488 yoffy 1.8 // *************************************************************************
489     // ?????違?ゃ?潟?<???ャ?若????????菴遵??
490     // *************************************************************************
491     function AddPlugInMenu(
492     inInstance : DWORD; // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
493     inCaption : PChar // ?<???ャ?若??;腓冴??????絖???
494     ) : HMENU; stdcall; // ?<???ャ?若??潟??????菴遵????け???????翫??? NULL
495     var
496     newItem : TMenuItem;
497     begin
498    
499     try
500     newItem := TMenuItem.Create( nil );
501     newItem.Caption := inCaption;
502     newItem.Tag := inInstance;
503     newItem.OnClick := GikoForm.OnPlugInMenuItem;
504     GikoForm.PlugInMenu.Add( newItem );
505    
506     Result := newItem.Handle;
507     except
508 h677 1.10 Result := 0;
509 yoffy 1.8 end;
510    
511     end;
512    
513     // *************************************************************************
514     // ?????違?ゃ?潟?<???ャ?若??????????????/span>
515     // *************************************************************************
516     procedure RemovePlugInMenu(
517     inHandle : HMENU // ?<???ャ?若??潟????/span>
518     ); stdcall;
519     var
520     i : Integer;
521     begin
522    
523     for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
524     if GikoForm.PlugInMenu.Items[ i ].Handle = inHandle then begin
525 h677 1.10 GikoForm.PlugInMenu.items[i].Free;
526     //GikoForm.PlugInMenu.Delete( i );
527 yoffy 1.8 Break;
528     end;
529     end;
530    
531     end;
532    
533 yoffy 1.1 exports
534     CreateResultString,
535     DisposeResultString,
536     VersionInfo,
537 yoffy 1.6 InternalPrint,
538     InternalDebugPrint,
539 yoffy 1.1 InternalDownload,
540 yoffy 1.2 InternalPost,
541 yoffy 1.1 InternalAbon,
542 yoffy 1.6 InternalAbonForOne,
543 yoffy 1.8 InternalDat2HTML,
544     AddPlugInMenu,
545     RemovePlugInMenu;
546 yoffy 1.1
547     end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26