static void stream_callback (ConstFSEventStreamRef streamRef, void *clientCallBackInfo, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) { RepoWatchInfo *info; char *repo_id; SeafWTMonitor *monitor = (SeafWTMonitor *)clientCallBackInfo; SeafWTMonitorPriv *priv = monitor->priv; char **paths = (char **)eventPaths; char *dir; info = g_hash_table_lookup (priv->info_hash, (gpointer)(long)streamRef); if (!info) { seaf_warning ("Repo watch info not found.\n"); return; } for (int i = 0; i < numEvents; i++) { #ifdef FSEVENT_DEBUG seaf_debug("%ld Change %llu in %s, flags %x\n", (long)CFRunLoopGetCurrent(), eventIds[i], paths[i], eventFlags[i]); #endif process_one_event (paths[i], info, info->worktree, eventIds[i], eventFlags[i]); } }
static gboolean process_events (const char *repo_id, RepoWatchInfo *info, char *event_buf, unsigned int buf_size) { PFILE_NOTIFY_INFORMATION event; int offset = 0; while (1) { event = (PFILE_NOTIFY_INFORMATION)&event_buf[offset]; offset += event->NextEntryOffset; process_one_event (info, info->worktree, event, (event->NextEntryOffset == 0)); if (!event->NextEntryOffset) break; } return TRUE; }
int piggy_init() { int sbytes = 0; char temp_name_read[16]; char temp_name[16]; grs_bitmap temp_bitmap; digi_sound temp_sound; DiskBitmapHeader bmh; DiskSoundHeader sndh; int header_size, N_bitmaps, N_sounds; int i,size, length; char * filename; int read_sounds = 1; int Pigdata_start; hashtable_init( &AllBitmapsNames, MAX_BITMAP_FILES ); // hashtable_init( &AllDigiSndNames, MAX_SOUND_FILES ); if (GameBitmaps == NULL) { GameBitmaps = (grs_bitmap *)mymalloc(sizeof(grs_bitmap) * MAX_BITMAP_FILES); if (GameBitmaps == NULL) Error("Cannot allocate space for game bitmaps in piggy.c"); } if (AllBitmaps == NULL) { AllBitmaps = (BitmapFile *)mymalloc(sizeof(BitmapFile) * MAX_BITMAP_FILES); if (AllBitmaps == NULL) Error("Cannot allocate space for bitmap filenames in piggy.c"); } #if 0 if (AllSounds == NULL) { AllSounds = (SoundFile *)mymalloc(sizeof(SoundFile) * MAX_SOUND_FILES); if (AllSounds == NULL) Error("Cannot allocate space for sound filenames in piggy.c"); } if ( FindArg( "-nosound" ) || (digi_driver_board<1) ) { read_sounds = 0; mprintf(( 0, "Not loading sound data!!!!!\n" )); } for (i=0; i<MAX_SOUND_FILES; i++ ) { GameSounds[i].length = 0; GameSounds[i].data = NULL; SoundOffset[i] = 0; } #endif for (i=0; i<MAX_BITMAP_FILES; i++ ) GameBitmapXlat[i] = i; if ( !bogus_bitmap_initialized ) { int i; ubyte c; bogus_bitmap_initialized = 1; memset( &bogus_bitmap, 0, sizeof(grs_bitmap) ); bogus_bitmap.bm_w = bogus_bitmap.bm_h = bogus_bitmap.bm_rowsize = 64; bogus_bitmap.bm_data = bogus_data; c = gr_find_closest_color( 0, 0, 63 ); for (i=0; i<4096; i++ ) bogus_data[i] = c; c = gr_find_closest_color( 63, 0, 0 ); // Make a big red X ! for (i=0; i<64; i++ ) { bogus_data[i*64+i] = c; bogus_data[i*64+(63-i)] = c; } piggy_register_bitmap( &bogus_bitmap, "bogus", 1 ); bogus_sound.length = 64*64; bogus_sound.data = bogus_data; GameBitmapOffset[0] = 0; } filename = ":Data:DESCENT.PIG"; if ( FindArg( "-bigpig" )) BigPig = 1; if ( FindArg( "-lowmem" )) piggy_low_memory = 1; if ( FindArg( "-nolowmem" )) piggy_low_memory = 0; if (use_alt_textures) piggy_low_memory = 1; //MWA if (piggy_low_memory) //MWA digi_lomem = 1; if ( (i=FindArg( "-piggy" )) ) { filename = Args[i+1]; mprintf( (0, "Using alternate pigfile, '%s'\n", filename )); } Piggy_fp = cfopen( filename, "rb" ); if (Piggy_fp==NULL) return 0; Pigdata_start = read_int_swap(Piggy_fp); #ifdef EDITOR if ( FindArg("-nobm") ) #endif { bm_read_all( Piggy_fp ); // Note connection to above if!!! for (i = 0; i < MAX_BITMAP_FILES; i++) GameBitmapXlat[i] = read_short_swap(Piggy_fp); digi_load_sounds(); } cfseek( Piggy_fp, Pigdata_start, SEEK_SET ); size = cfilelength(Piggy_fp) - Pigdata_start; length = size; mprintf( (0, "\nReading data (%d KB) ", size/1024 )); N_bitmaps = read_int_swap(Piggy_fp); size -= sizeof(int); N_sounds = read_int_swap(Piggy_fp); size -= sizeof(int); // header_size = (N_bitmaps*sizeof(DiskBitmapHeader)) + (N_sounds*sizeof(DiskSoundHeader)); header_size = ((N_bitmaps*17) + (N_sounds*20)); gr_set_curfont( Gamefonts[GFONT_SMALL] ); gr_set_fontcolor(gr_find_closest_color_current( 20, 20, 20 ),-1 ); gr_printf( 0x8000, grd_curcanv->cv_bitmap.bm_h - 25, "%s...", TXT_LOADING_DATA ); bitblt_to_screen(); // put a couple of event loop calls here. This should take care of TM driver!!! process_one_event(); process_one_event(); process_one_event(); process_one_event(); for (i=0; i<N_bitmaps; i++ ) { cfread(bmh.name, 8, 1, Piggy_fp); bmh.dflags = read_byte(Piggy_fp); bmh.width = read_byte(Piggy_fp); bmh.height = read_byte(Piggy_fp); bmh.flags = read_byte(Piggy_fp); bmh.avg_color = read_byte(Piggy_fp); bmh.offset = read_int_swap(Piggy_fp); //size -= sizeof(DiskBitmapHeader); memcpy( temp_name_read, bmh.name, 8 ); temp_name_read[8] = 0; if ( bmh.dflags & DBM_FLAG_ABM ) sprintf( temp_name, "%s#%d", temp_name_read, bmh.dflags & 63 ); else strcpy( temp_name, temp_name_read ); memset( &temp_bitmap, 0, sizeof(grs_bitmap) ); if ( bmh.dflags & DBM_FLAG_LARGE ) temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width+256; else temp_bitmap.bm_w = temp_bitmap.bm_rowsize = bmh.width; temp_bitmap.bm_h = bmh.height; temp_bitmap.bm_flags = BM_FLAG_PAGED_OUT; temp_bitmap.avg_color = bmh.avg_color; temp_bitmap.bm_data = Piggy_bitmap_cache_data; // HACK HACK HACK!!!!! if (!strnicmp(bmh.name, "cockpit", 7) || !strnicmp(bmh.name, "status", 6) || !strnicmp(bmh.name, "rearview", 8)) { temp_bitmap.bm_w = temp_bitmap.bm_rowsize = 640; } if (!strnicmp(bmh.name, "cockpit", 7) || !strnicmp(bmh.name, "rearview", 8)) temp_bitmap.bm_h = 480; GameBitmapFlags[i+1] = 0; if ( bmh.flags & BM_FLAG_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_TRANSPARENT; if ( bmh.flags & BM_FLAG_SUPER_TRANSPARENT ) GameBitmapFlags[i+1] |= BM_FLAG_SUPER_TRANSPARENT; if ( bmh.flags & BM_FLAG_NO_LIGHTING ) GameBitmapFlags[i+1] |= BM_FLAG_NO_LIGHTING; if ( bmh.flags & BM_FLAG_RLE ) GameBitmapFlags[i+1] |= BM_FLAG_RLE; GameBitmapOffset[i+1] = bmh.offset + header_size + (sizeof(int)*2) + Pigdata_start; Assert( (i+1) == Num_bitmap_files ); piggy_register_bitmap( &temp_bitmap, temp_name, 1 ); } #if 0 for (i=0; i<N_sounds; i++ ) { cfread(sndh.name, 8, 1, Piggy_fp); sndh.length = read_int_swap(Piggy_fp); sndh.data_length = read_int_swap(Piggy_fp); sndh.offset = read_int_swap(Piggy_fp); //size -= sizeof(DiskSoundHeader); temp_sound.length = sndh.length; temp_sound.data = (ubyte *)(sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start); SoundOffset[Num_sound_files] = sndh.offset + header_size + (sizeof(int)*2)+Pigdata_start; memcpy( temp_name_read, sndh.name, 8 ); temp_name_read[8] = 0; piggy_register_sound( &temp_sound, temp_name_read, 1 ); sbytes += sndh.length; //mprintf(( 0, "%d bytes of sound\n", sbytes )); } SoundBits = mymalloc( sbytes + 16 ); if ( SoundBits == NULL ) Error( "Not enough memory to load DESCENT.PIG sounds\n" ); #endif #ifdef EDITOR Piggy_bitmap_cache_size = size - header_size - sbytes + 16; Assert( Piggy_bitmap_cache_size > 0 ); #else if (!piggy_low_memory) Piggy_bitmap_cache_size = PIGGY_BUFFER_SIZE; else Piggy_bitmap_cache_size = LOW_PIGGY_BUFFER_SIZE; #endif BitmapBits = mymalloc( Piggy_bitmap_cache_size ); if ( BitmapBits == NULL ) Error( "Not enough memory to load DESCENT.PIG bitmaps\n" ); Piggy_bitmap_cache_data = BitmapBits; Piggy_bitmap_cache_next = 0; mprintf(( 0, "\nBitmaps: %d KB Sounds: %d KB\n", Piggy_bitmap_cache_size/1024, sbytes/1024 )); atexit(piggy_close_file); // mprintf( (0, "<<<<Paging in all piggy bitmaps...>>>>>" )); // for (i=0; i < Num_bitmap_files; i++ ) { // bitmap_index bi; // bi.index = i; // PIGGY_PAGE_IN( bi ); // } // mprintf( (0, "\n (USed %d / %d KB)\n", Piggy_bitmap_cache_next/1024, (size - header_size - sbytes + 16)/1024 )); // key_getch(); return 0; }