home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / prog_c / suplib.lzh / SUPLIB / SRC / SETFILEDATE.C < prev    next >
C/C++ Source or Header  |  1991-08-16  |  2KB  |  71 lines

  1.  
  2.  
  3. /*
  4.  *  SETFILEDATE.C
  5.  *
  6.  *  BOOL = setfiledate(filename, date)
  7.  */
  8.  
  9. #include <local/typedefs.h>
  10. #ifdef LATTICE
  11. #include <string.h>
  12. #endif
  13.  
  14. #ifndef ACTION_SET_DATE
  15. #define ACTION_SET_DATE 34
  16. #endif
  17.  
  18. typedef struct StandardPacket STDPKT;
  19.  
  20. int
  21. setfiledate(file, date)
  22. char *file;
  23. DATESTAMP *date;
  24. {
  25.     STDPKT *packet;
  26.     char   *buf;
  27.     PROC   *proc;
  28.     long    result;
  29.     long    lock;
  30.     long flock = (long)Lock(file, SHARED_LOCK);
  31.     short i;
  32.     char *ptr = file;
  33.  
  34.     {
  35.     if (flock == NULL)
  36.         return(NULL);
  37.     lock = (long)ParentDir(flock);
  38.     UnLock(flock);
  39.     if (!lock)
  40.         return(NULL);
  41.     for (i = strlen(ptr) - 1; i >= 0; --i) {
  42.         if (ptr[i] == '/' || ptr[i] == ':')
  43.         break;
  44.     }
  45.     file += i + 1;
  46.     }
  47.     proc   = (PROC *)FindTask(NULL);
  48.     packet = (STDPKT   *)AllocMem(sizeof(STDPKT), MEMF_CLEAR|MEMF_PUBLIC);
  49.     buf = AllocMem(strlen(file)+2, MEMF_PUBLIC);
  50.     strcpy(buf+1,file);
  51.     buf[0] = strlen(file);
  52.  
  53.     packet->sp_Msg.mn_Node.ln_Name = (char *)&(packet->sp_Pkt);
  54.     packet->sp_Pkt.dp_Link = &packet->sp_Msg;
  55.     packet->sp_Pkt.dp_Port = &proc->pr_MsgPort;
  56.     packet->sp_Pkt.dp_Type = ACTION_SET_DATE;
  57.     packet->sp_Pkt.dp_Arg1 = NULL;
  58.     packet->sp_Pkt.dp_Arg2 = (long)lock;        /*  lock on parent dir of file  */
  59.     packet->sp_Pkt.dp_Arg3 = (long)CTOB(buf);   /*  BPTR to BSTR of file name   */
  60.     packet->sp_Pkt.dp_Arg4 = (long)date;        /*  APTR to datestamp structure */
  61.     PutMsg(((LOCK *)BTOC(lock))->fl_Task, (MSG *)packet);
  62.     WaitPort(&proc->pr_MsgPort);
  63.     GetMsg(&proc->pr_MsgPort);
  64.     result = packet->sp_Pkt.dp_Res1;
  65.     FreeMem(packet, sizeof(STDPKT));
  66.     FreeMem(buf, strlen(file)+2);
  67.     UnLock(lock);
  68.     return(result);
  69. }
  70.  
  71.