home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / cdrom / compactplayer / source / readargs.c < prev    next >
C/C++ Source or Header  |  1995-12-28  |  2KB  |  75 lines

  1. #include "sysheaders.h"
  2. #include "CompactPlayer.h"
  3.  
  4. /* This is a neat little function for reading tooltypes from an icon as if they
  5.  * were command line arguments. It needs some special setup like an oversized
  6.  * argument array... */
  7.  
  8. struct RDArgs *
  9. ReadToolArgs( STRPTR template, LONG *argarray )
  10. {
  11.     struct DiskObject *icon;
  12.     struct RDArgs *rda = AllocDosObject( DOS_RDARGS, NULL );
  13.     STRPTR mytemplate = AllocVec( strlen(template)+16, MEMF_CLEAR );
  14.     
  15.     if (rda && mytemplate)
  16.     {
  17.         rda->RDA_ExtHelp = NULL;
  18.         
  19.         strcpy( mytemplate, template );
  20.         
  21.         if (_WBenchMsg)
  22.         {
  23.             CurrentDir( _WBenchMsg->sm_ArgList->wa_Lock );
  24.             
  25.             if (icon = GetDiskObject( _WBenchMsg->sm_ArgList->wa_Name ))
  26.             {
  27.                 STRPTR *toolarray, toolstring;
  28.                 
  29.                 if (toolarray = icon->do_ToolTypes)
  30.                 while( *toolarray )
  31.                 {
  32.                     rda->RDA_Source.CS_Length += strlen(*toolarray++) + 1;
  33.                 }
  34.                 
  35.                 if (rda->RDA_Source.CS_Length)
  36.                 {
  37.                     STRPTR s;
  38.                     rda->RDA_Source.CS_Buffer = AllocVec( rda->RDA_Source.CS_Length + 1, MEMF_CLEAR );
  39.                     toolstring = rda->RDA_Source.CS_Buffer;
  40.                 
  41.                     /* copy all tool types to a single string */
  42.                     
  43.                     for ( toolarray = icon->do_ToolTypes ;
  44.                         s = *toolarray ; toolarray++ )
  45.                     {
  46.                         while (*toolstring = *s++)
  47.                             toolstring++;
  48.                         *toolstring++ = ' ';
  49.                     }
  50.                     *(toolstring - 1)= '\n';
  51.                     *toolstring = 0;
  52.                 }
  53.                 FreeDiskObject( icon );
  54.             }
  55.             strcat( mytemplate, ",ThrowAway/M" );
  56.         }
  57.         rda = ReadArgs( mytemplate, argarray, rda );
  58.     }
  59.     if (mytemplate)
  60.         FreeVec( mytemplate );
  61.     return rda;
  62. }
  63.  
  64. void
  65. FreeToolArgs( struct RDArgs *rda )
  66. {
  67.     if (rda)
  68.     {
  69.         if ( rda->RDA_Source.CS_Buffer )
  70.             FreeVec( rda->RDA_Source.CS_Buffer );
  71.         FreeArgs( rda );
  72.         FreeDosObject( DOS_RDARGS, rda );
  73.     }
  74. }
  75.