/*========================================================================*\
 |  Datei: snapshot.c                                 Datum: 01 Jan 1998  |
 *------------------------------------------------------------------------*
 |       Aktuelle Fensterpositionen in die CON-Dateinamen übernehmen      |
 |                                                                        |
\*========================================================================*/

#include <string.h>
#include <stdlib.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <intuition/intuitionbase.h>
#include "jpc.h"


int snapshot()
/* aktualisiert die Fensternamen win0, win1, win2, win3 */
/* Rückgabewert: Anzahl geänderte Namen (0..4) */
{
  struct Window* pWin;
  ULONG lock;
  char *s = NULL, *s2, *s3;
  char name[80];
  int i, j, n = 0;

  IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 0 );
  if( IntuitionBase == NULL )
    return 0;
  lock = LockIBase( 0 );
  pWin = IntuitionBase->FirstScreen->FirstWindow;
  while( pWin != NULL )
    {
      for( i = 0; i < 4; i++ )
        {
          switch( i )
            {
              case 0: s = win0; break;
              case 1: s = win1; break;
              case 2: s = win2; break;
              case 3: s = win3; break;
            }
          /* Dateiname hat (hoffentlich!) die Struktur dev:x/y/w/h/NAME/opt */
          s2 = s;
          for( j = 0; j < 4; j++ )
            {
              s2 = strchr( s2, '/' );
              if( s2 == NULL )
                break;
              s2++;
            }
          s = strchr( s, ':' );
          if( s == NULL || s2 == NULL )
            break;              /* unbrauchbare Namensstruktur, nicht ändern! */
          s++;
          strcpy( name, s2 );   /* Teil des Fensternamens hinter den Dimensionen */
          s3 = strchr( s2, '/' );
          if( s3 != NULL )      /* evtl. Optionen abschneiden */
            *s3 = '\0';         /* s2 zeigt jetzt auf den Fenstertitel */
          if( strcmp( pWin->Title, s2 ) == 0 )
            {                   /* gefunden! neue Dimensionen eintragen */
              sprintf( s, "%d/%d/%d/%d/%s",
                  pWin->LeftEdge, pWin->TopEdge, pWin->Width, pWin->Height,
                  name );
              n++;
            }
          else if( s3 != NULL )
            *s3 = '/';          /* sonst wenigstens die Optionen wieder anhängen */
        }
      pWin = pWin->NextWindow;
    }
  UnlockIBase( lock );
  CloseLibrary( (struct Library *)IntuitionBase );
  TRACE1( "Änderungen an %d Fenstern übernommen\n", n );
  return n;
}


