OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [tk/] [win/] [tkWinWindow.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/*
2
 * tkWinWindow.c --
3
 *
4
 *      Xlib emulation routines for Windows related to creating,
5
 *      displaying and destroying windows.
6
 *
7
 * Copyright (c) 1995 Sun Microsystems, Inc.
8
 *
9
 * See the file "license.terms" for information on usage and redistribution
10
 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
11
 *
12
 * RCS: @(#) $Id: tkWinWindow.c,v 1.1.1.1 2002-01-16 10:26:03 markom Exp $
13
 */
14
 
15
#include "tkWinInt.h"
16
 
17
/*
18
 * The windowTable maps from HWND to Tk_Window handles.
19
 */
20
 
21
static Tcl_HashTable windowTable;
22
 
23
/*
24
 * Have statics in this module been initialized?
25
 */
26
 
27
static int initialized = 0;
28
 
29
/*
30
 * Forward declarations for procedures defined in this file:
31
 */
32
 
33
static void             NotifyVisibility _ANSI_ARGS_((XEvent *eventPtr,
34
                            TkWindow *winPtr));
35
static void             StackWindow _ANSI_ARGS_((Window w, Window sibling,
36
                            int stack_mode));
37
 
38
/*
39
 *----------------------------------------------------------------------
40
 *
41
 * Tk_AttachHWND --
42
 *
43
 *      This function binds an HWND and a reflection procedure to
44
 *      the specified Tk_Window.
45
 *
46
 * Results:
47
 *      Returns an X Window that encapsulates the HWND.
48
 *
49
 * Side effects:
50
 *      May allocate a new X Window.  Also enters the HWND into the
51
 *      global window table.
52
 *
53
 *----------------------------------------------------------------------
54
 */
55
 
56
Window
57
Tk_AttachHWND(tkwin, hwnd)
58
    Tk_Window tkwin;
59
    HWND hwnd;
60
{
61
    int new;
62
    Tcl_HashEntry *entryPtr;
63
    TkWinDrawable *twdPtr = (TkWinDrawable *) Tk_WindowId(tkwin);
64
 
65
    if (!initialized) {
66
        Tcl_InitHashTable(&windowTable, TCL_ONE_WORD_KEYS);
67
        initialized = 1;
68
    }
69
 
70
    /*
71
     * Allocate a new drawable if necessary.  Otherwise, remove the
72
     * previous HWND from from the window table.
73
     */
74
 
75
    if (twdPtr == NULL) {
76
        twdPtr = (TkWinDrawable*) ckalloc(sizeof(TkWinDrawable));
77
        twdPtr->type = TWD_WINDOW;
78
        twdPtr->window.winPtr = (TkWindow *) tkwin;
79
    } else if (twdPtr->window.handle != NULL) {
80
        entryPtr = Tcl_FindHashEntry(&windowTable,
81
                (char *)twdPtr->window.handle);
82
        Tcl_DeleteHashEntry(entryPtr);
83
    }
84
 
85
    /*
86
     * Insert the new HWND into the window table.
87
     */
88
 
89
    twdPtr->window.handle = hwnd;
90
    entryPtr = Tcl_CreateHashEntry(&windowTable, (char *)hwnd, &new);
91
    Tcl_SetHashValue(entryPtr, (ClientData)tkwin);
92
 
93
    return (Window)twdPtr;
94
}
95
 
96
/*
97
 *----------------------------------------------------------------------
98
 *
99
 * Tk_HWNDToWindow --
100
 *
101
 *      This function retrieves a Tk_Window from the window table
102
 *      given an HWND.
103
 *
104
 * Results:
105
 *      Returns the matching Tk_Window.
106
 *
107
 * Side effects:
108
 *      None.
109
 *
110
 *----------------------------------------------------------------------
111
 */
112
 
113
Tk_Window
114
Tk_HWNDToWindow(hwnd)
115
    HWND hwnd;
116
{
117
    Tcl_HashEntry *entryPtr;
118
    if (!initialized) {
119
        Tcl_InitHashTable(&windowTable, TCL_ONE_WORD_KEYS);
120
        initialized = 1;
121
    }
122
    entryPtr = Tcl_FindHashEntry(&windowTable, (char*)hwnd);
123
    if (entryPtr != NULL) {
124
        return (Tk_Window) Tcl_GetHashValue(entryPtr);
125
    }
126
    return NULL;
127
}
128
 
129
/*
130
 *----------------------------------------------------------------------
131
 *
132
 * Tk_GetHWND --
133
 *
134
 *      This function extracts the HWND from an X Window.
135
 *
136
 * Results:
137
 *      Returns the HWND associated with the Window.
138
 *
139
 * Side effects:
140
 *      None.
141
 *
142
 *----------------------------------------------------------------------
143
 */
144
 
145
HWND
146
Tk_GetHWND(window)
147
    Window window;
148
{
149
    TkWinDrawable *twdPtr = (TkWinDrawable *) window;
150
    return twdPtr->window.handle;
151
}
152
 
153
/*
154
 *----------------------------------------------------------------------
155
 *
156
 * TkpPrintWindowId --
157
 *
158
 *      This routine stores the string representation of the
159
 *      platform dependent window handle for an X Window in the
160
 *      given buffer.
161
 *
162
 * Results:
163
 *      Returns the result in the specified buffer.
164
 *
165
 * Side effects:
166
 *      None.
167
 *
168
 *----------------------------------------------------------------------
169
 */
170
 
171
void
172
TkpPrintWindowId(buf, window)
173
    char *buf;                  /* Pointer to string large enough to hold
174
                                 * the hex representation of a pointer. */
175
    Window window;              /* Window to be printed into buffer. */
176
{
177
    HWND hwnd = (window) ? Tk_GetHWND(window) : 0;
178
    sprintf(buf, "0x%x", (unsigned int) hwnd);
179
}
180
 
181
/*
182
 *----------------------------------------------------------------------
183
 *
184
 * TkpScanWindowId --
185
 *
186
 *      Given a string which represents the platform dependent window
187
 *      handle, produce the X Window id for the window.
188
 *
189
 * Results:
190
 *      The return value is normally TCL_OK;  in this case *idPtr
191
 *      will be set to the X Window id equivalent to string.  If
192
 *      string is improperly formed then TCL_ERROR is returned and
193
 *      an error message will be left in interp->result.  If the
194
 *      number does not correspond to a Tk Window, then *idPtr will
195
 *      be set to None.
196
 *
197
 * Side effects:
198
 *      None.
199
 *
200
 *----------------------------------------------------------------------
201
 */
202
 
203
int
204
TkpScanWindowId(interp, string, idPtr)
205
    Tcl_Interp *interp;         /* Interpreter to use for error reporting. */
206
    char *string;               /* String containing a (possibly signed)
207
                                 * integer in a form acceptable to strtol. */
208
    int *idPtr;                 /* Place to store converted result. */
209
{
210
    int number;
211
    Tk_Window tkwin;
212
 
213
    if (Tcl_GetInt(interp, string, &number) != TCL_OK) {
214
        return TCL_ERROR;
215
    }
216
    tkwin = Tk_HWNDToWindow((HWND)number);
217
    if (tkwin) {
218
        *idPtr = Tk_WindowId(tkwin);
219
    } else {
220
        *idPtr = None;
221
    }
222
    return TCL_OK;
223
}
224
 
225
/*
226
 *----------------------------------------------------------------------
227
 *
228
 * TkpMakeWindow --
229
 *
230
 *      Creates a Windows window object based on the current attributes
231
 *      of the specified TkWindow.
232
 *
233
 * Results:
234
 *      Returns a pointer to a new TkWinDrawable cast to a Window.
235
 *
236
 * Side effects:
237
 *      Creates a new window.
238
 *
239
 *----------------------------------------------------------------------
240
 */
241
 
242
Window
243
TkpMakeWindow(winPtr, parent)
244
    TkWindow *winPtr;
245
    Window parent;
246
{
247
    HWND parentWin;
248
    int style;
249
    HWND hwnd;
250
 
251
    if (parent != None) {
252
        parentWin = Tk_GetHWND(parent);
253
        style = WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
254
    } else {
255
        parentWin = NULL;
256
        style = WS_POPUP | WS_CLIPCHILDREN;
257
    }
258
 
259
    /*
260
     * Create the window, then ensure that it is at the top of the
261
     * stacking order.
262
     */
263
 
264
    hwnd = CreateWindowEx(WS_EX_NOPARENTNOTIFY, TK_WIN_CHILD_CLASS_NAME, NULL,
265
            style, Tk_X(winPtr), Tk_Y(winPtr), Tk_Width(winPtr),
266
            Tk_Height(winPtr), parentWin, NULL, Tk_GetHINSTANCE(), NULL);
267
    SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
268
                    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
269
    return Tk_AttachHWND((Tk_Window)winPtr, hwnd);
270
}
271
 
272
/*
273
 *----------------------------------------------------------------------
274
 *
275
 * XDestroyWindow --
276
 *
277
 *      Destroys the given window.
278
 *
279
 * Results:
280
 *      None.
281
 *
282
 * Side effects:
283
 *      Sends the WM_DESTROY message to the window and then destroys
284
 *      it the Win32 resources associated with the window.
285
 *
286
 *----------------------------------------------------------------------
287
 */
288
 
289
void
290
XDestroyWindow(display, w)
291
    Display* display;
292
    Window w;
293
{
294
    Tcl_HashEntry *entryPtr;
295
    TkWinDrawable *twdPtr = (TkWinDrawable *)w;
296
    TkWindow *winPtr = TkWinGetWinPtr(w);
297
    HWND hwnd = Tk_GetHWND(w);
298
 
299
    display->request++;
300
 
301
    /*
302
     * Remove references to the window in the pointer module then
303
     * release the drawable.
304
     */
305
 
306
    TkPointerDeadWindow(winPtr);
307
 
308
    entryPtr = Tcl_FindHashEntry(&windowTable, (char*)hwnd);
309
    if (entryPtr != NULL) {
310
        Tcl_DeleteHashEntry(entryPtr);
311
    }
312
 
313
    ckfree((char *)twdPtr);
314
 
315
    /*
316
     * Don't bother destroying the window if we are going to destroy
317
     * the parent later.
318
     */
319
 
320
    if (hwnd != NULL && !(winPtr->flags & TK_DONT_DESTROY_WINDOW)) {
321
        DestroyWindow(hwnd);
322
    }
323
}
324
 
325
/*
326
 *----------------------------------------------------------------------
327
 *
328
 * XMapWindow --
329
 *
330
 *      Cause the given window to become visible.
331
 *
332
 * Results:
333
 *      None
334
 *
335
 * Side effects:
336
 *      Causes the window state to change, and generates a MapNotify
337
 *      event.
338
 *
339
 *----------------------------------------------------------------------
340
 */
341
 
342
void
343
XMapWindow(display, w)
344
    Display* display;
345
    Window w;
346
{
347
    XEvent event;
348
    TkWindow *parentPtr;
349
    TkWindow *winPtr = TkWinGetWinPtr(w);
350
 
351
    display->request++;
352
 
353
    ShowWindow(TkWinGetHWND(w), SW_SHOWNORMAL);
354
    winPtr->flags |= TK_MAPPED;
355
 
356
    /*
357
     * Check to see if this window is visible now.  If all of the parent
358
     * windows up to the first toplevel are mapped, then this window and
359
     * its mapped children have just become visible.
360
     */
361
 
362
    if (!(winPtr->flags & TK_TOP_LEVEL)) {
363
        for (parentPtr = winPtr->parentPtr; ;
364
                parentPtr = parentPtr->parentPtr) {
365
            if ((parentPtr == NULL) || !(parentPtr->flags & TK_MAPPED)) {
366
                return;
367
            }
368
            if (parentPtr->flags & TK_TOP_LEVEL) {
369
                break;
370
            }
371
        }
372
    } else {
373
        event.type = MapNotify;
374
        event.xmap.serial = display->request;
375
        event.xmap.send_event = False;
376
        event.xmap.display = display;
377
        event.xmap.event = winPtr->window;
378
        event.xmap.window = winPtr->window;
379
        event.xmap.override_redirect = winPtr->atts.override_redirect;
380
        Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
381
    }
382
 
383
    /*
384
     * Generate VisibilityNotify events for this window and its mapped
385
     * children.
386
     */
387
 
388
    event.type = VisibilityNotify;
389
    event.xvisibility.serial = display->request;
390
    event.xvisibility.send_event = False;
391
    event.xvisibility.display = display;
392
    event.xvisibility.window = winPtr->window;
393
    event.xvisibility.state = VisibilityUnobscured;
394
    NotifyVisibility(&event, winPtr);
395
}
396
 
397
/*
398
 *----------------------------------------------------------------------
399
 *
400
 * NotifyVisibility --
401
 *
402
 *      This function recursively notifies the mapped children of the
403
 *      specified window of a change in visibility.  Note that we don't
404
 *      properly report the visibility state, since Windows does not
405
 *      provide that info.  The eventPtr argument must point to an event
406
 *      that has been completely initialized except for the window slot.
407
 *
408
 * Results:
409
 *      None.
410
 *
411
 * Side effects:
412
 *      Generates lots of events.
413
 *
414
 *----------------------------------------------------------------------
415
 */
416
 
417
static void
418
NotifyVisibility(eventPtr, winPtr)
419
    XEvent *eventPtr;           /* Initialized VisibilityNotify event. */
420
    TkWindow *winPtr;           /* Window to notify. */
421
{
422
    if (winPtr->atts.event_mask & VisibilityChangeMask) {
423
        eventPtr->xvisibility.window = winPtr->window;
424
        Tk_QueueWindowEvent(eventPtr, TCL_QUEUE_TAIL);
425
    }
426
    for (winPtr = winPtr->childList; winPtr != NULL;
427
            winPtr = winPtr->nextPtr) {
428
        if (winPtr->flags & TK_MAPPED) {
429
            NotifyVisibility(eventPtr, winPtr);
430
        }
431
    }
432
}
433
 
434
/*
435
 *----------------------------------------------------------------------
436
 *
437
 * XUnmapWindow --
438
 *
439
 *      Cause the given window to become invisible.
440
 *
441
 * Results:
442
 *      None
443
 *
444
 * Side effects:
445
 *      Causes the window state to change, and generates an UnmapNotify
446
 *      event.
447
 *
448
 *----------------------------------------------------------------------
449
 */
450
 
451
void
452
XUnmapWindow(display, w)
453
    Display* display;
454
    Window w;
455
{
456
    XEvent event;
457
    TkWindow *winPtr = TkWinGetWinPtr(w);
458
 
459
    display->request++;
460
 
461
    /*
462
     * Bug fix: Don't short circuit this routine based on TK_MAPPED because
463
     * it will be cleared before XUnmapWindow is called.
464
     */
465
 
466
    ShowWindow(TkWinGetHWND(w), SW_HIDE);
467
    winPtr->flags &= ~TK_MAPPED;
468
 
469
    if (winPtr->flags & TK_TOP_LEVEL) {
470
        event.type = UnmapNotify;
471
        event.xunmap.serial = display->request;
472
        event.xunmap.send_event = False;
473
        event.xunmap.display = display;
474
        event.xunmap.event = winPtr->window;
475
        event.xunmap.window = winPtr->window;
476
        event.xunmap.from_configure = False;
477
        Tk_HandleEvent(&event);
478
    }
479
}
480
 
481
/*
482
 *----------------------------------------------------------------------
483
 *
484
 * XMoveResizeWindow --
485
 *
486
 *      Move and resize a window relative to its parent.
487
 *
488
 * Results:
489
 *      None.
490
 *
491
 * Side effects:
492
 *      Repositions and resizes the specified window.
493
 *
494
 *----------------------------------------------------------------------
495
 */
496
 
497
void
498
XMoveResizeWindow(display, w, x, y, width, height)
499
    Display* display;
500
    Window w;
501
    int x;                      /* Position relative to parent. */
502
    int y;
503
    unsigned int width;
504
    unsigned int height;
505
{
506
    display->request++;
507
    MoveWindow(TkWinGetHWND(w), x, y, width, height, TRUE);
508
}
509
 
510
/*
511
 *----------------------------------------------------------------------
512
 *
513
 * XMoveWindow --
514
 *
515
 *      Move a window relative to its parent.
516
 *
517
 * Results:
518
 *      None.
519
 *
520
 * Side effects:
521
 *      Repositions the specified window.
522
 *
523
 *----------------------------------------------------------------------
524
 */
525
 
526
void
527
XMoveWindow(display, w, x, y)
528
    Display* display;
529
    Window w;
530
    int x;
531
    int y;
532
{
533
    TkWindow *winPtr = TkWinGetWinPtr(w);
534
 
535
    display->request++;
536
 
537
    MoveWindow(TkWinGetHWND(w), x, y, winPtr->changes.width,
538
            winPtr->changes.height, TRUE);
539
}
540
 
541
/*
542
 *----------------------------------------------------------------------
543
 *
544
 * XResizeWindow --
545
 *
546
 *      Resize a window.
547
 *
548
 * Results:
549
 *      None.
550
 *
551
 * Side effects:
552
 *      Resizes the specified window.
553
 *
554
 *----------------------------------------------------------------------
555
 */
556
 
557
void
558
XResizeWindow(display, w, width, height)
559
    Display* display;
560
    Window w;
561
    unsigned int width;
562
    unsigned int height;
563
{
564
    TkWindow *winPtr = TkWinGetWinPtr(w);
565
 
566
    display->request++;
567
 
568
    MoveWindow(TkWinGetHWND(w), winPtr->changes.x, winPtr->changes.y, width,
569
            height, TRUE);
570
}
571
 
572
/*
573
 *----------------------------------------------------------------------
574
 *
575
 * XRaiseWindow --
576
 *
577
 *      Change the stacking order of a window.
578
 *
579
 * Results:
580
 *      None.
581
 *
582
 * Side effects:
583
 *      Changes the stacking order of the specified window.
584
 *
585
 *----------------------------------------------------------------------
586
 */
587
 
588
void
589
XRaiseWindow(display, w)
590
    Display* display;
591
    Window w;
592
{
593
    HWND window = TkWinGetHWND(w);
594
 
595
    display->request++;
596
    SetWindowPos(window, HWND_TOPMOST, 0, 0, 0, 0,
597
            SWP_NOMOVE | SWP_NOSIZE);
598
}
599
 
600
/*
601
 *----------------------------------------------------------------------
602
 *
603
 * XConfigureWindow --
604
 *
605
 *      Change the size, position, stacking, or border of the specified
606
 *      window.
607
 *
608
 * Results:
609
 *      None.
610
 *
611
 * Side effects:
612
 *      Changes the attributes of the specified window.  Note that we
613
 *      ignore the passed in values and use the values stored in the
614
 *      TkWindow data structure.
615
 *
616
 *----------------------------------------------------------------------
617
 */
618
 
619
void
620
XConfigureWindow(display, w, value_mask, values)
621
    Display* display;
622
    Window w;
623
    unsigned int value_mask;
624
    XWindowChanges* values;
625
{
626
    TkWindow *winPtr = TkWinGetWinPtr(w);
627
    HWND hwnd = TkWinGetHWND(w);
628
 
629
    display->request++;
630
 
631
    /*
632
     * Change the shape and/or position of the window.
633
     */
634
 
635
    if (value_mask & (CWX|CWY|CWWidth|CWHeight)) {
636
        MoveWindow(hwnd, winPtr->changes.x, winPtr->changes.y,
637
                winPtr->changes.width, winPtr->changes.height, TRUE);
638
    }
639
 
640
    /*
641
     * Change the stacking order of the window.
642
     */
643
 
644
    if (value_mask & CWStackMode) {
645
        HWND sibling;
646
        if ((value_mask & CWSibling) && (values->sibling != None)) {
647
            sibling = Tk_GetHWND(values->sibling);
648
        } else {
649
            sibling = NULL;
650
        }
651
        TkWinSetWindowPos(hwnd, sibling, values->stack_mode);
652
    }
653
}
654
 
655
/*
656
 *----------------------------------------------------------------------
657
 *
658
 * XClearWindow --
659
 *
660
 *      Clears the entire window to the current background color.
661
 *
662
 * Results:
663
 *      None.
664
 *
665
 * Side effects:
666
 *      Erases the current contents of the window.
667
 *
668
 *----------------------------------------------------------------------
669
 */
670
 
671
void
672
XClearWindow(display, w)
673
    Display* display;
674
    Window w;
675
{
676
    RECT rc;
677
    HBRUSH brush;
678
    HPALETTE oldPalette, palette;
679
    TkWindow *winPtr;
680
    HWND hwnd = TkWinGetHWND(w);
681
    HDC dc = GetDC(hwnd);
682
 
683
    palette = TkWinGetPalette(display->screens[0].cmap);
684
    oldPalette = SelectPalette(dc, palette, FALSE);
685
 
686
    display->request++;
687
 
688
    winPtr = TkWinGetWinPtr(w);
689
    brush = CreateSolidBrush(winPtr->atts.background_pixel);
690
    GetWindowRect(hwnd, &rc);
691
    rc.right = rc.right - rc.left;
692
    rc.bottom = rc.bottom - rc.top;
693
    rc.left = rc.top = 0;
694
    FillRect(dc, &rc, brush);
695
 
696
    DeleteObject(brush);
697
    SelectPalette(dc, oldPalette, TRUE);
698
    ReleaseDC(hwnd, dc);
699
}
700
 
701
/*
702
 *----------------------------------------------------------------------
703
 *
704
 * XChangeWindowAttributes --
705
 *
706
 *      This function is called when the attributes on a window are
707
 *      updated.  Since Tk maintains all of the window state, the only
708
 *      relevant value is the cursor.
709
 *
710
 * Results:
711
 *      None.
712
 *
713
 * Side effects:
714
 *      May cause the mouse position to be updated.
715
 *
716
 *----------------------------------------------------------------------
717
 */
718
 
719
void
720
XChangeWindowAttributes(display, w, valueMask, attributes)
721
    Display* display;
722
    Window w;
723
    unsigned long valueMask;
724
    XSetWindowAttributes* attributes;
725
{
726
    if (valueMask & CWCursor) {
727
        XDefineCursor(display, w, attributes->cursor);
728
    }
729
}
730
 
731
/*
732
 *----------------------------------------------------------------------
733
 *
734
 * TkWinSetWindowPos --
735
 *
736
 *      Adjust the stacking order of a window relative to a second
737
 *      window (or NULL).
738
 *
739
 * Results:
740
 *      None.
741
 *
742
 * Side effects:
743
 *      Moves the specified window in the stacking order.
744
 *
745
 *----------------------------------------------------------------------
746
 */
747
 
748
void
749
TkWinSetWindowPos(hwnd, siblingHwnd, pos)
750
    HWND hwnd;                  /* Window to restack. */
751
    HWND siblingHwnd;           /* Sibling window. */
752
    int pos;                    /* One of Above or Below. */
753
{
754
    HWND temp;
755
 
756
    /*
757
     * Since Windows does not support Above mode, we place the
758
     * specified window below the sibling and then swap them.
759
     */
760
 
761
    if (siblingHwnd) {
762
        if (pos == Above) {
763
            SetWindowPos(hwnd, siblingHwnd, 0, 0, 0, 0,
764
                    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
765
            temp = hwnd;
766
            hwnd = siblingHwnd;
767
            siblingHwnd = temp;
768
        }
769
    } else {
770
        siblingHwnd = (pos == Above) ? HWND_TOP : HWND_BOTTOM;
771
    }
772
 
773
    SetWindowPos(hwnd, siblingHwnd, 0, 0, 0, 0,
774
            SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
775
}
776
 
777
/*
778
 *----------------------------------------------------------------------
779
 *
780
 * TkpWindowWasRecentlyDeleted --
781
 *
782
 *      Determines whether we know if the window given as argument was
783
 *      recently deleted. Called by the generic code error handler to
784
 *      handle BadWindow events.
785
 *
786
 * Results:
787
 *      Always 0. We do not keep this information on Windows.
788
 *
789
 * Side effects:
790
 *      None.
791
 *
792
 *----------------------------------------------------------------------
793
 */
794
 
795
int
796
TkpWindowWasRecentlyDeleted(win, dispPtr)
797
    Window win;
798
    TkDisplay *dispPtr;
799
{
800
    return 0;
801
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.