home *** CD-ROM | disk | FTP | other *** search
- /*
- AddAssign V1.04e
-
- (c) 1991 Alexander Rawass
-
- Alexander Rawass
- Wilhelminenstr. 44
- 6700 Ludwigshafen 15
- Germany
- 0621/57 75 98
- */
-
- #include <libraries/dos.h>
- #include <libraries/dosextens.h>
- #include <pragmas.h>
- #include <libraries/arp.h>
-
- #define AR_USE_ARP
- #include "ar_defs.h"
- #include "ar_funcs.c"
-
- #include "addassign.h"
-
- struct ArpBase *ArpBase;
- struct DosLibrary *DosBase;
- struct FileLock *block;
- char path[256];
- struct FileLock *asslock;
-
- struct commandmessage sendmsg;
- struct commandmessage *waitmsg;
- struct MsgPort *waitport,*sendport;
- struct MoreAssign *manode;
- struct List *malist;
-
- STRPTR CLI_Help="\x1b[1mAddAssign V1.04e\x1b[0m - (c) 1991 Alexander Rawass\nUsage : AddAssign [<device> <directory>] | [LIST]\n";
-
- VOID closeall()
- {
- /* if(asslock) UNLOCKC(asslock); */
- if(block) UNLOCKC(block);
- if(DosBase) CLOSELIBRARYC(DosBase);
- exit(NULL);
- }
-
- VOID openall()
- {
- DosBase=OpenLibrary(DOSNAME,0);
- }
-
- BOOL checkassign(assign)
- STRPTR assign;
- {
- struct MsgPort *mport;
- struct RootNode *rootnode;
- struct DosInfo *dosinfo;
- struct DosList *doslist;
- struct FileLock *lock;
- STRPTR dosname;
- ULONG dostype;
-
- rootnode=DosBase->dl_Root;
- dosinfo=BADDR(rootnode->rn_Info);
-
- doslist=BADDR(dosinfo->di_DevInfo);
- assign[strlen(assign)-1]=EOS;
- do{
- dosname=BSTRS(doslist->dol_Name);
- dostype=doslist->dol_Type;
-
- if(STREQU(dosname,assign)){
- assign[strlen(assign)]=':';
- return(TRUE);
- }
-
- doslist=BADDR(doslist->dol_Next);
- }
- while(doslist!=NULL);
-
- assign[strlen(assign)]=':';
- return(FALSE);
- }
-
- VOID main(argc,argv)
- int argc;
- STRPTR argv[];
- {
-
- openall();
-
- if(argc<2 || *argv[1]=='?'){
- printf("\x1b[1mAddAssign V1.04e\x1b[0m - (c) 1991 Alexander Rawass\n");
- printf("Usage : %s [<device> <directory>] | [LIST]\n",argv[0]);
- exit(NULL);
- }
-
- if(!(waitport=FindPort(waitportname))){
- printf("ERROR : AddAssign V1.04e not installed\n");
- exit(NULL);
- }
-
- sendport=CreatePort(sendportname,0);
- sendmsg.cmsg_message.mn_Node.ln_Type=NT_MESSAGE;
- sendmsg.cmsg_message.mn_ReplyPort=sendport;
- sendmsg.cmsg_message.mn_Length=sizeof(struct commandmessage);
-
- StrUpper(argv[1]);
-
- if(STREQU(argv[1],"LIST")){
- sendmsg.cmsg_command="list";
- PutMsg(waitport,&sendmsg);
- waitmsg=WaitPort(sendport);
- waitmsg=GetMsg(sendport);
- malist=(struct List *)sendmsg.cmsg_assign;
-
- manode=malist->lh_Head;
-
- if(manode==(struct MoreAssign *)&malist->lh_Tail){
- printf("no entries found in internal assign list\n");
- }
- else{
- while((manode!=(struct MoreAssign *)&malist->lh_Tail)){
- printf(" %-10s assigned to %s\n",manode->ma_assignname,manode->ma_pathname);
- manode=manode->ma_node.ln_Succ;
- }
- }
-
- }
- else{
- if(!(checkassign(argv[1]))){
- printf("ERROR : %s is not assigned - use standard assign\n",argv[1]);
- closeall();
- }
-
- if(!(block=Lock(argv[2],SHARED_LOCK))){
- printf("ERROR : directory %s does not exist\n",argv[2]);
- closeall();
- }
- if(!(asslock=Lock(argv[1],SHARED_LOCK))){
- printf("ERROR : device %s does not exist\n",argv[1]);
- closeall();
- }
- if(!(PathName(block,path,256))){
- printf("ERROR : internal pathname error - pathname too long\n");
- closeall();
- }
- printf("assigning %s to %s\n",argv[1],path);
- sendmsg.cmsg_command="addassign";
- sendmsg.cmsg_assign=argv[1];
- sendmsg.cmsg_path=path;
- sendmsg.cmsg_lock=asslock;
- PutMsg(waitport,&sendmsg);
- waitmsg=WaitPort(sendport);
- waitmsg=GetMsg(sendport);
- }
-
-
- DeletePort(sendport);
- closeall();
- }
-