SUBROUTINE setprt(PRTPARMS) ************************************************************************* * * This is a reworking of PRINTSUBR to enable calling programs to setup * default print paramaters and for only missing parameters to be prompted * for. * * The current parameters are: * PRTPARMS<1> = Printer No * PRTPARMS<2> = No Of Copies * PRTPARMS<3> = C.P.I. (Controls Print Character Width) * PRTPARMS<4> = L.P.I. (Controls Print Line Height) * PRTPARMS<5> = Portrait/Landscape * PRTPARMS<6> = Top Margin * PRTPARMS<7> = Left Margin * * The following details are passed back to the calling program if the * printer setup is successful else PRTPARMS is returned unchanged. * * PRTPARMS<1> = "OK" * PRTPARMS<2> = Escape Sequences for requested print specs * PRTPARMS<3> = Printer Number * PRTPARMS<4> = Printer Type * PRTPARMS<5> = User Name * PRTPARMS<6> = Esc sequences for expanded on, expanded off * * Tom Power - January 1998 ************************************************************************* COMMON STEPS(250),STEPNO,CNT,NEWITEM,HEAD,REFRESH,EXIT,VAL,PORT,SYSID,CONT,PARMS(20) COMMON F.CONT,FILEVAR(19),KEY,FLD(250) COMMON F.MD,MENU.OPTION,DRIVER.FNAME,DRIVER.ID,DRIV.VARS(15),OTHER(30) EQU VM TO CHAR(253), ESCP TO CHAR(27) * FILE UTPRINTPARMS * READ UTPRINTPARMS FROM "CONTROL" ELSE call disp(3,'PRINTER CONTROL RECORD MUST BE SETUP ') RETURN END * * Obtain Printer No PRTNO=PRTPARMS<1> IF PRTNO='' THEN GOSUB SELECT.PRINTER IF PRTNO='' THEN RETURN END ELSE if prtno#99 then LOCATE PRTNO IN UTPRINTPARMS(PRINTER.FQ)<1>,1 SETTING POS ELSE CALL disp(3,'PRINTER NUMBER ':PRTNO:' INVALID') RETURN END end END if prtno=99 then print.type='spool' user.name='spool' cpi.code='' end else PRINT.TYPE=UTPRINTPARMS(PRINTER.IDS)<1,POS> USER.NAME=UTPRINTPARMS(USER.NAME)<1,POS> end * * Determine No Of Parameters Missing NOCOP=PRTPARMS<2> ; CPI=PRTPARMS<3> ; LPI=PRTPARMS<4> ORIENT=PRTPARMS<5> ; TOPMRG=PRTPARMS<6> ; LEFTMRG=PRTPARMS<7> * MISSING=0 IF NOCOP='' THEN MISSING=MISSING+1 IF CPI='' THEN MISSING=MISSING+1 IF PRINT.TYPE[1,3]="HPL" THEN ;* Lasers IF LPI='' THEN MISSING=MISSING+1 IF ORIENT='' THEN MISSING=MISSING+1 IF TOPMRG='' THEN MISSING=MISSING+1 IF LEFTMRG='' THEN MISSING=MISSING+1 END IF MISSING THEN CALL PRINT.BOX(35,13,38,MISSING+4) LN=14 COL=((38-LEN(USER.NAME))/2)+35 CRT @(COL,14):USER.NAME: CRT @(0,23):"[Q/ESC/F10] = Exit ": END * * No Of Copies IF NOCOP='' THEN LN=LN+1 NOCOP=1 IN.NOCOP: CALL inpx(37,LN,2,1,'No Of Copies','',NOCOP,ESC) IF ESC THEN RETURN IF NOT(NOCOP) THEN NOCOP=1 END * EXP.ON='' ; EXP.OFF='' casing off if prtno=99 then execute 'sp-assign hs' else IF PRINT.TYPE[1,3]="HPL" THEN esc = '' GOSUB LASER.OPTIONS EXECUTE 'SP-ASSIGN F':PRTNO IF ESC THEN RETURN END ELSE * C.P.I. IF CPI='' THEN LN=LN+1 IN.CPI: CALL inpx(37,LN,2,1,'Print Size (10,12,17,20)','',CPI,ESC) IF ESC THEN RETURN IF CPI='' OR NOT(INDEX("10,12,17,20",CPI,1)) THEN CRT CHAR(7): GOTO IN.CPI END END GOSUB SELECT.CPI EXECUTE 'SP-ASSIGN ':NOCOP:'F':PRTNO end end PRTPARMS="OK" ; PRTPARMS<2>=CPI.CODE ; PRTPARMS<3>=PRTNO PRTPARMS<4>=PRINT.TYPE ; PRTPARMS<5>=USER.NAME PRTPARMS<6,1>=EXP.ON ; PRTPARMS<6,2>=EXP.OFF * CASING OFF RETURN ***************** SELECT.PRINTER: * ***************** CALL print.box(30,2,48,21) CRT @(0,23):"[Q/ESC/F10] = Exit " LNS=DCOUNT(UTPRINTPARMS(PRINTER.FQ),VM)+1 FOR I=1 TO LNS if i=lns then CRT @(32,I+4):99'R#3':SPACE(3):'Spooler''L#22' else CRT @(32,I+4):UTPRINTPARMS(PRINTER.FQ)<1,I>'R#3':SPACE(3): CRT UTPRINTPARMS(USER.NAME)<1,I>[1,20]'L#22': CRT UTPRINTPARMS(PRINTER.IDS)<1,I> end NEXT I IN.PRTNO: CALL inpx(32,I+5,2,1,'Select Printer No','',PRTNO,ESC) IF ESC THEN RETURN if prtno#99 then LOCATE PRTNO IN UTPRINTPARMS(PRINTER.FQ)<1>,1 SETTING POS ELSE CRT CHAR(7): ; GOTO IN.PRTNO END end RETURN **************** LASER.OPTIONS: * **************** * Orientation IF ORIENT='' THEN LN=LN+1 IN.ORIENT: CALL inpx(37,LN,1,0,'(P)ortrait or (L)andscape','',ORIENT,ESC) IF ESC THEN RETURN CASING OFF IF ORIENT#'P' AND ORIENT#'L' THEN CRT CHAR(7): ; GOTO IN.ORIENT END * C.P.I. IF CPI='' THEN LN=LN+1 IN.CPI1: CALL inpx(37,LN,2,1,'Print Size (10,12,17,20)','',CPI,ESC) IF ESC THEN RETURN IF CPI='' OR NOT(INDEX("10,12,17,20",CPI,1)) THEN CRT CHAR(7): GOTO IN.CPI1 END END * L.P.I. IF LPI='' THEN LN=LN+1 IN.LPI: CALL inpx(37,LN,2,1,'Spacing (4,6,8,10,12 lpi)','',LPI,ESC) IF ESC THEN RETURN IF LPI='' OR NOT(INDEX("4,6,8,10,12",LPI,1)) THEN CRT CHAR(7): GOTO IN.LPI END END * Top Margin IF TOPMRG='' THEN LN=LN+1 IN.TOPMRG: CALL inpx(37,LN,2,1,'Top Margin','',TOPMRG,ESC) IF ESC THEN RETURN IF NOT(TOPMRG) THEN TOPMRG=0 END * Left Margin IF LEFTMRG='' THEN LN=LN+1 IN.LEFTMRG: CALL inpx(37,LN,2,1,'Left Margin','',LEFTMRG,ESC) IF ESC THEN RETURN IF NOT(LEFTMRG) THEN LEFTMRG=0 END * CASING OFF IF ORIENT='P' THEN ORIENT=0 ELSE ORIENT=1 HMI=((12000/CPI)'0')'R26' LPI=((4800/LPI)'0')'R26' IF CPI>12 THEN CPI=16.67 * * Construct Escape Sequences * if print.type[4,4]='Meto' then * EXECUTE 'SP-ASSIGN F':PRTNO * printer on * print '!R! FRPO R1, 1, EXIT' * printer off ; printer close * end CPI.CODE=ESCP:"E" ;* Reset Printer CPI.CODE=CPI.CODE:ESCP:"(10U" ;* Font PC-8 * &l Codes CPI.CODE=CPI.CODE:ESCP:"&l26a" ;* Paper Type (A4) CPI.CODE=CPI.CODE:ORIENT:"o" ;* Orientation CPI.CODE=CPI.CODE:NOCOP:"x" ;* No Of Copies CPI.CODE=CPI.CODE:TOPMRG:"e" ;* Top Margin CPI.CODE=CPI.CODE:LPI:"C" ;* L.P.I. * * &a Codes CPI.CODE=CPI.CODE:ESCP:"&a":LEFTMRG:"L" ;* Left Margin * * (s Codes CPI.CODE=CPI.CODE:ESCP:"(s0p" ;* Fixed Spacing CPI.CODE=CPI.CODE:CPI:"h" ;* C.P.I. (Pitch) CPI.CODE=CPI.CODE:"0s" ;* Style (Upright) CPI.CODE=CPI.CODE:"3b" ;* Stroke Weight (Boldness) CPI.CODE=CPI.CODE:"0T" ;* Typeface Family * * &k Codes CPI.CODE=CPI.CODE:ESCP:"&k":HMI:"H" ;* Width Of Columns (HMI) * * EXP.ON=ESCP:'(s10h8.5v7B' * EXP.OFF=ESCP:'(s':CPI:'h3B' RETURN ************* SELECT.CPI: * ************* * Obtain valid CPI strings for chosen printer READ CPIREC FROM FV.UTPRINTPARMS,PRINT.TYPE ELSE CPIREC='' CPIS='' ; VALCPI=10:VM:12:VM:17:VM:20 FOR Z=2 TO 5 UNTIL CPIREC='' CPIS<1,Z-1>=VALCPI<1,Z-1> NEXT Z LOCATE CPI IN CPIS<1>,1 BY "AR" SETTING POS ELSE NULL MAX=DCOUNT(CPIS,VM) IF POS>MAX THEN POS=MAX POS=POS+1 CPISTR=OCONV(PRINT.TYPE,'TUTPRINTPARMS;X;;':POS) ATTR=POS ; GOSUB CHAR.STR CPI.CODE=CHRSTR * ATTR=6 ; GOSUB CHAR.STR EXP.ON=CHRSTR * ATTR=7 ; GOSUB CHAR.STR EXP.OFF=CHRSTR RETURN *********** CHAR.STR: * *********** X=0 ; CHRSTR='' LOOP X=X+1 PRTCHAR=FIELD(CPIREC,',',X) UNTIL PRTCHAR='' DO IF PRTCHAR[1,1]='"' THEN Z=LEN(PRTCHAR) PRTCHAR=PRTCHAR[2,Z-2] END ELSE PRTCHAR=CHAR(PRTCHAR) CHRSTR=CHRSTR:PRTCHAR REPEAT RETURN