home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume39 / cmdline / patch02 < prev    next >
Encoding:
Text File  |  1993-08-21  |  11.5 KB  |  414 lines

  1. Newsgroups: comp.sources.misc
  2. From: brad@hcx1.ssd.csd.harris.com (Brad Appleton)
  3. Subject: v39i044:  cmdline - C++ Library for parsing command-line arguments, Patch02
  4. Message-ID: <1993Aug22.020821.984@sparky.sterling.com>
  5. X-Md4-Signature: 2f744d5b8cbcbb000b28eef1210c1052
  6. Sender: kent@sparky.sterling.com (Kent Landfield)
  7. Reply-To: brad@travis.csd.harris.com
  8. Organization: Harris Computer Systems
  9. Date: Sun, 22 Aug 1993 02:08:21 GMT
  10. Approved: kent@sparky.sterling.com
  11.  
  12. Submitted-by: brad@hcx1.ssd.csd.harris.com (Brad Appleton)
  13. Posting-number: Volume 39, Issue 44
  14. Archive-name: cmdline/patch02
  15. Environment: C++
  16. Patch-To: cmdline: Volume 31, Issue 47-54
  17.  
  18. This is patch 2 of CmdLine. CmdLine is an object-oriented command-line
  19. argument parser for C++ programs.
  20.  
  21. To apply this patch:
  22.  
  23. 1) cd to you CmdLine source directory
  24. 2) unshar/unpack the patch file into this directory
  25. 3) type "patch -p0 <PATCH02"
  26.  
  27. If you want more information about CmdLine or want the latest source,
  28. please send an e-mail request to brad@ssd.csd.harris.com
  29.  
  30.  ______________________ "And miles to go before I sleep." ______________________
  31.  Brad Appleton                         Harris Corp., Computer Systems Division
  32.    Senior Software Engineer            2101 West Cypress Creek Road,  M/S 161 
  33.      brad@ssd.csd.harris.com           Fort Lauderdale, FL  33309-1892  USA
  34.        ...!uunet!travis!brad                 Phone: (305) 973-5190
  35.  ~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my employer! ~~~~~~~~~~~~~~~~~~~
  36. ----
  37. #! /bin/sh
  38. # This is a shell archive.  Remove anything before this line, then unpack
  39. # it by saving it into a file and typing "sh file".  To overwrite existing
  40. # files, type "sh file -c".  You can also feed this as standard input via
  41. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  42. # will see the following message at the end:
  43. #        "End of shell archive."
  44. # Contents:  PATCH02
  45. # Wrapped by brad@amber on Thu Aug 19 16:36:15 1993
  46. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  47. if test -f 'PATCH02' -a "${1}" != "-c" ; then 
  48.   echo shar: Will not clobber existing file \"'PATCH02'\"
  49. else
  50. echo shar: Extracting \"'PATCH02'\" \(8993 characters\)
  51. sed "s/^X//" >'PATCH02' <<'END_OF_FILE'
  52. X*** README.OLD    Thu Aug 19 16:31:18 1993
  53. X--- README    Thu Aug 19 16:01:35 1993
  54. X***************
  55. X*** 187,189 ****
  56. X--- 187,193 ----
  57. X   - Added the ability to allow (at run-time) the use of "+" as the long-option
  58. X     prefix (this could be done only at compile-time until now).
  59. X     
  60. X+  08/19/93        Brad Appleton        <brad@ssd.csd.harris.com>
  61. X+  -----------------------------------------------------------------------------
  62. X+  - Fixed a problem that some machines/compilers had with the contructor
  63. X+    ignoring the first CmdArg.
  64. X*** src/lib/cmdline.c.OLD    Thu Aug 19 16:31:41 1993
  65. X--- src/lib/cmdline.c    Thu Aug 19 15:58:06 1993
  66. X***************
  67. X*** 130,135 ****
  68. X--- 130,137 ----
  69. X  filebasename(const char * filename)
  70. X  {
  71. X  
  72. X+    if (filename == NULL)  return  filename ;
  73. X+ 
  74. X  #if (defined(vms) || defined(msdos) || defined(os2))
  75. X     const char * start, * p1, * p2 ;
  76. X     char * str, * ext;
  77. X***************
  78. X*** 199,205 ****
  79. X  }
  80. X  
  81. X     // Constructor with a name and CmdArgs
  82. X! CmdLine::CmdLine(const char * cmdname, CmdArg * ...)
  83. X     : cmd_parse_state(cmd_START_STATE),
  84. X       cmd_state(cmd_START_STATE),
  85. X       cmd_flags(DEFAULT_CMDFLAGS),
  86. X--- 201,207 ----
  87. X  }
  88. X  
  89. X     // Constructor with a name and CmdArgs
  90. X! CmdLine::CmdLine(const char * cmdname, CmdArg * cmdarg1 ...)
  91. X     : cmd_parse_state(cmd_START_STATE),
  92. X       cmd_state(cmd_START_STATE),
  93. X       cmd_flags(DEFAULT_CMDFLAGS),
  94. X***************
  95. X*** 219,226 ****
  96. X     CmdArgList * arg_list = iter();
  97. X  
  98. X     va_list  ap;
  99. X!    va_start(ap, cmdname);
  100. X!    for (CmdArg * cmdarg = va_CmdArgP(ap) ; cmdarg ; cmdarg = va_CmdArgP(ap)) {
  101. X        arg_list->add(cmdarg);
  102. X     }
  103. X     va_end(ap);
  104. X--- 221,228 ----
  105. X     CmdArgList * arg_list = iter();
  106. X  
  107. X     va_list  ap;
  108. X!    va_start(ap, cmdarg1);
  109. X!    for (CmdArg * cmdarg = cmdarg1 ; cmdarg ; cmdarg = va_CmdArgP(ap)) {
  110. X        arg_list->add(cmdarg);
  111. X     }
  112. X     va_end(ap);
  113. X***************
  114. X*** 228,234 ****
  115. X  
  116. X  
  117. X     // Constructor with CmdArgs
  118. X! CmdLine::CmdLine(CmdArg * cmdarg, CmdArg * ...)
  119. X     : cmd_parse_state(cmd_START_STATE),
  120. X       cmd_state(cmd_START_STATE),
  121. X       cmd_flags(DEFAULT_CMDFLAGS),
  122. X--- 230,236 ----
  123. X  
  124. X  
  125. X     // Constructor with CmdArgs
  126. X! CmdLine::CmdLine(CmdArg * cmdarg1 ...)
  127. X     : cmd_parse_state(cmd_START_STATE),
  128. X       cmd_state(cmd_START_STATE),
  129. X       cmd_flags(DEFAULT_CMDFLAGS),
  130. X***************
  131. X*** 241,257 ****
  132. X       cmd_err(NULL),
  133. X       cmd_quit_handler(NULL)
  134. X  {
  135. X!    if (cmdarg == NULL)  return;
  136. X     ::init_args(cmd_args);
  137. X  
  138. X     CmdArgListListIter  iter(cmd_args);
  139. X     CmdArgList * arg_list = iter();
  140. X  
  141. X-    arg_list->add(cmdarg);
  142. X- 
  143. X     va_list  ap;
  144. X!    va_start(ap, cmdarg);
  145. X!    for (cmdarg = va_CmdArgP(ap) ; cmdarg ; cmdarg = va_CmdArgP(ap)) {
  146. X        arg_list->add(cmdarg);
  147. X     }
  148. X     va_end(ap);
  149. X--- 243,257 ----
  150. X       cmd_err(NULL),
  151. X       cmd_quit_handler(NULL)
  152. X  {
  153. X!    if (cmdarg1 == NULL)  return;
  154. X     ::init_args(cmd_args);
  155. X  
  156. X     CmdArgListListIter  iter(cmd_args);
  157. X     CmdArgList * arg_list = iter();
  158. X  
  159. X     va_list  ap;
  160. X!    va_start(ap, cmdarg1);
  161. X!    for (CmdArg * cmdarg = cmdarg1 ; cmdarg ; cmdarg = va_CmdArgP(ap)) {
  162. X        arg_list->add(cmdarg);
  163. X     }
  164. X     va_end(ap);
  165. X***************
  166. X*** 273,282 ****
  167. X  void
  168. X  CmdLine::name(const char * progname)
  169. X  {
  170. X  #if (defined(vms) || defined(msdos) || defined(os2))
  171. X     delete [] cmd_name;
  172. X  #endif
  173. X!    cmd_name = ::filebasename(progname);
  174. X  }
  175. X  
  176. X  
  177. X--- 273,284 ----
  178. X  void
  179. X  CmdLine::name(const char * progname)
  180. X  {
  181. X+    static  const char unknown_progname[] = "<unknown-program>" ;
  182. X+ 
  183. X  #if (defined(vms) || defined(msdos) || defined(os2))
  184. X     delete [] cmd_name;
  185. X  #endif
  186. X!    cmd_name = ::filebasename((progname) ? progname : unknown_progname);
  187. X  }
  188. X  
  189. X  
  190. X***************
  191. X*** 347,352 ****
  192. X  CmdArg *
  193. X  CmdLineCmdArgIter::operator()(void)
  194. X  {
  195. X!    return  (iter) ? (*iter)() : NULL ;
  196. X  }
  197. X  
  198. X--- 349,354 ----
  199. X  CmdArg *
  200. X  CmdLineCmdArgIter::operator()(void)
  201. X  {
  202. X!    return  (iter) ? iter->operator()() : NULL ;
  203. X  }
  204. X  
  205. X*** src/lib/cmdline.h.OLD    Thu Aug 19 16:31:44 1993
  206. X--- src/lib/cmdline.h    Wed Aug 18 09:22:11 1993
  207. X***************
  208. X*** 506,514 ****
  209. X        //
  210. X     CmdLine(const char * name =0);
  211. X  
  212. X!    CmdLine(const char * name, CmdArg * ...);   // last arg should be NULL
  213. X  
  214. X!    CmdLine(CmdArg * cmdarg, CmdArg * ...);     // last arg should be NULL
  215. X  
  216. X     virtual ~CmdLine(void);
  217. X  
  218. X--- 506,514 ----
  219. X        //
  220. X     CmdLine(const char * name =0);
  221. X  
  222. X!    CmdLine(const char * name, CmdArg * cmdarg1 ...); // last arg should be NULL
  223. X  
  224. X!    CmdLine(CmdArg * cmdarg1 ...);  // last arg should be NULL
  225. X  
  226. X     virtual ~CmdLine(void);
  227. X  
  228. X*** src/lib/fifolist.h.OLD    Thu Aug 19 16:31:49 1993
  229. X--- src/lib/fifolist.h    Mon Apr 19 11:15:48 1993
  230. X***************
  231. X*** 57,68 ****
  232. X     GenericFifoListNode * head;
  233. X     GenericFifoListNode * tail;
  234. X  
  235. X- public:
  236. X     GenericFifoList(void)
  237. X        : head(0), tail(0), num_items(0), del_items(0), mod(0) {}
  238. X  
  239. X-    virtual  ~GenericFifoList(void);
  240. X- 
  241. X     // Remove the first item from the list
  242. X     void *
  243. X     remove(void);
  244. X--- 57,65 ----
  245. X***************
  246. X*** 71,76 ****
  247. X--- 68,76 ----
  248. X     void
  249. X     add(void * item);
  250. X  
  251. X+ public:
  252. X+    virtual  ~GenericFifoList(void);
  253. X+ 
  254. X     // Was the list modified since the last time we checked?
  255. X     int
  256. X     modified(void) { return (mod) ? (mod = 0, 1) : 0 ; }
  257. X***************
  258. X*** 101,107 ****
  259. X  private:
  260. X     GenericFifoList::GenericFifoListNode * current;
  261. X  
  262. X! public:
  263. X     GenericFifoListIter(GenericFifoList & fifo_list)
  264. X        : current(fifo_list.head) {}
  265. X  
  266. X--- 101,107 ----
  267. X  private:
  268. X     GenericFifoList::GenericFifoListNode * current;
  269. X  
  270. X! protected:
  271. X     GenericFifoListIter(GenericFifoList & fifo_list)
  272. X        : current(fifo_list.head) {}
  273. X  
  274. X***************
  275. X*** 108,120 ****
  276. X     GenericFifoListIter(GenericFifoList * fifo_list)
  277. X        : current(fifo_list->head) {}
  278. X  
  279. X-    virtual  ~GenericFifoListIter(void);
  280. X- 
  281. X     // Return the current item in the list and advance to the next item.
  282. X     // returns NULL if at end-of-list
  283. X     //
  284. X     void *
  285. X     operator()(void);
  286. X  } ;
  287. X  
  288. X  
  289. X--- 108,122 ----
  290. X     GenericFifoListIter(GenericFifoList * fifo_list)
  291. X        : current(fifo_list->head) {}
  292. X  
  293. X     // Return the current item in the list and advance to the next item.
  294. X     // returns NULL if at end-of-list
  295. X     //
  296. X     void *
  297. X     operator()(void);
  298. X+ 
  299. X+ public:
  300. X+    virtual  ~GenericFifoListIter(void);
  301. X+ 
  302. X  } ;
  303. X  
  304. X  
  305. X***************
  306. X*** 125,131 ****
  307. X     unsigned           index;
  308. X     GenericFifoList::GenericFifoListNode * current;
  309. X  
  310. X! public:
  311. X     GenericFifoListArray(GenericFifoList & fifo_list)
  312. X        : list(fifo_list), index(0), current(fifo_list.head) {}
  313. X  
  314. X--- 127,133 ----
  315. X     unsigned           index;
  316. X     GenericFifoList::GenericFifoListNode * current;
  317. X  
  318. X! protected:
  319. X     GenericFifoListArray(GenericFifoList & fifo_list)
  320. X        : list(fifo_list), index(0), current(fifo_list.head) {}
  321. X  
  322. X***************
  323. X*** 132,139 ****
  324. X     GenericFifoListArray(GenericFifoList * fifo_list)
  325. X        : list(*fifo_list), index(0), current(fifo_list->head) {}
  326. X  
  327. X-    virtual  ~GenericFifoListArray(void);
  328. X- 
  329. X     // How many items are in the array?
  330. X     unsigned  count(void) const  { return  list.count(); }
  331. X  
  332. X--- 134,139 ----
  333. X***************
  334. X*** 147,152 ****
  335. X--- 147,156 ----
  336. X     //
  337. X     void *
  338. X     operator[](unsigned  ndx);
  339. X+ 
  340. X+ public:
  341. X+    virtual  ~GenericFifoListArray(void);
  342. X+ 
  343. X  } ;
  344. X  
  345. X  #ifdef TEMPLATES
  346. X***************
  347. X*** 187,198 ****
  348. X  
  349. X     Type &
  350. X     operator[](unsigned  ndx)
  351. X!       { return  *((Type *) GenericFifoListArray::operator[](ndx)) }
  352. X  } ;
  353. X  
  354. X  #define  DECLARE_FIFO_LIST(Name,Type) \
  355. X     typedef  FifoList<Type> Name; \
  356. X!    typedef  FifoListIter<Type>  name2(Name,Iter) \
  357. X     typedef  FifoListArray<Type> name2(Name,Array)
  358. X  
  359. X  #else  /* dont have templates -- have to fake it */
  360. X--- 191,202 ----
  361. X  
  362. X     Type &
  363. X     operator[](unsigned  ndx)
  364. X!       { return  *((Type *) GenericFifoListArray::operator[](ndx)); }
  365. X  } ;
  366. X  
  367. X  #define  DECLARE_FIFO_LIST(Name,Type) \
  368. X     typedef  FifoList<Type> Name; \
  369. X!    typedef  FifoListIter<Type>  name2(Name,Iter); \
  370. X     typedef  FifoListArray<Type> name2(Name,Array)
  371. X  
  372. X  #else  /* dont have templates -- have to fake it */
  373. X*** src/lib/patchlevel.c.OLD    Thu Aug 19 16:31:52 1993
  374. X--- src/lib/patchlevel.c    Wed Jul 14 10:55:42 1993
  375. X***************
  376. X*** 24,36 ****
  377. X     // file that makes up this version of the project.
  378. X     //
  379. X  static const char ident[] =
  380. X!    "@(#)SMS  task: cmdline-1.01" ;
  381. X  
  382. X  
  383. X     // Release and patchlevel information
  384. X  #define  CMDLINE_RELEASE     1
  385. X! #define  CMDLINE_PATCHLEVEL  1
  386. X! #define  CMDLINE_IDENT       "@(#)CmdLine    1.01"
  387. X  
  388. X  unsigned
  389. X  CmdLine::release(void)  { return  CMDLINE_RELEASE; }
  390. X--- 24,36 ----
  391. X     // file that makes up this version of the project.
  392. X     //
  393. X  static const char ident[] =
  394. X!    "@(#)SMS  task: cmdline-1.02" ;
  395. X  
  396. X  
  397. X     // Release and patchlevel information
  398. X  #define  CMDLINE_RELEASE     1
  399. X! #define  CMDLINE_PATCHLEVEL  2
  400. X! #define  CMDLINE_IDENT       "@(#)CmdLine    1.02"
  401. X  
  402. X  unsigned
  403. X  CmdLine::release(void)  { return  CMDLINE_RELEASE; }
  404. END_OF_FILE
  405. if test 8993 -ne `wc -c <'PATCH02'`; then
  406.     echo shar: \"'PATCH02'\" unpacked with wrong size!
  407. fi
  408. # end of 'PATCH02'
  409. fi
  410. echo shar: End of shell archive.
  411. exit 0
  412.  
  413. exit 0 # Just in case...
  414.