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

📄 driver.c

📁 占星术4.0源码
💻 C
📖 第 1 页 / 共 4 页
字号:
        return FALSE;
      }
      if (cpos == 's') {
        filenamescreen = argv[1];
        argc--; argv++;
        break;
      } else if (cpos == '0')
        operation ^= DASHo0;
      operation ^= DASHo;
      filenameout = argv[1];
      extralines = argv;
      do {
        argc--; argv++;
        extracount++;
      } while (argc > 1 && argv[1][0] != '-' && argv[1][0] != '/');
      break;

    /* Switches which affect what information is used in a chart: */

    case 'R':
      if (cpos == 'T') {
        c = (char *)ignore2;
        cpos = argv[0][++pos];
      } else
        c = (char *)ignore;
      if (cpos == '0')
        for (i = 0; i <= total; i++)
          c[i] = TRUE;
      else if (cpos == '1') {
        for (i = 0; i <= total; i++)
          c[i] = FALSE;
        operation |= DASHC | DASHu;
        universe = TRUE;
      } else if (cpos == 'C')
        for (i = C_LO; i <= C_HI; i++)
          c[i] = !c[i];
      else if (cpos == 'u')
        for (i = U_LO; i <= U_HI; i++)
          c[i] = !c[i];
      else if (cpos == 'U')
        for (i = S_LO; i <= S_HI; i++)
          c[i] = !c[i];
      else if (argc <= 1 || (!atoi(argv[1]))) {
        for (i = 11; i <= 15; i++)
          c[i] = !c[i];
        c[_FOR] = !c[_FOR]; c[_VTX] = !c[_VTX];
      }
      while (argc > 1 && (i = atoi(argv[1])))
        if (!IsItem(i)) {
          BadVal("R", i);
          return FALSE;
        } else {
          c[i] = !c[i];
          argc--; argv++;
        }
      break;

    case 'C':
      operation ^= DASHC;
      break;

    case 'u':
      operation ^= DASHu;
      break;

    case 'U':
      if (cpos == 'n' || cpos == 'b' || cpos == 'z' || cpos == 'l')
        universe = cpos;
      else
        universe = !universe;
      break;

    case 'A':
      if (argc <= 1 || atoi(argv[1]) == 0) {
        andisplay ^= DASHA;
        break;
      }
      if (cpos != 'o' && cpos != 'm' && cpos != 'd') {
        aspects = atoi(argv[1]);
        if (!IsValidAspect(aspects)) {
          BadVal("A", aspects);
          return FALSE;
        }
        argc--; argv++;
      } else {
        if (argc <= 2) {
          TooFew("A");
          return FALSE;
        }
        i = atoi(argv[1]);
        if (i < 1 || i > (cpos == 'o' ? ASPECTS : BASE)) {
          BadVal("A", i);
          return FALSE;
        }
        k = atof(argv[2]);
        if (k < -DEGREES || k > DEGREES) {
          BadVal2("A", k);
          return FALSE;
        }
        if (cpos == 'm')
          planetorb[i] = k;
        else if (cpos == 'd')
          planetadd[i] = k;
        else
          aspectorb[i] = k;
        argc -= 2; argv += 2;
      }
      break;

    /* Switches which affect how a chart is computed: */

    case 'b':
      if (cpos == '0')
        seconds = !seconds;
      placalc = !placalc;
      break;

    case 'c':
      if (argc <= 1) {
        TooFew("c");
        return FALSE;
      }
      housesystem = atoi(argv[1]);
      if (!IsValidSystem(housesystem)) {
        BadVal("c", housesystem);
        return FALSE;
      }
      argc--; argv++;
      break;

    case 's':
      if (cpos != '0')
        operation ^= DASHs;
      else
        operation ^= DASHs0;
      break;

    case 'h':
      if (argc > 1 && (centerplanet = atoi(argv[1]))) {
        argc--; argv++;
      } else
        centerplanet = 1;
      if (centerplanet < 0 || centerplanet == _MOO ||
        !IsObject(centerplanet) || centerplanet > U_HI) {
        BadVal("h", centerplanet);
        return FALSE;
      }
      c = objectname[0];
      objectname[0] = objectname[centerplanet];
      objectname[centerplanet] = c;
      if (centerplanet < _MOO)
        centerplanet = 1-centerplanet;
      break;

    case 'p':
      if (cpos == '0') {
        operation |= DASHp0;
        cpos = (argv[0][++pos]);
      }
      progress = TRUE;
#ifdef TIME
      if (cpos == 'n') {
        GetTimeNow(&Mon, &Day, &Yea, &Tim, defzone);
        Jdp = (real)MdyToJulian(Mon, Day, Yea) + Tim / 24.0;
        break;
      }
#endif
      if (cpos == 'd') {
        if (argc <= 1) {
          TooFew("pd");
          return FALSE;
        }
        progday = atof(argv[1]);
        if (progday == 0.0) {
          BadVal2("pd", progday);
          return FALSE;
        }
        argc--; argv++;
        break;
      }
      if (argc <= 3) {
        TooFew("p");
        return FALSE;
      }
      Mon = atoi(argv[1]);
      Day = atoi(argv[2]);
      Yea = atoi(argv[3]);
      if (!IsValidMon(Mon)) {
        BadVal2("p", Mon);
        return FALSE;
      } else if (!IsValidDay(Day, Mon, Yea)) {
        BadVal2("p", Day);
        return FALSE;
      } else if (!IsValidYea(Yea)) {
        BadVal2("p", Yea);
        return FALSE;
      }
      Jdp = (real)MdyToJulian(Mon, Day, Yea) + defzone / 24.0;
      argc -= 3; argv += 3;
      break;

    case 'x':
      if (argc <= 1) {
        TooFew("x");
        return FALSE;
      }
      multiplyfactor = atoi(argv[1]);
      if (multiplyfactor < 1 || multiplyfactor > DEGREES) {
        BadVal("x", multiplyfactor);
        return FALSE;
      }
      argc--; argv++;
      break;

    case '1':
      if (argc > 1 && (onasc = atoi(argv[1]))) {
        argc--; argv++;
      } else
        onasc = 1;
      if (onasc < 1 || onasc > total) {
        BadVal("1", onasc);
        return FALSE;
      }
      break;

    case '2':
      if (argc > 1 && (onasc = atoi(argv[1]))) {
        argc--; argv++;
      } else
        onasc = 1;
      if (onasc < 1 || onasc > total) {
        BadVal("2", onasc);
        return FALSE;
      }
      onasc = -onasc;
      break;

    case '3':
      operation ^= DASH3;
      break;

    case 'f':
      operation ^= DASHf;
      break;

    case 'G':
      operation ^= DASHG;
      break;

    case 'F':
      if (argc <= 3) {
        TooFew("F");
        return FALSE;
      }
      i = atoi(argv[1]);
      if (!IsItem(i)) {
        BadVal("F", i);
        return FALSE;
      }
      force[i] = (atof(argv[2])-1.0)*30.0+DecToDeg(atof(argv[3]));
      if (force[i] < 0.0 || force[i] >= DEGREES) {
        BadVal2("F", force[i]);
        return FALSE;
      } else
        force[i] += DEGREES;
      argc -= 3; argv += 3;
      break;

    case '+':
      if (argc > 1 && (i = atoi(argv[1])) != 0) {
        argc--; argv++;
      } else
        i = 1;
      Delta += i * (cpos == 'y' ? 365 : (cpos == 'm' ? 30 : 1));
      break;

    case '-': case '\0':
      if (argc > 1 && (i = atoi(argv[1])) != 0) {
        argc--; argv++;
      } else
        i = 1;
      Delta -= i * (cpos == 'y' ? 365 : (cpos == 'm' ? 30 : 1));
      break;

    /* Switches for relationship and comparison charts: */

    case 'r':
      if (argc <= 2) {
        TooFew("r");
        return FALSE;
      }
      if (cpos == 'c')
        relation = DASHrc;
      else if (cpos == 'm')
        relation = DASHrm;
      else if (cpos == 'd')
        relation = DASHrd;
#ifdef BIORHYTHM
      else if (cpos == 'b')
        relation = DASHrb;
#endif
      else if (cpos == '0')
        relation = DASHr0;
      else if (cpos == 'p')
        relation = DASHrp;
      else
        relation = DASHr;
      filename = argv[1]; filename2 = argv[2];
      argc -= 2; argv += 2;
      break;

#ifdef TIME
    case 'y':
      if (argc <= 1) {
        TooFew("y");
        return FALSE;
      }
      if (cpos == 'd')
        relation = DASHrd;
#ifdef BIORHYTHM
      else if (cpos == 'b')
        relation = DASHrb;
#endif
      else if (cpos == 'p')
        relation = DASHrp;
      else
        relation = DASHr0;
      filename = argv[1]; filename2 = "now";
      argc--; argv++;
      break;
#endif

    /* Switches to access graphics options: */

    case 'k':
      ansi = !ansi;
      break;

#ifdef MSG
    case 'V':
      if (argc <= 1) {
        TooFew("V");
        return FALSE;
      }
      textrows = atoi(argv[1]);
      if (!IsValidTextrows(textrows)) {
        BadVal("V", textrows);
        return FALSE;
      }
      argc--; argv++;
      break;
#endif

#ifdef GRAPH
    case 'X':
      i = XProcessSwitches(argc, argv, pos);
      if (i < 0)
        return FALSE;
      operation |= DASHX;
      argc -= i; argv += i;
      break;
#endif

    case '.':               /* "-." is usually used to exit the -Q loop. */
      Terminate(_FORCE);

    case 'B':          /* For no useful reason, -B will sound a beep. */
      printc(BELL);
      break;

    default:
      sprintf(string, "Unknown switch '%s'.", argv[0]);
      PrintError(string);
      return FALSE;
    }
    argc--; argv++;
  }
  return TRUE;
}


/* The main program, the starting point for Astrolog, follows. This routine */
/* basically consists of a loop, inside which we read a command line, and   */
/* go process it, before actually calling a routine to do the neat stuff.   */

#ifdef SWITCHES
void main(argc, argv)
int argc;
char **argv;
{
#else
void main()
{
  int argc;
  char **argv;
#endif
  char commandline[256];
  char *pointers[MAXSWITCHES];

  InputDefaults();    /* Read in info from the astrolog.dat file. */
Begin:
#ifdef MSG
  if (textrows > 0) {
    _settextrows(textrows);
    textrows = -textrows;
  }
#endif
  if (noswitches) {                                 /* Go prompt for    */
    argc = InputSwitches(commandline, pointers);    /* switches if we   */
    argv = pointers;                                /* don't have them. */
  }
  progname = ProcessProgname(argv[0]);
  if (ProcessSwitches(argc, argv)) {
    if (!noswitches && (operation & DASHQ0)) {
      noswitches = TRUE;
      goto Begin;
    }
#ifdef MSG
    if (textrows > 0) {
      _settextrows(textrows);
      textrows = -textrows;
    }
#endif
    Action();
  }
  if (operation & DASHQ) {    /* If -Q in effect, loop back and get switch */
    printl2();                /* information for another chart to display. */
    InitVariables();
    operation |= DASHQ;
    noswitches = TRUE;
    goto Begin;
  }
  Terminate(_OK);    /* The only standard place to exit Astrolog is here. */
}

/* driver.c */

⌨️ 快捷键说明

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