"harter"-Tab im PB-Editor

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

"harter"-Tab im PB-Editor

Beitrag von 7x7 »

Angeregt durch diesen Thread Befehl über mehrere Zeilen würde mich interessieren, ob es einen ähnlichen "Workaround" gibt, der verhindert, dass die Formatierfunktion im Editor mir bestimmte Code-Strukturen zerstört.

Ich möchte, dass mir eine -wie z.B.untenstehende- Assembler-Strukture nicht wieder an den Rand gesetzt wird. Ich bräuchte also so etwas wie einen "harten" Tab. Weiss da jemand ein Lösung dazu?

Code: Alles auswählen

;If adresse(weg)\z[1] > adresse(index(CoIdx))\z[1]
MOV eax,dword[p_y]
MOV ebx,dword[p_z]
MOV ecx,dword[eax]			;alter Weg
CMP ecx,dword[ebx]			;neuer Weg
JLE  @f						 

	 ;If k1(adresse(weg)\z[1]-1)<#MaxCount: Goto weiter2: EndIf
	 DEC  ecx					;adresse(weg)\z[1] -1
	 SAL  ecx,2
	 ADD  ecx,dword[a_K1]
	 CMP  dword[ecx],#MaxCount	;vorherige 1.Para zu selten?
	 JL   l_weiter2
!@@:


;--------
MaxCheck:
MOV  ecx,dword[a_K1]
CMP  dword[ecx+9*4],5	;Grenzwert Loc1
JNZ @f	

	 ;If adresse(weg)\z[2]=9: weg=Sprung2(weg): Goto weiter4: EndIf
	 MOV  eax,dword[p_y]		;@adresse(weg)\z[1]
	 CMP  dword[eax+4],9		; adresse(weg)\z[2]
	 JNZ  @f

		   MOV  ebx,dword[v_weg]
		   MOV  eax,dword[a_Sprung2]
		   SAL  ebx,2
		   MOV  eax,[eax+ebx]
		   MOV  dword[v_weg],eax
		   JMP  l_weiter4
!@@:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: "harter"-Tab im PB-Editor

Beitrag von Kiffi »

nicht wirklich das, was Du suchst, aber ich würde es als
externe PBI auslagern und mit IncludeFile() einbinden.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: "harter"-Tab im PB-Editor

Beitrag von Danilo »

So sollte es gehen, auch wenn es umständlich ist:

Code: Alles auswählen

;If adresse(weg)\z[1] > adresse(index(CoIdx))\z[1]
MOV eax,dword[p_y]
MOV ebx,dword[p_z]
MOV ecx,dword[eax]         ;alter Weg
CMP ecx,dword[ebx]         ;neuer Weg
JLE  @f                  
CompilerIf 1
    ;If k1(adresse(weg)\z[1]-1)<#MaxCount: Goto weiter2: EndIf
    DEC  ecx               ;adresse(weg)\z[1] -1
    SAL  ecx,2
    ADD  ecx,dword[a_K1]
    CMP  dword[ecx],#MaxCount   ;vorherige 1.Para zu selten?
    JL   l_weiter2
CompilerEndIf
!@@:


;--------
MaxCheck:
MOV  ecx,dword[a_K1]
CMP  dword[ecx+9*4],5   ;Grenzwert Loc1
JNZ @f   
CompilerIf 1
    ;If adresse(weg)\z[2]=9: weg=Sprung2(weg): Goto weiter4: EndIf
    MOV  eax,dword[p_y]      ;@adresse(weg)\z[1]
    CMP  dword[eax+4],9      ; adresse(weg)\z[2]
    JNZ  @f
    CompilerIf 1
        MOV  ebx,dword[v_weg]
        MOV  eax,dword[a_Sprung2]
        SAL  ebx,2
        MOV  eax,[eax+ebx]
        MOV  dword[v_weg],eax
        JMP  l_weiter4
    CompilerEndIf
CompilerEndIf
!@@:
Statt "CompilerIf 1" + "CompilerEndIf" solltest Du auch eigene, leere Macros nehmen können, z.B.:

Code: Alles auswählen

Macro Block    : : EndMacro
Macro EndBlock : : EndMacro
Dann diese 2 (eindeutigen) Namen in den IDE-Preferences bei -> "Indentation" zu den Schlüsselwörtern hinzufügen.
Zuletzt geändert von Danilo am 04.12.2012 13:48, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: "harter"-Tab im PB-Editor

Beitrag von STARGÅTE »

7x7 hat geschrieben:Ich möchte, dass mir eine -wie z.B.untenstehende- Assembler-Strukture nicht wieder an den Rand gesetzt wird.
Naja, von alleiner setzt sich der Code nicht wieder an den Rand, du musst ja dann irgendwas gedrückt haben?
Wenn du alles markiert hast und dann "auto-Increment" gedrückt hast, klar ...

Du kannst aber auch die ASM-Einrückung definieren.

Code: Alles auswählen

Schlüsselwort   Vor   Nach
 JLE             0     1
 !@@:           -1     0
Oder du definierst ein allgemeines Einrücken für ;{ ... ;} bereiche, dann würde dein Code so aussehen:

Code: Alles auswählen

Schlüsselwort   Vor   Nach
 ;{              0     1
 ;}             -1     0

Code: Alles auswählen

;If adresse(weg)\z[1] > adresse(index(CoIdx))\z[1]
MOV eax,dword[p_y]
MOV ebx,dword[p_z]
MOV ecx,dword[eax]         ;alter Weg
CMP ecx,dword[ebx]         ;neuer Weg
JLE  @f ;{                   

    ;If k1(adresse(weg)\z[1]-1)<#MaxCount: Goto weiter2: EndIf
    DEC  ecx               ;adresse(weg)\z[1] -1
    SAL  ecx,2
    ADD  ecx,dword[a_K1]
    CMP  dword[ecx],#MaxCount   ;vorherige 1.Para zu selten?
    JL   l_weiter2
!@@: ;}
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: "harter"-Tab im PB-Editor

Beitrag von 7x7 »

Danke für die Vorschläge!

Habe mich für folgendes entschieden:

Code: Alles auswählen


Schlüsselwort   Vor   Nach
 ;+              1     0
 ;-              0    -1
Finde ich logisch und gut "lesbar", weil es am unauffälligsten wirkt!

Code: Alles auswählen

;If adresse(weg)\z[1] > adresse(index(CoIdx))\z[1]
MOV eax,dword[p_y]
MOV ebx,dword[p_z]
MOV ecx,dword[eax]         ;alter Weg
CMP ecx,dword[ebx]         ;neuer Weg
JLE  @f                  

    ;+
    ;If k1(adresse(weg)\z[1]-1)<#MaxCount: Goto weiter2: EndIf
    DEC  ecx               ;adresse(weg)\z[1] -1
    SAL  ecx,2
    ADD  ecx,dword[a_K1]
    CMP  dword[ecx],#MaxCount   ;vorherige 1.Para zu selten?
    JL   l_weiter2
    ;-
!@@:


; --------
MaxCheck:
MOV  ecx,dword[a_K1]
CMP  dword[ecx+9*4],5   ;Grenzwert Loc1
JNZ @f 
  
    ;+
    ;If adresse(weg)\z[2]=9: weg=Sprung2(weg): Goto weiter4: EndIf
    MOV  eax,dword[p_y]      ;@adresse(weg)\z[1]
    CMP  dword[eax+4],9      ; adresse(weg)\z[2]
    JNZ  @f

         ;+
         MOV  ebx,dword[v_weg]
         MOV  eax,dword[a_Sprung2]
         SAL  ebx,2
         MOV  eax,[eax+ebx]
         MOV  dword[v_weg],eax
         JMP  l_weiter4
         ;-
     ;-
!@@:
Dennoch würde ich die Möglichkeit eines "harten"-Tabs vorziehen. Vielleicht denkt einer der PB-Entwickler mal darüber nach, ob man evtl. ein [Shift]+[Tab] für sowas einbauen könnte.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: "harter"-Tab im PB-Editor

Beitrag von bobobo »

sowas kannste Du nahezu selber bauen.

Ich kenn zwar keinen "harten"Tab
aber ein "hartes"Leerzeichen
chr(160) .. kann man einfach mit gedrückter Alt-Taste und 160
auf dem Tastaturblock eingeben.
Dieses Zeichen wird vom pb-Kompiler allerdings als ungültig erkannt
und muss vor dem Kompilieren rausgenommen werden.
Aber dafür kannst Du Dir relativ flott was basteln was den aktuellen
Quelltext entsprechend vorbehandelt und als tool in der IDE
"vor dem Kompilieren/Starten" mit Parameter %COMPILEFILE
und Flag "warten bis zum Beenden" integriert wird.

ich habe da mal was vorbereitet

Code: Alles auswählen

fi.s=ProgramParameter(0)
If ReadFile(0,fi)
  While Eof(0)=0
    fu.s=ReadString(0)
    While Left(fu,1)=Chr(160)
      fu=Mid(fu,2,Len(fu)-1)
    Wend
    fo.s+fu+#CRLF$
  Wend
  CloseFile(0)
  CreateFile(0,fi)
  WriteStringN(0,fo)
  CloseFile(0)
EndIf
 
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: "harter"-Tab im PB-Editor

Beitrag von 7x7 »

@bobobo
Diesen Weg halte ich nicht für so praktikabel. Bei tieferen Einrückungen könnte man damit schon sehr beschäftigt werden.
Dein Vorschlag bringt mich aber auf eine andere Idee, die ausserhalb dieses Themas liegt.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Antworten