Olen joitakin viikkoja väsäillyt engineä C/C++-ohjelmointiin ja haluaisin kuulla mielipiteitänne/parannusehdotuksianne enginestä. Engine sisältää tällä hetkellä mm. pienimuotoiset konsolinkäsittelyfunktiot Windowsiin ja muutamat tiedostonkäsittelyfunktiot Linuxille ja Windowsille. Enginen löydätte täältä. Jos enginen koodaaminen kiinnostaa, niin kertokaa ihmeessä. Kaikki koodarit ovat tervetulleita mukaan.
Ja kommentoidessanne muistakaa, että versionumero on 0.01.
Voisit ainakin kommentoida, että nuo näppäinsysteemit on kopioitu SDL:stä...
Mitä kohtaa tarkoitat? SDL:stä olen tosiaan joitakin kohtia surutta ottanut, mutta ei se kaada maailmaa (tai engineä :D )
Ajattelin vain mainaista, sillä on sentään hyvää käytöstä ilmoittaa jos lainaa jotain muiden työstä. Tarkoitin tuota näppäinten määrittelyä.
while(fscanf(fileread, "%c", &cTmp)!=EOF){ fprintf(filewrite, "%c", cTmp);
Miksi ihmeessä tavu kerrallaan, fscanf ja fprintf? Miksei fread ja fwrite isommalla puskurilla? Lisäksi jonkinlainen virhearvon palautus voisi olla paikallaan, jos tiedostoa ei saa kopioitua.
/* number of elements in a table */ #define ELG_TABLESIZE(t) (sizeof(t)/sizeof(t[0]))
Aika hassu idea. Jos taulu ei ole määrätyn kokoinen vaan mallocilla varattu, tuosta ei taida olla hyötyä (osoittimen koko = 4), ja jos taas taulun koko on olemassa, ihmiset varmaankin näkevät sen taulukon määrittelystä.
Mikäs muuten on extern "C"
-komennon merkitys? Ei ole koskaan oikein selvinnyt.
Joskus väsäilin jotakin tuon tapaista, Windowsille kylläkin (siis WinAPI-systeemeihin). Voisin olla kiinnostunut osallistumaan projektiin.
Näppäinkoodit ovat aina samat. Pistin kuitenkin kommentin asiasta.
EDIT: Metabolix siis ehti ensin.
Vilkuilen vähän koodia, mitä olen ajatellut.
Tuo extern "C"{}-systeemi pakottaa kääntäjän kääntämään koodin aaltosulkeiden sisässä C-kielenä c++:n sijaan (jos käytössä C++ kääntäjä).
Ja tuohon taulukon laskemiseen samaten: se ei toimi malloc:lla varattuihin taulukoihin (oli myös ERKKI-enginessä muinoin), mutta se toimii staattisilla taulukoilla.
Parantelin engineä hiukkasen, nyt löytyy mm. jonkinlainen aloitelma hiiren käyttöä varten. Mukana on myös valmiiksi käännetty DLL.
Ja muuten, Metabolix, ensimmäinen sääntö: Älä vain kyseenalaista minun tekemääni koodia vaan lähetä parempi koodi.
PS. EOF ei tarkoita, että on tapahtunut virhe, vaan, että tiedoston sisältö on päättynyt.
En virhearvolla viitannutkaan tuohon EOFiin vaan siihen, että funktiosi tyyppi on void, mutta koska sen suorittamisessa voi tapahtua jokin virhe (esim. tiedostoa ei löydy), siitä olisi hyvä palauttaa jokin ilmoitus.
Ja johan tuossa ehdotin vaihtoehtoisia toimintatapoja, en vain pidä tapanani kirjoittaa koodia, jos asian saa selitettyä suomeksi selkeästi. Tässä nyt kuitenkin:
#define VIRHEKOODI 0 #define ONNISTUI 1 char KopioiTiedosto(char *Lahdenimi, char *Kohdenimi) { FILE *Lahde; FILE *Kohde; void *Puskuri; size_t Apu; if (!(Puskuri = malloc(1024))) return VIRHEKOODI; if (!(Lahde = fopen(Lahdenimi, "rb"))) { free(Puskuri); return VIRHEKOODI; } if (!(Kohde = fopen(Kohdenimi, "wb"))) { fclose(Lahde); free(Puskuri); return VIRHEKOODI; } do { Apu = fread(Puskuri, 1, 1024, Lahde); if (fwrite(Puskuri, 1, Apu, Kohde) != Apu) { fclose(Kohde); fclose(Lahde); free(Puskuri); /* remove(Kohdenimi); */ return VIRHEKOODI; } } while (Apu == 1024); fclose(Kohde); fclose(Lahde); free(Puskuri); return ONNISTUI; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.