home *** CD-ROM | disk | FTP | other *** search
- /*
- ***************************************************************************
- *
- * Datei:
- * RSysIconify.c
- *
- * Inhalt:
- *
- * --- Globale Routinen ---
- *
- * int LookTypeOfFile ( BPTR lock , char *fname , int num , int totalnum );
- * void Iconify ( void );
- *
- * --- Lokale Routinen ---
- *
- * static int IconifyWithIcon ( void );
- * static int IconifyWithoutIcon ( void );
- * static void ClearSetIconPos ( long x , long y , int kill );
- *
- * Bemerkungen:
- * Enthält die Routinen für das Application Icon und das
- * aufsetzende Actioning.
- *
- * Erstellungsdatum:
- * 20-Jan-93 Rolf Böhme
- *
- * Änderungen:
- * 20-Jan-93 Rolf Böhme Erstellung
- *
- ***************************************************************************
- */
-
- #include "RSys.h"
-
- struct DiskObject *ProgramIcon;
- struct AppIcon *appicon = NULL;
-
- /*
- * LookTypeOfFile() ermittelt den Typen einer Datei und
- * startet entsprechend das Action-Window
- */
- int
- LookTypeOfFile(BPTR lock, char *fname, int num, int totalnum)
- {
- char filename[MAXFULLNAME+1];
- int ft = 0;
- BOOL lastentry;
-
- DPOS;
-
- NameFromLock(lock, (UBYTE *) filename, MAXFULLNAME);
-
- AddPart((UBYTE *) filename, (UBYTE *) fname, MAXFULLNAME);
-
- if (strlen(fname) != 0) ft = filetype(filename);
-
- lastentry = ((num == totalnum) ? TRUE : FALSE);
-
- return StartAction(ft, filename, lastentry);
- }
-
- static void
- ClearSetIconPos(long x, long y, int kill)
- {
- ProgramIcon->do_CurrentX = x;
- ProgramIcon->do_CurrentY = y;
-
- if(kill == KILL)
- {
- FreeDiskObject(ProgramIcon);
- ProgramIcon = NULL;
- }
-
- return;
- }
-
- /*
- * Iconify() schließt das Hauptfenster von RSys und
- * erzeugt auf der Workbench ein Application-Icon. Werden
- * WorkBench-Objekte auf dieses Icon gelegt, werden
- * entsprechende Aktionen gestartet. Die Nachrichten vom
- * Broker werden ebenfalls behandelt
- */
- static int
- IconifyWithIcon(void)
- {
- struct MsgPort *msgport;
- struct AppMessage *appmsg;
- SysMsg *arrived_mess;
- ULONG mask;
- BOOL broker_sig = FALSE,
- show_dropped = TRUE,
- refresh = FALSE;
- int ID = LastID,
- i;
- struct WBArg *argptr;
- extern struct Screen *lastpubscreen;
- extern int ReopenWindow;
- long posx, posy;
-
- DPOS;
-
- if (msgport = CreateMsgPort())
- {
- DisableSysRequest(TRUE);
-
- ProgramIcon = GetProgramIcon();
-
- posx = ProgramIcon->do_CurrentX;
- posy = ProgramIcon->do_CurrentY;
-
- ProgramIcon->do_Type = NULL;
-
- ClearSetIconPos(iconx, icony, NO_KILL);
-
- if (appicon = AddAppIcon(1L, NULL, (UBYTE *) "", msgport, NULL, ProgramIcon, TAG_DONE))
- {
- do
- {
- mask = Wait(SIGBREAKF_CTRL_C | (1 << msgport->mp_SigBit) |
- (1 << SysIdPort->mp_SigBit) | (1 << broker_mp->mp_SigBit));
-
- if (mask & SIGBREAKF_CTRL_C) Flags.quit_iconify = 1;
-
- if (mask & (1 << broker_mp->mp_SigBit))
- {
- HandleBrokerPort();
-
- if (SysWnd)
- {
- Flags.quit_iconify = 1;
- ReopenWindow = TRUE;
- }
- }
-
- if (mask & (1 << msgport->mp_SigBit))
- while (appmsg = (struct AppMessage *) GetMsg(msgport))
- {
- if (appmsg->am_NumArgs == NULL)
- {
- strcpy((char *)namebuffer, "Workbench");
-
- Flags.quit_iconify = 1;
- refresh = TRUE;
- }
- else
- {
- argptr = appmsg->am_ArgList;
-
- for (i = 0; show_dropped && (i < appmsg->am_NumArgs); i++)
- {
- show_dropped = LookTypeOfFile(argptr->wa_Lock,
- (char *)argptr->wa_Name,
- i + 1, appmsg->am_NumArgs);
- argptr++;
- }
-
- show_dropped = TRUE;
- }
-
- ReplyMsg((struct Message *) appmsg);
- }
-
- if (mask & (1 << SysIdPort->mp_SigBit))
- {
- while (arrived_mess = (SysMsg *)GetMsg(SysIdPort))
- {
- ID = arrived_mess->sm_newtype;
- ReplyMsg((struct Message *) arrived_mess);
-
- refresh = TRUE;
- }
-
- Flags.quit_iconify = 1;
- }
- } while (NOT(Flags.quit_iconify));
-
- RemoveAppIcon(appicon);
- appicon = NULL;
-
- if (mask & SIGBREAKF_CTRL_C)
- {
- ClearSetIconPos(posx, posy, KILL);
-
- DisableSysRequest(FALSE);
- DeleteMsgPort(msgport);
- CloseAll();
- }
- }
- else
- {
- ClearSetIconPos(posx, posy, KILL);
-
- DisableSysRequest(FALSE);
- ErrorHandle("AddAppIcon()", ICON_ERR, CREATE_FAIL, KILL);
- }
-
- ClearSetIconPos(posx, posy, KILL);
-
- DisableSysRequest(FALSE);
- DeleteMsgPort(msgport);
- }
- else ErrorHandle("CreateMsgPort()", PORT_ERR, CREATE_FAIL, KILL);
-
- return(ID);
- }
-
- /*
- * IconifyWithoutIcon() schließt das Hauptfenster von RSys
- * Die Nachrichten vom Broker werden behandelt
- */
- static int
- IconifyWithoutIcon(void)
- {
- SysMsg *arrived_mess;
- ULONG mask;
- BOOL broker_sig = FALSE,
- refresh = FALSE;
- int ID = LastID;
- extern struct Screen *lastpubscreen;
- extern int ReopenWindow;
-
- DPOS;
-
- do
- {
- mask = Wait(SIGBREAKF_CTRL_C |
- (1 << SysIdPort->mp_SigBit) |
- (1 << broker_mp->mp_SigBit));
-
- if (mask & SIGBREAKF_CTRL_C) Flags.quit_iconify = 1;
-
- if (mask & (1 << broker_mp->mp_SigBit))
- {
- HandleBrokerPort();
-
- if (SysWnd) Flags.quit_iconify = 1;
- }
-
- if (mask & (1 << SysIdPort->mp_SigBit))
- {
- while (arrived_mess = (SysMsg *)GetMsg(SysIdPort))
- {
- ID = arrived_mess->sm_newtype;
- ReplyMsg((struct Message *) arrived_mess);
-
- refresh = TRUE;
- }
-
- Flags.quit_iconify = 1;
- }
- } while (NOT(Flags.quit_iconify));
-
- if (mask & SIGBREAKF_CTRL_C) CloseAll();
-
- return ID;
- }
-
- /*
- * Iconify() ist die Frontend-Routine für IconifyWithIcon()
- * und IconifyWithoutIcon(), je nachdem, ob der Benutzer ein Icon wünscht
- * oder nicht.
- */
- void
- Iconify(void)
- {
- int ID;
-
- DPOS;
-
- HandleHelp(MN_Iconify);
-
- if (SysWnd)
- {
- lastpubscreen = SysWnd->WScreen;
-
- CloseASysWindow(&SysWnd, &SysGList, &SysMenus);
- CloseDownScreen();
- }
-
- Flags.quit_iconify = 0;
-
- if(Flags.appicon) ID = IconifyWithIcon();
- else
- ID = IconifyWithoutIcon();
-
- if (NOT(SysWnd))
- {
- OpenMainWindow();
-
- MakeWindowRefresh(SysWnd);
- ClearIntuiMsgPort(SysWnd);
-
- if (ID != LastID) LastID = ID;
-
- RefreshList(LastID);
- }
-
- ReopenWindow = TRUE;
-
- return;
- }
-