/[rdesktop]/sourceforge.net/trunk/rdesktop/orders.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/orders.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 24 by matty, Sat Jan 6 03:12:10 2001 UTC revision 28 by matty, Wed Jun 20 13:54:48 2001 UTC
# Line 21  Line 21 
21  #include "rdesktop.h"  #include "rdesktop.h"
22  #include "orders.h"  #include "orders.h"
23    
24  extern unsigned char *next_packet;  extern uint8 *next_packet;
25  static RDP_ORDER_STATE order_state;  static RDP_ORDER_STATE order_state;
26    
27  /* Read field indicating which parameters are present */  /* Read field indicating which parameters are present */
28  static void rdp_in_present(STREAM s, uint32 *present, uint8 flags, int size)  static void
29    rdp_in_present(STREAM s, uint32 *present, uint8 flags, int size)
30  {  {
31          uint8 bits;          uint8 bits;
32          int i;          int i;
# Line 52  static void rdp_in_present(STREAM s, uin Line 53  static void rdp_in_present(STREAM s, uin
53  }  }
54    
55  /* Read a co-ordinate (16-bit, or 8-bit delta) */  /* Read a co-ordinate (16-bit, or 8-bit delta) */
56  static void rdp_in_coord(STREAM s, uint16 *coord, BOOL delta)  static void
57    rdp_in_coord(STREAM s, uint16 *coord, BOOL delta)
58  {  {
59          uint8 change;          uint8 change;
60    
# Line 68  static void rdp_in_coord(STREAM s, uint1 Line 70  static void rdp_in_coord(STREAM s, uint1
70  }  }
71    
72  /* Read a colour entry */  /* Read a colour entry */
73  static void rdp_in_colour(STREAM s, uint8 *colour)  static void
74    rdp_in_colour(STREAM s, uint8 *colour)
75  {  {
76          in_uint8(s, *colour);          in_uint8(s, *colour);
77          s->p += 2;          s->p += 2;
78  }  }
79    
80  /* Parse bounds information */  /* Parse bounds information */
81  static BOOL rdp_parse_bounds(STREAM s, BOUNDS *bounds)  static BOOL
82    rdp_parse_bounds(STREAM s, BOUNDS *bounds)
83  {  {
84          uint8 present;          uint8 present;
85    
# Line 105  static BOOL rdp_parse_bounds(STREAM s, B Line 109  static BOOL rdp_parse_bounds(STREAM s, B
109  }  }
110    
111  /* Parse a pen */  /* Parse a pen */
112  static BOOL rdp_parse_pen(STREAM s, PEN *pen, uint32 present)  static BOOL
113    rdp_parse_pen(STREAM s, PEN *pen, uint32 present)
114  {  {
115          if (present & 1)          if (present & 1)
116                  in_uint8(s, pen->style);                  in_uint8(s, pen->style);
# Line 120  static BOOL rdp_parse_pen(STREAM s, PEN Line 125  static BOOL rdp_parse_pen(STREAM s, PEN
125  }  }
126    
127  /* Parse a brush */  /* Parse a brush */
128  static BOOL rdp_parse_brush(STREAM s, BRUSH *brush, uint32 present)  static BOOL
129    rdp_parse_brush(STREAM s, BRUSH *brush, uint32 present)
130  {  {
131          if (present & 1)          if (present & 1)
132                  in_uint8(s, brush->xorigin);                  in_uint8(s, brush->xorigin);
# Line 141  static BOOL rdp_parse_brush(STREAM s, BR Line 147  static BOOL rdp_parse_brush(STREAM s, BR
147  }  }
148    
149  /* Process a destination blt order */  /* Process a destination blt order */
150  static void process_destblt(STREAM s, DESTBLT_ORDER *os,  static void
151                              uint32 present, BOOL delta)  process_destblt(STREAM s, DESTBLT_ORDER *os, uint32 present, BOOL delta)
152  {  {
153          if (present & 0x01)          if (present & 0x01)
154                  rdp_in_coord(s, &os->x, delta);                  rdp_in_coord(s, &os->x, delta);
# Line 166  static void process_destblt(STREAM s, DE Line 172  static void process_destblt(STREAM s, DE
172  }  }
173    
174  /* Process a pattern blt order */  /* Process a pattern blt order */
175  static void process_patblt(STREAM s, PATBLT_ORDER *os,  static void
176                             uint32 present, BOOL delta)  process_patblt(STREAM s, PATBLT_ORDER *os, uint32 present, BOOL delta)
177  {  {
178          if (present & 0x0001)          if (present & 0x0001)
179                  rdp_in_coord(s, &os->x, delta);                  rdp_in_coord(s, &os->x, delta);
# Line 201  static void process_patblt(STREAM s, PAT Line 207  static void process_patblt(STREAM s, PAT
207  }  }
208    
209  /* Process a screen blt order */  /* Process a screen blt order */
210  static void process_screenblt(STREAM s, SCREENBLT_ORDER *os,  static void
211                                uint32 present, BOOL delta)  process_screenblt(STREAM s, SCREENBLT_ORDER *os, uint32 present, BOOL delta)
212  {  {
213          if (present & 0x0001)          if (present & 0x0001)
214                  rdp_in_coord(s, &os->x, delta);                  rdp_in_coord(s, &os->x, delta);
# Line 233  static void process_screenblt(STREAM s, Line 239  static void process_screenblt(STREAM s,
239  }  }
240    
241  /* Process a line order */  /* Process a line order */
242  static void process_line(STREAM s, LINE_ORDER *os, uint32 present, BOOL delta)  static void
243    process_line(STREAM s, LINE_ORDER *os, uint32 present, BOOL delta)
244  {  {
245          if (present & 0x0001)          if (present & 0x0001)
246                  in_uint16_le(s, os->mixmode);                  in_uint16_le(s, os->mixmode);
# Line 273  static void process_line(STREAM s, LINE_ Line 280  static void process_line(STREAM s, LINE_
280  }  }
281    
282  /* Process an opaque rectangle order */  /* Process an opaque rectangle order */
283  static void process_rect(STREAM s, RECT_ORDER *os, uint32 present, BOOL delta)  static void
284    process_rect(STREAM s, RECT_ORDER *os, uint32 present, BOOL delta)
285  {  {
286          if (present & 0x01)          if (present & 0x01)
287                  rdp_in_coord(s, &os->x, delta);                  rdp_in_coord(s, &os->x, delta);
# Line 297  static void process_rect(STREAM s, RECT_ Line 305  static void process_rect(STREAM s, RECT_
305  }  }
306    
307  /* Process a desktop save order */  /* Process a desktop save order */
308  static void process_desksave(STREAM s, DESKSAVE_ORDER *os,  static void
309                               uint32 present, BOOL delta)  process_desksave(STREAM s, DESKSAVE_ORDER *os, uint32 present, BOOL delta)
310  {  {
311          int width, height;          int width, height;
312    
# Line 335  static void process_desksave(STREAM s, D Line 343  static void process_desksave(STREAM s, D
343  }  }
344    
345  /* Process a memory blt order */  /* Process a memory blt order */
346  static void process_memblt(STREAM s, MEMBLT_ORDER *os,  static void
347                             uint32 present, BOOL delta)  process_memblt(STREAM s, MEMBLT_ORDER *os, uint32 present, BOOL delta)
348  {  {
349          HBITMAP bitmap;          HBITMAP bitmap;
350    
# Line 383  static void process_memblt(STREAM s, MEM Line 391  static void process_memblt(STREAM s, MEM
391  }  }
392    
393  /* Process a 3-way blt order */  /* Process a 3-way blt order */
394  static void process_triblt(STREAM s, TRIBLT_ORDER *os,  static void
395                             uint32 present, BOOL delta)  process_triblt(STREAM s, TRIBLT_ORDER *os, uint32 present, BOOL delta)
396  {  {
397          HBITMAP bitmap;          HBITMAP bitmap;
398    
# Line 444  static void process_triblt(STREAM s, TRI Line 452  static void process_triblt(STREAM s, TRI
452  }  }
453    
454  /* Parse a delta co-ordinate in polyline order form */  /* Parse a delta co-ordinate in polyline order form */
455  static int parse_delta(uint8 *buffer, int *offset)  static int
456    parse_delta(uint8 *buffer, int *offset)
457  {  {
458          int value = buffer[(*offset)++];          int value = buffer[(*offset)++];
459          int two_byte = value & 0x80;          int two_byte = value & 0x80;
# Line 461  static int parse_delta(uint8 *buffer, in Line 470  static int parse_delta(uint8 *buffer, in
470  }  }
471    
472  /* Process a polyline order */  /* Process a polyline order */
473  static void process_polyline(STREAM s, POLYLINE_ORDER *os,  static void
474                               uint32 present, BOOL delta)  process_polyline(STREAM s, POLYLINE_ORDER *os, uint32 present, BOOL delta)
475  {  {
476          int index, line, data;          int index, line, data;
477          int x, y, xfrom, yfrom;          int x, y, xfrom, yfrom;
# Line 524  static void process_polyline(STREAM s, P Line 533  static void process_polyline(STREAM s, P
533                  if (flags & 0x80)                  if (flags & 0x80)
534                          y += parse_delta(os->data, &data);                          y += parse_delta(os->data, &data);
535    
536                  ui_line(ROP2_COPY, xfrom, yfrom, x, y, &pen);                  ui_line(ROP2_NXOR, xfrom, yfrom, x, y, &pen);
537    
538                  flags <<= 2;                  flags <<= 2;
539          }          }
540  }  }
541    
542  /* Process a text order */  /* Process a text order */
543  static void process_text2(STREAM s, TEXT2_ORDER *os, uint32 present,  static void
544                            BOOL delta)  process_text2(STREAM s, TEXT2_ORDER *os, uint32 present, BOOL delta)
545  {  {
546          DATABLOB *entry;          DATABLOB *entry;
547          int i;          int i;
# Line 634  static void process_text2(STREAM s, TEXT Line 643  static void process_text2(STREAM s, TEXT
643  }  }
644    
645  /* Process a raw bitmap cache order */  /* Process a raw bitmap cache order */
646  static void process_raw_bmpcache(STREAM s)  static void
647    process_raw_bmpcache(STREAM s)
648  {  {
649          HBITMAP bitmap;          HBITMAP bitmap;
650          uint16 cache_idx, bufsize;          uint16 cache_idx, bufsize;
651          uint8 cache_id, width, height, bpp;          uint8 cache_id, width, height, bpp;
652          uint8 *data;          uint8 *data, *inverted;
653            int y;
654    
655          in_uint8(s, cache_id);          in_uint8(s, cache_id);
656          in_uint8s(s, 1);        /* pad */          in_uint8s(s, 1);        /* pad */
# Line 652  static void process_raw_bmpcache(STREAM Line 663  static void process_raw_bmpcache(STREAM
663    
664          DEBUG("RAW_BMPCACHE(cx=%d,cy=%d,id=%d,idx=%d)\n",          DEBUG("RAW_BMPCACHE(cx=%d,cy=%d,id=%d,idx=%d)\n",
665                width, height, cache_id, cache_idx);                width, height, cache_id, cache_idx);
666            inverted = xmalloc(width * height);
667            for (y = 0; y < height; y++)
668            {
669                    memcpy(&inverted[(height - y - 1) * width], &data[y * width],
670                           width);
671            }
672    
673          bitmap = ui_create_bitmap(width, height, data);          bitmap = ui_create_bitmap(width, height, inverted);
674            xfree(inverted);
675          cache_put_bitmap(cache_id, cache_idx, bitmap);          cache_put_bitmap(cache_id, cache_idx, bitmap);
676  }  }
677    
678  /* Process a bitmap cache order */  /* Process a bitmap cache order */
679  static void process_bmpcache(STREAM s)  static void
680    process_bmpcache(STREAM s)
681  {  {
682          HBITMAP bitmap;          HBITMAP bitmap;
683          uint16 cache_idx, size;          uint16 cache_idx, size;
# Line 692  static void process_bmpcache(STREAM s) Line 711  static void process_bmpcache(STREAM s)
711  }  }
712    
713  /* Process a colourmap cache order */  /* Process a colourmap cache order */
714  static void process_colcache(STREAM s)  static void
715    process_colcache(STREAM s)
716  {  {
717          COLOURENTRY *entry;          COLOURENTRY *entry;
718          COLOURMAP map;          COLOURMAP map;
# Line 723  static void process_colcache(STREAM s) Line 743  static void process_colcache(STREAM s)
743  }  }
744    
745  /* Process a font cache order */  /* Process a font cache order */
746  static void process_fontcache(STREAM s)  static void
747    process_fontcache(STREAM s)
748  {  {
749          HGLYPH bitmap;          HGLYPH bitmap;
750          uint8 font, nglyphs;          uint8 font, nglyphs;
# Line 754  static void process_fontcache(STREAM s) Line 775  static void process_fontcache(STREAM s)
775  }  }
776    
777  /* Process a secondary order */  /* Process a secondary order */
778  static void process_secondary_order(STREAM s)  static void
779    process_secondary_order(STREAM s)
780  {  {
781          uint16 length;          uint16 length;
782          uint8 type;          uint8 type;
# Line 792  static void process_secondary_order(STRE Line 814  static void process_secondary_order(STRE
814  }  }
815    
816  /* Process an order PDU */  /* Process an order PDU */
817  void process_orders(STREAM s)  void
818    process_orders(STREAM s)
819  {  {
820          RDP_ORDER_STATE *os = &order_state;          RDP_ORDER_STATE *os = &order_state;
821          uint32 present;          uint32 present;
# Line 929  void process_orders(STREAM s) Line 952  void process_orders(STREAM s)
952  }  }
953    
954  /* Reset order state */  /* Reset order state */
955  void reset_order_state()  void
956    reset_order_state()
957  {  {
958          memset(&order_state, 0, sizeof(order_state));          memset(&order_state, 0, sizeof(order_state));
959            order_state.order_type = RDP_ORDER_PATBLT;
960  }  }

Legend:
Removed from v.24  
changed lines
  Added in v.28

  ViewVC Help
Powered by ViewVC 1.1.26