more Textmode ide patches

1) Options->Compiler->Assembler assembler output options has not bees working properly   (asm_output_options_ide.patch)

2) make available Assembler reader options for x86_64 (asm_reader_options_x86_64_ide.patch)

3) make asm output options for x86_64 look like they do for i386 (asm_output_options_strings_ide_v2.patch)
missing strings not implemented

4) video have to be "done" same way as it was initialized  (udrivers_doneenhancedvideo_fpc331.patch)

5) In linux solves problem when Ide have weird visual glitches (if fp.ans is present and opening / closing menu leaves trails behind) (legacy_video_refresh_unix_fpc331_v2.patch)
 
diff -ru u/packages/ide/fpswitch.pas v/packages/ide/fpswitch.pas
--- u/packages/ide/fpswitch.pas	2024-06-06 08:28:00.074662000 +0000
+++ v/packages/ide/fpswitch.pas	2024-06-07 22:12:56.278957000 +0000
@@ -1145,7 +1150,7 @@
            st:='Asm '+asminfos[ta]^.idtxt;
            if asminfos[ta]^.idtxt='AS' then
              st:=opt_usegnuas;
-{$ifdef I386}
+{$if defined(i386) or defined(x86_64)}
            if asminfos[ta]^.idtxt='NASMCOFF' then
              st:=opt_usenasmcoff;
            if asminfos[ta]^.idtxt='NASMOBJ' then
@@ -1172,7 +1177,7 @@
              st:=opt_usepecoffwdosx;
            if asminfos[ta]^.idtxt='ELF' then
              st:=opt_useelf;
-{$endif I386}
+{$endif defined(i386) or defined(x86_64)}
            AddSelectItem(st,asminfos[ta]^.idtxt,idNone);
          end;
    end;
diff -ru a/packages/rtl-console/src/unix/video.pp b/packages/rtl-console/src/unix/video.pp
--- a/packages/rtl-console/src/unix/video.pp	2024-05-30 23:04:11.000000000 +0000
+++ b/packages/rtl-console/src/unix/video.pp	2024-06-07 21:18:14.423422423 +0000
@@ -1233,8 +1233,14 @@
   else
 {$endif}
     updateTTY(force);
-  for I := Low(EnhancedVideoBuf) to High(EnhancedVideoBuf) do
-    OldEnhancedVideoBuf[I] := EnhancedVideoBuf[I];
+  if VideoInitialized then
+  begin
+    move(VideoBuf^,OldVideoBuf^,VideoBufSize);
+  end else
+  begin
+    for I := Low(EnhancedVideoBuf) to High(EnhancedVideoBuf) do
+      OldEnhancedVideoBuf[I] := EnhancedVideoBuf[I];
+  end;
 end;
 
 
diff -ru u/packages/fv/src/drivers.inc v/packages/fv/src/drivers.inc
--- u/packages/fv/src/drivers.inc	2024-05-30 23:04:11.000000000 +0000
+++ v/packages/fv/src/drivers.inc	2024-06-07 15:14:20.627191205 +0000
@@ -1614,7 +1614,11 @@
   {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.SetVideoMode(StartupScreenMode);
   {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.ClearScreen;
   {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.SetCursorPos(0,0);
+{$ifdef FV_UNICODE}
+  {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.DoneEnhancedVideo;
+{$else FV_UNICODE}
   {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.DoneVideo;
+{$endif FV_UNICODE}
   VideoInitialized:=false;
 END;
 
diff -ru a/packages/ide/fpmcomp.inc b/packages/ide/fpmcomp.inc
--- a/packages/ide/fpmcomp.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/packages/ide/fpmcomp.inc	2024-06-06 02:15:11.738646000 +0000
@@ -50,6 +50,7 @@
        if L<>RB^.Value then
          PrevMainFile:='';
        UpdateTarget;
+       UpdateAsmOutputSwitches;
     end;
   Dispose(D, Done);
 end;
diff -ru a/packages/ide/fpmopts.inc b/packages/ide/fpmopts.inc
--- a/packages/ide/fpmopts.inc	2021-05-15 18:38:31.000000000 +0000
+++ b/packages/ide/fpmopts.inc	2024-06-06 02:37:15.185815000 +0000
@@ -255,17 +255,17 @@
     R2.B.Y:=R2.A.Y+1;
     New(Label52, Init(R2, label_compiler_assemblerinfo, CB5));
 
-    Count:=AsmOutputSwitches^.ItemCount;
+    UpdateAsmOutputSwitches;
+    Count:=AsmOutputSwitches[SwitchesMode]^.ItemCount;
     R2.Copy(TabIR);
     R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2;
     Dec(R2.B.X,4);
     R2.B.Y:=R2.A.Y+Count;
     Items:=nil;
-    UpdateAsmOutputSwitches;
     for I:=Count-1 downto 0 do
-      Items:=NewSItem(AsmOutputSwitches^.ItemName(I), Items);
+      Items:=NewSItem(AsmOutputSwitches[SwitchesMode]^.ItemName(I), Items);
     New(RB6, Init(R2, Items));
-    L:=AsmOutputSwitches^.GetCurrSel;
+    L:=AsmOutputSwitches[SwitchesMode]^.GetCurrSel;
     RB6^.SetData(L);
     Dec(R2.A.Y);
     R2.B.Y:=R2.A.Y+1;
@@ -348,7 +348,7 @@
     AsmReaderSwitches^.SetCurrSel(RB5^.Value);
     for I:=0 to AsmInfoSwitches^.ItemCount-1 do
       AsmInfoSwitches^.SetBooleanItem(I,CB5^.Mark(I));
-    AsmOutputSwitches^.SetCurrSel(RB6^.Value);
+    AsmOutputSwitches[SwitchesMode]^.SetCurrSel(RB6^.Value);
     BrowserSwitches^.SetCurrSel(RB4^.Value);
     ConditionalSwitches^.SetStringItem(0,IL^.Data^);
     CustomArg[SwitchesMode]:=IL2^.Data^;
@@ -464,11 +464,11 @@
     OtherLinkerSwitches^.SetBooleanItem(1,CB2^.Mark(0));
     if LibLinkerSwitches^.GetCurrSelParam='X' then
      if CompareText(TargetSwitches^.GetCurrSelParam,'Windows')=0 then
-      if CompareText(AsmOutputSwitches^.GetCurrSelParam,'pecoff')<>0 then
+      if CompareText(AsmOutputSwitches[SwitchesMode]^.GetCurrSelParam,'pecoff')<>0 then
         if ConfirmBox(
           FormatStrStr3(msg_xmustbesettoyforz_doyouwanttochangethis,
            label_compiler_assembleroutput,'pecoff','smartlinking'),nil,false)=cmYes then
-             AsmOutputSwitches^.SetCurrSelParam('pecoff');
+             AsmOutputSwitches[SwitchesMode]^.SetCurrSelParam('pecoff');
     for I:=0 to LinkAfterSwitches^.ItemCount-1 do
       LinkAfterSwitches^.SetBooleanItem(I,CB^.Mark(I));
   end;
diff -ru a/packages/ide/fpswitch.pas b/packages/ide/fpswitch.pas
--- a/packages/ide/fpswitch.pas	2021-05-15 18:38:31.000000000 +0000
+++ b/packages/ide/fpswitch.pas	2024-06-06 08:28:00.074662000 +0000
@@ -173,13 +173,15 @@
     ProcessorOptimizationSwitches,
     AsmReaderSwitches,
     AsmInfoSwitches,
-    AsmOutputSwitches,
     TargetSwitches,
     ConditionalSwitches,
     MemorySwitches,
     BrowserSwitches,
     DirectorySwitches : PSwitches;
 
+    {Every mode can have different target, thus have its own AsmOutput}
+    AsmOutputSwitches: array [TSwitchMode] of PSwitches;
+
 { write/read the Switches to fpc.cfg file }
 procedure WriteSwitches(const fn:string);
 procedure ReadSwitches(const fn:string);
@@ -961,7 +963,8 @@
      ProcessorOptimizationSwitches^.WriteItemsCfg;
      AsmReaderSwitches^.WriteItemsCfg;
      AsmInfoSwitches^.WriteItemsCfg;
-     AsmOutputSwitches^.WriteItemsCfg;
+     if assigned(AsmOutputSwitches[SwitchesMode]) then
+       AsmOutputSwitches[SwitchesMode]^.WriteItemsCfg;
      DirectorySwitches^.WriteItemsCfg;
      MemorySwitches^.WriteItemsCfg;
      ConditionalSwitches^.WriteItemsCfg;
@@ -988,6 +991,7 @@
   res : boolean;
   OldSwitchesMode,i : TSwitchMode;
 begin
+
   assign(CfgFile,fn);
   {$I-}
    reset(CfgFile);
@@ -1010,7 +1014,10 @@
       Delete(s,1,2);
       case c of
        'a' : res:=AsmInfoSwitches^.ReadItemsCfg(s);
-       'A' : res:=AsmOutputSwitches^.ReadItemsCfg(s);
+       'A' : begin
+               UpdateAsmOutputSwitches;
+               res:=AsmOutputSwitches[SwitchesMode]^.ReadItemsCfg(s);
+             end;
        'b' : res:=BrowserSwitches^.ReadItemsCfg(s);
        'C' : begin
                res:=CodegenSwitches^.ReadItemsCfg(s);
@@ -1095,18 +1102,44 @@
 procedure UpdateAsmOutputSwitches;
 var
   ta : tasm;
+  zt : tsystem;
+  sy : tsystem;
+  sw : TSwitchMode;
   st : string;
+  L : String;
+  t : string;
 begin
-  if assigned(AsmOutputSwitches) then
-    dispose(AsmOutputSwitches,Done);
-  New(AsmOutputSwitches,InitSelect('A'));
-  with AsmOutputSwitches^ do
+  sw:=SwitchesMode;
+  t:='';
+  if assigned(TargetSwitches) then
+    t:=TargetSwitches^.ItemName(TargetSwitches^.GetCurrSel);
+
+  sy:=target_info.system;
+  for zt:=low(tsystem) to high(tsystem) do
+    if assigned(targetinfos[zt]) then
+    begin
+      if targetinfos[zt]^.name = t then
+      begin
+        sy:=zt;
+        break;
+      end;
+    end;
+
+  L:='';
+  if assigned(AsmOutputSwitches[sw]) then
+  begin
+    L:=AsmOutputSwitches[sw]^.GetCurrSelParam;
+    dispose(AsmOutputSwitches[sw],Done);
+  end;
+
+  New(AsmOutputSwitches[sw],InitSelect('A'));
+  with AsmOutputSwitches[sw]^ do
    begin
 
      AddDefaultSelect(opt_usedefaultas);
      for ta:=low(tasm) to high(tasm) do
        if assigned(asminfos[ta]) and
-         ((target_info.system in asminfos[ta]^.supported_targets) or
+         ((sy in asminfos[ta]^.supported_targets) or
          (system_any in asminfos[ta]^.supported_targets)) then
          begin
            st:='Asm '+asminfos[ta]^.idtxt;
@@ -1143,6 +1176,7 @@
            AddSelectItem(st,asminfos[ta]^.idtxt,idNone);
          end;
    end;
+   AsmOutputSwitches[sw]^.SetCurrSelParam(L);
 end;
 
 {*****************************************************************************
@@ -1471,7 +1505,7 @@
 end;
 
 procedure DoneSwitches;
-
+var sw : TSwitchMode;
 begin
   dispose(SyntaxSwitches,Done);
   dispose(CompilerModeSwitches,Done);
@@ -1483,7 +1517,6 @@
   dispose(BrowserSwitches,Done);
   dispose(TargetSwitches,Done);
   dispose(AsmReaderSwitches,Done);
-  dispose(AsmOutputSwitches,Done);
   dispose(AsmInfoSwitches,Done);
   dispose(ConditionalSwitches,Done);
   dispose(MemorySwitches,Done);
@@ -1494,6 +1527,9 @@
   dispose(LinkAfterSwitches,Done);
   dispose(OtherLinkerSwitches,Done);
   dispose(ProfileInfoSwitches,Done);
+  for sw:=low(TSwitchMode) to high(TSwitchMode) do
+    if assigned(AsmOutputSwitches[sw]) then
+      dispose(AsmOutputSwitches[sw],Done);
 end;
 
 procedure GetCompilerOptionLines(C: PUnsortedStringCollection);
@@ -1570,7 +1606,7 @@
   EnumSwitches(ProcessorCodeGenerationSwitches);
   EnumSwitches(AsmReaderSwitches);
   EnumSwitches(AsmInfoSwitches);
-  EnumSwitches(AsmOutputSwitches);
+  EnumSwitches(AsmOutputSwitches[SM]);
   EnumSwitches(TargetSwitches);
   EnumSwitches(ConditionalSwitches);
   EnumSwitches(MemorySwitches);
diff -ru u/packages/ide/fpswitch.pas v/packages/ide/fpswitch.pas
--- u/packages/ide/fpswitch.pas	2024-06-06 08:28:00.074662000 +0000
+++ v/packages/ide/fpswitch.pas	2024-06-06 09:03:30.961527000 +0000
@@ -1340,6 +1340,11 @@
      AddSelectItem(opt_attassembler,'att',idAsmATT);
      AddSelectItem(opt_intelassembler,'intel',idAsmIntel);
 {$endif I386}
+{$ifdef x86_64}
+     AddSelectItem(opt_defaultassembler,'default',idNone);
+     AddSelectItem(opt_attassembler,'att',idAsmATT);
+     AddSelectItem(opt_intelassembler,'intel',idAsmIntel);
+{$endif x86_64}
 {$ifdef M68K}
      AddSelectItem(opt_defaultassembler,'default',idNone);
      //AddSelectItem(opt_standardassembler,'standard',idAsmStandard);
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to