Example #1
0
void            pager_fn(player * p, char *str)
{
   ed_info        *e;
   e = p->edit_info;
   if((int)strlen(str)<2) {
     switch (tolower(*str))
     {
       case 0:
    	 /* player hit return - next page */
    	 forward_page(p, e);
    	 break;
       case 'p':
    	 back_page(p, e);
    	 break;
       case 'n':
    	 forward_page(p, e);
    	 break;
       case 'l':
         last_page(p, e);
         break;
       case 'f':
    	 e->current = e->buffer;
    	 e->size = 0;
    	 break;
       case '?':
         help_page(p);
         p->input_to_fn = pager_help_pause;
         return;
       case 'q':
    	 quit_pager(p, e);
    	 return;
       case 'r':
         /* redraw the screen */
         break;
       default:
         /* this is what happens if it doesnt recognise the command */
         p->input_to_fn = 0;
         input_for_one(p);
         p->input_to_fn = pager_fn;
         draw_page(p, e->current, 0);
         return;
     }
     if (!draw_page(p, e->current, 1))
       quit_pager(p, e);
   }
   else {
     p->input_to_fn = 0;
     input_for_one(p);
     p->input_to_fn = pager_fn;
     draw_page(p, e->current, 0);
   }
}
Example #2
0
void *block_alloc(struct block *block, int size)
{
    assert(size && size <= page_size);
    void *page = last_page(block);
    int *page_offset = get_offset_ptr(page);
    if (page_size - *page_offset < size)
        if (!(page = add_page(block)))
            return NULL;
    page_offset = get_offset_ptr(page);
    void *ptr = (void *)((uintptr_t)page + *page_offset);
    *page_offset += size;
    return ptr;
}