Procedure RFedit; CONST test=5.55"; Ver='10.03'; {rfEdit version no} AllSSname='EDIT¥Drawing Records'; SLss='EDIT¥SymLib Records'; VAR H, ssH,RH,Hn,Hs,Hr: HANDLE; Name, Wname, DName, Rname, Tname, Fname, Fvalue, RMark: STRING; a,r,c,m,n,i,p,q,k,Rn,Rt,subp,maxrows, maxcols, Dnum,Lnum,Rnum,Rtot,Stot,Snum: INTEGER; x,y: REAL; Done,asave,Cancel,All, Dsave: BOOLEAN; Rec: ARRAY [1..100] OF STRING; Symn: ARRAY[1..500] OF STRING; {RecH: ARRAY[1..100] OF HANDLE;} x1,y1,x2,y2,sw,sh: INTEGER; {Sn: ARRAY[1..200] OF HANDLE;} Layn: ARRAY[1..100] OF STRING; Coln: ARRAY[1..50] OF INTEGER; TheText: Dynarray[] OF CHAR; Procedure IDRecord; Procedure ClrIDs(H:HANDLE); BEGIN SetRField(H,'ID rfedit','Ser No.',''); END; BEGIN NewField('ID rfedit','Ser No.','0',4,0); ForEachObject(ClrIDs,(R IN ['ID rfedit'])); END; Procedure ListRecords; VAR n,i,a: INTEGER; BEGIN FOR n:=1 TO NameNum DO IF GetType(GetObject(NameList(n)))=47 THEN BEGIN i:=i+1; Rec[i]:=NameList(n); END; Dnum:=i; SortArray(Rec,Dnum,0); END; Procedure VerSRecords(VAR Rnum,Snum:INTEGER); VAR n,i: INTEGER; Rname: STRING; Found: BOOLEAN; Procedure VerSRsub1(H: HANDLE); BEGIN Snum:=Snum+1; Symn[Snum]:=GetName(H); For n:=1 TO NumRecords(H) DO BEGIN Hr:= GetRecord(H,n); Rname:=GetName(Hr); Found:=FALSE; IF Rnum>0 THEN FOR i:=1 TO Rnum DO IF Rec[i]=Rname THEN Found:=TRUE; IF NOT Found THEN BEGIN Rnum:=Rnum+1; Rec[Rnum]:=Rname; END; END; END; Function Drecords(H:HANDLE): BOOLEAN; BEGIN IF (GetType(H)=16) & (NumRecords(H)>0) THEN VerSRsub1(H); END; BEGIN n:=0; Snum:=0; Rnum:=0; ForEachObjectInList(Drecords,0,2,FSymDef); IF Snum>1 THEN SortArray(Symn,Snum,0); IF Rnum>1 THEN SortArray(Rec,Rnum,0); END; Procedure NextSSname; VAR a,n,i: INTEGER; Name: STRING; Function ValidDB(H: HANDLE):BOOLEAN; VAR n,c,r: INTEGER; BEGIN ValidDB:=FALSE; GetWSRowColumnCount(H,r,c); FOR n:=1 to r DO IF NOT ValidDB & IsWSDatabaseRow(H,n) THEN ValidDB:=TRUE; END; BEGIN i:=0; Name:='Finding Worksheets: '; Message(name); For n:=1 to NameNum DO BEGIN IF NOT (NameList(n)='') THEN BEGIN H:=GetObject(NameList(n)); IF (H<>NIL)&(GetType(H)=18) & ValidDB(H) THEN BEGIN i:=i+1; rec[i]:=NameList(n); END; END; END; Dnum:=i; SortArray(Rec,Dnum,0); END; Procedure DefD1; VAR rfFont: STRING; rfTextSize:INTEGER; BEGIN sw:=375; sh:=350; BeginDialog(1,1,50,50,50+sw,50+sh); AddButton('OK',1,1,SW-80, SH-30,SW-20,SH-10); AddButton('Cancel',2,1,SW-170, SH-30,SW-100,SH-10); SetTitle(Concat('RECORD-FIELD ¥ Edit v',Ver)); x1:=15; x2:=30; p:=25; r:=35;q:=2; Y1:=15; AddField('DRAWING OBJECT RECORDS:',10,1,x1,Y1,250,Y1+15); Name:=Concat('CREATE : "', AllSSname,'" Worksheet '); Y1:=Y1+p; AddField(Name, 3,2,x2,Y1,SW-20,Y1+15); Y1:=Y1+p; AddField(Concat('INSERT: "', AllSSname,'" Data'), 4,q,x2,Y1,SW-20,Y1+15); Y1:=Y1+p; AddField(Concat(' FIND: "', AllSSname,'" Object'), 5,q,x2,Y1,SW-20,Y1+15); Y1:=Y1+r; AddField('DATABASE WORKSHEETS:',11,1,x1,Y1,SW-20,Y1+15); Y1:=Y1+p; AddField('RECALCULATE: Worksheets', 9,q,x2,Y1,SW-20,Y1+15); Y1:=Y1+r; AddField('SYMBOL LIBRARY RECORDS:',12,1,x1,Y1,SW-20,Y1+15); Y1:=Y1+p; AddField(Concat('CREATE: "',SLss,'" Worksheet'), 6,q,x2,Y1,SW-20,Y1+15); Y1:=Y1+p; AddField(Concat('INSERT: "',SLss,'" Data'), 7,q,x2,Y1,SW-20,Y1+15); EndDialog; Done:=FALSE; GetDialog(1); n:=15; REPEAT DialogEvent(n); IF n>0 THEN BEGIN IF n<10 THEN Done:=TRUE; IF n=16 THEN BEGIN IF ItemSel(16) THEN SetItem(16,FALSE) ELSE SetItem(16,TRUE); END; END; UNTIL Done; ClrDialog; IF n=2 THEN Done:=FALSE; END; Procedure NewWS; BEGIN Rn:=Maxrows; Rt:=Maxcols; NewSprdSheet(Wname,10,10,Rn,Rt,FALSE,TRUE); ssH:=LNewObj; END; Procedure VerWS; BEGIN ssH:=GetObject(Wname); IF ssH<>NIL THEN BEGIN CloseSS(ssh); DelObject(ssH); NewWS; END ELSE NewWS; END; Procedure WSsize; VAR i,j,n,r,c:INTEGER; Lname,Rname:STRING; H:HANDLE; BEGIN maxcols:=0; maxrows:=8; FOR i:=1 TO Rnum DO BEGIN H:=GetObject(Rec[i]); c:=NumFields(H)+2; IF maxcols0 THEN maxrows:=maxrows+2+ j; END; ssh:=GetObject(Wname); IF ssh<>NIL THEN DelObject(ssh); NewWS; END; Procedure DefDr(Rtot: INTEGER; Title: STRING; VAR Xtot: INTEGER); VAR sw,sh,n,i,a,b: INTEGER; Name: STRING; BEGIN GetScreen(sw,sh,a,b); sw:=320; sh:= Rtot*15+90; IF sh>(b-200) THEN Sh:=b-200; BeginDialog(1,1,50,50,50+sw,50+sh); SetTitle(Title); AddButton('ALL',1,1,SW-50, SH-25,SW-10,SH-5); AddButton('Any',3,1,SW-125, SH-25,SW-60,SH-5); AddButton('Cancel',2,1,SW-200, SH-25,SW-135,SH-5); AddChoiceItem('Choice Item',11,2,10,3,sw-10,SH-40); EndDialog; SortArray(Rec,Rtot,0); GetDialog(1); FOR i:=1 TO RTot DO InsertChoice(11,i,Rec[i]); SelChoice(11,Rtot,False); REPEAT DialogEvent(i); UNTIL (i>0)&(i<4); Done:=FALSE; IF (i=1)|(i=3) THEN BEGIN rtot:=0; n:=0; Done:=TRUE; IF i=1 THEN All:=TRUE ELSE All:=FALSE; REPEAT GetSelChoice(11,n+1,n,Name); IF n>0 THEN BEGIN Rtot:=Rtot+1; Rec[Rtot]:=Name; END; UNTIL (n=-1); END; ClrDialog; Xtot:=Rtot; END; Procedure UpdateDBs; BEGIN NextSSname; IF Dnum>0 THEN DefDr(Dnum, 'Recalculate which Database Worksheets?',Rtot); IF Done THEN FOR n:=1 TO Rtot DO BEGIN Message(n,': ',rec[n]); H:=GetObject(rec[n]); RecalculateWS(H); END; ClrMessage; END; {¥Set LRs} Procedure SetLRs(VAR Lnum,Rnum:INTEGER); VAR Name: STRING; n,i,k,Ltot,Rtot: INTEGER; Procedure ListRRecords; VAR n,i,a: INTEGER; H: HANDLE; BEGIN Rtot:=0; FOR n:=1 TO NameNum DO BEGIN H:=GetObject(NameList(n)); IF (H<>NIL) & (GetType(H)=47) THEN BEGIN Rtot:=Rtot+1; Rec[Rtot]:=NameList(n); END; END; For n:=1 TO Rtot-1 DO BEGIN a:=n; FOR i:=n+1 TO Rtot DO IF Rec[i]n THEN BEGIN Name:=Rec[n]; Rec[n]:=Rec[a]; Rec[a]:=Name; END; END; END; Procedure DefD; VAR sw,sh,a,b,c,Tot: INTEGER; BEGIN GetScreen(sw,sh,a,b); IF NumLayers>Rtot THEN Tot:=NumLayers ELSE Tot:=Rtot; sw:=560; sh:= Tot*15+90; IF sh>(b-200) THEN Sh:=b-200; BeginDialog(1,1,50,50,50+sw,50+sh); SetTitle('Search Selected Layers For Selected Records'); AddButton('OK',1,1,SW-50, SH-25,SW-10,SH-5); AddButton('Cancel',2,1,SW-125, SH-25,SW-60,SH-5); a:=10; b:=65; c:=5; AddButton('All ON',3,1,a,Sh-25,a+b,Sh-5); a:=a+b+c; AddButton('Visible',4,1,a,Sh-25,a+b,Sh-5); a:=a+b+c; a:=sw/2+10; AddButton('All ON',5,1,a,Sh-25,a+b,Sh-5); a:=a+b+c; AddButton('All OFF',6,1,a,Sh-25,a+b,Sh-5); a:=a+b+c; a:=3; b:=10; AddField('Choose Layers to search:',10,1,b,a,b+200,a+15); AddChoiceItem('Choice Item',11,2,b,a+25,sw/2-10,SH-40); b:=sw/2; AddField('Choose Records to list:',20,1,b,a,b+200,a+15); AddChoiceItem('Choice Item',21,2,b,a+25,sw-10,SH-40); EndDialog; END; Procedure ProcessDiag; BEGIN n:=0; REPEAT IF n=0 THEN GetSelChoice(11,0,n,Name) ELSE GetSelChoice(11,n+1,n,Name); IF n>0 THEN BEGIN Lnum:=Lnum+1; Layn[Lnum]:=Name; END; UNTIL (n=-1); REPEAT GetSelChoice(21,n+1,n,Name); IF n>0 THEN BEGIN Rnum:=Rnum+1; Rec[Rnum]:=Name; END; UNTIL (n=-1); END; Procedure RunD; VAR H: HANDLE; Lname: STRING; BEGIN GetDialog(1); H:=LLayer; LTot:=NumLayers; FOR i:=1 TO LTot DO BEGIN InsertChoice(11,i,GetLname(H)); H:=PrevLayer(H); END; FOR n:=1 TO Rtot DO InsertChoice(21,Rtot,Rec[n]); SelChoice(11,Ltot,False); SelChoice(21,Rtot,False); REPEAT DialogEvent(i); Case i of 3: For n:=1 TO Ltot Do SelChoice(11,n,TRUE); 4: For n:=1 TO Ltot Do BEGIN GetChoiceStr(11,n-1,Lname); IF GetLVis(GetLayerByName(Lname))=0 THEN SelChoice(11,n,TRUE) ELSE SelChoice(11,n,FALSE); END; 5: For n:=1 TO Rtot Do SelChoice(21,n,TRUE); 6: For n:=1 TO Rtot Do SelChoice(21,n,FALSE); END; UNTIL (i>0)&(i<3); Rnum:=0; Lnum:=0; IF i=1 THEN ProcessDiag; ClrDialog; END; BEGIN ListRRecords; DefD; i:=0; WHILE (i<2) & ((Lnum=0)|(Rnum=0)) DO BEGIN IF i=1 THEN AlrtDialog('Error: At least 1 layer & 1 record must be selected!'); RunD; END; END; {¥Draw Recs WS} Procedure RFdWsheet; VAR Lname: STRING; Procedure FnameHeader(Lname:STRING); BEGIN q:=r; TextFace([Bold]); SprdBorder(FALSE,FALSE,FALSE,FALSE); IF Lname<>'' THEN BEGIN LoadCell(r,1,Concat('>>',Rname,' --- ',Lname)); r:=r+1; TextFace([]); TextFace([Underline]); Coln[1]:=Len(Lname); END; LoadCell(r,1,'Symbol Name'); For n:=2 to m+1 DO BEGIN Name:=GetFldName(RH,n-1); LoadCell(r,n,Name); Coln[n]:=Len(Name); END; For n:=m+2 to Rt-1 DO LoadCell(r,n,''); LoadCell(r,rt,'ID rfedit'); TextFace([]); SprdBorder(FALSE,FALSE,FALSE,FALSE); END; Procedure WriteFields(Ha: HANDLE); VAR Ch: STRING; BEGIN IF DONE THEN BEGIN thetext:=GetRField(Ha,RName,Fname); IF NOT (Copy(Fvalue,Len(thetext),1)=' ') THEN thetext:=Concat(thetext,' '); LoadCell(r,n,thetext); IF Len(thetext)>Coln[n] THEN Coln[n]:=Len(thetext); END; IF FndError then Alrtdialog(Fname); END; Procedure NSSRecord (Ha: Handle); VAR Xname,SerName: STRING; BEGIN IF Done & Keydown(y) &(y=113) THEN Done:=FALSE; IF NOT Done THEN Message('aborting') ELSE BEGIN H:=Ha; r:=r+1; Message('"q" to abort. ',r,':', Rn,' ',Rname,' ',r-q,':',c); IF (GetType(Ha)=15) THEN BEGIN Xname:=GetSymName(Ha); LoadCell(r,1, Xname); IF Len(Xname)>Coln[1] THEN Coln[1]:=Len(Xname); END; {Wname:=Concat(CHR(39),Rname,CHR(39),'.',CHR(39));} FOR n:=2 TO m+1 DO BEGIN Fname:=GetFldName(RH,n-1); WriteFields(Ha); END; END; SetRecord(Ha,'ID rfedit'); SetRField(Ha,'ID rfedit','Ser No.',Concat(r,' ',Lname)); SerName:=Concat(r,' ',Lname); LoadCell(r,rt,SerName); IF Done THEN FOR n:=n+1 TO (Rt-1) DO LoadCell(r,n,''); END; Function RCount(H:HANDLE):BOOLEAN; BEGIN IF Eval(H,R IN [Rname])=1 THEN r:=r+1; END; Procedure NewWsheet; VAR HL:HANDLE; Ln: INTEGER; BEGIN IDRecord; SelectSS(ssh); TextSize(10); SprdAlign(2); TextFace([]); TName:= '##'; LoadCell(2,1,' *UPDATE this worksheet (with "RFedit" Command) to insure that data listed below is current.'); TextFace([Bold]); LoadCell(3,1,' *Record Name --- Layer Name'); TextFace([]); LoadCell(4,1,' *Symbol Name'); LoadCell(4,2,' *Field Names -->'); FOR q:=3 TO MaxCols DO LoadCell(4,q,''); r:=4; Message('Hold Down "q" key to abort.'); Wait(1); For k:=1 to Rnum DO IF NOT (Rec[k]='') THEN BEGIN Rname:=Rec[k]; RH:=GetObject(Rname); m:=NumFields(RH); r:=r+1; c:=r; Tname:=Copy(Rname,1,3); FOR Ln:=1 to Lnum DO BEGIN Lname:=Layn[Ln]; IF Count((L=Lname)&(R IN [Rname]))>0 THEN BEGIN r:=r+1; FnameHeader(Lname); ForEachObject(NSSRecord,(L=Lname)&(R IN [Rname])); END; END; END; IF Done THEN FOR r:= r+1 TO Rn DO BEGIN Message('Clearing extra rows ',r,':',Rn); FOR n:=1 TO Rt DO BEGIN { IF Coln[n]>5 THEN Coln[n]:=5+(Coln[n]-5)*.6;} SprdWidth(Coln[n]); LoadCell(r,n,''); END; END; ClrMessage; END; BEGIN SetCursor(ArrowC); Message('Finding Records'); SetLRs(Lnum,Rnum); IF (Lnum>0)&(Rnum>0) THEN BEGIN Wname:=ALLSSname; IF Done THEN BEGIN WSsize; IF Done THEN NewWsheet; END; END; END; {¥Draw Recs Insert} Procedure RFdInsert; Procedure LoadFields(H:HANDLE); Procedure Gvalue; BEGIN c:=Len(Fvalue); While (c>0) & (Copy(Fvalue,c,1)=' ') DO c:=c-1; IF c=0 THEN Fvalue:='' ELSE Fvalue:=Copy(Fvalue,1,c); END; BEGIN For n:=1 TO m DO BEGIN FName:= GetFldname(Hr,n); Fvalue:=GetCellStr(ssh,r,n+1); IF NOT (Fvalue='') THEN Gvalue; SetRField(H, Rname, Fname, Fvalue); END; END; Procedure InsertRecs; BEGIN SprdSize(ssh,maxrows,rt); r:=5; WHILE NOT(r>maxrows) DO BEGIN Name:=GetCellStr(ssh,r,1); Cancel:=False; IF (Copy(Name,1,2)='>>') THEN BEGIN m:=Pos(' --- ',Name); Rname:=Copy(Name,1,m-1); Delete(RName,1,2); Hr:=GetObject(Rname); m:=NumFields(Hr); a:=r; END ELSE BEGIN IF NOT (GetCellStr(ssh,r,rt)='') THEN BEGIN Name:=GetCellStr(ssh,r,rt); ForEachObject(LoadFields,('ID rfedit'.'Ser No.'=Name)); END; END; r:=r+1; Message(r,':',maxrows,' ',Rname); END; END; BEGIN Wname:=AllSSname; ssh:=GetObject(Wname); IF ssh=NIL THEN BEGIN AlrtDialog(Concat('"',AllSSname,'" not found. Run RFedit to Create "',AllSSname,'" worksheet.')); Done:=FALSE; END; Done:=YNDialog('Confirm: Insert Spreadsheet values into Drawing Records?'); IF Done THEN BEGIN Dsave:=TRUE; InsertRecs; END; IF Done THEN UpdateDBs; END; {¥Draw Recs Find} Procedure RFdFind; Procedure VerRowNum; BEGIN p:=0; IF NOT (k>5) THEN Done:=FALSE; IF CellHasNum(ssh,k,1) THEN p:=GetCellNum(ssh,k,1); IF NOT (k>p) THEN Done:=FALSE; IF NOT DONE THEN Message('"Row Number" not Valid.'); END; Procedure DrawRect; VAR Done: BOOLEAN; a1,a2,b1,b2: REAL; BEGIN CloseSS(ssh); Hs:=GetLayer(Hn); DName:=GetLName(Hs); Layer(Dname); DselectALL; GetBBox(Hn,a1,b1,a2,b2); FillPat(0);PenSize(10);PenFore(65535,0,0); n:=0; H:=GetObject('rffbbox'); IF H<>NIL THEN DelObject(H); NameObject('rffbbox'); Rect(a1,b1,a2,b2); DoMenuTextByName('Normal Scale',0); Message('Found Row#=',k,' ',Rname); END; Procedure SelH(H:HANDLE); BEGIN SetSelect(H); Hn:=H; END; Procedure Locate; Function gsize(H:HANDLE): BOOLEAN; VAR a,b,c,d: REAL; BEGIN IF GetRField(H,'ID rfedit','Ser No.')=Tname THEN BEGIN GetBBox(H,a,b,c,d); Rect(a,b,c,d); Redraw; DoMenuTextByName('Fit To Objects',0); Redraw; DelObject(LNewObj); SetSelect(H); END; END; BEGIN DSelectAll; PushAttrs; FillPat(0); PenBack(65535,0,0); PenSize(6); Layer(Name); SetLayerOptions(1); DSelectAll; ForEachObjectInLayer(gsize,1,2,0); PopAttrs; END; BEGIN Wname:=AllSSname; ssH:=GetObject(Wname); IF ssH<>NIL THEN Done:=TRUE ELSE BEGIN Done:=FALSE; AlrtDialog(Concat('"',AllSSname,'" Not Found. Rerun "RFedit" to create new "',AllSSname,'" Worksheet.')); END; IF Done THEN BEGIN SelectSS(ssH); k:=IntDialog(Concat('To Find Object: Enter "', AllSSname,'" Worksheet Row Number.'),'0'); n:=0; IF k=0 THEN Done:=FALSE; CloseSS(ssh); END; IF Done THEN BEGIN SprdSize(ssh,maxrows,maxcols); FOR n:=1 to maxcols DO if GetCellStr(ssh,7,n)='ID rfedit' THEN c:=n; Tname:=GetCellStr(ssh,k,c); Name:=Tname; IF (Pos(' ',Name)>0) THEN Delete(Name,1,Pos(' ',Name)); IF GetLayerByName(Name)<>NIL THEN Locate; END; END; {¥ SymLib WS} Procedure RFsWsheet; Procedure WriteWsheet(SymName: STRING); VAR New, bord: BOOLEAN; k:INTEGER; Procedure Wfields; BEGIN IF New THEN BEGIN r:=r+1;TextSize(12); TextFace([Bold]); SprdBorder(True,False,False,False); LoadCell(r,1,SymName); New:=FALSE; For k:=2 TO maxcols DO LoadCell(r,k,''); END; SprdBorder(False,False,False,False); r:=r+1; TextSize(10); TextFace([]); LoadCell(r,1,Rname); IF Len(Rname)>Coln[1] THEN Coln[1]:=Len(Rname); TextFace([Underline]); For n:=1 TO NumFields(Hr) Do BEGIN Fname:=GetFldName(Hr,n); Fvalue:=GetRField(Hs,Rname,Fname); TextSize(9); TextFace([Underline]); LoadCell(r,1+n,Fname); TextSize(10); TextFace([]); LoadCell(r+1,1+n,Fvalue); IF Len(Fname)>Coln[n+1] THEN Coln[n+1]:=Len(Fname); IF Len(Fvalue)>Coln[n+1] THEN Coln[n+1]:=Len(Fvalue); END; r:=r+1; END; BEGIN New:=TRUE; For p:=1 TO Rtot DO BEGIN Rname:=Rec[p]; Hr:=GetObject(Rname); IF Eval(Hs,R IN [Rname])=1 THEN Wfields; END; IF NOT New THEN BEGIN TextSize(10); TextFace([]); SprdBorder(False,False,True,False); END; END; Procedure NSym; VAR n: INTEGER; Name: STRING; BEGIN FOR n:=1 TO Stot Do BEGIN Name:=Symn[n]; Hs:=GetObject(Name); q:=q+1; Message(q,':',Stot,' ',Name); IF NumRecords(Hs)>0 THEN WriteWsheet(Name); END; END; Procedure WriteSlist; VAR n,i,a,Snum: INTEGER; Rname: STRING; BEGIN Snum:=0; r:=0; FOR n:=1 to Stot DO BEGIN H:=GetObject(Symn[n]); i:=0; IF NumRecords(H)>0 THEN FOR a:=1 TO Rtot DO BEGIN Rname:=Rec[a]; IF (Eval(H,R IN [Rname])=1) THEN i:=i+1; END; IF (NOT All & (i>0)) | (All & (i=Rtot)) THEN BEGIN Snum:=Snum+1; Symn[Snum]:=Symn[n]; r:=r+1 +2*i; END; END; Stot:=Snum; END; BEGIN VerSRecords(Rtot,Stot); {get recs & syns in library} IF Rtot>0 THEN Done:=TRUE ELSE BEGIN Done:=FALSE; Sysbeep; AlrtDialog('No Library Symbols with Records found!'); END; IF Done THEN DefDr(Rtot,'List Symbols with Records',Rtot); IF Done THEN BEGIN maxcols:=0; FOR n:=1 TO Rtot DO BEGIN m:=NumFields(GetObject(Rec[n]))+1; IF m>maxcols THEN maxcols:=m; END; WriteSlist; Maxrows:=r+6; Wname:='EDIT¥SymLib Records'; VerWS; SelectSS(ssh); r:=1; SprdAlign(2); q:=0; k:=SymDefNum; SprdBorder(False,False,True,False); TextSize(10); TextFace([]); For n:=1 TO MaxCols DO BEGIN IF n=1 THEN Name:='Symbol / Record' ELSE IF n=2 THEN Name:='Field Name / Field Value ---->' ELSE Name:=''; LoadCell(r,n,Name); END; NSym; For n:=1 TO MaxCols DO BEGIN IF Coln[n]>12 THEN Coln[n]:=.6*Coln[n]; SprdWidth(Coln[n]); LoadCell(r+1,n,''); END; END; END; {¥SymLib Recs Insrt} Procedure RFsInsert; VAR Sname: STRING; Procedure VerSWsheet; BEGIN Wname:=SLss; ssH:=GetObject(Wname); IF ssH=NIL THEN BEGIN Done:=FALSE; AlrtDialog(Concat('NO "',Wname,'" WorkSheet in file. Rerun command to create "',Wname,'" worksheet')); END ELSE BEGIN Sprdsize(ssh,Rn,Rt); END; END; Procedure UpateSymRs (Ha: Handle); BEGIN SetRField(Ha,Rname,Fname,Fvalue); END; Procedure InsertFields; BEGIN For c:=2 TO Rt DO BEGIN IF CellHasStr(ssh,r,c) THEN BEGIN Message(Dname,' ',c); Fname:=GetCellStr(ssh,r,c); Fvalue:=GetCellStr(ssH, r+1, c); SetRField(Hs,Rname,Fname,Fvalue); IF Done & NOT(Fvalue='') THEN ForEachObject(UpateSymRs,(S=SName)); END; END; END; Procedure InsertSymData; BEGIN Name:=GetCellStr(ssh,r,1); H:=GetObject(Name); IF H<>NIL THEN BEGIN IF GetType(H)=16 THEN BEGIN Hs:=H; Dname:=Concat(r,':',Rn,' ',Name); SName:=Name; END ELSE IF GetType(H)=47 THEN BEGIN RH:=H; Rname:=Name; n:=r; IF Eval(Hs,R IN [Rname])=1 THEN InsertFields; END; END; Done:=TRUE; END; BEGIN Done:=TRUE; VerSWsheet; IF Done THEN Done:=YNDialog(Concat('Confirm: Insert "',Wname,'" data into Symbol Library symbols?')); IF Done THEN BEGIN Done:=YNDialog('Also Update existing Symbol Records in Drawing?'); Dsave:=TRUE; FOR r:=1 TO Rn DO BEGIN IF CellHasStr(ssh,r,1) THEN InsertSymData; END; END; IF Done THEN UpdateDBs; ClrMessage; END; BEGIN ClrMessage; SetCursor(ArrowC); DefD1; IF Done THEN BEGIN DselectAll; subp:=n; PushAttrs; TextSize(10); Dsave:=FALSE; IF subp=3 THEN RFdWsheet; IF subp=4 THEN RFdInsert; IF subp=5 THEN RFdFind; IF subp=6 THEN RFsWsheet; IF subp=7 THEN RFsInsert; IF subp=9 THEN UpdateDBs; PopAttrs; ClrMessage; END; ClrMessage; END; Run(RFedit);