EditorsAbout the SiteComes vs. MicrosoftUsing This Web SiteSite ArchivesCredibility IndexOOXMLOpenDocumentPatentsNovellNews DigestSite NewsRSS

08.10.19

How To Write fig Programs

Posted in Free/Libre Software at 11:16 pm by Dr. Roy Schestowitz

By figosdev

Young programmer

Summary: This is the second in a two-part series on fig

This is the second in a two-part series on fig, an educational language that I use for other practical purposes.

Because I designed fig for computerphobes, you may decide it has a few odd qualities. One example is that it uses a “plus” command instead of + and a “minus” command instead of -. It also has an inline Python feature, which can be used to import Python functions into fig programs, as well as allow more traditional expressions to be evaluated, if you prefer:

python
    import math
    evaluated = math.sqrt(p ** int(s / 2.5))
    fig

Fig has its own function definition command, which you can use to create functions with Python-like scope:

function greet whom
    now = "Hello, " plus whom ; print
    fig

Fig is the standard command that in Python would be unindenting, and it is named for “return to fig programming” after inline Python. In most instances, you can use “next” if you prefer:

function greet whom
    now = "Hello, " plus whom ; print
    next

You can use this as a wrapper around a python feature like this:

function pi
python
    from math import pi as ppi ; return ppi
    fig
    fig   

r = 50
circumference = pi times 2 times r ; print

In fig, the only mandatory punctuation in syntax is “quotes for strings” and # hashes for comments. Decimal points work the same way they do in Python.

These characters are optional, and for the most part can be freely used to help visually organise your code: = ( ) | ; : ,

The vertical bar can be used to introduce students to Bash. With the exception of a few commands that start on their own line — such as for, next, forin, ifmore, ifless, iftrue, ifequal, else, break, while, wend — nearly all fig commands share a line with a variable on the far left:

height = 60 ; plus 5 ; str ; len ; print

height is 60, it adds 5 to become 65, is converted to a string: “65″ then the length is found, and 2 is printed to the screen.

As in Python, there are a few ways to create arrays:

titles = "" ; arr ; times 100

This will create an array of 100 string items. you can add items like this:

titles plus "A History of Red Hat: From Cottage Industry to Corporation"

Each time a variable is used on the left, it is set to 0– arrays are the exception:

now 5 print # prints 5
now print # prints 0
now 5 arr 
now print # prints [5]

You can create an array using split:

ingredients = "milk eggs sugar flour water" ; split ingredients " "

Unlike Python, split and join both put the variable to split or join first — then the thing to split or join it with:

ingredients = "milk eggs sugar flour water" ; split ingredients " "
ingredients = join ingredients " " ; print

Arrays are 1-based (apologies purists, it’s an educational language) and for loops are started with count-variable, start-var, stop-var, step-var:

ingredients = "milk eggs sugar flour water" ; split ingredients " "
howmany = ingredients ; len
for each, 1, howmany, 1
    now = each ; print
    next

Forin loops are started with value-tracking-variable, array:

ingredients = "milk eggs sugar flour water" ; split ingredients " "
forin each, ingredients
    now = each ; print
    next

(nextin can be used instead of next)

Files can be opened with arropen, and webpages with arrcurl:

urls = arropen "urls.txt"
buffer = arr ; mid 1 0 # zero-length array
newline = 10 ; chr 

forin each urls
    iftrue each
        geteach arrcurl each ; join geteach newline
        buffer plus geteach
        fig
    nextin

Failed downloads create an error, so add error trapping (no, this is not how you should do this in python — it is just a simple introduction to error trapping)

try
        geteach arrcurl each ; join geteach newline
        buffer plus geteach
except
        geteach ""
        resume

Finally, you can open geany using fig:

openleafpad = "leafpad &" shell

Or get the output of shell commands into an array:

textfiles = "ls *.txt" arrshell

To compile your fig program, give it a .fig extension and run it this way:

$ fig46.py program.fig

$ ./program.fig.py

To get help on a command, type part of it into the help feature:

$ fig46.py help
print

It will return all commands containing “print” in the name. hit enter instead to list all commands.

This will not work:

$ fig46.py help print

This will:

$ echo print | fig46.py help

All commands:

$ echo | fig46.py help

Fig is based on Python 2 — as much as the Python Foundation is trying to kill Python 2, I think it is a much friendlier language than the latest Python.

PyPy is Python 2 compatible, and is the interpreter fig will most likely to be paired with in the future. There are two factors being waited on: PyPy is planning to support Pygame (an optional component for fig that lets it do real graphics) and Python 2 is still supported by many distros, not least of all Debian, Devuan and Refracta.

The Python Foundation will officially drop Python 2 on January 1. If you love it anyway, try PyPy.

To make fig use PyPy instead, change the two lines that contain the string “env python2″ to “env pypy” and that should do it. You can download fig 4.6 here.

Happy Coding!

Licence: Creative Commons cc0 1.0 (public domain)

Share this post: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Reddit
  • co.mments
  • DZone
  • email
  • Google Bookmarks
  • LinkedIn
  • NewsVine
  • Print
  • Technorati
  • TwitThis
  • Facebook

If you liked this post, consider subscribing to the RSS feed or join us now at the IRC channels.

Pages that cross-reference this one

Leave a Comment

You must be logged in to post a comment.

What Else is New


  1. Openwashing Report: It's Getting Worse, Fast. Everything is Apparently 'Open' Now Even Though It's Actually Proprietary.

    The latest examples (this past week's) of openwashing in the media, ranging from 5G to surveillance



  2. GitHub is a Dagger Inside Free/Open Source Software (FOSS); This is Why Microsoft Bought It

    A year later it seems pretty evident that Microsoft doesn’t like FOSS but is merely trying to control it, e.g. by buying millions of FOSS projects/repositories at the platform level (the above is what the Linux Foundation‘s Jim Zemlin said to Microsoft at their event while antitrust regulators were still assessing the proposed takeover)



  3. Microsoft Grows Within and Eats You From the Inside

    Microsoft entryism and other subversive tactics continue to threaten and sometimes successfully undermine the competition; Microsoft is nowadays doing that to core projects in the Free/Open Source software world



  4. Links 18/8/2019: New KNOPPIX and Emmabuntus Released

    Links for the day



  5. Links 17/8/2019: Unigine 2.9 and Git 2.23

    Links for the day



  6. Computer-Generated Patent Applications Show That Patents and Innovations Are Very Different Things

    The 'cheapening' of the concept of 'inventor' (or 'invention') undermines the whole foundation/basis of the patent system and deep inside patent law firms know it



  7. Concerns About IBM's Commitment to OpenSource.com After the Fall of Linux.com and Linux Journal

    The Web site OpenSource.com is over two decades old; in its current form it's about a decade old and it contains plenty of good articles, but will IBM think so too and, if so, will investment in the site carry on?



  8. Electronic Frontier Foundation Makes a Mistake by Giving Award to Microsoft Surveillance Person

    At age 30 (almost) the Electronic Frontier Foundation still campaigns for privacy; so why does it grant awards to enemies of privacy?



  9. Caturdays and Sundays at Techrights Will Get Busier

    Our plan to spend the weekends writing more articles about Software Freedom; it seems like a high-priority issue



  10. Why Techrights Doesn't Do Social Control Media

    Being managed and censored by platform owners (sometimes their shareholders) isn’t an alluring proposition when a site challenges conformist norms and the status quo; Techrights belongs in a platform of its own



  11. Patent Prosecution Highways and Examination Highways Are Dooming the EPO

    Speed is not a measure of quality; but today's EPO is just trying to get as much money as possible, as fast as possible (before the whole thing implodes)



  12. Software Patents Won't Come Back Just Because They're (Re)Framed/Branded as "HEY HI" (AI)

    The pattern we've been observing in recent years is, patent applicants and law firms simply rewrite applications to make these seem patent-eligible on the surface (owing to deliberate deception) and patent offices facilitate these loopholes in order to fake 'growth'



  13. IP Kat Pays the Price for Being a Megaphone of Team UPC

    The typical or the usual suspects speak out about the so-called 'prospects' (with delusions of inevitability) of the Unified Patent Court Agreement, neglecting to account for their own longterm credibility



  14. Links 17/8/2019: Wine 4.14 is Out, Debian Celebrates 26 years

    Links for the day



  15. Nothing Says 'New' Microsoft Like Microsoft Component Firmware Update (More Hardware Lock-in)

    Vicious old Microsoft is still trying to make life very hard for GNU/Linux, especially in the OEM channel/s, but we're somehow supposed to think that "Microsoft loves Linux"



  16. Bill Gates and His Special Relationship With Jeffrey Epstein Still Stirring Speculations

    Love of the "children" has long been a controversial subject for Microsoft; can Bill Gates and his connections to Jeffrey Epstein unearth some unsavoury secrets?



  17. Links 16/8/2019: Kdevops and QEMU 4.1

    Links for the day



  18. The EPO's War on the Convention on the Grant of European Patents 2000 (EPC 2000), Not Just Brexit, Kills the Unitary Patent (UP/UPC) and Dooms Justice

    Team UPC continues to ignore the utter failures that have led to lawlessness at the EPO, attributing the demise of the Unified Patent Court (UPC) to Brexit alone and pretending that it's not even a problem



  19. Links 15/8/2019: GNOME's Birthday, LLVM 9.0 RC2

    Links for the day



  20. 'Foundation' Hype Spreads in China

    Nonprofits seem to have become more of a business loophole than a charitable endeavour; the problem is, this erodes confidence in legitimate Free software and good causes



  21. Links Are Not Endorsements

    If the only alternative is to say nothing and link to nothing, then we have a problem; a lot of people still assume that because someone links to something it therefore implies agreement and consent



  22. The Myth of 'Professionalism'

    Perception of professionalism, a vehicle or a motivation for making Linux more 'corporate-friendly' (i.e. owned by corporations), is a growing threat to Software Freedom inside Linux, as well as freedom of speech and many other things



  23. Links 14/8/2019: Best Chromebooks, EPEL 8.0, LibreOffice 6.2.6

    Links for the day



  24. Being in Favour of Free/Libre Open Source Software Means Rejecting Software Patents

    Those who believe in Software Freedom cannot at the same time believe that software patents are desirable; we've sadly come to a point where many companies that dominate so-called 'Open Source' groups actively lobby for such patents, in effect betraying the community they claim to be a part of



  25. Links 14/8/2019: Apache Evaluated, HardenedBSD Has New Release

    Links for the day



  26. Planet Python is Being Overrun by Microsoft, Just Like PyCon and Python in General

    Microsoft is perturbing the Free/Open Source software (FOSS) world from the inside, promoting Microsoft's most malicious proprietary software from within that world while taking positions of power in powerful FOSS projects



  27. Coming Soon: The Innards of the Eric Lundgren Case That Microsoft is Desperate to Hide or Spin (by Defaming Lundgren)

    Microsoft is rather stressed about Eric Lundgren coming out of prison and telling how Microsoft put him there; right now Microsoft is mostly name-calling while seeking to control public dialogues



  28. Wrong Person in Charge of the Linux Foundation (and in Charge of Linus Torvalds)

    There are several glaring issues when it comes to the leadership of Linux's steward; for one thing, it lacks actual background in... Linux



  29. 2019 Tech Glossary

    This clavis refers to what the de facto definition may be, based on how (and when) media uses the words nowadays



  30. The Silence of the Media Lamb

    There are reasons that are perfectly legitimate to criticise media which is unable and more so unwilling to cover particular scandals for fear that coverage can be detrimental to the media's owners and sponsors


RSS 64x64RSS Feed: subscribe to the RSS feed for regular updates

Home iconSite Wiki: You can improve this site by helping the extension of the site's content

Home iconSite Home: Background about the site and some key features in the front page

Chat iconIRC Channel: Come and chat with us in real time

Recent Posts