--- uae/src/od-dos/misc/misc.c 2018/04/24 16:40:30 1.1 +++ uae/src/od-dos/misc/misc.c 2018/04/24 16:44:01 1.1.1.2 @@ -28,10 +28,11 @@ #include "misc/handlers.h" #include "xwin.h" #include "video/vbe.h" -#include "video/dos-supp.h" +#include "tui.h" #include "disk.h" #include "debug.h" #include "picasso96.h" +#include "logo.h" #define MAXMESSAGES 100 @@ -48,10 +49,48 @@ void DOS_leave(void); void DOS_abort(void); void DumpMessages(void); static int ScreenWrite(__FSEXT_Fnumber func, int *retval, va_list rest_args); +int scandir(const char *dir, struct dirent ***namelist, + int (*select)(const struct dirent *), + int (*cmp)(const void *, const void *)); extern int NeedDither, ModeNumber, UseLinear, ScreenIsPicasso, PicassoModeNumber, PicassoUseLinear; extern char PicassoInvalidLines[]; +int origrows; + +int main(int argc, char **argv) +{ + time_t t; + _go32_dpmi_registers IntRegs; + int HasMode, i; + + origrows = ScreenRows(); + DOS_init(); + HasMode = 1; + if (!SetMode(NumberOfModes-3, 1, 0)) + if (!SetMode(NumberOfModes-3, 0, 0)) + HasMode = 0; + if (HasMode) { + for (i=0; i<200; i++) + CurrentMode.PutLine(&(Logo[320*i]), i); + t = time(NULL)+5; + while(time(NULL) 0) + free (v[--i]); + free (v); + errno = ENOMEM; + return -1; + } + v = new; + } + + v[i] = (struct dirent *) malloc (sizeof (**v)); + if (v[i] == NULL) + goto lose; + + *v[i++] = *d; + } + + if (errno != 0) + { + save = errno; + + (void) closedir (dp); + + /* Remember to free allocated memory upon error! */ + while (i > 0) free(v[--i]); + free(v); + + errno = save; + return -1; + } + + (void) closedir (dp); + errno = save; + + /* Sort the list if we have a comparison function to sort with. */ + if (cmp != NULL) + qsort (v, i, sizeof (*v), cmp); + *namelist = v; + return i; +}