Artifact
c102ec574f10efe8711167f1f2856e42e0d88dca:
0000: 23 6c 61 6e 67 20 72 61 63 6b 65 74 0a 28 72 65 #lang racket.(re
0010: 71 75 69 72 65 0a 20 66 66 69 2f 75 6e 73 61 66 quire. ffi/unsaf
0020: 65 0a 20 22 62 61 73 65 2e 72 6b 74 22 29 0a 0a e. "base.rkt")..
0030: 28 64 65 66 69 6e 65 20 6c 69 62 63 64 2d 6e 61 (define libcd-na
0040: 74 69 76 65 0a 20 20 28 63 61 73 65 20 28 73 79 tive. (case (sy
0050: 73 74 65 6d 2d 74 79 70 65 20 27 6f 73 29 0a 20 stem-type 'os).
0060: 20 20 20 5b 28 75 6e 69 78 20 6d 61 63 6f 73 78 [(unix macosx
0070: 29 0a 20 20 20 20 20 28 66 66 69 2d 6c 69 62 20 ). (ffi-lib
0080: 22 6c 69 62 63 64 78 31 31 22 29 5d 0a 20 20 20 "libcdx11")].
0090: 20 5b 28 77 69 6e 64 6f 77 73 29 0a 20 20 20 20 [(windows).
00a0: 20 28 66 66 69 2d 6c 69 62 20 22 63 64 22 29 5d (ffi-lib "cd")]
00b0: 0a 20 20 20 20 5b 65 6c 73 65 0a 20 20 20 20 20 . [else.
00c0: 28 66 66 69 2d 6c 69 62 20 22 6c 69 62 63 64 22 (ffi-lib "libcd"
00d0: 29 5d 29 29 0a 0a 28 64 65 66 69 6e 65 20 6c 69 )]))..(define li
00e0: 62 63 64 2d 63 6f 6e 74 65 78 74 2b 0a 20 20 28 bcd-context+. (
00f0: 63 61 73 65 20 28 73 79 73 74 65 6d 2d 74 79 70 case (system-typ
0100: 65 20 27 6f 73 29 0a 20 20 20 20 5b 28 77 69 6e e 'os). [(win
0110: 64 6f 77 73 29 0a 20 20 20 20 20 28 66 66 69 2d dows). (ffi-
0120: 6c 69 62 20 22 63 64 63 6f 6e 74 65 78 74 70 6c lib "cdcontextpl
0130: 75 73 22 29 5d 0a 20 20 20 20 5b 65 6c 73 65 0a us")]. [else.
0140: 20 20 20 20 20 28 66 66 69 2d 6c 69 62 20 22 6c (ffi-lib "l
0150: 69 62 63 64 63 6f 6e 74 65 78 74 70 6c 75 73 22 ibcdcontextplus"
0160: 29 5d 29 29 0a 0a 3b 3b 20 7b 7b 7b 20 43 6f 6e )]))..;; {{{ Con
0170: 74 65 78 74 20 74 79 70 65 73 0a 0a 28 64 65 66 text types..(def
0180: 69 6e 65 20 63 6f 6e 74 65 78 74 3a 6e 61 74 69 ine context:nati
0190: 76 65 2d 77 69 6e 64 6f 77 0a 20 20 28 28 67 65 ve-window. ((ge
01a0: 74 2d 66 66 69 2d 6f 62 6a 20 22 63 64 43 6f 6e t-ffi-obj "cdCon
01b0: 74 65 78 74 4e 61 74 69 76 65 57 69 6e 64 6f 77 textNativeWindow
01c0: 22 20 6c 69 62 63 64 2d 6e 61 74 69 76 65 20 28 " libcd-native (
01d0: 5f 66 75 6e 20 2d 3e 20 5b 63 6f 6e 74 65 78 74 _fun -> [context
01e0: 20 3a 20 5f 63 6f 6e 74 65 78 74 5d 29 29 29 29 : _context]))))
01f0: 0a 0a 28 70 72 6f 76 69 64 65 0a 20 63 6f 6e 74 ..(provide. cont
0200: 65 78 74 3a 6e 61 74 69 76 65 2d 77 69 6e 64 6f ext:native-windo
0210: 77 29 0a 0a 3b 3b 20 7d 7d 7d 0a 0a 3b 3b 20 7b w)..;; }}}..;; {
0220: 7b 7b 20 41 75 78 69 6c 69 61 72 79 20 66 75 6e {{ Auxiliary fun
0230: 63 74 69 6f 6e 73 0a 0a 28 64 65 66 69 6e 65 20 ctions..(define
0240: 73 63 72 65 65 6e 2d 73 69 7a 65 0a 20 20 28 67 screen-size. (g
0250: 65 74 2d 66 66 69 2d 6f 62 6a 0a 20 20 20 22 63 et-ffi-obj. "c
0260: 64 47 65 74 53 63 72 65 65 6e 53 69 7a 65 22 20 dGetScreenSize"
0270: 6c 69 62 63 64 2d 6e 61 74 69 76 65 0a 20 20 20 libcd-native.
0280: 28 5f 66 75 6e 20 5b 77 69 64 74 68 2f 70 78 20 (_fun [width/px
0290: 3a 20 28 5f 70 74 72 20 6f 20 5f 69 6e 74 29 5d : (_ptr o _int)]
02a0: 20 5b 68 65 69 67 68 74 2f 70 78 20 3a 20 28 5f [height/px : (_
02b0: 70 74 72 20 6f 20 5f 69 6e 74 29 5d 0a 20 20 20 ptr o _int)].
02c0: 20 20 20 20 20 20 5b 77 69 64 74 68 2f 6d 6d 20 [width/mm
02d0: 3a 20 28 5f 70 74 72 20 6f 20 5f 64 6f 75 62 6c : (_ptr o _doubl
02e0: 65 29 5d 20 5b 68 65 69 67 68 74 2f 6d 6d 20 3a e)] [height/mm :
02f0: 20 28 5f 70 74 72 20 6f 20 5f 64 6f 75 62 6c 65 (_ptr o _double
0300: 29 5d 0a 20 20 20 20 20 20 20 20 20 2d 3e 20 5f )]. -> _
0310: 76 6f 69 64 0a 20 20 20 20 20 20 20 20 20 2d 3e void. ->
0320: 20 28 76 61 6c 75 65 73 0a 20 20 20 20 20 20 20 (values.
0330: 20 20 20 20 20 20 77 69 64 74 68 2f 70 78 20 68 width/px h
0340: 65 69 67 68 74 2f 70 78 0a 20 20 20 20 20 20 20 eight/px.
0350: 20 20 20 20 20 20 77 69 64 74 68 2f 6d 6d 20 68 width/mm h
0360: 65 69 67 68 74 2f 6d 6d 29 29 29 29 0a 0a 28 70 eight/mm))))..(p
0370: 72 6f 76 69 64 65 0a 20 73 63 72 65 65 6e 2d 73 rovide. screen-s
0380: 69 7a 65 29 0a 0a 3b 3b 20 7d 7d 7d 0a 0a 3b 3b ize)..;; }}}..;;
0390: 20 7b 7b 7b 20 4c 69 62 72 61 72 79 20 69 6e 69 {{{ Library ini
03a0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 0a 28 28 67 tialization..((g
03b0: 65 74 2d 66 66 69 2d 6f 62 6a 0a 20 20 22 63 64 et-ffi-obj. "cd
03c0: 49 6e 69 74 43 6f 6e 74 65 78 74 50 6c 75 73 22 InitContextPlus"
03d0: 20 6c 69 62 63 64 2d 63 6f 6e 74 65 78 74 2b 0a libcd-context+.
03e0: 20 20 28 5f 66 75 6e 20 2d 3e 20 5f 76 6f 69 64 (_fun -> _void
03f0: 29 29 29 0a 0a 3b 3b 20 7d 7d 7d 0a )))..;; }}}.