Automatische Einrücküberarbeitung

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

@Stargate

Der Code läuft jetzt auch unter PB4.02. Allerdings war durch den fehlenden FakeEndSelect in der 4.02 einige anpassungen nötig.

BTW:
Ich habe zur anpassung Gosub & Return rausgenommen und (notgedrungen)
durch ein Goto ersetzt. Normalerweise würde ich selbst sowas
nie machen, (Goto, Gosub & Return ist nicht so mein ding) habe
mich aber mal kurz deinen stil angepasst, da es auf anhieb die
schnellste Lösung war.

BTW2:
Die Originalzeilen die geändert wurden habe ich zur besseren übersicht
einkommentiert. :wink:

Code: Alles auswählen

; Converted by PBSourceConverter on 08.07.2007 / 22:17
Global Only, Space 

Procedure Aus(String$) 
 Restore Aus 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
   If Str$ = " EndSelect " And Only 
    Only - 1 
   EndIf 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure Ein(String$) 
 Restore Ein 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
   If Str$ = " Select " And Only 
    Only + 1 
   EndIf 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure Mitte(String$) 
 Restore Mitte 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure Only(String$) 
 Restore Only 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure DesktopX() 
 ProcedureReturn GetSystemMetrics_(0) 
EndProcedure 
Procedure DesktopY() 
 ProcedureReturn GetSystemMetrics_(1) 
EndProcedure 

OpenWindow(1, DesktopX()/2-200, DesktopY()/2-50, 400, 60, "Automatische Einrücküberarbeitung", #PB_Window_SystemMenu) 
 SetGadgetFont(#PB_Default,LoadFont(1,"Arial Fett",8)) 
 CreateGadgetList(WindowID(1)) 
  TextGadget(1, 5, 9, 50, 20, "Datei:", #PB_Text_Right) 
  StringGadget(2, 60, 5, 300, 20, "") 
  ButtonGadget(3, 365, 5, 30, 20, "...") 
  ProgressBarGadget(4, 5, 35, 290, 20, 0, 290, #PB_ProgressBar_Smooth) 
  ButtonGadget(5, 300, 35, 95, 20, "Start") 
  DisableGadget(5,1)  
  
loop:

Repeat 
 Event = WaitWindowEvent() 
 Select Event 
  Case #PB_Event_CloseWindow 
   End 
  Case #PB_Event_Gadget 
   Select EventGadget() 
    Case 2 
     FileName$ = GetGadgetText(2) 
     If FileName$ 
      DisableGadget(5,0) 
     Else 
      DisableGadget(5,1)      
     EndIf 
    Case 3 
     FileName$ = OpenFileRequester("", "*.*", "*.pb", 0) 
     SetGadgetText(2, FileName$)  
     If FileName$ 
      DisableGadget(5,0) 
     Else 
      DisableGadget(5,1)      
     EndIf 
    Case 5 
     DisableGadget(5,1) 
     DisableGadget(3,1) 
     DisableGadget(2,1) 
     If FileName$ 
       Break
;      FakeEndSelect  
;      Gosub Umschreiben 
     EndIf 
     DisableGadget(3,0) 
     DisableGadget(2,0) 
     SetGadgetState(4, 0) 
   EndSelect 
 EndSelect 
ForEver 



Umschreiben: 
 Space = 0 
 Only = 0 
 If ReadFile(1, FileName$) 
  If CreateFile(2, FileName$+".pb") 
   Repeat 
    If Random(10) : 
     Loc = Int(Loc(1)/Lof(1)*290) 
     SetGadgetState(4, Loc) 
     WindowEvent() 
    EndIf 
    StringEcht$ = Trim(ReadString(1)) 
    ;Kommentare 
    Pos = FindString(StringEcht$, ";", 1) 
    If Pos  
     String$ = Mid(StringEcht$,1, Pos-1) 
    Else 
     String$ = StringEcht$ 
    EndIf 
    ;String 
    x = 1 : k = 0 : 
    Repeat 
     x = FindString(String$, Chr(34), x) 
     If x 
      If k 
       String$ = Mid(String$, 1, xSave-1)+Mid(String$, x+1, Len(String$)) 
       x + 1 
      Else 
       xSave = x 
       x + 1 
      EndIf 
      k = 1-k 
     EndIf 
    Until x = 0 
    String$ = " "+String$+" " 
    ;Bearbeitung I 
    If Aus(String$) : 
     Space - 1 
     If Ein(String$) : 
      Space + 1 
     EndIf 
    Else 
     If Mitte(String$) : 
      Space - 1 
     EndIf 
    EndIf 
    If Only(String$) And Only : 
     Only - 1 
    EndIf 
    ;Einbauen 
    WriteStringN(2,Space(Space)+Space(Only)+StringEcht$) 
    ;Bearbeitung II 
    If Ein(String$) : 
     Space + 1 
     If Aus(String$) : 
      Space - 1 
     EndIf 
    Else 
     If Mitte(String$) : 
      Space + 1 
     EndIf 
    EndIf 
    If Only(String$) : 
     Only + 1 
    EndIf 
   Until Eof(1) 
   CloseFile(2) 
   F = MessageRequester("Info", "Datei wurde erfolgreich bearbeitet."+Chr(10)+"Datei jetzt öffnen ?", #PB_MessageRequester_YesNo) 
   If F = 6 
    RunProgram(FileName$+".pb", "",GetPathPart(FileName$+".pb"), 0) 
   EndIf 
  EndIf 
  CloseFile(1) 
 Else 
  MessageRequester("Fehler", "Datei konnte nicht geöffnet werden!", 0) 
 EndIf 

 DisableGadget(3,0) 
 DisableGadget(2,0) 
 SetGadgetState(4, 0) 
 Goto loop

;Return 



DataSection 
 Aus: 
  Data.s " EndIf ", " CompilerEndIf ", " Wend ", " Until ", " ForEver ", " Next ", " EndSelect ", " EndStructure ", " EndProcedure ", "" 
 Ein: 
  Data.s " If ", " CompilerIf ", " While ", " Repeat ", " For ", " Select ", " Structure ", " Procedure ", " Procedure.", "" 
 Mitte: 
  Data.s " Else ", " ElseIf ", "" 
 Only: 
  Data.s " Case ", " Default ", "" 
EndDataSection 
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Beitrag von michel51 »

ts-soft hat geschrieben:@michel51
Erstelle aus dem Source eine Exe.
Das geht schlecht, das der Mac so was nicht kann. Also entweder eine ".app" oder eine Unix executable (wobei die in dem Bundle auch drin ist).
Mal sehen, ich muss erst noch die Mac-spezifischen Befehle ergänzen und und ...
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

[OT]

Wieso gibt's kein FakeEndSelect ??

draf man in 4.02 ohne FakeEndSelect "rausspringen" ?

Gibts da jetzt ein anderen Befehl ? (Break)

[/OT]
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

STARGÅTE hat geschrieben:[OT]

Wieso gibt's kein FakeEndSelect ??

draf man in 4.02 ohne FakeEndSelect "rausspringen" ?

Gibts da jetzt ein anderen Befehl ? (Break)

[/OT]
Ja, man kann mit Break schleifen wie Repeat/Until oder For/Next vorzeitig
beenden, ohne das weitere ausführungen innerhalb stattfinden. (Also z.b. hinter Until weitermachen)
Ich habe den FakeEndSelect() nie kennengelernt. Verstehe daher auch nicht
so ganz den sinn davon. Select/Endselect ist doch im grunde keine schleife :?:
Oder verlässt diese auch Repeat's ?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Aus der Hilfe 3.3 hat geschrieben: Syntax
FakeEndSelect

Beschreibung

Wenn Sie aus einem Select-Abschnitt zu einem anderen Programmteil außerhalb des Select springen möchten (mit dem Befehl Goto), müssen Sie FakeEndSelect benutzen, welches ein EndSelect simuliert, ohne es wirklich auszuführen. Wenn Sie es nicht benutzen, wird Ihr Programm abstürzen.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

lol... achsoooo

nuja... wenn man kein Goto benutzt, weil das eh steinzeit ist, braucht man auch kein FakeEndSelect....

...ich weiß garnicht, wodurch das ersetzt wurde, oder ob man nun einfach rausspringen kann per goto....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Beitrag von michel51 »

@StargÅte
Dein Code läuft mit den Änderungen von al90 auch auf dem Mac mit PB4 Beta1.
Es wird alles eingerückt, aber nur 1 Zeichen!
Ausserdem habe ich nach dem Start (Button) nur noch Buchstabensalat auf dem Desktop, der erst verschwindet, wenn ich die Anwendung schließe. Weiss noch nicht, wo das her kommt. Am Font kann es nicht liegen, die Zeile mit loadfont habe ich auch mal auskommentiert.

Habe auch noch ein klein wenig angepasst.
Die 2 Proceduren mit systemmetrics_ habe ich rausgeschmissen, den das gibt es nicht auf dem Mac. Habe statt dessen direkt angegeben z.B. x=40, y=50 und das Flag #PB_Window_Screencentered ergänzt. Geht wunderbar und läuft auf allen Plattformen.

Ausserdem habe ich Enumeration und StartDrawing nebst Abschluss ergänzt. Läuft auch.
Trotz der kleinen Ungereimtheiten macht das Tool, was es soll.
Danke.

@TS-Soft
Habe die Werkzeugeinstellung kapiert. Nachts um 3:50 Uhr ist der Groschen gefallen :D
Aber Ihr wisst ja, wie das ist. Zu den unmöglichsten Zeiten und an den unmöglichsten Orten (und Örtchen :mrgreen: ) fallen einem die Lösungen ein.
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

michel51 hat geschrieben:Es wird alles eingerückt, aber nur 1 Zeichen!
Ist bei mir nicht anders. Ich denke das es so gewollt war von @Stargate ?
Oder etwa doch nicht ? Ich hatte mir den code nur grob angesehen.
Ausserdem habe ich nach dem Start (Button) nur noch Buchstabensalat auf dem Desktop, der erst verschwindet, wenn ich die Anwendung schließe.
Ich schätze mal das es an den Flags von RunProgram() liegt ? (Nicht getestet)
Das von dir beschriebene phänomen tritt normalerweise immer dann auf,
wenn eine gestartete Anwendung mit dem Flag '#PB_Program_Wait'
versehen wird.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Es wird alles eingerückt, aber nur 1 Zeichen!
Mit dem Code bekommste dein Tablength das du in der IDE eingestellt hast, musste nur noch gucken wo und wie de das in den Source einbinden musst damit statt "1", "tablength" benutzt wird

Code: Alles auswählen

  ReadFile(0, #PB_Compiler_Home + "PureBasic.prefs")
  i = 0
  While Eof(0) = 0
    line = ReadString(0)
    If FindString(line, "TabLength", 0) <> 0
      tablength = Val(StringField(line, 3, " = "))
      Break
    EndIf
    i + 1
  Wend
  CloseFile(0)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@D@nte
So ist wohl schneller und einfacher :wink:

Code: Alles auswählen

If OpenPreferences(#PB_Compiler_Home + "PureBasic.prefs")
  PreferenceGroup("Global")
  tablength = ReadPreferenceLong("TabLength", 2)
  ClosePreferences()
EndIf
Funktioniert aber nur bis PB4.02! Wegen des Pfades
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten