Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Stanislav Safronov                   2:5020/630     15 Jan 2003  23:36:38
 To : All
 Subject : dosemu serial patch
 -------------------------------------------------------------------------------- 
 
 Добрый /1642 грохнул это письмо, поэтому пересылаю его снова...
 
 За праздники нашел проблему в DOS эмуляторе *dosemu* и починил работу с fifo и
 fossil ! Удивительно, что народ как минимум с 1999 не исправил ошибки... А
 жалобные стоны раздаются и по сей день в инете на работу dosemu с портами,
 ошибками в zmodem и пр.
 Теперь BBS/BW должна нормально работать на трансфер файлов пользователям. А вот
 с приемом до конца не исправил, но кому нужно могу дать сырые патчи, которые
 значительно улучшают работу или полные патчи для работы любой BBS из под
 DOSEMU. Изменения коснулись и *fossil* драйвера.
 Судя по архиву эхи уверен, что кому-то эти патчи пригодятся, поэтому кидаю в
 эху. Они маленькие:
 === Cut ===
 -+- fossil.c.old    Wed Dec 18 04:36:38 2002
 +++ fossil.c    Tue Jan  7 00:10:51 2003
 @@ -225,11 +225,18 @@ void fossil_int14(int num)
 
    /* Write character (without wait) */
    case 0x0b:
 -    write_char(num, LO(ax));
 +    if (!com[num].tx_overflow){
 +      write_char(num, LO(ax));
 +      LWORD(eax)= 1;
 +    #if SER_DEBUG_FOSSIL_RW
 +      s_printf("SER%d: FOSSIL 0x0b: Write char 0x%02x, return AX=%d\n", num,
 LO(ax), 1);
 +    #endif
 +    }else{
      #if SER_DEBUG_FOSSIL_RW
        s_printf("SER%d: FOSSIL 0x0b: Write char 0x%02x, return AX=%d\n", num,
 LO(ax), !com[num].tx_overflow);
      #endif
      LWORD(eax) = !com[num].tx_overflow;
 +    }
      break;
 
    /* Block read */
 === Cut ===
 === Cut ===
 -+- ser_irq.c.old   Wed Dec 18 04:36:38 2002
 +++ ser_irq.c   Tue Jan  7 00:22:02 2003
 @@ -160,13 +160,20 @@ void transmit_engine(int num) /* Interna
      if (!(control & TIOCM_CTS)) return;        /* Return if CTS is low */
    }
 
 -  if (com[num].tx_overflow) {      /* Is it in overflow state? */
 -    rtrn = RPT_SYSCALL(write(com[num].fd, &com[num].TX, 1));  /* Write port */
 -    if (rtrn == 1)                               /* Did it succeed? */
 -      com[num].tx_overflow = 0;                  /* Exit overflow state */
 -  }
 -  else if (com[num].fifo_enable) { /* Is FIFO enabled? */
 +  if (com[num].fifo_enable) {  /* Is FIFO enabled? */
 
 +    if (com[num].tx_overflow){
 +      if(RPT_SYSCALL(write(com[num].fd,
 &com[num].tx_buf[com[num].tx_buf_start], 1))!=1){
 +        return;  /* write error */
 +      }else{
 +        /* Squeeze char into FIFO */
 +        com[num].tx_buf[com[num].tx_buf_end] = com[num].TX ;
 +        /* Update FIFO queue pointers */
 +        com[num].tx_buf_end = (com[num].tx_buf_end + 1) % TX_BUFFER_SIZE;
 +        com[num].tx_buf_start = (com[num].tx_buf_start + 1) % TX_BUFFER_SIZE;
 +        com[num].tx_overflow = 0;                  /* Exit overflow state */
 +      }
 +    }
      /* Clear as much of the transmit FIFO as possible! */
      while (com[num].tx_buf_bytes > 0) {        /* Any data in fifo? */
        rtrn = RPT_SYSCALL(write(com[num].fd,
 &com[num].tx_buf[com[num].tx_buf_start], 1));
 @@ -184,6 +191,11 @@ void transmit_engine(int num)  /* Interna
      }
    }
    else {                   /* Not in FIFO mode */
 +    if (com[num].tx_overflow) {        /* Is it in overflow state? */
 +      rtrn = RPT_SYSCALL(write(com[num].fd, &com[num].TX, 1));  /* Write port
 */
 +      if (rtrn == 1)                               /* Did it succeed? */
 +        com[num].tx_overflow = 0;                  /* Exit overflow state */
 +    }
      if (com[num].tx_trigger) {             /* Is it time to trigger int */
        com[num].tx_trigger = 0;
        com[num].LSRqueued |= UART_LSR_TEMT | UART_LSR_THRE;
 === Cut ===
 
 Stanislav
 
 --- GoldED+/LNX 1.1.4.7
  * Origin: -= Crazy Students BBS 423-3328 Time 00:00-05:30 =- (2:5020/630)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 dosemu serial patch   Stanislav Safronov   15 Jan 2003 23:36:38 
Архивное /ru.linux/207423e25b88b.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional