fpmopts.inc 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526
  1. {
  2. $Id$
  3. This file is part of the Free Pascal Integrated Development Environment
  4. Copyright (c) 1998 by Berczi Gabor
  5. Options menu entries
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. procedure TIDEApp.SetSwitchesMode;
  13. var R,R2: TRect;
  14. D: PCenterDialog;
  15. RB: PRadioButtons;
  16. i : TSwitchMode;
  17. SwitchesCount : integer;
  18. LastItem: PSItem;
  19. L: longint;
  20. begin
  21. SwitchesCount:=ord(high(TSwitchMode))-ord(low(TSwitchMode))+1;
  22. R.Assign(0,0,36,4+SwitchesCount);
  23. New(D, Init(R, dialog_switchesmode));
  24. with D^ do
  25. begin
  26. HelpCtx:=hcSwitchesMode;
  27. GetExtent(R);
  28. R.Grow(-3,-1);
  29. Inc(R.A.Y);
  30. R2.Copy(R);
  31. Inc(R2.A.Y);
  32. R2.B.Y:=R2.A.Y+SwitchesCount;
  33. LastItem:=nil;
  34. for I:=high(TSwitchMode) downto low(TSwitchMode) do
  35. LastItem:=NewSItem(SwitchesModeName[I], LastItem);
  36. New(RB, Init(R2, LastItem));
  37. L:=ord(SwitchesMode);
  38. { ^^^ this is necessary, since TRadioButtons.GetData() reads a full
  39. longint and by just specifying the SwitchesMode var (only 1 bytes),
  40. the three bytes located next to it in the memory will determine the
  41. three most significant bytes of the longint. And if they aren't all
  42. zero, then we will select some items outside the actual ones... }
  43. RB^.SetData(L);
  44. Insert(RB);
  45. R2.Copy(R);
  46. R2.B.Y:=R2.A.Y+1;
  47. Insert(New(PLabel, Init(R2, static_switchesmode_switchesmode, RB)));
  48. end;
  49. InsertButtons(D);
  50. RB^.Select;
  51. if Desktop^.ExecView(D)=cmOK then
  52. SwitchesMode:=TSwitchMode(RB^.Value);
  53. Dispose(D, Done);
  54. UpdateMode;
  55. UpdateTarget;
  56. end;
  57. procedure TIDEApp.DoCompilerSwitch;
  58. var R,R2,R3,TabR,TabIR: TRect;
  59. D: PCenterDialog;
  60. CB1,CB2,CB3,CB4,CB5: PCheckBoxes;
  61. RB1,{RB2,}RB3,RB4,RB5,RB6: PRadioButtons;
  62. Items: PSItem;
  63. IL: PInputLine;
  64. Count : integer;
  65. I,L: longint;
  66. Tab: PTab;
  67. Label11,{Label12,}
  68. Label21,Label22,Label23,
  69. Label31,Label41,
  70. Label51,Label52,Label53: PLabel;
  71. begin
  72. R.Assign(0,0,72,18);
  73. New(D, Init(R, dialog_compilerswitches));
  74. with D^ do
  75. begin
  76. HelpCtx:=hcCompiler;
  77. GetExtent(R);
  78. R.Grow(-2,-1);
  79. Dec(R.B.Y,2);
  80. TabR.Copy(R);
  81. TabIR.Copy(R);
  82. Inc(TabIR.A.Y,2);
  83. TabIR.Grow(0,-1);
  84. { --- Sheet 1 --- }
  85. Count:=SyntaxSwitches^.ItemCount;
  86. R.Copy(TabIR);
  87. R2.Copy(R);
  88. { R2.B.X:=(R2.A.X+(R2.B.X-R2.A.X) div 2)-2;} R2.B.X:=R2.B.X-4;
  89. R2.B.Y:=R2.A.Y+((Count+1) div 2);
  90. Items:=nil;
  91. for I:=Count-1 downto 0 do
  92. Items:=NewSItem(SyntaxSwitches^.ItemName(I), Items);
  93. New(CB1, Init(R2, Items));
  94. for I:=0 to Count-1 do
  95. if SyntaxSwitches^.GetBooleanItem(I) then
  96. CB1^.Press(I);
  97. Dec(R2.A.Y);
  98. R2.B.Y:=R2.A.Y+1;
  99. New(Label11, Init(R2, label_compiler_syntaxswitches, CB1));
  100. { --- Sheet 2 --- }
  101. Count:=CodegenSwitches^.ItemCount;
  102. R2.Copy(TabIR);
  103. R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2-2;
  104. R2.B.Y:=R2.A.Y+Count;
  105. Items:=nil;
  106. for I:=Count-1 downto 0 do
  107. Items:=NewSItem(CodegenSwitches^.ItemName(I), Items);
  108. New(CB3, Init(R2, Items));
  109. for I:=0 to Count-1 do
  110. if CodegenSwitches^.GetBooleanItem(I) then
  111. CB3^.Press(I);
  112. Dec(R2.A.Y);
  113. R2.B.Y:=R2.A.Y+1;
  114. New(Label21, Init(R2, label_compiler_runtimechecks, CB3));
  115. Count:=OptimizingGoalSwitches^.ItemCount;
  116. R2.Copy(TabIR);
  117. R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
  118. Dec(R2.B.X,4);
  119. R2.B.Y:=R2.A.Y+Count;
  120. Items:=nil;
  121. for I:=Count-1 downto 0 do
  122. Items:=NewSItem(OptimizingGoalSwitches^.ItemName(I), Items);
  123. New(RB3, Init(R2, Items));
  124. L:=OptimizingGoalSwitches^.GetCurrSel;
  125. RB3^.SetData(L);
  126. Dec(R2.A.Y);
  127. R2.B.Y:=R2.A.Y+1;
  128. New(Label22, Init(R2, label_compiler_optimizations, RB3));
  129. Count:=OptimizationSwitches^.ItemCount;
  130. R2.Copy(TabIR);
  131. R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
  132. Dec(R2.B.X,4);
  133. Inc(R2.A.Y, OptimizingGoalSwitches^.ItemCount);
  134. R2.B.Y:=R2.A.Y+Count;
  135. Items:=nil;
  136. for I:=Count-1 downto 0 do
  137. Items:=NewSItem(OptimizationSwitches^.ItemName(I), Items);
  138. New(CB2, Init(R2, Items));
  139. for I:=0 to Count-1 do
  140. if OptimizationSwitches^.GetBooleanItem(I) then
  141. CB2^.Press(I);
  142. Dec(R2.A.Y);
  143. R2.B.Y:=R2.A.Y+1;
  144. Count:=ProcessorSwitches^.ItemCount;
  145. R2.Copy(TabIR);
  146. R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2-2;
  147. Inc(R2.A.Y,CodegenSwitches^.ItemCount+2);
  148. R2.B.Y:=R2.A.Y+Count;
  149. Items:=nil;
  150. for I:=Count-1 downto 0 do
  151. Items:=NewSItem(ProcessorSwitches^.ItemName(I), Items);
  152. New(RB1, Init(R2, Items));
  153. L:=ProcessorSwitches^.GetCurrSel;
  154. RB1^.SetData(L);
  155. Dec(R2.A.Y);
  156. R2.B.Y:=R2.A.Y+1;
  157. New(Label23, Init(R2, label_compiler_targetprocessor, RB1));
  158. { --- Sheet 3 --- }
  159. Count:=VerboseSwitches^.ItemCount;
  160. R.Copy(TabIR);
  161. R2.Copy(R);
  162. R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2;
  163. R2.B.Y:=R2.A.Y+Count;
  164. Items:=nil;
  165. for I:=Count-1 downto 0 do
  166. Items:=NewSItem(VerboseSwitches^.ItemName(I), Items);
  167. New(CB4, Init(R2, Items));
  168. for I:=0 to Count-1 do
  169. if VerboseSwitches^.GetBooleanItem(I) then
  170. CB4^.Press(I);
  171. Dec(R2.A.Y);
  172. R2.B.Y:=R2.A.Y+1;
  173. New(Label31, Init(R2, label_compiler_verboseswitches, CB4));
  174. { --- Sheet 4 --- }
  175. Count:=BrowserSwitches^.ItemCount;
  176. R.Copy(TabIR);
  177. R2.Copy(R);
  178. R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2;
  179. R2.B.Y:=R2.A.Y+Count;
  180. Items:=nil;
  181. for I:=Count-1 downto 0 do
  182. Items:=NewSItem(BrowserSwitches^.ItemName(I), Items);
  183. New(RB4, Init(R2, Items));
  184. L:=BrowserSwitches^.GetCurrSel;
  185. RB4^.SetData(L);
  186. Dec(R2.A.Y);
  187. R2.B.Y:=R2.A.Y+1;
  188. New(Label41, Init(R2, label_compiler_browser, RB4));
  189. { --- Sheet 5 --- }
  190. Count:=AsmReaderSwitches^.ItemCount;
  191. R2.Copy(TabIR);
  192. R2.B.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
  193. Dec(R2.B.X,4);
  194. R2.B.Y:=R2.A.Y+Count;
  195. Items:=nil;
  196. for I:=Count-1 downto 0 do
  197. Items:=NewSItem(AsmReaderSwitches^.ItemName(I), Items);
  198. New(RB5, Init(R2, Items));
  199. L:=AsmReaderSwitches^.GetCurrSel;
  200. RB5^.SetData(L);
  201. Dec(R2.A.Y);
  202. R2.B.Y:=R2.A.Y+1;
  203. New(Label51, Init(R2, label_compiler_assemblerreader, RB5));
  204. R2.Copy(TabIR);
  205. R2.B.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
  206. Dec(R2.B.X,4);
  207. R2.A.Y:=R2.A.Y+Count+2;
  208. Count:=AsmInfoSwitches^.ItemCount;
  209. R2.B.Y:=R2.A.Y+Count;
  210. Items:=nil;
  211. for I:=Count-1 downto 0 do
  212. Items:=NewSItem(AsmInfoSwitches^.ItemName(I), Items);
  213. New(CB5, Init(R2, Items));
  214. for I:=0 to Count-1 do
  215. if AsmInfoSwitches^.GetBooleanItem(I) then
  216. CB5^.Press(I);
  217. Dec(R2.A.Y);
  218. R2.B.Y:=R2.A.Y+1;
  219. New(Label52, Init(R2, label_compiler_assemblerinfo, CB5));
  220. Count:=AsmOutputSwitches^.ItemCount;
  221. R2.Copy(TabIR);
  222. R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
  223. Dec(R2.B.X,4);
  224. R2.B.Y:=R2.A.Y+Count;
  225. Items:=nil;
  226. for I:=Count-1 downto 0 do
  227. Items:=NewSItem(AsmOutputSwitches^.ItemName(I), Items);
  228. New(RB6, Init(R2, Items));
  229. L:=AsmOutputSwitches^.GetCurrSel;
  230. RB6^.SetData(L);
  231. Dec(R2.A.Y);
  232. R2.B.Y:=R2.A.Y+1;
  233. New(Label53, Init(R2, label_compiler_assembleroutput, RB6));
  234. { create tabs }
  235. New(Tab, Init(TabR,
  236. NewTabDef(page_compiler_syntax,CB1,
  237. NewTabItem(Label11,
  238. NewTabItem(CB1,
  239. nil)),
  240. NewTabDef(page_compiler_codegeneration,CB3,
  241. NewTabItem(Label21,
  242. NewTabItem(CB3,
  243. NewTabItem(Label22,
  244. NewTabItem(CB2,
  245. NewTabItem(Label23,
  246. NewTabItem(RB3,
  247. NewTabItem(RB1,
  248. nil))))))),
  249. NewTabDef(page_compiler_verbose,CB4,
  250. NewTabItem(Label31,
  251. NewTabItem(CB4,
  252. nil)),
  253. NewTabDef(page_compiler_browser,RB4,
  254. NewTabItem(Label41,
  255. NewTabItem(RB4,
  256. nil)),
  257. NewTabDef(page_compiler_assembler,CB1,
  258. NewTabItem(Label51,
  259. NewTabItem(RB5,
  260. NewTabItem(Label52,
  261. NewTabItem(CB5,
  262. NewTabItem(Label53,
  263. NewTabItem(RB6,
  264. nil)))))),
  265. nil)))))));
  266. Tab^.GrowMode:=0;
  267. Insert(Tab);
  268. { conditionnals }
  269. R2.Copy(TabR); R2.A.Y:=R2.B.Y+1; R2.B.Y:=R2.A.Y+1; Dec(R2.B.X,4);
  270. New(IL, Init(R2, 128));
  271. IL^.Data^:=ConditionalSwitches^.GetStringItem(0);
  272. Insert(IL);
  273. R3.Copy(R2); R3.A.X:=R2.B.X+1; R3.B.X:=R3.A.X+3;
  274. Insert(New(PHistory, Init(R3, IL, hidConditionalDefines)));
  275. R2.Move(0,-1);
  276. Insert(New(PLabel, Init(R2,ConditionalSwitches^.ItemName(0), IL)));
  277. end;
  278. InsertButtons(D);
  279. if Desktop^.ExecView(D)=cmOK then
  280. begin
  281. for I:=0 to SyntaxSwitches^.ItemCount-1 do
  282. SyntaxSwitches^.SetBooleanItem(I,CB1^.Mark(I));
  283. for I:=0 to CodeGenSwitches^.ItemCount-1 do
  284. CodegenSwitches^.SetBooleanItem(I,CB3^.Mark(I));
  285. for I:=0 to OptimizationSwitches^.ItemCount-1 do
  286. OptimizationSwitches^.SetBooleanItem(I,CB2^.Mark(I));
  287. for I:=0 to VerboseSwitches^.ItemCount-1 do
  288. VerboseSwitches^.SetBooleanItem(I,CB4^.Mark(I));
  289. OptimizingGoalSwitches^.SetCurrSel(RB3^.Value);
  290. ProcessorSwitches^.SetCurrSel(RB1^.Value);
  291. AsmReaderSwitches^.SetCurrSel(RB5^.Value);
  292. for I:=0 to AsmInfoSwitches^.ItemCount-1 do
  293. AsmInfoSwitches^.SetBooleanItem(I,CB5^.Mark(I));
  294. AsmOutputSwitches^.SetCurrSel(RB6^.Value);
  295. BrowserSwitches^.SetCurrSel(RB4^.Value);
  296. ConditionalSwitches^.SetStringItem(0,IL^.Data^);
  297. end;
  298. Dispose(D, Done);
  299. end;
  300. procedure TIDEApp.MemorySizes;
  301. var R,R2,R3: TRect;
  302. D: PCenterDialog;
  303. ILs: array[0..10] of PIntegerLine;
  304. I: integer;
  305. begin
  306. R.Assign(0,0,40,2+MemorySwitches^.ItemCount*2);
  307. New(D, Init(R, dialog_memorysizes));
  308. with D^ do
  309. begin
  310. HelpCtx:=hcmemorysizes;
  311. GetExtent(R); R.Grow(-3,-1);
  312. R2.Copy(R); Inc(R2.A.Y); R2.B.Y:=R2.A.Y+1;
  313. for I:=0 to MemorySwitches^.ItemCount-1 do
  314. begin
  315. R3.Copy(R2); R3.A.X:=21; R3.B.X:=R3.A.X+10;
  316. New(ILs[I], Init(R3, MinMemSize, MaxMemSize));
  317. ILs[I]^.Data^:=IntToStr(MemorySwitches^.GetLongintItem(I));
  318. Insert(ILs[I]);
  319. R3.Copy(R2); R3.B.X:=21;
  320. Insert(New(PLabel, Init(R3, MemorySwitches^.ItemName(I), ILs[I])));
  321. R2.Move(0,2);
  322. end;
  323. { R3.Copy(R2); R3.A.X:=21; R3.B.X:=R3.A.X+10;
  324. New(IL2, Init(R3, MinHeapSize, MaxHeapSize));
  325. IL2^.Data^:=IntToStr(GetHeapSize);
  326. Insert(IL2);
  327. R3.Copy(R2); R3.B.X:=21;
  328. Insert(New(PLabel, Init(R3, 'Local ~h~eap size', IL2)));}
  329. end;
  330. InsertButtons(D);
  331. ILs[0]^.Select;
  332. if Desktop^.ExecView(D)=cmOK then
  333. begin
  334. for I:=0 to MemorySwitches^.ItemCount-1 do
  335. begin
  336. MemorySwitches^.SetLongintItem(I,StrToInt(ILs[I]^.Data^));
  337. end;
  338. { SetStackSize(StrToInt(IL1^.Data^));
  339. SetHeapSize(StrToInt(IL2^.Data^));}
  340. end;
  341. Dispose(D, Done);
  342. end;
  343. procedure TIDEApp.DoLinkerSwitch;
  344. var R,R2: TRect;
  345. D: PCenterDialog;
  346. RB2: PRadioButtons;
  347. CB,CB2 : PCheckBoxes;
  348. Count,I: longint;
  349. Items: PSItem;
  350. L: longint;
  351. begin
  352. R.Assign(0,0,66,8);
  353. New(D, Init(R, dialog_linker));
  354. with D^ do
  355. begin
  356. HelpCtx:=hclinker;
  357. GetExtent(R); R.Grow(-3,-1);
  358. Count:=LinkAfterSwitches^.ItemCount;
  359. R2.Copy(R);
  360. R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2 - 1;
  361. Inc(R2.A.Y,1);
  362. R2.B.Y:=R2.A.Y+Count;
  363. Items:=nil;
  364. for I:=Count-1 downto 0 do
  365. Items:=NewSItem(LinkAfterSwitches^.ItemName(I), Items);
  366. New(CB, Init(R2, Items));
  367. for I:=0 to Count-1 do
  368. if LinkAfterSwitches^.GetBooleanItem(I) then
  369. CB^.Press(I);
  370. Insert(CB);
  371. Dec(R2.A.Y);
  372. R2.B.Y:=R2.A.Y+1;
  373. Insert(New(PLabel, Init(R2, label_compiler_linkafter, CB)));
  374. R2.Copy(R);
  375. R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2 - 1;
  376. Inc(R2.A.Y,Count+2);
  377. R2.B.Y:=R2.A.Y+1;
  378. Items:=NewSItem(OtherLinkerSwitches^.ItemName(1), Nil);
  379. New(CB2, Init(R2, Items));
  380. if OtherLinkerSwitches^.GetBooleanItem(1) then
  381. CB2^.Press(0);
  382. Insert(CB2);
  383. R2.Copy(R); Inc(R2.A.Y);
  384. R2.B.Y:=R2.A.Y+LibLinkerSwitches^.ItemCount;
  385. R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2+1;
  386. Items:=nil;
  387. for I:=LibLinkerSwitches^.ItemCount-1 downto 0 do
  388. Items:=NewSItem(LibLinkerSwitches^.ItemName(I), Items);
  389. New(RB2, Init(R2, Items));
  390. L:=LibLinkerSwitches^.GetCurrSel;
  391. RB2^.SetData(L);
  392. Insert(RB2);
  393. R2.Copy(R); R2.B.Y:=R2.A.Y+1; R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2+1;
  394. Insert(New(PLabel, Init(R2, label_linker_preferredlibtype, RB2)));
  395. end;
  396. InsertButtons(D);
  397. RB2^.Select;
  398. if Desktop^.ExecView(D)=cmOK then
  399. begin
  400. { SetEXEFormat(TEXEFormat(RB1^.Value+1));}
  401. LibLinkerSwitches^.SetCurrSel(RB2^.Value);
  402. OtherLinkerSwitches^.SetBooleanItem(1,CB2^.Mark(0));
  403. if LibLinkerSwitches^.GetCurrSelParam='X' then
  404. if CompareText(TargetSwitches^.GetCurrSelParam,'win32')=0 then
  405. if CompareText(AsmOutputSwitches^.GetCurrSelParam,'pecoff')<>0 then
  406. if ConfirmBox(
  407. FormatStrStr3(msg_xmustbesettoyforz_doyouwanttochangethis,
  408. label_compiler_assembleroutput,'pecoff','smartlinking'),nil,false)=cmYes then
  409. AsmOutputSwitches^.SetCurrSelParam('pecoff');
  410. for I:=0 to LinkAfterSwitches^.ItemCount-1 do
  411. LinkAfterSwitches^.SetBooleanItem(I,CB^.Mark(I));
  412. end;
  413. Dispose(D, Done);
  414. end;
  415. procedure TIDEApp.DoDebuggerSwitch;
  416. var R,R2,R3: TRect;
  417. D: PCenterDialog;
  418. RB,RB2 : PRadioButtons;
  419. CBStrip: PCheckBoxes;
  420. {$ifdef win32}
  421. CB2: PCheckBoxes;
  422. {$endif win32}
  423. {$ifdef Unix}
  424. IL: PInputLine;
  425. {$endif Unix}
  426. IL2: PInputLine;
  427. L,I: longint;
  428. Items: PSItem;
  429. const
  430. {$ifdef win32}
  431. OtherFieldLines = 3;
  432. {$else not win32}
  433. {$ifdef Unix}
  434. OtherFieldLines = 3;
  435. {$else not Unix}
  436. OtherFieldLines = 0;
  437. {$endif Unix}
  438. {$endif win32}
  439. begin
  440. R.Assign(0,0,60,2+DebugInfoSwitches^.ItemCount+1+2
  441. +ProfileInfoSwitches^.ItemCount+2+2+1+OtherFieldLines);
  442. New(D, Init(R, dialog_debugger));
  443. with D^ do
  444. begin
  445. HelpCtx:=hcdebugger;
  446. { Strip all }
  447. GetExtent(R); R.Grow(-3,-1);
  448. R2.Copy(R); Inc(R2.A.Y,2); R2.B.Y:=R2.A.Y+1;
  449. Items:=NewSItem(OtherLinkerSwitches^.ItemName(0), Nil);
  450. New(CBStrip, Init(R2, Items));
  451. if OtherLinkerSwitches^.GetBooleanItem(0) then
  452. CBStrip^.Press(0);
  453. Insert(CBStrip);
  454. GetExtent(R); R.Grow(-3,-1);
  455. R2.Copy(R); Inc(R2.A.Y,3); R2.B.Y:=R2.A.Y+DebugInfoSwitches^.ItemCount;
  456. Items:=nil;
  457. for I:=DebugInfoSwitches^.ItemCount-1 downto 0 do
  458. Items:=NewSItem(DebugInfoSwitches^.ItemName(I), Items);
  459. New(RB, Init(R2, Items));
  460. L:=DebugInfoSwitches^.GetCurrSel;
  461. RB^.SetData(L);
  462. Insert(RB);
  463. R2.Copy(R); Inc(R2.A.Y); R2.B.Y:=R2.A.Y+1;
  464. Insert(New(PLabel, Init(R2, label_debugger_debuginfo, RB)));
  465. R2.Copy(R); Inc(R2.A.Y,3+DebugInfoSwitches^.ItemCount+2); R2.B.Y:=R2.A.Y+ProfileInfoSwitches^.ItemCount;
  466. Items:=nil;
  467. for I:=ProfileInfoSwitches^.ItemCount-1 downto 0 do
  468. Items:=NewSItem(ProfileInfoSwitches^.ItemName(I), Items);
  469. New(RB2, Init(R2, Items));
  470. L:=ProfileInfoSwitches^.GetCurrSel;
  471. RB2^.SetData(L);
  472. Insert(RB2);
  473. R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
  474. Insert(New(PLabel, Init(R2, label_debugger_profileswitches, RB2)));
  475. {custom }
  476. Inc(R2.A.Y,2+ProfileInfoSwitches^.ItemCount+1); R2.B.Y:=R2.A.Y+1;
  477. R3.Copy(R2); Dec(R3.B.X,4);
  478. New(IL2, Init(R3, 255));
  479. IL2^.Data^:=CustomArg[SwitchesMode];
  480. Insert(IL2);
  481. R3.Copy(R2); R3.A.X:=R3.B.X-3; R3.B.X:=R3.A.X+3;
  482. Insert(New(PHistory, Init(R3, IL2, hidCompilerArgs)));
  483. R2.Move(0,-1);
  484. Insert(New(PLabel, Init(R2,label_debugger_compilerargs, IL2)));
  485. {$ifdef win32}
  486. R2.Move(0,4);
  487. New(CB2,Init(R2,NewSItem(label_debugger_useanotherconsole, nil)));
  488. Insert(CB2);
  489. if DebuggeeTTY<>'' then
  490. L:=1
  491. else
  492. L:=0;
  493. CB2^.SetData(L);
  494. R2.Move(0,-1);
  495. Insert(New(PLabel, Init(R2,label_debugger_redirection, CB2)));
  496. {$endif win32}
  497. {$ifdef Unix}
  498. R2.Move(0,4);
  499. New(IL, Init(R2, 255));
  500. IL^.Data^:=DebuggeeTTY;
  501. Insert(IL);
  502. R2.Move(0,-1);
  503. Insert(New(PLabel, Init(R2,label_debugger_useanothertty, IL)));
  504. {$endif win32}
  505. end;
  506. InsertButtons(D);
  507. RB^.Select;
  508. if Desktop^.ExecView(D)=cmOK then
  509. begin
  510. DebugInfoSwitches^.SetCurrSel(RB^.Value);
  511. ProfileInfoSwitches^.SetCurrSel(RB2^.Value);
  512. OtherLinkerSwitches^.SetBooleanItem(0,CBStrip^.Mark(0));
  513. CustomArg[SwitchesMode]:=IL2^.Data^;
  514. {$ifdef win32}
  515. if CB2^.value<>0 then
  516. DebuggeeTTY:='on'
  517. else
  518. DebuggeeTTY:='';
  519. {$endif win32}
  520. {$ifdef Unix}
  521. DebuggeeTTY:=IL^.Data^;
  522. {$endif Unix}
  523. end;
  524. Dispose(D, Done);
  525. end;
  526. procedure TIDEApp.Directories;
  527. var R,R2: TRect;
  528. D: PCenterDialog;
  529. IL : array[0..11] of PInputLine;
  530. Count,I : integer;
  531. const
  532. LW = 25;
  533. begin
  534. Count:=DirectorySwitches^.ItemCount;
  535. R.Assign(0,0,round(ScreenWidth*64/80),2+Count*2);
  536. New(D, Init(R, dialog_directories));
  537. with D^ do
  538. begin
  539. HelpCtx:=hcdirectories;
  540. GetExtent(R);
  541. R.Grow(-2,-2);
  542. Dec(R.B.X);
  543. R.B.Y:=R.A.Y+1;
  544. for i:=Count-1 downto 0 do
  545. begin
  546. R2.Copy(R);
  547. R2.A.X:=LW;
  548. New(IL[i], Init(R2, 255));
  549. IL[i]^.Data^:=DirectorySwitches^.GetStringItem(i);
  550. Insert(IL[i]);
  551. R2.Copy(R);
  552. R2.B.X:=LW;
  553. Insert(New(PLabel, Init(R2, DirectorySwitches^.ItemName(i), IL[i])));
  554. R.Move(0,2);
  555. end;
  556. end;
  557. InsertButtons(D);
  558. IL[Count-1]^.Select;
  559. if Desktop^.ExecView(D)=cmOK then
  560. begin
  561. for i:=Count-1 downto 0 do
  562. DirectorySwitches^.SetStringItem(i,IL[i]^.Data^);
  563. end;
  564. Dispose(D, Done);
  565. end;
  566. procedure TIDEApp.Tools;
  567. var
  568. D : PToolsDialog;
  569. begin
  570. D:=New(PToolsDialog, Init);
  571. ExecuteDialog(D,nil);
  572. end;
  573. (*procedure TIDEApp.Preferences;
  574. var R,R2: TRect;
  575. D: PCenterDialog;
  576. RB1 : PRadioButtons;
  577. CountModes : integer;
  578. hp : pvideomodelist;
  579. items : PSItem;
  580. videomode : tvideomode;
  581. i,modevalue : longint;
  582. function ToStr(l : longint) : string;
  583. var
  584. s : string;
  585. begin
  586. str(l,s);
  587. ToStr:=s;
  588. end;
  589. const
  590. color2str : array[false..true] of string = ('in b/w','in color');
  591. begin
  592. GetVideoMode(videomode);
  593. CountModes:=0;
  594. i:=0;
  595. modevalue:=0;
  596. R.Assign(0,0,64,18);
  597. New(D, Init(R, 'Preferences'));
  598. with D^ do
  599. begin
  600. hp:=video.modes;
  601. items:=nil;
  602. r2.assign(2,3,24,17);
  603. while assigned(hp) do
  604. begin
  605. items:=NewSItem(ToStr(hp^.col)+'x'+ToStr(hp^.row)+' '+color2str[hp^.color],items);
  606. if (hp^.col=videomode.col) and (hp^.row=videomode.row) and
  607. (hp^.color=videomode.color) then
  608. modevalue:=i;
  609. inc(CountModes);
  610. { we can't display an infinite number of modes }
  611. if CountModes>=r.b.y-r.a.y+1 then
  612. break;
  613. inc(i);
  614. hp:=hp^.next;
  615. end;
  616. modevalue:=CountModes-modevalue-1;
  617. new(rb1,init(r2,items));
  618. insert(rb1);
  619. rb1^.value:=modevalue;
  620. r2.move(0,-1);r2.b.y:=r2.a.y+1;
  621. insert(new(plabel,init(r2,'~V~ideo mode',rb1)));
  622. end;
  623. InsertButtons(D);
  624. if Desktop^.ExecView(D)=cmOK then
  625. begin
  626. { change video mode ? }
  627. if rb1^.value<>modevalue then
  628. begin
  629. modevalue:=CountModes-rb1^.value-1;
  630. hp:=video.modes;
  631. for i:=1 to modevalue do
  632. hp:=hp^.next;
  633. videomode.col:=hp^.col;
  634. videomode.row:=hp^.row;
  635. videomode.color:=hp^.color;
  636. SetScreenVideoMode(videomode);
  637. end;
  638. end;
  639. Dispose(D, Done);
  640. end;*)
  641. type
  642. PVideoModeCollection = ^TVideoModeCollection;
  643. TVideoModeCollection = object(TSortedCollection)
  644. function Compare(Key1, Key2: Pointer): Sw_Integer; virtual;
  645. procedure FreeItem(Item: Pointer); virtual;
  646. end;
  647. function TVideoModeCollection.Compare(Key1, Key2: Pointer): Sw_Integer;
  648. var R: Sw_integer;
  649. K1: PVideoMode absolute Key1;
  650. K2: PVideoMode absolute Key2;
  651. begin
  652. if K1^.Col<K2^.Col then R:=-1 else
  653. if K1^.Col>K2^.Col then R:= 1 else
  654. if K1^.Row<K2^.Row then R:=-1 else
  655. if K1^.Row>K2^.Row then R:= 1 else
  656. if (K1^.Color=false) and (K2^.Color=true ) then R:=-1 else
  657. if (K1^.Color=true ) and (K2^.Color=false) then R:= 1 else
  658. R:=0;
  659. Compare:=R;
  660. end;
  661. procedure TVideoModeCollection.FreeItem(Item: Pointer);
  662. begin
  663. FreeMem(Item,sizeof(TVideoMode));
  664. end;
  665. procedure TIDEApp.Preferences;
  666. var R,R2: TRect;
  667. D: PCenterDialog;
  668. C: PVideoModeCollection;
  669. VMLB: PVideoModeListBox;
  670. OldScreenMode,VM: TVideoMode;
  671. ScreenModeInfo : array[1..3] of longint;
  672. CurVP,VP: PVideoMode;
  673. RB1: PPlainRadioButtons;
  674. CB1,CB2: PPlainCheckBoxes;
  675. CurIdx: integer;
  676. i : word;
  677. begin
  678. New(C, Init(10,50));
  679. for i:=0 to GetVideoModeCount-1 do
  680. begin
  681. GetVideoModeData(i,VM);
  682. GetMem(VP,sizeof(TVideoMode));
  683. Move(VM,VP^,sizeof(TVideoMode));
  684. C^.Insert(VP);
  685. if (VM.Row=ScreenMode.Row) and (VM.Col=ScreenMode.Col) and
  686. (VM.Color=ScreenMode.Color) then
  687. CurVP:=VP;
  688. end;
  689. R.Assign(0,0,64,15);
  690. New(D, Init(R, dialog_preferences));
  691. with D^ do
  692. begin
  693. HelpCtx:=hcpreferences;
  694. GetExtent(R); R.Grow(-2,-2);
  695. R.B.X:=R.A.X+(R.B.X-R.A.X) div 2 - 1;
  696. R.B.Y:=R.A.Y+3;
  697. R2.Copy(R); R2.Grow(-1,-1);
  698. New(VMLB, Init(R2, Min(4,C^.Count), C));
  699. if CurVP=nil then CurIdx:=-1 else
  700. CurIdx:=C^.IndexOf(CurVP);
  701. if CurIdx<>-1 then
  702. VMLB^.FocusItem(CurIdx);
  703. Insert(New(PGroupView, Init(R, label_preferences_videomode, VMLB)));
  704. Insert(VMLB);
  705. R.Move(0,R.B.Y-R.A.Y{+1}); R.B.Y:=R.A.Y+4;
  706. R2.Copy(R); R2.Grow(-1,-1);
  707. New(RB1, Init(R2,
  708. NewSItem(label_preferences_currentdirectory,
  709. NewSItem(label_preferences_configdirectory,
  710. nil))));
  711. RB1^.Press(DesktopLocation);
  712. Insert(New(PGroupView, Init(R, label_preferences_desktopfile, RB1)));
  713. Insert(RB1);
  714. R.Move(0,R.B.Y-R.A.Y{+1}); R.B.Y:=R.A.Y+5;
  715. R2.Copy(R); R2.Grow(-1,-1);
  716. New(CB1, Init(R2,
  717. NewSItem(label_preferences_editorfiles,
  718. NewSItem(label_preferences_environment,
  719. NewSItem(label_preferences_desktop,
  720. nil)))));
  721. CB1^.Value:=AutoSaveOptions;
  722. Insert(New(PGroupView, Init(R, label_preferences_autosave, CB1)));
  723. Insert(CB1);
  724. GetExtent(R); R.Grow(-2,-2);
  725. R.A.X:=R.B.X-(R.B.X-R.A.X) div 2 + 1;
  726. R.B.Y:=R.A.Y+7;
  727. R.Move(0,R.B.Y-R.A.Y{+1}); R.B.Y:=R.A.Y+5;
  728. R2.Copy(R); R2.Grow(-1,-1);
  729. New(CB2, Init(R2,
  730. NewSItem(label_preferences_autotracksource,
  731. NewSItem(label_preferences_closeongotosource,
  732. NewSItem(label_preferences_changedironopen,
  733. nil)))));
  734. CB2^.Value:=MiscOptions;
  735. Insert(New(PGroupView, Init(R, label_preferences_options, CB2)));
  736. Insert(CB2);
  737. end;
  738. InsertButtons(D);
  739. if Desktop^.ExecView(D)=cmOK then
  740. begin
  741. if (C^.count>0) then
  742. begin
  743. with PVideoMode(C^.At(VMLB^.Focused))^ do
  744. begin
  745. VM.Col:=Col;
  746. VM.Row:=Row;
  747. VM.Color:=Color;
  748. end;
  749. if (VM.Col<>ScreenMode.Col) or (VM.Row<>ScreenMode.Row) or (VM.Color<>ScreenMode.Color) then
  750. Begin
  751. OldScreenMode:=ScreenMode;
  752. SetScreenVideoMode(VM);
  753. if (VM.Col<>ScreenMode.Col) or (VM.Row<>ScreenMode.Row) or (VM.Color<>ScreenMode.Color) then
  754. begin
  755. SetScreenVideoMode(OldScreenMode);
  756. ScreenModeInfo[1]:=VM.col;
  757. ScreenModeInfo[2]:=VM.row;
  758. ScreenModeInfo[3]:=byte(VM.color);
  759. ErrorBox(msg_cantsetscreenmode,@ScreenModeInfo);
  760. end;
  761. End;
  762. end;
  763. AutoSaveOptions:=CB1^.Value;
  764. MiscOptions:=CB2^.Value;
  765. DesktopLocation:=RB1^.Value;
  766. end;
  767. Dispose(D, Done);
  768. Dispose(C, Done);
  769. end;
  770. procedure TIDEApp.EditorOptions(Editor: PEditor);
  771. var D: PCenterDialog;
  772. R,R2,R3: TRect;
  773. CB: PCheckBoxes;
  774. ILTab,ILIdent: PIntegerLine;
  775. ExtIL,TabExtIL: PInputLine;
  776. TabSize,IndentSize: Integer;
  777. EFlags,EFValue: Longint;
  778. Title: string;
  779. begin
  780. if Editor=nil then
  781. begin
  782. TabSize:=DefaultTabSize; EFlags:=DefaultCodeEditorFlags;
  783. IndentSize:=DefaultIndentSize;
  784. Title:=dialog_defaulteditoroptions;
  785. end
  786. else
  787. begin
  788. TabSize:=Editor^.GetTabSize; EFlags:=Editor^.GetFlags;
  789. IndentSize:=Editor^.GetIndentSize;
  790. Title:=dialog_editoroptions;
  791. end;
  792. EFValue:=0;
  793. if (EFlags and efBackupFiles )<>0 then EFValue:=EFValue or (1 shl 0);
  794. if (EFlags and efInsertMode )<>0 then EFValue:=EFValue or (1 shl 1);
  795. if (EFlags and efAutoIndent )<>0 then EFValue:=EFValue or (1 shl 2);
  796. if (EFlags and efUseTabCharacters )<>0 then EFValue:=EFValue or (1 shl 3);
  797. if (EFlags and efBackSpaceUnindents)<>0 then EFValue:=EFValue or (1 shl 4);
  798. if (EFlags and efPersistentBlocks )<>0 then EFValue:=EFValue or (1 shl 5);
  799. if (EFlags and efSyntaxHighlight )<>0 then EFValue:=EFValue or (1 shl 6);
  800. if (EFlags and efBlockInsCursor )<>0 then EFValue:=EFValue or (1 shl 7);
  801. if (EFlags and efVerticalBlocks )<>0 then EFValue:=EFValue or (1 shl 8);
  802. if (EFlags and efHighlightColumn )<>0 then EFValue:=EFValue or (1 shl 9);
  803. if (EFlags and efHighlightRow )<>0 then EFValue:=EFValue or (1 shl 10);
  804. if (EFlags and efAutoBrackets )<>0 then EFValue:=EFValue or (1 shl 11);
  805. if (EFlags and efKeepTrailingSpaces)<>0 then EFValue:=EFValue or (1 shl 12);
  806. if (EFlags and efCodeComplete )<>0 then EFValue:=EFValue or (1 shl 13);
  807. if (EFlags and efFolds )<>0 then EFValue:=EFValue or (1 shl 14);
  808. R.Assign(0,0,66,20);
  809. New(D, Init(R, Title));
  810. with D^ do
  811. begin
  812. HelpCtx:=hcEditor;
  813. GetExtent(R); R.Grow(-2,-2); R.B.Y:=R.A.Y+9;
  814. R2.Copy(R); Inc(R2.A.Y);
  815. New(CB, Init(R2,
  816. NewSItem(label_editor_backupfiles,
  817. NewSItem(label_editor_insertmode,
  818. NewSItem(label_editor_autoindentmode,
  819. NewSItem(label_editor_usetabcharacters,
  820. NewSItem(label_editor_backspaceunindents,
  821. NewSItem(label_editor_persistentblocks,
  822. NewSItem(label_editor_syntaxhighlight,
  823. NewSItem(label_editor_blockinsertcursor,
  824. NewSItem(label_editor_verticalblocks,
  825. NewSItem(label_editor_highlightcolumn,
  826. NewSItem(label_editor_highlightrow,
  827. NewSItem(label_editor_autoclosingbrackets,
  828. NewSItem(label_editor_keeptrailingspaces,
  829. NewSItem(label_editor_codecomplete,
  830. NewSItem(label_editor_folds,
  831. nil)))))))))))))))));
  832. CB^.Value:=EFValue;
  833. Insert(CB);
  834. R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
  835. Insert(New(PLabel, Init(R2, label_editor_editoroptions, CB)));
  836. R.Move(0,(R.B.Y-R.A.Y)+1); R.B.Y:=R.A.Y+1;
  837. R2.Copy(R); Inc(R2.A.Y); R2.B.Y:=R2.A.Y;
  838. R3.Copy(R); Inc(R3.A.X,10); R3.B.X:=R3.A.X+5;
  839. New(ILTab, Init(R3, 0,100));
  840. ILTab^.Data^:=IntToStr(TabSize);
  841. Insert(ILTab);
  842. R3.Copy(R); R3.B.X:=R3.A.X+10;
  843. Insert(New(PLabel, Init(R3, label_editor_tabsize, ILTab)));
  844. R3.Copy(R); Inc(R3.A.X,40); R3.B.X:=R3.A.X+5;
  845. New(ILIdent, Init(R3, 0,100));
  846. ILIdent^.Data^:=IntToStr(IndentSize);
  847. Insert(ILIdent);
  848. R3.Copy(R); Inc(R3.A.X,28); R3.B.X:=R3.A.X+12;
  849. Insert(New(PLabel, Init(R3, label_editor_IndentSize, ILIdent)));
  850. R.Move(0,(R.B.Y-R.A.Y)+1); R.B.Y:=R.A.Y+2;
  851. R2.Copy(R); Inc(R2.A.Y);
  852. New(ExtIL, Init(R2, 128));
  853. ExtIL^.SetData(HighlightExts);
  854. Insert(ExtIL);
  855. R2.Move(0,-1);
  856. Insert(New(PLabel, Init(R2, label_editor_highlightextensions, ExtIL)));
  857. R.Move(0,(R.B.Y-R.A.Y)+1); R.B.Y:=R.A.Y+2;
  858. R2.Copy(R); Inc(R2.A.Y);
  859. New(TabExtIL, Init(R2, 128));
  860. TabExtIL^.SetData(TabsPattern);
  861. Insert(TabExtIL);
  862. R2.Move(0,-1);
  863. Insert(New(PLabel, Init(R2, label_editor_filepatternsneedingtabs, TabExtIL)));
  864. end;
  865. InsertButtons(D);
  866. CB^.Select;
  867. if Desktop^.ExecView(D)=cmOK then
  868. begin
  869. EFlags:=0;
  870. if (CB^.Value and (1 shl 0))<>0 then EFlags:=EFlags or efBackupFiles;
  871. if (CB^.Value and (1 shl 1))<>0 then EFlags:=EFlags or efInsertMode;
  872. if (CB^.Value and (1 shl 2))<>0 then EFlags:=EFlags or efAutoIndent;
  873. if (CB^.Value and (1 shl 3))<>0 then EFlags:=EFlags or efUseTabCharacters;
  874. if (CB^.Value and (1 shl 4))<>0 then EFlags:=EFlags or efBackSpaceUnindents;
  875. if (CB^.Value and (1 shl 5))<>0 then EFlags:=EFlags or efPersistentBlocks;
  876. if (CB^.Value and (1 shl 6))<>0 then EFlags:=EFlags or efSyntaxHighlight;
  877. if (CB^.Value and (1 shl 7))<>0 then EFlags:=EFlags or efBlockInsCursor;
  878. if (CB^.Value and (1 shl 8))<>0 then EFlags:=EFlags or efVerticalBlocks;
  879. if (CB^.Value and (1 shl 9))<>0 then EFlags:=EFlags or efHighlightColumn;
  880. if (CB^.Value and (1 shl 10))<>0 then EFlags:=EFlags or efHighlightRow;
  881. if (CB^.Value and (1 shl 11))<>0 then EFlags:=EFlags or efAutoBrackets;
  882. if (CB^.Value and (1 shl 12))<>0 then EFlags:=EFlags or efKeepTrailingSpaces;
  883. if (CB^.Value and (1 shl 13))<>0 then EFlags:=EFlags or efCodeComplete;
  884. if (CB^.Value and (1 shl 14))<>0 then EFlags:=EFlags or efFolds;
  885. TabSize:=StrToInt(ILTab^.Data^);
  886. IndentSize:=StrToInt(ILIdent^.Data^);
  887. if Editor=nil then
  888. begin
  889. DefaultTabSize:=TabSize;
  890. DefaultIndentSize:=IndentSize;
  891. DefaultCodeEditorFlags:=EFlags;
  892. end
  893. else
  894. begin
  895. Editor^.SetIndentSize(IndentSize);
  896. Editor^.SetTabSize(TabSize);
  897. Editor^.SetFlags(EFlags);
  898. end;
  899. ExtIL^.GetData(HighlightExts);
  900. TabExtIL^.GetData(TabsPattern);
  901. end;
  902. Dispose(D, Done);
  903. end;
  904. procedure TIDEApp.CodeComplete;
  905. var
  906. D : PCodeCompleteDialog;
  907. begin
  908. D:=New(PCodeCompleteDialog, Init);
  909. ExecuteDialog(D,nil);
  910. end;
  911. procedure TIDEApp.CodeTemplates;
  912. begin
  913. ExecuteDialog(New(PCodeTemplatesDialog, Init(false)),nil);
  914. end;
  915. procedure TIDEApp.BrowserOptions(Browser: PBrowserWindow);
  916. var D: PCenterDialog;
  917. R,R2,R3 : TRect;
  918. TitleS: string;
  919. CB1,CB2: PCheckBoxes;
  920. RB1,RB2: PRadioButtons;
  921. begin
  922. if Browser=nil then
  923. TitleS:=dialog_browseroptions
  924. else
  925. TitleS:=dialog_localbrowseroptions;
  926. R.Assign(0,0,56,15);
  927. New(D, Init(R, TitleS));
  928. with D^ do
  929. begin
  930. HelpCtx:=hcBrowser;
  931. GetExtent(R); R.Grow(-2,-2);
  932. R.B.Y:=R.A.Y+1+3; R2.Copy(R); Inc(R2.A.Y);
  933. New(CB1, Init(R2,
  934. NewSItem(RExpand(label_browser_labels,21+2),
  935. NewSItem(label_browser_constants,
  936. NewSItem(label_browser_types,
  937. NewSItem(label_browser_variables,
  938. NewSItem(label_browser_procedures,
  939. NewSItem(label_browser_inherited,
  940. nil)))))))
  941. );
  942. Insert(CB1);
  943. R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
  944. Insert(New(PLabel, Init(R2, label_browser_symbols, CB1)));
  945. R.Move(0,R.B.Y-R.A.Y+1);
  946. R.B.Y:=R.A.Y+1+2; R2.Copy(R);
  947. R3.Copy(R2); R3.B.X:=R3.A.X+(R3.B.X-R3.A.X) div 2-1; Inc(R3.A.Y);
  948. New(RB1, Init(R3,
  949. NewSItem(label_browser_newbrowser,
  950. NewSItem(label_browser_currentbrowser,
  951. nil)))
  952. );
  953. Insert(RB1);
  954. R3.Move(0,-1); R3.B.Y:=R3.A.Y+1;
  955. Insert(New(PLabel, Init(R3, label_browser_subbrowsing, RB1)));
  956. R3.Copy(R2); R3.A.X:=R3.B.X-(R3.B.X-R3.A.X) div 2+1; Inc(R3.A.Y);
  957. New(RB2, Init(R3,
  958. NewSItem(label_browser_scope,
  959. NewSItem(label_browser_reference,
  960. nil)))
  961. );
  962. Insert(RB2);
  963. R3.Move(0,-1); R3.B.Y:=R3.A.Y+1;
  964. Insert(New(PLabel, Init(R3, label_browser_preferredpane, RB2)));
  965. R.Move(0,R.B.Y-R.A.Y+1);
  966. R.B.Y:=R.A.Y+1+1; R2.Copy(R); Inc(R2.A.Y);
  967. New(CB2, Init(R2,
  968. NewSItem(RExpand(label_browser_qualifiedsymbols,21+2),
  969. NewSItem(label_browser_sortsymbols,
  970. nil)))
  971. );
  972. Insert(CB2);
  973. R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
  974. Insert(New(PLabel, Init(R2, label_browser_display, CB2)));
  975. end;
  976. InsertButtons(D);
  977. CB1^.Select;
  978. if Desktop^.ExecView(D)=cmOK then
  979. begin
  980. end;
  981. Dispose(D, Done);
  982. end;
  983. procedure TIDEApp.Startup;
  984. begin
  985. NotImplemented;
  986. end;
  987. procedure TIDEApp.DesktopOptions;
  988. var R: TRect;
  989. D: PCenterDialog;
  990. CB: PCheckBoxes;
  991. begin
  992. R.Assign(0,0,40,12);
  993. New(D, Init(R, dialog_desktoppreferences));
  994. with D^ do
  995. begin
  996. HelpCtx:=hcDesktopOptions;
  997. GetExtent(R); R.Grow(-2,-2); Inc(R.A.Y); R.B.Y:=R.A.Y+8;
  998. New(CB, Init(R,
  999. NewSItem(label_desktop_historylists,
  1000. NewSItem(label_desktop_clipboard,
  1001. NewSItem(label_desktop_watches,
  1002. NewSItem(label_desktop_breakpoints,
  1003. NewSItem(label_desktop_openwindow,
  1004. NewSItem(label_desktop_symbolinfo,
  1005. NewSItem(label_desktop_codecompletewords,
  1006. NewSItem(label_desktop_codetemplates,
  1007. nil))))))))));
  1008. CB^.Value:=DesktopFileFlags;
  1009. Insert(CB);
  1010. R.Move(0,-1); R.B.Y:=R.A.Y+1;
  1011. Insert(New(PLabel, Init(R, label_desktop_preservedacrosssessions, CB)));
  1012. end;
  1013. InsertButtons(D);
  1014. CB^.Select;
  1015. if Desktop^.ExecView(D)=cmOK then
  1016. begin
  1017. DesktopFileFlags:=CB^.Value;
  1018. end;
  1019. Dispose(D, Done);
  1020. end;
  1021. procedure TIDEApp.Mouse;
  1022. var R,R2: TRect;
  1023. D: PCenterDialog;
  1024. SB: PScrollBar;
  1025. CB: PCheckBoxes;
  1026. RB1,RB2: PRadioButtons;
  1027. begin
  1028. R.Assign(0,0,62,15);
  1029. New(D, Init(R, dialog_mouseoptions));
  1030. with D^ do
  1031. begin
  1032. HelpCtx:=hcMouse;
  1033. GetExtent(R); R.Grow(-3,-2); R.B.Y:=R.A.Y+3;
  1034. R2.Copy(R); Inc(R2.A.Y,2); R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2 -1;
  1035. New(SB, Init(R2)); SB^.GrowMode:=0; SB^.Options:=SB^.Options or ofSelectable;
  1036. SB^.SetParams(DoubleDelay,1,20,1,1);
  1037. Insert(SB);
  1038. R2.Move(0,-1);
  1039. Insert(New(PStaticText, Init(R2, label_mouse_speedbar)));
  1040. R2.Move(-1,-1);
  1041. Insert(New(PLabel, Init(R2, label_mouse_doubleclickspeed, SB)));
  1042. R2.Copy(R); Inc(R2.A.Y,2); R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2 +1;
  1043. New(CB, Init(R2, NewSItem(label_mouse_reversebuttons, nil) ));
  1044. if MouseReverse then CB^.Press(0);
  1045. Insert(CB);
  1046. R.Move(0,(R.B.Y-R.A.Y)+1); R.B.Y:=R.A.Y+8;
  1047. R2.Copy(R); Inc(R2.A.Y); R2.B.X:=R2.A.X+(R2.B.X-R2.A.X) div 2 -1;
  1048. New(RB1, Init(R2,
  1049. NewSItem(label_mouse_act_nothing,
  1050. NewSItem(label_mouse_act_topicsearch,
  1051. NewSItem(label_mouse_act_gotocursor,
  1052. NewSItem(label_mouse_act_breakpoint,
  1053. NewSItem(label_mouse_act_evaluate,
  1054. NewSItem(label_mouse_act_addwatch,
  1055. NewSItem(label_mouse_act_browsesymbol,
  1056. nil)))))))));
  1057. RB1^.Press(CtrlMouseAction);
  1058. Insert(RB1);
  1059. R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
  1060. Insert(New(PLabel, Init(R2, label_mouse_crtlrightmousebuttonaction, RB1)));
  1061. R2.Copy(R); Inc(R2.A.Y); R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2 +1;
  1062. New(RB2, Init(R2,
  1063. NewSItem(label_mouse_act_nothing,
  1064. NewSItem(label_mouse_act_topicsearch,
  1065. NewSItem(label_mouse_act_gotocursor,
  1066. NewSItem(label_mouse_act_breakpoint,
  1067. NewSItem(label_mouse_act_evaluate,
  1068. NewSItem(label_mouse_act_addwatch,
  1069. NewSItem(label_mouse_act_browsesymbol,
  1070. nil)))))))));
  1071. RB2^.Press(AltMouseAction);
  1072. Insert(RB2);
  1073. R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
  1074. Insert(New(PLabel, Init(R2, label_mouse_altrightmousebuttonaction, RB2)));
  1075. end;
  1076. InsertButtons(D);
  1077. RB1^.Select;
  1078. if Desktop^.ExecView(D)=cmOK then
  1079. begin
  1080. MouseReverse:=CB^.Mark(0);
  1081. DoubleDelay:=SB^.Value;
  1082. CtrlMouseAction:=RB1^.Value;
  1083. AltMouseAction:=RB2^.Value;
  1084. end;
  1085. Dispose(D, Done);
  1086. end;
  1087. procedure TIDEApp.Colors;
  1088. {$Ifdef FVISION}
  1089. begin
  1090. end;
  1091. {$else FVISION}
  1092. var D: PColorDialog;
  1093. begin
  1094. New(D, Init(AppPalette,
  1095. ColorGroup(label_colors_grp_browser,
  1096. ColorItem(label_colors_framepassive , 215,
  1097. ColorItem(label_colors_frameactive , 216,
  1098. ColorItem(label_colors_frameicon , 217,
  1099. ColorItem(label_colors_scrollbarpage , 218,
  1100. ColorItem(label_colors_scrollbaricons , 219,
  1101. ColorItem(label_colors_normaltext , 220,
  1102. ColorItem(label_colors_selectedtext , 221,
  1103. ColorItem(label_colors_activeitem , 222,
  1104. ColorItem(label_colors_inactiveitem , 223,
  1105. ColorItem(label_colors_focuseditem , 224,
  1106. ColorItem(label_colors_selecteditem , 225,
  1107. ColorItem(label_colors_divider , 226,
  1108. nil)))))))))))),
  1109. ColorGroup(label_colors_grp_clock,
  1110. ColorItem(label_colors_clockview , 227,
  1111. nil),
  1112. ColorGroup(label_colors_grp_desktop, DesktopColorItems(nil),
  1113. ColorGroup(label_colors_grp_dialogs, DialogColorItems(dpGrayDialog,nil),
  1114. ColorGroup(label_colors_grp_editor,
  1115. ColorItem(label_colors_framepassive , 167,
  1116. ColorItem(label_colors_frameactive , 168,
  1117. ColorItem(label_colors_frameicon , 169,
  1118. ColorItem(label_colors_scrollbarpage , 170,
  1119. ColorItem(label_colors_scrollbaricons , 171,
  1120. ColorItem(label_colors_normaltext , 199,
  1121. ColorItem(label_colors_selectedtext , 208,
  1122. ColorItem(label_colors_highlighcolumn , 209,
  1123. ColorItem(label_colors_highlightrow , 210,
  1124. ColorItem(label_colors_errormessages , 214,
  1125. nil)))))))))),
  1126. ColorGroup(label_colors_grp_help,
  1127. ColorItem(label_colors_framepassive , 128,
  1128. ColorItem(label_colors_frameactive , 129,
  1129. ColorItem(label_colors_frameicon , 130,
  1130. ColorItem(label_colors_scrollbarpage , 131,
  1131. ColorItem(label_colors_scrollbaricons , 132,
  1132. ColorItem(label_colors_helptext , 160,
  1133. ColorItem(label_colors_helplinks , 161,
  1134. ColorItem(label_colors_selectedlink , 162,
  1135. ColorItem(label_colors_selectedtext , 163,
  1136. ColorItem(label_colors_html_heading1 , 229,
  1137. ColorItem(label_colors_html_heading2 , 230,
  1138. ColorItem(label_colors_html_heading3 , 231,
  1139. ColorItem(label_colors_html_heading4 , 232,
  1140. ColorItem(label_colors_html_heading5 , 233,
  1141. ColorItem(label_colors_html_heading6 , 234,
  1142. nil))))))))))))))),
  1143. ColorGroup(label_colors_grp_menus, MenuColorItems(nil),
  1144. ColorGroup(label_colors_grp_syntax,
  1145. ColorItem(label_colors_whitespace , 200,
  1146. ColorItem(label_colors_comments , 201,
  1147. ColorItem(label_colors_reservedwords , 202,
  1148. ColorItem(label_colors_identifiers , 203,
  1149. ColorItem(label_colors_strings , 204,
  1150. ColorItem(label_colors_numbers , 205,
  1151. ColorItem(label_colors_hexnumbers , 212,
  1152. ColorItem(label_colors_assembler , 206,
  1153. ColorItem(label_colors_symbols , 207,
  1154. ColorItem(label_colors_directives , 211,
  1155. ColorItem(label_colors_tabs , 213,
  1156. nil))))))))))),
  1157. nil))))))))));
  1158. D^.HelpCtx:=hcColors;
  1159. if ExecuteDialog(D, @AppPalette)=cmOK then
  1160. begin
  1161. DoneMemory;
  1162. Message(Application,evBroadcast,cmUpdate,nil);
  1163. ReDraw;
  1164. UpdateScreen(true);
  1165. end;
  1166. end;
  1167. {$endif FVISION}
  1168. procedure TIDEApp.OpenINI;
  1169. var D: PFileDialog;
  1170. FileName: string;
  1171. begin
  1172. New(D, Init('*'+ExtOf(INIFileName),dialog_openoptions,dialog_ini_filename,fdOpenButton,hidOpenIniFile));
  1173. D^.HelpCtx:=hcOpenIni;
  1174. if Desktop^.ExecView(D)<>cmCancel then
  1175. begin
  1176. D^.GetFileName(FileName);
  1177. if ExistsFile(FileName)=false then ErrorBox(msg_cantopenconfigfile,nil) else
  1178. begin
  1179. IniFileName:=FileName;
  1180. ReadINIFile;
  1181. Message(Application,evBroadcast,cmUpdate,nil);
  1182. end;
  1183. end;
  1184. Dispose(D, Done);
  1185. end;
  1186. procedure TIDEApp.SaveINI;
  1187. begin
  1188. if WriteINIFile(false)=false then
  1189. ErrorBox(msg_errorsavingconfigfile,nil);
  1190. end;
  1191. procedure TIDEApp.SaveAsINI;
  1192. var D: PFileDialog;
  1193. FileName: string;
  1194. CanWrite: boolean;
  1195. begin
  1196. New(D, Init('*'+ExtOf(INIFileName),dialog_saveoptions,dialog_ini_filename,fdOpenButton,hidSaveIniFile));
  1197. D^.HelpCtx:=hcSaveAsINI;
  1198. if Desktop^.ExecView(D)<>cmCancel then
  1199. begin
  1200. D^.GetFileName(FileName);
  1201. CanWrite:=(ExistsFile(FileName)=false);
  1202. if CanWrite=false then
  1203. CanWrite:=ConfirmBox(FormatStrStr(msg_filealreadyexistsoverwrite,SmartPath(FileName)),nil,false)=cmYes;
  1204. if CanWrite then
  1205. begin
  1206. IniFileName:=FileName;
  1207. if WriteINIFile(true)=false then
  1208. ErrorBox(msg_errorsavingconfigfile,nil);
  1209. Message(Application,evBroadcast,cmUpdate,nil);
  1210. end;
  1211. end;
  1212. Dispose(D, Done);
  1213. end;
  1214. {
  1215. $Log$
  1216. Revision 1.5 2001-11-09 11:14:40 pierre
  1217. * fix the bug about smaller optimization not recorded
  1218. Revision 1.4 2001/10/12 14:21:47 pierre
  1219. + show error if switch to new screen mode failed
  1220. Revision 1.3 2001/10/11 11:35:53 pierre
  1221. * adapt to new video unit layout
  1222. Revision 1.2 2001/08/05 12:23:00 peter
  1223. * Automatically support for fvision or old fv
  1224. Revision 1.1 2001/08/04 11:30:23 peter
  1225. * ide works now with both compiler versions
  1226. Revision 1.1.2.11 2001/08/02 14:20:40 pierre
  1227. * avoid a crash if no video mode is registered
  1228. Revision 1.1.2.10 2001/02/13 11:48:26 pierre
  1229. + Strip debug nifo switch added
  1230. Revision 1.1.2.9 2000/12/20 14:27:49 pierre
  1231. * fp.ini for unix
  1232. Revision 1.1.2.8 2000/11/27 12:06:49 pierre
  1233. New bunch of Gabor fixes
  1234. Revision 1.1.2.7 2000/11/23 16:33:31 pierre
  1235. * fix Alt-X problem and set HelpCtx for most dialogs
  1236. Revision 1.1.2.6 2000/11/14 17:40:43 pierre
  1237. + External linking now optional
  1238. Revision 1.1.2.5 2000/11/14 09:40:35 marco
  1239. * Third batch renamefest
  1240. Revision 1.1.2.4 2000/10/18 21:53:27 pierre
  1241. * several Gabor fixes
  1242. Revision 1.1.2.3 2000/09/18 13:20:54 pierre
  1243. New bunch of Gabor changes
  1244. Revision 1.1.2.2 2000/08/04 14:05:18 michael
  1245. * Fixes from Gabor:
  1246. [*] the IDE now doesn't disable Compile|Make & Build when all windows
  1247. are closed, but there's still a primary file set
  1248. (set bug 1059 to fixed!)
  1249. [*] the IDE didn't read some compiler options correctly back from the
  1250. FP.CFG file, for ex. the linker options. Now it read everything
  1251. correctly, and also automatically handles smartlinking option synch-
  1252. ronization.
  1253. (set bug 1048 to fixed!)
  1254. Revision 1.1.2.1 2000/07/15 21:02:08 pierre
  1255. * Target is Mode dependent
  1256. Revision 1.1 2000/07/13 09:48:35 michael
  1257. + Initial import
  1258. Revision 1.35 2000/06/16 08:50:41 pierre
  1259. + new bunch of Gabor's changes
  1260. Revision 1.34 2000/05/30 07:18:33 pierre
  1261. + colors for HTML help by Gabor
  1262. Revision 1.33 2000/05/02 08:42:28 pierre
  1263. * new set of Gabor changes: see fixes.txt
  1264. Revision 1.32 2000/04/25 08:42:33 pierre
  1265. * New Gabor changes : see fixes.txt
  1266. Revision 1.31 2000/03/21 23:28:13 pierre
  1267. adapted to wcedit addition by Gabor
  1268. Revision 1.30 2000/03/13 20:34:07 pierre
  1269. * IniPath removed
  1270. Revision 1.29 2000/03/07 22:52:50 pierre
  1271. + Assembler tab in Options|Compiler
  1272. Revision 1.28 2000/02/07 12:02:32 pierre
  1273. Gabor's changes
  1274. Revision 1.27 1999/11/10 17:18:17 pierre
  1275. + new console for Win32 or other tty for linux
  1276. Revision 1.26 1999/10/14 10:22:50 pierre
  1277. + color selection for ClockView
  1278. Revision 1.25 1999/08/16 18:25:21 peter
  1279. * Adjusting the selection when the editor didn't contain any line.
  1280. * Reserved word recognition redesigned, but this didn't affect the overall
  1281. syntax highlight speed remarkably (at least not on my Amd-K6/350).
  1282. The syntax scanner loop is a bit slow but the main problem is the
  1283. recognition of special symbols. Switching off symbol processing boosts
  1284. the performance up to ca. 200%...
  1285. * The editor didn't allow copying (for ex to clipboard) of a single character
  1286. * 'File|Save as' caused permanently run-time error 3. Not any more now...
  1287. * Compiler Messages window (actually the whole desktop) did not act on any
  1288. keypress when compilation failed and thus the window remained visible
  1289. + Message windows are now closed upon pressing Esc
  1290. + At 'Run' the IDE checks whether any sources are modified, and recompiles
  1291. only when neccessary
  1292. + BlockRead and BlockWrite (Ctrl+K+R/W) implemented in TCodeEditor
  1293. + LineSelect (Ctrl+K+L) implemented
  1294. * The IDE had problems closing help windows before saving the desktop
  1295. Revision 1.24 1999/03/23 16:16:40 peter
  1296. * linux fixes
  1297. Revision 1.23 1999/03/23 15:11:33 peter
  1298. * desktop saving things
  1299. * vesa mode
  1300. * preferences dialog
  1301. Revision 1.22 1999/03/21 22:51:36 florian
  1302. + functional screen mode switching added
  1303. Revision 1.21 1999/03/16 12:38:12 peter
  1304. * tools macro fixes
  1305. + tph writer
  1306. + first things for resource files
  1307. Revision 1.20 1999/03/14 22:18:16 florian
  1308. + options/preferences dialog added, without function yet
  1309. Revision 1.19 1999/03/12 01:14:00 peter
  1310. * flag if trytoopen should look for other extensions
  1311. + browser tab in the tools-compiler
  1312. Revision 1.18 1999/03/01 15:41:57 peter
  1313. + Added dummy entries for functions not yet implemented
  1314. * MenuBar didn't update itself automatically on command-set changes
  1315. * Fixed Debugging/Profiling options dialog
  1316. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  1317. set
  1318. * efBackSpaceUnindents works correctly
  1319. + 'Messages' window implemented
  1320. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  1321. + Added TP message-filter support (for ex. you can call GREP thru
  1322. GREP2MSG and view the result in the messages window - just like in TP)
  1323. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  1324. so topic search didn't work...
  1325. * In FPHELP.PAS there were still context-variables defined as word instead
  1326. of THelpCtx
  1327. * StdStatusKeys() was missing from the statusdef for help windows
  1328. + Topic-title for index-table can be specified when adding a HTML-files
  1329. Revision 1.17 1999/02/22 11:51:37 peter
  1330. * browser updates from gabor
  1331. Revision 1.16 1999/02/18 13:44:32 peter
  1332. * search fixed
  1333. + backward search
  1334. * help fixes
  1335. * browser updates
  1336. Revision 1.15 1999/02/16 17:15:28 pierre
  1337. * Peter's debug code commented
  1338. Revision 1.14 1999/02/16 10:43:56 peter
  1339. * use -dGDB for the compiler
  1340. * only use gdb_file when -dDEBUG is used
  1341. * profiler switch is now a toggle instead of radiobutton
  1342. Revision 1.13 1999/02/10 09:52:43 pierre
  1343. * MemorySizeSwitches -> MemorySwitches (were duplicates)
  1344. Revision 1.12 1999/02/08 17:41:34 pierre
  1345. + CustomArg added to debug dialog
  1346. Revision 1.11 1999/02/08 10:37:45 peter
  1347. + html helpviewer
  1348. Revision 1.10 1999/02/06 00:07:47 florian
  1349. * speed/size optimization is now a radio button
  1350. Revision 1.9 1999/02/05 12:11:58 pierre
  1351. + SourceDir that stores directories for sources that the
  1352. compiler should not know about
  1353. Automatically asked for addition when a new file that
  1354. needed filedialog to be found is in an unknown directory
  1355. Stored and retrieved from INIFile
  1356. + Breakpoints conditions added to INIFile
  1357. * Breakpoints insterted and removed at debin and end of debug session
  1358. Revision 1.8 1999/02/04 13:32:06 pierre
  1359. * Several things added (I cannot commit them independently !)
  1360. + added TBreakpoint and TBreakpointCollection
  1361. + added cmResetDebugger,cmGrep,CmToggleBreakpoint
  1362. + Breakpoint list in INIFile
  1363. * Select items now also depend of SwitchMode
  1364. * Reading of option '-g' was not possible !
  1365. + added search for -Fu args pathes in TryToOpen
  1366. + added code for automatic opening of FileDialog
  1367. if source not found
  1368. Revision 1.7 1999/01/22 10:24:04 peter
  1369. * first debugger things
  1370. Revision 1.6 1999/01/21 11:54:19 peter
  1371. + tools menu
  1372. + speedsearch in symbolbrowser
  1373. * working run command
  1374. Revision 1.5 1999/01/12 14:29:35 peter
  1375. + Implemented still missing 'switch' entries in Options menu
  1376. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  1377. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  1378. ASCII chars and inserted directly in the text.
  1379. + Added symbol browser
  1380. * splitted fp.pas to fpide.pas
  1381. Revision 1.4 1999/01/04 11:49:47 peter
  1382. * 'Use tab characters' now works correctly
  1383. + Syntax highlight now acts on File|Save As...
  1384. + Added a new class to syntax highlight: 'hex numbers'.
  1385. * There was something very wrong with the palette managment. Now fixed.
  1386. + Added output directory (-FE<xxx>) support to 'Directories' dialog...
  1387. * Fixed some possible bugs in Running/Compiling, and the compilation/run
  1388. process revised
  1389. Revision 1.2 1998/12/28 15:47:49 peter
  1390. + Added user screen support, display & window
  1391. + Implemented Editor,Mouse Options dialog
  1392. + Added location of .INI and .CFG file
  1393. + Option (INI) file managment implemented (see bottom of Options Menu)
  1394. + Switches updated
  1395. + Run program
  1396. Revision 1.1 1998/12/22 14:27:54 peter
  1397. * moved
  1398. Revision 1.3 1998/12/22 10:39:48 peter
  1399. + Switches are now written/read
  1400. + find and replace routines
  1401. }