SDS BASIC

SDS BASIC
Paradigm nödvändigt
Dök först upp 1967 ; 56 år sedan ( 1967 )
OS flera
Influerad av
Dartmouth BASIC
Influerad
HP Time-Sharing BASIC , SCELBAL många andra

SDS BASIC , även känd som CP-V BASIC , Batch BASIC eller Sigma BASIC beroende på version, är en BASIC programmeringsspråkskompilator för Scientific Data Systems ( SDS ) Sigma-serien stordatorer , ursprungligen släppt 1967. Xerox köpte SDS i 1969 och började byta namn på det som Xerox Data Systems, och slutligen bara Xerox, då språket blev känt som Xerox BASIC .

De ursprungliga versionerna inkluderade inte stöd för strängvariabler , även om detta lades till för versionen som kördes under operativsystemet CP-V när det släpptes 1971. Strängbiblioteket tillät manipulering av strängar med hjälp av arrayslicing- syntax, liknande det system som hittades i HP Time-Shared BASIC och ett antal mikrodator BASICs som Integer BASIC och Atari BASIC .

Denna stil av strängmanipulation skiljer sig från modellen som introducerades i DEC:s BASIC-PLUS , som använde strängfunktioner. Altair BASIC mönstrades på BASIC-PLUS, och denna stil blev de facto standarden efter att plattformsoberoende version, Microsoft BASIC , blev nästan universell under hemdatorns era. Detta gör konverteringen från SDS till moderna dialekter något svår.

SDS BASIC är historiskt anmärkningsvärt som plattformen på vilken det ursprungliga Star Trek- datorspelet skrevs sommaren 1971.

Syntax

I enlighet med den ursprungliga Dartmouth BASIC- modellen, och i likhet med de flesta stordatorbaserade BASICs, var SDS BASIC en kompilator, inte en tolk, och använde separata men tätt integrerade verktyg för redigering och körning. Redaktören var tillägnad BASIC; när rader skrivs in analyseras de för korrekt syntax och lagras sedan i tokeniserad form. Om en rad skrivs in med ett nummer i början, placeras den på lämplig plats i programmet baserat på antalet, rader utan nummer behandlades omedelbart och glömdes sedan bort. SDS tillåtna radnummer i intervallet 1 till 99999. Ett enkelt exempel är:

   10  SKRIV UT  "HELLO WORLD" 

Liksom många versioner av BASIC tillät SDS en enda kodrad att innehålla flera påståenden. I de flesta dialekter indikeras detta med kolon, men SDS använde antingen omvänt snedstreck, \ eller et-tecken, & . En motsvarande linje i SDS skulle vara:

      10  SKRIV UT  "HEJ"  \  SKRIV UT  "VÄRLDEN" 

Eftersom SDS var en kompilator, och användarens källkod lagrades separat, bevarade den inledande utrymmen i koden. De föreslog att man skulle använda detta för att tydligare indikera strukturen för slingor:

  0 
    
     
      
   10  LÅT  J  =  ,  K  =  1  20  FÖR  I  =  K  TILL  8  30  SKRIV UT  J  40  M  =  J  ,  J  =  K  ,  K  =  K  +  1  50  NÄSTA  I 

Det här exemplet inkluderar också möjligheten att ställa in flera värden i en enda LET-sats, som framgår av raderna 10 och 40. Denna funktion hittades också i HP BASIC. Som i de flesta versioner av BASIC är nyckelordet LET valfritt och utelämnas från rad 40. Rad 40 illustrerar också den alternativa tilldelningsformen som finns i ett antal tidiga BASICs, där flera tilldelningar kan separeras med kommatecken.

Vanliga matematiska operationer inkluderade + , - , * och / , med ^ eller ** för exponenter. Logiska jämförelser, som HP, kunde skrivas i vilken ordning som helst, så <= var ekvivalent med =< , och >< var detsamma som <> . De flesta dialekter tillåter bara den senare syntaxen i båda fallen. Till skillnad från HP BASIC inkluderade SDS inte möjligheten att använda hash, # , som en alternativ form av <> .

SDS stödde beräknad GOTO med ON, men tillät också den alternativa syntaxen med ON i slutet av raden istället för fronten:

    GÅ TILL  140  ,  160  ,  180  Y 

En alternativ form av REM var en ledande stjärna, * , liknande i syfte att kortformen som finns i MS-härledda BASICs, det enda citatet, ' .

Stränghantering

De tidiga versionerna av SDS BASIC, ibland känd som Batch BASIC eller BTM BASIC, stödde inte strängvariabler. Strängvärden kan emellertid tilldelas numeriska variabler som kan lagra sex tecken som deras EBCDIC- numeriska värden. Den senare CP-V BASIC lade till sanna strängvariabler som innehåller upp till 132 tecken som kan indikeras med ett efterföljande dollartecken, $ , eller ovanligt, en ledande $ — A$ och $A är likvärdiga. Manualen noterar att det senare formatet lades till för kompatibilitet med A00 BASIC.

Internt använde CP-V en stränglayout med fast längd bestående av en array av byte som inte kunde ändras i storlek under körning. Detta liknade de andra BASICs som använde skivnotation, som HP och Atari. Det står i kontrast till DEC/Microsoft-stilen, där strängar tilldelades dynamiskt på en hög . Till skillnad från de andra BASIC-dialekterna med fast längd, behövde strängvariabler inte dimmas innan de användes, istället var alla strängar som standard till en maximal längd på 72 tecken. Detta var en global inställning som kunde ändras för att bättre hantera minnet genom att ställa in det till ett mindre värde, eller tillåta längre strängar upp till maximalt 132 tecken. Detta åstadkoms med SET $=132 . Förvirrande nog användes SET också för den helt orelaterade uppgiften att tillåta variabler att användas i DIM-satser.

Eftersom strängar i CP-V inte presenterades offentligt som arrayer av tecken, baserades inte slicing-syntaxen på array-syntax. Detta innebar att CP-V också tillät konstruktion av arrayer av strängar, något dialekter som HP och Atari saknade eftersom de använde arraynotation för skivning. Man skulle alltså kunna göra en matris av strängar med hjälp av DIM:

   10  DIM  A$  (  5  ,  10  ) 

skulle definiera en matris som innehåller totalt 50 strängar med 72 tecken i en matris på 5 gånger 10. Eftersom systemet stödde arrayer, var skivsyntaxen något mer komplex än systemet som finns i andra versioner. Exempel inkluderar:

 A$  (  1  ) 

väljer den första strängen i en array av strängar, medan:

 A$  (  1  ,  5  ) 

väljer en sträng från plats 1,5 i en 2D-matris (matris). Skivning hanterades genom att lägga till ett kolon i parens:

 A$  (  :  4  ) 

returnerade allt från det fjärde tecknet på:

 A$  (  :  4  ,  5  ) 

väljer fem tecken som börjar med det fjärde tecknet, medan:

 A$  (  1  ,  5  :  4  ,  5  ) 

väljer fem tecken som börjar med det fjärde tecknet i strängen på platser 1,5 i en 2D-array.

Strängkonstanter kan avgränsas med antingen enkla eller dubbla citattecken, vilket gör det lättare att omsluta citattecken inom rader. Giltiga exempel inkluderar:

 
 
 
  SKRIV UT "   DETTA  ÄR EN STRÄNG LITERAL" SKRIV UT   "DETTA ÄR EN ANNAN"  SKRIV UT  "OCH DETTA ÄR "EN TREDJE""  SKRIV UT  "OCH "EN FJÄRDE"" 

CP-V innehåller också kommandot CHANGE från Dartmouth BASIC, som omvandlar en sträng till en serie EBCDIC- numeriska värden och placerar dem i en numerisk matris:

  
     10  DIM  B  (  6  )  20  ÄNDRA  "ABCDEF"  TILL  B 

B kommer nu att innehålla en serie siffror som motsvarar EBCDIC-värdena för varje tecken.

Ingång/utgång

SDS inkluderade ett robust system för input/output baserat på "stream"-nummer som kunde specificeras i PRINT- och INPUT-satser. Till exempel kan data läsas från en fil med hjälp av:

  
   10  ÖPPNA  'FIL1' TILL :1, INPUT  20  INPUT  :  1  ,  A 

Den första raden öppnar en diskfil med namnet "FILE1", tilldelar den till ström 1 och indikerar att den kommer att användas för inmatning. Den andra raden läser nästa data från ström 1, i detta fall det första värdet, och tilldelar den resulterande datan till variabel A. Systemet inkluderade också ett unikt "nyckel"-system som gjorde att data kunde numreras och sedan nås slumpmässigt. Detta åstadkoms genom att lägga till nyckelnumret efter ett semikolon:

  INPUT  :  1  ;  9999  ,  A 

kommer att försöka läsa post 9999. Giltiga nycklar låg i intervallet .001 till 9999.999, och om inga nycklar tilldelades i filerna tilldelades raderna nummer 1.000, 2.000, etc. Den högst värderade nyckeln i en fil kunde läsas med:

 NYCKEL  (  1  ) 

där 1:an är strömnumret. Ostrukturerad binär data kan läsas och skrivas byte i taget med hjälp av GET och PUT.

MAT-kommandon

Senare versioner av Dartmouth BASIC inkluderade en svit av MAT -kommandon som tillät operationer på hela arrayer ( matriser ) med en enda sats. Dessa fanns även i SDS BASIC. I sin enklaste form används MAT som en alternativ form av LET , och applicerar ett uttryck på alla element i en array. Till exempel:

  

   100  DIM  A  (  20  ),  B  (  20  )  ...  200  MAT  A  =  A  +  B 

Lägger till värdet av varje värde i B till varje post i A, på samma sätt som:

  

    
 
   100  DIM  A  (  20  ),  B  (  20  )  ...  200  FÖR  I  =  1  TILL  20  210  A  (  I  )  =  A  (  I  )  +  B  (  I  )  220  NÄSTA  I 

Förutom att göra koden kortare och mer uppenbar, har dessa kommandon också fördelen att de är mycket optimerade och lätt överträffar användningen av FOR/NEXT. Ytterligare funktioner och satser modifierar PRINT och INPUT , inverterar arrayer och bygger identitetsmatriser och sådant i en enda sats.{

Anteckningar

Citat

Bibliografi