home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 632.lha / AddAssign_v1.04 / AddAssign.c < prev    next >
C/C++ Source or Header  |  1992-04-27  |  3KB  |  161 lines

  1. /*
  2.     AddAssign V1.04e
  3.     
  4.     (c) 1991 Alexander Rawass
  5.  
  6.     Alexander Rawass
  7.     Wilhelminenstr. 44
  8.     6700 Ludwigshafen 15
  9.     Germany
  10.     0621/57 75 98
  11. */
  12.  
  13. #include <libraries/dos.h>
  14. #include <libraries/dosextens.h>
  15. #include <pragmas.h>
  16. #include <libraries/arp.h>
  17.  
  18. #define    AR_USE_ARP
  19. #include "ar_defs.h"
  20. #include "ar_funcs.c"
  21.  
  22. #include "addassign.h"
  23.  
  24. struct    ArpBase        *ArpBase;
  25. struct    DosLibrary    *DosBase;
  26. struct    FileLock    *block;    
  27. char    path[256];
  28. struct    FileLock    *asslock;
  29.  
  30. struct    commandmessage    sendmsg;
  31. struct    commandmessage    *waitmsg;
  32. struct    MsgPort        *waitport,*sendport;
  33. struct    MoreAssign    *manode;
  34. struct    List        *malist;
  35.  
  36. STRPTR    CLI_Help="\x1b[1mAddAssign V1.04e\x1b[0m - (c) 1991 Alexander Rawass\nUsage : AddAssign [<device> <directory>] | [LIST]\n";
  37.  
  38. VOID    closeall()
  39. {
  40. /*    if(asslock)    UNLOCKC(asslock);    */
  41.     if(block)    UNLOCKC(block);
  42.     if(DosBase)    CLOSELIBRARYC(DosBase);
  43.     exit(NULL);
  44. }
  45.  
  46. VOID    openall()
  47. {
  48.     DosBase=OpenLibrary(DOSNAME,0);
  49. }
  50.  
  51. BOOL    checkassign(assign)
  52. STRPTR    assign;
  53. {
  54.     struct    MsgPort        *mport;
  55.     struct    RootNode    *rootnode;
  56.     struct    DosInfo        *dosinfo;
  57.     struct    DosList        *doslist;
  58.     struct    FileLock    *lock;
  59.     STRPTR    dosname;
  60.     ULONG    dostype;
  61.  
  62.     rootnode=DosBase->dl_Root;
  63.     dosinfo=BADDR(rootnode->rn_Info);
  64.  
  65.     doslist=BADDR(dosinfo->di_DevInfo);
  66.     assign[strlen(assign)-1]=EOS;
  67.     do{
  68.         dosname=BSTRS(doslist->dol_Name);
  69.         dostype=doslist->dol_Type;
  70.  
  71.         if(STREQU(dosname,assign)){
  72.             assign[strlen(assign)]=':';
  73.             return(TRUE);
  74.         }
  75.  
  76.         doslist=BADDR(doslist->dol_Next);
  77.     }
  78.     while(doslist!=NULL);
  79.  
  80.     assign[strlen(assign)]=':';
  81.     return(FALSE);
  82. }
  83.  
  84. VOID    main(argc,argv)
  85. int    argc;
  86. STRPTR    argv[];
  87. {
  88.  
  89.     openall();
  90.     
  91.     if(argc<2 || *argv[1]=='?'){
  92.         printf("\x1b[1mAddAssign V1.04e\x1b[0m - (c) 1991 Alexander Rawass\n");
  93.         printf("Usage : %s [<device> <directory>] | [LIST]\n",argv[0]);
  94.         exit(NULL);
  95.     }
  96.  
  97.     if(!(waitport=FindPort(waitportname))){
  98.         printf("ERROR : AddAssign V1.04e not installed\n");
  99.         exit(NULL);
  100.     }
  101.     
  102.     sendport=CreatePort(sendportname,0);
  103.     sendmsg.cmsg_message.mn_Node.ln_Type=NT_MESSAGE;
  104.     sendmsg.cmsg_message.mn_ReplyPort=sendport;
  105.     sendmsg.cmsg_message.mn_Length=sizeof(struct commandmessage);
  106.  
  107.     StrUpper(argv[1]);
  108.     
  109.     if(STREQU(argv[1],"LIST")){
  110.         sendmsg.cmsg_command="list";
  111.         PutMsg(waitport,&sendmsg);
  112.         waitmsg=WaitPort(sendport);
  113.         waitmsg=GetMsg(sendport);
  114.         malist=(struct    List *)sendmsg.cmsg_assign;
  115.         
  116.         manode=malist->lh_Head;
  117.         
  118.         if(manode==(struct MoreAssign *)&malist->lh_Tail){
  119.             printf("no entries found in internal assign list\n");
  120.         }
  121.         else{
  122.             while((manode!=(struct MoreAssign *)&malist->lh_Tail)){
  123.                 printf("     %-10s assigned to %s\n",manode->ma_assignname,manode->ma_pathname);
  124.                 manode=manode->ma_node.ln_Succ;
  125.             }
  126.         }
  127.         
  128.     }
  129.     else{
  130.         if(!(checkassign(argv[1]))){
  131.             printf("ERROR : %s is not assigned - use standard assign\n",argv[1]);
  132.             closeall();
  133.         }
  134.         
  135.         if(!(block=Lock(argv[2],SHARED_LOCK))){
  136.             printf("ERROR : directory %s does not exist\n",argv[2]);
  137.             closeall();
  138.         }
  139.         if(!(asslock=Lock(argv[1],SHARED_LOCK))){
  140.             printf("ERROR : device %s does not exist\n",argv[1]);
  141.             closeall();
  142.         }
  143.         if(!(PathName(block,path,256))){
  144.             printf("ERROR : internal pathname error - pathname too long\n");
  145.             closeall();
  146.         }
  147.         printf("assigning %s to %s\n",argv[1],path);
  148.         sendmsg.cmsg_command="addassign";
  149.         sendmsg.cmsg_assign=argv[1];
  150.         sendmsg.cmsg_path=path;
  151.         sendmsg.cmsg_lock=asslock;
  152.         PutMsg(waitport,&sendmsg);
  153.         waitmsg=WaitPort(sendport);
  154.         waitmsg=GetMsg(sendport);
  155.     }
  156.     
  157.     
  158.     DeletePort(sendport);
  159.     closeall();
  160. }
  161.