1 | #ifndef NUMINPUT_H |
---|
2 | #define NUMINPUT_H |
---|
3 | |
---|
4 | char* 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 |
---|