02 Karty perforowane

Karta perforowana

Informacja na kartach kodowana była w dosyć prosty sposób:

  1. Pojedyncza perforacja w wierszach oznaczonych od 0 do 9 oznaczała cyfrę od 0 do 9.
  2. Kolejne znaki alfabetu wymagały dwu „dziurek” (A w wierszu 12 i 1, J w wierszu 11 i 1 i tak dalej; kolejne znaki wymagały kombinacji trzech dziurek).
  3. W zasadzie nie były dostępne „małe” litery, choć, w którymś momencie, pojawiły się urządzenia dysponujące rozszerzonym zestawem znaków.

Fortran został zaprojektowany w firmie IBM. Firma ta (od wielu lat) była dostawcą różnego rodzaju elektro-mechanicznych urządzeń służących (czy wspomagających) używanie kart perforowanych (będących również wynalazkiem tej firmy) w przetwarzaniu informacji. Firma produkowała oprócz perforatorów (czyli urządzeń służących do przygotowywania informacji na kartach perforowanych) również czytniki (pozwalające drukować informację tam zawartą), sortery (układające karty zgodnie z rosnącymi/malejącymi wartościami w zadanym polu karty) ale również urządzenia mogące dokonywać przetwarzania informacji na kartach (dodawanie, odejmowanie, mnożenie a nawet czasami dzielenie zawartości wskazanych pól na karcie). Urządzenia takie były nawet wykorzystywane jako podstawa do tworzenia prostych urządzeń obliczeniowych.

Nie powinien więc budzić zdziwienia fakt, że, z rozpędu, zastosowano tę technologię jako „podstawową” dla zapisu kodu źródłowego w Fortranie.
Przyjęto wówczas stałe znaczenie poszczególnych pól na karcie perforowanej:

  1. Kolumna pierwsza, gdy zawierała znak C, powodowała traktowanie wszystkich informacji na karcie jako komentarza.
  2. Kolumny 1-5 zazwyczaj pozostawały puste lub zawierały „numer” instrukcji, a mówiąc precyzyjnie mogły zawierać maksimum pięciocyfrową liczbę całkowitą traktowaną jako etykieta instrukcji. Etykieta mogła być wykorzystania jako znacznik miejsca docelowego w instrukcjach warunkowych lub w instrukcji skoku GOTO.
  3. Kolumna 6 pozostawała pusta albo zawierała znak informujący, że karta zawiera kontynuację instrukcji rozpoczętej na poprzedniej karcie. Utarło się stosowanie kolejnych cyfr (1, 2,…, 9) na określenie numeru kolejnego fragmentu. Formalnie każdy znak różny od odstępu i zera był traktowany jako znak kontynuacji.
  4. Kolumny od 7 do 72 (włącznie) przeznaczone były na treść instrukcji.
  5. Kolumny 73-80 były zazwyczaj przez kompilator ignorowane i mogły być użyte do numerowania kolejnych kart. Było to bardzo użyteczne w przypadku gdy karty się „rozsypały” — można było użyć maszyny zwanej sorterem do ułożenia ich we właściwej kolejności lub (czasami) poprosić kompilator, żeby zwrócił uwagę na sytuację gdy numery tam zawarte nie są w kolejności rosnącej.
  6. Ogólna zasada była taka, że „wielkość” liter nie odgrywa znaczenia: wszystkie słowa kluczowe i nazwy zmiennych pisane są literami wielkimi.

Technologia kart perforowanych nie była specjalnie wygodna — miały one ciągłą tendencję do rozsypywania się. Programiści (bo sortery nie były powszechnie dostępne) wymyślali różne sztuczki, żeby mieć minimalną pewność, że karty są we właściwej kolejności.

Ukośna linia mająca „zadbać” o właściwą kolejność kart w pliku

Dziś powyższy sposób zapisku kodu źródłowego uważa się za „przestarzały”. Współczesne kompilatory dopuszczają trzy sposoby zapisu kodu źródłowego:

  1. „fixed” (taki jak na kartach)
  2. „tab” (poszczególne pola rozdzielane są znakiem tabulacji)
  3. „free” — nie obowiązują powyższe reguły.

Na ogół wymaga się, aby pierwsze dwa formaty nie były mieszane ze sobą.