


MODULE  DisplayInfo;


(*  Dieses Programm gibt eine vollständige Liste aller Bildschirme und  *)
(*  Fenster aus, die von Intuition momentan verwaltet werden.           *)
(*                                                                      *)
(*  von Ernst Heinz  /  27.11.1989                                      *)

(* $F-, $R-, $S-, $V- *)




FROM  Conversions  IMPORT
 ValToStr;

FROM  Exec  IMPORT
 Forbid, Permit;

FROM  Graphics  IMPORT
 ViewModes;

FROM  Intuition  IMPORT
  IntuitionBasePtr, OpenIntuition, ScreenPtr, WindowFlags, WindowPtr;

FROM  Terminal  IMPORT
 Read, Write, WriteLn, WriteString;




VAR  WNr   : INTEGER;            (*  Zähler für Anzahl der Fenster im Screen  *)
     IBase : IntuitionBasePtr;
     Scr   : ScreenPtr;          (*  Zeiger auf aktuellen Screen  *)
     Win   : WindowPtr;          (*  Zeiger auf aktuelles Fenster  *)
     str   : POINTER TO ARRAY[0..MAX(CARDINAL)] OF CHAR;
     wait  : ARRAY[0..0] OF CHAR;




PROCEDURE  WriteInt( x, n: INTEGER );

(*  Eigene Ausgaberoutine für INTEGER-Werte, um nicht "InOut" zu benutzen.  *)


VAR  err : BOOLEAN;
     val : ARRAY[0..7] OF CHAR;


BEGIN
 ValToStr(x,TRUE,val,10,n,' ',err);
 WriteString(val)
END  WriteInt;




BEGIN
 WriteLn; WriteLn;
 WriteString('*****  DisplayInfo  /  von Ernst Heinz, 1989  *****');
 WriteLn; WriteLn;

 (*  Basis-Screen des gesamten Intuition-Displays bestimmen.  *)
 IBase := OpenIntuition();
 Scr := IBase^.firstScreen;

 (*  Die ganze Liste von Screens abwandern.  *)
 WHILE Scr#NIL DO

  (*  Informationen bzgl. des aktuellen Screens ausgeben.  *)
  Forbid();
  WITH Scr^ DO
   str := defaultTitle;         (*  Bildschirmtitel bestimmen und ausgeben.  *)
   Write('"');
   WriteString(str^);
   Write('"');
   WriteLn;
   WriteString(' [ ');
   WITH viewPort DO
    IF hires IN modes THEN      (*  Auflösungstyp bestimmen.  *)
     WriteString('High')
    ELSE
     WriteString('Low')
    END;
    WriteString('-Resolution');
    IF lace IN modes THEN       (*  etwa auch noch Interlace ?  *)
     WriteString(' Interlace')
    END;
    IF dualpf IN modes THEN     (*  oder Dual-Playfield Modus ?  *)
     WriteString(' / Dual-Playfield')
    END;
    IF ham IN modes THEN        (*  oder gar H.A.M.-Modus ?  *)
     WriteString(' / H.A.M.')
    END
   END;
   WriteString(' / Höhe='); WriteInt(height,-1);
   WriteString(' / Breite='); WriteInt(width,-1);
   WriteString(' / Tiefe='); WriteInt(bitMap.depth,-1);
   WriteString(' ]'); WriteLn;
   Win := firstWindow            (*  Basis-Fenster des aktuellen Screens  *)
  END;

  WNr := 1;

  (*  Alle Fenster des aktuellen Screens abarbeiten.  *)
  WHILE Win#NIL DO

   (*  Informationen bzgl. des aktuellen Fensters ausgeben.  *)
   WITH Win^ DO
    WriteString('  #');
    IF WNr<10 THEN
     Write('0')
    END;
    WriteInt(WNr,-1); WriteString(' :  "');
    str := title;
    WriteString(str^); Write('"');   (*  Fenstertitel ausgeben  *)
    WriteLn;
    WriteString('   [ Höhe='); WriteInt(height,-1);
    WriteString(' / Breite='); WriteInt(width,-1);
    IF gimmeZeroZero IN flags THEN   (*  GZZ-Fenster ?  *)
     WriteString(' / GZZ')
    END;
    IF backDrop IN flags THEN        (*  Backdrop-Fenster ?  *)
     WriteString(' / Backdrop')
    END;
    IF superBitMap IN flags THEN     (*  SuperBitmap-Fenster ?  *)
     WriteString(' / SuperBitmap')
    END;
    IF borderless IN flags THEN      (*  Borderless-Fenster ?  *)
     WriteString(' / Borderless')
    END;
    WriteString(' ]'); WriteLn
   END;
   INC(WNr);                         (*  nächstes Fenster dieses Screens !  *)
   Win := Win^.nextWindow
  END;

  Permit();
  Read(wait[0]);

  Scr := Scr^.nextScreen           (*  nächsten Screen des Gesamtdisplays !  *)

 END

END  DisplayInfo.
