show_base.c 1.67 KB
/*
 *  NINTENDO64 SAMPLE PROGRAM
 *
 *  FILE : show_base.c
 *
 *  Copyright (C) 1998, NINTENDO Co,Ltd.
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ultra64.h>


/*
 * 関数プロトタイプ宣言
 */
void syserror(char *);
u32  showBase(FILE *);


/*
 * 定義
 */
#define MAX_FILENAME_LENGTH 128


/*
 * メイン
 */
void main(int argc, char *argv[])
{
  FILE *infofd;

  if(argc != 2)
    syserror("Usage : show_base <info file>");

  if(!(infofd = fopen(argv[1], "r")))
    syserror("Error : can't open file : info file");

  if(!showBase(infofd))
    syserror("Error : bad file : info file");

  fclose(infofd);
}


/*
 * エラー出力
 */
void syserror(char *out)
{
  fprintf(stderr, "%s\n", out);
  exit(1);
}
    

/*
 * infoファイルより波形データ数を取得
 */
u32 showBase(FILE *infofd)
{
  u32
    flag = 0,
    count = 0;
  char
    str[128],
    filename[MAX_FILENAME_LENGTH],
    *strtmp,
    separater[] = " \t\n:;=()";
  
  while(fgets(str, 128, infofd)){
    strtmp = strtok(str, separater);

    if(strtmp){
      if(!strcmp(strtmp, "Wave")){
	if(flag)
	  syserror("Error : bad file : info file");

	strtmp = strtok(NULL, separater);
	if((!strtmp) || strcmp(strtmp, "Table"))
	  syserror("Error : bad file : info file");

	strtmp = strtok(NULL, separater);
	if(!strtmp)
	  syserror("Error : bad file : info file");

	strcpy(filename, strtmp);
	flag = 1;
      }
      else if(!strcmp(strtmp, "base")){
	if(!flag)
	  syserror("Error : bad file : info file");

	count ++;

	strtmp = strtok(NULL, separater);
	if(!strtmp)
	  syserror("Error : bad file : info file");

	printf("%s \t: 0x%x\n", filename, strtol(strtmp, NULL, 16));
	flag = 0;
      }
    }
  }

  return count;
}