home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 07 / hitech / mylib.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-23  |  15.6 KB  |  453 lines

  1. /* Headerfile für MY_L.LIB */
  2. /* Autor : Guido Goldstein */
  3. /*       Woldeweg 32       */
  4. /*       2986 Osteel       */
  5. /*       Tel. 04934/7522 */
  6. /* Alle Rechte der hier gezeigten und definierten Funktionen, mit Ausnahme */
  7. /* der Funktionen im sfs-Modul, liegen beim Autor */
  8. /* Die Library ist für die Verwendung im LARGE-Modell vorgesehen und */
  9. /* entsprechend Übersetzt worden */
  10. #include <stdarg.h> /* Für Funktionen mit variabler Parameterliste */
  11. #include <stdio.h>  /* für die Dateioperationen */
  12. #include <stdlib.h> /* qsort u. ä. */
  13.  
  14. /*  Datentyp für die Funktionen read_dir und sort_dir */
  15. struct f {
  16.        char fname [13] ;
  17.        char attrib ;
  18.        long size ;
  19.        unsigned date ;
  20.        unsigned time ;
  21.        } ;
  22.  
  23. /*  Dateiattribute für read_dir's mode-Parameter */
  24. #define READONLY   0x01
  25. #define HIDDEN       0x02
  26. #define SYSTEM       0x04
  27. #define LABEL       0x08
  28. #define DIRECT       0x10
  29. #define ARCHIVE    0x20
  30. #define FNORMAL    (READONLY | DIRECT | ARCHIVE)
  31.  
  32. /*  Liest das Verzeichnis mit dem Suchmuster in mask */
  33. /*  mode bestimmt die Dateiattribute die berücksichtigt werden */
  34. /*  cn ist die Anzahl der gelesenen Dateinamen */
  35. /*  Der Returnwert ist ein Zeiger auf den Beginn eine (dynamischen) Arrays */
  36. /*  vom Typ struct f */
  37. /*  Bei Fehlern ist der Returnwert NULL */
  38. struct f *read_dir(char *mask, int mode, int *cn);
  39.  
  40. /*  Sortiert das Array ab files mit n Einträgen */
  41. /*  Wenn Order != 0, aufsteigende Sortierung */
  42. /*  sonst absteigende Sortierung */
  43. /*  benutzt die interne qsort-Funktion */
  44. void sort_dir (struct f *files, int n, char order);
  45.  
  46. /*  Tastaturcode für getkey und Konsorten */
  47. #define BS 8
  48. #define TAB 9
  49. #define FORMFEED 12
  50. #define CR 13
  51. #define ESC 27
  52. #define HOMEKEY 327
  53. #define CNTRLHOME 375
  54. #define ENDKEY 335
  55. #define CTRLEND 373
  56. #define UPKEY 328
  57. #define DOWNKEY 336
  58. #define PGUPKEY 329
  59. #define CTRLPGUP 388
  60. #define PGDNKEY 337
  61. #define CTRLPGDN 374
  62. #define LEFTKEY 331
  63. #define INSKEY 338
  64. #define RIGHTKEY 333
  65. #define DELKEY 339
  66. #define CTRLLEFTKEY 371
  67. #define CTRLRIGHTKEY 372
  68.  
  69. #define F1 315
  70. #define F2 316
  71. #define F3 317
  72. #define F4 318
  73. #define F5 319
  74. #define F6 320
  75. #define F7 321
  76. #define F8 322
  77. #define F9 323
  78. #define F10 324
  79.  
  80. #define SF1  340
  81. #define SF2  341
  82. #define SF3  342
  83. #define SF4  343
  84. #define SF5  344
  85. #define SF6  345
  86. #define SF7  346
  87. #define SF8  347
  88. #define SF9  348
  89. #define SF10 349
  90.  
  91. #define CTRLF1    350
  92. #define CTRLF2    351
  93. #define CTRLF3    352
  94. #define CTRLF4    353
  95. #define CTRLF5    354
  96. #define CTRLF6    355
  97. #define CTRLF7    356
  98. #define CTRLF8    357
  99. #define CTRLF9    358
  100. #define CTRLF10 359
  101.  
  102. #define ALTF1  360
  103. #define ALTF2  361
  104. #define ALTF3  362
  105. #define ALTF4  363
  106. #define ALTF5  364
  107. #define ALTF6  365
  108. #define ALTF7  366
  109. #define ALTF8  367
  110. #define ALTF9  368
  111. #define ALTF10 369
  112.  
  113. char uppercase (char);    /* Zeichen in  Großbuchstaben, auch dt. Umlaute */
  114. char * upcasestr (char *); /* s. o. für Strings */
  115. int  video_mode (void);    /* ermittlet den akt. Videomodus (7 == Herkules) */
  116. /*  Erzeugt einen String mit der Länge n und dem Inhalt c */
  117. char *conststrn (int n, char c);
  118. /*  Füllt den bestehenden String s mit dem Zeichen c */
  119. char conststr (char *s, char c);
  120. /* Löscht alle Leerzeichen im String s */
  121. char *delspaces (char *s);
  122. /*  Liefer einen Zeiger auf das letzte Zeichen von s */
  123. /*  oder NULL, wenn der String die Länge 0 hat */
  124. char *strend (char *s);
  125. /*  Liefert das akt. Laufwerk mit Doppelpunkt als String in s */
  126. void get_drive (char *s);
  127. /*  Liefert das akt. Verzeichnis als String in s */
  128. void get_curdir (char *s);
  129. /*  Liefert das Laufwerk und das Verzeichnis als String in s */
  130. void get_fullpath (char *s);
  131.  
  132. /*  Monochrom-Attribute für Windows */
  133.  
  134. #define ATT_NORM 7
  135. #define ATT_INV  112
  136. #define ATT_BLACK 0
  137. #define ATT_UNDERL 1
  138. #define ATT_HIGH 15
  139. #define ATT_FLASH 128
  140.  
  141. /* Farbwerte für Windows */
  142.  
  143. #define BLACK        0
  144. #define BLUE        1
  145. #define GREEN        2
  146. #define CYAN        3
  147. #define RED        4
  148. #define MAGENTA     5
  149. #define BROWN        6
  150. #define LIGHTGRAY    7
  151. #define GRAY        8
  152. #define LIGHTBLUE    9
  153. #define LIGHTGREEN    10
  154. #define LIGHTCYAN    11
  155. #define LIGHTRED    12
  156. #define LIGHTMAGENTA    13
  157. #define YELLOW        14
  158. #define WHITE        15
  159.  
  160. /*  Als Parameter vm von init_windows */
  161. #define MONO  1        /* Für Herkuleskarte */
  162. #define COLOR 0        /* Für EGA und Colorgraphic-Karten */
  163.  
  164. #define MAXWIN 32      /* Max. Anzahl an offnen Fenstern */
  165.  
  166. #define NOFRAME   0        /* Kein Rahmen im Fenster */
  167. #define EFRAME      1        /* Einfacher Rahmen */
  168. #define DFRAME      2        /* Doppelter Rahmen */
  169. #define EDFRAME   3        /* Seiten einfacher Rahmen, Rest doppelt */
  170. #define DEFRAME   4        /* Seiten doppelter Rahmen, Rest einfach */
  171. #define ETFRAME   5        /* Einfacher Rahmen, Kopfzeile Text */
  172.  
  173. /*  Datentypen    */
  174.  
  175. typedef struct {
  176.     int       x1,y1,x2,y2 ;  /* Fensterecken */
  177.     char       *inhalt ;      /* Inhalt des Fensters */
  178.     int       *back ;      /* Hintergrund des Fensters */
  179.     int       bklen ;      /* Größe des Hintergrunds */
  180.     char       cx,cy ;      /* Cursorposition */
  181.     char       frame ;      /* Rahmenart */
  182.     int       frattr ;      /* Rahmenattribut */
  183.     char       *titel ;      /* Fenstertitel */
  184.     int       tattr ;      /* Attribut für den Titel */
  185.     int       zlen ;      /* Anzahl Zeichen pro Zeile */
  186.     int       azeilen ;      /* Anzahl Zeilen im Fenster */
  187.     int       attr ;      /* Aktuelles Textattribut im Fenster */
  188.     int       cursflag ;      /* Flag ob Cursor an */
  189.     int       cs,ce ;      /* Cursorgröße */
  190.     } WIN ;   /* Name der Struktur für ein Fenster */
  191.           /* Wenn ein Fenster definiert wird, ist das Ergebnis der */
  192.           /* Funktion define_window ein Zeiger auf die Struktur WIN */
  193.  
  194. /*  Funktionen    */
  195.  
  196. /*  Initialisieren der Fensterverwaltung */
  197. /*  Einrichten des Standardfensters und setzen des Videoattributes auf */
  198. /*  ATT_NORM (siehe att.h) */
  199. /*  vm ist 0, wenn eine Colorgraphic o. EGA Karte verwendet wird */
  200. /*  sonst 1.   Definitionen COLOR u. MONO */
  201. /*  Hängt die lokale Funktion end_windows in die exit-Routine */
  202. /*  (via atexit) ein. Das stellt das ordnungsgemäße schliessen der noch */
  203. /*  offnen Fenster sicher */
  204. int init_windows (int vm);
  205.  
  206. /*  Bereitstellen von Speicherplatz für ein Fenster */
  207. /*  frame gibt den Rahmentyp (0-5) an. frameattr ist das Videoattribut */
  208. /*  für den Rahmen. title ist der Titel des Fensters mit dem Attribut */
  209. /*  tattr */
  210. /*  Die Verwaltung des Speicherplatzes muß der Programmierer überwachen */
  211. WIN *define_window (char frame, int frameattr, int tattr, char *title) ;
  212.  
  213. /*  Öffnet das Fenster wp an den angegebenen Koordinaten und setzt das */
  214. /*  Textattribut auf den Wert von attr. */
  215. /*  Für die Korrektheit der Koordinaten muß der Programmierer sorge tragen */
  216. /*  Returnwert >= 0 (Fensternummer), wenn alles OK, sonst < 0 */
  217. int open_window (WIN *wp, int x1, int y1, int x2, int y2, int attr) ;
  218.  
  219. /*  Schliesst das aktuelle Fenster und macht das darunterliegende Fenster zum */
  220. /*  Aktuellen */
  221. void close_window (void);
  222.  
  223. /*  Holt das Fenster wp in den Vordergrund */
  224. /*  Das Fenster muß schon geöffnet sein !!! */
  225. void swap_window (WIN *wp);
  226.  
  227. /*  Liefert einen Zeiger auf das aktuelle Fenster zurück */
  228. WIN *top_window (void);
  229.  
  230. /*  Holt das Fenster wp in den Vordergrund (s.o.) und verschiebt es um dx */
  231. /*  und dy Positionen */
  232. /*  Es ist zu empfehlen den Cursor vor dem Versieben auszuschalten, da er */
  233. /*  die Verschiebung nicht mitmacht. */
  234. /*  Der Inhalt des Fensters bleibt natürlich erhalten */
  235. void move_window (WIN *wp, int dx,int dy);
  236.  
  237. /*  Gibt den Speicherplatz für das angegebene Fenster wieder frei */
  238. /*  Sind alle definierten Fenster zum Zeitpunkt des Programmendes noch offen, */
  239. /*  schliesst die Funktion end_windows die Fenster */
  240. void free_window (WIN *wp);
  241.  
  242. /*  Lösche das aktuelle Fenster mit dem aktuellen Videoattribut */
  243. void clrscr (void) ;
  244.  
  245. /*  Positioniere den Cursor im aktuellen Fenster */
  246. /*  Ersetzt die ab V1.5 vorhandene gotoxy Funktion */
  247. void gotoxy(int col, int row) ;
  248.  
  249. /*  Gibt das Zeichen in c an der Position x y aus und setzt den Cursor auf */
  250. /*  Position nach dem Zeichen */
  251. void printxy (int x, int y, char c) ;
  252.  
  253. /*  Gibt den String str an der Position x y aus und setzt den Cursor auf */
  254. /*  die Position nach dem letzten Zeichen */
  255. /*  Das Zeichen \n wird als einziges Steuerzeichen ausgewertet */
  256. void printstr (int x1, int y1, char *str);
  257.  
  258. /*  Schreibt den String str ab der aktuellen Cursorpostion in das */
  259. /*  aktuelle Fenster */
  260. void writestr (char *str) ;
  261.  
  262. /*  Gleiche Funktion wie printf, schreibt aber in das aktuelle Fenster */
  263. void writef (va_list arg_list, ...) ;
  264.  
  265. /*  Wie writef, positioniert aber vorher den Cursor auf Pos. x y */
  266. void writefxy (int x, int y, va_list arg_list, ...) ;
  267.  
  268. /*  Setzen des Videpattributes im aktuellen Fenster */
  269. void set_attr (int);
  270.  
  271. /*  Holen des aktuellen Videoattributes für das aktuelle Fenster */
  272. int get_attr (void);
  273.  
  274. /*  Setzen der Textfarbe im akt. Fenster */
  275. void set_textcolor (int);
  276.  
  277. /*  Setzen der Hintergrundfarbe im akt. Fenster */
  278. void set_backcolor (int);
  279.  
  280. /*  Einschalten des Cursors im akt. Fenster */
  281. void cursoron(void);
  282.  
  283. /*  Ausschalten des Cursors im akt. Fenster */
  284. void cursoroff(void);
  285.  
  286. /*  Abfragen ob Curor im akt. Fenster eingeschaltet (return != 0, wenn an) */
  287. int iscursoron(void);
  288.  
  289. /*  Setzen der Corsorgröße im akt. Fenster */
  290. /*  startline und endline geben die Rasterzeilen für die Cursorgröße an */
  291. void setcursor (char startline, char endline);
  292.  
  293. /*  Feststellen der akt. Spalte im akt. Fenster */
  294. int where_x(void);
  295.  
  296. /*  Dito für die akt. Zeile */
  297. int where_y(void);
  298.  
  299. /*  Schreibt das Zeichen c an die absolute Bildschirmposition x y */
  300. void dprintxy (int x,int y,char c);
  301.  
  302. /*  Schreibt den String str an die absolute Bildschirmposition x y */
  303. void dprintstr(int x,int y,char *str);
  304.  
  305. /*  Fülle das akt. Fenster mit dem Zeichen fc */
  306. void fill_window (char fc);
  307.  
  308. /*  Öffnet ein mit close_window geschlossenes Fenster wieder */
  309. /*  Der Inhalt bleibt erhalten */
  310. /*  Returnwert wie bei open_window */
  311. int reopen_window (WIN *wp);
  312.  
  313. /*  input.h  Eingaberoutinen */
  314. /*  Tastaturcode siehe Beginn des Headerfiles */
  315.  
  316. /*  Initialisiere die Tastencodes und die Tastenbelegungen */
  317. void init_keys(void);
  318.  
  319. /*  Setze die Funktion p auf die Funktionstaste mit dem Code c */
  320. void define_key (int c, void (*p)());
  321.  
  322. /*  Lege den String text auf die Funktionstaste mit dem Code c */
  323. void define_makro (int c, char *text);
  324.  
  325. /*  Lösche die Belegung für die Taste mit dem Code c */
  326. void clear_key (int c);
  327.  
  328. /*  Blockiere die Ausführung von Makros u. Funktionen */
  329. void block_keys (void);
  330.  
  331. /*  Erlaube die Ausführung derMakros u. Funktionen */
  332. void deblock_keys (void);
  333.  
  334. /*  Füge das Zeichen c an Position p in den String s ein */
  335. void inschar (int c, char *s, int p) ;
  336.  
  337. /*  Lösche anz Zeichen ab Position pos aus dem String s */
  338. void delchar (char *s, int pos, int anz) ;
  339.  
  340. /*  Schreibe den String s an die Position x y, fülle die Ausgabe auf die */
  341. /*  Länge l mit dem Zeichen fc auf */
  342. void printfeld (int x, int y, int l, char *s, char fc);
  343.  
  344. /*  Lies einen Tastendruck */
  345. /*  Benutzt die Funktion bioskey(0) */
  346. /*  Wird eine belegte Funktionstaste gedrückt wird die Belegung ausgeführt */
  347. /*  Ist die Funktionstaste nicht belegt, wird ihr Wert laut Definition */
  348. /*  zurückgegeben. Die Code für die F-Tasten sind > 255 */
  349. /*  Normale Taste liefern ihren ASCII-Code */
  350. int  getkey(void);
  351.  
  352. /*  wie vor, jedoch werden ausser den F-Tasten nur die im String allowed */
  353. /*  angegebenen Zeichen angenommen */
  354. int  get_char (char *allowed);
  355.  
  356. /*  Liest einen String der Länge l an der Position x y in die Variable s */
  357. /*  ins != 0 bedeutet Insert-Modus, sonst Überschreiben */
  358. /*  mit der INS-Taste kann der Modus gewechselt werden */
  359. /*  in tc wird die Taste zurückgegeben, mit der die Eingabe beendet wurde */
  360. int getstring (int x, int y, int l, char *s, int *tc, int ins);
  361.  
  362. /*  wie vor, jedoch nur die Zeichen die in a vorkommen */
  363. int getstringchr (int x,int y,int l,char *s,char *a,int *tc,int ins);
  364.  
  365. /*  wie vor, liest jedoch einen Integerwert in die Var. val */
  366. int getinteger (int x,int y,int l,int *val,int *tc,int ins);
  367.  
  368. /*  wie vor, für double Werte in die Var. f*/
  369. /*  dec bestimmt die Anzahl der Dezimalstellen */
  370. double getfloat (int x, int y, int len, int dec, double *f, int *tc);
  371.  
  372. typedef struct {
  373.     char *item[20] ;  /* Zeiger auf Menütexte */
  374.     int  itemlen ;      /* Länge des Balkens */
  375.     int  count ;      /* Anzahl der Menüpunkte */
  376.     int  marked ;      /* Welcher Menüpunkt wurde ausgewählt */
  377.     int  down ;      /* Flag ob Menü rutergezogen ist */
  378.        } CITEM ;  /* Beschreibt ein Menü */
  379.  
  380. /*  Waagerechte auswahl mit Leuchtbalken */
  381. /*  x u. y ist die Position innerhalb des akt. Fensters */
  382. /*  leiste ist ein Zeiger auf eine Menüstruktur */
  383. /*  vorwahl enthält den Menüpunkt mit dem die Auswahl beginnt */
  384. /*  nat ist das Attribut für den ausgewählten Menüpunkt */
  385. /*  Der Returnwert ist gleich dem Index der Texte in CITEM.item */
  386. /*  d. h. er reicht von 0 bis CITEM.count */
  387. /*  Liefert die Funktion einen Returnwert kleiner als 0, */
  388. /*  so ist ESC (-1) gedrückt worden */
  389. int choosew (int x, int y, CITEM *leiste, int vorwahl, int nat);
  390.  
  391. /*  Senkrechte Auswahl, Parameter siehe oben */
  392. /*  Der Returnwert ist gleich dem Index der Texte in CITEM.item */
  393. /*  d. h. er reicht von 0 bis CITEM.count */
  394. /*  Liefert die Funktion einen Returnwert kleiner als 0, */
  395. /*  so entweder ist ESC (-1), Cursor links (-2) oder Cursor rechts (-3) */
  396. /*  gedrückt worden */
  397. int chooses (int x, int y, CITEM *leiste, int vorwahl, int nat);
  398.  
  399. /*  2-D Auswahl in einem Fenster */
  400. /*  tab ist ein Zeigerarray für Strings */
  401. /*  n ist die Anzahl der Menüpunkte */
  402. /*  width ist die Breite eines Eintrags */
  403. /*  breite ist die Zeilenlänge für die Darstellung */
  404. /*  nat siehe oben */
  405. /*  Der Returnwert ist gleich dem Index der Texte in tab */
  406. /*  d. h. er reicht von 0 bis n */
  407. /*  Liefert die Funktion einen Returnwert kleiner als 0, */
  408. /*  so ist ESC (-1) gedrückt worden */
  409. int choose2d (char *tab[], int n, int width, int breite, int nat);
  410.  
  411. /*  Ja/Nein Auswahl */
  412. /*  Returnwert != 0, wenn der Text in true angewählt wurde */
  413. /*  x,y,x1,y1 sind die Positionen für die Texte in true und false */
  414. /*  nat ist das Darstellungsattribut für die selektierte Option */
  415. /*  Wird ESC gedrückt liefert die Funktion den Wert 0 */
  416. int requestbox (int x, int y, char *true, int x1, int y1, char *false, int nat);
  417.  
  418. /*  Routinen zum Abfragen der Sonder- und Umschalttasten  */
  419. extern int capslock(int), inslock(int), numlock(int), scrlock(int),
  420.        is_shift(void) ;
  421.  
  422. #define caps_on()   (void)capslock(1)
  423. #define caps_off()  (void)capslock(0)
  424. #define is_capslock() capslock(-1)
  425. #define ins_on()     (void)inslock(1)
  426. #define ins_off()    (void)inslock(0)
  427. #define is_inslock() inslock(-1)
  428. #define num_on()     (void)numlock(1)
  429. #define num_off()    (void)numlock(0)
  430. #define is_numlock() numlock(-1)
  431. #define scroll_on()    (void)scrlock(1)
  432. #define scroll_off()    (void)scrlock(0)
  433. #define is_scroll()    scrlock(-1)
  434.  
  435. /*  BITSET erzeugt die Variable mit dem Namen s und der Größe von n Bits */
  436. #define BITSET(s,n) unsigned char s[(n>>3)+1]
  437.  
  438. /*  Ist das Bit n von Bitset b gesetzt ? */
  439. int is_bit_set (unsigned char b[], unsigned int n);
  440. /*  Setze das Bit n von Bitset b */
  441. void set_bit (unsigned char b[], unsigned int n);
  442. /*  Lösche das Bit n von Bitset b */
  443. void clear_bit (unsigned char b[], unsigned int n);
  444. /*  Negiere das Bit n von Bitset b */
  445. void neg_bit (unsigned char b[], unsigned int n) ;
  446. /*  Lösche das Bitset b mit der Länge n in Bits (n siehe BITSET) */
  447. void clear_set (unsigned char b[], unsigned int n);
  448.  
  449. /*  IntUtil  */
  450. char hi (int n) ;  /* High-Byte von n */
  451. char lo (int n)  ; /* Low-Byte von n */
  452. int swap (int n)  ; /* Vertauschen von High und Low-Byte von n */
  453.