2011. január 27.

Korszerű programozás?

Már jó ideje nem írtam ide. Ennek egy oka volt: programot kellett írnom. De nem is akármilyet. Az volt az igény, hogy Windows-on és Dos-on is működjön. A Delphi az utóbbi kitétel miatt kilőve.
Aztán eszembe jutott, hogy a volt munkahelyemen (a kenyérgyárban) is dosos programmal dolgoztunk amit Clipper-ben írtak kb. 22 évvel ezelőtt. Így muszály volt nekem is megtanulni ezt a rég elfeledett nyelvet ami első látásra igen könnyűnek látszik, ha jobban megnézed akkor azért húzod a szád.

Clipperben olyan, hogy SQL? Ne is álmodjunk róla. Egy csoportváltásos lista így néz ki:
DO WHILE !EOF()
   SR:=SR+1
   IF MSOFOR != SOFOR
     @SR, 1 SAY REPLICATE(CHR(205), 130)
     @SR+1, 1 SAY "                                                                                          Összesen:"+STR(OSULY, 8,2)+" "+STR(RERTEK, 10, 2)+" "+STR(EERTEK, 10, 2)
     SR:=62
     STORE 0 TO OSULY, RERTEK, EERTEK
     MSOFOR:=SOFOR
   ENDIF
   IF SR > 60
      EJECT
      STORE 0 TO SR
      LAP:=LAP + 1
      DO ROS_FEJ
   ENDIF
   @SR, 1 SAY CIKKSZAM+" "+MEGNEV+" "+STR(RENDOSSZ, 10, 2)+" "+STR(ELFOGOSSZ, 10, 2)+" "+STR(ELFOGOSSZ - RENDOSSZ, 10, 2)+" "+STR(VISSZOSSZ, 10, 2)+" "+STR(SULYOSSZ, 8, 2)+" "+STR(RENDERTEK, 10, 2)+" "+STR(ELADERTEK, 10, 2)
   OSULY:=OSULY + SULYOSSZ
   RERTEK:=RERTEK + RENDERTEK
   EERTEK:=EERTEK + ELADERTEK
   SKIP
 ENDDO
Ez azt csinálja, hogy sofőrönként kiírja a rendeléseket, cikkszámra gyűjtve amit persze egy korábbi eljárásban szépen összeadtunk egy új *.dbf fájlba.

Érdekes az adatbeviteli technológiája ennek a programnyelvnek. Míg delphiben rádobunk a formra egy menüt, addig clipperben min 20 sor.
PROCEDURE RENDELES
   DECLARE MREND
   DECLARE RKEP
   DECLARE STATIC7, STATIC6
   DECLARE STATIC8
   DECLARE STATIC9 
   @4, 2 CLEAR TO 22, 78
   @24,20 CLEAR TO 24, 40
  
   DO WHILE .T.
     STORE 1 TO HELP_CODE
     DO KERET
     DO PRFEJ WITH "RENDELÉSEK FELVITELE, MÓDOSÍTÁSA"
     STORE 0 TO MREND
     SET COLOR TO &SZIN1
     @ 8, 15, 17, 65 BOX B_SINGLE
     SET COLOR TO &SZIN5
     @10, 20 PROMPT "1 - ELŐZETES RENDELÉSEK FELVITELE         "
     @11, 20 PROMPT "2 - NAPI RENDELÉSEK KEZELÉSE              "
     @12, 20 PROMPT "3 - RENDELÉSEK LEKÉRDEZÉSE                "
     @13, 20 PROMPT "4 - RENDELÉSEK TÖRLÉSE                    "
     @14, 20 PROMPT "5 - RENDELÉSEK BEOLVASÁSA FLOPPYRÓL       "  
     @15, 20 PROMPT "6 - JÁRAT SZERVEZÉS                       "
                       
     MENU TO MREND
     IF MREND = 1
         KERET()
         SAVE SCREEN TO RKEP
         RENDFELV()
         RESTORE SCREEN FROM RKEP
     ELSEIF MREND = 2
         keret()
         RMOD()
     ELSEIF MREND = 3
         KERET()
         REND_KIIR()
     ELSEIF MREND = 4
         KERET()
         REND_TORL()
     ELSEIF MREND = 5
         KERET()
         REND_BE()
     ELSEIF MREND = 6
         DO KERET
         DO TURASZ
     ELSEIF MREND = 0
       EXIT
     ENDIF

   ENDDO

RETURN
Ugye milyen szép. Az adatbevitel is hasonlóan történik:
PROCEDURE T_ADATBE
  DO WHILE .T.
    @6, 20 GET MTURANEV PICTURE "XXXXXXXXXXXXXXXXXXXX" COLOR SZIN6 VALID !EMPTY(MTURANEV)
    @7, 20 GET MSOFOR PICTURE "XXXX" COLOR SZIN6 VALID JOSOFOR(MSOFOR,7,25)
    @8, 20 GET MGK PICTURE "!!!-999" COLOR SZIN6 VALID JOGK(MGK)
    READ
    CLEAR GETS
    IF LASTKEY() = 3 .OR. LASTKEY() = 18
      LOOP
    ENDIF
    SET COLOR TO &SZIN1
    IF LASTKEY() = 27
      TKILEP := .T.
      EXIT
    ENDIF
    DECLARE XM
    STORE 0 TO XM
    STORE ALERT("Helyes a kitöltés?",{"IGEN", "NEM"}) TO XM
    IF LASTKEY() = 27
      TKILEP := .T.
      EXIT
    ENDIF
    IF XM = 1
       EXIT
    ENDIF
  ENDDO
RETURN
Szóval minden adatbevitelhez legalább egy ilyen eljárást kellett megírni, meg még a szövegeket hozzá. 29.887 programsort írtam meg, ami lefordítva 1 Mbyte.

2 megjegyzés:

Endoril írta...

És nem kérdezted a klienst, hogy 2011-ben mi az ótvaros anyjának működjön a cucc DOS-on is? Bírom, hogy a legtöbb helyen úgy le vannak maradva, ahogy illik.

Norbie írta...

Már csak azért, mert mert a 18 gépből 2 van vindóz. :D Jah és a program hálózatban is működik!!! :D

Én nagyon tudok :)