home *** CD-ROM | disk | FTP | other *** search
- struct DefaultNode *FindDNodeMode(ULONG ModeID);
-
- struct Screen ASM __saveds *NewOpenScreenTagList(REG __a0 struct ExtNewScreen *NS,
- REG __a1 struct TagItem *TagList,
- REG __a6 struct IntuitionBase *IBase)
- {
- struct DefaultNode *match;
- struct Screen *retval=0;
-
- if(match=MatchDNode(NS,TagList))
- {
- retval=PromoteScreen(NS,TagList,match);
- FreeDNode(match);
- }
-
- if(!retval)
- retval=OldOpenScreenTagList(NS,TagList,IBase);
-
- return(retval);
- }
-
-
- struct DefaultNode *MatchDNode(struct ExtNewScreen *NS,
- struct TagItem *TagList)
- {
- struct DefaultNode *n,
- *retval=0;
- UBYTE cliname[41];
- STRPTR taskname,title=0;
- ULONG modeid=-1;
-
- ObtainSemaphoreShared(&MPSem->ListSem);
- ObtainSemaphore(&MPSem->NodeSem);
-
- taskname=FindTask(0)->tc_Node.ln_Name;
-
- if(GetProgramName(cliname,40)) /* Get cli program's name */
- if(CLIName[0]!=0) /* make sure CLIName contains something */
- taskname=cliname;
-
- if(NS)
- {
- title =NS->DefaultTitle;
- modeid =NS->ViewModes;
- }
-
- if(TagList)
- {
- title =(STRPTR)GetTagData(SA_Title ,(ULONG)title ,TagList);
- modeid = GetTagData(SA_DisplayID ,modeid ,TagList);
- }
-
- if(!title) title=GetString(MSG_ITEM_NO_NAME); /* Just in case ther isn't a title */
-
- if(!(n=FindDNode(&MPSem->PromotionList[1],title)))
- {
- if(!(n=FindDNode(&MPSem->PromotionList[0],taskname)))
- {
- n=FindDNodeMode(modeid);
- }
- }
-
- if(n)
- retval=DupDNode(n);
-
- ReleaseSemaphoreShared(&MPSem->ListSem);
- ReleaseSemaphore(&MPSem->NodeSem);
-
- return(retval);
- }
-
- struct DefaultNode *FindDNodeMode(ULONG ModeID)
- {
- struct DefaultNode *smnode;
- ULONG mode_monall,
- orig_monall;
-
- mode_monall =ModeID | ALL_MODES;
- smnode=(struct DefaultNode *)MPSem->PromotionList[PL_SCREENMODES].lh_Head;
-
- while(smnode->Def_Node.ln_Succ)
- {
- orig_monall= smnode->OrigDisplayID & ALL_MODES;
-
- if( (smnode->OrigDisplayID == ModeID) ||
- (smnode->OrigDisplayID == mode_monall) )
- {
- return(smnode);
- }
- smnode=(struct DefaultNode *)smnode->Def_Node.ln_Succ;
- }
- return(0);
- }
-
-
- struct DefaultNode *DupDNode(struct DefaultNode *DNode)
- {
- struct DefaultNode *retval;
-
- if(retval=AllocVec(sizeof(struct DefaultNode),MEMF_PUBLIC|MEMF_CLEAR))
- {
- *retval=*DNode;
-
- retval->Def_Node.ln_Name=0;
- retval->Font.tta_Name=0;
- retval->Font.tta_Tags=0;
- retval->PubName=
- retval->LockedPens=
- retval->HotKey=0;
- retval->Palette=0;
-
- if(retval->Def_Node.ln_Name=CopyString(DNode->Def_Node.ln_Name))
- {
- if(
-
-
- }