chiark / gitweb /
Create readable text `.bas' for each tokenized BASIC `,ffb' file.
[ssr] / StraySrc / Libraries / Sapphire / bsh / flex.bas
1 REM Sapphire flex macro library -- © 1994 Straylight
2
3 DEF FNflex_test=0
4
5 REM --- Support functions ---
6
7 DEF FNflex__m(mask$)
8 LOCAL reg$,sep$,mask%,r%,s%,i%
9 mask%=0
10 WHILE FNflex__g(mask$,reg$,sep$)
11   IF reg$="" THEN ERROR 1,"Expected register, found `"+sep$+"'"
12   r%=EVAL(reg$)
13   IF sep$="-" THEN
14     IF FNflex__g(mask$,reg$,sep$) THEN
15       IF reg$="" THEN ERROR 1,"Expected register, found `"+sep$+"'"
16       IF sep$="-" THEN ERROR 1,"Unexpected `-' in register list"
17       s%=EVAL(reg$)
18       IF s%<r% THEN SWAP s%,r%
19       FOR i%=r% TO s%
20         mask%=mask% OR (1<<i%)
21       NEXT
22     ELSE
23       ERROR 1,"Missing register name"
24     ENDIF
25   ELSE
26     mask%=mask% OR (1<<r%)
27   ENDIF
28 ENDWHILE
29 =mask%
30
31 DEF FNflex__g(RETURN mask$,RETURN reg$,RETURN sep$)
32 IF mask$="" THEN =FALSE
33 reg$=""
34 sep$=""
35 REPEAT
36   reg$+=sep$
37   sep$=LEFT$(mask$,1)
38   mask$=MID$(mask$,2)
39 UNTIL mask$="" OR INSTR("-,",sep$)
40 IF INSTR("-,",sep$)=0 THEN
41   reg$+=sep$
42   sep$=""
43 ENDIF
44 =TRUE
45
46 REM --- Macros ---
47
48 DEF FNflex_save(r$)
49 [ opt 4
50   FNimport("flex_save")
51   bl flex_save
52   dcd FNflex__m(r$) OR &e8ae0000
53 ]
54 =0
55
56 DEF FNflex_load(r$)
57 [ opt 4
58   FNimport("flex_load")
59   bl flex_load
60   dcd FNflex__m(r$) OR &e93e0000
61 ]
62 =0