⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver.c

📁 占星术4.0源码
💻 C
📖 第 1 页 / 共 4 页
字号:
  argv[0] = APPNAME;

  /* Split the entered line up into its individual switch strings. */
  while (*c) {
    if (*c == ' ') {
      if (j)
        ;           /* Skip over the current run of spaces between strings. */
      else {
        *c = 0;     /* First space after a string, end it here. */
        j = TRUE;
      }
    } else {
      if (j) {
        argv[argc++] = c;    /* First char after spaces, begin it here. */
        j = FALSE;
      } else
        ;                    /* Skip over the current string. */
    }
    c++;
  }
  argv[argc] = NULL;    /* Set last string in switch array to Null. */
  printl();
  return argc;
}


/*
******************************************************************************
** Main Program.
******************************************************************************
*/

/* Process a command line switch passed to the program. Read each entry in */
/* the argument list and set all the program modes and charts to display.  */

bool ProcessSwitches(argc, argv)
int argc;
char **argv;
{
  int pos, i;
  real k;
  char string[STRING], cpos, *c;

  argc--; argv++;
  while (argc) {
    pos  = 1 + (argv[0][0] == '-' || argv[0][0] == '/');  /* Leading dash? */
    cpos = argv[0][pos];
    switch (argv[0][pos-1]) {

    case 'H':
      if (cpos == 'c')
        andisplay ^= DASHHc;
      else if (cpos == '0')
        andisplay ^= DASHH0;
      else
        andisplay ^= DASHH;
      break;

    case 'O':
      if (cpos == '0')
        andisplay ^= DASHO0;
      andisplay ^= DASHO;
      break;

    case 'Q':
      if (cpos == '0')
        operation ^= DASHQ0;
      operation ^= DASHQ;
      break;

    /* Switches which determine the type of chart to display: */

    case 'v':
      if (cpos == '0')
        exdisplay ^= DASHv0;
      todisplay ^= DASHv;
      break;

    case 'w':
      if (cpos == '0')
        exdisplay ^= DASHw0;
      if (argc > 1 && (i = atoi(argv[1]))) {
        wheelrows = i;
        argc--; argv++;
      }
      if (!IsValidWheel(wheelrows)) {
        BadVal("w", wheelrows);
        return FALSE;
      }
      todisplay ^= DASHw;
      break;

    case 'g':
      if (cpos == '0')
        exdisplay ^= DASHg0;
      else if (cpos == 'a') {
        exdisplay ^= DASHga;
        if (argv[0][pos+1] == '0')
          exdisplay ^= DASHg0;
      }
#ifdef X11
      else if (cpos == 'e') {
        if (argc <= 1) {
          TooFew("geometry");
          return FALSE;
        }
        chartx = atoi(argv[1]);
        if (argc > 2 && (charty = atoi(argv[2]))) {
          argc--; argv++;
        } else
          charty = chartx;
        if (!IsValidGraphx(chartx)) {
          BadVal("geometry", chartx);
          return FALSE;
        }
        if (!IsValidGraphy(charty)) {
          BadVal("geometry", charty);
          return FALSE;
        }
        argc--; argv++;
        break;
      }
#endif
      todisplay ^= DASHg;
      break;

    case 'm':
      if (cpos == '0') {
        exdisplay ^= DASHm0;
        if (argv[0][pos+1] == 'a')
          exdisplay ^= DASHga;
      } else if (cpos == 'a')
        exdisplay ^= DASHm0 | DASHga;
      todisplay ^= DASHm;
      break;

    case 'Z':
      if (cpos == '0')
        exdisplay ^= DASHZ0;
      else if (cpos == 'd')
        exdisplay ^= DASHZd;
      todisplay ^= DASHZ;
      break;

    case 'S':
      todisplay ^= DASHS;
      break;

    case 'j':
      if (cpos == '0')
        exdisplay ^= DASHj0;
      todisplay ^= DASHj;
      break;

    case 'L':
      if (cpos == '0')
        exdisplay ^= DASHL0;
      if (argc > 1 && (i = atoi(argv[1]))) {
        graphstep = i;
        argc--; argv++;
      }
      if (graphstep < 1 || 160%graphstep > 0) {
        BadVal("L", graphstep);
        return FALSE;
      }
      todisplay ^= DASHL;
      break;

    case 'K':
      if (cpos == 'y')
        exdisplay ^= DASHKy;
      todisplay ^= DASHK;
      break;

    case 'd':
      if (cpos == 'p') {
        i = (argv[0][pos+1] == 'y');
        if (argc <= 2-i) {
          TooFew("dp");
          return FALSE;
        }
        prog = TRUE;
        exdisplay |= DASHdm;
        if (i) {
          Mon2 = 0;
          Yea2 = atoi(argv[1]);
        } else {
          Mon2 = atoi(argv[1]);
          Yea2 = atoi(argv[2]);
          if (!IsValidMon(Mon2)) {
            BadVal2("dp", Mon2);
            return FALSE;
          }
        }
        if (!IsValidYea(Yea2)) {
          BadVal2("dp", Yea2);
          return FALSE;
        }
        argc -= 2-i; argv += 2-i;
      } else if (cpos == 'm')
        exdisplay ^= DASHdm;
#ifdef X11
      else if (cpos == 'i') {    /* -display switch for X */
        if (argc <= 1) {
          TooFew("display");
          return FALSE;
        }
        dispname = argv[1];
        argc--; argv++;
      }
#endif
      todisplay ^= DASHd;
      break;

    case 'D':
      todisplay ^= DASHD;
      break;

    case 'E':
      if (cpos == 'y')
        exdisplay ^= DASHEy;
      todisplay ^= DASHE;
      break;

    case 'e':
      todisplay ^= DASHe;
      exdisplay ^= DASHg0 | DASHj0 | DASHL0;
      break;

    case 't':
      todisplay ^= DASHt;
      Zon2 = defzone; Lon2 = deflong; Lat2 = deflat;
      if (cpos == 'p') {
        prog = TRUE;
        cpos = argv[0][++pos];
      }
      if (i = (cpos == 'y'))
        cpos = argv[0][++pos];
#ifdef TIME
      if (cpos == 'n') {
        GetTimeNow(&Mon2, &Day2, &Yea2, &Tim2, Zon2);
        if (i)
          Mon2 = 0;
        break;
      }
#endif
      if (argc <= 2-i) {
        TooFew("t");
        return FALSE;
      }
      if (i)
        Mon2 = 0;
      else {
        Mon2 = atoi(argv[1]);
        if (!IsValidMon(Mon2)) {
          BadVal2("t", Mon2);
          return FALSE;
        }
      }
      Yea2 = atoi(argv[2-i]);
      argc -= 2-i; argv += 2-i;
      break;

    case 'T':
      todisplay ^= DASHT;
      Zon2 = defzone; Lon2 = deflong; Lat2 = deflat;
      if (cpos == 'p') {
        prog = TRUE;
        cpos = argv[0][++pos];
      }
#ifdef TIME
      if (cpos == 'n') {
        GetTimeNow(&Mon2, &Day2, &Yea2, &Tim2, Zon2);
        break;
      }
#endif
      if (argc <= 3) {
        TooFew("T");
        return FALSE;
      }
      Mon2 = atoi(argv[1]);
      Day2 = atoi(argv[2]);
      Yea2 = atoi(argv[3]);
      if (!IsValidMon(Mon2)) {
        BadVal2("T", Mon2);
        return FALSE;
      } else if (!IsValidDay(Day2, Mon2, Yea2)) {
        BadVal2("T", Day2);
        return FALSE;
      } else if (!IsValidYea(Yea2)) {
        BadVal2("T", Yea2);
        return FALSE;
      }
      argc -= 3; argv += 3;
      break;

#ifdef INTERPRET
    case 'I':
      if (argc > 1 && (screenwidth = atoi(argv[1]))) {
        argc--; argv++;
      } else
        screenwidth = SCREENWIDTH;
      if (!IsValidScreen(screenwidth)) {
        BadVal("I", screenwidth);
        return FALSE;
      }
      if (cpos == '0') {
        andisplay ^= DASHI0;
        break;
      }
      interpret = !interpret;
      break;
#endif

    /* Switches which affect how the chart parameters are obtained: */

#ifdef TIME
    case 'n':
      InputData("now");
      if (cpos == 'd')
        TT = 0.0;
      else if (cpos == 'm') {
        DD = 1; TT = 0.0;
      } else if (cpos == 'y') {
        MM = DD = 1; TT = 0.0;
      }
      break;
#endif

    case 'a':
      if (argc <= 7) {
        TooFew("a");
        return FALSE;
      }
      autom = TRUE;
      SetCore(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]),
        atof(argv[4]), atof(argv[5]), atof(argv[6]), atof(argv[7]));
      if (!IsValidMon(MM)) {
        BadVal("a", MM);
        return FALSE;
      } else if (!IsValidYea(YY)) {
        BadVal("a", YY);
        return FALSE;
      } else if (!IsValidDay(DD, MM, YY)) {
        BadVal("a", DD);
        return FALSE;
      } else if (!IsValidTim(TT)) {
        BadVal2("a", TT);
        return FALSE;
      } else if (!IsValidZon(ZZ)) {
        BadVal2("a", ZZ);
        return FALSE;
      } else if (!IsValidLon(OO)) {
        BadVal2("a", OO);
        return FALSE;
      } else if (!IsValidLat(AA)) {
        BadVal2("a", AA);
        return FALSE;
      }
      argc -= 7; argv += 7;
      break;

    case 'z':
      if (argc <= 1 || (atoi(argv[1]) == 0 && argv[1][0] != '0'))
        defzone -= 1.0;
      else {
        defzone = atof(argv[1]);
        if (!IsValidZon(defzone)) {
          BadVal2("z", defzone);
          return FALSE;
        }
        argc--; argv++;
      }
      break;

    case 'l':
      if (argc <= 2) {
        TooFew("l");
        return FALSE;
      }
      deflong = atof(argv[1]);
      deflat  = atof(argv[2]);
      if (!IsValidLon(deflong)) {
        BadVal2("l", deflong);
        return FALSE;
      } else if (!IsValidLat(deflat)) {
        BadVal2("l", deflat);
        return FALSE;
      }
      argc -= 2; argv += 2;
      break;

    case 'q':
      i = (cpos == 'd') + 2*(cpos == 'm') + 3*(cpos == 'y' || cpos == 'j');
      if (argc <= 4-i) {
        TooFew("q");
        return FALSE;
      }
      autom = TRUE;
      if (cpos == 'j') {
        JD = atof(argv[1])+ROUND;
        TT = FRACT(JD);
        JulianToMdy(JD-TT, &MM, &DD, &YY);
        TT *= 24.0; ZZ = 0.0;
        TT = DegToDec(TT);
      } else {
        MM = i > 2 ? 1 : atoi(argv[1]);
        DD = i > 1 ? 1 : atoi(argv[2-(i>2)]); YY = atoi(argv[4-i-(i<1)]);
        TT = i == 0 ? atof(argv[4]) : (i > 1 ? 0.0 : 12.0); ZZ = defzone;
        if (!IsValidMon(MM)) {
          BadVal("q", MM);
          return FALSE;
        } else if (!IsValidDay(DD, MM, YY)) {
          BadVal("q", DD);
          return FALSE;
        } else if (!IsValidYea(YY)) {
          BadVal("q", YY);
          return FALSE;
        } else if (TT < -2.0 || TT > 24.0) {
          BadVal2("q", TT);
          return FALSE;
        }
      }
      OO = deflong; AA = deflat;
      argc -= 4-i; argv += 4-i;
      break;

    case 'i':
      if (argc <= 1) {
        TooFew("i");
        return FALSE;
      }
      if (!InputData(argv[1]))
        return FALSE;
      argc--; argv++;
      break;

    case 'o':
      if (argc <= 1) {
        TooFew("o");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -