aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/tv/iis/ids/idssave.x
blob: a66ebc00a14ed4379db55671d5122c86b3a14dea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include "../lib/ids.h"

# IDS_SAVE -- Save the control state of the display, together with
# zero to all of the image and graphics planes.

procedure ids_save (data, n)

short	data[ARB]		# instruction data words
short	n			# count of data words

int	fd			# binary file output descriptor
short	i, j
short	frame[IDS_MAXIMPL+1]	# frames to save
short	graph[IDS_MAXGRPL+1]	# graph planes to save

include "../lib/ids.com"

begin
	# do we need to check n ??

	# determine file descriptor to write (opened by upper end)
	# ( assume upper end has saved whatever data it wanted and
	#   leaves fd pointing at control information offset)
	# then squirrel away the frame data

	fd = data[1]

	# image data

	i = 1
	j = 0
	repeat {
	    i = i + 1
	    j = j + 1
	    frame[j] = data[i]
	} until ( data[i] == IDS_EOD )
	call write(fd, j, SZ_SHORT)
	call write(fd, frame[1], j*SZ_SHORT)

	# graph data

	j = 0
	repeat {
	    i = i + 1
	    j = j + 1
	    graph[j] = data[i]
	} until ( data[i] == IDS_EOD )
	call write(fd, j, SZ_SHORT)
	call write(fd, graph[1], j*SZ_SHORT)

	# get all control information

	call zdev_save(fd)

	# get image data

	if ( frame[1] == IDS_EOD) {
	    for ( i = 1 ; i <= i_maxframes ; i = i + 1)
		frame[i] = i
	    frame[i+1] = IDS_EOD
	}
	if ( frame[1] != 0 ) {
	    for ( i = 1 ; frame[i] != IDS_EOD ; i = i + 1)
	        call zim_save (fd, frame[i])
	}

	# get graphics data

	if ( graph[1] == IDS_EOD) {
	    for ( i = 1 ; i <= i_maxgraph ; i = i + 1)
		graph[i] = i
	    graph[i+1] = IDS_EOD
	}
	if ( graph[1] != 0 ) {
	    for ( i = 1 ; graph[i] != IDS_EOD ; i = i + 1)
	        call zgr_save (fd, graph[i])
	}

	# upper end to close file
end