/* * SCRIPT FUNCTIONS */ #include #include #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); }