Exemple #1
0
int  SDL_SYS_CDInit(void)
{
	static char *checklist[] = {
#if defined(__OPENBSD__)
		"?0 cd?c", "cdrom", NULL
#elif defined(__NETBSD__)
		"?0 cd?d", "?0 cd?c", "cdrom", NULL
#else
		"?0 cd?c", "?0 acd?c", "cdrom", NULL
#endif
	};
	char *SDLcdrom;
	int i, j, exists;
	char drive[32];
	struct stat stbuf;

	/* Fill in our driver capabilities */
	SDL_CDcaps.Name = SDL_SYS_CDName;
	SDL_CDcaps.Open = SDL_SYS_CDOpen;
	SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
	SDL_CDcaps.Status = SDL_SYS_CDStatus;
	SDL_CDcaps.Play = SDL_SYS_CDPlay;
	SDL_CDcaps.Pause = SDL_SYS_CDPause;
	SDL_CDcaps.Resume = SDL_SYS_CDResume;
	SDL_CDcaps.Stop = SDL_SYS_CDStop;
	SDL_CDcaps.Eject = SDL_SYS_CDEject;
	SDL_CDcaps.Close = SDL_SYS_CDClose;

	/* Look in the environment for our CD-ROM drive list */
	SDLcdrom = SDL_getenv("SDL_CDROM");	/* ':' separated list of devices */
	if ( SDLcdrom != NULL ) {
		char *cdpath, *delim;
		size_t len = SDL_strlen(SDLcdrom)+1;
		cdpath = SDL_stack_alloc(char, len);
		if ( cdpath != NULL ) {
			SDL_strlcpy(cdpath, SDLcdrom, len);
			SDLcdrom = cdpath;
			do {
				delim = SDL_strchr(SDLcdrom, ':');
				if ( delim ) {
					*delim++ = '\0';
				}
				if ( CheckDrive(SDLcdrom, &stbuf) > 0 ) {
					AddDrive(SDLcdrom, &stbuf);
				}
				if ( delim ) {
					SDLcdrom = delim;
				} else {
					SDLcdrom = NULL;
				}
			} while ( SDLcdrom );
			SDL_stack_free(cdpath);
		}

		/* If we found our drives, there's nothing left to do */
		if ( SDL_numcds > 0 ) {
			return(0);
		}
	}
int  SDL_SYS_CDInit(void)
{
    struct {
	char *dir;
	char *name;
    } checklist[] = {
	{"/dev/rdisk", "cdrom"},
	{"/dev", "rrz"},
	{NULL, NULL}};
    char drive[32];
    char *SDLcdrom;
    int i, j, exists;
    struct stat stbuf;

    
    SDL_CDcaps.Name   = SDL_SYS_CDName;
    SDL_CDcaps.Open   = SDL_SYS_CDOpen;
    SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
    SDL_CDcaps.Status = SDL_SYS_CDStatus;
    SDL_CDcaps.Play   = SDL_SYS_CDPlay;
    SDL_CDcaps.Pause  = SDL_SYS_CDPause;
    SDL_CDcaps.Resume = SDL_SYS_CDResume;
    SDL_CDcaps.Stop   = SDL_SYS_CDStop;
    SDL_CDcaps.Eject  = SDL_SYS_CDEject;
    SDL_CDcaps.Close  = SDL_SYS_CDClose;


    
    SDLcdrom = SDL_getenv("SDL_CDROM");	
    if ( SDLcdrom != NULL ) {
	char *cdpath, *delim;
	size_t len = SDL_strlen(SDLcdrom)+1;
	cdpath = SDL_stack_alloc(char, len);
	if ( cdpath != NULL ) {
	    SDL_strlcpy(cdpath, SDLcdrom, len);
	    SDLcdrom = cdpath;
	    do {
		delim = SDL_strchr(SDLcdrom, ':');
		if ( delim ) {
		    *delim++ = '\0';
		}
		if ( CheckDrive(SDLcdrom, &stbuf) > 0 ) {
		    AddDrive(SDLcdrom, &stbuf);
		}
		if ( delim ) {
		    SDLcdrom = delim;
		} else {
		    SDLcdrom = NULL;
		}
	    } while ( SDLcdrom );
	    SDL_stack_free(cdpath);
	}

	
	if ( SDL_numcds > 0 ) {
	    return(0);
	}
    }
Exemple #3
0
int  SDL_SYS_CDInit(void)
{
	char *SDLcdrom;
	struct stat stbuf;

	/* Fill in our driver capabilities */
	SDL_CDcaps.Name = SDL_SYS_CDName;
	SDL_CDcaps.Open = SDL_SYS_CDOpen;
	SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
	SDL_CDcaps.Status = SDL_SYS_CDStatus;
	SDL_CDcaps.Play = SDL_SYS_CDPlay;
	SDL_CDcaps.Pause = SDL_SYS_CDPause;
	SDL_CDcaps.Resume = SDL_SYS_CDResume;
	SDL_CDcaps.Stop = SDL_SYS_CDStop;
	SDL_CDcaps.Eject = SDL_SYS_CDEject;
	SDL_CDcaps.Close = SDL_SYS_CDClose;

	/* Look in the environment for our CD-ROM drive list */
	SDLcdrom = getenv("SDL_CDROM");	/* ':' separated list of devices */
	if ( SDLcdrom != NULL ) {
		char *cdpath, *delim;
		cdpath = malloc(strlen(SDLcdrom)+1);
		if ( cdpath != NULL ) {
			strcpy(cdpath, SDLcdrom);
			SDLcdrom = cdpath;
			do {
				delim = strchr(SDLcdrom, ':');
				if ( delim ) {
					*delim++ = '\0';
				}
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking CD-ROM drive from SDL_CDROM: %s\n", SDLcdrom);
#endif
				if ( CheckDrive(SDLcdrom, &stbuf) > 0 ) {
					AddDrive(SDLcdrom, &stbuf);
				}
				if ( delim ) {
					SDLcdrom = delim;
				} else {
					SDLcdrom = NULL;
				}
			} while ( SDLcdrom );
			free(cdpath);
		}

		/* If we found our drives, there's nothing left to do */
		if ( SDL_numcds > 0 ) {
			return(0);
		}
	}

	CheckMounts();
	CheckNonmounts();

	return 0;
}
Exemple #4
0
static void CheckMounts(const char *mtab)
{
	FILE *mntfp;
	struct mntent *mntent;
	struct stat stbuf;

	mntfp = setmntent(mtab, "r");
	if ( mntfp != NULL ) {
		char *tmp, mnt_type[32], mnt_dev[1024];

		while ( (mntent=getmntent(mntfp)) != NULL ) {
			/* Warning, possible buffer overflow.. */
			strcpy(mnt_type, mntent->mnt_type);
			strcpy(mnt_dev, mntent->mnt_fsname);

			/* Handle "supermount" filesystem mounts */
			if ( strcmp(mnt_type, MNTTYPE_SUPER) == 0 ) {
				tmp = strstr(mntent->mnt_opts, "fs=");
				if ( tmp ) {
					strcpy(mnt_type, tmp+strlen("fs="));
					tmp = strchr(mnt_type, ',');
					if ( tmp ) {
						*tmp = '\0';
					}
				}
				tmp = strstr(mntent->mnt_opts, "dev=");
				if ( tmp ) {
					strcpy(mnt_dev, tmp+strlen("dev="));
					tmp = strchr(mnt_dev, ',');
					if ( tmp ) {
						*tmp = '\0';
					}
				}
			}
			if ( strcmp(mnt_type, MNTTYPE_CDROM) == 0 ) {
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking mount path from %s: %s mounted on %s of %s\n",
	mtab, mnt_dev, mntent->mnt_dir, mnt_type);
#endif
				if (CheckDrive(mnt_dev, mnt_type, &stbuf) > 0) {
					AddDrive(mnt_dev, &stbuf);
				}
			}
		}
		endmntent(mntfp);
	}
}
	void SetWin32Handler(HINSTANCE hInstance)
	{
		static bool called = false;
		if (called)
			return;
		called = true;

		s_win32Displayer.SetInstance(hInstance);

		InfoProviders::Win32ThreadIdInfoProvider::SetMainThreadId(GetCurrentThreadId());

		AddInfoProvider(&s_lastErrorInfoProvider);
		AddHook(&s_lastErrorHook);
		AddInfoProvider(&s_threadIdInfoProvider);
		AddInfoProvider(&s_timeInfoProvider);
		AddInfoProvider(&s_processIdInfoProvider);
		AddInfoProvider(&s_OSVersionInfoProvider);
		AddInfoProvider(&s_processorInfoProvider);
		AddInfoProvider(&s_currentDirectoryInfoProvider);
		AddInfoProvider(&s_userNameInfoProvider);
		AddInfoProvider(&s_computerNameInfoProvider);
		AddInfoProvider(&s_totalMemoryInfoProvider);
		AddInfoProvider(&s_freeMemoryInfoProvider);

		// Add a Win32DiskInfoProvider and Win32FreeDiskSpaceInfoProvider
		// for every drive.
		for (char drive='a'; drive<='z'; ++drive)
		{
			if (UseDrive(drive))
				CheckDrive(drive);
		}

		// this loop supposes that the number of elements in
		// s_diskInfoProviders and s_freeDiskSpaceInfoProviders
		// are the same -  adjust if this would no longer be the case!
		for (size_t idx=0; idx<s_diskInfoProviders.size(); ++idx)
		{
			AddInfoProvider(&s_diskInfoProviders[idx]);
			AddInfoProvider(&s_freeDiskSpaceInfoProviders[idx]);
		}

		// add logger after infoproviders, so the information in them
		// is logged to it
		AddLogger(&s_win32Trace);
	}
Exemple #6
0
static void SetDynamic( gui_window *gui, vhandle var_handle, bool *drive_checked )
/*******************************************************************************/
{
    char        buff[256];
    const char  *p;

    p = VarGetStrVal( var_handle );
    if( !*drive_checked ) {
        while( *p ) {
            if( *p == '%' ) {
                if( strnicmp( p, "%DriveFree", 10 ) == 0 ) {
                    CheckDrive( FALSE );
                    *drive_checked = TRUE;
                }
            }
            ++p;
        }
    }
    ReplaceVars( buff, VarGetStrVal( var_handle ) );
    AddInstallName( buff, FALSE );
    GUISetText( gui, VarGetId( var_handle ), buff );
}
Exemple #7
0
void MainScreen(char *InstallName) {
   char fromdrive[2], todrive[3], tmp1[3], topath[9], tmp[9], drive[2];
   EditClass EditToDrive(WINDOW_LEFT+26,WINDOW_TOP+3,1, DEF_DRIVE);
   EditClass EditPath(WINDOW_LEFT+32,WINDOW_TOP+4,8, DEF_DIRECTORY);
   char ok;

   sprintf(fromdrive, "%c", getdisk()+'A');
   strcpy(todrive, "C");
   strcpy(tmp, "\\EDIR");
   _setcursortype(_NORMALCURSOR);
   putxy(WINDOW_LEFT+3,WINDOW_TOP+2,0,STANDARD,"Installing from drive %c:", fromdrive[0]);
   putxy(WINDOW_LEFT+3,WINDOW_TOP+3,0,STANDARD,"Install to what drive?  :");
   putxy(WINDOW_LEFT+3,WINDOW_TOP+4,0,STANDARD,"Install to what directory?  :", topath);
   EditToDrive.Display();
   EditPath.Display();
   putxy(WINDOW_LEFT+30, WINDOW_TOP+4, 0, STANDARD, "%c", toupper(todrive[0]));
   strcpy(todrive, EditToDrive.GetInput());
   putxy(WINDOW_LEFT+30, WINDOW_TOP+4, 0, STANDARD, "%c", toupper(todrive[0]));
   strcpy(tmp, EditPath.GetInput());
   descr(NULL);
   sprintf(topath, "%c:%s", todrive[0], tmp);
   putxy(WINDOW_LEFT+3,WINDOW_TOP+5,0,STANDARD,"Is this ok (Y/N/Q)? ");
   ok = (int) tolower((char) getch());
   if(ok == 121) {
      if(CheckDrive(todrive[0], "Invalid disk drive to copy files to") == 1) {
	 _setcursortype(_NOCURSOR);
	 putxy(WINDOW_LEFT+3,WINDOW_TOP+5,0,STANDARD,"Please wait...installing files...");
	 sprintf(tmp1, "%c:", fromdrive[0]);
	 docopy(tmp1, topath, InstallName);
	 getch();
      }
      else MainScreen(InstallName);
   }
   else if(ok == 113);
   else {
      putxy(WINDOW_LEFT+3,WINDOW_TOP+5,0,STANDARD,"%s", space(20));
      MainScreen(InstallName);
   }
}
Exemple #8
0
extern bool DoMainLoop( dlg_state * state )
/*****************************************/
{
    const char          *diag_list[MAX_DIAGS + 1];
    const char          *diags;
    const char          *dstdir;
    int                 dstlen;
    bool                got_disk_sizes = FALSE;
    int                 i;
    char                newdst[_MAX_PATH];
    char                *next;
    bool                ret = FALSE;

    SetupTitle();

    // display initial dialog
    diags = GetVariableStrVal( "DialogOrder" );
    if( stricmp( diags, "" ) == 0 ) {
        diags = "Welcome";
    }
    i = 0;
    for( ;; ) {
        diag_list[i] = diags;
        next = strchr( diags, ',' );
        if( next == NULL ) break;
        *next = '\0';
        diags = next + 1;
        ++i;
    }
    diag_list[i + 1] = NULL;
    /* process installation dialogs */

    i = 0;
    for( ;; ) {
        if( i < 0 ) break;
        if( diag_list[i] == NULL ) {
            if( GetVariableIntVal( "DoCopyFiles" ) == 1 ) {
                if( !CheckDrive( TRUE ) ) {
                    i = 0;
                }
            }
            if( GetVariableByName( "SetupPath" ) != NO_VAR ) {
                ret = TRUE;
                break;
            }
            if( diag_list[i] == NULL ) {
                    StatusShow( TRUE );
                    ret = SetupOperations();
                    StatusShow( FALSE );
                    if( ret ) DoDialog( "Finished" );
                    break;
            }
        }
        if( stricmp( diag_list[i], "GetDiskSizesHere" ) == 0 ) {
            if( *state == DLG_NEXT ) {

                dstdir = GetVariableStrVal( "DstDir" );
                dstlen = strlen( dstdir );
                if( dstlen != 0 &&
                    (dstdir[dstlen - 1] == '\\' || dstdir[dstlen - 1] == '/') ) {
                    strcpy( newdst, dstdir );
                    if( dstlen == 3 && dstdir[1] == ':' ) {
                        newdst[dstlen] = '.';
                        newdst[dstlen + 1] = '\0';
                    } else {
                        newdst[dstlen - 1] = '\0';
                    }
                    SetVariableByName( "DstDir", newdst );
                }
                SimSetNeedGetDiskSizes();
                ResetDiskInfo();
                got_disk_sizes = TRUE;

            }
        } else {
            *state = DoDialog( diag_list[i] );
            GUIWndDirty( NULL );
            StatusCancelled();
        }
        if( *state == DLG_CAN ) {
            if( MsgBox( NULL, "IDS_QUERYABORT", GUI_YES_NO ) == GUI_RET_YES ) {
                CancelSetup = TRUE;
                break;
            }
        } else if( *state == DLG_DONE ) {
            CancelSetup = TRUE;
            break;
        }
        if( got_disk_sizes ) {
            if( !CheckDrive( FALSE ) ) {
                break;
            }
        }
        if( *state == DLG_SAME ) {
            /* nothing */
        } else if( *state == DLG_NEXT || *state == DLG_SKIP ) {
            if( SkipDialogs ) {
                ++i;
            } else {
                for( ;; ) {
                    ++i;
                    if( diag_list[i] == NULL ) break;
                    if( CheckDialog( diag_list[i] ) ) break;
                }
            }
        } else if( *state == DLG_PREV ) {
            for( ;; ) {
                --i;
                if( i < 0 ) break;
                if( CheckDialog( diag_list[i] ) ) break;
            }
        } else if( *state == DLG_START ) {
            i = 0;
        }
    } /* for */

    return( ret );
}
Exemple #9
0
int  SDL_SYS_CDInit(void)
{
	/* checklist: /dev/cdrom, /dev/hd?, /dev/scd? /dev/sr? */
	static char *checklist[] = {
		"cdrom", "?a hd?", "?0 scd?", "?0 sr?", NULL
	};
	char *SDLcdrom;
	int i, j, exists;
	char drive[32];
	struct stat stbuf;

	/* Fill in our driver capabilities */
	SDL_CDcaps.Name = SDL_SYS_CDName;
	SDL_CDcaps.Open = SDL_SYS_CDOpen;
	SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
	SDL_CDcaps.Status = SDL_SYS_CDStatus;
	SDL_CDcaps.Play = SDL_SYS_CDPlay;
	SDL_CDcaps.Pause = SDL_SYS_CDPause;
	SDL_CDcaps.Resume = SDL_SYS_CDResume;
	SDL_CDcaps.Stop = SDL_SYS_CDStop;
	SDL_CDcaps.Eject = SDL_SYS_CDEject;
	SDL_CDcaps.Close = SDL_SYS_CDClose;

	/* Look in the environment for our CD-ROM drive list */
	SDLcdrom = getenv("SDL_CDROM");	/* ':' separated list of devices */
	if ( SDLcdrom != NULL ) {
		char *cdpath, *delim;
		cdpath = malloc(strlen(SDLcdrom)+1);
		if ( cdpath != NULL ) {
			strcpy(cdpath, SDLcdrom);
			SDLcdrom = cdpath;
			do {
				delim = strchr(SDLcdrom, ':');
				if ( delim ) {
					*delim++ = '\0';
				}
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking CD-ROM drive from SDL_CDROM: %s\n", SDLcdrom);
#endif
				if ( CheckDrive(SDLcdrom, NULL, &stbuf) > 0 ) {
					AddDrive(SDLcdrom, &stbuf);
				}
				if ( delim ) {
					SDLcdrom = delim;
				} else {
					SDLcdrom = NULL;
				}
			} while ( SDLcdrom );
			free(cdpath);
		}

		/* If we found our drives, there's nothing left to do */
		if ( SDL_numcds > 0 ) {
			return(0);
		}
	}

#ifdef USE_MNTENT
	/* Check /dev/cdrom first :-) */
	if (CheckDrive("/dev/cdrom", NULL, &stbuf) > 0) {
		AddDrive("/dev/cdrom", &stbuf);
	}

	/* Now check the currently mounted CD drives */
	CheckMounts(_PATH_MOUNTED);

	/* Finally check possible mountable drives in /etc/fstab */
	CheckMounts(_PATH_MNTTAB);

	/* If we found our drives, there's nothing left to do */
	if ( SDL_numcds > 0 ) {
		return(0);
	}
#endif /* USE_MNTENT */

	/* Scan the system for CD-ROM drives.
	   Not always 100% reliable, so use the USE_MNTENT code above first.
	 */
	for ( i=0; checklist[i]; ++i ) {
		if ( checklist[i][0] == '?' ) {
			char *insert;
			exists = 1;
			for ( j=checklist[i][1]; exists; ++j ) {
				sprintf(drive, "/dev/%s", &checklist[i][3]);
				insert = strchr(drive, '?');
				if ( insert != NULL ) {
					*insert = j;
				}
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking possible CD-ROM drive: %s\n", drive);
#endif
				switch (CheckDrive(drive, NULL, &stbuf)) {
					/* Drive exists and is a CD-ROM */
					case 1:
						AddDrive(drive, &stbuf);
						break;
					/* Drive exists, but isn't a CD-ROM */
					case 0:
						break;
					/* Drive doesn't exist */
					case -1:
						exists = 0;
						break;
				}
			}
		} else {
			sprintf(drive, "/dev/%s", checklist[i]);
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking possible CD-ROM drive: %s\n", drive);
#endif
			if ( CheckDrive(drive, NULL, &stbuf) > 0 ) {
				AddDrive(drive, &stbuf);
			}
		}
	}
	return(0);
}
Exemple #10
0
static void CheckMounts()
{
    char*          buffer;
    int            bufsz;
    struct vmount* ptr;
    int            ret;

    buffer = (char*)malloc(10);
    bufsz  = 10;
    if ( buffer==NULL )
    {
        fprintf(stderr, "Could not allocate 10 bytes in aix/SDL_syscdrom.c:CheckMounts\n" );
	exit ( -10 );
    }

    do
    {
	/* mntctrl() returns an array of all mounted filesystems */
        ret = mntctl ( MCTL_QUERY, bufsz, buffer );
        if ( ret == 0 )
        {
				   /* Buffer was too small, realloc.    */
            bufsz = *(int*)buffer; /* Required size is in first word.   */
				   /* (whatever a word is in AIX 4.3.3) */
				   /* int seems to be OK in 32bit mode. */
            free(buffer);
            buffer = (char*)malloc(bufsz);
            if ( buffer==NULL )
            {
                fprintf(stderr,
			"Could not allocate %d bytes in aix/SDL_syscdrom.c:CheckMounts\n",
			bufsz );
	        exit ( -10 );
            }
        }
	else if ( ret < 0 )
	{
#ifdef DEBUG_CDROM
            fprintf(stderr, "Error reading vmount structures\n");
#endif
	    return;
	}
    }
    while ( ret == 0 );

#ifdef DEBUG_CDROM
    fprintf ( stderr, "Read %d vmount structures\n",ret );
#endif
    ptr = (struct vmount*)buffer;
    do
    {
            switch(ptr->vmt_gfstype)
            {
            case MNT_CDROM :
                {
		    struct stat stbuf;
		    char*       text;

		    text = (char*)ptr + ptr->vmt_data[VMT_OBJECT].vmt_off;
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking mount path: %s mounted on %s\n",
	text, (char*)ptr + ptr->vmt_data[VMT_STUB].vmt_off );
#endif
		    if ( CheckDrive( text, &stbuf) > 0)
		    {
		        AddDrive( text, &stbuf);
		    }
                }
                break;
            default :
                break;
            }
            ptr = (struct vmount*)((char*)ptr + ptr->vmt_length);
            ret--;
    }
    while ( ret > 0 );

    free ( buffer );
}
int SDL_SYS_CDInit(void)
{
    /* checklist: /dev/cdrom, /dev/cd?, /dev/scd? */
    static char *checklist[]={"cdrom", "?0 cd?", "?1 cd?", "?0 scd?", NULL};

    char *SDLcdrom;
    int i, j, exists;
    char drive[32];
    struct stat stbuf;

    /* Fill in our driver capabilities */
    SDL_CDcaps.Name = SDL_SYS_CDName;
    SDL_CDcaps.Open = SDL_SYS_CDOpen;
    SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
    SDL_CDcaps.Status = SDL_SYS_CDStatus;
    SDL_CDcaps.Play = SDL_SYS_CDPlay;
    SDL_CDcaps.Pause = SDL_SYS_CDPause;
    SDL_CDcaps.Resume = SDL_SYS_CDResume;
    SDL_CDcaps.Stop = SDL_SYS_CDStop;
    SDL_CDcaps.Eject = SDL_SYS_CDEject;
    SDL_CDcaps.Close = SDL_SYS_CDClose;

    /* clearing device open status */
    for (i=0; i<MAX_DRIVES; i++)
    {
       SDL_cdopen[i]=0;
    }

    /* Look in the environment for our CD-ROM drive list */
    SDLcdrom = SDL_getenv("SDL_CDROM");	/* ':' separated list of devices */
    if ( SDLcdrom != NULL )
    {
        char *cdpath, *delim;
	size_t len = SDL_strlen(SDLcdrom)+1;
        cdpath = SDL_stack_alloc(char, len);
        if (cdpath != NULL)
        {
            SDL_strlcpy(cdpath, SDLcdrom, len);
            SDLcdrom = cdpath;
            do {
                delim = SDL_strchr(SDLcdrom, ':');
                if (delim)
                {
                    *delim++ = '\0';
                }
                if (CheckDrive(SDLcdrom, &stbuf) > 0)
                {
                    AddDrive(SDLcdrom, &stbuf);
                }
                if (delim)
                {
                    SDLcdrom = delim;
                }
                else
                {
                    SDLcdrom = NULL;
                }
            } while (SDLcdrom);
            SDL_stack_free(cdpath);
        }

        /* If we found our drives, there's nothing left to do */
        if (SDL_numcds > 0)
        {
            return(0);
        }
    }
Exemple #12
0
const char *CdromDriverLinux::DeviceName(int drive)
{
	if (!drives_scanned)
	{
		/* checklist: /dev/cdrom, /dev/hd?, /dev/scd? /dev/sr? */
		static const char *const checklist[] = {
			"cdrom", "?a hd?", "?0 scd?", "?0 sr?", NULL
		};
		struct stat stbuf;

#ifdef USE_MNTENT
		/* Check /dev/cdrom first :-) */
		if (CheckDrive("/dev/cdrom", NULL, &stbuf) > 0) {
			AddDrive("/dev/cdrom", &stbuf);
		}

		/* Now check the currently mounted CD drives */
		CheckMounts(_PATH_MOUNTED);

		/* Finally check possible mountable drives in /etc/fstab */
		CheckMounts(_PATH_MNTTAB);

		/* If we found our drives, there's nothing left to do */
#endif /* USE_MNTENT */
		if ( numcds == 0 )
		{
			char drive[32];
			int i, j, exists;
			
			/* Scan the system for CD-ROM drives.
			   Not always 100% reliable, so use the USE_MNTENT code above first.
			 */
			for ( i=0; checklist[i]; ++i ) {
				if ( checklist[i][0] == '?' ) {
					char *insert;
					exists = 1;
					for ( j=checklist[i][1]; exists; ++j ) {
						sprintf(drive, "/dev/%s", &checklist[i][3]);
						insert = strchr(drive, '?');
						if ( insert != NULL ) {
							*insert = j;
						}
						switch (CheckDrive(drive, NULL, &stbuf)) {
							/* Drive exists and is a CD-ROM */
							case 1:
								AddDrive(drive, &stbuf);
								break;
							/* Drive exists, but isn't a CD-ROM */
							case 0:
								break;
							/* Drive doesn't exist */
							case -1:
								exists = 0;
								break;
						}
					}
				} else {
					sprintf(drive, "/dev/%s", checklist[i]);
					if ( CheckDrive(drive, NULL, &stbuf) > 0 ) {
						AddDrive(drive, &stbuf);
					}
				}
			}
		}
		drives_scanned = true;
	}
	return cddrives[drive].device;
}
Exemple #13
0
void CdromDriverLinux::CheckMounts(const char *mtab)
{
	FILE *mntfp;
	struct mntent *mntent;
	struct stat stbuf;

	mntfp = setmntent(mtab, "r");
	if ( mntfp != NULL ) {
		char *tmp;
		char *mnt_type;
		size_t mnt_type_len;
		char *mnt_dev;
		size_t mnt_dev_len;

		while ( (mntent=getmntent(mntfp)) != NULL ) {
			mnt_type_len = strlen(mntent->mnt_type) + 1;
			mnt_type = (char *)malloc(mnt_type_len);
			if (mnt_type == NULL)
				continue;  /* maybe you'll get lucky next time. */

			mnt_dev_len = strlen(mntent->mnt_fsname) + 1;
			mnt_dev = (char *)malloc(mnt_dev_len);
			if (mnt_dev == NULL) {
				free(mnt_type);
				continue;
			}

			strcpy(mnt_type, mntent->mnt_type);
			strcpy(mnt_dev, mntent->mnt_fsname);

			/* Handle "supermount" filesystem mounts */
			if ( strcmp(mnt_type, MNTTYPE_SUPER) == 0 ) {
				tmp = strstr(mntent->mnt_opts, "fs=");
				if ( tmp ) {
					free(mnt_type);
					mnt_type = strdup(tmp + strlen("fs="));
					if ( mnt_type ) {
						tmp = strchr(mnt_type, ',');
						if ( tmp ) {
							*tmp = '\0';
						}
					}
				}
				tmp = strstr(mntent->mnt_opts, "dev=");
				if ( tmp ) {
					free(mnt_dev);
					mnt_dev = strdup(tmp + strlen("dev="));
					if ( mnt_dev ) {
						tmp = strchr(mnt_dev, ',');
						if ( tmp ) {
							*tmp = '\0';
						}
					}
				}
			}
			if ( strcmp(mnt_type, MNTTYPE_CDROM) == 0 ) {
				if (CheckDrive(mnt_dev, mnt_type, &stbuf) > 0) {
					AddDrive(mnt_dev, &stbuf);
				}
			}
			free(mnt_dev);
			free(mnt_type);
		}
		endmntent(mntfp);
	}
}
Exemple #14
0
int
SDL_SYS_CDInit(void)
{
    /* checklist:
     *
     * Tru64 5.X (/dev/rdisk/cdrom?c)
     * dir: /dev/rdisk, name: cdrom
     *
     * Digital UNIX 4.0X (/dev/rrz?c)
     * dir: /dev, name: rrz
     *
     */
    struct
    {
        char *dir;
        char *name;
    } checklist[] = {
        {
        "/dev/rdisk", "cdrom"}, {
        "/dev", "rrz"}, {
    NULL, NULL}};
    char drive[32];
    char *SDLcdrom;
    int i, j, exists;
    struct stat stbuf;

    /* Fill in our driver capabilities */
    SDL_CDcaps.Name = SDL_SYS_CDName;
    SDL_CDcaps.Open = SDL_SYS_CDOpen;
    SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
    SDL_CDcaps.Status = SDL_SYS_CDStatus;
    SDL_CDcaps.Play = SDL_SYS_CDPlay;
    SDL_CDcaps.Pause = SDL_SYS_CDPause;
    SDL_CDcaps.Resume = SDL_SYS_CDResume;
    SDL_CDcaps.Stop = SDL_SYS_CDStop;
    SDL_CDcaps.Eject = SDL_SYS_CDEject;
    SDL_CDcaps.Close = SDL_SYS_CDClose;


    /* Look in the environment for our CD-ROM drive list */
    SDLcdrom = SDL_getenv("SDL_CDROM"); /* ':' separated list of devices */
    if (SDLcdrom != NULL) {
        char *cdpath, *delim;
        size_t len = SDL_strlen(SDLcdrom) + 1;
        cdpath = SDL_stack_alloc(char, len);
        if (cdpath != NULL) {
            SDL_strlcpy(cdpath, SDLcdrom, len);
            SDLcdrom = cdpath;
            do {
                delim = SDL_strchr(SDLcdrom, ':');
                if (delim) {
                    *delim++ = '\0';
                }
                if (CheckDrive(SDLcdrom, &stbuf) > 0) {
                    AddDrive(SDLcdrom, &stbuf);
                }
                if (delim) {
                    SDLcdrom = delim;
                } else {
                    SDLcdrom = NULL;
                }
            } while (SDLcdrom);
            SDL_stack_free(cdpath);
        }

        /* If we found our drives, there's nothing left to do */
        if (SDL_numcds > 0) {
            return (0);
        }
    }
Exemple #15
0
static int CheckNonmounts()
{
#ifdef _THREAD_SAFE
    AFILE_t      fsFile = NULL;
    int          passNo = 0;
    int          ret;
    struct fstab entry;
    struct stat  stbuf;

    ret = setfsent_r( &fsFile, &passNo );
    if ( ret != 0 ) return -1;
    do
    {
        ret = getfsent_r ( &entry, &fsFile, &passNo );
        if ( ret == 0 ) {
            char* l = strrchr(entry.fs_spec,'/');
            if ( l != NULL ) {
                if ( !strncmp("cd",++l,2) ) {
#ifdef DEBUG_CDROM
                    fprintf(stderr,
			    "Found unmounted CD ROM drive with device name %s\n",
			    entry.fs_spec);
#endif
		    if ( CheckDrive( entry.fs_spec, &stbuf) > 0)
		    {
		        AddDrive( entry.fs_spec, &stbuf);
		    }
                }
            }
        }
    }
    while ( ret == 0 );
    ret = endfsent_r ( &fsFile );
    if ( ret != 0 ) return -1;
    return 0;
#else
    struct fstab* entry;
    struct stat  stbuf;

    setfsent();
    do
    {
        entry = getfsent();
        if ( entry != NULL ) {
            char* l = strrchr(entry->fs_spec,'/');
            if ( l != NULL ) {
                if ( !strncmp("cd",++l,2) ) {
#ifdef DEBUG_CDROM
                    fprintf(stderr,"Found unmounted CD ROM drive with device name %s", entry->fs_spec);
#endif
		    if ( CheckDrive( entry->fs_spec, &stbuf) > 0)
		    {
		        AddDrive( entry->fs_spec, &stbuf);
		    }
                }
            }
        }
    }
    while ( entry != NULL );
    endfsent();
#endif
}
Exemple #16
0
int  SDL_SYS_CDInit(void)
{
    /* checklist: /dev/cdrom,/dev/cd?c /dev/acd?c
     * /dev/matcd?c /dev/mcd?c /dev/scd?c
     *
     */
    static char *checklist[] = {
	"?0 rdisk/cdrom?",NULL};
    char drive[32];
    char *SDLcdrom;
    int i, j, exists;
    struct stat stbuf;

    /* Fill in our driver capabilities */
    SDL_CDcaps.Name   = SDL_SYS_CDName;
    SDL_CDcaps.Open   = SDL_SYS_CDOpen;
    SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
    SDL_CDcaps.Status = SDL_SYS_CDStatus;
    SDL_CDcaps.Play   = SDL_SYS_CDPlay;
    SDL_CDcaps.Pause  = SDL_SYS_CDPause;
    SDL_CDcaps.Resume = SDL_SYS_CDResume;
    SDL_CDcaps.Stop   = SDL_SYS_CDStop;
    SDL_CDcaps.Eject  = SDL_SYS_CDEject;
    SDL_CDcaps.Close  = SDL_SYS_CDClose;


    /* Look in the environment for our CD-ROM drive list */
    SDLcdrom = getenv("SDL_CDROM");	/* ':' separated list of devices */
    if ( SDLcdrom != NULL ) {
	char *cdpath, *delim;
	cdpath = malloc(strlen(SDLcdrom)+1);
	if ( cdpath != NULL ) {
	    strcpy(cdpath, SDLcdrom);
	    SDLcdrom = cdpath;
	    do {
		delim = strchr(SDLcdrom, ':');
		if ( delim ) {
		    *delim++ = '\0';
		}
		if ( CheckDrive(SDLcdrom, &stbuf) > 0 ) {
		    AddDrive(SDLcdrom, &stbuf);
		}
		if ( delim ) {
		    SDLcdrom = delim;
		} else {
		    SDLcdrom = NULL;
		}
	    } while ( SDLcdrom );
	    free(cdpath);
	}

	/* If we found our drives, there's nothing left to do */
	if ( SDL_numcds > 0 ) {
	    return(0);
	}
    }
    /* Scan the system for CD-ROM drives */
    for ( i=0; checklist[i]; ++i ) {
	if ( checklist[i][0] == '?' ) {
	    char *insert;
	    exists = 1;
	    for ( j=checklist[i][1]; exists; ++j ) {
		sprintf(drive, "/dev/%sc", &checklist[i][3]);
		insert = strchr(drive, '?');
		if ( insert != NULL ) {
		    *insert = j;
		}
		switch (CheckDrive(drive, &stbuf)) {
		    /* Drive exists and is a CD-ROM */
		    case 1:
			AddDrive(drive, &stbuf);
			break;
			/* Drive exists, but isn't a CD-ROM */
		    case 0:
			break;
			/* Drive doesn't exist */
		    case -1:
			exists = 0;
			break;
		}
	    }
	} else {
	    sprintf(drive, "/dev/%s", checklist[i]);
	    if ( CheckDrive(drive, &stbuf) > 0 ) {
		AddDrive(drive, &stbuf);
	    }
	}
    }
/*
    SDLcdrom=malloc(sizeof(char) * 32);
    strcpy(SDLcdrom,"/dev/rdisk/cdrom0c");
    SDL_cdlist[0] = SDLcdrom;
    stat(SDLcdrom, &stbuf);
    SDL_cdmode[0] = stbuf.st_rdev;
    SDL_numcds = 1;
 */
    return (0);
}
Exemple #17
0
static void CheckMounts(const char *mtab)
{
	FILE *mntfp;
	struct mntent *mntent;
	struct stat stbuf;

	mntfp = setmntent(mtab, "r");
	if ( mntfp != NULL ) {
		char *tmp;
		char *mnt_type;
		size_t mnt_type_len;
		char *mnt_dev;
		size_t mnt_dev_len;

		while ( (mntent=getmntent(mntfp)) != NULL ) {
			mnt_type_len = SDL_strlen(mntent->mnt_type) + 1;
			mnt_type = SDL_stack_alloc(char, mnt_type_len);
			if (mnt_type == NULL)
				continue;  /* maybe you'll get lucky next time. */

			mnt_dev_len = SDL_strlen(mntent->mnt_fsname) + 1;
			mnt_dev = SDL_stack_alloc(char, mnt_dev_len);
			if (mnt_dev == NULL) {
				SDL_stack_free(mnt_type);
				continue;
			}

			SDL_strlcpy(mnt_type, mntent->mnt_type, mnt_type_len);
			SDL_strlcpy(mnt_dev, mntent->mnt_fsname, mnt_dev_len);

			/* Handle "supermount" filesystem mounts */
			if ( SDL_strcmp(mnt_type, MNTTYPE_SUPER) == 0 ) {
				tmp = SDL_strstr(mntent->mnt_opts, "fs=");
				if ( tmp ) {
					SDL_stack_free(mnt_type);
					mnt_type = SDL_strdup(tmp + SDL_strlen("fs="));
					if ( mnt_type ) {
						tmp = SDL_strchr(mnt_type, ',');
						if ( tmp ) {
							*tmp = '\0';
						}
					}
				}
				tmp = SDL_strstr(mntent->mnt_opts, "dev=");
				if ( tmp ) {
					SDL_stack_free(mnt_dev);
					mnt_dev = SDL_strdup(tmp + SDL_strlen("dev="));
					if ( mnt_dev ) {
						tmp = SDL_strchr(mnt_dev, ',');
						if ( tmp ) {
							*tmp = '\0';
						}
					}
				}
			}
			if ( SDL_strcmp(mnt_type, MNTTYPE_CDROM) == 0 ) {
#ifdef DEBUG_CDROM
  fprintf(stderr, "Checking mount path from %s: %s mounted on %s of %s\n",
	mtab, mnt_dev, mntent->mnt_dir, mnt_type);
#endif
				if (CheckDrive(mnt_dev, mnt_type, &stbuf) > 0) {
					AddDrive(mnt_dev, &stbuf);
				}
			}
			SDL_stack_free(mnt_dev);
			SDL_stack_free(mnt_type);
		}
		endmntent(mntfp);
	}
TEST(Components, CurveDriveTestLinear)
{
    RedBotSpeedController lMotor(0);
    RedBotSpeedController rMotor(1);
    frc::DifferentialDrive drive(lMotor, rMotor);

    // Stationary
    CheckDrive(
            drive,
            myPackets,
            0.0,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                0,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                0,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Drive forward
    CheckDrive(
            drive,
            myPackets,
            1.0,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Drive forward at half speed
    CheckDrive(
            drive,
            myPackets,
            0.5,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Drive backward
    CheckDrive(
            drive,
            myPackets,
            -1.0,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );

    // Drive backward at half speed
    CheckDrive(
            drive,
            myPackets,
            -0.5,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );

    // Pivot right
    CheckDrive(
            drive,
            myPackets,
            0.0,
            1.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Pivot right at half speed
    CheckDrive(
            drive,
            myPackets,
            0.0,
            0.5,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Pivot left
    CheckDrive(
            drive,
            myPackets,
            0.0,
            -1.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );

    // Pivot left at half speed
    CheckDrive(
            drive,
            myPackets,
            0.0,
            -0.5,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );
}