Astrological Aspect Calculation Program, in BASIC
This routine allows you to successively input the placements of your luminaries, planets, Ascendant and Midheaven by signs and degrees. It then automatically calculates and displays all aspects found between the factors concerned, showing the names of the aspects found and how close to exact they are to the nearest tenth of a degree.
Part One: the Program
Original programming copyright Philip Graves (2002; 2019); adaptation and further distribution welcome, on condition of acknowledging original programming authorship in any such event.
Part Two: Release notes and how the program works
- Program written in 2002 on the Acorn BBC microcomputer
- Transcript first published to MSN Groups in 2002
- Transcript republished on Facebook, 10 February 2011
- Transcription errors corrected; decimal point display limiter added; aspect names selectively updated; bug preventing some 0.0º orb oppositions from displaying in results eliminated; and program upgraded to include the Ascendant, the Midheaven and Ceres, and to increase the sensitivity to minor aspects down to those with an orb of at least 0.3º, 23 March 2019
How the Program Works
I wrote this program in about 24 hours early in 2002 on an Acorn BBC Model B+ microcomputer after being dissatisfied with the limited flexibility of the software offered freely on the Internet when it came to user-determination of aspects and their orbs. I have never purchased astrology software, and imagine it is possible that bought software allows more user control of these things. But this was for free, and anyone who knows BASIC should find it very easy to adapt according to personal preferences for orb calculation.
There are plenty of BBC emulators around on the Internet, including the free BeebEm emulator for PC, on which I’ve tested this program as recently as 2019. I don’t know which the best emulator is, and the downloading and installing process is not always easy in my experience, but for anyone game, it’s worth a try. Or you can adapt it to other platforms that run BASIC programs with a little thought, if you understand the language.
I’d be happy to explain the function of each instruction and parameter to anyone who needs help with this, although after so many years I need a little time to reflect and refamiliarise myself with what the variables and routines are doing!
Where I have shown an underscore, please do not type an underscore; instead type a space using the space bar! For most purposes, spaces are not required in BBC BASIC, and just take up memory. But in some cases they are.
Please note that at the time I wrote this program I was looking at aspects in a very modern way, based on harmonic theory, thus allowing for very minor aspects, some of which I could not determine the standard names for, with the result that I had made up my own working names that described as clearly as possible their essential derivation.
Once the functions of the various parameters and data in this program are properly understood, it is very easy to customise it. I would be more than happy to discuss this with anyone sufficiently interested to ask. For example, one could easily increase the number of points considered from 14 to 22 just by altering a few lines in the program and a few lines of data. Thus we could additionally consider aspects to Juno, Vesta, Pallas, Hygiea, the Vertex, Black Moon Lilith, Chiron, and Eris, if desired.
In operation, the program allows for the degrees of longitude at which each planet is situated to be expressed to the nearest decimal point, and you should input the positions of the factors in the chart you are looking at to the nearest whole decimal point accordingly. It does not convert from minutes of degrees to decimal points of degrees, so you have to do this yourself, but this is easy enough. The range of allowable orb for each aspect can be (and has been) customised to the nearest decimal point of a degree according to taste (in a few cases of very minor aspects, to the nearest twentieth of a degree).
When you run the program, it asks you for the sign and degree of sign at which each planet in turn is situated. Then it converts this data into the absolute degree data needed for calculation purposes. It performs its calculations then lists all the aspects found between the planets and the closeness to exactness of each aspect to the nearest decimal point of a degree (the 90 variables O in the program represent the orb in the case of every possible planetary combination, although in practice only some of the 90 are calculated each time you run the program: those needed where the planets in question have already been discovered to be in some kind of mutual aspect according to the ranges of degrees so qualifying according to the data).
Lines 50-70 in the program show how the exact number of degrees (E) involved in each of the 38 aspect types that have been programmed into the data is calculated (for the conjunction and opposition, it is merely declared, in lines 50 and 60 respectively; for the rest, it is calculated by the routine in line 70 from the minimum and maximum positions specified in the program data for the aspect type in question). From the E for each aspect type is determined the orb from exactness of each actually occurring aspect by the simple routine in lines 250 and 260.
NB: In Line 120, UN. is the standard abbreviation in BBC BASIC input method for the instruction UNTIL; and LE. is the standard abbreviation in BBC BASIC input method for the instruction LEFT$( – including the opening parenthesis.
The use of the abbreviated input method for the instructions UNTIL and LEFT$ is essential in order to complete this line within the available space allowed for inputting lines. A quirk of BBC BASIC is that you are allowed to type in lines as long as would fit in a certain number of lines on the screen. Thus, if you do not use the most economical input method, you sometimes cannot input the whole line you had in mind at all – and this is a case in point in practice! Once you have successfully input the line, the BBC computer will expand the abbreviated instructions on screen at the time of listing the program, displaying them instead as their complete forms. In other words, the numbered lines of your program are allowed to be longer than the number of screen-lines you are limited to at the input stage once that stage is complete!