home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
comm
/
bbs
/
bbbbs
/
bbbbs72.lha
/
rexxDoors
/
Polling_Place.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1994-01-28
|
10KB
|
443 lines
/* $VER: Polling_Place.rexx 6.2 (5.8.93)
a Voting Booth for BBBBS by Richard Lee Stockton
*/
CALL TIME('R')
SIGNAL ON BREAK_C
SIGNAL ON BREAK_E
CR='0D'x
figarg='s:CONFIG.BBS'
IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
x=OPEN(f,figarg,'R')
IF x=0 THEN
DO
SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
EXIT(20)
END
line=STRIP(READLN(f))
sysop=WORD(READLN(f),1)
CALL CLOSE(f)
compos=POS('/*',line)
IF compos>0 THEN line=LEFT(line,compos-1)
bbsname=STRIP(line)
bbspath=GETCLIP('BBS_path')
polldir=bbspath'rexxDoors/Data/Polls'
CALL MAKEDIR(polldir)
PARSE ARG name . . colorflag secs .
name=STRIP(name)
colorflag=STRIP(colorflag)
IF ~DATATYPE(colorflag,'N') THEN colorflag=1
CALL colors(colorflag)
polls=SHOWDIR(polldir)
DO FOREVER
SAY CR
SAY bak2||CENTER(' - Polling_Place.rexx version 6.2 5 Aug 1993 - ',75)||def||CR
CALL ShowPolls()
com=getinput(1 0 '['pen3'Q'def']uit_To_BBS, ['pen3'S'def']tart_New_Poll or Select_Poll_Number > ')
com=STRIP(com)
CALL checkBBS()
SELECT
WHEN com='S' THEN CALL InitPoll()
WHEN com='X' | com='Q' THEN
DO
SAY CR
SAY 'Returning to the BBS...'CR
SAY CR
EXIT
END
WHEN DATATYPE(com,'N') THEN CALL do_poll()
WHEN com='' THEN
IF getinput(1 1 'Return to BBS? (nY) > ')~='N' THEN EXIT
OTHERWISE NOP
END
END
EXIT
checkBBS:
IF ADDRESS()~='BAUD' THEN RETURN 0
IF TIME('E')>secs THEN EXIT
dcd
IF RC=0 THEN EXIT
temp=secs-TIME('E')
IF temp<120 THEN SAY '*** Only' temp 'seconds left! ***'CR
RETURN 0
getinput:
PARSE ARG upflag' 'oneflag' 'pline
OPTIONS PROMPT pline
PARSE PULL inarg
inarg=STRIP(inarg)
IF upflag THEN inarg=UPPER(inarg)
IF oneflag THEN inarg=LEFT(inarg,1)
inarg=cleanstring(0':'inarg)
IF LENGTH(inarg)>64 THEN
DO
SAY 'Question too long! Please try again.'CR
inarg=getinput(0 0 pline)
END
RETURN inarg
cleanstring:
PARSE ARG nflag':'cstr
bot=TRIM(XRANGE(,' '))
bot=COMPRESS(bot,'1B'x)
top=XRANGE('7F'x)
IF nflag=1 THEN
DO
bot=bot||XRANGE('!','@')'[\]`~{:}'
cstr=TRANSLATE(UPPER(cstr),' ','_')
END
cstr=COMPRESS(cstr,bot||top)
IF nflag~=2 THEN cstr=STRIP(cstr)
IF nflag=1 THEN cstr=SPACE(cstr,1,'_')
RETURN cstr
ShowPolls:
SAY CR
totpolls=WORDS(polls)
DO pfl=1 TO totpolls BY 3
pfl2=pfl+1
pfl3=pfl+2
pfline=pen3||RIGHT(pfl,3)||def LEFT(WORD(polls,pfl),21)
IF pfl2<=totpolls THEN
pfline=pfline pen3||RIGHT(pfl2,3)||def LEFT(WORD(polls,pfl2),21)
IF pfl3<=totpolls THEN
pfline=pfline pen3||RIGHT(pfl3,3)||def LEFT(WORD(polls,pfl3),21)
SAY pfline||CR
END
SAY LEFT('=',75,'=')||CR
RETURN
InitPoll:
SAY CR
SAY 'You are now starting a new list of questions to be answered by other'CR
SAY 'users. You may enter as many multiple-choice questions as you like.'CR
SAY 'You should limit the number of answers per question to 10 or less.'CR
SAY 'Other than that, you are limited only by the bounds of good taste.'CR
SAY 'A ''None Of The Above'' entry will be added to each list of answers.'CR
SAY 'For a simple Yes/No or True/False question just enter one answer (Yes,'CR
SAY 'No, True, False), and the opposite answer will be filled in for you.'CR
SAY CR
u.=''
u.0=0
p.=''
p.0=0
p.0.0=3
n=LASTPOS('_',name)
p.0.0.0='The_'SUBSTR(name,n+1)'_Poll'
DO i=2 WHILE EXISTS(polldir'/'p.0.0.0)
p.0.0.0=p.0.0.0'_'i
END
p.0.0.0=STRIP(RIGHT(p.0.0.0,20))
p.0.1=DATE('I')
p.0.1.0=name
p.0.2=0
p.0.2.0=p.0.1
p.0.3=0
p.0.3.0=p.0.1
DO i=1
DO ii=1
CALL checkBBS()
SAY CR
SAY 'Enter Question Number' i ' (or blank to quit)'CR
SAY ' 'LEFT('=',64,'=')||CR
t=getinput(0 0 '> ')
IF t='' THEN LEAVE i
SAY t||CR
IF getinput(1 1 pen3'Is that correct? (nY) > 'def)~='N' THEN LEAVE ii
END
p.i.0.0=t
DO j=1
DO jj=1
SAY 'Enter Answer Number' j ' (or blank to quit)'CR
t=getinput(0 0 '> ')
IF t='' THEN LEAVE j
SAY t||CR
IF getinput(1 1 pen3'Is that correct? (nY) > 'def)~='N' THEN LEAVE jj
END
p.i.j=0
p.i.j.0=t
END
IF j=1 THEN
DO
p.i.0=''
p.i.0.0=''
LEAVE i
END
ELSE IF j=2 THEN
DO
IF UPPER(p.i.1.0)='NO' THEN line='Yes'
ELSE IF UPPER(p.i.1.0)='YES' THEN line='No'
ELSE IF UPPER(p.i.1.0)='TRUE' THEN line='False'
ELSE IF UPPER(p.i.1.0)='FALSE' THEN line='True'
ELSE line='None of the above.'
END
ELSE IF j>2 THEN
DO
jj=j-1
IF LEFT(UPPER(p.i.jj),17)='NONE OF THE ABOVE' THEN j=j-1
line='None of the above.'
END
p.i.0=j
p.i.j=0
p.i.j.0=line
END
i=i-1
IF i<1 THEN
DO
p.=''
RETURN 1
END
p.0=i
SAY CR
SAY 'This group of questions is currently called' p.0.0.0||CR
IF getinput(1 1 pen3'Is that correct? (nY) > 'def)='N' THEN
DO
SAY 'Please enter a Title, 20 characters or less.'CR
SAY pen3' 'LEFT('=',20,'=')||def||CR
t=getinput(0 0 '> ')
t=COMPRESS(t,xrange(,d2c(31))':/;,`?*='xrange('{')||d2c(34))
IF t='' THEN t=p.0.0.0
t=TRANSLATE(t,'_',' ')
p.0.0.0=t
END
poll=STRIP(LEFT(p.0.0.0,20))
CALL WritePoll(poll)
polls=SHOWDIR(polldir)
RETURN 0
do_poll:
IF com<1 | com>WORDS(polls) THEN RETURN
poll=STRIP(WORD(polls,com))
CALL ReadPoll(poll)
IF voted=0 THEN CALL vote()
IF stats() THEN CALL WritePoll(poll)
RETURN
ReadPoll:
PARSE ARG filename .
CALL CLOSE(f)
x=OPEN(f,polldir'/'filename,'R')
IF x=0 THEN RETURN 1
p.=''
p.0=READLN(f)
IF ~DATATYPE(p.0,'N') THEN RETURN 2
i=0
j=0
DO loop=1
line=READLN(f)
IF EOF(f) THEN LEAVE loop
IF LEFT(line,3)='@@@' THEN
DO
IF WORD(line,2)='VOTED' THEN LEAVE loop
i=i+1
j=0
ITERATE loop
END
p.i.j=line
p.i.j.0=READLN(f)
j=j+1
END
voted=0
u.=''
DO loop=1
line=READLN(f)
IF EOF(f) THEN LEAVE loop
IF name=STRIP(line) THEN voted=1
u.loop=line
END
CALL CLOSE(f)
IF voted=0 THEN
DO
u.0=loop
u.loop=name
END
ELSE u.0=loop-1
RETURN 0
vote:
SAY poll||CR
DO i=1 TO p.0
SAY pen3'Question:'def p.i.0.0||CR
IF p.i.0<16 THEN
DO j=1 TO p.i.0
SAY pen3||RIGHT(j,7)||def p.i.j.0||CR
END
ELSE
DO pfl=1 TO p.i.0 BY 3
pfl2=pfl+1
pfl3=pfl+2
pfline=pen3||RIGHT(pfl,3)||def LEFT(p.i.pfl.0,21)
IF pfl2<=p.i.0 THEN
pfline=pfline pen3||RIGHT(pfl2,3)||def LEFT(p.i.pfl2.0,21)
IF pfl3<=p.i.0 THEN
pfline=pfline pen3||RIGHT(pfl3,3)||def LEFT(p.i.pfl3.0,21)
SAY pfline||CR
END
j=''
DO WHILE ~DATATYPE(j,'N')
CALL checkBBS()
j=getinput(1 0 'Please Select One > ')
IF j<1 | j>p.i.0 THEN j=''
END
p.i.j=p.i.j+1
END
p.0.2=p.0.2+1
p.0.2.0=DATE('I')
RETURN
stats:
p.0.3=p.0.3+1
p.0.3.0=DATE('I')
SAY CR
SAY CR
SAY pen3'Title:'def poll||CR
SAY CR
temp=p.0.2
IF temp<1 THEN temp=1
DO i=1 TO p.0
SAY p.i.0.0||CR
IF p.i.0<16 THEN
DO j=1 TO p.i.0
SAY RIGHT(TRUNC(.05+(p.i.j*100)/temp,1),6)'% 'p.i.j.0||CR
END
ELSE
DO pfl=1 TO p.i.0 BY 3
pfl2=pfl+1
pfl3=pfl+2
pfline=RIGHT(TRUNC(.05+(p.i.pfl*100)/temp,1),4)'% 'LEFT(p.i.pfl.0,19)
IF pfl2<=p.i.0 THEN
pfline=pfline RIGHT(TRUNC(.05+(p.i.pfl2*100)/temp,1),4)'% 'LEFT(p.i.pfl2.0,19)
IF pfl3<=p.i.0 THEN
pfline=pfline RIGHT(TRUNC(.05+(p.i.pfl3*100)/temp,1),4)'% 'LEFT(p.i.pfl3.0,19)
SAY pfline||CR
END
SAY CR
CALL getinput(1 1 'Press Return ')
SAY lineup' 'lineup||CR
END
SAY poll 'originated by' p.0.1.0 DATE(,p.0.1,'I')||CR
SAY 'This survey has been running' 1+DATE('I')-p.0.1 'days.'CR
SAY p.0.2 'users have responded and the statistics have been read' p.0.3 'times.'CR
SAY CR
IF name=p.0.1.0 | name=sysop THEN
DO
temp=''
IF name=p.0.1.0 THEN temp='This one owned by you. '
temp=temp'Do you want to delete this poll? (Ny) > '
IF getinput(1 1 temp)='Y' THEN
DO
CALL bbsNewFile.rexx(name polldir'/'p.0.0.0)
CALL DELETE(polldir'/'p.0.0.0)
SAY p.0.0.0 'deleted.'CR
SAY CR
polls=SHOWDIR(polldir)
RETURN 0
END
SAY CR
END
ELSE CALL getinput(1 1 'Press Return ')
RETURN 1
WritePoll:
PARSE ARG filename .
CALL CLOSE(f)
x=OPEN(f,polldir'/'filename,'W')
IF x=0 THEN RETURN 1
DO i=0 TO p.0
IF i=0 THEN CALL WRITELN(f,p.0)
ELSE CALL WRITELN(f,'@@@' i)
DO j=0 TO p.i.0
CALL WRITELN(f,p.i.j)
CALL WRITELN(f,STRIP(p.i.j.0))
END
END
CALL WRITELN(f,'@@@ VOTED')
IF ~DATATYPE(u.0,'N') THEN u.0=0
DO i=1 TO u.0
CALL WRITELN(f,u.i)
END
CALL CLOSE(f)
RETURN 0
colors:
ARG onoff
IF onoff THEN
DO
lineup='1B'x'M'
def=''; /* default */
pen0='
'; pen1='
'; pen2='
'; pen3='
'
pen4='
'; pen5='
'; pen6='
'; pen7='
'
bak0='
'; bak1='
'; bak2='
'; bak3='
'
bak4='
'; bak5='
'; bak6='
'; bak7='
'
END
ELSE
DO
pen0=''; pen1=''; pen2=''; pen3=''; pen4=''; pen5=''; pen6=''; pen7=''
bak0=''; bak1=''; bak2=''; bak3=''; bak4=''; bak5=''; bak6=''; bak7=''
def=''; lineup=''
END
RETURN
BREAK_C:
BREAK_E:
CALL CLOSE(f)
EXIT
/*
Data Format (Dates in internal format)
p.0 Total Questions in this survey
p.0.0 "3"
p.0.0.0 Overall Survey Title (also filename)
p.0.1 Date this survey started.
p.0.1.0 Survey Originated By
p.0.2 Total users polled in this survey.
p.0.2.0 Date the last user was polled in this survey.
p.0.3 Total users reading responses to this survey.
p.0.3.0 Date the last user read responses to this survey.
"@@@ 1"
p.1.0 Total possible responses to Question 1
p.1.0.0 Question 1
p.1.1 Response 1 Total
p.1.1.0 Response 1 Text
p.1.2 Response 2 Total
p.1.2.0 Response 2 Text
...
p.1.n Response n-3 Total
p.1.n.0 Response n-3 Text
"@@@ 2"
p.2.0 Total possible responses to Question 2
p.2.0.0 Question 2
p.2.1 Response 1 Total
p.2.1.0 Response 1 Text
p.2.2 Response 2 Total
p.2.2.0 Response 2 Text
etc.
"@@@ VOTED"
u.1 first user polled
... list of users who have responded to this survey.
u.[p.0.2] last user polled
*/
/* Polling_Place.rexx */