Page 139

4

cura di Maurizio Bergami

1

Anche questo mese abbiamo una rubrica nutrita; prima di partire con i programmi vogliamo però rivolgervi una preghiera. Per cortesia, se decidete di mandare qualcuno dei vostri lavori in redazione, scrivete la lettera, l'articolo di accompagnamento, e tutto quello che altro volete, con la macchina da scrivere e NO N con il Tassword Il in unione alla ZX printer!! Abbiate pietà della nostra povera vista, già affaticata dalle troppe ore trascorse davanti a monitor e TV di tutti i tipi ... Va da sé che anche l'Alphacom o la Seikosha GP 50 sono da evitare a tutti i costi, mentre una stampante normale da 80 colonne va benissimo; se proprio non sapete come fare, sempre meglio la normale stilografica (scrivere chiaramente, per favore) che degli obbrobri a 64 colonne in caratteri formato Lilliput. Finita la supplica, possiamo incominciare ...

I

Instring/Rubrica telefonica ON ERROR GOTO

di Francesco Balena - Bari Vi invio tre programmi per la rubrica dedicata al software dello Spectrum. Più precisamente si tratta di: l) una routine in linguaggio macchina per implementare la funzione INSTRING (o SUBSTRING), assente nel Basic Sinclair.

2) RUBRICA TELEFONICA, un semplice archivio che utilizza la precedente routine per la ricerca veloce dei dati. 3) Una routine in linguaggio macchina che simula l'istruzione ON ERROR GOTO (e ON ERROR GOSUB), anch'essa assente sullo Spectrum.

Instring

La funzione INSTRING seguente sintassi:

ha di solito la

INSTRING (a$,b$)

e restituisce un numero intero positivo che indica la posizione della stringa b$ all'interno della stringa a$, oppure zero se a$ non contiene b$. Così, ad esempio INSTRING (" MCmicrocomputer", "com")

Una delle funzioni tradizionalmente assenti nel Basic degli home ed i personal economici è la INSTRING, che serve a verificare se una certa stringa è contenuta in un'altra. Tale assenza è in parte giustificata dal fatto che è possibile simularla in Basic, ma nel caso particolare del Basic Sinclair, di cui è proverbialmente nota la lentezza, si tratta di una soluzione inaccettabile nella maggior parte dei casi. La routine in linguaggio macchina che vi presento rimedia a questa mancanza ed è ovviamente velocissima: non è molto lunga e, cosa fondamentale, è perfettamente rilocabile. Non si deve fare altro che introdurre il programma di caricamento esadecimale (listato l) e dare il RUN, se non ci sono errori apparirà il messaggio "Start Tape, ... " e potrete salvare su nastro la routine sotto forma di file di byte, per ricaricarla in un secondo momento ed utilizzarla nei vostri programmi.

restituisce

il valore 8, mentre

INSTRING ("MCmicrocomputer",

"COM")

restituisce il valore O. Esiste anche una versione più completa dalla stessa istruzione: INSTRING (a$,b$,n)

che ricerca la stringa b$ a partire dal carattere ennesimo di a$, ed è molto utile quando la sottostringa è contenuta più di una volta nella stringa principale. Ad esempio INSTRING ("una casa rosa","sa",1)

= 7

mentre INSTRING ("una casa rosa","sa",8) = 12 la funzione di INSTRING che ho preparato è del tipo completo, a tre parametri, anche se la sua sintassi è leggermente più complessa: LEN (a$

+ (b$ AND 8 X

USR ins))

dove "ins" rappresenta l'indirizzo al quale abbiamo collocato la nostra routine, che, lo ricordiamo, è rilocabile. Ad esempio possiamo scrivere: LEN ("una casa rosa" ins))

+ ("sa"

AND 8 X USR

Listato 1

~ ~~~ :3 REM 4 REM S REt-l

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

* ** HEX LOADER ************************

*

** *

6 REM 7 REM 2121DEF FN h(b$)=CODE b$-48-7*( CCIDE b$>S7) 3121CLEAR 31999: LET add=32000 4121FOR K=l!J!JTO 190 5TEP 10: R EAD a$: READ sum se FOR J=l TO LEN as 5TEP 2 6121LET byt~=16*FN h(aS(J))+FN h(a$(J+l)) 70 POKE add .. byt€: LET add=add+ 1

8121LET S IJm =S LIm - b':.l t e: NE~"T ,i 85 IF sum < >e THEN PRINT "ERROR E IN RIGA ..k: BEEP 1,3121: STOP '::ltd NEXT k

MCmicrocomputer

n. 39 - marzo 1985

':15:3AVE "i n s t f i n '3"CODE 32eel2l,1 12 1iZ1eCoATA "CD9'::llE78S1CA21212AeSED4. :3A15CCDF12S",212118 11121DATA "EÒ4.3A75CED53A55CCDF12 SES22A35CED",239121 12121DATA "5SA75C7AB3212112151211eeeI2l1 62AED58A15C" ,1336 13121DATA "ESC5E3C1A7EDo4.23I21e51211121 ee12l181804.o4.4D'' ,1569 14121DATA "76S128122AA15Cl'::lED5BA 55C lASE2;31e" ,1532 15121DATA "2:3eS78S12I21F2CD822ACDS 22AEFAI2I3;3C9" ,2123 16121CoATA "C5E5E52AA75CE3E32B7CB SE3281121eB78" ,2172 . 17121DATA "B1281A13231A8E28EEE1E lCl18D2E1El" ,211:3 18121DATA ''C1EDS8A35CR7ED5223404.o4. D18C9E1E1E101!J0" ,2:343 1ge DATA "0018Cl",217

139

Profile for ADPware

039 MCmicrocomputer  

Marzo 1985

039 MCmicrocomputer  

Marzo 1985

Profile for adpware
Advertisement