Toon posts:

QBasic <=> C++

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een project moet ik een C++ module porten naar QBasic, nu weet ik dat dat een vervelend karweitje gaat worden. Ik heb wel ervaring in het gebruik van C++ en Visual Basic 5.0. Maar eigenlijk weinig ervaring met QBasic.

Ik heb op internet gezocht naar sites die beide talen met elkaar vergelijken maar dat is niet gelukt. Dit gaat vooral om de datatypes, functies porten zal me wel lukken maar ik zie de verbanden tussen de verschillende datatypes niet. Kan iemand mij vertellen hoe dat zit en met name hoe ik een WORD of DWORD in Qbasic moet vertalen.

Verwijderd

ik heb heeeeeeeeel vroeger wel met QBasic gewerkt (m"n eerte programmeer-taaltje), maar dit ligt nu ver weg.

wat ik nog weet is dat QBasic heel brak met variabelen omgaat:
code:
1
2
bla  = 100          // zo maak je een int/float
$bla = hallo          // zo maak je een char/string

het kan zijn dat het andersom is (moet je maar ff proberen) :)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Hmm en je moest ook een potje spijkervet halen? :+

Serieus, waarom moet je dit doen?
C++ verschilt zo enorm veel van QBasic dat je hoogstens de functionaliteit op een hoog niveau kan overzetten. Reken er maar op dat je alles opnieuw zal moeten programmeren. Is het C++ programma erg OO of een simpel console achtig iets?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op vrijdag 26 juli 2002 14:07 schreef Jappie het volgende:
ik heb heeeeeeeeel vroeger wel met QBasic gewerkt (m"n eerte programmeer-taaltje), maar dit ligt nu ver weg.

wat ik nog weet is dat QBasic heel brak met variabelen omgaat:
code:
1
2
bla  = 100          // zo maak je een int/float
$bla = hallo          // zo maak je een char/string

het kan zijn dat het andersom is (moet je maar ff proberen) :)
Het is bla$ ipv $bla :)

Verder wordt er in QBasic weinig verschil gemaakt tussen (SIGNED/UNSIGNED) WORD DWORD SHORT LONG DOUBLE FLOAT. In QBasic is dat gewoon een getal (en dan maar hopen dat het er in past).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op vrijdag 26 juli 2002 14:08 schreef Orphix het volgende:
Hmm en je moest ook een potje spijkervet halen? :+

Serieus, waarom moet je dit doen?
C++ verschilt zo enorm veel van QBasic dat je hoogstens de functionaliteit op een hoog niveau kan overzetten. Reken er maar op dat je alles opnieuw zal moeten programmeren. Is het C++ programma erg OO of een simpel console achtig iets?
Gelukkig is het C++ programma console achtig, om een beetje een indruk te geven dit volgende fragment, dat een indruk geeft van een tiental functies die ik wil porten:
code:
1
2
3
4
5
6
7
8
word tx_send( word wCoNr )
{
   if (!con_dat[wCoNr].bTxFlag) return (1);
   vOutw(con_dat[wCoNr].dwBase, BANKSEL, BANK2);
   vOutw(con_dat[wCoNr].dwBase, MMUCOM, QUEUETX);
   con_dat[wCoNr].bTxFlag = 0;
   return(OK);
}

Het C-programma dat ik wil gaan porten is een ethernet-module. Een bestaand (VBDOS :r ) programma moet hiermee netwerkfunctionaliteit krijgen

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Hmm ... hardware aanspreken.. Mischien is het makkelijker om het bestaande vbdos progje om te zetten naar c++ oid?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Helaas niet, het is een nogal uitgebreid visualisatie programma, ik zit vast aan VBDOS dus QBASIC.

Het grootste probleem dat ik heb is dat ik de DWORD en WORD op de een of andere manier in QBASIC moet presenteren, maar hoe?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Een WORD kun je wel in een LONG stoppen en een DWORD misschien ook wel, wat is een DWORD? 4 bytes of 8? ik ben geneigd te denken 8, want een WORD is op een 32 bits CPU netjes 4 bytes.

Een LONG is in QBasic iig 4 bytes (32 bits), groter is er niet qua getallen.

Als je poort io wilt gaan doen (out in ASM), zul je naar ASM moeten grijpen of C++, maar dat heb je al :) QBasic heeft geen enkele notie van poorten of zelfs maar geheugenadressen. (Voordat er iemand met VarPtr aan komt zetten: Ja, dan heb je een geheugenadres, wat ga je dr nu mee doen?)

Ik denk dat je beter af bent een soort interface tussen je VBDOS prog en je C++ netwerk module te maken. In QBasic is hetwerken zo goed als onmogelijk, in ieder geval ondoenlijk.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
ik dacht dat PEEK en POKE functies waren voor het schrijven en lezen naar adressen. Kun je trouwens zeggen hoe ik die interface dan zou moeten zien.

Dit heb ik uit de Microsoft Visual Basic Reference

Verwijderd

ik weet niet wie je opdrachtgever is .. maar . . als ik jou was zou ik gauw de opdracht terug geven . ..want dit wordt een haast onmogelijke klus. .

waarschijnlijk zul je alles vanaf scratch moeten opbouwen . .. :'(

Verwijderd

Topicstarter
Zijn de volgende codes dan niet gelijk?

VBDOS
code:
1
2
3
4
5
FUNCTION init_controller (wCoNr AS LONG, bas_adr_high AS LONG, bas_adr_low AS LONG) AS LONG
   
   'peek,poke etc...

END FUNCTION

C++
code:
1
2
3
4
word init_controller( word wCoNr, dword bas_adr )
{
   // inp, inpw, outp, outpw etc...
}

Of zie ik het verkeerd?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Op vrijdag 26 juli 2002 15:02 schreef KlukKluk het volgende:
Zijn de volgende codes dan niet gelijk?
Ik weet niet precies wat een 'outp' doet en ook niet wat een 'out' in ASM doet, maar voor zover ik weet is het NIET hetzelfde als een POKE (BASIC) of een 'mov' (ASM).

QBasic heeft trouwens wel poortio instructies: OUT en IN als ik het goed begrepen heb kun je bijv met 'IN &H60,var' iets met het toetsenbord uitlezen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Op vrijdag 26 juli 2002 14:11 schreef Janoz het volgende:
In QBasic is dat gewoon een getal (en dan maar hopen dat het er in past).
Bla = 100: REM Float
Bla% = 100: REM Integer
Bla$ = "100": REM String
Bla& = 100: REM Double-precision (???? Weet ik niet meer).

Siditamentis astuentis pactum.


  • barber
  • Registratie: Oktober 2001
  • Niet online
Op vrijdag 26 juli 2002 14:35 schreef Gerco het volgende:
Een WORD kun je wel in een LONG stoppen en een DWORD misschien ook wel, wat is een DWORD? 4 bytes of 8? ik ben geneigd te denken 8, want een WORD is op een 32 bits CPU netjes 4 bytes.

Een LONG is in QBasic iig 4 bytes (32 bits), groter is er niet qua getallen.
In de Windows API is een WORD een unsigned 16 bits integer en een DWORD een 32 bits unsigned integer

Verwijderd

Topicstarter
Op vrijdag 26 juli 2002 14:35 schreef Gerco het volgende:

Als je poort io wilt gaan doen (out in ASM), zul je naar ASM moeten grijpen of C++, maar dat heb je al :) QBasic heeft geen enkele notie van poorten of zelfs maar geheugenadressen. (Voordat er iemand met VarPtr aan komt zetten: Ja, dan heb je een geheugenadres, wat ga je dr nu mee doen?)

Ik denk dat je beter af bent een soort interface tussen je VBDOS prog en je C++ netwerk module te maken. In QBasic is hetwerken zo goed als onmogelijk, in ieder geval ondoenlijk.
Bedankt voor het idee.

Ik heb in de Microsoft Reference reeds gevonden dat je in Visual Basic for DOS middels een CALL statement een procedure die in een andere taal is geschreven kan aanspreken.

Een C-functie moet apart gecompiled worden en de object module wordt dan geplaatst in een zgn. Quick library.

Het wordt wel ff zoeken om dat voor elkaar te krijgen maar ik kan nu tenminste C-functies benaderen! :)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 12:47

johnwoo

3S-GTE

Op vrijdag 26 juli 2002 15:08 schreef Gerco het volgende:

[..]

Ik weet niet precies wat een 'outp' doet en ook niet wat een 'out' in ASM doet, maar voor zover ik weet is het NIET hetzelfde als een POKE (BASIC) of een 'mov' (ASM).

QBasic heeft trouwens wel poortio instructies: OUT en IN als ik het goed begrepen heb kun je bijv met 'IN &H60,var' iets met het toetsenbord uitlezen.
Voor hardware poorten gebruik je idd INP en OUT..
Je kunt ook van een willekeurig geheugenadres lezen/schrijven met PEEK en POKE, maar het ging hier om IO. Volgens mij wordt een OUT statement in BASIC 1-op-1 vertaald in een out instructie (tenzij je een samengestelde expressie geeft ipv een constante/variabele, dan moet natuurlijk eerst de waarde berekend worden).

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Krypt
  • Registratie: April 2000
  • Laatst online: 01-09 10:35
Op vrijdag 26 juli 2002 15:48 schreef KlukKluk het volgende:

[..]

Bedankt voor het idee.

Ik heb in de Microsoft Reference reeds gevonden dat je in Visual Basic for DOS middels een CALL statement een procedure die in een andere taal is geschreven kan aanspreken.

Een C-functie moet apart gecompiled worden en de object module wordt dan geplaatst in een zgn. Quick library.

Het wordt wel ff zoeken om dat voor elkaar te krijgen maar ik kan nu tenminste C-functies benaderen! :)
Let wel.. als je Obj en Lib files wilt gaan gebruiken (QuickLibrary) dan moet je wel QuickBasic4.x of PDS7.1(QBX) gebruiken.. Qbasic kan namelijk geen libraries inlezen dacht ik..

Pvouput live


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Op vrijdag 26 juli 2002 15:48 schreef KlukKluk het volgende:
Een C-functie moet apart gecompiled worden en de object module wordt dan geplaatst in een zgn. Quick library.
Yup, die dingen zijn heel handig. Ik heb in een ver en grijs verleden nog eens XMS/EMS en VESA graphics qlb's zitten proggen met TASM, een hoop werk, maar dan heb je ook wat.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1