home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Best of the Best
/
_.img
/
02113
/
liesmich.c
< prev
next >
Wrap
Text File
|
1991-03-18
|
5KB
|
202 lines
/* LIESMICH.C
***********************************************
* compilliert mit TINY-Modell
*
* Das Liesmich Programm gibt die Dateien LIESMICH.TXT und
* LIESMICH.BAT wahlweise auf dem Bildschirm oder Drucker
* aus. Diese Dateien werden im gleichen Verzeichnis wie das
* Programm selbst gesucht. Wird das Programm umbenannt,
* werden automatisch auch die Dateien unter dem neuen Namen
* gesucht !
*/
#include <stdio.h>
#include <string.h>
#include <dos.h>
char menuc[] = { "\033[0J\
LIESMICH.COM (c) Copyright: Steffen Anders / Lucka / 1991\n\
======================================================================\n\
\n\
1 - Ausgabe der Hinweistexte auf dem Bildschirm\n\
2 - Ausgabe der Hinweistexte auf dem Drucker\n\
3 - Ausgabe der Dokumentation auf dem Bildschirm\n\
4 - Ausgabe der Dokumentation auf dem Drucker\n\
E - Beenden des LIESMICH-Programms\n\
\n\
======================================================================\n\
\n\
Lesen Sie zuerst die Hinweistexte und anschließend die Dokumenation!\n\
\n\
\n\
\n\
----------------------------------------------------------------------\n\
\n\
Bitte eine der Funktionen (1..4/E) wählen ... \
" };
#define errstr "\nkeine Datei %s vorhanden\nProgramm abgebrochen\n\n"
#define mstr1 "Enter = Zeile weiter Leertaste = Seite weiter Q = Ende"
#define mstr2 "fortsetzen mit Enter-Taste ... "
char lmtxt[128];
char lmdok[128];
/******* BEGINN DER FUNKTIONSDEFINITIONEN **************************/
/* Zeichen ohne Echo von der Tastatur
* einlesen, Funktionstasten werden ueber-
* lesen, solange bis ein einzelnes Zeichen
* eingegeben wurde
*/
int inputc()
{
register int n;
for (;;)
{ if ((n = bdos(7,0,0)) == 0) /* Sondertaste ? */
bdos(7,0,0);
else return(n); /* normales Zeichen */
}
}
/* Auf Eingabe eines Zeichens warten,
* das in der Zeichenkette s enthalten ist
* die eingebenen Zeichen werden dabei in
* Grossbuchstaben konvertiert
* der Code des Eingebenen Zerichen wird
* zur Standardausgabe geschrieben und
* per return() zurueckgegeben
*/
int getmenu(char *s)
{
int n;
char *c;
for (;;)
{ n = toupper(inputc());
for (c=s; *c; )
if (*c++ == n)
{ if (n >= ' ')
putchar(n);
else putchar(' ');
return(n);
}
}
}
/* Eroeffnen einer Datei zum Lesen
* wird die Datei nicht gefunden erfolgt
* Programmabbruch
*/
FILE *Fopen(char *name)
{
FILE *f;
putchar('\n');
if ((f = fopen(name,"r")) != NULL)
return(f);
printf(errstr,name);
exit(2);
}
/* Ausgabe einer Datei auf dem Bildschirm
* nach jeder Seite wird angehalten und der Abbruch
* der Anzeige ermoeglicht
*/
void show(char *name)
{
FILE *f;
int n,c,l;
char *s;
s = mstr1;
for (n=26; --n > 0; putchar('\n'));
for (f = Fopen(name);((c = fgetc(f)) != EOF);)
{
do { if (c == 12)
c = '\n';
putchar(c);
if (c == '\n')
n++;
if (n < 23)
c = fgetc(f);
}
while ((n < 23) && (c != EOF));
if (c != EOF)
{ printf(s);
switch (getmenu("\r Q"))
{ case 'Q' : goto show1;
case ' ' : n = 0; break;
case '\r' : n = 22; break;
}
for (l = strlen(s) + 1; l-- > 0; printf("\b \b"));
}
}
printf("\n%s",mstr2);
getmenu("\r");
show1:
fclose(f);
}
/* Ausgabe einer Datei auf dem Drucker
*/
void prin(char *name)
{
FILE *f;
int n,ls;
for ( ls = 1, f = Fopen(name);
((n = fgetc(f)) != EOF);
fputc(n,stdprn))
{ if (ls)
{ fprintf(stdprn," ");
ls = 0;
}
switch (n)
{ case '\n':
case 12 : fputc('\r',stdprn);
ls = 1;
break;
case 2 : n = '-';
}
}
fclose(f);
}
/***************************************************************
*/
main(int argc, char *argv[])
{
char *c;
/* Dateinamen erzeugen
*/
strcpy(lmdok,argv[0]);
for (c=lmdok;*c;c++);
while (*c != '.') c--;
*(++c) = 0;
strcpy(lmtxt,lmdok);
strcat(lmdok,"DOK");
strcat(lmtxt,"TXT");
/* Hauptprogramm
*/
for (;;)
{ printf("%s",menuc);
switch (getmenu("1234E"))
{
case '1': show(lmtxt); break;
case '2': prin(lmtxt); break;
case '3': show(lmdok); break;
case '4': prin(lmdok); break;
default : putchar('\n');exit(0);
}
}
}