на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Реферат: Разработка программного обеспечения


Далее вызывается функция, активизирующая главное меню программы, которая, в зависимости от выбранного пункта, передает управление той или иной процедуре:

IF fname<>NIL

 cls

 setboxgrow(3)

 wbox(0)

 set date format 'dd:mm:yyyy'

 //открытие основного окна

 ZAGOL('ОБРАБОТКА PDF-ФАЙЛА '+DTOC(DATE()))

 SETCOLOR('N/G')

 wmenu:=wind(1,2,maxrow()-3,maxcol()-3,'Главное меню',5)

 perv:=1

 SHOWTIME(0,72,'G/G')

 attrtmp:='DEMO '

 higttmp:=30.00

 higtdtmp:=30.00

 exittmp:=' out'

 GL() //выов фкнкции главного меню

 WINCLOSE()

 SETCOLOR(colo)

 cls

ELSE

SETCOLOR(colo)

cls

@ 3,0 SAY 'Не введено имя pdf файла!'

ENDIF

 SETCOLOR(colo)

 DIRCHANGE (tmppat) //возвращает сохраненный текущий каталог

 SETCOLOR('g/n')

 @ MAXROW()-1,15 SAY 'Shurasoft 1997 Mihail & Alexandr Company'

 SETCOLOR(colo) //возвращение текущего цвета при выходе

 ?' '

RETURN

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

FUNCTION GL() //главное меню

 CLEAR GETS

 cglold:=setcolor('n/rg')

 @ 11,5 CLEAR TO maxrow()-2,maxcol()-6

 @ 11,5 TO maxrow()-2,maxcol()-6 DOUBLE

 set cursor off

 set scoreboard off

 readexit(.F.)

 set cursor on

 set date format to 'dd.mm.yyyy'

 setpos(12,(maxcol()/2)-4)

 dispout(' АТРИБУТЫ ','g+/b')

 @ 13,7 say "Имя комплекта................................" color ('W+/rg') get attrtmp color('rg+/rg,n/w')

 @ 14,7 say "Ограничение по высоте сверху в mm............" color ('W+/rg') get higttmp picture '@B 999.99' color('gr+/rg,n/w')

 @ 15,7 say "Ограничение по высоте снизу в mm............." color ('W+/rg') get higtdtmp picture '@B 999.99' color('gr+/rg,n/w')

 setcolor(cglold)

 set cursor off

 mas:={{'Атрибуты', 'Компоновка', 'Выход'},{"Редактирование атрибутов файла", "Скомпоновать файл в формате T-FLEX", "Выход в DOS"}}

 str:=MENU (mas,14,perv)

 perv=str

 str1:=10

 IF str=1 //если выбран пункт АТРИБУТЫ- запустить меню , //позволяющее изменить атрибуты

 set cursor on

 read

 set cursor off

 ELSEIF str=2 //если выбран пункт КОМПОНОВКА- запустить //процедуру анализа pdf- файла

 WSELECT(0)

 SETCOLOR('n/bg')

 PUBLIC pnow:=0,filelen,desc,bufer:=SPACE(65000),compon[0,9],nomcomp:=0

 PUBLIC kontur[0],verkont:=0,parametr

 PUBLIC errfile[0] // массив сообщений об ошибках

 CREATDB()

 wzapis:=wind(2,3,maxrow()-7,maxcol()-6,"Компоновка",5)

 higt:=higttmp

 higtd:=higtdtmp

 attr:=alltrim(attrtmp)

 CONT()

 winclose()

 wselect(wmenu)

 ELSEIF str=0 //если не выбран не один пункт

 perv=4

 ENDIF

 IF str<>3

 wselect(wmenu)

 GL()

 ENDIF

RETURN

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

FUNCTION CONT() //функция анализу\ирующая pdf- файл

 PUBLIC kolkomp,koltop:=0,kolbot:=0,dx,dy //выделенме параметров эле-//ментов

 //dx,dy -поправка на 0

 desc:=FOPEN(fname)

 filelen:=FSEEK(desc,0,2)

 prflen:=filelen

 FSEEK(desc,0,0)

 CLS

 ?'ИДЕТ ПОИСК КОМПОНЕНТ...'

 not:=SEARCHCOMP(@koef) //вызов функции которая выполняет всю работу по анализу текста pdf- айла , находит имена, обозначения, габариты всех элементов, находящихся на плате и упаковывает их в виде файла базы данных

 kolkomp:=0

 IF len(not)>0

 kolkomp:=not[1]

 koltop:=not[2]

 kolbot:=not[3]

 ENDIF

 FCLOSE(desc) //закрытие pdf файла

//*****ОБРАБОТКА ПАРАМЕТРОВ У НАЙДЕННЫХ ЭЛЕМЕНТОВ****

 IF kolkomp>0

 AUTOKONTUR(kolkomp) //выделение контура платы по максимальным габаритам элементов на ней

 ENDIF

//*******ВЫБОР ВИДА ПЛАТЫ******************************

exit:=alltrim(exittmp)

CLEAR GETS

st:=1

cls

DO WHILE (st<>4) //Предлагается меню, где можно выбрать направление взгляда на плату

 cglold:=setcolor('n/rg')

 @ 9,12 CLEAR TO 11,maxcol()-13

 @ 9,12 TO 11,maxcol()-13 DOUBLE

 set cursor off

 set scoreboard off

 readexit(.F.)

 set cursor on

 @ 10,14 say "Имя получаемоемого файла......" color ('w+/rg') get exittmp picture 'NNNNN' color('gr+/gr,n/w')

 setpos(10,50)

 dispout('.frg','w+/gr')

 setcolor(cglold)

 mas:={{'Двумерная','Трехмерная ','Имя файла','Выход'},{"Создание файла вида сбоку(двумерное изображение)","Создание файла вида со стороны(трехмерное изображение)",'Изменить имя получаемоемого файла','Выход в главное меню'}}

 st:=MENU (mas,13,st)

 IF st=1

 @ 9,0 CLEAR TO maxrow(),maxcol()

 set cursor off

 TO2D(kolkomp) //пересчет точек привязки в трехмерные координаты

 PRINTINFO()

 ERRF()

 inkey(6)

 cls

 ELSEIF st=2

 @ 9,0 CLEAR TO maxrow(),maxcol()

 set cursor off

 TO3D(kolkomp) //пересчет точек привязки в трехмерные

 координаты

 PRINTINFO()

 ERRF()

 inkey(6)

 cls

 ELSEIF st=3

 set cursor on

 read

 exit:=alltrim(exittmp)

 set cursor off

 ELSEIF st=0

 st=4

 ENDIF

ENDDO

RETURN

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

FUNCTION INP(dl,pods,typ) //вспомогательная функция для ввода

данных с клавиатуры

oldcol:=col()

oldrow:=row()

er:=space(maxcol()-col())

IF typ<>'n'

 FOR L=1 TO 2

 ACCEPT pods TO tmp

 IF LEN(tmp)<1

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSEIF LEN(tmp)>dl

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSE

 tmp=ALLTRIM(tmp)

 L=2

 ENDIF

 NEXT

ELSEIF typ='n'

 FOR L=1 TO 2

 ACCEPT pods TO tmp

 IF LEN(tmp)<1

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSEIF VAL(tmp)=0

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSE

 L=2

 ENDIF

 NEXT

ENDIF

RETURN tmp

 //*******печать информации о найденных элементах******

FUNCTION PRINTINFO() //функция, печатающая на экране результатысоздания TFLEX-файлов и результаты анализа

 

 SCROLL(10,0,MAXROW(),MAXCOL(),4)

 SETPOS(MAXROW()-4,0)

 ?'ДЛИНА PDF-ФАЙЛА:',prflen,' байт'

 ?'КОЛИЧЕСТВО НАЙДЕННЫХ ЭЛЕМЕНТОВ:',ALLTRIM(STR(kolkomp))

 ?'ЭЛЕМЕНТОВ НА ВЕРХНЕЙ СТОРОНЕ:',ALLTRIM(STR(koltop))

 ?'ЭЛЕМЕНТОВ НА НИЖНЕЙ СТОРОНЕ:',ALLTRIM(STR(kolbot))

RETURN

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

FUNCTION ERRF() //функция, создающая файл ERROR.TXT и записы//вающая туда имена компонентов, на которые не //найдены габаритные размеры

IF len(errfile)<>0

desk:=fcreate('error.txt')

fwrite(desk,"Не найдены файлы:"+chr(13)+chr(10))

for k:=1 to len(errfile)

fwrite(desk,errfile[k])

fwrite(desk,chr(13)+chr(10))

next

fclose(desk)

ENDIF

RETURN

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

FUNCTION TO3D(st0) // функция, пересчитывающая координаты и

габаритные размеры элементов в трехмерную модель

 cos30:=0.5*SQRT(3)

 cos60:=0.5

 FOR L:=1 TO st0

 compon[l,4]=compon[l,4]+dx

 compon[l,5]=compon[l,5]+dy

 compon[l,4]=compon[l,4]+cos60*compon[l,5] //пересчет координат в //3D

 compon[l,5]=compon[l,5]*cos30

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]-compon[L,3] //для эл. нижней стороны

 ENDIF

 NEXT

 maxy:=kontur[4]

 maxx:=kontur[3]

tx[5])*(maxy-tx[5])))<(((maxx-tx[4])*(maxx-tx[4]))+((maxy-tx[5])*(maxy-ty[5])))})

tx[4])+kwad(tx[5]))>(kwad(maxx-tx[4])+kwad(tx[5]))})

 ASORT(compon,,,(tx[4]*tx[4]+(maxy*2-tx[5])*(maxy*2-tx[5]))<(ty[4]*ty[4]+(maxy*2-ty[5])*(maxy*2-ty[5])))

 //*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************

 IF kolkomp>0

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на нижней стороне:'

 nn:=FILECR3D(kolkomp,'bot','bot')

 ??nn

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на верхней стороне:'

 nn:=FILECR3D(kolkomp,'top','top')

 ??nn

 PLATCR() //создание файла контура платы

 ENDIF

 FOR L:=1 TO st0 //обратный пересчет координат для приведения

 // массива габаритов в исходный вид

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]+compon[L,3] //для эл. нижней стороны

 ENDIF

 compon[l,5]=compon[l,5]/cos30

 compon[l,4]=compon[l,4]-cos60*compon[l,5]

 compon[l,5]=compon[l,5]-dy

 compon[l,4]=compon[l,4]-dx

 NEXT

RETURN

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

FUNCTION TO2D(st0)// функция, пересчитывающая координаты и //габаритные размеры элементов в двумерную //модель

 wzapis:=wind(3,4,maxrow()+2,maxcol()+3,"Двумерная компоновка",5)

 mas:={{'Спереди','Сзади ','Слева','Справа'},{"Создание файла вида спереди","Создание файла вида сзади","Создание файла вида слева","Создание файла вида справа"}}

 xkor:=4

 strel:={chr(24),chr(25),chr(26),chr(27)} //Прорисовка видов плат

 col2d:=setcolor('r+/bg')

 For k=1 To 4

 setcolor('r/bg')

 @ 5,xkor to 5+2,xkor+10

 setcolor('n/bg')

 @ 5+3,xkor-1 say '0,0'

 xkor=xkor+16

 next

 setcolor('g+/bg')

 @ 8,9 say strel[1]

 @ 4,25 say strel[2]

 @ 6,35 say strel[3]

 @ 6,63 say strel[4]

 setcolor(col2d)

 st:=MENU (mas,13,st)

IF st=1

 ASORT(compon,,,)

 FOR L:=1 TO st0

 compon[l,4]=compon[l,4]+dx

// compon[l,5]=0

// compon[l,8]=0

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]-compon[L,3]-tlplat //для эл. нижней

 стороны

 ENDIF

 NEXT

 tkont2:=kontur[2]

 tkont4:=kontur[4]

 kontur[2]=-10

 kontur[4]=kontur[2]

 //*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************

 IF kolkomp>0

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на нижней стороне:'

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 nn:=FILECR2D(kolkomp,'top',dlin)

 ??nn

 ENDIF

 FOR L:=1 TO st0 //обратный пересчет координат для приведения

 // массива габаритов в исходный вид

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]+compon[L,3]+tlplat //для эл. нижней

 стороны

 ENDIF

 compon[l,4]=compon[l,4]-dx

 NEXT

 kontur[2]=tkont2

 kontur[4]=tkont4

ELSEIF st=2

 TO2DZAD(st0)

ELSEIF st=3

ELSEIF st=4

ENDIF

winclose()

RETURN

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

FUNCTION AUTOKONTUR(L1) // выделение контура платы по

 максимуму

 minY:=compon[1,5]

 maxY:=minY

 minX:=compon[1,4]

 maxX:=minX

 IF verkont=0

 PUBLIC kontur[4]

 FOR L:=2 TO L1

 IF compon[L,4]>maxX

 maxX:=compon[L,4]

 ELSEIF compon[L,4]<minX

 minX:=compon[L,4]

 ENDIF

 IF compon[L,5]>maxY

 maxY:=compon[L,5]

 ELSEIF compon[L,5]<minY

 minY:=compon[L,5]

 ENDIF

 NEXT

 kontur[1]=(minX-30)

 kontur[2]=(minY-30)

 kontur[3]=(maxX+30)

 kontur[4]=(maxY+30)

 ENDIF

 dx:=(0-kontur[1]) //вычисление поправки на ноль

 dy:=(0-kontur[2])

 kontur[1]=kontur[1]+dx //пересчет координат контура в 0 0

 kontur[3]=kontur[3]+dx

 kontur[2]=kontur[2]+dy

 kontur[4]=kontur[4]+dy

RETURN

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

FUNCTION PLATCR() создание файла контура платы в формате TFLEX

PRIVATE fil,st1,st2,st3,st4,st5

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла контура платы.'

 cos30:=0.5*SQRT(3)

 fil=FCREATE(exit+'plt'+'.frg')

 st1:='plata '+attr+' 1 1'+CHR(13)+CHR(10)

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 shir:=ALLTRIM(STR(kontur[4]-kontur[2]))

 st3:='x1='+ALLTRIM(str(kontur[1]))+CHR(13)+CHR(10)

 st2:='y1='+ALLTRIM(STR(kontur[2]))+CHR(13)+CHR(10)

 st4:='sh1='+shir+CHR(13)+CHR(10)

 st5:='dl1='+dlin+CHR(13)+CHR(10)

 st1:=st1+st2+st3+st4+st5+'+'+CHR(13)+CHR(10)

 err:=FWRITE(fil,st1)

 IF err<>LEN(st1)

 ?'Ошибка при записи файла'

 ELSE

 ??' OK'

 ENDIF

 FCLOSE(fil)

RETURN

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

FUNCTION CREATDBF(nom2)//функция создающая пустую базу  данных

 PUBLIC nfill1:='COMP', nfill2:='SIDE', nfill3:='attr', nfill4:="X",nfill5:="Y"

 PRIVATE struct [5,4],nom

 struct[1,1]=nfill1

 struct[1,2]="C"

 struct[1,3]=18

 struct[1,4]=0

 struct[2,1]=nfill2

 struct[2,2]="C"

 struct[2,3]=5

 struct[2,4]=0

 struct[3,1]=nfill3

 struct[3,2]="N"

 struct[3,3]=10

 struct[3,4]=0

 struct[4,1]=nfill4

 struct[4,2]="N"

 struct[4,3]=10

 struct[4,4]=5

 struct[5,1]=nfill5

 struct[5,2]="N"

 struct[5,3]=10

 struct[5,4]=5

 parametr:=exit

 DBCREATE(parametr,struct) //создание базы данных

 USE

 USE &parametr //открытие б.д.

FOR nom=1 TO nom2

 APPEND BLANK

 REPLACE &nfill1 WITH compon[nom,1]

 REPLACE &nfill2 WITH compon[nom,2]

 REPLACE &nfill3 WITH compon[nom,3]

 REPLACE &nfill4 WITH compon[nom,4]

 REPLACE &nfill5 WITH compon[nom,5]

NEXT

 USE //закрытие б.д.

RETURN

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

FUNCTION TO2DZAD(st0) // функция, пересчитывающая координаты и  габаритные размеры элементов в

 двумерную модель вида сзади

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 ASORT(compon,,,x[5]<y[5])

 FOR L:=1 TO st0

 compon[l,4]=kontur[3]-(compon[l,4]+dx)-kontur[1]+compon[l,7]

IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]-compon[L,3]-tlplat //для эл. нижней

 стороны

 ENDIF

 NEXT

 tkont2:=kontur[2]

 tkont4:=kontur[4]

 kontur[2]=-10

 kontur[4]=kontur[2]

 //*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************

 IF kolkomp>0

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на нижней стороне:'

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 nn:=FILECR2D(kolkomp,'top',dlin)

 ??nn

 ENDIF

 kontur[2]=tkont2

 kontur[4]=tkont4

 FOR L:=1 TO st0 //обратный пересчет координат для приведения

 массива габаритов в исходный вид

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]+compon[L,3]+tlplat //для эл. Нижней

 стороны

 ENDIF

 compon[l,4]=-compon[l,4]+kontur[3]-kontur[1]+compon[l,7]

 compon[l,4]=compon[l,4]-dx

 NEXT

RETURN

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

FUNCTION kwad(argum) //функция возведения в квадрат

newarg:=argum*argum

RETURN newarg

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

//подключение файлов с вспомогательными программами

#include 'CH\ssear.ch'

#include 'CH\swind.ch'

#include 'CH\smenu.ch'

#include 'CH\sfilcr3d.ch'

#include 'CH\sfilcr2d.ch'

4.Файл ssear.prg содержит в себе текст подпрограммы, которая выполняет весь анализ pdf файла, находит имена, габариты, и координаты всех элементов, содержащихся в этом pdf файле, а так же ищет для всех вновь встреченных элементов их преобразовнные prt- файлы, берет оттуда габариты и помещает их в базу данных габаритов элементов (файл gabarits.dbf):

FUNCTION SEARCHCOMP(koef)

lastseek:=0

olsear:=setcolor('n/gb')

set cursor off

//******** Выделение элементов из pdf-файла и занесение их в массив compon[0,9] *****

// compon[n,1]-название элемента(строка)

// compon[n,2]-сторона установки('top' или 'bot')

// compon[n,3]-высота элемента(число)

// compon[n,4]-координата х-точки привязки(число)

// compon[n,5]-координата у-точки привязки(цифра)

// compon[n,6]-поворот элемента(число от 0 до 3)

// compon[n,7]-ширина элем.(число)

// compon[n,8]-длина элем.(число)

// compon[n,9]-обозначение элемента(строка)

tmz1:=SEAR()

setcolor(olsear)

RETURN tmz1

FUNCTION INSERTCOMP() //выделение параметров элементов из   строки текста

USE 'gabarits.dbf' //открытие базы данных с размерами элементов

 FOR L=1 TO LEN(compon) //выделение координат точки привязки

  элемента

 IF compon[L,1]=NIL

 L=LEN(compon)

 kolkomp:=L-1

 ELSE

 kolkomp:=len(compon)

 str2=ALLTRIM(compon[l,4])

 IF compon[l,2]<>'bot'

 koltop=koltop+1

 ELSEIF compon[l,2]='bot'

 kolbot=kolbot+1

 ENDIF

 p1=At(' ',str2)

 compon[l,4]=VAL(SUBSTR(str2,0,p1-1))*koef //выделение х точки  привязки

 str2=LTRIM(SUBSTR(str2,p1,30))

 p1=At(' ',str2)

 IF p1=0

 p1=AT('}',str2)

 ENDIF

 compon[l,5]=VAL(SUBSTR(str2,0,p1-1))*koef //выделение у точки  привязки

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 st0:=compon[l,1]+compon[l,2]+' X='+STR(compon[l,4])+' Y='+STR(compon[l,5])+' Ro='+str(compon[l,6])

 gab:=GABARIT(compon[L,1],L) //вызов данных о размерах элемента

ENDIF

 NEXT

 USE //закрытие базы данных с размерами элементов

RETURN {kolkomp,koltop,kolbot}

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

FUNCTION GABARIT(st0,nn) // определение габаритов элемента по его  имени

PRIVATE naiden:=0,gabar:={0,0,0} //по заданному имени элемента

 возвращает массив из 3 чисел  /ширина/длина/высота/

 WHILE naiden=0

 LOCATE FOR name=st0+SPACE(10-LEN(st0))

 IF FOUND()=.T.

 gabar[1]:=SHIR*koef

 gabar[2]:=DLIN*koef

 IF compon[nn,3]=0

 compon[nn,3]=Vis*koef

 IF Vis=0

 compon[nn,3]=90*koef

 ENDIF

 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('',st0)

 k=2

 ELSE

 k=1

 ENDIF

 nom:=nom+1

 AADD(rez,({nil}))

 rez[nom]=SUBSTR(st0,0,p1-1)

 rez[nom]=(VAL(rez[nom])*koef)

 st0=ALLTRIM(SUBSTR(st0,p1,60))

NEXT

RETURN rez

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

Страницы: 1, 2, 3, 4


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.