#usage "en: create a new sheet with index of all sheet names in A4-L frame DOCFIELD.

" "RUN A_create_index [index sheet name]
" "index sheet name = 'STDOUT' for scripting, default = 'Table of Contents'
" "reisenweber@web.de" , "de: Erzeugt ein neues sheet mit einer Liste aller sheet-Namen in A4-L frame DOCFIELD.

" "RUN A_create_index [index sheet name]
" "index sheet name = 'STDOUT' for scripting, default = 'Table of Contents'
" "reisenweber@web.de" #require 6.0500 string Version = "Version 0.7.0"; // 2015-10-08 Joerg reisenweber@web.de string ContentPageName = "Table of Contents"; string pos = "(0.5in 6.7in)"; //position of TOC text on TOC sheet //position of sheet name in DOCFIELD, the values have no known unit and are derived from printf-debugging int minx = 53644800 - 50000; //mere guesswork, next version should find out about dimensions&pos of FRAME??,G$2(DOCFIELD) int maxx = 53644800 + 50000; int miny = 8940800 - 800; int maxy = 8940800 + 800; string cmd, cmdheader, s; int contentpage = 999; string newSheetName = argv[1]; if (newSheetName != "STDOUT") { if (newSheetName != "") ContentPageName = newSheetName; sprintf(s, "LAYER 101 text;\nDISPLAY 101;\nLAYER 101;\n"); //BUG! shouldn't print sheet name of new index sheet on layer 101 cmdheader += s; sprintf(s, "CHANGE ALIGN TOP LEFT;\nTEXT '"); cmd += s; } project.schematic(SH) { SH.sheets(S) { S.texts(T) { if (T.x > minx && T.y > miny && T.x < maxx && T.y < maxy) { sprintf(s, "%d: %s\\n", S.number, T.value); cmd+= s; if (T.value == ContentPageName) contentpage = S.number; } } } } if (newSheetName == "STDOUT") { output("/dev/stdout", "at") printf(cmd + "\n\n"); exit("QUIT;"); } if (contentpage == 999){ sheet(S) {contentpage = S.number;} //copy existing frame from last page to new page. Watch out, the new page gets created after this ULP exits and the exit script runs sprintf(s, "EDIT .s%d;\nGROUP (-0.01in -0.01in) (66in -0.01) (66in 0.01in) (-0.01in 0.01in) (-0.01in -0.01in);\nCUT (0 0);\nEDIT .s999;\nPASTE (0 0);\n", contentpage); cmdheader += s; //write page title to 6.6,1.1 sprintf(s, "CHANGE ALIGN BOTTOM LEFT;\nTEXT '%s' (6.6in 1.1in);\n CHANGE SIZE 0.2 (6.6in 1.1in);\n", ContentPageName); cmdheader += s; } else { //delete existing index text sprintf(s, "EDIT .s%d;\nDELETE %s;\n", contentpage, pos); cmdheader += s; } sprintf(s, "' %s;\nCHANGE LINEDISTANCE 50 %s;\nCHANGE SIZE 0.11 %s;\n", pos, pos, pos); cmd += s; //dlgMessageBox(cmd, "KK");dlgMessageBox(cmdheader, "KK"); exit(cmdheader + cmd);