home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2007 September / maximum-cd-2007-09.iso / Assets / data / AssaultCube_v0.93.exe / source / src / command.h < prev    next >
Encoding:
C/C++ Source or Header  |  2007-06-01  |  1.5 KB  |  36 lines

  1. enum { ID_VAR, ID_COMMAND, ID_ALIAS };
  2.  
  3. struct ident
  4. {
  5.     int type;           // one of ID_* above
  6.     char *name;
  7.     int min, max;       // ID_VAR
  8.     int *storage;       // ID_VAR
  9.     void (*fun)();      // ID_VAR, ID_COMMAND
  10.     int narg;           // ID_VAR, ID_COMMAND
  11.     char *action, *executing; // ID_ALIAS
  12.     bool persist;
  13. };
  14.  
  15. enum    // function signatures for script functions, see command.cpp
  16. {   
  17.     ARG_1INT, ARG_2INT, ARG_3INT, ARG_4INT,
  18.     ARG_NONE, 
  19.     ARG_1STR, ARG_2STR, ARG_3STR, ARG_4STR, ARG_5STR, ARG_6STR, ARG_7STR, ARG_8STR,
  20.     ARG_DOWN, 
  21.     ARG_1EXP, ARG_2EXP,
  22.     ARG_1EST, ARG_2EST,
  23.     ARG_VARI
  24. };
  25.  
  26. // nasty macros for registering script functions, abuses globals to avoid excessive infrastructure
  27. #define COMMANDN(name, fun, nargs) static bool __dummy_##fun = addcommand(#name, (void (*)())fun, nargs)
  28. #define COMMAND(name, nargs) COMMANDN(name, name, nargs)
  29. #define VARP(name, min, cur, max) int name = variable(#name, min, cur, max, &name, NULL, true)
  30. #define VAR(name, min, cur, max)  int name = variable(#name, min, cur, max, &name, NULL, false)
  31. #define VARF(name, min, cur, max, body)  void var_##name(); int name = variable(#name, min, cur, max, &name, var_##name, false); void var_##name() { body; }
  32. #define VARFP(name, min, cur, max, body) void var_##name(); int name = variable(#name, min, cur, max, &name, var_##name, true); void var_##name() { body; }
  33.  
  34. #define ATOI(s) strtol(s, NULL, 0)      // supports hexadecimal numbers
  35.  
  36.