Разработка программного обеспечения
Рефераты >> Программирование и компьютеры >> Разработка программного обеспечения

ENDIF

EXIT

ELSE

gabar[1]=0

gabar[2]=0

gabar[3]=0

hcomp:=0

dat:=POISK(st0) //поиск данных о новом элементе и занесение его

// в базу

IF VALTYPE(dat)<>'C'

APPEND BLANK

REPLACE NAME WITH st0

REPLACE SHIR WITH gabar[1]/koef

REPLACE DLIN WITH gabar[2]/koef

REPLACE VIS WITH hcomp/koef

REPLACE X WITH dat[1]/koef

REPLACE Y WITH dat[2]/koef

gabar[1]:=SHIR*koef

gabar[2]:=DLIN*koef

IF compon[nn,3]=0

compon[nn,3]=Vis*koef

ENDIF

ELSE

EXIT

ENDIF

ENDIF

ENDDO

ROT(X*koef,Y*koef,gabar[1],gabar[2],nn)

RETURN gabar

//****************************************************

FUNCTION ROT(a,b,shc,dlc,L) //функция учитывающая поворот эле мента относительно оси и произво дящая соответствующий пересчет его координат

IF compon[L,6]=0 //учет поворота элемента

IF compon[L,2]='bot'

compon[L,4]=compon[L,4]+shc-a

compon[L,5]=compon[L,5]-b

ELSE

compon[L,4]=compon[L,4]+a

compon[L,5]=compon[L,5]-b

ENDIF

compon[L,7]=shc

compon[L,8]=dlc

ELSEIF compon[L,6]=1

IF compon[L,2]='bot'

compon[L,4]=compon[L,4]+b

compon[L,5]=compon[L,5]-a

ELSE

compon[L,4]=compon[L,4]+b

compon[L,5]=compon[L,5]+a-shc

ENDIF

compon[L,7]=dlc

compon[L,8]=shc

ELSEIF compon[L,6]=2

IF compon[L,2]='bot'

compon[L,4]=compon[L,4]+a

compon[L,5]=compon[L,5]+b-dlc

ELSE

compon[L,4]=compon[L,4]-a+shc

compon[L,5]=compon[L,5]+b-dlc

ENDIF

compon[L,7]=shc

compon[L,8]=dlc

ELSEIF compon[L,6]=3

IF compon[L,2]='bot'

compon[L,4]=compon[L,4]-b+dlc

compon[L,5]=compon[L,5]+a-shc

ELSE

compon[L,4]=compon[L,4]-b+dlc

compon[L,5]=compon[L,5]-a

ENDIF

compon[L,7]=dlc

compon[L,8]=shc

ENDIF

RETURN

//****************************************************

//Функция которая последовательно считывает pdf- файл кусками по 65000 байт (т.е. после анализа 1-го куска в 65000 байт считывается следующий и т.д.

FUNCTION READF() //чтение куска файла 65000 с текущей позиции

PRIVATE bait:=CHR(10),seek,contr,sost:=' ',buf

bufer=SPACE(65001)

contr:=FREAD(desc,@bufer,65000)

IF contr<65000

sost='end'

IF lastseek<65000

PROCENT()

ENDIF

ELSE

sost='noend'

buf=RIGHT(bufer,1000)

seek=64000+RAT(bait,buf)

bufer:=LEFT(bufer,seek)

lastseek:=FSEEK(desc,-(65000-seek),1)

PROCENT()

ENDIF

RETURN sost

//****************************************************

//Функция построчно анализирующая pdf- файл и берущая из него по определенным критериям названия и координаиы элементов

FUNCTION SEAR()

PRIVATE filesost,c1,c2,c3,c4,namecomp,ends:=0

@ 5,0 SAY 'Анализ файла:'

SETPOS(8,0)

FOR contin:=1 TO 2 //пойск контура платы

contin=2

filesost=READF() //загрузить первые 65000 pdf- файла

IF AT('COMP_DEF ',bufer)<>0

ends=1

ENDIF

c0=AT('{ANNOTATE',bufer)

IF c0<>0

bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-(c0+5)))

FOR kol=1 TO 2 //поиск между ANNOTATE и COMP_DEF

kol=2

c0=AT('[Ly "KONTUR"]',bufer)

IF c0<>0

bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-(c0+5)))

FOR kol1=1 TO 2

kol1=2

c0:=AT('{R ',bufer)

ver:=AT('[Ly "',bufer)

IF ver=0

ver:=66000

ENDIF

IF c0=0

IF AT('COMP_DEF ',bufer)<>0

ends=1

ELSEIF AT('Ly "',bufer)<>0

ends=1

ELSE

IF filesost<>'end'

filesost=READF()

kol1=1

ENDIF

ENDIF

ELSEIF c0>ver

ends=1

ELSE

kont=ALLTRIM(STROKA(c0+3))

ends=1

verkont=1 //переменная наличия контура

DISPOUT('Найден контур платы','b/gb')

koll:=SKONT(kont)

FOR kk:=1 TO LEN(koll)

AADD(kontur,({nil}))

kontur[kk]=koll[kk]

NEXT

ENDIF

NEXT

ELSE

c1=AT('{COMP_DEF ',bufer)

IF c1<>0

ends=1

ELSEIF ends=1

ends=1

ELSE

IF filesost<>'end'

filesost=READF()

kol=1

ENDIF

ENDIF

ENDIF

NEXT

ENDIF

IF filesost='end'

IF AT('{COMP_DEF ',bufer)=0

ends=1

ENDIF

ELSEIF ends=0

contin=1

ENDIF

NEXT

IF verkont=0

DISPOUT('Контур платы не обнаружен','r/gb')

ENDIF

private endc2,contin,powtor,slovo

namecomp:='not found'

c1=AT('{COMP_DEF ',bufer)

IF c1<>0 //поиск имени prt в bufer

slovo:=STROKA(c1)

namecomp=ALLTRIM(SUBSTR(slovo,11,15))

bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-(c1+11)))

ENDIF

FOR contin:=1 TO 2

IF SHELK()=1

FINDCOMP()

ENDIF

c1=AT('{COMP_DEF ',bufer)

IF c1<>0 //поиск имени prt в оставшемся buferе

slovo=STROKA(c1)

namecomp=ALLTRIM(SUBSTR(slovo,11,15))

bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-(c1+10)))

contin=1

ELSE

IF filesost<>'end'

filesost=READF()

contin=1

ELSE

contin=2

ENDIF

ENDIF

NEXT

PROCENT()

setpos(maxrow(),20)

dispout('OK. Анализ файла завершен.','g+/gb')

inkey(3)

tmz:=INSERTCOMP()

RETURN tmz

//****************************************************

FUNCTION STROKA(nomer) //выдел.подстроки из переменной //bufer,с указанной позиции (nomer)

PRIVATE txt,pos //до конца строки (символа CHR10)

txt:=RIGHT(bufer,LEN(bufer)+1-nomer)

pos=AT(CHR(10),txt)

txt=ALLTRIM(LEFT(txt,pos-2))

RETURN txt

//****************************************************

FUNCTION PROCENT() //функция построения процентной линии

PRIVATE laststr,laststolb

laststr:=ROW()

laststolb:=COL()

pnow=pnow+1

oldcol:=SETCOLOR()

IF pnow=1

str:=5

stolb:=15

parts:=ROUND(filelen/65000,0)

IF parts<2

parts=parts+1

ENDIF

procen:=ROUND(90/parts,0)

znak:=ROUND(45/parts,0)

stcolor:=setcolor('R+/gb')

mstolb:=stolb+49

WHILE stolb<mstolb

SETPOS(str,stolb)

??'|'

stolb=stolb+5

ENDDO

SETPOS(str,mstolb)

??'|'

stolb=15

setcolor(stcolor)

ENDIF

IF pnow=parts

znak:=60-stolb

ENDIF

IF pnow-1=parts

znak:=5

filelen=65000

pnow=0

ENDIF

SETPOS(str,stolb)

FOR k:=1 TO znak

IF stolb>65

EXIT

ENDIF

SETCOLOR('b/gb')

??'--'

stolb=stolb+1

SETPOS(4,57)

SETCOLOR('B/gb')

??((stolb-15)*2)

??'% '

SETPOS(str,stolb)

NEXT

SETPOS(laststr,laststolb)

SETCOLOR(oldcol)

RETURN

//****************************************************

FUNCTION SKONT(st0) //выделение координат контура (если он //обнаружен)

PRIVATE rez[0]

nom:=0

FOR k=1 to 2

p1:=AT(' ',st0)

IF p1=0

p1=AT('}',st0)


Страница: