RAF Commander#
a Norton Commander Clone for the Atari 8bit
RAFCMAIN.ASM
; $Id: rafcmain.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org FORTH = 0 .IF .NOT FORTH DEBUG = 0 .ENDIF BETA = 1 ATARI_800 = 0 ATARI_XL = 1 ATARI_DOS = 1 MY_DOS = 0 SPARTA23 = 0 SPARTA_X = 0 .INCLUDE MACROS.ASM .INCLUDE EQU.ASM .IF .NOT FORTH * = $4000 JMP RAFCINIT .ENDIF ; Padding for FORTH, aligning indirekt Jumps .IF FORTH NFA_PREV .= NFA_MON NOP ; >>>>>>> RAFCINIT <<<<<<< ; -- NFA_RAFCINIT .CBYTE $88, "RAFCINIT" LFA_RAFCINIT .WORD NFA_PREV ; LINK TO "SCRCLR" CFA_RAFCINIT .WORD PFA_RAFCINIT NFA_PREV .= NFA_RAFCINIT PFA_RAFCINIT LDY #0 STY LMARGN INY STY CRSINH M_CHOUT clrscr JMP NEXT .ELSE RAFCINIT LDX #$E8 ; Init Stack Pointer STX CRSINH M_CHOUT clrscr LDA #0 STA LMARGN .IF BETA JSR BETAMESSAGE .ENDIF ; JMP RAFC ; and go! .ENDIF ; >>>>>>> RAFC <<<<<< ; -- .IF FORTH NFA_PREV .= NFA_PROCESS NFA_RAFC .CBYTE $84, "RAFC" LFA_RAFC .WORD NFA_PREV CFA_RAFC .WORD DOCOL PFA_RAFC .WORD CFA_RAFCINIT .WORD CFA_0 ; 0 .WORD CFA_READDIR .WORD CFA_1 ; 1 .WORD CFA_READDIR .WORD CFA_REFSCR .WORD CFA_0 ; Start Action = 0 L1100 .WORD CFA_RAFCDEBUG ; DEBUG : show stack pointer .WORD CFA_DROP .WORD CFA_GETKEY .WORD CFA_GETAC .WORD CFA_DUP ; DUP .WORD CFA_0BRANCH ; 0BRANCH .WORD L1100-* .WORD CFA_ACTION .WORD CFA_BRANCH ; BRANCH .WORD L1100-* .WORD CFA_EXIT ; S; NFA_LASTWORD = NFA_RAFC .ELSE RAFC JSR GETDIR JSR REFSCR DEX DEX RAFC1 .IF DEBUG JSR RAFCDEBUG .ENDIF JSR GETKEY STA 0,X JSR GETAC LDA 0,X BEQ RAFC1 JSR ACTION JMP RAFC1 .ENDIF ; >>>>>> ACTIONTABLE <<<<<<<< ACTAB .INCBIN "ac.tab" ; Action Code and Process handling .INCLUDE ACTION.ASM ; Screen IO and Keyboard Input Routines .INCLUDE SCREENIO.ASM ; File IO Routines .INCLUDE FILEIO.ASM ; Sort and Framehandling Routines .INCLUDE SORT.ASM ; DEBUG Routines .INCLUDE DEBUG.ASM ; >>>>>> Variable <<<<< .INCLUDE VARTAB.ASM ; >>>>>> STRINGS <<<<<< .INCLUDE STRTAB.ASM
; $Id: action.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Action Code and List processing Routines ; >>>>>>> DOSSTR <<<<<<< ; n -- addr ; ( creates DOS Filename ) .IF FORTH NFA_DOSSTR .CBYTE $86, "DOSSTR" LFA_DOSSTR .WORD NFA_PREV ; UPLINK CFA_DOSSTR .WORD PFA_DOSSTR NFA_PREV .= NFA_DOSSTR PFA_DOSSTR JSR DOSSTR JMP NEXT .ENDIF DOSSTR JSR DOSSTR0 LDA P_DSTR STA 0,X LDA P_DSTR+1 STA 1,X RTS DOSSTR0 JSR CALCLINE0 JSR ADDONE LDA P_DSTR STA N LDA P_DSTR+1 STA N+1 LDY ACTFR LDA DNU,Y LDY #$0 STY N+3 ; charcount INY JSR PUTCHAR1 INY DOSSTR1 JSR ADDONE INC N+3 LDA N+3 CMP #9 BNE DOSSTR2 LDA #'. ; dot JSR PUTCHAR1 DOSSTR2 LDA N+3 CMP #12 ; ende? BEQ DOSSTR4 LDA (0,X) CMP #$20 ; leerzeichen ? BEQ DOSSTR1 JSR PUTCHAR ; nein = Zeichen setzen JMP DOSSTR1 DOSSTR4 LDA #155 ; lineend BNE PUTCHAR1 PUTCHAR LDA (0,X) AND #$7F PUTCHAR1 STA (N),Y INY DOSSTR3 RTS ; >>>>>>> MARKENTRY <<<<<<< ; n -- .IF FORTH NFA_MARKENTRY .CBYTE $89, "MARKENTRY" LFA_MARKENTRY .WORD NFA_PREV ; UPLINK CFA_MARKENTRY .WORD PFA_MARKENTRY NFA_PREV .= NFA_MARKENTRY PFA_MARKENTRY JSR MARKENTRY JMP POP .ENDIF MARKENTRY JSR GETMARK ORA CURC STA (0,X) RTS DELETEENTRY JSR GETMARK AND #bl STA (0,X) RTS TOGGLEENTRY JSR GETMARK EOR CURC STA (0,X) RTS GETMARK JSR CALCLINE0 JSR ADDONE LDA (0,X) RTS GETLOCK JSR CALCLINE0 LDA (0,X) RTS ; >>>>>>> COUNTMARK <<<<<<< ; -- n ; ( count all marked direntries ) .IF FORTH NFA_COUNTMARK .CBYTE $89, "COUNTMARK" LFA_COUNTMARK .WORD NFA_GETKEY ; LINK TO "GETKEY" CFA_COUNTMARK .WORD PFA_COUNTMARK PFA_COUNTMARK DEX DEX JSR COUNTMARK JMP NEXT .ENDIF merk .BYTE 0 COUNTMARK LDA #0 STA CABSA LDY NUMDA COUNTMARK1 STY 0,X TYA STA merk JSR GETMARK CMP #$20 ; Mark = Blank? BEQ COUNTMARK2 INC CABSA COUNTMARK2 LDA merk ; weg faktorieren WORK!!!! TAY DEY BPL COUNTMARK1 LDA CABSA STA 0,X LDA #0 STA 1,X JSR CALCCABS RTS ; >>>>>>> GETACTIONCODE <<<<<<< ; keycode -- n .IF FORTH NFA_GETAC .CBYTE $85, "GETAC" LFA_GETAC .WORD NFA_PREV ; UPLINK CFA_GETAC .WORD PFA_GETAC NFA_PREV .= NFA_GETAC PFA_GETAC JSR GETAC JMP NEXT .ENDIF GETAC LDY 0,X LDA ACTAB-1,Y STA 0,X RTS ; >>>>>>> ACTION <<<<<<< ; n -- rc .IF FORTH NFA_ACTION .CBYTE $86, "ACTION" LFA_ACTION .WORD NFA_PREV ; UPLINK CFA_ACTION .WORD PFA_ACTION NFA_PREV .= NFA_ACTION PFA_ACTION JSR ACTION JMP NEXT .ENDIF ACTION STX XSAVE JSR CALCCABS JSR SETACTFR LDA 0,X CMP #10 ; Quit ? BNE L1200 .IF FORTH LDY #0 LDA #<CFA_QUIT ; QUIT LOBYTE STA 0,X LDA #>CFA_QUIT ; QUIT HIBYTE STA 1,X JMP PFA_EXECUTE ; EXECUTE JMP NEXT .ELSE JMP (DOSVEC) .ENDIF L1200 CMP #61 ; Cursor down BNE L1220 LDA #1 JSR CRSDOWN JMP L1299 L1220 CMP #60 ; Cursor up BNE L1221 LDA #1 JSR CRSUP JMP L1299 L1221 CMP #62 BNE L1223 ; Cursor 5 up JSR CRSHIDE LDA #5 JSR CRSUP JMP L1299 L1223 CMP #63 BNE L1230 ; Cursor 5 down ? JSR CRSHIDE LDA #5 JSR CRSDOWN JMP L1299 L1230 LDA 0,X CMP #64 ; TAB - change Panel BNE L1240 JSR TOGGLEACT JSR SETACTFR JSR CALCCABS JSR L_UPDLEFT JSR L_UPDRIGHT JMP L1299 L1240 LDA 0,X CMP #30 ; sort filename BNE L1250 LDA #8 STA FLENKEY ; 1st key = filename LDA #3 STA FLENSEC ; 2nd key = extender LDA #2 STA OFFSETKEY LDA #10 STA OFFSETSEC JSR SORTACT JMP L1299 ; and exit L1250 LDA 0,X CMP #31 ; sort externder BNE L1252 LDA #3 STA FLENKEY ; 1st key = externder LDA #8 STA FLENSEC ; 2nd key = filename LDA #10 STA OFFSETKEY LDA #2 STA OFFSETSEC JSR SORTACT JMP L1299 ; end exit L1252 LDA 0,X CMP #32 ; sort size BNE L1270 LDA #3 STA FLENKEY ; 1st key = size LDA #11 STA FLENSEC ; 2nd key = filename LDA #14 STA OFFSETKEY LDA #2 STA OFFSETSEC JSR SORTACT JMP L1299 ; end exit L1270 LDA 0,X CMP #11 ; left panel new dir BNE L1271 LDA #5 STA COLCRS JSR GETDRIVE BEQ L1270a ; valid drive ? STA DNU0 JSR L_READLEFT L1270a JSR REFFRM JSR CLRFRMLEFT JSR L_UPDLEFT JMP L1299 L1271 LDA 0,X CMP #12 ; right panel new dir BNE L1273 LDA #25 STA COLCRS JSR GETDRIVE BEQ L1271a ; valid drive ? STA DNU1 JSR L_READRIGHT L1271a JSR CLRFRMRIGHT JSR REFFRM JSR L_UPDRIGHT JMP L1299 L1273 LDA 0,X CMP #13 BNE L1275 JSR L_READACT JSR CLRFRMACT JSR L_UPDACT JMP L1299 L1275 LDA 0,X CMP #20 ; mark entry BNE L1276 LDA CABSA STA 0,X JSR TOGGLEENTRY LDA #1 JSR CRSDOWN JSR L_UPDCRS JMP L1299 L1276 LDA 0,X CMP #21 ; mark all entries BNE L1278 LDY NUMDA L1277 STY 0,X TYA PHA JSR MARKENTRY PLA TAY DEY BNE L1277 STY 0,X JSR MARKENTRY JSR L_UPDACT JMP L1299 L1278 LDA 0,X CMP #22 ; unmark all entries BNE L1280 LDY NUMDA L1279 STY 0,X TYA PHA JSR DELETEENTRY PLA TAY DEY BNE L1279 STY 0,X JSR DELETEENTRY JSR L_UPDACT JMP L1299 L1280 LDA 0,X CMP #23 ; toggle all entries BNE L1282 LDY NUMDA L1281 STY 0,X TYA PHA JSR TOGGLEENTRY PLA TAY DEY BNE L1281 STY 0,X JSR TOGGLEENTRY JSR L_UPDACT JMP L1299 L1282 LDA 0,X CMP #15 ; lock / unlock BNE L1285 LDA P_LOC0 STA P_PROC LDA P_LOC0+1 STA P_PROC+1 LDA LOCVEC STA AJMVEC LDA LOCVEC+1 STA AJMVEC+1 JSR PROCESS JMP L1299 L1285 LDA 0,X CMP #8 ; delete BNE L1286 LDA P_DEL0 STA P_PROC LDA P_DEL0+1 STA P_PROC+1 LDA DELVEC STA AJMVEC LDA DELVEC+1 STA AJMVEC+1 JSR PROCESS JMP L1299 L1286 LDA 0,X CMP #17 ; start COM Programm BNE L1287 LDA P_LOA0 STA P_PROC LDA P_LOA0+1 STA P_PROC+1 LDA RUNVEC STA AJMVEC LDA RUNVEC+1 STA AJMVEC+1 JSR PROCESS JMP L1299 L1287 LDA 0,X CMP #5 ; copy file BNE L1288 LDA P_COP0 STA P_PROC LDA P_LOC0+1 STA P_PROC+1 LDA COPVEC STA AJMVEC LDA COPVEC+1 STA AJMVEC+1 JSR PROCESS JMP L1299 L1288 LDA 0,X CMP #6 ; move file BNE L1289 LDA P_MOV0 STA P_PROC LDA P_MOV0+1 STA P_PROC+1 LDA MOVVEC STA AJMVEC LDA MOVVEC+1 STA AJMVEC+1 JSR PROCESS JMP L1299 L1289 L1299 LDA #0 STA 0,X STA 1,X ; Returncode --> WORK!!! LDX XSAVE RTS ; >>>>>>> PROCESS <<<<<<< ; -- .IF FORTH NFA_PROCESS .CBYTE $87, "PROCESS" LFA_PROCESS .WORD NFA_PREV ; UPLINK LFA_PROCESS .WORD NFA_PREV CFA_PROCESS .WORD PFA_PROCESS PFA_PROCESS JSR PROCESS JMP NEXT .ENDIF count .BYTE 0 PROCESS M_FRAME 4,5,28,4 LDA #0 STA ERRORCD JSR COUNTMARK LDA 0,X BNE PROCESS3 LDA CABSA STA 0,X JSR TOGGLEENTRY PROCESS3 LDY NUMDA PROCESS1 STY COUNT STY 0,X JSR GETMARK CMP #$20 ; blank ? BEQ PROCESS4 LDA COUNT STA 0,X JSR GETLOCK STA ACTLOCK LDA COUNT STA 0,X JSR DOSSTR JSR PROCESSTEXT LDA ERRORCD BEQ PROCESS2 ; Abort CMP #1 ; Skip File ? BEQ PROCESS4 STX XSAVE JSR DOVEC ; jump through vector LDX XSAVE PROCESS4 LDY COUNT BEQ PROCESS2 DEY JMP PROCESS1 PROCESS2 JSR REFFRM JSR L_READLEFT JSR L_READRIGHT PROCESS5 JSR SETACTFR JSR CALCCABS SEC LDA NUMDA SBC CABSA BPL PROCESS6 LDA #1 JSR CRSUP JMP PROCESS5 PROCESS6 JSR CLRFRMLEFT JSR CLRFRMRIGHT JSR L_UPDLEFT JSR L_UPDRIGHT RTS PROCESSTEXT M_POS 5,6 M_PRINT P_PROC M_POS 5,7 LDA #bl LDY #17 JSR XTIMES M_POS 5,7 M_PRINT P_DSTR LDA ERRORCD CMP #3 ; Yes to all? BEQ PROCESSTEXT1 M_POS 5,8 M_PRINT P_ASTR JSR GETCH LDY #4 PROCESSTEXT2 DEY BEQ PROCESSTEXT3 CMP QSTR,Y BNE PROCESSTEXT2 PROCESSTEXT3 TYA STA ERRORCD PROCESSTEXT1 RTS DOVEC LDA AJMVEC ; get current action vector STA N LDA AJMVEC+1 STA N+1 JMP (N) ; and jump through vector
; $Id: screenio.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Screen and Keyboard IO Routines ; some definitions for Screen IO ro = 5 ; FRAME "TOP RIGHT" lo = 17 ; FRAME "TOP LEFT" hr = 18 ; FRAME "HORIZONTAL" vr = 124 ; FRAME "VERTICAL" lu = 26 ; FRAME "BOTTOM LEFT" ru = 3 ; FRAME "BOTTOM RIGHT" cross = 19 ; FRAME "CROSS" cr = 155 ; CARRIAGE RETURN bl = 32 ; BLANK clrscr = 125 ; CLEAR SCREEN GETCH STX XSAVE-1 TYA ; Y Register retten PHA JSR KGETCH ; Zeichen holen (in accu) TAX PLA ; Y Register wiederherstellen TAY TXA LDX XSAVE-1 RTS OUTCH STX XSAVE-1 TAX TYA ; Y Register retten PHA TXA JSR EOUTCH ; Zeichen ausgeben PLA ; Y Register wiederherstellen TAY LDX XSAVE-1 RTS XSTROUT LDA (0,X) TAY INC 0,X LDA (0,X) STY 0,X STA 1,X XSTROUT1 LDA (0,X) AND #$7F ORA INVFLG JSR OUTCH LDA (0,X) PHA JSR ADDONE XSTROUT2 PLA AND #$80 BEQ XSTROUT1 RTSVEC RTS XFRAME ; prints frame ; N = XLEN, N+1 = YLEN ; N+2 = XPOS LDA COLCRS STA N+2 M_CHOUT lo LDA #hr LDY N JSR XTIMES M_CHOUT ro M_CHOUT cr DEC N+1 L0010 LDA N+2 STA COLCRS M_CHOUT vr LDA #bl LDY N JSR XTIMES M_CHOUT vr M_CHOUT cr DEC N+1 BNE L0010 LDA N+2 STA COLCRS M_CHOUT lu LDA #hr LDY N JSR XTIMES M_CHOUT ru RTS ; >>>>>>> XTIMES <<<<<<< .IF FORTH NFA_XTIMES .CBYTE $86, "XTIMES" LFA_XTIMES .WORD NFA_PREV ; UPLINK CFA_XTIMES .WORD PFA_XTIMES NFA_PREV .= NFA_XTIMES PFA_XTIMES LDY 0,X ; GET TIMES LDA 2,X ; GET CHARACTER JSR XTIMES JMP POPTWO .ENDIF XTIMES PHA JSR OUTCH PLA DEY BNE XTIMES RTS ; >>>>>>> POS <<<<<<< .IF FORTH NFA_POS .CBYTE $83, "POS" LFA_POS .WORD NFA_PREV ; UPLINK CFA_POS .WORD PFA_POS NFA_PREV .= NFA_POS PFA_POS LDA 0,X ; GET XPOS STA COLCRS LDA 2,X ; GET YPOS STA ROWCRS JMP POPTWO .ENDIF ; >>>>>>> REFRESH_SCREEN <<<<<<< .IF FORTH NFA_REFSCR .CBYTE $86, "REFSCR" LFA_REFSCR .WORD NFA_PREV ; UPLINK CFA_REFSCR .WORD DOCOL NFA_PREV .= NFA_REFSCR PFA_REFSCR .WORD CFA_REFFRM ; Frame .WORD CFA_0 ; 0 .WORD CFA_REFDIR ; show left dir .WORD CFA_1 ; 1 .WORD CFA_REFDIR ; show right dir .WORD CFA_EXIT ; S; ; end of word .ELSE REFSCR JSR REFFRM ; Frame DEX DEX LDA #0 STA 0,X JSR _REFDIR ; left dir LDA #1 STA 0,X JSR _REFDIR ; right dir INX INX RTS .ENDIF .IF FORTH ; >>>>>>> REFRESH_FRAME <<<<<<< NFA_REFFRM .CBYTE $86, "REFFRM" LFA_REFFRM .WORD NFA_PREV ; UPLINK CFA_REFFRM .WORD PFA_REFFRM NFA_PREV .= NFA_REFFRM PFA_REFFRM JSR REFFRM JMP NEXT .ENDIF REFFRM M_POS 8,0 M_PRINT P_0RAFM M_CHOUT cr M_CHOUT lo JSR HRLOOP ; Horizontal line M_CHOUT ro M_POS 8,1 M_PRINT P_0DSKM M_POS 10,1 LDA DNU0 JSR OUTCH M_POS 19,1 M_CHOUT 23 M_POS 27,1 M_PRINT P_0DSKM M_POS 29,1 LDA DNU1 JSR OUTCH LDY #20 L1003 STY ROWCRS LDA #0 STA COLCRS M_CHOUT vr LDA #19 STA COLCRS M_CHOUT vr LDA #38 STA COLCRS M_CHOUT vr DEY CPY #1 BNE L1003 M_POS 0,21 M_CHOUT 1 JSR HRLOOP M_CHOUT 4 M_POS 19,21 M_CHOUT cross M_POS 0,22 JSR DSKDSP JSR DSKDSP M_CHOUT vr M_POS 0,23 M_CHOUT lu JSR HRLOOP M_CHOUT ru M_POS 19,23 M_CHOUT 24 M_POS 0,0 RTS ; ----------- HRLOOP LDY #37 L1001 M_CHOUT hr DEY BNE L1001 RTS DSKDSP M_CHOUT vr M_PRINT P_1DSKM M_PRINT P_SFREM LDA #31 LDY #4 JSR XTIMES RTS CLRFRMACT LDA ACTFR BNE CLRFRMRIGHT CLRFRMLEFT LDA #1 STA XPOS BNE CLRFRM CLRFRMRIGHT LDA #20 STA XPOS CLRFRM LDA #20 CLRFRM1 STA ROWCRS LDA XPOS STA COLCRS LDA #bl LDY #18 JSR XTIMES DEC ROWCRS LDA ROWCRS CMP #1 BNE CLRFRM1 RTS ; >>>>>>> REFRESH_DIR <<<<<<< ; n -- .IF FORTH NFA_REFDIR .CBYTE $86, "REFDIR" LFA_REFDIR .WORD NFA_PREV ; UPLINK CFA_REFDIR .WORD PFA_REFDIR NFA_PREV .= NFA_REFDIR PFA_REFDIR STX XSAVE JSR _REFDIR LDX XSAVE JMP POP .ENDIF DIRCNT = TIB ; Counter for act. entry YPOS = TIB+1 ; Y-Position XPOS = TIB+2 ; X-Position MAXN = TIB+3 ; max Entries _REFDIR LDA #2 STA YPOS LDA #0 STA ACTCF LDY 0,X ; left (0) or right (1) panel CPY ACTFR ; act. panel? BNE L1400 LDA #$80 ; then show cursor STA ACTCF L1400 LDA XPS0,Y STA XPOS LDA COFS0,Y STA DIRCNT LDA NUMD0,Y BMI L1405 ; no entries ! STA MAXN LDA CPOS0,Y STA CPOSA CLC ASL 0,X ; two byte values LDY 0,X LDA DIRMEM0,Y STA ACTDM LDA DIRMEM0+1,Y STA ACTDM+1 INC MAXN L1401 LDA YPOS STA ROWCRS LDA XPOS STA COLCRS LDA DIRCNT STA 0,X JSR PRINTDIRENTRY INC YPOS INC DIRCNT LDA DIRCNT CMP MAXN ; all entries ? BEQ L1403 LDA YPOS CMP #21 ; all 19 Screen lines ? BEQ L1403 BNE L1401 L1403 LDA MAXN STA 0,X ; last line = free Sectors LDA #22 STA ROWCRS CLC LDA XPOS ADC #14 STA COLCRS JSR PRINTDIRENTRY L1405 RTS ; ---------------------------- PRINTDIRENTRY LDA 0,X CMP CABSA BNE PRINTDIRENTRY1 LDA ACTCF STA INVFLG PRINTDIRENTRY1 JSR CALCLINE0 ; calculate dir entry memory location JSR XSTROUT1 ; print dir entry LDA #0 STA INVFLG RTS ; >>>>>>> SCRCLR <<<<<<< ; -- .IF FORTH NFA_SCRCLR .CBYTE $86, "SCRCLR" LFA_SCRCLR .WORD NFA_PREV ; UPLINK CFA_SCRCLR .WORD PFA_SCRCLR NFA_PREV .= NFA_SCRCLR PFA_SCRCLR M_CHOUT clrscr JMP NEXT .ENDIF ; >>>>>>> GETKEY <<<<<<< ; -- n .IF FORTH NFA_GETKEY .CBYTE $86, "GETKEY" LFA_GETKEY .WORD NFA_PREV ; UPLINK CFA_GETKEY .WORD PFA_GETKEY NFA_PREV .= NFA_GETKEY PFA_GETKEY JSR GETKEY PHA LDA #0 JMP PUSH .ENDIF GETKEY LDA #$FF STA CH LAGK1 LDA CH CMP #$FF BEQ LAGK1 LDY #$FF STY CH RTS ; >>>>>>> CRSUP <<<<<<< ; -- .IF FORTH NFA_CRSUP .CBYTE $85, "CRSUP" LFA_CRSUP .WORD NFA_PREV ; UPLINK CFA_CRSUP .WORD PFA_CRSUP NFA_PREV .= NFA_CRSUP PFA_CRSUP LDA #1 JSR CRSUP JMP NEXT .ENDIF CRSUP STA N LDA #0 STA N+1 JSR CRSHIDE CRSUP3 JSR CALCCABS LDY ACTFR LDA CPOS0,Y BEQ CRSUP1 ; Cursor Position Top ? LDA CPOS0,Y ; no, decrement cursor position STA CPOSA DEC CPOSA LDA CPOSA STA CPOS0,Y JMP CRSUP2 CRSUP1 ; CPOS = 0, Offset ? LDA COFS0,Y BEQ CRSUP2 ; Offset 0? STA COFSA ; decrement Cursor Offset DEC COFSA LDA COFSA STA COFS0,Y INC N+1 CRSUP2 DEC N BNE CRSUP3 JSR CALCCABS LDA N+1 BEQ CRSUP4 JSR L_UPDACT CRSUP4 JMP CRSSHOW CALCCABS ; Calculates absolute Cursor positions LDY #2 CALCCABS1 CLC LDA CPOS0,Y ADC COFS0,Y STA CABS0,Y DEY BPL CALCCABS1 RTS ; >>>>>>> CRSDOWN <<<<<<< ; -- .IF FORTH NFA_CRSDOWN .CBYTE $87, "CRSDOWN" LFA_CRSDOWN .WORD NFA_PREV ; UPLINK CFA_CRSDOWN .WORD PFA_CRSDOWN NFA_PREV .= NFA_CRSDOWN PFA_CRSDOWN LDA #1 JSR CRSDOWN JMP NEXT .ENDIF CRSDOWN STA N ; Counter LDA #0 STA N+1 ; Flag for Update JSR CRSHIDE CRSDOWN3 JSR CALCCABS LDY ACTFR LDA CABS0,Y CMP NUMD0,Y BEQ CRSDOWN2 ; max dir entries ? LDA CPOS0,Y CMP #18 ; 19 Screen entries ? BEQ CRSDOWN1 LDA CPOS0,Y STA CPOSA INC CPOSA LDA CPOSA STA CPOS0,Y BNE CRSDOWN2 CRSDOWN1 LDA COFS0,Y ; increment cursor offset STA COFSA INC COFSA LDA COFSA STA COFS0,Y INC N+1 CRSDOWN2 DEC N BNE CRSDOWN3 JSR CALCCABS LDA N+1 BEQ CRSDOWN4 JSR L_UPDACT CRSDOWN4 JMP CRSSHOW ; >>>>>>> GETDRIVE <<<<<<< ; -- n .IF FORTH NFA_GETDRV .CBYTE $88, "GETDRIVE" LFA_GETDRV .WORD NFA_PREV ; UPLINK CFA_GETDRV .WORD PFA_GETDRV NFA_PREV .= NFA_GETDRV PFA_GETDRV STX XSAVE JSR GETDRIVE LDX XSAVE PHA LDA #0 JMP PUSH .ENDIF GETDRIVE LDA COLCRS PHA ; save xpos LDA #6 STA ROWCRS LDA #9 STA N LDA #2 STA N+1 JSR XFRAME PLA STA COLCRS INC COLCRS LDA #7 STA ROWCRS M_PRINT P_DRVS JSR GETCH PHA ; save number SEC SBC #49 BMI GETDRVERROR ; drive <= 0 ? -> error CMP #8 BPL GETDRVERROR ; drive > 8 ? -> error TAY LDA DRVS,Y CMP #'x BNE GETDRV1 GETDRVERROR PLA LDA #0 ; error ! PHA GETDRV1 PLA RTS ; ----------- CRSHIDE LDA #0 STA ACTCF BEQ L_UPDCRS3 L_UPDCRS ; Update act. Cursor CRSSHOW LDA #$80 STA ACTCF L_UPDCRS3 LDA CPOSA L_UPDCRS2 PHA CLC ADC COFSA STA 0,X PLA CLC ADC #2 STA ROWCRS LDY ACTFR LDA XPS0,Y STA COLCRS JSR PRINTDIRENTRY RTS L_UPDACT LDA ACTFR BNE L_UPDRIGHT L_UPDLEFT LDA #0 BEQ L_1 L_UPDRIGHT LDA #1 L_1 STA 0,X JMP _REFDIR
; $Id: fileio.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; DOS File IO Routines ; >>>>>>> READDIR <<<<<<< ; n -- .IF FORTH NFA_READDIR .CBYTE $87, "READDIR" LFA_READDIR .WORD NFA_PREV ; UPLINK CFA_READDIR .WORD PFA_READDIR NFA_PREV .= NFA_READDIR PFA_READDIR JSR _READDIR JMP POP .ENDIF _READDIR STX XSAVELOCAL LDA 0,X PHA ; save stack parameter BNE L1300 ; 0 = left, 1 = right dir-panel LDA DNU0 ; Set Diskdrive Number STA DFI0+1 BNE L1301 L1300 LDA DNU1 ; Set Diskdrive Number STA DFI1+1 L1301 CLC ASL 0,X LDY 0,X LDA P_0DFIL,Y ; load 2 Byte parameter STA ICBAL+$60 LDA P_0DFIL+1,Y STA ICBAH+$60 LDA DIRMEM0,Y STA ACTDM LDA DIRMEM0+1,Y STA ACTDM+1 LDA #0 STA N LDX #$60 LDA #CIOOPEN STA ICCOM,X LDA #6 ; Aux1=6 = Read Dir STA ICAX1,X JSR CIOV BMI ERROR L1302 LDA #CIOGETREC STA ICCOM,X LDA ACTDM STA ICBAL,X LDA ACTDM+1 STA ICBAH,X LDA #<$12 STA ICBLL,X LDA #>$12 STA ICBLH,X JSR CIOV LDA ICSTA+$60 BMI ERROR LDY #1 LDA (ICBALZ),Y ; FILENAME OR FREE SECTORS ? CMP #$20 BEQ L1304 LDY #3 ; IT'S THE FREE SECTORS LINE LDA (ICBALZ),Y ORA #$80 STA (ICBALZ),Y JMP CLOSEDIR L1304 ; ENTRY IS FILENAME INC N ; NUMBER OF ENTRIES LDY #$10 LDA (ICBALZ),Y ORA #$80 STA (ICBALZ),Y DEY L1305 LDA (ICBALZ),Y AND #$7F STA (ICBALZ),Y DEY BNE L1305 L1310 CLC LDA ACTDM ADC RLEN STA ACTDM BCC L1302 INC ACTDM+1 JMP L1302 ERROR CLOSEDIR LDX #$60 JSR CLOSECHANNEL ; close channel 6 DEC N PLA ; get stack parameter (left or right) TAY LDA N STA NUMD0,Y TYA CLC ASL TAY LDA ACTDM STA DIRMEE0,Y LDA ACTDM+1 STA DIRMEE0+1,Y JSR CALCCABS LDX XSAVELOCAL RTS ; --------- L_READLEFT LDY #0 BEQ L_READ L_READRIGHT LDY #1 BNE L_READ L_READACT LDY ACTFR L_READ STY 0,X JMP _READDIR GETDIR DEX DEX JSR L_READLEFT JSR L_READRIGHT INX INX RTS LOCKFILE LDA ACTLOCK CMP #'* BEQ UNLOCKFILE LDA #ciolock PHA JMP DOCIO UNLOCKFILE LDA #ciounlock PHA JMP DOCIO DELETEFILE LDA #ciodelete PHA JMP DOCIO RUNFILE LDA #cioload PHA DOCIO LDA 0,X PHA LDA 1,X PHA LDX #$60 PLA STA ICBAH,X PLA STA ICBAL,X PLA STA ICCOM,X JSR CIOV JSR CHECKERROR RTS COPYFILE JSR GETDESTFILENAME JSR OPENSOURCEFILE JSR OPENDESTFILE JSR DOCOPY LDX #$50 JSR CLOSECHANNEL LDX #$60 JSR CLOSECHANNEL RTS MOVEFILE JSR COPYFILE LDA P_DSTR STA 0,X LDA P_DSTR+1 STA 1,X JSR DELETEFILE RTS DOCOPY LDX #$60 LDA #ciogetchar STA ICCOM,X LDA DIRMEE1 PHA STA ICBAL,X LDA DIRMEE1+1 PHA STA ICBAH,X LDA COPBUF STA ICBLL,X LDA COPBUF+1 STA ICBLH,X JSR CIOV ; Read in Buffer JSR CHECKERROR LDA ICBLL,X PHA LDA ICBLH,X PHA ; Get number of bytes in buffer LDX #$50 LDA #cioputchar STA ICCOM,X PLA STA ICBLH,X PLA STA ICBLL,X PLA STA ICBAH,X PLA STA ICBAL,X JSR CIOV JSR CHECKERROR LDX #$60 LDA ICSTA,X BPL DOCOPY DOCOPYEND RTS OPENSOURCEFILE LDX #$60 ; channel 6 LDA #cioopen STA ICCOM,X LDA P_DSTR STA ICBAL,X LDA P_DSTR+1 STA ICBAH,X LDA #cioread STA ICAX1,X LDA #0 STA ICAX2,X JSR CIOV RTS OPENDESTFILE LDX #$50 ; channel 5 LDA #cioopen STA ICCOM,X LDA P_CSTR STA ICBAL,X LDA P_CSTR+1 STA ICBAH,X LDA #ciowrite STA ICAX1,X LDA #0 STA ICAX2,X JSR CIOV RTS CLOSECHANNEL LDA #cioclose STA ICCOM,X JSR CIOV RTS GETDESTFILENAME LDA P_DSTR STA N LDA P_DSTR+1 STA N+1 LDA P_CSTR STA N+2 LDA P_CSTR+1 STA N+3 LDY #15 GDF1 LDA (N),Y STA (N+2),Y DEY BNE GDF1 LDA ACTFR EOR #1 ; get number of inactive frame TAY LDA DNU,Y LDY #1 STA (N+2),Y ; set opposite Drive number RTS CHECKERROR RTS
; $Id: sort.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Sort and Framehandling Routines ; >>>> BUBBLESORT <<<< FLAST = N ; End outer loop FLENKEY .BYTE 0 ; Key length RLEN .BYTE $11 ; Record Length OFFSETKEY .BYTE 0 ; Key offset FIRST = N+2 ; 1st element pointer SECOND = N+4 ; 2nd element pointer LAST .WORD 0 ; End, inner loop FENDKEY .BYTE 0 ; end, key loop ORDER .BYTE 0 ; Order, sort 0,1 FLENSEC .BYTE 0 ; 2nd field length OFFSETSEC .BYTE 0 ; 2nd field offset FENDSEC .BYTE 0 ; End 2nd field BUBBLESORT ; set first (2 Byte), last (2 Byte) ; set FLENKEY (1 Byte), OFFSETKEY (1 Byte) ; set FLENSEC (1 Byte), OFFSETSEC (1 Byte) ; set RLEN (1 Byte), set ORDER (1 Byte) LDA ORDER EOR #01 STA ORDER LDA OFFSETKEY CLC ; Find end of ADC FLENKEY ; first key STA FENDKEY LDA OFFSETSEC CLC ; Find end of ADC FLENSEC ; second key STA FENDSEC ; ; All parms. now in zero page. ; Next, set pointer to the end ; of the outer loop LDA LAST+1 STA FLAST+1 SEC LDA LAST SBC RLEN STA FLAST BCS SETSECOND ; DEC FLAST+1 ; Start of outer loop. ; Adjust the second pointer to ; point to the first pointer ; plus the record length. ; SETSECOND CLC LDA FIRST+1 STA SECOND+1 LDA FIRST ADC RLEN STA SECOND BCC SORTKEY INC SECOND+1 ; Start of the inner loop. ; 1. Compare the Key field of ; the two sort elements. ; 2. If we find a mismatch, ; do we need to swap them? SORTKEY LDY OFFSETKEY ; KEYLOOP ; LDA (FIRST),Y ;get a byte CMP (SECOND),Y ;of each. BEQ CHKMORE ;If = Continue. ; BCC NOSWAP ;If F<S no swap. ; BCS SWAP ;If F>S swap. ; CHKMORE ; INY ;Adjust pointer CPY FENDKEY ;All done? BNE KEYLOOP ;No. Continue. ; ; At this point, all bytes in ; the key field of both sort ; elements are equal. Drop to ; SORTSECOND and check the ; secondary fields. ; If their lengths = 0, then ; we don't have 2ndry fields. ; We are only doing a one-field ; sort--goto the Noswap routine. ; If the key fields are equal, ; there is no need to swap them. ; SORTSEC LDA FLENSEC ;A second field? BEQ NOSWAPBD ;No. ; LDY OFFSETSEC SECLOOP LDA (FIRST),Y ;Compare byte CMP (SECOND),Y ;by byte... BEQ CHKMORE2 ;If = do more. ; BCC NOSWAP ;If F<S Noswap. ; BCS SWAP ;If F>s Swap. ; CHKMORE2 INY ;Point to next. CPY FENDSEC ;End of 2nd? BNE SECLOOP ;No, do more. ; ; Now, both the key and the ; secondary fields of both sort ; elemtents are equal. Goto ; the noswap routine through the ; "back door." No need to check ; the order, no need to swap. BEQ NOSWAPBD ; ; This is where the swapping ; occurs. First, check the ; swapping order. ; (Assume swapping in ascending ; order.) If order<>0, then ; sort in descending order. ; SWAP ; LDA ORDER ;Get order BNE NOSWAPBD ;Not 0, No swap ; ; Swap routine's back door. ; If NOSWAP decides we need to ; swap by checking the order, ; we need to come here (instead ; of SWAP) or we would go into ; a continuous loop. ; SWAPBD LDY #0 SWAPLOOP LDA (FIRST),Y ;Key byte PHA ; to stack. LDA (SECOND),Y ; 2ndry byte STA (FIRST),Y ; to key. PLA ;Key from stack STA (SECOND),Y ;to 2ndry. INY ;Next byte. CPY RLEN ; More? BNE SWAPLOOP ;Yes. Continue. ; ; All bytes have been swapped. ; Now adjust pointers to the ; next elements for the sort. ; Goto the noswap back door. ; BEQ NOSWAPBD ; NOSWAP ; LDA ORDER ;Is ORDER=1? BNE SWAPBD ;Yes. Swap them ; NOSWAPBD CLC LDA SECOND ADC RLEN STA SECOND LDA SECOND+1 ADC #0 STA SECOND+1 CMP LAST+1 BNE SORTKEY ; LDA SECOND CMP LAST BNE SORTKEY ; ; We've made one pass through ; the sort's inner loop. Now, ; adjust the outer loop and ; check if we're done with it. ; If not, readjust the inner ; loop pointer to the outer loop ; pointer + the record length. ; CLC LDA FIRST ADC RLEN STA FIRST LDA FIRST+1 ADC #0 STA FIRST+1 CMP FLAST+1 BEQ CHECK2 JMP SETSECOND ; CHECK2 LDA FIRST CMP FLAST BEQ ENDSORT JMP SETSECOND ; ENDSORT RTS ; RETURN SORTACT LDA ACTFR BNE SORTRIGHT SORTLEFT LDA DIRMEM0 ; left panel STA FIRST LDA DIRMEM0+1 STA FIRST+1 LDA DIRMEE0 STA LAST LDA DIRMEE0+1 STA LAST+1 JSR BUBBLESORT ; sort JSR L_UPDLEFT ; update screen RTS SORTRIGHT LDA DIRMEM1 ; left panel STA FIRST LDA DIRMEM1+1 STA FIRST+1 LDA DIRMEE1 STA LAST LDA DIRMEE1+1 STA LAST+1 JSR BUBBLESORT ; sort JSR L_UPDRIGHT ; update screen RTS SETACTFR LDY ACTFR LDA NUMD0,Y STA NUMDA LDA COFS0,Y STA COFSA LDA CPOS0,Y STA CPOSA TYA ; Accu * 2 for 2 Byte parameter CLC ASL TAY LDA DIRMEM0,Y STA ACTDM LDA DIRMEM0+1,Y STA ACTDM+1 RTS TOGGLEACT LDA ACTFR EOR #$01 STA ACTFR RTS ; >>>>>>> ADD ONE <<<<<< ; n -- n+1 ADDONE CLC LDA 0,X ADC #1 STA 0,X BCC ADDONE1 INC 1,X ADDONE1 RTS ; >>>>>>> CALC LINE <<<<<<< ; n -- addr ; .IF FORTH NFA_CALCLINE .CBYTE $88, "CALCLINE" LFA_CALCLINE .WORD NFA_PREV ; UPLINK CFA_CALCLINE .WORD PFA_CALCLINE NFA_PREV .= NFA_CALCLINE PFA_CALCLINE JSR CALCLINE0 JMP NEXT .ENDIF CALCLINE0 LDA 0,X LDY ACTDM STY 0,X LDY ACTDM+1 STY 1,X TAY CPY #0 BEQ CALCLINE3 ; 0 ? CALCLINE1 ; * 16 CLC LDA 0,X ADC #$11 STA 0,X LDA 1,X ADC #0 STA 1,X DEY BNE CALCLINE1 CALCLINE3 RTS
; $Id: debug.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Debugging Routines ; >>>>>>> RAFCDEBUG <<<<<<< ; -- .IF FORTH NFA_RAFCDEBUG .CBYTE $82, "##" LFA_RAFCDEBUG .WORD NFA_PREV ; UPLINK CFA_RAFCDEBUG .WORD PFA_RAFCDEBUG NFA_PREF = NFA_RAFCDEBUG PFA_RAFCDEBUG JSR RAFCDEBUG JMP NEXT .ENDIF RAFCDEBUG STX XSAVELOCAL LDA #0 STA COLCRS STA ROWCRS TXA JSR HEX2 TSX TXA JSR HEX2 LDX XSAVELOCAL RTS ; print accum as two hex digits HEX2 PHA LSR A LSR A LSR A LSR A JSR HEX2A PLA HEX2A AND #$0F JSR HXDGT JMP OUTCH ; ;convert hex digit to ASCII ; HXDGT CMP #$0A BCC HXDGT1 CLC ADC #7 HXDGT1 ADC #'0 RTS .IF BETA BETAMSG1 .CBYTE " RAF Commander 2000 BETA V1 " BETAMSG2 .CBYTE " 25.3.2000 NF ATARI DOS " BETAMSG3 .CBYTE "Report Bugs / Suggestions to" BETAMSG4 .CBYTE " rafcbugs@strotmann.de " BETAMSG5 .CBYTE " RAF Commander Homepage " BETAMSG6 .CBYTE "http://www.strotmann.de/rafc" BETAMSG7 .CBYTE "Released u. GPL, www.gnu.org" P_BETAMSG1 .WORD BETAMSG1 P_BETAMSG2 .WORD BETAMSG2 P_BETAMSG3 .WORD BETAMSG3 P_BETAMSG4 .WORD BETAMSG4 P_BETAMSG5 .WORD BETAMSG5 P_BETAMSG6 .WORD BETAMSG6 P_BETAMSG7 .WORD BETAMSG7 BETAMESSAGE M_FRAME 4,5,28,9 M_POS 5,6 M_PRINT P_BETAMSG1 M_POS 5,7 M_PRINT P_BETAMSG2 M_POS 5,9 M_PRINT P_BETAMSG3 M_POS 5,10 M_PRINT P_BETAMSG4 M_POS 5,11 M_PRINT P_BETAMSG5 M_POS 5,12 M_PRINT P_BETAMSG6 M_POS 5,13 M_PRINT P_BETAMSG7 JSR GETCH M_CHOUT clrscr RTS .ENDIF
; $Id: vartab.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Variable Memory VARMEM XPS0 .BYTE 1 ; XPos left panel XPS1 .BYTE 20 ; XPos right panel DNU DNU0 .BYTE '1 ; Drive Number left DNU1 .BYTE '2 ; Drive Number right CPOS0 .BYTE 0 ; Cursor Position left CPOS1 .BYTE 0 ; Cursor Position right CPOSA .BYTE 0 ; Cursor Porition act. Panel COFS0 .BYTE 0 ; Cursor Offset left COFS1 .BYTE 0 ; Cursor Offset right COFSA .BYTE 0 ; Cursor Offset act. Panel CABS0 .BYTE 0 ; Cursor absolute Position left CABS1 .BYTE 0 ; Cursor absolute Position right CABSA .BYTE 0 ; Cursor absolute Position act NUMD0 .BYTE 0 ; Number of Dir entries left panel NUMD1 .BYTE 0 ; Number of Dir entries right panel NUMDA .BYTE 0 ; Number of Dir entries act. panel ACTFR .BYTE 0 ; act. Panel (0=left, 1=right) ACTDM .WORD 0 ; act. Panel dir Memory start ACTCF .BYTE 0 ; act. Panel Cursor Flag ACTLOCK .BYTE 0 ; lock marker act. entry ERRORCD .BYTE 0 ; Errorcode XSAVELOCAL .BYTE 0 ; >>>>>> VECTORS <<<<<< VECTAB FREMEM .WORD $6000 ; begin free memory DIRMEM0 .WORD $6000 ; begin memory for left panel DIRMEM1 .WORD $6500 ; begin memory for right panel DIRMEE0 .WORD $64FF ; end memory for left panel DIRMEE1 .WORD $6FFF ; end memory for right panel COPBUF .WORD $4000 ; length of copy buffer ACTVEC .WORD RTSVEC ; action table chain vector AJMVEC .WORD RTSVEC ; active jump vector LOCVEC .WORD LOCKFILE ; jump vector lock file DELVEC .WORD DELETEFILE ; jump vector delete file COPVEC .WORD COPYFILE ; jump vector copy file MOVVEC .WORD MOVEFILE ; jump vector move file RUNVEC .WORD RUNFILE ; jimp vector run file
; $Id: strtab.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Fixed Srings STRFIX QSTR .BYTE "ANYL" ; String for Question Dialog. ; 1st letter for "(A)bort", ; 2nd letter for "(N)o", ; 3rd letter for "(Y)es", ; 4th letter for "A(L)l" ; String table for relocating text ; table of pointers to text strings ; String should never accessed direct in this ; program, but through pointers to the text STRTAB P_0RAFM .WORD RAF0 P_0DSKM .WORD DSK0 P_1DSKM .WORD DSK1 P_0FREM .WORD FRES P_1FREM .WORD FRES P_SFREM .WORD FRES P_0DFIL .WORD DFI0 P_1DFIL .WORD DFI1 P_DRVS .WORD DRVS P_DSTR .WORD DSTR P_CSTR .WORD CSTR P_LOC0 .WORD LOC0 P_COP0 .WORD COP0 P_MOV0 .WORD MOV0 P_DEL0 .WORD DEL0 P_LOA0 .WORD LOA0 P_PROC .WORD 0 ; Pointer to Process Text P_ASTR .WORD ASTR ; text srings for screen output ; Hi-Bit set is EOL marker ; (done by .CBYTE dircetive STRMEM RAF0 .CBYTE "RAF Disk Commander 2000" LOC0 .CBYTE "(Un)Locking" COP0 .CBYTE "Copy" MOV0 .CBYTE "Move" DEL0 .CBYTE "Delete" LOA0 .CBYTE "Loading" DRVS .CBYTE "12xxxxx8x" ASTR .CBYTE "(Y)es (N)o (A)bort A(l)l" DSK0 .CBYTE "[Dx:]" DSK1 .CBYTE " D " FRES .CBYTE "free:" CURC .BYTE 30 ; Marker Char DFI DFI0 .BYTE "D1:*.* " ; FILTER LEFT DFI1 .BYTE "D1:*.* " ; FILTER RIGHT DSTR .CBYTE "D1: " ; String for Disk Operations CSTR .CBYTE "D1: " ; String for Copy/Move Operations
; $Id: equ.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Equates and Definitions cioopen = 3 ciogetrec = 5 ciogetchar = 7 cioputrec = 8 cioputchar = 11 cioclose = 12 ciodelete = 33 ciolock = 35 ciounlock = 36 ciopoint = 37 cionote = 38 cioload = 40 ciosave = 41 cioformat = 254 .IF MY_DOS ciocreatedir = 34 ciochangedir = 41 .ENDIF .IF SPARTA23 .OR SPARTA_X ciolockdisk = 34 ciogetfilelen= 39 ciocreatedir = 42 ciodeletedir = 43 ciochangedir = 44 ciosetboot = 45 ciounlockdisk= 46 .ENDIF .IF SPARTA_X ciosetattr = 49 .ENDIF cioread = 4 ciowrite = 8 ciodir = 6 ; >>>>> Zero Page <<<<< DOSVEC = $0A ICHIDZ = $20 ICDNOZ = $21 ICCOMZ = $22 ICSTAZ = $23 ICBALZ = $24 ICBAHZ = $25 ICPTLZ = $26 ICPTHZ = $27 ICBLLZ = $28 ICBLHZ = $29 ICAX1Z = $2A ICAX2Z = $2B ICAX3Z = $2C ICAX4Z = $2D ICAX5Z = $2E ICAX6Z = $2F ROWCRS = $54 COLCRS = $55 LMARGN = $52 N = $F0 ; $F0-$FE Free Bytes for RAF Commander Modules XSAVE = $FF ; Save Place for X Register = Datastack Pointer TIB = $100 ; Terminal Input Buffer (80 Bytes) ; >>>>> PAGE 2-5 <<<<<< INVFLG = $2B6 CRSINH = $2F0 CH = $2FC ; Input/Output Control Block (IOCB) ICHID = $340 ICDNO = $341 ICCOM = $342 ICSTA = $343 ICBAL = $344 ICBAH = $345 ICPTL = $346 ICPTH = $347 ICBLL = $348 ICBLH = $349 ICAX1 = $34A ICAX2 = $34B ICAX3 = $34C ICAX4 = $34D ICAX5 = $34E ICAX6 = $34F ; Atari OS Vectors CIOV = $E456 .IF ATARI_800 EOUTCH = $F6A4 ; put Value in Accu on Screen (Atari 800) KGETCH = $F6E2 ; get Key from Keyboard and place in Accu (Atari 800) .ENDIF .IF ATARI_XL EOUTCH = $F2B0 ; put Value in Accu on Screen (Atari XL) KGETCH = $F2F8 ; get Key from Keyboard and place in Accu (Atari XL) .ENDIF
; $Id: macros.asm , cstrotm $ ; ; RAF Commander - A free File Manager for Atari 8bit ; Copyright (C) 1999-2000 Regionalgruppe Atari Frankfurt / RAF ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ; or visit http://www.gnu.org ; Macros ; >>>>>> MACROS <<<<<< .MACRO M_FRAME LDA #%2 STA ROWCRS LDA #%1 STA COLCRS LDA #%3 STA N LDA #%4 STA N+1 JSR XFRAME .ENDM .MACRO M_CHOUT LDA #%1 JSR OUTCH .ENDM .MACRO M_POS LDA #%2 STA ROWCRS LDA #%1 STA COLCRS .ENDM .MACRO M_PRINT INX INX LDA # <%1 STA 0,X LDA # >%1 STA 1,X JSR XSTROUT DEX DEX .ENDM