display_text.c
The program doesn't use a matrix of strings as buffer but reads directly the strings from the text.
Text must be shown as pages composed of 40 lines each.
After printing the first page, the program shows a prompt >> and wait for the user's command.  
Commands are:
n: to show next page
p: to show previous page
q: to quit the program
The program uses the system call lseek(fd, offset, mode) or fseek(). 
Pay attention to the fact the rows have different length !
//LIBRARIES
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//GLOBAL VARS
const char *filename = NULL;      //file name
FILE *file;                       //file stream
int page_number=1;                //number of current page
int line_count;
int page_total=0;
//PROTOTYPES METHODS
int prompt(void);
int print_page(int num_page_print);  
int main(int argc, char *argv[]) {
    int i;  //loop counter
    char name[50]; //name of file
    //read the name of the file from command line
    if(argc!=2) {
        printf("Specify input on command line.\n");
        scanf("%s", name);
        filename = name;
    }
    else if(argv[1]!=NULL)
             filename=argv[1];
         else
             return 1; //error
    //try to open the file
    file=fopen(filename, "rt");
    if(file == NULL){
        printf("Cannot open the file! %s \n",filename);
        return 1; //error
    }
    prompt();                       //call for prompt
    fclose(file);                   //close file
    return 0;                       //everything has gone as supposed :-)
}
int prompt(void) {
    char *cmd=NULL;                  //cmd
    cmd=malloc(2*sizeof(char*));         //allocate two bit for command
    char line[100];
    while(fgets(line, sizeof(line), file)!=NULL)  //count file lines
        line_count++;
    rewind(file); 
    //number of total pages  
    if(line_count%40==0)
        page_total=line_count/40;
    else
        page_total=line_count/40+1;
    //printf("\nTotal pages are %d\n",page_total);
    //while cmd!=q, continue to show prompt >>
    while(1){
        //VIEW ALL COMMANDS
        printf("a: next page; i: previous page; q: quit\n"); 
        printf(">> ");
        scanf("%s", cmd);
        //next page
        if(page_number!=page_total && strcmp(cmd,"n")==0){
            print_page(page_number+1);               //print next page
            page_number++;                           //update number of page
        }
        //prev page
        if(page_number!=1 && strcmp(cmd,"p")==0){
            print_page(page_number-1);               //print prev page
            page_number--;                           //update number of page
        }
        //exit
        if(strcmp(cmd, "q")==0){
            free(cmd);                       //free memory
            return 0;                          //success, return zero
        }
    }
}
//My problems start here
int print_page(int num_page_print) {
    char line[100]; 
    int i;
    if(num_page_print < page_number)
        //fseek change offset to print prev page
    else 
        //fseek change offset to print next page
    for(i = 0; i < 40; i++) {
        fread(line, sizeof(line),1, file); 
        //how do I print lines that have different lengths!
        printf("[%d] %s\n",i+1, line);
    }
}
//Any comments, reccomendations and critics are welcome :-)`
I would like to: first print 40 lines of a given file.txt, but since I am reading directly from file, the output I get is that more than 40 lines are printed, probably because the char line[100] string is predefined, if you could suggest me how to print those lines that have different size that would be great!
 
     
    