{ 12 Jan 96 17:12, Mark Tassin wrote to All: MT> Can anybody help me find a Documented JAM message base unit for MT> TP 7.0? The one in JAMAPI would suffice except that all of the MT> functions that you can perform with it are undocumented, thus I MT> have to hunt through a slew function calls guessing what values I MT> should pass to them... RADU comes with the ability to post to MT> Hudson Message bases, but does not claim to support JAM, can MT> anybody point me to something that will let me post messages to MT> the JAM message base or am I screwed? MKSM106.LZH 226200 12-22-94 MK Source for Msg Access v1.06 - Mark May's Pascal OOP source code to access Squish, Jam, Hudson, *.Msg, and Ezycom message bases. Great for developing BBS utilities. (FW) Get the above archive,and here is a generic reader that I put together using Mark's units/source... (* Generic Message Reader by Martin Woods 1:351/233.1 *) (* To use this you need MKSM106.LZH , Mark May's OOP library *) (* which should be availible just about anywhere *) (* This program will read the following: *) (* HUDSON,SQUISH,*.MSG,EZY and JAM *) (* thanks to Mark May for writing a great Library! *) Program Reader; {$M 16384, 0, 655360} {$I MKB.Def} {$X+} Uses Crt,MKMsgAbs, MKOpen, MKDos, MKstring; Var MsgOut: AbsMsgPtr; TmpStr: String; AreaId: String; ch:char; a,b: integer; Const StLen = 78; Begin If (ParamCount < 1) or (ParamStr(1) = '/?') Then Begin textattr:=$07; clrscr; writeln; textcolor(10); writeln(' Generic READER version 01.0 by Martin Woods,June 1995'); writeln; textcolor(11); WriteLn(' Proper syntax is:'); WriteLn(' READER MsgAreaId'); WriteLn; WriteLn(' Squish MsgAreaId Example = SC:\Max\Msg\Muffin'); WriteLn(' Hudson MsgAreaId Example = H042C:\RA\MsgBase'); WriteLn(' *.Msg MsgAreaId Example = FC:\Mail'); WriteLn(' Ezy MsgAreaId Example = E0001C:\Ezy\MsgBase'); WriteLn(' Jam MsgAreaId Example = JC:\Msg\General'); Halt(1); End; AreaId := Upper(ParamStr(1)); If Not OpenMsgArea(MsgOut, AreaId) Then Begin WriteLn('Unable to open message base'); Halt(4); End; textattr:=$07; clrscr; gotoxy(10,8); textcolor(10); write('Generic READER version 01.0 by Martin Woods,June 1995 '+#13); textcolor(7); Delay(1500); {opening screen here} MsgOut^.SeekFirst(1); While MsgOut^.SeekFound Do Begin window(1,1,80,25); textbackground(0); clrscr; textcolor(15); for a:=1 to 80 do write('Ä'); { header starts here } textcolor(2); MsgOut^.MsgStartUp; WriteLn(MsgOut^.GetMsgNum); Write('Message Number: ' + Long2Str(MsgOut^.GetMsgNum)); If MsgOut^.IsPriv Then Write(' (Priv)'); If MsgOut^.IsRcvd Then Write(' (Rcvd)'); WriteLn; Write('From: ' + PadRight(MsgOut^.GetFrom,' ',45)); Write('Date: '); WriteLn(ReformatDate(MsgOut^.GetDate, 'MM/DD/YY') + ' ' + MsgOut^.GetTime); WriteLn('To: ' + MsgOut^.GetTo); Write('Subj: '); WriteLn(MsgOut^.GetSubj); textcolor(15); for a:=1 to 80 do write('Ä'); { header ends here } window(1,wherey,80,25); {make a window to scroll message} textcolor(7); textbackground(0); clrscr; WriteLn; MsgOut^.MsgTxtStartUp; repeat TmpStr := MsgOut^.GetString(StLen); WriteLn(TmpStr); TmpStr := MsgOut^.GetString(StLen); if keypressed then begin ch := readkey; if ch = #27 then halt; end; if ch = #13 then begin WriteLn(TmpStr); End; if wherey > 15 then begin textcolor(14); textbackground(1); writeln; writeln; write(' Esc to Quit - Press enter to Continue: '); {status line} clreol; textattr:=$07; ch := readkey; if ch = #27 then halt; clrscr; textcolor(7); end; until MsgOut^.EOM or (ioresult > 0); textcolor(14); textbackground(1); gotoxy(1,18); {this is funky,any ideas how to optimize?} write(' Esc to Quit - Press enter to Continue: End ofMsg: ');clreol; {got word wrapped here} ch := readkey; if ch = #27 then halt; clrscr; If Length(TmpStr) > 0 Then WriteLn(TmpStr); If IoResult <> 0 Then; MsgOut^.SeekNext; End; If Not CloseMsgArea(MsgOut) Then; End.