Keine Sorge, ist nicht der richtige Headhunter. Aber einer der nach seinem Kopf jagt...
Hat aber wirklich mehr mit ISO-C++ zu tun. Dort verschiebe ich dich jetzt auch hin.
Edit: C++, nicht C :).
MfG SideWinder
[ Dieser Beitrag wurde am 06.02.2003 um 19:19 Uhr von SideWinder editiert. ]
aarg.. aber das feld[xmax][ymax] ist 45 mal 45 groß !
die felder, die er löschen bzw. verschieben soll, liegen genau in der mitte :
'...................
.................
...................
.......+-|.........
...................
...................
...*...............'
so sieht das zwar net aus aber ums zu verdeutlichen...
ich kann jetz das mittlere ding nach links oder nach oben bewegen lassen...
nach unten will er nich... nach unten wäre dann +1 für jedes t in der ersten for-schleife...
ich mein ich denk mal dass er auch nur das bestimmte feld verschieben will und nicht alle...
[ Dieser Beitrag wurde am 06.02.2003 um 15:09 Uhr von Hammer editiert. ]
Für dieses Posting bekommst du von mir gleich eine Ohrfeige ;).
Also system() sollte eben unter Windows nicht mehr benützt werden. Es gibt für Windows und für ihre Konsole nicht umsonst eine API. Unter DOS von mir aus, aber selbst dort gibt es andere Wege.
Ich habe bis jetzt einzigen sinnvollen Einsatz von system() gesehen: Starten eines Programms und warten bis es beendet wurde, statt dank Multithreading weiterarbeiten (zu müssen).
MfG SideWinder
Original erstellt von The Amarin:
**textbackground() und textcolor()
0 schwarz
1 blau
2 grün
...
Axo, und du musst dann cprintf statt printf für die Ausgabe verwenden.
[ Dieser Beitrag wurde am 05.02.2003 um 17:26 Uhr von [qb]The Amarin** editiert. ][/QB]
und wichtig: das alles funktioniert nur im borland und im djgpp..
bei anderen compilern bitte mal im konsolenfaq nachschauen
Original erstellt von paranoiac.org:
Ähm, mich interessiert das jetzt auch mal.
Ich habe soetwas schon öfters gemacht, nur ist mein Problem darin, dass ich zum Beispiel vorher nicht weiss, wieviele Schleifen ich benötige. Kann man das nicht irgentwie dynamisch machen?
aber klar. die beiden hauptwege sind:
a) rekursion
eine n-stellige durchzählung macht man durch (n-1)-stellige durchzählung und dadrin die letzte ziffer auch nochmal.
b) wie kilometerzähler am auto. 10: stelle hochzählen und wenn 'Z'dann nach links rutschen und goto 10. wenn "ZZZZZZZ" erreicht, dann ende.
Original erstellt von SideWinder:
**@ags: Eben nicht getche() (get character echoed) sondern getch() (get character).
MfG SideWinder**
Kann ja mal passieren...
@ags
du unterscheidest preemptives und non-preemtives Multitasking. das sind einfach zwei mechanismen und arten wie Multitasking/-threading implementiert sein kann. entweder verdrängend (OS hat kontrolle) oder freiwillige abgabe an einen anderen thread (nicht verdrängend)...
beides hat vor- und nachteile in bezug auf stabilität, implementationsaufwand, geschwindigkeit...
beides ist aber genau so echt wie unecht...
als echt würde ich sehen, dass zwei threads wirklich parallel ablaufen und das geht hald mal nur, wenn du mehr als einen prozesssor im system hast
unecht heißt, du programmierst das ganze genau so, aus deiner sicht ändert sich nichts, aber da du nur eine CPU hast, kann immer nur ein Befehl nach dem anderen ausgeführt werden. (stell dir einfach ein ASM-Listing vor) Um nun trotzdem eine art multithreading zu erreichen wir zwischen den einzelnen tasks /threads in extrem kurzen zeitabständen hin- und hergeschalten... (siehe Scheduling)
-> imho...
Der Copy arbeitet mit dem Interrupt 21h
Allerdings ruft er diesen nicht so auf, sondern als FAR-CALL
ab der Adresse 0000:0000 (glaub ich) steht die Interrupttabelle, in der sämtliche Interrupadressen als 4-Byter stehen. man muss sich nur den richtigen suchen und an diese Adresse springen. ist um einies schneller.
Soviel zur Theorie. Ich hab's noch nie gebraucht.
cYa
DjR
Läuft schon mal unter MSVC nicht, der hat keine Register.
Desweiteren gibt es eine Lösung in der FAQ, dort würde ich vorbeischauen...
system ("cls"), ist zwar Standard, aber eben auch nicht mehr (ich sollte jetzt in die FAQ mal einen ANTI-system("cls")-Thread einfügen hrhr).
MfG SideWinder
hi danke für euere hilfe, habe folgendes gefunden
http://www.areyoufearless.com/modules.php?op=modload&name=Downloads&file=index&req=getit&lid=17
ist zwar so ein tutorial über so trojaner-dingens aber klappt sehr gut.
danke für eure hilfe bis denne
Original erstellt von Con@n:
**Hi,
das mit dem printf() muß ander lauten. entweder printf("%s",a) oder mit puts(a) wobei er bei puts(a) gleich noch einen Zeilenumbruch einfügt.
grüße Con@n**
Deklaration:
int printf(const char* fmt, ...);
Verwendung:
printf(<FormatString>[, arg[, arg...]])
Man kann also, wenn keine Argumente benötigt werden, printf(a) aufrufen.
Gruß,
Andreas
tut mir leid falls es das falsche forum war.
danke zwerg es funzt perfekt, ich finde es gut dass du nicht nur die antwort postest sondern sie auch erklaerst, war sehr hilfreich.
1000 x thx
Hängt wohl eher vom Betriebssystem ab anstatt von der Sprache. google einfach nach "self modifying code" da wirst du schon genug finden, speziell in den Google Groups. Und wenn das nicht nach Ansi-C hingehört, dann würd ich das in "Rund um die Programmierung" posten.
Hallo,
die Deklaration solltest Du schon mal anders definieren, da sie sich in einer CPP-Datei befindet:
extern "C" void Ausgabe();
Dann musst Du sicherstellen, dass die CPP-Datei auch im Modell LARGE übersetzt wird (Deine ASM-Funktion ist FAR). Für alle Fälle schreibe ich Dir nochmal den ganzen Quelltext mit meinen Änderungen auf, für die Annahme, es wird das Speichermodell LARGE verwendet (ich habe den TASM 5.0, mit dem funktionierts):
#################### C Programm - "prog02c.cpp" #############
extern "C" void Ausgabe();
void main () {
Ausgabe();
}
############################### ENDE ###################
#################### ASM - "prog02.asm" ###################
P386
MODEL LARGE
; Borland-C kompatibles Datensegment:
DATASEG
str1 DB '1.erste Ausgabe!',13,10,'$'
@curseg ENDS
; Borland-C kompatibles Codesegment:
CODESEG
PUBLIC _Ausgabe
LOCALS
_Ausgabe PROC
mov dx, OFFSET str1
mov ah, 09h
int 021h
ret
ENDP
END
###################################################
das drucken zumindest auf LPT1 geht doch ganz einfach.
ofstream FILE ("LPT1")
{
FILE<<string<<endl;
};
Ach ja SideWinder ich habe das schon mit Visual Studio C++ getestet.