Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

"OPEN PIPE"-Kommando mit QBasic?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Charly-G



Anmeldungsdatum: 08.04.2006
Beiträge: 3

BeitragVerfasst am: 08.04.2006, 13:56    Titel: "OPEN PIPE"-Kommando mit QBasic? Antworten mit Zitat

Hallo, zusammen,
ich möchte geren mit QBASIC eine kleine EXE-Datei kompilieren,
die die Ausgabe eines anderen Programmes (z.Bsp. "dir") weiterverarbeiten kann.

Ideal wäre es, wenn ich anschliessend diese Syntax verwenden könnte:
dir | myprog.exe

Derzeit muss ic die Ausgabe von DIR immer erst in eine temporäre datei umleiten, dann einlesen und dann die datei wieder löschen. Das funktioniert nicht auf einem READONLY-Datenträger.

Mit FREEBASIC klappt es bedingt (ich muss das DIR leider im BAS-Code schon angeben), aber die EXE-datei ist 4mal grösser als mit QBASIC.
Auch nach einer Komrimierung mit UPX ist sie immer noch doppelt so gross.

Also hier meine Fragen dazu:
1)wie funktioniert der "OPEN PIPE"-Befehl in QBASIC???
2)gibt es in FreeBASIC Compliler-Optionen, um die grösse der EXE zu optimieren (weglasen von bibliotheken o.ä.)

Grüsse an alle:
Charly-G
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 08.04.2006, 14:39    Titel: Antworten mit Zitat

1)
http://freebasic.de/r.php?s=OPEN%20%28Anweisung%29 hat Folgendes geschrieben:
Unterschiede (zu QB):
OPEN kann auch als Funktion eingesetzt werden, und unterstützt die Geräte
PIPE, CONS, ERR, LPT, SCRN und (unter Win32) COM.

Direkt geht es also nicht.
Eine andere Work-a-round aus der Temporär Datei wäre SCREEN:
QBasic 1.1 hat Folgendes geschrieben:
Gibt den ASCII-Wert oder die Farbattribute von einem Zeichen an einer
angegebene Bildschirmposition zurück.

SCREEN (Zeile%,Spalte% [,Farbkennzeichen%])

■ Zeile% Die Zeilenkoordinate eines Zeichens.
■ Spalte% Die Spaltenkoordinate eines Zeichens.
■ Farbkennzeichen% Ein Wert (0-1), der angibt, was zurück-
gegeben werden soll.

Wert Rückgabe
═════════════════════ ═══════════════════════════
0 (falls ausgelassen) ASCII-Code des Zeichens.
1 Farbattribute des Zeichens.
Beispiel:
CLS
PRINT "Hallo"
PRINT "Der ASCII-Wert des Zeichens bei 1,1 ist"; SCREEN(1, 1)

Wobei du dann nur eine Bildschirmseite übernehmen kannst.

2)
Mal sehen:
fbc.exe hat Folgendes geschrieben:
Usage: fbc [options] inputlist

inputlist: xxx.a = library, xxx.o = object, xxx.bas = source
xxx.rc = resource script, xxx.res = compiled resource

options:
-a <name> Add an object file to linker's list
-arch <type> Set target architecture (default: 486)
-b <name> Add a source file to compilation
-c Compile only, do not link
-d <name=val> Add a preprocessor's define
-dll Same as -dylib
-dylib Create a DLL, including the import library
-e Add error checking
-ex Add error checking with RESUME support
-exx Same as above plus array bounds and null-pointer checking
-export Export symbols for dynamic linkage
-g Add debug info
-i <name> Add a path to search for include files
-l <name> Add a library file to linker's list
-lib Create a static library
-m <name> Main file w/o ext, the entry point (def: 1st .bas on list)
-map <name> Save the linking map to file name
-mt Link with thread-safe runtime library
-nodeflibs Do not include the default libraries
-noerrline Do not show source line where error occured
-o <name> Set output name (in the same number as source files)
-p <name> Add a path to search for libraries
-profile Enable function profiling
-r Do not delete the asm file(s)
-s <name> Set subsystem (gui, console)
-t <value> Set stack size in kbytes (default: 1M)
-target <name> Cross-compile to: cygwin dos linux xbox
-v Be verbose
-version Show compiler version
-x <name> Set executable/library name
-w <value> Set min warning level

Die sehen interrasant aus:
-nodeflibs Do not include the default libraries
-t <value> Set stack size in kbytes (default: 1M)

Bei der Verwendung must du einfach Wahnsinig vorsichtig sein!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Charly-G



Anmeldungsdatum: 08.04.2006
Beiträge: 3

BeitragVerfasst am: 08.04.2006, 15:18    Titel: QBASIC und "OPEN PIPE" Antworten mit Zitat

Danke für die schnelle Antwort.
Die Compilervariablen werde ich gleich ausprobieren.

Angeblich soll aber QBASIC auch das PIPE:-Device mit dem OPEN Befehl
unterstützen. Wenn ich im Editor die Hilfe zu "OPEN" aufrufe und unter "Details" nachschaue ist PIPE: explizit als device aufgelistet.

Allerdings funktioniert keine (mir bekannte Form) Form des Aufrufs dazu.
Hat das schon mal jemand hinbekommen???

Gruß:
Charly-G
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 08.04.2006, 19:14    Titel: Antworten mit Zitat

verwundert
Ich finde PIPE nicht in QBasic 1.1 und auch nicht in QuickBasic 4.5.

Hier etwas das ich in QB 4.5 gefunden habe:
INPUT$(n[,[#]filenumber]) hat Folgendes geschrieben:
If the filenumber is not specified, the characters are read from the
standard input device. (If input has not been redirected, the keyboard
is the standard input device).

You can use the DOS redirection symbols " "(<, >, or >>) or the pipe
symbol (|) to redefine the standard input or standard output for an
executable file created with BASIC. (See your operating system
manual for a complete discussion of redirection and pipes.)


No characters are echoed on the screen. All control characters are
passed through except CTRL+BREAK, which interrupts execution
of the function.

Ich glaube, hier geht es um etwas ganz anderes.
Wenn ich das Richtig verstehe, kann eine QuickBasic Programm mit den Symbolen <, > oder >> dazu bewegt werden die Eingaben anders entgegen zu nehmen.

Konkretter:
Du kannst in QuickBasic Programme schreiben, die wie z.B. beim Dos Befehl dir, die Eingabe und Ausgabe umlenken können, eben über diese Parameter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Charly-G



Anmeldungsdatum: 08.04.2006
Beiträge: 3

BeitragVerfasst am: 10.04.2006, 11:01    Titel: OPEN PIPE Antworten mit Zitat

Hallo, zusammen,
ich habe nun ein paar Tage mit dem OPEN-Befehl unter QBASIC experimentiert und bin zu folgender Erkenntnis gekommen:

1) Die "PIPE:" muss unter QBASIC nicht via OPEN geöffnet werden. Sie ist direkt verfügbar (jedenfalls unter QBasic 7.1).

2) Um die Pipe einzulesen einfach INPUT$ verwenden.
Hier ein Beispiel:

PRINT INPUT$(100, PIPE)

Wenn man diese Zeile z.Bsp. als TEST100.EXE kompiliert, dann gibt
der DOS-Befehl "DIR | TEST100" die ersten 100 Zeichen
des DIR-Befehlt aus.

3) Offenes Problem: Da LOF(PIPE) und EOF(PIPE) nicht funktioniert, suche ich einen Weg, wie ich die gesamte PIPE auslesen kann und dann damit in einem Programm arbeiten kann.

Gruß:
Charly-G
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz