/* 6. Erweiterung */
/* Empfang einer beliebigen Datei ueber das Serial-
 * Device von einem zweiten Rechner.
 */

void EmpfangeTextDatei(IOExtSerPtr rxReqPtr)
{
  FileHandleBPtr  rxDatei;
  long            geschrieben;

  AbortIO(rxReqPtr); /* den einzigen Request aus dem Emp- */
  WaitIO(rxReqPtr);            /* fangskanal zurueckholen */

  geschrieben = FPuts(rxWin, Empfang);        /* zur Info */

  SetTermChars(rxReqPtr);  /* Dateiende automat. erkennen */

  rxReqPtr->IOSer.io_Length = 1;/*zunaechst nur 1 Zeichen */

  rxDatei = (FileHandleBPtr)   /* dorthin Daten schreiben */
            Open("RAM:Ser.tst", MODE_NEWFILE);
  if (rxDatei)                         /* Datei geoeffnet */
    {
     for(;;)         /* schoen-gefaehrliche Dauerschleife */
       {
        rxReqPtr->IOSer.io_Command = CMD_READ;
        DoIO(rxReqPtr);                /* Zeichen abholen */
        if (rxReqPtr->IOSer.io_Actual)      /* Zeichen da */
          {
           geschrieben =            /* in Datei schreiben */
                         FWrite(rxDatei, rxPuffer, 1,
                         rxReqPtr->IOSer.io_Actual);
           geschrieben = Write(rxWin, ".", 1);    /* Info */
          }
        else                            /* nichts gelesen */
          break;                     /* deshalb abbrechen */

        rxReqPtr->IOSer.io_Command = SDCMD_QUERY;
        DoIO(rxReqPtr); /* Anz. Zeichen im dev-int. Puff.?*/
        if (rxReqPtr->IOSer.io_Actual == 0)   /* keine da */
          break;                     /* raus aus Schleife */
        else /* Leselaenge auf Anzahl vorhandener Zeichen */
          rxReqPtr->IOSer.io_Length =
                               rxReqPtr->IOSer.io_Actual;
        } /* for */
      Close(rxDatei);
    }
  geschrieben = FPuts(rxWin, Beendet);
}
