diff --git a/.Docs/User Guide.md b/.Docs/User Guide.md index 8f141867..4c9f9aea 100644 --- a/.Docs/User Guide.md +++ b/.Docs/User Guide.md @@ -132,7 +132,7 @@ In maintenance mode, you still have access to all A2osX utilities and scripts, s ### A2osX Preemptive Mode -A2osX is a multiuser multitasking operating system. As with any such operating system running on a single core single CPU system such as an Apple II with the 6502, A2osX switches between all of the running processes automatically ensuring that each gets serviced in a reasonable time. It is the A2osX Kernel that performs this task in 1 of 2 manners: Cooperative or Preemptive mode. In Cooperative mode, the default, switching between processes occurs whenever an application makes a "blocking" API call such as a file services request or cooperatively relinquishes control (see the A2osX Developers Guide). In Preemptive Mode, set by option in KCONFIG utility (see A2osX Command Guide), the kernel switches between "sleeping" processes automatically at 1/10th-second intervals. In order to use Preemptive Mode, your system must have supported hardware that generates an interrupt used by A2osX such as an Apple II Mouse or Uthernet interface. +A2osX is a multiuser multitasking operating system. As with any such operating system running on a single core single CPU system such as an Apple II with the 6502, A2osX switches between all of the running processes automatically ensuring that each gets serviced in a reasonable time. It is the A2osX Kernel that performs this task in 1 of 2 manners: Cooperative or Preemptive mode. In Cooperative mode, the default, switching between processes occurs whenever an application makes a "blocking" API call such as waiting for a key pressed, a network frame... or cooperatively relinquishes control (explicitly calling >SLEEP, see the A2osX Developers Guide). In Preemptive Mode, set by option in KCONFIG utility (see A2osX Command Guide), the kernel switches between "sleeping" processes automatically at 1/10th-second intervals. In order to use Preemptive Mode, your system must have supported hardware that generates an interrupt used by A2osX such as an Apple II Mouse or ThunderClock interface. ## Devices @@ -188,7 +188,7 @@ Any ProDOS Block Device (5.25 & 3.5 Floppy Drives, SmartPort Hard Drive and Ram NoSlot Clock or ThunderClock Super Serial Card Mouse Card -Network Card (Uthernet I or II, LanCes) +Network Card (Uthernet I or II, LanCEgs) ## Getting Started diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6d8055d3..32fc2897 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/PAK.S.txt b/BIN/PAK.S.txt index ebcd22ff..df1a5271 100644 --- a/BIN/PAK.S.txt +++ b/BIN/PAK.S.txt @@ -8,21 +8,10 @@ NEW .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/KERNEL.I - .INB INC/MLI.I + .INB INC/LIBPAK.I .INB INC/MLI.E.I *-------------------------------------- -CHNK.T .EQ 0 -CHNK.T.DATA .EQ 0 -CHNK.T.DIR .EQ 1 -CHNK.T.FILE .EQ 2 -* -CHNK.TYPE .EQ 1 -CHNK.AUXTYPE .EQ 2 -CHNK.FNLEN .EQ 4 -* -CHNK.COMPALG .EQ 1 -CHNK.ULEN .EQ 2 -CHNK.CLEN .EQ 4 +CHNK.SIZE .EQ 4096 *-------------------------------------- X.ENTER.SUBDIR .EQ 0 X.COPY.TO.DEST .EQ 0 @@ -39,6 +28,7 @@ ZPFileStat .BS 2 ZPFullPath .BS 2 ZPRelPath .BS 2 +ZPBufPtr .BS 2 bAppend .BS 1 bRecurse .BS 1 bPause .BS 1 @@ -69,6 +59,7 @@ L.MSG.DIR .DA MSG.DIR L.MSG.FILE .DA MSG.FILE L.MSG.OK .DA MSG.OK L.MSG.ERR .DA MSG.ERR +L.MSG.E.IARC .DA MSG.E.IARC L.ARC.Header .DA ARC.Header .DA 0 *-------------------------------------- @@ -143,9 +134,11 @@ CS.RUN >INC.G ArgIndex jsr CS.RUN.OpenArc bcs .99 - >LDYAI 4096 + >LDYAI CHNK.SIZE >SYSCALL getmem bcs .99 + >STYA ZPBufPtr + >STYA.G Shunk txa >STA.G hMem *-------------------------------------- @@ -173,7 +166,7 @@ CS.RUN.LOOP ldy #S.PS.hStdIn .1 lda bPause bne CS.RUN.LOOP Pause... - +*-------------------------------------- jsr GetEntry bcs .9 @@ -230,8 +223,7 @@ CS.RUN.DIR lda bRecurse >SYSCALL printf bcs .9 - lda #CHNK.T.DIR - jsr CS.RUN.WriteHeader + jsr CS.RUN.WriteArcHdrDir bcs .9 >LDYA ZPFileName @@ -244,18 +236,17 @@ CS.RUN.DIR lda bRecurse *-------------------------------------- CS.RUN.FILE jsr FilterMatch bcs .8 no match, skip.... + + jsr CS.RUN.GetFilePath >PUSHW ZPFullPath - >LDA.G hArcFile tay - lda OF.Table.hPath-1,x + lda OF.Table.hPath-1,y >SYSCALL getmemptr >SYSCALL strcmp bcc .8 - jsr CS.RUN.GetFilePath - >PUSHW ZPRelPath >PUSHBI 2 @@ -263,15 +254,33 @@ CS.RUN.FILE jsr FilterMatch >SYSCALL printf bcs .9 - lda #CHNK.T.FILE - jsr CS.RUN.WriteHeader + jsr CS.RUN.WriteArcHdrFile bcs .9 jsr CS.RUN.OpenFile bcs .9 +.1 lda #'.' + >SYSCALL putchar + + jsr CS.RUN.ReadFile + bcc .2 + + cmp #MLI.E.EOF + bne .4 + jsr CS.RUN.CloseFile - + + bra .9 + +.2 jsr CS.RUN.WriteArcData + bcc .1 + +.4 pha + jsr CS.RUN.CloseFile + pla + sec + .9 jmp CS.RUN.CheckErr .8 clc @@ -307,60 +316,6 @@ CS.RUN.GetFilePath >SYSCALL StrCat rts *-------------------------------------- -CS.RUN.OpenArc >PUSHWZ Aux type - >PUSHBI $CF PAK - >PUSHBI O.CREATE+O.WRONLY - >LDA.G ArcName - >SYSCALL Argv - - >SYSCALL FOpen - bcs .9 - - >STA.G hArcFile - - >PUSHW L.ARC.Header - >LDA.G hArcFile - >SYSCALL fputs -.9 rts -*-------------------------------------- -CS.RUN.WriteHeader - >PUSHA - jsr .8 - bcs .9 - - ldy #S.STAT.P.TYPE - jsr .6 - bcs .9 - - ldy #S.STAT.P.AUXTYPE - jsr .6 - bcs .9 - - ldy #S.STAT.P.AUXTYPE+1 - jsr .6 - bcs .9 - - ldy #$ff - -.1 iny - lda (ZPRelPath),y - bne .1 - - tya - jsr .7 - bcs .9 - - >PUSHW ZPRelPath - >LDA.G hArcFile - >SYSCALL fputs - rts - -.6 lda (ZPFileStat),y -.7 >PUSHA -.8 >LDA.G hArcFile - >SYSCALL fputc -.9 rts -*-------------------------------------- CS.RUN.OpenFile >PUSHWZ Aux type >PUSHBI 0 Type >PUSHBI O.RDONLY @@ -373,6 +328,16 @@ CS.RUN.OpenFile >PUSHWZ Aux type .9 rts *-------------------------------------- +CS.RUN.ReadFile >PUSHWI CHNK.SIZE + >PUSHW ZPBufPtr + >LDA.G hFile + >SYSCALL fread + bcs .9 + + >STYA.G Shunk+2 + +.9 rts +*-------------------------------------- CS.RUN.CloseFile >LDA.G hFile >SYSCALL fclose @@ -381,6 +346,142 @@ CS.RUN.CloseFile >STZ.G hFile .9 rts *-------------------------------------- +CS.RUN.OpenArc >PUSHWZ Aux type + >PUSHBI $CF PAK + + bit bAppend + bmi .1 + + >PUSHBI O.CREATE+O.WRONLY + >LDA.G ArcName + >SYSCALL Argv + + >SYSCALL FOpen + bcs .9 + + >STA.G hArcFile + + >PUSHW L.ARC.Header + >LDA.G hArcFile + >SYSCALL fputs +.9 rts +*-------------------------------------- +.1 >PUSHBI O.RDWR + >LDA.G ArcName + >SYSCALL Argv + + >SYSCALL FOpen + bcs .9 + >STA.G hArcFile + + pha + >PUSHWI 3 + >PUSHW ZPBufPtr + pla + >SYSCALL fread + bcs .9 + + cpy #3 + bne .99 + + dey + +.2 lda ARC.Header,y + cmp (ZPBufPtr),y + bne .99 + dey + bpl .2 + + >PUSHBI SEEK.END + >PUSHWI 0 + >PUSHWI 0 + >LDA.G hArcFile + >SYSCALL fseek + bcc .8 + cmp #MLI.E.EOF + bne .99 + clc +.8 rts + +.99 >LDYA L.MSG.E.IARC + >SYSCALL puts + lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.WriteArcHdrDir + lda #CHNK.T.DIR + jsr CS.RUN.WriteArcByteA + bcc CS.RUN.WriteArcHdr + rts + +CS.RUN.WriteArcHdrFile + lda #CHNK.T.FILE + jsr CS.RUN.WriteArcByteA + bcs CS.RUN.WriteArcHdr.9 + + ldy #S.STAT.P.TYPE + jsr CS.RUN.WriteArcByteY + bcs CS.RUN.WriteArcHdr.9 + + ldy #S.STAT.P.AUXTYPE + jsr CS.RUN.WriteArcByteY + bcs CS.RUN.WriteArcHdr.9 + + ldy #S.STAT.P.AUXTYPE+1 + jsr CS.RUN.WriteArcByteY + bcs CS.RUN.WriteArcHdr.9 + +CS.RUN.WriteArcHdr + ldy #$ff + +.1 iny + lda (ZPRelPath),y + bne .1 + + tya + jsr CS.RUN.WriteArcByteA + bcs CS.RUN.WriteArcHdr.9 + + >PUSHW ZPRelPath + >LDA.G hArcFile + >SYSCALL fputs + +CS.RUN.WriteArcHdr.9 + rts +*-------------------------------------- +CS.RUN.WriteArcData + lda #CHNK.T.DATA + jsr CS.RUN.WriteArcByteA + bcs .9 + + lda #CHNK.ALG.STORE + jsr CS.RUN.WriteArcByteA + bcs .9 + + >LDA.G Shunk+2 Len LO + jsr CS.RUN.WriteArcByteA + bcs .9 Len HI + + >LDA.G Shunk+3 + jsr CS.RUN.WriteArcByteA + bcs .9 + + >PUSHW.G Shunk+2 + >PUSHW ZPBufPtr + >LDA.G hArcFile + >SYSCALL fwrite +.9 rts +*-------------------------------------- +CS.RUN.WriteArcByteY + lda (ZPFileStat),y + +CS.RUN.WriteArcByteA + >PUSHA + >LDA.G hArcFile + >SYSCALL fputc + rts +*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- @@ -397,14 +498,12 @@ CS.QUIT jsr LeaveSubDir .2 >LDA.G hArcFile beq .3 - >SYSCALL fclose .3 >LDA.G hMem beq .8 >SYSCALL FreeMem - - + .8 clc rts *-------------------------------------- @@ -439,6 +538,7 @@ MSG.USAGE .AS "Usage : PAK Archive [File *,? wildcards allowed]\r\n" .AZ " -R : Recurse subdirectories\r\n" MSG.OK .AZ "[OK]" MSG.ERR .AZ "[%h]\r\n" +MSG.E.IARC .AZ "Invalid/corrupt archive" MSG.DIR .AZ "Reading Dir:%s..." MSG.FILE .AZ "Adding File:%s..." ARC.Header .AZ "PAK" @@ -453,6 +553,11 @@ hArcFile .BS 1 hFile .BS 1 hMem .BS 1 +Shunk .BS 2 SrcPtr + .BS 2 SrcSize + .BS 2 DstPtr + .BS 2 DstSize + .INB USR/SRC/BIN/X.FILEENUM.G DS.END .ED diff --git a/BIN/UNPAK.S.txt b/BIN/UNPAK.S.txt index 1b13fc71..cd2cf8b4 100644 --- a/BIN/UNPAK.S.txt +++ b/BIN/UNPAK.S.txt @@ -3,22 +3,34 @@ NEW .LIST OFF .OP 65C02 .OR $2000 - .TF ROOT/UNPAK + .TF BIN/UNPAK *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/MLI.E.I .INB INC/LIBPAK.I *-------------------------------------- -ZPPakHdrPtr .EQ ZPBIN -ZPPakDataPtr .EQ ZPBIN+2 -ZPPakSrcPtr .EQ ZPBIN+4 - +CHNK.SIZE .EQ 4096 *-------------------------------------- -UNPAK.Mask .EQ ZPBIN+8 -UNPAK.LastByte .EQ ZPBIN+9 -UNPAK.Cnt .EQ ZPBIN+10 -UNPAK.Ofs .EQ ZPBIN+12 -UNPAK.BLOfs .EQ ZPBIN+14 + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPInBufPtr .BS 2 +ZPULen .BS 2 + +ZPPakHdrPtr .BS 2 +ZPPakDataPtr .BS 2 +ZPPakSrcPtr .BS 2 +ZPFullPathPtr .BS 2 +ZPRelPathPtr .BS 2 + +UNPAK.Mask .BS 2 +UNPAK.LastByte .BS 2 +UNPAK.Cnt .BS 2 +UNPAK.Ofs .BS 2 +UNPAK.BLOfs .BS 2 +ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -30,7 +42,7 @@ CS.START cld .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS - .DA #16 ZP + .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table @@ -39,47 +51,304 @@ CS.START cld .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT -L.MSG.USAGE .DA MSG.USAGE +L.MSG.USAGE .DA MSG.USAGE +L.MSG.DIR .DA MSG.DIR +L.MSG.FILE .DA MSG.FILE +L.MSG.OK .DA MSG.OK +L.MSG.ERR .DA MSG.ERR +L.MSG.E.IARC .DA MSG.E.IARC +L.MSG.E.OFS .DA MSG.E.OFS L.MSG.DEBUG .DA MSG.DEBUG -L.MSG.UnpakErr .DA MSG.UnpakErr -L.MSG.DEBUG.S3 .DA MSG.DEBUG.S3 .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- -CS.RUN ldy #S.PS.ARGC - lda (pPs),y - bne CS.RUN.Pak +CS.RUN >LDYAI CHNK.SIZE + >SYSCALL getmem + bcs .9 + >STYA ZPInBufPtr + txa + >STA.G hInBuf - >PUSHBI 0 + lda #1 + >SYSCALL Argv + bcs .9 + + jsr CS.RUN.OpenArc + bcs .9 + + >LDYAI 256 + >SYSCALL getmem + bcs .9 + >STYA ZPFullPathPtr + txa + >STA.G hFullPath + + lda #2 + >SYSCALL Argv + bcc .1 + + ldy #S.PS.hCWD + lda (pPS),y + >SYSCALL getmemptr + +.1 jsr CS.RUN.SetupPath + + >LDYAI CHNK.SIZE + >SYSCALL getmem + bcs .9 + txa + >STA.G hOutBuf + + jsr CS.RUN.LOOP + bcs .9 + + lda #0 + sec +.9 rts + +.99 >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL printf lda #E.SYN sec rts *-------------------------------------- -.8 sec -.9 rts +CS.RUN.SetupPath + >STYA ZPPtr1 + + ldy #$ff + +.2 iny + lda (ZPPtr1),y + sta (ZPFullPathPtr),y + bne .2 -.1 >PUSHW.G PAK.Stat+S.PAKSTAT.STORE - >PUSHW.G PAK.Stat+S.PAKSTAT.S4 - >PUSHW.G PAK.Stat+S.PAKSTAT.S3 - >PUSHW.G PAK.Stat+S.PAKSTAT.REP - >PUSHW.G PAK.Stat+S.PAKSTAT.BL - >PUSHW.G PAK.Stat+S.PAKSTAT.PASS2 - >PUSHW.G PAK.Stat+S.PAKSTAT.PASS1 - >PUSHW.G PAK.FileSize - >PUSHBI 16 - >LDYA L.MSG.DEBUG + dey + lda #'/' + cmp (ZPFullPathPtr),y + beq .3 + + iny + sta (ZPFullPathPtr),y + +.3 tya + sec + adc ZPFullPathPtr + sta ZPRelPathPtr + lda #0 + adc ZPFullPathPtr+1 + sta ZPRelPathPtr+1 + + rts +*-------------------------------------- +CS.RUN.LOOP jsr CS.RUN.GetByte + bcs .9 + +.10 cmp #CHNK.T.DIR + bne .1 + + jsr CS.RUN.GetFileName + bcs .9 + + ldx #0 + jsr CS.RUN.PrintFN + + jsr CS.RUN.CheckDir + bcs .99 + + >LDYA L.MSG.OK + >SYSCALL puts + + bra CS.RUN.LOOP + clc +.99 rts + +.9 jmp CS.RUN.E.IARC + +.1 cmp #CHNK.T.FILE + bne .9 + + jsr CS.RUN.GetFileType + bcs .9 + + jsr CS.RUN.GetFileName + bcs .9 + + ldx #2 + jsr CS.RUN.PrintFN + + jsr CS.RUN.OpenFile + bcs .9 +*-------------------------------------- + jsr CS.RUN.GetByte DATA + bcs .8 eof + +.2 cmp #CHNK.T.DATA + bne .3 Could be a 0 byte file + +.20 jsr CS.RUN.GetByte ALG + bcs .9 + cmp #0 STORE + bne .9 + + jsr CS.RUN.GetByte ULEN LO + bcs .9 + sta ZPULen + + jsr CS.RUN.GetByte ULEN HI + bcs .9 + sta ZPULen+1 + + jsr CS.RUN.ReadData + bcs .9 + + jsr CS.RUN.WriteFile + bcs .9 + + jsr CS.RUN.GetByte + bcs .8 + + cmp #CHNK.T.DATA + beq .20 + +.3 pha + jsr .8 + pla + + jmp .10 + +.8 >LDA.G hFile + >SYSCALL fclose + >LDYA L.MSG.OK + >SYSCALL puts + rts +*-------------------------------------- +CS.RUN.PrintFN >PUSHW ZPFullPathPtr + >PUSHBI 2 + >LDYA L.MSG.DIR,x >SYSCALL printf + rts +*-------------------------------------- +CS.RUN.OpenArc pha + >PUSHWZ Aux type + >PUSHBI $CF PAK + >PUSHBI O.RDONLY + pla + >SYSCALL FOpen + bcs .9 + >STA.G hArcFile + + pha + >PUSHWI 3 + >PUSHW ZPInBufPtr + pla + >SYSCALL fread + bcs .9 + + cpy #3 + bne .99 + + dey + +.1 lda MSG.PAK,y + cmp (ZPInBufPtr),y + bne .99 + dey + bpl .1 + + clc +.9 rts + +.99 +CS.RUN.E.IARC >LDYA L.MSG.E.IARC + >SYSCALL puts + lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.GetFileType + >PUSHWI 3 + >PUSHEA.G FileType + >LDA.G hArcFile + >SYSCALL fread + rts +*-------------------------------------- +CS.RUN.GetFileName + jsr CS.RUN.GetByte + bcs .9 + + tay + lda #0 + + >PUSHYA + >PUSHW ZPRelPathPtr + >LDA.G hArcFile + >SYSCALL fread + bcs .9 + + lda #0 + sta (ZPRelPathPtr),y + +* clc + +.9 rts +*-------------------------------------- +CS.RUN.ReadData >PUSHW ZPULen + >PUSHW ZPInBufPtr + >LDA.G hArcFile + >SYSCALL fread + rts +*-------------------------------------- +CS.RUN.GetByte >LDA.G hArcFile + >SYSCALL getc + rts +*-------------------------------------- +CS.RUN.CheckDir >PUSHEA.G STAT + >LDYA ZPFullPathPtr + >SYSCALL stat + bcc .1 + + >LDYA ZPFullPathPtr + >SYSCALL mkdir + + rts + +.1 ldy #STAT+S.STAT.P.TYPE + lda (pData),y + cmp #$F + bne .99 + clc + rts + +.99 lda #MLI.E.INVPATH + sec +.9 rts +*-------------------------------------- +CS.RUN.OpenFile >PUSHW.G FileAuxType + >PUSHB.G FileType + >PUSHBI O.CREATE+O.WRONLY+O.TRUNC + >LDYA ZPFullPathPtr + >SYSCALL FOpen + bcs .9 + >STA.G hFile +.9 rts +*-------------------------------------- +CS.RUN.WriteFile + >PUSHW ZPULen + >PUSHW ZPInBufPtr + >LDA.G hFile + >SYSCALL fwrite + rts *-------------------------------------- * Y,A = Ptr to Shunk Header: * +0 : Flags * 10000000 : LZ8 encoded, 1 byte (ESC) follow * 01000000 : BS *-------------------------------------- -CS.RUN.Unpak lda ZPPakHdrPtr +CS.RUN.UnpakChnk + lda ZPPakHdrPtr clc adc #S.PAKSTAT sta ZPPakDataPtr @@ -100,10 +369,7 @@ CS.RUN.Unpak lda ZPPakHdrPtr lda #$80 sta UNPAK.Mask - >LDA.G PAK.hFileBuf - >SYSCALL GetMemPtr - >STYA ZPPakSrcPtr - + stz UNPAK.Ofs stz UNPAK.Ofs+1 @@ -126,11 +392,11 @@ CS.RUN.Unpak lda ZPPakHdrPtr ldx #3 jsr CS.RUN.UnpakGetXBitInA clc - adc #S.PAKHDR.SHORT3 +* adc #S.PAKHDR.SHORT3 tay lda (ZPPakHdrPtr),y sta UNPAK.LastByte - jsr DEBUG.S3 + jsr CS.RUN.UnpakCmpA bcs .9 bra .1 @@ -142,7 +408,7 @@ CS.RUN.Unpak lda ZPPakHdrPtr ldx #4 jsr CS.RUN.UnpakGetXBitInA clc - adc #S.PAKHDR.SHORT4 +* adc #S.PAKHDR.SHORT4 tay lda (ZPPakHdrPtr),y sta UNPAK.LastByte @@ -205,7 +471,7 @@ CS.RUN.Unpak lda ZPPakHdrPtr .9 >PUSHW UNPAK.Ofs >PUSHBI 2 - >LDYA L.MSG.UnpakErr + >LDYA L.MSG.ERR >SYSCALL printf lda #0 @@ -266,44 +532,46 @@ CS.RUN.UnpakCmpA .9 sec rts *-------------------------------------- -DEBUG.S3 pha - phx - phy - >PUSHA - >PUSHBI 1 - >LDYA L.MSG.DEBUG.S3 - >SYSCALL printf - ply - plx - pla - rts - lda #0 - sec - rts -*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- -CS.QUIT >LDA.G PAK.hFileName +CS.QUIT >LDA.G hFile beq .1 - >SYSCALL FreeMem + >SYSCALL fclose -.1 >LDA.G PAK.hFileBuf +.1 >LDA.G hFullPath beq .2 >SYSCALL FreeMem -.2 >LDA.G PAK.hOutBuf - beq .8 +.2 >LDA.G hOutBuf + beq .3 >SYSCALL FreeMem +.3 >LDA.G hInBuf + beq .4 + + >SYSCALL FreeMem + +.4 >LDA.G hArcFile + beq .8 + + >SYSCALL fclose + .8 clc rts *-------------------------------------- CS.END -MSG.USAGE .AS "Usage : UNPAK Archive [DstDir]\r\n" +MSG.USAGE .AZ "Usage : UNPAK Archive [DstDir]\r\n" +MSG.DIR .AZ "Creating Dir:%s..." +MSG.FILE .AZ "Extracting File:%s..." +MSG.OK .AZ "[OK]" +MSG.ERR .AZ "[%h]\r\n" +MSG.E.IARC .AZ "Invalid/corrupt archive" +MSG.E.OFS .AZ "UnPak Error at Offset : %L\r\n" +MSG.PAK .AS "PAK" *-------------------------------------- MSG.DEBUG .AS "Src Length : %D\r\n" .AS "Pass #1 : %D\r\n" @@ -313,20 +581,21 @@ MSG.DEBUG .AS "Src Length : %D\r\n" .AS "S3 Count : %D\r\n" .AS "S4 Count : %D\r\n" .AZ "STO Count : %D\r\n" -MSG.UnpakErr .AZ "UnPak Error at Offset : %H\r\n" -MSG.DEBUG.S3 .AZ "S3:%h\r\n" *-------------------------------------- .DUMMY .OR 0 DS.START -PAK.hFileName .BS 1 -PAK.FileSize .BS 2 -PAK.hFileBuf .BS 1 -PAK.hOutBuf .BS 1 -PAK.Stat .BS S.PAKSTAT +hArcFile .BS 1 +hFullPath .BS 1 +hInBuf .BS 1 +hOutBuf .BS 1 +hFile .BS 1 +FileType .BS 1 +FileAuxType .BS 2 +STAT .BS S.STAT DS.END .ED *-------------------------------------- MAN -SAVE BIN/UNPAK.S +SAVE USR/SRC/BIN/UNPAK.S ASM diff --git a/INC/LIBPAK.I.txt b/INC/LIBPAK.I.txt index 48bb3ffe..ba90c6f4 100644 --- a/INC/LIBPAK.I.txt +++ b/INC/LIBPAK.I.txt @@ -2,6 +2,21 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- +CHNK.T .EQ 0 +CHNK.T.DIR .EQ 1 +CHNK.T.FILE .EQ 2 +CHNK.T.DATA .EQ 128 +* +CHNK.TYPE .EQ 1 FILE/DIR +CHNK.AUXTYPE .EQ 2 +CHNK.FNLEN .EQ 4 +* +CHNK.ALG .EQ 1 DATA +CHNK.ALG.STORE .EQ 0 +CHNK.ULEN .EQ 2 +* +CHNK.CLEN .EQ 4 +*-------------------------------------- STOREMAX .EQ 64 *-------------------------------------- * File Header :