Revistas en papel
 Commodore Amiga World Nº0 - 1989
Anterior
MenĂº
Logotipo

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

PEQUEÑAS UTILIDADES Amiga World

De todos es conocido la enorme potencia del
Amiga Basic del Amiga. De todas formas,
gran parte de funciones disponibles en el
sistema operativo no lo están al usuario de
este intérprete. Con este pequeño capítulo se
pretenden solucionar en lo posible esos
problemas, en la mayoría de los casos en
forma de pequeñas rutinas, que se pueden
colocar dentro de los programas en forma de
SUB.
En esta ocasión se comentarán dos rutinas
que nos facilitarán la comunicación usuario
programa. Esto, que visto en programas
comerciales es notablemente cómodo,
desde el punto de vista de los
programadores se complica bastante...

Por Fernando Marcos

ACCEPT

La operación de entrada-salida más común en un programa suele ser la entrada por teclado de las más diversas informaciones. Por norma general, esta operación se suele efectuar con el comando INPUT. Esto tiene sus ventajas y sus inconvenientes. Como primera ventaja, es la disponibilidad inmediata y la facilidad de uso. Como desventajas, está la imposibilidad de controlar el texto que se está tecleando. Otra desventaja, aunque ya de índole estético, es que el cursor del AmigaBasic es HORRIBLE.

Con la rutina ACCEPT se podrán definir con exactitud qué tipo de datos deben ser tecleados. La sintaxis es muy sencilla:

     ACCEPT Número de Caracteres,NUM.

Número de caracteres es el número máximo de éstos que podrá tener el texto. Si se llega al límite y se sigue tecleando, los caracteres sobrantes se ignoran.

Num es otro número que indica si la entrada es sólo de números o de números y caracteres. Si Num es uno, sólo podrán ser tecleados números, los caracteres alfabéticos se ignoran.

Al pulsar RETURN se devuelve el texto tecleado en la variable TE$. Si Num indica campo numérico, el valor es devuelto en la variable numérica "TE#" (doble precisión).

Programa: Accept.bas
'Rutina ACCEPT                                                      .300
'(C)F.Marcos 1988                                                   .119
'(C)Commodore World                                                 .529
SUB accept (char%,num%) STATIC                                      .220
SHARED te$,te#:te$=""                                               . 98
x%=POS(0):y%=CSRLIN                                                 .848
getakey:                                                            . 15
LOCATE y%,x%:PRINT te$;:COLOR 0,3:PRINT " ";:COLOR 3,0:PRINT " ";   .452
a$="":WHILE a$="":a$=INKEY$:WEND                                    .580
IF a$=CHR$(13) THEN GOTO endacc                                     .  7
IF a$=CHR$(8) THEN GOTO Delt                                        .260
IF num%<>0 THEN                                                     .633
IF a$<>"." THEN                                                     .405
IF a$<"0" OR a$>"9" THEN getakey                                    .534
END IF                                                              .654
END IF                                                              .654
IF a$<" " THEN getakey                                              .747
IF LEN(te$)=> char% THEN getakey                                    .699
te$=te$+a$:GOTO getakey                                             .104
Delt: IF LEN(te$)=0 THEN GOTO getakey                               . 61
te$=LEFR$(te$,LEN(te$)-1)                                           .976
GOTO getakey                                                        .725
endacc: LOCATE y%,x%:PRINT te$;""                                   .747
IF num%<>0 THEN te#=VAL(te$)                                        .138
COLOR 1,0                                                           .496
END SUB                                                             .214
Numero de lineas: 26
            

REQUEST

Esta es otra capacidad del sistema vedada al programador en Amiga-Basic. Un requester es una pequeña ventana en la que se pide permiso para efectuar una operación determinada, que se otra forma podría ser peligrosa, sin tener que recurrir a INPUT o ACCEPT (visto arriba), ya que la respuesta se efectúa con el ratón.

La sintaxis es muy sencilla:

     SUB "Pregunta", "Respuesta 1", "Respuesta 2".

Entonces aparecerá una ventana en la que se indicará la pregunta colocada en primer lugar, y debajo dos "botones" con una de las posibles respuestas cada uno. Con el ratón deberás seleccionar una de las dos, indicándole al programa la operación a efectuar.

La variable FUNC devuelve 1 si se escogió la primera respuesta y 2 si se escogió la segunda.

Un ejemplo que ilustra su uso:

     REQUEST "Quieres cenar conmigo?", "¡Sí!", "Pierdete!".
     IF FUNC=1 THEN.....        
Programa: request.bas
'Rutina REQUEST                                                          .192
'(C)F.Marcos 1988.                                                       .156
'(C)Commodore World 1988.                                                .813
'REQUEST "cabecera","opcion1","opcion2"                                  .522
'Salida: FUNC (=1,=2)                                                    .443
SUB Request (req$,op1$,op2$) STATIC                                      .899
SHARED func                                                              .767
WHILE MOUSE(0)<>0:WEND                                                   .435
WINDOW 3,"      Program Request",(70,70)-(300,110),18                    . 72
COLOR 2,3:CLS                                                            .637
req$=LEFT$(req$,25)                                                      .746
PRINT:PRINT SPC((28-LEN(req$))/2)req$                                    .255
LINE (16,21)-(105,34),1,bf                                               .530
LINE (127,21)-(216,34),1,bf                                              .119
LINE (15,20)-(106,35),2,b                                                .174
LINE (126,20)-(217,35),2,b                                               .258
COLOR 0,1:PRINT                                                          .618
op1$=LEFT$(op1$,10):op2$=LEFT$(op2$,10)                                  .224
PRINT PTAB(18+(85-8*LEN(op1$))/2)op1$;PTAB(129+(85-8*LEN(op2$))/2)op2$   .470
WaitForMouse:                                                            .286
WHILE MOUSE(0)=0:WEND                                                    .326
x=MOUSE(1):y=MOUSE(2)                                                    .238
IF y<21 OR y>34 THEN GOTO WaitForMouse                                   .802
IF x<16 OR x>217 THEN GOTO WaitForMouse                                  .498
IF x<106 THEN func=1:GOTO EndReq                                         .544
IF x>125 TEHN func=2 ELSE GOTO WaitForMouse                              .567
EndReq:                                                                  .780
WINDOW CLOSE 3                                                           .238
END SUB                                                                  .214
Numero de lineas: 29

Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal