Path: utzoo!mnetor!uunet!nuchat!peter From: peter@nuchat.UUCP (Peter da Silva) Newsgroups: comp.sys.amiga Subject: IPC -- as the concept gels. Message-ID: <783@nuchat.UUCP> Date: 13 Mar 88 03:59:13 GMT Organization: Public Access - Houston, Tx Lines: 94 Well, there have been some good ideas out there... Still using the Browser as the technology demonstrator... struct IPCEntry { ULONG IE_Id; /* name of this entry */ void *IE_Ptr; /* this entry's data */ }; struct IPCMessage { struct Message IPC_Message; /* ln_Name == tool name */ ULONG IPC_Status; /* Return status */ ULONG IPC_Type; /* Identify this message type */ ULONG IPC_Entries; /* Number of IPC entries */ struct IPCEntry IPC_Data[]; /* Entries */ }; struct IPCPort should probably be the reference-counted port that Matt Dillon described. It's a LOT safer than the current ports, and a LOT cleaner than the various message-broker setups floating around. All messages are replied to using ReplyMsg(). Any pointers in the structure rendered invalid by the program should be zeroed out before replying. This means Freed memory or locks, or even just stuff that you intend to keep around and delete later. The program that sent the original message should keep this in mind when cleaning up. Specific browser info: Name = BRWS; Entries defined by this Server: Id = FILE Ptr = struct IE_File { ULONG DirLock; char *FileName; }; Id = PORT Ptr = struct MsgPort *; Id = WNDW Ptr = struct Window *; Id = CSTR Ptr = char *; /* points to a 'C' type string */ Messages defined by this Server: Type = ADDF, 1 Entry: FILE; Browser check to see if it's got that particular directory locked, and if so it goes ahead and adds that file to its window; Type = DELF, 1 Entry: FILE; Like ADDF, but deletes that file from the window; Type = ADDT, 2 Entries: CSTR, PORT; Adds entry to Tools menu. Name is taken from CSTR. When that entry is selected Browser will send an IPCMessage containing the files selected in FILE format. Type = DELT, 1 Entry: PORT; Deletes all entries from Tools menu using that PORT. Type = DELT, 2 Entries: CSTR, PORT; Deletes the entry from the Tools menu that matches that string and port. Type = ADDW, 2 Entries: WNDW, PORT; Adds that window to its "copy" list. When the user drops files in that window they will be sent to the program in an IPCMessage containing the files selected in FILE format. Type = DELW, 1 Entry: PORT; Deletes all windows from the "copy" list using that PORT. Type = DELW, 2 Entries: WNDW, PORT; Deletes the entry from the "copy" list that matches that window and port. I guess the FILE entries could be handled as paired LOCK and CSTR entries, but it's used often enough that it's worthwhile doing it here. Note the DELW and DELT entries have two forms available. This is a side-effect of the format. Browser will not keep any of the FILE entries passed in ADDF or DELF. It will zero out the CSTR, WNDW, and PORT entries in ADDT and ADDW, but not in DELT or DELW. -- -- a clone of Peter (have you hugged your wolf today) da Silva `-_-' -- normally ...!hoptoad!academ!uhnix1!sugar!peter U -- Disclaimer: These aren't mere opinions... these are *values*.