###############################################################################
##                                                                           ##
##      M     M            ll     tt     ii    RRRRR                         ##
##      MM   MM            ll     tt           RR  RR                        ##
##      MMM MMM   uu  uu   ll    ttttt   ii    RR  RR    eeee     qqqqq      ##
##      MMMMMMM   uu  uu   ll     tt     ii    RRRRR    ee  ee   qq  qq      ##
##      MM M MM   uu  uu   ll     tt     ii    RR RR    eeeeee   qq  qq      ##
##      MM   MM   uu  uu   ll     tt     ii    RR  RR   ee        qqqqq      ##
##      MM   MM    uuuuu    ll     ttt    ii   RR  RR    eeee        qq      ##
##                                                                   qq      ##
##                                                                           ##
###############################################################################


MultiReq v1.20 © 11/1992 by Andreas Krebs (veröffentlicht am 12-Nov-92)


Diese Datei enthält eine ausführliche Beschreibung aller Funktionen der
"multireq.library". Die Funktionen werden in der Reihenfolge ihrer Offsets
aufgelistet.
Alle diese Funktionen verändern NUR die Register, die unter Ergebnisse
aufgelistet aufgelistet sind und eventuel D0 als Rückgaberegister. Alle anderen
Register werden nicht verändert, auch wenn sie zur Parameterübergabe benützt
werden.



multireq.library/StrLen                                  multireq.library/StrLen

NAME
  StrLen -- ermittelt die Länge eines Textstrings

SYNTAX
  length = StrLen( str )
  D0       -30     A0

  UWORD StrLen( UBYTE * )

FUNKTION
  Diese Funktion ermittelt die Länge eines Textstrings, wobei die Länge
  ohne das abschließende Nullbyte gezählt wird.

EINGABEN
  str - Zeiger auf einen nullterminierten String

ERGEBNISSE
  length - Länge des Strings in Bytes
  A0     - Adresse des abschließenden Nullbytes

SIEHE AUCH
  StrCpy, StrCmp, StrIns, UpperCase, TestPattern



multireq.library/StrCpy                                  multireq.library/StrCpy

NAME
  StrCpy -- kopiert den einen Textstring

SYNTAX
  StrCpy( src, dest )
  -36     A0   A1

  void StrCpy( UBYTE *, UBYTE * )

FUNKTION
  Diese Funktion kopiert den Textstring src in den Textstring dest, wobei der
  Kopiervorgang beendet wird, wenn das abschließende Nullbyte erreicht ist.

EINGABEN
  src  - Zeiger auf den nullterminierten Quellenstring
  dest - Zeiger auf einen Adressbereich für den Zielstring

ERGEBNISSE
  A0 - Adresse des abschließenden Nullbytes des Quellenstrings
  A1 - Adresse des abschließenden Nullbytes des Zielstrings

SIEHE AUCH
  StrLen, StrCmp, StrIns, UpperCase, TestPattern



multireq.library/StrCmp                                  multireq.library/StrCmp

NAME
  StrCmp -- vergleicht zwei Textstrings

SYNTAX
  dif = StrCmp( str1, str2 )
  D0    -42     A0    A1

  WORD StrCmp( UBYTE *, UBYTE * )

FUNKTION
  Diese Funktion vergleicht zwei Textstrings miteinander, wobei nicht zwischen
  Groß- und Kleinschreibung unterschieden ist.
  Wenn dif < 0 ist, ist String str1 "kleiner" als String str2, d.h. der ASCII-
  code von str1 ist niedriger als der von str2.
  Wenn dif = 0 ist, sind str1 und str2 identisch.
  Wenn dif > 0 ist, ist str1 "größer" als str2.

EINGABEN
  str1 - Zeiger auf den ersten nullterminierten String
  str2 - Zeiger auf den zweiten nullterminierten String

ERGEBNISSE
  dif - Unterschied zwischen str1 und str2
  A0  - Adresse des unterschiedlichen Zeichens in str1
  A1  - Adresse des unterschiedlichen Zeichens in str2

SIEHE AUCH
  StrLen, StrCpy, StrIns, UpperCase, TestPattern



multireq.library/StrIns                                  multireq.library/StrIns

NAME
  StrIns -- fügt einen TextString in einen anderen ein

SYNTAX
  StrIns( src, dest )
  -48     A0   A1

  void StrIns( UBYTE *, UBYTE * )

FUNKTION
  Diese Funktion fügt einen Textstring in einen anderen ein, dazu wird zunächst
  der Zielstring dest um StrLen( src ) verschoben und anschließend wird src in
  die entstandene Lücke eingefügt.

EINGABEN
  src  - Zeiger auf den einzufügenden String
  dest - Zeiger auf die Position, an der der String eingefügt werden soll

ERGEBNISSE

SIEHE AUCH
  StrLen, StrCpy, StrCmp, UpperCase, TestPattern



multireq.library/UpperCase                            multireq.library/UpperCase

NAME
  UpperCase -- wandelt einen Buchstaben in Großbuchstaben um

SYNTAX
  character = Uppercase( character )
  D0          -54        D0

  UBYTE UpperCase( UBYTE )

FUNKTION
  Diese Funktion wandelt das angegeben Zeichen in einen Großbuchstaben um,
  sofern es sich um einen Buchstaben handelt. Es werden auch Sonderzeichen wie
  Umlaute berücksichtigt.

EINGABEN
  character - der umzuwandelnte Buchstabe

ERGEBNISSE
  character - der entsprechende Großbuchstabe

SIEHE AUCH
  StrLen, StrCpy, StrCmp, StrIns, TestPattern



multireq.library/TestPattern                        multireq.library/TestPattern

NAME
  TestPattern -- überprüft, ob ein String einem bestimmten Muster entspricht

SYNTAX
  result = TestPattern( wild, str )
  D0       -60          A0    A1

  BOOL TestPattern( UBYTE *, UBYTE * )

FUNKTION
  Diese Funktion überprüft, ob der Textstring str, dem durch den Musterstring
  wild definierten Muster entspricht, wobei das Zeichen '*' für einen beliebig
  langen Teilstring steht und '|' zwei Muster voneinander trennt.
  Bei der Überprüfung wird nicht zwischen Groß- und Kleinschreibung unter-
  schieden, weshalb z.B. "a*" identisch ist mit "A*".

EINGABEN
  wild - Zeiger auf einen String, der das Muster enthält
  str  - Zeiger auf den zu überprüfenden String

ERGEBNISSE
  result - TRUE (1), wenn der String dem Muster entspricht, oder FALSE (0) sonst

BEISPIELE
  TestPattern( "*.c|*.h", str )   - ist str ein C Source- or Include-File ?
  TestPattern( "*.*|*-*", str )   - enthält str ein '.'- oder '-'-Zeichen ?
  TestPattern( "*", str )         - immer TRUE, da jeder String diesem Muster
                                    entspricht

SIEHE AUCH
  StrLen, StrCpy, StrCmp, StrIns, UpperCase



multireq.library/DelPort                                multireq.library/DelPort

NAME
  DelPort -- löscht einen Message Port

SYNTAX
  DelPort( port )
  -66      A1

  void DelPort( struct MsgPort * )

FUNKTION
  Diese Funktion löscht einen Message Port, dazu wird dieser aus der Betriebs-
  systemliste der Message Ports entfernt und anschließend wird der belegte
  Speicher wieder freigegeben.

EINGABEN
  port - Zeiger auf die MsgPort-Struktur des Message Ports

ERGEBNISSE

BEMERKUNGEN
  Diese Funktion ist identisch mit der DeletePort-Funktion der Linkerlibrary
  amiga.lib.

SIEHE AUCH
  CrtPort



multireq.library/CrtPort                                multireq.library/CrtPort

NAME
  CrtPort -- erzeugt einen Message Port

SYNTAX
  port = CrtPort( name, pri )
  D0     -72      A0    D0

  struct MsgPort *CrtPort( UBYTE *, UWORD )

FUNKTION
  Diese Funktion erzeugt einen Message Port mit dem angegebenen Namen und der
  ausgewählten Priorität, wobei der Benötigte Speicher reserviert wird. Wenn der
  Message Port erzeugt ist, wird er automatisch in die Betriebssystemliste der
  Message Ports eingefügt.

EINGABEN
  name - Zeiger auf einen nullterminierten String mit dem Namen des Ports oder
         0 für keinen Namen
  pri  - Priorität, die der Message Port haben soll

ERGEBNISSE
  port - Zeiger auf die MsgPort-Struktur des Message Ports oder 0, wenn ein
         Fehler aufgetretten ist

BEMERKUNGEN
  Diese Funktion ist identisch mit der CreatePort-Funktion der Linkerlibrary
  amiga.lib.

SIEHE AUCH
  DelPort



multireq.library/GetCurrentPath                  multireq.library/GetCurrentPath

NAME
  GetCurrentPath -- ermittelt Namen und Pfad des aktuellen Verzeichnisses

SYNTAX
  GetCurrentPath( bufff )
  -78             A0

  void GetCurrentPath( UBYTE * )

FUNKTION
  Diese Funktion ermittelt des Namen und den Pfad des aktuellen Verzeichnisses
  und schreibt diesen in den durch buff angegeben Puffer.

EINGABEN
  buff - Zeiger auf einen Puffer in den der Namen eingetragen wird

ERGEBNISSE



multireq.library/DrawBox                                multireq.library/DrawBox

NAME
  DrawBox -- malt ein Rechteck mit 3D-Effekt

SYNTAX
  DrawBox( rp, x1, y1, x2, y2, col1, col2 )
  -84      A1  D0  D1  D2  D3  D4    D5

  void DrawBox( struct RastPort *, UWORD, UWORD, UWORD, UWORD, UWORD, UWORD )

FUNKTION
  Diese Funktion zeichnet ein Rechteck mit 3D-Effekt in der angegebenen Größe, 
  wobei der linke und obene Rand in der Farbe col1 und der rechte und untere
  Rand in der Farbe col2 gezeichnet wird.

EINGABEN
  rp   - Zeiger auf den RastPort in dem gezeichnet werden soll
  x1   - x-Position der linken oberen Ecke
  y1   - y-Position der linken oberen Ecke
  x2   - x-Position der rechten unteren Ecke
  y2   - y-Position der rechten unteren Ecke
  col1 - Farbe des linken und oberen Rands
  col2 - Farbe des rechten und unteren Rands

ERGEBNISSE

BEMERKUNGEN
  Es muß unbedingt sichergestellt werden, daß x1<x2 und y1<y2 sind, da es sonst
  zu Abstürzen kommen kann.

SIEHE AUCH
  DrawFilledBox



multireq.library/DrawFilledBox                    multireq.library/DrawFilledBox

NAME
  DrawFilledBox -- malt ein gefülltes Rechteck mit 3D-Effekt

SYNTAX
  DrawFilledBox( rp, x1, y1, x2, y2, col1, col2, fillcol )
  -90            A1  D0  D1  D2  D3  D4    D5    D6

  void DrawFilledBox( struct RastPort *, UWORD, UWORD, UWORD, UWORD, UWORD,
                      UWORD, UWORD )

FUNKTION
  Diese Funktion zeichnet ein gefülltes Rechteck mit 3D-Effekt in der
  angegebenen Größe. Dazu wird zuerst das Innere des Rechtecks in der Farbe
  fillcol gefüllt und anschließend der Rand mit DrawBox gezeichnet.

EINGABEN
  rp      - Zeiger auf den RastPort in dem gezeichnet werden soll
  x1      - x-Position der linken oberen Ecke
  y1      - y-Position der linken oberen Ecke
  x2      - x-Position der rechten unteren Ecke
  y2      - y-Position der rechten unteren Ecke
  col1    - Farbe des linken und oberen Rands
  col2    - Farbe des rechten und unteren Rands
  fillcol - Farbe mit der das Innere des Rechtecks gefüllt werden soll

ERGEBNISSE

BEMERKUNGEN
  Es muß unbedingt sichergestellt werden, daß x1<x2 und y1<y2 sind, da es sonst
  zu Abstürzen kommen kann.

SIEHE AUCH
  DrawBox



multireq.library/DrawTexts                            multireq.library/DrawTexts

NAME
  DrawTexts -- gibt mehere Text der gleichen Art aus

SYNTAX
  DrawTexts( rp, textlist)
  -96        A1  A0

  void DrawTexts( struct RastPort *, struct MRText * )

FUNKTION
  Diese Funktion gibt mehere Texte aus, wobei die Texte von der gleichen Art
  sein müssen, d.h. dieselbe Schriftart, Schriftgröße, Zeichenmodus und
  Hintergrundfarbe haben müssen, die vor dem Zeichnen von Hand gesetzt werden
  muß.

EINGABEN
  rp       - Zeiger auf den RastPort in dem gezeichnet werden soll
  textlist - Zeiger auf ein Array mit MRText-Strukturen und einem Eintag mit dem
             Wert -1 als letzten Eintrag

ERGEBNISSE

BEISPIELE

  static struct MRText MyTexts[]=
  {
    { 10, 15,  2,  6, (UBYTE *)"Text 1" },    /* x, y, pen, len, text */
    { 10, 30,  1,  6, (UBYTE *)"Text 2" },
    { -1, -1, -1, -1, (UBYTE *)-1 }           /* last text */
  };

  /* */
  DrawTexts(rp, MyTexts);
  /* */



multireq.library/DrawWinBorder                    multireq.library/DrawWinBorder

NAME
  DrawWinBorder -- zeichnet einen 3D-Rand für ein Fenster

SYNTAX
  DrawWinBorder( win, title )
  -102           A0   A1

  void DrawWinBorder( struct Window *, UBYTE * )

FUNKTION
  Diese Funktion zeichnet einen 3D-Rand für ein Fenster nach Art der Workbench
  2.0, wobei der obere Rand breiter ist als die übrigen und den Fenstertitel
  enthält.
  Diese Funktion sollte nur verwendet werden, wenn das Fenster vom Typ
  BORDERLESS ist, da es sonst zu Problemen mit dem "normalen" Rand des Fensters
  kommt.
  Diese Funktion ist vor allem für die Verwendung unter Kickstart 1.3
  vorgesehen. Unter Kickstart 2.0 sollte der normale Rand vorgezogen werden,
  denn dieser bietet mehr Möglichkeiten (z.B. Systemgadgets).

EINGABEN
  win   - Zeiger auf das Fenster, dessen Rand gezeichnet werden soll
  title - Zeiger auf einen nullterminierten String mit dem Festertitel

ERGEBNISSE



multireq.library/DrawGadgetBorder              multireq.library/DrawGadgetBorder

NAME
  DrawGadgetBorder -- zeichnet den Rand für die Anzahl der angegeben Fenster

SYNTAX
  DrawGadgetBorder( gadgets, win, numgad )
  -108              A0       A1   D0

  void DrawGadgetBorder( struct Gadget *, struct Window *, UWORD )

FUNKTION
  Diese Funktion zeichnet für die angegebene Anzahl von Gadgets einen Rand, der
  mittel des BORDER-Makros (siehe multireq.h) im UserData-Feld der Gadget-
  Struktur definiert wurde.
  Der Aufbau des Makros ist wie folgt:

  BORDER( type, col1, col2, fillcol )

  type - Art des Randes (siehe multireq.h)
  col1, col2, fillcol - siehe DrawFilledBox

  Eine Liste der möglichen Randarten befindet sich in den jeweiligen Include-
  files (multireq.h oder multireq.i).
  Nach dem Zeichen des Randes kann es nötig sein das Gadget zu refreshen (mit
  RefreshGadgets oder RefreshGList), da DrawGadgetBorder keinen Refresh
  durchführt und somit eventuell andere Teile des Gadgets (wie z.B. Texte)
  verdeckt.

EINGABEN
  gadgets - Zeiger auf das erste Gadget einer verketteten Liste
  win     - Zeiger auf das Fenster, das das Gadget enthält
  numgad  - Anzahl der Gadgets, deren Rand gezeichnet werden soll

ERGEBNISSE



multireq.library/InitFileReq                        multireq.library/InitFileReq

NAME
  InitFileReq -- initialisiert eine FileReq-Struktur

SYNTAX
  InitFileReq( fr_ptr, numlist )
  -114         A0      D0

  void InitFileReq( struct FileReq **, UWORD )

FUNKTION
  Diese Funktion initialisiert eine FileReq-Struktur, dazu wird zuerst der
  benötige Speicher reserviert und anschließend werden alle benötigten Daten des
  FileRequesters gesetzt. Dannach wird der Zeiger auf die FileReq-Struktur in
  die durch fr_ptr bestimmte Adresse geschrieben.
  Die Option numlist wird in dieser Version nicht verwendet, sollte jedoch immer
  auf 2 gesetzt sein, da sonst bei neueren Versionen der multireq.library
  Probleme auftauchen könnten.

EINGABEN
  fr_ptr  - Adresse eines Zeigers auf eine FileReq-Struktur
  numlist - Anzahl der Verzeichnislisten (in dieser Version immer 2)

ERGEBNISSE

SIEHE AUCH
  FreeFileReq, FileRequester



multireq.library/FreeFileReq                        multireq.library/FreeFileReq

NAME
  FreeFileReq -- gibt eine zuvor initialisierte FileReq-Struktur wieder frei

SYNTAX
  FreeFileReq( fr_ptr )
  -120         A0

  void FreeFileReq( struct FileReq ** )

FUNKTION
  Diese Funktion gibt eine eine durch InitFileReq erzeugt FileReq-Struktur,
  sowie eventuell eingelesene Verzeichnisse wieder frei und löscht anschließend
  den Zeiger auf die Struktur.
  Diese Funktion sollte unbedingt aufgerufen werden, bevor eine Programm beendet
  wird, da sonst der belegte Speicher nicht mehr freigegeben wird.

EINGABEN
  fr_ptr  - Adresse eines Zeigers auf eine FileReq-Struktur

ERGEBNISSE

SIEHE AUCH
  InitFileReq, FileRequester



multireq.library/FileRequester                    multireq.library/FileRequester

NAME
  FileRequester -- startet den eigentlichen FileRequester

SYNTAX
  status = FileRequester( filereq, screen )
  D0       -126           A0       A1

  UWORD FileRequester( struct FileReq *, struct Screen * )

FUNKTION
  Diese Funktion startet den FileRequester auf dem durch screen definierten
  Screen (0 = WorkBench-Screen) und verwendet dazu die in der FileReq-Struktur
  definieren Werte. Bei dem Screen muß es sich um einen Hires-Screen handeln, da
  ein Lores-Screen aufgrund der geringen Breite zu klein für den FileRequester
  ist.
  Der FileRequester ist in dem File "FileReq.dok" ausführlich beschrieben.
  Die Parameter der FileReq-Struktur sind in den Includefiles "multireq.i" und
  "multireq.h" beschreiben.

EINGABEN
  filereq - Zeiger auf eine FileReq-Struktur
  screen  - Zeiger auf den Screen auf dem der FileRequester geöffnet werden soll

ERGEBNISSE
  status - Enthält den Zustände mit der FileRequester beendet wurde. Dieser Wert
           ist identisch mit dem ReturnStatus-Eintrag der FileReq-Struktur.
           (Ein Liste der möglichen Zustände befindet sich ebenfalls in den
           Includefiles.)

SIEHE AUCH
  InitFileReq, FreeFileReq



Wenn Sie Probleme, Anregungen, Verbesserungsvorschläge oder der gleichen haben,
dann schicken Sie diese bitte an mich:

Andreas Krebs
Mittelweg 9
7110 Öhringen 2
Germany

Tel.: 07948/2101  (am Wochenende und in den Semesterferien)
      0721/821356 (sonst)

Oder per Email einfach an folgende Adresse.

Email: s_krebs@iravcl.ira.uka.de

