home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Utilities / ModePro / Src / Daemon / OldPatch / MPPatch.c3 < prev    next >
Encoding:
Text File  |  1996-11-09  |  2.7 KB  |  117 lines

  1. struct DefaultNode *FindDNodeMode(ULONG ModeID);
  2.  
  3. struct Screen ASM __saveds  *NewOpenScreenTagList(REG __a0 struct ExtNewScreen *NS,
  4.                                                   REG __a1 struct TagItem *TagList,
  5.                                                   REG __a6 struct IntuitionBase *IBase)
  6. {
  7.   struct DefaultNode *match;
  8.   struct Screen *retval=0;
  9.   
  10.   if(match=MatchDNode(NS,TagList))
  11.   {
  12.     retval=PromoteScreen(NS,TagList,match);
  13.     FreeDNode(match);
  14.   }
  15.   
  16.   if(!retval)
  17.     retval=OldOpenScreenTagList(NS,TagList,IBase);
  18.     
  19.   return(retval);
  20. }
  21.  
  22.  
  23. struct DefaultNode *MatchDNode(struct ExtNewScreen *NS,
  24.                                struct TagItem      *TagList)
  25. {
  26.   struct DefaultNode  *n,
  27.                       *retval=0;
  28.   UBYTE   cliname[41];
  29.   STRPTR  taskname,title=0;
  30.   ULONG   modeid=-1;
  31.  
  32.   ObtainSemaphoreShared(&MPSem->ListSem); 
  33.   ObtainSemaphore(&MPSem->NodeSem); 
  34.  
  35.   taskname=FindTask(0)->tc_Node.ln_Name;
  36.  
  37.   if(GetProgramName(cliname,40)) /* Get cli program's name */
  38.     if(CLIName[0]!=0)            /* make sure CLIName contains something */
  39.       taskname=cliname;
  40.  
  41.   if(NS)
  42.   {
  43.     title   =NS->DefaultTitle;
  44.     modeid  =NS->ViewModes;
  45.   }
  46.     
  47.   if(TagList)
  48.   {
  49.     title   =(STRPTR)GetTagData(SA_Title        ,(ULONG)title   ,TagList);
  50.     modeid  =        GetTagData(SA_DisplayID    ,modeid         ,TagList);
  51.   }
  52.     
  53.   if(!title) title=GetString(MSG_ITEM_NO_NAME); /* Just in case ther isn't a title */
  54.  
  55.   if(!(n=FindDNode(&MPSem->PromotionList[1],title)))
  56.   {
  57.     if(!(n=FindDNode(&MPSem->PromotionList[0],taskname)))
  58.     {
  59.       n=FindDNodeMode(modeid);
  60.     }
  61.   }
  62.   
  63.   if(n)
  64.     retval=DupDNode(n);
  65.  
  66.   ReleaseSemaphoreShared(&MPSem->ListSem); 
  67.   ReleaseSemaphore(&MPSem->NodeSem); 
  68.     
  69.   return(retval);
  70. }
  71.  
  72. struct DefaultNode *FindDNodeMode(ULONG ModeID)
  73. {
  74.   struct DefaultNode *smnode;
  75.   ULONG  mode_monall,
  76.          orig_monall;
  77.       
  78.   mode_monall  =ModeID | ALL_MODES;      
  79.   smnode=(struct DefaultNode *)MPSem->PromotionList[PL_SCREENMODES].lh_Head;
  80.   
  81.   while(smnode->Def_Node.ln_Succ)
  82.   {
  83.     orig_monall= smnode->OrigDisplayID & ALL_MODES;
  84.   
  85.     if( (smnode->OrigDisplayID == ModeID) ||
  86.         (smnode->OrigDisplayID == mode_monall) )     
  87.     {
  88.       return(smnode);
  89.     }
  90.     smnode=(struct DefaultNode *)smnode->Def_Node.ln_Succ;
  91.   }
  92.   return(0);
  93. }
  94.  
  95.  
  96. struct DefaultNode *DupDNode(struct DefaultNode *DNode)
  97. {
  98.   struct DefaultNode *retval;
  99.   
  100.   if(retval=AllocVec(sizeof(struct DefaultNode),MEMF_PUBLIC|MEMF_CLEAR))
  101.   {
  102.     *retval=*DNode;
  103.  
  104.     retval->Def_Node.ln_Name=0;
  105.     retval->Font.tta_Name=0;
  106.     retval->Font.tta_Tags=0;
  107.     retval->PubName=
  108.     retval->LockedPens=
  109.     retval->HotKey=0;
  110.     retval->Palette=0;
  111.  
  112.     if(retval->Def_Node.ln_Name=CopyString(DNode->Def_Node.ln_Name))
  113.     {
  114.       if(
  115.     
  116.  
  117. }