home *** CD-ROM | disk | FTP | other *** search
- /* Headerfile für MY_L.LIB */
- /* Autor : Guido Goldstein */
- /* Woldeweg 32 */
- /* 2986 Osteel */
- /* Tel. 04934/7522 */
- /* Alle Rechte der hier gezeigten und definierten Funktionen, mit Ausnahme */
- /* der Funktionen im sfs-Modul, liegen beim Autor */
- /* Die Library ist für die Verwendung im LARGE-Modell vorgesehen und */
- /* entsprechend Übersetzt worden */
- #include <stdarg.h> /* Für Funktionen mit variabler Parameterliste */
- #include <stdio.h> /* für die Dateioperationen */
- #include <stdlib.h> /* qsort u. ä. */
-
- /* Datentyp für die Funktionen read_dir und sort_dir */
- struct f {
- char fname [13] ;
- char attrib ;
- long size ;
- unsigned date ;
- unsigned time ;
- } ;
-
- /* Dateiattribute für read_dir's mode-Parameter */
- #define READONLY 0x01
- #define HIDDEN 0x02
- #define SYSTEM 0x04
- #define LABEL 0x08
- #define DIRECT 0x10
- #define ARCHIVE 0x20
- #define FNORMAL (READONLY | DIRECT | ARCHIVE)
-
- /* Liest das Verzeichnis mit dem Suchmuster in mask */
- /* mode bestimmt die Dateiattribute die berücksichtigt werden */
- /* cn ist die Anzahl der gelesenen Dateinamen */
- /* Der Returnwert ist ein Zeiger auf den Beginn eine (dynamischen) Arrays */
- /* vom Typ struct f */
- /* Bei Fehlern ist der Returnwert NULL */
- struct f *read_dir(char *mask, int mode, int *cn);
-
- /* Sortiert das Array ab files mit n Einträgen */
- /* Wenn Order != 0, aufsteigende Sortierung */
- /* sonst absteigende Sortierung */
- /* benutzt die interne qsort-Funktion */
- void sort_dir (struct f *files, int n, char order);
-
- /* Tastaturcode für getkey und Konsorten */
- #define BS 8
- #define TAB 9
- #define FORMFEED 12
- #define CR 13
- #define ESC 27
- #define HOMEKEY 327
- #define CNTRLHOME 375
- #define ENDKEY 335
- #define CTRLEND 373
- #define UPKEY 328
- #define DOWNKEY 336
- #define PGUPKEY 329
- #define CTRLPGUP 388
- #define PGDNKEY 337
- #define CTRLPGDN 374
- #define LEFTKEY 331
- #define INSKEY 338
- #define RIGHTKEY 333
- #define DELKEY 339
- #define CTRLLEFTKEY 371
- #define CTRLRIGHTKEY 372
-
- #define F1 315
- #define F2 316
- #define F3 317
- #define F4 318
- #define F5 319
- #define F6 320
- #define F7 321
- #define F8 322
- #define F9 323
- #define F10 324
-
- #define SF1 340
- #define SF2 341
- #define SF3 342
- #define SF4 343
- #define SF5 344
- #define SF6 345
- #define SF7 346
- #define SF8 347
- #define SF9 348
- #define SF10 349
-
- #define CTRLF1 350
- #define CTRLF2 351
- #define CTRLF3 352
- #define CTRLF4 353
- #define CTRLF5 354
- #define CTRLF6 355
- #define CTRLF7 356
- #define CTRLF8 357
- #define CTRLF9 358
- #define CTRLF10 359
-
- #define ALTF1 360
- #define ALTF2 361
- #define ALTF3 362
- #define ALTF4 363
- #define ALTF5 364
- #define ALTF6 365
- #define ALTF7 366
- #define ALTF8 367
- #define ALTF9 368
- #define ALTF10 369
-
- char uppercase (char); /* Zeichen in Großbuchstaben, auch dt. Umlaute */
- char * upcasestr (char *); /* s. o. für Strings */
- int video_mode (void); /* ermittlet den akt. Videomodus (7 == Herkules) */
- /* Erzeugt einen String mit der Länge n und dem Inhalt c */
- char *conststrn (int n, char c);
- /* Füllt den bestehenden String s mit dem Zeichen c */
- char conststr (char *s, char c);
- /* Löscht alle Leerzeichen im String s */
- char *delspaces (char *s);
- /* Liefer einen Zeiger auf das letzte Zeichen von s */
- /* oder NULL, wenn der String die Länge 0 hat */
- char *strend (char *s);
- /* Liefert das akt. Laufwerk mit Doppelpunkt als String in s */
- void get_drive (char *s);
- /* Liefert das akt. Verzeichnis als String in s */
- void get_curdir (char *s);
- /* Liefert das Laufwerk und das Verzeichnis als String in s */
- void get_fullpath (char *s);
-
- /* Monochrom-Attribute für Windows */
-
- #define ATT_NORM 7
- #define ATT_INV 112
- #define ATT_BLACK 0
- #define ATT_UNDERL 1
- #define ATT_HIGH 15
- #define ATT_FLASH 128
-
- /* Farbwerte für Windows */
-
- #define BLACK 0
- #define BLUE 1
- #define GREEN 2
- #define CYAN 3
- #define RED 4
- #define MAGENTA 5
- #define BROWN 6
- #define LIGHTGRAY 7
- #define GRAY 8
- #define LIGHTBLUE 9
- #define LIGHTGREEN 10
- #define LIGHTCYAN 11
- #define LIGHTRED 12
- #define LIGHTMAGENTA 13
- #define YELLOW 14
- #define WHITE 15
-
- /* Als Parameter vm von init_windows */
- #define MONO 1 /* Für Herkuleskarte */
- #define COLOR 0 /* Für EGA und Colorgraphic-Karten */
-
- #define MAXWIN 32 /* Max. Anzahl an offnen Fenstern */
-
- #define NOFRAME 0 /* Kein Rahmen im Fenster */
- #define EFRAME 1 /* Einfacher Rahmen */
- #define DFRAME 2 /* Doppelter Rahmen */
- #define EDFRAME 3 /* Seiten einfacher Rahmen, Rest doppelt */
- #define DEFRAME 4 /* Seiten doppelter Rahmen, Rest einfach */
- #define ETFRAME 5 /* Einfacher Rahmen, Kopfzeile Text */
-
- /* Datentypen */
-
- typedef struct {
- int x1,y1,x2,y2 ; /* Fensterecken */
- char *inhalt ; /* Inhalt des Fensters */
- int *back ; /* Hintergrund des Fensters */
- int bklen ; /* Größe des Hintergrunds */
- char cx,cy ; /* Cursorposition */
- char frame ; /* Rahmenart */
- int frattr ; /* Rahmenattribut */
- char *titel ; /* Fenstertitel */
- int tattr ; /* Attribut für den Titel */
- int zlen ; /* Anzahl Zeichen pro Zeile */
- int azeilen ; /* Anzahl Zeilen im Fenster */
- int attr ; /* Aktuelles Textattribut im Fenster */
- int cursflag ; /* Flag ob Cursor an */
- int cs,ce ; /* Cursorgröße */
- } WIN ; /* Name der Struktur für ein Fenster */
- /* Wenn ein Fenster definiert wird, ist das Ergebnis der */
- /* Funktion define_window ein Zeiger auf die Struktur WIN */
-
- /* Funktionen */
-
- /* Initialisieren der Fensterverwaltung */
- /* Einrichten des Standardfensters und setzen des Videoattributes auf */
- /* ATT_NORM (siehe att.h) */
- /* vm ist 0, wenn eine Colorgraphic o. EGA Karte verwendet wird */
- /* sonst 1. Definitionen COLOR u. MONO */
- /* Hängt die lokale Funktion end_windows in die exit-Routine */
- /* (via atexit) ein. Das stellt das ordnungsgemäße schliessen der noch */
- /* offnen Fenster sicher */
- int init_windows (int vm);
-
- /* Bereitstellen von Speicherplatz für ein Fenster */
- /* frame gibt den Rahmentyp (0-5) an. frameattr ist das Videoattribut */
- /* für den Rahmen. title ist der Titel des Fensters mit dem Attribut */
- /* tattr */
- /* Die Verwaltung des Speicherplatzes muß der Programmierer überwachen */
- WIN *define_window (char frame, int frameattr, int tattr, char *title) ;
-
- /* Öffnet das Fenster wp an den angegebenen Koordinaten und setzt das */
- /* Textattribut auf den Wert von attr. */
- /* Für die Korrektheit der Koordinaten muß der Programmierer sorge tragen */
- /* Returnwert >= 0 (Fensternummer), wenn alles OK, sonst < 0 */
- int open_window (WIN *wp, int x1, int y1, int x2, int y2, int attr) ;
-
- /* Schliesst das aktuelle Fenster und macht das darunterliegende Fenster zum */
- /* Aktuellen */
- void close_window (void);
-
- /* Holt das Fenster wp in den Vordergrund */
- /* Das Fenster muß schon geöffnet sein !!! */
- void swap_window (WIN *wp);
-
- /* Liefert einen Zeiger auf das aktuelle Fenster zurück */
- WIN *top_window (void);
-
- /* Holt das Fenster wp in den Vordergrund (s.o.) und verschiebt es um dx */
- /* und dy Positionen */
- /* Es ist zu empfehlen den Cursor vor dem Versieben auszuschalten, da er */
- /* die Verschiebung nicht mitmacht. */
- /* Der Inhalt des Fensters bleibt natürlich erhalten */
- void move_window (WIN *wp, int dx,int dy);
-
- /* Gibt den Speicherplatz für das angegebene Fenster wieder frei */
- /* Sind alle definierten Fenster zum Zeitpunkt des Programmendes noch offen, */
- /* schliesst die Funktion end_windows die Fenster */
- void free_window (WIN *wp);
-
- /* Lösche das aktuelle Fenster mit dem aktuellen Videoattribut */
- void clrscr (void) ;
-
- /* Positioniere den Cursor im aktuellen Fenster */
- /* Ersetzt die ab V1.5 vorhandene gotoxy Funktion */
- void gotoxy(int col, int row) ;
-
- /* Gibt das Zeichen in c an der Position x y aus und setzt den Cursor auf */
- /* Position nach dem Zeichen */
- void printxy (int x, int y, char c) ;
-
- /* Gibt den String str an der Position x y aus und setzt den Cursor auf */
- /* die Position nach dem letzten Zeichen */
- /* Das Zeichen \n wird als einziges Steuerzeichen ausgewertet */
- void printstr (int x1, int y1, char *str);
-
- /* Schreibt den String str ab der aktuellen Cursorpostion in das */
- /* aktuelle Fenster */
- void writestr (char *str) ;
-
- /* Gleiche Funktion wie printf, schreibt aber in das aktuelle Fenster */
- void writef (va_list arg_list, ...) ;
-
- /* Wie writef, positioniert aber vorher den Cursor auf Pos. x y */
- void writefxy (int x, int y, va_list arg_list, ...) ;
-
- /* Setzen des Videpattributes im aktuellen Fenster */
- void set_attr (int);
-
- /* Holen des aktuellen Videoattributes für das aktuelle Fenster */
- int get_attr (void);
-
- /* Setzen der Textfarbe im akt. Fenster */
- void set_textcolor (int);
-
- /* Setzen der Hintergrundfarbe im akt. Fenster */
- void set_backcolor (int);
-
- /* Einschalten des Cursors im akt. Fenster */
- void cursoron(void);
-
- /* Ausschalten des Cursors im akt. Fenster */
- void cursoroff(void);
-
- /* Abfragen ob Curor im akt. Fenster eingeschaltet (return != 0, wenn an) */
- int iscursoron(void);
-
- /* Setzen der Corsorgröße im akt. Fenster */
- /* startline und endline geben die Rasterzeilen für die Cursorgröße an */
- void setcursor (char startline, char endline);
-
- /* Feststellen der akt. Spalte im akt. Fenster */
- int where_x(void);
-
- /* Dito für die akt. Zeile */
- int where_y(void);
-
- /* Schreibt das Zeichen c an die absolute Bildschirmposition x y */
- void dprintxy (int x,int y,char c);
-
- /* Schreibt den String str an die absolute Bildschirmposition x y */
- void dprintstr(int x,int y,char *str);
-
- /* Fülle das akt. Fenster mit dem Zeichen fc */
- void fill_window (char fc);
-
- /* Öffnet ein mit close_window geschlossenes Fenster wieder */
- /* Der Inhalt bleibt erhalten */
- /* Returnwert wie bei open_window */
- int reopen_window (WIN *wp);
-
- /* input.h Eingaberoutinen */
- /* Tastaturcode siehe Beginn des Headerfiles */
-
- /* Initialisiere die Tastencodes und die Tastenbelegungen */
- void init_keys(void);
-
- /* Setze die Funktion p auf die Funktionstaste mit dem Code c */
- void define_key (int c, void (*p)());
-
- /* Lege den String text auf die Funktionstaste mit dem Code c */
- void define_makro (int c, char *text);
-
- /* Lösche die Belegung für die Taste mit dem Code c */
- void clear_key (int c);
-
- /* Blockiere die Ausführung von Makros u. Funktionen */
- void block_keys (void);
-
- /* Erlaube die Ausführung derMakros u. Funktionen */
- void deblock_keys (void);
-
- /* Füge das Zeichen c an Position p in den String s ein */
- void inschar (int c, char *s, int p) ;
-
- /* Lösche anz Zeichen ab Position pos aus dem String s */
- void delchar (char *s, int pos, int anz) ;
-
- /* Schreibe den String s an die Position x y, fülle die Ausgabe auf die */
- /* Länge l mit dem Zeichen fc auf */
- void printfeld (int x, int y, int l, char *s, char fc);
-
- /* Lies einen Tastendruck */
- /* Benutzt die Funktion bioskey(0) */
- /* Wird eine belegte Funktionstaste gedrückt wird die Belegung ausgeführt */
- /* Ist die Funktionstaste nicht belegt, wird ihr Wert laut Definition */
- /* zurückgegeben. Die Code für die F-Tasten sind > 255 */
- /* Normale Taste liefern ihren ASCII-Code */
- int getkey(void);
-
- /* wie vor, jedoch werden ausser den F-Tasten nur die im String allowed */
- /* angegebenen Zeichen angenommen */
- int get_char (char *allowed);
-
- /* Liest einen String der Länge l an der Position x y in die Variable s */
- /* ins != 0 bedeutet Insert-Modus, sonst Überschreiben */
- /* mit der INS-Taste kann der Modus gewechselt werden */
- /* in tc wird die Taste zurückgegeben, mit der die Eingabe beendet wurde */
- int getstring (int x, int y, int l, char *s, int *tc, int ins);
-
- /* wie vor, jedoch nur die Zeichen die in a vorkommen */
- int getstringchr (int x,int y,int l,char *s,char *a,int *tc,int ins);
-
- /* wie vor, liest jedoch einen Integerwert in die Var. val */
- int getinteger (int x,int y,int l,int *val,int *tc,int ins);
-
- /* wie vor, für double Werte in die Var. f*/
- /* dec bestimmt die Anzahl der Dezimalstellen */
- double getfloat (int x, int y, int len, int dec, double *f, int *tc);
-
- typedef struct {
- char *item[20] ; /* Zeiger auf Menütexte */
- int itemlen ; /* Länge des Balkens */
- int count ; /* Anzahl der Menüpunkte */
- int marked ; /* Welcher Menüpunkt wurde ausgewählt */
- int down ; /* Flag ob Menü rutergezogen ist */
- } CITEM ; /* Beschreibt ein Menü */
-
- /* Waagerechte auswahl mit Leuchtbalken */
- /* x u. y ist die Position innerhalb des akt. Fensters */
- /* leiste ist ein Zeiger auf eine Menüstruktur */
- /* vorwahl enthält den Menüpunkt mit dem die Auswahl beginnt */
- /* nat ist das Attribut für den ausgewählten Menüpunkt */
- /* Der Returnwert ist gleich dem Index der Texte in CITEM.item */
- /* d. h. er reicht von 0 bis CITEM.count */
- /* Liefert die Funktion einen Returnwert kleiner als 0, */
- /* so ist ESC (-1) gedrückt worden */
- int choosew (int x, int y, CITEM *leiste, int vorwahl, int nat);
-
- /* Senkrechte Auswahl, Parameter siehe oben */
- /* Der Returnwert ist gleich dem Index der Texte in CITEM.item */
- /* d. h. er reicht von 0 bis CITEM.count */
- /* Liefert die Funktion einen Returnwert kleiner als 0, */
- /* so entweder ist ESC (-1), Cursor links (-2) oder Cursor rechts (-3) */
- /* gedrückt worden */
- int chooses (int x, int y, CITEM *leiste, int vorwahl, int nat);
-
- /* 2-D Auswahl in einem Fenster */
- /* tab ist ein Zeigerarray für Strings */
- /* n ist die Anzahl der Menüpunkte */
- /* width ist die Breite eines Eintrags */
- /* breite ist die Zeilenlänge für die Darstellung */
- /* nat siehe oben */
- /* Der Returnwert ist gleich dem Index der Texte in tab */
- /* d. h. er reicht von 0 bis n */
- /* Liefert die Funktion einen Returnwert kleiner als 0, */
- /* so ist ESC (-1) gedrückt worden */
- int choose2d (char *tab[], int n, int width, int breite, int nat);
-
- /* Ja/Nein Auswahl */
- /* Returnwert != 0, wenn der Text in true angewählt wurde */
- /* x,y,x1,y1 sind die Positionen für die Texte in true und false */
- /* nat ist das Darstellungsattribut für die selektierte Option */
- /* Wird ESC gedrückt liefert die Funktion den Wert 0 */
- int requestbox (int x, int y, char *true, int x1, int y1, char *false, int nat);
-
- /* Routinen zum Abfragen der Sonder- und Umschalttasten */
- extern int capslock(int), inslock(int), numlock(int), scrlock(int),
- is_shift(void) ;
-
- #define caps_on() (void)capslock(1)
- #define caps_off() (void)capslock(0)
- #define is_capslock() capslock(-1)
- #define ins_on() (void)inslock(1)
- #define ins_off() (void)inslock(0)
- #define is_inslock() inslock(-1)
- #define num_on() (void)numlock(1)
- #define num_off() (void)numlock(0)
- #define is_numlock() numlock(-1)
- #define scroll_on() (void)scrlock(1)
- #define scroll_off() (void)scrlock(0)
- #define is_scroll() scrlock(-1)
-
- /* BITSET erzeugt die Variable mit dem Namen s und der Größe von n Bits */
- #define BITSET(s,n) unsigned char s[(n>>3)+1]
-
- /* Ist das Bit n von Bitset b gesetzt ? */
- int is_bit_set (unsigned char b[], unsigned int n);
- /* Setze das Bit n von Bitset b */
- void set_bit (unsigned char b[], unsigned int n);
- /* Lösche das Bit n von Bitset b */
- void clear_bit (unsigned char b[], unsigned int n);
- /* Negiere das Bit n von Bitset b */
- void neg_bit (unsigned char b[], unsigned int n) ;
- /* Lösche das Bitset b mit der Länge n in Bits (n siehe BITSET) */
- void clear_set (unsigned char b[], unsigned int n);
-
- /* IntUtil */
- char hi (int n) ; /* High-Byte von n */
- char lo (int n) ; /* Low-Byte von n */
- int swap (int n) ; /* Vertauschen von High und Low-Byte von n */