3
$Id: pros2pm.c,v 1.21 1999/01/02 06:11:34 cph Exp $
5
Copyright (c) 1994-1999 Massachusetts Institute of Technology
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or (at
10
your option) any later version.
12
This program is distributed in the hope that it will be useful, but
13
WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28
static PPOINTL coordinate_vector_point_args
29
(unsigned int, unsigned int, unsigned long *);
34
qid_argument (unsigned int arg_number)
36
unsigned int qid = (arg_index_integer (arg_number, (QID_MAX + 1)));
37
if (! ((OS2_qid_openp (qid)) && ((OS2_qid_twin (qid)) != QID_NONE)))
38
error_bad_range_arg (arg_number);
43
psid_argument (unsigned int arg_number)
45
unsigned long result = (arg_ulong_integer (arg_number));
46
if (!OS2_psid_validp (result))
47
error_bad_range_arg (arg_number);
52
memory_psid_argument (unsigned int arg_number)
54
psid_t psid = (psid_argument (arg_number));
55
if (!OS2_memory_ps_p (psid))
56
error_bad_range_arg (arg_number);
61
wid_argument (unsigned int arg_number)
63
unsigned long result = (arg_ulong_integer (arg_number));
64
if (!OS2_wid_validp (result))
65
error_bad_range_arg (arg_number);
70
bid_argument (unsigned int arg_number)
72
unsigned long result = (arg_ulong_integer (arg_number));
73
if (!OS2_bid_validp (result))
74
error_bad_range_arg (arg_number);
79
short_arg (unsigned int arg_number)
81
long result = (arg_integer (arg_number));
82
if (! ((-32768 <= result) && (result < 32768)))
83
error_bad_range_arg (arg_number);
87
#define SSHORT_ARG short_arg
88
#define USHORT_ARG(n) arg_index_integer ((n), 0x10000)
91
dimension_arg (unsigned int arg_number)
93
unsigned short result = (USHORT_ARG (arg_number));
95
error_bad_range_arg (arg_number);
99
#define COORDINATE_ARG SSHORT_ARG
100
#define DIMENSION_ARG dimension_arg
101
#define HWND_ARG(n) ((HWND) (arg_ulong_integer (n)))
104
OS2_initialize_window_primitives (void)
106
pm_qid = (OS2_create_pm_qid (OS2_scheme_tqueue));
109
DEFINE_PRIMITIVE ("OS2WIN-ALARM", Prim_OS2_window_alarm, 1, 1, 0)
111
PRIMITIVE_HEADER (1);
113
(BOOLEAN_TO_OBJECT (WinAlarm (HWND_DESKTOP, (arg_ulong_integer (1)))));
116
DEFINE_PRIMITIVE ("OS2WIN-BEEP", Prim_OS2_window_beep, 2, 2, 0)
118
PRIMITIVE_HEADER (2);
119
DosBeep ((arg_ulong_integer (1)), (arg_ulong_integer (2)));
120
PRIMITIVE_RETURN (UNSPECIFIC);
123
DEFINE_PRIMITIVE ("OS2PM-SYNCHRONIZE", Prim_OS2_pm_synchronize, 0, 0, 0)
125
PRIMITIVE_HEADER (0);
126
OS2_pm_synchronize (pm_qid);
127
PRIMITIVE_RETURN (UNSPECIFIC);
130
DEFINE_PRIMITIVE ("OS2WIN-OPEN", Prim_OS2_window_open, 2, 2, 0)
132
PRIMITIVE_HEADER (2);
134
(ulong_to_integer (OS2_window_open (pm_qid,
135
(OS2_qid_twin (qid_argument (1))),
136
(FCF_TITLEBAR | FCF_SYSMENU
137
| FCF_SHELLPOSITION | FCF_SIZEBORDER
138
| FCF_MINMAX | FCF_TASKLIST
146
DEFINE_PRIMITIVE ("OS2WIN-CLOSE", Prim_OS2_window_close, 1, 1, 0)
148
PRIMITIVE_HEADER (1);
149
OS2_window_close (wid_argument (1));
150
PRIMITIVE_RETURN (UNSPECIFIC);
153
DEFINE_PRIMITIVE ("OS2WIN-SHOW", Prim_OS2_window_show, 2, 2, 0)
155
PRIMITIVE_HEADER (2);
156
OS2_window_show ((wid_argument (1)), (BOOLEAN_ARG (2)));
157
PRIMITIVE_RETURN (UNSPECIFIC);
160
DEFINE_PRIMITIVE ("OS2WIN-MOVE-CURSOR", Prim_OS2_window_move_cursor, 3, 3, 0)
162
PRIMITIVE_HEADER (3);
163
OS2_window_move_cursor ((wid_argument (1)),
164
(COORDINATE_ARG (2)),
165
(COORDINATE_ARG (3)));
166
PRIMITIVE_RETURN (UNSPECIFIC);
169
DEFINE_PRIMITIVE ("OS2WIN-SHAPE-CURSOR", Prim_OS2_window_shape_cursor, 4, 4, 0)
171
PRIMITIVE_HEADER (4);
172
OS2_window_shape_cursor ((wid_argument (1)),
176
PRIMITIVE_RETURN (UNSPECIFIC);
179
DEFINE_PRIMITIVE ("OS2WIN-SHOW-CURSOR", Prim_OS2_window_show_cursor, 2, 2, 0)
181
PRIMITIVE_HEADER (2);
182
OS2_window_show_cursor ((wid_argument (1)), (BOOLEAN_ARG (2)));
183
PRIMITIVE_RETURN (UNSPECIFIC);
186
DEFINE_PRIMITIVE ("OS2WIN-SCROLL", Prim_OS2_window_scroll, 7, 7, 0)
188
PRIMITIVE_HEADER (7);
189
OS2_window_scroll ((wid_argument (1)),
190
(COORDINATE_ARG (2)),
191
(COORDINATE_ARG (3)),
192
(COORDINATE_ARG (4)),
193
(COORDINATE_ARG (5)),
196
PRIMITIVE_RETURN (UNSPECIFIC);
199
DEFINE_PRIMITIVE ("OS2WIN-INVALIDATE", Prim_OS2_window_invalidate, 5, 5, 0)
201
PRIMITIVE_HEADER (5);
202
OS2_window_invalidate ((wid_argument (1)),
203
(COORDINATE_ARG (2)),
204
(COORDINATE_ARG (3)),
205
(COORDINATE_ARG (4)),
206
(COORDINATE_ARG (5)));
207
PRIMITIVE_RETURN (UNSPECIFIC);
210
DEFINE_PRIMITIVE ("OS2WIN-SET-GRID", Prim_OS2_window_set_grid, 3, 3, 0)
212
PRIMITIVE_HEADER (3);
213
OS2_window_set_grid ((wid_argument (1)),
215
(DIMENSION_ARG (3)));
216
PRIMITIVE_RETURN (UNSPECIFIC);
219
DEFINE_PRIMITIVE ("OS2WIN-ACTIVATE", Prim_OS2_window_activate, 1, 1, 0)
221
PRIMITIVE_HEADER (1);
222
OS2_window_activate (wid_argument (1));
223
PRIMITIVE_RETURN (UNSPECIFIC);
226
DEFINE_PRIMITIVE ("OS2WIN-GET-POS", Prim_OS2_window_get_pos, 1, 1, 0)
228
PRIMITIVE_HEADER (1);
230
SCHEME_OBJECT p = (cons (SHARP_F, SHARP_F));
233
OS2_window_pos ((wid_argument (1)), (& x), (& y));
234
SET_PAIR_CAR (p, (LONG_TO_FIXNUM (x)));
235
SET_PAIR_CDR (p, (LONG_TO_FIXNUM (y)));
236
PRIMITIVE_RETURN (p);
240
DEFINE_PRIMITIVE ("OS2WIN-SET-POS", Prim_OS2_window_set_pos, 3, 3, 0)
242
PRIMITIVE_HEADER (3);
243
OS2_window_set_pos ((wid_argument (1)), (SSHORT_ARG (2)), (SSHORT_ARG (3)));
244
PRIMITIVE_RETURN (UNSPECIFIC);
247
DEFINE_PRIMITIVE ("OS2WIN-GET-SIZE", Prim_OS2_window_get_size, 1, 1, 0)
249
PRIMITIVE_HEADER (1);
251
SCHEME_OBJECT p = (cons (SHARP_F, SHARP_F));
252
unsigned short width;
253
unsigned short height;
254
OS2_window_size ((wid_argument (1)), (& width), (& height));
255
SET_PAIR_CAR (p, (LONG_TO_UNSIGNED_FIXNUM (width)));
256
SET_PAIR_CDR (p, (LONG_TO_UNSIGNED_FIXNUM (height)));
257
PRIMITIVE_RETURN (p);
261
DEFINE_PRIMITIVE ("OS2WIN-GET-FRAME-SIZE", Prim_OS2_window_get_frame_size, 1, 1, 0)
263
PRIMITIVE_HEADER (1);
265
SCHEME_OBJECT p = (cons (SHARP_F, SHARP_F));
266
unsigned short width;
267
unsigned short height;
268
OS2_window_frame_size ((wid_argument (1)), (& width), (& height));
269
SET_PAIR_CAR (p, (LONG_TO_UNSIGNED_FIXNUM (width)));
270
SET_PAIR_CDR (p, (LONG_TO_UNSIGNED_FIXNUM (height)));
271
PRIMITIVE_RETURN (p);
275
DEFINE_PRIMITIVE ("OS2WIN-SET-SIZE", Prim_OS2_window_set_size, 3, 3, 0)
277
PRIMITIVE_HEADER (3);
278
OS2_window_set_size ((wid_argument (1)), (USHORT_ARG (2)), (USHORT_ARG (3)));
279
PRIMITIVE_RETURN (UNSPECIFIC);
282
DEFINE_PRIMITIVE ("OS2WIN-FOCUS?", Prim_OS2_window_focusp, 1, 1, 0)
284
PRIMITIVE_HEADER (1);
285
PRIMITIVE_RETURN (BOOLEAN_TO_OBJECT (OS2_window_focusp (wid_argument (1))));
288
DEFINE_PRIMITIVE ("OS2WIN-SET-STATE", Prim_OS2_window_set_state, 2, 2, 0)
290
PRIMITIVE_HEADER (2);
293
((window_state_t) (arg_index_integer (2, ((long) state_supremum)))));
294
PRIMITIVE_RETURN (UNSPECIFIC);
297
DEFINE_PRIMITIVE ("OS2WIN-SET-TITLE", Prim_OS2_window_set_title, 2, 2, 0)
299
PRIMITIVE_HEADER (2);
300
OS2_window_set_title ((wid_argument (1)), (STRING_ARG (2)));
301
PRIMITIVE_RETURN (UNSPECIFIC);
304
DEFINE_PRIMITIVE ("OS2WIN-TRACK-MOUSE", Prim_OS2_window_track_mouse, 2, 2, 0)
306
PRIMITIVE_HEADER (2);
307
OS2_window_mousetrack ((wid_argument (1)), (BOOLEAN_ARG (2)));
308
PRIMITIVE_RETURN (UNSPECIFIC);
311
DEFINE_PRIMITIVE ("OS2WIN-FRAME-HANDLE", Prim_OS2_window_frame_handle, 1, 1, 0)
313
PRIMITIVE_HEADER (1);
315
(ulong_to_integer (OS2_window_frame_handle (wid_argument (1))));
318
DEFINE_PRIMITIVE ("OS2WIN-CLIENT-HANDLE", Prim_OS2_window_client_handle, 1, 1, 0)
320
PRIMITIVE_HEADER (1);
322
(ulong_to_integer (OS2_window_client_handle (wid_argument (1))));
325
DEFINE_PRIMITIVE ("OS2WIN-UPDATE-FRAME", Prim_OS2_window_update_frame, 2, 2, 0)
327
PRIMITIVE_HEADER (2);
328
OS2_window_update_frame ((wid_argument (1)), (USHORT_ARG (2)));
329
PRIMITIVE_RETURN (UNSPECIFIC);
332
DEFINE_PRIMITIVE ("OS2-WINDOW-HANDLE-FROM-ID", Prim_OS2_window_handle_from_id, 2, 2, 0)
334
PRIMITIVE_HEADER (2);
336
(ulong_to_integer (OS2_window_handle_from_id (pm_qid,
337
(arg_ulong_integer (1)),
338
(arg_ulong_integer (2)))));
341
DEFINE_PRIMITIVE ("OS2WIN-QUERY-SYS-VALUE", Prim_OS2_window_query_sys_value, 2, 2, 0)
343
PRIMITIVE_HEADER (2);
345
(ulong_to_integer (OS2_window_query_sys_value (pm_qid,
347
(arg_integer (2)))));
350
DEFINE_PRIMITIVE ("OS2-MAP-WINDOW-POINT", Prim_OS2_map_window_point, 3, 3, 0)
352
PRIMITIVE_HEADER (3);
354
SCHEME_OBJECT scheme_point;
358
CHECK_ARG (3, PAIR_P);
359
scheme_point = (ARG_REF (3));
360
if ((!INTEGER_P (PAIR_CAR (scheme_point)))
361
|| (!INTEGER_P (PAIR_CDR (scheme_point))))
362
error_wrong_type_arg (3);
363
if ((!integer_to_long_p (PAIR_CAR (scheme_point)))
364
|| (!integer_to_long_p (PAIR_CDR (scheme_point))))
365
error_bad_range_arg (3);
366
(point . x) = (integer_to_long (PAIR_CAR (scheme_point)));
367
(point . y) = (integer_to_long (PAIR_CDR (scheme_point)));
368
rc = (WinMapWindowPoints ((HWND_ARG (1)), (HWND_ARG (2)), (&point), 1));
371
SET_PAIR_CAR (scheme_point, (long_to_integer (point . x)));
372
SET_PAIR_CDR (scheme_point, (long_to_integer (point . y)));
374
PRIMITIVE_RETURN (BOOLEAN_TO_OBJECT (rc));
378
DEFINE_PRIMITIVE ("OS2WIN-SET-CAPTURE", PRIM_OS2_WINDOW_SET_CAPTURE, 2, 2, 0)
380
PRIMITIVE_HEADER (2);
383
(OS2_window_set_capture ((wid_argument (1)), (BOOLEAN_ARG (2)))));
386
DEFINE_PRIMITIVE ("OS2WIN-PS", Prim_OS2_window_ps, 1, 1, 0)
388
PRIMITIVE_HEADER (1);
390
(ulong_to_integer (OS2_window_client_ps (wid_argument (1))));
393
DEFINE_PRIMITIVE ("OS2PS-CREATE-MEMORY-PS", Prim_OS2_create_memory_ps, 0, 0, 0)
395
PRIMITIVE_HEADER (0);
396
PRIMITIVE_RETURN (ulong_to_integer (OS2_create_memory_ps (pm_qid)));
399
DEFINE_PRIMITIVE ("OS2PS-DESTROY-MEMORY-PS", Prim_OS2_destroy_memory_ps, 1, 1, 0)
401
PRIMITIVE_HEADER (1);
402
OS2_destroy_memory_ps (memory_psid_argument (1));
403
PRIMITIVE_RETURN (UNSPECIFIC);
406
DEFINE_PRIMITIVE ("OS2PS-CREATE-BITMAP", Prim_OS2_create_bitmap, 3, 3, 0)
408
PRIMITIVE_HEADER (3);
410
(ulong_to_integer (OS2_create_bitmap ((psid_argument (1)),
415
DEFINE_PRIMITIVE ("OS2PS-DESTROY-BITMAP", Prim_OS2_destroy_bitmap, 1, 1, 0)
417
PRIMITIVE_HEADER (1);
418
OS2_destroy_bitmap (bid_argument (1));
419
PRIMITIVE_RETURN (UNSPECIFIC);
422
DEFINE_PRIMITIVE ("OS2PS-GET-BITMAP", Prim_OS2_ps_get_bitmap, 1, 1, 0)
424
PRIMITIVE_HEADER (1);
426
bid_t bid = (OS2_ps_get_bitmap ((memory_psid_argument (1))));
427
PRIMITIVE_RETURN ((bid == BID_NONE) ? SHARP_F : (ulong_to_integer (bid)));
431
DEFINE_PRIMITIVE ("OS2PS-SET-BITMAP", Prim_OS2_ps_set_bitmap, 2, 2, 0)
433
PRIMITIVE_HEADER (2);
437
((memory_psid_argument (1)),
438
(((ARG_REF (2)) == SHARP_F) ? BID_NONE : (bid_argument (2)))));
439
PRIMITIVE_RETURN ((bid == BID_NONE) ? SHARP_F : (ulong_to_integer (bid)));
443
DEFINE_PRIMITIVE ("OS2PS-BITBLT", Prim_OS2_ps_bitblt, 6, 6, 0)
445
PRIMITIVE_HEADER (6);
447
void * position = dstack_position;
448
psid_t target = (psid_argument (1));
449
psid_t source = (psid_argument (2));
450
unsigned long npoints;
451
PPOINTL points = (coordinate_vector_point_args (3, 4, (& npoints)));
452
LONG rop = (arg_index_integer (5, 0x100));
453
ULONG options = (arg_ulong_integer (6));
454
if (! ((npoints == 3) || (npoints == 4)))
455
error_bad_range_arg (3);
456
OS2_ps_bitblt (target, source, npoints, points, rop, options);
457
dstack_set_position (position);
459
PRIMITIVE_RETURN (UNSPECIFIC);
462
DEFINE_PRIMITIVE ("OS2PS-WRITE", Prim_OS2_ps_write, 6, 6, 0)
464
PRIMITIVE_HEADER (6);
465
CHECK_ARG (4, STRING_P);
467
SCHEME_OBJECT string = (ARG_REF (4));
468
unsigned long start = (arg_ulong_integer (5));
469
unsigned long end = (arg_ulong_integer (6));
470
if (end > (STRING_LENGTH (string)))
471
error_bad_range_arg (6);
473
error_bad_range_arg (5);
474
OS2_ps_draw_text ((psid_argument (1)),
475
(COORDINATE_ARG (2)),
476
(COORDINATE_ARG (3)),
477
(STRING_LOC (string, start)),
480
PRIMITIVE_RETURN (UNSPECIFIC);
483
DEFINE_PRIMITIVE ("OS2PS-TEXT-WIDTH", Prim_OS2_ps_text_width, 4, 4, 0)
485
PRIMITIVE_HEADER (4);
486
CHECK_ARG (2, STRING_P);
488
SCHEME_OBJECT string = (ARG_REF (2));
489
unsigned long start = (arg_ulong_integer (3));
490
unsigned long end = (arg_ulong_integer (4));
491
if (end > (STRING_LENGTH (string)))
492
error_bad_range_arg (4);
494
error_bad_range_arg (3);
497
(OS2_ps_text_width ((psid_argument (1)),
498
(STRING_LOC (string, start)),
504
convert_font_metrics (font_metrics_t * m)
510
SCHEME_OBJECT v = (allocate_marked_vector (TC_VECTOR, 3, 1));
511
VECTOR_SET (v, 0, (ulong_to_integer (FONT_METRICS_WIDTH (m))));
512
VECTOR_SET (v, 1, (ulong_to_integer (FONT_METRICS_HEIGHT (m))));
513
VECTOR_SET (v, 2, (ulong_to_integer (FONT_METRICS_DESCENDER (m))));
519
DEFINE_PRIMITIVE ("OS2PS-GET-FONT-METRICS", Prim_OS2_ps_get_font_metrics, 1, 1, 0)
521
PRIMITIVE_HEADER (1);
523
(convert_font_metrics (OS2_ps_get_font_metrics (psid_argument (1))));
526
DEFINE_PRIMITIVE ("OS2PS-SET-FONT", Prim_OS2_ps_set_font, 3, 3, 0)
528
PRIMITIVE_HEADER (3);
530
(convert_font_metrics (OS2_ps_set_font ((psid_argument (1)),
535
DEFINE_PRIMITIVE ("OS2PS-CLEAR", Prim_OS2_ps_clear, 5, 5, 0)
537
PRIMITIVE_HEADER (5);
538
OS2_ps_clear ((psid_argument (1)),
539
(COORDINATE_ARG (2)),
540
(COORDINATE_ARG (3)),
541
(COORDINATE_ARG (4)),
542
(COORDINATE_ARG (5)));
543
PRIMITIVE_RETURN (UNSPECIFIC);
546
DEFINE_PRIMITIVE ("OS2PS-SET-COLORS", Prim_OS2_ps_set_colors, 3, 3, 0)
548
PRIMITIVE_HEADER (3);
549
OS2_ps_set_colors ((psid_argument (1)),
550
(arg_index_integer (2, 0x1000000)),
551
(arg_index_integer (3, 0x1000000)));
552
PRIMITIVE_RETURN (UNSPECIFIC);
555
DEFINE_PRIMITIVE ("OS2PS-MOVE-GRAPHICS-CURSOR", Prim_OS2_ps_move_gcursor, 3, 3, 0)
557
PRIMITIVE_HEADER (3);
558
OS2_ps_move_gcursor ((psid_argument (1)),
559
(COORDINATE_ARG (2)),
560
(COORDINATE_ARG (3)));
561
PRIMITIVE_RETURN (UNSPECIFIC);
564
DEFINE_PRIMITIVE ("OS2PS-LINE", Prim_OS2_ps_line, 3, 3, 0)
566
PRIMITIVE_HEADER (3);
567
OS2_ps_draw_line ((psid_argument (1)),
568
(COORDINATE_ARG (2)),
569
(COORDINATE_ARG (3)));
570
PRIMITIVE_RETURN (UNSPECIFIC);
573
DEFINE_PRIMITIVE ("OS2PS-DRAW-POINT", Prim_OS2_ps_draw_point, 3, 3, 0)
575
PRIMITIVE_HEADER (3);
576
OS2_ps_draw_point ((psid_argument (1)),
577
(COORDINATE_ARG (2)),
578
(COORDINATE_ARG (3)));
579
PRIMITIVE_RETURN (UNSPECIFIC);
582
DEFINE_PRIMITIVE ("OS2PS-POLY-LINE", Prim_OS2_ps_poly_line, 3, 3, 0)
584
PRIMITIVE_HEADER (3);
586
void * position = dstack_position;
587
unsigned long npoints;
588
PPOINTL points = (coordinate_vector_point_args (2, 3, (& npoints)));
589
OS2_ps_poly_line ((psid_argument (1)),
592
dstack_set_position (position);
594
PRIMITIVE_RETURN (UNSPECIFIC);
597
DEFINE_PRIMITIVE ("OS2PS-POLY-LINE-DISJOINT", Prim_OS2_ps_poly_line_disjoint, 3, 3, 0)
599
PRIMITIVE_HEADER (3);
601
void * position = dstack_position;
602
unsigned long npoints;
603
PPOINTL points = (coordinate_vector_point_args (2, 3, (& npoints)));
604
OS2_ps_poly_line_disjoint ((psid_argument (1)),
607
dstack_set_position (position);
609
PRIMITIVE_RETURN (UNSPECIFIC);
613
coordinate_vector_point_args (unsigned int x_no, unsigned int y_no,
614
unsigned long * npoints)
616
SCHEME_OBJECT x_vector = (ARG_REF (x_no));
617
SCHEME_OBJECT y_vector = (ARG_REF (y_no));
618
if (!VECTOR_P (x_vector))
619
error_wrong_type_arg (x_no);
620
if (!VECTOR_P (y_vector))
621
error_wrong_type_arg (y_no);
623
unsigned long length = (VECTOR_LENGTH (x_vector));
624
if (length != (VECTOR_LENGTH (y_vector)))
625
error_bad_range_arg (x_no);
627
SCHEME_OBJECT * scan_x = (VECTOR_LOC (x_vector, 0));
628
SCHEME_OBJECT * end_x = (VECTOR_LOC (x_vector, length));
629
SCHEME_OBJECT * scan_y = (VECTOR_LOC (y_vector, 0));
630
PPOINTL points = (dstack_alloc (length * (sizeof (POINTL))));
631
PPOINTL scan_points = points;
632
while (scan_x < end_x)
634
SCHEME_OBJECT x = (*scan_x++);
635
SCHEME_OBJECT y = (*scan_y++);
637
error_bad_range_arg (x_no);
639
error_bad_range_arg (y_no);
640
(scan_points -> x) = (FIXNUM_TO_LONG (x));
641
(scan_points -> y) = (FIXNUM_TO_LONG (y));
644
(* npoints) = length;
650
DEFINE_PRIMITIVE ("OS2PS-SET-LINE-TYPE", Prim_OS2_ps_set_line_type, 2, 2, 0)
652
PRIMITIVE_HEADER (2);
653
OS2_ps_set_line_type ((psid_argument (1)), (arg_index_integer (2, 10)));
654
PRIMITIVE_RETURN (UNSPECIFIC);
657
DEFINE_PRIMITIVE ("OS2PS-SET-MIX", Prim_OS2_ps_set_mix, 2, 2, 0)
659
PRIMITIVE_HEADER (2);
660
OS2_ps_set_mix ((psid_argument (1)), (arg_index_integer (2, 18)));
661
PRIMITIVE_RETURN (UNSPECIFIC);
664
DEFINE_PRIMITIVE ("OS2PS-QUERY-CAPABILITIES", Prim_OS2_ps_query_caps, 3, 3, 0)
666
PRIMITIVE_HEADER (3);
668
LONG count = (arg_nonnegative_integer (3));
669
PLONG values = (OS_malloc (count * (sizeof (LONG))));
670
OS2_ps_query_caps ((psid_argument (1)),
671
(arg_nonnegative_integer (2)),
675
SCHEME_OBJECT v = (allocate_marked_vector (TC_VECTOR, count, 1));
677
while (index < count)
679
VECTOR_SET (v, index, (long_to_integer (values [index])));
683
PRIMITIVE_RETURN (v);
688
DEFINE_PRIMITIVE ("OS2PS-QUERY-CAPABILITY", Prim_OS2_ps_query_cap, 2, 2, 0)
691
PRIMITIVE_HEADER (2);
692
OS2_ps_query_caps ((psid_argument (1)),
693
(arg_nonnegative_integer (2)),
696
PRIMITIVE_RETURN (long_to_integer (values [0]));
699
DEFINE_PRIMITIVE ("OS2PS-RESET-CLIP-RECTANGLE", Prim_OS2_ps_reset_clip_rectangle, 1, 1, 0)
701
PRIMITIVE_HEADER (1);
702
OS2_ps_reset_clip_rectangle (psid_argument (1));
703
PRIMITIVE_RETURN (UNSPECIFIC);
706
DEFINE_PRIMITIVE ("OS2PS-SET-CLIP-RECTANGLE", Prim_OS2_ps_set_clip_rectangle, 5, 5, 0)
708
PRIMITIVE_HEADER (5);
709
OS2_ps_set_clip_rectangle ((psid_argument (1)),
710
(COORDINATE_ARG (2)),
711
(COORDINATE_ARG (3)),
712
(COORDINATE_ARG (4)),
713
(COORDINATE_ARG (5)));
714
PRIMITIVE_RETURN (UNSPECIFIC);
717
DEFINE_PRIMITIVE ("OS2PS-GET-BITMAP-PARAMETERS", Prim_OS2_ps_get_bitmap_parameters, 1, 1, 0)
719
PRIMITIVE_HEADER (1);
721
SCHEME_OBJECT s = (allocate_string (sizeof (BITMAPINFOHEADER)));
722
PBITMAPINFOHEADER params = ((PBITMAPINFOHEADER) (STRING_LOC (s, 0)));
723
(params -> cbFix) = (sizeof (BITMAPINFOHEADER));
724
OS2_get_bitmap_parameters ((bid_argument (1)), params);
725
PRIMITIVE_RETURN (s);
729
DEFINE_PRIMITIVE ("OS2PS-GET-BITMAP-BITS", Prim_OS2_ps_get_bitmap_bits, 5, 5, 0)
731
PRIMITIVE_HEADER (5);
734
(OS2_ps_get_bitmap_bits ((memory_psid_argument (1)),
735
(arg_ulong_integer (2)),
736
(arg_ulong_integer (3)),
738
((void *) (STRING_ARG (5))))));
741
DEFINE_PRIMITIVE ("OS2PS-SET-BITMAP-BITS", Prim_OS2_ps_set_bitmap_bits, 5, 5, 0)
743
PRIMITIVE_HEADER (5);
746
(OS2_ps_set_bitmap_bits ((memory_psid_argument (1)),
747
(arg_ulong_integer (2)),
748
(arg_ulong_integer (3)),
750
((void *) (STRING_ARG (5))))));
753
DEFINE_PRIMITIVE ("OS2-CLIPBOARD-WRITE-TEXT", Prim_OS2_clipboard_write_text, 1, 1, 0)
755
PRIMITIVE_HEADER (1);
756
OS2_clipboard_write_text (pm_qid, (STRING_ARG (1)));
757
PRIMITIVE_RETURN (UNSPECIFIC);
760
DEFINE_PRIMITIVE ("OS2-CLIPBOARD-READ-TEXT", Prim_OS2_clipboard_read_text, 0, 0, 0)
762
PRIMITIVE_HEADER (0);
764
const char * text = (OS2_clipboard_read_text (pm_qid));
765
SCHEME_OBJECT result;
770
result = (char_pointer_to_string ((unsigned char *) text));
771
OS_free ((void *) text);
773
PRIMITIVE_RETURN (result);
777
DEFINE_PRIMITIVE ("OS2MENU-CREATE", Prim_OS2_menu_create, 3, 3, 0)
779
PRIMITIVE_HEADER (3);
781
(ulong_to_integer (OS2_menu_create (pm_qid,
787
DEFINE_PRIMITIVE ("OS2MENU-DESTROY", Prim_OS2_menu_destroy, 1, 1, 0)
789
PRIMITIVE_HEADER (1);
790
OS2_menu_destroy (pm_qid, (HWND_ARG (1)));
791
PRIMITIVE_RETURN (UNSPECIFIC);
794
DEFINE_PRIMITIVE ("OS2MENU-INSERT-ITEM", Prim_OS2_menu_insert_item, 7, 7, 0)
796
PRIMITIVE_HEADER (7);
798
(ulong_to_integer (OS2_menu_insert_item (pm_qid,
808
DEFINE_PRIMITIVE ("OS2MENU-REMOVE-ITEM", Prim_OS2_menu_remove_item, 4, 4, 0)
810
PRIMITIVE_HEADER (4);
812
(ulong_to_integer (OS2_menu_remove_item (pm_qid,
816
(BOOLEAN_ARG (4)))));
819
DEFINE_PRIMITIVE ("OS2MENU-GET-ITEM", Prim_OS2_menu_get_item, 3, 3, 0)
822
SCHEME_OBJECT result;
823
PRIMITIVE_HEADER (3);
825
item = (OS2_menu_get_item (pm_qid,
830
PRIMITIVE_RETURN (SHARP_F);
831
result = (allocate_marked_vector (TC_VECTOR, 6, 1));
832
VECTOR_SET (result, 0, (long_to_integer (item -> iPosition)));
833
VECTOR_SET (result, 1, (ulong_to_integer (item -> afStyle)));
834
VECTOR_SET (result, 2, (ulong_to_integer (item -> afAttribute)));
835
VECTOR_SET (result, 3, (ulong_to_integer (item -> id)));
836
VECTOR_SET (result, 4, (ulong_to_integer (item -> hwndSubMenu)));
837
VECTOR_SET (result, 5, (ulong_to_integer (item -> hItem)));
839
PRIMITIVE_RETURN (result);
842
DEFINE_PRIMITIVE ("OS2MENU-N-ITEMS", Prim_OS2_menu_n_items, 1, 1, 0)
844
PRIMITIVE_HEADER (1);
846
(ulong_to_integer (OS2_menu_n_items (pm_qid, (HWND_ARG (1)))));
849
DEFINE_PRIMITIVE ("OS2MENU-NTH-ITEM-ID", Prim_OS2_menu_nth_item_id, 2, 2, 0)
851
PRIMITIVE_HEADER (2);
853
(ulong_to_integer (OS2_menu_nth_item_id (pm_qid,
858
DEFINE_PRIMITIVE ("OS2MENU-GET-ITEM-ATTRIBUTES", Prim_OS2_menu_get_item_attributes, 4, 4, 0)
860
PRIMITIVE_HEADER (4);
862
(ulong_to_integer (OS2_menu_get_item_attributes (pm_qid,
869
DEFINE_PRIMITIVE ("OS2MENU-SET-ITEM-ATTRIBUTES", Prim_OS2_menu_set_item_attributes, 5, 5, 0)
871
PRIMITIVE_HEADER (5);
873
(BOOLEAN_TO_OBJECT (OS2_menu_set_item_attributes (pm_qid,
881
DEFINE_PRIMITIVE ("OS2WIN-LOAD-MENU", Prim_OS2_window_load_menu, 3, 3, 0)
883
PRIMITIVE_HEADER (3);
885
(ulong_to_integer (OS2_window_load_menu ((wid_argument (1)),
886
(arg_ulong_integer (2)),
887
(arg_ulong_integer (3)))));
890
DEFINE_PRIMITIVE ("OS2WIN-POPUP-MENU", Prim_OS2_window_popup_menu, 7, 7, 0)
892
PRIMITIVE_HEADER (7);
895
(OS2_window_popup_menu (pm_qid,
902
(arg_ulong_integer (7)))));
905
DEFINE_PRIMITIVE ("OS2WIN-FONT-DIALOG", Prim_OS2_window_font_dialog, 2, 2, 0)
908
SCHEME_OBJECT result;
909
PRIMITIVE_HEADER (2);
911
spec = (OS2_window_font_dialog ((wid_argument (1)),
912
(((ARG_REF (2)) == SHARP_F)
914
: (STRING_ARG (2)))));
916
PRIMITIVE_RETURN (SHARP_F);
917
result = (char_pointer_to_string ((char *) spec));
918
OS_free ((void *) spec);
919
PRIMITIVE_RETURN (result);
922
DEFINE_PRIMITIVE ("OS2-QUERY-SYSTEM-POINTER", Prim_OS2_query_system_pointer, 3, 3, 0)
924
PRIMITIVE_HEADER (3);
926
(ulong_to_integer (OS2_query_system_pointer (pm_qid,
929
(BOOLEAN_ARG (3)))));
932
DEFINE_PRIMITIVE ("OS2-SET-POINTER", Prim_OS2_set_pointer, 2, 2, 0)
934
PRIMITIVE_HEADER (2);
936
(BOOLEAN_TO_OBJECT (OS2_set_pointer (pm_qid,
938
(arg_ulong_integer (2)))));
941
DEFINE_PRIMITIVE ("OS2WIN-LOAD-POINTER", Prim_OS2_window_load_pointer, 3, 3, 0)
943
PRIMITIVE_HEADER (3);
945
(ulong_to_integer (OS2_window_load_pointer (pm_qid,
947
(arg_ulong_integer (2)),
948
(arg_ulong_integer (3)))));
951
DEFINE_PRIMITIVE ("OS2WIN-DESTROY-POINTER", Prim_OS2_window_destroy_pointer, 1, 1, 0)
953
PRIMITIVE_HEADER (1);
955
(BOOLEAN_TO_OBJECT (OS2_window_destroy_pointer (pm_qid,
956
(arg_ulong_integer (1)))));
959
DEFINE_PRIMITIVE ("OS2WIN-SET-ICON", Prim_OS2_window_set_icon, 2, 2, 0)
961
PRIMITIVE_HEADER (2);
964
(OS2_window_set_icon ((wid_argument (1)), (arg_ulong_integer (2)))));
967
DEFINE_PRIMITIVE ("OS2WIN-OPEN-EVENT-QID", Prim_OS2_window_open_event_qid, 0, 0, 0)
971
PRIMITIVE_HEADER (0);
972
OS2_make_qid_pair ((&local), (&remote));
973
OS2_open_qid (local, OS2_scheme_tqueue);
974
PRIMITIVE_RETURN (LONG_TO_UNSIGNED_FIXNUM (local));
977
DEFINE_PRIMITIVE ("OS2WIN-CLOSE-EVENT-QID", Prim_OS2_window_close_event_qid, 1, 1, 0)
979
PRIMITIVE_HEADER (1);
980
OS2_close_qid_pair (qid_argument (1));
981
PRIMITIVE_RETURN (UNSPECIFIC);
990
#define ET_VISIBILITY 6
993
#define ET_MOUSEMOVE 9
995
#define CVT_USHORT(n, v) \
996
VECTOR_SET (result, n, (LONG_TO_UNSIGNED_FIXNUM (v)))
997
#define CVT_SHORT(n, v) \
998
VECTOR_SET (result, n, (LONG_TO_FIXNUM (v)))
999
#define CVT_BOOLEAN(n, v) \
1000
VECTOR_SET (result, n, (BOOLEAN_TO_OBJECT (v)))
1002
static SCHEME_OBJECT make_button_event
1003
(wid_t, MPARAM, MPARAM, unsigned short, unsigned short);
1005
DEFINE_PRIMITIVE ("OS2WIN-GET-EVENT", Prim_OS2_window_get_event, 2, 2, 0)
1009
PRIMITIVE_HEADER (2);
1011
qid = (qid_argument (1));
1012
blockp = (BOOLEAN_ARG (2));
1013
Primitive_GC_If_Needed (8);
1016
msg_t * message = (OS2_receive_message (qid, blockp, 1));
1017
SCHEME_OBJECT result = SHARP_F;
1019
PRIMITIVE_RETURN (result);
1020
switch (MSG_TYPE (message))
1024
wid_t wid = (SM_PM_EVENT_WID (message));
1025
ULONG msg = (SM_PM_EVENT_MSG (message));
1026
MPARAM mp1 = (SM_PM_EVENT_MP1 (message));
1027
MPARAM mp2 = (SM_PM_EVENT_MP2 (message));
1028
OS2_destroy_message (message);
1033
result = (allocate_marked_vector (TC_VECTOR, 3, 0));
1034
CVT_USHORT (0, ET_FOCUS);
1035
CVT_USHORT (1, wid);
1036
CVT_BOOLEAN (2, (SHORT1FROMMP (mp2)));
1041
result = (allocate_marked_vector (TC_VECTOR, 4, 0));
1042
CVT_USHORT (0, ET_RESIZE);
1043
CVT_USHORT (1, wid);
1044
CVT_USHORT (2, (SHORT1FROMMP (mp2)));
1045
CVT_USHORT (3, (SHORT2FROMMP (mp2)));
1050
result = (allocate_marked_vector (TC_VECTOR, 2, 0));
1051
CVT_USHORT (0, ET_CLOSE);
1052
CVT_USHORT (1, wid);
1058
result = (allocate_marked_vector (TC_VECTOR, 5, 0));
1060
((msg == WM_HELP) ? ET_HELP : ET_COMMAND));
1061
CVT_USHORT (1, wid);
1062
CVT_USHORT (2, (SHORT1FROMMP (mp1)));
1063
CVT_USHORT (3, (SHORT1FROMMP (mp2)));
1064
CVT_BOOLEAN (4, (SHORT2FROMMP (mp2)));
1069
result = (allocate_marked_vector (TC_VECTOR, 3, 0));
1070
CVT_USHORT (0, ET_VISIBILITY);
1071
CVT_USHORT (1, wid);
1072
CVT_BOOLEAN (2, (SHORT1FROMMP (mp1)));
1077
unsigned short code;
1078
unsigned short flags;
1079
unsigned char repeat;
1080
if (OS2_translate_wm_char (mp1, mp2,
1081
(&code), (&flags), (&repeat)))
1083
result = (allocate_marked_vector (TC_VECTOR, 5, 0));
1084
CVT_USHORT (0, ET_KEY);
1085
CVT_USHORT (1, wid);
1086
CVT_USHORT (2, code);
1087
CVT_USHORT (3, flags);
1088
CVT_USHORT (4, repeat);
1092
case WM_BUTTON1DOWN:
1093
result = (make_button_event (wid, mp1, mp2, 0, 0));
1096
result = (make_button_event (wid, mp1, mp2, 0, 1));
1098
case WM_BUTTON1CLICK:
1099
result = (make_button_event (wid, mp1, mp2, 0, 2));
1101
case WM_BUTTON1DBLCLK:
1102
result = (make_button_event (wid, mp1, mp2, 0, 3));
1104
case WM_BUTTON2DOWN:
1105
result = (make_button_event (wid, mp1, mp2, 1, 0));
1108
result = (make_button_event (wid, mp1, mp2, 1, 1));
1110
case WM_BUTTON2CLICK:
1111
result = (make_button_event (wid, mp1, mp2, 1, 2));
1113
case WM_BUTTON2DBLCLK:
1114
result = (make_button_event (wid, mp1, mp2, 1, 3));
1116
case WM_BUTTON3DOWN:
1117
result = (make_button_event (wid, mp1, mp2, 2, 0));
1120
result = (make_button_event (wid, mp1, mp2, 2, 1));
1122
case WM_BUTTON3CLICK:
1123
result = (make_button_event (wid, mp1, mp2, 2, 2));
1125
case WM_BUTTON3DBLCLK:
1126
result = (make_button_event (wid, mp1, mp2, 2, 3));
1129
result = (allocate_marked_vector (TC_VECTOR, 6, 0));
1130
CVT_USHORT (0, ET_MOUSEMOVE);
1131
CVT_USHORT (1, wid);
1132
CVT_SHORT (2, (SHORT1FROMMP (mp1)));
1133
CVT_SHORT (3, (SHORT2FROMMP (mp1)));
1134
CVT_USHORT (4, (SHORT1FROMMP (mp2)));
1135
CVT_USHORT (5, (SHORT2FROMMP (mp2)));
1142
case mt_paint_event:
1144
result = (allocate_marked_vector (TC_VECTOR, 6, 0));
1145
CVT_USHORT (0, ET_PAINT);
1146
CVT_USHORT (1, (SM_PAINT_EVENT_WID (message)));
1147
CVT_USHORT (2, (SM_PAINT_EVENT_XL (message)));
1148
CVT_USHORT (3, (SM_PAINT_EVENT_XH (message)));
1149
CVT_USHORT (4, (SM_PAINT_EVENT_YL (message)));
1150
CVT_USHORT (5, (SM_PAINT_EVENT_YH (message)));
1151
OS2_destroy_message (message);
1155
OS2_destroy_message (message);
1156
OS2_error_anonymous ();
1159
if (result != SHARP_F)
1160
PRIMITIVE_RETURN (result);
1164
static SCHEME_OBJECT
1165
make_button_event (wid_t wid, MPARAM mp1, MPARAM mp2,
1166
unsigned short number, unsigned short type)
1168
SCHEME_OBJECT result = (allocate_marked_vector (TC_VECTOR, 7, 0));
1169
CVT_USHORT (0, ET_BUTTON);
1170
CVT_USHORT (1, wid);
1171
CVT_USHORT (2, number);
1172
CVT_USHORT (3, type);
1173
CVT_SHORT (4, (SHORT1FROMMP (mp1)));
1174
CVT_SHORT (5, (SHORT2FROMMP (mp1)));
1175
CVT_USHORT (6, ((SHORT2FROMMP (mp2)) & (KC_SHIFT | KC_CTRL | KC_ALT)));
1179
DEFINE_PRIMITIVE ("OS2WIN-EVENT-READY?", Prim_OS2_window_event_ready, 2, 2, 0)
1181
PRIMITIVE_HEADER (2);
1182
switch (OS2_message_availablep ((qid_argument (1)), (BOOLEAN_ARG (2))))
1185
PRIMITIVE_RETURN (SHARP_T);
1186
case mat_not_available:
1187
PRIMITIVE_RETURN (SHARP_F);
1189
PRIMITIVE_RETURN (FIXNUM_ZERO);
1193
DEFINE_PRIMITIVE ("OS2WIN-CONSOLE-WID", Prim_OS2_window_console_wid, 0, 0, 0)
1195
extern wid_t OS2_console_wid (void);
1196
PRIMITIVE_HEADER (0);
1197
PRIMITIVE_RETURN (ulong_to_integer (OS2_console_wid ()));
1200
DEFINE_PRIMITIVE ("OS2WIN-DESKTOP-WIDTH", Prim_OS2_window_desktop_width, 0, 0, 0)
1203
PRIMITIVE_HEADER (0);
1204
WinQueryWindowPos (HWND_DESKTOP, (& swp));
1205
PRIMITIVE_RETURN (long_to_integer (swp . cx));
1208
DEFINE_PRIMITIVE ("OS2WIN-DESKTOP-HEIGHT", Prim_OS2_window_desktop_height, 0, 0, 0)
1211
PRIMITIVE_HEADER (0);
1212
WinQueryWindowPos (HWND_DESKTOP, (& swp));
1213
PRIMITIVE_RETURN (long_to_integer (swp . cy));