source: titan/titan/numinput.h @ 30678

Last change on this file since 30678 was 27680, checked in by obi, 10 years ago

fix

File size: 1.9 KB
Line 
1#ifndef NUMINPUT_H
2#define NUMINPUT_H
3
4char* numinput(char* title, char* num, char* mask, int isip)
5{
6        int rcret = -1, fromthread = 0, height = 0;
7        struct skin* numinput = getscreen("numinput");
8        struct skin* input = getscreennode(numinput, "input");
9        struct skin* framebuffer = getscreen("framebuffer");
10        char* ret = NULL, *bg = NULL;
11        char* numtmp = NULL;
12
13        if(pthread_self() != status.mainthread)
14                fromthread = 1;
15
16        changetitle(numinput, title);
17        height = numinput->height;
18        if(title != NULL)
19                numinput->height += numinput->fontsize + 6 + (numinput->bordersize * 2);
20
21        if(isip == 1)
22                numtmp = fixip(num, 0);
23        else
24                numtmp = ostrcat(num, NULL, 0, 0);
25
26        changemask(input, mask);
27        changeinput(input, numtmp);
28        free(numtmp); numtmp = NULL;
29
30        if(fromthread == 1)
31        {
32                delrc(getrcconfigint("rcvolup", NULL), NULL, NULL);
33                delrc(getrcconfigint("rcvoldown", NULL), NULL, NULL);
34                delrc(getrcconfigint("rcmute", NULL), NULL, NULL);
35                m_lock(&status.drawingmutex, 0);
36                m_lock(&status.rcmutex, 10);
37                setnodeattr(numinput, framebuffer, 2);
38                status.rcowner = numinput;
39                bg = savescreen(numinput);
40                drawscreen(numinput, 0, 2);
41        }
42        else
43                drawscreen(numinput, 0, 0);
44        addscreenrc(numinput, input);
45
46        while(1)
47        {
48                rcret = waitrc(numinput, 0, 0);
49                if(rcret == getrcconfigint("rcexit", NULL)) break;
50                if(rcret == getrcconfigint("rcok", NULL))
51                {
52                        ret = ostrcat(input->input, NULL, 0, 0);
53                        break;
54                }
55        }
56
57        delownerrc(numinput);
58
59        if(fromthread == 1)
60        {
61                clearscreennolock(numinput);
62                restorescreen(bg, numinput);
63                blitfb(0);
64                sleep(1);
65                status.rcowner = NULL;
66                m_unlock(&status.rcmutex, 3);
67                m_unlock(&status.drawingmutex, 0);
68                addrc(getrcconfigint("rcvolup", NULL), screenvolumeup, NULL, NULL);
69                addrc(getrcconfigint("rcvoldown", NULL), screenvolumedown, NULL, NULL);
70                addrc(getrcconfigint("rcmute", NULL), screenmute, NULL, NULL);
71        }
72        else
73        {
74                clearscreen(numinput);
75                drawscreen(skin, 0, 0);
76        }
77
78        numinput->height = height;
79        return ret;
80}
81
82#endif
Note: See TracBrowser for help on using the repository browser.