|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 13538 (0x34e2) Types: TextFile Names: »subsa.f«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/utep/subsa.f«
***************************************************************************** * * subroutine pgdone does the following: * (page done) * + output device is AED terminal. * - change modes from graphics * mode to alpha mode. ****************************************************************************** subroutine pgdone character*1 alpha c ialpha=1 alpha=char(ialpha) call prnt(alpha) return end ***************************************************************************** * * subroutine newpage does the following: * (new page) * + reinitialize for new page * + update number of pages. ************************************************************************* subroutine newpage common/device/lastx,lasty,numpag c c user ready to draw another page, need to reinitialize. call clr call init c update numpag by one. numpag=numpag+1 return end *********************************************************************** * subroutine rdcomnd(itmsnum) does the following: * (read command) * + This routine follows globle change menu * + read commnad * + valid command * - 'm'--> move * * move item numbered (itmsnum) * - 'e'--> erase * * erase (delete) item numbered * (itmsnum) * - 'a'--> add * * add item numbered (itmsnum) * # possible to add another item * # yes--> * - adjust (df) counter to next * available space. * - display items menu * - proceed to draw item * # no--> * - send a warning that the limit * of items has been used * + unvalid command * - error * - display globle change menu * - allows 3 chances to correct * error * ********************************************************************** subroutine rdcomnd(itmsnum) integer itmsnum common/num/numitms common/space/ifree common/contr/icnt common/table/tblitms(20,10),icolor(20),items(20) common/gc/igcflg common/aucp/iaucp character*1 command,items c do 20 i=1,4 read(5,30)command 30 format(a1) if(command.eq.'m' .or. command.eq.'M')then call movitm(itmsnum) i=5 elseif(command.eq.'e' .or. command.eq.'E')then call delitm(itmsnum) igcflg=1 i=5 elseif(command.eq.'a' .or. command.eq.'A')then if(numitms.lt.20)then icnt=ifree iaucp=1 call itmmenu call ditem iaucp=0 else write(0,40) 40 format(5x,'Warning:Cannot add another item', * /,5x,'you have used the limit of items/page') endif i=5 else call error(5) call gcmenu endif 20 continue return end ***************************************************************************** * * subroutine lsitems does the following: * (list items) * + list the content of current segment * table. * ***************************************************************************** subroutine lsitems common/num/numitms common/table/tblitms(20,10),icolor(20),items(20) character*1 items c write(0,10) 10 format(1x,'item no.',2x,'item',2x,'color',2x,'sl or raduis', * 2x,'blc or center',2x,'trc') do 20 i=1,numitms write(0,30)i,items(i),icolor(i),(tblitms(i,j),j=1,5) 30 format(1x,I2,8x,a1,5x,I2,6x,F6.2,5x,F6.2,1x,F6.2,2x,F6.2,1x,F6.2) 20 continue return end *************************************************************************** * * subroutine wtitems does the following: * (write items) * + wirte items (twb) into (pwb) * segment table. * + list segment table content * **************************************************************************** subroutine wtitems common/info/color,len,width,x1,y1,x2,y2,item common/minfo/sorhitm common/num/numitms common/table/tblitms(20,10),icolor(20),items(20) character*1 items,item real x1,y1,x2,y2,len,width integer numitms,color c numitms=numitms+1 items(numitms)=item icolor(numitms)=color c tblitms(numitms,1)=len tblitms(numitms,2)=x1 tblitms(numitms,3)=y1 tblitms(numitms,4)=x2 tblitms(numitms,5)=y2 tblitms(numitms,7)=sorhitm c call lsitems return end *************************************************************************** * * subroutine pickitm(onenum) does the following: * (pick one item) * + This routine is called after listing * of segment table. * + ask user to input one items number * + read number * + valid item number * - yes--> * * return * - no--> * * error- try again * *************************************************************************** subroutine pickitm(onenum) integer onenum c do 30 i=1,4 write(0,10) 10 format(5x,'make a selection by specifying items number') read(5,20)onenum 20 format(I2) if(onenum.lt.0 .or. onenum.gt.20)then call error(2) else i=5 endif 30 continue return end ******************************************************************************* * * subroutine gcmenu does the following: * (globle change menu - image editing) * + display globle change menu like this * * m - move item * * e - erase (delete) item * * a - add item * ******************************************************************************* subroutine gcmenu c write(0,10) 10 format(5x,'choices are:',/,10x,'m-move item',/,10x, * 'e-erase item',/,10x,'a-add item') return end ***************************************************************************** * * subroutine movitm(onenum) does the following: * (move item) * + access (pwb) to find out items type * + item is (ucp),(bkgd),(line belonges * to (ucp)) * - error--cannot move this item * + otherwise * - erase item from screen * - restructure image after erasing * -- erased item overlapped other segments * * send only those segments that * overlapped erased item according * to their priorities * else * -- erased item stand alone * * send item only * - draw moved item like this * -- moved item overlaps other segments * * send segments according to their * priorities including moved segment * else * -- send item only * ****************************************************************************** subroutine movitm(onenum) integer onenum,entry common/table/tblitms(20,10),icolor(20),items(20) common lstovlp(380),jo character*1 items c if(items(onenum).eq.'b'.or.items(onenum).eq.'u'.or. * (items(onenum).eq.'l'.and.tblitms(onenum,10).eq.0.0))then call error(6) else call tempinf(onenum) call eraitm(onenum) call issovlp(onenum) call search(onenum,entry) call dlentry(entry) jo=jo-1 if(jo.gt.1)then call sendsgs else call sendcod(onenum) endif call tempinf(onenum) call redmitm(onenum) call issovlp(onenum) if(jo.gt.1)then call sendsgs else call sendcod(onenum) endif endif return end **************************************************************************** * * subroutine delitm(onenum) does the following: * (delete item) * + delete an item from image for ever * - special cases: * * line belonges to (ucp) * # error--cannot delete it yet * have to delete its (ucp) * first * * (bkgd) or (ucp) * # handle seperatly * - general cases: * * erase item form screen * * restructure image accordingly * * delete item entry from segment * table * * delete segment from (df) * **************************************************************************** subroutine delitm(onenum) integer onenum,entry common/table/tblitms(20,10),icolor(20),items(20) common lstovlp(380),jo character*1 items c if(items(onenum).eq.'l'.and.tblitms(onenum,10).eq.0.0)then write(0,10) 10 format(5x,'attention:cannot erase this line,belongs to',/,15x, * 'a user constructed polygon') else if(items(onenum).eq.'b')then call dlbkgd(onenum) elseif(items(onenum).eq.'u')then call delucp(onenum) else call tempinf(onenum) call eraitm(onenum) call issovlp(onenum) call search(onenum,entry) call dlentry(entry) jo=jo-1 call sendsgs call updf(onenum) call upentry(onenum) call cpnums(onenum) endif endif return end ************************************************************************* * * subroutine cpnums(idsnum) does the following: * (change (ucp)s numbers) * (idsnum-deleted segment number) ************************************************************************* subroutine cpnums(idsnum) common/poly/iflag,numpoly,ifivply(5) common/llist/lnlist(5,2),lncontr c do 20 i=1,numpoly if(ifivply(i).gt.idsnum)then ifivply(i)=ifivply(i)-1 lnlist(i,1)=lnlist(i,1)-1 endif 20 continue return end ***************************************************************************** * * subroutine eraitm(onentry) does the following: * (erase item) * + item deletion flag off * - yes--> * * return * -no--> * * special case: * # (ucp)-handle sepeatly * * general cases: * # erase item to background color ***************************************************************************** subroutine eraitm(onentry) integer onentry common/table/tblitms(20,10),icolor(20),items(20) common/info/color,len,width,x1,y1,x2,y2,item common/contr/icnt character*1 items,item real x1,y1,x2,y2,len,width integer iclr,color,tempclr c if(tblitms(onentry,10).ne.0.0)then tempclr=color call srchtbl(iclr) color=iclr icnt=tblitms(onentry,8) call showitm tblitms(onentry,9)=icnt-1 call sendcod(onentry) color=tempclr endif return end **************************************************************************** * * subroutine redmitm(inum) does the following: * (redraw moved item) * + read new position * + update (twb) due to new position * + new position within bounds? * - yes--> * * update (pwb) segment table * * update overlapping table * * reconstruct segment * - no--> * * error--try again * * read new position * * repeat loop **************************************************************************** subroutine redmitm(inum) integer inum common/info/color,len,width,x1,y1,x2,y2,item common/table/tblitms(20,10),icolor(20),items(20) common lstovlp(380),jo common/contr/icnt common/ln/xtemp,ytemp character*1 items,cmnd,item real xtemp,ytemp,len,width,x1,y1,x2,y2 integer reply,color c cmnd='p' xtemp=x1 ytemp=y1 call itmpnt call upinfo(cmnd) do 24 i=1,3 call ckchang(inum,cmnd,reply) if(reply.eq.0)then call uptable(inum,cmnd) call blnkrow(inum) call ckovlap(inum) icnt=tblitms(inum,8) call showitm tblitms(inum,9)=icnt-1 call eraitm(inum) icnt=tblitms(inum,8) call showitm tblitms(inum,9)=icnt-1 i=4 else call error(7) call itmpnt call upinfo(cmnd) endif 24 continue return end ******************************************************************************* * * subroutine upentry(numone) does the following: * (update segment table entry) * + delete segment table entry (numone) * + delete entry (numone) from overlapping * table * + decrement number of image items (numitms) ******************************************************************************* subroutine upentry(numone) integer numone common/num/numitms common/table/tblitms(20,10),icolor(20),items(20) character*1 items integer num1 c if(numone.eq.1.and.numitms.eq.1)then num1=1 else num1=numitms-1 endif do 10 i=numone,num1 do 20 j=1,10 tblitms(i,j)=tblitms(i+1,j) 20 continue icolor(i)=icolor(i+1) items(i)=items(i+1) 10 continue c update the overlapping table . call upotbl(numone) numitms=numitms-1 return end *********************************************************************** * * subroutine rstable does the following: * (reset segment table) *********************************************************************** subroutine rstable common/num/numitms common/table/tblitms(20,10),icolor(20),items(20) character*1 items c do 10 i=1,20 do 20 j=1,5 tblitms(i,j)=0.0 20 continue icolor(i)=0 items(i)=' ' 10 continue do 30 k=1,20 tblitms(k,6)=1.0 tblitms(k,10)=1.0 30 continue numitms=0 return end ***************************************************************************** * * subroutine pickclr(clrnum) does the following: * (pick one color) * + ask user to input an integer color value * + display color menu * + read color value * + valid * - yes--> * * return * - no--> * * error-try again ***************************************************************************** subroutine pickclr(clrnum) integer clrnum c do 20 i=1,4 write(0,5) 5 format(5x,'Make a selection by specifying color number:') call clrmenu write(0,30) 30 format(1x,/,5x,'input integer value,like this (ex): 10') read(5,10)clrnum 10 format(I2) if(clrnum.lt.0.or.clrnum.gt.15)then call error(4) else i=5 endif 20 continue return end