Beispiel #1
0
/*
----------------------------------------------------- patmodule_enter() ------
*/
int patmodule_enter(int type, char *opt_arg)
{
	/* fprintf(stderr,"type = %d, optarg = '%s'\n",type,optarg); */
	switch(type)
	{
		case P_AFTERDATE:  return(((_PM_afterdate=ascdatetotime(opt_arg,HEAVY))==-1)?-1:0);
		case P_BEFOREDATE: return(((_PM_beforedate=ascdatetotime(opt_arg,LIGHT))==-1)?-1:0);
		case P_OWNER: return(parse_nums(owner_table,opt_arg,&numowners,TXT(T_TOO_MANY_OWNERS),Maxowners,OWNER_FLAG));
		case P_GROUP: return(parse_nums(group_table,opt_arg,&numgroups,TXT(T_TOO_MANY_GROUPS),Maxgroups,GROUP_FLAG));
		case P_MODE: return(parse_modes(mode_table,opt_arg,&nummodes));
		case P_PATTERN: return(parse_patterns(pattern_table,opt_arg,&numpatterns,TRUE,TXT(T_TOO_MANY_PATTERNS),Maxpatterns));
	}
	return(-1);
}
Beispiel #2
0
void patmodule_commit()
{
	static char all[2]="*";

	if (numpatterns && all_not_patterns)
	{
		parse_patterns(pattern_table,all,&numpatterns,TRUE,TXT(T_TOO_MANY_PATTERNS),Maxpatterns+1);
	}

	#ifdef DIAG
    {
		int i;
		
		for (i=0;i<numpatterns;i++)
		{
			fprintf(stderr,"pattern[%d] = '%s'\n",i,pattern_table[i]);
		}

		for (i=0;i<numgroups;i++)
		{
			fprintf(stderr,"group[%d] = %d\n",i,group_table[i]);
		}

		for (i=0;i<numowners;i++)
		{
			fprintf(stderr,"owner[%d] = %d\n",i,owner_table[i]);
		}

		for (i=0;i<nummodes;i++)
		{
			fprintf(stderr,"mode[%d] = %s%09o\n",i,mode_table[i].negative?"(not)":"",mode_table[i].fmode);
		}

	}		
	#endif
}
Beispiel #3
0
static void file_check_xm(file_recovery_t *fr)
{
  uint16_t patterns, instrs;

  fr->file_size = 0;
  fr->offset_error=0;
  fr->offset_ok=0;

  if (fseek(fr->handle, 70, SEEK_SET) == -1)
    return;
  if (fread(&patterns, 2, 1, fr->handle) != 1)
    return;
  if (fread(&instrs, 2, 1, fr->handle) != 1)
    return;
  instrs   = le16(instrs);
  patterns = le16(patterns);

  log_debug("xm: %u patterns, %u instruments\n", patterns, instrs);

  /* Skip flags + tempo + bmp + table */
  if (fseek(fr->handle, 2+2+2+256, SEEK_CUR) == -1)
    return;
  fr->file_size = 336;

  /* Parse patterns and next instruments */
  if (parse_patterns(fr, patterns) < 0 ||
      parse_instruments(fr, instrs) < 0)
  {
    log_debug("xm: lost sync at pos %li\n", ftell(fr->handle));
    fr->offset_error = fr->file_size;
    fr->file_size = 0;
    return;
  }

  /* ModPlug may insert additional data but it is of little relevance */
}
Beispiel #4
0
static int parse_modes (mode *table, char *string, uint16_t *num)
{
	char	*ptr;
	char	*temptable[32];
	uint16_t	tempnum = 0;
	int		i,i2,factor;

	/* call parse_patterns(). Clever, huh? */
	if (parse_patterns(temptable,string,&tempnum,FALSE,TXT(T_TOO_MANY_MODES),32)==-1) return(-1);

	/* tempnum now has # of items in temptable,
	   temptable has pointers to the individual mode specifiers */

	if ((*num+tempnum)>Maxmodes) {
		fprintf (stderr,"%s (%d max)\n",TXT(T_TOO_MANY_MODES),Maxmodes);
		return(-1);
	}

	for (i=0;i<tempnum;i++)
	{
		ptr = temptable[i];

		#ifdef DIAG
			fprintf(stderr,"parse_modes: parsing '%s'\n",ptr);
		#endif

		if (*ptr == NOT_CHARACTER)
		{
			ptr++;
			table[i+*num].negative = TRUE;
		} else table[i+*num].negative = FALSE;

		if (!*ptr)
		{
			fprintf(stderr,TXT(T_ILLEGAL_MODE_SPEC),temptable[i]);
			exit(0xBAD);
		}

		/* is it a nonnegative octal number? */
		if (isoctal(*ptr))
		{
			int j;

			j = atoo(ptr);
			if (j<0) 
			{
				fprintf(stderr,TXT(T_NUM_OUT_OF_RANGE),temptable[i]);
				exit(0xBAD);
			} else {     
				#ifdef DIAG
					fprintf(stderr,"parse_modes: got octal 0%o\n",j);
				#endif
				table[i+*num].fmode = j;
			}
		} else {
			/* it is a symbolic type definition */
			for (factor=0;*ptr!='=';ptr++)
			{
				switch(*ptr)
				{
					case 'u':
						factor |= 0100;
						break;
					case 'g':
						factor |= 010;
						break;
					case 'o':
						factor |= 01;
						break;
					case 'a':
						factor = 0111;
						break;
					default:
						fprintf(stderr,TXT(T_ILLEGAL_MODE_SPEC),temptable[i]);
						exit(0xBAD);
				}
			}
			
			/* ptr now points to '=' */
			
			for (++ptr,i2=0;*ptr;ptr++)
			{
				switch(*ptr)
				{
					case 'r':
						i2 |= S_IROTH;
						break;
					case 'w':
						i2 |= S_IWOTH;
						break;
					case 'x':
					case 's':					
						i2 |= S_IXOTH;
						break;			
	        		default:
						fprintf(stderr,TXT(T_ILLEGAL_MODE_SPEC),temptable[i]);
						exit(0xBAD);
				}
			}

			table[i+*num].fmode = i2*factor;
			#ifdef DIAG
				fprintf(stderr,"parse_modes: table[%d].fmode = 0%o\n",i+*num,table[i+*num].fmode);
			#endif
        }  /* else */
	} /* for */

	*num += tempnum;

	return(0);
}