• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javaandroidc++linuxc#objective-ccocoa誰得qtrubypythongamewindowsbathyscaphephpguic翻訳omegattwitterframeworktestbtronarduinovb.net計画中(planning stage)directxpreviewerゲームエンジンdom

ギコナビ


Commit MetaInfo

Revisionb2bd72335f69bddbeff0341f7ef4f6b66cf31ec7 (tree)
Time2007-02-18 17:09:22
Authorh677 <h677>
Commiterh677

Log Message

セキュリティソフトの誤反応対策機能を追加

Change Summary

Incremental Difference

--- a/AbonUnit.pas
+++ b/AbonUnit.pas
@@ -114,6 +114,7 @@ type
114114 function GoBack() : Boolean; //List‚̈ê‚‘O‚ÌNGƒ[ƒhƒtƒ@ƒCƒ‹‚ð“ǂݍž‚Þ
115115 //--
116116 function TreatSyria(AString: string): string;
117+ //--
117118 end;
118119 var
119120 Abon1 :TAbon;
--- a/ExternalBoardPlugInMain.pas
+++ b/ExternalBoardPlugInMain.pas
@@ -82,7 +82,8 @@ var
8282
8383 implementation
8484
85-uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
85+uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko,
86+ ReplaceDataModule;
8687
8788 // *************************************************************************
8889 // –ß‚è’l‚ª PChar ‚Å‚ ‚é API ‚̃ƒ‚ƒŠ‚ðŠm•Û‚·‚é
@@ -273,8 +274,11 @@ begin
273274 {$IFDEF DEBUG}
274275 Writeln('Žæ“¾‚Å—áŠO‚È‚µ');
275276 {$ENDIF}
276-
277277 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
278+ // ’uŠ·‚·‚é
279+ if GikoSys.Setting.ReplaceDat then begin
280+ content := ReplaceDM.Replace(content);
281+ end;
278282
279283 ioModified := socket.Response.LastModified;
280284
--- a/Giko.pas
+++ b/Giko.pas
@@ -839,7 +839,7 @@ uses
839839 About, Option, Round, Splash, Sort, ListSelect, Imm,
840840 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
841841 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
842- InputAssistDataModule, Types;
842+ InputAssistDataModule, Types, ReplaceDataModule;
843843
844844 const
845845 BLANK_HTML: string = 'about:blank';
@@ -1302,6 +1302,8 @@ begin
13021302 //“ü—̓AƒVƒXƒg‹@\‚̏‰Šú‰»
13031303 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
13041304
1305+ //’uŠ·Ý’èƒtƒ@ƒCƒ‹‚̓ǂݍž‚Ý
1306+ ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
13051307 end;
13061308
13071309 // CoolBar ‚̐ݒè‚ð•Ï”‚É•Û‘¶
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -253,6 +253,8 @@ type
253253 function CanUser32DLL: Boolean;
254254 //! OEˆø—p•„Žæ“¾
255255 function GetOEIndentChar : string;
256+ //! ’uŠ·Ý’èƒtƒ@ƒCƒ‹Žæ“¾
257+ function GetReplaceFileName: String;
256258 end;
257259
258260 var
@@ -3378,6 +3380,11 @@ begin
33783380 end;
33793381
33803382 end;
3383+//! ’uŠ·Ý’èƒtƒ@ƒCƒ‹Žæ“¾
3384+function TGikoSys.GetReplaceFileName: String;
3385+begin
3386+ Result := Setting.GetReplaceFileName;
3387+end;
33813388
33823389 initialization
33833390 GikoSys := TGikoSys.Create;
--- a/ItemDownload.pas
+++ b/ItemDownload.pas
@@ -106,7 +106,7 @@ type
106106 implementation
107107
108108 uses
109- Y_TextConverter, MojuUtils, HTMLCreate;
109+ Y_TextConverter, MojuUtils, HTMLCreate, ReplaceDataModule;
110110
111111 constructor TDownloadThread.Create(CreateSuspended: Boolean);
112112 begin
@@ -734,13 +734,12 @@ begin
734734 {$ENDIF}
735735 FIndy.Get(URL, ResStream);
736736 Item.Content := GikoSys.GzipDecompress(ResStream, FIndy.Response.ContentEncoding);
737- Item.LastModified := FIndy.Response.LastModified;
738- //·•ªŽæ“¾‚Å‚PƒoƒCƒg‘O‚©‚ç‚Æ‚Á‚Ä‚«‚½‚Æ‚«‚̓}ƒCƒiƒX‚·‚é
739-// Item.ContentLength := FIndy.Response.ContentLength + AdjustLen;
740737 Item.ContentLength := Length(Item.Content) + AdjustLen;
741- //–³‚¢‚ÆŽv‚¤‚¯‚ǁBBB
742-// if (FIndy.ResponseCode in [200, 206]) and (Item.Content = '') then
743-// Result := False
738+ // ’uŠ·‚·‚é
739+ if GikoSys.Setting.ReplaceDat then begin
740+ Item.Content := ReplaceDM.Replace(Item.Content);
741+ end;
742+ Item.LastModified := FIndy.Response.LastModified;
744743 if Item.Content = '' then
745744 Result := False
746745 else
--- a/KuroutSetting.dfm
+++ b/KuroutSetting.dfm
@@ -21,8 +21,8 @@ object KuroutOption: TKuroutOption
2121 Top = 0
2222 Width = 517
2323 Height = 393
24- ActivePage = TabSheet1
25- TabIndex = 0
24+ ActivePage = TabSheet2
25+ TabIndex = 3
2626 TabOrder = 0
2727 object TabSheet1: TTabSheet
2828 Caption = #35443#32048#35373#23450#65297
@@ -186,30 +186,6 @@ object KuroutOption: TKuroutOption
186186 TabOrder = 0
187187 end
188188 end
189- object GroupBox2: TGroupBox
190- Left = 14
191- Top = 296
192- Width = 475
193- Height = 57
194- Caption = #65420#65404#65393#65413#65412#65431#65391#65420#65439#35686#21578#27231#33021
195- TabOrder = 3
196- object LocalTrapAtt: TCheckBox
197- Left = 16
198- Top = 16
199- Width = 241
200- Height = 17
201- Caption = #12525#12540#12459#12523#12501#12471#12450#12490#12488#12521#12483#12503#35686#21578#12434#26377#21177#12395#12377#12427
202- TabOrder = 0
203- end
204- object RemoteTrapAtt: TCheckBox
205- Left = 16
206- Top = 35
207- Width = 233
208- Height = 17
209- Caption = #12522#12514#12540#12488#12501#12471#12450#12490#12488#12521#12483#12503#35686#21578#12434#26377#21177#12395#12377#12427
210- TabOrder = 1
211- end
212- end
213189 end
214190 object ColumnTabSheet: TTabSheet
215191 Caption = #35443#32048#35373#23450'2'
@@ -458,12 +434,12 @@ object KuroutOption: TKuroutOption
458434 Wrap = False
459435 end
460436 end
461- object HTMLGroupBox: TGroupBox
437+ object ThreadGroupBox: TGroupBox
462438 Left = 16
463439 Top = 256
464440 Width = 473
465441 Height = 65
466- Caption = #12473#12524#12483#12489#25551#30011
442+ Caption = #12473#12524#12483#12489
467443 TabOrder = 3
468444 object AddKeywordCheckBox: TCheckBox
469445 Left = 16
@@ -475,6 +451,57 @@ object KuroutOption: TKuroutOption
475451 end
476452 end
477453 end
454+ object TabSheet2: TTabSheet
455+ Caption = #35443#32048#35373#23450'4'
456+ ImageIndex = 3
457+ object SecurityGroupBox: TGroupBox
458+ Left = 16
459+ Top = 16
460+ Width = 473
461+ Height = 129
462+ Caption = #12475#12461#12517#12522#12486#12451
463+ TabOrder = 0
464+ object Label12: TLabel
465+ Left = 25
466+ Top = 108
467+ Width = 374
468+ Height = 12
469+ Caption = #8251#26377#21177#12395#12375#12383#22580#21512#12289'dat'#12398#20869#23481#12364#12469#12540#12496#19978#12398#12418#12398#12392#30064#12394#12427#22580#21512#12364#12354#12426#12414#12377#12290
470+ end
471+ object GroupBox2: TGroupBox
472+ Left = 20
473+ Top = 20
474+ Width = 427
475+ Height = 57
476+ Caption = #65420#65404#65393#65413#65412#65431#65391#65420#65439#35686#21578#27231#33021
477+ TabOrder = 0
478+ object LocalTrapAtt: TCheckBox
479+ Left = 16
480+ Top = 16
481+ Width = 241
482+ Height = 17
483+ Caption = #12525#12540#12459#12523#12501#12471#12450#12490#12488#12521#12483#12503#35686#21578#12434#26377#21177#12395#12377#12427
484+ TabOrder = 0
485+ end
486+ object RemoteTrapAtt: TCheckBox
487+ Left = 16
488+ Top = 35
489+ Width = 233
490+ Height = 17
491+ Caption = #12522#12514#12540#12488#12501#12471#12450#12490#12488#12521#12483#12503#35686#21578#12434#26377#21177#12395#12377#12427
492+ TabOrder = 1
493+ end
494+ end
495+ object ReplaceDatCheckBox: TCheckBox
496+ Left = 23
497+ Top = 88
498+ Width = 345
499+ Height = 17
500+ Caption = #12475#12461#12517#12522#12486#12451#23550#31574#12477#12501#12488#12398#35492#21453#24540#23550#31574
501+ TabOrder = 1
502+ end
503+ end
504+ end
478505 end
479506 object OkBotton: TButton
480507 Left = 224
--- a/KuroutSetting.pas
+++ b/KuroutSetting.pas
@@ -50,9 +50,6 @@ type
5050 GroupBox1: TGroupBox;
5151 GengoSupport: TCheckBox;
5252 Label5: TLabel;
53- GroupBox2: TGroupBox;
54- LocalTrapAtt: TCheckBox;
55- RemoteTrapAtt: TCheckBox;
5653 Label6: TLabel;
5754 ReadTimeOut: TEdit;
5855 Label7: TLabel;
@@ -68,8 +65,15 @@ type
6865 AHandredGroupBox: TGroupBox;
6966 AHandredLabeledEdit: TLabeledEdit;
7067 UpDown1: TUpDown;
71- HTMLGroupBox: TGroupBox;
68+ ThreadGroupBox: TGroupBox;
7269 AddKeywordCheckBox: TCheckBox;
70+ TabSheet2: TTabSheet;
71+ SecurityGroupBox: TGroupBox;
72+ GroupBox2: TGroupBox;
73+ LocalTrapAtt: TCheckBox;
74+ RemoteTrapAtt: TCheckBox;
75+ ReplaceDatCheckBox: TCheckBox;
76+ Label12: TLabel;
7377 procedure OkBottonClick(Sender: TObject);
7478 procedure FormCreate(Sender: TObject);
7579 procedure CDeleteButtonClick(Sender: TObject);
@@ -140,6 +144,8 @@ begin
140144 AHandredLabeledEdit.Text := IntToStr( GikoSys.Setting.HeadResCount );
141145 // ŠÖ˜AƒL[ƒ[ƒh’ljÁƒtƒ‰ƒO
142146 AddKeywordCheckBox.Checked := GikoSys.Setting.AddKeywordLink;
147+ // Œë”½‰ž‘΍ô
148+ ReplaceDatCheckBox.Checked := GikoSys.Setting.ReplaceDat;
143149 end;
144150
145151 procedure TKuroutOption.SaveSetting;
@@ -178,7 +184,8 @@ begin
178184 GikoSys.Setting.KuroutSettingTabIndex := PageControl1.ActivePageIndex;
179185 // ŠÖ˜AƒL[ƒ[ƒh’ljÁƒtƒ‰ƒO
180186 GikoSys.Setting.AddKeywordLink := AddKeywordCheckBox.Checked;
181-
187+ // Œë”½‰ž‘΍ô
188+ GikoSys.Setting.ReplaceDat := ReplaceDatCheckBox.Checked;
182189 end;
183190
184191 procedure TKuroutOption.RecvBufferSizeExit(Sender: TObject);
--- /dev/null
+++ b/ReplaceDataModule.dfm
@@ -0,0 +1,9 @@
1+object ReplaceDM: TReplaceDM
2+ OldCreateOrder = False
3+ OnCreate = DataModuleCreate
4+ OnDestroy = DataModuleDestroy
5+ Left = 622
6+ Top = 254
7+ Height = 150
8+ Width = 215
9+end
--- /dev/null
+++ b/ReplaceDataModule.pas
@@ -0,0 +1,148 @@
1+unit ReplaceDataModule;
2+
3+interface
4+
5+uses
6+ SysUtils, Classes;
7+
8+type
9+ TReplaceDM = class(TDataModule)
10+ procedure DataModuleCreate(Sender: TObject);
11+ procedure DataModuleDestroy(Sender: TObject);
12+ private
13+ { Private éŒ¾ }
14+ //! ’uŠ·ƒŠƒXƒg
15+ FReplaceList: TList;
16+ public
17+ { Public éŒ¾ }
18+ procedure LoadFromFile(const filePath: String);
19+ function Replace(const source: String): String;
20+ end;
21+ TReplace = class(TObject)
22+ private
23+ FTarget: String;
24+ FReplace: String;
25+ public
26+ constructor Create(const line: String);
27+ property Target: String read FTarget write FTarget;
28+ property Replace: String read FReplace write FReplace;
29+ end;
30+
31+var
32+ ReplaceDM: TReplaceDM;
33+
34+implementation
35+
36+uses
37+ MojuUtils, Dialogs, StrUtils;
38+
39+
40+{$R *.dfm}
41+
42+//! ƒGƒXƒP[ƒv•¶Žš•œŒ³ˆ—
43+function UnEscape(const source: String): String;
44+begin
45+ // Ý’èƒtƒ@ƒCƒ‹‚É‚»‚̂܂܏‘‚­‚Ɛݒèƒtƒ@ƒCƒ‹Ž©‘Ì‚ªíœ‚³‚ê‚é‚Ì‚ð
46+ // –h‚®‚½‚߂ɉº‹L‚Ì•¶Žš‚ðƒGƒXƒP[ƒv‚Å‚«‚é‚悤‚É‚·‚é
47+ // \. \( \) \{ \} \/ \" \\
48+ Result := MojuUtils.CustomStringReplace(source, '\.', '.');
49+ Result := MojuUtils.CustomStringReplace(Result, '\(', '(');
50+ Result := MojuUtils.CustomStringReplace(Result, '\)', ')');
51+ Result := MojuUtils.CustomStringReplace(Result, '\{', '{');
52+ Result := MojuUtils.CustomStringReplace(Result, '\}', '}');
53+ Result := MojuUtils.CustomStringReplace(Result, '\"', '"');
54+ Result := MojuUtils.CustomStringReplace(Result, '\/', '/');
55+ Result := MojuUtils.CustomStringReplace(Result, '\\', '\');
56+end;
57+
58+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
59+procedure TReplaceDM.DataModuleCreate(Sender: TObject);
60+begin
61+ // ’uŠ·‘Ώە¶Žš—ñ•ÛŽƒŠƒXƒg‚̐¶¬
62+ FReplaceList := TList.Create;
63+end;
64+//! ƒfƒXƒgƒ‰ƒNƒ^
65+procedure TReplaceDM.DataModuleDestroy(Sender: TObject);
66+var
67+ i: Integer;
68+begin
69+ if (FReplaceList <> nil) then begin
70+ // ƒŠƒXƒg‚Ì’†g‚Ìfree‚ðŒÄ‚яo‚·
71+ for i := FReplaceList.Count - 1 downto 0 do begin
72+ TObject(FReplaceList.Items[i]).Free;
73+ end;
74+ // ƒŠƒXƒg‚ðíœ‚·‚é
75+ FReplaceList.Clear;
76+ FReplaceList.Capacity := 0;
77+ FreeAndNil(FReplaceList);
78+ end;
79+end;
80+//! ƒtƒ@ƒCƒ‹“ǂݍž‚ݏˆ—
81+procedure TReplaceDM.LoadFromFile(const filePath: String);
82+var
83+ fileStrings: TStringList;
84+ i: Integer;
85+ rep: TReplace;
86+ ignored: Boolean;
87+begin
88+ // ƒtƒ@ƒCƒ‹‚Ì‘¶Ýƒ`ƒFƒbƒN
89+ if (FileExists(filePath)) then begin
90+ ignored := False;
91+ fileStrings := TStringList.Create;
92+ fileStrings.LoadFromFile(filePath);
93+ try
94+ // ‚·‚ׂĂ̍s‚Ì‚Ü‚í‚·
95+ for i := 0 to fileStrings.Count - 1 do begin
96+ rep := TReplace.Create(fileStrings[i]);
97+ // <> ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚é‚©ƒ`ƒFƒbƒN
98+ if (AnsiPos('<>', rep.Target) > 0) or
99+ (AnsiPos('<>', rep.Replace) > 0) then begin
100+ ignored := True;
101+ end else begin
102+ FReplaceList.Add(rep);
103+ end;
104+ end;
105+ finally
106+ fileStrings.Free;
107+ end;
108+ if (ignored) then begin
109+ ShowMessage('<>‚ðŠÜ‚Þ•¶Žš—ñ‚ð/‚É’uŠ·‚·‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB'#13#10'Ý’èƒtƒ@ƒCƒ‹‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B');
110+ end;
111+ end;
112+end;
113+
114+//! ’uŠ·ˆ—
115+function TReplaceDM.Replace(const source: String): String;
116+var
117+ i: Integer;
118+ rep: TReplace;
119+begin
120+ Result := source;
121+ // nil‚Å‚ ‚邱‚Æ‚Í–³‚¢‚ª”O‚Ì‚½‚ß
122+ if (FReplaceList <> nil) then begin
123+ for i := FReplaceList.Count - 1 downto 0 do begin
124+ rep := TReplace(FReplaceList.Items[i]);
125+ Result := MojuUtils.CustomStringReplace(Result, rep.Target, rep.Replace);
126+ end;
127+ end;
128+end;
129+//! ƒRƒ“ƒXƒgƒ‰ƒNƒ^
130+constructor TReplace.Create(const line: String);
131+begin
132+ Replace := '';
133+ // 1s‚ðƒ^ƒu‚Å‹æØ‚é
134+ if (AnsiPos(#9, line) > 0) then begin
135+ Target := Copy(line, 0, AnsiPos(#9, line) - 1);
136+ Replace := Copy(line, AnsiPos(#9, line), Length(line));
137+ end else begin
138+ Target := line;
139+ end;
140+ // Target‚̃GƒXƒP[ƒv‚ðŒ³‚Ì•¶Žš‚É–ß‚·
141+ Target := UnEscape(Target);
142+ // replace‚ª''‚ÌŽž‚́A“¯‚¶•¶Žš”‚̃Xƒy[ƒX‚ɐݒè
143+ if (Replace = '') then begin
144+ Replace := StrUtils.DupeString(' ', Length(Target));
145+ end;
146+end;
147+
148+end.
--- a/Setting.pas
+++ b/Setting.pas
@@ -443,6 +443,8 @@ type
443443 FHeadResCount : Integer;
444444 //! ŠÖ˜AƒL[ƒ[ƒh’ljÁƒtƒ‰ƒO
445445 FAddKeywordLink: Boolean;
446+ //! dat’uŠ·‚ð—LŒø‚É‚·‚é
447+ FReplaceDat: Boolean;
446448
447449 function GetMainCoolSet(Index: Integer): TCoolSet;
448450 function GetBoardCoolSet(Index: Integer): TCoolSet;
@@ -524,6 +526,7 @@ type
524526 function GetEditorKeyFileName: String;
525527 procedure WriteLogFolder(AVal : String);
526528 function GetInputAssistFileName : String;
529+ function GetReplaceFileName: String;
527530 {
528531 \brief ƒŠƒ“ƒN—š—ð‚Ì•ÛŽƒTƒCƒY‚Ìsetter
529532 \param AVal Ý’è‚·‚éƒTƒCƒY( >0)
@@ -795,6 +798,8 @@ type
795798 property HeadResCount : Integer read FHeadResCount write FHeadResCount;
796799 //! ŠÖ˜AƒL[ƒ[ƒh’ljÁƒtƒ‰ƒO
797800 property AddKeywordLink: Boolean read FAddKeywordLink write FAddKeywordLink;
801+ //! dat‚Ì’uŠ·‚ð—LŒø‚É‚·‚é‚©
802+ property ReplaceDat: Boolean read FReplaceDat write FReplaceDat;
798803 end;
799804
800805
@@ -831,12 +836,12 @@ const
831836 LANGUAGE_FILE_NAME = 'language.ini';
832837 INPUTASSIST_FILE_NAME = 'InputAssist.ini';
833838 FIXED_COOKIE = 'hana=mogera';
834-
839+ REPLACE_FILE_NAME = 'replace.ini';
835840
836841 implementation
837842
838843 uses
839- Math, UCryptAuto, UBase64;
844+ Math, UCryptAuto, UBase64, Windows,GikoUtil;
840845
841846 type
842847 TSoundName = record
@@ -995,6 +1000,7 @@ var
9951000 Exists: Boolean;
9961001 s: string;
9971002 CoolSet: TCoolSet;
1003+ msg: String;
9981004 begin
9991005 Exists := FileExists(GetFileName);
10001006 ini := TMemIniFile.Create(GetFileName);
@@ -1268,6 +1274,16 @@ begin
12681274 FStoredTaskTray := ini.ReadBool('Function', 'StroedTaskTray', false);
12691275 FLoopBrowserTabs := ini.ReadBool('Function', 'LoopBrowserTabs', false);
12701276 FAddKeywordLink := ini.ReadBool('Thread', 'AddKeywordLink', false);
1277+ if not (ini.ValueExists('Thread', 'ReplaceDat')) then begin
1278+ msg := 'ƒZƒLƒ…ƒŠƒeƒBƒ\ƒtƒg‚̌딽‰ž‘΍ô‚ð‚µ‚Ü‚·‚©H'+ #13#10 +
1279+ 'i„§:‚Í‚¢j'+ #13#10+'Ú×Ý’è‚©‚ç•ÏX‚Å‚«‚Ü‚·B';
1280+ if MsgBox(Application.Handle,
1281+ msg, 'ƒMƒRƒiƒr', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
1282+ FReplaceDat := True;
1283+ end;
1284+ end else begin
1285+ FReplaceDat := ini.ReadBool('Thread', 'ReplaceDat', False);
1286+ end;
12711287 ini.UpdateFile;
12721288 finally
12731289 ini.Free;
@@ -1646,6 +1662,7 @@ begin
16461662 ini.WriteBool('Function', 'StroedTaskTray', FStoredTaskTray);
16471663 ini.WriteBool('Function', 'LoopBrowserTabs', FLoopBrowserTabs);
16481664 ini.WriteBool('Thread', 'AddKeywordLink', FAddKeywordLink);
1665+ ini.WriteBool('Thread', 'ReplaceDat', FReplaceDat);
16491666 ini.UpdateFile;
16501667 finally
16511668 ini.Free;
@@ -2119,6 +2136,10 @@ function TSetting.GetInputAssistFileName : String;
21192136 begin
21202137 Result := GetConfigDir + INPUTASSIST_FILE_NAME;
21212138 end;
2139+function TSetting.GetReplaceFileName: String;
2140+begin
2141+ Result := GetConfigDir + REPLACE_FILE_NAME;
2142+end;
21222143 procedure TSetting.SetMoveHistorySize(AVal : Integer);
21232144 begin
21242145 if (AVal > 0) then begin
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -75,7 +75,8 @@ uses
7575 DefaultFileManager in 'DefaultFileManager.pas',
7676 MoveHistoryItem in 'MoveHistoryItem.pas',
7777 SambaTimer in 'SambaTimer.pas',
78- HistoryList in 'HistoryList.pas';
78+ HistoryList in 'HistoryList.pas',
79+ ReplaceDataModule in 'ReplaceDataModule.pas' {ReplaceDM: TDataModule};
7980
8081 {$R *.RES}
8182 {$R gikoResource.res}
@@ -131,6 +132,7 @@ begin
131132 Application.CreateForm(TAddressHistoryDM, AddressHistoryDM);
132133 Application.CreateForm(TGikoDM, GikoDM);
133134 Application.CreateForm(TInputAssistDM, InputAssistDM);
135+ Application.CreateForm(TReplaceDM, ReplaceDM);
134136 Application.CreateForm(TGikoForm, GikoForm);
135137 Application.Run;
136138 ReleaseMutex(hMutex);
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/defaultFiles.ini
+++ b/readme/defaultFiles.ini
@@ -17,3 +17,7 @@ TO=config\Board\
1717 [board_gikona]
1818 FROM=config\default\ƒMƒRƒiƒr.default
1919 TO=config\Board\ƒMƒRƒiƒr.txt
20+
21+[replace]
22+FROM=config\default\replace.default
23+TO=config\replace.ini
--- /dev/null
+++ b/res/default/replace.default
@@ -0,0 +1,2 @@
1+\.vbs
2+body onload=window\(\)