Ich möchte auch noch mal etwas genauer auf die Parameter von Parseline() eingehen.
Das mit line habe ich verstanden. Beim Aufruf mit parseLine(buf, &line); gebe ich die Adresse von Line weiter, also einen Pointer. Somit kann der Inhalt von line verändert werden, z.B. mit Initline
Was geschieht mit buf? Wird beim Aufruf der gesamte Buffer kopiert? Das wäre dann ja vergleichsweise langsam, erklärt aber warum der buf vom main nicht verändert werden kann.
Ist es dann sinnvoll die resultierende Variable mit dem gleichen Namen zu versehen? Intuitiv hätte ich lbuf verwendet was eine lokale Kopie von buf andeutet.
Bei Parsetoken wiederum übergibst du die lokale Kopie von buf und gibst ihr den Namen start, was ja wiederum eine lokale kopie von buf ist, genauso wie field und delimiter.
du veränderst start, was erstmal keine Auswirkung hat weil es ja eine lokale Kopie ist. Am ende erhöhst du noch start um eins und gibst es als rückgabewert zurück.
Spannender wird es mit field. Das veränderst du und gibst am ende noch das Stringende Zeichen hinzu. Aber ist es nicht genau wie start eine lokale Kopie?
Delimiter wird nicht verändert, also stellt sich auch keine Frage bezüglich der Auswirkung auf die aufrufende Parseline.
Die Suche ergab 131 Treffer
- 07.04.2023, 09:52
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
- 07.04.2023, 09:43
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Hallo Bernd, ich habe ein paar Fragen zu den "magic numbers" die du in fileio.c verwendest.
Das liest sich immer einfach, aber woher bekomme ich sie?
- die Größe des Buffers. Du wählst 100, die längste Zeile ist 86. Man könnte auch 255 verwenden. Aber was ist mit Buffer von 20? Wie kann ich in Etappen einlesen wenn mein Puffer kleiner ist als eine ganze Zeile?
- Die Größe der t_line objekte. Für den Staat reservierst du 60, für die Stadt 50, sind zusammen 110, mehr als jede Zeile.
Das sind für die Programmierung wichtige Werte aber woher bekomme ich die?
Das liest sich immer einfach, aber woher bekomme ich sie?
- die Größe des Buffers. Du wählst 100, die längste Zeile ist 86. Man könnte auch 255 verwenden. Aber was ist mit Buffer von 20? Wie kann ich in Etappen einlesen wenn mein Puffer kleiner ist als eine ganze Zeile?
- Die Größe der t_line objekte. Für den Staat reservierst du 60, für die Stadt 50, sind zusammen 110, mehr als jede Zeile.
Das sind für die Programmierung wichtige Werte aber woher bekomme ich die?
- 26.03.2023, 22:57
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
- 26.03.2023, 15:44
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Vielen Dank Bernd,
mein cLS() funktioniert jetzt.
Hast du eine Idee warum der Fehler nicht gemeldet wurde?
es wurde ja einfach nicht ausgeführt
und F3TEST konnte ich zwar mit deinem zcc Aufruf erzeugen und starten,
es zeigt auch einen Bildschirm an, nimmt aber keine Tasten an.
Soll das so sein?
Schönen Rest-Sonntag wünsche ich.
mein cLS() funktioniert jetzt.
Hast du eine Idee warum der Fehler nicht gemeldet wurde?
es wurde ja einfach nicht ausgeführt
und F3TEST konnte ich zwar mit deinem zcc Aufruf erzeugen und starten,
es zeigt auch einen Bildschirm an, nimmt aber keine Tasten an.
Soll das so sein?
Schönen Rest-Sonntag wünsche ich.
- 25.03.2023, 12:17
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Das Manual habe ich nicht gefunden aber dies hier: https://en.wikipedia.org/wiki/Amstrad_C ... racter_set
- 25.03.2023, 11:33
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Ein eigenes Projekt wäre übertrieben,
ich möchte einfach ein paar Sachen ausprobieren zum üben.
Bitte verrate noch wie ich die ganzen Form3 Sachen übersetzen kann.
zcc +cpm -subtype=pcw80 -lndos -create-app forms3tst.c -o forms3tst.com
hat nicht funktioniert
forms3tst.c:83:15: fatal error: Too few arguments to call to function 'initForms'
Compilation aborted
Davon abgesehen hatte ich das CLS schon versucht. Dazu fand ich ein funktionierendes Beispiel:
Übersetzt mit zcc +cpm -subtype=pcw80 -lndos -create-app screen.c -o screen.com
Ich habe dann versucht das selber umzusetzen:
Übersetzt mit zcc +cpm -subtype=pcw80 -lndos -create-app PrintAT.c -o PrintAT.com
Das funktioniert nicht.
es macht zwar HOME, aber der Bildschirm ist nicht leer.
Ich habe dann versucht die Printf vorher und hinterher hinzuzufügen.
Die werden aber auch nicht ausgegeben
ich möchte einfach ein paar Sachen ausprobieren zum üben.
Bitte verrate noch wie ich die ganzen Form3 Sachen übersetzen kann.
zcc +cpm -subtype=pcw80 -lndos -create-app forms3tst.c -o forms3tst.com
hat nicht funktioniert
forms3tst.c:83:15: fatal error: Too few arguments to call to function 'initForms'
Compilation aborted
Davon abgesehen hatte ich das CLS schon versucht. Dazu fand ich ein funktionierendes Beispiel:
Code: Alles auswählen
/*
* Test the Native Console of the Amstrad PCW
*
* 23/3/2021 RobertK (based on ansivt52.c by Stefano)
*
Manual Index:
https://www.manualslib.com/manual/1002846/Amstrad-Pcw8256.html?page=170#manual
Character Set:
https://www.manualslib.com/manual/1002846/Amstrad-Pcw8256.html?page=283#manual
Terminal codes:
https://www.manualslib.com/manual/1002846/Amstrad-Pcw8256.html?page=308#manual
*/
#include <stdio.h>
void main()
{
int x;
printf("Before CLS\n");
printf("\x1b\x45"); // ESC E -> Clear screen
printf("\x1b\x48"); // ESC H -> Home
printf("If this is the first thing you can read, CLS is OK.\n");
/* Draw an X */
for (x = 0; x < 11; x++) {
// ESC Y r c -> gotoxy
printf("\x1b\x59%c%c*",32 + 10 + x, 32 + 20 + x);
printf("\x1b\x59%c%c*",32 + 20 - x, 32 + 20 + x);
}
}
Ich habe dann versucht das selber umzusetzen:
Code: Alles auswählen
#include <stdio.h>
void gotoXY(unsigned int x, unsigned int y) {
putchar(27); // ESC
putchar('Y'); // cursor to position
putchar(y + 32); // row + 32
putchar(x + 32); // column + 32
}
void cLS() {
printf("Before CLS\n");
printf("\x1b\x45"); // ESC E -> Clear screen
printf("\x1b\x48"); // ESC H -> Home
printf("Test\n");
/* putchar(27); // ESC
putchar(69); // cls
putchar(27); // ESC
putchar(72); // home
*/
}
int main(void) {
cLS;
putchar('A'); // oder printf("%s", "O");
gotoXY(1,1);
putchar('B'); // oder printf("%s", "O");
gotoXY(2, 2);
putchar('C'); // oder printf("%s", "O");
gotoXY(14, 14);
putchar('O'); // oder printf("%s", "O");
gotoXY(80, 26);
putchar('Z'); // oder printf("%s", "O");
}
Das funktioniert nicht.
es macht zwar HOME, aber der Bildschirm ist nicht leer.
Ich habe dann versucht die Printf vorher und hinterher hinzuzufügen.
Die werden aber auch nicht ausgegeben
- 25.03.2023, 08:45
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Danke noch für das gotoXY.
Auch das funktioniert erwartungsgemäß.
Jetzt werde ich gierig. Ein CLS wäre dabei noch sehr praktisch
und die Zeichen um Rahmen zu malen
Auch das funktioniert erwartungsgemäß.
Jetzt werde ich gierig. Ein CLS wäre dabei noch sehr praktisch
und die Zeichen um Rahmen zu malen
- 25.03.2023, 08:43
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Das Erstellen der Datei mit den FILE Operatoren fopen/fclose hat bei mir funktioniert.
Wie immer hatte ich das auch nicht bezweifelt.
Da ich nicht weiß wie der Witz "kommt ein pferd in eine bar..." weitergeht habe ich stattdessen
"das grüne nach oben ..." geschrieben.
Leider gibt die Joyce kein ü aus.
Wie bekomme ich Umlaute und sz auf der Joyce ausgegeben?
Irgendwo hatte Bernd einen Trick verwendet der funktionierte. Ich habe ihn jetzt nicht wiedergefunden und damals nicht wirklich verstanden.
Wie immer hatte ich das auch nicht bezweifelt.
Da ich nicht weiß wie der Witz "kommt ein pferd in eine bar..." weitergeht habe ich stattdessen
"das grüne nach oben ..." geschrieben.
Leider gibt die Joyce kein ü aus.
Wie bekomme ich Umlaute und sz auf der Joyce ausgegeben?
Irgendwo hatte Bernd einen Trick verwendet der funktionierte. Ich habe ihn jetzt nicht wiedergefunden und damals nicht wirklich verstanden.
- 19.03.2023, 12:11
- Forum: Hardware
- Thema: Wir bauen einen Retro-JOYCE
- Antworten: 11
- Zugriffe: 6088
Re: Wir bauen einen Retro-JOYCE
Benötigen wir DRAMs? Wären SRAMs nicht praktischer? Ohne Refresh und ohne CAS/RAS Erzeugung?
- 19.03.2023, 08:43
- Forum: Programmierung
- Thema: Fragen und Antworten zum C-Kurs
- Antworten: 108
- Zugriffe: 36309
Re: Fragen und Antworten zum C-Kurs
Super, vielen Dank Bernd.
Das funktioniert jetzt natürlich.
Ich bin allerdings etwas verwirrt. Ich dachte wenn ich etwas "neues" hinzu nehmen möchte füge ich das mit einem include hinzu.
Auch das ich etwas vom linken explizit weglassen muss (Dateioperationen) verwirrt.
Vielleicht bin ich da etwas zu verwöhnt, ich kenne das eigentlich so das der Optimizer das selber erkennt.
zcc ist ja kein Uraltprogramm sondern eins das auf 64bit Windows läuft
Egal, ich bin wieder up to date
Das funktioniert jetzt natürlich.
Ich bin allerdings etwas verwirrt. Ich dachte wenn ich etwas "neues" hinzu nehmen möchte füge ich das mit einem include hinzu.
Auch das ich etwas vom linken explizit weglassen muss (Dateioperationen) verwirrt.
Vielleicht bin ich da etwas zu verwöhnt, ich kenne das eigentlich so das der Optimizer das selber erkennt.
zcc ist ja kein Uraltprogramm sondern eins das auf 64bit Windows läuft
Egal, ich bin wieder up to date