Files
sibo-playground/code/SIBOSDK/wdrprint/decomman.c
T
2026-07-06 18:01:36 +01:00

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);
}