read_inventory_preset( const player &p ) : pickup_inventory_preset( p ), p( p ) { static const std::string unknown( _( "<color_dark_gray>?</color>" ) ); static const std::string martial_arts( _( "martial arts" ) ); append_cell( [ this, &p ]( const item_location & loc ) -> std::string { if( loc->type->can_use( "MA_MANUAL" ) ) { return martial_arts; } if( !is_known( loc ) ) { return unknown; } const auto &book = get_book( loc ); if( book.skill && p.get_skill_level_object( book.skill ).can_train() ) { return string_format( _( "%s to %d" ), book.skill->name().c_str(), book.level ); } return std::string(); }, _( "TRAINS" ), unknown ); append_cell( [ this ]( const item_location & loc ) -> std::string { if( !is_known( loc ) ) { return unknown; } const auto &book = get_book( loc ); const int unlearned = book.recipes.size() - get_known_recipes( book ); return unlearned > 0 ? to_string( unlearned ) : std::string(); }, _( "RECIPES" ), unknown ); append_cell( [ this ]( const item_location & loc ) -> std::string { if( !is_known( loc ) ) { return unknown; } return good_bad_none( get_book( loc ).fun ); }, _( "FUN" ), unknown ); append_cell( [ this, &p ]( const item_location & loc ) -> std::string { if( !is_known( loc ) ) { return unknown; } std::vector<std::string> dummy; const player *reader = p.get_book_reader( *loc, dummy ); if( reader == nullptr ) { return std::string(); // Just to make sure } // Actual reading time (in turns). Can be penalized. const int actual_turns = p.time_to_read( *loc, *reader ) / MOVES( 1 ); // Theoretical reading time (in turns) based on the reader speed. Free of penalties. const int normal_turns = get_book( loc ).time * reader->read_speed() / MOVES( 1 ); const std::string duration = to_string_approx( time_duration::from_turns( actual_turns ), false ); if( actual_turns > normal_turns ) { // Longer - complicated stuff. return string_format( "<color_light_red>%s</color>", duration.c_str() ); } return duration; // Normal speed. }, _( "CHAPTER IN" ), unknown ); }
void main(void) { cout << "About to get book 0\n"; book& this_book = get_book(0); cout << this_book.author << ' ' << this_book.title; cout << ' ' << this_book.price; }
int main() { int user_selection; /* Get user selection */ print_menu(); user_selection = get_book(); /* Determine proper path for user selection */ switch(user_selection) { case 1: print_book_info(12345678,1200, 1, 1, 1994); break; case 2: print_book_info(12345678,800, 6, 30, 2012); break; case 3: print_book_info(12345678,500, 9, 1, 1986); break; default: printf("Invalid selection!\n"); break; } return 0; }
void read_server_book (const char *data, int len) { char buffer[8192]; book *b; page *p; int l = SDL_SwapLE16(*((Uint16*)(data+4))); int idx; if ( l >= sizeof (buffer) ) // Safer l = sizeof (buffer) - 1; memcpy (buffer, data+6, l); buffer[l] = '\0'; b = get_book (SDL_SwapLE16 (*((Uint16*)(data+1)))); if (b == NULL) b = create_book (buffer, data[0], SDL_SwapLE16 (*((Uint16*)(data+1)))); b->server_pages = data[3]; b->have_server_pages++; p=add_page(b);//Will create a page if pages is not found. idx = l + 6; while (idx <= len) { l = SDL_SwapLE16 (*((Uint16*)(&data[idx+1]))); if ( l >= sizeof (buffer) ) // Safer. l = sizeof (buffer) - 1; memcpy (buffer, &data[idx+3], l); buffer[l]=0; switch (data[idx]) { case _TEXT: p=add_str_to_page(buffer,_TEXT,b,p); break; case _AUTHOR: p=add_str_to_page(buffer,_AUTHOR,b,p); break; case _TITLE: p=add_str_to_page(buffer,_TITLE,b,p); break; case _IMAGE: p=add_image_from_server(buffer, b, p); break; case _PAGE: //p=add_page(b); break; } idx += l + 3; } b->active_page += b->pages_to_scroll; b->pages_to_scroll = 0; if (b) display_book_window (b); // Otherwise there's no point... }
//Checks to see if book is checked out/patron has fees, then adds a Transaction to library's transaction vector void Library::check_out(string cardnumber, string ISBN, const Date::Date& dd){ const Patron::Patron& pp = get_patron(cardnumber); Book::Book& bb = get_book(ISBN); if (pp.get_fees() != 0 || bb.get_checkedout()) throw Cant_Transact(); else { transactions.push_back(Transaction(pp,bb,dd)); bb.check_out(); } }
void open_book(int id) { book *b=get_book(id); if(!b) { char str[5]; str[0]=SEND_BOOK; *((Uint16*)(str+1))=SDL_SwapLE16((Uint16)id); *((Uint16*)(str+3))=SDL_SwapLE16(0); my_tcp_send(my_socket, (Uint8*)str, 5); } else { display_book_window(b); } }
void close_book(int book_id) { book *b=get_book(book_id); if(!b) return; if(book_win!=-1) { if((point)windows_list.window[book_win].data==(point)b) { hide_window(book_win); } } if(paper_win!=-1) { if((point)windows_list.window[paper_win].data == (point)b) { hide_window(paper_win); } } book_opened=-1; }
void read_local_book (const char *data, int len) { char file_name[200]; book *b; safe_snprintf (file_name, sizeof(file_name), "%.*s", len-3, data+3); b = get_book (SDL_SwapLE16 (*((Uint16*)(data+1)))); if (b == NULL) { b = read_book (file_name, data[0], SDL_SwapLE16 (*((Uint16*)(data+1)))); if (b == NULL) { char str[200]; safe_snprintf (str, sizeof(str), book_open_err_str, file_name); LOG_TO_CONSOLE(c_red1, str); return; } } display_book_window (b); // Otherwise there's no point... }