Module theBaseline=current Object obj Object obj_v1,obj_v2 Object obj2 string PUID_v2 string PUID_v1 int iList=0 string requirementid string req_id int iiList=0 string name1, name2 Module b1, b2 Skip skBaseline = createString() Skip skModule = createString() string gpChoices[3] = {"Text modification","Purged","Add"} void fnDoNothingDBE(DBE xDBE) {} string gpNothing[1] = {"Nothing"} string dummyList[] = {""} DB db = create "Show diff" DBE dbTab = tab(db,gpChoices,3,fnDoNothingDBE) DBE textbox = richText(db, "", "", 200,200, true) DBE Requirementlist= list(db, "List:", 200,200,dummyList) DBE Requirementllist=list(db,"List:", 200,200,dummyList) DBE list1, list2 // two global lists containing the baseline // selected (or current version) Skip baselines = create // cache current baselines dbTab->"top"->"form"; dbTab->"bottom"->"form"; dbTab->"right"->"form"; dbTab->"left"->"form" textbox->"top"->"inside"->dbTab textbox->"left"->"inside"->dbTab textbox->"right"->"inside"->dbTab textbox->"bottom"->"inside"->dbTab Requirementlist->"top"->"inside"->dbTab Requirementlist->"left"->"inside"->dbTab Requirementlist->"right"->"inside"->dbTab Requirementlist->"bottom"->"inside"->dbTab Requirementllist->"top"->"inside"->dbTab Requirementllist->"left"->"inside"->dbTab Requirementllist->"right"->"inside"->dbTab Requirementllist->"bottom"->"inside"->dbTab void fnChooseTab(DBE xTab) { int i = get(xTab) hide(Requirementlist) hide(Requirementllist) if(i==0) { show(textbox) } elseif(i==1) { show(Requirementlist) hide (Requirementllist) hide(textbox) } elseif(i==2) { show(Requirementllist) hide (Requirementlist) hide(textbox) } } void compareFn(DBE dbe){ //callfunction Buffer Buffer1 = create() Buffer Buffer2 = create() Buffer resBuf = create() int idx1, idx2 idx1 = get list1 // position in list idx2 = get list2 name1 = get list1 // baseline name name2 = get list2 if (idx1 < 0 || idx2 < 0) { // error checking ack (NLS_("two selections are needed")) return } else if (idx1 == idx2) { ack (NLS_("same selection on both sides")) return } Baseline sel1, sel2 string str for str in baselines do { // find each baseline Baseline b = key baselines // the baseline is the key string str = (major b) (NLS_(".")) (minor b) (suffix b) if (name1==str) sel1 = b if (name2==str) sel2 = b } Module old = current if (idx1==0) b1 = old // i.e. the current Module else b1 = load(sel1, true) // load the baselines on the screen if (idx2==0) b2 = old // i.e.e teh current Module else b2 = load(sel2, true) current = b1 // make sure filtering is off filtering off // on both sides. current = b2 filtering off current = old for obj in b1 do put(skBaseline, obj."Absolute Number" "",obj) for obj in b2 do put(skModule, obj."Absolute Number" "",obj) int fillList(DBE Requirementlist) { iList = 0 for obj in skBaseline do { if (!find (skModule, (key skBaseline) string, obj2)) { string abso_1=(key skBaseline) string obj_v1=object(intOf(abso_1),b2) obj_v2=object(intOf(abso_1),b1) PUID_v2=obj_v2."PUID" if(PUID_v2!=null){ requirementid="l'exigence " PUID_v2 "from " name1 " was purged in current" insert(Requirementlist,iList, requirementid) iList++ } } else { if (isDeleted obj && !isDeleted obj2) print "Object " (identifier obj) " was undeleted!" if (!isDeleted obj && isDeleted obj2) print "Object " (identifier obj) " was deleted!" } } return iList } if (fillList(Requirementlist) == 0) { insert(Requirementlist, 0 , "(No requirements)") } realize db int filllList(DBE Requirementllist){ for obj in skModule do { if (!find (skBaseline, (key skModule) string)) { string abso_1=(key skModule) string obj_v1=object(intOf(abso_1),b2) obj_v2=object(intOf(abso_1),b1) PUID_v1=obj_v1."PUID" if(PUID_v1!=null){ string req_id="l'exigence " PUID_v1 " was created in current.\n" insert(Requirementllist,iiList, req_id) iiList++ } } } return iiList } if (filllList(Requirementllist) == 0) { insert(Requirementllist, 0 , "(No requirements)") } realize db for obj in skModule do { if (find (skBaseline, (key skModule) string)) { string abso_1=(key skModule) string obj_v1=object(intOf(abso_1),b1) obj_v2=object(intOf(abso_1),b2) string nameb=name(b1) //print nameb PUID_v1=obj_v1."PUID" if((obj_v2."Last Modified On"!=null)&&(obj_v2."Last Modified On"!=null)){ string date1= obj_v2."Last Modified On" string date2=obj_v1."Last Modified On" PUID_v2=obj_v2."PUID" //print PUID_v1 "\n" if(PUID_v2!=null){ if(date2!=date1) { //print date1 " " date2 "\n" string exitext=obj_v1."Object Text" string exittext=obj_v2."Object Text" Buffer1+=exitext Buffer2+=exittext diff(resBuf, Buffer1,Buffer2, "\\cf1\\strike ", "\\cf3\\ul ") raise db } } } } } useRTFColour(textbox, true) set(dbTab,fnChooseTab) realize db set(textbox, tempStringOf resBuf) delete resBuf delete Buffer1 delete Buffer2 refreshDBExplorer() } Module m=current Baseline b int i=0 for b in m do { i++ } if (null m ) { ack (NLS_("program requires current Module")) halt } // count number of baselines if (i==0) { ack (NLS_("no baselines to compare")) halt } string where = name(theBaseline) DB db_input=create ((NLS_("Baseline Compare \"")) where (NLS_("\"")), styleThemed|styleAutoparent) string empty[] = {} list1 = list(db_input, (NLS_("")), 300, i+1 (NLS_("right"))->(NLS_("unattached")) // make lists side by side list2->(NLS_("left"))->(NLS_("flush"))->list1 list2->(NLS_("top"))->(NLS_("aligned"))->list1 list2->(NLS_("right"))->(NLS_("unattached")) DBE button= button(db_input,"Compare",compareFn) realize db_input for b in m do { string str = (major b) (NLS_(".")) (minor b) (suffix b) put(baselines, b, str) insert(list1, 0, str) insert(list2, 0, str) } insert(list1, 0, (NLS_("current"))) // put current at head of lists insert(list2, 0, (NLS_("current"))) show db_input "current"))) show db_input