rebel2000 Δημοσ. 19 Μαΐου 2003 Δημοσ. 19 Μαΐου 2003 Έχω να κάνω μια εργασία που ονομάζετε προσομοίωση της εντολής more του DOS που να εμφανίζει την καθιερωμένη είσοδο σελίδα σελίδα,με πρόγραμμα σε γλώσσα C. Επειδή όμως το επίπεδο μου στη C είναι ακόμα αρκετά χαμηλό θα ήθελα την βοηθεια σας!!
random Δημοσ. 19 Μαΐου 2003 Δημοσ. 19 Μαΐου 2003 Χωρις παρεξηγηση, μηπως ξέρεις basic? αν ναι, πάρε εναν translator basic to c, http://bcx.basicguru.com/ και εναν c compiler http://www.cs.virginia.edu/~lcc-win32/ δυστυχώς δεν ξερω κι εγω C.
random Δημοσ. 19 Μαΐου 2003 Δημοσ. 19 Μαΐου 2003 αν είσαι τελείως ανερυθρίαστος δές εδώ http://www.freedos.org/jhall/utils/files/ more*.zip
JPG Δημοσ. 19 Μαΐου 2003 Δημοσ. 19 Μαΐου 2003 random said: Χωρις παρεξηγηση, μηπως ξέρεις basic? αν ναι, πάρε εναν translator basic to c, http://bcx.basicguru.com/ και εναν c compiler http://www.cs.virginia.edu/~lcc-win32/ δυστυχώς δεν ξερω κι εγω C. LOL. Poli kalos random. <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/smile.gif" alt="" /> me ekanes kai gelasa proi proi. File ta pragmata gia esena einai poli apla. Bres ena mixanima unix. Psakse sta source kai pare ton kodika tis more etoimo <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/wink.gif" alt="" />
Dvs Δημοσ. 20 Μαΐου 2003 Δημοσ. 20 Μαΐου 2003 JPG said: random said: Χωρις παρεξηγηση, μηπως ξέρεις basic? αν ναι, πάρε εναν translator basic to c, http://bcx.basicguru.com/ και εναν c compiler http://www.cs.virginia.edu/~lcc-win32/ δυστυχώς δεν ξερω κι εγω C. LOL. Poli kalos random. <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/smile.gif" alt="" /> me ekanes kai gelasa proi proi. File ta pragmata gia esena einai poli apla. Bres ena mixanima unix. Psakse sta source kai pare ton kodika tis more etoimo <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/wink.gif" alt="" /> Pisteueis o kathigitis i o ergastiriakos den tah to exei skeftei ayto? <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/smile.gif" alt="" />
rebel2000 Δημοσ. 21 Μαΐου 2003 Μέλος Δημοσ. 21 Μαΐου 2003 Ευχαριστώ για τις απαντήσεις αλλά απο τη μία τα zip δεν με βοήθησαν ιδιαίτερα ενώ να πάρω τον κώδικα έτοιμο είναι κάτι το οποίο δεν γίνετε γιατι θα εξεταστώ σ'αυτό. Αν έχετε υπόψιν σας κάποιο κείμενο που θα με βοηθούσε ή αν μπορώ να ψάξω για κάτι συγκεκριμένο... Ευχαριστώ.
Directx Δημοσ. 21 Μαΐου 2003 Δημοσ. 21 Μαΐου 2003 Λοιπόν σχεδίασα μια more like εφαρμογή, δεν μπορώ να υποσχεθώ ότι είναι bug free καθώς είναι η πρώτη φορά που ασχολούμαι με την «περίφημη» more. Το δημοσιεύω προς κάθε ενδιαφερόμενο, μαζί με ορισμένα σχόλια για το πώς θα πρέπει δουλεύει μια more ρουτίνα. > // Directx's More (Turbo C/C++ 3.0 for DOS) #include <stdio.h> #include <conio.h> int iReturn=0,iLine=0,iC; FILE *Stream; text_info TIS; void main(int argc,char *argv[]) { // TODO: Attempt to open first parameter as Stream if((Stream=fopen(argv[1],"rb"))!=NULL) { // HINT: Get screen dimensions (will be used latter on) gettextinfo(&TIS); while((iC=fgetc(Stream))!=EOF) { // HINT: Suitiation controlling line warps if(iLine>=TIS.screenheight*TIS.screenwidth-1) { getch(); iLine=0; } // HINT: Suitiation controlling Return (new lines) if(iReturn>=TIS.screenheight) { iReturn=0; iLine=0; getch(); } if(iC==0x0D) { iReturn++; } iLine++; putchar(iC); } // HINT: Close Stream (release memory) fclose(Stream); getch(); } else { printf("file open error - %s\n",argv[1]); } } --- 1ον) Παίρνουμε τις διαστάσεις της τρέχουσας ανάλυσης της οθόνης μας στην δομή TIS ώστε να ξέρουμε πόσους χαρακτήρες μπορεί να χωρέσει πριν γεμίσει και χαθεί ο πρώτος χαρακτήρας που θα εκτυπώσουμε. 2ον) Πριν παρουσιάσουμε τον χαρακτήρα μας στην οθόνη (stdout) κάνουμε δυο ελέγχους: Α) Μετράμε αν iLine (δηλαδή οι εκτυπωμένοι ως τώρα χαρακτήρες) έχει ξεπεράσει το συνολικό μέγεθος χαρακτήρων -1 (μετράμε από το μηδέν στην C) της οθόνης οπότε διακόπτουμε την έξοδο ή Β) Μετράμε πόσους χαρακτήρες αλλαγής γραμμής (iReturn) (13 ή 0x0D) έχουμε λάβει ως τώρα σε σχέση με το ύψος της οθόνης οπότε για άλλη μια φορά διακόπτουμε την έξοδο. Αν σας κάνει εντύπωση ο Α έλεγχος, μην ξεχνάτε ότι αν μια γραμμή είναι μεγαλύτερη από το μήκος της ανάλυσης της οθόνης μας το DOS μεταφέρει την συνέχεια της σε νέα γραμμή από μόνο του δίχως να υπάρχει κάποιος 0x0D χαρακτήρας στο αρχείο εισόδου (οπότε πρέπει κάπως να υπολογίζουμε και αυτή την περίπτωση). Ο κώδικας δοκιμάστηκε σε δυο ειδικά κατασκευασμένα κείμενα που ελέγχουν την λειτουργία του Α και Β ελέγχου ενώ ύστερα το δοκίμασα και σε ορισμένα γενικά txt, στα περισσότερα εκτός ορισμένων δύσκολων (με binary chars) logs δούλεψε καλά (φυσικά και θα έχει bugs πάντως). Δείτε το ως μια πρώτη γεύση. (Ο κώδικας γράφτηκε σε Turbo C 3 για MS-DOS) Ελπίζω να σας φανεί χρήσιμος, Καλή τύχη.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.