Page 141

--------------...sloftware Vediamo come si utilizzano questi nuovi comandi.

OD Error Goto La sintassi di questo comando è la seguente POKE err,line

X USR add

dove add è l'indirizzo della routine, err è un numero tra O e 27 che esprime il tipo di errore (vedi il manuale dello Spectrum, appendice B) e fine è il numero di riga al quale si vuole far saltare il programma quando si trova in presenza dell'errore in questione. Così, ad esempio POKE 14,100 X USR add

comanda al computer di saltare alla linea 100in presenza di un errore del tipo "E Out of data". Per disabilitare un ON ERROR precedente è sufficiente specificare O come numero di riga, quindi POKE 14,0 X USR add Listato

disabilita il comando dell'esempio precedente e fa sì che il computer in seguito si comporti normalmente (almeno nel caso dell'errore di tipo E). Un'ulteriore possibilità è quella di comandare al computer di "ignorare" semplicemente un errore, passando all'istruzione successiva. Ciò si ottiene specificando un .numero di linea uguale a 65535. Ad esempIO POKE 21, 65535 X USR add

comanda al computer di ignorare gli errori del tipo "L BREAK into program" (e quindi costituisce in pratica una sorta di protezione, dal momento che impedisce di fermare un programma premendo il tasto di BREAK). ON ERROR GOSUB La sintassi è identica POKE err,line

X USR add

(ovviamente add è l'indirizzo della routine ON ERROR GOSUB ed è diverso dal pre-

2

*********************** ~~!~ 3 REM 4. REM 5 REM 6

REM

*

RUBRICR

TELEFONICA

************************

*

*

15 DEF FN i la$,bS,n) =LEN la$+l RND n*USR ins)) 20 CLS : PRINT .. PIJBPICR TELE lifi1l1. ..; n;" NOM I PRn INT ..In s t 30 a Ca c e l l a_ .. s E: l"is c i R i c~ .-ca L_ i b$

--4!11&I!!I, III!!!plI!!aIl!I!!IN"T!!I!III~#

Rt1INARE 50 IF

o

o o o

1i .. -----

o

p~r

TE

INKEY$="I"

THEN

80 TO 10

60

IF

INKEY$="R"

THEN

130 TO

20

70

IF

INKEY$="L"

THEN

(;0 TO

30

80

IF

INKE\' $ =" C" THEN

80

TO

40

85

IF

INKEY$="!ZJ"

80

TO

50

90 80 TO 50

THEN

100 RE M NlIl!!i·.·.-.lli~lU~j!:'l.r1.1llI 110 PRINT RT 2;0; FLF'lSH 1; "Inse n s c i ": BEE P •Al , 30 : PR INT RT 4,0 120 INPUT "NOME e NUMERO TELEFO NICO"'; LINE b$ 130 IF bS="" THEN 80 TO 20 140 LET a$=a$+bS+CHR$ 13: LET n =n +1 150 j:'RINT b$ 160 GO TO 120 200 f=;:EM ••••• ----, 210 PRINT RT 2,10; FLRSH 1.;"Ric €I"ca": BEEP .2,30: PRINT AT 4,0 220 PRINT : INPUT "Ch iave P€ l" l a ,- i c e l" c a'" L INE b $ 230 IF b$="" THEN 130 TO 20 240 LET fino::l=0 25e LET K =FN i (a $, b S, f in d + 1) I F NOT ~ THEN 130 TO 280 260 LET ~ = ~ -1 : IF a $ (K) < > CHR $ 1 3 THEN 130 TO 260 265 LET f in o::! =FN i (a $ .' CHR $ 13 .. lo:. + 1) 270 PRINT aS(Io:.+lTO find);: GO TO 250 280 IF NOT fino::! THEN PRINT INVE RSE l;bS; INVERSE 0;" NON E' IN

MCmicrocomputer

n, 39 - marzo

1985

cedente). In questo caso l'errore provoca l'esecuzione di una subroutine, e quando viene incontrato un RETURN il controllo torna all'istruzione successiva a quella che ha causato l'errore. Anche in questo caso è possibile usare O o 65535 come numeri di riga (rispettivamente per disabilitare un ON ERROR precedente o per ignorare completamente un errore), ma gli effetti sono identici a quelli specificati per l'istruzione ON ERROR GOTO.

Restore Abbiamo visto che è possibile ottenere un comportamento diverso per ciascuno dei 28 tipi di errore riconosciuti dal Basic Sinclair (compreso "l'errore" O, OK); ciò è

RUBRICR" , 290 GO TO 220 300 REM .MI1I 310 PRINT RT 2,18; FLRSH l;"Lis ta": BEEP .2,30: PRINT F'lT4,0 320 INPUT "": Pr-UNT a $ 330 PRINT Ul; TRB 9; INVERSE 1;" PREMI UN TRSTO" 340 PRU5E 0: INPUT 130 TO 2e 400 REM 410 PRINT AT 2,24; FLRSH l,;"Can c € l la": BEEP .2,,30: PR INT AT 4,0 420 PRINT : INPUT "Nominativo d a can,:.;;llal"~"" LINE b$ 430 IF b$="" THEN GO TO 20 440 LET fino::!=0 450 LET K =FN i (.;l $ " b $, fin o::! +1j I F NOT k THEN 130 TO 4ge 455 LET l\= l\-1: IF a $ (l\)< > CHR $ 1 3 THEN GO TO 455 460 LET fin o::! =FN i (a $, CHR $ 13, l\+ 1): PR INT a $ (l\+ 1 TO f in d) .; 465 PRINT U1; TRB 7.; FLRSH 1.;"CO NFERI'"11?"; FLRSH 0;" (:5/N) " 470 IF I NK EY $ < > " :5i. R N D IN K EY $ < > "N" THEN 130 TO 470 475 INPUT "" 480 IF INKEY$="S" THEN LET n=n1:

L ET

a

$

=a $ (

T O l\)

+a

$ (f i

n o::! + 1

TO

): LET f in d = l\: PR INT "r!I:1lfliFlWlI3jJ r!l" ,;: 6EEP .4,40 485 PRINT : 130 TO 450 490 IF NOT find THEN PRINT INVE RSE l;b$; INVERSE 0;" NON E' IN RUBRICR'" 495 130 TO 420 500 REM •• 510 BEEP .1,30: PRINT Ul;RT l,l 5; FLRSH 1; "TERt'1INARE" 52lZlPR INT .'," ," \,.JUO I :5ALIJARE IL PROGRRt-1MR""" E I DAT I ? (:5/N) " 53121 IF INKEY S < > "S" RND INI'<.E'·( S <> "N" THEN 80 TO 530 540 IF INKE'{ $ =":5" THEN INPUT "" : SA\..JE"RUBR IeA" L INE 95e: 5AVE " in s t .-in ':l'' COCoE in s ,148 550 CLS : STOP '300 REM -" •j""'--=--• •••- ...y_••.••• --,.p... 910 CLERR 31999~LET~s=32e00 92e LET a$=CHR$ 13: LET n=0 950 POKE 23658.8: POKE 23609,30 960 LOAD .... CODE: in:;

97e GO TO 20

141

Profile for ADPware

039 MCmicrocomputer  

Marzo 1985

039 MCmicrocomputer  

Marzo 1985

Profile for adpware
Advertisement