0010 rem //--------------------------------// 0020 rem // Valgsystemsmodul // 0030 rem // ------------------ // 0040 rem // Program : Beregn/Display // 0050 rem // Daks d. 15/11 1981 // 0060 rem //--------------------------------// 0070 dim RESULTAT(15),BUF$(128),LISTE$(1),INDEX$(40),MESSLINE$(70) 0080 dim PARTI$(40),VALGSTED$(30),GAMLERES(40,16),NYERES(40,16),SUM(20) 0090 dim NEDDEL(20),MANDAT(20),X(10),LODTR(5),M78(16),VLGSTED$(30) 0100 dim STX(41) 0110 X(1)=1; X(2)=6; X(3)=7; X(4)=8; X(5)=14; X(6)=15; X(7)=17 0120 X(8)=18; X(9)=19; X(10)=20 0130 M78(1)=17; M78(2)=1; M78(3)=5; M78(4)=0; M78(5)=1; M78(6)=1; M78(7)=-1 0140 M78(8)=-1; M78(9)=1; M78(10),M78(11)=0; M78(12)=3; M78(13)=0; M78(14)=2 0150 M78(15)=-1 0160 STX(1)=4096; STX(2)=2224; STX(3)=6755; STX(4)=3553; STX(5)=247; STX(6)=49 0170 STX(7)=2148; STX(8)=1650; STX(9)=1469; STX(10)=1271; STX(11)=3200 0180 STX(12)=916; STX(13)=838; STX(14)=4225; STX(15)=5775; STX(16)=5398 0190 STX(17)=4801; STX(18)=3768; STX(19)=3762; STX(20)=3189; STX(21)=303 0200 STX(22)=2730; STX(23)=846; STX(24)=2715; STX(25)=426; STX(26)=3775 0210 STX(27)=8806; STX(28)=1515; STX(29)=5904; STX(30)=4279; STX(31)=6411 0220 STX(32)=2609; STX(33)=2516; STX(34)=5037; STX(35)=2708; STX(36)=1130 0230 STX(37)=1029; STX(38)=464; STX(39)=452; STX(40)=4207; STX(41)=117196 0240 rem --------------------------------->> Overskrift Til Valgskema 0250 dim VALGHEAD$(5,80) 0260 VALGHEAD$(1)=chr(132)+" 7####kj######################kj#######" 0270 VALGHEAD$(1)=VALGHEAD$(1)+"######k 7#############k 7############k" 0280 VALGHEAD$(2)=chr(132)+" 5 LI jj PARTI jj" 0290 VALGHEAD$(2)=VALGHEAD$(2)+chr(128)+"VALGET 1978"+chr(132)+"j 5" 0300 VALGHEAD$(2)=VALGHEAD$(2)+chr(128)+"VALGET 1981"+chr(132)+"j 5" 0310 VALGHEAD$(2)=VALGHEAD$(2)+chr(128)+"ÆNDRINGER "+chr(132)+"j" 0320 VALGHEAD$(3)=chr(132)+" 5 jj jj" 0330 VALGHEAD$(3)=VALGHEAD$(3)+chr(128)+" Antal % "+chr(132)+"j 5" 0340 VALGHEAD$(3)=VALGHEAD$(3)+chr(128)+" Antal % "+chr(132)+"j 5" 0350 VALGHEAD$(3)=VALGHEAD$(3)+chr(128)+" Antal % "+chr(132)+"j" 0360 VALGHEAD$(4)=chr(132)+" ssssssbsssssssssssssssssssssssbssssssssss" 0370 VALGHEAD$(4)=VALGHEAD$(4)+"ssss sssssssssssssss ssssssssssssss" 0380 VALGHEAD$(5)=chr(132)+" uppppzjppppppppppppppppppppppzjpppppppppp" 0390 VALGHEAD$(5)=VALGHEAD$(5)+"pppz upppppppppppppz uppppppppppppz" 0400 rem --------------------------------->> Overskrift Til Mandatskema 0410 dim MANDHEAD$(5,80) 0420 MANDHEAD$(1)=chr(132)+" 7####kj######################kj#######" 0430 MANDHEAD$(1)=MANDHEAD$(1)+"##########k 7#################k" 0440 MANDHEAD$(2)=chr(132)+" 5 LI jj PARTI jj" 0450 MANDHEAD$(2)=MANDHEAD$(2)+chr(128)+" STEMMER "+chr(132)+"j 5" 0460 print chr(132); " 7################################k 7#######"; 0470 MANDHEAD$(2)=MANDHEAD$(2)+chr(128)+" MANDATER "+chr(132)+"j" 0480 MANDHEAD$(3)=chr(132)+" 5 jj jj" 0490 MANDHEAD$(3)=MANDHEAD$(3)+chr(128)+" Antal % "+chr(132)+"j 5" 0500 MANDHEAD$(3)=MANDHEAD$(3)+chr(128)+" Antal Ændring "+chr(132)+"j" 0510 MANDHEAD$(4)=chr(132)+" ssssssbsssssssssssssssssssssssbssssssssss" 0520 MANDHEAD$(4)=MANDHEAD$(4)+"ssssssss sssssssssssssssssss" 0530 MANDHEAD$(5)=chr(132)+" uppppzjppppppppppppppppppppppzjpppppppppp" 0540 MANDHEAD$(5)=MANDHEAD$(5)+"pppppppz upppppppppppppppppz" 0550 print chr(12) 0560 exec XY(1,25) 0570 print "OPSTART........."; chr(29) 0580 open "GLVLRES",GLRES,BUF$,40*16*4 0590 get GLRES,1 : GAMLERES 0600 close GLRES 0610 loop 0620 COMMAND=key(0) 0630 if chr(COMMAND)="O" then exec UPDATER 0640 if chr(COMMAND)="B" then exec COPY 0650 if chr(COMMAND)="V" then exec DISPLAYVALGSTED 0660 if chr(COMMAND)="M" then exec DISPLAYMANDAT 0670 if chr(COMMAND)="S" then exec DISPLAYSTATUS 0680 if chr(COMMAND)="X" then exit 0690 if chr(COMMAND)="R" then exec RESET 0700 if chr(COMMAND)="T" then exec TEKNISKUHELD 0710 if chr(COMMAND)="D" then exec DAKS 0720 if chr(COMMAND)="%" then exec MESSAGE 0730 endloop 0740 proc XY(XX,YY) 0750 print chr(6); chr(95+XX-((XX-1) div 32)*64); chr(95+YY); 0760 endproc 0770 proc CRTXY(XX,YY) 0780 DUMMY=crt(6); DUMMY=crt(95+XX-((XX-1) div 32)*64); DUMMY=crt(95+YY) 0790 endproc 0800 data "A","Socialdemokratiet" 0810 data "B","Radikale Venstre" 0820 data "C","Konservative" 0830 data "E","Retsforbundet" 0840 data "F","Soc. Folkeparti" 0850 data "G","Listen For Medbest." 0860 data "H","Kvinder For Samarb." 0870 data "I","Soc. Arbejderparti" 0880 data "K","Kommunisterne" 0890 data "M","Centrum-demokraterne" 0900 data "Q","Kristelig Folkeparti" 0910 data "V","Venstre" 0920 data "Y","Venstresocialisterne" 0930 data "Z","Fremskridtspartiet" 0940 data "Å","Ålborg Listen" 0950 proc UPDATER 0951 exec XY(1,24) 0952 print chr(30); chr(128); "Valgstednr.: "; 0953 input STEDNR 0960 open "VLGST"+chr(STEDNR/10+48)+chr(STEDNR mod 10+48),VALGFIL,BUF$,70 0970 if VALGFIL<>0 then 0980 exec XY(1,25) 0990 print chr(30); chr(128); 1000 print "*** Open error"; VALGFIL; ", file 'VLGST81'"; chr(29) 1010 exit 1020 endif 1030 get VALGFIL,1 : RESULTAT 1040 if VALGFIL<>0 then 1050 exec XY(1,25) 1060 print chr(30); chr(128); 1070 print "*** Get error"; VALGFIL; ", file 'VLGST81' rec 1"; chr(29) 1080 close VALGFIL 1090 exit 1100 endif 1110 get VALGFIL,2 : VALGSTEDNR,VALGSTED$,SKREVET 1120 if VALGFIL<>0 then 1130 exec XY(1,25) 1140 print chr(30); chr(128); 1150 print "*** Get error"; VALGFIL; ", file 'VLGST81' rec 2"; chr(29) 1160 close VALGFIL 1170 exit 1180 endif 1190 close VALGFIL 1200 if INDEX$(VALGSTEDNR : 1)="X" then 1210 exec XY(1,25) 1220 print chr(30); chr(128); 1230 print "Valgsted nr"; VALGSTEDNR; " "; VALGSTED$; 1240 print " er allerede indlæst"; chr(7); chr(29) 1250 exit 1260 endif 1270 if SKREVET<>0 then 1290 print chr(30); chr(128); 1300 print "Valgsted nr"; VALGSTEDNR; " "; VALGSTED$; 1310 print " er ikke indtastet"; chr(7); chr(29) 1320 exit 1330 endif 1340 let INDEX$(VALGSTEDNR : 1)="X" 1350 for N=1 to 15 1360 let NYERES(VALGSTEDNR,N)=RESULTAT(N) 1370 let SUM(N)=SUM(N)+RESULTAT(N); SUM(16)=SUM(16)+RESULTAT(N) 1380 let NYERES(VALGSTEDNR,16)=NYERES(VALGSTEDNR,16)+RESULTAT(N) 1390 next N 1400 exec XY(1,25) 1410 print chr(30); chr(128); 1420 print "Valgsted nr"; VALGSTEDNR; " "; VALGSTED$; " opdateret"; chr(29) 1430 endproc 1440 proc DISPLAYVALGSTED 1450 print chr(12) 1460 print " Valgsted nr"; VALGSTEDNR; chr(144); VALGSTED$; chr(128); 1470 print " Gyldige stemmer :"; NYERES(VALGSTEDNR,16) 1480 print 1490 for N=1 to 4 1500 print VALGHEAD$(N) 1510 next N 1520 restore 710 1530 for N=1 to 15 1540 let PCT78=GAMLERES(VALGSTEDNR,N)/GAMLERES(VALGSTEDNR,16)*100 1550 let PCT81=NYERES(VALGSTEDNR,N)/NYERES(VALGSTEDNR,16)*100 1560 let AFVIGELSE=NYERES(VALGSTEDNR,N)-GAMLERES(VALGSTEDNR,N) 1570 let AFVIGELSEPCT=int(PCT81-PCT78) 1580 let PCT81=int(PCT81); PCT78=int(PCT78) 1590 read LISTE$,PARTI$ 1600 let GAMUD=GAMLERES(VALGSTEDNR,N); NYUD=NYERES(VALGSTEDNR,N) 1610 print chr(132); " 5"; chr(128); LISTE$; chr(132); " jj"; chr(128); 1620 print PARTI$; tab(32); chr(132); "jj"; chr(128); 1630 if GAMUD=-1 then 1640 print " -- --"; 1650 else 1660 print using "###### ####" : GAMUD,PCT78; 1670 endif 1680 print chr(132); "j 5"; chr(128); 1690 print using "###### ####" : NYUD,PCT81; 1700 print chr(132); "j 5"; chr(128); 1710 if GAMUD=-1 then 1720 print " -- --"; 1730 else 1740 print using "##### ####" : AFVIGELSE,AFVIGELSEPCT; 1750 endif 1760 print chr(132); "j" 1770 next N 1780 print VALGHEAD$(5) 1790 print chr(29) 1800 endproc 1810 proc COPY 1820 open "BACKUP",BACKUP,BUF$,2560 1830 if BACKUP<>0 then 1840 exec XY(1,25) 1850 print chr(30); chr(128); 1860 print "*** Open error"; BACKUP; ", File 'BACKUP'"; chr(29) 1870 exit 1880 endif 1890 put BACKUP,1 : NYERES 1900 if BACKUP<>0 then 1910 exec XY(1,25) 1920 print chr(30); chr(128); 1930 print "*** Put error"; BACKUP; ", file 'BACKUP' rec 1"; chr(29) 1940 close BACKUP 1950 exit 1960 endif 1970 put BACKUP,2 : INDEX$,SUM 1980 if BACKUP<>0 then 1990 exec XY(1,25) 2000 print chr(30); chr(128); 2010 print "Put error"; BACKUP; ", file 'BACKUP' rec 2"; chr(29) 2020 close BACKUP 2030 exit 2040 endif 2050 close BACKUP 2060 exec XY(1,25) 2070 print chr(30); chr(128); 2080 print "Backup kørt...."; chr(29) 2090 endproc 2100 proc RESET 2110 open "BACKUP",BACKUP,BUF$,2560 2120 if BACKUP<>0 then 2130 exec XY(1,25) 2140 print chr(30); chr(128); 2150 print "*** Open error"; BACKUP; ", file 'BACKUP'"; chr(29) 2160 exit 2170 endif 2180 get BACKUP,1 : NYERES 2190 if BACKUP<>0 then 2200 exec XY(1,25) 2210 print chr(30); chr(128); 2220 print "*** Get error"; BACKUP; ", file 'BACKUP' rec 1"; chr(29) 2230 close BACKUP 2240 exit 2250 endif 2260 get BACKUP,2 : INDEX$,SUM 2270 if BACKUP<>0 then 2280 exec XY(1,25) 2290 print chr(30); chr(128); 2300 print "Get error"; BACKUP; ", file 'BACKUP' rec 2"; chr(29) 2310 close BACKUP 2320 exit 2330 endif 2340 close BACKUP 2350 exec XY(1,25) 2360 print chr(30); chr(128); 2370 print "Reset kørt...."; chr(29) 2380 endproc 2390 proc DISPLAYMANDAT 2400 exec DHONT 2410 print chr(12) 2420 let ANTVALGST=0; ANTOPTALTE=0 2430 for N=1 to 40 2440 if INDEX$(N : 1)="X" then 2450 let ANTVALGST=ANTVALGST+1; ANTOPTALTE=ANTOPTALTE+STX(N) 2460 endif 2470 next N 2480 let STEMMEPCT=int(ANTOPTALTE/STX(41)*100) 2490 print " Der er optalt"; ANTVALGST; "valgsteder og "; 2500 print STEMMEPCT; "% af stemmerne er talt op." 2510 print 2520 restore 710 2530 for N=1 to 4 2540 print MANDHEAD$(N) 2550 next N 2560 for N=1 to 15 2570 read LISTE$,PARTI$ 2580 let PCT81=int(SUM(N)/SUM(16)*100) 2590 let ÆNDRMANDAT=MANDAT(N)-M78(N) 2600 print chr(132); " 5"; chr(128); LISTE$; chr(132); " jj"; chr(128); 2610 print PARTI$; tab(32); chr(132); "jj"; chr(128); 2620 print using "####### #### " : SUM(N),PCT81; 2630 print chr(132); " j 5"; chr(128); 2640 if M78(N)=-1 then 2650 print using "##### -- " : MANDAT(N); 2660 else 2670 print using "##### #### " : MANDAT(N),ÆNDRMANDAT; 2680 endif 2690 print chr(132); "j" 2700 next N 2710 print MANDHEAD$(5) 2720 exec XY(1,25) 2730 print chr(128); "Lodtræk : "; LODTR(1); LODTR(2); LODTR(3); 2735 print LODTR(4); LODTR(5); chr(29) 2740 endproc 2750 proc DHONT 2760 rem ---------- initialisering 2770 SUM(17)=SUM(2)+SUM(4) 2780 SUM(18)=SUM(3)+SUM(12) 2790 SUM(19)=SUM(5)+SUM(9)+SUM(13) 2800 SUM(20)=SUM(10)+SUM(11) 2810 for N=1 to 20 2820 MANDAT(N)=0 2830 NEDDEL(N)=SUM(N) 2840 next N 2850 for N=1 to 5 2860 LODTR(N)=0 2870 next N 2880 rem ---------- første fordelingsrunde 2890 for N=1 to 31 2900 ST=1 2910 for PNR=2 to 10 2920 if NEDDEL(X(PNR))>NEDDEL(X(ST)) then let ST=PNR 2930 next PNR 2940 MANDAT(X(ST))=MANDAT(X(ST))+1 2950 NEDDEL(X(ST))=SUM(X(ST))/(MANDAT(X(ST))+1) 2960 next N 2970 rem ---------- kontrol af lodtrækning 2980 for PNR=ST to 10 2990 if NEDDEL(X(PNR))=SUM(X(ST))/MANDAT(X(ST)) then LODTR(1)=1 3000 next PNR 3010 rem ---------- forbund B og E 3020 for N=1 to MANDAT(17) 3030 IX=2 3040 if NEDDEL(4)>NEDDEL(2) then IX=4 3050 MANDAT(IX)=MANDAT(IX)+1 3060 if N=MANDAT(17) and NEDDEL(4)=NEDDEL(2) then let LODTR(2)=1 3070 NEDDEL(IX)=SUM(IX)/(MANDAT(IX)+1) 3080 next N 3090 rem ---------- forbund C oq V 3100 for N=1 to MANDAT(18) 3110 IX=3 3120 if NEDDEL(12)>NEDDEL(3) then IX=12 3130 MANDAT(IX)=MANDAT(IX)+1 3140 if N=MANDAT(18) and NEDDEL(3)=NEDDEL(12) then let LODTR(3)=1 3150 NEDDEL(IX)=SUM(IX)/(MANDAT(IX)+1) 3160 next N 3170 rem ---------- forbund F, K og Y 3180 for N=1 to MANDAT(19) 3190 IX=5 3200 if NEDDEL(9)>NEDDEL(5) then IX=9 3210 if NEDDEL(13)>NEDDEL(IX) then IX=13 3220 MANDAT(IX)=MANDAT(IX)+1 3230 if N=MANDAT(19) then 3240 if NEDDEL(IX)=NEDDEL(5) and IX<>5 then let LODTR(4)=1 3250 if NEDDEL(IX)=NEDDEL(9) and IX<>9 then let LODTR(4)=1 3260 if NEDDEL(IX)=NEDDEL(13) and IX<>13 then let LODTR(4)=1 3270 endif 3280 NEDDEL(IX)=SUM(IX)/(MANDAT(IX)+1) 3290 next N 3300 rem ---------- forbund M og Q 3310 for N=1 to MANDAT(20) 3320 IX=10 3330 if NEDDEL(11)>NEDDEL(10) then IX=11 3340 MANDAT(IX)=MANDAT(IX)+1 3350 if N=MANDAT(20) and NEDDEL(10)=NEDDEL(11) then let LODTR(5)=1 3360 NEDDEL(IX)=SUM(IX)/(MANDAT(IX)+1) 3370 next N 3380 endproc DHONT 3390 proc MESSAGE 3400 exec XY(1,25) 3410 let MESSLINE$=" "; COUNT=1 3420 let MESSLINE$=MESSLINE$+MESSLINE$ 3430 print chr(128); chr(30); "Mess : "; chr(29) 3440 loop 3450 exec CRTXY(8+COUNT,25) 3460 CHAR=key(0) 3470 if CHAR=13 then exit 3480 if CHAR=>32 and CHAR<=125 then 3490 let MESSLINE$(COUNT : 1)=chr(CHAR); DUMMY=crt(CHAR); COUNT=COUNT+(COUNT<70) 3500 endif 3510 if CHAR=8 then let COUNT=COUNT-(COUNT>1) 3520 if CHAR=24 then let COUNT=COUNT+(COUNT<70) 3530 if CHAR=12 then 3540 let MESSLINE$="" 3550 print chr(29) 3560 exit 3570 endif 3580 endloop 3590 exec XY(5,2) 3600 if MESSLINE$<>"" then print chr(30); MESSLINE$ 3610 endproc 3620 proc DISPLAYSTATUS 3630 open "VALGSTD",VLGFIL,BUF$,30 3640 if VLGFIL<>0 then 3650 exec XY(1,25) 3660 print chr(128); chr(30); 3670 print "*** Open error"; VLGFIL; ", fil 'VALGSTD'"; chr(29) 3680 exit 3690 endif 3700 let ANTVALGST=0; ANTOPTALTE=0 3710 for N=1 to 40 3720 if INDEX$(N : 1)="X" then 3730 let ANTVALGST=ANTVALGST+1; ANTOPTALTE=ANTOPTALTE+STX(N) 3740 endif 3750 next N 3760 let STEMMEPCT=int(ANTOPTALTE/STX(41)*100) 3770 print chr(12); 3780 print " Status Der er optalt"; ANTVALGST; "valgsteder og "; 3790 print STEMMEPCT; "% af stemmerne er talt op." 3800 print chr(132); " 7#################################k 7########"; 3810 print "#########################k" 3820 for N=1 to 20 3830 get VLGFIL,N : VLGSTED$ 3840 print chr(132); " 5"; chr(128); 3850 print using "####" : N; 3860 print tab(13); VLGSTED$; tab(39); 3870 print chr(132); "j 5"; chr(128); 3880 get VLGFIL,N+20 : VLGSTED$ 3890 print using "####" : N+20; 3900 print tab(50); VLGSTED$; tab(75); chr(132); "j" 3910 next N 3920 print chr(132); " upppppppppppppppppppppppppppppppppz upppppppp"; 3930 print "pppppppppppppppppppppppppz" 3940 close VLGFIL 3950 for N=1 to 40 3960 if INDEX$(N : 1)="X" then 3970 if N<21 then exec XY(9,(N mod 21)+2) 3980 if N>20 then exec XY(45,(N mod 21)+3) 3990 print "*" 4000 endif 4010 next N 4020 print chr(29) 4030 endproc 4040 proc TEKNISKUHELD 4050 print chr(12) 4060 for N=1 to 8 4070 print 4080 next N 4090 print " "; 4100 print chr(132); "#7! 7#! 58! =05"; chr(34); "7 6#$ 58!" 4110 print " "; 4120 print chr(132); " 5 7! 7d 5"; chr(34); "5 5 2#4 7d ##!" 4130 print " "; 4140 print chr(132); " ! ##! ! ! ! !"; chr(34); "# "; chr(34); "! ! !" 4150 print " "; 4160 print chr(132); "5 5 5 5 7#! 5 k#4" 4170 print " "; 4180 print chr(132); "5 5 7#5 7! 5 j 5 '0 '0 '0 '0 " 4190 print " "; 4200 print chr(132); chr(34); "# ! ! ##! ##! ## " 4210 exec BOX(20,7,40,10,127) 4220 print chr(29) 4230 endproc tekniskuheld 4240 proc BOX(X1,Y,B,H,CH1) 4250 exec XY(X1-1,Y) 4260 print chr(132) 4270 for H0=X1 to X1+B+1 4280 exec XY(H0,Y) 4290 print chr(CH1) 4300 next H0 4310 for L=Y+1 to Y+H 4320 exec XY(X1+B-1,L) 4330 print chr(132); chr(CH1); chr(CH1); chr(128) 4340 next L 4350 for H0=X1+B to X1-1 step -1 4360 exec XY(H0,Y+H) 4370 print chr(132); chr(CH1) 4380 next H0 4390 for L=Y+H-1 to Y+1 step -1 4400 exec XY(X1-1,L) 4410 print chr(132); chr(CH1); chr(CH1); chr(128) 4420 next L 4430 endproc box 4440 proc DAKS 4450 print chr(12); chr(132) 4460 print 4470 print " "; 4480 print " **** ***** *** *** **********" 4490 print " "; 4500 print " ***** ****** *** *** *** ***" 4510 print " "; 4520 print " *** *** *** *** *** *** *** ***" 4530 print " "; 4540 print " *** *** *** *** *** *** *** ***" 4550 print " "; 4560 print " *** *** *** *** *** *** ***" 4570 print " "; 4580 print " *** *** *** *** *** *** *** " 4590 print " "; 4600 print " *** *** *** *** *** *** *** " 4610 print " "; 4620 print " *** *** ************ ****** ***********" 4630 print " "; 4640 print " *** *** *** *** *** *** *** " 4650 print " "; 4660 print " *** *** *** *** *** *** ***" 4670 print " "; 4680 print " *** *** *** *** *** *** ***" 4690 print " "; 4700 print " *** *** *** *** *** *** ***" 4710 print " "; 4720 print " *** *** *** *** *** *** ***" 4730 print " "; 4740 print " ****** *** *** *** *** *** *** " 4750 print " "; 4760 print " **** *** *** *** *** *********" 4770 print chr(128) 4780 print " DATAAFDELINGEN ved AALBORG KOMMUNALE SKOLEVÆSEN." 4790 print 4800 print chr(128); " "; 4810 print " Databehandlig af valgresultatet - Kommunevalget 1981." 4820 print chr(128); " "; 4830 print " Udført af elever fra datalærehold på Sofiendalskolen." 4840 print chr(128); " "; 4850 print " Udført på 'RC702 piccolo' microdatamat" 4860 print chr(29) 4870 endproc daks