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

    {
    > Is there somebody who can give me an example of
    > how to write an JAM Base message (RemoteAccess) ?

    > I already have JAMAPI and MKMSG I'll need just an simple unit how to
    > write fast and simple an message to the JAM base..

    Try this... It should work with the standard JAMAPI (I think, at least I
    can't remember changing anything in it). It's a little piece of testcode
    I wrote to play around with JAM :
    }
    Program JAMTest;

    Uses
      JAM, JAMmb, JAMcrc32;

    Var
      JAMMsg     : JAMAPIPTR;
      ToUsername : String[100];
      Position   : LongInt;
      S          : String;
      MsgNo      : LongInt;
      Error      : Boolean;

    Function FileLength (Handle:INTEGER) : LongInt;
    Var
      Position : LongInt;
    Begin
      Position   := JAMMsg^.SeekFile (Handle, 1, 0);
      FileLength := JAMMsg^.SeekFile (Handle, 2, 0);
      JAMMsg^.SeekFile (Handle, 0, Position);
    End; { FileLength }

    Begin
      New (JAMMsg, Init);
      New (JAMMsg^.WorkBuf);
      With JAMMsg^ Do
      Begin
        If (WorkBuf <> NIL) Then
        Begin
          WorkLen  := SizeOf(JAMBUF);
          BaseName := 'ANOTHER';

          Error := Not OpenMB;
          If Error Then Error := Not CreateMB;
          If Not Error Then
          Begin
            If LockMB(True) Then
            Begin

              MsgNo := (FileLength(IdxHandle) Div SizeOf(JAMIDXREC)) +
                       HdrInfo.BaseMsgNum;
              Hdr.MsgNum := MsgNo;

              (* Add an index record *)
              ToUsername := 'Marco Miltenburg';
              With Idx Do
              Begin
                S := ToUsername;
                LowCaseBuf (S[1], Length(S));
                UserCRC   := crc32(S[1], Length(S), -1);
                HdrOffset := FileLength (JAMMsg^.HdrHandle);
              End;
              StoreMsgIdx(MsgNo);

              Position := 1;
              FillChar (Workbuf^, SizeOf(WorkLen), #0);
              S := 'This is a test in JAM.'#13#10;
              AddField (0, FALSE, Length(S), Position, S[1]);
              S := '--- WhatEver/386 v0.0'#13#10;
              AddField (0, FALSE, Length(S), Position, S[1]);
              Hdr.TxtLen := Position - 1;
              Hdr.TxtOffset := FileLength(TxtHandle);
              StoreMsgTxt;

              FillChar (Workbuf^, SizeOf(WorkLen), #0);
              S := 'WhatEven/386 v0.0'; Position := 1;
              AddField (2, TRUE, Length(S), Position, S[1]);
              S := ToUserName;
              AddField (3, TRUE, Length(S), Position, S[1]);
              S := 'Just a message';
              AddField (6, TRUE, Length(S), Position, S[1]);
              S := 'WhatEver/386 v0.0';
              AddField (7, TRUE, Length(S), Position, S[1]);

              With Hdr Do
              Begin
                ReservedWord := 0;
                SubfieldLen    := Position;
                TimesRead    := 0;
                MsgIdCRC     := -1;
                ReplyCRC     := -1;
                ReplyTo      := 0;
                Reply1st     := 0;
                ReplyNext    := 0;
                DateWritten    := 0;
                DateReceived := 0;
                DateProcessed:= 0;
                Attribute    := MSG_LOCAL Or MSG_PRIVATE Or MSG_TYPEECHO;
                Attribute2   := 0;
                PasswordCRC  := -1;
                Cost         := 0;
              End; { With }

              StoreMsgHdr(MsgNo);
              WriteFile(HdrHandle, WorkBuf^, Position);

              Inc(HdrInfo.ActiveMsgs);
              UpdHdrInfo(True);

            End { If }
            Else
              WriteLn ('Unable to lock JAM base ''', BaseName,'''');

          End { If }
          Else
            WriteLn ('Unable to open JAM base ''', BaseName,'''');

          Dispose (WorkBuf);
          Dispose (JAMMsg);
        End { If }
        Else
          WriteLn ('Unable to allocate Work Buffer memory');
      End; { With }
    End.

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