summaryrefslogtreecommitdiff
path: root/dviware/quicspool/src/glpr
blob: 99a8718b0f2fa8c39116fbd34f368f986bc049f1 (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#! /bin/csh
# $Header: glpr,v 1.1 88/01/15 13:04:11 simpson Rel $
# $Log:	glpr,v $
#Revision 1.1  88/01/15  13:04:11  simpson
#initial release
#
#Revision 0.2  87/12/21  12:29:52  simpson
#changed spelling of queuing
#
#Revision 0.1  87/12/11  18:30:58  simpson
#beta test
#
# The algorithm is as follows:
#	If given -P flag, use that printer
#       Decide which printer to use by (minutes after hr modulo # of printers)
#	Assign states to printer
#	If printer is idle, use it
#	Look for idle printer
#	If found
#		use it
#	Look for busy printer
#	If found
#		use it
#	Look for stopped printer
#	If found
#		use it
#	Else all printers are disabled
# Printers can be in 4 states: 1==disabled, 2==stopped, 3==busy, 4==idle
set printers=(sneezy dopey grumpy)
set landscape
set lprflags
while ($#argv > 0)
    switch ($1)
    case -P*:
	lpr $lprflags $*
	exit
    case -L:
	set landscape=l
	shift
	breaksw
    default:
	set lprflags=($lprflags $1)
	shift
	breaksw
    endsw
end
@ index = `date|sed 's/.* [0-9][0-9]:\([0-9][0-9]\).*/\1/'` % $#printers + 1
set i = 1
set states=($printers)
while ($i <= $#printers)
    /etc/lpc status $printers[$i]$landscape|fgrep 'queuing is disabled'>\
    /dev/null
    if ($status == 0) then
	set states[$i] = 1
	@ i++
	continue
    endif
    /etc/lpc status $printers[$i]$landscape|fgrep 'printing is disabled'>\
    /dev/null
    if ($status == 0) then
	set states[$i] = 2
	@ i++
	continue
    endif
    lpq -P$printers[$i]|fgrep 'no entries'>/dev/null
    set portraitstatus=$status
    lpq -P$printers[$i]l|fgrep 'no entries'>/dev/null
    if ($portraitstatus == 0 & $status == 0) then
	set states[$i] = 4
    else
	set states[$i] = 3
    endif
    @ i++
end
if ($states[$index] == 4) then
    lpr -P$printers[$index]$landscape $lprflags
    exit
endif
set i = 1
while ($i <= $#printers)
    if ($states[$i] == 4) then
	lpr -P$printers[$i]$landscape $lprflags
	exit
    endif
    @ i++
end
set i = 1
while ($i <= $#printers)
    if ($states[$i] == 3) then
	lpr -P$printers[$i]$landscape $lprflags
	exit
    endif
    @ i++
end
set i = 1
while ($i <= $#printers)
    if ($states[$i] == 2) then
	lpr -P$printers[$i]$landscape $lprflags
	exit
    endif
    @ i++
end
# If we get here, all printers are disabled!  Try anything!
lpr -P$printers[$index]$landscape $lprflags