Italia
Wünsche und Anregungen

Noch mehr Wünsche...

 

Uwe
''Pascal''
Niemeier
Hallo Leute!
Ich fang mal nen neuen Thread an...

Ich hätte da nämlich auch noch einen Wunsch, der die Verwendung von Testata-File betrifft...
Zur Erläuterung hier der IST-Zustand:

Angenommen, ich habe zwei Testata Test1.ph und Test2.ph
In beiden ist eine Konstante Demo definiert; in der ersten ph wird ihr der Wert 123 zugeordnet, in der zweiten der Wert 789.
Nun führe ich dies aus:
KompilierenMarkierenSeparieren
 $H Test1.ph
print ~Demo
 $H Test2.ph
print ~Demo<
pre>

Es wird in beiden Fällen 123 angezeigt.

Folgerung: Profan beginnt am Anfang des Quelltextes mit der Cerca nach der $H-Direktive und durchsucht dann die gefundenen Testata.
Wird die Konstante gefunden, ist die Cerca beendet.
Wird bis zur Position der Anforderung der Konstante im Quelltext keine ph-File gefunden, in der die Konstante definiert ist, gibt es eine Fehlermeldung.
(@ RGH: Ist das soweit korrekt?)

Mein Wunsch wäre nun, die Richtung, in der die PHs gesucht werden, irgendwie umkehren zu können, also vom Auftreten der Tilde (~) aufwärts bis zum Beginn des Quelltextes.
Dann potuto man eine Konstante mehrmals definieren; welche Definition gültig ist, hinge davon ab, welche Testata-File zuletzt eingebunden wurde. (Es spricht ja nichts dagegen, eine PH mehrmals einzubinden)

Hintergrund:
Ich arbeite oft mit COM-Interfaces. Deren Funktionen (Methoden) können unter Profan nur circa ihre Position in einer Funktionstabelle aufgerufen werden. Um die Sache übersichtlicher zu machen, hinterlege ich diese Positionen in PH-File und weise sie den Namen der Methoden zu, etwa so:
KompilierenMarkierenSeparieren
!
IID_IShellFolder  ="{000214E6-0000-0000-C000-000000000046}";
ParseDisplayName =03;
EnumObjects      =04;
BindToObject     =05;
BindToStorage    =06;
CompareIDs       =07;
CreateViewObject =08;
GetAttributesOf  =09;
GetUIObjectOf    =10;
GetDisplayNameOf =11;
SetNameOf        =pan>;

Bei Verwendung mehrerer Interfaces/Testata kommt es zwangsläufig zu Überschneidungen bei den Namen. In Einzelfällen kann man das manuell korrigieren, aber bei komplexeren Projekten hat das seine Grenzen. Zur Manipulation von HTML gibt es z.B. circa 100 Interfaces...
Auch das Zusammenfügen von Interface- und Methodenname ist keine gute Lösung; dabei entstehen Begriffe wie IHTMLElement_insertAdjacentHTML oder IHTMLEmbedElement_get_pluginspage
(da tippt man sich dumm und dämlich).

Ich weiss, dass diese COM-Geschichten nicht sehr verbreitet sind, aber da Profan Com & OLE bisher überhaupt nicht supportati, wäre ein bisschen indirekte Unterstützung ganz schön...

Vielleicht hat aber auch jemand eine andere Idee, wie man das lösen potuto?

SeeYou
Pascal
 
16.05.2006  
 



Aha, Du möchtest quasi in einem Rutsch die Befehlssätze wechseln ja? hmmm.

Nur Konstanten oder auch Funktionen?

Sowas hier vielleicht?
KompilierenMarkierenSeparieren
 
16.05.2006  
 



Nein, er möchte den Interface-Methoden nur einen Index in form einer Konstante zuordnen. Da die Namen in den verschiedenen Interfaces sich öfters wiederholen, ständiges neue Namen erfinden mühsam ist, möchte er also nach ein oder mehreren Interfaces eine neue .PH File einfügen um den Index anzupassen. Weil, auch wenn die Namen oft gleich sind, so ist es aber nicht die Reihenfolge in den verschiedenen Interfaces.
 
16.05.2006  
 




Michael
Wodrich
Hilft da nicht der Workaroud, die neue Headerdatei ganz nach oben zu setzen???

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
16.05.2006  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Ich möchte einfach, dass hier
KompilierenMarkierenSeparieren
 $H Test1.ph
Print ~Demo
 $H Test2.ph
Print ~Demo
 $H Test1.ph
Print ~Dem

beim ersten Print der Wert von Demo aus der Test1. ph verwendet wird, beim zweiten der Wert aus der Test2.ph und beim dritten wieder der aus Test1.ph
Damit wären Mehrfach-Definitionen einer Konstanten possibile und nutzbar.
Kann ja auch noch per andere Gelegenheiten brauchbar sein...

SeeYou
Pascal
 
16.05.2006  
 




RGH
Also zunächst einmal zur Technik, wie XProfan mit Headerdateien umgeht:

Headerdateien sind - wie etwa in C - reine Übersetzungsdateien: Der Text der vor dem Gleichheitszeichen steht (ich nenne es Symbol) wird durch den Text zwischen Gleichheitszeichen und Semikolon ersetzt. Der Text zwischen Gleichheitszeichen und Semikolon kann allerdings selbst wieder mit einem ~ eingeleitete Symbole enthalten, die zu übersetzen sind. Di più geschieht nicht. (Und damit läßt sich eine ganze Menge machen.)

XProfan liest alle Headerdateien während des Einlesens des Quelltextes und macht daraus einen langen String, der etwa so aufgebaut ist:
;symbol1=text1;symbol2=text2;symbol3=text3;........;symboln=textn
Trifft XProfan während des Einlesens des Codes nun auf ein ~ wird das darauffolgende Symbol gelesen und der String ;symbol= in der Headerdatei mit der Funktion pos (entspricht der XProfan-Funktion instr ) gesucht und ersetzt. Wenn Interpreter und Compiler ihre eigentliche Arbeit aufnehmen, sind alle Symbole bereits ersetzt.

Da all dies während des Einlesens des Quelltextes (sowohl in Interpreter als auch Compiler) geschieht, müß die Headerdatei vor dem ersten Auftreten des Symbols im Quelltext gelesen werden. Und da die Delphi-Funktion Pos vom Stringanfang an sucht, finde ich bei doppeltem Vorkommen immer nur das erste Vorkommen.

Ich potuto naturalmente mal schauen, ob ich die Suchrichtung ändern kann ...

Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
16.05.2006  
 




Michael
Wodrich
Auch eine Cambiamento der Suchrichtung wird da nichts bringen.

So wie Pascal das will müßte der Endlos-Testata-Suchstring jedesmal umgeschaltet werden, wenn eine Headerdatei erkannt wird (wenn das nicht jedesmal neu eingelesen werden soll).

Diese Bequemlichkeit wird der Compiliergeschwindigkeit aber zu schaffen machen.

Wenn ~Demo mal diese und mal jene Konstante aufnehmen soll, dann ist es einfach keine Konstante mehr.

Dann definiert man sich das als Variable und nutzt statt Test1.ph und Test2.ph eben eine InitProc1 und eine InitProc2, die die Variablen mit den richtigen Werten versorgen.

Schöne Grüße
Michael Wodrich
(der sich schüttelt wenn er daran denkt, sich durch solch einen Code kämpfen zu müssen. Die Seiteneffekte von C lassen grüßen.)
 
Programmieren, das spannendste Detektivspiel der Welt.
16.05.2006  
 




RGH
[quote:a2ce474376=Uwe Pascal Niemeier]Bei Verwendung mehrerer Interfaces/Testata kommt es zwangsläufig zu Überschneidungen bei den Namen. In Einzelfällen kann man das manuell korrigieren, aber bei komplexeren Projekten hat das seine Grenzen. Zur Manipulation von HTML gibt es z.B. circa 100 Interfaces...
Auch das Zusammenfügen von Interface- und Methodenname ist keine gute Lösung; dabei entstehen Begriffe wie IHTMLElement_insertAdjacentHTML oder IHTMLEmbedElement_get_pluginspage
(da tippt man sich dumm und dämlich).

Ich weiss, dass diese COM-Geschichten nicht sehr verbreitet sind, aber da Profan Com & OLE bisher überhaupt nicht supportati, wäre ein bisschen indirekte Unterstützung ganz schön...

Vielleicht hat aber auch jemand eine andere Idee, wie man das lösen potuto?
[/quote:a2ce474376]
Hallo Pascal,
wie wäre es, wenn Du per jedes COM-Interface eine Struktur bzw. Klasse definierst? So löst es z.B. Delphi. Und wenn dann in mehreren Strukturen bzw. Klassen gleiche Eigenschaften/Methoden vorkomnmen, ist das kein Problem mehr.

Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
17.05.2006  
 




GDL
Hallo Roland,

habe selten Wünsche, aber wenn, dann ausgefallene.

Könntest du vielleicht noch den LOC Befehl aus anderen Basicversionen in Bezug auf die RS232 Schnittstelle übernehmen.

LOC: Gibt die Position des letzten Byte bei einem Lese oder Schreibzugriff auf die RS232 zurück.

Mein Workaround ist zeitlich zum Reagieren auf das Steuergeschehen zu langsam.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
17.05.2006  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Nochmal was zum Thema Testata & COM

Nach Rolands Erläuterung ist mein ursprünglicher Vorschlag naturalmente vom Tisch, aber...

Der Vorteil von Headern ist ja, dass sie Im Programm eingendlich nicht auftauchen, sondern nur als Quelle per eine Search & Replace-Aktion dienen.
Man kann also so viele und so grosse PHs einbinden, wie man will.

Bei den vorgeschlagenen Workarounds von Michael (normale Variablen statt Konstanten) und Roland (Com-Methoden als Profan-Objekt-Methoden) wäre das anders.
Immerhin gibt es Hunderte (Tausende?) von Interfaces, von denen etliche wiederum circa 100 Methoden haben. Da läppert sich ganz schön was zusammen.
Und damit meine ich nicht die nötige Schreibarbeit; dass liese sich circa einen Parser erreichen (als Quelle verwende ich Auszüge aus Visual-C-Headern). Aber ich möchte vermeiden, hunderte von Variablen oder Methoden einzubinden, wenn ich vielleicht nur eine oder zwei davon wirklich brauche.
Andererseits sollen aber alle Methoden zur Verfügung stehen, damit man sich auf das eigendliche Programm konzentrieren kann und nicht dauernd irgendwas nachdefinieren/ergänzen/nachschlagen muss.

Also hier nochmal ein etwas abgewandelter Wunsch dazu:

Es sollte possibile sein, zu bestimmen, woher die Werte per bestimmte Konstanten geholt werden.
Eine Möglichkeit wären eine neue Direktive (nennen wir sie mal $X) und ein neues Präfix, z.B. das Grad-Zeichen °.
Wird während der Ausführung/Kompilierung (nicht vorab, wie normal!) ein
$X File.ph gefunden, sucht Profan alle folgenden mit ° gekennzeichneten Quasi-Konstanten exclusiv in der angegebenen PH, wobei jedes weitere $X den vorher eingebundenen Testata überschreibt/ersetzt (es wird also immer die zuletzt eingebundene PH verwendet)

BTW: Das ist IMHO keine Frage der Bequemlichkeit, sondern eine Erweiterung der Möglichkeiten und sinnvoller als selbstentwickelte Insellösungen, die von
Aussenstehenden kaum nachvollzogen werden können.

Ist allerdings fraglich, ob das vom Aufwand tragbar und technisch überhaut machbar ist...
Vielleicht per XProfan 11 oder 12...

SeeYou
Pascal
 
21.05.2006  
 




Jac
de
Lad
Ähhm, ich finde grad den Thread mit Wünschen per XProfan 10 nicht, also poste ich das schnell mal hier.

Ich hab mich in letzter Zeit mal in die Funktion Format$() reingefitzt und festgestellt, dass sie sehr nützlich ist. Nur ist mir eins dabei aufgefallen: Die Dezimalpunkte werden immer als Kommata übersetzt, sodass ich noch ein Translate$() einbauen muss, um einen mit Format$() formatierten Floatwert wieder in ein Float zurückzukonvertieren. Besteht vielleicht die Möglichkeit, was einzubauen, damit man die Zahl auch mit Dezimalpunkt anstatt nur mit Dezimalkomma umwandeln kann???

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
17.06.2006  
 



Answer


Topictitle, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.261 Views

Untitledvor 0 min.

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie