{ example_write.pas - post one test message to any supported base via the unified API. usage: example_write Example: example_write jam /tmp/testarea Sysop All Hello 'Hello, world' For Hudson/GoldBase/MSG the path is a directory; for JAM/Squish it is / (no extension); for PKT it is the full *.pkt filename; for EzyCom it is the base directory and board 1 is used by default. } program example_write; {$mode objfpc}{$H+} uses SysUtils, ma.types, ma.events, ma.api, ma.fmt.hudson, ma.fmt.hudson.uni, ma.fmt.jam, ma.fmt.jam.uni, ma.fmt.squish, ma.fmt.squish.uni, ma.fmt.msg, ma.fmt.msg.uni, ma.fmt.pkt, ma.fmt.pkt.uni, ma.fmt.pcboard, ma.fmt.pcboard.uni, ma.fmt.ezycom, ma.fmt.ezycom.uni, ma.fmt.goldbase, ma.fmt.goldbase.uni; function ParseFormat(const S: string; out AFormat: TMsgBaseFormat): boolean; begin Result := True; case LowerCase(S) of 'hudson': AFormat := mbfHudson; 'jam': AFormat := mbfJam; 'squish': AFormat := mbfSquish; 'msg': AFormat := mbfMsg; 'pcboard': AFormat := mbfPCBoard; 'ezycom': AFormat := mbfEzyCom; 'goldbase': AFormat := mbfGoldBase; else Result := False; end; end; procedure Usage; begin WriteLn('Usage: example_write '); WriteLn(' formats: hudson jam squish msg pcboard ezycom goldbase'); Halt(2); end; var fmtName, path, whoFrom, whoTo, subject, body: string; fmt: TMsgBaseFormat; base: TMessageBase; msg: TUniMessage; begin if ParamCount < 6 then Usage; fmtName := ParamStr(1); path := ParamStr(2); whoFrom := ParamStr(3); whoTo := ParamStr(4); subject := ParamStr(5); body := ParamStr(6); if not ParseFormat(fmtName, fmt) then Usage; try base := MessageBaseOpen(fmt, path, momReadWrite); except on E: Exception do begin WriteLn('error: ', E.Message); Halt(1); end; end; if not base.Open then begin WriteLn('error: Open returned False (missing files? lock busy?)'); base.Free; Halt(1); end; msg.Attributes.Clear; msg.Attributes.SetValue('from', whoFrom); msg.Attributes.SetValue('to', whoTo); msg.Attributes.SetValue('subject', subject); msg.Attributes.SetDate('date.written', Now); msg.Attributes.SetBool('attr.local', true); msg.Attributes.SetAddr('addr.orig', MakeFTNAddress(1, 1, 1, 0)); msg.Attributes.SetAddr('addr.dest', MakeFTNAddress(1, 1, 2, 0)); msg.Body := body + #13; try if base.WriteMessage(msg) then WriteLn('wrote message #', msg.Attributes.GetInt('msg.num')) else WriteLn('error: WriteMessage returned False'); finally base.Close; base.Free; end; end.