home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / newc_dev / makelink.lha / MakeLink / MakeLink.c < prev    next >
C/C++ Source or Header  |  1992-06-14  |  1KB  |  64 lines

  1. /*
  2.  * MakeLink.c  V1.1
  3.  *
  4.  * (c) 1991 by Stefan Becker
  5.  *
  6.  */
  7. #include <stdlib.h>
  8. #include <clib/dos_protos.h>
  9.  
  10. const char VersionID[]="$VER: (Soft-)MakeLink 1.1 (21.07.1991)";
  11.  
  12. /* Stuff for ReadArgs */
  13. const char Template[]="FROM/A,TO/A,HARD/S";
  14. struct {
  15.         char *fromname;
  16.         char *toname;
  17.         long hardlink;
  18.        } ArgDef;
  19.  
  20. #define NAMELEN 50
  21. char progname[NAMELEN];
  22.  
  23. extern struct Library *SysBase;
  24.  
  25. /* Main entry point */
  26. __stkargs void _main()
  27. {
  28.  register struct RDArgs *rda;
  29.  register LONG toobj;
  30.  register long rc=RETURN_ERROR; /* Set return code */
  31.  
  32.  /* Check OS version */
  33.  if (SysBase->lib_Version<37) _exit(RETURN_FAIL);
  34.  
  35.  /* Get program name */
  36.  if (!GetProgramName(progname,NAMELEN-1)) progname[0]='\0';
  37.  
  38.  /* Parse command line arguments */
  39.  ArgDef.hardlink=FALSE;
  40.  if (rda=ReadArgs(Template,(LONG *) &ArgDef,NULL))
  41.   {
  42.    register BOOL softlink=!ArgDef.hardlink; /* Set flag */
  43.  
  44.    /* Set tobj and then call MakeLink().
  45.         - soft: toobj points to name
  46.         - hard: toobj points to lock
  47.    */
  48.    if ((toobj=softlink?(LONG) ArgDef.toname:Lock(ArgDef.toname,SHARED_LOCK)) &&
  49.        MakeLink(ArgDef.fromname,toobj,softlink))
  50.     rc=RETURN_OK; /* All OK! */
  51.  
  52.    /* Unlock object if hard link */
  53.    if (!softlink) UnLock(toobj);
  54.  
  55.    /* Free resources */
  56.    FreeArgs(rda);
  57.   }
  58.  
  59.  /* Error? Yes, print error message */
  60.  if (rc) PrintFault(IoErr(),progname);
  61.  
  62.  _exit(rc);
  63. }
  64.