home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
SORTINST.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
8KB
|
253 lines
PROCEDURE SortEnumerate;
LABEL 1,2,3,4,5,6;
CONST
{** DATA LABEL RECORD & FIELD NAMES }
kRec ='Instruments';
kFld = 'Unit Number';
kDLinkRec ='Links';
kDLinkID ='Linked to';
kDLinkFldName ='Item';
{** OTHER LOCAL CONSTANTS }
kValidCoord = 25000000;
VAR
finished,cncl,allsel,flag,doUpdate : BOOLEAN;
item,x1,x2,count,sfield,numsel,c1,numfield,objtype : INTEGER;
prefix,suffix,stringnum,seqEntry,ln,it,n,startNumTxt,increTxt : STRING;
startnum,incre : REAL;
decimalPlaces : INTEGER;
xMin,xCurrent,xc,yc,yMin,yCurrent : REAL;
j,k,numObjects : REAL;
objName,currentNumTxt,saveString,dbRef : STRING;
objectHan,saveHan,upDateHan : HANDLE;
{** GetUnits Placeholder Variables }
Frac,DisAcc : LONGINT;
Format : INTEGER;
UPI : REAL;
UMark,SqUMark : STRING;
PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
VAR
scrX1,scrY1,scrX2,scrY2,w : INTEGER;
BEGIN
GetScreen(scrX1,scrY1,scrX2,scrY2);
w := dX2 - dX1;
x1 := ((scrX1 + scrX2) DIV 2) - (w DIV 2);
x2 := x1 + w;
END;
{**PROCEDURE updateText(updateHan : HANDLE); }
{**BEGIN }
{** SETTEXT(updateHan,CONCAT(prefix,currentNumTxt,suffix)); }
{**END; }
BEGIN
CenterDialog(0,320,x1,x2);
BeginDialog(1,1,x1,30,x2,360);
AddButton('OK',1,1,222,294,286,317);
AddButton('Cancel',2,1,133,294,197,317);
AddField('___________________',3,1,76,14,243,32);
AddField('________________________________',4,1,23,170,298,188);
AddField('Sort/Enumerate Dialog',5,1,76,6,244,24);
AddField('Start Value:',6,1,139,43,223,60);
AddField('Increment:',7,1,143,77,223,94);
AddField('Prefix:',8,1,174,111,223,128);
AddField('Suffix:',9,1,175,145,223,162);
AddField(' ',10,2,227,43,280,60);
AddField(' ',11,2,227,77,280,94);
AddField('',12,2,227,111,280,128);
AddField('',13,2,227,145,280,162);
AddButton('Sort T to B',14,3,19,42,115,59);
AddButton('Sort B to T',15,3,19,76,115,93);
AddButton('Sort L to R',16,3,19,110,115,127);
AddButton('Sort R to L',17,3,19,144,115,161);
{** AddButton('Update Unit Number data labels.', 18,2,20,194,252,214); }
AddField('NOTE: Special version. Non╨data label symbols will be deselected.',19,1,20,233,300,283);
EndDialog;
GetDialog(1);
SelField(10);
{** SetItem(18,TRUE); }
finished := FALSE;
cncl:= FALSE;
sfield := 0;
REPEAT DialogEvent(item);
IF item > 2 THEN BEGIN
IF (item > 13) AND (item < 18) THEN BEGIN
IF sfield <> 0 THEN SetItem(sfield,FALSE);
SetItem(item,TRUE);
sfield := item;
END;
{** IF item = 18 THEN SETITEM(item,NOT(itemSel(item))); }
END
ELSE BEGIN
IF item = 2 THEN BEGIN
finished := TRUE;
cncl := TRUE;
GOTO 5;
END;
IF item = 1 THEN BEGIN
IF sfield = 0 THEN BEGIN
SYSBEEP;
GOTO 5;
END;
IF Getfield(10) = ' ' THEN BEGIN
SYSBEEP;
SelField(10);
GOTO 5;
END;
IF Getfield(11) = ' ' THEN BEGIN
SYSBEEP;
SelField(11);
GOTO 5;
END;
IF NOT ValidNumStr(Getfield(10),startnum) THEN BEGIN
SYSBEEP;
SelField(10);
END;
IF NOT ValidNumStr(Getfield(11),incre) THEN BEGIN
SYSBEEP;
SelField(11);
END
ELSE finished := TRUE;
END;
5:END;
UNTIL finished;
sfield:=sfield - 13;
{**doUpdate:= ItemSel(18);}
startNumTxt:= GetField(10);
increTxt:= GetField(11);
prefix:= GetField(12);
suffix:= GetField(13);
CLRDIALOG;
IF cncl THEN GOTO 6;
{** Determine greatest decimal places for string increment }
decimalPlaces:=POS('.',startNumTxt);
IF decimalPlaces <> 0 THEN decimalPlaces:= (LEN(startNumTxt))-decimalPlaces;
x2:=POS('.',increTxt);
IF x2 <> 0 THEN x2:= (LEN(increTxt))-x2;
IF x2>decimalPlaces THEN decimalPlaces:=x2;
{**************************************************}
SETCURSOR(WATCHC);
currentNumTxt:= startNumTxt;
IF len(currentNumTxt) = 1 THEN currentNumTxt:= CONCAT(' ',currentNumTxt);
DSelectObj(NOT((T=Symbol) & (R IN [kRec])));
{** Someday this will be easier }
numObjects:= 0;
objectHan:=FSACTLAYER;
WHILE objectHan <> NIL DO BEGIN
numObjects:= numObjects + 1;
objectHan:= NEXTSOBJ(objectHan);
END;
GETUNITS(Frac,DisAcc,Format,UPI,UMark,SqUMark);
IF sField = 1 THEN BEGIN
yCurrent:= kValidCoord/UPI;
FOR k:= 1 TO numObjects DO BEGIN
yMin:= -kValidCoord/UPI;
objectHan:=FSACTLAYER;
objName:= GETNAME(objectHan);
WHILE objectHan <> NIL DO BEGIN
HCENTER(objectHan,xc,yc);
IF (yc >= yCurrent) THEN GOTO 1;
IF (yc <= yMin) THEN GOTO 1;
yMin:= yc;
objName:= GETNAME(objectHan);
1:objectHan:=NEXTSOBJ(objectHan);
END;
saveHan:= GETOBJECT(objName);
SETRFIELD(saveHan,kRec,kFld,CONCAT(prefix,currentNumTxt,suffix));
{** IF doUpdate THEN BEGIN }
{** DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')'); }
{** FOREACHOBJECT(updateText,(('Links'.'Linked To' = GETNAME(saveHan))&('Links'.'Item' = kFld)); }
{** END; }
currentNumTxt:= NUM2STR(decimalPlaces,(str2Num(currentNumTxt) + str2Num(increTxt)));
IF len(currentNumTxt) = 1 THEN currentNumTxt:= CONCAT(' ',currentNumTxt);
yCurrent:= yMin;
END;
END;
IF sField = 2 THEN BEGIN
yCurrent:= -kValidCoord/UPI;
FOR k:= 1 TO numObjects DO BEGIN
yMin:= kValidCoord/UPI;
objectHan:=FSACTLAYER;
objName:= GETNAME(objectHan);
WHILE objectHan <> NIL DO BEGIN
HCENTER(objectHan,xc,yc);
IF (yc <= yCurrent) THEN GOTO 2;
IF (yc >= yMin) THEN GOTO 2;
yMin:= yc;
objName:= GETNAME(objectHan);
2:objectHan:=NEXTSOBJ(objectHan);
END;
saveHan:= GETOBJECT(objName);
SETRFIELD(saveHan,kRec,kFld,CONCAT(prefix,currentNumTxt,suffix));
{** IF doUpdate THEN BEGIN }
{** DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')'); }
{** FOREACHOBJECT(updateText,('Links'.'Linked to' = GETNAME(saveHan)); }
{** END; }
currentNumTxt:= NUM2STR(decimalPlaces,(str2Num(currentNumTxt) + str2Num(increTxt)));
IF len(currentNumTxt) = 1 THEN currentNumTxt:= CONCAT(' ',currentNumTxt);
yCurrent:= yMin;
END;
END;
IF sField = 3 THEN BEGIN
xCurrent:= -kValidCoord/UPI;
FOR k:= 1 TO numObjects DO BEGIN
xMin:= kValidCoord/UPI;
objectHan:=FSACTLAYER;
objName:= GETNAME(objectHan);
WHILE objectHan <> NIL DO BEGIN
HCENTER(objectHan,xc,yc);
IF (xc <= xCurrent) THEN GOTO 3;
IF (xc >= xMin) THEN GOTO 3;
xMin:= xc;
objName:= GETNAME(objectHan);
3:objectHan:=NEXTSOBJ(objectHan);
END;
saveHan:= GETOBJECT(objName);
SETRFIELD(saveHan,kRec,kFld,CONCAT(prefix,currentNumTxt,suffix));
{** IF doUpdate THEN BEGIN }
{** DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')'); }
{** FOREACHOBJECT(updateText,('Links'.'Linked to' = GETNAME(saveHan)); }
{** END; }
currentNumTxt:= NUM2STR(decimalPlaces,(str2Num(currentNumTxt) + str2Num(increTxt)));
IF len(currentNumTxt) = 1 THEN currentNumTxt:= CONCAT(' ',currentNumTxt);
xCurrent:= xMin;
END;
END;
IF sField = 4 THEN BEGIN
xCurrent:= kValidCoord/UPI;
FOR k:= 1 TO numObjects DO BEGIN
xMin:= -kValidCoord/UPI;
objectHan:=FSACTLAYER;
objName:= GETNAME(objectHan);
WHILE objectHan <> NIL DO BEGIN
HCENTER(objectHan,xc,yc);
IF (xc >= xCurrent) THEN GOTO 4;
IF (xc <= xMin) THEN GOTO 4;
xMin:= xc;
objName:= GETNAME(objectHan);
4:objectHan:=NEXTSOBJ(objectHan);
END;
saveHan:= GETOBJECT(objName);
SETRFIELD(saveHan,kRec,kFld,CONCAT(prefix,currentNumTxt,suffix));
{** IF doUpdate THEN BEGIN }
{** DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')'); }
{** FOREACHOBJECT(updateText,('Links'.'Linked to' = '1003'); }
{** END; }
currentNumTxt:= NUM2STR(decimalPlaces,(str2Num(currentNumTxt) + str2Num(increTxt)));
IF len(currentNumTxt) = 1 THEN currentNumTxt:= CONCAT(' ',currentNumTxt);
xCurrent:= xMin;
END;
END;
6:END;
RUN(SortEnumerate);