[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]

    {
     EH> But if it isn't a VAR parameter it IS copied afterwards (out of the
     EH> manual, Inside Turbo Pascal): Value parameters are passed by value or
     EH> by reference depending on the size and type of the parameter. (deleted
     EH> when passed by value). Otherwise a pointer to the value is pushed and
     EH> the procedure or function THEN COPIES the value into a LOCAL storage
     EH> location. (my capitalisation)

    Yeah, well that's fine and dandy in theory, but...

     EH> So the startup code of the procedure WILL make local copies of all
     EH> "non-VAR" parameters that are passed "by reference".

    get a load of this.
    }

    program crypt;

    procedure cipher2 (s:string; dest:string); assembler;
    asm
      push ds;
      lds si, s;
      les di, dest;
      lodsb;
      stosb;
      mov cl, al;
      xor ch, ch;
    @@EncryptionLoop:
      lodsb;
      rol al, 2;
      stosb;
      loop @@EncryptionLoop;
      pop ds;
    end;

    procedure decipher2 (s:string; dest:string); assembler;
    asm
      push ds;
      lds si, s;
      les di, dest;
      lodsb;
      stosb;
      mov cl, al;
      xor ch, ch;
    @@EncryptionLoop:
      lodsb;
      ror al, 2;
      stosb;
      loop @@EncryptionLoop;
      pop ds;
    end;

    var notsecret, notsecret2, secret:string;

    begin
      notsecret:='This is the secret stuff.';
      writeln;
      writeln('This should NOT be encrypted: "'+notsecret+'"');
      cipher2 (notsecret, secret);
      writeln('This SHOULD be encrypted....: "'+secret+'"');
      decipher2 (secret, notsecret2);
      writeln('This SHOULD NOT be encrypted....: "'+notsecret2+'"');
    end.

[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]