BasicC/Komendy

Predefiniowane typy i zmienneEdytuj

W przypadku zmiennych obowiązują zasady języka C. Zmienne muszą być najpierw zadeklarowane poprzez podanie kolejno: typu zmiennej, nazwy i średnika. Można zadeklarować na raz więcej zmiennych danego typu oddzielonych średnikiem, można przypisać im początkowe wartości, np: int a,b=10,c; Najpopularniejsze typy zmiennych to: int - całkowita, float - zmiennoprzecinkowa, STRING - specjalny typ używany w BasicC będący łańcuchem znaków o długości maks. STRLEN używany do przechowywania tekstu.
Zmienne zadeklarowane poza funkcjami, np. na początku programu, posiadają zasięg globalny i są widoczne w każdym miejscu programu (chyba że zostaną przysłonięte przez zmienne lokalne o tych samych nazwach). Zmienne lokalne zadeklarowane w blokach programu, które w C zawarte są w nawiasach klamrowych { }, dostępne są tylko w danym bloku. Instrukcje BasicC tworzące pętle, funkcje / procedury czy instrukcje warunkowe, automatycznie tworzą bloki programu.
W BasicC predefiniowane są zmienne, stałe i typy opisane poniżej.

BASFILEEdytuj

Definicja: FILE*BASFILE=NULL;
Zmienna typu FILE* wykorzystywana przez komendy obsługi plików.

STRLENEdytuj

Definicja: #define STRLEN 255
Stała domyślnie ustawiona na 255 oznaczająca maksymalną długość ciągów typu STRING bez znaku końca łańcucha '\0', w trybie rozszerzonym $ (patrz rozdział o napisach) długość tekstu nie powinna przekraczać STRLEN-1, co nie powinno się wydarzyć jeśli operujemy na łańcuchach za pomocą komend Basic. Wartość tą można zmienić np. poprzez wpisanie komendy #define STRLEN L przed załączeniem biblioteki BasicC, w miejsce L wpisując nową wartość.

STRINGEdytuj

Definicja: typedef char STRING[STRLEN+1];
Typ zmiennej łańcuchowej o długości STRLEN (+1). Zalecane jest stosowanie tego typu dla zmiennych łańcuchowych. Uwaga: nie mylić z klasami string i basic_string występującymi w C++.

STRING$Edytuj

Definicja: STRING STRING$;
Zmienna pomocnicza typu STRING używana przez niektóre komendy Basic.

VALUEEdytuj

Definicja: double VALUE;
Zmienna pomocnicza typu double.

Dodatkowe definicje zawiera BasicSDL, jest to omówione w innej części.

Funkcje i proceduryEdytuj

MAINEdytuj

Początek głównej funkcji (bloku komend) programu, która jest wywoływana na samym początku, czyli początek wykonywalnej części programu. Całość zapisujemy dużymi literami. Odpowiednik int main(int argc, char *argv[]){ w C.

ENDMAINEdytuj

Koniec głównej części programu. Odpowiednik } w C.

FunctionEdytuj

Oznacza definicję funkcji zwracającej wartość typu double. To samo co double w C.

FuncEdytuj

Oznacza definicję funkcji zwracającej wartość dowolnego typu, który podajemy po Func. Komenda służy jedynie oznaczeniu definicji funkcji i z punktu widzenia C nic nie oznacza, jest usuwana w fazie pre-kompilacji, nie ma konieczności jej używania.

BeginEdytuj

Początek ciągu (bloku) instrukcji. To samo co { w C.

DefEdytuj

Oznacza początek bloku komend (zwanych w C komendą złożoną) funkcji. To samo co Begin i { w C.

EndFuncEdytuj

Oznacza koniec bloku komend funkcji, czyli koniec definicji funkcji. To samo co } w C.

ReturnEdytuj

Wyjście z funkcji i zwrócenie wartości 0. Nie stosujemy na końcu średnika. To samo co return 0; w C.

Procedure lub SubEdytuj

Definicja procedury (podprogramu), czyli "funkcji", która nic nie zwraca. To samo co void w C.

EndProc lub EndSubEdytuj

Koniec definicji procedury. To samo co } w C.

Przy wywoływaniu funkcji czy procedury używamy nawiasów i średnika jak w C.

Przykład:

#include "Basic.h"
Function mnoz(float a, float b) Def
  Print a $ "*" _ b $ "=" );
  return(a*b);
EndFunc
Func int dodaj(int a, int b)
Def
  Print a $ "+" _ b $ "=" );
  return(a+b);
EndFunc
Procedure PISZ(int a, int b)
Begin
  Print dodaj(mnoz(a,b),dodaj(a,b)) NL
EndProc
Sub ZAKONCZ()
Begin
  Print$ "I Koniec!" NL
EndSub
MAIN
  PISZ(2,2); ZAKONCZ();
ENDMAIN

PętleEdytuj

BreakEdytuj

Wyjście z pętli lub bloku. To samo co break; w C.

ContEdytuj

Przejście do kolejnej iteracji, na początek pętli. To samo co continue; w C.

Do ... LoopEdytuj

Pętla nieskończona. To samo co do{ ... }while(1); w C.
W BasicSDL w pętli odczytywane są zdarzenia i kończy się gdy Quit<>0: do{ ... GetSDLEvents();}while(!Quit);

For(I,P,K) ... NextEdytuj

Podstawia do zmiennej I początkową wartość P i w każdym przebiegu pętli zwiększa ją o 1. Pętla wykonuje się do momentu, gdy I osiągnie wartość K, czyli K-P+1 razy. To samo co do{ ... }for(I=P;I<=K;++I){ ... } w C. Jeśli wymagane są bardziej skomplikowane operacje na zmiennych należy stosować składnie C. Tu mała uwaga do informacji zawartej w podręczniku C. Zaleca się tam stosowanie formy "++I" przy inkrementacji zmiennej zamiast "I++", ma to powodować szybsze działanie programu. Testy tego nie potwierdzają, nie widać istotnych różnic w szybkości działania pętli For.

Repeat ... Until(X)Edytuj

Pętla wykonywana dopóki wyrażenie X stanie się prawdziwe, czyli odwrotnie niż while(X), conajmniej 1 raz. To samo co do{ ... }while(!(X)); w C.

While(X) ... WendEdytuj

Pętla wykonywana gdy X jest prawdziwe. To samo co while(X){ ... } w C.

Instrukcje warunkoweEdytuj

If(X) ... Else ... ElseIf(Y) ... EndIfEdytuj

Jeśli warunek X jest prawdą wykonuj ... w przeciwnym razie wykonuj ... w przeciwnym razie, jeśli Y wykonuj ... . Komendy Else i ElseIf nie są wymagane i mogą byś stosowane w różnej kolejności i ilości. To samo co if(X){ ... }else{ ... }else if(Y){ ... } w C.

Select(X) Case Y: ... Default: ... EndSelectEdytuj

Wykonuje komendy po Case Y: gdy X ma wartość Y. Sekcji typu Case Y: ... jest więcej, dla różnych wartości X. Przed Case (i Default) automatycznie dodawana jest komenda Break, dzięki czemu wykonywana jest tylko 1 sekcja. Jeśli chcemy, by była wykonywana kolejna - zamiast Case należy użyć case (lub default). Po opcjonalnej komendzie Default: wykonywany jest kod, jeśli żaden z wcześniejszych warunków nie został spełniony. To samo co switch(X){break;case Y: ... break;default: ... } w C.

Jest różnica w działaniu Select..Case i If/ElseIf. Break wywołany w sekcji Case powoduje wyjście tylko z sekcji Select, a wywołany w If powoduje wyjście z pętli, w której znajduje sie If. W Poniższym przykładzie pętla For wykonuje się do końca, choć w sekcjach Case niejawnie wywoływane jest Break, gdy Break dodamy w If - pętla For zostanie przerwana.

Przykład:

#include "Basic.h"
MAIN
  int i;
  For(i,2,7)
    If (i==2)
      Print 2 NL
    ElseIf (i==4)
      Print 4 NL
    EndIf
    Select(i)
      Case 5:
        Print 55 NL
      Case 6:
        Print 66 NL
      case 7:
        Print 77 NL
      Default:
        Print$ "To znowu ja" NL
    EndSelect
  Next
ENDMAIN