Metropoli BBS
VIEWER: sfunc.c MODE: TEXT (ASCII)
/*
 * SCRIPT FUNCTIONS
 */

 #include <stdio.h>
 #include <ctype.h>
 #include "global.h"
 #include "sfunc.h"
 #include "script.h"
 #include "file.h"
 #include "aspi_rw.h"
 #include "kbd.h"
 #include "rand.h"
 #include "al6000.h"

/***************************************************************************
 *
 * sf_single_step(...)
 *
 ***************************************************************************/

 FLAG  sf_single_step(struct SCRIPT_OBJ *script)

 {
  script->single_step = TRUE;
  printf("SCRIPT Now single stepping.\n");
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_echo(...)
 *
 ***************************************************************************/

 FLAG  sf_echo(struct SCRIPT_OBJ *script)

 {
  char *str;

  str = file_get_line(script->file);
  if (!str)
     return (FALSE);
  printf("SCRIPT ECHO:%s",str);
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_rem(...)
 *
 ***************************************************************************/

 FLAG  sf_rem(struct SCRIPT_OBJ *script)

 {
  file_get_line(script->file);
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_abort(...)
 *
 ***************************************************************************/

 FLAG  sf_abort(struct SCRIPT_OBJ *script)

 {
  script->abort = TRUE;
  printf("SCRIPT Abort.\n");
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_aspi(...)
 *
 ***************************************************************************/

 FLAG  sf_aspi(struct SCRIPT_OBJ *script)

 {
  char		*cmd;
  unsigned int   scsi_id;
  unsigned long  blk_num;
  unsigned int   num_blks;
  unsigned int   num_blks_min,
		 num_blks_max;
  unsigned int   tag;
  unsigned int   pattern;
  unsigned long	 num_req;
  unsigned int   scsi_id_first;
  unsigned int   scsi_id_last;
  unsigned long  blk_num_first;
  unsigned long	 blk_num_last;

  cmd = file_get_str(script->file);

  cmd[0] = toupper(cmd[0]);

  if ((cmd[0] == 'E')					// Exercisor?
      ||
      (cmd[0] == 'T'))                  		// Throughput calc?
    {
     fscanf(	script->file,"%lu %u %u %u %u %lu %lu %x %u",
		&num_req,
		&scsi_id_first,
		&scsi_id_last,
		&num_blks_min,
		&num_blks_max,
		&blk_num_first,
		&blk_num_last,
		&tag,
		&pattern);

     return (rand_aspi( cmd,
			script,
			num_req,
			scsi_id_first,scsi_id_last,
			num_blks_min,num_blks_max,
			blk_num_first,blk_num_last,
			tag,pattern));
     }
  else							/* Normal Read/write*/
     fscanf(	script->file,"%u %lu %u %x %u",
		&scsi_id,
		&blk_num,
		&num_blks,
		&tag,
		&pattern);

  if (diag_here(DIAG_VERBOSE))
     printf("SCRIPT ASPI command: %s.\n",cmd);

  return (aspi_rw(cmd,scsi_id,blk_num,num_blks,tag,pattern));
  }

/***************************************************************************
 *
 * sf_free_run(...)
 *
 ***************************************************************************/

 FLAG sf_free_run(struct SCRIPT_OBJ *script)

 {
  script->single_step = FALSE;
  printf("SCRIPT now free running.\n");
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_pause(...)
 *
 ***************************************************************************/

 FLAG sf_pause(struct SCRIPT_OBJ *script)

 {
  //
  // Dummy use of "script".
  //

  if (!script)
     error("No script object");

  printf("SCRIPT Paused.\n");
  kbd_any_key();
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_diagnostics(...)
 *
 ***************************************************************************/

 FLAG sf_diagnostics(struct SCRIPT_OBJ *script)

 {
  char *diag_code_str;

  diag_code_str = file_get_str(script->file);
  diag_set(diag_code_str);
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_req_outs(...)
 *
 ***************************************************************************/

 FLAG  sf_req_outs(struct SCRIPT_OBJ *script)

 {
  int ret_val;
  int num;

  ret_val = file_get_int(script->file,&num);
  script->aspi_allow_reqs = num;
  aspi_allow_reqs(num);
  return (ret_val);
  }

/***************************************************************************
 *
 * sf_aspi_req_delay(...)
 *
 * The delay is specified in units of milliseconds.
 *
 ***************************************************************************/

 FLAG  sf_aspi_req_delay(struct SCRIPT_OBJ *script)

 {
  int ret_val;
  int num;

  ret_val = file_get_int(script->file,&num);
  aspi_req_delay(num);
  return (ret_val);
  }

/***************************************************************************
 *
 * sf_al6_reset(...)
 *
 *
 ***************************************************************************/

 FLAG  sf_al6_reset(struct SCRIPT_OBJ *script)

 {
  //
  // Dummy use of "script".
  //

  if (!script)
     error("No script object");

  al6_reset();
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_loop(...)
 *
 ***************************************************************************/

 FLAG sf_loop(struct SCRIPT_OBJ *script)

 {
  static long loop_cnt = 1;

  printf("SCRIPT Loop #%ld.\n",loop_cnt++);
  script->loop = TRUE;
  rewind(script->file);
  aspi_flush();
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_auto_init(...)
 *
 ***************************************************************************/

 FLAG sf_auto_init(struct SCRIPT_OBJ *script)

 {
  //
  // Dummy use of "script".
  //

  if (!script)
     error("No script object");

  printf("SCRIPT Auto-initialization.\n");
  rand_auto_init();
  return (TRUE);
  }

/***************************************************************************
 *
 * sf_nop(...)
 *
 ***************************************************************************/

 FLAG sf_nop(struct SCRIPT_OBJ *script)

 {
  int vc_num;

  file_get_int(script->file,&vc_num);
  return (TRUE);
  }
[ RETURN TO DIRECTORY ]