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

  1.       Nast❎pna grupa procedur zajmuje si❎ obrbk⇧ wiersza polece, pobieraniem¢  rənorodnych parametrw itp.¢¢      Procedura zwraca pobrany parametr w confnam o d ugo③ci w trails.¢  Ustawia teə wska♪nik nazwy pliku na confnam.¢  Wynik operacji w F Z=1 ③wiadczy o braku parametru lub parametrze ze znakiem¢  uko③nika.¢¢           org $B27E User GET PARameters¢¢  bufoff   equ $A62¢  trails   equ $A72¢  confnam  equ $A79¢  lbuff    equ $A97¢  cionbuf  equ $B17¢  FILE_P   equ $C5A¢¢  U_PARAM  equ $B31B¢¢  U_GETPAR lda <confnam    Na pocz⇧tku procedura ustawia wska♪nik nazwy pliku¢           sta FILE_P      na confnam.¢           lda >confnam¢           sta FILE_P+1¢¢           ldx #$00        Nast❎pnie ustawia znak EOL na pocz⇧tku tego buforu.¢           lda #$9B¢           sta confnam,x¢¢           ldy bufoff      Teraz procedura pobiera nast❎pny znak (wed ug¢           lda lbuff,y     wskazania bufoff) z buforu lini¢           cmp #'/'¢           beq eB2AB¢¢           jsr U_PARAM     i gdy nie jest to uko③nik pobiera parametr.¢¢           ldx #$00        Teraz procedura kopiuje cionbuf do confnam.¢  eB29E    lda cionbuf,x¢           sta confnam,x¢           cmp #$9B¢           beq eB2AB¢           inx¢           bne eB29E¢¢  eB2AB    stx trails      A po napotkaniu znaku EOL ustawia d ugo③⇨ pobranego¢           cpx #$00        parametru w trails.¢           rts¢¢      Procedura pobiera ustalone przez uəytkownika atrybuty pliku.¢  Parametrem niesionym w A s⇧ atrybuty domy③lne dla pliku.¢¢           org $B2B1 User GET ATtRibutes.¢¢  fatr1    equ $779¢  temp1    equ $C38¢  temp2    equ $C40¢  confnam  equ $A79¢¢  U_GETPAR equ $B27E¢  TOUPPER  equ $B442¢¢  U_GETATR pha             Na pocz⇧tku procedura zapami❎tuje domy③lne atrybuty.¢¢           lda #$00        Nast❎pnie kasuje atrybuty pliku¢           sta fatr1¢           sta temp2       i zmienn⇧ tymczasow⇧.¢¢  eB2BA    jsr U_GETPAR    Teraz procedura pobiera parametr do confnam¢           beq eB303¢¢           lda #$FF        i gdy parametr istnieje zmienna tymczasowa uzyskuje¢           sta temp1       warto③⇨ pocz⇧tkow⇧.¢¢           lda confnam     Nast❎pnie procedura sprawdza czy chodzi o parametry¢           cmp #'+'        istniej⇧ce.¢           beq eB2D2¢           inc temp1       W przeciwnym wypadku zmienna jest zerowana.¢           cmp #'-'¢           bne eB303¢¢  eB2D2    ldy #$00        Gdy pierwszy znak parametru wskazuje atrybuty¢           dec temp2       ustawiana jest zmienna je wskazuj⇧ca.¢¢  eB2D7    iny             Teraz pobierane s⇧ nast❎pne znaki parametrw.¢           lda confnam,y¢           cmp #$9B¢           beq eB2BA       Gdy jest to EOL p❎tla si❎ zamyka.¢¢           jsr TOUPPER     Ma e litery ustawiane s⇧ jako duəe.¢¢           ldx #$03¢  eB2E4    cmp atrchar,x   I znak porwnywany jest z literami atrybutw.¢           beq eB2EE¢           dex¢           bpl eB2E4¢           bmi eB2D7¢¢  eB2EE    lda fatr1       Gdy znak zosta  rozpoznany pobierane s⇧ juə usta-¢           eor temp1       wione atrybuty, ustawione wed ug ich znaku¢           and atrclr,x    i ustawiony zostaje odpowiedni atrybut poprzez¢           ora atrset,x    swoj⇧ mask❎ bitow⇧.¢           eor temp1¢           sta fatr1       Poczym zostaje on wstawiony w pole atrybutw,¢           jmp eB2D7       po czym p❎tla si❎ zamyka.¢¢  eB303    pla             Na kocu procedura sprawdza czy pobra a atrybuty¢           bit temp2¢           bmi eB30C¢           sta fatr1       I gdy tak nie by o ustawia atrybuty domy③lne.¢¢  eB30C    cpx #$00        Teraz porwnuj⇧c z zerem okre③la koniec parametrw.¢           rts¢¢  atrchar  dta c'PHSA'¢  atrclr   dta b($FE),b($FD),b($F7),b($FB)¢  atrset   dta b($10),b($20),b($80),b($40)¢¢      Procedura pobiera nast❎pny parametr i ustala go w cionbuf. Wska♪nik¢  bufoff ustawiony jest na nast❎pny parametr w lbuff.¢¢           org $B31B User next PARAMeter.¢¢  bufoff   equ $A62¢  lbuff    equ $A97¢  cionbuf  equ $B17¢¢  TOUPPER  equ $B442¢  snxprm   equ $B45C¢¢¢  U_PARAM  jsr snxprm      Na pocz⇧tku ustalany jest wska♪nik do nast❎pnego¢                           parametru.¢           ldx #$00¢¢  eB320    lda lbuff,y     Teraz pobierany jest znak z buforu wiersza polece.¢           cmp #$9B¢           beq eB344¢           cmp #','¢           beq eB343¢           cmp #' '¢           beq eB339¢           jsr TOUPPER     I gdy nie jest on əadnym znakiem koca parametru¢           sta cionbuf,x   wstawia go do cionbuf.¢           inx¢           iny¢           bne eB320¢¢  eB339    sty bufoff      Gdy znakiem rozdzielaj⇧cym by a spacja procedura¢           jsr snxprm      szuka pierwszego znaku nast❎pnego parametru i¢           cmp #','        sprawdza czy jest to przecinek.¢           bne eB344¢¢  eB343    iny             Gdy znakiem rozdzielaj⇧cym by  przecinek procedura¢                           przesuwa wska♪nik o jeden tak aby wskazywa  pierwszy¢                           znak nast❎pnego parametru.¢¢  eB344    sty bufoff      Gdy nast⇧pi  koniec parametru zapami❎tuje wska♪nik¢           lda #$9B        wiersza polece po czym wstawia w ostatnie pole¢           sta cionbuf,x   parametru znak EOL.¢           rts¢¢      Procedura pobiera parametry opcji dzia ania programu zaczynaj⇧ce si❎¢  od uko③nika. Parametry te znajduj⇧ si❎ specjalnej tablicy wskazywanej przez¢  AX. Ilo③⇨ bajtw tablicy niesiona w Y. Tablica ma posta⇨:¢           dta b(0),b('P'),b(0),b('A')¢  Dla odnalezionych parametrw funkcja zwraca warto③⇨ $FF w bajtach¢  poprzedzaj⇧cych znak parametru. W wypadku nie znalezienia parametru procedura¢  sygnalizuje b ⇧d poprzez U_FAIL.¢¢           org $B34D User SLASH parameters.¢¢  bufadr   equ $15¢  temp1    equ $C38¢  bufoff   equ $A62¢  lbuff    equ $A97¢  cionbuf  equ $B17¢¢  U_FAIL   equ $A6BE¢  U_PARAM  equ $B31B¢¢  U_SLASH  sta bufadr      Na pocz⇧tku funkcja ustala wska♪nik do tablicy i¢           stx bufadr+1¢           sty temp1       i ilo③⇨ bajtw tablicy.¢¢           lda #$00        Nast❎pnie funkcja kasuje wszystkie flagi wyst⇧pie¢  eB356    dey             danych parametrw.¢           dey¢           sta (bufadr),y¢           bne eB356¢¢           ldx bufoff      Teraz pobiera¢           lda lbuff,x     znak z wiersza polece wskazywany wska♪nikiem¢           cmp #'/'        i porwnuje go z uko③nikiem.¢           bne eB386¢¢           jsr U_PARAM     Gdy jest to ten znak pobiera parametr do cionbuf.¢¢  eB369    dex             Teraz zmniejsza wska♪nik do ostatniego znaku.¢           beq eB386¢¢           lda cionbuf,x   I gdy istnieje znak na niezerowej pozycji¢           ldy temp1¢  eB372    dey¢           cmp (bufadr),y  porwnuje go z parametrem w tablicy.¢           beq eB37F¢           dey¢           bne eB372¢¢           lda #$9C        Gdy go nie znajdzie wywo uje b ⇧d. parameter.¢           jmp U_FAIL¢¢  eB37F    dey             W przeciwnym razie procedura¢           lda #$FF¢           sta (bufadr),y  odznacza jego obecno③⇨.¢           bmi eB369       I p❎tla si❎ zamyka.¢¢  eB386    rts             Po pobraniu wszystkich liter parametru¢                           nast❎puje koniec dzia ania procedury.¢¢      Procedura dodaje specyfikacj❎ *.* na kocu buforu confnam.¢  Procedura wymaga ustalonego trails.¢¢           org $B387 User add File SPECification.¢¢  trails   equ $A72¢  confnam  equ $A79¢¢  CKSPEC   equ $B44D¢¢  U_FSPEC  ldx trails      Na pocz⇧tku procedura sprawdza czy w confnam jest¢           beq eB394       juə jaki③ zapis.¢¢           lda confnam-1,x Gdy tak jest sprawdza czy jego ostatnia litera to¢           jsr CKSPEC      litera specjalna nazwy.¢           bne eB3A6       Gdy tak nie jest procedura si❎ koczy.¢¢  eB394    ldy #$03        Teraz procedura dopisuje jokery zwi❎kszaj⇧c¢           ldx trails¢  eB399    lda allfnme,y¢           sta confnam,x¢           stx trails      d ugo③⇨ confnam.¢           inx¢           dey¢           bpl eB399¢¢  eB3A6    rts¢¢  allfnme  dta b($9B),c'*.*'¢¢      Procedura pobiera z wiersza polece parametr liczbowy i zamienia go na¢  dwu cyfrow⇧ liczb❎ zwracan⇧ w AX. Gdy w F z=1 parametrem nie jest liczba.¢  Wska♪nik bufoff ustawiony jest na nast❎pny parametr.¢¢           org $B3AD User GET NUMber.¢¢  bufadr   equ $15¢  divend   equ $A52¢  bufoff   equ $A62¢  lbuff    equ $A97¢¢  getnumer equ $AAD7¢  snxprm   equ $B45C¢¢  U_GETNUM jsr snxprm      Na pocz⇧tku odszukiwany jest nast❎pny parametr.¢¢           lda <lbuff      Ustawia wska♪nik bufadr na confnam.¢           sta bufadr¢           lda >lbuff¢           sta bufadr+1¢¢           jsr getnumer    Teraz procedura wywo uje funkcj❎ (procedury PRINTF)¢                           zamieniaj⇧c⇧ tekst liczbowy na liczb❎ i¢           php             zapami❎tuje wynik jej dzia ania¢           sty bufoff      oraz nawy wska♪nik.¢           jsr snxprm      Nast❎pnie procedura odszukuje nast❎pny parametr i¢           cmp #','        je③li konczy si❎ on przecinkiem¢           bne eB3C7¢           inc bufoff      zwi❎ksza wska♪nik.¢¢  eB3C7    lda divend      Na koniec procedura pobiera wynik liczbowy¢           ldx divend+1¢           plp             i ustawia rejestr F zgodnie z dzia aniem¢           rts             podprogramu.¢¢      Procedura pobiera parametr ON/OFF. Gdy parametrem by o ON wynikiem¢  w F jest c=1, gdy OFF c=0. W przeciwnym wypadku procedura koczy si❎ b ❎dem¢  sygnalizowanym przez U_FAIL.¢¢           org $B3CF User GET ON or OFF.¢¢  confnam  equ $A79¢¢  U_FAIL   equ $A6BE¢  U_GETPAR equ $B27E¢  TOUPPER  equ $B442¢¢  U_GONOFF jsr U_GETPAR    Na pocz⇧tku procedura pobiera parametr.¢           lda confnam     Nast❎pnie porwnuje jego pierwszy znak¢           jsr TOUPPER¢           cmp #'O'        z 'O'.¢           bne eB3EA¢¢           lda confnam+1   Gdy tak jest porwnuje drugi znak¢           jsr TOUPPER¢           cmp #'N'¢           beq eB3F0       z 'N' i¢           cmp #'F'¢           beq eB3EF       'F'.¢¢  eB3EA    lda #$9C        Gdy znak nie jest əadnym z nich wywo uje b ⇧d.¢           jmp U_FAIL      B ⇧d : Bad paramater.¢¢  eB3EF    clc             W przeciwnym razie zwraca odpowiedni wynik.¢  eB3F0    rts¢¢      Procedura porwnuje parametr ze zbiorem parametrw w tablicy. Wska♪nik do¢  tablicy w AX. Parametr w confnam o d ugo③ci w trails.¢  Kaədy element w tablicy ma ostatni znak w negatywie. Koniec tablicy¢  zaznaczony znakiem zero. Procedura zwraca numer parametru i w F c=1 go¢  zosta  on odnaleziony lub c=0 gdy nie.¢¢           org $B3F1 User get TOKEN number.¢¢  bufadr   equ $15¢  trails   equ $A72¢  confnam  equ $A79¢  temp1    equ $C38¢  temp2    equ $C40¢¢  TOUPPER  equ $B442¢¢  U_TOKEN  sta bufadr      Na pocz⇧tku procedura ustala wska♪nik do tablicy¢           stx bufadr+1    paramterw.¢¢           ldx trails      Teraz procedura pobiera¢  eB3F8    lda confnam-1,x znak parametru¢           jsr TOUPPER     zwi❎ksza ma e litery do duəych¢           sta confnam-1,x¢           cmp #':'        i porwnuje z dwukropkiem.¢           beq eB408¢           dex             Gdy nie jest to dwukropek zmniejsza wska♪nik znaku.¢           bne eB3F8¢¢  eB408    ldy #$00        Po odnalezieniu pocz⇧tku parametru procedura¢           sty temp2       zeruje zmienn⇧ tymczasow⇧ numeru,¢           stx temp1       a w drugiej zapami❎tuje wska♪nik pocz⇧tku parametru.¢¢  eB410    ldx temp1       Nast❎pnie procedura pobiera wska♪nik pocz⇧tku¢           dex             zmniejsza go¢           dey             i zmniejsza wska♪nik buforu tablicy.¢¢  eB415    inx             Teraz procedura zwi❎ksza obydwa wska♪niki¢           iny¢           cpx trails      i porwnuje X z kocem parametru.¢           beq eB431¢¢           lda confnam,x   Gdy nie jest to koniec porwnuje poszczeglne znaki¢           eor (bufadr),y  paramterw.¢           beq eB415¢           cmp #$80        A gdy s⇧ rəne sprawdza czy rənica leəy w 7 bicie.¢           bne eB42E¢¢           lda confnam+1,x Gdy tak jest procedura sprawdza czy jest to napewno¢           cmp #$9B        koniec parametru.¢           beq eB43E¢¢  eB42E    inc temp2       I gdy nie zwi❎ksza numer parametru.¢¢  eB431    lda (bufadr),y  Po czym odszukuje koniec parametru w tablicy.¢           bmi eB438¢           iny¢           bne eB431¢¢  eB438    iny             Teraz procedura sprawdza czy nast⇧pi  juə koniec¢           lda (bufadr),y  tablicy.¢           bne eB410¢¢           clc             I gdy tak jest lub parametr jest odnaleziony¢  eB43E    lda temp2       procedura si❎ koczy.¢           rts¢¢      Procedura zamienia znak ma ej litery na duə⇧. Znak niesiony w A,¢  wynik w A. Procedura nie zmienia rejestrw X,Y.¢¢           org $B442 TO UPPER.¢¢  TOUPPER  cmp #'a'        Na pocz⇧tku procedura sprawdza czy znak jest ma ⇧¢           bcc eB44C       liter⇧.¢           cmp #'z'+1¢           bcs eB44C¢           and #$5F        I je③li jest gasi 5 bit znaku.¢  eB44C    rts¢¢      Procedura sprawdza czy znak jest znakiem specjalnym nazwy.¢  Wynikiem z=1 gdy jest. Procedura nie zmienia warto③ci rejestrw A,X i Y.¢¢           org $B44D ChecK SPECification.¢¢  CKSPEC   cmp #':'        Procedura porwnuje znak do znakw specjalnego¢           beq eB45B       znaczenia.¢           cmp #'>'¢           beq eB45B¢           cmp #'\'¢           beq eB45B¢           cmp #'<'¢  eB45B    rts¢¢      Procedura odnajduj⇧ca nast❎pny parametr w wierszu polece.¢¢           org $B45C   Sreach NeXt PaRaMeter.¢¢  bufoff   equ $A62¢  lbuff    equ $A97¢¢  snxprm   ldy bufoff      Na pocz⇧tku procedura pobiera wska♪nik pozycji¢  eB45F    lda lbuff,y     w wierszu polece, teraz pobiera znak¢           cmp #' '        tak d ugo jak b❎d⇧ one spacjami.¢           bne eB469¢           iny¢           bne eB45F¢  eB469    sty bufoff      Gdy procedura wykryje pierwszy znak inny niə spacja¢           rts             ustawia nowy wska♪nik i si❎ koczy.¢¢           end of doc.¢