1 /*
2   PKTAPI Source, Version 1.00
3 
4   (c) & (p) 1999-2000 by Oliver 'Attila' Grimm
5 
6   Alle Rechte vorbehalten.
7 */
8 
9 #include <fcntl.h>
10 #include <sys\stat.h>
11 #include <share.h>
12 #include <io.h>
13 #include <string.h>
14 
15 #include "pktapi.h"
16 #include "api_pkt2.h"
17 #include "platform_pkt.h"
18 
_Pkt2WriteMsgHdr(HPKT hp,PKT2MSGHEADER * msghdr)19 static sword  _Pkt2WriteMsgHdr(HPKT hp, PKT2MSGHEADER *msghdr)
20 {
21   if (writePKT2MSGHEADER(P2d->pfd, msghdr) != sizeof(PKT2MSGHEADER))
22   {
23     return -1;
24   }
25 
26   return 0; /* Ok */
27 }
28 
_Pkt2WriteField(HPKT hp,char * buf,dword len)29 static sword _Pkt2WriteField(HPKT hp, char *buf, dword len)
30 {
31   char endmark = 0;
32 
33   if (!buf)
34   {
35     buf = &endmark;
36     len = 1;
37   }
38 
39   if (write(P2d->pfd, buf, len) != len)
40   {
41     return -1;
42   }
43 
44   return 0;
45 }
46 
47 /* Convert P2-Msghdr Information to XMSG Structur */
48 
_Pkt2ConvertXmsgToMsghdr(PKT2MSGHEADER * msghdr,XMSG * xmsg)49 static void _Pkt2ConvertXmsgToMsghdr(PKT2MSGHEADER *msghdr, XMSG *xmsg)
50 {
51   msghdr->signatur  = 2;
52   msghdr->orig_node = xmsg->orig.node;
53   msghdr->dest_node = xmsg->dest.node;
54 
55   msghdr->orig_net = xmsg->orig.net;
56   msghdr->dest_net = xmsg->dest.net;
57   msghdr->attrib   = (word) (xmsg->attr & 0xFFFF);
58 
59   /* Copy 19 byte to make sure, Byte 20 is '\0' */
60   memcpy(msghdr->datetime, xmsg->__ftsc_date, 19);
61 }
62 
Pkt2WriteMsg(HPKT hp,XMSG * xmsg,word fAppend,byte * textptr)63 sword PKTAPI Pkt2WriteMsg(HPKT hp, XMSG *xmsg, word fAppend, byte *textptr)
64 {
65   PKT2MSGHEADER msghdr;
66   sword rc;
67 
68   if (PktInvalidPh(hp))
69     return -1;
70 
71   if (hp->mode != PKTMODE_WRITE)
72   {
73     pktapierr = PERR_BADM;
74     return -1;
75   }
76 
77   /* When XMSG = 0, then write Text */
78   if (xmsg)
79   {
80     memset(&msghdr, 0, sizeof(PKT2MSGHEADER));
81 
82     if (P2d->in_msg)
83     {
84       _Pkt2WriteField(hp, 0, 0);
85       P2d->in_msg = 0;
86     }
87 
88     _Pkt2ConvertXmsgToMsghdr(&msghdr, xmsg);
89 
90     if ((rc=_Pkt2WriteMsgHdr(hp, &msghdr)) != 0)
91       return rc;
92 
93     _Pkt2WriteField(hp, xmsg->to, strlen(xmsg->to)+1);
94 
95     _Pkt2WriteField(hp, xmsg->from, strlen(xmsg->from)+1);
96 
97     _Pkt2WriteField(hp, xmsg->subj, strlen(xmsg->subj)+1);
98 
99     /* Filepointer is in Mail */
100   }
101 
102   if (fAppend)
103   {
104     P2d->in_msg = 1;
105     /* If fAppend != 0 and textptr = 0 -> messagebody is written later */
106     if (textptr)
107       _Pkt2WriteField(hp, textptr, strlen(textptr));
108   }
109   else
110   {
111     /* If fAppend = 0 and textptr = 0 -> no messagebody ! */
112     P2d->in_msg = 0;
113     _Pkt2WriteField(hp, textptr, strlen(textptr)+1);
114   }
115 
116   return 0;
117 }
118