> At 1:35 AM +0300 8/8/03, Vladimir Lipskiy wrote:
> >  > What in $DEITY's name is *that*?  It sure isn't a context diff.
> >>  A context diff is what you get from "diff -u" or "diff -c".

YAY! Thanks Chip for you caustic remark -- it made me to
know about how to get a context diff with WinCVS.

Dan wrotes:
> You can do it--CVS can provide both context and unified diffs, no
> matter what it's using as a gui front. I vaguely remember trying
> WinCVS at one point, though it's been years. Poke around in the help
> files and you'll find what you're looking for. (Might be a
> preferences setting or something)

As far as I can get, a context diff could only be obtain through a command
line command. Anyway, I found what I needed in the help files, as you
advised me on that. Thanks (~:

The third attempt, here it is:

Index: string.c
===================================================================
RCS file: /cvs/public/parrot/string.c,v
retrieving revision 1.141
diff -c -r1.141 string.c
*** string.c 5 Aug 2003 13:47:53 -0000 1.141
--- string.c 7 Aug 2003 21:54:11 -0000
***************
*** 1005,1015 ****
      STRING *res;
      size_t len;

!     len = s1 ? s1->bufused : 0;
!     if (s2 && s2->bufused < len)
!         len = s2->bufused;
!
!     if (dest && *dest)
          res = *dest;
      else if (!s1 || !s2)
          res = string_make(interpreter, NULL, 0, NULL, 0, NULL);
--- 1005,1011 ----
      STRING *res;
      size_t len;

!    if (dest && *dest)
          res = *dest;
      else if (!s1 || !s2)
          res = string_make(interpreter, NULL, 0, NULL, 0, NULL);
***************
*** 1030,1042 ****
          s2 = string_transcode(interpreter, s2, NULL, string_unicode_type,
                  NULL);
      }
!     /* get the real len after trancode */
      len = s1 ? s1->bufused : 0;
      if (s2 && s2->bufused < len)
          len = s2->bufused;
!     if (!dest || *dest)
          res = string_make(interpreter, NULL, len, s1->encoding, 0,
s1->type);
!
      s1start = s1->strstart;
      s2start = s2->strstart;
      dp = res->strstart;
--- 1026,1040 ----
          s2 = string_transcode(interpreter, s2, NULL, string_unicode_type,
                  NULL);
      }
!
      len = s1 ? s1->bufused : 0;
      if (s2 && s2->bufused < len)
          len = s2->bufused;
!     if (!dest || !*dest)
          res = string_make(interpreter, NULL, len, s1->encoding, 0,
s1->type);
!     else if (res->bufused < len)
!         string_grow(interpreter, res, len - res->bufused);
!
      s1start = s1->strstart;
      s2start = s2->strstart;
      dp = res->strstart;
***************
*** 1069,1083 ****
      STRING *res;
      size_t len;

!     len = s1 ? s1->bufused : 0;
      if (s2 && s2->bufused > len)
          len = s2->bufused;

      if (dest && *dest)
          res = *dest;
!     else if (len == 0)
          res = string_make(interpreter, NULL, 0, NULL, 0, NULL);
!     if (!len) {
          res->bufused = 0;
          res->strlen = 0;
          return res;
--- 1067,1160 ----
      STRING *res;
      size_t len;

!     if (dest && *dest)
!         res = *dest;
!     else if (!s1 && !s2)
!         res = string_make(interpreter, NULL, 0, NULL, 0, NULL);
!
!     if (!s1 && !s2) {
!         res->bufused = 0;
!         res->strlen = 0;
!         return res;
!     }
!
!     /* trigger GC for debug */
!     if (interpreter && GC_DEBUG(interpreter))
!         Parrot_do_dod_run(interpreter, 1);
!
!     if (s1 && s2) {
!         if (s1->type != s2->type || s1->encoding != s2->encoding) {
!             s1 = string_transcode(interpreter, s1, NULL,
string_unicode_type,
!                     NULL);
!             s2 = string_transcode(interpreter, s2, NULL,
string_unicode_type,
!                     NULL);
!         }
!     }
!
!     len = s1 ? s1->bufused: 0;
      if (s2 && s2->bufused > len)
          len = s2->bufused;
+     if (!dest || !*dest)
+         res = string_make(interpreter, NULL, len,
+                 s1 ? s1->encoding : NULL, 0, s1 ? s1->type : NULL);
+     else if (res->bufused < len)
+         string_grow(interpreter, res, len - res->bufused);
+
+     if (s1) {
+         s1start = s1->strstart;
+         s1end = s1start + s1->bufused;
+         res->strlen = s1->strlen;
+     }
+     else
+         s1start = s1end = NULL;
+     if (s2) {
+         s2start = s2->strstart;
+         s2end = s2start + s2->bufused;
+         if (!s1 || s2->strlen > s1->strlen)
+             res->strlen = s2->strlen;
+     }
+     else
+         s2start = s2end = NULL;
+     dp = res->strstart;
+     res->bufused = len;
+
+     for ( ; len ; ++s1start, ++s2start, ++dp, --len) {
+         if (s1start < s1end && s2start < s2end)
+             *dp = *s1start | *s2start;
+         else if (s1start < s1end)
+             *dp = *s1start;
+         else
+             *dp = *s2start;
+     }
+
+     if (dest)
+         *dest = res;
+
+     return res;
+ }
+
+ /*=for api string string_bitwise_xor
+  * or two strings, performing type and encoding conversions if
+  * necessary. If *dest != NULL reuse dest, else create a new result
+  */
+ STRING *
+ string_bitwise_xor(struct Parrot_Interp *interpreter, STRING *s1,
+                STRING *s2, STRING **dest)
+ {
+     const char *s1start;
+     const char *s2start;
+     const char *s1end;
+     const char *s2end;
+     char *dp;
+     STRING *res;
+     size_t len;

      if (dest && *dest)
          res = *dest;
!     else if (!s1 && !s2)
          res = string_make(interpreter, NULL, 0, NULL, 0, NULL);
!
!     if (!s1 && !s2) {
          res->bufused = 0;
          res->strlen = 0;
          return res;
***************
*** 1095,1100 ****
--- 1172,1178 ----
                      NULL);
          }
      }
+
      len = s1 ? s1->bufused: 0;
      if (s2 && s2->bufused > len)
          len = s2->bufused;
***************
*** 1103,1109 ****
                  s1 ? s1->encoding : NULL, 0, s1 ? s1->type : NULL);
      else if (res->bufused < len)
          string_grow(interpreter, res, len - res->bufused);
!
      if (s1) {
          s1start = s1->strstart;
          s1end = s1start + s1->bufused;
--- 1181,1187 ----
                  s1 ? s1->encoding : NULL, 0, s1 ? s1->type : NULL);
      else if (res->bufused < len)
          string_grow(interpreter, res, len - res->bufused);
!
      if (s1) {
          s1start = s1->strstart;
          s1end = s1start + s1->bufused;
***************
*** 1114,1120 ****
      if (s2) {
          s2start = s2->strstart;
          s2end = s2start + s2->bufused;
!         if ((s1 && s2->strlen > s1->strlen) || !s1)
              res->strlen = s2->strlen;
      }
      else
--- 1192,1198 ----
      if (s2) {
          s2start = s2->strstart;
          s2end = s2start + s2->bufused;
!         if (!s1 || s2->strlen > s1->strlen)
              res->strlen = s2->strlen;
      }
      else
***************
*** 1124,1140 ****

      for ( ; len ; ++s1start, ++s2start, ++dp, --len) {
          if (s1start < s1end && s2start < s2end)
!             *dp = *s1start | *s2start;
          else if (s1start < s1end)
              *dp = *s1start;
          else
              *dp = *s2start;
      }
      if (dest)
          *dest = res;

      return res;
  }
  /* A string is "true" if it is equal to anything but "" and "0" */
  INTVAL
  string_bool(const STRING *s)
--- 1202,1220 ----

      for ( ; len ; ++s1start, ++s2start, ++dp, --len) {
          if (s1start < s1end && s2start < s2end)
!             *dp = *s1start ^ *s2start;
          else if (s1start < s1end)
              *dp = *s1start;
          else
              *dp = *s2start;
      }
+
      if (dest)
          *dest = res;

      return res;
  }
+
  /* A string is "true" if it is equal to anything but "" and "0" */
  INTVAL
  string_bool(const STRING *s)
Index: bit.ops
===================================================================
RCS file: /cvs/public/parrot/bit.ops,v
retrieving revision 1.2
diff -c -r1.2 bit.ops
*** bit.ops 5 Aug 2003 13:47:53 -0000 1.2
--- bit.ops 7 Aug 2003 21:54:12 -0000
***************
*** 337,342 ****
--- 337,390 ----
    goto NEXT();
  }

+ =item B<bxors>(inout STR, in STR)
+
+ =item B<bxors>(in PMC, in STR)
+
+ =item B<bxors>(in PMC, in PMC)
+
+ Set the bits of $1 according to the B<xor> of the corresponding bits from
$1 and $2.
+
+ =item B<bxors>(out STR, in STR, in STR)
+
+ =item B<bxors>(in PMC, in PMC, in STR)
+
+ =item B<bxors>(in PMC, in PMC, in PMC)
+
+ Set the bits of $1 according to the B<xor> of the corresponding bits from
$2 and $3.
+
+ =cut
+
+ inline op bxors(inout STR, in STR) {
+   string_bitwise_xor(interpreter, $1, $2, &$1);
+   goto NEXT();
+ }
+
+ inline op bxors(in PMC, in STR) {
+   $1->vtable->bitwise_xors_str(interpreter, $1, $2, $1);
+   goto NEXT();
+ }
+
+ inline op bxors(in PMC, in PMC) {
+   $1->vtable->bitwise_xors(interpreter, $1, $2, $1);
+   goto NEXT();
+ }
+
+ inline op bxors(out STR, in STR, in STR) {
+   $1 = string_bitwise_xor(interpreter, $2, $3, NULL);
+   goto NEXT();
+ }
+
+ inline op bxors(in PMC, in PMC, in STR) {
+   $2->vtable->bitwise_xors_str(interpreter, $2, $3, $1);
+   goto NEXT();
+ }
+
+ inline op bxors(in PMC, in PMC, in PMC) {
+   $2->vtable->bitwise_xors(interpreter, $2, $3, $1);
+   goto NEXT();
+ }
+
  =back

  =cut
Index: t/op/string.t
===================================================================
RCS file: /cvs/public/parrot/t/op/string.t,v
retrieving revision 1.52
diff -c -r1.52 string.t
*** t/op/string.t 5 Aug 2003 13:47:58 -0000 1.52
--- t/op/string.t 7 Aug 2003 21:54:16 -0000
***************
*** 1,6 ****
  #! perl -w

! use Parrot::Test tests => 113;
  use Test::More;

  output_is( <<'CODE', <<OUTPUT, "set_s_s|sc" );
--- 1,6 ----
  #! perl -w

! use Parrot::Test tests => 116;
  use Test::More;

  output_is( <<'CODE', <<OUTPUT, "set_s_s|sc" );
***************
*** 1836,1842 ****
  EE
  OUTPUT

! output_is( <<'CODE', <<OUTPUT, "bors NULL string");
   null S1
   set S2, "abc"
   bors S1, S2
--- 1836,1842 ----
  EE
  OUTPUT

! output_is(<<'CODE', <<OUTPUT, "bors NULL string");
   null S1
   set S2, "abc"
   bors S1, S2
***************
*** 1893,1898 ****
--- 1893,1981 ----
  egc
  abc
  EE
+ OUTPUT
+
+ output_is( <<'CODE', <<OUTPUT, "bxors NULL string");
+  null S1
+  set S2, ""
+  bxors S1, S2
+     null S3
+  eq S1, S3, ok1
+  print "not "
+ ok1: print "ok 1\n"
+  bxors S2, S1
+  eq S2, S3, ok2
+  print "not "
+ ok2: print "ok 2\n"
+     null S1
+  set S2, "abc"
+     bxors S1, S2
+  eq S1, "abc", ok3
+  print "not "
+ ok3: print "ok 3\n"
+     null S2
+     bxors S1, S2
+  eq S1, "abc", ok4
+  print "not "
+ ok4: print "ok 4\n"
+     end
+ CODE
+ ok 1
+ ok 2
+ ok 3
+ ok 4
+ OUTPUT
+
+ output_is( <<'CODE', <<OUTPUT, "bxors 2");
+  set S1, "a2c"
+  set S2, "Dw"
+  bxors S1, S2
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+     set S1, "abc"
+     set S2, "    "
+     bxors S1, S2
+     print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+ CODE
+ %Ec
+ Dw
+ ABC
+
+ OUTPUT
+
+ output_is( <<'CODE', <<OUTPUT, "bxors 3");
+  set S1, "a2c"
+  set S2, "Dw"
+  bxors S0, S1, S2
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+     set S1, "abc"
+     set S2, "    "
+     bxors S0, S1, S2
+  print S0
+  print "\n"
+     print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+ CODE
+ %Ec
+ a2c
+ Dw
+ ABC
+ abc
+
  OUTPUT

  # Set all string registers to values given by &$_[0](reg num)


Attachment: diff.dat
Description: Binary data

Reply via email to