#include <stdio.h>
#include <dos.h>
#include "extend.h"

#define INTBIOS   1
#define B9600     0XE0
#define B4800     0XC0
#define B2400     0XA0
#define B1200     0X80
#define B600      0X60
#define B300      0X40
#define B150      0X20
#define B110      0X00
#define BSTOP1    0
#define BSTOP2    4
#define BDATA7    2
#define BDATA8    3
#define BNONE     0
#define BODD      0X08
#define BEVEN     0X18

#define BB38400   0x03
#define BB19200   0x06
#define BB9600    0x0c
#define BB4800    0x18
#define BB2400    0x30
#define BB1200    0x60
#define BB600     0xc0
#define BB300     0x180
#define BB150     0x300
#define BB110     1047

#define BBDATA5   0X00
#define BBDATA6   0X01
#define BBDATA7   0X02
#define BBDATA8   0X03
#define BBDATAMASK 0X03


#define COMSTATUS 0x05
#define COMINTSTS 0x02

#define CM05      0X05
#define CM50      0X50
#define CM31      0X31
#define CM02      0X02
#define CM42      0X42
#define CM44      0X44
#define CM30      0X30
#define CM03      0X03
#define CM08      0X08

#define CM32      0X32
#define CM33      0X33
#define CM34      0X34
#define CM35      0X35
#define CM36      0X36
#define CM37      0X37
#define CM38      0X38
#define CM39      0X39
#define CM3A      0X3A
#define CM3B      0X3B
#define CM3C      0X3C
#define CM3D      0X3D
#define CM3E      0X3E
#define CM3F      0X3F

#define CM07      0X07
#define CM68      0X68
#define CM4C      0X4C
#define CM53      0X53
#define CM43      0X43
#define CM00      0X00

#define DBRKRCV   0X10    /* ;Break Received */
#define FRAMEERR  0X08    /* ;Framing Error */
#define DPARERR   0X04    /* ;Parity Error */
#define OVRERR    0X02    /* ;Overrun Error */
#define DATAVALID 0X01    /* ;Data Ready */


#define key_F1      0x3b00
#define key_F2      0x3c00
#define key_F3      0x3d00
#define key_F4      0x3e00
#define key_F5      0x3f00
#define key_F9      0x4300
#define key_F10     0x4400
#define key_F11     0x5700
#define key_F12     0x5800

#define key_1       0x0200
#define key_2       0x0300
#define key_3       0x0400
#define key_4       0x0500
#define key_5       0x0600
#define key_6       0x0700
#define key_7       0x0800
#define key_8       0x0900
#define key_9       0x0a00
#define key_0       0x0b00
#define key_dash    0x0c00

#define key_A       0x1e00
#define key_B       0x3000
#define key_C       0x2e00
#define key_D       0x2000
#define key_E       0x1200
#define key_F       0x2100

#define key_S       0x1f00
#define key_P       0x1900
#define key_ESC     0x0100
#define key_Y       0x1500
#define key_N       0x3100
#define key_go_U    0x4800
#define key_go_D    0x5000
#define key_go_L    0x4b00
#define key_go_R    0x4d00

FILE *fp;
#include <dos.h>
int baud_rate[4]={B9600,B4800,B2400,B1200};
int parity[3]={BNONE,BODD,BEVEN};
int io_address = {0};
int com;
int set_flag;
int current_com={0};
int io_address1 = {0};
int iptr1={0};
int icnt1={0};
int optr1={0};
int io_address2 = {0};
int iptr2={0};
int icnt2={0};
int optr2={0};
int comirq[4];
int io_address3;
#define IOBUFSIZE 2200
int baud_rate1;
int parity1;
int parity2;
int parit;
char *par1="N";
char *par2=",8,1";
int irq1 = {0xff};
int irq2 = {0xff};
int irq_no;
int irq={4};
int tts;
int port_open={0};
int x,y;
/*************************communications settings****************/
dummy_return()
{
}

char iobuf1[IOBUFSIZE+1];
char iobuf2[IOBUFSIZE+1];
void interrupt comint1();
void interrupt comint1()
{
        __sti__();
        iobuf1[iptr1] = __inportb__(io_address1);
        iptr1++;
        icnt1++;
        if ( iptr1 >= IOBUFSIZE )
                iptr1=0;
        if ( irq1 >= 0x08 )
                {
                __outportb__(0xa0,0x20);
                }
        __outportb__(0x20,0x20);
}

void interrupt comint2();
void interrupt comint2()
{
        __sti__();
        iobuf2[iptr2] = __inportb__(io_address2);
        iptr2++;
        icnt2++;
        if ( iptr2 >= IOBUFSIZE )
                iptr2=0;
        if ( irq2 >= 0x08 )
                {
                __outportb__(0xa0,0x20);
                }
        __outportb__(0x20,0x20);
}

char irqmask[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char irqor[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
init_com(com_port)
int com_port;

{
union REGS aa;int irq_no;
unsigned intv,io_addr;
int ret;

	io_addr=peek(0x40,com_port*2);
        io_address=io_addr;
        io_address1= io_address;

        if ( com_port == 0 )
                irq=4;
        else
                irq=3;
        irq_no=irq;
        current_com = com_port;
        if ( current_com == 0 )
                {
                if ( irq >= 8 )
		setvect(0x68+irq,&comint1);
                else
		setvect(irq+8,&comint1);
                }
        else
                {
                if ( irq >= 8 )
		setvect(0x68+irq,&comint2);
                else
		setvect(irq+8,&comint2);
                }

        if ( irq >= 8 )
                {
                intv = inportb(0xA1);
                printf("intv=%d\n",intv);
                intv = intv & irqmask[irq-8];
                outportb(0xa1,intv);
                }
        else
		{
                intv = inportb(0x21);
                intv = intv & irqmask[irq];
                outportb(0x21,intv);
                }

        if ( current_com == 0 )
                irq1 = irq;
        else
                irq2 = irq;
                disable_rts();
port_open=1;return 0;
}


int baudcc[8]={BB110,BB150,BB300,BB600,BB1200,BB2400,BB4800,BB9600};
set_baud(para)
int para;
{
union REGS aa;
int baudr,ret;
        baudr = (para & 0xe0)>>5;
        baudr = baudcc[baudr];
	outportb(io_address+3,0x80);
        dummy_return();
	outportb(io_address,baudr&0xff);
        dummy_return();
	outportb(io_address+1,baudr>>8);
        dummy_return();
	outportb(io_address+3,para&0x1f);
        dummy_return();
	inportb(io_address+5);
	inportb(io_address+6);
	inportb(io_address);
	inportb(io_address+5);
	inportb(io_address+6);

	outportb(io_address+1,1);
        dummy_return();
	outportb(io_address+4,0x0b);
        dummy_return();
        return 0;
}


        exit_dev(irq)
int irq;
{
int intv;
        if ( irq >= 8 )
                {
                intv = inportb(0xa1);
                intv = intv | irqor[irq-8];
                outportb(0xa1,intv);
                }
        else
                {
                intv = inportb(0x21);
                intv = intv | irqor[irq];
                outportb(0x21,intv);
                }
}


/*---------------------send data ------------------------------------*/

send_lenstr(len, s)
int len;
unsigned char *s;
{
int i;


        for (i=0;i<len;i++)
                out_data1(s[i]);

/*        out_data1(0x0d);   ?????? */
}
#if INTBIOS

int in_data11()
{
unsigned char c;
        if ( icnt1 != 0 )
                {
                c = iobuf1[optr1++];
                if ( optr1 >= IOBUFSIZE )
                        optr1=0;
                __cli__();
                icnt1--;
                __sti__();
                return (int)(c);
                }
return -1;
}


in_data1()
{
int c;
        c = in_data11();
        if ( c != -1 )
                printf("%c",c);
return c;
}


enable_rts()
{
unsigned char i;
        i = inp(io_address1+4);
        i = i | 0x02;
        outp(io_address1+4,i);
}


disable_rts()
{
unsigned char i;
        i = inp(io_address1+4);
        i = i & 0xfd;
        outp(io_address1+4,i);
}

enable_rts2()
{
unsigned char i;
        i = inp(io_address2+4);
        i = i | 0x02;
        outp(io_address2+4,i);
}


disable_rts2()
{
unsigned char i;
        i = inp(io_address2+4);
        i = i & 0xfd;
        outp(io_address2+4,i);
}
int out_cmd(c)
unsigned char c;
{
outp(io_address1,c);
}

int out_data1(c)
unsigned char c;
{
        outp(io_address1,c);

      if ( c == 0x0d )
                printf("%c",0x0a);
/*      printf("<%x>",c);*/
        while ( (inportb(io_address1+5) & 0x60 ) != 0x60 )
                {
                }


}
#define ESC 0X1B
receive_one()
{
int i;
        while (1)
                {
                if ( kbhit() != 0 )

                        {
                        if ( (i=getch()) == 27 )
                                return -5;

                        out_data1(i);
                        }
                i = in_data1();

        if ( i == 0xff )
                        return -2;
                if ( i != -1 )
                return i;
                }
}

sendstr(s)
char *s;
{
int i,len;

        len = strlen(s);
      /* gotoxy(70,12);
       printf("the len is =%d\n",len);*/
    if ( port_open == 1) {
        for (i=0;i<len;i++)
               out_data1(s[i]);

               }
/*      out_data1(0x0d);   */

}

clear_buf()
{
        while (in_data1()!= -1 )
                {
                }
}
/*****************************communications settings***********/
/*     receive();  and   init_com(address,baudrate,irq)and exit_des()*/
init_comm(com_port1,parita,irqa)
int com_port1, parita, irqa;
{
int para,irq_no,com_set;
int ret;
     irq_no=irqa;
     if (port_open == 1)   exit_dev(irq_no);

    ret=init_com(com_port1,irqa);



    ret=set_baud(parita);
    if (ret==0) return 0;

     port_open = 1;
/*        sendstr("CONNECT");
        if ( receive_one() == -5 )
                goto ABORT;
                goto LOOP;
ABORT:
        printf("Program Abort\n");
EXITDIS:
if ( irq1 != 0xff )
        exit_dev(irq1);
if ( irq2 != 0xff )
        exit_dev(irq2);*/

}





#else
int out_data1(s)
int s;
{
bioscom(1,s,0);
}

sendstr(s)
char *s;
{
int i,len;
        len = strlen(s);
        for (i=0;i<len;i++)
                out_data1(s[i]);
/*      out_data1(0x0d);   */
}

/*****************************communications settings***********/
init_comm(com_port1,parita,irqa)
int com_port1, parita, irqa;
{
int para,irq_no,com_set;
     irq_no=irqa;

 com_set= bioscom(0,parita,com_port1);
printf("bioscom=%x\n",com_set);



ABORT:
        printf("Program Abort\n");


}
#endif
chg_bar(int key_pre)
{
      switch(key_pre)
               {
           case key_go_U:y--;if(y<1) y=24;break;       /*Έg₯Ρ€W€U₯ͺ₯kΑδ¨Σ²Ύ°Κ΄εΌΠ*/
           case key_go_D:y++;if(y>25)y=1;break;
           case key_go_L:x--;if(x<1) x=80;break;
           case key_go_R:x++;if(x>79) x=1;break;
                }

}
/****************************************************************/
/****************************************************************/
/****************************************************************/
/*    this   is   the    main   function*/

void main()
{
unsigned key_press;
char tmpbuf[300];
int count,answer;
int cols,i;
int esccount;
/*fp = fopen("decode","w");*/
set_flag = 0;
 com=0;irq=4;x=25,y=5;
 baud_rate1=B9600;

LOOP:
clrscr();
	gotoxy(20,2);line(41);
	puts ("                   \xdb\xdb           CD7220  Demo program      \xdb\xdb ");
	gotoxy(20,4);line(41);
        puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
        puts("                   Ί   F1 : RS232 Settings                 Ί  ");
        puts("                   Ί   F2 : Display settings               Ί  ");
        puts("                   Ί   F3 : User data output               Ί ");
        puts("                   Ί   F4 : Exit                           Ί ");
        puts("                   Ί   F9 : Reset the content of EEPROM    Ί ");
	puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
        if (set_flag==1)
        {
        puts("                             CD7220 command show");
        puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
        puts("                   Ί    S : Save demo message mode         Ί");
        puts("                   Ί    1 : Select display mode            Ί");
        puts("                   Ί    2 : Set or cancel cursor           Ί");
        puts("                   Ί    3 : Move cursor                    Ί");
        puts("                   Ί    4 : Initialize display             Ί");
        puts("                   Ί    5 : Clear display screen           Ί");
        puts("                   Ί    0 : Select peripheral device, dis_ Ί");
        puts("                   Ί        play or printer                Ί");
        puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ \n");

	}
	gotoxy(x,y);
        while(!bioskey(1));
        key_press = bioskey(0);

         fprintf(fp,"%x",key_press);/*__outportb__(io_address1,c);*/
        switch(key_press & 0xff00)
              {
            case key_F1 :   comm_setting();     break;
            case key_F2 :
                         if (set_flag==1)
                             {
                              dsplay_set();
                              break;
                             }
                         gotoxy(25,15);
                         printf("  Sorry....Select communication first!!\n");
                         getch(tts);
                         break;

            case key_F3 :
                         if (set_flag==1)
                             {
                              send_key();
                              break;
                             }
                         gotoxy(25,15);
                         printf("  Sorry....Select communication first!!\n");
                         getch(tts);
                         break;
            case key_F4 :   goto ABORT;

            case key_S  : if (set_flag==1) {dsp_mode(); break;}
            case key_0  : if (set_flag==1) {select_device(); break;}
            case key_3  : if (set_flag==1) {move_cursor();          break;}
            case key_2  : if (set_flag==1) {set_cursor();  break;}
            case key_4  :
                          if (set_flag==1)
                          {
                         out_data1(0x1b);out_data1(0x40);
                         sendstr("initialize display");
                               break;
                               }
            case key_5  : if (set_flag==1) {out_data1(0x0c);          break;}
            case key_F9 :
                         if (set_flag==1)
                             {
                              reset_key();
                              break;
                             }
                         gotoxy(25,15);
                         printf("  Sorry....Select communication first!!\n");
                         getch(tts);
                         break;
            case key_1  : if (set_flag==1)  { sdsp_mode();            break;}
                           }
            chg_bar(key_press);
goto LOOP;

ABORT:
	fclose(fp);
        quit();
        exit();
        printf("Program Abort\n");



}
/****************************************************************/
/****************************************************************/
/**************** RS232C   SETTINGS******************************/
line(int k)
{
   int j;
    for (j=1;j<=k;j++)
      printf ("\xdb");
   printf("\n");
}

comm_setting()
{
int key_press,irq,c,chk;
int ret;baud_rate1=B9600;parity1=BNONE;parity2=BDATA8;
x=25,y=5;
    while(1)  {
        clrscr();
        gotoxy(30,3);
        puts("RS232  Settings:");
        puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
        printf("                   Ί (C)  COM Port  : %i                    Ί\n",(com+1));

        switch (baud_rate1)  {
            case  B1200   :
        puts("                   Ί (B)  Baud Rate : 1200                 Ί ");   break;
            case  B2400   :
        puts("                   Ί (B)  Baud Rate : 2400                 Ί ");   break;
            case  B4800   :
        puts("                   Ί (B)  Baud Rate : 4800                 Ί");   break;
            case  B9600   :
        puts("                   Ί (B)  Baud Rate : 9600                 Ί ");   break;      }

      switch (parity1)   {
            case BNONE    :  par1="N";     break;
            case BODD     :  par1="O";     break;
            case BEVEN    :  par1="E";     break;
        }
      switch (parity2)   {
            case BDATA8   : par2=",8,1";   break;
            case BDATA7   : par2=",7,1";   break;
        }
        printf("                   Ί (P)  Parity    : %s %s               Ί\n ",par1,par2);
        puts("                  Ί (S)  Set Communications               Ί ");
        puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ \n");
	gotoxy(x,y);
        while(!bioskey(1));
        key_press = bioskey(0);
        switch(key_press & 0xff00) {
            case key_C   :  set_comport();    break;
            case key_B   :  set_baudrate();   break;
            case key_P   :  set_parity();     break;
            case key_S   :
                            {
                            parit=baud_rate1+parity1+parity2;
                            ret=init_comm(com,parit,irq );

                            out_data1(0x02);
                            out_data1(0x05);
                            out_data1(0x53);
                            out_data1(0x30);
                            out_data1(0x03);
                            if (ret==0) set_flag=1;
                            gotoxy(25,12);puts("Set Communications sucess,press any to continous...");
                            getch(tts);
			    c = inportb(io_address+4);
                            outportb(io_address+4,0);
                            outportb(io_address+4,0xb);
                            outportb(io_address+4,c);
                            return;
                            }
            case key_ESC : /*  com  = temp_com;
                             baud_rate = temp_baud;
                             parity    = temp_parity;*/
                             return;

	}
	chg_bar(key_press);
    }
}
/****************************************************************/
/*---------------   232C  SETTINGS   -------------------*/
/*------------------------------------------------------*/
set_comport()
{
int irq;
int select;

       clrscr();
       gotoxy(30,3);
       puts("Select COM Port     ");
       puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
       puts("                   Ί    1 : COM1         2 : COM2          Ί ");
       puts("                   Ί    3 : COM3         4 : COM4          Ί ");
       puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ \n");
       select = getch();
    switch(select) {
          case '1' :  com =0;irq=4;  return;
          case '2' :  com =1;irq=3;  return;
          case '3' :  com =2;irq=10;  return;
          case '4' :  com =3;irq=5;  return;
          default  :   break;
      }
}


/****************************************************************/
set_baudrate()
{
int baud_rate;
char select;
      clrscr();
      gotoxy(30,3);
      puts("Select Baud Rate:    ");
      puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
      puts("                   Ί     1 : 9600        2 : 4800          Ί" );
      puts("                   Ί     3 : 2400        4 : 1200          Ί" );
      puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
      select = getch();
      switch(select) {
        case '4' :   baud_rate1 = B1200;  return;
        case '3' :   baud_rate1 = B2400;  return;
        case '2' :   baud_rate1 = B4800;  return;
        case '1' :   baud_rate1 = B9600;  return;
        default  :   return;

      }

}

/****************************************************************/
set_parity()
{
char select;
      clrscr();
      gotoxy(30,3);
      puts("Select Parity:       ");
      puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
      puts("                   Ί     1 : N,8,1        2 : N,7,1        Ί ");
      puts("                   Ί     3 : O,8,1        4 : O,7,1        Ί ");
      puts("                   Ί     5 : E,8,1        6 : E,7,1        Ί  ");
      puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ \n");
      select = getch();
      switch(select) {
        case '1' :   parity1 = BNONE; parity2 = BDATA8;   return;
        case '2' :   parity1 = BNONE; parity2 = BDATA7;   return;
        case '3' :   parity1 = BODD ; parity2 = BDATA8;   return;
        case '4' :   parity1 = BODD ; parity2 = BDATA7;   return;
        case '5' :   parity1 = BEVEN; parity2 = BDATA8;   return;
        case '6' :   parity1 = BEVEN; parity2 = BDATA7;   return;
        default  :   return;
      }
   }


quit()
{


    clrscr();
}

/**************************************************************/
/**************************************************************/
/****************  DISPLAY   SETTINGS  ************************/

dsplay_set(s)
int s;
{
int i;
int key_press,parit,irq,c;
int address;
        clrscr();
        gotoxy(30,3);
        puts("CD7220 Display settings:");
        puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
        puts("                   Ί    (C)  SET Command Typt              Ί ");
        puts("                   Ί    (B)  SET BaudRate                  Ί  ");
        puts("                   Ί    (P)  SET Parity                    Ί ");
        puts("                   Ί    (A)  SET International Character   Ί ");
        puts("                   Ί    (ESC)QUIT                          Ί ");
        puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ \n");


        while(!bioskey(1));
        key_press = bioskey(0);
        switch(key_press & 0xff00) {
            case key_C   :  set_dscomport();    break;
            case key_B   :  set_dsbaudrate();   break;
            case key_P   :  set_dsparity();     break;
            case key_A   :  set_dsitrchar();    break;
            case key_ESC :  return;
        }
}
/*------------------------------------------------------*/
int cmd_mode[5]={CM02,CM05,CM43,CM37,CM03};
set_dscomport(a)
int a;
{
int irq,i;
int select;
LOOP:
       clrscr();
       gotoxy(30,3);
       puts("Select COMMAND type: ");
       puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
       puts("                   Ί   1 : DSP800        2 : ESC/POS       Ί ");
       puts("                   Ί   3 : ADM788        4 : ADM787        Ί ");
       puts("                   Ί   5 : AEDEX         6 : UTC/P         Ί ");
       puts("                   Ί   7 : UTC/S         8 : CD5220        Ί ");
       puts("                   Ί   Q : Exit                            Ί  ");
       puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
       select = getch();
    switch(select) {
          case '1' :  cmd_mode[3]=CM30; break ;
          case '2' :  cmd_mode[3]=CM31; break ;
          case '3' :  cmd_mode[3]=CM32; break ;
          case '4' :  cmd_mode[3]=CM33; break ;
          case '5' :  cmd_mode[3]=CM34; break ;
          case '6' :  cmd_mode[3]=CM35; break ;
          case '7' :  cmd_mode[3]=CM36; break ;
          case '8' :  cmd_mode[3]=CM37; break ;
          case 'q' :
          case 'Q' :return;
          default  :   break;
      }
  for(i=0;i<5;i++)
  {
  a=cmd_mode[i];
  out_data1(a);

  }
goto LOOP;
}

int baud_mode[5]={CM02,CM05,CM42,CM30,CM03};
set_dsbaudrate(s)
int s;
{
int irq,i;
int select;
LOOP:
       clrscr();
       gotoxy(30,3);
       puts("Select BAUDRATE type:");
       puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
       puts("                   Ί      1 : 9600         2 : 4800        Ί ");
       puts("                   Ί      3 : 2400         4 : 1200        Ί ");
       puts("                   Ί      Q : Exit                         Ί  ");
       puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
       select = getch();
    switch(select) {
          case '1' :  baud_mode[3]=CM30; break ;
          case '2' :  baud_mode[3]=CM31; break ;
          case '3' :  baud_mode[3]=CM32; break ;
          case '4' :  baud_mode[3]=CM33; break ;
          case 'q' :
          case 'Q' :return;
          default  :   break;
      }

  for(i=0;i<5;i++)
  {
  s=baud_mode[i];
  out_data1(s);

  }
 goto LOOP;
}

int para_mode[5]={CM02,CM05,CM50,CM31,CM03};
set_dsparity(s)
int s;
{
int irq,i;
int select;
LOOP:
       clrscr();
       gotoxy(30,3);
       puts("Select PARITY  SET: ");
       puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
       puts("                   Ί 1 : N-8-1    2 : N-7-1      3 : E-8-1 Ί ");
       puts("                   Ί 4 : E-7-1    5 : O-8-1      6 : 0-7-1 Ί ");
       puts("                   Ί Q : Exit                              Ί  ");
       puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
       select = getch();
    switch(select) {
          case '1' :  para_mode[3]=CM31;  break;
          case '2' :  para_mode[3]=CM32;  break;
          case '3' :  para_mode[3]=CM33;  break;
          case '4' :  para_mode[3]=CM34;  break;
          case '5' :  para_mode[3]=CM35;  break;
          case '6' :  para_mode[3]=CM36;  break;
          case 'q' :
          case 'Q' :return;
          default  :   break;
      }

   for(i=0;i<5;i++)
  {
  s=para_mode[i];
  out_data1(s);

  }
  goto LOOP;
}
int chr_mode[5]={CM02,CM05,CM53,CM30,CM03};
set_dsitrchar(s)
int s;
{
int irq,i;
int select;
LOOP:
       clrscr();
       gotoxy(25,3);
       puts("Select International character type: ");
       puts("                 ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ» ");
       puts("                 Ί  1 : U.S.A           2 : FRANCE             Ί ");
       puts("                 Ί  3 : GERMANY         4 : U.K                Ί ");
       puts("                 Ί  5 : DENMARK I       6 : SWEDEN             Ί ");
       puts("                 Ί  7 : ITALY           8 : SPAINY             Ί ");
       puts("                 Ί  9 : JAPAN           0 : NORWAY             Ί ");
       puts("                 Ί  A : DENMARK II      B : SLAVONIC           Ί ");
       puts("                 Ί  C : RUSSIA          D : Factory define     Ί ");
       puts("                 Ί  E : Factory define  F : User define patternΊ ");
       puts("                 Ί  Q : Exit                                   Ί ");
       puts("                 ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
       select = getch();
    switch(select) {
          case '1' :  chr_mode[3]=CM30;  goto SEND;
          case '2' :  chr_mode[3]=CM31;  goto SEND;
          case '3' :  chr_mode[3]=CM32;  goto SEND;
          case '4' :  chr_mode[3]=CM33;  goto SEND;
          case '5' :  chr_mode[3]=CM34;  goto SEND;
          case '6' :  chr_mode[3]=CM35;  goto SEND;
          case '7' :  chr_mode[3]=CM36;  goto SEND;
          case '8' :  chr_mode[3]=CM37;  goto SEND;
          case '9' :  chr_mode[3]=CM38;  goto SEND;
          case '0' :  chr_mode[3]=CM39;  goto SEND;
          case 'a' :
          case 'A' :  chr_mode[3]=CM3A;  goto SEND;
          case 'b' :
          case 'B' :  chr_mode[3]=CM3B;  goto SEND;
          case 'c' :
          case 'C' :  chr_mode[3]=CM3C; goto SEND;
          case 'd' :
          case 'D' :  chr_mode[3]=CM3D; goto SEND;
          case 'e' :
          case 'E' :  chr_mode[3]=CM3E; goto SEND;
          case 'f' :
          case 'F' :  chr_mode[3]=CM3F; goto SEND;

          case 'q' :
          case 'Q' :return;

          default  :   break;
         }
 goto LOOP;
 SEND:
    for(i=0;i<5;i++)
     {
      s=chr_mode[i];
      out_data1(s);
     }
    goto LOOP;
}

send_key()
{
char incode;
unsigned char temp[1];

      {
          int x,y;
agogo:
          x=23;y=8;
          clrscr();
          gotoxy (23,19);puts("[ESC]    : exit.");
          gotoxy (22,7);puts("ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»");
          gotoxy (22,8);puts("Ί                                       Ί");
          gotoxy (22,9);puts("Ί                                       Ί");
          gotoxy (22,10);puts("Ί                                       Ί");
          gotoxy (22,11);puts("Ί                                       Ί");
          gotoxy (22,12);puts("Ί                                       Ί");
          gotoxy (22,13);puts("Ί                                       Ί");
          gotoxy (22,14);puts("Ί                                       Ί");
          gotoxy (22,15);puts("Ί                                       Ί");
          gotoxy (22,16);puts("Ί                                       Ί");
          gotoxy (22,17);puts("ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ");
          gotoxy (23,18);puts("[CTRL+D] : to  clear display screen.  ");
          gotoxy (23,8);
          while (1) {
              incode = getch();
              if (incode==0x04)
              {
               out_data1(0x0c);
               goto agogo;
              }
              if (incode==0x1b)      return;
              else  {
                    x=x+1;
                    if (x > 61)  { y=y+1;x=23; }
                    if (y > 16)  { y=8;x=23; }
                    gotoxy(x,y);
                    putch(incode);
                    temp[0] = incode;
                    send_lenstr(1,temp);
              }
          }
     }
}

int reset_mode[5]={CM02,CM05,CM07,CM31,CM03};
reset_key(s)
int s;
{
int select,i;
LOOP:
clrscr();
       gotoxy(30,3);
       puts(" Reset:  ");
       puts("                 ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ» ");
       puts("                 Ί    (1)clear all EEPROM contents.            Ί ");
       puts("                 Ί    (2)clear upper line data message .       Ί ");
       puts("                 Ί    (3)clear lower line data message .       Ί ");
       puts("                 Ί    (4)QUIT.                                 Ί ");
       puts("                 ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
select=getch();
switch(select) {
               case '1' :reset_mode[3]= CM31;goto SEND;
               case '2' :reset_mode[3]= CM32;goto SEND;
               case '3' :reset_mode[3]= CM33;goto SEND;
               case '4' :return;
               default: break;
               }
 goto LOOP;
 SEND:
 for (i=0;i<5;i++)
 {s=reset_mode[i];
   out_data1(s);
  }
 goto LOOP;

   }


int dsaw_mode[6]={CM02,CM05,CM4C,CM31,CM37,CM03};
dsp_mode(s)
int s;
{
char message[200],*c;int j,select,i;
char tell[]="please input demo message:(Press 'ENTER' Key to send.)";
LOOP:
       clrscr();
       gotoxy(30,3);
       puts(" Save demomessage:  ");
       puts("                 ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ» ");
       puts("                 Ί   (1)Save upper line data message .         Ί ");
       puts("                 Ί   (2)Save lower line data message .         Ί ");
       puts("                 Ί   (3)Run demo message.                      Ί ");
       puts("                 Ί   (4)QUIT.                                  Ί  ");
       puts("                 ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
select=getch();
switch(select) {
               case '1' :dsaw_mode[3]= CM31;reset_mode[3]=CM32;goto SEND;
               case '2' :dsaw_mode[3]= CM32;reset_mode[3]=CM33;goto SEND;
               case '3' :
                         {
                         dsaw_mode[2]=CM44;dsaw_mode[3]=CM08;goto SEND1;
                         }
               case '4' :return;
               default: break;
               }
 goto LOOP;
 SEND:
/* clrscr();*/
 gotoxy(20,10);puts(tell);
 gotoxy(20,11);gets(message);
 for (i=0;i<5;i++)
 {s=reset_mode[i];
   out_data1(s);
  }

 for (i=0;i<6;i++)
 {
 if (i==4)
   sendstr(message);
 else
  {
   s=dsaw_mode[i];
   out_data1(s);
  }
  }
 goto LOOP;
 SEND1:
 clrscr();
    for(i=0;i<5;i++)
       {
       }
  for (i=0;i<5;i++)
  {
  s=dsaw_mode[i];
  out_data1(s);
  }
 goto LOOP;
 }
/*----------------------- command show-------------------*/

sdsp_mode()
{
int s;
int select,i;
LOOP:

       clrscr();
       gotoxy(30,3);
       puts("display mode:  ");
       puts("                   ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ» ");
       puts("                   Ί   (1)overwrite modes.                     Ί ");
       puts("                   Ί   (2)vertical scroll mode.                Ί ");
       puts("                   Ί   (3)horizontal scroll.                   Ί ");
       puts("                   Ί   (4)QUIT.                                Ί ");
       puts("                   ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ ");
       select=getch();
switch(select) {
               case '1' :out_data1(0x1b);out_data1(0x11);dummy_return();sendstr("overwirte mode");break;
               case '2' :out_data1(0x1b);out_data1(0x12);dummy_return();sendstr("vertical scroll mode");break;
               case '3' :out_data1(0x1b);out_data1(0x13);dummy_return();sendstr("horizontal scrollmode ");break;
               case '4' :return;
               default: break;
               }
 goto LOOP;
}

move_cursor()
{
char select;
LOOP:
      clrscr();
       gotoxy(30,5);
       puts("Move cursor:");
       puts("                     ΪΔΔΔΔΔΔΔΔΔΔΔΒΔΔΔΔΔΔΔΔΔΔΔΔΒΔΔΔΔΔΔΔΔΔΔΔΔΏ   ");
       puts("                     ³/:left-most³   8 : up   ³-:right-most³ ");
       puts("                     ΓΔΔΔΔΔΔΔΔΔΔΔΕΔΔΔΔΔΔΔΔΔΔΔΔΕΔΔΔΔΔΔΔΔΔΔΔΔ΄   ");
       puts("                     ³  4 : left ³   5 : home ³  6 : right ³  ");
       puts("                     ΓΔΔΔΔΔΔΔΔΔΔΔΕΔΔΔΔΔΔΔΔΔΔΔΔΕΔΔΔΔΔΔΔΔΔΔΔΔ΄  ");
       puts("                     ³  0 :bottom³   2 : down ³  Q : Exit  ³  ");
       puts("                     ΐΔΔΔΔΔΔΔΔΔΔΔΑΔΔΔΔΔΔΔΔΔΔΔΔΑΔΔΔΔΔΔΔΔΔΔΔΔΩ  ");

      select = getch();
      switch(select) {
          case '4' :   cursor_left();   break;
          case '6' :   cursor_right();  break;
          case '8' :   cursor_up();     break;
          case '2' :   cursor_down();   break;
          case '5' :   cursor_home();        break;
          case '/' :   cursor_leftmost();    break;
          case '-' :   cursor_rightmost();   break;
          case '0' :   cursor_bottom();      break;
          case 'q' :
          case 'Q' :return;
          default  :   break;
      }
goto LOOP;
}
cursor_left()
{
unsigned char code[10];
       code[0] = 0x08;
       send_lenstr(1,code);
return;
}

cursor_right()
{
unsigned char code[10];
       code[0] = 0x09;
       send_lenstr(1,code);
return;
}

cursor_up()
{
unsigned char code[10];
       code[0] = 0x1b;
       code[1] = 0x5b;
       code[2] = 0x41;
       send_lenstr(3,code);
return;
}

cursor_down()
{
unsigned char code[10];
       code[0] = 0x0a;
       send_lenstr(1,code);
return;
}

cursor_home()
{
unsigned char code[10];
       code[0] = 0x0b;
       send_lenstr(1,code);
return;
}

cursor_leftmost()
{
unsigned char code[10];
       code[0] = 0x0d;
       send_lenstr(1,code);
return;
}


cursor_rightmost()
{
unsigned char code[10];
       code[0] = 0x1b;
       code[1] = 0x5b;
       code[2] = 0x52;
       send_lenstr(3,code);

}

cursor_bottom()
{
unsigned char code[10];
       code[0] = 0x1b;
       code[1] = 0x5b;
       code[2] = 0x4b;
       send_lenstr(3,code);

}

set_cursor()
{
char select;
unsigned char code[10];
ax:
      code[0] = 0x1b;
      code[1] = 0x5f;
      clrscr();
      gotoxy(30,3);
      puts("Set cursor:");
      puts("                          ΪΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΏ");
      puts("                          ³ 1 : set cursor      ³  ");
      puts("                          ³ 2 : cancel cursor   ³  ");
      puts("                          ³ Q : Quit            ³  ");
      puts("                          ΐΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΩ  ");
      select = getch();
      switch(select) {
          case '1' :   {
            code[2] = '1';
            send_lenstr(3,code);
            break;
         }
          case '2' :   {
            code[2] = '0';
            send_lenstr(3,code);
            break;
          case 'q':
          case 'Q':
            return;
          }
          default  :   break;
      }
 goto ax;

}

select_device()
{
char select;
unsigned char code[10];

      code[0] = 0x1b;
      code[1] = 0x3d;
      clrscr();
      gotoxy(26,3);
      puts("select device:");
       puts("                   ΥΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΈ ");
       puts("                   ³   1 : select printer                      ³ ");
       puts("                   ³   2 : select display                      ³ ");
       puts("                   ³   3 : select printer and display          ³ ");
       puts("                   ³   4 : select message for customer side    ³  ");
       puts("                   ³   5 : select message for operator side    ³ ");
       puts("                   ΐΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΔΩ ");
      select = getch();
      switch(select) {
          case '1' :   {
            code[2] = 0x01;
            send_lenstr(3,code);
            break;
         }
          case '2' :   {
            code[2] = 0x02;
            send_lenstr(3,code);
            break;
          }
          case '3' :   {
            code[2] = 0x03;
            send_lenstr(3,code);
            break;
          }
         case '4' :   {
           code[2]=0x04;
           send_lenstr(3,code);
         }
         case '5' :  {
           code[2]=0x05;
           send_lenstr(3,code);
         }
          default  :   break;
      }

}



