| Making a MAP is time consuming if you not have a tool.
The following is a program which can produce a MAP very easily.
The HW you need is a VT340 and a Digitizer tablet connected to the
mouse input of the screen. Information is added as comments in the
source. I hope this saves time for a lot of you.
Dominique PACCO.
implicit integer*4 (a-z)
c
c This program produces a MAP file for a DECmcc country (domain).
c
c In addition this program produces a file in order to "replay"
c the digitizing sequence.
c
c Program to be used in conjunction with the digital digitizing
c tablet VSXXX-AB, connected to a VT340.
c
c
include '($ttdef)/list'
parameter tab = 9
parameter cr = 13
parameter esc = 27
external io$_sensemode,io$_setmode
external io$_readvblk,io$m_noecho,io$m_escape
external io$_writevblk
external exit_handler
integer*4 exit_block(4) /0,0,1,0/
real*4 x0,y0,x1,y1
real*4 x,y,ax,bx,ay,by
logical*1 inited /.false./
character*6 clear_screen /'.[H.[J'/
character*21 open_regis /'.PpS(A[0,479][799,0])'/
character*2 close_regis /'.\'/
character*7 report /'R(P(I))'/
character*5 report_one_shot /'R(I0)'/
character*5 report_multiple /'R(I1)'/
character*39 country
character*138 line,string,old_string,xy,old_xy,vector,saved_text
structure /iosb_structure/
integer*2 status
integer*2 length
integer*2 terminator
integer*2 term_length
end structure
record /iosb_structure/ iosb
common /exit/ channel,in_chars(3),in_chars_2(3)
c
c Format of the auxilliary OUTPUT file :
c
c Text: [ix,iy]text<TAB>x<BLANK>y
c Polyline: [ix,iy]<TAB>x<BLANK>y
c [ix,iy]<TAB>x<BLANK>y
c [ix,iy]<TAB>x<BLANK>y
c [ix,iy]<TAB>x<BLANK>y
c End polyline: anything else
c
c
c This output file can be edited easily to produce the expected
c output.
c
c
clear_screen(1:1) = char(esc)
clear_screen(4:4) = char(esc)
open_regis(1:1) = char(esc)
close_regis(1:1) = char(esc)
io$_sense = %loc(io$_sensemode)
io$_set = %loc(io$_setmode)
io$_read = %loc(io$_readvblk)+%loc(io$m_escape)+%loc(io$m_noecho)
io$_write = %loc(io$_writevblk)
retcode = sys$assign('TT:',channel,,)
if (.not.retcode) call lib$signal(%val(retcode))
retcode = sys$qiow(,%val(channel),%val(io$_sense),,,,
1 in_chars,%val(12),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
in_chars_2(1) = in_chars(1)
in_chars_2(2) = ior(in_chars(2),tt$m_escape)
in_chars_2(2) = ior(in_chars_2(2),tt$m_eightbit)
in_chars_2(2) = ior(in_chars_2(2),tt$m_nobrdcst)
in_chars_2(2) = ior(in_chars_2(2),tt$m_mbxdsabl)
in_chars_2(2) = iand(in_chars_2(2),not(tt$m_wrap))
in_chars_2(3) = in_chars(3)
retcode = sys$qiow(,%val(channel),%val(io$_set),,,,
1 in_chars_2,%val(12),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
exit_block(2) = %loc(exit_handler)
exit_block(4) = %loc(exit_status)
exit_status = ss$_normal
retcode = sys$dclexh(exit_block)
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(clear_screen),%val(len(clear_screen)),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
write (6,*) 'Give the name of the country'
write (6,*)
write (6,*) 'To draw a polyline :'
write (6,*) ' Click with the mouse (tablet) on the first point'
write (6,*) ' A vector will be drawn on each next click'
write (6,*) 'To stop a polyline :'
write (6,*) ' Type <Carriage_return>'
write (6,*) 'To write a text :'
write (6,*) ' Type the text'
write (6,*) ' then click with the mouse at the x-y location'//
1 'on the tablet'
write (6,*) 'To end this session : type <CTRL-Z>'
write (6,*)
write (6,'(''$Give the COUNTRY you want to draw : '')')
read (5,'(q,a)') country_len,country
call str$upcase(country(1:country_len),country(1:country_len))
open (unit=1,file=country(1:country_len)//'.aux',
1 carriagecontrol='list',
1 type='unknown',access='append')
rewind (unit=1)
read (1,'(q,a)',end=20) line_len,line
read (1,'(q,a)',end=20) line_len,line
rewind (unit=1)
read (1,'(q,a)',end=20) line_len,line
i = index (line(1:line_len),',')
old_xy_len = index (line(1:line_len),']')
old_xy(1:old_xy_len) = line (1:old_xy_len)
read (line(2:i-1),'(I)') ix0
read (line(i+1:old_xy_len-1),'(I)') iy0
read (line(old_xy_len+2:line_len),'(f12.5,2f12.5)') x0,y0
read (1,'(q,a)',end=20) line_len,line
i = index (line(1:line_len),',')
xy_len = index (line(1:line_len),']')
xy(1:xy_len) = line (1:xy_len)
read (line(2:i-1),'(I)') ix1
read (line(i+1:xy_len-1),'(I)') iy1
read (line(xy_len+2:line_len),'(f12.5,2f12.5)') x1,y1
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(open_regis),%val(len(open_regis)),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(report_multiple),%val(len(report_multiple)),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
retcode = sys$qiow(,%val(channel),
1 %val(io$_read),iosb,,,
1 %ref(line),%val(len(line)),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
go to 30
20 rewind (unit=1)
write (6,*)
write (6,'(''$Give x coordinate of first reference point : '')')
read(5,'(f20.0)') x0
write (6,'(''$Give y coordinate of first reference point : '')')
read(5,'(f20.0)') y0
write (6,'(''$Give x coordinate of second reference point : '')')
read(5,'(f20.0)') x1
write (6,'(''$Give y coordinate of second reference point : '')')
read(5,'(f20.0)') y1
write (6,*)
write (6,*) 'Now click on the two reference points on your tablet'
write (6,*) 'Then click on all points for your country'
write (6,*)
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(open_regis),%val(len(open_regis)),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(report_multiple),%val(len(report_multiple)),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
retcode = sys$qiow(,%val(channel),
1 %val(io$_read),iosb,,,
1 %ref(line),%val(len(line)),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
21 retcode = sys$qiow(,%val(channel),
1 %val(io$_read),iosb,,,
1 %ref(line),%val(len(line)),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
if (iosb.terminator .eq. esc) go to 21
line_len = iosb.length
i = index (line(1:line_len),',')
old_xy_len = index (line(1:line_len),']')
old_xy(1:old_xy_len) = line (1:old_xy_len)
read (line(2:i-1),'(I)') ix0
read (line(i+1:old_xy_len-1),'(I)') iy0
22 retcode = sys$qiow(,%val(channel),
1 %val(io$_read),iosb,,,
1 %ref(line),%val(len(line)),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
if (iosb.terminator .eq. esc) go to 22
line_len = iosb.length
i = index (line(1:line_len),',')
xy_len = index (line(1:line_len),']')
xy(1:xy_len) = line (1:xy_len)
read (line(2:i-1),'(I)') ix1
read (line(i+1:xy_len-1),'(I)') iy1
write (1,'(a,a1,2f12.5)') old_xy(1:old_xy_len),tab,x0,y0
write (1,'(a,a1,2f12.5)') xy(1:xy_len),tab,x1,y1
30 ax = (x1-x0)/(ix1-ix0)
bx = (x0*ix1-x1*ix0)/(ix1-ix0)
ay = (y1-y0)/(iy1-iy0)
by = (y0*iy1-y1*iy0)/(iy1-iy0)
xy_len = 0
60 old_xy_len = xy_len
old_xy(1:xy_len) = xy(1:xy_len)
if (.not. eof) then
read (1,'(q,a)',end=61) line_len,line
xy_len = index(line(1:line_len),'] ')
if(xy_len .eq. 0) then
xy_len = index(line(1:line_len),']')
saved_text_len = index(line(1:line_len),' ')-xy_len-3
if(saved_text_len .le. 0) go to 60
saved_text(1:saved_text_len) = line(xy_len+2:)
endif
xy = line(1:xy_len)
else
61 eof = .true.
retcode = sys$qiow(,%val(channel),
1 %val(io$_read),iosb,,,
1 %ref(line),%val(len(line)),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
line_len = iosb.length
if (iosb.terminator .eq. esc) then
saved_text_len = 0
if (line_len .le. 0) go to 60
saved_text = line(1:line_len)
saved_text_len = line_len
go to 60
endif
if (iosb.terminator .ne. cr) go to 100
xy = line(1:line_len)
xy_len = index(line(1:line_len),']')
if(xy_len .eq. 0) then
write (1,'(a)') line(1:line_len)
go to 60
endif
xy(1:xy_len) = line(1:xy_len)
endif
70 i = index (xy,',')
read (xy(2:i-1),'(I)') ix
read (xy(i+1:xy_len-1),'(I)') iy
x = ax*ix + bx
y = ay*iy + by
if (saved_text_len .gt. 0) then
if (eof) write (1,'(a,a1,2f12.5)') xy(1:xy_len)//''''//
1 saved_text(1:saved_text_len)//'''',tab,x,y
vector_len = xy_len + 4 + saved_text_len
vector(1:vector_len) = 'P'//xy(1:xy_len)//'T'''//
1 saved_text(1:saved_text_len)//''''
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(vector),%val(vector_len),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
saved_text_len = 0
xy_len = 0
go to 60
endif
if (eof) write (1,'(a,a1,2f12.5)') xy(1:xy_len),tab,x,y
if (old_xy_len .gt. 0) then
vector_len = old_xy_len + xy_len + 2
vector(1:vector_len) = 'P'//old_xy(1:old_xy_len)//'V'//xy(1:xy_len)
else
vector_len = xy_len + xy_len + 2
vector(1:vector_len) = 'P'//xy(1:xy_len)//'V'//xy(1:xy_len)
endif
retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(vector),%val(vector_len),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
go to 60
100 retcode = sys$qiow(,%val(channel),
1 %val(io$_write),iosb,,,
1 %ref(close_regis),%val(len(close_regis)),,,,)
if(.not.retcode) call lib$signal(%val(retcode))
if (.not.iosb.status) call lib$signal(%val(retcode))
rewind (unit=1)
eof = .false.
open (unit=2,file=country(1:country_len)//'.dat',
1 carriagecontrol='list',
1 type='new')
read (1,'(q,a)',end=190) line_len,line
read (1,'(q,a)',end=190) line_len,line
write (2,*) 'version 0'
write (2,*) 'domain '//country(1:country_len)
write (2,'(a,f10.6,a,f10.6)') ' last_x ',x,' last_y ',y
write (2,*)
101 do n=0,10000
read (1,'(q,a)',end=107) line_len,line
if (index(line(1:line_len),']') .eq. 0) go to 105
if (index(line(1:line_len),'] ') .eq. 0) go to 103
enddo
103 if (n .eq. 0) go to 120
105 if (n .eq. 0) go to 101
backspace(unit=1)
106 if (eof) go to 190
go to 108
107 if (eof) go to 190
eof = .true.
if (n .eq. 0) go to 190
108 do i=1,n
backspace(unit=1)
enddo
110 write (2,*) 'object_type 4'
write (2,'(a,i6)') ' count ',n+1
read (1,'(q,a)',end=190) saved_text_len,saved_text
backspace (unit=1)
do i=1,n
read (1,'(q,a)',end=190) line_len,line
xy_len = index(line(1:line_len),'] ')
write (2,'(2a)') ' ',line(xy_len+2:line_len)
enddo
xy_len = index(saved_text(1:saved_text_len),'] ')
write (2,'(2a)') ' ',saved_text(xy_len+2:saved_text_len)
write (2,*)
go to 101
120 xy_len = index(line(1:line_len),']')
saved_text_len = index(line(1:line_len),' ')-xy_len-3
saved_text(1:saved_text_len) = line(xy_len+2:)
xy_len = index(line(1:line_len),' ')
write (2,*) 'object_type 4'
write (2,*) ' text ',saved_text(1:saved_text_len)
write (2,'(2a)') ' x ',line(xy_len+1:line_len)
write (2,*)
go to 101
190 continue
end
integer function exit_handler*4
implicit integer*4 (a-z)
parameter csi = '9b'x
character*47 regis_reset
1 /'.H.J.?25h.Pps(e,M0(AD)1(AB)2(AR)3(AG),c1).\.?4l'/
parameter ss$_normal = 1
common /exit/ channel,in_chars(3)
external io$_setmode
io$_set = %loc(io$_setmode)
regis_reset(1:1) = char(csi)
regis_reset(3:3) = char(csi)
regis_reset(5:5) = char(csi)
regis_reset(10:10) = char(27)
regis_reset(42:42) = char(27)
regis_reset(44:44) = char(csi)
retcode = sys$qiow(,%val(channel),%val(io$_set),,,,
1 in_chars,%val(12),,,,)
if (.not.retcode) call lib$signal(%val(retcode))
call sys$exit(%val(ss$_normal))
return
end
|
|
Hello world...
I am Philippe Petrou, working on DECmcc in order to find a way to manage
TIMA operations. I worked for 2 weeks to write a simple tool producing DECmcc
background maps. Now it is ready and described on TIMA star database. As using
this note I think I reach more interested peoples than throught TIMA, I copy
here below quit the same article...
Remind it is a very simple tool, that can be used waitting more features
in DECmcc iconic map itself. In that way, don't wait for any other version of
DRAW_MAP. Anyway the tool is delivered here with the sources code files, so YOU
can make what you want with it...
Now let's read the following.
Regards. Philippe (@EVT PETROU)
CODE SAMPLE ARTICLE OUTLINE
------------------------------------------------------------------------------
BRIEF PROBLEM OUTLINE:
DECmcc EFT 1.1 uses backdrop maps described in ASCII files by Carthesis coor-
donates of polygones. As no classic drawing tool produces such data, DRAW_MAP
was created. It produces DECmcc usable files of DECwindows user's drawn maps.
PRODUCT: DRAW_MAP version 1.0
LAYERED PRODUCT: VAXC, VAX Fortran on VMS/DECwindows 5.3
DATE: 23-JAN-1991
OVERVIEW:
Problem... DECmcc backdrop maps are not easy to produce. DRAW MAP was
created to easily produce such map files.
Features.. Draw map has the following features:
1 Displaying a DECmcc map file
2 Displaying XBitMap file produced by DECpaint (or any other way...)
3 Creating a map by drawing polygones (see note below) in a window.
4 Saving map created map data in a new DECmcc map file
5 Scaling an old DECmcc map file so that it takes more or less space in the
navigation area. (Max scale in it is 5.0)
NOTE==> DECmcc toolbox allows you to put text and draw simple lines in maps, so
it was not used to manage this features in DRAW_MAP.
Who uses it... All person who wants to quickly produce DECmcc formatted
backdrop maps.
How to use it... Here below is a short user guide of Draw Map
1 Starting Draw Map
1-1 Prerequisite
Draw Map environment has the folowing caracteristics:
- A Xwindows terminal (Station, Xterminal...) supporting X11 standard as
DECwindows
- VMS/DECwindows operating system
- The following files in the same directory:
+ DRAW_MAP.EXE executable program
+ DRAW_MAP.DAT ressource file used by Draw Map at run time
+ DRAW_MAP.UID DECwindows interface description file
Remind: The ressource file of a DECwindows application is an editable file in
whitch you can modify some parameter of the interface (geometry,...)
1-2 Starting
Draw map may be run from File View (run option) or from DCL with the
following command:
$ RUN DRAW_MAP.EXE
In order to use the DRAW_MAP.DAT ressource file, the running process must have
DECW$USER_DEFAULTS search list pointing on draw map directory.
2 Displaying a DECmcc map
2-1 How to do
+ Choose option GET_MAP from GET_FILE submenu from FILE menu.
+ A file selection window appears. It contains (by default) all .DAT extensed
files of your current directory.
+ Select the DECmcc map file you want to display
+ Then drawmap reads this file and convert map data to Xlib format. When this
work is done, drawmap alarms you with a french message.
+ Finaly choose option DRAW_MAP from DRAW menu and the map should appear in
the work area holding all the offered space of the window.
2-2 The data file
The data file MUST be to DECmcc map data file format. (An example is given
below)
Anyway we have the following restrictions;
+ Draw map converts only object_type 4 data.
+ Draw map reads only 2000 points building a maximum of 200 polygones.
2-3 Common errors
During these oprations the following errors may occur:
+ Error opening the selected file (priviledges, bad file...)
+ Error in the file format (may occur in data reading or data converting
operations)
+ Rounding error
+ Array access error (access violation) if to much data
3 Displaying a XBitMap (XBM) model
3-1 How to do
+ Choose option GET_XBM from GET_FILE submenu from FILE menu.
+ A file selection window appears. It contains (by default) all .XBM extensed
files of your current directory.
+ Select the XBitMap file you want to display
+ Finaly choose option DRAW_XBM_MODEL from DRAW menu and the map should appear
in the work area.
3-2 The bitmap file
The bitmap file MUST be of XBitMap format as defined in X11 standard.
DECpaint uses this format when saving X11. An example of bitmap file is given
below.
3-3 Common error
During these oprations the following errors may occur:
+ Error opening the file
+ Server has not enough memory to store the bitmap.
4 Creating a DECmcc map and produce a new data file
4-1 How to do
+ Choose option CREATE_MAP from DRAW menu.
+ Then the working area cursor changes to DECwindows draw cursor, and the
mouse buttons get the following functions;
Button 1: + It stores the clicked point's coordonates and draw a line to the
last one (except in case of polygone begining).
Button 2: + It closes the current polygone, stores its number of points, and
allow you to start a new polygone
Button 3: + It ends the graphic recording
+ At this stage, data are in memory. you have to save them in a new file...
+ Choose option CREATE_FILE from SAVE_FILE submenu from FILE menu.
+ Then a dialog box appears, asking for the new file name and the scale factor
(REAL) you want to apply to new map data.
CARE==> THE SCALE FACTOR MUST BE ENTER IN REAL FORMAT.
4-2 Constraints
Here are the constraints to the acquisition:
+ The maximum number of points is a little less than 2000 (let say 1500...)
+ Scale factor must be real formatted (ex: 4.3) else...
5 Scaling a DECmcc map data
5-1 How to do
In order to change the space a map takes in DECmcc navigation area,
this option allows you to change the scale of the map.
To use it let's do the following:
+ Select option SCALE_FILE from submenu SAVE_FILE from menu FILE
+ Then a dialog box appears prompting you for;
- The source DECmcc map data file
- The file name to be created (it may be the same as source one =>
then drawmap create a new version)
- The new sacle factor (REAL)
5-2 Constraints
Scale MUST be a real data. For example: 3.0
6 Example of using
Context: I need a new map of France to put as background of my TIMA_France mcc
domain.
Solution:
+ I scan my favorit France map and then produce an image file (.IMG)
+ I read this file with DECpaint and scale the map in order to held it in a
picture size of about 500x500 pixels.
+ I save it as - X11 (XBitMap)
- <filename>.XBM
+ I quit DECpaint and start DRAW_MAP
+ Here I display my XBM model of France map
+ Then I create my France polygone
+ Finaly I save the new map in a file that I scale as I want.
+ Now I can use DECmcc with this new map and fullfill it with text, lines and
icons using DECmcc toolbox.
PROGRAM NOTES:
Where to find sources and executable:
A backup file located on VERS::DISK$KIT:[KIT.EMA.DECMCC.DRAWMAP]
It contains all needed files and 4 test files of France;
- TEST_FRANCE.IMG produced by scanning a France map.
- TEST_FRANCE.XBM produced by DECpaint from TEST_FRANCE.IMG (after scaling 25%)
- TEST_FRANCE.DAT produced by DRAW_MAP using TEST_FRANCE.XBM as XBM model and
creating a map scaled to 1.6
- MCC$_TIMA_FRANCE.DAT produced by DECmcc and inserting TEST_FRANCE.DAT data as
polygone.
This backup file names: DRAW_MAP.BCK and its listing is the following:
Listing of save set(s)
DRAW_MAP.C;1 34 23-JAN-1991 12:02
DRAW_MAP.COM;1 10 24-JAN-1991 14:45
DRAW_MAP.DAT;1 1 21-JAN-1991 16:19
DRAW_MAP.EXE;1 29 23-JAN-1991 12:03
DRAW_MAP.H;1 4 22-JAN-1991 19:53
DRAW_MAP.OBJ;1 13 23-JAN-1991 12:03
DRAW_MAP.PS;1 673 24-JAN-1991 17:41
DRAW_MAP.UID;1 48 22-JAN-1991 20:40
DRAW_MAP.UIL;1 24 22-JAN-1991 20:40
DRAW_MAP_CALLBACKS.C;1 31 23-JAN-1991 10:44
DRAW_MAP_CALLBACKS.OBJ;1 13 23-JAN-1991 10:45
DRAW_MAP_EXTERN.C;1 20 22-JAN-1991 20:17
DRAW_MAP_EXTERN.OBJ;1 10 22-JAN-1991 20:18
DRAW_MAP_GETFILE.FOR;1 10 21-JAN-1991 16:46
DRAW_MAP_GETFILE.OBJ;1 4 16-JAN-1991 17:17
DRAW_MAP_NEW_FILE_DAT.FOR;1 11 21-JAN-1991 16:48
DRAW_MAP_NEW_FILE_DAT.OBJ;1 6 15-JAN-1991 19:15
DRAW_MAP_SAVEMAP.FOR;1 6 21-JAN-1991 16:52
DRAW_MAP_SAVEMAP.OBJ;1 3 17-JAN-1991 19:17
MCC$_TIMA_FRANCE.DAT;3 12 24-JAN-1991 15:50
TEST_FRANCE.DAT;1 5 24-JAN-1991 15:54
TEST_FRANCE.IMG;2 3 24-JAN-1991 15:25
TEST_FRANCE.XBM;3 462 24-JAN-1991 15:46
Total of 23 files, 759 blocks
End of save set
Installing DRAW_MAP:
The application can run if the here above prerequisites are respected.
Anyway, you can rebuilt the executable file running the DCL procedure
DRAW_MAP.COM with the command:
$ @draw_map
This procedure makes all that the application needs to run.
Documentation:
A FRENCH documentation about this application exists in postscript form.
It describes the story of DRAW MAP, a user's guide, and the architecture of the
application.
PROGRAM SAMPLE:
Sample DECmcc backdrop map data file:
+------------------------------------------------------------------------------+
version 0
domain .mcc.TIMA_France
last_x 0.000000 last_y 0.000000
object_type 1
mcc_code 8
center_x 1.463825 center_y 1.068711
text_x 1.361954 text_y 0.989293
name .mcc.tima_ZTO
object_type 1
mcc_code 8
center_x 1.204990 center_y 1.275052
text_x 1.044907 text_y 1.193555
name .mcc.tima_UEO
object_type 4
count 56
0.870656 0.000000
0.972435 0.013368
0.944163 0.153361
0.989389 0.200022
:
:
0.571019 0.059984
0.684089 0.113357
0.870656 0.000000
object_type 2
var 1
width 0.008000
start_x 0.651455 start_y 1.278171
stop_x 0.897297 stop_y 1.134719
object_type 2
var 1
width 0.008000
start_x 0.428482 start_y 0.878482
stop_x 0.897297 stop_y 1.134719
object_type 7
text .mcc.tima_LFO
x 0.935551 y 1.414328
object_type 7
text Lille
x 0.983368 y 1.563410
[EOF]
Sample Xbitmap formatted file
+------------------------------------------------------------------------------+
#define TEST_width 50
#define TEST_height 50
#define TEST_x_hot 0
#define TEST_y_hot 0
static char TEST_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1c,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xe0,
0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x1c, 0xff, 0xff, 0xff,
0xff, 0xe3, 0x00, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x1c, 0xff,
0xff, 0xff, 0xff, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00,
0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80,
0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00,
0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c,
0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3,
0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00,
0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07,
0xfe, 0xfc, 0x81, 0xe3, 0x00, 0x1c, 0x07, 0x8c, 0x19, 0x83, 0xe3, 0x00,
0x1c, 0x07, 0x8c, 0x19, 0x83, 0xe3, 0x00, 0x1c, 0x07, 0x8c, 0x19, 0x83,
0xe3, 0x00, 0x1c, 0x07, 0xcc, 0x98, 0x81, 0xe3, 0x00, 0x1c, 0x07, 0x7c,
0xf8, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x0c, 0x18, 0x80, 0xe3, 0x00, 0x1c,
0x07, 0x0c, 0x18, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x3e, 0x7c, 0x80, 0xe3,
0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00,
0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07,
0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00,
0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80,
0xe3, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x1c, 0xff, 0xff,
0xff, 0xff, 0xe3, 0x00, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x1c,
0xff, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xe0,
0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00};
|