Assembler Error

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Assembler Error

Beitrag von ccode_new »

Ach ja!
Der schlimme Missbrauch von Makros! Diese kompakte und versteckte Redundanz des Codes.
(STRG+F)

Also das hier läuft bei mir:

Code: Alles auswählen

;Bitte Debugger ausschalten (DisableDebugger bringt nichts!)

start = ElapsedMilliseconds()

zeichen.s{28} = "Hallo sichtbares Universum "

;Macro M1 : i+1 : str.s = "Hallo sichtbares Universum "+Str(i) : EndMacro ;Das funktioniert nicht!

Macro M1 : i+1 : str.s = zeichen+Str(i) : EndMacro ;Das funktioniert noch viel höher !!!

Macro M2 : M1 : M1 : M1 : M1 : M1 : M1 : M1 : M1 : M1 : M1 : EndMacro ;10x
Macro M3 : M2 : M2 : M2 : M2 : M2 : M2 : M2 : M2 : M2 : M2 : EndMacro ;100x
Macro M4 : M3 : M3 : M3 : M3 : M3 : M3 : M3 : M3 : M3 : M3 : EndMacro ;1000x 
Macro M5 : M4 : M4 : M4 : M4 : M4 : M4 : M4 : M4 : M4 : M4 : EndMacro ;10000x
;Macro M6 : M5 : M5 : M5 : M5 : M5 : M5 : M4 : M4 : M4 : M4 : EndMacro ;64000x !!! läuft bei mir            
;Macro M6 : M5 : M5 : M5 : M5 : M5 : M5 : M4 : M4 : M4 : M4 : M4 : EndMacro ;65000x !!! führt zum Absturz
Macro M6 : M5 : M5 : M5 : M5 : M5 : M5 : M5 : M5 : M5 : M4 : M4 : M4 : M4 : M4 : M4 : M4 : M4 : EndMacro ;jetzt sind 98000 drin :)

M6
ende = ElapsedMilliseconds() - start
MessageRequester("Ergebnis","Anzahl: "+Str(i)+" / Zeit: "+StrF(ende/1000,2)+" Sekunden")

;Das geht auf jedenfall ;):
i = 0
start = ElapsedMilliseconds()

For z = 0 To 9
  For y = 0 To 9
    For x = 0 To 9
      For w = 0 To 9
        For v = 0 To 6
          i+1
          str.s="Hallo sichtbares Universum."+Str(i)
        Next v
      Next w
    Next x
  Next y
Next z

ende = ElapsedMilliseconds() - start
MessageRequester("Ergebnis","Anzahl: "+Str(i)+" / Zeit: "+StrF(ende/1000,2)+" Sekunden")
->Und jetzt sind auch noch über 100.000x drin :mrgreen:

Code: Alles auswählen

;Bitte Debugger ausschalten (DisableDebugger bringt nichts!)

start = ElapsedMilliseconds()

s.s = ""
z.s = "Hallo sichtbares Universum "

Macro Q:Str(i):EndMacro
Macro M1:i+1:s=z+Q:EndMacro ;Das funktioniert noch viel höher !!!
Macro M2:M1:M1:M1:M1:M1:M1:M1:M1:M1:M1:EndMacro ;10x
Macro M3:M2:M2:M2:M2:M2:M2:M2:M2:M2:M2:EndMacro ;100x
Macro M4:M3:M3:M3:M3:M3:M3:M3:M3:M3:M3:EndMacro ;1000x 
Macro M5:M4:M4:M4:M4:M4:M4:M4:M4:M4:M4:EndMacro ;10000x
Macro M6:M5:M5:M5:M5:M5:M5:M5:M5:M5:M5:EndMacro ;100000x
Macro M7:M6:M5:M5:M5:M5:M4:M4:M4:M4:M4:M4:M4:M4:M3:M3:M3:M3:M3:M3:M3:M3:M2:M2:M2:M2:M2:M2:M2:M1:M1:M1:M1:EndMacro ;jetzt sind auch noch 148874x drin :)

M7
ende = ElapsedMilliseconds() - start
MessageRequester("Ergebnis","Anzahl: "+Str(i)+" / Zeit: "+StrF(ende/1000,2)+" Sekunden")
-> Der Debugger darf auch nicht laufen !!!
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Stephan-X
Beiträge: 78
Registriert: 30.07.2008 16:02
Computerausstattung: PC 8 GB RAM NVIDIA Grafik 1 TB RAID // Ubuntu Mate 64 Bit // Pure 6.0 64
Wohnort: Oberösterreich

Re: Assembler Error

Beitrag von Stephan-X »

Hi Leute , war mal wieder ne woche im Job und das Programm ist weiter gewachsen !
Zu erst mal an Sylvia, der Code an dem du das endif vermisst war nur der Kopf (Ausschnitt) vom Code - deshalb- ich wollte mich hier im Forum Kurz halten.

Und Danke an GPI ich werde mich da mal einarbeiten, ist neuland für mich !

Hi #NULL nochwas zum Speicher, das ist ja das Komische dabei, ich habe die Leistungsanzeige am 2. Bildschirm mit RAM Anzeigen
Dieser läuft so zwischen 15 und 19 %, beim Compilieren hebt sich die Prozessleistung nur um ein lasches %.
Also daran meine ich kann das nicht liegen, Purebasic Comp. dafür aber auch gute und schnelle Prog's. Wenns denn fehlerfrei durchläuft.

Ich habe das ganze mit den Macro's gestrafft wobei natürlich auch der Code eleganter und schneller wird, es bleibt zwar für mich immer noch die Frage was da am Compiler passiert, weil keine Fehlerausgabe. Daraus lernt man aber den Code nicht zu sehr zu "Verschachteln"
Nun habe ich das Selbe Problem mit if - endif und while - wend schleifen, gleicher Compiler "Fehler" und Anzeige wie bei den zu vielen Macros.
Also was tun, wieder den Code Straffen... aber irgendwann ist schluß mit straffen und man braucht Macro's if then else while wend und co um zu Coden.
Wenn nach dem Straffen der "Fehler wieder auftaucht und ich mich frage was ist zuviel dann kann ich sicherlich ohne Debugger Compilieren.... Das hilft aber auch nur für eine gwisse
Anzahl an weiteren schleifen ! Irgendwann ist schluss und der Compiler bleibt bei seiner "Aussage"

Es geht auch nicht um einen einfachen Macro mit ein paar zeilen, das kann man problemlos 100000 mal aufrufen.
Bei mir taucht der Fehler auf beim Aufruf des Macro's (1240 Zeilen) aus einem Macro mit bis zu 1500 Zeilen ??

Ist hier Irgendwo die Grenze von Purebasic erreicht ?? Denn außer dem was ich bis jetzt herausgefunden habe hilft mir nicht wirklich, das Programm wächst, bzw. ist gewachsen bis ich nun
an diesem Punkt bin und die Frage stelle ist es wirklich eine grenze der schleifen Macro's befehle... oder ist im Compiler eine Einstellung falsch, habe ich eine Compilerdirective übersehen
die gesetztz werden muss.. ?

Gruß Stephan
Wenn Sie nichts zu Tun haben, tun Sie es bitte nicht hier.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Assembler Error

Beitrag von ccode_new »

Hallo Stephan-X,

warum überhaupt Makros ?

Ich würde Makros nicht als Allheilmittel ansehen und fast immer vermeiden. (Auch wenn einige anderer Meinung sind.)
Auch die Ausführgeschwindigkeit ist dafür kein Argument.

Wenn man ordentlich programmiert und gute Funktionen schreibt und z.B. Variablen komprimiert (z.B. durch Bitshift (keine Empfehlung bei JS(Spiderbasic)) und keine verschachtelte For-Schleifen (wie in meinem Beispiel = wenn die Grenze bekannt ist reicht auch eine For-Schleife), etc. und noch viel viel mehr.)

Warum Makros ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Stephan-X
Beiträge: 78
Registriert: 30.07.2008 16:02
Computerausstattung: PC 8 GB RAM NVIDIA Grafik 1 TB RAID // Ubuntu Mate 64 Bit // Pure 6.0 64
Wohnort: Oberösterreich

Re: Assembler Error

Beitrag von Stephan-X »

Hi ccode_new,
tja das mit den Macros ist eine gute Sache um einen Code der ca. 500 Zeilen hat der Bestimmte Daten aus div. Dateien sammelt und zur verfügung stellt, dieses
aber an sehr vielen stellen im Code. Natürlich könnte man sich den Macro sparen und den Code soundsovielmal in den Code eincopieren... ! Da der Code dieses Macros sich aber über eine gewisse Zeit noch ändert ist das für mich aber immer eine Sache der Lesbarkeit und der Bearbeitung, so habe ich nur ein paar Zeilen zu verändern.
OK hier mal ein Ausschnitt aus einem Macro ohne weitere Erklärung der Programmzugehörigkeit, das würde hier den Rahmen Sprengen.
Aber wichtig wäre mir wie du dieses mit anderen Befehlen oder For Schleifen auflösen würdest.

Code: Alles auswählen

; ---------------------------------------------------------------------------------------------------------------------------
    ;-Mobilist / Hauptfahrer Verplant
    ; ---------------------------------------------------------------------------------------------------------------------------
    re.l = 0
    While re <= MobDS
      ;1. Schicht
      If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs1 And  mob(re)\mob_fahr = "E"
        name.s = Left(mob(re)\mob_vnam,1)+". "+ mob(re)\mob_nnam ;: M_E_kann = mob(re)\mob_koenn
        ;Zählen der Tage
 		    tage.l = 1 : tagzz.l = 0
 		    While tage <= mob(re)\mob_zahl
 		      mobtag.l = mob(re)\mob_vonparse + ((3600 * 24) * tagzz)
 		      mobildatum.s = FormatDate("%dd.%mm.%yyyy",  mobtag )
 		      If mobildatum = datumanz 
 		        plan.s = " : "+mob(re)\mob_platz+"  "+mob(re)\mob_schcht+"  "+mob(re)\mob_kennr+"   "+mob(re)\mob_teat 
 		        SetGadgetItemText(listnam,tare,name,3)
 		        SetGadgetItemColor(listnam,tare,#PB_Gadget_FrontColor,$494848,3)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$6CC1F8,3)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$8E8E8E,4)
          EndIf
          tagzz = tagzz + 1  
 		      tage = tage + 1
 		    Wend
 		  EndIf
 		  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs2  And mob(re)\mob_fahr = "E"
        name.s = Left(mob(re)\mob_vnam,1)+". "+ mob(re)\mob_nnam ;: M_E_kann = mob(re)\mob_koenn
        ;Zählen der Tage
 		    tage.l = 1 : tagzz.l = 0
 		    While tage <= mob(re)\mob_zahl
 		      mobtag.l = mob(re)\mob_vonparse + ((3600 * 24) * tagzz)
 		      mobildatum.s = FormatDate("%dd.%mm.%yyyy",  mobtag )
 		      If mobildatum = datumanz 
 		        plan = " : "+mob(re)\mob_platz+"  "+mob(re)\mob_schcht+"  "+mob(re)\mob_kennr+"   "+mob(re)\mob_teat 
 		        SetGadgetItemText(listnam,tare,name,7)
 		        SetGadgetItemColor(listnam,tare,#PB_Gadget_FrontColor,$494848,7)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$6CC1F8,7)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$8E8E8E,8)
          EndIf 
          tagzz = tagzz + 1  
 		      tage = tage + 1
 		    Wend
 		  EndIf
 		  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs3  And mob(re)\mob_fahr = "E"
        name.s = Left(mob(re)\mob_vnam,1)+". "+ mob(re)\mob_nnam ;: M_E_kann = mob(re)\mob_koenn
        ;Zählen der Tage
 		    tage.l = 1 : tagzz.l = 0
 		    While tage <= mob(re)\mob_zahl
 		      mobtag.l = mob(re)\mob_vonparse + ((3600 * 24) * tagzz)
 		      mobildatum.s = FormatDate("%dd.%mm.%yyyy",  mobtag )
 		      If mobildatum = datumanz 
 		        plan = " : "+mob(re)\mob_platz+"  "+mob(re)\mob_schcht+"  "+mob(re)\mob_kennr+"   "+mob(re)\mob_teat 
 		        SetGadgetItemText(listnam,tare,name,11)
 		        SetGadgetItemColor(listnam,tare,#PB_Gadget_FrontColor,$494848,11)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$6CC1F8,11)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$8E8E8E,12)
 		      EndIf
          tagzz = tagzz + 1  
 		      tage = tage + 1
 		    Wend
 		  EndIf
 		  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs4  And mob(re)\mob_fahr = "E"
        name.s = Left(mob(re)\mob_vnam,1)+". "+ mob(re)\mob_nnam ;: M_E_kann = mob(re)\mob_koenn
        ;Zählen der Tage
 		    tage.l = 1 : tagzz.l = 0
 		    While tage <= mob(re)\mob_zahl
 		      mobtag.l = mob(re)\mob_vonparse + ((3600 * 24) * tagzz)
 		      mobildatum.s = FormatDate("%dd.%mm.%yyyy",  mobtag )
 		      If mobildatum = datumanz 
 		         plan = " : "+mob(re)\mob_platz+"  "+mob(re)\mob_schcht+"  "+mob(re)\mob_kennr+"   "+mob(re)\mob_teat 
 		        SetGadgetItemText(listnam,tare,name,15)
 		        SetGadgetItemColor(listnam,tare,#PB_Gadget_FrontColor,$494848,15)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$6CC1F8,15)
            SetGadgetItemColor(listnam,tare,#PB_Gadget_BackColor,$8E8E8E,16)
 		      EndIf
          tagzz = tagzz + 1  
 		      tage = tage + 1
 		    Wend
 		  EndIf
 		re = re + 1
    Wend
Hier werden Mitarbeiter mit Bestimmten Arbeitskennungen herausgesucht um weiter mit Urlaubs und weiteren Dateien zu Vergleichen,
sowie die Darstellung in eine dazugehörigen Tabelle.
Ist mit Macros einfacher als Funktionen oder Procedu'n mit ellenlangen Übergabevar's zu erstellen.
Es erscheint mir so als ob der Compiler die Schleifenebenen von Aufruf zu Aufruf immer weiter verschachtelt als beim Aufruf wieder bei 0 zu beginnen !
Aber so isses im Moment, freue mich auf deine Anregung, event. hilft's mir. Vielleicht bin ich ja auch schon Codeblind :bounce:

Stephan
Wenn Sie nichts zu Tun haben, tun Sie es bitte nicht hier.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Assembler Error

Beitrag von ccode_new »

Hallöchen Stephan-X (im neuen Jahr):

1.
Stephan-X hat geschrieben:Aber wichtig wäre mir wie du dieses mit anderen Befehlen oder For Schleifen auflösen würdest.
Gar nicht! Das mit den For-Schleifen war ja nur ein anderes Beispiel und hat mit deinem Code rein gar nichts zu tun.

2.
Stephan-X hat geschrieben:Ist mit Macros einfacher als Funktionen oder Procedu'n mit ellenlangen Übergabevar's zu erstellen.
Ich würde halt statt eines Makros eine oder mehrere Funktionen schreiben (Finde ich sicherer/Kann man auch leichter debuggen).
Wie du das mit den "ellenlangen Übergabevar'" handhaben tust ist auch noch eine andere Sache.
Da bei einem/deinem Makro die Variablen ja quasi auch Global sind wäre das eine Stapel füllende Lösung.
Du könntest z.B. Variablen auch sharen (mit Shared oder ByRef (Pointer)-Übergabe).

Aber da es bei dir mit einem Makro ja funktioniert und du damit auch nicht mehr an die Grenzen stößt kannst du es ja beibehalten.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Assembler Error

Beitrag von Bisonte »

;) Um so etwas umzustrukturieren, sind leider ein paar mehr Infos nötig.

Z.B. Globale Variablen... oder solche die es werden müssten, Strukturen... usw

Du nutzt z.B. ein Array mob() mit einer Struktur... da kann man z.b. ansetzen.

Also hier mal ein kleines Umbaubeispiel, das ebenfalls noch Umbaupotential besitzt,
allerdings setzt alles Kenntnis der Datenstrukturen voraus.

(Anhand der wenigen Daten die du mitgeteilt hast, hab ich mir eigenes "gestrickt")

Code: Alles auswählen

Structure s_mob
  mob_kennr.s
  mob_schcht.s
  mob_fahr.s
  mob_zahl.i
  mob_vnam.s
  mob_nnam.s
  mob_koenn.i
  mob_platz.s
  mob_teat.s
  mob_vonparse.i
EndStructure

Dim mob.s_mob(100)

Define teatnr.s, sctbs1.s, sctbs2.s, sctbs3.s, sctbs4.s, re.l, MobDS
Define listnam, tare, DatumAnz.s

Procedure CountDays(Gadget, Item, DatumAnz.s, ColumnStart, *mob.s_mob)
  
  Protected tage = 1, tagzz = 0, mobtag.l, mobildatum.s, plan.s
  
  If *mob
    
    Name.s = Left(*mob\mob_vnam, 1) + ". " + *mob\mob_nnam
    
    While tage <= *mob\mob_zahl
      mobtag = *mob\mob_vonparse + ((3600 * 24) * tagzz)
      mobildatum = FormatDate("%dd.%mm.%yyyy",  mobtag )
      If mobildatum = datumanz
        plan = " : " + *mob\mob_platz + "  " + *mob\mob_schcht + "  " + *mob\mob_kennr + "   " + *mob\mob_teat
        SetGadgetItemText(Gadget,Item, Name, ColumnStart)
        SetGadgetItemColor(Gadget, Item, #PB_Gadget_FrontColor, $494848, ColumnStart)
        SetGadgetItemColor(Gadget, Item, #PB_Gadget_BackColor, $6CC1F8, ColumnStart)
        SetGadgetItemColor(Gadget, Item, #PB_Gadget_BackColor, $8E8E8E, ColumnStart + 1)
      EndIf
      tagzz = tagzz + 1 
      tage = tage + 1
    Wend
    
  EndIf

EndProcedure

; ---------------------------------------------------------------------------------------------------------------------------
;-Mobilist / Hauptfahrer Verplant
; ---------------------------------------------------------------------------------------------------------------------------
re = 0
While re <= MobDS
  ;1. Schicht
  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs1 And  mob(re)\mob_fahr = "E"
    CountDays(listnam, tare, DatumAnz, 3, @mob(re))
  EndIf
  
  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs2  And mob(re)\mob_fahr = "E"
    CountDays(listnam, tare, DatumAnz, 7, @mob(re))
  EndIf
  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs3  And mob(re)\mob_fahr = "E"
    CountDays(listnam, tare, DatumAnz, 11, @mob(re))
  EndIf
  If mob(re)\mob_kennr = teatnr And mob(re)\mob_schcht = sctbs4  And mob(re)\mob_fahr = "E"
    CountDays(listnam, tare, DatumAnz, 15, @mob(re))
  EndIf
  re = re + 1
Wend
Der komplette Umstieg ist allerdings mit einer beinahe Neuprogrammierung zu vergleichen (also Aufwandmäßig gesehen)
Man sollte sich am Anfang Gedanken machen... Was für Daten braucht man... welche Daten braucht man wo... usw....
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Re: Assembler Error

Beitrag von Sylvia »

@Stefan-X:
Bei deinem Macro in gleiche Macro in gleiche Macro-Aufgerufe schiesst mir gleich eine andere Vorgehensweise in den Kopf: Schon mal über eine rekursive Procedure nachgedacht?
Basic Pur = PureBasic
Stephan-X
Beiträge: 78
Registriert: 30.07.2008 16:02
Computerausstattung: PC 8 GB RAM NVIDIA Grafik 1 TB RAID // Ubuntu Mate 64 Bit // Pure 6.0 64
Wohnort: Oberösterreich

Re: Assembler Error

Beitrag von Stephan-X »

Hi Bisonte, danke für deine mühen aber das ist nur ein kleiner teil von den 850 Zeilen des Makros... und das sind vom Hauptprogramm gesteuerte Dynamische Arrays die hab ich schon zerlegt ! :D
Es geht wirklich nur noch darum wie ich mit dem Code Aufrufe verringere ohne den Ablauf zu verändern. Dann bleibt noch den Code überall dort einzufügen an dem der Macro Aufgerufen wird und den Macro löschen, dann hab ich wieder etwas luft ! "Aber wehe der Änderung " Ich werde den Tip von GPI mal Ausprobieren mit Includefile ! 8) An Sylvia : Die Idee ist normalerweise schon Berechtigt , ist aber hier nicht machbar. Da bekam ich schon früher Div. Fehlermeldungen. Deshalb habe ich lange Wochen alles umgestellt ! :(
Na dann, nach über 7 Monaten Entwicklung werd ich die nächsten wochen mal Brüten... vielleicht kommt noch die eine oder andere Idee, wobei das ganze aber schon so gewachsen ist, wird schwierig mit größeren umcoden. :roll:

Noch an ccode_new, das mit den funktionen ist gut .... aaaaaber bei zu vielen Funktionen kommt das selbe "problem"
langsam glaube ich dass ich mal 'ne andere Pureversion lade, oder das mal am anderen Rechner probier.
Persönlich habe ich's nicht so mit Funktionen.. :) aber wie gesagt meine eigene Sache !

Danke an Euch und für Eure Unterstützung
Wenn Sie nichts zu Tun haben, tun Sie es bitte nicht hier.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Assembler Error

Beitrag von juergenkulow »

Code: Alles auswählen

; MiniMakroPreProzessor: Löse PB Macro auf.  
; offen überflüssige Ersetzung in Kommentaren, Strings 
;   Makroparameter 
;   : in Kommentaren, Strings (z.B. Dateinamen) , Zeichenkonstanten 
EnableExplicit
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux   : Define NaechsteZeile$=#LF$
  CompilerCase #PB_OS_Windows : Define NaechsteZeile$=#CRLF$
  CompilerCase #PB_OS_MacOS   : Define NaechsteZeile$=#CR$
CompilerEndSelect
Define LenLF=Len(NaechsteZeile$)
Define Dateiname$=OpenFileRequester("Bitte Datei wählen:","*.pb", "PureBasic (*.pb)|*.pb", 0)
Define Datei=OpenFile(#PB_Any,Dateiname$)
If 0=Datei Or 0=Lof(Datei) : Debug "Konnte Datei nicht öffnen:"+Dateiname$ :End :EndIf 
Define ProgrammText$=ReadString(Datei,#PB_UTF8|#PB_File_IgnoreEOL,Lof(Datei))
CloseFile(Datei)
ProgrammText$=ReplaceString(ProgrammText$,":",NaechsteZeile$) ;ggf auskommentieren. 
Define  MakroPosition=FindString(ProgrammText$,"Macro ",1)
While MakroPosition>0
  Define ZeilenEnde=FindString(ProgrammText$,NaechsteZeile$,MakroPosition)
  Define MakroName$=Trim(Mid(ProgrammText$,MakroPosition+6,ZeilenEnde-MakroPosition-6))     
  Define EndMakroPosition=FindString(ProgrammText$,"EndMacro",ZeilenEnde)
  Define MakroText$=Mid(ProgrammText$,ZeilenEnde+LenLF,EndMakroPosition-ZeilenEnde-LenLF)
  ProgrammText$=Left(ProgrammText$,EndMakroPosition+8)+NaechsteZeile$+
                ReplaceString(Mid(ProgrammText$,EndMakroPosition+8),MakroName$,MakroText$)  
  MakroPosition=FindString(ProgrammText$,"Macro ",EndMakroPosition+8)
Wend  
Dateiname$=ReplaceString(Dateiname$,".pb","pp.pb")
Datei=CreateFile(#PB_Any,Dateiname$)
If 0=Datei : Debug "Konnte Datei nicht öffnen:"+Dateiname$ :End :EndIf 
WriteString(Datei,ProgrammText$)
CloseFile(Datei)
RunProgram(#PB_Compiler_Home+"PureBasic.exe",Dateiname$,"")
Stephan-X
Beiträge: 78
Registriert: 30.07.2008 16:02
Computerausstattung: PC 8 GB RAM NVIDIA Grafik 1 TB RAID // Ubuntu Mate 64 Bit // Pure 6.0 64
Wohnort: Oberösterreich

Re: Assembler Error

Beitrag von Stephan-X »

Hallo an alle, hat etwas gedauert, aber coden / testen ... usw :?
ich habe vieles mit

Code: Alles auswählen

includefile
ausgelagert, und somit die Macroaufrufe reduziert.
Software läuft einwandfrei, schnell und sauber
Fazit zum Schluss: Es müssen also die Anzahl der Macroaufrufe zu diesem Fehler geführt haben .
Danke nochmal an alle für die viele Anregung. Hab wieder einiges dazugelernt !
Stephan
Wenn Sie nichts zu Tun haben, tun Sie es bitte nicht hier.
Antworten