home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta1.arc / SPARTA10.DOC < prev    next >
Text File  |  1999-02-20  |  7KB  |  1 lines

  1. Odr❎bn⇧ grup❎ procedur stanowi⇧ podprogramy zarz⇧dzaj⇧ce zmiennymi¢③rodowiskowymi.¢¢NUMENV¢¢Procedura NUMENV zwraca warto③⇨ zmiennej o numerze danym w A i ustalonym¢wcze③niej wskaniku BUFADR. Warto③⇨ zmiennej zapisywana jest w BUF580.¢¢¢NUMber of ENVironment¢¢         org $BA89¢¢bufadr   equ $15¢buf580   equ $0580¢envnum   equ $0C53¢¢jext_off equ $07F4¢envfind  equ $BAFF¢genvfadr equ $BB58¢senvmem  equ $BB69¢¢NUMENV   sta envnum¢         jsr senvmem¢         ldy #$FF¢         bne cnumenv¢¢Numer zmiennej zapisywany jest w ENVNUM. Procedura SENVMEM (opisana poniəej),¢dokonuje prze ⇧czenia bankw pami❎ci RAM (je③li jest to konieczne) i ustala¢wska⇩nik dobufora zmiennych ③rodowiskowych BUFADR. Na koniec NUMENV ustawia w¢akumulatorze warto③⇨ przesuni❎cia i skacze w ③rodek GETENV.¢¢¢GETENV (GET ENvironment Variable)¢¢GETENV zwraca w BUF580 ($0580) warto③⇨ zmiennej o nazwie wskazanej rejestrami¢AX. Ustawiony bit N rejestru znacznikw sygnalizuje b ⇧d.¢¢Najpierw, przy uəyciu procedury GENVFADR, pobierana jest nazwa zmiennej, a jej¢numer ustalany jest na zero. Skok do SENVMEM prze ⇧cza banki pami❎ci RAM i¢ustawia wska⇩nik BUFADR. Nast❎pnie zmienna jest wyszukiwana przez procedur❎¢ENVFIND i przepisywana do bufora BUF580. Przed p❎tl⇧ przepisuj⇧c⇧, od etykiety¢CNUMENV, nast❎puje wej③cie z procedury NUMENV.¢¢         org $BA93¢¢GETENV   jsr genvfadr¢         lda #$00¢         sta envnum¢         jsr senvmem¢         jsr envfind¢         bmi error¢cnumenv  ldx #$00¢loop     iny¢         lda (bufadr),y¢         beq error¢         sta buf580,x¢         inx¢         cmp #$9B¢         bne loop¢         dec envnum¢         bpl cnumenv¢         lda #$00¢         jmp jext_off¢error    lda #$FF¢         jmp jext_off¢¢Po p❎tli nast❎puje zmniejszenie numeru zmiennej ③rodowiskowej ustawionego przez¢NUMENV (GETENV ustawia ten numer na zero) i, je③li jest on ujemny, procedura¢koczy dzia anie przywracaj⇧c wej③ciowy uk ad bankw pami❎ci.¢¢¢PUTENV (PUT ENvironment Variable)¢¢¢Procedura ustawia (np.set s=3) lub kasuje (set s) zmienn⇧ ③rodowiskow⇧. Wska⇩nik¢do nazwy lub przypisania podany jest w AX. Parametry dla procedury to wska⇩nik¢do nazwy zmiennej w AX.¢¢         org $BAC1¢¢bufadr   equ $15¢buf580   equ $580¢¢jext_off equ $7F4¢TOUPPER  equ $B442¢envfind  equ $BAFF¢envclr   equ $BB35¢genvfadr equ $BB58¢senvmem  equ $BB69¢¢PUTENV   jsr genvfadr    Na pocz⇧tku procedura przepisuje zmienn⇧ do bufora¢         jsr senvmem     pomocniczego i ustawia pami❎⇨ oraz wska⇩nik do¢         jsr envfind     bufora systemowego, teraz nast❎puje odszukanie¢         bmi eBACF       nazwy zmiennej.¢¢         jsr envclr      Gdy taka zmienna istnieje jest ona kasowana.¢¢eBACF    ldy #$FF¢¢eBAD1    iny             Teraz program poszukuje koca deklaracji zmiennych.¢         lda (bufadr),y¢         bne eBAD1¢¢         ldx #$00        A po jego odszukaniu procedura sprawdza czy chodzi o¢eBAD8    lda buf580,x    deklaracj❎ czy teə kasowanie zmiennej.¢         cmp #$9B¢         beq eBAF8       Gdy znak EOL znajduje si❎ przed '=' oznacza to¢         inx             wymazanie i procedura si❎ koczy.¢         cmp #'='¢         bne eBAD8¢¢         ldx #$00        W przeciwnym razie procedura sprawdza czy jest¢¢eBAE6    cpy #$FF        jeszcze miejsce na now⇧ zmienn⇧.¢         beq eBAF8¢¢         lda buf580,x    Gdy jest przepisuje now⇧ zmienn⇧ do buforu systemo-¢         jsr TOUPPER     wego (zamieniaj⇧c ma e znaki na duəe)¢         sta (bufadr),y¢         inx¢         iny¢         cmp #$9B        aə do napotkania koca zmiennej.¢         bne eBAE6¢¢eBAF8    lda #$00        W ostatnim etapie procedura ustawia znak EOF na¢         sta (bufadr),y  aktualnym wskazaniu Y¢         jmp jext_off    i koczy si❎ ustawiaj⇧c poprzedni⇧ pami❎⇨.¢¢¢ENVFIND (ENvironment Variable FIND)¢¢¢Procedura odszukuje dan⇧ zmienn⇧ w buforze.¢¢         org $BAFF¢¢bufadr   equ $15¢buf580   equ $580¢envoff   equ $C52¢¢TOUPPER  equ $B442¢¢envfind  ldy #$00        Na pocz⇧tku procedura kasuje znacznik przesuni❎cia¢                           zmiennej w buforze i w buf580.¢eBB01    ldx #$00¢         sty envoff¢¢eBB06    lda buf580,x    Teraz sprawdza czy nast⇧pi  koniec nazwy zmiennej¢         cmp #$9B        poszukiwanej.¢         beq eBB2C¢         cmp #'='¢         beq eBB2C¢         jsr TOUPPER     Gdy tak nie jest nazwa porwnywana jest z zmienn⇧ w¢         cmp (bufadr),y  buforze¢         bne eBB1C¢         iny             i gdy s⇧ one zgodne p❎tla si❎ zamyka.¢         inx¢         bne eBB06¢¢eBB1C    lda (bufadr),y  Gdy zmienne s⇧ rəne procedura poszukuje koca¢         beq eBB29       zmiennej ③rodowiskowej zdefiniowanej w buforze.¢         iny¢         cmp #$9B¢         bne eBB1C¢¢         lda (bufadr),y  Gdy zosta  napotkany koniec zmiennej i istnieje¢         bne eBB01       nast❎pna zmienna program przechodzi do porwnania.¢¢eBB29    lda #$FF        Gdy nast⇧pi  koniec zmiennych procedura wraca z¢         rts             wynikiem b ❎dnym.¢¢eBB2C    lda (bufadr),y  Gdy nazwy zmiennych s⇧ zgodne lecz nast❎pny znak¢         cmp #'='        istniej⇧cej zmiennej nie jest przypisaniem procedura¢         bne eBB1C       poszukuje nast❎pnej zmiennej.¢         lda #$00        W przeciwnym razie koczy si❎ poprawnym wynikiem.¢         rts¢¢Procedura kasuje zmienn⇧ ③rodowiskow⇧.¢¢         org $BB35  ENVirontment CLeaR.¢¢bufadr   equ $15¢envnum   equ $C51¢envoff   equ $C52¢envclr   ldy envoff      Na pocz⇧tku procedura poszukuje koca zmiennej lub¢eBB38    lda (bufadr),y  koca buforu.¢         beq eBB46¢         cmp #$9B¢         beq eBB43¢         iny¢         bne eBB38¢eBB43    iny             Gdy nast⇧pi  koniec zmiennej przesuni❎cie zwi❎kszane¢         lda (bufadr),y  jest o jeden (znak eol).¢eBB46    sty envnum      Teraz jest ono zapami❎tane,¢         ldy envoff¢         sta (bufadr),y  a znak nowej zmiennej zapisywany jest pod przesuni❎-¢         inc envoff      cie pocz⇧tku zmiennej.¢         ldy envnum¢         tax¢         bne eBB43       P❎tla trwa aə do przepisania wszystkich zmiennych.¢         rts¢¢         org $BB58  Get ENVirontment From ADRes.¢¢bufadr   equ $15¢buf580   equ $580¢¢genvfadr sta bufadr      Procedura ustala wska♪nik zmiennej z AX i¢         stx bufadr+1    przepisuje j⇧ do buforu buf580.¢         ldy #$00¢eBB5E    lda (bufadr),y¢         sta buf580,y¢         iny¢         cmp #$9B¢         bne eBB5E¢         rts¢¢Procedury SENVMEM i SENVPTR  ⇧cz⇧ si❎. SENVMEM ma za zadanie odpowiednie¢prze ⇧czenie bankw pami❎ci RAM tak, by bufor zmiennych ③rodowiskowych sta  si❎¢bezpo③rednio dost❎pny. SENVPTR ustawia wska⇩nik bufora zmiennych ③rodowiskowych¢BUFADR.¢¢¢         org $BB69¢¢bufadr   equ $15¢env_p    equ $C54¢envext   equ $C56¢jext_on  equ $7F1¢¢senvmem  lda envext¢         jsr jext_on¢¢         org $BB6F¢¢senvptr  lda env_p¢         sta bufadr¢         lda env_p+1¢         sta bufadr+1¢⑦        rts¢