Hallo Besucher, der Thread wurde 6,7k mal aufgerufen und enthält 39 Antworten

letzter Beitrag von Qualitäter am

c++ zu c

  • Das Programm, das ich auf dem C64er laufen lassen möchte,


    braucht nur noch zwei Softwarepakete:


    1. FTP-Client, der am besten unter LNG, Contiki und auch so läuft, der mit meiner C64er Netzwerkkarte funktioniert, wie Warpcopy auch, beispielsweise, und dessen SourceCode ich mir compelieren kann und so verändern, daß meine TAB.h auf dem C64er läuft?


    2. Irgendwie Front End oder so heißt ein Compiler, den man nutzen kann, um C++ erst in C umzuwandeln, den C-Code kann keiner verstehen, aber cc65, das reicht mir. Wo finde ich den oder etwas vergleichbares?


    3 Im Anfängerfragenforum hat mir Kratznagel nicht ganz genau erklärt, wie ich Graham eine Nachricht zukommen lassen kann, die er auch ließt?


    Freue mich auf baldige Antwort.

  • Zitat

    2. Irgendwie Front End oder so heißt ein Compiler, den man nutzen kann, um C++ erst in C umzuwandeln, den C-Code kann keiner verstehen, aber cc65, das reicht mir. Wo finde ich den oder etwas vergleichbares?


    sowas suche ich auch schon ewig, wäre lustig sowas vor cc65 zu flanschen :)

  • Zu den Antworten auf meine Fragen:
    1.
    Axo, ein Programm zum Wandeln ist llvm mit llc, die Demoversion haut aber Zeilen rein, für deren Entfernen ich noch ein Programm schreiben muß.
    2.
    eine Minimal-Contikiversion läßt sich im ,,Fastnormalmodus'' wunderbar umschreiben zum NurFTP mit Extras. Unter Lunix gibt es eine leicht änderbare FTP-Version auch.
    3.
    Dann braucht der C64er keine Hilfe mehr vom großen zum Laden der Listen, also brauche ich keinen Graham.


    char* x__string2char (string umw)
    {
    char *Neu= (char*) malloc (umw.length()+1);


    char *durch=Neu;

    long double i=0; while ((i<umw.length()))
    {
    *durch=umw [i];
    durch++;
    i++;
    };

    *durch=0;return Neu;
    }
    bool x__Dateiexistenz (char* Dateiname)
    {
    FILE *ausprobieren=fopen (Dateiname,"rb");
    bool existent=(ausprobieren!=NULL);
    if (existent) fclose (ausprobieren);
    return existent;
    // Je nach dem lohnt sich das Verzeichniszwischenspeichern siehe unten.
    }


    bool x__Dateiexistenz (string Dateiname)
    {
    char* Dateiname_=x__string2char (Dateiname);
    printf ("'A'");
    bool existent=x__Dateiexistenz (Dateiname_);
    printf ("'o'");
    // free (Dateiname_); Das Ding klemmt.
    printf ("'u'");
    return existent;
    }
    Schreibe bitte, woran es liegt, daß mein Programm nur fehlrfrei funktioniert, mache ich mit dem Weglassen des free ein Speicherleg?

  • char* x__string2constchar (string umw)
    {
    return const_cast <char*>(umw.c_str());
    }



    bool x__Dateiexistenz (char* Dateiname)
    {
    FILE *ausprobieren=fopen (Dateiname,"rb");
    bool existent=(ausprobieren!=NULL);
    if (existent) fclose (ausprobieren);
    return existent;
    }


    bool x__Dateiexistenz (string Dateiname)
    {
    return x__Dateiexistenz (x__string2constchar (Dateiname));
    }


    Lade /C/TABs/Aktuell/Stimmenlos.tab...


    *** glibc detected *** kicker: free(): invalid next size (normal): 0x08549bc8 ***
    ======= Backtrace: =========
    /lib/libc.so.6[0xb7da9911]
    /lib/libc.so.6(__libc_free+0x84)[0xb7daaf84]
    /lib/libc.so.6[0xb7d9b620]
    /lib/libc.so.6(fopen+0x2c)[0xb7d9b65c]
    /tmp/Binaercode/i686/HSuH_Kern.so(_Z16x__DateiexistenzPc+0x2c)[0xb40d651c]
    /tmp/Binaercode/i686/HSuH_Kern.so(_Z16x__DateiexistenzSs+0x3c)[0xb40d943c]
    /tmp/Binaercode/i686/HSuH_Kern.so(_Z13dateiexistentSs+0x34)[0xb40e5894]
    /tmp/Binaercode/i686/HSuH_Kern.so(_ZN3TAB10inhalthtmlESs+0x6b57)[0xb4108587]
    /tmp/Binaercode/i686/HSuH_Kern.so(_ZN3TAB4htmlEPSs+0x648)[0xb4119bf8]
    /tmp/Binaercode/i686/HSuH_Kern.so(_Z16immerindiefressev+0x1733)[0xb411bf23]


    Weitere Ideen?

  • *lieb guck* Darauf antworte ich Dir:


    Ist-Zustand:
    Heute sind kaum noch Programme in C geschrieben. U.a. meinen Internettauftritthochlader kann ich so noch nicht auf dem C64er laufen lassen, obwohl der Kern des Programmes mit ein paar tausend Zeilen nicht groß ist. :bmotz:


    Idee:
    Mit den bestehenden Anwenderprogrammen und Betriebsystemen ist das sogar fast möglich, einiges muß aber angepaßt sein! Und paar Befehle, die niemand mehr braucht, weil man beispielsweise mit ofstream nur noch Dateien öffnet, scheinen unter Linux schon nicht mehr zu funktionieren? :aerger:


    :dafuer:
    Vorgehen:
    Mein Programm in eine .d64 umwandeln, als Oberfläche ein verändertes Contiki-FTP-Programm. :@1@:


    Alles klar?


    SO UND JETZT WIEDER ZU DEN FRAGEN:


    fopen reagiert unter Linux nicht nur übel auf einen NULL-Zeiger, sondern auch auf merkwürdige Dateinamen, die aus frei-beliebigen Zeichenketten bestehen, darum klappt:



    char* x__string2constchar (string umw)
    {
    return const_cast <char*>(umw.c_str());
    //ggf müssen die zeiger gesammelt und hinterher verschrottet werden
    }



    bool x__Dateiname (char* Dateiname)
    {
    if (Dateiname==NULL) return false;
    bool drinnen=false;
    bool schlimm=false;
    for (int i=0; i<strlen(Dateiname)+1; i++) switch (Dateiname[i])
    {
    case '1':
    case '2':
    case '3':
    case '4':
    case'5':
    case'6':
    case '7':
    case'8':
    case'9':
    case '0':
    case'-':
    case'.':
    case '/':
    case '+':
    case '_':
    case '!':
    case '(':
    case '#':
    case '?':
    case '~':
    case 'ä':
    case 'ö':
    case ')':
    case 'ü':
    case 'ß':
    case 'Ä':
    case 'Ö':
    case 'Ü':
    case ',':
    case '':
    case '':
    case '':
    case '':
    case '':
    case '�:
    case '�:
    case '�:
    case '':
    case '�:
    case '�:
    case '�:
    case '�:
    case 'a': ; break;
    case 'b': ; break;
    case 'c': ; break;
    case 'd': ; break;
    case 'e': ; break;
    case 'f': ; break;
    case 'g': ; break;
    case 'h': ; break;
    case 'i': ; break;
    case 'j': ; break;
    case 'k': ; break;
    case 'l': ; break;
    case 'm': ; break;
    case 'n': ; break;
    case 'o': ; break;
    case 'p': ; break;
    case 'q': ; break;
    case 'r': ; break;
    case 's': ; break;
    case 't': ; break;
    case 'u': break;
    case 'v': break;
    case 'w': break;
    case 'x': break;
    case 'y': break;
    case 'z': ; break;
    case 'A': ; break;
    case 'B': ; break;
    case 'C': ; break;
    case 'D': ; break;
    case 'E': ; break;
    case 'F': ; break;
    case 'G': ; break;
    case 'H': ; break;
    case 'I': ; break;
    case 'J': ; break;
    case 'K': ; break;
    case 'L': ; break;
    case 'M': ; break;
    case 'N': ; break;
    case 'O': ; break;
    case 'P': break;
    case 'Q': break;
    case 'R': break;
    case 'S': break;
    case 'T': break;
    case ' ': break;
    case 'U': break;
    case 'V': break;
    case 'W': break;
    case 'X': break;
    case 'Y': break;
    case 'Z': break;
    case char(10):
    schlimm=true;
    Dateiname[i]='\0';
    break;
    case '\0' :
    drinnen=true;
    break;
    default:
    return false;
    };
    if (!drinnen) cout << "Warnung: Nicht terminierte Zeichenkette für x__Dateiname()." << endl;
    return true;
    };



    bool x__Dateiexistenz (char* Dateiname)
    {
    if (!x__Dateiname (Dateiname)) return false;
    FILE *ausprobieren=NULL;
    if (Dateiname!=NULL) ausprobieren=fopen (Dateiname,"rb");
    bool existent=(ausprobieren!=NULL);
    if (existent) fclose (ausprobieren);
    return existent;
    }


    bool x__Dateiexistenz (string Dateiname)
    {

    if (Dateiname=="") return false;
    return x__Dateiexistenz (x__string2constchar (Dateiname));
    }


    :klappe halten:


    Meine Fragen:


    1. Zu cc65 und scc6500: Es wird auch in den Beispielprogrammen ein fopen (dateiname, zugriffsart) benutzt:


    ...
    /* decompress */
    length = uncompress_buffer(length);
    if (length == 0)
    return 1;


    /* write uncompressed file */
    puts("Uncompressed file name:");
    fp = fopen(get_fname(), "wb");
    if (!fp) {
    puts("Can't create output file");
    return 1;
    ...
    aus gunzip.c

    Aber WIE kann man damit auch auf ein zweites Diskettenlaufwerk zugreifen?


    2. WO kann man eine Tabelle aller für einen c64er-path erlaubten Zeichen finden?

  • Wieso kann ich meinen letzten Eintrag nicht editieren?


    Jedenfalls komme ich weiter.



    Die Sonntagszeitung ist sonntags zwischen 00:00 und 23:59:59 zu erreichen unter http://www.occultusactus.de .


    Frage:
    Wer hat von Euch eine neuere Kickerminiversion als 1.3 für den C64 compeliert bekommen? Ich stoße auf die merkwürdigsten Fehler bei 2.x?


    Bitte melden!


    :winke:

  • Jo, ich habe jetzt den 2.x compeliert und festgestellt, daß man mir entweder etrwas ganz dolle vormacht oder die schönere Umgebung noch nicht fertig ist.


    :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll: :roll:


    Hat einer von Euch eine mit Maus lauffähige und selbst-compelierte 1.2er am besten mit conio-Rendering?


    Mein Bemühen führte nur dazu:



    Mit dem Flecken startet es hoch und ich kann das about.prg-Fenster mit einem Klick wegklicken, das ist alles.


    Wieviel Zeit ich noch brauche nur für eine Maus? :roll2: :roll2:

  • Zitat

    Heute sind kaum noch Programme in C geschrieben.


    sorry, aber... LOL. nur weil man das euch in der uni erzählt stimmt das noch lange nicht. in wirklichkeit ist sogar der überwiegende teil nach wie vor in C (wie zb der linux kernel, und fast alle nicht grafischen userland tools).


    Zitat

    obwohl der Kern des Programmes mit ein paar tausend Zeilen nicht groß ist.


    für ein C programm das du auf den c64 übertragen willst sind ein paar tausend zeilen schon eine ganze menge :)


    Zitat

    Aber WIE kann man damit auch auf ein zweites Diskettenlaufwerk zugreifen?


    das ist unter cc65 mit den standardlibs eigentlich nicht vorgesehen (um die libs klein zu halten). wenn du die geräteadresse in die zeropage adresse 0xba schreibst sollte es aber klappen, hab ich noch nicht probiert.


    Zitat

    Die Sonntagszeitung ist sonntags zwischen 00:00 und 23:59:59 zu erreichen unter http://www.occultusactus.de .


    äääh brauch man dazu einen spezielbrowser oder so? ich seh da nur ein albernes flash filmchen und danach kommt....nix :=P


    Zitat

    Jo, ich habe jetzt den 2.x compeliert und festgestellt, daß man mir entweder etrwas ganz dolle vormacht oder die schönere Umgebung noch nicht fertig ist.


    das 2.x noch lange nicht fertig ist hab ich nun auch schon mehrfach erwähnt :=)

  • Der Gack besteht darin ein paar Zeilen c++ auf dem Rechner mit llvm-llc und Konsorten ans Laufen zu bringen...


    Zitat

    brauch man dazu einen spezielbrowser oder so?


    Die Seite ist quasi immer mit einem ordentlichen Contiki-Browser zu erreichen.


    Ich empfehle die Version, die nach einer Seite nicht stoppt, wie sie beim Kauf einer Netzwerkkarte mitgeliefert wird, weil das Startfilmchen für den C64er dann auch läuft.
    Forum und Gästebuch und automatische Weiterleitung für ein Kennwort funktionieren nur bei mir im Apache, weil ich bei Strato keine PERL-ERLAUBNIS mir leiste, zu teuer.


    Aus Zeitgründen nur sonntags Sonntagzeitung, mit dem C64 hat man über die Woche eine alte Version, auch über http://www.occultusactus.de/wap/ im Handy.



    :juhu:MAN DARF NIE ETWAS TUN MIT DEM C64er, WAS NICHT WIRKLICH RICHTIG SPAß macht! :juhu:


    Hat denn keiner eine nette 1.2-devel-Version-source, bei der ich nur noch

    - ins Verzeichnis platform/c64 gehe
    - make c64
    - make programs
    - make d64 (optional, meine cbmconvert-Version gefällt mir sehr gut, so wie sie ist.)


    Wem macht meine Seite Spaß :juhu: und packt mir eine tar.gz so, daß ich nur noch wenige Befehle zur Maus brauche?


  • Logging to file c:\programme\bpftp server\ftp.log.
    Logging to screen : enabled.
    19.08.2006 00:16:05 - FTP Server On-line : IP(s) 192.168.2.100, on port 21
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > connected to ip : 192.168.2.100
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > sending welcome message.
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > 220 dashiervielleicht
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > USER all
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > 331 Password required for all.
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > PASS ********
    (000001) 19.08.2006 00:16:16 - (not logged in) (192.168.2.101) > 530 Can't login : invalid home directory !
    (000001) 19.08.2006 00:16:45 - (not logged in) (192.168.2.101) > disconnected.
    (000002) 19.08.2006 00:16:51 - (not logged in) (192.168.2.101) > connected to ip : 192.168.2.100
    (000002) 19.08.2006 00:16:51 - (not logged in) (192.168.2.101) > sending welcome message.
    (000002) 19.08.2006 00:16:51 - (not logged in) (192.168.2.101) > 220 dashiervielleicht
    (000002) 19.08.2006 00:16:51 - (not logged in) (192.168.2.101) > USER all
    (000002) 19.08.2006 00:16:51 - (not logged in) (192.168.2.101) > 331 Password required for all.
    (000002) 19.08.2006 00:16:51 - (not logged in) (192.168.2.101) > PASS ********
    (000002) 19.08.2006 00:16:53 - all (192.168.2.101) > logged in.
    (000002) 19.08.2006 00:16:53 - all (192.168.2.101) > 230 User all logged in.
    (000002) 19.08.2006 00:16:53 - all (192.168.2.101) > TYPE I
    (000002) 19.08.2006 00:16:53 - all (192.168.2.101) > 200 Type set to I.
    (000002) 19.08.2006 00:17:03 - all (192.168.2.101) > 214 19.08.2006 00:17:03 : ok - You can reply using : SITE MSG <your message>
    (000002) 19.08.2006 00:17:03 - all (192.168.2.101) > PORT 192,168,2,101,25,110
    (000002) 19.08.2006 00:17:03 - all (192.168.2.101) > 200 Port command successful.
    (000002) 19.08.2006 00:17:03 - all (192.168.2.101) > NLST
    (000002) 19.08.2006 00:17:05 - all (192.168.2.101) > 150 Opening data connection for directory list.
    (000002) 19.08.2006 00:17:27 - all (192.168.2.101) > 226 Transfer ok
    (000002) 19.08.2006 00:27:32 - all (192.168.2.101) > 421 Connection timed-out !
    (000002) 19.08.2006 00:27:32 - all (192.168.2.101) > disconnected. (00:10:40)


    Das ärgerliche: Was ich auch versuche, danach timed alles aus. :-(


    Wer hat von Euch den FTP-Client immerhin so weit programmiert?

  • Bei mir klappt nicht einmal der FTP-Server!


    V16.1 soll doch wenigstens den WAP-Autfritt hochladen. :winke:


    - broadcast nötig, damit nach dem TYPE I der c64 automatisch sich auch die Liste zieht, aber dann....


    - klappt daa Runterladen nicht, bzw. das Laufwerk ruckelt nur und der C64er hängt an der Datenleitung, dabei scheitert dessen Statusleitung RETR-Befehl und er ruckelt dann nicht mehr,weil keine Daten zum Ruckeln empfangen werden. So entsteht immer nur eine Datei mit dem richtigen Namen zwar!


    Und daß ich die Kommentare weggemacht habe (schön geht gut) , aber dann das Hochladen mir zurecht gemacht habe, obwohl nicht einmal das Downloaden funktioniert, ist ein Witz.


    Wer ist AdamDunkel, heißt der wirklich das Gegenteil von mir, Helle?


  • Kleini 16.1


    - Maus


    - Kann Internetstartpunkt rausfinden.


    - Kleini wird leider zwei-, drei- oder vierteilig.


    (offiziell gestern 20:46 fertig, *todmüd bin*)


    Bei dem, das ich noch an Routinen ergänzen mußte, kann das FTP-Programm nicht aus Speichermangel eingestellt worden sein, woran lags?

  • Zitat

    äääh brauch man dazu einen spezielbrowser oder so? ich seh da nur ein albernes flash filmchen und danach kommt....nix :=P


    Jetzt habe ich verstanden, was Du überhaupt meintest, Sauhund.
    Vielen Dank noch einmal für Deine nette Antwort.


    JA, mein Browser habe ich eben geupdated und siehe da, JAVASCRIPT KANN PLÖTZLICH DEN BEFEHL open() NICHT MEHR BENUTZEN, UM NEUE FENSTER ZU ÖFFNEN!


    Das war vorher nur eine Option für den Konqueror. *wunder*


    Jetzt muß ich sehen, wie ich den Fehler ausmerze, weil ich bislang Konqueror-Benutzer aufforderte, diese Sache richtigzustellen...

  • Schau dir mal die Einschränkungen vom CC65 an. Das ist kein GCC-Clone oder sowas. Und vor allem, was auch immer in dem File drinsteht, es ist alles nur kein C-Code, schaut teilweise sogar wie x86 Assembler aus.


    Und außerdem: (Zitat cc65.org):


    - The datatypes float and double are not available.


    Mehr: http://www.cc65.org/#Features


    Was auch immer du vor hast, mit einfachem "konvertieren" ists nicht getan.


    EDIT: Unglückliche Formulierung entschärft