home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Pascal / System / ControlPanelLock / cdev.c next >
Encoding:
C/C++ Source or Header  |  1993-04-03  |  4.1 KB  |  249 lines  |  [TEXT/KAHL]

  1. #include <SetUpA4.h>
  2. #include "CPanel Lock.h"
  3.  
  4. #define SETPSWDBTN    6
  5.  
  6.  
  7. void Pstrcpy(char *s1,char *s2);
  8. int Pstrlen(char *s1);
  9. int GetPassword(char *thePrompt,char *userPassWord);
  10. pascal void HiliteDefaultButton(DialogPtr theDPtr,int whichItem);
  11. int Pstrcmp(char *s1, char *s2);
  12.  
  13.  
  14.  
  15. pascal long main(int message,int item, int numItems, int CPanelID, EventRecord *theEvent, long cdevValue, DialogPtr CPDialog)
  16. {
  17. long        retCode;
  18. Handle        itemHandle;
  19. Rect        itemRect;
  20. int            itemType;
  21. CInfoPBRec    myPBRec;
  22. char        passWord[256],passWord2[256];
  23. Handle        passWordHandle;
  24. int            errCode;
  25.  
  26.  
  27.     RememberA0();
  28.     SetUpA4();
  29.     
  30.     retCode = cdevValue;
  31.     
  32.     switch (message)
  33.     {
  34.         case initDev:
  35.             break;
  36.             
  37.         case hitDev:
  38.             item -= numItems;
  39.             
  40.             if (item == SETPSWDBTN)
  41.             {
  42.                 passWordHandle = GetResource('STR ',PASSWORDSTR);
  43.             
  44.                 if (passWordHandle && 
  45.                     GetPassword("Enter Old Password:",passWord) == 1 && 
  46.                     Pstrcmp(passWord,(char *) *passWordHandle) == EQSTR &&
  47.                     GetPassword("Enter New Password:",passWord) == 1 &&
  48.                     GetPassword("Confirm New Password:",passWord2) == 1 &&
  49.                     Pstrcmp(passWord,passWord2) == EQSTR)
  50.                 {
  51.                     SetHandleSize(passWordHandle,(long) Pstrlen(passWord) + 1L);
  52.                     Pstrcpy((char *) *passWordHandle,passWord);
  53.                     
  54.                     ChangedResource(passWordHandle);
  55.                     WriteResource(passWordHandle);
  56.                 }
  57.                 
  58.                 else
  59.                     SysBeep(1);
  60.             }
  61.             
  62.             break;
  63.         
  64.         case closeDev:
  65.             break;
  66.         
  67.         case nulDev:
  68.             break;
  69.         
  70.         case updateDev:
  71.             break;
  72.         
  73.         case activDev:
  74.             break;
  75.         
  76.         case deactivDev:
  77.             break;
  78.         
  79.         case keyEvtDev:
  80.             break;
  81.         
  82.         case macDev:
  83.             retCode = 1;
  84.             break;
  85.         
  86.         case undoDev:
  87.             break;
  88.         
  89.         case cutDev:
  90.             break;
  91.         
  92.         case copyDev:
  93.             break;
  94.         
  95.         case pasteDev:
  96.             break;
  97.         
  98.         case clearDev:
  99.             break;
  100.         
  101.         case cursorDev:
  102.             InitCursor();
  103.             break;
  104.     }
  105.     
  106.     RestoreA4();
  107.     
  108.     return(retCode);
  109. }
  110.  
  111.  
  112.  
  113. void Pstrcpy(char *s1,char *s2)
  114. {
  115. register long    length;
  116.  
  117.     length = *s2;
  118.     
  119.     do
  120.         *s1++ = *s2++;
  121.         
  122.     while (length--);
  123. }
  124.  
  125.  
  126. int Pstrlen(char *s1)
  127. {
  128.     return((int) *((unsigned char *) s1));
  129. }
  130.  
  131.  
  132. pascal void HiliteDefaultButton(DialogPtr theDPtr,int whichItem)
  133. {
  134. int            type;
  135. Handle        theItem;
  136. Rect        theRect;
  137.  
  138.     GetDItem(theDPtr, ((DialogPeek) theDPtr)->aDefItem, &type, &theItem, &theRect);
  139.     PenNormal();
  140.     PenSize(3,3);
  141.     InsetRect(&theRect,-4,-4);
  142.     FrameRoundRect(&theRect,16,16);
  143.     PenSize(1,1);
  144. }
  145.  
  146.  
  147. int Pstrcmp(char *s1, char *s2)
  148. {
  149. int        i;
  150.  
  151.     i = *s1 + 1;
  152.     
  153.     while (i > 0 && *s1 == *s2)
  154.     {
  155.         s1++; 
  156.         s2++;
  157.         i--;
  158.     }
  159.     
  160.     if (i <= 0)
  161.         return(EQSTR);
  162.     else
  163.         return(!EQSTR);
  164. }
  165.  
  166.  
  167.  
  168. int GetPassword(char * thePrompt,char *userPassWord)
  169. {
  170. DialogPtr        theDPtr,tempDPtr;
  171. int                itemHit, type, returnCode,i;
  172. Handle            theItem;
  173. Rect            tempRect;
  174. GrafPtr            oldPort;
  175. EventRecord        theEvent;
  176.  
  177.     GetPort(&oldPort);
  178.  
  179.     InitCursor();
  180.     
  181.     theDPtr = GetNewDialog(PASSWDDLOG, 0L,(WindowPtr) -1L);
  182.     SetPort(theDPtr);
  183.     
  184.     /*CenterWindow(theDPtr);*/
  185.     ShowWindow(theDPtr);
  186.     
  187.     ((DialogPeek) theDPtr)->aDefItem = 1;
  188.     
  189.     GetDItem(theDPtr, 5, &type, &theItem, &tempRect);
  190.     SetDItem(theDPtr, 5, type, HiliteDefaultButton, &tempRect);
  191.     
  192.     GetDItem(theDPtr, 3, &type, &theItem, &tempRect);
  193.     CtoPstr(thePrompt);
  194.     SetIText(theItem, thePrompt);
  195.     PtoCstr(thePrompt);
  196.         
  197.     i = 1;
  198.     userPassWord[0] = 0;
  199.     
  200.     do 
  201.     {
  202.         itemHit = 0;
  203.         
  204.         while (!GetNextEvent(everyEvent,&theEvent))
  205.         {
  206.             SystemTask();
  207.         
  208.             if (((DialogPeek) theDPtr)->editField>=0 && ((DialogPeek) theDPtr)->textH)
  209.                 TEIdle(((DialogPeek) theDPtr)->textH);
  210.         }
  211.         
  212.         if (theEvent.what==keyDown || theEvent.what==autoKey)
  213.         {
  214.             if ((theEvent.message & charCodeMask)=='\r' || (theEvent.message & charCodeMask)==0x03)
  215.                 itemHit = ((DialogPeek) theDPtr)->aDefItem;
  216.             
  217.             else if (i < 255)
  218.             {
  219.                 userPassWord[i++] = theEvent.message & charCodeMask;
  220.                 userPassWord[0] += 1;
  221.                 theEvent.message &= ~charCodeMask;
  222.                 theEvent.message |= '•';
  223.                 
  224.                 tempDPtr = 0L;
  225.                 itemHit = 0;
  226.                 
  227.                 DialogSelect(&theEvent,&tempDPtr,&itemHit);
  228.             }
  229.             
  230.             else
  231.                 SysBeep(1);
  232.         }
  233.         
  234.         else
  235.         {
  236.             tempDPtr = (DialogPtr) 0L;
  237.                 
  238.             if (!IsDialogEvent(&theEvent) || !DialogSelect(&theEvent,&tempDPtr,&itemHit) || tempDPtr!=theDPtr)
  239.                 itemHit = 0;
  240.         }
  241.         
  242.     } while (itemHit!=1 && itemHit!=2);
  243.     
  244.     DisposDialog(theDPtr);
  245.     SetPort(oldPort);
  246.     
  247.     return(itemHit);
  248. }
  249.