;***********************************************************************; ;* P c D F S : PC DISK FILING SYSTEM VOOR DE ELECTRON *; ;*---------------------------------------------------------------------*; ;* module : Diverse filing system calls *; ;*---------------------------------------------------------------------*; ;* filenaam : osfsc.inc *; ;* auteur : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : januari 1997 *; ;* laatste update : *; ;*---------------------------------------------------------------------*; ;* assembleren : als include opnemen in PCDFS.ASM *; ;*---------------------------------------------------------------------*; ;* oproep : - *; ;***********************************************************************; osfscv jsr savepar ; save registers cmp #08 bcs osfscexit asl a ; verdubbel reason code nummer tax ; zet in index register lda osfsctab,x ; lees beginadres uit tabel sta zp ; zet in werkruimte lda osfsctab+1,x sta zp+1 jmp (zp) ; voer call uit osfscexit rts ; einde routine osfsctab .dw osfsc00, osfsc01, osfsc04, osfsc03 .dw osfsc04, osfsc05, osfsc06, osfsc07 osfsc00 ldx par_x ; herstel x register cpx #1 ; alleen *OPT1 wordt ondersteund bne osfsc00err cpy #0 ; test op geldige waarde beq osfsc00opt cpy #2 beq osfsc00opt osfsc00err jmp err_badcom osfsc00opt sty option ; zet in option byte jmp osfscexit ; einde routine osfsc01 ldx #comwork ; laadt pointer naar parameter ldy par_x ; par_x bevat de file handle lda #0 ; vraag pointer op jsr osargs ldx #comwork+4 ; laadt pointer naar parameter lda #2 ; vraag ext op ldy par_y ; laadt handle (door osargs in par_y) jsr osargs sec ; zet carry voor vergelijking ldy #4 ; laadt teller ldx #0 ; clear index osfsc01l1 lda comwork,x ; bereken ptr-ext sbc comwork+4,x inx ; verhoog index dey ; verlaag teller bne osfsc01l1 ldx #0 ; x wordt 255 bij EOF bcc osfsc01l2 ldx #$FF osfsc01l2 jmp osfscexit ; einde routine osfsc03 ldx par_x ; herstel x register jsr osfind_first ; test of file bestaat lda cfsbuffer beq osfsc04 ; ja, voer dan *RUN uit ldx #0 ; reset index osfsc03lib lda library,x ; kopieer library naar cfsbuffer sta cfsbuffer+$40,x inx ; reset index cmp #13 ; test op einde string bne osfsc03lib ; spring als nog karakters volgen dex ; verlaag index (wijst naar laatste dex ; karakter van library) lda #'\' ; laadt \ karakter cmp cfsbuffer+$40,x ; dit moet laatste teken van lib zijn beq osfsc03fnaam ; spring als dit het geval is inx ; verhoog index sta cfsbuffer+$40,x ; sluit lib af met \ osfsc03fnaam ldy #0 ; reset index osfsc03fnaam1 lda (parm),y ; lees karakter van filenaam iny ; verhoog filenaam index inx ; verhoog lib index sta cfsbuffer+$40,x ; zet in cfsbuffer achter lib cmp #13 ; test op einde filenaam bne osfsc03fnaam1 ; spring als nog karakters volgen ldx #cfsbuffer stx par_x ; zet in werkruimte sty par_y jsr osfind_first ; zoek commando in lib directory lda cfsbuffer ; bekijk het resultaat beq osfsc04 ; gevonden, run vanuit library jmp err_badcom ; bestaat niet -> bad command error osfsc04 ldx par_x ; zet adres van filenaam in parblok stx cfsbuffer ldy par_y sty cfsbuffer+1 lda #$FF ; gebruik load adres van file sta cfsbuffer+6 ldx #cfsbuffer jsr osfile ; laad file in geheugen jmp (h_exec) ; spring naar executie adres osfsc05 ldy #0 ; test parameterstring osfsc05parm lda (parm),y ; lees parameter cmp #13 ; test op lege string beq osfsc05noparm ; spring bij geen parameter cmp #' ' ; negeer spatie bne osfsc05cat ; geen spatie -> begin van parameter inc parm ; verhoog pointer naar parameter bne osfsc05parm1 inc parm+1 osfsc05parm1 jmp osfsc05parm ; lees volgende byte osfsc05noparm lda #'*' ; zet default parameter *.* ldy #0 sta (parm),y ldy #2 sta (parm),y lda #'.' ldy #1 sta (parm),y lda #13 ldy #3 sta (parm),y osfsc05cat ldx par_x ; laadt parameters voor find first ldy par_y jsr osfind_first osfsc05cat1 lda cfsbuffer ; test of file gevonden is bne osfsc05end ; geen file (meer) gevonden, einde lda cfsbuffer+1 ; lees attribuut and #$0A ; test op volume en/of hidden bne osfsc05cat6 ; volume en/of hidden niet afdrukken lda cfsbuffer+1 ; lees attribuut and #$10 ; test op directory beq osfsc05cat2 ; spring als gewone file lda #'[' ; directory tussen haakjes jsr oswrch osfsc05cat2 ldx #0 ; reset index osfsc05cat3 lda cfsbuffer+10,x ; lees karakter van bestandsnaam cmp #13 ; einde string niet afdrukken beq osfsc05cat3a ; spring bij einde string jsr oswrch ; druk karakter af inx ; verhoog index bne osfsc05cat3 ; gedwongen sprong osfsc05cat3a lda cfsbuffer+1 ; lees attribuut and #$10 ; test op directory beq osfsc05cat4 ; spring als gewone file lda #']' ; bij directory haakje sluiten jsr oswrch inx ; verhoog teller ivm twee haakjes inx osfsc05cat4 lda #' ' ; vul kolom aan tot 20 tekens osfsc05cat5 jsr oswrch ; print spatie inx ; verhoog teller cpx #20 ; kolom 20 tekens breed bne osfsc05cat5 ; spring indien nog spaties volgen osfsc05cat6 jsr osfind_next ; zoek volgende file jmp osfsc05cat1 ; verwerk resultaat osfsc05end jsr osnewl ; cursor naar volgende regel jmp osfscexit ; einde routine osfsc06 lda #0 ; sluit spool file ldy spoolhandle jsr osfind ldy exechandle ; sluit exec file jsr osfind jmp osfscexit ; einde routine osfsc07 ldx #5 ; laadt laagste handle ldy #20 ; laadt hoogste handle jmp osfscexit ; einde routine