?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE Operating System : Change OS Defaults' ??
MODULE osm$change_os_defaults;

{ PURPOSE:
{   This module contains the command handlers for:
{     CHANGE_DATE
{     CHANGE_DEFAULT_DATE_FORMAT
{     CHANGE_DEFAULT_TIME_FORMAT
{     CHANGE_OPERATING_SYSTEM_NAME
{     CHANGE_TIME
{     CHANGE_TIME_ZONE

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc oss$job_paged_literal
?? POP ??
*copyc clp$evaluate_parameters
*copyc clp$log_comment
*copyc osp$change_os_default_ring_3
*copyc pmp$compute_date_time
*copyc pmp$get_date_time_at_timestamp
*copyc pmp$get_time_zone
?? OLDTITLE ??
?? NEWTITLE := 'Global Declarations Declared by This Module', EJECT ??
  VAR
    v$log_array: [STATIC, READ, oss$job_paged_literal] ARRAY [1 .. 8] OF ost$name :=
          ['SYSTEM', 'STATISTIC', 'ENGINEERING', 'ACCOUNT', 'JOB', 'JOB_ACCOUNT', 'JOB_STATISTIC', 'HISTORY'];
?? OLDTITLE ??
?? NEWTITLE := 'osp$_change_date', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$_change_date
    (    parameter_list: clt$parameter_list;
     VAR status: ost$status);

{  PROCEDURE (osm$sou_chad) change_date, chad (
{    month, m : integer 1 .. 12 = $required
{    day,   d : integer 1 .. 31 = $required
{    year, y  : integer 1900 .. 2155 = $required
{    status)

?? PUSH (LISTEXT := ON) ??
?? FMT (FORMAT := OFF) ??

  VAR
    pdt: [STATIC, READ, cls$declaration_section] record
      header: clt$pdt_header,
      names: array [1 .. 7] of clt$pdt_parameter_name,
      parameters: array [1 .. 4] of clt$pdt_parameter,
      type1: record
        header: clt$type_specification_header,
        qualifier: clt$integer_type_qualifier,
      recend,
      type2: record
        header: clt$type_specification_header,
        qualifier: clt$integer_type_qualifier,
      recend,
      type3: record
        header: clt$type_specification_header,
        qualifier: clt$integer_type_qualifier,
      recend,
      type4: record
        header: clt$type_specification_header,
      recend,
    recend := [
    [1,
    [89, 6, 9, 12, 32, 43, 623],
    clc$command, 7, 4, 3, 0, 0, 0, 4, 'OSM$SOU_CHAD'], [
    ['D                              ',clc$abbreviation_entry, 2],
    ['DAY                            ',clc$nominal_entry, 2],
    ['M                              ',clc$abbreviation_entry, 1],
    ['MONTH                          ',clc$nominal_entry, 1],
    ['STATUS                         ',clc$nominal_entry, 4],
    ['Y                              ',clc$abbreviation_entry, 3],
    ['YEAR                           ',clc$nominal_entry, 3]],
    [
{ PARAMETER 1
    [4, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 20, clc$required_parameter,
  0, 0],
{ PARAMETER 2
    [2, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 20, clc$required_parameter,
  0, 0],
{ PARAMETER 3
    [7, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 20, clc$required_parameter,
  0, 0],
{ PARAMETER 4
    [5, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name],
    clc$pass_by_reference, clc$immediate_evaluation, clc$standard_parameter_checking, 3,
  clc$optional_parameter, 0, 0]],
{ PARAMETER 1
    [[1, 0, clc$integer_type], [1, 12, 10]],
{ PARAMETER 2
    [[1, 0, clc$integer_type], [1, 31, 10]],
{ PARAMETER 3
    [[1, 0, clc$integer_type], [1900, 2155, 10]],
{ PARAMETER 4
    [[1, 0, clc$status_type]]];

?? FMT (FORMAT := ON) ??
?? POP ??

    CONST
      p$month = 1,
      p$day = 2,
      p$year = 3,
      p$status = 4;

    VAR
      pvt: array [1 .. 4] of clt$parameter_value;

    VAR
      ignore_status: ost$status,
      os_default: ost$operating_system_default;

    status.normal := TRUE;
    clp$evaluate_parameters (parameter_list, #SEQ (pdt), NIL, ^pvt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.kind := osc$date_time;
    os_default.free_running_clock := #FREE_RUNNING_CLOCK (0);
    pmp$get_date_time_at_timestamp (os_default.free_running_clock, pmc$use_system_local_time,
          os_default.date_time, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.date_time.month := pvt [p$month].value^.integer_value.value;
    os_default.date_time.day := pvt [p$day].value^.integer_value.value;
    os_default.date_time.year := pvt [p$year].value^.integer_value.value - 1900;

    osp$change_os_default_ring_3 (os_default, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$log_comment ('System date changed by operator.', v$log_array, ignore_status);

  PROCEND osp$_change_date;
?? OLDTITLE ??
?? NEWTITLE := 'osp$_change_default_date_format', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$_change_default_date_format
    (    parameter_list: clt$parameter_list;
     VAR status: ost$status);

{  PROCEDURE (osm$sou_chaddf) change_default_date_format, chaddf (
{    format, f: key
{        month
{        mdy
{        dmy
{        isod
{        ordinal
{     keyend = $required
{     status)

?? PUSH (LISTEXT := ON) ??
?? FMT (FORMAT := OFF) ??

  VAR
    pdt: [STATIC, READ, cls$declaration_section] record
      header: clt$pdt_header,
      names: array [1 .. 3] of clt$pdt_parameter_name,
      parameters: array [1 .. 2] of clt$pdt_parameter,
      type1: record
        header: clt$type_specification_header,
        qualifier: clt$keyword_type_qualifier,
        keyword_specs: array [1 .. 5] of clt$keyword_specification,
      recend,
      type2: record
        header: clt$type_specification_header,
      recend,
    recend := [
    [1,
    [89, 6, 9, 13, 15, 8, 465],
    clc$command, 3, 2, 1, 0, 0, 0, 2, 'OSM$SOU_CHADDF'], [
    ['F                              ',clc$abbreviation_entry, 1],
    ['FORMAT                         ',clc$nominal_entry, 1],
    ['STATUS                         ',clc$nominal_entry, 2]],
    [
{ PARAMETER 1
    [2, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 192,
  clc$required_parameter, 0, 0],
{ PARAMETER 2
    [3, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name],
    clc$pass_by_reference, clc$immediate_evaluation, clc$standard_parameter_checking, 3,
  clc$optional_parameter, 0, 0]],
{ PARAMETER 1
    [[1, 0, clc$keyword_type], [5], [
    ['DMY                            ', clc$nominal_entry, clc$normal_usage_entry, 3],
    ['ISOD                           ', clc$nominal_entry, clc$normal_usage_entry, 4],
    ['MDY                            ', clc$nominal_entry, clc$normal_usage_entry, 2],
    ['MONTH                          ', clc$nominal_entry, clc$normal_usage_entry, 1],
    ['ORDINAL                        ', clc$nominal_entry, clc$normal_usage_entry, 5]]
    ],
{ PARAMETER 2
    [[1, 0, clc$status_type]]];

?? FMT (FORMAT := ON) ??
?? POP ??

    CONST
      p$format = 1,
      p$status = 2;

    VAR
      pvt: array [1 .. 2] of clt$parameter_value;

    VAR
      ignore_status: ost$status,
      os_default: ost$operating_system_default;

    status.normal := TRUE;
    clp$evaluate_parameters (parameter_list, #SEQ (pdt), NIL, ^pvt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.kind := osc$default_date_format;

    IF pvt [p$format].value^.keyword_value = 'MONTH' THEN
      os_default.default_date.date_format := osc$month_date;
      os_default.default_date.format_string := 'MN D2, Y4';
    ELSEIF pvt [p$format].value^.keyword_value = 'MDY' THEN
      os_default.default_date.date_format := osc$mdy_date;
      os_default.default_date.format_string := 'M2/D2/Y2';
    ELSEIF pvt [p$format].value^.keyword_value = 'DMY' THEN
      os_default.default_date.date_format := osc$dmy_date;
      os_default.default_date.format_string := 'D2.M2.Y2';
    ELSEIF pvt [p$format].value^.keyword_value = 'ISOD' THEN
      os_default.default_date.date_format := osc$iso_date;
      os_default.default_date.format_string := 'Y4-M2-D2';
    ELSEIF pvt [p$format].value^.keyword_value = 'ORDINAL' THEN
      os_default.default_date.date_format := osc$ordinal_date;
      os_default.default_date.format_string := 'Y4J3';
    ELSE
      RETURN;
    IFEND;

    osp$change_os_default_ring_3 (os_default, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$log_comment ('System default date format changed by operator.', v$log_array, ignore_status);

  PROCEND osp$_change_default_date_format;
?? OLDTITLE ??
?? NEWTITLE := 'osp$_change_default_time_format', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$_change_default_time_format
    (    parameter_list: clt$parameter_list;
     VAR status: ost$status);

{  PROCEDURE (osm$sou_chadtf) change_default_time_format, chadtf(
{     format,f: key
{         ampm
{         hms
{         (millisecond, ms)
{         isot
{       keyend = $required
{     status)

?? PUSH (LISTEXT := ON) ??
?? FMT (FORMAT := OFF) ??

  VAR
    pdt: [STATIC, READ, cls$declaration_section] record
      header: clt$pdt_header,
      names: array [1 .. 3] of clt$pdt_parameter_name,
      parameters: array [1 .. 2] of clt$pdt_parameter,
      type1: record
        header: clt$type_specification_header,
        qualifier: clt$keyword_type_qualifier,
        keyword_specs: array [1 .. 5] of clt$keyword_specification,
      recend,
      type2: record
        header: clt$type_specification_header,
      recend,
    recend := [
    [1,
    [89, 6, 9, 13, 24, 24, 441],
    clc$command, 3, 2, 1, 0, 0, 0, 2, 'OSM$SOU_CHADTF'], [
    ['F                              ',clc$abbreviation_entry, 1],
    ['FORMAT                         ',clc$nominal_entry, 1],
    ['STATUS                         ',clc$nominal_entry, 2]],
    [
{ PARAMETER 1
    [2, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 192,
  clc$required_parameter, 0, 0],
{ PARAMETER 2
    [3, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name],
    clc$pass_by_reference, clc$immediate_evaluation, clc$standard_parameter_checking, 3,
  clc$optional_parameter, 0, 0]],
{ PARAMETER 1
    [[1, 0, clc$keyword_type], [5], [
    ['AMPM                           ', clc$nominal_entry, clc$normal_usage_entry, 1],
    ['HMS                            ', clc$nominal_entry, clc$normal_usage_entry, 2],
    ['ISOT                           ', clc$nominal_entry, clc$normal_usage_entry, 4],
    ['MILLISECOND                    ', clc$nominal_entry, clc$normal_usage_entry, 3],
    ['MS                             ', clc$abbreviation_entry, clc$normal_usage_entry, 3]]
    ],
{ PARAMETER 2
    [[1, 0, clc$status_type]]];

?? FMT (FORMAT := ON) ??
?? POP ??

    CONST
      p$format = 1,
      p$status = 2;

    VAR
      pvt: array [1 .. 2] of clt$parameter_value;

    VAR
      ignore_status: ost$status,
      os_default: ost$operating_system_default;

    status.normal := TRUE;
    clp$evaluate_parameters (parameter_list, #SEQ (pdt), NIL, ^pvt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.kind := osc$default_time_format;

    IF pvt [p$format].value^.keyword_value = 'AMPM' THEN
      os_default.default_time.time_format := osc$ampm_time;
      os_default.default_time.format_string := 'H12:MM AMORPM';
    ELSEIF pvt [p$format].value^.keyword_value = 'HMS' THEN
      os_default.default_time.time_format := osc$hms_time;
      os_default.default_time.format_string := 'H24:MM:SS';
    ELSEIF pvt [p$format].value^.keyword_value = 'MILLISECOND' THEN
      os_default.default_time.time_format := osc$millisecond_time;
      os_default.default_time.format_string := 'H24:MM:SS.S1000';
    ELSEIF pvt [p$format].value^.keyword_value = 'ISOT' THEN
      os_default.default_time.time_format := osc$millisecond_time;
      os_default.default_time.format_string := 'ISOT';
    ELSE
      RETURN;
    IFEND;

    osp$change_os_default_ring_3 (os_default, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$log_comment ('System default time format changed by operator.', v$log_array, ignore_status);

  PROCEND osp$_change_default_time_format;
?? OLDTITLE ??
?? NEWTITLE := 'osp$_change_operating_system_na', EJECT ??

  PROCEDURE [XDCL] osp$_change_operating_system_na
    (    parameter_list: clt$parameter_list;
     VAR status: ost$status);

{  PROCEDURE (osm$chaosn) change_operating_system_name, chaosn(
{    operating_system_name, osn : string 1 .. 22 = $required
{    status)

?? PUSH (LISTEXT := ON) ??
?? FMT (FORMAT := OFF) ??

  VAR
    pdt: [STATIC, READ, cls$declaration_section] record
      header: clt$pdt_header,
      names: array [1 .. 3] of clt$pdt_parameter_name,
      parameters: array [1 .. 2] of clt$pdt_parameter,
      type1: record
        header: clt$type_specification_header,
        qualifier: clt$string_type_qualifier,
      recend,
      type2: record
        header: clt$type_specification_header,
      recend,
    recend := [
    [1,
    [89, 6, 9, 12, 23, 32, 377],
    clc$command, 3, 2, 1, 0, 0, 0, 2, 'OSM$CHAOSN'], [
    ['OPERATING_SYSTEM_NAME          ',clc$nominal_entry, 1],
    ['OSN                            ',clc$abbreviation_entry, 1],
    ['STATUS                         ',clc$nominal_entry, 2]],
    [
{ PARAMETER 1
    [1, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 8, clc$required_parameter, 0
  , 0],
{ PARAMETER 2
    [3, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name],
    clc$pass_by_reference, clc$immediate_evaluation, clc$standard_parameter_checking, 3,
  clc$optional_parameter, 0, 0]],
{ PARAMETER 1
    [[1, 0, clc$string_type], [1, 22, FALSE]],
{ PARAMETER 2
    [[1, 0, clc$status_type]]];

?? FMT (FORMAT := ON) ??
?? POP ??

    CONST
      p$operating_system_name = 1,
      p$status = 2;

    VAR
      pvt: array [1 .. 2] of clt$parameter_value;

    VAR
      ignore_status: ost$status,
      os_default: ost$operating_system_default;

    status.normal := TRUE;
    clp$evaluate_parameters (parameter_list, #SEQ (pdt), NIL, ^pvt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.kind := osc$os_name;
    os_default.os_name := pvt [p$operating_system_name].value^.string_value^;

    osp$change_os_default_ring_3 (os_default, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$log_comment ('System operating system name changed by operator.', v$log_array, ignore_status);

  PROCEND osp$_change_operating_system_na;
?? OLDTITLE ??
?? NEWTITLE := 'osp$_change_time', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$_change_time
    (    parameter_list: clt$parameter_list;
     VAR status: ost$status);

{  PROCEDURE (osm$sou_chat) change_time, chat (
{    hour, h   : integer 0 .. 23 = $required
{    minute, m : integer 0 .. 59 = $required
{    second, s : integer 0 .. 59 = 0
{    status)

?? PUSH (LISTEXT := ON) ??
?? FMT (FORMAT := OFF) ??

  VAR
    pdt: [STATIC, READ, cls$declaration_section] record
      header: clt$pdt_header,
      names: array [1 .. 7] of clt$pdt_parameter_name,
      parameters: array [1 .. 4] of clt$pdt_parameter,
      type1: record
        header: clt$type_specification_header,
        qualifier: clt$integer_type_qualifier,
      recend,
      type2: record
        header: clt$type_specification_header,
        qualifier: clt$integer_type_qualifier,
      recend,
      type3: record
        header: clt$type_specification_header,
        qualifier: clt$integer_type_qualifier,
        default_value: string (1),
      recend,
      type4: record
        header: clt$type_specification_header,
      recend,
    recend := [
    [1,
    [89, 6, 9, 12, 52, 57, 807],
    clc$command, 7, 4, 2, 0, 0, 0, 4, 'OSM$SOU_CHAT'], [
    ['H                              ',clc$abbreviation_entry, 1],
    ['HOUR                           ',clc$nominal_entry, 1],
    ['M                              ',clc$abbreviation_entry, 2],
    ['MINUTE                         ',clc$nominal_entry, 2],
    ['S                              ',clc$abbreviation_entry, 3],
    ['SECOND                         ',clc$nominal_entry, 3],
    ['STATUS                         ',clc$nominal_entry, 4]],
    [
{ PARAMETER 1
    [2, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 20, clc$required_parameter,
  0, 0],
{ PARAMETER 2
    [4, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 20, clc$required_parameter,
  0, 0],
{ PARAMETER 3
    [6, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 20,
  clc$optional_default_parameter, 0, 1],
{ PARAMETER 4
    [7, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name],
    clc$pass_by_reference, clc$immediate_evaluation, clc$standard_parameter_checking, 3,
  clc$optional_parameter, 0, 0]],
{ PARAMETER 1
    [[1, 0, clc$integer_type], [0, 23, 10]],
{ PARAMETER 2
    [[1, 0, clc$integer_type], [0, 59, 10]],
{ PARAMETER 3
    [[1, 0, clc$integer_type], [0, 59, 10],
    '0'],
{ PARAMETER 4
    [[1, 0, clc$status_type]]];

?? FMT (FORMAT := ON) ??
?? POP ??

    CONST
      p$hour = 1,
      p$minute = 2,
      p$second = 3,
      p$status = 4;

    VAR
      pvt: array [1 .. 4] of clt$parameter_value;

    VAR
      ignore_status: ost$status,
      os_default: ost$operating_system_default;

    status.normal := TRUE;
    clp$evaluate_parameters (parameter_list, #SEQ (pdt), NIL, ^pvt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.kind := osc$date_time;
    os_default.free_running_clock := #FREE_RUNNING_CLOCK (0);
    pmp$get_date_time_at_timestamp (os_default.free_running_clock, pmc$use_system_local_time,
          os_default.date_time, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    os_default.date_time.hour := pvt [p$hour].value^.integer_value.value;
    os_default.date_time.minute := pvt [p$minute].value^.integer_value.value;
    os_default.date_time.second := pvt [p$second].value^.integer_value.value;
    os_default.date_time.millisecond := 0;

    osp$change_os_default_ring_3 (os_default, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$log_comment ('System time changed by operator.', v$log_array, ignore_status);

  PROCEND osp$_change_time;
?? OLDTITLE ??
?? NEWTITLE := 'osp$_change_time_zone', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$_change_time_zone
    (    parameter_list: clt$parameter_list;
     VAR status: ost$status);

{  PROCEDURE (osm$sou_chatz) change_time_zone, chatz(
{    time_zone, tz: time_zone = $required
{    adjust_date_time, adt: boolean = $required
{    status)

?? PUSH (LISTEXT := ON) ??
?? FMT (FORMAT := OFF) ??

  VAR
    pdt: [STATIC, READ, cls$declaration_section] record
      header: clt$pdt_header,
      names: array [1 .. 5] of clt$pdt_parameter_name,
      parameters: array [1 .. 3] of clt$pdt_parameter,
      type1: record
        header: clt$type_specification_header,
      recend,
      type2: record
        header: clt$type_specification_header,
      recend,
      type3: record
        header: clt$type_specification_header,
      recend,
    recend := [
    [1,
    [89, 6, 9, 13, 32, 20, 209],
    clc$command, 5, 3, 2, 0, 0, 0, 3, 'OSM$SOU_CHATZ'], [
    ['ADJUST_DATE_TIME               ',clc$nominal_entry, 2],
    ['ADT                            ',clc$abbreviation_entry, 2],
    ['STATUS                         ',clc$nominal_entry, 3],
    ['TIME_ZONE                      ',clc$nominal_entry, 1],
    ['TZ                             ',clc$abbreviation_entry, 1]],
    [
{ PARAMETER 1
    [4, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 3, clc$required_parameter, 0
  , 0],
{ PARAMETER 2
    [1, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name, clc$specify_positionally],
    clc$pass_by_value, clc$immediate_evaluation, clc$standard_parameter_checking, 3, clc$required_parameter, 0
  , 0],
{ PARAMETER 3
    [3, clc$normal_usage_entry, clc$non_secure_parameter,
    $clt$parameter_spec_methods[clc$specify_by_name],
    clc$pass_by_reference, clc$immediate_evaluation, clc$standard_parameter_checking, 3,
  clc$optional_parameter, 0, 0]],
{ PARAMETER 1
    [[1, 0, clc$time_zone_type]],
{ PARAMETER 2
    [[1, 0, clc$boolean_type]],
{ PARAMETER 3
    [[1, 0, clc$status_type]]];

?? FMT (FORMAT := ON) ??
?? POP ??

    CONST
      p$time_zone = 1,
      p$adjust_date_time = 2,
      p$status = 3;

    VAR
      pvt: array [1 .. 3] of clt$parameter_value;

    VAR
      current_time_zone: ost$time_zone,
      date_time: ost$date_time,
      ignore_status: ost$status,
      local_date_time: ost$date_time,
      os_default: ost$operating_system_default,
      time_zone: ost$time_zone,
      time_zone_increment: pmt$time_increment;

    status.normal := TRUE;
    clp$evaluate_parameters (parameter_list, #SEQ (pdt), NIL, ^pvt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    time_zone := pvt [p$time_zone].value^.time_zone_value;
    IF pvt [p$adjust_date_time].value^.boolean_value.value THEN
      pmp$get_date_time_at_timestamp (#FREE_RUNNING_CLOCK (0), pmc$use_system_local_time, date_time, status);
      IF NOT status.normal THEN
        RETURN;
      IFEND;
      pmp$get_time_zone (current_time_zone, status);
      IF NOT status.normal THEN
        RETURN;
      IFEND;
    IFEND;

    os_default.kind := osc$time_zone;
    os_default.time_zone := time_zone;

    osp$change_os_default_ring_3 (os_default, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    IF pvt [p$adjust_date_time].value^.boolean_value.value THEN
      IF time_zone.daylight_saving_time <> current_time_zone.daylight_saving_time THEN
        IF time_zone.daylight_saving_time THEN
          time_zone_increment.hour := 1;
        ELSE
          time_zone_increment.hour := -1;
        IFEND;

        time_zone_increment.minute := 0;
        time_zone_increment.second := 0;
        time_zone_increment.millisecond := 0;
        time_zone_increment.year := 0;
        time_zone_increment.month := 0;
        time_zone_increment.day := 0;
        pmp$compute_date_time (date_time, time_zone_increment, local_date_time, status);
        os_default.kind := osc$date_time;
        os_default.date_time := local_date_time;
        os_default.free_running_clock := #FREE_RUNNING_CLOCK (0);

        osp$change_os_default_ring_3 (os_default, status);
        IF NOT status.normal THEN
          RETURN;
        IFEND;
      IFEND;
      clp$log_comment ('System time zone changed and time adjusted by operator.', v$log_array, ignore_status);
    ELSE
      clp$log_comment ('System time zone changed by operator.', v$log_array, ignore_status);
    IFEND;

  PROCEND osp$_change_time_zone;
?? OLDTITLE ??
MODEND osm$change_os_defaults;
