Aspect calculation program, in BASIC
(written in 2002 on the Acorn BBC microcomputer; should work with an emulator)
– 10 February 2011

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. I don’t know which the best 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, but these could very easily be altered in favour of more standard ones where they exist.

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 double the number of points considered from 11 to 22 just by altering a few lines in the program and a few lines of data. Thus we could additionally consider aspects to Ceres, Juno, Vesta, Pallas, Hygiea, the ascendant, the Vertex, the Midheaven, 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. 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.

When you run it, 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 55 variables O in the program representing the orb in the case of every possible planetary combination, although in practice only some of the 55 are calculated: those needed where the planets in question have already been discovered to be in some kind of mutual aspect).

Lines 50-70 in the program show how the exact number of degrees (E) involved in each of the 27 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$. What I don’t recall is whether in fact it is the abbreviation for LEFT$( – i.e. including the opening bracket that is clearly necessary to complete the following attributes, which otherwise lack their opening bracket as printed here. It is just possible that I might have typed up the program incorrectly, omitting these crucial opening brackets. If this line brings up an error, that will be the reason. I do not presently have access to my BBC B+ or an emulator so I cannot test this at present.

What I do clearly recall about this line of the program was that the use of the abbreviated input method for the instructions UNTIL and LEFT$ was essential in order to complete this line within the available space allowed for inputting lines. A quirk of BBC BASIC was that you were allowed to type in lines as long as would fit in a certain number of lines on the screen. Thus, if you did not use the most economical input method, you sometimes could not input the whole line you had in mind at all – and this was 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!

10*TV255

20CLEAR

30DIMA$(12),A(12),B$(27),B(27),C(27),E(27)

40RESTORE360:FORI%=1TO12:READA$(I%),A(I%):NEXT:FORI%=1TO27:READB$(I%),B(I%),C(I%)

50IFI%=1_E(I%)=0:NEXT

60IFI%=27_E(I%)=180:NEXT

70IFI%<27ANDI%>1_E(I%)=(B(I%)+((C(I%)-B(I%))/2)):NEXT

80DIMP$(11),S$(11),D(11):RESTORE400:FORI%=1TO11:READP$(I%):NEXT

90MODE7:PRINT’

100FORI%=1TO11:K%=I%:IFK%>6K%=K%-6

110REPEAT:PRINTCHR$(128+K%);”Please_enter_”;P$(I%);”_sign”;:INPUTS$(I%)

120UN.LE.S$(I%),2)=”AR”ORLE.S$(I%),2)=”TA”ORLE.S$(I%),2)=”GE”ORLE.S$(I%),3)=”CAN”ORLE.S$(I%),2)=”LE”
ORLE.S$(I%),2)=”VI”ORLE.S$(I%),2)=”LI”ORLE.S$(I%),2)=”SC”ORLE.S$(I%),2)=”SA”ORLE.S$(I%),3)=”CAP”
ORLE.S$(I%),2)=AQ”ORLE.S$(I%),2)=”PI”

130REPEAT:PRINTCHR$(128+K%);”Please_enter_”P$(I%);”_degree”;:INPUTD(I%):UNTILD(I%)>=0AND_D(I%)<=30:NEXT

140DIMSI$(11)

150FORI%=1TO11:IFLEFT$(S$(I%),2)=”AR”SI$(I%)=A$(1):S%=1ELSEIFLEFT$(S$(I%),2)=”TA”SI$(I%)=A$(2):S%=2
ELSEIFLEFT$(S$(I%),2)=”GE”SI$(I%)=A$(3):S%=3ELSEIFLEFT$(S$(I%),3)=”CAN”SI$(I%)=A$(4):S%=4
ELSEIFLEFT$(S%(I%),3)=”CAP”SI$(I%)=A$(10):S%=10

160IFLEFT$(S$(I%),2)=”LE”SI$(I%)=A$(5):S%=5ELSEIFLEFT$(S$(I%),2)=”VI”SI$(I%)=A$(6):S%=6
ELSEIFLEFT$(S$(I%),2)=”LI”SI$(I%)=A$(7):S%=7ELSEIFLEFT$(S$(I%),2)=”SC”SI$(I%)=A$(8):S%=8
ELSEIFLEFT$(S%(I%),2)=”SA”SI$(I%)=A$(9):S%=9

170IFLEFT$(S$(I%),2)=”AQ”SI$(I%)=A$(11):S%=11ELSEIFLEFT$(I%),2)=”PI”SI$(I%)=A$(12):S%=12

180IFI%<=11_D(I%)=D(I%)+A(S%):NEXT

190DIM_G(55),F(55),T(55),U(55),V(55),T$(55),U$(55),V$(55),O(55),Y(55)

200RESTORE410:FORI%=1TO55:READU(I%),V(I%):U$(I%)=P$(U(I%)):V$(I%)=P$(V(I%)):G(I%)=D(U(I%)):F(I%)=D(V(I%))

210IFI%<=55AND_G(I%)>(180+F(I%))F(I%)=F(I%)+360:GOTO220_ELSE_IF_I%<=55AND_F(I%)>(180+G(I%))G(I%)=G(I%)+360:GOTO220

220IFG(I%)>=F(I%)T(I%)=G(I%)-F(I%)

230IFG(I%)<F(I%)T(I%)=F(I%)-G(I%)

240FORJ%=1TO27:IFT(I%)>B(J%)ANDT(I%)<C(J%)T$(I%)=B$(J%):Y(I%)=2:Z%=2

250IFZ%=2ANDT(I%)>=E(J%)O(I%)=T(I%)-E(J%)

260IFZ%=2ANDT(I%)<E(J%)O(I%)=E(J%)-T(I%)

270Z%=1:NEXT

280IFY(I%)<>2T$(I%)=”not_aspecting”:NEXT_ELSENEXT

290H%=0:CLS

300FORI%=1TO55:IFI%>55END_ELSEK%=I%:REPEAT:IFK%>6K%=K%-6:UNTILK%<7

310IFY(I%)<>2ANDI%=55END

320IFY(I%)<>2NEXT

330IFY(I%)=2H%=H%+1:PRINTCHR$((128+K%));U$(I%);”_”;T$(I%);”_”;V$(I%);”_”;O(I%):
IFH%=20ORH%=40ORH%=60PRINT’CHR$(128+K%));”Hit_any_key_to_continue”:H$=GET$:CLS

340IFI%=55END

350NEXT

360DATA”ARIES”,0,”TAURUS”,30,”GEMINI”,60,”CANCER”,90,”LEO”,120,”VIRGO”,150,”LIBRA”,180,
“SCORPIO”,210,”SAGITTARIUS”,240,”CAPRICORN”,270,”AQUARIUS”,300,”PISCES”,330

370DATA”Conjunct”,0,9,”Squisextile”,14.5,15.5,”Squisquare”,21.7,23.3,”Semisextile”,28.5,31.5,”Decile”,35.4,36.6,
“Novile”,39,41,”Semisquare”,42.8,47.2,”Septile”,50.5,52.3,”Sextile”,57,63,”Trisquisquare”,66.7,68.3,”Quintile”,70.2,73.8

380DATA”Quinsquisextile”,74.5,77.5,”Binovile”,79,81,”Square”,84,96,”Biseptile”,102,103.8,”Septsquisextile”,104.5,105.5,
“Tridecile”,107.4,108.6,”Quinsquisquare”,111.7,113.3,”Trine”,115.5,124.5,”Sesquisquare”,132.8,137.2,”Biquintile”

390DATA142.2,145.8,”Quincunx”,148.5,151.5,”Triseptile”,153.4,155.2,”Septsquisquare”,156.7,158.3,
“Quadrinovile”,159,161,”Undecasquisextile”,164.5,165.5,”Opposition”,171,180

400DATA”Sun”,”Moon”,”Mercury”,”Venus”,”Mars”,”Jupiter”,”Saturn”,”Uranus”,”Neptune”,”Pluto”,”North Node”

410DATA1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,
4,5,4,6,4,7,4,8,4,9,4,10,4,11,5,6,5,7,5,8,5,9,5,10,5,11,6,7,6,8,6,9,6,10,6,11,7,8,7,9,7,10,7,11,8,9,8,10,8,11,9,10

420DATA9,11,10,11

Original programming copyright Philip Graves (2002); adaptation and further distribution welcome, on condition of acknowledging original programming authorship in any such event.

Share to:

Be the first to comment

Leave a Reply

Your email address will not be published.


*