/* AddAssign V1.04e (c) 1991 Alexander Rawass Alexander Rawass Wilhelminenstr. 44 6700 Ludwigshafen 15 Germany 0621/57 75 98 */ #include #include #include #include #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 [ ] | [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 [ ] | [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(); }