예제 #1
0
파일: file.c 프로젝트: manninglucas/lmfsys
void write_file(int inum, FILE *inf, int size, int offset)
{
    resize_file(inum, offset);
    u8 bytes[size];
    for (int i = 0; i < size; i++) {
        u8 byte = fgetc(inf);
        bytes[i] = byte;
    }
    append_data_to_file(inum, bytes, size);
}
예제 #2
0
파일: file.c 프로젝트: manninglucas/lmfsys
void append_file(int inum, FILE *inf, int size)
{
    printf("appen file\n");
    u8 bytes[size];
    for (int i = 0; i < size; i++) {
        u8 byte = fgetc(inf);
        bytes[i] = byte;
    }
    append_data_to_file(inum, bytes, size);
}
예제 #3
0
int address(void)
{
    struct address_data data;
    ADDRESS_BOOK address_config;

    /* initialize config of address book */
    strcpy(address_config.filename, "address.txt");
    address_config.last_id = 1;

    load_file(&address_config);

    for(;;) {
        switch(menu()) {
        case INPUT:
            input_data(&address_config, &data);
            append_data_to_file(address_config, data);
            break;
        case SHOW:
            show_data(address_config);
            break;
        case EDIT:
            edit_data(&address_config);
            break;
        case DELETE:
            delete_data(address_config);
            break;
        case SEARCH:
            search(address_config);
            break;
        case EXIT:
            exit(0);
            break;
        case CONFIG:
            config(&address_config);
            break;
        case STATUS:
            show_status(address_config);
            break;
        default:
            break;
        }
    }

    return 0;
}
예제 #4
0
int edit_data(ADDRESS_BOOK *config)
{
    int type;
    int match_flag = 0;
    int phone_flag = 0;
    int count;
    int index;
    int i, j, k;
    char buf[1024];
    char format_str[1024];
    char input_flag = 0;
    FILE *fp;
    char *filename = config->filename;

    struct address_data search, data;
    struct address_data list[1024];
    int list_index[1024];

    enum {
        ID,
        NAME,
        ADDRESS,
        PHONE,
    };

    do {
        puts(
            "Please choose entry\n"
            "select search type\n"
            "[ID, Name, Address, Phone]");
        fgets(buf, sizeof(buf), stdin);
        buf[strlen(buf) - 1] = '\0';
        if(!strcmp(buf, "id") |
                !strcmp(buf, "Id") |
                !strcmp(buf, "ID")) {
            type = ID;
            input_flag = 1;
        } else if(!strcmp(buf, "name") |
                  !strcmp(buf, "Name") |
                  !strcmp(buf, "NAME")) {
            type = NAME;
            input_flag = 1;
        } else if(!strcmp(buf, "address") |
                  !strcmp(buf, "Address") |
                  !strcmp(buf, "ADDRESS")) {
            type = ADDRESS;
            input_flag = 1;
        } else if(!strcmp(buf, "phone") |
                  !strcmp(buf, "Phone") |
                  !strcmp(buf, "PHONE")) {
            type = PHONE;
            input_flag = 1;
        }
    } while(input_flag == 0);

    switch(type) {
    case ID:
        do {
            puts("Please enter id for edit");
            printf("> ");
            fgets(buf, sizeof(buf), stdin);
            search.no = atoi(buf);
        } while(search.no == 0);
        break;
    case NAME:
        puts("Please enter name for edit");
        printf("> ");
        fgets(buf, sizeof(buf), stdin);
        buf[strlen(buf) - 1] = '\0';
        strncpy(search.name, buf, sizeof(search.name));
        break;
    case ADDRESS:
        puts("Please enter address for edit");
        printf("> ");
        fgets(buf, sizeof(buf), stdin);
        buf[strlen(buf) - 1] = '\0';
        strncpy(search.address, buf, sizeof(search.address));
        break;
    case PHONE:
        puts("Please enter phone number for edit");
        printf("> ");
        fgets(buf, sizeof(buf), stdin);
        for(i = 0; buf[i] != '\n'; i++) {
            search.phone[i] = buf[i] - '0';
        }
        search.phone[i] = END_OF_PHONE_NUMBER;
        break;
    }

    fp = fopen(filename, "r");
    if(!fp) {
        fprintf(stderr, "Error: file open [%s]\n", filename);
        return -1;
    }

    for(count = 0, index = 0;;) {
        match_flag = 0;
        if(fgets(buf, sizeof(buf), fp) == 0) break;
        data = decode_data(buf);
        if(data.no == 0) continue;
        list[count] = data;
        list_index[count] = 0;
        if(data.status == (0x01 << HIDE)) {
            count++;
            continue;
        }
        switch(type) {
        case ID:
            if(search.no == data.no)
                match_flag = 1;
            break;
        case NAME:
            if(!strcmp(search.name, data.name))
                match_flag = 1;
            else {
                for(i = 0; data.name[i] != '\0'; i++) {
                    buf[i] = tolower(data.name[i]);
                }
                buf[i] = '\0';
                if(!strcmp(search.name, buf))
                    match_flag = 1;
            }
            break;
        case ADDRESS:
            if(!strcmp(search.address, data.address))
                match_flag = 1;
            break;
        case PHONE:
            for(i = 0; search.phone[i] != END_OF_PHONE_NUMBER && data.phone[i] != END_OF_PHONE_NUMBER; i++) {
                phone_flag = 0;
                if(search.phone[i] != data.phone[i]) break;
                phone_flag = 1;
            }
            if(phone_flag)
                match_flag = 1;
            break;
        }
        if(match_flag != 0) {
            list_index[count] = 1;
            index++;
        }
        count++;
    }
    if(index == 0) {
        puts("Not found!");
    } else if(index == 1) {
        for(i = 0; i < count; i++) {
            if(list_index[i] == 1) {
                list[i].status = (0x01 << HIDE);
                break;
            }
        }
    } else if(index > 1) {
        printf("Find some entries!\nChoose entry\n");
        for(i = 0, j = 0; i < count; i++) {
            if(list_index[i] == 1) {
                sprintf(format_str, "| %%2d | %%%ds | %%%ds | ", config->width_name, config->width_address);
                printf(format_str, j + 1, list[i].name, list[i].address);
                for(k = 0; list[i].phone[k] != END_OF_PHONE_NUMBER; k++) {
                    printf("%d", list[i].phone[k]);
                }
                printf(" |\n");
                j++;
            }
        }
        fgets(buf, sizeof(buf), stdin);
        for(i = 0, j = 0; i < count; i++) {
            if(list_index[i] == 1) {
                if((j - 1) == atoi(buf)) {
                    list[i].status = (0x01 << HIDE);
                    break;
                }
                j++;
            }
        }
    }
    fclose(fp);
    fp = fopen(filename, "w");
    if(!fp) {
        fprintf(stderr, "Error: file open [%s]\n", filename);
        return -1;
    }
    for(i = 0; i < count; i++) {
        fprintf(fp, "%d,%s,%s,", list[i].no, list[i].name, list[i].address);
        for(k = 0; list[i].phone[k] != END_OF_PHONE_NUMBER; k++) {
            fprintf(fp, "%d", list[i].phone[k]);
        }
        fprintf(fp, ",%d\n", list[i].status);
    }
    fclose(fp);

    input_data(config, &data);
    append_data_to_file(*config, data);
    return 0;
}
예제 #5
0
파일: file.c 프로젝트: manninglucas/lmfsys
void write_data_to_file(int inum, void *data, size_t size, int offset)
{
    resize_file(inum, offset);
    append_data_to_file(inum, data, size);
}