Request Off Break Off Amos Lock Dim VOTOS(99) : Rem Para almacenar los resultados de la votaci�n Global VOTOS() Dim MASALTA(99,3) : Rem PUNTUACION MAS ALTA Global MASALTA() Dim AUXILIAR(99,1) : Rem Array auxiliar para ordenar Global AUXILIAR() Dim PARTICIP$(99,1) : Rem Nombres de los participantes Global PARTICIP$() Dim CAT$(13) : Rem Nombres de las Categor�as Global CAT$() NUMCAT=13 : Rem N�mero de categor�as Global NUMCAT Dim PP(3) : Rem Numero de participantes premiados Global PP() Global PRIMERO,SEGUNDO,TERCERO Global ERR Rem PARA CONTROLAR LOS ERRORES Rem ******************************************************* Rem **** LECTURA DE LOS ARCHIVOS GENERALES DE VOTACION **** Rem ******************************************************* Proc CATEGORIAS If Exist("Votacion:Votantes/") Dir$="Votacion:Votantes/" Else End End If If Exist('VOTOS.'+CAT$(1)) Open In 1,'VOTOS.'+CAT$(1) NTDVT=Lof(1)/3 Close 1 Else End End If For C=1 To 13 Reserve As Work C,NTDVT*3 NAME$="Votos."+CAT$(C) Bload NAME$,Start(C) Next Rem *************************************** Rem **** COMIENZO DEL RECUENTO PUBLICO **** Rem *************************************** Unpack 16 To 7 : Rem pantalla de las letras iff Bank Swap 16,17 Proc SELECCION_SCREEN : Rem PANTALLA DE SELECCION DE CATEGORIA Repeat Rem **** INICIALIZACION DE LOS VOTOS **** For VT=0 To 99 VOTOS(VT)=0 MASALTA(VT,1)=0 MASALTA(VT,2)=0 MASALTA(VT,3)=0 Next Rem **** SELECCION DE CATEGORIA **** Proc SELECCION SEL=Param Proc LEEPARTICIPANTES[SEL] PARTICIPANTES=Param If PARTICIPANTES>0 Proc TRAZAPANTALLA[PARTICIPANTES] Clear Key Wait Key Sam Bank 16 Sam Loop On Sam Play 1 For I=1 To NTDVT Proc VOTO_ACTUAL[I-1,SEL] : Rem TOMAMOS EL VOTO ACTUAL Proc _NOTEPASES[PARTICIPANTES] Proc RECUENTO[PARTICIPANTES] : Rem ACTUALIZAMOS LAS BARRAS For J=1 To 5 Wait Vbl Next Next Sam Play 2 Sam Loop Off Clear Key Wait Key Fade 1,4095,4095,4095,4095,4095,4095,4095,4095 Wait 30 Fade 1 Wait 15 Proc _ORDENACION[PARTICIPANTES] Proc LISTAR_CAMPEONES[PARTICIPANTES,SEL] End If Until SEL=14 Bank Swap 16,17 End Procedure LEEPARTICIPANTES[CAT] NUMPART=0 If CAT<=NUMCAT NAME$=CAT$(CAT)+".participantes" Trap Dir$="VOTACION:PARTICIPANTES/" If Not(Errtrap) If Exist(NAME$) Set Input 10,-1 Open In 1,NAME$ NUMPART=0 While Not(Eof(1)) Inc NUMPART Input #1,PARTICIP$(NUMPART,0) Input #1,PARTICIP$(NUMPART,1) Wend Close 1 End If End If End If End Proc[NUMPART] Procedure TRAZAPANTALLA[NUMPART] Auto View Off Default Palette $FFF,$0,$F0,$F00 Screen Open 0,640,512,4,Hires+Laced Curs Off : Cls 0 : Flash Off Colour 3,$F00 Auto View On ALTO=(500/NUMPART) : Rem C�lculo de la altura Ink 1 Y=6-ALTO For P=0 To NUMPART Y=Y+ALTO Draw 20,Y To 620,Y Next For X=20 To 620 Step 50 Draw X,6 To X,Y Next End Proc Procedure CATEGORIAS Restore NOMBRES For CT=1 To 13 Read CAT$(CT) Next NOMBRES: Data "AmigaDemo","Amiga64k","Amiga4k" Data "Grafico2D","Grafico3D" Data "Modulos","Multi-Canal" Data "PcDemo","Pc64k","Pc4k" Data "Fast2d","FastMusic" Data "HumanDemo" End Proc Procedure SELECCION_SCREEN Hide On Unpack 18 To 1 Rem en realidad el 377 es un 277 Limit Mouse 128,42 To 377,287 Reserve Zone 14 Restore ZONAS For Z=1 To 13 Read XI,YI,XF,YF Set Zone Z,XI,YI To XF,YF Next Set Zone 14,0,0 To 1,1 ZONAS: Data 119,236,240,249 Data 29,182,170,195 Data 12,48,175,61 Data 58,90,122,107 Data 228,102,292,119 Data 15,123,212,136 Data 95,152,295,165 Data 34,214,120,231 Data 174,201,282,214 Data 146,74,277,91 Data 170,27,261,44 Data 34,13,154,26 Data 300,0,640,256 End Proc[SEL] Procedure SELECCION Screen 1 Screen To Front 1 Show On Fade 2,1,4095,257,258,532,533,789,805,806,1063,1080,1097,1385,1386,1675,1692,0,$F00,$F40,$F80 Wait 30 Repeat MZ=Mouse Zone Until Mouse Key=1 and MZ>0 Fade 2 Wait 30 Hide On End Proc[MZ] Procedure VOTO_ACTUAL[OFFSET,CATEGORIA] S=Start(CATEGORIA)+OFFSET*3 PRIMERO=Peek(S) SEGUNDO=Peek(S+1) TERCERO=Peek(S+2) End Proc Procedure _NOTEPASES[NUMPART] If PRIMERO<1 or PRIMERO>NUMPART Then PRIMERO=0 If SEGUNDO<1 or SEGUNDO>NUMPART Then SEGUNDO=0 If TERCERO<1 or TERCERO>NUMPART Then TERCERO=0 End Proc Procedure RECUENTO[NUMPART] MASALTA(PRIMERO,1)=MASALTA(PRIMERO,1)+1 MASALTA(SEGUNDO,2)=MASALTA(SEGUNDO,2)+1 MASALTA(TERCERO,3)=MASALTA(TERCERO,3)+1 VOTOS(PRIMERO)=VOTOS(PRIMERO)+3 VOTOS(SEGUNDO)=VOTOS(SEGUNDO)+2 VOTOS(TERCERO)=VOTOS(TERCERO)+1 ALTO=(500/NUMPART) Ink 2 Y1=7+ALTO*(PRIMERO-1) Y2=7+ALTO*(SEGUNDO-1) Y3=7+ALTO*(TERCERO-1) X1=20+VOTOS(PRIMERO) X2=20+VOTOS(SEGUNDO) X3=20+VOTOS(TERCERO) If PRIMERO>0 If X1<621 Ink 2 Bar 20,Y1 To X1,Y1+ALTO-2 Else Ink 4 Bar 20,Y1 To 620,Y1+ALTO-2 End If End If If SEGUNDO>0 If X2<621 Ink 2 Bar 20,Y2 To X2,Y2+ALTO-2 Else Ink 4 Bar 20,Y2 To 620,Y2+ALTO-2 End If End If If TERCERO>0 If X3<621 Ink 2 Bar 20,Y3 To X3,Y3+ALTO-2 Else Ink 4 Bar 20,Y3 To 620,Y3+ALTO-2 End If End If End Proc Procedure _ORDENACION[NUMPART] For P=1 To 99 AUXILIAR(P,0)=VOTOS(P) AUXILIAR(P,1)=P Next For I=1 To NUMPART-1 _TOP=AUXILIAR(I,0) _WIN=I For J=I+1 To NUMPART If AUXILIAR(J,0)>_TOP _TOP=AUXILIAR(J,0) _WIN=J End If Next Swap AUXILIAR(_WIN,0),AUXILIAR(I,0) : Rem Puntuaci�n Swap AUXILIAR(_WIN,1),AUXILIAR(I,1) : Rem Posici�n de participante Next PI=1 Repeat PF=PI While AUXILIAR(PF+1,0)=AUXILIAR(PF,0) and PFPI Proc DESEMPATE[PI,PF,1] End If PI=PF+1 Until PI>NUMPART End Proc Procedure DESEMPATE[POSI,POSF,PUESTO] For I=POSI To POSF-1 _TOP=MASALTA(AUXILIAR(I,1),PUESTO) _WIN=I For J=I+1 To POSF If MASALTA(AUXILIAR(J,1),PUESTO)>_TOP _TOP=MASALTA(AUXILIAR(J,1),PUESTO) _WIN=J End If Next Swap AUXILIAR(_WIN,1),AUXILIAR(I,1) : Rem POSICION Next If PUESTO<3 PI=POSI Repeat PF=PI While MASALTA(AUXILIAR(PF+1,1),PUESTO)=MASALTA(AUXILIAR(PF,1),PUESTO) and PFPI Proc DESEMPATE[PI,PF,PUESTO+1] End If PI=PF+1 Until PI>POSF End If End Proc Procedure MOSTRAR_PREMIADOS[NPART] For I=0 To 3 PP(I)=0 Next POSICION=1 PREMIO=1 While POSICION<4 and POSICION=1 PP(3)=PP(2) PP(2)=0 End If If PP(1)>2 PP(3)=0 End If If PP(2)>1 PP(3)=0 End If End Proc Procedure _TOMAR[POS] NDPE=1 While AUXILIAR(POS,0)>0 and AUXILIAR(POS,0)=AUXILIAR(POS+1,0) and MASALTA(AUXILIAR(POS,1),1)=MASALTA(AUXILIAR(POS+1,1),1) and MASALTA(AUXILIAR(POS,1),2)=MASALTA(AUXILIAR(POS+1,1),2) Inc POS Inc NDPE Wend End Proc[NDPE] Procedure LISTAR_CAMPEONES[NUMPART,CATEGORIA] Unpack 14 To 2 Unpack 15 To 3 Unpack 15 To 4 Proc MOSTRAR_PREMIADOS[NUMPART] Restore TITULOS Gr Writing 8 Ink 1 Proc _TEXTO[0,CAT$(CATEGORIA)] For I=3 To 1 Step -1 POSICION=0 For J=0 To I-1 POSICION=POSICION+PP(J) Next Read NORMAL$ Read COMP$ Screen Copy 3,0,35,640,256 To 4,0,35 If PP(I)>0 If PP(I)>1 Proc _TEXTO[35,COMP$] Else Proc _TEXTO[35,NORMAL$] End If For J=1 To PP(I) Sam Play 1 Sam Loop On Clear Key Wait Key Screen Copy 3,0,70,640,256 To 4,0,70 Proc _TEXTO[70,PARTICIP$(AUXILIAR(POSICION+J,1),0)] Proc _TEXTO[110,PARTICIP$(AUXILIAR(POSICION+J,1),1)] Proc _TEXTO[150,Str$(AUXILIAR(POSICION+J,0)*5)+" PUNTOS."] Sam Play 2 Sam Loop Off Next Else Proc _TEXTO[35,NORMAL$] Proc _TEXTO[70,"Ha Quedado Desierto"] End If Clear Key Wait Key Next Screen Close 3 Screen 4 Fade 1 Wait 15 Screen 2 Fade 1 Wait 15 Screen Close 2 Screen Close 4 TITULOS: Data "Tercer puesto:","Tercero Compartido:" Data "Segundo puesto:","Segundo compartido:" Data "Primer puesto:","Primero compartido:" End Proc Procedure _TEXTO[Y,TXT$] X=320-16*Len(TXT$) For I=1 To Len(TXT$) Proc _COPYFONT[X,Y,Mid$(TXT$,I,1)] X=X+32 Next End Proc Procedure _COPYFONT[XX,YY,L$] NDF=Instr('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ":/.',Upper$(L$)) If NDF>0 X=32*((NDF-1) mod 10) Y=32*((NDF-1)/10) Screen Copy 7,X,Y,X+32,Y+32 To 4,XX,YY,%11100000 End If End Proc