Posted to tcl by Pitol7Pi at Thu Apr 30 15:30:05 GMT 2020view pretty

set addon_save_sync_info__tcl_list_from_attr(1) {SYNC 1 1;SYNC 2 2;K1_SP4_SPA_FINISH_TURN 4}
set addon_save_sync_info__tcl_list_from_attr(2) {SYNC 1 1;K2_SP4_SPA_GROOVE_OD 4;K2_SP4_SPA_SQUARE_SIDE_3_CUTCOM_SPA_DRILLING_FRONT 4;SYNC 2 2}	
    
    set listlen(1) [expr [llength [split $addon_save_sync_info__tcl_list_from_attr(1) ";"]] - 1]
	set listlen(2) [expr [llength [split $addon_save_sync_info__tcl_list_from_attr(2) ";"]] - 1]
	puts $listen(1)
    puts $listen(2)
    
     definition of the value of 'noop' list entry
	set noop "NOOP -1"
    
	if {$listlen(1) >= $listlen(2)} {
		set listlen(max) $listlen(1)
	} else {
		set listlen(max) $listlen(2)
	}
	
	
	# save the lists
	set lists(1)   [split $addon_save_sync_info__tcl_list_from_attr(1) ";"]
	set lists(2)   [split $addon_save_sync_info__tcl_list_from_attr(2) ";"]

	# indicator to find the first sync marker in each list (channel)
	set sync_found(1) -1
	set sync_found(2) -1
	
	# counter
	set i 0
	
	# loop until list lengths are equal
	# while {$listlen(1) != $listlen(2) || $i < $listlen(max)} {}
	while {$listlen(1) != $listlen(2)} {
		# getting first element from each list
		set element(1) [lindex $lists(1) $i]
		set element(2) [lindex $lists(2) $i]
		
		if {$sync_found(1) == -1 || $sync_found(2) == -1} {
			# searching the elements for the keyword 'SYNC'
			# to jump over macros as start op
			set sync_found(1) [lsearch -exact $element(1) "SYNC"]
			set sync_found(2) [lsearch -exact $element(2) "SYNC"]

		}
		
		if {$sync_found(1) > -1 && $sync_found(2) > -1} {
			# so if we found the first sync, then we are able to get
			# the next element of each list
			set nxt_element(1) [lindex $lists(1) [expr $i + 1]]
			set nxt_element(2) [lindex $lists(2) [expr $i + 1]]


			if {[lindex $nxt_element(1) 0] == "SYNC"} {

				# setting start counter to the element index
				set ii [expr $i + 1]
				# loop until keyword 'SYNC' has been found
				while {[lindex $nxt_element(2) 0] != "SYNC"} {
					# insert the 'noop' in list 1
					set lists(1) [linsert $lists(1) $ii $noop]
					# increment the counter
					incr ii
					# setting the element to be checked to the next list element
					set nxt_element(2) [lindex $lists(2) $ii]
					
					if {$ii > $listlen(max)} {
						#puts "NOOP MAX ENDLOSSCHLEIFE KANAL 1"
						break
					}
				}
			# check if the first list element of next element is 'SYNC'
			} elseif {[lindex $nxt_element(2) 0] == "SYNC"} {
				#puts "22222: nxt_element(2)=$nxt_element(2)"
				set ii [expr $i + 1]
				# loop until keyword 'SYNC' has been found
				while {[lindex $nxt_element(1) 0] != "SYNC"} {
					#puts "22222 while: nxt_element(1)=$nxt_element(1)"
					# insert the 'noop' in list 2
					set lists(2) [linsert $lists(2) $ii $noop]
					# increment the counter
					incr ii
					# setting the element to be checked to the next list element
					set nxt_element(1) [lindex $lists(1) $ii]
					
					if {$ii > $listlen(max)} {
						#puts "NOOP MIN ENDLOSSCHLEIFE KANAL 2"
						break
					}
				}
			}
			# set new list lengths, because we probably inserted elements
			set listlen(1) [expr [llength $lists(1)] - 1]
			set listlen(2) [expr [llength $lists(2)] - 1]
			
			if {$listlen(1) >= $listlen(2)} {
				set listlen(max) $listlen(1)
			} else {
				set listlen(max) $listlen(2)
			}
		}
		
		# next element of the lists
		incr i

		# avoiding infinity loop, if no sync event has been set
		if {$i > $listlen(max)} {
			puts "ENDLOSSCHLEIFE"
			return
		}
	}

	puts $lists(1)
    puts $lists(2)



Comments

Posted by Pistol7Pi at Thu Apr 30 15:32:46 GMT 2020 [text] [code]

Acutal result {SYNC 1 1} {NOOP -1} {NOOP -1} {SYNC 2 2} {K1_SP4_SPA_FINISH_TURN 4} {SYNC 1 1} {K2_SP4_SPA_GROOVE_OD 4} {K2_SP4_SPA_SQUARE_SIDE_3_CUTCOM_SPA_DRILLING_FRONT 4} {SYNC 2 2} Result should be: {SYNC 1 1} {NOOP -1} {NOOP -1} {SYNC 2 2} {K1_SP4_SPA_FINISH_TURN 4} {SYNC 1 1} {K2_SP4_SPA_GROOVE_OD 4} {K2_SP4_SPA_SQUARE_SIDE_3_CUTCOM_SPA_DRILLING_FRONT 4} {SYNC 2 2} {NOOP -1}