view scripturereader.c @ 0:6e1857de3922

Finished
author VilyaemKenyaz
date Fri, 25 Aug 2023 14:14:24 -0400
parents
children
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define PAGE_SIZE 50

void print_page(const char* filename, int page_number, int total_pages) {
    system("clear");
    printf("---SCRIPTURE-READER---\n");
    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("Error opening file: %s\n", filename);
        exit(1);
    }

    char line[256];
    int line_count = 0;
    int current_page = 1;

    while (fgets(line, sizeof(line), file)) {
        line_count++;
        if (line_count > (page_number - 1) * PAGE_SIZE && line_count <= page_number * PAGE_SIZE) {
            printf("%s", line);
        }
        if (line_count > page_number * PAGE_SIZE) {
            break;
        }
    }

    fclose(file);

    printf("\n--- Page %d of %d ---\n", page_number, total_pages);
}

int get_total_pages(const char* filename) {
    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("Error opening file: %s\n", filename);
        exit(1);
    }

    char line[256];
    int line_count = 0;

    while (fgets(line, sizeof(line), file)) {
        line_count++;
    }

    fclose(file);

    return (line_count + PAGE_SIZE - 1) / PAGE_SIZE;
}

int main(int argc, char* argv[]) {
    if (argc < 2 || argc > 3) {
        printf("ScriptureReader by William @ peepsoftgames.github.io thekenyaz@yandex.com\n");
        printf("Usage:\n");
        printf("  scripturereader <textfile>\n");
        return 1;
    }

    const char* filename = argv[1];

    int total_pages = get_total_pages(filename);
    int current_page = 1;

    while (1) {
        system("clear");
        print_page(filename, current_page, total_pages);

        char ch;
        scanf(" %c", &ch);
        switch (ch) {
            case 'l':
            case 'L':
 if (current_page > 1) {
                    current_page--;
                }
                break;
            case 'r':
            case 'R':
 if (current_page < total_pages) {
                    current_page++;
                }
                break;
            case 'q':
            case 'Q':
 exit(0);
        }
    }

    exit(0);
}