int consume_room(char *line, struct s_lem_in *lemin, int *state) { static struct s_room **forward_alloc; char **split; split = ft_strsplit(line, ' '); if (!ft_strcmp("##start", line)) forward_alloc = &lemin->start; else if (!ft_strcmp("##end", line)) forward_alloc = &lemin->end; else if (forward_alloc != 0 && arraylen(split) == 3) { *forward_alloc = alloc_room(ft_strdup(split[0])); lemin_push_room(lemin, *forward_alloc); forward_alloc = 0; } else if (arraylen(split) == 3) lemin_push_room(lemin, alloc_room(ft_strdup(split[0]))); else { *state = TUBE; consume_tube(line, lemin, state); } free_array(split); return (0); }
int main (int argc, const char* argv[]) { //Super important note: //MSVS Doesn't allow declarations to follow statements in a block. //It uses an old C90 ruleset. Support for this was added to C in the C99 standard room alpha; room* rooms = alloc_room(); char* t_str = strmalloc(); FILE* world = fopen("WORLD.DAT","r"); //TODO: Add a parameter parser to allow users to specify different worlds. if (world == NULL) { printf("Could not open WORLD.DAT!\n"); return 1; } load_world(rooms, world); //Load our world data into the rooms /// TEST ROUTINES // /*while (rooms != NULL) //NOTE: Using this will break the room looking { printf(rooms->name); printf("\n"); while (rooms->areas != NULL) { printf("\t"); printf(rooms->areas->name); printf("\n"); printf("\t\t"); printf(rooms->areas->desc); printf("\n"); rooms->areas = rooms->areas->next; } rooms = rooms->next; } if (t_str == "") printf("Empty String"); else if (t_str == NULL) printf("NULL String"); else { itoa(strlen(t_str), t_str, 1); printf(t_str); }*/ printf(rooms->doors->name); gameloop(rooms); printf("User Exited. Press any key to quit."); getchar(); /// END TEST ROUTINES // fclose(world); return 0; }
status_t submit_rx_acl(bt_usb_dev* bdev) { size_t size = max_c(HCI_MAX_FRAME_SIZE, bdev->max_packet_size_bulk_in); void* buf = alloc_room(&bdev->aclRoom, size); status_t status; if (buf == NULL) return ENOMEM; status = usb->queue_bulk(bdev->bulk_in_ep->handle, buf, size, acl_rx_complete, bdev); if (status != B_OK) { reuse_room(&bdev->aclRoom, buf); // reuse allocated bdev->stat.rejectedRX++; } else { bdev->stat.acceptedRX++; } return status; }
status_t submit_rx_event(bt_usb_dev* bdev) { size_t size = max_c(HCI_MAX_EVENT_SIZE, bdev->max_packet_size_intr_in); void* buf = alloc_room(&bdev->eventRoom, size); status_t status; if (buf == NULL) return ENOMEM; status = usb->queue_interrupt(bdev->intr_in_ep->handle, buf, size, event_complete, (void*)bdev); if (status != B_OK) { reuse_room(&bdev->eventRoom, buf); // reuse allocated one bdev->stat.rejectedRX++; } else { bdev->stat.acceptedRX++; debugf("Accepted RX Event %d\n", bdev->stat.acceptedRX); } return status; }