/*
* 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);
}