Έρχεται η στιγμή, ας πούμε μετά από τριάντα πέντε
έτη εργασίας, να αδειάσεις το υπηρεσιακό σου γραφείο από τα προσωπικά σου
αντικείμενα. Το πράττεις. Το μόνο σίγουρο, στην περίπτωση αυτή, ότι και θα
βρεις και θα θυμηθείς. Μου συνέβη.
Βρήκα! Τρία πλαστικά
ντοσιέ και τέσσερα χαρτιών σετ. Συνολικό πλήθος σελίδων: 304. Περιεχόμενο;
Προγράμματα! Προγράμματα σε Clipper για
εφαρμογές που, στα τέλη της δεκαετίας του 80 αρχές αυτής του 90, είχα φτιάξει
για την υπηρεσία.
Προγράμματα με ονόματα όπως: C_PASS.PRG, EPP.PRG,
EP_ETOYS.PRG, FUNCTION ANTIL (FRASH, ARADA, X_NUM), FUNCTION BALE() και άλλα τέτοια πολλά. Θυμήθηκα!
Ας το πιάσουμε από την αρχή. Καταφεύγω στο,
ψηφιοποιημένο, χειρόγραφο ημερολόγιο μου. Ψάχνω τη λέξη «υπολογιστή». Πέρα από
αυτόν που χρησιμοποίησα, στο ΕΜΠ, για την Διπλωματική μου εργασία, το 1979,
βρίσκω το απόσπασμα που ακολουθεί:
.
. . Σήμερα μάλιστα άρχισα να ασχολούμαι ενεργά με έναν PC υπολογιστή που διαθέτει ο ΑΗΣ (πακέτο dbase III plus κ.λ.π.).
Τότε, λοιπόν, ξεκίνησαν όλα. Θυμάμαι πόσο αγάπησα
την συγκεκριμένη ενασχόληση. Τα απογεύματα που, αμισθί, παρέμενα στο γραφείο
για να διαβάσω και να μάθω το άγιο DOS. Τότε που για να χρησιμοποιήσεις τον Η/Υ έπρεπε να
πληκτρολογείς υπαρκτές εντολές και όχι να κουνάς ένα ποντίκι και όπου σε
βγάλει.
Θυμάμαι και μία περίπτωση που, βραδάκι, μπήκε στο
γραφείο που διάβαζα μία νυχτερίδα! Είδα και έπαθα μέχρι να καταφέρω να την βγάλω σώα έξω από το γραφείο.
Ασχολήθηκα, λοιπόν και κυρίως, με την dBase III Plus η οποία δεν ήταν παρά
ένα σύστημα διαχείρισης βάσεων δεδομένων για τα, τότε, λειτουργικά συστήματα CP/M και DOS. Αγόρασα, μάλιστα, και το βιβλίο: «Εισαγωγή και Προγραμματισμός με την dBASE» του Κ. Καραΐσκου, έκδοση «Α. Παπασωτηρίου», στις
27/11/87 (αμ’ έπος αμ’ έργον) με κόστος 4,69 €. Ένα βιβλίο το οποίο, προφανώς,
με βοήθησε και από την άλλη με εξόργισε με τα αισχρά Ελληνικά του! Το ωραίο
είναι ότι, για την συγκεκριμένη έκδοση, υπήρχε και «επιμελητής»! Ατυχώς το
βιβλίο αυτό δεν υπάρχει, πλέον, στην βιβλιοθήκη μου. Ας όψεται το «Project Δήμητρα»!
Το ένα φέρνει το άλλο. Από την dBase III Plus πέρασα στο Clipper της Nantucket. To Clipper ήταν μία γλώσσα προγραμματισμού που επέτρεπε την
κατασκευή εφαρμογών διαχείρισης βάσεων δεδομένων που «έτρεχαν» σε περιβάλλον DOS. Σε Clipper,
λοιπόν, είναι τα προγράμματα εκτυπώσεις των οποίων βρήκα αδειάζοντας, πώς να το
πω;, το γραφείο μου.
Το αγάπησα το Clipper! Ξόδεψα δεκάδες ώρες μελετώντας το. Άρχισα, έτσι, να
προγραμματίζω. Θυμάμαι ότι έγραφα τα προγράμματα μου στο σπίτι, στο οποίο δεν
είχα, Η/Υ και είχα την αγωνία να πάω στο γραφείο να τα «τρέξω» και να δω αν και
πώς λειτουργούν. Με μεθούσε ο προγραμματισμός! Μου έδινε υψηλή πνευματική
απόλαυση. Το να ξεπερνάω προβλήματα, να εφευρίσκω λύσεις, να εμπλουτίζω τις
εφαρμογές με νέες δυνατότητες ήταν το καλύτερό μου!
Δουλεύαμε με δισκέτες τότε. Αρχικά 5 ¼ και κατόπιν 3,5 ιντσών. Οι
χωρητικότητες, με τα σημερινά μέτρα, κυριολεκτικά αστείες! Από 360 ΚΒ
μέχρι 1,44 ΜΒ! Θυμάμαι, λοιπόν, ότι, μέχρι να αποκτήσουμε εκτυπωτή στη
υπηρεσία, πήγαινα και εκτύπωνα τα προγράμματά μου σε μία Εταιρεία, με την οποία
συνεργαζόμασταν, προκειμένου να μπορώ να τα μελετήσω/ βελτιστοποιήσω απόγευμα
και βράδυ στο σπίτι. Τέτοιο πάθος!
Εξακολουθούσα να αγοράζω, προσωπικά ή / και
υπηρεσιακά, σχετικά βιβλία κυρίως, πλέον, για το Clipper. Αγαπημένο βιβλίο το “The Clipper Interface Handbook” του John Mueller (Windcrest / McGraw – Hill) το οποίο αγόρασα στις 26/5/1992 με κόστος 20,83 €.
Ατυχώς, και πάλι, έπεσε και αυτό θύμα του «Project Δήμητρα».
Η πρώτη εφαρμογή που έφτιαξα ήταν, αν θυμάμαι καλά,
σχετική με την αξιολόγηση μισθωτών. Μια εφαρμογή που έδινε τη δυνατότητα να αξιολογήσεις
(βαθμολογήσεις) να κατατάξεις και να έχεις πρόσβαση σε ένα πλήθος στατιστικών
στοιχείων. Ακολούθησαν, μεταξύ άλλων, μία εφαρμογή για την μισθοδοσία του
εκτάκτου προσωπικού και μία για την σύνταξη του Ετήσιου Προϋπολογισμού. Αυτή η
τελευταία θα πρέπει να ήταν από τις πρώτες, στην υπηρεσία, που προέκυπτε από
προγραμματισμό με τους Πίνακες Προϋπολογισμού εκτυπωμένους, με dot matrix εκτυπωτή, και όχι
δακτυλογραφημένους. Μια εφαρμογή για την οποία η δακτυλογράφος, που μέχρι τότε
δακτυλογραφούσε, κυρίως υπερωριακά, τους σχετικούς Πίνακες μου έκοψε
την «Καλημέρα»!
Ακολούθησαν εφαρμογές, όταν πια είχα μετατεθεί στην
Αθήνα τον Σεπτέμβριο του 1993, για την καταχώριση και επεξεργασία υπηρεσιακών
πληροφοριών για τους μισθωτούς, για την επίδοση «φύλλων επιστράτευσης», ανάλογα
με τον συνδικαλιστικό φορέα των εργαζομένων και, κυρίως, την τήρηση Πρωτοκόλλου
Εισερχομένων / Εξερχομένων εγγράφων στην κεντρική υπηρεσία. Η τελευταία αυτή
εφαρμογή ήταν και η «βαρύτερη» που είχα φτιάξει και έλυσε αρκετά προβλήματα επί
τριετία τουλάχιστον.
Είχε έλθει πλέον η εποχή του λειτουργικού συστήματος
Windows, κυρίως η έκδοσή
του 3.1 το 1992, και η Nantucket, η
Εταιρεία που είχε κατασκευάσει και καθιερώσει το Clipper, δεν μπόρεσε να προσαρμοστεί στην «παραθυρική» εποχή.
Έσβησε! Στην ουσία την ακολούθησα! Άλλαξε και το αντικείμενο εργασίας μου και
παράτησα τον προγραμματισμό. Έμεινα το διάστημα 1987 – 1994 να μου θυμίζει την
πνευματική χαρά και την ανάταση που μου είχε χαρίσει!
Έψαξα τον Η/Υ της Τ47 και, βεβαίως, είχα κρατήσει
αντίγραφα από τα Προγράμματα αυτά. Αντίγραφα δισκετών και στο σύνολο τους.
Αρχεία EXE, DBF, NTX, BAT. Όλα! Δεν επιθυμώ να
επεκταθώ σε τεχνικές λεπτομέρειες που ούτε εγώ πλέον καλοθυμάμαι. Θα παραθέσω όμως,
έτσι για να πάρετε μία γεύση, τον κώδικα μιας διαδικασίας (Procedure) και μίας συνάρτησης (Function). Ιδού:
**************************************************************
PROCEDURE MY_DBU( nTop,
nLeft, nBottom, nRight, aEPIKEF, aPEDIO, ;
aPERIOXH,
nPEDIA, aPLATOS, aTEXT, MyPlik )
**************************************************************
*Περιγραφή ----->
Συνάρτηση Εμφάνισης/Ενημέρωσης Αρχείου DBF
LOCAL browse // Το αντικείμενο
TBrowse
LOCAL cColorSave, nCursSave // "Φύλακες" Καταστάσεων
LOCAL nKeY // Πληκτροπάτημα
LOCAL lMore
// Έλεγχος
Βρόχου
LOCAL Fouli // Για να κάνουμε,
επιτέλους, την δουλειά μας
LOCAL column // Aμ πώς θα την
γαζώσουμε !
LOCAL lSavReadExit := READEXIT( .T. ) // Ενεργοποίηση πλήκτρων Άνω/Κάτω
//
για Εξοδο από READ
LOCAL SSS
MEMVAR QUI, MyFunc2
browse := TBrowseDB( nTop, nLeft,
nBottom, nRight )
FOR Fouli=1 TO nPEDIA
column := TBColumnNew( aEPIKEF[fouli],
;
FieldWblock( aPEDIO[fouli],
aPERIOXH[fouli] ) )
column : width := aPLATOS[Fouli]
browse : addColumn(column)
NEXT
TURN_OFF_APPEND_MODE(browse)
browse:skipBlock := { |x| Skipper(x,
browse) }
browse:headSep := MY_HEADSEP
browse:colSep := MY_COLSEP
browse:footSep := MY_FOOTSEP
FancyColors(browse)
cColorSave := SetColor("N/W")
ANTIL( PADC( aTEXT[1], T_STL+1 ), 0, 7, 7
)
ANTIL( PADC( aTEXT[2], T_STL+1 ),
T_GRM-1, 7, 7 )
ANTIL( PADC( aTEXT[3], T_STL+1 ), T_GRM,
7, 7 )
SetColor( "N/W" )
DISPBOX( nTop-1, nLeft-2, nBottom,
nRight+2, 2 ) // αντί nBottom + 1
SetColor("W/W")
@ nTop, nLeft-1 CLEAR TO nBottom-1,
nRight+1 // αντί nBottom
SetColor( "N/W" )
@ nTop+1, nLeft-2 SAY CHR(204) + CHR(205) // Για να οι του έσω
πλαισίου
@ nTop+1, nRight+1 SAY CHR(205) + CHR(185) // γραμμές κλείνουν
SetColor(cColorSave)
nCursSave := SetCursor(SC_NONE)
lMore := .T.
DO WHILE lMore // Βρόχος Βασικός κι
Ασήκωτος
if ( Browse:colPos <= Browse:freeze )
Browse:colPos := ( Browse:freeze + 1
)
endif
nKeY := 0
DO WHILE nKeY == 0 .AND. .NOT.
browse:stable
browse:stabilize()
nKeY := Hot_InKey()
ENDDO
* Αριθμός Εγγραφής / Σύνολο Εγγραφών
@ nBottom, nRight-16 SAY "[ "
+ STR( RECNO(), 5 ) + ;
" / "
+ STR( LASTREC(), 5 ) + " ]" ;
COLOR
"N/W"
IF DELETED()
@ nTop-1, nRight-16 SAY "<
Διεγράφη >" ;
COLOR IF( QUI,
"W+/R", "N/W" )
ELSE
@ nTop-1, nRight-16 SAY REPLICATE(
CHR(205), 13 ) ;
COLOR "N/W"
ENDIF
SSS := &MyFunc2
IF browse:stable
IF browse:hitBottom .AND. .NOT.
IS_APPEND_MODE(browse)
TURN_ON_APPEND_MODE( Browse )
nKey := K_DOWN
ELSE
IF browse:hitTop .OR.
browse:hitBottom
TONOS( 125, 0 )
ENDIF
browse:refreshCurrent()
ForceStable(browse)
nKeY := HOT_INKEY(0)
ENDIF
ENDIF
IF nKeY == K_ESC
lMore := .F.
ELSE
MYAPPKEY(browse, nKeY, MyPlik )
ENDIF
ENDDO
SETCURSOR(nCursSave)
READEXIT( lSavReadExit )
RETURN
*********************
FUNCTION SEEK_AP()
*********************
LOCAL REC, SCR, mAREGG
MEMVAR InOut
REC := RECNO()
DBSETORDER( 1 )
SCR := SCRNSAVE( T_GRM-2, 0, T_GRM, T_STL )
IF InOut < 3
mAREGG := DTOC(DATE())
ELSE
mAREGG := SPACE(2)
ENDIF
XROMA(1)
ANTIL( PADC( " ΠΛΗΚΤΡΟΛΟΓΕΙΣΤΕ " + ;
IIF( InOut<3 o:p="">3>