Advertisement
KipIngram

Forth NUMBER Implementation

Apr 13th, 2021
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. .: set s1 or! ;
  2. .: clr not s1 and! ;
  3. .: bits s1 @ and ;
  4. .: set? dup bits = ;
  5. .: clr? bits 0= ;
  6. .: test clr? swap set? and ;
  7. .: assert test 0>; 3 err [
  8. .: set! 0 over assert or set ;
  9.  
  10. .: fwd s3 1+! ;
  11. .: peek s3 @ c@ ;
  12. .: get fwd peek ;
  13.  
  14. : number frame { 0 pre digits post 4 } ;
  15. .: frame 0 wbuf 1+ 0 0 10 ;
  16.  
  17. .: pre peek -? x? b? >digit ;
  18. .: -? 45 .!=; drop 0 2 set! get ;
  19. .: x? 120 .!=; 16 !: ;;
  20. .: b? 98 .!=; two, colonbam, dosem2
  21. .: :! nip base! 58 need ;
  22. .: need get =; 1 err [
  23.  
  24. .: base! 1>? s0 ! 0 120 set ;
  25. .: 1>? 1 .u>; 6 err [
  26.  
  27. .: digits get \0?; handle me [
  28. .: \0?; ?dup 0=;; ;
  29. .: handle :? .? e? >digit ;
  30. .: :? 58 .!=; drop base! 0 ;;
  31. .: .? 46 .!=; drop 0 81 set! ;;
  32. .: e? 101 .!=; post 0 64 36 set! ;;
  33.  
  34. .: post neg? 2 clr final ;
  35. .: neg? 2 set? 0=; negate ;
  36. .: final exp?; s4 ! ;
  37. .: exp?; 5 clr? 0>; 5 err [
  38.  
  39. .: >digit (digit) case? valid? absorb ;
  40. .: (digit) 0-9? A-Z? a-z? 2 err
  41. .: 0-9? 48 - 10 .u<;; ;
  42. .: A-Z? 7 - 36 .u<;; ;
  43. .: a-z? 6 - 62 .u<;; ;
  44. .: case? s0 @ 36 u>; 27 .u<; 26 - ;
  45. .: valid? s0 @ .u<; 2 err [
  46. .: +dp? 1 bits and s2 +! ;
  47. .: absorb swap s0 @ * + +dp? ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement