140 lines
3.4 KiB
C
140 lines
3.4 KiB
C
/* DECOMMAN.C */
|
|||
|
|
|
||
|
|
#include <demo.g>
|
||
|
|
#include <demo.rsg>
|
||
|
|
#include <printer.g>
|
||
|
|
#include <hwim.h>
|
||
|
|
|
||
|
|
GLREF_D PR_WSERV *w_ws;
|
||
|
|
GLREF_D PR_DECOMMAN *DatApp2;
|
||
|
|
|
||
|
|
#define SAVED_FILE_NAME "LOC::M:\\WDRPRINT.CFG"
|
||
|
|
|
||
|
|
LOCAL_C VOID TryLoadPrintContext(VOID)
|
||
|
|
{
|
||
|
|
P_INFO junk;
|
||
|
|
VOID *fcb;
|
||
|
|
VOID *printer;
|
||
|
|
UBYTE buf[512];
|
||
|
|
INT blen;
|
||
|
|
INT ind;
|
||
|
|
UBYTE *p1,*p2,*p3,*p4;
|
||
|
|
|
||
|
|
if (p_finfo(SAVED_FILE_NAME,&junk))
|
||
|
|
return; /* eg file does not exist */
|
||
|
|
f_open(&fcb,SAVED_FILE_NAME,P_FOPEN|P_FSTREAM|P_FSHARE);
|
||
|
|
blen=f_read(fcb,&buf[0],512);
|
||
|
|
p_close(fcb);
|
||
|
|
if (blen<=sizeof(PRINTER_PARAMS)+2)
|
||
|
|
goto file_corrupt;
|
||
|
|
p1=(&buf[0]);
|
||
|
|
blen-=sizeof(PRINTER_PARAMS);
|
||
|
|
p2=p1+sizeof(PRINTER_PARAMS);
|
||
|
|
ind=p_bloc(p2+1,blen-1,0);
|
||
|
|
if (ind<0)
|
||
|
|
goto file_corrupt;
|
||
|
|
p3=p2+1+ind+1;
|
||
|
|
blen-=1+ind+1;
|
||
|
|
if (blen<=0)
|
||
|
|
goto file_corrupt;
|
||
|
|
ind=p_bloc(p3,blen,0);
|
||
|
|
if (ind<0)
|
||
|
|
goto file_corrupt;
|
||
|
|
p4=p3+ind+1;
|
||
|
|
blen-=ind+1;
|
||
|
|
if (blen<=0)
|
||
|
|
goto file_corrupt;
|
||
|
|
ind=p_bloc(p4,blen,0);
|
||
|
|
if (ind!=blen-1)
|
||
|
|
{
|
||
|
|
file_corrupt:
|
||
|
|
hInfoPrint(DELETING_CORRUPT_FILE);
|
||
|
|
p_delete(SAVED_FILE_NAME);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
p_send2(w_ws,O_WS_ENS_PRINT_CONTEXT);
|
||
|
|
printer=w_ws->wserv.printer;
|
||
|
|
p_bcpy((VOID *)p_send2(printer,O_PR_GET_PARAMS),p1,sizeof(PRINTER_PARAMS));
|
||
|
|
p_send5(printer,O_PR_SET_MODEL,FALSE,p2+1,*p2);
|
||
|
|
p_send4(printer,O_PR_SET_HD,PRINTER_HDR_TOP,p3);
|
||
|
|
p_send4(printer,O_PR_SET_HD,PRINTER_HDR_BOT,p4);
|
||
|
|
}
|
||
|
|
|
||
|
|
#pragma save,ENTER_CALL
|
||
|
|
|
||
|
|
LOCAL_C INT SavePrintContext(VOID)
|
||
|
|
{
|
||
|
|
VOID *fcb;
|
||
|
|
VOID *printer;
|
||
|
|
TEXT *p;
|
||
|
|
struct
|
||
|
|
{
|
||
|
|
UBYTE model;
|
||
|
|
TEXT name[P_FNAMESIZE+1];
|
||
|
|
} m;
|
||
|
|
|
||
|
|
printer=w_ws->wserv.printer;
|
||
|
|
if (!printer)
|
||
|
|
return(0);
|
||
|
|
f_open(&fcb,SAVED_FILE_NAME,P_FREPLACE|P_FSTREAM|P_FUPDATE);
|
||
|
|
p=(TEXT *)p_send2(printer,O_PR_GET_PARAMS);
|
||
|
|
f_write(fcb,p,sizeof(PRINTER_PARAMS));
|
||
|
|
m.model=p_send3(printer,O_PR_SENSE_MODEL,&m.name[0]);
|
||
|
|
f_write(fcb,&m.model,1+p_slen(&m.name[0])+1);
|
||
|
|
p=(TEXT *)p_send3(printer,O_PR_GET_HD,PRINTER_HDR_TOP);
|
||
|
|
f_write(fcb,p,p_slen(p)+1);
|
||
|
|
p=(TEXT *)p_send3(printer,O_PR_GET_HD,PRINTER_HDR_BOT);
|
||
|
|
f_write(fcb,p,p_slen(p)+1);
|
||
|
|
p_close(fcb);
|
||
|
|
return(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
#pragma restore
|
||
|
|
|
||
|
|
LOCAL_C INT LaunchDialog(INT class,INT resid,VOID *rbuf)
|
||
|
|
{
|
||
|
|
DL_DATA dld;
|
||
|
|
|
||
|
|
dld.id=resid;
|
||
|
|
dld.rbuf=rbuf;
|
||
|
|
dld.pdlg=NULL;
|
||
|
|
return hLaunchDial(CAT_DEMO_DEMO,class,&dld);
|
||
|
|
}
|
||
|
|
|
||
|
|
LOCAL_C VOID PrintOrPreview(INT commid)
|
||
|
|
{
|
||
|
|
commid=(commid==O_DEC_PREVIEW? O_DEC_PRINT_DIRECT: 0);
|
||
|
|
hDestroy(f_newsend(CAT_DEMO_DEMO,C_DELP,O_LPR_INIT,commid));
|
||
|
|
}
|
||
|
|
|
||
|
|
#pragma METHOD_CALL
|
||
|
|
|
||
|
|
METHOD VOID decomman_com_init(PR_DECOMMAN *self)
|
||
|
|
{
|
||
|
|
DatApp2=self;
|
||
|
|
TryLoadPrintContext();
|
||
|
|
}
|
||
|
|
|
||
|
|
METHOD VOID decomman_com_exit(PR_DECOMMAN *self)
|
||
|
|
{
|
||
|
|
if (p_enter1(SavePrintContext))
|
||
|
|
p_delete(SAVED_FILE_NAME);
|
||
|
|
p_exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
METHOD VOID decomman_dec_psetup(VOID)
|
||
|
|
{
|
||
|
|
p_send2(w_ws,O_WS_EDIT_PRINT_CONTEXT);
|
||
|
|
}
|
||
|
|
|
||
|
|
METHOD VOID decomman_dec_preview(PR_DECOMMAN *self,INT commid)
|
||
|
|
{
|
||
|
|
if (LaunchDialog(C_DEDLG,DELP_DLG,&commid))
|
||
|
|
PrintOrPreview(commid);
|
||
|
|
}
|
||
|
|
|
||
|
|
METHOD VOID decomman_dec_print_direct(VOID)
|
||
|
|
{
|
||
|
|
PrintOrPreview(O_DEC_PRINT);
|
||
|
|
}
|