Pac2Pic
10 rem Convert a compressed PAC file to PIC
11 rem Modes 0/4, 8, 16, 32, 33, 64
12 :
13 rem Invoke with:
14 :
15 rem er = FEW('<path>Pac2Pic_bas'; '<path>mypic_pac')
16 :
17 rem to convert <path>mypic_pac to <path>mypic_pic
18 :
19 fnm$ = CMD$
20 :
21 l% = LEN(fnm$)
22 IF l% < 10: QUIT -12
23 IF NOT (fnm$(l% - 2 TO l%) == 'pac'): QUIT -19
24 out$ = fnm$(1 TO l% - 3) & 'pic'
25 :
26 er = Pac2Pic(fnm$, out$, 0)
27 BEEP 2000, 2
28 QUIT er
29 :
30 :
31 rem + ------------------------------------------------------------------------ +
32 rem |< Pac2Pic >|
33 rem + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +
34 rem | Convert an RLE compressed PAC file to PIC |
35 rem | |
36 rem | overw - 1 => unconditional overwrite, 0 => error if file already exists! |
37 rem | |
38 rem | Dependencies: DERLE - external toolkit command |
39 rem | SMSQ/E due to POKE_X adr, multiple, and inline $hex |
40 rem + ------------------------------------------------------------------------ +
41 rem | V0.01, pjw, 2020 May 21 |
42 rem + ------------------------------------------------------------------------ +
43 :
44 DEFine FuNction Pac2Pic(pac$, pic$, overw)
45 LOCal ch, pac, pic, fl, sz, csz, md%, rle%
46 :
47 ch = FOP_IN(pac$): IF ch < 0: RETurn ch
48 fl = FLEN(#ch): CLOSE#ch
49 IF fl < 18: RETurn -15: rem Cant be a PAC
50 pac = ALCHP(fl)
51 LBYTES pac$, pac
52 :
53 rem Basic format check
54 rle = PEEK_L(pac + 0)
55 f% = PEEK_W(pac + 4)
56 rle = rle - $524C4530: rem "RLE0"
57 IF NOT rle INSTR '124' OR f% <> $4AFC: RECHP pac: RETurn -12
58 :
59 rem PIC header
60 x% = PEEK_W(pac + 6)
61 y% = PEEK_W(pac + 8)
62 l% = PEEK_W(pac + 10)
64 m% = PEEK_W(pac + 12)
65 :
66 rem Decompress
67 sz = 10 + y% * l%
68 pic = ALCHP(sz): IF pic <= 0: RECHP pac: RETurn -4
69 DERLE pac + 14, pic + 10, sz - 10, rle
70 POKE_W pic, f%, x%, y%, l%, m%
71 :
72 rem Save
73 IF overw THEN
74 SBYTES_O pic$, pic, sz
75 sz = 0
76 ELSE
77 ch = FOPEN(pic$)
78 IF ch = -7 THEN
79 SBYTES pic$, pic, sz
80 sz = 0
81 ELSE
82 IF ch < 0: sz = ch: ELSE : CLOSE#ch: sz = -8
83 END IF
84 END IF
85 :
86 rem Release memory LIFO
87 RECHP pic
88 RECHP pac
89 RETurn sz: rem sz re-purposed as error code
90 END DEFine Pac2Pic
91 :
92 :
Generated with sb2htm on 2020 Dec 14
©pjwitte March 2oi9
QL Software
