Ho diviso il codice in 3 file: es.c, disco.c, disco.h
codice di disco.h:
typedef struct elem {
char titolo; //campi della struct
char artista;
char genere;
int annouscita;
struct elem *next; //puntatore al prossimo nodo della lista
//struct elem *prev; //puntatore al precedente nodo della lista
} elemen_t;
typedef elemen_t *lista_t;
void printlist(lista_t lista);
int is_empty(lista_t lista);
int length(lista_t lista);
lista_t insert(lista_t lista, char titolo, char artista, char genere, int annouscita);
codice di disco.c:
// Definizione dei tipi
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "disco.h"
// Funzioni
void printlist(lista_t lista) {
lista_t curr;
for(curr = lista; curr != NULL; curr = curr->next) {
printf("%d\t",curr->titolo);
printf("%d\t",curr->artista);
printf("%d\t",curr->genere);
printf("%d\t",curr->annouscita);
}
printf("\n");
}
int is_empty(lista_t lista) {
return(lista == NULL);
}
int length(lista_t lista) {
int n = 0;
while(lista != NULL) {
n++;
lista = lista->next;
}
return n;
}
lista_t insert(lista_t lista, char titolo, char artista, char genere, int annouscita) {
elemen_t *paux;
paux = (elemen_t*) malloc(sizeof(elemen_t));
if (paux == NULL){
fprintf(stderr, "Out of memory\n");
exit(-1);
}
paux->titolo = titolo;
paux->artista = artista;
paux->genere = genere;
paux->annouscita = annouscita;
paux->next = lista;
return paux;
}
codice di es.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "disco.h"
int main(int argc, char *argv[]) {
FILE *fin;
lista_t lista = NULL;
//copio i dati del file nella lista
//fin = fopen(argv[1],"r");
//struct nodo
if (argc < 2){
printf("\nSpecificare l'archivio dei dischi.\n\n");
return 1;
} else if (argc < 3){
printf("\nProgramma richiamato senza opzioni.\n\n");
system("cat archivio.txt");
printf("\n");
return 1;
} else if (strcmp(argv[2],"-i") == 0){ //confronto il terzo argomento con la stringa -i
fin = fopen(argv[1],"a+");
if (fin == NULL){
printf("Errore nell’apertura dell'archivio.\n");
//}if (argv[3] || argv[4] || argv[5] || argv[6] == NULL){
// printf("\nErrore: non hai scritto tutti i dati richiesti.\n\n");
// return 1;
}else{
//if (){
// printf("Errore nell’apertura dell'archivio.\n");
//}
fprintf(fin, "%s\t%s\t%s\t%s\n", argv[3],argv[4],argv[5],argv[6]);
system("cat archivio.txt");
printf("\n");
}
lista = insert(lista, argv[3], argv[4], argv[5], argv[6]);
printf("La lista e’ lunga %d elementi.\n", length(lista));
printlist(lista);
printf("La lista e’ vuota se c'è un uno: %d.\n", is_empty(lista));
}else if (strcmp(argv[2],"-t") == 0){
system("cat archivio.txt");
return 1;
}else if (strcmp(argv[2],"-c") == 0){
system("cat archivio.txt");
return 1;
}else if (strcmp(argv[2],"-a") == 0){
system("cat archivio.txt");
return 1;
}else if (strcmp(argv[2],"-y") == 0){
system("cat archivio.txt");
return 1;
}else if (strcmp(argv[2],"-g") == 0){
system("cat archivio.txt");
return 1;
}else{
printf("\nOpzione non prevista.\n\n");
return 1;
}
if ( fclose(fin) != 0 ) { //verifico la corretta chiusura del file
printf("Errore nella chiusura dell'archivio.\n\n");
exit(1);
}
//return 0;
}