Dla Początkujących: FAQ.Podstawy.Pascal v1.0 15-03-2000
Widzisz archiwalną wersję wątku "Dla Początkujących: FAQ.Podstawy.Pascal v1.0 15-03-2000" z forum pl.comp.lang.pascal
Adam

                         FAQ.Podstawy.Pascal v1.0 15-03-2000
                          Autor: Adam B/laszczyk

Nie biorę odpowiedzialności za to co sobie lub komputerowi zrobisz po
przeczytaniu tego tekstu, ani po odpaleniu któregokolwiek z programów.

FAQ.Podstawy.Pascal powstał w wyniku spontanicznego przypływu energii jego
Autora, celem wyjaśnienia wszystkim zainteresowanym o co biega w popularnym
języku Pascal. Docelowo tekst ten jest przeznaczony dla początkujących
programistów, ale rozróżniających już co to jest zmienna, stała, czy moduł
(unit).
Mam nadzieję, że całość się z czasem rozrośnie.
Jeśli znalazłeś tu jakiś błąd daj mi znać na poniższy adres.

Dane kontaktowe:
        Adam Błaszczyk
        ICQ 66078153
        WWW: http://free.polbox.pl/p/pyro  [pirotechnika] uaktualniona
12-1-1999

Intencją moją nie było zastąpienie istniejącego FAQ polskiej grupy
pascalowej
pl.comp.lang.pascal a raczej jego dopełnienie. Całość można rozpowszechniać,
modyfikować etc. itd. itp. w jakiejkolwiek postaci.
Nie ma tu żadnej formalności, ani jakiegoś porządku. Starałem się zawrzeć tu
wszystko to o czym powinni wiedzieć początkujący programiści.
Uwaga moja koncentruje się tutaj na języku Pascal dostępnym w popularnym,
choć
dość leciwym, pakiecie firmy Borland. W całości można odnaleźć konkretne
rozwiązanie programowe. Nie zawsze są one najlepsze, ale całość piszę "na
szybko" i korzystam na bieżąco z moich własnych archiwów, stąd jakość
programów
przykładowych jest zmienna.

Spis treści:

- FAQ.Ring0
- FAQ.Introdukcja
- FAQ.W_czym_programować
- FAQ.Konkrety.gotowe_rozwiązania
--Parametry programu
--Konwersja liczby dziesiętnej na 16-kową
--Czytanie i rozpoznawanie znaków z klawiatury:
--Czytanie i rozpoznawanie Scancodów klawiszy:
--Zmiana wartości R,G,B dla podanego koloru
--Kopiowanie plików:
--Zamiana znaków w stringu na duże
--Przeszukiwanie katalogu:
--Przeszukiwanie całego dysku:
--Najszybsze włączenie trybu 13h bez jawnego użycia ASM
--Odwracanie ekranu 'do góry nogami'
--Dokładny pomiar czasu (do setnych):
--Uruchamianie komendy/polecenia DOS/programu z wnętrza programu

FAQ.Ring0
---------
Niekomercyjne zastosowania języków/skryptów+ skala trudności nauki:

ASM - prosty, warto znać, ale programowanie w ASMie tylko dla fanów i dla
zabawy
Pascal - dobry do nauki, ale za bardzo przestarzały - w zasadzie
strukturalny
         obiektowe rozszerzenia (np. Turbo Vision) niezbyt ciekawe
         64K dla buforów to niestety zbyt duże ograniczenie, żeby się z tym
         borykać
C - łatwy, trzeba znać, żeby brnąć w C++, a także w programowanie w Unixie
(w
    zasadzie cały UNIX to jedno wielkie 'C'
    nadaje się do pisania skryptów CGI
    (pod DOS warto zająć się Watcom C czyli znane wszystkim DOS4GW)
Java - trudny, ale ma zajebiste możliwości, obiektowy,
       bezapelacyjnie warto się za niego zabrać,
       bo obecnie to #1 na scenie
C++ - trudny, obiektowy, ale w ma zajebiste możliwości
Delphi - Visual dla Pascala, nie znam na tyle, żeby dać jakąś sensowną
opinię
Perl - łatwy, jest super do oprogramowywania CGI
Modula - łatwy, dla fanów, podobne do pascala, ale nie znam jakichś
poważnych
         zastosowań
Lisp - pochlastany, dla fanów, tylko wybrane zastosowania (rozb. wyrażenie
       regularne?)
Smalltalk - totalnie obiektowy, pochlastany, dla fanów

Reasumując proste języki strukturalne sa proste do nauki, ale przestarzałe.
Wskazane jest więc rozwijanie warsztatu pod kątem programowania obiektowego
....

FAQ.Introdukcja:
----------------
Komputerek który chcesz oprogramować zwykle posiada pewne zasoby. Szumnym
tym
mianem określamy wszystko to co mamy do dyspozycji pisząc program, a więc w
szczególności pamięć operacyjną, procesor itd. itp.
Pisząc program w Pascalu musimy mieć stale na uwadze, iż zasoby te, mamy
dość
ograniczone z wielu względów.
Sama znajomość Pascala nie przesądza o tym, iż będziemy dobrym koderem.
Aby w pełni wykorzystać siłę języka należy znać przynajmniej w zarysach
mechanizmy jakie rządzą maszynką, którą się bawisz.

Dobrym przewodnikiem po flakach PC-ta, systemu DOS, asemblerze będą książki:

flaki pamięci, DOS:
 "DOS 5.0 od środka"
  Leonid Bułhak, Ryszard Goczyński, Michał Tuszyński

 "Mapa pamięci IBM/PC w przykładach w Pascalu i asemblerze"
  - książka moich dwóch kumpli Maćka Sokołowskiego i Arka Andrusza
  dość leciwa, ale wciąż aktualna

flaki kart graficznych (operacje na portach/BIOS):
 "Sterowniki graficzne - Sterownik graficzny VGA"
   Natalia Kowalczyk, Damian Krzemiński
 "Karty graficzne"
   Ryszard Jarża

flaki asembler, przerwania, tryby procesora, wirusy:
  "Asembler 8086/88"
    Eugeniusz Wróbel
  "Asembler 8086/20286 - Pod zegarem"
    Marek Kotowski
  "Mikroprocesory 80286, 80386, i486"
    Ryszard Goczyński, Michał Tuczyński
  "Anatomia PC"
    Piotr Metzger
  "Jak pisać wirusy"
    Andrzej Dudek
  "Wirusy -pisanie wirusów i antywirusów"
    Adam Błaszczyk - tak, tak, to moja książka

FAQ.W_czym_programować:
--------------------------------
1. jak lubisz, to w z integrowanym środowisku Borland Pascala,
2. dobra metoda to użycie zewn. kompilatora, zintegrowanego z rozszerzeniem
PAS
   w DOS Navigatorze - ten ostatni polecam, ponieważ jest to świetny program
   łączący w sobie kupę przemyślanych i użytecznych opcji, o których nie
   pomyśleli w BP - np. schowek współużywalny z Windowsami, a także pionowe
   bloki

FAQ.Konkrety.gotowe_rozwiązania:
--------------------------------

Parametry programu
------------------
parametry programu to to wszystko co podajemy jako opcje do programu:
Dostęp do ich z programu mamy za pośrednictwem poniższych funkcji:
        paramstr(0) nazwa naszego programu
      (uwaga: to jest prawda tylko, gdy wywołujemy program normalnie, czyli
np.
      z DOS/Windows, ale nie gdy 'odpalamy' go w BP za pomocą CTRL-F9)
        paramstr(1) 1-szy par. programu z linii poleceń
        paramstr(2) 2-szy par. programu z linii poleceń
        ParamCount - ilość parametrów w linii poleceń

{START}
var
 i : Byte;

begin
 Writeln('Nazwa programu: ', ParamStr(0));
 Writeln('Ilość Parametrów: ', ParamCount);
 if i=0
  then
   WriteLn('Uruchom mnie z parametrami np.',#10#13#9,ParamStr(0),' a b c d e
f')
 else
  for i:=1 to ParamCount do
    Writeln('Parametr [',chr(i+48-1),']:=',ParamStr(i));
end.
{END}

Konwersja liczby dziesiętnej na 16-kową
---------------------------------------
zmiana systemu z dziesiętnego na 16-kowy jest trywialna
zadany bajt dzielimy na dwie połówki
bajt b = xxxxyyyy bitowo

xxxx=1-sza za pomocą 'b shr 4' (równoznaczne z 'b div 4', ale szybsze)
yyyy=2-ga za pomocą 'b and 15' czyli 'b and 00001111' bitowo
{START}
function HexB(B:Byte):String;
 const
  hc:string[16]='0123456789ABCDEF';
 begin
  hexB:='$'+hc[1+B shr 4]+hc[1+B and 15];
 end;

begin
 Writeln('Postac szesnastkowa liczby 100:=',HexB(100));
end.
{END}

Czytanie i rozpoznawanie znaków z klawiatury:
---------------------------------------------
zwykłe znaki reprezentowane sa przez jeden znak w buforze klawiatury
rozszerzone np. kursory przez dwa - wtedy pierwszy znak jest równy #0
a drugi zawiera właściwy kod klawisza

{START}
uses Crt;     { funkcja ReadKey pochodzi z modulu CRT }

var
 c : Char;

begin
 repeat
  c:=ReadKey; { czytamy znak }
  if c=#0     { jesli znak rozszerzony to c=#0 }
   then
    begin
     c:=ReadKey;
     writeln('#0#',ord(c));
    end
   else
    writeln('#',ord(c));
 until c=#27;
end.
{END}

Czytanie i rozpoznawanie Scancodów klawiszy:
--------------------------------------------
ScanCode to znak 'widziany' bezpośrednio po naciśnięciu go na klawiaturze,
a dostępny w porcie [$60]
port ten obsługiwany jest przez przerwanie 09, a te z kolei konwertuje
kod na widziany później przez przerwanie programowe 16h kod (a więc np. dla
funkcji Readkey)
obsługa klawiatury na poziomie przerwania 09 pozwala zastosować w naszym
progu
klawisze o przeróżnych kombinacjach, a niedostępnych za pomocą int 16h np.
kombinacje ALT-SHIFT-Spacja, CTRL-ALT-F12 itp., a także reagowanie na
naciśnięcie i puszczenie klawisza (bit 7 czyli wartość 128 odczytana z portu
$60
zORowana z kodem klawisza określa fakt wciśnięcia/puszczenia tegoż klawisza)

W programie: ESC [ScanCode ESC to 1] przerywa zabawę ...

{START}
begin
 while port[$60]<1 do WriteLn(port[$60]);
end.
{END}

Zmiana wartości R,G,B dla podanego koloru
-----------------------------------------
Każdy kolor składa się z trzech pól R,G,B, będących składowymi kolorów R-Red
(czerwony), G-Green(zielony), B-Blue (niebieski)
Poprzez manipulację tymi składowymi można uzyskać dowolną (no prawie) barwę
poniższy program zmienia standardowy szary kolor tekstu na czerwony

{START}
procedure Pal(Col,R,G,B : Byte); assembler;
asm
   mov    dx,3c8h
   mov    al,[col]
   out    dx,al
   inc    dx
   mov    al,[r]
   out    dx,al
   mov    al,[g]
   out    dx,al
   mov    al,[b]
   out    dx,al
end;

begin
 { parametry: R    G    B}
 Pal(7,       $FF, $00, $00);
end.
{END}

Kopiowanie plików:
------------------

Uwag procedurka nadpisuje plik docelowy, brak kontroli IO

{START}
procedure CopyFile(skad, dokad:String);
const
 MaxBuf = 65535;

 var
  F,G:file;
  K:word;
  Buf:pointer;
 begin
  GetMem(Buf,MaxBuf);
  Assign(F,Skad);
  Reset(F,1);
  Assign(G,Dokad);
  ReWrite(G,1);
  repeat
   BlockRead(f,Buf^,MaxBuf,K);
   BlockWrite(g,Buf^,K);
  until K<MaxBuf;
  Close(F);
  Close(G);
  FreeMem(Buf,MaxBuf);
 end;

begin
 if ParamCount<2
  then Writeln ('Wywolaj mnie z 2-ma nazwami plikow [skad] [dokad]')
  else CopyFile(ParamStr(1),ParamStr(2));
end.
{END}

Zamiana znaków w stringu na duże
--------------------------------
{START}
function UpStr(s:string):string;
var
 i:
...

więcej »

Tomasz 'Merlin' Kolinko

--Konwersja liczby dziesiętnej na 16-kową


To jest w p.c.l.p FAQ.

--Zmiana wartości R,G,B dla podanego koloru


To chyba tez.

--Najszybsze włączenie trybu 13h bez jawnego użycia ASM


Po co?

--Odwracanie ekranu 'do góry nogami'


Bylo kiedykolwiek takie zadanie?

--Dokładny pomiar czasu (do setnych):


Jaki tam dokladny :-)

--Uruchamianie komendy/polecenia DOS/programu z wnętrza programu


To tez jest AFAIR

Łukasz Nowicki
Cześć Tomku
Ty się nie zastanawiaj może co tam jest, ale raczej, czego nie ma?
pozdrawiam
Łukasz
Adam

Cześć Tomku
Ty się nie zastanawiaj może co tam jest, ale raczej, czego nie ma?


thx za wsparcie

a tlumaczac obecnosc powtarzajacych sie watkow,
 po prostu wrzucałem do tego mojego smietnika
co mi wpadlo w rece ;-)
ale zaznaczylem ze to nie jest jakis nowy FAQ
po prostu moze sie komus przyda, moze nie
no i docelowo jest dla poczatkujacych,
a nie dla starych wyg

Adam

KAJ
Czyżby konkurencja dla Merlina ? Grupa mająca dwa FAQ ? I które jest TO
PRAWDZIWE ???!!!!! :-PPP
A tak na poważnie: może jakoś byście to połączyli w całość ?
Tomasz 'Merlin' Kolinko

Cześć Tomku
Ty się nie zastanawiaj może co tam jest, ale raczej, czego nie ma?


Kiedy tylko znajde odrobine czasu opracuje aktualizacje..

Łukasz Nowicki
fajnie ;-)
L.
| Cześć Tomku
| Ty się nie zastanawiaj może co tam jest, ale raczej, czego nie ma?

Kiedy tylko znajde odrobine czasu opracuje aktualizacje..


Adam
.

Czyżby konkurencja dla Merlina ? Grupa mająca dwa FAQ ? I które jest TO
PRAWDZIWE ???!!!!! :-PPP
A tak na poważnie: może jakoś byście to połączyli w całość ?


żeby nie bylo na mnie ;-)
'ja tylko niose pomoc' ;o)))

Adam

Tomasz 'Merlin' Kolinko
Czyżby konkurencja dla Merlina ? Grupa mająca dwa FAQ ? I które jest TO
PRAWDZIWE ???!!!!! :-PPP
A tak na poważnie: może jakoś byście to połączyli w całość ?


Slawomir Jasinski

| --Konwersja liczby dziesiętnej na 16-kową
| (...)
To tez jest AFAIR


drogi Merlinie... nie czepiaj się i przeczytaj uważnie początek tego
FAQ... czyżbyś obawiał się konkurencji ?

KAJ
Czyżby konkurencja dla Merlina ? Grupa mająca dwa FAQ ? I które jest TO
PRAWDZIWE ???!!!!! :-PPP
A tak na poważnie: może jakoś byście to połączyli w całość ?
programowanie w pascalu a praca innych programow...
Pascal się muuuuuuuulllllllllllllllllllll­liiiiiiiiiiiiiiiiiiiiiiiiiiiii­ii...
Gdzie jesteście szpece od pascala i FPC? No gdzie?
Pascal i drukowanie pod DOS'em na HP 710 - Wielki Problem !!!
  • tor wyscigowy w pozaniu gdzie parkowac
  • podstrona 342
  • hsp56 sterowniki muzycznej
  • kael thas sunstrider
  • karaoke sto lat
  • budowa woblera
  • ceny sb radio
  • cm nie umi dawac banow
  • instalacja scenic ii
  • Skupisko tematów z for dyskusyjnych : Start