--- /dev/null
+REM Sapphire flex macro library -- © 1994 Straylight
+
+DEF FNflex_test=0
+
+REM --- Support functions ---
+
+DEF FNflex__m(mask$)
+LOCAL reg$,sep$,mask%,r%,s%,i%
+mask%=0
+WHILE FNflex__g(mask$,reg$,sep$)
+ IF reg$="" THEN ERROR 1,"Expected register, found `"+sep$+"'"
+ r%=EVAL(reg$)
+ IF sep$="-" THEN
+ IF FNflex__g(mask$,reg$,sep$) THEN
+ IF reg$="" THEN ERROR 1,"Expected register, found `"+sep$+"'"
+ IF sep$="-" THEN ERROR 1,"Unexpected `-' in register list"
+ s%=EVAL(reg$)
+ IF s%<r% THEN SWAP s%,r%
+ FOR i%=r% TO s%
+ mask%=mask% OR (1<<i%)
+ NEXT
+ ELSE
+ ERROR 1,"Missing register name"
+ ENDIF
+ ELSE
+ mask%=mask% OR (1<<r%)
+ ENDIF
+ENDWHILE
+=mask%
+
+DEF FNflex__g(RETURN mask$,RETURN reg$,RETURN sep$)
+IF mask$="" THEN =FALSE
+reg$=""
+sep$=""
+REPEAT
+ reg$+=sep$
+ sep$=LEFT$(mask$,1)
+ mask$=MID$(mask$,2)
+UNTIL mask$="" OR INSTR("-,",sep$)
+IF INSTR("-,",sep$)=0 THEN
+ reg$+=sep$
+ sep$=""
+ENDIF
+=TRUE
+
+REM --- Macros ---
+
+DEF FNflex_save(r$)
+[ opt 4
+ FNimport("flex_save")
+ bl flex_save
+ dcd FNflex__m(r$) OR &e8ae0000
+]
+=0
+
+DEF FNflex_load(r$)
+[ opt 4
+ FNimport("flex_load")
+ bl flex_load
+ dcd FNflex__m(r$) OR &e93e0000
+]
+=0