Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ****************************************
- MAIN.C
- ****************************************
- */
- /**
- * TODO
- * NAPISAC PROSTY PROGRAM WCZYTUJACY PLIK KONFIGURACYJNY, ODSEPAROWUJACY NAZWE
- * PARAMETRU OD JEGO WARTOSCI I WYPISAC NA EKRAN W ODWROTNEJ KOLEJNOSCI NIZ
- * ZOSTALY ZAPISANE W PLIKU.
- *
- * 1. Wyedytowac plik stack.h (sic!), tak by nie byl zwracany blad kompilacji.
- *
- * 2. Stworzyc plik src/stack.c i dodac w nim funkcje umieszczajace i
- * sciagajace ze stosu. Deklaracje funkcji umiescic w pliku stack.h.
- *
- * 3. Wczytac plik o nazwie podanej przez uzytkownika z linii polecen.
- * Odseparowac nazwe parametru od jego wartosci (wyszukac znak '='). Wlozyc na
- * stos;
- *
- * 4. Wypisac blad na stderr jesli wystapil jakis blad podczas
- * wczytywania/otwierania pliku;
- *
- * 5. Wypisac wszystkie pary w postaci "<nazwa>" = "<parametr>" na ekran;
- *
- * 6. Zwalniac zaalokowane zasoby...
- *
- * 7. Dokonczyc w domu!
- *
- * PRZYDATNE FUNKCJE:
- * fopen, fclose, malloc, free, strdup, strndup, fgetc
- * wczytywac z pliku przy pomocy fgetc
- *
- * dodatkowe informacje o tym co wykonuje dana funkcja mozna uzyskac wpisujac w kosoli:
- * man 3 fopen...
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "stack.h"
- #include "stack.h"
- #define MAXLINE 255
- int main(int argc, char **argv)
- {
- FILE *fp;
- if (argc < 2) {
- fputs("error! no file specified\n", stderr);
- return 1;
- }
- fp = fopen(argv[1], "r");
- if (!fp) {
- fputs("error! specified file does not exist\n", stderr);
- return 1;
- }
- int i = 0, flag = 0, c;
- char temp[MAXLINE];
- char *a, *b;
- while ((c = fgetc(fp)) != EOF) {
- switch(c) {
- case '=':
- if (flag)
- fputs("error!\n", stderr);
- else {
- flag = 1;
- if (!i) {
- fputs("error!\n", stderr);
- a = strdup("error");
- }
- else {
- temp[i] = '\0';
- i = 0;
- a = strdup(temp);
- }
- }
- break;
- case '\n':
- temp[i] = '\0';
- if (!flag) {
- fputs("error!\n", stderr);
- a = strdup(temp);
- b = strdup("error");
- }
- else {
- flag = 0;
- if (!i) {
- fputs("error!\n", stderr);
- b = strdup("error");
- }
- else
- b = strdup(temp);
- }
- i = 0;
- push(a, b);
- break;
- default:
- temp[i++] = c;
- break;
- }
- }
- stack *popped;
- while ((popped = pop())){
- printf("%s = %s\n", popped->name, popped->value);
- free(popped);
- }
- return 0;
- }
- /*
- ****************************************
- STACK.H
- ****************************************
- */
- #ifndef STACK
- #define STACK
- typedef struct stack {
- struct stack *next;
- char *name;
- char *value;
- } stack;
- //Definicje ponizszych funkcji i zmiennej w pliku stack.c
- extern stack * root;
- void push(char * a, char *b);
- stack * pop();
- #endif
- /*
- ****************************************
- STACK.C
- ****************************************
- */
- #include <stdlib.h>
- #include "stack.h"
- stack *root;
- void push(char * a, char *b) {
- stack *new = malloc(sizeof(stack));
- new->name = a;
- new->value = b;
- new->next = root;
- root = new;
- }
- struct stack* pop() {
- if (!root) return NULL;
- stack *temp = root;
- root = root->next;
- return temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement