[ 2paca.zwaka @ 07.09.2011. 22:30 ] @
Pravim nesto kao IDE za BASIC i naisao sam na problem......Da li mogu da koristim QBASIC kompajler i kako da kompajlira kod iz TextEdit kontrole?........predpostavljam da bih trebao nekako da redirectujem ulaz na bc.exe ?......hvala
[ Nedeljko @ 08.09.2011. 09:06 ] @
Koristi koji god hoćeš kompajler. Kod snimi u neki privremeni *.bas fajl, pa pozovi regularno kompajliranje. Preporučujem upotrebu QProcess klase da bi dobio poruke kompajlera o greškama.
[ 2paca.zwaka @ 09.09.2011. 22:35 ] @
E redirectovao sam input stream sada mi samo treba mala pomoc......
u BASIC kompajleru koji koristim da bi se napravio *.obj fajl treba uneti tri linije....Moj kod je :
Code:

QProcess p;
    p.start("c:\\qb\\bc.exe");

    p.write("c:\\q.bas"); // lokacija nekog .bas fajla
    p.write("\n");          // upisivanje prazne linije (enter)
    p.write("\n");
    p.closeWriteChannel();

    QMessageBox::warning(q,"Readed",p.readAll());



Medjutim program izbaci praznu MessageBox i onda postaje 'not responding'


sta je greska ako moze mala pomoc ? hvala



izmena :

Code:

 p.start("c:\\qb\\BC.exe");
    if (!p.waitForStarted())
             return;

    p.write("c:\\q.bas");
    p.waitForBytesWritten();
    p.write("\n");
    p.waitForBytesWritten();
    p.write("\n");
    p.waitForBytesWritten();
    p.closeWriteChannel();
    p.waitForFinished();


Ovo je stabilno ali o5 ne radi ono sto treba

[Ovu poruku je menjao 2paca.zwaka dana 10.09.2011. u 00:00 GMT+1]
[ Nedeljko @ 09.09.2011. 22:42 ] @
Ako komandna linija za kompajliranje glasi

c:\qb\bc.exe c:\q.bas


Onda ti treba ovakav kod:

Code:
QProcess p;

p.setNativeArguments("c:\\q.bas");
p.start("c:\\qb\\bc.exe");
[ 2paca.zwaka @ 10.09.2011. 13:12 ] @
Hvala na odgovoru ali kada to unesem u cmd
pokrene bc.exe i trebam da unesem 3 prazne linije i dobijem odgovor od kompajlera.......pocetnik sam sto se tice QT i ako moze da mi pomognes oko celog koda......
Code:

    QProcess p;
    p.setNativeArguments("c:\\q.bas");
    p.start("c:\\qb\\bc.exe");

    p.waitForStarted();

    p.waitForReadyRead();

    QMessageBox::warning(this,"De",p.readAll().toLower()); //Ovo obavestenje ne pokazuje nista (prazan mb)

    p.waitForBytesWritten();
    p.write("");
    p.waitForBytesWritten();
    p.write("");
    p.waitForBytesWritten();
    p.write("");
    p.closeWriteChannel();

    p.waitForFinished();



Hvala unapred

[Ovu poruku je menjao 2paca.zwaka dana 10.09.2011. u 14:51 GMT+1]
[ Nedeljko @ 10.09.2011. 23:08 ] @
Ako je tako, onda

Code:
QProcess p;

p.start("c:\\qb\\bc.exe");
p.write("\n\n\n");
[ 2paca.zwaka @ 10.09.2011. 23:54 ] @
Zalim ali ne radi ni to :/
[ Nedeljko @ 11.09.2011. 23:02 ] @
Ne radi zato što mi nisi dao dobro uputstvo za bc.

Dakle,

Code:
QProcess p;

p.start("c:\\qb\\bc.exe");
p.write("c:\\q.bas\n\n\n");
p.waitForFinished(-1);
p.start("c:\\qb\\link.exe");
p.write("c:\\q.obj\n\n\n");
p.waitForFinished(-1);
[ 2paca.zwaka @ 12.09.2011. 13:17 ] @
Stvarno, zvuci kao zezanje ali ni ovo ne radi :d, nzm sta cu sada....Da li radi tebi?
[ Nedeljko @ 12.09.2011. 13:49 ] @
Kada stignem kući probaću. Priznajem da sam okačio netestiran kod.
[ Nedeljko @ 13.09.2011. 10:02 ] @
Znam u čemu je problem.

Sa processStart ćeš ti lepo da pokreneš proces, ali funkcije vezane za read i write jednostavno neće raditi zato što je BC.EXE stari DOS program, koji ima standardni ulaz i izlaz preko DOS funkcija. Rešenje je da potražiš način da kompajliraš program zadavanjem parametara iz komandne linije tako da te BC više ništa ne pita u toku svog rada.

Sada sam na 64-bitnoj mašini sa kojom BC.EXE niej kompatibilan, tj. ne može se pokrenuti pod njom, ali pokušaj da napraviš input fajl sa potrebnim ulazom (uključujući i enter-e), pa da pokreneš program sa BC < input.

No, još bolje rešenje je da se maneš tog DOS kompajlera i uzmeš nešto friškije, a ima danas besplatnih BASIC kompajlera za Windows, koji su u većoj ili manjoj meri kompatibilni sa QuickBASIC-om. To je moja najtoplija preporuka.