Advertisement
uaa

set data format/send break diff for epicon-5.1

uaa
Feb 20th, 2021
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.64 KB | None | 0 0
  1. --- epicon.c.orig Thu Apr 20 11:58:11 2017
  2. +++ epicon.c Mon Jan 11 14:10:35 2021
  3. @@ -64,6 +64,8 @@ int FP1,FP2; /* use to close fi
  4. int net_flag = 0; /* ip net connect flag */
  5. int server_ip_flag = 0; /* ip server flag */
  6. int Twostop = 0; /* 2 stop bit */
  7. +int Datalen = CS8; /* data bit length */
  8. +int Parity = 0; /* parity setting */
  9. int Bin_flag = 0; /* binary mode flag cannot escape */
  10. int Echo_flag = 0; /* input echo flag mode */
  11. int ip_socket_bufsize = 1024*1024; /* ip socket buffer size */
  12. @@ -106,14 +108,14 @@ char *argv[];
  13. done = i = speed = t_result = epicon_pid = 0;
  14. extern char *optarg;
  15. extern int optind;
  16. - extern int getopt(), convert_speed(), escape_code(), access();
  17. + extern int getopt(), convert_speed(), escape_code(), access(), convert_mode();
  18. epicon_pid = getpid();
  19. sprintf( Epicon_Socket ,"%s%ld",Epicon_Socket_init , epicon_pid);
  20. unlink( Epicon_Socket );
  21. strcpy(com_port, COMPORT);
  22. argv_redirect = argv[argc];
  23. speed = convert_speed(SPEED);
  24. - while((i = getopt(argc, argv,"bmMs:d:D:l:e:n:L:f:F:c:pqvz")) != EOF) {
  25. + while((i = getopt(argc, argv,"bmMs:d:D:l:e:n:L:f:F:c:pqvzx:")) != EOF) {
  26. switch(i) {
  27. case 'b':
  28. Bin_flag = 1; /* cannot escape flag set */
  29. @@ -201,6 +203,12 @@ char *argv[];
  30. case 'z':
  31. AZ_flag = 0;
  32. break;
  33. + case 'x':
  34. + if(convert_mode(optarg) == EOF) {
  35. + fprintf(stderr,"%s: invalid mode\n", optarg);
  36. + exit(1);
  37. + }
  38. + break;
  39. default:
  40. usage(*argv);
  41. exit(3);
  42. @@ -249,6 +257,7 @@ char *argv[];
  43. fprintf(stderr,"\r\n** Welcome to epicon Version-%s Copyright Isamu Yamauchi %s **",VER,DAY);
  44. if (!Bin_flag) fprintf(stderr,"\r\n exec shell ~! ");
  45. if (!Bin_flag) fprintf(stderr,"\r\n send binary files ~f");
  46. + if (!Bin_flag) fprintf(stderr,"\r\n send break ~b");
  47. if (!Bin_flag) fprintf(stderr,"\r\n call rz,sz,sx,rx ~rz,~sz,~sx,~rx");
  48. if (!Bin_flag) fprintf(stderr,"\r\n call kermit ~sk,~rk");
  49. if (!Bin_flag) fprintf(stderr,"\r\n external command ~C ");
  50. @@ -333,6 +342,36 @@ register char *sp;
  51. return EOF;
  52. }
  53.  
  54. +convert_mode(arg)
  55. +register char *arg;
  56. +{
  57. + register int i = 0;
  58. + char c;
  59. + static int cs[] = {CS5, CS6, CS7, CS8};
  60. + static int sp[] = {0, CSTOPB};
  61. + while(c = arg[i]) {
  62. + if (i > 2) return EOF;
  63. + if (c == '-') ;/* do nothing */
  64. + else switch(i) {
  65. + case 0:
  66. + if (c < '5' || c > '8') return EOF;
  67. + Datalen = cs[c - '5'];
  68. + break;
  69. + case 1:
  70. + if (c == 'E' || c == 'e') Parity = PARENB;
  71. + else if (c == 'O' || c == 'o') Parity = PARENB | PARODD;
  72. + else if (c == 'N' || c == 'n') Parity = 0;
  73. + else return EOF;
  74. + break;
  75. + case 2:
  76. + if (c < '1' || c > '2') return EOF;
  77. + Twostop = sp[c - '1'];
  78. + break;
  79. + }
  80. + i++;
  81. + }
  82. + return 0;
  83. +}
  84.  
  85. int escape_code(c)
  86. register char *c;
  87. --- epicon_main.c.orig Mon Jan 11 13:51:52 2021
  88. +++ epicon_main.c Mon Jan 11 14:03:47 2021
  89. @@ -54,6 +54,7 @@ extern void shell_process();
  90. extern void send_file();
  91. extern void msleep();
  92. extern void send_file_char();
  93. +extern void send_break();
  94. extern char esc[];
  95. extern pid_t ck_pid; /* check to process id */
  96. extern int com_port_fd; /* com_port file descriptor */
  97. @@ -604,6 +605,10 @@ check_char_1() {
  98. set_console_mode(2);
  99. ch4 = strtok(f3,"\n");
  100. send_file_char(fp2,ch4);
  101. + break;
  102. + case 'b':
  103. + incount = incount - 2;
  104. + send_break();
  105. break;
  106. default:
  107. esc_flag = 0;
  108. --- epicon_uty.c.orig Thu Apr 20 12:00:09 2017
  109. +++ epicon_uty.c Mon Jan 11 14:02:36 2021
  110. @@ -55,6 +55,8 @@ extern char *ip_port; /* ip net conne
  111. extern char *server_ip_port; /* default server port */
  112. extern char com_port[]; /* tty_dev name */
  113. extern int Twostop; /* 2 stop bit */
  114. +extern int Datalen; /* data bit length */
  115. +extern int Parity; /* parity setting */
  116. extern int Bin_flag; /* binary mode flag cannot escape */
  117. extern int Echo_flag; /* input echo mode flag */
  118. extern int ip_socket_bufsize; /* ip socket buffer size */
  119. @@ -727,19 +729,14 @@ void set_com_port_mode(speed)
  120. com_port_set = com_port_save;
  121. com_port_set.c_iflag &= ~(IXON|IXANY|IXOFF|ISTRIP|INLCR|ICRNL|IGNCR);
  122. com_port_set.c_oflag &= ~(ONLCR|OCRNL|ONOCR|ONLRET);
  123. - com_port_set.c_cflag &= ~(PARENB);
  124. + com_port_set.c_cflag &= ~(PARENB|PARODD|CSTOPB|CSIZE);
  125. com_port_set.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHONL|ISIG);
  126. com_port_set.c_cflag |= (CLOCAL|CREAD|IGNPAR);
  127. + com_port_set.c_cflag |= (Parity|Twostop|Datalen);
  128. com_port_set.c_oflag = 0;
  129. - com_port_set.c_cflag &= ~PARENB;
  130. - com_port_set.c_cflag |= CS8;
  131. - if (Twostop) {
  132. - com_port_set.c_cflag |= CSTOPB; /* Set two stop bits */
  133. - }
  134. #ifdef CBAUDEX
  135. com_port_set.c_cflag &= ~(CBAUDEX);
  136. #endif
  137. - com_port_set.c_cflag &= ~(PARENB);
  138. /* com_port_set.c_iflag |= IXOFF; */ /* X/Y modem will clear this */
  139. // com_port_set.c_cflag |= CLOCAL|(speed); 2009.6.9 delete
  140. com_port_set.c_cc[VMIN] = 0;
  141. @@ -807,4 +804,13 @@ msleep(int msec) { /* wait milli second */
  142. perror("msleep");
  143. return -1;
  144. }
  145. +}
  146. +
  147. +send_break()
  148. +{
  149. + #ifndef HAVE_TERMIOS
  150. + ioctl(com_port_fd, TCSBRK, 0);
  151. + #else
  152. + tcsendbreak(com_port_fd, 250);
  153. + #endif
  154. }
  155.  
  156.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement