>strcpy (textline, "some message");
>
>FWRITE ( nHandle, textline, (short) -80, 0 ); /* file is an 80-bytes FA file
>*/
>
CSEQ sez:
CSEQ [nm]: fwrite
Procedure FWRITE (
filenum : int16 ; {R26}
target : anyvar record ; {(skip R25)
R23, R24}
{Address type = LongAddr}
tcount : int16 ; {SP-$0032}
control : UInt16 ) {SP-$0036}
{ CCE: ok }
{ CCG: EOF }
{ CCL: error }
{tcount is > 0 for 16-bit words, < 0 for bytes }
{If MR is not on, trying to write a record larger }
{than the record size is illegal. }
uncheckable_anyvar
CSEQ [nm]:
Notice that the target (anyvar record) is labeled "Address type =
LongAddr". Last week I posted a caution about long pointers to the list
along with the "longpointer.h" file.
The gcc way to implement this is:
/tmp(135): cat fwrite.c
#include "longpointer.h"
main()
{
char *buf = "this is a test!";
char buf1[80];
int ccode;
extern int CCODE();
extern int errno;
extern void FWRITE(
short filenum,
LONGPOINTER target,
short tcount,
unsigned short control);
LONGPOINTER lp_buf = longaddr(buf);
FWRITE(1,lp_buf,-strlen(buf),0);
ccode = CCODE();
sprintf(buf1, "ccode from FWRITE call: %d\n",ccode);
FWRITE(1,longaddr(buf1),-strlen(buf1),0);
if (errno != 0)
printf(buf1, "errno: %d\n", errno);
};
/tmp(136):
Note that I was too lazy to call FOPEN for this test and simply
specified to write to file designator 1 which is $stdlist. Since you've
got FOPEN working, I didn't think it needed here.
|