#!/usr/bin/env python2
handlers = [
	'hard_fault_handler',
	'mem_manage_handler',
	'bus_fault_handler',
	'usage_fault_handler',
	'nvic_wwdg_isr',
	'pvd_isr',
	'tamp_stamp_isr',
	'rtc_wkup_isr',
	'flash_isr',
	'rcc_isr',
	'exti0_isr',
	'exti1_isr',
	'exti2_isr',
	'exti3_isr',
	'exti4_isr',
	'dma1_stream0_isr',
	'dma1_stream1_isr',
	'dma1_stream2_isr',
	'dma1_stream3_isr',
	'dma1_stream4_isr',
	'dma1_stream5_isr',
	'dma1_stream6_isr',
	'adc_isr',
	'can1_tx_isr',
	'can1_rx0_isr',
	'can1_rx1_isr',
	'can1_sce_isr',
	'exti9_5_isr',
	'tim1_brk_tim9_isr',
	'tim1_up_tim10_isr',
	'tim1_trg_com_tim11_isr',
	'tim1_cc_isr',
	'tim2_isr',
	'tim3_isr',
	'tim4_isr',
	'i2c1_ev_isr',
	'i2c1_er_isr',
	'i2c2_ev_isr',
	'i2c2_er_isr',
	'spi1_isr',
	'spi2_isr',
	'usart1_isr',
	'usart2_isr',
	'usart3_isr',
	'exti15_10_isr',
	'rtc_alarm_isr',
	'usb_fs_wkup_isr',
	'tim8_brk_tim12_isr',
	'tim8_up_tim13_isr',
	'tim8_trg_com_tim14_isr',
	'tim8_cc_isr',
	'dma1_stream7_isr',
	'fsmc_isr',
	'sdio_isr',
	'tim5_isr',
	'spi3_isr',
	'uart4_isr',
	'uart5_isr',
	'tim6_dac_isr',
	'tim7_isr',
	'dma2_stream0_isr',
	'dma2_stream1_isr',
	'dma2_stream2_isr',
	'dma2_stream3_isr',
	'dma2_stream4_isr',
	'eth_isr',
	'eth_wkup_isr',
	'can2_tx_isr',
	'can2_rx0_isr',
	'can2_rx1_isr',
	'can2_sce_isr',
	'otg_fs_isr',
	'dma2_stream5_isr',
	'dma2_stream6_isr',
	'dma2_stream7_isr',
	'usart6_isr',
	'i2c3_ev_isr',
	'i2c3_er_isr',
	'otg_hs_ep1_out_isr',
	'otg_hs_ep1_in_isr',
	'otg_hs_wkup_isr',
	'otg_hs_isr',
	'dcmi_isr',
	'cryp_isr',
	'hash_rng_isr',
]

with open('handlers.c', 'wt') as f:
	f.write('#include "layout.h"\n')
	f.write('#include "oled.h"\n\n')
	for i in handlers:
		f.write('void __attribute__((noreturn)) %s(void)\n' % i)
		f.write('{\n')
		f.write('\tlayoutDialog(DIALOG_ICON_ERROR, NULL, NULL, NULL, "Encountered", NULL, "%s", NULL, "Please restart", "the device.");\n' % i.upper())
		f.write('\tfor (;;) {} // loop forever\n')
		f.write('}\n\n')