Quickbasic 2 PB Übersetzer gesucht ;)

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Quickbasic 2 PB Übersetzer gesucht ;)

Beitrag von Ghosty1967 »

Hallo Leute...

Ich möchte gerne ein existierendes QuickBasic-Programm in PB umsetzen,
da es in QuickBasic auf dem aktuellen Rechner mittlerweile dicke Tming-
Probleme gibt...
Allerdings komme ich mit der Übersetzung einiger Subs/Fuctionen nicht
weiter. da doch anscheinend viel Speicherhandling nötig ist und ich mich
da nicht rantreue. Könnte mir hier eventuell jemand helfen und den Code in PB4
umsetzen, falls möglich ?! :mrgreen:

Hier der zu übersetzende QuickBasic-Code

Code: Alles auswählen

FUNCTION IEEEINIT% STATIC
   SHARED IEEESEG AS INTEGER
   DEF SEG=0
   IEEESEG=PEEK(&H182)+256*PEEK(&H183)
   DEF SEG=IEEESEG
   IEEEINIT=IEEESEG
END FUNCTION

SUB INITIALIZE ( Addr AS INTEGER,  Level AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IEEESEG=IEEEINIT%
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Addr,Level,0%)
END SUB

SUB SEND ( Addr AS INTEGER, S AS STRING, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Addr,S,Status,36%)
END SUB

SUB ENTER ( R AS STRING, L AS INTEGER, Addr AS INTEGER, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (R,L,Addr,Status,39%) 
END SUB

SUB TRANSMIT ( Cmd AS STRING, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Cmd,Status,30%)
END SUB

SUB RECEIVE ( R AS STRING, L AS INTEGER, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (R,L,Status,33%)
END SUB

SUB SPOLL ( Addr AS INTEGER, Poll AS INTEGER, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Addr,Poll,Status,12%)
END SUB

SUB PPOLL (Poll AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Poll,15%)
END SUB

SUB TARRAY ( D AS INTEGER, Count AS INTEGER, EOI AS INTEGER, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   S%=0:O%=0
   S%=VARSEG(D) : O%=VARPTR(D)
   CALL ABSOLUTE (S,O,Count,EOI,Status,200%)
END SUB

SUB RARRAY ( D AS INTEGER, Count AS INTEGER, L AS INTEGER, Status AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   S%=0:O%=0
   S%=VARSEG(D) : O%=VARPTR(D)
   CALL ABSOLUTE (S,O,Count,L,Status,203%)
END SUB

FUNCTION SRQ% STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (S%,63%)
   SRQ%=S%
END FUNCTION

SUB SETPORT (Bd AS INTEGER, Port AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IEEESEG=IEEEINIT%
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Bd,Port,57%)
END SUB

SUB BOARDSELECT (Bd AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Bd,60%) 
END SUB

SUB DMACHANNEL (C AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (C,45%)
END SUB

SUB SETTIMEOUT (T AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (T,48%)
END SUB

SUB SETOUTPUTEOS (E1 AS INTEGER, E2 AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (E1,E2,54%)
END SUB

SUB SETINPUTEOS (E AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (E,51%)
END SUB

FUNCTION LISTENER.PRESENT% (Addr AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (Addr,Present%,84%)
   LISTENER.PRESENT%=Present%
END FUNCTION

FUNCTION BOARD.PRESENT% STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (BP%,87%)
   BOARD.PRESENT%=BP%
END FUNCTION  

SUB ENABLE.488EX (E AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (E,90%)
END SUB

SUB ENABLE.488SD (E AS INTEGER, T AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (E,T,93%)
END SUB

FUNCTION GPIBFEATURE% (F AS INTEGER) STATIC
   SHARED IEEESEG AS INTEGER
   IF IEEESEG=0 THEN EXIT SUB
   DEF SEG=IEEESEG
   CALL ABSOLUTE (F,R%,96%)
   GPIBFEATURE% = R%
END SUB

const   IEEEListener = 0,   IEEE488SD = 1,   IEEEDMA = 2,   IEEEIOBASE = 100,   IEEETIMEOUT = 200,   IEEEINPUTEOS = 201,   IEEEOUTPUTEOS1 = 202,   IEEEOUTPUTEOS2 = 203,   IEEEBOARDSELECT = 204,   IEEEDMACHANNEL = 205

Viele, vielen Dank... :allright:
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Re: Quickbasic 2 PB Übersetzer gesucht ;)

Beitrag von PureBasic4.0 »

Ghosty1967 hat geschrieben:QuickBasic
Ja, ja. Das waren noch Zeiten....

Hättest du vor ca. 1/2 Jahr gefragt, wäre ich noch fit in Q(uick)Basic gewesen... Jetzt hab ich's vollkommen vernachlässigt... die guten alten Zeiten /:->
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

@Ghosty: Schreib das Meiste so um, wie du es vermuten würdest

Code: Alles auswählen

[auskommentierter Originalcode]
[PureBasic-Code]
Und dann werde ich mal sehen, was sich da korrigieren lässt. ist wirklich nicht allzu schwer.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

SUB XYZ() -> Procedure XYZ()
...
END SUB -> EndProcedure

FUNCTION XYZ() -> Procedure XYZ()
...
XYZ = Value -> ProcedureReturn Value ; Verlast die Routine!
END FUNCTION -> EndProcedure

Der Type von Rückgabewert einer Funktion wird folgendermassen definiert

LONG -> Procedure.l xyz()
String -> Procedure.s xyz()

Weiters findest du in der Hilfe

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Danke mk-soft...
SUB XYZ() -> Procedure XYZ()
...
END SUB -> EndProcedure

FUNCTION XYZ() -> Procedure XYZ()
...
XYZ = Value -> ProcedureReturn Value ; Verlast die Routine!
END FUNCTION -> EndProcedure

Der Type von Rückgabewert einer Funktion wird folgendermassen definiert

LONG -> Procedure.l xyz()
String -> Procedure.s xyz()
:mrgreen: Das mit den Procedure, Functionen usw. bekomme ich ohne
Probs hin... wo ich Probleme habe ist mit dem Speichergedöns
(PEEK, POKE, DEF SEG usw.) irgendwie habe ich da eine totale Blockade
in der Denke und bräuchte hier halr Hilfe!
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Wenn ich mich richtig erinnere, dann ruft man mit Call Absolute doch ein Assemblerprogramm im Speicher auf, oder?

Das ist meiner Meinung nach etwas High Level für einen PB-Anfänger. Kann man das ganze nicht anders lösen?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Ja, aber das "ABSOLUTE" ist ier norgendwo deklariert. Mit CALL kann man nämlich auch Functions/Precedures aufrufen, die noch nicht deklariert wurden.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Kommt alles noch aus der 16bit Generation.

Datensegmente und Codesegmente konnten nur 64kB Groß sein.
Der Adressbus war 20 Bit breit.
Somit arbeitete man mit Segment und Offset.

Segment.. [0000-0000-0000-0000]xxxx)
+
Offset...... (xxxx[0000-0000-0000-0000]
=
Adresse... [0000-0000-0000-0000-0000]

Mit DEF SEG wurde somit das Segment gesetzt.

FF :wink:

P.S. Am besten überlegen was der Code machen soll und alles neu schreiben und nicht übersetzen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

Dei Begriffe im Code kommen mir doch bekann vor.
Werft mal nen Blick hier rein: http://de.wikipedia.org/wiki/IEC-625-Bus
Scheint so als ob Funktionen und Prozeduren zum Managen eines IEC-625-Busses oder so ähnlich sind. Musste alte Firmenhardware zum Laufen bekommen oder watt :mrgreen: ?
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Genau so schauts aus, handelt sich um eine Messanwendung mit
GPIB (IEEE) Steuerung.
Antworten