Ejemplo n.º 1
0
void rules_deff (void)
{
	music_disable ();
	music_set (MUS_RESTART_PLUNGER);
	sol_request (SOL_EYELIDS_OPEN);

	rule_begin ();
	rule_msg ("HOW TO PLAY", "FUNHOUSE");
	task_create_gid1 (GID_RULES_LEFF, rules_flasher_leff);
	rule_complete ();

	rule_begin ();
	rule_msg ("ALL TARGETS", "ADVANCE CLOCK");
	task_create_gid1 (GID_RULES_LEFF, rules_clock_leff);
	rule_complete ();

	rule_begin ();
	rule_msg ("REACH 11:30", "TO LIGHT LOCK");
	fh_clock_set (11, TIME_30_MIN);
	lamp_tristate_flash (LM_LOCK);
	rule_complete ();

	rule_begin ();
	rule_msg ("LOCK BALL 1", "FOR 11:45");
	fh_clock_set (11, TIME_45_MIN);
	lamp_tristate_flash (LM_LOCK);
	rule_complete ();

	rule_begin ();
	rule_msg ("LOCK BALL 2", " FOR 12:00");
	fh_clock_set (12, TIME_0_MIN);
	lamp_tristate_flash (LM_MILLION);
	sol_request (SOL_EYELIDS_CLOSED);
	rule_complete ();

	rule_begin ();
	rule_msg ("WAKE RUDY", "FOR MULTIBALL");
	sol_request (SOL_EYELIDS_OPEN);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT TRAP DOOR", "FOR JACKPOTS");
	lamp_tristate_flash (LM_MILLION_PLUS);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT MIRROR TO", "COLLECT AWARDS");
	lamplist_apply (LAMPLIST_MIRROR_AWARDS, lamp_flash_on);
	lamp_tristate_flash (LM_MIRROR_VALUE);
	rule_complete ();

	rule_begin ();
	rule_msg ("HIT RUDY TO", "RELIGHT MIRROR");
	lamplist_apply (LAMPLIST_MIRROR_AWARDS, lamp_on);
	rule_complete ();

	rule_begin ();
	rule_msg ("BLUE TARGETS", "LIGHT THE STEPS");
	lamplist_apply (LAMPLIST_STEP_TARGETS, lamp_flash_on);
	lamplist_apply (LAMPLIST_STEPS_AWARDS, lamp_flash_on);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT STEPS FROM", "LEFT PLUNGER");
	lamplist_apply (LAMPLIST_STEPS_AWARDS, lamp_flash_on);
	lamp_tristate_flash (LM_STEPS_GATE_OPEN);
	lamp_tristate_flash (LM_RAMP_STEPS);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT LOOPS TO", "COLLECT GANGWAYS");
	lamp_flash_on (LM_LEFT_GANGWAY);
	lamp_flash_on (LM_RIGHT_GANGWAY);
	lamplist_apply (LAMPLIST_GANGWAYS, lamp_on);
	rule_complete ();

	rule_begin ();
	rule_msg ("EXTRA BALLS LIT", "AT TOP LOOP");
	lamp_on (LM_EXTRA_BALL);
	lamp_flash_on (LM_MIRROR_EX_BALL);
	lamp_flash_on (LM_GANGWAY_EX_BALL);
	lamp_flash_on (LM_STEPS_EB);
	rule_complete ();

	rule_begin ();
	rule_msg ("PLAY", "FUNHOUSE");
	task_create_gid1 (GID_RULES_LEFF, rules_flasher_leff);
	task_create_gid1 (GID_RULES_LEFF, rules_clock_leff);
	rule_complete ();

	sol_request (SOL_EYELIDS_CLOSED);
	music_enable ();
	deff_exit ();
}
Ejemplo n.º 2
0
int parse_rules_fromfile(ctx_t *ctx_p) {
	int ret = 0;
	char *rulfpath = ctx_p->rulfpath;
	rule_t *rules  = ctx_p->rules;
	size_t *rules_count_p = &ctx_p->rules_count;

	char *line_buf=NULL;
	FILE *f = fopen(rulfpath, "r");
	
	if(f == NULL) {
		rules->mask   = RA_NONE;		// Terminator. End of rules' chain.
		rules->perm   = DEFAULT_RULES_PERM;
		error("Cannot open \"%s\" for reading.", rulfpath);
		return errno;
	}

	GHashTable *autowrules_ht = g_hash_table_new_full(g_str_hash,	g_str_equal,	free,    0);

	int i=0;
	size_t linelen, size=0;
	while((linelen = getline(&line_buf, &size, f)) != -1) {
		if(linelen>1) {
			uint8_t sign = 0;
			char *line = line_buf;
			rule_t *rule;

			rule = &rules[i];
#ifdef VERYPARANOID
			memset(rule, 0, sizeof(*rule));
#endif
			rule->num = i++;
			line[--linelen] = 0; 


			// Parsing the first character of the line
			switch(*line) {
				case '+':
					sign = RS_PERMIT;
					break;
				case '-':
					sign = RS_REJECT;
					break;
				case '#':	// Comment?
					i--;	// Canceling new rule
					continue;
				default:
					error("Wrong rule action <%c>.", *line);
					return EINVAL;
			}

			line++;
			linelen--;

			// Parsing the second character of the line
			*line |= 0x20;	// lower-casing
			// Default rule->mask and rule->perm

			// rule->mask - sets bitmask of operations that are affected by the rule
			// rule->perm - sets bitmask of permit/reject for every operation. Effect have only bits specified by the rule->mask.

			rule->mask = RA_ALL;
			switch(sign) {
				case RS_REJECT:
					rule->perm = RA_NONE;
					break;
				case RS_PERMIT:
					rule->perm = RA_ALL;
					break;
			}

			switch(*line) {
				case '*':
					rule->objtype = 0;	// "0" - means "of any type"
					break;
#ifdef DETAILED_FTYPE
				case 's':
					rule->objtype = S_IFSOCK;
					break;
				case 'l':
					rule->objtype = S_IFLNK;
					break;
				case 'b':
					rule->objtype = S_IFBLK;
					break;
				case 'c':
					rule->objtype = S_IFCHR;
					break;
				case 'p':
					rule->objtype = S_IFIFO;
					break;
#endif
				case 'f':
					rule->objtype = S_IFREG;
					break;
				case 'd':
					rule->objtype = S_IFDIR;
					break;
				case 'w':	// accept or reject walking to directory
					if(
						(ctx_p->flags[MODE] == MODE_RSYNCDIRECT) ||
						(ctx_p->flags[MODE] == MODE_RSYNCSHELL)  ||
						(ctx_p->flags[MODE] == MODE_RSYNCSO)
					) {
						error("Warning: Used \"w\" rule in \"--rsync\" case."
							" This may cause unexpected problems.");
					}
					rule->objtype = S_IFDIR;
					rule->mask    = RA_WALK;
					break;
				default:
					error("Warning: Cannot parse the rule <%s>", &line[-1]);
					i--;	// Canceling new rule
					continue;
			}


			line++;
			linelen--;

			// Parsing the rest part of the line

			debug(1, "Rule #%i <%c>[0x%02x 0x%02x] <%c>[0x%04x] pattern <%s> (length: %i).", rule->num, line[-2], rule->perm, rule->mask, line[-1], rule->objtype, line, linelen);
			if((ret=rule_complete(rule, line, rules_count_p)))
				goto l_parse_rules_fromfile_end;

			// Post-processing:

			line--;
			linelen++;

			if(*line != 'w') {
				// processing --auto-add-rules-w
				if(ctx_p->flags[AUTORULESW] && (sign == RS_PERMIT)) {
					// Preparing to add appropriate w-rules
					char skip = 0;
					char *expr = alloca(linelen+2);
					memcpy(expr, line, linelen+1);
					size_t exprlen = linelen;

					// Making expr to be starting with '^'
					if(line[1] == '^') {
						expr++;
						exprlen--;
					} else
						*expr = '^';

					char *end;

					if(*line == 'd' || *line == '*') {
						// "d" rule already doing what we need, so we can skip the last level

						end = &expr[exprlen];
						if(end[-1] != '$')
							*(end++) = '$';
						*end = 0;

//						debug(3, "Don't adding w-rule for \"%s\" due to [*d]-rule for \"%s\"",
//							expr, &line[1]);
						g_hash_table_insert(autowrules_ht, strdup(expr), GINT_TO_POINTER(1));

					}

					if(!skip) {

						do {
							// Decreasing directory level and make the '$' ending
							end = strrchr(expr, '/');
							if(end != NULL) {
								if(end[-1] != '$')
									*(end++) = '$';
								*end = 0;
								exprlen = (size_t)(end - expr);
							} else {
								expr[1] = '$';
								expr[2] = 0;
								exprlen = 2;
							}

							// Checking if it not already set
							if(!g_hash_table_lookup(autowrules_ht, expr)) {

								// Switching to next rule:

								rule = &rules[i];
								rule->num = i++;

								// Adding the rule

								rule->objtype = S_IFDIR;
								rule->mask    = RA_WALK;
								rule->perm    = RA_WALK;

								debug(1, "Rule #%i <+> <w> pattern <%s> (length: %i) [auto].", 
									rule->num, expr, exprlen);
								if((ret=rule_complete(rule, expr, rules_count_p)))
									goto l_parse_rules_fromfile_end;
								g_hash_table_insert(autowrules_ht, strdup(expr), GINT_TO_POINTER(1));

							}
						} while(end != NULL);
					}
				}
			}
		}
	}

l_parse_rules_fromfile_end:
	if(size)
		free(line_buf);

	fclose(f);

	debug(3, "Adding tail-rule #%u (effective #%u).", -1, i);

	rules[i].mask   = RA_NONE;		// Terminator. End of rules' chain.
	rules[i].perm   = DEFAULT_RULES_PERM;

	g_hash_table_destroy(autowrules_ht);
#ifdef _DEBUG_FORCE
	debug(3, "Total (p == %p):", rules);
	i=0;
	do {
		debug(4, "\t%i\t%i\t%p/%p", i, rules[i].objtype, (void *)(long)rules[i].perm, (void *)(long)rules[i].mask);
		i++;
	} while(rules[i].mask != RA_NONE);
#endif
	return ret;
}
Ejemplo n.º 3
0
void rules_deff (void)
{
	music_disable ();
	leff_stop_all ();

	rule_begin ();
	triac_disable (TRIAC_GI_MASK);
	rule_msg ("BACK TO THE ZONE", "", "HOW TO PLAY", "");
	rules_sleep_sec (5);
	rule_complete ();

	rule_begin ();
	rule_msg ("SPIRALAWARD", "EITHER LEFT INLANE STARTS", "A 3 SECOND TIMER", "");
	task_create_gid1 (GID_RULES_LEFF, rules_spiralaward_leff);
	rules_sleep_sec (6);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("SPIRALAWARD", "SHOOT A RIGHT LOOP TO COLLECT", "A RANDOM AWARD" , "20M FOR COLLECTING ALL");
	task_create_gid1 (GID_RULES_LEFF, rules_spiralaward2_leff);
	rules_sleep_sec (5);
	rule_complete ();
	lamplist_apply (LAMPLIST_SPIRAL_AWARDS, lamp_flash_off);
	lamp_tristate_off (LM_RIGHT_SPIRAL);
	lamp_tristate_off (LM_RIGHT_POWERBALL);

	rule_begin ();
	rule_msg ("ROLLOVERS", "USE FLIPPER BUTTONS TO STEP", "INLANE LIGHTS", "1M FOR COLLECTING ALL");
	task_create_gid1 (GID_RULES_LEFF, rules_rollover_leff);
	rules_sleep_sec (9);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("SUPER SKILL MB", "SHOOT LEFT RAMP", "AND HIT SKILL SHOT", "DURING MULTIBALL");
	task_create_gid1 (GID_RULES_LEFF, rules_sssmb_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("CHAOS MULTIBALL", "HIT CLOCK TO LIGHT JACKPOTS", "JACKPOTS MOVE", "AROUND THE TABLE");
	task_create_gid1 (GID_RULES_LEFF, rules_chaosmb_leff);
	rules_sleep_sec (9);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("FASTLOCK", "SHOOT FAST LOOPS TO", "BUILD UP JACKPOTS", "HIT LOCK TO COLLECT");
	task_create_gid1 (GID_RULES_LEFF, rules_fastlock_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("HITCHHIKER", "SHOOT THE HOLE BETWEEN", "THE FLASHING LAMPS", "TO SCORE A HITCHHIKER");
	task_create_gid1 (GID_RULES_LEFF, rules_hitchhiker_leff);
	rules_sleep_sec (9);
	rule_complete ();

	
	rule_begin ();
	rule_msg ("POWERFIELD", "HITCHHIKERS UNLOCK", "THE RIGHT RAMP", "TO THE POWERFIELD");
	task_create_gid1 (GID_RULES_LEFF, rules_ramp_battle_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("POWERFIELD", "PRESS THE FLIPPER BUTTONS", "TO SHOOT THE BALL INTO", "THE TOP OF THE POWERFIELD");
	task_create_gid1 (GID_RULES_LEFF, rules_powerfield_leff);
	rules_sleep_sec (9);
	triac_disable (GI_POWERFIELD);
	rule_complete ();

	rule_begin ();
	rule_msg ("DOINK MODE", "SHOOT THE LEFT RAMP", "FROM THE RIGHT INLANE", "TO START DOINK MODE");
	task_create_gid1 (GID_RULES_LEFF, rules_doinks_leff);
	rules_sleep_sec (9);
	rule_msg ("DOINK MODE", "HIT THE FLIPPER BUTTONS", "WHILST THE BALL IS BEING HELD", "TO SCORE POINTS");
	rules_sleep_sec (9);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("ODDCHANGE", "HITTING THE YELLOW", "TARGETS RANDOMLY BUILDS", "THE ODDCHANGE POT");
	task_create_gid1 (GID_RULES_LEFF, rules_oddchange1_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("ODDCHANGE", "HIT THE PIANO OR", "THE SLOT MACHINE WHEN", "UNLIT TO COLLECT");
	task_create_gid1 (GID_RULES_LEFF, rules_oddchange2_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("THANKS", "WE HOPE YOU", "ENJOY PLAYING","WWW.ODDCHANGE.COM/FREEWPC");
	rules_sleep_sec (4);
	rule_complete ();
	
	music_enable ();
	leff_start (LEFF_AMODE);
	deff_exit ();
}