#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import datetime
import sys
#import os #раскоментиоовать при желании удалять исходный файл

__doc__ = '''
Скрипт добавляет в g-code код M117 для вывода
на LCD принтера текущего слоя.
1. Установить python 2.x.  Для удобства при установке включаем опцию добавления в переменную Path.
2. В настроках slic3r Print Settings - Output options - Post-processing scripts
указать путь к этому скрипту.
3. Для этой версии скрипта необходимо в настройки slic3r 
Printer Settings - Layer change G-code добавить M117.
'''

def usage(docs):
	'''
	Выводит строку об аргументах запуска скрипта
	'''
	print docs
	print "\nUsage:"
	print sys.argv[0], "Input_file [Output_file]\n"
		
def layers(args):
	'''
	Основная функция
	'''
	
	infile = open(sys.argv[1])
	
	if len(sys.argv) < 3:
		filename = str(sys.argv[1])
		if filename.rfind(".") != -1:
			outfilename = filename[:filename.rfind(".")] + "_M117.gcode" #меняем имя выходного файла, если не указано в аргументах
	else:
		outfilename = sys.argv[2]
	outfile = open(outfilename, mode = 'w')
	
	allLayer = 0
	curLayer = 0
	lines = infile.readlines() #читаем файл в строки
	
	for line in lines: #считаем общее количество слоев
		m1 = line.find('M117')
		if m1 == 0:
			allLayer = allLayer + 1
		
	outfile.write('; added M117 g-code by python script v2 on '+str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+'\n') #пишем первую строчку о том, что файл изменен  
		
	for line in lines: #пишем новый файл с добавлением строки M117
		m = line.find('M117')
		if m == 0 and curLayer < allLayer:
			curLayer = curLayer + 1
			outfile.write('M117 Layer '+str(curLayer)+'/'+str(allLayer)+'; info on LCD\n')
		else:
			outfile.write(line)
	infile.close()
	outfile.close()
#	os.remove(sys.argv[1]) #раскоментиоовать при желании удалять исходный файл

if __name__ == '__main__':
	try:
		layers(sys.argv[:1])
	except IndexError:
		usage(__doc__)
