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 >
Wrap
C/C++ Source or Header
|
1992-04-27
|
3KB
|
161 lines
/*
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();
}