/* DECOMMAN.C */ #include #include #include #include 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); }