Skip to content

Instantly share code, notes, and snippets.

@blrB
Last active November 28, 2018 21:26
Show Gist options
  • Save blrB/f7f70bb32ac9d87e4af2faabf108f45c to your computer and use it in GitHub Desktop.
Save blrB/f7f70bb32ac9d87e4af2faabf108f45c to your computer and use it in GitHub Desktop.
LOIS lab1 m4SCP
m4include(m4define([m4currentFile],builtin(translit,__file__,\,/))builtin(regexp,m4currentFile,.*[/],\&)_config.m4)
M4SCS(
#include "../../include/sckp_keynodes.scsy"
// Location: /lib/chain/reverse
)
procedure(chain_reverse,[[
msg_start = /"REVERS PROCEDURE START!\n"/,
msg_finish = /"REVERS PROCEDURE FINISH!\n"/,
push_first_singlet = "/lib/chain/push_first_singlet/chain_push_first_singlet",
push_singlet = "/lib/chain/push_singlet/chain_push_singlet",
get_next_singlet = "/lib/chain/get_next_singlet/chain_get_next_singlet",
reverse_msg_get_next = /"REVERS PROCEDURE[info]: get next\n"/,
reverse_msg_have_next = /"REVERS PROCEDURE[info]: have next\n"/,
read_param_then = /"REVERS PROCEDURE[info]: read param then\n"/,
read_param_else = /"REVERS PROCEDURE[info]: read param else\n"/,
read_param_then_in = /"REVERS PROCEDURE[info]: read param in then\n"/,
read_param_else_in = /"REVERS PROCEDURE[info]: read param in else\n"/,
prm1,prm2,prm3,prm4,prm5,prm3_1,prm3_2,prm3_3,prm4_1,prm4_2,prm4_3,
reverse_prm1,reverse_prm2,reverse_prm3,reverse_prm4
]],
[{
empty,
chain_next,
el_next,
chain_head,
last_in_new_chain,
parameters_next,
then,
else,
then_routine,
then_parameters,
else_routine,
else_parameters,
state,
true,
stack,
parameters,
logger,
descr
}],
{[
1_: in_: out_: state,
2_: in_: out_: true,
3_: in_: out_: stack,
4_: in_: parameters,
5_: in_: logger
]})
// START *********************************************************************************************** START
M4SCS(
print([1_: fixed_: msg_start])
)
genEl([1_: assign_: const_: undf_: empty])
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm1=[{1_: stack, 2_: chain_next, 3_: chain_head}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
M4SCS(
print([1_: fixed_: read_param_then])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm3=[{1_: parameters, 2_: parameters_next, 3_: then}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
ifVarAssign([
1_: then
],,reverse_start)
M4SCS(
print([1_: fixed_: read_param_else])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm4=[{1_: parameters_next, 2_: parameters_next, 3_: else}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
// --------------------------------- --------------------------------- ---------------------------------
label(reverse_start)
ifVarAssign([
1_: chain_head
], ,chain_error)
call([1_: fixed_: get_next_singlet,
2_: fixed_: reverse_prm1=[{1_: chain_head, 2_: chain_next, 3_: el_next}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
ifVarAssign([1_: el_next],,reverse_exit)
M4SCS(
print([1_: fixed_: reverse_msg_have_next])
)
call([1_: fixed_: push_first_singlet,
2_: fixed_: reverse_prm2=[{1_: el_next, 2_: last_in_new_chain, 3_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
label(get_next)
M4SCS(
print([1_: fixed_: reverse_msg_get_next])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: reverse_prm3=[{1_: chain_next, 2_: chain_next, 3_: el_next}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
ifVarAssign([1_: el_next],,reverse_exit)
M4SCS(
print([1_: fixed_: reverse_msg_have_next])
)
call([1_: fixed_: push_singlet,
2_: fixed_: reverse_prm4=[{1_: last_in_new_chain, 2_: el_next, 3_: last_in_new_chain, 4_: logger}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr],get_next,get_next)
// --------------------------------- --------------------------------- ---------------------------------
label(reverse_exit)
ifVarAssign([
1_: last_in_new_chain
],,chain_error)
call([1_: fixed_: push_singlet,
2_: fixed_: prm2=[{1_: stack, 2_: last_in_new_chain, 3_: stack, 4_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
// THEN *********************************************************************************************** THEN
ifVarAssign([
1_: then
],,finish)
M4SCS(
print([1_: fixed_: read_param_then_in])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prmg3_1 = [{1_: then, 2_: then, 3_: then_routine}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr])
ifVarAssign([
1_: then_routine
],,set_state_true)
M4SCS(
print([1_: fixed_: read_param_then_in])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prmg3_2 = [{1_: then, 2_: then, 3_: then_parameters}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr])
ifVarAssign([
1_: then_parameters
], then_parameters_is_not_empty)
varAssign([
1_: assign_: then_parameters,
2_: fixed_: empty
])
label(then_parameters_is_not_empty)
ifCoin([
1_: then_routine,
2_: then_parameters
], set_state_true)
call([1_: fixed_: then_routine,
2_: fixed_: prmr3_3 = [{1_: state, 2_: true, 3_: stack, 4_: then_parameters, 5_: logging}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr])
label(set_state_true)
varAssign([
1_: assign_: state,
2_: fixed_: true
],finish,finish)
// ELSE *********************************************************************************************** ELSE
label(chain_error)
ifVarAssign([
1_: else
],,finish)
M4SCS(
print([1_: fixed_: read_param_else_in])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prmg4_1 = [{1_: else, 2_: else, 3_: else_routine}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr])
ifVarAssign([
1_: else_routine
],,finish)
M4SCS(
print([1_: fixed_: read_param_else_in])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prmg4_2 = [{1_: else, 2_: else, 3_: else_parameters}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr])
ifVarAssign([
1_: else_parameters
], else_parameters_is_not_empty)
varAssign([
1_: assign_: else_parameters,
2_: fixed_: empty
])
label(else_parameters_is_not_empty)
ifCoin([
1_: else_routine,
2_: else_parameters
], finish)
call([1_: fixed_: else_routine,
2_: fixed_: prmr4_3 = [{1_: state, 2_: true, 3_: stack, 4_: else_parameters, 5_: logging}],
3_: assign_: descr])
waitReturn([1_: fixed_: descr])
// FINISH *********************************************************************************************** FINISH
label(finish)
M4SCS(
print([1_: fixed_: msg_finish])
)
eraseEl([1_: f_: fixed_: empty])
return([])
end()
m4include(m4define([m4currentFile],builtin(translit,__file__,\,/))builtin(regexp,m4currentFile,.*[/],\&)_config.m4)
M4SCS(
#include "../../include/sckp_keynodes.scsy"
// Location: /lib/test/reverse
)
procedure(test_reverse,[[
msg_start = /"TEST REVERS PROCEDURE START!\n"/,
msg_call = /"TEST REVERS PROCEDURE CALL!\n"/,
msg_call_finish = /"TEST REVERS PROCEDURE CALL FINISH!\n"/,
msg_finish = /"TEST REVERS PROCEDURE FINISH!\n"/,
msg_finish_ok = /"TEST FINISH OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"/,
push_first_singlet = "/lib/chain/push_first_singlet/chain_push_first_singlet",
push_singlet = "/lib/chain/push_singlet/chain_push_singlet",
get_next_singlet = "/lib/chain/get_next_singlet/chain_get_next_singlet",
pop_destroy_singlet = "/lib/chain/pop_destroy_singlet/chain_pop_destroy_singlet",
pop_destroy = "/lib/chain/pop_destroy/chain_pop_destroy",
reverse = "/lib/chain/reverse/chain_reverse",
prm_try_0, prm_try_1, prm_try_2, prm_try_3, prm_try_4, prm_try_5, prm_try_6,
prm1,prm2,prm3,prm4,prm5,prm6;
]],
[{
new_chair,
empty,
state,
true,
stack,
parameters,
el_next,
chain_head,
logger,
el_1,
chain_1,
el_2,
chain_2,
el_head,
descr
}],
{[
]})
M4SCS(
print([1_: fixed_: msg_start])
)
genEl([1_: assign_: const_: undf_: logger])
genEl([1_: assign_: const_: undf_: el_1])
genEl([1_: assign_: const_: undf_: el_2])
genEl([1_: assign_: const_: undf_: el_head])
genEl([1_: assign_: const_: undf_: empty])
call([1_: fixed_: push_first_singlet,
2_: fixed_: prm1=[{1_: el_1, 2_: chain_1, 3_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
call([1_: fixed_: push_singlet,
2_: fixed_: prm2=[{1_: chain_1, 2_: el_2, 3_: chain_2, 4_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
call([1_: fixed_: push_singlet,
2_: fixed_: prm3=[{1_: chain_2, 2_: el_head, 3_: chain_head, 4_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
genEl([1_: assign_: const_: undf_: state])
genEl([1_: assign_: const_: undf_: true])
call([1_: fixed_: push_first_singlet,
2_: fixed_: prm4=[{1_: chain_head, 2_: stack, 3_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
genEl([1_: assign_: const_: undf_: parameters])
M4SCS(
print([1_: fixed_: msg_call])
)
call([1_: fixed_: reverse,
2_: fixed_: prm5=[{1_: state, 2_: true, 3_: stack, 4_: parameters: 5_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
M4SCS(
print([1_: fixed_: msg_call_finish])
)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm_try_0=[{1_: stack, 2_: stack, 3_: new_chair}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm_try_1=[{1_: new_chair, 2_: new_chair, 3_: el_next}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
ifVarAssign([1_: el_next],,finish)
ifCoin([1_: fixed_: el_next,
2_: fixed_: el_1],,finish)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm_try_2=[{1_: new_chair, 2_: new_chair, 3_: el_next}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
ifVarAssign([1_: el_next],,finish)
ifCoin([1_: fixed_: el_next,
2_: fixed_: el_2],,finish)
call([1_: fixed_: get_next_singlet,
2_: fixed_: prm_try_3=[{1_: new_chair, 2_: new_chair, 3_: el_next}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
ifVarAssign([1_: el_next],,finish)
ifCoin([1_: fixed_: el_next,
2_: fixed_: el_head],,finish)
M4SCS(
print([1_: fixed_: msg_finish_ok])
)
M4SCS(
print([1_: fixed_: msg_call])
)
call([1_: fixed_: reverse,
2_: fixed_: prm6=[{1_: state, 2_: true, 3_: empty, 4_: parameters: 5_: logger}],
3_: assign_: descr])
waitReturn(1_: fixed_: descr)
M4SCS(
print([1_: fixed_: msg_call_finish])
)
M4SCS(
print([1_: fixed_: msg_finish])
)
eraseEl([1_: f_: fixed_: logger])
return([])
end()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment