/***************************************************************************** Application ASH: mkdir.c (c) Pierre Adriaans 1994 ------------------------------------------------------------------------------ Fonction de creation d'un ss-rep *****************************************************************************/ #include "ash.h" extern AnswerBoxItem_t *InfoMsg; extern DirList_t *Current[NB_MAX_WINS]; extern InvZone_t InvZone[NB_MAX_WINS]; extern int AL,AfficheX,AfficheY; extern char DummyStr[DUMMYSTR_SIZE]; /***************************************************************************** CreateDir() ------------------------------------------------------------------------------ Fonction de creation de ss-rep. *****************************************************************************/ void CreateDir(void) { char Path[80]; Path[0] = 0; /* Saisir la cible */ if(InputBox(Path,PATH_LENGTH,FileOpNorm,FileOpInv," Create Directory ", "You want to create the directory",0,0,DOUBLE_FRAMED) != 0) return; if(Path[0] == 0) return; if(mkdir(Path,S_IREAD|S_IWRITE|S_IEXEC) == -1) { InitAnswerBoxItem(&InfoMsg); AddAnswerBoxItem(&InfoMsg,"ERROR: impossible to create the directory"); AddAnswerBoxItem(&InfoMsg,Path); switch(errno) { case ENOTDIR: case ENOENT: case ENOLINK: AddAnswerBoxItem(&InfoMsg,"Invalid directory specification."); break; case EMULTIHOP: AddAnswerBoxItem(&InfoMsg,"Multiple remote machines link."); break; case EACCES: AddAnswerBoxItem(&InfoMsg,"Permission denied."); break; case EEXIST: AddAnswerBoxItem(&InfoMsg,"The directory already exists."); break; case EROFS: AddAnswerBoxItem(&InfoMsg,"File system is read-only."); break; case EMLINK: AddAnswerBoxItem(&InfoMsg,"Maximum number of links exceeded."); break; case EIO: AddAnswerBoxItem(&InfoMsg,"An I/O error has occured."); break; default: sprintf(DummyStr,"Unknown reason (errno %d).",errno); AddAnswerBoxItem(&InfoMsg,DummyStr); } InfoBox(ErrorNorm,ErrorInv," Create Directory ",InfoMsg,1,0,DOUBLE_FRAMED); InitAnswerBoxItem(&InfoMsg); } else { /* Initialiser le fichier courant avec le nom du ss-rep, de facon a y placer la barre inverse */ free(Current[AL]->Info.Name); Current[AL]->Info.Name = (char *)malloc(strlen(Path) + 3); if(Current[AL]->Info.Name == (char *)NULL) raise(SIGME); strcpy(Current[AL]->Info.Name,PATH_SEPARATOR_STR); strcat(Current[AL]->Info.Name,Path); } InitWin(AL); PaintString(InvZone[AL].Lig,InvZone[AL].Col, InvZone[AL].Length,MainWinInv); /* Replacer le curseur a sa place */ GotoXY(AfficheY,AfficheX); fflush(stdout); }