home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d0xx / d035 / tsize.lha / Tsize / _main.c next >
Encoding:
C/C++ Source or Header  |  1986-09-09  |  3.0 KB  |  141 lines

  1. /*    _main.c        Copyright (C) 1985  Lattice, Inc.    */
  2.  
  3. #include "stdio.h"
  4. #include "ios1.h"
  5.  
  6. #include "workbench/startup.h"
  7. #include "libraries/dos.h"
  8. #include "libraries/dosextens.h"
  9.  
  10. #define MAXARG 32              /* maximum command line arguments */
  11. #define QUOTE  '"'
  12.  
  13. #define isspace(c)    ((c == ' ')||(c == '\t') || (c == '\n'))
  14.  
  15. #ifndef TINY
  16. extern int _stack,_fmode,_iomode;
  17. extern int (*_ONBREAK)();
  18. extern int CXBRK();
  19. #endif
  20. extern int LoadAddress;
  21.  
  22. extern struct UFB _ufbs[];
  23. int argc;            /* arg count */
  24. char *argv[MAXARG];        /* arg pointers */
  25.  
  26. #define MAXWINDOW 40
  27. extern struct WBStartup *WBenchMsg;
  28. static char window[MAXWINDOW] = "con:10/10/320/80/";
  29. static struct Process *process, *FindTask();
  30. static struct FileHandle *handle;
  31.  
  32. /**
  33. *
  34. * name         _main - process command line, open files, and call "main"
  35. *
  36. * synopsis     _main(line);
  37. *              char *line;     ptr to command line that caused execution
  38. *
  39. * description    This function performs the standard pre-processing for
  40. *        the main module of a C program.  It accepts a command
  41. *        line of the form
  42. *
  43. *            pgmname arg1 arg2 ...
  44. *
  45. *        and builds a list of pointers to each argument.  The first
  46. *        pointer is to the program name.  For some environments, the
  47. *        standard I/O files are also opened, using file names that
  48. *        were set up by the OS interface module XCMAIN.
  49. *
  50. **/
  51. _main(line)
  52. register char *line;
  53. {
  54. register char **pargv;
  55. register int x;
  56.  
  57. /*
  58. *
  59. * Build argument pointer list
  60. *
  61. */
  62. while (argc < MAXARG)
  63.     {
  64.     while (isspace(*line))    line++;
  65.     if (*line == '\0')    break;
  66.     pargv = &argv[argc++];
  67.     if (*line == QUOTE)
  68.         {
  69.         *pargv = ++line;  /* ptr inside quoted string */
  70.         while ((*line != '\0') && (*line != QUOTE)) line++;
  71.         if (*line == '\0')  _exit(1);
  72.         else            *line++ = '\0';  /* terminate arg */
  73.         }
  74.     else        /* non-quoted arg */
  75.         {     
  76.         *pargv = line;
  77.         while ((*line != '\0') && (!isspace(*line))) line++;
  78.         if (*line == '\0')  break;
  79.         else             *line++ = '\0';  /* terminate arg */
  80.         }
  81.     }  /* while */
  82. /*
  83. *
  84. * Open standard files
  85. *
  86. */
  87. #ifndef TINY
  88.  
  89. if (argc == 0)        /* running under workbench    */
  90.     {
  91.     strncat(window, WBenchMsg->sm_ArgList->wa_Name,MAXWINDOW);
  92.     _ufbs[0].ufbfh = Open(window,MODE_NEWFILE);
  93.     _ufbs[1].ufbfh = _ufbs[0].ufbfh;
  94.     _ufbs[1].ufbflg = UFB_NC;
  95.     _ufbs[2].ufbfh = _ufbs[0].ufbfh;
  96.     _ufbs[2].ufbflg = UFB_NC;
  97.     handle = (struct FileHandle *)(_ufbs[0].ufbfh << 2);
  98.     process = FindTask(0);
  99.     process->pr_ConsoleTask = handle->fh_Type;
  100.     x = 0;
  101.     }
  102. else            /* running under CLI        */
  103.     {
  104.     _ufbs[0].ufbfh = Input();
  105.     _ufbs[1].ufbfh = Output();
  106.     _ufbs[2].ufbfh = Open("*", MODE_OLDFILE);
  107.     x = UFB_NC;            /* do not close CLI defaults    */
  108.     }
  109.  
  110. _ufbs[0].ufbflg |= UFB_RA | x;
  111. _ufbs[1].ufbflg |= UFB_WA | x;
  112. _ufbs[2].ufbflg |= UFB_WA ;
  113.  
  114. stdin->_file = _ufbs[0].ufbfh;
  115. stdin->_flag = _IOREAD;
  116. stdout->_file = _ufbs[1].ufbfh;
  117. stdout->_flag = _IOWRT;
  118. stderr->_file = _ufbs[2].ufbfh;
  119. stderr->_flag = _IOWRT;
  120.  
  121. /*    establish control-c handler */
  122.  
  123. _ONBREAK = CXBRK;
  124.  
  125. #endif
  126.  
  127. /*
  128. *
  129. * Call user's main program
  130. *
  131. */
  132.  
  133. main(argc,argv);              /* call main function */
  134. #ifndef TINY
  135. exit(0);
  136. #else
  137. _exit(0);
  138. #endif
  139. }
  140.  
  141.