[comp.sys.amiga] Cmd Corrections

carolyn@cbmvax.UUCP (06/08/87)

                       Changes to Cmd.c for v2
                       =======================

   It was brought to my attention that my Cmd program hung when used
with Textcraft (symptom = wrote file to disk forever).  This made me
realize that I had forgotten to change CMD_WRITE requests with a length
of -1 (write data until a NULL is encountered).  Many devices understand
a -1 length write, but AmigaDOS does not.  I modified MyBeginIO() to
replace any -1 write length with the actual length, and also to skip
any 0 length writes.  In addition, I discovered a very dumb typo in
my u1[] usage string.

   Here are the corrections to the source.  I will attempt to send
new complete source and executable postings to doc.


[]
(correct this string defined above main)

char u1[]={"\nCLI Usage: [run] Cmd [-s] [-m] [-n] devicename filename\n"};

[]

(new MyBeginIO - changes are before and after if((!Skip)...)

VOID MyBeginIO(ior)
struct IOStdReq *ior;
   {
   reqcnt += 1;
   if(ior->io_Command == CMD_WRITE)
      {
      if(!writecnt)
         {
         while(MainBusy);
         MainBusy = TRUE;
         Signal(mainTask,OPEN_SIG);
         while(MainBusy);
         }

      /* If device CMD_WRITE uses length -1, convert to actual length */
      if(ior->io_Length==-1)  ior->io_Length = strlen(ior->io_Data);

      if((!Skip)||(writecnt>0)||(ior->io_Length > SHORT_WRITE))
         {
         if(ior->io_Length)
            {
            while(MainBusy);
            MainBusy = TRUE;
            ioR = ior;
            Signal(mainTask,WRITE_SIG);  /* Signal write */
            while(MainBusy);
            }
         }
      writecnt += 1;
      ior->io_Actual = ior->io_Length;
      }
   if(!(ior->io_Flags & IOF_QUICK))  ReplyMsg(ior);
   }
[]


-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Carolyn Scheppner -- CBM   >>Amiga Technical Support<<
                     UUCP  ...{allegra,caip,ihnp4,seismo}!cbmvax!carolyn 
                     PHONE 215-431-9180
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=