Files

95 lines
2.5 KiB
C
Raw Permalink Normal View History

2026-07-06 18:01:36 +01:00
/*
TXTREAD.C
*/
#include <p_std.h>
#include <p_file.h>
#include <wl$txt.g>
#include "wpfconv.h"
GLREF_D VOID *DatApp5; /* used for file conversion DYLs... */
#define FileName DatApp5 /* ...to point to the source file's name */
LOCAL_C VOID InsertBuf(PR_TXTREAD *self, TEXT *buf, UINT len)
{
InsertText(self->txtread.pos,buf,len);
self->txtread.pos+=len;
}
LOCAL_C VOID ApplyPlainStyle(PR_TXTREAD *self)
{
PARA_STYLE *para;
EMPH_STYLE *emph;
TEXT paracode[2];
TEXT emphcode[2];
*(WORD *)&paracode[0]='B'+('T'<<8);
para=SenseParaStyleBySC(&paracode[0]);
DoApplyParaStyle(self->txtread.lastpos,self->txtread.pos,para);
*(WORD *)&emphcode[0]='N'+('N'<<8);
emph=(EMPH_STYLE *)SenseEmphStyleBySC(&emphcode[0]);
DoApplyEmphasis(self->txtread.lastpos,self->txtread.pos,emph);
}
#pragma METHOD_CALL
METHOD VOID txtread_ao_init(PR_TXTREAD *self)
/*
Keep the supplied filename extension.
*/
{
f_open((VOID **)&self->active.pcb,FileName,P_FOPEN|P_FTEXT);
CloseCurrentFile();
SetDefaultStyles(4,6);
StartActive(self);
}
METHOD VOID txtread_ao_queue(PR_TXTREAD *self)
{
self->active.isactive=TRUE;
self->txtread.len=TXTREAD_BUFLEN;
p_ioc5(self->active.pcb,P_FREAD,&self->active.stat,&self->txtread.buf[0],
&self->txtread.len);
}
METHOD INT txtread_ao_run(PR_TXTREAD *self)
{
if (self->active.stat==E_FILE_EOF)
{
ApplyPlainStyle(self); /* apply style to final paragraph */
SwitchToNewFile(FileName);
p_send2(self,O_DESTROY);
return(RUN_ACTIVE_USED);
}
f_leave(self->active.stat);
if (self->txtread.pos)
{
ApplyPlainStyle(self); /* range does not include the terminating NULL */
InsertBuf(self,&self->txtread.eopara,1);
self->txtread.lastpos=self->txtread.pos;
}
InsertBuf(self,&self->txtread.buf[0],self->txtread.len); /* add text of next paragraph */
p_send2(self,O_AO_QUEUE);
return(RUN_ACTIVE_USED);
}
METHOD VOID txtread_ao_abrun(PR_TXTREAD *self)
/*
The application is shut down after reporting any error on loading.
No data is ever lost by doing this, since any previous file will
already have been saved.
*/
{
StopActive();
p_supersend2(self,O_AO_ABRUN);
p_exit(0);
}
METHOD VOID txtread_destroy(PR_TXTREAD *self)
{
StopActive();
p_supersend2(self,O_DESTROY);
}