/* 03Jul24: Beispiel für die Verwendung von fnmatch.  Es handelt sich
 * dabei um die Logik, welche auch in einer Shell benutzt wird um
 * Ausdrücke wie *.c oder .??? zu erweitern.  In glob(7) findet man
 * mehr Informationen über diese Art von Muster.
 *
 * Achtung, es ist oft notwendig Muster wie *.c in Anführungszeichen
 * anzugeben, damit es nicht von der Shell expandiert wird. */

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

int main(int argc, char *argv[])
{
     if (argc < 2) {
	  printf("Usage: %s [pattern] [string to match...]\n", argv[0]);
	  return EXIT_FAILURE;
     }
     char *pattern = argv[1];

     for (int i = 2; i < argc; i++) {
	  /* Wie anzunehmen, ist fnmatch(3) eine Art Prädikat, welches
	   * prüft ob eine Zeichenkette zu einem Muster passt.  Was
	   * genau gematch't wird, kann man dann noch mit weiteren
	   * Optionen im Dritten Argument verändern.  Für die
	   * Default-Einstellungen würde man 0 benutzen, und ansonsten
	   * mehere weitere Optionen mit Bit-Weiser Ver-oder'ung
	   * anfügen.  Bspw. `FNM_PERIOD' bewirkt, dass ein Dateinamen
	   * welches mit "." anfängt, nur dann match't, wenn der
	   * Pattern auch explizit mit einem Punkt Anfängt.  Damit
	   * will man vermeiden "versteckte Dateien" (die mit einem
	   * Punkt im Namen anfangen) Standard-mäßig zu Treffen, wenn
	   * man ein Muster wie "*.c" übergibt. */
	  if (0 == fnmatch(pattern, argv[i], FNM_PERIOD)) {
	       printf("'%s'\tdoes match\n", argv[i]);
	  } else {
	       printf("'%s'\tdoes not match\n", argv[i]);

	  }
     }
     
     return 0;
}