comparison os2/dw.c @ 1407:2f10480d2c8a

More Watcom build fixes from abwillis and a change to allow VAC30 to work again.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 30 Nov 2011 06:00:29 +0000
parents b7aaf06e9367
children 93eb987c05cf
comparison
equal deleted inserted replaced
1406:1d07d7ff07b9 1407:2f10480d2c8a
46 46
47 #ifndef MAX_PATH 47 #ifndef MAX_PATH
48 #define MAX_PATH 260 48 #define MAX_PATH 260
49 #endif 49 #endif
50 50
51 #ifdef __IBMC__
52 #define API_FUNC * API
53 #else
54 #define API_FUNC API *
55 #endif
56
51 MRESULT EXPENTRY _run_event(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2); 57 MRESULT EXPENTRY _run_event(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2);
52 MRESULT EXPENTRY _wndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2); 58 MRESULT EXPENTRY _wndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2);
53 MRESULT EXPENTRY _scrollwndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2); 59 MRESULT EXPENTRY _scrollwndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2);
54 void _do_resize(Box *thisbox, int x, int y); 60 void _do_resize(Box *thisbox, int x, int y);
55 void _handle_splitbar_resize(HWND hwnd, float percent, int type, int x, int y); 61 void _handle_splitbar_resize(HWND hwnd, float percent, int type, int x, int y);
56 int _load_bitmap_file(char *file, HWND handle, HBITMAP *hbm, HDC *hdc, HPS *hps, unsigned long *width, unsigned long *height); 62 int _load_bitmap_file(char *file, HWND handle, HBITMAP *hbm, HDC *hdc, HPS *hps, unsigned long *width, unsigned long *height);
57 void _dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname); 63 void _dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname);
58 void _dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname); 64 void _dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname);
59 void _free_menu_data(HWND menu); 65 void _free_menu_data(HWND menu);
60 ULONG (_System * _PmPrintfString)(char *String) = 0; 66 ULONG (API_FUNC _PmPrintfString)(char *String) = 0;
61 67
62 char ClassName[] = "dynamicwindows"; 68 char ClassName[] = "dynamicwindows";
63 char SplitbarClassName[] = "dwsplitbar"; 69 char SplitbarClassName[] = "dwsplitbar";
64 char ScrollClassName[] = "dwscroll"; 70 char ScrollClassName[] = "dwscroll";
65 char *DefaultFont = "9.WarpSans"; 71 char *DefaultFont = "9.WarpSans";
2246 /* Find any callbacks for this function */ 2252 /* Find any callbacks for this function */
2247 while(tmp) 2253 while(tmp)
2248 { 2254 {
2249 if(tmp->message == WM_COMMAND) 2255 if(tmp->message == WM_COMMAND)
2250 { 2256 {
2251 int (API * clickfunc)(HWND, void *) = (int (API *)(HWND, void *))tmp->signalfunction; 2257 int (API_FUNC clickfunc)(HWND, void *) = (int (API_FUNC)(HWND, void *))tmp->signalfunction;
2252 2258
2253 /* Make sure it's the right window, and the right ID */ 2259 /* Make sure it's the right window, and the right ID */
2254 if(tmp->window == handle) 2260 if(tmp->window == handle)
2255 { 2261 {
2256 clickfunc(tmp->window, tmp->data); 2262 clickfunc(tmp->window, tmp->data);
2785 { 2791 {
2786 case WM_SETFOCUS: 2792 case WM_SETFOCUS:
2787 { 2793 {
2788 if((mp2 && tmp->message == WM_SETFOCUS) || (!mp2 && tmp->message == WM_USER+1)) 2794 if((mp2 && tmp->message == WM_SETFOCUS) || (!mp2 && tmp->message == WM_USER+1))
2789 { 2795 {
2790 int (API * setfocusfunc)(HWND, void *) = (int (API *)(HWND, void *))tmp->signalfunction; 2796 int (API_FUNC setfocusfunc)(HWND, void *) = (int (API_FUNC)(HWND, void *))tmp->signalfunction;
2791 2797
2792 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) 2798 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd)
2793 { 2799 {
2794 result = setfocusfunc(tmp->window, tmp->data); 2800 result = setfocusfunc(tmp->window, tmp->data);
2795 tmp = NULL; 2801 tmp = NULL;
2797 } 2803 }
2798 } 2804 }
2799 break; 2805 break;
2800 case WM_TIMER: 2806 case WM_TIMER:
2801 { 2807 {
2802 int (API * timerfunc)(void *) = (int (API *)(void *))tmp->signalfunction; 2808 int (API_FUNC timerfunc)(void *) = (int (API_FUNC)(void *))tmp->signalfunction;
2803 if(tmp->id == (int)mp1) 2809 if(tmp->id == (int)mp1)
2804 { 2810 {
2805 if(!timerfunc(tmp->data)) 2811 if(!timerfunc(tmp->data))
2806 dw_timer_disconnect(tmp->id); 2812 dw_timer_disconnect(tmp->id);
2807 tmp = NULL; 2813 tmp = NULL;
2809 result = 0; 2815 result = 0;
2810 } 2816 }
2811 break; 2817 break;
2812 case WM_SIZE: 2818 case WM_SIZE:
2813 { 2819 {
2814 int (API * sizefunc)(HWND, int, int, void *) = (int (API *)(HWND, int, int, void *))tmp->signalfunction; 2820 int (API_FUNC sizefunc)(HWND, int, int, void *) = (int (API_FUNC)(HWND, int, int, void *))tmp->signalfunction;
2815 2821
2816 if((hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) && SHORT1FROMMP(mp2) && SHORT2FROMMP(mp2)) 2822 if((hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) && SHORT1FROMMP(mp2) && SHORT2FROMMP(mp2))
2817 { 2823 {
2818 result = sizefunc(tmp->window, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2), tmp->data); 2824 result = sizefunc(tmp->window, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2), tmp->data);
2819 tmp = NULL; 2825 tmp = NULL;
2821 } 2827 }
2822 break; 2828 break;
2823 case WM_BUTTON1DOWN: 2829 case WM_BUTTON1DOWN:
2824 { 2830 {
2825 POINTS pts = (*((POINTS*)&mp1)); 2831 POINTS pts = (*((POINTS*)&mp1));
2826 int (API * buttonfunc)(HWND, int, int, int, void *) = (int (API *)(HWND, int, int, int, void *))tmp->signalfunction; 2832 int (API_FUNC buttonfunc)(HWND, int, int, int, void *) = (int (API_FUNC)(HWND, int, int, int, void *))tmp->signalfunction;
2827 2833
2828 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) 2834 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window)
2829 { 2835 {
2830 int button = 0; 2836 int button = 0;
2831 2837
2848 } 2854 }
2849 break; 2855 break;
2850 case WM_BUTTON1UP: 2856 case WM_BUTTON1UP:
2851 { 2857 {
2852 POINTS pts = (*((POINTS*)&mp1)); 2858 POINTS pts = (*((POINTS*)&mp1));
2853 int (API * buttonfunc)(HWND, int, int, int, void *) = (int (API *)(HWND, int, int, int, void *))tmp->signalfunction; 2859 int (API_FUNC buttonfunc)(HWND, int, int, int, void *) = (int (API_FUNC)(HWND, int, int, int, void *))tmp->signalfunction;
2854 2860
2855 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) 2861 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window)
2856 { 2862 {
2857 int button = 0; 2863 int button = 0;
2858 2864
2874 } 2880 }
2875 } 2881 }
2876 break; 2882 break;
2877 case WM_MOUSEMOVE: 2883 case WM_MOUSEMOVE:
2878 { 2884 {
2879 int (API * motionfunc)(HWND, int, int, int, void *) = (int (API *)(HWND, int, int, int, void *))tmp->signalfunction; 2885 int (API_FUNC motionfunc)(HWND, int, int, int, void *) = (int (API_FUNC)(HWND, int, int, int, void *))tmp->signalfunction;
2880 2886
2881 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) 2887 if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window)
2882 { 2888 {
2883 int keys = 0; 2889 int keys = 0;
2884 SHORT x = SHORT1FROMMP(mp1), y = SHORT2FROMMP(mp1); 2890 SHORT x = SHORT1FROMMP(mp1), y = SHORT2FROMMP(mp1);
2895 } 2901 }
2896 } 2902 }
2897 break; 2903 break;
2898 case WM_CHAR: 2904 case WM_CHAR:
2899 { 2905 {
2900 int (API * keypressfunc)(HWND, char, int, int, void *) = (int (API *)(HWND, char, int, int, void *))tmp->signalfunction; 2906 int (API_FUNC keypressfunc)(HWND, char, int, int, void *) = (int (API_FUNC)(HWND, char, int, int, void *))tmp->signalfunction;
2901 2907
2902 if((hWnd == tmp->window || _toplevel_window(hWnd) == tmp->window) && !(SHORT1FROMMP(mp1) & KC_KEYUP)) 2908 if((hWnd == tmp->window || _toplevel_window(hWnd) == tmp->window) && !(SHORT1FROMMP(mp1) & KC_KEYUP))
2903 { 2909 {
2904 int vk; 2910 int vk;
2905 char ch = 0; 2911 char ch = 0;
2926 } 2932 }
2927 } 2933 }
2928 break; 2934 break;
2929 case WM_CLOSE: 2935 case WM_CLOSE:
2930 { 2936 {
2931 int (API * closefunc)(HWND, void *) = (int (API *)(HWND, void *))tmp->signalfunction; 2937 int (API_FUNC closefunc)(HWND, void *) = (int (API_FUNC)(HWND, void *))tmp->signalfunction;
2932 2938
2933 if(hWnd == tmp->window || hWnd == WinWindowFromID(tmp->window, FID_CLIENT)) 2939 if(hWnd == tmp->window || hWnd == WinWindowFromID(tmp->window, FID_CLIENT))
2934 { 2940 {
2935 result = closefunc(tmp->window, tmp->data); 2941 result = closefunc(tmp->window, tmp->data);
2936 if(result) 2942 if(result)
2941 break; 2947 break;
2942 case WM_PAINT: 2948 case WM_PAINT:
2943 { 2949 {
2944 HPS hps; 2950 HPS hps;
2945 DWExpose exp; 2951 DWExpose exp;
2946 int (API * exposefunc)(HWND, DWExpose *, void *) = (int (API *)(HWND, DWExpose *, void *))tmp->signalfunction; 2952 int (API_FUNC exposefunc)(HWND, DWExpose *, void *) = (int (API_FUNC)(HWND, DWExpose *, void *))tmp->signalfunction;
2947 RECTL rc; 2953 RECTL rc;
2948 2954
2949 if(hWnd == tmp->window) 2955 if(hWnd == tmp->window)
2950 { 2956 {
2951 int height = _get_height(hWnd); 2957 int height = _get_height(hWnd);
2960 } 2966 }
2961 } 2967 }
2962 break; 2968 break;
2963 case WM_COMMAND: 2969 case WM_COMMAND:
2964 { 2970 {
2965 int (API * clickfunc)(HWND, void *) = (int (API *)(HWND, void *))tmp->signalfunction; 2971 int (API_FUNC clickfunc)(HWND, void *) = (int (API_FUNC)(HWND, void *))tmp->signalfunction;
2966 ULONG command = COMMANDMSG(&msg)->cmd; 2972 ULONG command = COMMANDMSG(&msg)->cmd;
2967 2973
2968 if(tmp->id && command == tmp->id) 2974 if(tmp->id && command == tmp->id)
2969 { 2975 {
2970 HWND menuowner = _menu_owner(tmp->window); 2976 HWND menuowner = _menu_owner(tmp->window);
2995 3001
2996 switch(svar) 3002 switch(svar)
2997 { 3003 {
2998 case CN_ENTER: 3004 case CN_ENTER:
2999 { 3005 {
3000 int (API * containerselectfunc)(HWND, char *, void *) = (int (API *)(HWND, char *, void *))tmp->signalfunction; 3006 int (API_FUNC containerselectfunc)(HWND, char *, void *) = (int (API_FUNC)(HWND, char *, void *))tmp->signalfunction;
3001 char *text = NULL; 3007 char *text = NULL;
3002 3008
3003 if(mp2) 3009 if(mp2)
3004 { 3010 {
3005 PRECORDCORE pre; 3011 PRECORDCORE pre;
3016 } 3022 }
3017 } 3023 }
3018 break; 3024 break;
3019 case CN_EXPANDTREE: 3025 case CN_EXPANDTREE:
3020 { 3026 {
3021 int (API * treeexpandfunc)(HWND, HTREEITEM, void *) = (int (API *)(HWND, HTREEITEM, void *))tmp->signalfunction; 3027 int (API_FUNC treeexpandfunc)(HWND, HTREEITEM, void *) = (int (API_FUNC)(HWND, HTREEITEM, void *))tmp->signalfunction;
3022 3028
3023 if(tmp->window == notifyhwnd) 3029 if(tmp->window == notifyhwnd)
3024 { 3030 {
3025 result = treeexpandfunc(tmp->window, (HTREEITEM)mp2, tmp->data); 3031 result = treeexpandfunc(tmp->window, (HTREEITEM)mp2, tmp->data);
3026 tmp = NULL; 3032 tmp = NULL;
3027 } 3033 }
3028 } 3034 }
3029 break; 3035 break;
3030 case CN_CONTEXTMENU: 3036 case CN_CONTEXTMENU:
3031 { 3037 {
3032 int (API * containercontextfunc)(HWND, char *, int, int, void *, void *) = (int (API *)(HWND, char *, int, int, void *, void *))tmp->signalfunction; 3038 int (API_FUNC containercontextfunc)(HWND, char *, int, int, void *, void *) = (int (API_FUNC)(HWND, char *, int, int, void *, void *))tmp->signalfunction;
3033 char *text = NULL; 3039 char *text = NULL;
3034 void *user = NULL; 3040 void *user = NULL;
3035 LONG x,y; 3041 LONG x,y;
3036 3042
3037 if(mp2) 3043 if(mp2)
3092 { 3098 {
3093 PCNRITEM pci = (PCNRITEM)pre->pRecord; 3099 PCNRITEM pci = (PCNRITEM)pre->pRecord;
3094 3100
3095 if(pci && pre->fEmphasisMask & CRA_CURSORED && (pci->rc.flRecordAttr & CRA_CURSORED)) 3101 if(pci && pre->fEmphasisMask & CRA_CURSORED && (pci->rc.flRecordAttr & CRA_CURSORED))
3096 { 3102 {
3097 int (API * treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = (int (API *)(HWND, HTREEITEM, char *, void *, void *))tmp->signalfunction; 3103 int (API_FUNC treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = (int (API_FUNC)(HWND, HTREEITEM, char *, void *, void *))tmp->signalfunction;
3098 3104
3099 if(dw_window_get_data(tmp->window, "_dw_container")) 3105 if(dw_window_get_data(tmp->window, "_dw_container"))
3100 result = treeselectfunc(tmp->window, 0, (char *)pci->rc.pszIcon, tmp->data, 0); 3106 result = treeselectfunc(tmp->window, 0, (char *)pci->rc.pszIcon, tmp->data, 0);
3101 else 3107 else
3102 { 3108 {
3126 3132
3127 WinQueryClassName(tmp->window, 99, (PCH)classbuf); 3133 WinQueryClassName(tmp->window, 99, (PCH)classbuf);
3128 3134
3129 if(strncmp(classbuf, "#38", 4) == 0) 3135 if(strncmp(classbuf, "#38", 4) == 0)
3130 { 3136 {
3131 int (API * valuechangedfunc)(HWND, int, void *) = (int (API *)(HWND, int, void *))tmp->signalfunction; 3137 int (API_FUNC valuechangedfunc)(HWND, int, void *) = (int (API_FUNC)(HWND, int, void *))tmp->signalfunction;
3132 3138
3133 if(tmp->window == hWnd || tmp->window == notifyhwnd) 3139 if(tmp->window == hWnd || tmp->window == notifyhwnd)
3134 { 3140 {
3135 static int lastvalue = -1; 3141 static int lastvalue = -1;
3136 static HWND lasthwnd = NULLHANDLE; 3142 static HWND lasthwnd = NULLHANDLE;
3144 tmp = NULL; 3150 tmp = NULL;
3145 } 3151 }
3146 } 3152 }
3147 else 3153 else
3148 { 3154 {
3149 int (API * listboxselectfunc)(HWND, int, void *) = (int (API *)(HWND, int, void *))tmp->signalfunction; 3155 int (API_FUNC listboxselectfunc)(HWND, int, void *) = (int (API_FUNC)(HWND, int, void *))tmp->signalfunction;
3150 static int _recursing = 0; 3156 static int _recursing = 0;
3151 3157
3152 if(_recursing == 0 && (tmp->window == notifyhwnd || (!id && tmp->window == (HWND)mp2))) 3158 if(_recursing == 0 && (tmp->window == notifyhwnd || (!id && tmp->window == (HWND)mp2)))
3153 { 3159 {
3154 char buf1[500]; 3160 char buf1[500];
3182 } 3188 }
3183 } 3189 }
3184 break; 3190 break;
3185 case SLN_SLIDERTRACK: 3191 case SLN_SLIDERTRACK:
3186 { 3192 {
3187 int (API * valuechangedfunc)(HWND, int, void *) = (int (API *)(HWND, int, void *))tmp->signalfunction; 3193 int (API_FUNC valuechangedfunc)(HWND, int, void *) = (int (API_FUNC)(HWND, int, void *))tmp->signalfunction;
3188 3194
3189 if(origmsg == WM_CONTROL) 3195 if(origmsg == WM_CONTROL)
3190 { 3196 {
3191 /* Handle Slider control */ 3197 /* Handle Slider control */
3192 if(tmp->window == hWnd || tmp->window == notifyhwnd) 3198 if(tmp->window == hWnd || tmp->window == notifyhwnd)
3226 { 3232 {
3227 PAGESELECTNOTIFY *psn = (PAGESELECTNOTIFY *)mp2; 3233 PAGESELECTNOTIFY *psn = (PAGESELECTNOTIFY *)mp2;
3228 3234
3229 if(psn && tmp->window == psn->hwndBook) 3235 if(psn && tmp->window == psn->hwndBook)
3230 { 3236 {
3231 int (API * switchpagefunc)(HWND, unsigned long, void *) = (int (API *)(HWND, unsigned long, void *))tmp->signalfunction; 3237 int (API_FUNC switchpagefunc)(HWND, unsigned long, void *) = (int (API_FUNC)(HWND, unsigned long, void *))tmp->signalfunction;
3232 3238
3233 result = switchpagefunc(tmp->window, psn->ulPageIdNew, tmp->data); 3239 result = switchpagefunc(tmp->window, psn->ulPageIdNew, tmp->data);
3234 tmp = NULL; 3240 tmp = NULL;
3235 } 3241 }
3236 } 3242 }
3340 /* The main window procedure for Dynamic Windows, all the resizing code is done here. */ 3346 /* The main window procedure for Dynamic Windows, all the resizing code is done here. */
3341 MRESULT EXPENTRY _wndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) 3347 MRESULT EXPENTRY _wndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2)
3342 { 3348 {
3343 int result = -1; 3349 int result = -1;
3344 static int command_active = 0; 3350 static int command_active = 0;
3345 void (API * windowfunc)(PVOID) = 0L; 3351 void (API_FUNC windowfunc)(PVOID) = 0L;
3346 3352
3347 if(!command_active) 3353 if(!command_active)
3348 { 3354 {
3349 /* Make sure we don't end up in infinite recursion */ 3355 /* Make sure we don't end up in infinite recursion */
3350 command_active = 1; 3356 command_active = 1;
3490 return MRFROMSHORT(TRUE); 3496 return MRFROMSHORT(TRUE);
3491 } 3497 }
3492 } 3498 }
3493 return MRFROMSHORT(FALSE); 3499 return MRFROMSHORT(FALSE);
3494 case WM_USER: 3500 case WM_USER:
3495 windowfunc = (void (API *)(void *))mp1; 3501 windowfunc = (void (API_FUNC)(void *))mp1;
3496 3502
3497 if(windowfunc) 3503 if(windowfunc)
3498 windowfunc((void *)mp2); 3504 windowfunc((void *)mp2);
3499 break; 3505 break;
3500 case WM_CHAR: 3506 case WM_CHAR:
3897 } 3903 }
3898 break; 3904 break;
3899 case WM_USER: 3905 case WM_USER:
3900 { 3906 {
3901 SignalHandler *tmp = (SignalHandler *)mp1; 3907 SignalHandler *tmp = (SignalHandler *)mp1;
3902 int (API * clickfunc)(HWND, void *) = NULL; 3908 int (API_FUNC clickfunc)(HWND, void *) = NULL;
3903 3909
3904 if(tmp) 3910 if(tmp)
3905 { 3911 {
3906 clickfunc = (int (API *)(HWND, void *))tmp->signalfunction; 3912 clickfunc = (int (API_FUNC)(HWND, void *))tmp->signalfunction;
3907 3913
3908 clickfunc(tmp->window, tmp->data); 3914 clickfunc(tmp->window, tmp->data);
3909 } 3915 }
3910 } 3916 }
3911 break; 3917 break;
10099 */ 10105 */
10100 void _dwthreadstart(void *data) 10106 void _dwthreadstart(void *data)
10101 { 10107 {
10102 HAB thishab = WinInitialize(0); 10108 HAB thishab = WinInitialize(0);
10103 HMQ thishmq = WinCreateMsgQueue(dwhab, 0); 10109 HMQ thishmq = WinCreateMsgQueue(dwhab, 0);
10104 void (API * threadfunc)(void *) = NULL; 10110 void (API_FUNC threadfunc)(void *) = NULL;
10105 void **tmp = (void **)data; 10111 void **tmp = (void **)data;
10106 10112
10107 threadfunc = (void (API *)(void *))tmp[0]; 10113 threadfunc = (void (API_FUNC)(void *))tmp[0];
10108 threadfunc(tmp[1]); 10114 threadfunc(tmp[1]);
10109 10115
10110 free(tmp); 10116 free(tmp);
10111 10117
10112 WinDestroyMsgQueue(thishmq); 10118 WinDestroyMsgQueue(thishmq);