(**************************************************************************

:Program.       Resident.mod

:Contents.      (siehe Resident.def)

:Usage.         (siehe Resident.def)


:Copyright.     Public Domain

:Author.        Thomas Ansorge

:Address.       Dinkelackerring 55, W-6730 Neustadt, Deutschland


:Language.      Modula-2

:Translator.    M2Amiga V4.0 (deutsch)


:Version.       1.0 vom 13.04.1992

:History.       1.0 vom 13.04.1992


**************************************************************************)


IMPLEMENTATION MODULE Resident;

FROM Arts IMPORT wbStarted;

FROM DosD IMPORT DosInfo, DosInfoPtr, DosLibrary, DosLibraryPtr,
   ResidentSegment, ResidentSegmentPtr, RootNode, RootNodePtr;

FROM DosL IMPORT dosBase;

FROM ExecL IMPORT Forbid, Permit;

FROM String IMPORT ANSICap, StrToBStr;

FROM SYSTEM IMPORT ADR, CAST;

(* --------------------------------------------------------------------- *)

PROCEDURE FindResident (name: ARRAY OF CHAR;
                        bStr: BOOLEAN
                       ): ResidentSegmentPtr;

   VAR ResSegPtr   : ResidentSegmentPtr;

   (* ------------------------------------------------------------------ *)

   PROCEDURE CompareBStr (str1, str2: ARRAY OF CHAR): BOOLEAN;

      (* vergleicht str1 und str2 (beide BStrings!). Gibt TRUE zurück,   *)
      (* falls beige gleich sind. Groß- und Kleinschreibung ist egal.    *)

      VAR i: SHORTCARD;

      (* --------------------------------------------------------------- *)

      BEGIN (* Funktion CompareBStr *)

      IF str1 [0] # str2 [0] THEN
         RETURN FALSE; (* unterschiedlich lang => ungleich *)
      END (* IF str1 [0] *);

      FOR i := 1 TO CAST (SHORTCARD, str1 [0]) DO
         IF ANSICap (str1 [i]) # ANSICap (str2 [i]) THEN
            RETURN FALSE;
         END (* IF str1 *);
      END (* FOR i *);

      RETURN TRUE;
   END CompareBStr (* Funktion *);

   (* ------------------------------------------------------------------ *)

   BEGIN (* Funktion FindResident *)

   IF NOT bStr THEN
      StrToBStr (name);
   END (* IF NOT bStr *);

   Forbid (); (* ich lese jetzt in veränderlichen Systemlisten! *)

   ResSegPtr := dosBase^.root^.info^.netHand;

   LOOP
      IF ResSegPtr # NIL THEN
         IF CompareBStr (name, ResSegPtr^.name) THEN
            EXIT (* LOOP *)

         ELSE
            ResSegPtr := ResSegPtr^.next;
         END (* IF ResSegPtr^. *);

      ELSE (* IF ResSegPtr *)
         EXIT (* LOOP *);
      END (* IF ResSegPtr *);
   END (* LOOP *);

   Permit ();

   RETURN ResSegPtr;
END FindResident (* Funktion *);

(* --------------------------------------------------------------------- *)

BEGIN (* IMPLEMENTATION MODULE Resident *)

cliStarted := NOT wbStarted;

END Resident (* IMPLEMENTATION MODULE *).