Yes, the language designers were influenced by Algol and Modula.
07963000$SET CONTENTS "PROC: show_known_ssps"
07964000% ---------------------------------------------------------
07965000% | |
07966000 show_known_ssps
07967000% | |
07968000% ---------------------------------------------------------
07969000
07970000PROC( ssp_time VALUE SSP_TIME );
07971000SHARES
07972000 CONST loader_storage, %108
07973000 CONST mcp_identification,
07974000 VAR message_storage,
07975000 CONST pointer_reference_table,
07976000 VAR queue_storage;
07977000
07978000CONST
07979000 no_firmware STRING (9) OF HEX = "080347000";
07980000
07981000VAR
07982000 base_ptr DAT_POINTER,
07983000 ch_ptr PTR TO CHANNEL_TABLE_ENTRY,
07984000 keyboard_message STRING (30) OF HEX :=
07985000
07986000% PROC # <n> - SSP ON CC/UU
07987000
07988000 "244" + "C7B" + "AF0" + "C60" + "387" + "087" + "800" + "000",
07989000
07990000 procno PACKED STRUC
07991000 CASE BOOLEAN
07992000 IS true:
07993000 as_int DINT1
07994000 OR false:
07995000 as_hex HEX2
07996000 ESAC
07997000 CURTS := [true, processor_number],
07998000 search_done BOOLEAN;
07999000
08000000
08001000
08002000 keyboard_message[8::2] := procno.as_hex;
08003000 base_ptr := ioat_ptrs.first_element;
08004000 search_done := false;
08005000
08006000 DO
08007000 FIND ioat_ptr OVER base_ptr..ioat_ptrs.last_element
08008000 INTO ioat_ptrs.base @
08009000 WHERE ioat_ptr@.primary_hardware_type = shared_system_processor
08010000 THEN
08011000 message_iosta := ioat_ptr @.device_status_number;
08012000 ch_ptr := ptr( channel_table_ptrs.base @
08013000 [ioat_ptr @.primary_channel_number] );
08014000
08014000
08015000 IF ^ch_ptr @.flags.good_firmware_file
08016000 THEN
08017000 keyboard_message[22::9] := no_firmware;
08018000 ELSE
08019000 keyboard_message[22::3] := fill_string( "0" );
08020000 FI;
08021000
08022000 kbout_mod.kbospr( keyboard_message );
08023000
08024000 IF load_flag = cold_start %108
08025000 THEN %108
08026000 q1.ioat_address_in_dat := ioat_ptr;
08027000 q1.virtual_opcode_variants := vop_ssp_set_time;
08028000 q1.copy_desc := mcp.copy_desc( system_initialization,
08029000 data_page );
08030000 mcp.move_repeat( mcp.offset_ptr( ssp_time ),
08031000 q1.relative_buffer_addresses );
08032000 q1.relative_buffer_end_addr +:= SSP_TIME.SIZE;
08033000 q1.mcp_generated_io := true;
08034000 q1.ignore_unrecovered_error := true;
08035000
08036000 io_mod.initiate_mcp_io; % Set the time
08037000
08038000 FI; %108
08039000 base_ptr := ptr_add( ioat_ptr, 1 );
08040000 ELSE
08041000 search_done := true;
08042000 DNIF;
08043000
08044000 OD UNTIL search_done;
08045000
08046000CORP;
constructs like the FIND statement were mapped to one of the search
instructions.
http://vseries.lurndal.org/doku.php?id=instructions:sea
http://vseries.lurndal.org/doku.php?id=instructions:slt