Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Konsolenanwendung in xProfanX4?
Autor: Markus Barkholz (---.hsi16.unitymediagroup.de)
Datum:   04.07.21 20:33

Hallo,
ich habe mir ein kleines Tool geschrieben - mit Parameterübergabe - zur Berechnung von Primzahlen. Jetzt kam ich auf die Idee meine prim.exe -Startwert -Endwert über CMD zu öffnen und dann diese Werte in eine Textdatei schreiben zu lassen. Funktioniert auch super.
Doch als ich auf die Idee kam einen Parameter "-help" einzuführen um den Umgang mit den Werten zu erklären, öffnet sich natürlich bei Print"lorem ipsum" ein Windows-Fenster. Das wollte ich eigentlich vermeiden. Der Hilfe-Text soll eigentlich direkt in der CMD ausgegeben werden. So wie ein ein DOS-Programm üblich. Geht das überhaupt mit xProfan?

Was ich haben wollte ist also:

prim -help

Und dann direkte Textausgabe an die Eingabeaufforderung

Gruß,
Markus

Beitrag beantworten
 
 Re: Konsolenanwendung in xProfanX4?
Autor: Arndt Lindner (80.150.206.---)
Datum:   05.07.21 12:13

Hallo Markus,

für Dein Problem mit der Consolausgabe habe ich leider keine Lösung. Ich habe mich aber auch mit Primzahlberechnungen beschäftigt und ein kleines Primzahlsieb geschrieben. Kürzlich habe ich dazu eine kleine Assemblerroutine geschrieben, die die Berechnungen extrem beschleunigt. Mit meiner i5-7400 CPU und 16 GB RAM braucht das Programm 56 min zur Berechnung und Abspeicherung der 16.252.325 Primzahlen, die kleiner als 300.000.000 sind.
 
   ASM "fillw",4
   MOV  EAX,par1
   MOV  EBX,par3
   MOV  EDX,par2
   MOV  ECX,par4
   CLD
 sch:
   ADD  EAX,EDX
   MOV  [EAX],EBX
   LOOP  sch
   ENDASM
 
 
 declare longint ende, i, j, k, n, atime, etime, btime, sek, min, stu, mp
 declare string fn
 
   WindowTitle "Primzahlsieb"
   WindowStyle 15
   Window 10,10-1000,900
 
 AppendMenubar 300,"End"
 AppendMenubar 301,"Primzahlen berechnen bis ..."
 AppendMenubar 302,"Berechne"
 
 UserMessages $10
 
 mp = 1000
 ende = 0
 whilenot ende
 waitinput
   if menuitem(300) || (%UMessage = $10)
     ende = 1
   elseif Menuitem(301)
     mp = input$("Primzahlen bis:","Eingabe",mp)
   elseif Menuitem(302)
     declare memory pz
     dim pz,4*(mp+1)
     fn = savefile$("Primzahldatei","prim.txt")
     assign #1,fn
     rewrite #1
     atime = &gettickcount
     clear pz
     fillw(pz+4,4,1,mp)
     Print "Array gefüllt"
     j = 0
     for i,2,mp
       if long(pz,4*i) == 1
         inc j
         print #1,i
         case j mod 1000 == 0 : print i      ' Es wird nur jede 1000. Primzahl auf dem Bildschirm ausgegeben
         k = mp\i - 1
         case k > 0 : fillw(pz+4*i,4*i,0,k)
       endif
     endfor
     etime = &gettickcount
     close #1
     dispose pz
     btime = etime - atime
     sek = btime/1000
     min = sek/60
     stu = min/60
     set("decimals",0)
     print str$(j) + " Primzahlen bis "+str$(mp)+" berechnet in "+str$(stu)+":"+str$(min mod 60)+":"+str$(sek mod 60)+":"+str$(btime mod 1000)
     print #1,str$(j) + " Primzahlen bis "+str$(mp)+" berechnet in "+str$(stu)+":"+str$(min mod 60)+":"+str$(sek mod 60)+":"+str$(btime mod 1000)
   endif
 endwhile
 end
 


Vielleicht ist eine Anregung für Dich dabei oder kannst Du mir noch einen Tip geben? Zur Zeit denke ich über eine anfängliche Abschätzung der Rechenzeit und eine Umstellung des Bereichs mit Long-Variablen auf ein Bitfeld nach.

Gruß
Arndt

Beitrag beantworten
 
 Re: Konsolenanwendung in xProfanX4?
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   05.07.21 17:15

Das könntest du auch in einer Batch - Datei machen,
so etwa :
 Assign #1, "start.bat"
 Rewrite #1
 Print #1, "Echo Das ist dein Text !"
 Print #1, "SET Hilfe"
 Print #1, "PAUSE"
 Close #1
 SetEnv "Hilfe", "Das ist mein Hilfetext !"
 
 RUN "start.bat"
 
 


Hier mal ein Ausschnitt, was cmd alles kann :
Zitat:


ASSOC Zeigt Dateierweiterungszuordnungen an bzw. „ndert sie.
ATTRIB Zeigt Dateiattribute an bzw. „ndert sie.
BREAK Schaltet die erweiterte šberprfung fr STRG+C ein bzw. aus.
BOOTCFG Legt Eigenschaften zur Steuerung des Startladenvorganges in der
Startdatenbank fest.
CACLS Zeigt Datei-ACLs (Access Control List) an bzw. „ndert sie.
CALL Ruft eine Batchdatei von einer anderen Batchdatei aus auf.
CD Zeigt den Namen des aktuellen Verzeichnisses an bzw. „ndert
diesen.
CHCP Zeigt die aktive Codepagenummer an bzw. legt sie fest.
CHDIR Zeigt den Namen des aktuellen Verzeichnisses an bzw. „ndert
es.
CHKDSK šberprft einen Datentr„ger und zeigt einen Statusbericht an.
CHKNTFS Zeigt die šberprfung des Datentr„gers beim Start an bzw.
ver„ndert sie.
CLS L”scht den Bildschirminhalt.
CMD Startet eine neue Instanz des Windows-Befehlsinterpreters.
COLOR Legt die Hintergrund- und Vordergrundfarben fr die Konsole
fest.
COMP Vergleicht den Inhalt zweier Dateien oder S„tze von Dateien.
COMPACT Zeigt die Komprimierung von Dateien auf NTFS-Partitionen an bzw.
„ndert sie.
CONVERT Konvertiert FAT-Volumes in NTFS. Das aktuelle Laufwerk kann
nicht konvertiert werden.
COPY Kopiert eine oder mehrere Dateien an eine andere Stelle.
DATE Zeigt das Datum an bzw. legt es fest.
DEL L”scht eine oder mehrere Dateien.
DIR Listet die Dateien und Unterverzeichnisse eines Verzeichnisses
auf.
DISKPART Zeigt Eigenschaften von Festplattenpartitionen an bzw.
konfiguriert sie.
DOSKEY Bearbeitet Befehlseingaben, erinnert Windows-Befehle und
erstellt Macros.
DRIVERQUERY Zeigt aktuellen Ger„tetreiberstatus und Eigenschaften an.
ECHO Zeigt Meldungen an bzw. schaltet die Befehlsanzeige ein oder
aus.
ENDLOCAL Beendet den lokalen Gltigkeitsbereich von Umgebungs„nderungen
in einer Batchdatei.
ERASE L”scht eine oder mehrere Dateien.
EXIT Beendet das Programm CMD.EXE (Befehlsinterpreter).
FC Vergleicht zwei oder mehr S„tze von Dateien und zeigt die
Unterschiede an.
FIND Sucht eine Zeichenkette in einer oder mehreren Datei(en).
FINDSTR Sucht Zeichenketten in Dateien.
FOR Fhrt einen angegebenen Befehl fr jede Datei in einem
Dateiensatz aus.
FORMAT Formatiert einen Datentr„ger fr die Verwendung mit Windows.
FSUTIL Zeigt die Dateisystemeigenschaften an bzw konfiguriert sie.
FTYPE Zeigt die Dateitypen an, die bei den Zuordnungen fr die
Dateierweiterungen verwendet werden bzw. „ndert sie.
GOTO Setzt den Windows-Befehlsinterpreter auf eine markierte Zeile in
einem Batchprogramm.
GPRESULT Zeigt Gruppenrichtlinieninformationen fr Computer oder Benutzer
an.
GRAFTABL Erm”glicht Windows, Sonderzeichen im Grafikmodus anzuzeigen.
HELP Zeigt Hilfeinformationen zu Windows-Befehlen an.
ICACLS Anzeigen, Žndern, Sichern oder Wiederherstellen von ACLs fr
Dateien und Verzeichnisse.
IF Verarbeitet Ausdrcke in einer Batchdatei abh„ngig von
Bedingungen.
LABEL Erstellt, „ndert oder l”scht die Bezeichnung eines Volumes.
MD Erstellt ein Verzeichnis.
MKDIR Erstellt ein Verzeichnis.
MKLINK Erstellt symbolische Links und feste Links.
MODE Konfiguriert ein Systemger„t.
MORE Zeigt Ausgabe auf dem Bildschirm seitenweise an.
MOVE Verschiebt ein oder mehrere Dateien von einem Verzeichnis in
ein anderes.
OPENFILES Zeigt Dateien, die von Remotebenutzern zur Dateifreigabe
ge”ffnet wurden an.
PATH Legt den Suchpfad fr ausfhrbare Dateien fest o. zeigt ihn an.
PAUSE H„lt die Ausfhrung einer Batchdatei an und zeigt e. Meldung an.
POPD Wechselt zu dem Verzeichnis, das durch
PUSHD gespeichert wurde.
PRINT Druckt eine Textdatei.
PROMPT Žndert die Eingabeaufforderung.
PUSHD Speichert das aktuelle Verzeichnis, und wechselt zu einem
anderen Verzeichnis.
RD Entfernt ein Verzeichnis.
RECOVER Stellt lesbare Daten von einem besch„digten Datentr„ger wieder
her.
REM Leitet Kommentare in einer Batchdatei bzw. CONFIG.SYS ein.
REN Benennt eine Datei bzw. Dateien um.
RENAME Bennent eine Datei bzw. Dateien um.
REPLACE Ersetzt Dateien.
RMDIR L”scht ein Verzeichnis.
ROBOCOPY Erweitertes Hilfsprogramm zum Kopieren von Dateien
und Verzeichnisstrukturen
SET Setzt oder l”scht die Umgebungsvariablen bzw. zeigt sie an.
SETLOCAL Startet die Begrenzung des Gltigkeitsbereiches von
Umgebungs„nderungen in einer Batchdatei.
SC Zeigt Dienste (=Hintergrundprozess) an bzw. konfiguriert sie.
SCHTASKS Erstellt Zeitpl„ne fr auf dem Computer auszufhrende Befehle
und Programme.
SHIFT Ver„ndert die Position ersetzbarer Parameter in Batchdateien.
SHUTDOWN Erm”glicht lokales oder ferngesteuertes Herunterfahren des
Computers.
SORT Sortiert die Eingabe.
START Startet ein eigenes Fenster, um ein bestimmtes Programm oder
einen Befehl auszufhren.
SUBST Ordnet einen Pfad einem Laufwerkbuchstaben zu.
SYSTEMINFO Zeigt computerspezifische Eigenschaften und Konfigurationen an.
TASKLIST Zeigt alle zurzeit laufenden Aufgaben inklusive der Dienste an.
TASKKILL Bricht einen laufenden Prozess oder eine Anwendung ab oder
beendet ihn bzw. sie.
TIME Zeigt die Systemzeit an bzw. legt sie fest.
TITLE Bestimmt den Fenstertitel des Eingabeaufforderungsfensters.
TREE Zeigt die Ordnerstruktur eines Laufwerks oder Pfads grafisch an.
TYPE Zeigt den Inhalt einer Textdatei an.
VER Zeigt die Windows-Version an.
VERIFY Legt fest, ob das ordnungsgem„áe Schreiben von Dateien auf
den Datentr„ger berprft werden soll.
VOL Zeigt die Volumebezeichnung und die Seriennummer des
Datentr„gers an.
XCOPY Kopiert Dateien und Verzeichnisstrukturen.
WMIC Zeigt WMI-Informationen in der interaktiven Befehlsshell an.


Es gibt zwar eine große API zum Erzeugen solcher Consolenfenster, aber wie
das im einzelnen geht, weiß ich auch nicht.

Vielleicht läßt sich da auch über Environmentvariablen, siehe XProfan Hilfe
GetEnv$() und SetEnv, etwas machen. Würde dann mit SET im CMD gelesen.
Siehe obiger Code.

Da müßtest du mal etwas experimentieren.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (05.07.21 17:26)

Beitrag beantworten
 
 Re: Konsolenanwendung in xProfanX4?
Autor: Markus Barkholz (---.hsi16.unitymediagroup.de)
Datum:   05.07.21 20:21

Hallo Arndt,

also mit Assembler kenne ich mich leider überhaupt nicht aus. Wollte es immer lernen, hatte aber nie die richtige Lektüre und Muße dazu.

Habe meine Primzahl-Geschichte einmal in xProfan und das Andere in pureBASIC geschrieben. Können beide das selbe. Nur ist PB um Längen schneller. Habe bis 250.000.000 berechnen lassen. PB richtig schnell, xProfan = Schnecke! War schon etwas enttäuscht.
Da ich aber gerne in OpenGL etwas mache, ist xProfan schon sehr, sehr gut und ebend profan ;-) In PB alles recht umständlich. Aber sei es drum.

Da ich dir leider nicht so viel helfen kann, hier mal mein Code. Vielleicht ist dieser Ansatz ja in Assembler auch umsetzbar?

Wenn du das gebrauchen kannst:
 Declare i&, j&, bool%
 Assign #1, "c:\\PRIME.TXT"
 Rewrite #1
 
 For i&, 1, 1000000
   bool% = 0
   For j&, 2, i& - 1
     If i& Mod j& = 0
       bool% = 1
       Break
     EndIf
   EndFor
   If bool% = 0 : Print #1, i& : EndIf
 EndFor
 
 Close #1
 End
 



Gruß, Markus

Beitrag beantworten
 
 Re: Konsolenanwendung in xProfanX4?
Autor: Markus Barkholz (---.hsi16.unitymediagroup.de)
Datum:   05.07.21 20:23

Hallo Heinz,

das sieht gut aus. Ich werde mich damit mal beschäftigen. Wieso komme ich eigentlich nie auf die naheliegensten Dinge?!?! BATCH! damit kann es was werden.

Ich danke dir für diese Informationen.

Gruß,
Markus

Beitrag beantworten
 
 Re: Konsolenanwendung in xProfanX4?
Autor: Arndt Lindner (80.150.206.---)
Datum:   06.07.21 20:11

Hallo Markus,

das ist mit Sicherheit auch in Assembler umsetzbar. Der Algorithmus hat den Vorteil das er wenig Speicherplatz benötigt. Er ist aber prinzipbedingt langsamer als ein Primzahlsieb. Dieses braucht allerdings viel Speicherplatz.
Übrigens braucht der Index j& in der inneren for-Schleife nur bis sqrt(i&) zu laufen, da es keine j& > sqrt(i&) gibt, die i& teilen.
Vielen Dank und viel Erfolg bei Deinem eigentlichen Problem.

Gruß
Arndt

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org