![]() |
|
|
Реферат: Разработка программного обеспеченияДалее вызывается функция, активизирующая главное меню программы, которая, в зависимости от выбранного пункта, передает управление той или иной процедуре: 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 ¶metr //открытие б.д. 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 //**************************************************** |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |