home *** CD-ROM | disk | FTP | other *** search
/ The Best of the Best / _.img / 02113 / liesmich.c < prev    next >
Text File  |  1991-03-18  |  5KB  |  202 lines

  1. /* LIESMICH.C
  2.  ***********************************************
  3.  * compilliert mit TINY-Modell
  4.  *
  5.  * Das Liesmich Programm gibt die Dateien LIESMICH.TXT und
  6.  * LIESMICH.BAT  wahlweise auf dem Bildschirm oder Drucker
  7.  * aus. Diese Dateien werden im gleichen Verzeichnis wie das
  8.  * Programm selbst gesucht. Wird das Programm umbenannt, 
  9.  * werden automatisch auch die Dateien unter dem neuen Namen 
  10.  * gesucht !
  11.  */
  12.  
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <dos.h>
  16.  
  17. char menuc[] = { "\033[0J\
  18. LIESMICH.COM              (c) Copyright: Steffen Anders / Lucka / 1991\n\
  19. ======================================================================\n\
  20. \n\
  21.       1 - Ausgabe der Hinweistexte auf dem Bildschirm\n\
  22.       2 - Ausgabe der Hinweistexte auf dem Drucker\n\
  23.       3 - Ausgabe der Dokumentation auf dem Bildschirm\n\
  24.       4 - Ausgabe der Dokumentation auf dem Drucker\n\
  25.       E - Beenden des LIESMICH-Programms\n\
  26. \n\
  27. ======================================================================\n\
  28. \n\
  29. Lesen Sie zuerst die Hinweistexte und anschließend die Dokumenation!\n\
  30. \n\
  31. \n\
  32. \n\
  33. ----------------------------------------------------------------------\n\
  34. \n\
  35. Bitte eine der Funktionen (1..4/E)  wählen ... \
  36. "       };
  37.  
  38. #define errstr "\nkeine Datei %s vorhanden\nProgramm abgebrochen\n\n"
  39. #define mstr1 "Enter = Zeile weiter   Leertaste = Seite weiter   Q = Ende"
  40. #define mstr2 "fortsetzen mit Enter-Taste ... "
  41.  
  42. char lmtxt[128];
  43. char lmdok[128];
  44.  
  45.  
  46.  
  47. /******* BEGINN DER FUNKTIONSDEFINITIONEN **************************/
  48.  
  49. /* Zeichen ohne Echo von der Tastatur
  50.  * einlesen, Funktionstasten werden ueber-
  51.  * lesen, solange bis ein einzelnes Zeichen
  52.  * eingegeben wurde
  53.  */
  54. int inputc()
  55. {
  56.    register int n;
  57.  
  58.  for (;;)
  59.    {  if ((n = bdos(7,0,0)) == 0)   /* Sondertaste ? */
  60.          bdos(7,0,0);
  61.       else   return(n);             /* normales Zeichen */
  62.    }
  63. }
  64.  
  65. /* Auf Eingabe eines Zeichens warten,
  66.  * das in der Zeichenkette s enthalten ist
  67.  * die eingebenen Zeichen werden dabei in
  68.  * Grossbuchstaben konvertiert
  69.  * der Code des Eingebenen Zerichen wird 
  70.  * zur Standardausgabe geschrieben und 
  71.  * per return() zurueckgegeben
  72.  */
  73. int getmenu(char *s)
  74. {
  75.    int   n;
  76.    char  *c;
  77.  
  78.  for (;;)
  79.    { n = toupper(inputc());
  80.      for (c=s; *c; )
  81.        if (*c++ == n)
  82.       { if (n >= ' ')
  83.                  putchar(n);
  84.             else putchar(' ');
  85.         return(n);
  86.       }
  87.    }
  88. }
  89.  
  90. /* Eroeffnen einer Datei zum Lesen
  91.  * wird die Datei nicht gefunden erfolgt
  92.  * Programmabbruch
  93.  */
  94. FILE *Fopen(char *name)
  95. {
  96.   FILE *f;
  97.  
  98.  putchar('\n');
  99.  if ((f = fopen(name,"r")) != NULL)
  100.      return(f);
  101.  printf(errstr,name);
  102.  exit(2);
  103. }
  104.  
  105. /* Ausgabe einer Datei auf dem Bildschirm
  106.  * nach jeder Seite wird angehalten und der Abbruch
  107.  * der Anzeige ermoeglicht
  108.  */
  109. void show(char *name)
  110.   FILE *f;
  111.   int  n,c,l;
  112.   char *s;
  113.  
  114.  s = mstr1;
  115.  for (n=26; --n > 0; putchar('\n'));
  116.  
  117.  for (f = Fopen(name);((c = fgetc(f)) != EOF);)
  118.    { 
  119.      do { if (c == 12)
  120.               c = '\n';
  121.           putchar(c);
  122.           if (c == '\n')
  123.               n++;
  124.           if (n < 23)
  125.               c = fgetc(f);
  126.         }
  127.      while ((n < 23) && (c != EOF));
  128.  
  129.      if (c != EOF)
  130.        { printf(s);
  131.          switch (getmenu("\r Q"))
  132.           { case 'Q'  : goto show1;
  133.             case ' '  : n = 0;  break;
  134.             case '\r' : n = 22; break;
  135.           }
  136.          for (l = strlen(s) + 1; l-- > 0; printf("\b \b"));
  137.        }
  138.    }
  139.  
  140.  printf("\n%s",mstr2);
  141.  getmenu("\r");
  142. show1:
  143.  fclose(f);
  144. }
  145.  
  146. /* Ausgabe einer Datei auf dem Drucker
  147.  */
  148. void prin(char *name)
  149. {  
  150.   FILE *f;
  151.   int  n,ls;
  152.  
  153.  for ( ls = 1,   f = Fopen(name);
  154.        ((n = fgetc(f)) != EOF); 
  155.        fputc(n,stdprn))
  156.    { if (ls)
  157.         { fprintf(stdprn,"            ");
  158.           ls = 0;
  159.         }
  160.      switch (n)
  161.        { case '\n':
  162.          case 12  :  fputc('\r',stdprn);
  163.                      ls = 1;
  164.                      break;
  165.          case 2   :  n = '-';
  166.         }
  167.    }
  168.  fclose(f);
  169. }
  170.  
  171. /***************************************************************
  172.  */
  173. main(int argc, char *argv[])
  174. {
  175.     char *c;
  176.  
  177. /* Dateinamen erzeugen
  178.  */
  179.  strcpy(lmdok,argv[0]);
  180.  for (c=lmdok;*c;c++);
  181.  while (*c != '.') c--;
  182.  *(++c) = 0;
  183.  strcpy(lmtxt,lmdok);
  184.  strcat(lmdok,"DOK");
  185.  strcat(lmtxt,"TXT");
  186.  
  187. /* Hauptprogramm
  188.  */
  189.  for (;;)
  190.   { printf("%s",menuc);
  191.     switch (getmenu("1234E"))
  192.       {
  193.     case '1':  show(lmtxt);  break;
  194.     case '2':  prin(lmtxt);  break;
  195.     case '3':  show(lmdok);  break;
  196.     case '4':  prin(lmdok);  break;
  197.     default :  putchar('\n');exit(0);
  198.       }
  199.    }
  200. }
  201.