/*===================================================================
 * dospecial.c
 *===================================================================
 */
/* c.itoh 1570 special commands */

/****** printer.device/printers/Epson_functions **************************
 *
 *   special functions implemented:
 *
 *   aRIN, aSUS0, aSUS1, aSUS2, aSUS3, aSUS4,
 *   aPLU, aPLD, aVERP0, aVERP1, aSLRM, aIND, aCAM
 *
 ************************************************************************/

#include    "exec/types.h"
#include    "devices/printer.h"
#include    "devices/prtbase.h"

extern struct PrinterData *PD;

DoSpecial(command,outputBuffer,vline,currentVMI,crlfFlag,Parms)
char outputBuffer[];
UWORD *command;
BYTE *vline;
BYTE *currentVMI;
BYTE *crlfFlag;
UBYTE Parms[];
{
    int x=0;
    int y=0;
    static char initMarg[]="\x1bL000\x1b/999";
                /*          0   12345   6789       */

    static char
     initThisPrinter[]="\x1b$\x1bf\x1bN\x1bm2\x1bA\x1bC0";
              /*        0   12   34   56   789   01   23   */

    if(*command==aRIN) {
     while( x < 14){
         outputBuffer[x]=initThisPrinter[x];
         x++;
     }
     outputBuffer[x++]=0;

     if((PD->pd_Preferences.PrintQuality)==DRAFT)outputBuffer[8]='1';

     *currentVMI=36; /* assume 1/6 line spacing */
     if((PD->pd_Preferences.PrintSpacing)==EIGHT_LPI) { /* wrong again */
         outputBuffer[10]='B';
         *currentVMI=27;
     }
     if((PD->pd_Preferences.PrintPitch)==ELITE)outputBuffer[5]='E';
     else if((PD->pd_Preferences.PrintPitch)==FINE)
         outputBuffer[5]='Q';

     Parms[0]=(PD->pd_Preferences.PrintLeftMargin);
     Parms[1]=(PD->pd_Preferences.PrintRightMargin);
     *command=aSLRM;
    }

    if(*command==aSLRM) {
     sprintf(initMarg[2],"%d03",Parms[0]);
     sprintf(initMarg[7],"%d03",Parms[1]);
     while(y<11)outputBuffer[x++]=initMarg[y++];
     return(x);
    }

    if(*command==aCAM) {
     initMarg[2]='0'; initMarg[3]='0'; initMarg[4]='1';
     initMarg[7]='0'; initMarg[8]='8'; initMarg[9]='0';
     while(y<11)outputBuffer[x++]=initMarg[y++];
     return(x);
    }


    return(0);
}
