Example #1
0
/*******************************************************************************
	Test if a folder exists
*******************************************************************************/
int _dexist(char *name)
{
	char	old_path[FILENAME_MAX];
	char	myname[FILENAME_MAX];
	int	old_drv;
	int	i,ok=FALSE;
	DTA	*old,dta;

	old=Fgetdta();
	old_drv=Dgetdrv();
	Dgetpath(old_path,1+old_drv);
	if (name[1]==':')
		Dsetdrv((int)name[1]-65);
	Fsetdta(&dta);

	strcpy(myname,name);
	i=(int)strlen(myname);
	if (myname[i-1]=='\\')
		strcat(myname,"*.*");
	else
		strcat(myname,"\\*.*");
	if (!Fsfirst(myname,FA_READONLY+FA_HIDDEN+FA_SYSTEM+FA_ARCHIVE+FA_SUBDIR))
		ok=TRUE;
	Dsetdrv(old_drv);
	Dsetpath(old_path);
	Fsetdta(old);
	return ok;
}
Example #2
0
mlx_extract()
{
	char filename[13],pathname[80];
	char *ext;
	int nblocks,block;
	register int i;
	long blockptr[MAXNBLOCKS+1];
	long addr[32],leng[32];	/* oversized */
	long end_record= idEND;
	GLOBRECORD *ptr;

	/* load multi-block file containing block to be extracted */
	Dsetdrv(mlt_drive); dsetpath(mlt_path);
	if (!readdatafile(MLXEXTTITL,mlxfile,mlxpath,MLX_EXT,0)) return;
	mlt_drive= Dgetdrv(); Dgetpath(mlt_path,mlt_drive+1);
	mlx_mem= tempmem;

	/* choose block from it */
	nblocks= scan_blocks(heap[mlx_mem].start,blockptr);
	if (!nblocks) return;	/* can't happen? */
	block= select_block(BLOCK2EXT,nblocks,blockptr);
	if ( (block<0) || (block>=nblocks) ) return;

	/* name of data file defaults to block comment */
	Dsetdrv(data_drive); dsetpath(data_path);
	ptr= (GLOBRECORD*)(blockptr[block]);
	copy_bytes(ptr->comment,filename,12L);
	filename[12]=0;
	ext=filename;
	for (i=0; i<9; i++) if (ext[i]=='.') break;
	if (i<9)
		ext+=(i+1);
	else
		ext= ALL_EXT;
	if (getfile(pathname,filename,ext,MLXXDATTITL)<=0) return;
	data_drive= Dgetdrv(); Dgetpath(data_path,data_drive+1);

	/* build file -- */
	i=0;

	/* -- header */
	addr[i]= (long)(&dataheader);
	leng[i++]= sizeof(dataheader);

	/* -- the selected block */
	addr[i]= blockptr[block];
	leng[i++]= blockptr[block+1] - blockptr[block] ;

	/* -- end record */
	addr[i]= (long)(&end_record);
	leng[i++]= 4;

	save_file(filename,pathname,i,addr,leng);

}	/* end mlx_extract() */
Example #3
0
void test010203(void)
{
    WORD res;
    BYTE ok;
    
    WORD drives = Drvmap();
    WORD dr2    = drives & (~drive);        // remove tested drive
    
    int drvExisting = -1;
    int drvNonexisting = -1;
    int i;
    
    for(i=15; i>= 0; i--) {
        if((dr2 & (1 << i)) != 0) {         // drive exists?
            drvExisting = i;
        }
        
        if((dr2 & (1 << i)) == 0) {         // drive doesn't exist?
            if(i == drive) {                // if it's not in dr2, but it's our drive, skip it
                continue;
            }
        
            drvNonexisting = i;         
        }
    }
    
    res = Dsetdrv(drvExisting);             // switch to existing drive
    ok  = drives == res;                    // OK when returns existing drives
    
    if(ok) {
        WORD drv = Dgetdrv();
        ok = drvExisting == drv;            // OK if drive changed
        if(!ok) {
            out_swsw("Was switching to ", drvExisting, ", Dgetdrv returned ", drv);
        }
    }

    out_tr_b(0x0102, "Dsetdrv to existing drive", ok);

    res = Dsetdrv(drvNonexisting);          // switch to non-existing drive
    ok  = drives == res;                    // OK when returns existing drives
    
    if(ok) {
        WORD drv = Dgetdrv();
        ok = drvNonexisting == drv;         // TOS 1.02: OK if drive change to non-existing anyway
        if(!ok) {
            out_swsw("Was switching to ", drvNonexisting, ", Dgetdrv returned ", drv);
        }
    }

    out_tr_b(0x0103, "Dsetdrv to non-existing drive", ok);
}
Example #4
0
void createTestFiles(void)
{
    Dsetdrv(drive);             // switch to selected drive
    Dsetpath("\\");
    (void) Dcreate("TESTDIR");
    Dsetpath("\\TESTDIR");

    int i, f;
    char numString[8];
    char fileName[16];
    for(i=0; i<25; i++) {
        byteToHex(i + 1, numString);
        
        strcpy(fileName, "FILE_");
        strcat(fileName, numString);
        f = Fcreate(fileName, 0);
        Fwrite(f, 7, fileName);
        Fclose(f);
        
        strcpy(fileName, "FILENAME.X");
        strcat(fileName, numString);
        f = Fcreate(fileName, 0);
        Fwrite(f, 12, fileName);
        Fclose(f);
        
        strcpy(fileName, "DIR_");
        strcat(fileName, numString);
        (void) Dcreate(fileName);
    }
}
Example #5
0
mlx_name()
{
	int nblocks,block;
	GLOBRECORD *blockptr[MAXNBLOCKS+1];
	long addr[32],leng[32];	/* oversized */

	/* load multi-block file containing block to be renamed */
	Dsetdrv(mlt_drive); dsetpath(mlt_path);
	if (!readdatafile(MLXNAMTITL,mlxfile,mlxpath,MLX_EXT,0)) return;
	mlt_drive= Dgetdrv(); Dgetpath(mlt_path,mlt_drive+1);
	mlx_mem= tempmem;

	/* choose block from it */
	nblocks= scan_blocks(heap[mlx_mem].start,blockptr);
	if (!nblocks) return;	/* can't happen? */
	block= select_block(BLOCK2NAM,nblocks,blockptr);
	if ( (block<0) || (block>=nblocks) ) return;

	/* edit the comment field in the selected block, and replace file
		without warning */
	if (_mlx_name(blockptr[block]->comment))
	{
		addr[0]= heap[mlx_mem].start;
		leng[0]= heap[mlx_mem].nbytes;
		save_file(mlxfile,mlxpath,-1,addr,leng);
	}

}	/* end mlx_name() */
Example #6
0
ex_loadtem()
{
#if TEMFLAG
	char filename[13],pathname[80];
	long load_file();

	/* overwrite changed template? */
	if (change_flag[temCHANGE])
		if (form_alert(1,CHNGETEM)==2) return;

	filename[0]=0;
	Dsetdrv(tem_drive); dsetpath(tem_path);
	tempmem= -1;
	if (getfile(pathname,filename,TE_EXT,TLDETITL)>0)
	{
		tem_drive=Dgetdrv(); Dgetpath(tem_path,tem_drive+1);
		if (load_file(pathname,filename))
		{
			if (load_tem(filename))
			{
				strcpy(temfile,filename);
			}
		}	/* end if file loaded successfully */
	}	/* end if ok from file selector */

	dealloc_mem(tempmem);

#endif
}	/* end ex_loadtem() */
Example #7
0
long x_setdrv(int drive)
{
#if USE_gemdos
	return gemdos(14, drive);
#else
	return Dsetdrv(drive);
#endif
}
Example #8
0
void test01(void)
{
    out_s("Dsetdrv and Dgetdrv");
    
    test0101();                 // switch to selected drive
    test010203();               // switch to existing and non-existing drive
    test0104();                 // switch to drive which is out of range (> 15)

    Dsetdrv(drive);             // back to selected drive
    out_s("");
}
Example #9
0
mlx_delete()
{
	int nblocks,block;
	register int i;
	long blockptr[MAXNBLOCKS+1];
	long addr[32],leng[32];	/* oversized */
	long end_record= idEND;

	/* load multi-block file containing block to be deleted */
	Dsetdrv(mlt_drive); dsetpath(mlt_path);
	if (!readdatafile(MLXDELTITL,mlxfile,mlxpath,MLX_EXT,0)) return;
	mlt_drive= Dgetdrv(); Dgetpath(mlt_path,mlt_drive+1);
	mlx_mem= tempmem;

	/* choose block from it */
	nblocks= scan_blocks(heap[mlx_mem].start,blockptr);
	if (!nblocks) return;	/* can't happen? */
	if (nblocks==1)
	{
		form_alert(1,BADMLXDEL);
		return;
	}
	block= select_block(BLOCK2DEL,nblocks,blockptr);
	if ( (block<0) || (block>=nblocks) ) return;

	/* build file -- */
	i=0;

	/* -- header */
	addr[i]= (long)(&dataheader);
	leng[i++]= sizeof(dataheader);

	/* -- blocks before the selected block */
	if (block>0)
	{
		addr[i]= blockptr[0];
		leng[i++]= blockptr[block] - blockptr[0] ;
	}

	/* -- blocks after the selected block */
	if (block<(nblocks-1))
	{
		addr[i]= blockptr[block+1];
		leng[i++]= blockptr[nblocks] - blockptr[block+1] ;
	}

	/* -- end record */
	addr[i]= (long)(&end_record);
	leng[i++]= 4;

	save_file(mlxfile,mlxpath,-i,addr,leng);	/* replace without warning */

}	/* end mlx_delete() */
Example #10
0
/*******************************************************************************
	Test if a file exists
*******************************************************************************/
int _fexist(char *name,DTA *res)
{
	char	old_path[FILENAME_MAX];
	int	old_drv;
	int	ok=FALSE;
	DTA	*old,dta;

	old=Fgetdta();
	old_drv=Dgetdrv();
	Dgetpath(old_path,1+old_drv);
	if (name[1]==':')
		Dsetdrv((int)name[1]-65);
	Fsetdta(&dta);

	if (!Fsfirst(name,FA_READONLY+FA_HIDDEN+FA_SYSTEM+FA_ARCHIVE+FA_SUBDIR))
		ok=TRUE;
	if (ok && res)
		memcpy((void *)res,(void *)&dta,sizeof(DTA));
	Dsetdrv(old_drv);
	Dsetpath(old_path);
	Fsetdta(old);
	return ok;
}
Example #11
0
static void setSpoolPath(void)
{
	if (spoolDir) {
		if (spoolDir[0] != '\0'
		&&  spoolDir[1] == ':') {	/* drive spec? */
			Dsetdrv(tolower(spoolDir[0]) - 'a');
		}
	
		if (Dsetpath(spoolDir) < 0) {
	        uiPrintf(uiH, uiPrERR, "set path|>%s<", spoolDir);
		}
	}


}	/* setSpoolPath */
Example #12
0
void test0101(void)
{
    WORD res;
    BYTE ok;
    
    WORD drives = Drvmap();

    res = Dsetdrv(drive);
    ok  = drives == res;        // OK if returning bitmap of drives
    
    if(ok) {
        WORD drv = Dgetdrv();
        ok = drive == drv;      // OK if drive changed
    }
    
    out_tr_b(0x0101, "Dsetdrv to selected drive", ok);
}
Example #13
0
void test0104(void)
{
    WORD res;
    BYTE ok;

    #define DRIVE_OUT_OF_RANGE  30
    
    WORD drives = Drvmap();
    
    res = Dsetdrv(DRIVE_OUT_OF_RANGE);      // switch to out of range drive 
    ok  = drives == res;                    // OK when returns existing drives
    
    if(ok) {
        WORD drv = Dgetdrv();
        ok = DRIVE_OUT_OF_RANGE == drv;     // OK if drive changed
        if(!ok) {
            out_swsw("Was switching to ", DRIVE_OUT_OF_RANGE, ", Dgetdrv returned ", drv);
        }
    }

    out_tr_b(0x0104, "Dsetdrv to out of range", ok);
}
Example #14
0
ex_paths()
{
#if DISKFLAG
	int done,mstate,edit_obj,exit_obj;
	register int i,temp;
#define NPATHS 7
	char *ptr[NPATHS];
	static int obj[NPATHS]= {
		PATHCNX,PATHMAC,PATHTEM,PATHLDAT,PATHRDAT,PATHMIDI,PATHMULT
	};
	static int *drive[NPATHS]= {
		&cnx_drive,&mac_drive,&tem_drive,
		&ldat_drive,&rdat_drive,&midi_drive,&mlt_drive
	};
	static char *path[NPATHS]= {
		cnx_path,mac_path,tem_path,
		ldat_path,rdat_path,midi_path,mlt_path
	};
	static int findobj[NPATHS]= {
		FINDCNX,FINDMAC,FINDTEM,FINDLDAT,FINDRDAT,FINDMIDI,FINDMULT
	};
	static char *title[NPATHS]= {
		FINDCNXMSG,FINDMACMSG,FINDTEMMSG,FINDLDATMSG,
		FINDRDATMSG,FINDMIDIMSG,FINDMULTMSG
	};
	static char *ext[NPATHS]= {
		CNXF_EXT, MAXC_EXT, TE_EXT, ALL_EXT, ALL_EXT, ALL_EXT, MLX_EXT
	};
	char filename[13],pathname[80];

	for (i=0; i<NPATHS; i++)
	{
		ptr[i]= pathaddr[obj[i]].ob_spec;
		ptr[i][0]= 'A' + *drive[i];
		ptr[i][1]= ':';
		strcpy(ptr[i]+2,path[i]);
	}
	/* draw dialog box, centered */
	putdial(pathaddr,-1,0);
	
	edit_obj= -1;
	done=0;
	do
	{
		waitmouse();	/* no mouse repeat */
		exit_obj= my_form_do(pathaddr,&edit_obj,&mstate,0,&dummy);
		switch (exit_obj)
		{
			case OKPATH:
			for (i=0; i<NPATHS; i++)
			{
				if (ptr[i][1]==':')
				{
					temp= ptr[i][0]-'A';
					if ((temp>=0)&&(temp<16)) *drive[i]=temp;
					strcpy(path[i],ptr[i]+2);
				}
				else
					strcpy(path[i],ptr[i]);
			}
			case CANPATH:		done=1; break;

			default:
			for (i=0; i<NPATHS; i++) if (exit_obj==findobj[i]) break;
			putdial(0L,0,exit_obj);
			Dsetdrv(ptr[i][0]-'A');
			if (ptr[i][1]==':')
				dsetpath(ptr[i]+2);
			else
				dsetpath(ptr[i]);
			filename[0]=0;
			if (getfile(pathname,filename,ext[i],title[i]))
			{
				ptr[i][0]= (temp=Dgetdrv()) + 'A';
				ptr[i][1]= ':';
				Dgetpath(ptr[i]+2,temp+1);
				if (!ptr[i][2])
				{
					ptr[i][2]='\\';
					ptr[i][3]=0;
				}
			}
			putdial(pathaddr,-1,0);

		}	/* end switch */
	}
	while (!done);
	putdial(0L,0,exit_obj);

#endif
}  /* end ex_paths() */
Example #15
0
int
chkdf( char *str, int flag )
{
	REG int 	ret;
	int	first,change;
	int		ret1;

	first = TRUE;
	change = f_rename;
 
	if ( flag == CPFILE )
	{
	  if ( f_rename )
	    goto cc_3;
	    
	  if ( write_save )	/* overwrite existing file	*/
	    return( OK );

cc_1:	  if ( (ret = (WORD)Fopen(fixdst, 0)) >= 0 )	
	  {			 		/* file exist */
	    Fclose( ret );
cc_3:	    ret = edname( str, CPFILE, change );
	    if ( ret == CHECK ) 
	    {
	      if ( f_rename )		/* do rename	*/
	      {
/*	        first = FALSE;	*/
		change = FALSE;
		goto cc_1;
	      } 	
	    }

	    return( ret );	
	  }
	}
	else
	{
	  if ( f_rename )	/* if rename then show box first	*/
	    goto cc_5;
		    
cc_6:	  Dsetdrv(*fixdst - 'A');

	  if ( !( ret = (WORD)Dsetpath( fixdst + 2 ) ) )	/* direcory exist */
	  {
cc_5:	    ret1 = edname( str, CPDIR, change ); 	/* update name conflict box */
	
	    change = FALSE;
	    
	    if ( ( ret1 == CHECK ) ||  			/* user enter new name	*/
	    	 ( ( ret1 == COPY ) && f_rename && first ) )
	    {
	      first = FALSE;
	      goto cc_6;
	    }	

	    return( ret1 );	
	  }
	}

	/* 0xFFDE: path not found. 0xFFDF: file not found. */

	return (((ret == EFILNF)||(ret == EPTHNF))? OK:FALSE);	
}
Example #16
0
/*******************************************************************************
	Multi FileSelect

	FileSelect �volu� permettant de traiter un ensemble de fichiers en une
	seule passe.
	S�lection des fichiers avec Selectric; ou � l'aide de joker.
	On appelle ensuite en boucle la fonction (*call) avec comme unique
	param�tre le nom complet du fichier.
	De plus; le joker # permet de remplacer un num�ro de fichier. Par exemple
	le masque TOTO####.TXT cherchera le fichier TOTO0001.TXT puis les suivants.
*******************************************************************************/
int _multifsel(char *pfname,char *pname,char *fname,char *ext,char *title,int cdecl (*call)(char *name))
{
	DTA	*dta;
	long	k,n,m;
	char	path[FILENAME_MAX];
	char	mask[20];
	char	*p;
	int	drvold=-1;
	int	is_slct_da,num=0;
	int	i,j=1,Break;

	p=glb.div.buf;
	is_slct_da=_slctMoreNames(1,512,glb.div.buf);
	i=_fselect(pfname,pname,fname,ext,title);
	if (i)
	{
		Break=FALSE;
		if (is_slct_da)
		{
			while (*p && j && !Break)
			{
				num+=1;
				strcpy(path,pname);
				fname[0]=0;
				while (*p && *p!=' ')
					strncat(fname,p++,1L);
				strcat(path,"\\");
				strcat(path,fname);
				p++;
				if (call)
					j=(*call)(path);
			}
		}
		if (num==0)
		{
			if (pname[1]==':')
			{
				drvold=Dgetdrv();
				Dsetdrv((int)pfname[0]-65);
			}

			p=strchr(pfname,'#');
			if (p)		/*	Gestion du masque #	*/
			{
				n=0L;
				while (*p++=='#')
					n+=1L;

				p=strchr(pfname,'#');					/*	pfname=C:\TOTO\TITI.EXT\TATA##O.JPG"	n=2	*/
				*p='\0';
				strcpy(path,pfname);						/*	path=C:\TOTO\TITI.EXT\TATA							*/
				sprintf(mask,"%%s%%0%lili%%s",n);	/*	mask='%s%02li%s'										*/
				m=1L;
				for (k=0;k<n;k++)
					m*=10L;
				for (k=0;k<m;k++)
				{
					sprintf(path,mask,pfname,k,&p[n]);
					if (!_fexist(path,NULL))
						k=m;
					else if (call)
						j=(*call)(path);
					if (!j)
						k=m;
				}
			}
			else
			if (!Fsfirst(pfname,FA_READONLY+FA_HIDDEN+FA_SYSTEM+FA_ARCHIVE))
			{
				dta=Fgetdta();
				do
				{
					strcpy(path,pname);
					strcat(path,"\\");
					strcat(path,dta->d_fname);
					if (call)
						j=(*call)(path);
				}	while (!Fsnext() && j && !Break);
			}
			if (drvold!=-1)
				Dsetdrv(drvold);
		}
		Break=FALSE;
	}
	return num;
}
Example #17
0
mlx_replace()
{
	char filename[13],pathname[80];
	int mlxnblocks,mlxblock;
	int datnblocks,datblock;
	long mlxblockptr[MAXNBLOCKS+1];
	long datblockptr[MAXNBLOCKS+1];
	register int i;
	long addr[32],leng[32];	/* oversized */
	long end_record= idEND;

	/* load data file containing block to be added */
	Dsetdrv(data_drive); dsetpath(data_path);
	filename[0]=0;
	if (!readdatafile(MLXRDATTITL,filename,pathname,ALL_EXT,0)) return;
	data_drive= Dgetdrv(); Dgetpath(data_path,data_drive+1);
	data_mem= tempmem;

	/* choose block from it */
	datnblocks= scan_blocks(heap[data_mem].start,datblockptr);
	if (!datnblocks) return;	/* can't happen? */
	datblock= select_block(BLOCK2REP,datnblocks,datblockptr);
	if ( (datblock<0) || (datblock>=datnblocks) ) return;

	/* load multi-block file to receive block */
	Dsetdrv(mlt_drive); dsetpath(mlt_path);
	if (!readdatafile(MLXREPTITL,mlxfile,mlxpath,MLX_EXT,0)) return;
	mlt_drive= Dgetdrv(); Dgetpath(mlt_path,mlt_drive+1);
	mlx_mem= tempmem;

	/* choose block from it */
	mlxnblocks= scan_blocks(heap[mlx_mem].start,mlxblockptr);
	if (!mlxnblocks) return;	/* can't happen? */
	mlxblock= select_block(BLOCK2BRP,mlxnblocks,mlxblockptr);
	if ( (mlxblock<0) || (mlxblock>=mlxnblocks) ) return;

	/* because data_mem may have moved */
	scan_blocks(heap[data_mem].start,datblockptr);

	/* build file -- */
	i=0;

	/* -- header */
	addr[i]= (long)(&dataheader);
	leng[i++]= sizeof(dataheader);

	/* -- blocks before the selected block */
	if (mlxblock>0)
	{
		addr[i]= mlxblockptr[0];
		leng[i++]= mlxblockptr[mlxblock] - mlxblockptr[0] ;
	}

	/* -- new block */
	addr[i]= datblockptr[datblock];
	leng[i++]= datblockptr[datblock+1] - datblockptr[datblock] ;

	/* -- blocks after the selected block */
	if (mlxblock<(mlxnblocks-1))
	{
		addr[i]= mlxblockptr[mlxblock+1];
		leng[i++]= mlxblockptr[mlxnblocks] - mlxblockptr[mlxblock+1] ;
	}

	/* -- end record */
	addr[i]= (long)(&end_record);
	leng[i++]= 4;

	save_file(mlxfile,mlxpath,-i,addr,leng);	/* replace without warning */

}	/* end mlx_replace() */
Example #18
0
/*******************************************************************************
	BALAYAGE D'UN DOSSIER
*******************************************************************************/
static int Balaie_Path(char *directory,int wx,int wy,int ww,int wh)
{
	char		old_path[FILENAME_MAX];
	int		old_drv;
	char		pfn[FILENAME_MAX];
	DTA		*mydta;
	int		i,Fin=0;
	int		cnt,pos;
/*	long		count;*/

	t2=0;
	old_drv=Dgetdrv();
	Dgetpath(old_path,1+old_drv);
	mydta=Fgetdta();
	if (directory[1]==':')
		Dsetdrv((int)directory[1]-65);

	strcpy(pfn,directory);
	strcat(pfn,"\\*.*");
	if (glb.opt.sl_rec)
		i=Fsfirst(pfn,FA_READONLY|FA_SUBDIR|FA_ARCHIVE);
	else
		i=Fsfirst(pfn,FA_READONLY|FA_ARCHIVE);
	pos=0;
loop1:
	cnt=0;
	while (!i)
	{
		cnt+=1;
		if (mydta->d_fname[0]!='.' && cnt>pos)
		{
			strcpy(pfn,directory);
			strcat(pfn,"\\");
			strcat(pfn,mydta->d_fname);
			if (mydta->d_attrib&FA_SUBDIR)
			{
				pos=cnt;
				if (Balaie_Path(pfn,wx,wy,ww,wh))
					return TRUE;
				strcpy(pfn,directory);
				strcat(pfn,"\\*.*");
				if (glb.opt.sl_rec)
					i=Fsfirst(pfn,FA_READONLY|FA_SUBDIR|FA_ARCHIVE);
				else
					i=Fsfirst(pfn,FA_READONLY|FA_ARCHIVE);
				goto loop1;
			}
		}
		if (Kbshift(-1)!=shift)
			return TRUE;
		i=Fsnext();
/*
		if (i!=0)
			{
				time(&t1);
				if(glb.opt.sl_pause)
				{
					count=1000L*max( 0 , (long)glb.opt.sl_ptime - (t1-t2) );
					evnt_timer( (int)(count&0xFFFFUL),(int)(count>>16) );
				}
				else
					count=0;
			}
*/
	}


	strcpy(pfn,directory);
	strcat(pfn,"\\");
	strcat(pfn,glb.opt.sl_name);

	if (glb.opt.sl_rec)
		i=Fsfirst(pfn,FA_READONLY|FA_SUBDIR|FA_ARCHIVE);
	else
		i=Fsfirst(pfn,FA_READONLY|FA_ARCHIVE);
	pos=0;
	cnt=0;
	while (!i)
	{
		cnt+=1;
		if (mydta->d_fname[0]!='.' && cnt>pos)
		{
			strcpy(pfn,directory);
			strcat(pfn,"\\");
			strcat(pfn,mydta->d_fname);
			if (!(mydta->d_attrib&FA_SUBDIR))
				affiche(pfn,wx,wy,ww,wh);
		}
		if (Kbshift(-1)!=shift)
			return TRUE;
		i=Fsnext();
/*
		if (i!=0)
			{
				time(&t1);
				if(glb.opt.sl_pause)
					count=1000L*max( 0 , (long)glb.opt.sl_ptime - (t1-t2) );
				else
					count=0;
				evnt_timer( (int)(count&0xFFFFUL),(int)(count>>16) );
			}
*/
	}


	Dsetdrv(old_drv);
	Dsetpath(old_path);
	return Fin;
}
Example #19
0
int analyse_parameter(int argc,char *argv[],void **search_pfade)
{
	int zahl_der_pfade;
	int i,ARGV;
	char *arg;
	struct pfadkette *help;

	ARGV=0;
	if(getenv("ARGV"))
		ARGV=1;

	for(i=0;i<argc-1-ARGV;i++)
	{
		if(argv[i+1-ARGV][0]=='\'')
		{
			int von,nach;

			von=1;
			nach=0;
			do {
				if(argv[i+1-ARGV][von]=='\'')
					von++;

				argv[i+1-ARGV][nach]=argv[i+1-ARGV][von];
				nach++;
			} while(argv[i+1-ARGV][von++]);
		}
	}

	zahl_der_pfade=0;
	for(i=0;i<argc-1-ARGV;i++)
	{
		arg=argv[i+1-ARGV];

		if(arg[0]=='-')
		{
			if(arg[1]=='D')
			{
				int i;

				i=2;
				while(arg[i]!='\0')
				{
					zahl_der_pfade++;
					i++;
				}
			}
			else if(arg[1]=='P')
			{
				zahl_der_pfade++;
			}
		}
		else
		{
			zahl_der_pfade++;
		}
	}

	if(zahl_der_pfade==0)
	{
		int j;
		char *dm;
		char lwks[]="_______________________";

		dm=getenv("DRIVEMAP");
		if(!dm || !strlen(dm))
		{
			long lwk;

			dm=lwks;

			lwk=Dsetdrv(Dgetdrv());

			if(lwk & 0x03effffcl)	/* Gibt es ein Laufwerk au�er a,b und u? */
				lwk&=0x03effffcl;	/* ... dann a,b und u ausblenden */

			j=0;
			i=0;
			do {
				if(lwk & 1)
				{
					lwks[j++]=i+'A';
				}
				i++;
				lwk/=2;
			} while(lwk);
			lwks[j]='\0';
		}

		zahl_der_pfade=(int) strlen(dm);

		help=(struct pfadkette *)search_pfade;
		help->next=NULL;

		for(i=0;i<zahl_der_pfade;i++)
		{
			help->next=malloc(sizeof(struct pfadkette)+3);
			if(help->next)
			{
				help=help->next;

				help->next=NULL;
				help->selected=0;
				help->pfad[0]=dm[i];
				help->pfad[1]=':';
				help->pfad[2]='\\';
				help->pfad[3]='\0';
			}
			else
			{
				free_pfade(*search_pfade);
				return -1;
			}
		}

		return zahl_der_pfade;
	}

	help=(struct pfadkette *)search_pfade;
	help->next=NULL;

	zahl_der_pfade=0;
	for(i=0;i<argc-1-ARGV;i++)
	{
		arg=argv[i+1-ARGV];

		if(arg[0]=='-')
		{
			if(arg[1]=='D')
			{
				int j;

				j=2;
				while(arg[j]!='\0')
				{
					help->next=malloc(sizeof(struct pfadkette)+3);
					if(help->next)
					{
						help=help->next;

						help->next=NULL;
						help->selected=0;
						help->pfad[0]=arg[j];
						help->pfad[1]=':';
						help->pfad[2]='\\';
						help->pfad[3]='\0';
						j++;
						zahl_der_pfade++;
					}
					else
					{
						free_pfade(*search_pfade);
						return -1;
					}
				}
			}
			else if(arg[1]=='P')
			{
					/* Struct + String + ggf. '\\' */
				help->next=malloc(sizeof(struct pfadkette)+
							strlen(&arg[2])+
							(arg[strlen(arg)-1]!='\\'));
				if(help->next)
				{
					help=help->next;

					help->next=NULL;
					help->selected=0;

					strcpy(help->pfad,&arg[2]);
					if(help->pfad[strlen(help->pfad)-1]!='\\')
						strcat(help->pfad,"\\");

					zahl_der_pfade++;
				}
				else
				{
					free_pfade(*search_pfade);
					return -1;
				}
			}
		}
		else
		{
				/* Struct + String + ggf. '\\' */
			help->next=malloc(sizeof(struct pfadkette)+
						strlen(arg)+
						(arg[strlen(arg)-1]!='\\'));
			if(help->next)
			{
				help=help->next;

				help->next=NULL;
				help->selected=0;

				strcpy(help->pfad,arg);
				if(help->pfad[strlen(help->pfad)-1]!='\\')
				{ /* Unter Umst�nden wurde eine Datei �bergeben */
					long j;

						/* Hinten ein '\\' anh�ngen */
					strcat(help->pfad,"\\");

					for(j=strlen(help->pfad)-2;j>=0;j--)
					{
						if(help->pfad[j]=='\\')
						{
							help->pfad[j+1]='\0';
							j=-1;
						}
					}
				}

				zahl_der_pfade++;
			}
			else
			{
				free_pfade(*search_pfade);
				return -1;
			}
		}
	}

	/* doppelte Pfade entfernen */
	zahl_der_pfade-=remove_double_paths(&suji.search_pfade);

	return zahl_der_pfade;
}
Example #20
0
mlx_add()
{
	long blockptr[MAXNBLOCKS+1];
	char filename[13],pathname[80];
	int block,nblocks,create_it;
	register int i;
	long addr[32],leng[32];	/* oversized */
	long end_record= idEND;

	/* load data file containing block to be added */
	Dsetdrv(data_drive); dsetpath(data_path);
	filename[0]=0;
	if (!readdatafile(MLXDATTITL,filename,pathname,ALL_EXT,0)) return;
	data_drive= Dgetdrv(); Dgetpath(data_path,data_drive+1);
	data_mem= tempmem;

	/* choose block from it */
	nblocks= scan_blocks(heap[data_mem].start,blockptr);
	if (!nblocks) return;	/* can't happen? */
	block= select_block(BLOCK2ADD,nblocks,blockptr);
	if ( (block<0) || (block>=nblocks) ) return;

	/* load multi-block file to receive block */
	Dsetdrv(mlt_drive); dsetpath(mlt_path);
	create_it= readdatafile(MLXADDTITL,mlxfile,mlxpath,MLX_EXT,1);
	if (!create_it) return;
	if (create_it<0)
	{
		if (form_alert(1,CHEKCREMLX)!=1) return;
		create_it=1;
	}
	else
		create_it=0;
	mlt_drive= Dgetdrv(); Dgetpath(mlt_path,mlt_drive+1);
	mlx_mem= tempmem;

	/* because data_mem may have moved */
	scan_blocks(heap[data_mem].start,blockptr);

	/* build file -- */
	i=0;

	/* -- header */
	addr[i]= (long)(&dataheader);
	leng[i++]= sizeof(dataheader);

	/* -- if file already exists, chop header off start, end_record off end */
	if (!create_it)
	{
		addr[i]= heap[mlx_mem].start + sizeof(dataheader);
		leng[i++]= heap[mlx_mem].nbytes - 4 - sizeof(dataheader);
	}

	/* -- the new block */
	addr[i]= blockptr[block];
	leng[i++]= blockptr[block+1] - blockptr[block];

	/* -- end_record */
	addr[i]= (long)(&end_record);
	leng[i++]= 4;

	save_file(mlxfile,mlxpath,-i,addr,leng); /* replace without warning */

}	/* end mlx_add() */