PROCEDURE dum$display_os_version, display_os_version, disov (
  output, o: file = $output
  status)

  VAR
    local_status: status
    output_file: file
  VAREND

  IF $file(output open_position) = '$BOI' THEN
    delete_file f=output status=local_status
  IFEND
  output_file = output.$eoi

  change_default e=monitor am=pva
  display_memory a=$symbol_address(osv$build_level) b=22 e=monitor p=0 am=pva o=$null status=local_status
  IF NOT local_status.normal THEN
    display_memory a=$symbol_address(osv$build_level) b=22 e=monitor p=1 am=pva o=$null status=local_status
    IF NOT local_status.normal THEN
      put_line l='     The OS version is not retrievable.' o=output
      EXIT PROCEDURE
    IFEND
  IFEND
  os_version = $memory_string($symbol_address(osv$build_level) 22)

  IF $substr(os_version 1 6) = 'NOS/VE' THEN
    put_line l=' Operating System Version = '//os_version o=output_file
    jps = $memory($symbol_address(mtv$cst0)+2c(16) 4)
    change_processor_register jps=jps
    change_default e=job
  ELSE
    memory_p = 100000000(16)
    os = 'NOS/VE'

    REPEAT
      memory_string = $memory_string(memory_p $max_string)
      index = $scan_string(os memory_string)
      IF index = 0 THEN
        memory_p = memory_p + $max_string - $strlen(os)
      ELSE
        os_version = $memory_string(memory_p+index-1 22)
        put_line l=' The debug table you are using does not match the' o=output_file
        put_line l=' dump. The dump is '//$quote(os_version) o=output_file
        EXIT PROCEDURE
      IFEND
    UNTIL memory_p > 100001000(16)

    put_line l=' Unable to find the os version in the dump.' o=output_file
  IFEND

PROCEND dum$display_os_version
