;***********************************************************************; ;* P c D F S : PC DISK FILING SYSTEM VOOR DE ELECTRON *; ;*---------------------------------------------------------------------*; ;* module : Random Access File openen / sluiten *; ;*---------------------------------------------------------------------*; ;* filenaam : osfind.inc *; ;* auteur : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : december 1996 *; ;* laatste update : *; ;*---------------------------------------------------------------------*; ;* assembleren : als include opnemen in PCDFS.ASM *; ;*---------------------------------------------------------------------*; ;* oproep : - *; ;***********************************************************************; osfindv jsr savepar ; save parameters jsr zetsem ; zet semafoor and #$F0 ; wis lage nibble cmp #$00 ; test op close file beq osfind_close cmp #$10 ; test op find first beq osfind_first cmp #$20 ; test op find next beq osfind_next cmp #$40 ; test op open input beq osfind_input cmp #$80 ; test op open output beq osfind_output cmp #$C0 ; test op open append beq osfind_append jmp osgbpbexit ; einde via osgbpb osfind_close jmp osfind_close1 ; spring naar routine osfind_append lda #2 ; laadt accu voor lezen/schrijven osfind_open sta zp+2 ; zet tijdelijk in werkruimte lda #$3F ; pc commando: open file jsr commando stx zp ; zet adres van filenaam in zeropage sty zp+1 jsr filenaam1 ; stuur filenaam naar pc lda par_a ; lees oorspronkelijke code asl a ; schuif lage nibble naar hoge nibble asl a ; sharing mode en handle flag asl a ; worden hiermee ingesteld asl a ora zp+2 ; voeg samen met open modus jsr zendbyte ; stuur attribuut naar pc jsr leesbyte ; lees handle pha ; bewaar handle tay ; zet in y-register lda #0 ; zet file pointer achter de header sta zp+4 sta zp+5 sta zp+6 sta zp+7 ldx #zp+4 jsr osargsptr0 pla ; handle terug naar accu jmp osfilexit ; einde via osfile osfind_output lda #1 ; laadt accu voor alleen schrijven bne osfind_open ; gedwongen sprong osfind_input lda #0 ; laadt accu voor alleen lezen beq osfind_open ; gedwongen sprong osfind_next lda #$3D ; pc commando: zoek volgende file jsr commando jmp osfind_read_dta ; lees resultaat en data osfind_first lda #$3C ; pc commando: zoek eerste file jsr commando stx zp ; zet adres van filenaam in zeropage sty zp+1 jsr filenaam1 ; stuur filenaam naar pc osfind_read_dta jsr leesbyte ; lees resultaat sta cfsbuffer ; zet in data buffer bne osfind_exit ; file niet gevonden -> einde routine ldx #0 ; reset pointer osfind_dta1 jsr leesbyte ; lees informatie byte sta cfsbuffer+1,x ; zet in buffer inx ; verhoog pointer cpx #22 ; lees 22 bytes bne osfind_dta1 ; spring indien nog bytes volgen ldx #9 ; sluit filenaam in dta af met osfind_dta2 inx ; verhoog index lda cfsbuffer,x ; lees karakter cmp #$00 ; is het einde van filenaam bne osfind_dta2 lda #$0D ; sluit naam af met $0D sta cfsbuffer,x osfind_exit jmp osgbpbexit ; einde via osgbpb osfind_close1 cpy #0 ; alle files sluiten? beq osfind_cl_all lda #$40 ; pc commando: file sluiten jsr commando tya ; handle naar pc sturen jsr zendbyte jmp osgbpbexit ; einde via osgbpb osfind_cl_all ldy #5 ; laadt laagste handle nummer osfind_cl_all1 lda #$40 ; pc commando: file sluiten jsr commando tya ; handle naar pc sturen jsr zendbyte iny ; verhoog handle nummer cpy #21 ; handle 20 is de laatste bne osfind_cl_all1 ; spring indien nog files open jmp osgbpbexit ; einde via osgbpb