#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);