# include "../H/sound.h" # include "../H/sfext.h" #include _sfdcreat(_sfptr) register struct _sffile *_sfptr; { /* Create the actual SFD file for the structure passed The last opened file for output (WRITING) will be written in a file named by SFNUMFILE in the current directory */ FILE *sfnum; int tempfd; char file[MAXPATH],file2[MAXPATH]; char ccssname[MAXNUMSIZE + 2]; /* Char C followed by CCSS number in ascii */ struct passwd *getpwuid(); /* This routine is called from sflseek which has already locked the CCSS */ /* Check if there is a directory */ sprintf(file,"%s/%s",_Userdir,getpwuid(getuid())->pw_name); if(_sfcheckdir(file)) return(-1); /* Default user's name is a C followed by the first cylinder */ sprintf(ccssname,"C%d",*_sfptr->iosf.io_cylbase); /* First cylinder */ if(_sfptr->sfdesc.sf_name[0] == '\0') strcpy(_sfptr->sfdesc.sf_name,ccssname); if(_getusrname(file,_sfptr->sfdesc.sf_name) == NULL) return(-1); if(!access(file,0)) if(_sfdunlink(file)) return(-1); if((tempfd = creat(file,_sfptr->iosf.io_mode)) == -1) return(-1); _sfptr->iosf.io_mode = WRITE; /* Reinstate true mode */ if(write(tempfd,(char *) &_sfptr->sfdesc,sizeof(struct SFDESC)) != sizeof(struct SFDESC)) return(-1); close(tempfd); sprintf(file2,"%s/%d",_Masterdir,*_sfptr->iosf.io_cylbase); /* Sys name */ if(link(file,file2)) return(-1); fprintf(stderr,"\nSoundfile %s created.\n",_sfptr->sfdesc.sf_name); /* Put out current output file number. Sort of assumes only one output file */ if((sfnum = fopen(SFFILENUM,"w")) == NULL) fprintf(stderr,"Warning: Can't write to ./%s\n",SFFILENUM); else { fprintf(sfnum,"%d",*_sfptr->iosf.io_cylbase); fclose(sfnum); } return(0); /* All done */ }