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:

QBasic unten DOS 6.22 zu wenig Speicher?

 
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
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 37

BeitragVerfasst am: 06.05.2013, 19:06    Titel: QBasic unten DOS 6.22 zu wenig Speicher? Antworten mit Zitat

Ich habe auf mehreren PCs mit BS DOS versucht ENVIRON zu verwenden.
- Egal ob ich von PC oder Diskette boote, bekomme ich, bei dem Aufruf:
ENVIRON "foo=bar"
SHELL "echo %foo%"

die Meldung: Zu wenig Speicher.

- Auch der Versuch:
SHELL "set foo=bar"
SYSTEM

funktioniert nicht.

- Da gegen Aus einer *.bat mit dem Text:
set foo=bar
wird der Eintrag ohne Meckern erstellt.

Memmaker mit QBasic:
insg 32,768K 1,0000K 31,768K
unter 1MB 763K 314K 448K

Memmaker ohne QBasic:
insg 32,768K 723K 32,045K
unter 1MB 763K 37K 725K

Muss ich QBasic mit "irgendeinem" Parameter aufrufen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 06.05.2013, 19:25    Titel: Antworten mit Zitat

Am besten CONFIG.SYS und AUTOEXEC.BAT durchgehen, unnötiges herausnehmen. Ausserdem klassische Optimierung mit dem DOS=HIGH,UMB und EMM386.EXE nach sog. Upper Memory-Blöcke suchen lassen, so dass möglichst viel konventioneller Speicher frei wird.

Beim Programm selber kann die Übersetzung als .EXE mit dem QuickBasic 4.5-Compiler den Verbrauch von konventionellem Speicher massiv reduzieren, weil nicht mehr die ganze IDE und Interpreter im RAM bereitgehalten werden müssen.

Übrigens beim COMMAND.COM wird häufig vor Sohnprozessstart Speicher freigegeben, deshalb erscheint jeweils nach Beendigung einer DOS-Anwendung häufig "Diskette mit COMMAND.COM einlegen, weiter mit Taste", wenn der Start ab Diskette erfolgt ist.

Ansonsten bekannt für grossen konventioneller Speicherverbrauch: LAN-Managerumgebung wie bei mir die Netzstartdiskette -> deshalb sind auch GHOST.EXE und PQDI.EXE (die bekannten DOS-Festplattenbackup-Tools) entsprechend programmiert, möglichst wenig konventionellen Speicher zu benötigen und alles via EMS/XMS abzuwickeln.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 37

BeitragVerfasst am: 07.05.2013, 20:12    Titel: QBasic unten DOS 6.22 zu wenig Speicher? Antworten mit Zitat

@dreael. Vielen Dank für die wichtigen Infos.
- Ich habe in beiden Dateien alles gelöscht, was nicht wichtig war,
und dann mit memmaker optimmieren lassen.
- Ohne Erfolg.
- Auch die *.exe meldet sich mit einem ähnlichen Fehler.
Vorsorglich der jetzige Inhalt von Autoexec.bat:
@ECHO OFF
@PATH C:\;C:\DOS;C:\DOS-UTLS;C:\BAT;
@PATH C:\DOS-UTLS\NU8;C:\DOS-UTLS\NC;%PATH%
@PROMPT $P$G
@C:\DOS\DOSKEY
@CLS

- Config.sys:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS AUTO D=64
BUFFERS=40,0
FILES=96
DOS=UMB
LASTDRIVE=Z
FCBS=4,0
DOS=HIGH
DEVICEHIGH/S C:\DOS\POWER.EXE
SHELL = C:\COMMAND.COM /F /E:1024 /P
DEVICEHIGH /L:1,12240 =C:\DOS\SETVER.EXE

und "Deiner" set.bas:
CLS ' L”sche Bildschirm
heu$ = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
MKDIR "D:\" + heu$
ENVIRON ("HEU=" + heu$)
SHELL "echo %heu%"

- Bitte; siehst Du noch eine Möglichkeit, was ich machen kann?
- Da ich set mit *.bat ausführen kann, ist die Fehlersuche nicht dringend,
aber es wäre schön zu wissen warum es NICHT funktioniert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.05.2013, 16:55    Titel: Antworten mit Zitat

Zur Hardware bitte noch Angaben machen. Wichtig ist einfach: Die ganze Geschichte mit den UMBs funktioniert erst ab dem 386er-Prozessor; dies nur als Hinweis, falls Deine DOS-Anwendung etwa noch auf einem 286er-"Museumsstück" läuft...

bm-magic hat Folgendes geschrieben:
- Config.sys:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS AUTO D=64
BUFFERS=40,0
FILES=96
DOS=UMB
LASTDRIVE=Z
FCBS=4,0
DOS=HIGH
DEVICEHIGH/S C:\DOS\POWER.EXE
SHELL = C:\COMMAND.COM /F /E:1024 /P
DEVICEHIGH /L:1,12240 =C:\DOS\SETVER.EXE

Hier einige Optimierungen:
- EMM386.EXE noch mit HIGHSCAN aufrufen statt "AUTO D=64"
- BUFFERS aufs Minimum (so 5-10)
- FILES auch aufs Minimum, denn ohne NET USE o.ä. gibt es keinen Grund für bis Z:\ gehen zu müssen - beim konventionellen Speicher gilt "Geiz ist geil!". z.B. LASTDRIVE=D, wenn es ausser dem C:\ der Festplatte und D:\ fürs CD-ROM nichts mehr weiteres gibt
- auf SETVER.EXE und POWER.EXE kannst Du komplett verzichten.

Zur Kontrolle immer mit
Code:
C:\>mem

nach dem Start den freien Speicher abfragen => So kannst Du optimieren. Ebenfalls im Hinterkopf behalten: <F8>-Taste, wenn die Optimierung einmal einen kompletten Hänger beim Hochfahren produziert.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 08.05.2013, 17:42    Titel: Antworten mit Zitat

Ersetz' einfach das
Code:
 ENVIRON$("TEMP")


durch
Code:
"C:\temp"


Voraussetzung ist, das das Verzeichnis C:\temp existiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.05.2013, 19:19    Titel: Antworten mit Zitat

HorstD hat Folgendes geschrieben:
Ersetz' einfach das
Code:
 ENVIRON$("TEMP")


durch
Code:
"C:\temp"


Voraussetzung ist, das das Verzeichnis C:\temp existiert.

Ist dagegen keine gute Idee! Einfacher Grund: Endbenutzer besitzt normalerweise nur eine .EXE-Datei und kann den Quellcode nicht anpassen. Daher stellen hartcodierte Pfade einen ganz schlechten Programmierstil dar, denn schliesslich ist nicht immer ein C:\ vorhanden (z.B. Startdiskette), wo ein Ordner "TEMP" angelegt werden kann.

Eine Umgebungsvariable dagegen kann dagegen vom Endbenutzer bzw. PC-Administrator, welcher mit der fertigen Anwendung arbeitet, angepasst werden.

Wenn schon ein Verbesserungsvorschlag: Zu Beginn ein
Code:
IF ENVIRON$("TEMP") = "" THEN
  PRINT "Kein temporäres Verzeichnis vorhanden."
  PRINT "Bitte SET TEMP=<Pfad> in die AUTOEXEC.BAT einfügen"
  END
END IF
' Prüfung, ob beschreibbar
fh% = FREEFILE
fe% = 0
ON ERROR GOTO Fehler
OPEN ENVIRON$("TEMP") + "\~X.TMP" FOR OUTPUT AS fh%
PRINT#fh%, "Test"
CLOSE fh%
KILL ENVIRON$("TEMP") + "\~X.TMP"
ON ERROR GOTO 0
IF fe% <> 0 THEN
  PRINT "%TEMP% verweist auf ungültigen Pfad."
  PRINT "Bitte sicherstellen, dass der Pfad existiert und beschreibbar ist."
  END
END IF
' ab hier das eigentliche Programm

Fehler:
fe% = ERR
RESUME NEXT

=> Jetzt weiss der Endbenutzer bzw. PC-Administrator, dass auf seinem System noch etwas Wichtiges fehlt bzw. falsch eingestellt ist.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 37

BeitragVerfasst am: 08.05.2013, 21:23    Titel: QBasic unten DOS 6.22 zu wenig Speicher? Antworten mit Zitat

- DANKE für die Infos.
- Ich habe nicht ständig Internet zu Verfügung und habe sie erst
jetzt gelesen.
- Ich werde alles testen und berichten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 37

BeitragVerfasst am: 08.05.2013, 23:43    Titel: QBasic unten DOS 6.22 zu wenig Speicher? Antworten mit Zitat

- Ich habe nun alles getestet. traurig
- Die Config.sys sieht nun nach memmaker so aus:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM X=CD00-CFFF
BUFFERS=5,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
SHELL = C:\COMMAND.COM /F /E:1024 /P


- und die Werte sind 699K 28K 676K
- mit HIGHSCAN 640K 28K 612K

- Ich habe nicht mehr zu deaktivieren,
habe noch aus autoexec.bat DOSKEY gelöscht.
- Im Vergleich mit alten mem habe ich noch
weniger Raum zu Verfügung. ?
- Da ich den PC nicht wechseln kann, werde ich auf ENVIRON
verzichten.

- Vielen Dank für die Hilfe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
M_FX



Anmeldungsdatum: 09.09.2013
Beiträge: 2
Wohnort: Monaco di Bavaria

BeitragVerfasst am: 09.09.2013, 19:46    Titel: Ähnliches Problem... Antworten mit Zitat

Hallo Leute!

ich habe selbiges Problem.

Mein Befehl lautet:

Code:

Shell " netsh inerface ip set address name=LAN_Verbindung Source=static sddr=172.23.30.2 mask 255.255.255.0 gatewa=172.23.30.3 gwmetric=0"


Diese Sequenz aus QuickBASIC gestartet, verursacht immer einen Arbeitsspeicher-Fehler.

Ich habe versucht, das ganze in eine *.BAT zu packen und dann diese aufzurufen - ohne Erfolg

Wenn ich die BAT dann manuell starte läuft sie einwandfrei.

Ach ja noch zu meiner Technik:

Fujitsu Lifebook E-Series

Intel Core DUO 2,8 GHz 1,92 GB RAM

XP 2002 SP3

QuickBASIC v. 4.5


So am Rande - Ziel des Programmes:

Das Laptop wird an einer Hand voll Netzwerke betrieben. Das Programm soll selbständig herausfinden, wo es gerade dran hängt und die IP, als auch das Gateway anpassen.

Schematisch dachte ich daran, daß nach einander alle möglichen IP-Einstellungen ausprobiert werden, beim Ausfüren eines Ping via SHELL-Befehl in eine Datei mitgeschnitten wird, das QBasic-Programm eine bestimmte Zeile der Mitschnittsdatei auswertet und je nach Ergebnis die aktuell eingestellte IP behält oder die nächste IP probiert.

Dummer Weise kommt das Programm noch garnicht so weit, da beim Shell dieser Dumme Arbeitsspeicherfehler kommt. mit dem Kopf durch die Mauer wollen
Vielleicht fällt da noch jemanden was dazu ein...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 10.09.2013, 06:51    Titel: Antworten mit Zitat

@M_FX
Du kannst mit QB eine Scriptdatei anlegen und dann netsh mit dem Parameter -f Skripdatei aufrufen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.09.2013, 08:26    Titel: Re: Ähnliches Problem... Antworten mit Zitat

M_FX hat Folgendes geschrieben:
Schematisch dachte ich daran, daß nach einander alle möglichen IP-Einstellungen ausprobiert werden, beim Ausfüren eines Ping via SHELL-Befehl in eine Datei mitgeschnitten wird, das QBasic-Programm eine bestimmte Zeile der Mitschnittsdatei auswertet und je nach Ergebnis die aktuell eingestellte IP behält oder die nächste IP probiert.

Wozu übrigens derart komplizierte Dinge machen? Aus gutem Grund wurde für IPv4 DHCP erfunden! Durch-"ping"-en wie von Dir vorgeschlagen birgt immer die Gefahr, dass das Gerät X im Moment ausgeschaltet ist und Du so schnell einmal eine IPv4-Adresse doppelt vergibst. Dagegen ein sauber aufgesetzter DHCP-Server kann auch bei ausgeschaltete Geräten eine Lease-Zeit aktiviert lassen. Noch besser: Du kannst sogar statische Reservationen zu MAC-Adressen vornehmen, dann bekommt jedes Geräte eine fixe Kennung.

Bei IPv6 sieht das Ganze dann wiederum anders aus: Dort kann jedes Gerät gleich von Beginn weg mit Stateless Auto-Konfiguration eine eindeutige IP-Adresse anhand der MAC-Adresse ableiten. Reales Beispiel von mir:
kundwebs.meilebiz.ch hat Folgendes geschrieben:
dreael@kundwebs:~$ ifconfig
eth0 Link encap:Ethernet Hardware Adresse 90:e2:ba:3f:09:07
inet Adresse:109.164.212.211 Bcast:109.164.212.215 Maske:255.255.255.248
inet6-Adresse: 2001:470:b575:1a10:92e2:baff:fe3f:907/64 Gültigkeitsbereich:Global
inet6-Adresse: fe80::92e2:baff:fe3f:907/64 Gültigkeitsbereich:Verbindung

_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
M_FX



Anmeldungsdatum: 09.09.2013
Beiträge: 2
Wohnort: Monaco di Bavaria

BeitragVerfasst am: 10.09.2013, 13:17    Titel: Antworten mit Zitat

@dreal
DHCP braucht es in dem Fall nicht, da die einzelnen Geräte Funktionsbezogene end-IP's haben.

der Koppelrechner ist immer ....1, die Telefonie immer ....2, der Service-router immer die ....3, mein Service-Laptop immer die ....20 - egal in welchem Knoten ich gerade bin - nur die vorletzte IP-Gruppe ändert sich mit dem Knoten.
Doppelt geht deswegen gar nicht.
ich pinge immer den Servicerouter an und sollte der mal im A.. R.I.P. sein, muß ich eh einen neuen Router Konfigurieren - und das ohne jedes LAN.... Ich brauch nen Kaffee...



Aber hat mich ein Linuxianer Gnade, Gnade! darauf aufmerksam gemacht, daß der Eingabestring für die IP-Einstellungen Speichersparender ausgeführt werden kann und Schwupps - grinsen und jetzt klappt's auch mit dem Nachbarn grinsen :


Code:
Shell " netsh inerface ip set address LAN_Verbindung static 172.23.30.2 255.255.255.0 172.23.30.3 0 "


Die ganzen Routinen muß ich noch effizienter gestalten, aber das Programm stellt sich jetzt auf die richtige IP ein....

Ich möchte mittelfristig auch das ganze noch soweit verbessern, daß meine Kollegen, die andre Knoten betreuen müssen, nur durch Änderung einer Initialisierungsdatei die Software auf ihren Laptops benutzen können, aber das ist eine andere Geschichte....
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