Skip to content
Snippets Groups Projects
flhack.cc 4.45 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdarg.h>
    #include <math.h>
    
    #include "flhack.H"
    
    int Fl::x = 0;
    int Fl::y = 0;
    int Fl::x_root = 0;
    int Fl::y_root = 0;
    long Fl::state = 0;
    long Fl::button = 0;
    char Fl::keys[256];
    FL_CB_FUNC Fl::cb = NULL;
    void *Fl::cb_data = NULL;
    
    Fl::Fl(void)
    {
        x = 0;
        y = 0;
        x_root = 0;
        y_root = 0;
        state = 0;
        strcpy(keys,"");
    
        cb = NULL;
        cb_data = NULL;
    }
    
    Fl::~Fl(void)
    {
    }
    
    int Fl::event_x(void)
    {
        return x;
    }
    
    int Fl::event_y(void)
    {
        return y;
    }
    
    int Fl::event_x_root(void)
    {
        return x;
    }
    
    int Fl::event_y_root(void)
    {
        return y;
    }
    
    int Fl::check(void)
    {
        return 0;
    }
    
    unsigned int Fl::event_state(unsigned long _state)
    {
        return ((state & _state) != 0);
    }
    
    unsigned int Fl::event_button(void)
    {
        return button;
    }
    
    char *Fl::event_text(void)
    {
        return keys;
    }
    
    void Fl::add_idle(FL_CB_FUNC _cb,void *_cb_data)
    {
        cb = _cb;
        cb_data = _cb_data;
    }
    
    void Fl::remove_idle(FL_CB_FUNC _cb,void *_cb_data)
    {
        cb = NULL;
        cb_data = NULL;
    }
    
    void Fl::idle(void)
    {
        if (cb)
            cb(cb_data);
    }
    
    void Fl::add_timeout( double, FL_CB_FUNC, void * )
    {
    }
    
    void Fl::remove_timeout( FL_CB_FUNC, void * )
    {
    }
    
    void Fl::nextEvent(void)
    {
        state = 0;
    }
    
    void Fl::warning(const char *_message, ...)
    {
        char message[256];
        va_list args;
        va_start(args,_message);
    
        vsprintf(message,_message,args);
    }
    
    Fl_Gl_Window::Fl_Gl_Window(int _x,int _y,int _w,int _h,const char *_label)
    {
        posx = _x;
        posy = _y;
        width = _w;
        height = _h;
        mode_flag = (Fl_Mode)(FL_RGB8|FL_DOUBLE|FL_ALPHA|FL_DEPTH);
        valid_flag = 0;
        swap_func = NULL;
    }
    
    void Fl_Gl_Window::resize(int _x,int _y,int _w,int _h)
    {
        posx = _x;
        posy = _y;
        width = _w;
        height = _h;
    }
    
    void Fl_Gl_Window::position(int _x,int _y)
    {
        posx = _x;
        posy = _y;
    }
    
    void Fl_Gl_Window::size(int _w,int _h)
    {
        width = _w;
        height = _h;
    }
    
    int Fl_Gl_Window::x_root(void)
    {
        return 0;
    }
    
    int Fl_Gl_Window::y_root(void)
    {
        return 0;
    }
    
    int Fl_Gl_Window::x(void)
    {
        return posx;
    }
    
    int Fl_Gl_Window::y(void)
    {
        return posy;
    }
    
    int Fl_Gl_Window::w(void)
    {
        return width;
    }
    
    int Fl_Gl_Window::h(void)
    {
        return height;
    }
    
    void Fl_Gl_Window::mode(int _mode)
    {
        mode_flag = (Fl_Mode)_mode;
    }
    
    void Fl_Gl_Window::mode(int *_mode)
    {
        mode_flag = (Fl_Mode)_mode[0];
    }
    
    int Fl_Gl_Window::mode(void)
    {
        return mode_flag;
    }
    
    void Fl_Gl_Window::valid(int _valid)
    {
        valid_flag = _valid;
    }
    
    int Fl_Gl_Window::valid(void)
    {
        return valid_flag;
    }
    
    void Fl_Gl_Window::set_swap_func(FL_SWAP_FUNC _swap_func)
    {
        swap_func = _swap_func;
    }
    
    extern "C"
    {
    int fl_vsnprintf(char* str, size_t size, const char* fmt, va_list ap)
    {
        const char* e = str+size-1;
        char* p = str;
        char copy[20];
        char* copy_p;
        char sprintf_out[100];
    
        while (*fmt && p < e) {
            if (*fmt != '%') {
                *p++ = *fmt++;
            } else {
                fmt++;
                copy[0] = '%';
                for (copy_p = copy+1; copy_p < copy+19;) {
                    switch ((*copy_p++ = *fmt++)) {
                    case 0:
                    fmt--; goto CONTINUE;
                    case '%':
                    *p++ = '%'; goto CONTINUE;
                    case 'c':
                    *p++ = va_arg(ap, int);
                    goto CONTINUE;
                    case 'd':
                    case 'i':
                    case 'o':
                    case 'u':
                    case 'x':
                    case 'X':
                    *copy_p = 0;
                    sprintf(sprintf_out, copy, va_arg(ap, int));
                    copy_p = sprintf_out;
                    goto DUP;
                    case 'e':
                    case 'E':
                    case 'f':
                    case 'g':
                    *copy_p = 0;
                    sprintf(sprintf_out, copy, va_arg(ap, double));
                    copy_p = sprintf_out;
                    goto DUP;
                    case 'p':
                    *copy_p = 0;
                    sprintf(sprintf_out, copy, va_arg(ap, void*));
                    copy_p = sprintf_out;
                    goto DUP;
                    case 'n':
                    *(va_arg(ap, int*)) = p-str;
                    goto CONTINUE;
                    case 's':
                    copy_p = va_arg(ap, char*);
                    if (!copy_p) copy_p = "NULL";
                    DUP:
                    while (*copy_p && p < e) *p++ = *copy_p++;
                    goto CONTINUE;
                    }
                }
            }
            CONTINUE:;
        }
        *p = 0;
        if (*fmt) return -1;
        return p-str;
    }
    };