AllesLinux Forumindex AllesLinux
Het forum van AllesLinux.com.
Deze site wordt gehost door Exonet Internet Services
 
 FAQFAQ   ZoekenZoeken   GebruikerslijstGebruikerslijst   GebruikersgroepenGebruikersgroepen   RegistrerenRegistreren 
 ProfielProfiel   Log in om je privéberichten te bekijkenLog in om je privéberichten te bekijken   InloggenInloggen 

Conf progje in C

 
Nieuw onderwerp plaatsen   Reageren    AllesLinux Forumindex -> Programmeren en Scripten
Vorige onderwerp :: Volgende onderwerp  
Auteur Bericht
Dieharddia



Geregistreerd op: 09 Aug 2006
Berichten: 173

BerichtGeplaatst: Di Mrt 06, 2007 11:01 pm    Onderwerp: Conf progje in C Reageren met citaat

Omdat ik voor school C moet gaan leren (Sad) leek het me leuk een progje te maken wat ik bij het installeren van Gentoo kan gebruiken. Je moet namelijk nogal wat standaard configs aanpassen, die er (zeker op dezelfde pc bij herinstalls) vaak hetzelfde zijn en aan de hand van een paar vragen kunnen worden gemaakt. Zo hoef ik dus ook niet meer steeds terug te zoeken in de guide, welke configs allemaal moesten worden ingesteld..
Veel meer dan printf(), scanf(), strcat() en wegschrijven naar een bestand kan ik eigenlijk niet, maar daar kom ik voorlopig een eind mee Wink Zeker voor mensen die net Java hebben geleerd, is C echt een ramp Mr. Green!

Hier is de source tot nu toe, voor /etc/make.conf:

Code:
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

main()
{
   FILE *puit, *fopen();
   int menuItem;
   menuItem=printmenu();
   do{
      // /etc/make.conf
      if(menuItem==1){
         char makeconf[500]="";
         char value[100];
         char useflags[100];

         printf("\nConfiguring make.conf\nEnter your CFLAGS (ie \"-02 -march=i686 -pipe\"):\n");scanf("%s",&value);strcat(makeconf,sett("CFLAGS",value));

         printf("Enter your CHOST (leave blank for \"i686-pc-linux-gnu\"):\n");scanf("%s",&value);if(value[0]=='\0'){strcat(makeconf,sett("CHOST","i686-pc-linux-gnu"));}else{strcat(makeconf,sett("CHOST",value));}

         strcat(makeconf,sett("CXXFLAGS","${CFLAGS}"));

         printf("Enter your Download mirrors (use \"0\" for FTP UTwente and Scarlet):\n");scanf("%s",&value);if(value[0]=='\0'){strcat(makeconf,sett("GENTOO_MIRRORS","http://ftp.snt.utwente.nl/pub/os/linux/gentoo ftp://mirror.scarlet-internet.nl/pub/gentoo "));}else{strcat(makeconf,sett("GENTOO_MIRRORS",value));}

         printf("Do you want to use Distcc? (y/n)\n");scanf("%s",&value);
         if(value[0]=='y'){strcat(makeconf,sett("FEATURES","distcc"));printf("Enter the amount of MAKEOPTS (ie \"-jN\" where N = (amount of total cores times 2) + 1):\n");scanf("%s",&value);strcat(makeconf,sett("MAKEOPTS",value));}else{strcat(makeconf,sett("#FEATURES","distcc"));printf("Enter your MAKEOPTS (ie \"-jN\" where N is your amount of cores + 1):\n");scanf("%s",&value);strcat(makeconf,sett("MAKEOPTS",value));}

         printf("1.Use X with KDE\n2.Use X with Gnome\n3.Use X only\n0.Don't use X for now\nEnter your selection: ");scanf("%s",&value);if(value[0]=='1'){strcat(useflags,"X kde kdm qt -gtk -gnome ");}else{if(value[0]=='2'){strcat(useflags,"X -kde -kdm -qt gnome gtk ");}else{if(value[0]=='3'){strcat(useflags,"X ");}}}

         printf("Enter your X input devices (ie \"mouse keyboard\"):\n");scanf("%s",&value);strcat(makeconf,sett("INPUT_DEVICES",value));

         printf("Enter your X video card drivers (ie \"nvidia fglrx radeon vesa vga vmware\"):\n");scanf("%s",&value);strcat(makeconf,sett("VIDEO_CARDS",value));

         printf("Current use flags: %s\n", useflags);

         printf("Enter your USE flags other than X flags (hal dbus dvd alsa):\n");scanf("%s",&value);strcat(useflags,value);strcat(makeconf,sett("USE",useflags));

         printf("Current use flags: %s\n", useflags);

         printf("\nYour makeconf settings that will be written to \"/etc/make.conf\":\n\n%s\n\nOverwrite your current make.conf? (y/n)");scanf("%s",&value);
         if(value[0]=='y'){puit=fopen("/etc/make.conf.new" , "w");fputs(makeconf, puit);if(ferror(puit)){printf("Write error!");}else{printf("Write succesfull closing file..\n");}fclose(puit);}
         
         
         
         menuItem=printmenu();
      }
   }while(menuItem > 0);
   //char config[1000]="";
   //strcat(config,sett("SettingVar","ValueVar"));
   //printf("Opening file..\n");
   //puit=fopen("text.out" , "w");
   //printf("File opened, starting write..\n");
   //fputs(config, puit);
   //if(ferror(puit)){printf("Write error!");}else{printf("Write succesfull closing file..\n");}
   //fclose(puit);
   exit(1);
}

printmenu()
{
   int menuItem;
   printf("Gonf Version 0.10 alpha installkit\n\n1.Configure make.conf (/etc/make.conf)\n0.Exit\n\nEnter your choice: ");
   scanf("%d", &menuItem);
   return menuItem;
}

sett(char setting[100],char value[50])
{
   char tmp[100];
   strcpy(tmp, setting);
   strcat(tmp,"=\"");
   strcat(tmp,value);
   strcat(tmp,"\"\n");
   return tmp;
}


Bij het compilen krijg ik de volgende warnings:

Code:
18: warning: passing argument 2 of 'strcat' makes pointer from integer without a cast


Deze warning krijg ik bij elke strcat, dus ook op lines 20,22,24,27,etc.. Pointers zijn niet m'n sterkste kant, omdat grof gezegd ik niet goed weet wanneer je nou met welk type bezig bent (wanneer de verwijzing, wanneer de inhoud)..

Hierna loopt het programma'tje wel, maar slaat hij een vraag over, hij print dan wel de vraag maar wacht niet op antwoord :S Als ik de source dan check heb ik netjes scanf() gedaan en afgesloten met ; dus misschien heeft die pointer warning er iets mee te maken..?

Enige C experts in de buurt? Wink

Groetjes, Jerry Very Happy
_________________
Check je Spater.
Terug naar boven
Profiel bekijken Stuur privébericht
Dieharddia



Geregistreerd op: 09 Aug 2006
Berichten: 173

BerichtGeplaatst: Di Mrt 06, 2007 11:02 pm    Onderwerp: Reageren met citaat

Ik ben het even kwijt, had iemand m'n topic gedelete of had ik hem niet verzonden? :S
_________________
Check je Spater.
Terug naar boven
Profiel bekijken Stuur privébericht
Rinse
Crewlid


Geregistreerd op: 09 Feb 2005
Berichten: 6900
Woonplaats: bolsward

BerichtGeplaatst: Wo Mrt 07, 2007 12:14 am    Onderwerp: Reageren met citaat

niet verzonden denk ik, ik zie dit bericht voor het eerst Smile
_________________
Help mee om KDE 4.7 in het Nederlands of Fries te vertalen!!
Terug naar boven
Profiel bekijken Stuur privébericht Website bekijken MSN Messenger
pam
Crewlid


Geregistreerd op: 04 Sep 2004
Berichten: 4934

BerichtGeplaatst: Wo Mrt 07, 2007 12:27 am    Onderwerp: Reageren met citaat

LOL, ik weet ook nergens van Cool
Terug naar boven
Profiel bekijken Stuur privébericht
david



Geregistreerd op: 11 Nov 2006
Berichten: 48

BerichtGeplaatst: Wo Mrt 07, 2007 11:48 am    Onderwerp: Reageren met citaat

hoi,

echt een superexpert in c ben ik niet, maar ik kan je wel verder helpen.

punt 1 is dat je geen return type in je functie hebt:
sett(char setting[100],char value[50])
moet
char* sett(char setting[100],char value[50])
hiermee geef je aan dat sett een pointer naar char teruggeeft.

punt 2 is dat de functiedefinitie ontbreekt. voor de main moet je aangeven welke functies je verder in je file hebt. hier moet dus een regel met:
char* sett(char setting[100],char value[50]);

punt 3 is dat je nu in sett een pointer naar tmp, een lokale variabele in set returnt.
als sett is afgelopen is deze out of scope, en dus niet meer te gebruiken.
tmp kan je dus beter global maken.

sterkte en keep up the good work!
c is eigenlijk best wel mooi en leuk Smile

david
Terug naar boven
Profiel bekijken Stuur privébericht
Dieharddia



Geregistreerd op: 09 Aug 2006
Berichten: 173

BerichtGeplaatst: Wo Mrt 07, 2007 12:30 pm    Onderwerp: Reageren met citaat

Kijk dat is duidelijke taal, thnx Wink

Bij punt 3 (de tmp variabele) is het zo dat hij lokaal moet zijn, hij heet daarom expres tmp (temporary) Wink

Ohja en ik had nog een fout gevonden: Had 50 chars voor value gereserveerd, maar bij de URL naar GENTOO_MIRRORS gebruikte ik er 200 ofzo Wink Heb die dus even veranderd naar 500 chars.

C is inderdaad best mooi, maar je maakt heel gemakkelijk fouten Wink

Grtz, Jerry =)
_________________
Check je Spater.
Terug naar boven
Profiel bekijken Stuur privébericht
Berichten van afgelopen:   
Nieuw onderwerp plaatsen   Reageren    AllesLinux Forumindex -> Programmeren en Scripten Tijden zijn in GMT + 2 uur
Pagina 1 van 1

 
Ga naar:  
Je mag geen nieuwe onderwerpen plaatsen in dit subforum
Je mag geen reacties plaatsen in dit subforum
Je mag je berichten niet bewerken in dit subforum
Je mag je berichten niet verwijderen in dit subforum
Je mag niet stemmen in polls in dit subforum


Powered by phpBB © 2001, 2005 phpBB Group
Vertaling door Lennart Goosens.