Programmering i Pascal

Lazarus free Pascal

Eksempel på MS QuickBASIC

Fra Basic til Pascal

1983 købte jeg en Commodore 64, og ret hurtigt derefter en floppydisk station. At lede efter programmer på en transistor radio med indbygget kassettebåndspiller er et helvede. Det var nu en udmærket maskine at lære Basic med, men det havde en tendens til at blive spagettiprogrammering, også selv om man lavede spring på 10 i linjenummereringen. Jeg endte altid op med en masse GOTO xxx linier, ikke ligefrem optimalt for flowet i programmet.

I 1988 begyndte jeg for alvor at gå i dybden med programmering. Jeg havde lave en del småprogrammer i Basic, men efterhånden som programmerne blev mere og mere avancerede, blev de også langsommere at eksekvere, og det irriterede mig. På det tidspunkt foregik mine opgaver på en IBM-XT klone turbo (klokfrekvens på 4,77 MHz – turbo 8.5 MHz): Intel 8086 processor, 640 kB RAM, en harddisk på hele 10 MB, MS DOS 3.2 med en opstartshastighed på knap 4 minutter. IBM PC compatible – Wikipedia . Tidligere havde det været på en Commodore 64 efterfulgt af CP/M maskinen – begge med kun 64 kB RAM – ikke imponerende efter nutidens standard. På CP/M maskinen havde jeg i 1984 skrevet et ruteplanlægnings program, hvor jeg kunne indtaste waypoints jag havde sat ud i søkort, og som output kunne få kurs og distance, jeg havde sågar lavet en print rutine så jeg kunne få ruterne ud på papir med ETA til de forskellige waypoints ved en given fart.

For at forstå mit skifte, skal man vide, at Basic er et interpreter sprog, hvilke betyder at en oversætter skal fortolke det skrevne program hver gang det eksekveres. Pascal derimod er et compiler sprog, som har den fordel at man oversætter programmet til en eksekverbar fil, som kan afvikles igen og igen uden at oversætteren skal aktiveres

Borland Turbo Pascal 4.0

Jeg anskaffede mig Borland Turbo Pascal 4.0, hvilket er forløberen til objekt orienteret programmering (OOP), og samtidig et sprog der compileres for at danne den eksekverbare fil .COM eller .EXE. TP 4.0 introducerede “Units”, hvilket rigtigt udnyttet kunne anvendes som en slags OOP.  Nu var jeg i stand til at lave programmer af større kompleksitet end det var mig muligt i Basic. Skærmen var en ren tekst skærm 25 linjer á 80 karaktere endog i farver – hele 16 forskellige. Hver karakter bestod af 2 bytes, 1 til karakteren der skulle vises og en til attributter – dvs. forgrundsfarve, baggrundsfarve, blink osv. 4.000 bytes udgjorde hele skærmhukommelsen, relativt meget når man kun havde 640kB RAM til rådighed, som både skulle rumme DOS og hvad man derefter eksekverede af programmer. Et godt link til Turbo Pascals historie Turbo Pascal – Wikipedia. I starten sad jeg og omskrev mine Basic programmer til Pascal, mest for at lære Pascal at kende. Jeg synes, jeg havde uendelig mange flere muligheder med TP i forhold til Basic, og så var programafviklingen væsentlig hurtigere. Jeg fandt også ud af at få det til at se en del bedre ud på skærmen. Jeg efterlignede TP editorens layout, hvilket ikke var uden udfordringer. Til forskel fra Basic programmer, som bare crashede og Ctrl+C bragte mig tilbage til DOS-promptet, så skulle TP programmer compileres inden jeg testede, og måske crashede det, eller også havde jeg uforvarende fået lavet en “uendelig sløjfe” – så var eneste mulighed at trykke på reset knappen – tid til at lave kaffe!

 

OOP et nyt koncept i midt 80’erne

OOP (Object Oriented Programming) blev introduceret i Turbo Pascal 5.5 (OOP har sin rod helt tilbage til sidst i 50’erne – Object-oriented programming – Wikipedia ). Det blev først rigtig gennemført i Borland Delphi, som jeg også anskaffede, men aldrig rigtig kom i gang med – jeg tog ud at sejle igen efter et par år på land. For at lære mig sproget (TP 4.0) kastede min bror og jeg os over at lave en database over tipsresultater for 13 rigtige fra 13 rækker blev introduceret på tipskuponen i 1975. Det resulterede i et program, hvor vi havde indtastet alle kampe fra 1975 og frem til 1989, hvem spillede mod hvem, hvad var resultatet af kampen, hvordan fordelte tegnene sig procentvis i de enkelte kampe, hvor mange gevinstgivende rækker var der for 13, 12, 11 og 10 rigtige og hvad var præmien for de enkelte rækker. Det var en ordentlig mundfuld data (det havde det med at gribe om sig), og det skulle alt sammen tillige med programmet passe ind i de 640 kB RAM min XT-klone havde til rådighed. Mange hovedbrud og komprimering af data – 13 rigtige tegn kan lagers på 13 x 2 = 26 bit hvilket giver 4 bytes (32 bit) med 6 bit i overskud til spille ugenummer og årstal. Skærmbilleder var dengang en hel logik for sig selv – hele menu systemet måtte jeg selv progamere. Hvor har jeg måtte resette computeren mange gange, fordi jeg havde lavet en uendelig sløjfe – der lærte man at gemme det man havde lavet, inden programmet blev compileret og testet. Programmet består af ca. 6.500 program linjer, så der var noget at holde styr på. Det faktum at der var indført “Unit” gjorde, at jeg var i stand til at isolere programmets enkelte dele fra hinanden – en slags OOP – og kunne koncentrere mig om lige netop den del jeg arbejde på, uden at rode rundt i de Units som fungerede – et smart trick fra Borlands side.

Lazarus IDE og Free Pascal Compiler

Efter min pensionering har jeg igen kastet mig over Pascal programmering. Jeg har valgt Lazarus IDE og Free Pascal Compiler (FPC) som er frit tilgængeligt fra internettet. Lazarus Homepage (lazarus-ide.org) . Nu  det et RAD Rapid application development – Wikipedia miljø – men stadig Pascal. For at gøre mig familiær med softwarepakken satte jeg mig for at lave et program, som kan tilgå min logbog fra en MySQL database. Jeg havde en Raspberry Pi 2B liggende, så den ombyggede jeg til en MySQL database server på en Ubuntu 20.04 LTS server. Det gav en del hovedbrud i starten, men da jeg først fik hul på bylden gik det stærkt. Det, der forbavsede mig mest, var det faktum, at jeg kunne lave meget mere avanceret programmering på meget færre program linjer (795) set i forhold til det tipsprogram (ca. 6.200) jeg lavede i slut 80’erne. Det har været en rigtig sjov og lærerig proces at få programmet op at stå. Tipsprogrammet tog ca. 8 måneder at skrive – det har taget mig omkring 3 måneder at skrive dette program, med meget mindre tid i det daglige hvor jeg har programmeret. Men processen med at programmere er stadig den samme – det har det med at gribe om sig. Så får jeg “lige en ide” – f. eks flagene – hvordan løser jeg lige det? Det har givet indsigt i MySQL til lige med. Jeg havde godt været opmærksom på, at i MySQL findes der en datatype der hedder Blob – men jeg havde ikke været opmærksom på hvor kraftfuld denne datatype egentlig er. Det har så resulteret i, at den database der ligge på webserveren og den der ligge på databaseserveren nu ikke længere er ens, men det er jo kun mig der ved det, så det er vel for så vidt ligegyldigt.